diff --git a/astro.config.mjs b/astro.config.mjs index af736c673..b5892abbd 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -238,6 +238,7 @@ async function config() { // Component overrides components: { CallToAction: './src/components/overrides/CallToAction.astro', + Head: './src/components/overrides/Head.astro', Footer: './src/components/overrides/Footer.astro', Icon: './src/components/overrides/Icon.astro', Header: './src/components/overrides/Header.astro', @@ -295,6 +296,18 @@ async function config() { vite: { plugins: [ + { + name: 'sidebar-topics-custom-icons', + enforce: 'pre', + resolveId(source, importer) { + if ( + source === '@astrojs/starlight/components' && + importer?.split('?')[0].endsWith('/starlight-sidebar-topics/components/Topics.astro') + ) { + return path.resolve('./src/components/overrides/SidebarTopicComponents.ts'); + } + }, + }, { // Patch the Vite logger after config is resolved so the filter applies // to all logging paths, including environment-level loggers in Vite 6+. diff --git a/astro.sidebar.mjs b/astro.sidebar.mjs index 3035757b9..9ddc3ceb3 100644 --- a/astro.sidebar.mjs +++ b/astro.sidebar.mjs @@ -188,7 +188,7 @@ export function generateSidebar() { { label: 'Authors', link: '/merchants/quick-start/', - icon: 'seti:svg', + icon: 'document', items: [ { label: 'Getting started', @@ -501,11 +501,11 @@ export function generateSidebar() { id: 'how-tos', label: 'How-tos', link: '/how-tos/', - icon: 'pencil', + icon: 'lightbulb', items: [ { label: 'Overview', link: '/how-tos/' }, { - label: 'Author how-tos', + label: 'Author How-tos', collapsed: false, items: [ { label: 'Browse All', link: '/how-tos/#for-authors' }, @@ -554,7 +554,7 @@ export function generateSidebar() { ], }, { - label: 'Developer how-tos', + label: 'Developer How-tos', collapsed: false, items: [ { label: 'Browse All', link: '/how-tos/#for-developers' }, diff --git a/package.json b/package.json index aa0c86a2a..f25b2203b 100644 --- a/package.json +++ b/package.json @@ -79,11 +79,11 @@ "prod": "build:prod-fast && preview:prod-fast" }, "dependencies": { - "@dropins/ai-tools": "^1.0.0", "@astrojs/check": "^0.9.8", "@astrojs/react": "4.4.2", "@astrojs/starlight": "0.37.7", "@codesandbox/sandpack-client": "^2.19.8", + "@dropins/ai-tools": "^1.0.0", "@dropins/storefront-account": "~4.2.0", "@dropins/storefront-auth": "~4.1.0", "@dropins/storefront-cart": "3.4.0", @@ -126,6 +126,7 @@ "hastscript": "^9.0.1", "lodash": "^4.18.1", "lodash.escaperegexp": "^4.1.2", + "lucide": "^1.52.0", "mermaid": "^11.12.2", "node-html-parser": "^7.0.1", "prettier": "^3.7.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00b220218..5278d0e45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -160,6 +160,9 @@ importers: lodash.escaperegexp: specifier: ^4.1.2 version: 4.1.2 + lucide: + specifier: ^1.52.0 + version: 1.52.0 mermaid: specifier: ^11.12.2 version: 11.15.0 @@ -4077,6 +4080,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide@1.52.0: + resolution: {integrity: sha512-XlP0U+m3seobjTPfT0Ybg9YqJeTwSxx1I6R2Ty7vwpA/4HtibMbV28p9tW7AnIwb77YkTboK9x/OPBEqGAzCFg==} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -9939,6 +9945,8 @@ snapshots: dependencies: yallist: 3.1.1 + lucide@1.52.0: {} + lz-string@1.5.0: {} magic-string@0.30.21: diff --git a/src/components/HomeHero.astro b/src/components/HomeHero.astro index 9135e6d24..e5a91ed45 100644 --- a/src/components/HomeHero.astro +++ b/src/components/HomeHero.astro @@ -1,175 +1,173 @@ --- import HomeSearch from '@components/HomeSearch.astro'; +import Icon from '@components/overrides/Icon.astro'; +import { Icons } from '@components/overrides/Icons'; import { setBasePath } from '@utils/basePath'; +import { generateSidebar } from '../../astro.sidebar.mjs'; -// Developer directory: six task/topic groups that tile as a clean 3x2 grid. -// Each group title links to that section's overview, so the overview no longer -// repeats as a list item. setBasePath keeps each link correct under the -// production base path, the same helper the site's LinkCard uses. Every path is -// verified in the build. -const sections = [ - { - title: 'Getting started', - link: '/get-started/', - links: [ - { title: 'Prerequisites', link: '/get-started/before-you-start/' }, - { title: 'Backend options', link: '/get-started/backends/' }, - { title: 'Plan your storefront project', link: '/setup/' }, - { title: 'Create a storefront', link: '/get-started/create-storefront/' }, - ], - }, +const menuIcons = Object.fromEntries( + generateSidebar().map(({ label, icon }) => [label, icon]) +) as Record; + +const directories = [ { - title: 'Architecture', - link: '/get-started/architecture/', - links: [ - { title: 'How a page loads', link: '/get-started/architecture/how-a-page-loads/' }, - { title: 'Drop-ins at a glance', link: '/get-started/architecture/drop-ins-at-a-glance/' }, - { title: 'How drop-ins coordinate', link: '/get-started/architecture/drop-ins-on-a-page/' }, + label: 'For developers', + aria: 'Developer documentation', + categories: [ { - title: 'Commerce services at a glance', - link: '/get-started/architecture/commerce-services-and-backends/', + title: 'Getting started', + links: [ + { title: 'Prerequisites', link: '/get-started/before-you-start/' }, + { title: 'Backend options', link: '/get-started/backends/' }, + { title: 'Plan your storefront project', link: '/setup/' }, + { title: 'Create a storefront', link: '/get-started/create-storefront/' }, + ], }, - ], - }, - { - title: 'Blocks', - link: '/blocks/', - links: [ - { title: 'Blocks and drop-ins', link: '/blocks/blocks-and-dropins/' }, - { title: 'Customize blocks', link: '/blocks/customize-blocks/' }, - { title: 'Create commerce blocks', link: '/blocks/create-commerce-blocks/' }, - { title: 'Build custom features', link: '/blocks/build-custom-features/' }, - ], - }, - { - title: 'Drop-ins', - link: '/dropins/all/introduction/', - links: [ - { title: 'Drop-in containers', link: '/dropins/all/containers/' }, - { title: 'Container slots', link: '/dropins/all/slots/' }, - { title: 'Extend a drop-in', link: '/dropins/all/extending/' }, - { title: 'Event bus', link: '/dropins/all/events/' }, - ], - }, - { - title: 'Configuration', - link: '/setup/configuration/', - links: [ - { title: 'Storefront configuration', link: '/setup/configuration/commerce-configuration/' }, - { title: 'Compatibility Package', link: '/setup/configuration/storefront-compatibility/' }, - { title: 'AEM Assets integration', link: '/setup/configuration/aem-assets-configuration/' }, - { title: 'CDN configuration', link: '/setup/configuration/content-delivery-network/' }, - ], - }, - { - title: 'Production', - link: '/setup/launch/', - links: [ - { title: 'Performance best practices', link: '/get-started/performance/' }, - { title: 'Browser compatibility', link: '/get-started/browser-compatibility/' }, - { title: 'Analytics instrumentation', link: '/setup/analytics/instrumentation/' }, - { title: 'SEO overview', link: '/setup/seo/' }, - ], - }, -] as const; - -// Content authors are a co-equal audience, so their links get the same grouped -// grid as the developer directory rather than a single afterthought row. Group -// titles link to each section overview; every path is verified in the build. -const authorSections = [ - { - title: 'Getting started', - link: '/merchants/quick-start/', - links: [ - { title: 'What is a storefront?', link: '/merchants/quick-start/create-content/' }, - { title: 'How a page comes together', link: '/merchants/quick-start/content-model/' }, - { title: 'Your first commerce page', link: '/how-tos/create-commerce-page/' }, - { title: 'Document Authoring', link: '/merchants/quick-start/document-authoring/' }, - ], - }, - { - title: 'Authoring', - link: '/merchants/authoring/', - links: [ - { title: 'Block types', link: '/merchants/blocks/content-commerce-blocks/' }, - { title: 'Page metadata', link: '/merchants/blocks/page-metadata/' }, - { title: 'Block table structure', link: '/merchants/blocks/block-tables/' }, - { title: 'Labels and placeholders', link: '/how-tos/change-labels-and-placeholders/' }, - ], - }, - { - title: 'B2C blocks', - link: '/merchants/blocks/b2c/', - links: [ - { title: 'Product Details', link: '/merchants/blocks/product-details/' }, - { title: 'Product List Page', link: '/merchants/blocks/product-list-page/' }, - { title: 'Commerce Cart', link: '/merchants/blocks/commerce-cart/' }, - { title: 'Commerce Checkout', link: '/merchants/blocks/commerce-checkout/' }, - ], - }, - { - title: 'B2B blocks', - link: '/merchants/blocks/b2b/', - links: [ - { title: 'Company Profile', link: '/merchants/blocks/commerce-company-profile/' }, { - title: 'Company Purchase Orders', - link: '/merchants/blocks/commerce-b2b-po-company-purchase-orders/', + title: 'Architecture', + links: [ + { title: 'How a page loads', link: '/get-started/architecture/how-a-page-loads/' }, + { + title: 'Drop-ins at a glance', + link: '/get-started/architecture/drop-ins-at-a-glance/', + }, + { + title: 'How drop-ins coordinate', + link: '/get-started/architecture/drop-ins-on-a-page/', + }, + { + title: 'Commerce services at a glance', + link: '/get-started/architecture/commerce-services-and-backends/', + }, + ], + }, + { + title: 'Blocks', + links: [ + { title: 'Blocks and drop-ins', link: '/blocks/blocks-and-dropins/' }, + { title: 'Customize blocks', link: '/blocks/customize-blocks/' }, + { title: 'Arrange block layouts', link: '/blocks/arrange-block-layouts/' }, + { title: 'Create commerce blocks', link: '/blocks/create-commerce-blocks/' }, + ], }, - { title: 'Negotiable Quote', link: '/merchants/blocks/commerce-b2b-negotiable-quote/' }, - { title: 'Requisition Lists', link: '/merchants/blocks/commerce-b2b-requisition-list/' }, - ], - }, - { - title: 'Customization', - link: '/merchants/content-customizations/', - links: [ - { title: 'Enrichment', link: '/merchants/content-customizations/enrichment/' }, { - title: 'Drop-in experiments', - link: '/merchants/content-customizations/experiments/', + title: 'Drop-ins', + links: [ + { title: 'Drop-in containers', link: '/dropins/all/containers/' }, + { title: 'Container slots', link: '/dropins/all/slots/' }, + { title: 'Extend a drop-in', link: '/dropins/all/extending/' }, + { title: 'Event bus', link: '/dropins/all/events/' }, + ], }, { - title: 'Personalization setup', - link: '/merchants/content-customizations/personalization/', + title: 'Configuration', + links: [ + { + title: 'Storefront configuration', + link: '/setup/configuration/commerce-configuration/', + }, + { + title: 'Compatibility Package', + link: '/setup/configuration/storefront-compatibility/', + }, + { title: 'CORS setup', link: '/setup/configuration/cors-setup/' }, + { title: 'Multistore setup', link: '/setup/configuration/multistore-setup/' }, + ], }, { - title: 'Product recommendations', - link: '/merchants/content-customizations/product-recommendations/', + title: 'Production', + links: [ + { title: 'Launch checklist', link: '/setup/launch/launch-checklist/' }, + { title: 'Performance best practices', link: '/get-started/performance/' }, + { title: 'Analytics instrumentation', link: '/setup/analytics/instrumentation/' }, + { title: 'SEO overview', link: '/setup/seo/' }, + ], }, ], }, { - title: 'Publishing', - link: '/merchants/edge-delivery-services/', - links: [ - { title: 'Scheduling options', link: '/merchants/edge-delivery-services/scheduling/' }, - { title: 'Localization', link: '/merchants/quick-start/content-localization/' }, - { title: 'Redirects', link: '/merchants/edge-delivery-services/redirects/' }, - { title: 'Sitemaps', link: '/merchants/edge-delivery-services/sitemaps/' }, + label: 'For authors', + aria: 'Content author documentation', + categories: [ + { + title: 'Getting started', + links: [ + { title: 'What is a storefront?', link: '/merchants/quick-start/create-content/' }, + { title: 'How a page comes together', link: '/merchants/quick-start/content-model/' }, + { title: 'Your first commerce page', link: '/how-tos/create-commerce-page/' }, + { title: 'Document Authoring', link: '/merchants/quick-start/document-authoring/' }, + ], + }, + { + title: 'Authoring', + links: [ + { title: 'Add a block to a page', link: '/how-tos/add-block-to-page/' }, + { title: 'Block table structure', link: '/merchants/blocks/block-tables/' }, + { title: 'Add page metadata', link: '/how-tos/add-page-metadata/' }, + { + title: 'Labels and placeholders', + link: '/how-tos/change-labels-and-placeholders/', + }, + ], + }, + { + title: 'B2C blocks', + links: [ + { title: 'Product Details', link: '/merchants/blocks/product-details/' }, + { title: 'Product List Page', link: '/merchants/blocks/product-list-page/' }, + { title: 'Commerce Cart', link: '/merchants/blocks/commerce-cart/' }, + { title: 'Commerce Checkout', link: '/merchants/blocks/commerce-checkout/' }, + ], + }, + { + title: 'B2B blocks', + links: [ + { title: 'Company Profile', link: '/merchants/blocks/commerce-company-profile/' }, + { + title: 'Company Purchase Orders', + link: '/merchants/blocks/commerce-b2b-po-company-purchase-orders/', + }, + { title: 'Negotiable Quote', link: '/merchants/blocks/commerce-b2b-negotiable-quote/' }, + { title: 'Requisition Lists', link: '/merchants/blocks/commerce-b2b-requisition-list/' }, + ], + }, + { + title: 'Customization', + links: [ + { title: 'Show enrichment content', link: '/how-tos/show-enrichment-content/' }, + { title: 'Create a page experiment', link: '/how-tos/create-page-experiment/' }, + { title: 'Show targeted content', link: '/how-tos/show-targeted-content/' }, + { title: 'Product recommendations', link: '/how-tos/add-product-recommendations/' }, + ], + }, + { + title: 'Publishing', + links: [ + { title: 'Scheduling options', link: '/merchants/edge-delivery-services/scheduling/' }, + { title: 'Translate content', link: '/how-tos/translate-storefront-content/' }, + { title: 'Redirects', link: '/merchants/edge-delivery-services/redirects/' }, + { title: 'Submit a sitemap', link: '/how-tos/submit-storefront-sitemap/' }, + ], + }, ], }, ] as const; -// Both audience directories share one render below: developer groups first, -// author groups second, each shown as an equal labeled band. -const directories = [ - { label: 'For developers', aria: 'Developer documentation', groups: sections }, - { label: 'For authors', aria: 'Content author documentation', groups: authorSections }, -] as const; - -// Two co-equal audience entries. Developers and content authors are peers here, -// so each gets a matching primary button rather than one funnel favoring a -// single audience. Both paths are verified in the build. const audienceActions = [ { title: 'Developers', link: '/get-started/' }, { title: 'Authors', link: '/merchants/quick-start/' }, ] as const; -// Secondary destinations that follow the primary audience buttons: reference -// material and the release notes. Paths verified in the build. const audiencePaths = [ + { title: 'How-tos', link: '/how-tos/' }, { title: 'API Reference', link: '/reference/' }, + { title: 'Releases', link: '/releases/' }, +] as const; + +const sharedPaths = [ + { title: 'Drop-ins', link: '/dropins/all/introduction/' }, + { title: 'Storefront SDK', link: '/sdk/' }, + { title: 'Team responsibilities', link: '/merchants/blocks/author-and-developer-tasks/' }, { title: 'Release suites', link: '/releases/' }, ] as const; --- @@ -187,17 +185,19 @@ const audiencePaths = [ Commerce drop-in components.

-
+ + diff --git a/src/components/overrides/Head.astro b/src/components/overrides/Head.astro new file mode 100644 index 000000000..6b6eaa4bd --- /dev/null +++ b/src/components/overrides/Head.astro @@ -0,0 +1,20 @@ +--- +import DefaultHead from '@astrojs/starlight/components/Head.astro'; +import '../../fonts/font-face.css'; +import regularFont from '../../fonts/adobe-clean-400.woff2?url'; +import boldFont from '../../fonts/adobe-clean-700.woff2?url'; +import blackFont from '../../fonts/adobe-clean-900.woff2?url'; + +const isHomePage = + Astro.url.pathname.replace(/\/$/, '') === import.meta.env.BASE_URL.replace(/\/$/, ''); +const homeFonts = [regularFont, boldFont]; +--- + + + +{ + isHomePage && + homeFonts.map((href) => ( + + )) +} diff --git a/src/components/overrides/Header.astro b/src/components/overrides/Header.astro index 17bdeb8e3..87408b426 100644 --- a/src/components/overrides/Header.astro +++ b/src/components/overrides/Header.astro @@ -6,8 +6,6 @@ import Search from 'virtual:starlight/components/Search'; import SiteTitle from 'virtual:starlight/components/SiteTitle'; import SocialIcons from 'virtual:starlight/components/SocialIcons'; import ThemeSelect from 'virtual:starlight/components/ThemeSelect'; -import Icon from './Icon.astro'; -import { setBasePath } from '@utils/basePath'; /** * Render the `Search` component if Pagefind is enabled or the default search component has been overridden. diff --git a/src/components/overrides/Icon.astro b/src/components/overrides/Icon.astro index cb82dace8..858f82fa9 100644 --- a/src/components/overrides/Icon.astro +++ b/src/components/overrides/Icon.astro @@ -1,34 +1,68 @@ --- import { Icons } from './Icons'; +import { BookOpen, Braces, FileText, Footprints, Rocket, type IconNode } from 'lucide'; + +const outlineIcons: Partial> = { + 'seti:json': Braces, + document: FileText, + lightbulb: Footprints, + 'open-book': BookOpen, + rocket: Rocket, +}; interface Props { name: keyof typeof Icons; label?: string; color?: string; size?: string; + strokeWidth?: number; + viewBox?: string; class?: string; title?: string; } -const { name, label, size = '1em', color, title } = Astro.props; +const { + name, + label, + size = '22px', + strokeWidth, + viewBox = '0 0 24 24', + color, + title, +} = Astro.props; +const iconNodes = outlineIcons[name]; +const lineWidth = strokeWidth ?? (iconNodes ? 2 : 0); const a11yAttrs = label ? ({ 'aria-label': label } as const) : ({ 'aria-hidden': 'true' } as const); --- + data-icon={name} + viewBox={viewBox} + fill={iconNodes ? 'none' : 'currentColor'}> {title} + { + iconNodes ? ( + iconNodes.map(([Tag, attributes]) => ) + ) : ( + + ) + } - diff --git a/src/components/overrides/Icons.ts b/src/components/overrides/Icons.ts index 4488239cf..a026eb806 100644 --- a/src/components/overrides/Icons.ts +++ b/src/components/overrides/Icons.ts @@ -11,8 +11,10 @@ export const BuiltInIcons = { '', 'left-arrow': '', - time: '', - git: '', + time: + '', + git: + '', terminal: '', lightbulb: @@ -27,22 +29,28 @@ export const BuiltInIcons = { '', sharepoint: '', - node: '', + node: + '', sidekick: '', codesync: '', graphql: '', - js: '', - css: '', - html: '', - bars: '', + js: + '', + css: + '', + html: + '', + bars: + '', translate: '', pencil: '', - pen: '', + pen: + '', document: '', 'add-document': @@ -51,8 +59,10 @@ export const BuiltInIcons = { '', external: '', - moon: '', - sun: '', + moon: + '', + sun: + '', laptop: '', 'open-book': diff --git a/src/components/overrides/SidebarTopicComponents.ts b/src/components/overrides/SidebarTopicComponents.ts new file mode 100644 index 000000000..0d6a8af0c --- /dev/null +++ b/src/components/overrides/SidebarTopicComponents.ts @@ -0,0 +1,2 @@ +export { Badge } from '@astrojs/starlight/components'; +export { default as Icon } from './Icon.astro'; \ No newline at end of file diff --git a/src/components/overrides/SiteTitle.astro b/src/components/overrides/SiteTitle.astro index 9f229747b..e82adf6ba 100644 --- a/src/components/overrides/SiteTitle.astro +++ b/src/components/overrides/SiteTitle.astro @@ -1,27 +1,27 @@ --- -import { logos } from "virtual:starlight/user-images"; -import config from "virtual:starlight/user-config"; -import type { Props } from "@astrojs/starlight/props"; -import { formatPath } from "@utils/format-path"; +import { logos } from 'virtual:starlight/user-images'; +import config from 'virtual:starlight/user-config'; +import type { Props } from '@astrojs/starlight/props'; +import { formatPath } from '@utils/format-path'; -const href = formatPath(Astro.props.locale || "/"); +const href = formatPath(Astro.props.locale || '/'); --- - + { config.logo && logos.dark && ( <> {config.logo.alt} {/* Show light alternate if a user configure both light and dark logos. */} - {!("src" in config.logo) && ( + {!('src' in config.logo) && ( {config.logo.alt} ) } - + {config.title.en} @@ -41,18 +41,18 @@ const href = formatPath(Astro.props.locale || "/"); align-items: center; gap: 0.5rem; font-weight: 900; - font-family: var(--sl-font-system); + font-family: adobe-clean, system-ui, sans-serif; color: var(--sl-color-white); text-decoration: none; white-space: nowrap; padding-left: 0.35rem; - font-size: 1.1rem; + font-size: 1.025rem; line-height: 1; min-height: 32px; } .site-title::after { - content: ""; + content: ''; height: 3rem; border-inline-end: 1px solid var(--sl-color-gray-5); white-space: nowrap; diff --git a/src/content/docs/how-tos/index.mdx b/src/content/docs/how-tos/index.mdx index 010aa91cd..abc5ba383 100644 --- a/src/content/docs/how-tos/index.mdx +++ b/src/content/docs/how-tos/index.mdx @@ -9,13 +9,6 @@ import { CardGrid, LinkCard } from '@astrojs/starlight/components'; Create commerce pages, update storefront content, or customize shopper features. Choose an author task to work with content and settings, or a developer task to change storefront code. - - - - - -If a task needs both content changes and code changes, use [Author and developer tasks](/merchants/blocks/author-and-developer-tasks/) to plan the work together. - ## For authors Start here when your task involves authoring storefront content rather than changing code. diff --git a/src/content/docs/reference/index.mdx b/src/content/docs/reference/index.mdx index ebc799ef4..91de2fb1e 100644 --- a/src/content/docs/reference/index.mdx +++ b/src/content/docs/reference/index.mdx @@ -3,42 +3,19 @@ title: API Reference description: API and component reference for Adobe Commerce storefront drop-ins, the B2B drop-in suite, and the Drop-In SDK. --- -import CardGrid from '@components/CardGrid.astro'; -import LinkCard from '@components/LinkCard.astro'; +import TableWrapper from '@components/TableWrapper.astro'; The reference sections document APIs, slots, functions, events, styles, and dictionaries for every drop-in and SDK utility. Use these pages when you are actively building or customizing drop-in behavior and need to look up specific inputs, outputs, or contracts. - - - - - - + + +| Category | Selected links | +| --- | --- | +| [B2C drop-ins](/dropins/) | [Product Details Page](/dropins/product-details/), [Cart](/dropins/cart/), [Checkout](/dropins/checkout/), [User Account](/dropins/user-account/) | +| [B2B drop-ins](/dropins-b2b/) | [Company Management](/dropins-b2b/company-management/), [Purchase Order](/dropins-b2b/purchase-order/), [Quote Management](/dropins-b2b/quote-management/), [Requisition List](/dropins-b2b/requisition-list/) | +| [Storefront SDK](/sdk/) | [Components](/sdk/components/overview/), [Design](/sdk/design/), [Reference](/sdk/reference/), [Utilities](/sdk/utilities/) | +| [Dropins AI tools](/reference/dropins-ai-tools/) | [Discovery tools](/reference/dropins-ai-tools/#discovery-tools), [Code generation tools](/reference/dropins-ai-tools/#code-generation-tools), [Health and upgrade tools](/reference/dropins-ai-tools/#health-and-upgrade-tools), [Documentation tools](/reference/dropins-ai-tools/#documentation-tools) | +| [API playgrounds](/playgrounds/) | [Commerce API Playground](/playgrounds/commerce-services/), [Commerce Optimizer API Playground](/playgrounds/commerce-optimizer/), [GraphQL reference](/sdk/reference/graphql/), [Commerce services and backends](/get-started/architecture/commerce-services-and-backends/) | +| [Compatibility Package archive](/reference/storefront-compatibility/) | [Adobe Commerce 2.4.8](/reference/storefront-compatibility/v248/), [Adobe Commerce 2.4.7](/reference/storefront-compatibility/v247/), [Compatibility Package](/setup/configuration/storefront-compatibility/), [Adobe Commerce 2.4.9](/setup/configuration/storefront-compatibility/v249/) | + + diff --git a/src/fonts/font-face.css b/src/fonts/font-face.css index 7ff8d4a45..b3b5d8ed2 100644 --- a/src/fonts/font-face.css +++ b/src/fonts/font-face.css @@ -2,7 +2,7 @@ @font-face { font-family: adobe-clean; src: url('./adobe-clean-900.woff2') format('woff2'); - font-display: optional; + font-display: block; font-style: normal; font-weight: 900; size-adjust: 105%; diff --git a/starlight.d.ts b/starlight.d.ts index 943363445..f9ecfb23d 100644 --- a/starlight.d.ts +++ b/starlight.d.ts @@ -1,3 +1,5 @@ +/// + declare module 'virtual:starlight/user-config' { const Config: import('@astrojs/starlight/types').StarlightConfig;