@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.1-develop.7204.1.83330e271e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/build.mjs +11 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/lib/detailHelpers.js +4 -0
- package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +5 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
- package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
- package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
- package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
- package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
- package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
- package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
- package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
- package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
- package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
- package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
- package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
- package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
- package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
- package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menus.js +150 -0
- package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell.js +330 -0
- package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +123 -60
- package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
- package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/charts.js +532 -186
- package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/dates.js +191 -3
- package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/detail.js +118 -77
- package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/display.js +1449 -240
- package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
- package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/filters.js +231 -103
- package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
- package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/icons.js +29 -91
- package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
- package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/library.js +20 -0
- package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +121 -103
- package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
- package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
- package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
- package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
- package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
- package/dist/modules/design_system/gallery/presentation.js +108 -0
- package/dist/modules/design_system/gallery/presentation.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +8 -5
- package/dist/modules/design_system/gallery/registry.js.map +2 -2
- package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
- package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
- package/dist/modules/design_system/i18n/de.json +7167 -0
- package/dist/modules/design_system/i18n/en.json +7167 -0
- package/dist/modules/design_system/i18n/es.json +7167 -0
- package/dist/modules/design_system/i18n/ko.json +7167 -0
- package/dist/modules/design_system/i18n/pl.json +7167 -0
- package/dist/modules/push_notifications/lib/queue.js +1 -31
- package/dist/modules/push_notifications/lib/queue.js.map +2 -2
- package/jest.config.cjs +1 -0
- package/jest.mocks/image.js +1 -0
- package/package.json +8 -8
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/lib/detailHelpers.ts +4 -0
- package/src/modules/customers/lib/todoCompatibility.ts +10 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
- package/src/modules/design_system/gallery/assets/README.md +30 -0
- package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
- package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
- package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
- package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/src/modules/design_system/gallery/assets/select-google.png +0 -0
- package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
- package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
- package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
- package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
- package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
- package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
- package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
- package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
- package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
- package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
- package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
- package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
- package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
- package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
- package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
- package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
- package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
- package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
- package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
- package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
- package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
- package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
- package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
- package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
- package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
- package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
- package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
- package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
- package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
- package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
- package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
- package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
- package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
- package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
- package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
- package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
- package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
- package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
- package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
- package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
- package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
- package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
- package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
- package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
- package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
- package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
- package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
- package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
- package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
- package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
- package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
- package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
- package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
- package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
- package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
- package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
- package/src/modules/design_system/gallery/entries/library.tsx +16 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
- package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
- package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
- package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
- package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
- package/src/modules/design_system/gallery/presentation.ts +106 -0
- package/src/modules/design_system/gallery/registry.ts +8 -6
- package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
- package/src/modules/design_system/i18n/de.json +7112 -3
- package/src/modules/design_system/i18n/en.json +7112 -3
- package/src/modules/design_system/i18n/es.json +7112 -3
- package/src/modules/design_system/i18n/ko.json +7112 -3
- package/src/modules/design_system/i18n/pl.json +7112 -3
- package/src/modules/push_notifications/AGENTS.md +9 -5
- package/src/modules/push_notifications/lib/queue.ts +15 -44
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
3
|
+
import { Label } from '@open-mercato/ui/primitives/label'
|
|
2
4
|
import { CreditCard, LayoutGrid, Settings, ShoppingCart, Truck } from 'lucide-react'
|
|
3
5
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
|
|
4
6
|
import {
|
|
@@ -10,7 +12,7 @@ import {
|
|
|
10
12
|
BreadcrumbPage,
|
|
11
13
|
BreadcrumbSeparator,
|
|
12
14
|
} from '@open-mercato/ui/primitives/breadcrumb'
|
|
13
|
-
import { Pagination } from '@open-mercato/ui/primitives/pagination'
|
|
15
|
+
import { Pagination, type PaginationAppearance } from '@open-mercato/ui/primitives/pagination'
|
|
14
16
|
import {
|
|
15
17
|
SegmentedControl,
|
|
16
18
|
SegmentedControlItem,
|
|
@@ -21,6 +23,10 @@ import {
|
|
|
21
23
|
AccordionItem,
|
|
22
24
|
AccordionTrigger,
|
|
23
25
|
} from '@open-mercato/ui/primitives/accordion'
|
|
26
|
+
import { SidebarExample, SidebarFeatureExample, SidebarIdentityExample, SidebarItemsExample, TopbarExample, NavigationBrandsExample } from '../demos/shell'
|
|
27
|
+
import { shellExampleCode } from '../demos/shell-code.generated'
|
|
28
|
+
import { AiPromptExample, AiIconButtonExamples, AiNavigationExamples, AiSearchExamples, AiAuthExamples, AiSettingsExamples, AiNewChatExample, AiSidebarExample, AiMobileNavigationExample } from '../demos/ai-product'
|
|
29
|
+
import { aiProductExampleCode } from '../demos/ai-product-code.generated'
|
|
24
30
|
import type { GalleryEntry } from '../types'
|
|
25
31
|
|
|
26
32
|
// Component titles and variant names are proper nouns from the codebase and
|
|
@@ -31,11 +37,13 @@ import type { GalleryEntry } from '../types'
|
|
|
31
37
|
// Pagination is a controlled component — these small wrappers own the page
|
|
32
38
|
// state so the preview stays interactive without polluting the entry shape.
|
|
33
39
|
|
|
34
|
-
function PaginationBasicDemo() {
|
|
40
|
+
function PaginationBasicDemo({ appearance, disabled = false }: { appearance?: PaginationAppearance; disabled?: boolean }) {
|
|
35
41
|
const [page, setPage] = React.useState(2)
|
|
36
42
|
const [pageSize, setPageSize] = React.useState(25)
|
|
37
43
|
return (
|
|
38
44
|
<Pagination
|
|
45
|
+
appearance={appearance}
|
|
46
|
+
disabled={disabled}
|
|
39
47
|
page={page}
|
|
40
48
|
pageSize={pageSize}
|
|
41
49
|
total={400}
|
|
@@ -59,6 +67,99 @@ function PaginationCompactDemo() {
|
|
|
59
67
|
)
|
|
60
68
|
}
|
|
61
69
|
|
|
70
|
+
function TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {
|
|
71
|
+
const t = useT()
|
|
72
|
+
const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]
|
|
73
|
+
return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>
|
|
74
|
+
{counts.map(count => <Tabs key={count} defaultValue="1" variant={variant} orientation={orientation} className="min-w-0">
|
|
75
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>
|
|
76
|
+
{orientation === 'vertical' && <span aria-hidden="true" className="px-2 py-1 text-xs font-medium uppercase text-muted-foreground">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}
|
|
77
|
+
{Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className="size-5" />} count={index === 1 ? 12 : undefined}>
|
|
78
|
+
{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}
|
|
79
|
+
</TabsTrigger>)}
|
|
80
|
+
</TabsList>
|
|
81
|
+
{Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className="text-sm text-muted-foreground">
|
|
82
|
+
{t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}
|
|
83
|
+
</TabsContent>)}
|
|
84
|
+
</Tabs>)}
|
|
85
|
+
</div>
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function TabsKeyboardDemo() {
|
|
89
|
+
const t = useT()
|
|
90
|
+
return <Tabs defaultValue="overview" variant="underline" className="w-full">
|
|
91
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.keyboard')}>
|
|
92
|
+
<TabsTrigger value="overview" leading={<LayoutGrid className="size-5" />}>{t('design_system.gallery.examples.navigation2.overview')}</TabsTrigger>
|
|
93
|
+
<TabsTrigger value="locked" disabled count={4}>{t('design_system.gallery.examples.navigation2.locked')}</TabsTrigger>
|
|
94
|
+
<TabsTrigger value="settings" leading={<Settings className="size-5" />}>{t('design_system.gallery.examples.navigation2.settings')}</TabsTrigger>
|
|
95
|
+
</TabsList>
|
|
96
|
+
<TabsContent value="overview">{t('design_system.gallery.examples.navigation2.keyboardHint')}</TabsContent>
|
|
97
|
+
<TabsContent value="settings">{t('design_system.gallery.examples.navigation2.settingsPanel')}</TabsContent>
|
|
98
|
+
</Tabs>
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function BreadcrumbQuantityDemo() {
|
|
102
|
+
const t = useT()
|
|
103
|
+
const targetId = React.useId()
|
|
104
|
+
return <div className="flex w-full flex-col gap-4">
|
|
105
|
+
{(['arrow', 'slash', 'dot'] as const).map(divider => <div key={divider} className="flex flex-col gap-4">
|
|
106
|
+
{[3, 4, 5].map(count => <Breadcrumb key={count} divider={divider} aria-label={t('design_system.gallery.examples.navigation2.path', { count })}>
|
|
107
|
+
<BreadcrumbList className="flex-wrap">
|
|
108
|
+
{Array.from({ length: count }, (_, index) => <React.Fragment key={index}>
|
|
109
|
+
{index > 0 && <BreadcrumbSeparator className="size-5 justify-center">{divider === 'dot' ? '•' : undefined}</BreadcrumbSeparator>}
|
|
110
|
+
<BreadcrumbItem>
|
|
111
|
+
{index === count - 1
|
|
112
|
+
? <BreadcrumbPage>{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbPage>
|
|
113
|
+
: <BreadcrumbLink href={`#${targetId}`}><LayoutGrid className="size-5" aria-hidden="true" />{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbLink>}
|
|
114
|
+
</BreadcrumbItem>
|
|
115
|
+
</React.Fragment>)}
|
|
116
|
+
</BreadcrumbList>
|
|
117
|
+
</Breadcrumb>)}
|
|
118
|
+
</div>)}
|
|
119
|
+
<p id={targetId} tabIndex={-1} className="text-sm text-muted-foreground">{t('design_system.gallery.examples.navigation2.localDestination')}</p>
|
|
120
|
+
</div>
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function AccordionStartDemo() {
|
|
124
|
+
const t = useT()
|
|
125
|
+
return <Accordion type="single" collapsible defaultValue="details" className="w-full max-w-md space-y-2">
|
|
126
|
+
<AccordionItem value="overview">
|
|
127
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.overview')}</AccordionTrigger>
|
|
128
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
129
|
+
</AccordionItem>
|
|
130
|
+
<AccordionItem value="details">
|
|
131
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.settings')}</AccordionTrigger>
|
|
132
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
133
|
+
</AccordionItem>
|
|
134
|
+
<AccordionItem value="locked" disabled>
|
|
135
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.locked')}</AccordionTrigger>
|
|
136
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
137
|
+
</AccordionItem>
|
|
138
|
+
</Accordion>
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {
|
|
142
|
+
const t = useT()
|
|
143
|
+
const labelId = React.useId()
|
|
144
|
+
const [value, setValue] = React.useState('overview')
|
|
145
|
+
const options = [
|
|
146
|
+
{ value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className="size-5" aria-hidden="true" /> },
|
|
147
|
+
{ value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className="size-5" aria-hidden="true" /> },
|
|
148
|
+
{ value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className="size-5" aria-hidden="true" /> },
|
|
149
|
+
]
|
|
150
|
+
return <div className="flex w-full max-w-sm flex-col gap-6">
|
|
151
|
+
{[false, true].map(disabled => <div key={String(disabled)} className="flex flex-col gap-1.5">
|
|
152
|
+
<Label id={`${labelId}-${disabled}`} className="leading-5">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>
|
|
153
|
+
<SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={`${labelId}-${disabled}`} className="h-9 w-full gap-1 rounded-lg border-0 p-1">
|
|
154
|
+
{options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className="h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1">
|
|
155
|
+
{content !== 'text' && option.icon}
|
|
156
|
+
{content !== 'icon' && option.label}
|
|
157
|
+
</SegmentedControlItem>)}
|
|
158
|
+
</SegmentedControl>
|
|
159
|
+
</div>)}
|
|
160
|
+
</div>
|
|
161
|
+
}
|
|
162
|
+
|
|
62
163
|
const tabsEntry: GalleryEntry = {
|
|
63
164
|
id: 'tabs',
|
|
64
165
|
title: 'Tabs',
|
|
@@ -78,30 +179,7 @@ const tabsEntry: GalleryEntry = {
|
|
|
78
179
|
title: 'underline',
|
|
79
180
|
// Underline is the DS canon for page-level tab strips — flat rail
|
|
80
181
|
// with an accent underline, per-tab `leading` icon and `count` badge.
|
|
81
|
-
render: () =>
|
|
82
|
-
<Tabs defaultValue="orders" variant="underline" className="w-full">
|
|
83
|
-
<TabsList aria-label="Customer sections">
|
|
84
|
-
<TabsTrigger value="overview" leading={<LayoutGrid className="size-4" />}>
|
|
85
|
-
Overview
|
|
86
|
-
</TabsTrigger>
|
|
87
|
-
<TabsTrigger value="orders" leading={<ShoppingCart className="size-4" />} count={12}>
|
|
88
|
-
Orders
|
|
89
|
-
</TabsTrigger>
|
|
90
|
-
<TabsTrigger value="settings" leading={<Settings className="size-4" />}>
|
|
91
|
-
Settings
|
|
92
|
-
</TabsTrigger>
|
|
93
|
-
</TabsList>
|
|
94
|
-
<TabsContent value="overview">
|
|
95
|
-
<p className="text-sm text-muted-foreground">Customer overview panel.</p>
|
|
96
|
-
</TabsContent>
|
|
97
|
-
<TabsContent value="orders">
|
|
98
|
-
<p className="text-sm text-muted-foreground">12 orders in the last 30 days.</p>
|
|
99
|
-
</TabsContent>
|
|
100
|
-
<TabsContent value="settings">
|
|
101
|
-
<p className="text-sm text-muted-foreground">Notification and access settings.</p>
|
|
102
|
-
</TabsContent>
|
|
103
|
-
</Tabs>
|
|
104
|
-
),
|
|
182
|
+
render: () => <TabsNavigationUnderlineSample />,
|
|
105
183
|
code: `import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'
|
|
106
184
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
|
|
107
185
|
|
|
@@ -119,24 +197,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primi
|
|
|
119
197
|
{
|
|
120
198
|
id: 'pill',
|
|
121
199
|
title: 'pill (default)',
|
|
122
|
-
render: () =>
|
|
123
|
-
<Tabs defaultValue="preview">
|
|
124
|
-
<TabsList aria-label="Editor view">
|
|
125
|
-
<TabsTrigger value="preview">Preview</TabsTrigger>
|
|
126
|
-
<TabsTrigger value="code">Code</TabsTrigger>
|
|
127
|
-
<TabsTrigger value="logs">Logs</TabsTrigger>
|
|
128
|
-
</TabsList>
|
|
129
|
-
<TabsContent value="preview">
|
|
130
|
-
<p className="text-sm text-muted-foreground">Rendered preview.</p>
|
|
131
|
-
</TabsContent>
|
|
132
|
-
<TabsContent value="code">
|
|
133
|
-
<p className="text-sm text-muted-foreground">Source code panel.</p>
|
|
134
|
-
</TabsContent>
|
|
135
|
-
<TabsContent value="logs">
|
|
136
|
-
<p className="text-sm text-muted-foreground">Runtime logs panel.</p>
|
|
137
|
-
</TabsContent>
|
|
138
|
-
</Tabs>
|
|
139
|
-
),
|
|
200
|
+
render: () => <TabsNavigationPillSample />,
|
|
140
201
|
code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
|
|
141
202
|
|
|
142
203
|
<Tabs defaultValue="preview">
|
|
@@ -153,24 +214,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primi
|
|
|
153
214
|
{
|
|
154
215
|
id: 'pill-vertical',
|
|
155
216
|
title: 'pill, vertical',
|
|
156
|
-
render: () =>
|
|
157
|
-
<Tabs defaultValue="profile" orientation="vertical" className="w-full">
|
|
158
|
-
<TabsList aria-label="Account settings">
|
|
159
|
-
<TabsTrigger value="profile">Profile</TabsTrigger>
|
|
160
|
-
<TabsTrigger value="billing">Billing</TabsTrigger>
|
|
161
|
-
<TabsTrigger value="security">Security</TabsTrigger>
|
|
162
|
-
</TabsList>
|
|
163
|
-
<TabsContent value="profile">
|
|
164
|
-
<p className="text-sm text-muted-foreground">Profile settings panel.</p>
|
|
165
|
-
</TabsContent>
|
|
166
|
-
<TabsContent value="billing">
|
|
167
|
-
<p className="text-sm text-muted-foreground">Billing settings panel.</p>
|
|
168
|
-
</TabsContent>
|
|
169
|
-
<TabsContent value="security">
|
|
170
|
-
<p className="text-sm text-muted-foreground">Security settings panel.</p>
|
|
171
|
-
</TabsContent>
|
|
172
|
-
</Tabs>
|
|
173
|
-
),
|
|
217
|
+
render: () => <TabsNavigationPillVerticalSample />,
|
|
174
218
|
code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'
|
|
175
219
|
|
|
176
220
|
<Tabs defaultValue="profile" orientation="vertical">
|
|
@@ -184,11 +228,123 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primi
|
|
|
184
228
|
<TabsContent value="security">…</TabsContent>
|
|
185
229
|
</Tabs>`,
|
|
186
230
|
},
|
|
231
|
+
{
|
|
232
|
+
id: 'underline-quantities',
|
|
233
|
+
title: 'underline · all source counts',
|
|
234
|
+
render: () => <TabsQuantityDemo variant="underline" orientation="horizontal" />,
|
|
235
|
+
code: `import * as React from 'react'
|
|
236
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
237
|
+
import { LayoutGrid, Settings } from 'lucide-react'
|
|
238
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'
|
|
239
|
+
|
|
240
|
+
function TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {
|
|
241
|
+
const t = useT()
|
|
242
|
+
const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]
|
|
243
|
+
return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>
|
|
244
|
+
{counts.map(count => <Tabs key={count} defaultValue="1" variant={variant} orientation={orientation} className="min-w-0">
|
|
245
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>
|
|
246
|
+
{orientation === 'vertical' && <span aria-hidden="true" className="px-2 py-1 text-xs font-medium uppercase text-muted-foreground">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}
|
|
247
|
+
{Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className="size-5" />} count={index === 1 ? 12 : undefined}>
|
|
248
|
+
{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}
|
|
249
|
+
</TabsTrigger>)}
|
|
250
|
+
</TabsList>
|
|
251
|
+
{Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className="text-sm text-muted-foreground">
|
|
252
|
+
{t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}
|
|
253
|
+
</TabsContent>)}
|
|
254
|
+
</Tabs>)}
|
|
255
|
+
</div>
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
<TabsQuantityDemo variant="underline" orientation="horizontal" />`,
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: 'card-quantities',
|
|
262
|
+
title: 'card · all source counts',
|
|
263
|
+
render: () => <TabsQuantityDemo variant="card" orientation="vertical" />,
|
|
264
|
+
code: `import * as React from 'react'
|
|
265
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
266
|
+
import { LayoutGrid, Settings } from 'lucide-react'
|
|
267
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'
|
|
268
|
+
|
|
269
|
+
function TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {
|
|
270
|
+
const t = useT()
|
|
271
|
+
const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]
|
|
272
|
+
return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>
|
|
273
|
+
{counts.map(count => <Tabs key={count} defaultValue="1" variant={variant} orientation={orientation} className="min-w-0">
|
|
274
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>
|
|
275
|
+
{orientation === 'vertical' && <span aria-hidden="true" className="px-2 py-1 text-xs font-medium uppercase text-muted-foreground">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}
|
|
276
|
+
{Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className="size-5" />} count={index === 1 ? 12 : undefined}>
|
|
277
|
+
{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}
|
|
278
|
+
</TabsTrigger>)}
|
|
279
|
+
</TabsList>
|
|
280
|
+
{Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className="text-sm text-muted-foreground">
|
|
281
|
+
{t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}
|
|
282
|
+
</TabsContent>)}
|
|
283
|
+
</Tabs>)}
|
|
284
|
+
</div>
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
<TabsQuantityDemo variant="card" orientation="vertical" />`,
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
id: 'list-quantities',
|
|
291
|
+
title: 'list · all source counts',
|
|
292
|
+
render: () => <TabsQuantityDemo variant="list" orientation="vertical" />,
|
|
293
|
+
code: `import * as React from 'react'
|
|
294
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
295
|
+
import { LayoutGrid, Settings } from 'lucide-react'
|
|
296
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'
|
|
297
|
+
|
|
298
|
+
function TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {
|
|
299
|
+
const t = useT()
|
|
300
|
+
const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]
|
|
301
|
+
return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>
|
|
302
|
+
{counts.map(count => <Tabs key={count} defaultValue="1" variant={variant} orientation={orientation} className="min-w-0">
|
|
303
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>
|
|
304
|
+
{orientation === 'vertical' && <span aria-hidden="true" className="px-2 py-1 text-xs font-medium uppercase text-muted-foreground">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}
|
|
305
|
+
{Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className="size-5" />} count={index === 1 ? 12 : undefined}>
|
|
306
|
+
{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}
|
|
307
|
+
</TabsTrigger>)}
|
|
308
|
+
</TabsList>
|
|
309
|
+
{Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className="text-sm text-muted-foreground">
|
|
310
|
+
{t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}
|
|
311
|
+
</TabsContent>)}
|
|
312
|
+
</Tabs>)}
|
|
313
|
+
</div>
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
<TabsQuantityDemo variant="list" orientation="vertical" />`,
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
id: 'keyboard-states',
|
|
320
|
+
title: 'Keyboard and disabled tabs',
|
|
321
|
+
render: () => <TabsKeyboardDemo />,
|
|
322
|
+
code: `import * as React from 'react'
|
|
323
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
324
|
+
import { LayoutGrid, Settings } from 'lucide-react'
|
|
325
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'
|
|
326
|
+
|
|
327
|
+
function TabsKeyboardDemo() {
|
|
328
|
+
const t = useT()
|
|
329
|
+
return <Tabs defaultValue="overview" variant="underline" className="w-full">
|
|
330
|
+
<TabsList aria-label={t('design_system.gallery.examples.navigation2.keyboard')}>
|
|
331
|
+
<TabsTrigger value="overview" leading={<LayoutGrid className="size-5" />}>{t('design_system.gallery.examples.navigation2.overview')}</TabsTrigger>
|
|
332
|
+
<TabsTrigger value="locked" disabled count={4}>{t('design_system.gallery.examples.navigation2.locked')}</TabsTrigger>
|
|
333
|
+
<TabsTrigger value="settings" leading={<Settings className="size-5" />}>{t('design_system.gallery.examples.navigation2.settings')}</TabsTrigger>
|
|
334
|
+
</TabsList>
|
|
335
|
+
<TabsContent value="overview">{t('design_system.gallery.examples.navigation2.keyboardHint')}</TabsContent>
|
|
336
|
+
<TabsContent value="settings">{t('design_system.gallery.examples.navigation2.settingsPanel')}</TabsContent>
|
|
337
|
+
</Tabs>
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
<TabsKeyboardDemo />`,
|
|
341
|
+
},
|
|
187
342
|
],
|
|
188
343
|
}
|
|
189
344
|
|
|
190
345
|
const breadcrumbEntry: GalleryEntry = {
|
|
191
346
|
id: 'breadcrumb',
|
|
347
|
+
figmaNodeId: '447:8832',
|
|
192
348
|
title: 'Breadcrumb',
|
|
193
349
|
importPath: '@open-mercato/ui/primitives/breadcrumb',
|
|
194
350
|
docsAnchor: '#breadcrumb',
|
|
@@ -196,23 +352,7 @@ const breadcrumbEntry: GalleryEntry = {
|
|
|
196
352
|
{
|
|
197
353
|
id: 'slash',
|
|
198
354
|
title: 'slash (default)',
|
|
199
|
-
render: () =>
|
|
200
|
-
<Breadcrumb>
|
|
201
|
-
<BreadcrumbList>
|
|
202
|
-
<BreadcrumbItem>
|
|
203
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">Dashboard</BreadcrumbLink>
|
|
204
|
-
</BreadcrumbItem>
|
|
205
|
-
<BreadcrumbSeparator />
|
|
206
|
-
<BreadcrumbItem>
|
|
207
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">Products</BreadcrumbLink>
|
|
208
|
-
</BreadcrumbItem>
|
|
209
|
-
<BreadcrumbSeparator />
|
|
210
|
-
<BreadcrumbItem>
|
|
211
|
-
<BreadcrumbPage>Winter catalog</BreadcrumbPage>
|
|
212
|
-
</BreadcrumbItem>
|
|
213
|
-
</BreadcrumbList>
|
|
214
|
-
</Breadcrumb>
|
|
215
|
-
),
|
|
355
|
+
render: () => <BreadcrumbNavigationSlashSample />,
|
|
216
356
|
code: `import {
|
|
217
357
|
Breadcrumb,
|
|
218
358
|
BreadcrumbItem,
|
|
@@ -241,23 +381,7 @@ const breadcrumbEntry: GalleryEntry = {
|
|
|
241
381
|
{
|
|
242
382
|
id: 'arrow',
|
|
243
383
|
title: 'arrow divider',
|
|
244
|
-
render: () =>
|
|
245
|
-
<Breadcrumb divider="arrow">
|
|
246
|
-
<BreadcrumbList>
|
|
247
|
-
<BreadcrumbItem>
|
|
248
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">Orders</BreadcrumbLink>
|
|
249
|
-
</BreadcrumbItem>
|
|
250
|
-
<BreadcrumbSeparator />
|
|
251
|
-
<BreadcrumbItem>
|
|
252
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">#20418</BreadcrumbLink>
|
|
253
|
-
</BreadcrumbItem>
|
|
254
|
-
<BreadcrumbSeparator />
|
|
255
|
-
<BreadcrumbItem>
|
|
256
|
-
<BreadcrumbPage>Shipment</BreadcrumbPage>
|
|
257
|
-
</BreadcrumbItem>
|
|
258
|
-
</BreadcrumbList>
|
|
259
|
-
</Breadcrumb>
|
|
260
|
-
),
|
|
384
|
+
render: () => <BreadcrumbNavigationArrowSample />,
|
|
261
385
|
code: `import {
|
|
262
386
|
Breadcrumb,
|
|
263
387
|
BreadcrumbItem,
|
|
@@ -286,27 +410,7 @@ const breadcrumbEntry: GalleryEntry = {
|
|
|
286
410
|
{
|
|
287
411
|
id: 'ellipsis',
|
|
288
412
|
title: 'collapsed (ellipsis)',
|
|
289
|
-
render: () =>
|
|
290
|
-
<Breadcrumb>
|
|
291
|
-
<BreadcrumbList>
|
|
292
|
-
<BreadcrumbItem>
|
|
293
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">Dashboard</BreadcrumbLink>
|
|
294
|
-
</BreadcrumbItem>
|
|
295
|
-
<BreadcrumbSeparator />
|
|
296
|
-
<BreadcrumbItem>
|
|
297
|
-
<BreadcrumbEllipsis />
|
|
298
|
-
</BreadcrumbItem>
|
|
299
|
-
<BreadcrumbSeparator />
|
|
300
|
-
<BreadcrumbItem>
|
|
301
|
-
<BreadcrumbLink href="#gallery-entry-breadcrumb">Attributes</BreadcrumbLink>
|
|
302
|
-
</BreadcrumbItem>
|
|
303
|
-
<BreadcrumbSeparator />
|
|
304
|
-
<BreadcrumbItem>
|
|
305
|
-
<BreadcrumbPage>Color</BreadcrumbPage>
|
|
306
|
-
</BreadcrumbItem>
|
|
307
|
-
</BreadcrumbList>
|
|
308
|
-
</Breadcrumb>
|
|
309
|
-
),
|
|
413
|
+
render: () => <BreadcrumbNavigationEllipsisSample />,
|
|
310
414
|
code: `import {
|
|
311
415
|
Breadcrumb,
|
|
312
416
|
BreadcrumbEllipsis,
|
|
@@ -337,6 +441,39 @@ const breadcrumbEntry: GalleryEntry = {
|
|
|
337
441
|
</BreadcrumbList>
|
|
338
442
|
</Breadcrumb>`,
|
|
339
443
|
},
|
|
444
|
+
{
|
|
445
|
+
id: 'dividers-quantities',
|
|
446
|
+
title: 'Arrow / Slash / Dot ·3,4,5items',
|
|
447
|
+
render: () => <BreadcrumbQuantityDemo />,
|
|
448
|
+
code: `import * as React from 'react'
|
|
449
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
450
|
+
import { LayoutGrid } from 'lucide-react'
|
|
451
|
+
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbSeparator, BreadcrumbLink, BreadcrumbPage } from '@open-mercato/ui/primitives/breadcrumb'
|
|
452
|
+
|
|
453
|
+
function BreadcrumbQuantityDemo() {
|
|
454
|
+
const t = useT()
|
|
455
|
+
const targetId = React.useId()
|
|
456
|
+
return <div className="flex w-full flex-col gap-4">
|
|
457
|
+
{(['arrow', 'slash', 'dot'] as const).map(divider => <div key={divider} className="flex flex-col gap-4">
|
|
458
|
+
{[3, 4, 5].map(count => <Breadcrumb key={count} divider={divider} aria-label={t('design_system.gallery.examples.navigation2.path', { count })}>
|
|
459
|
+
<BreadcrumbList className="flex-wrap">
|
|
460
|
+
{Array.from({ length: count }, (_, index) => <React.Fragment key={index}>
|
|
461
|
+
{index > 0 && <BreadcrumbSeparator className="size-5 justify-center">{divider === 'dot' ? '•' : undefined}</BreadcrumbSeparator>}
|
|
462
|
+
<BreadcrumbItem>
|
|
463
|
+
{index === count - 1
|
|
464
|
+
? <BreadcrumbPage>{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbPage>
|
|
465
|
+
: <BreadcrumbLink href={\`#\${targetId}\`}><LayoutGrid className="size-5" aria-hidden="true" />{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbLink>}
|
|
466
|
+
</BreadcrumbItem>
|
|
467
|
+
</React.Fragment>)}
|
|
468
|
+
</BreadcrumbList>
|
|
469
|
+
</Breadcrumb>)}
|
|
470
|
+
</div>)}
|
|
471
|
+
<p id={targetId} tabIndex={-1} className="text-sm text-muted-foreground">{t('design_system.gallery.examples.navigation2.localDestination')}</p>
|
|
472
|
+
</div>
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
<BreadcrumbQuantityDemo />`,
|
|
476
|
+
},
|
|
340
477
|
],
|
|
341
478
|
}
|
|
342
479
|
|
|
@@ -345,6 +482,7 @@ const paginationEntry: GalleryEntry = {
|
|
|
345
482
|
title: 'Pagination',
|
|
346
483
|
importPath: '@open-mercato/ui/primitives/pagination',
|
|
347
484
|
docsAnchor: '#pagination',
|
|
485
|
+
figmaNodeId: '513:3892',
|
|
348
486
|
variants: [
|
|
349
487
|
{
|
|
350
488
|
id: 'basic',
|
|
@@ -380,6 +518,83 @@ const [page, setPage] = React.useState(1)
|
|
|
380
518
|
onPageChange={setPage}
|
|
381
519
|
showFirstLast={false}
|
|
382
520
|
showPageSize={false}
|
|
521
|
+
/>`,
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
id: 'source-basic',
|
|
525
|
+
title: 'Basic cells',
|
|
526
|
+
render: () => <PaginationBasicDemo appearance="basic" />,
|
|
527
|
+
code: `import * as React from 'react'
|
|
528
|
+
import { Pagination } from '@open-mercato/ui/primitives/pagination'
|
|
529
|
+
|
|
530
|
+
const [page, setPage] = React.useState(2)
|
|
531
|
+
const [pageSize, setPageSize] = React.useState(25)
|
|
532
|
+
|
|
533
|
+
<Pagination
|
|
534
|
+
appearance="basic"
|
|
535
|
+
page={page}
|
|
536
|
+
pageSize={pageSize}
|
|
537
|
+
total={400}
|
|
538
|
+
onPageChange={setPage}
|
|
539
|
+
onPageSizeChange={setPageSize}
|
|
540
|
+
/>`,
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
id: 'circle',
|
|
544
|
+
title: 'Full radius',
|
|
545
|
+
render: () => <PaginationBasicDemo appearance="circle" />,
|
|
546
|
+
code: `import * as React from 'react'
|
|
547
|
+
import { Pagination } from '@open-mercato/ui/primitives/pagination'
|
|
548
|
+
|
|
549
|
+
const [page, setPage] = React.useState(2)
|
|
550
|
+
const [pageSize, setPageSize] = React.useState(25)
|
|
551
|
+
|
|
552
|
+
<Pagination
|
|
553
|
+
appearance="circle"
|
|
554
|
+
page={page}
|
|
555
|
+
pageSize={pageSize}
|
|
556
|
+
total={400}
|
|
557
|
+
onPageChange={setPage}
|
|
558
|
+
onPageSizeChange={setPageSize}
|
|
559
|
+
/>`,
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
id: 'group',
|
|
563
|
+
title: 'Connected group',
|
|
564
|
+
render: () => <PaginationBasicDemo appearance="group" />,
|
|
565
|
+
code: `import * as React from 'react'
|
|
566
|
+
import { Pagination } from '@open-mercato/ui/primitives/pagination'
|
|
567
|
+
|
|
568
|
+
const [page, setPage] = React.useState(2)
|
|
569
|
+
const [pageSize, setPageSize] = React.useState(25)
|
|
570
|
+
|
|
571
|
+
<Pagination
|
|
572
|
+
appearance="group"
|
|
573
|
+
page={page}
|
|
574
|
+
pageSize={pageSize}
|
|
575
|
+
total={400}
|
|
576
|
+
onPageChange={setPage}
|
|
577
|
+
onPageSizeChange={setPageSize}
|
|
578
|
+
/>`,
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
id: 'disabled',
|
|
582
|
+
title: 'Disabled states',
|
|
583
|
+
render: () => <PaginationBasicDemo appearance="circle" disabled />,
|
|
584
|
+
code: `import * as React from 'react'
|
|
585
|
+
import { Pagination } from '@open-mercato/ui/primitives/pagination'
|
|
586
|
+
|
|
587
|
+
const [page, setPage] = React.useState(2)
|
|
588
|
+
const [pageSize, setPageSize] = React.useState(25)
|
|
589
|
+
|
|
590
|
+
<Pagination
|
|
591
|
+
appearance="circle"
|
|
592
|
+
page={page}
|
|
593
|
+
pageSize={pageSize}
|
|
594
|
+
total={400}
|
|
595
|
+
onPageChange={setPage}
|
|
596
|
+
onPageSizeChange={setPageSize}
|
|
597
|
+
disabled
|
|
383
598
|
/>`,
|
|
384
599
|
},
|
|
385
600
|
],
|
|
@@ -387,6 +602,7 @@ const [page, setPage] = React.useState(1)
|
|
|
387
602
|
|
|
388
603
|
const segmentedControlEntry: GalleryEntry = {
|
|
389
604
|
id: 'segmented-control',
|
|
605
|
+
figmaNodeId: '2604:114',
|
|
390
606
|
title: 'SegmentedControl',
|
|
391
607
|
importPath: '@open-mercato/ui/primitives/segmented-control',
|
|
392
608
|
docsAnchor: '#segmentedcontrol',
|
|
@@ -394,13 +610,7 @@ const segmentedControlEntry: GalleryEntry = {
|
|
|
394
610
|
{
|
|
395
611
|
id: 'default',
|
|
396
612
|
title: 'default',
|
|
397
|
-
render: () =>
|
|
398
|
-
<SegmentedControl defaultValue="all" aria-label="View filter">
|
|
399
|
-
<SegmentedControlItem value="all">All</SegmentedControlItem>
|
|
400
|
-
<SegmentedControlItem value="active">Active</SegmentedControlItem>
|
|
401
|
-
<SegmentedControlItem value="archived">Archived</SegmentedControlItem>
|
|
402
|
-
</SegmentedControl>
|
|
403
|
-
),
|
|
613
|
+
render: () => <SegmentedControlNavigationDefaultSample />,
|
|
404
614
|
code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
405
615
|
|
|
406
616
|
<SegmentedControl defaultValue="all" aria-label="View filter">
|
|
@@ -412,14 +622,7 @@ const segmentedControlEntry: GalleryEntry = {
|
|
|
412
622
|
{
|
|
413
623
|
id: 'small',
|
|
414
624
|
title: 'Small',
|
|
415
|
-
render: () =>
|
|
416
|
-
<SegmentedControl size="sm" defaultValue="30d" aria-label="Chart period">
|
|
417
|
-
<SegmentedControlItem value="7d">7d</SegmentedControlItem>
|
|
418
|
-
<SegmentedControlItem value="30d">30d</SegmentedControlItem>
|
|
419
|
-
<SegmentedControlItem value="90d">90d</SegmentedControlItem>
|
|
420
|
-
<SegmentedControlItem value="1y">1y</SegmentedControlItem>
|
|
421
|
-
</SegmentedControl>
|
|
422
|
-
),
|
|
625
|
+
render: () => <SegmentedControlNavigationSmallSample />,
|
|
423
626
|
code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
424
627
|
|
|
425
628
|
<SegmentedControl size="sm" defaultValue="30d" aria-label="Chart period">
|
|
@@ -432,12 +635,7 @@ const segmentedControlEntry: GalleryEntry = {
|
|
|
432
635
|
{
|
|
433
636
|
id: 'disabled',
|
|
434
637
|
title: 'Disabled',
|
|
435
|
-
render: () =>
|
|
436
|
-
<SegmentedControl defaultValue="list" disabled aria-label="Layout">
|
|
437
|
-
<SegmentedControlItem value="list">List</SegmentedControlItem>
|
|
438
|
-
<SegmentedControlItem value="grid">Grid</SegmentedControlItem>
|
|
439
|
-
</SegmentedControl>
|
|
440
|
-
),
|
|
638
|
+
render: () => <SegmentedControlNavigationDisabledSample />,
|
|
441
639
|
code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
442
640
|
|
|
443
641
|
<SegmentedControl defaultValue="list" disabled aria-label="Layout">
|
|
@@ -445,11 +643,114 @@ const segmentedControlEntry: GalleryEntry = {
|
|
|
445
643
|
<SegmentedControlItem value="grid">Grid</SegmentedControlItem>
|
|
446
644
|
</SegmentedControl>`,
|
|
447
645
|
},
|
|
646
|
+
{
|
|
647
|
+
id: 'source-text',
|
|
648
|
+
title: 'Label shell · text',
|
|
649
|
+
render: () => <SegmentedSourceDemo content="text" />,
|
|
650
|
+
code: `import * as React from 'react'
|
|
651
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
652
|
+
import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'
|
|
653
|
+
import { Label } from '@open-mercato/ui/primitives/label'
|
|
654
|
+
import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
655
|
+
|
|
656
|
+
function SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {
|
|
657
|
+
const t = useT()
|
|
658
|
+
const labelId = React.useId()
|
|
659
|
+
const [value, setValue] = React.useState('overview')
|
|
660
|
+
const options = [
|
|
661
|
+
{ value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className="size-5" aria-hidden="true" /> },
|
|
662
|
+
{ value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className="size-5" aria-hidden="true" /> },
|
|
663
|
+
{ value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className="size-5" aria-hidden="true" /> },
|
|
664
|
+
]
|
|
665
|
+
return <div className="flex w-full max-w-sm flex-col gap-6">
|
|
666
|
+
{[false, true].map(disabled => <div key={String(disabled)} className="flex flex-col gap-1.5">
|
|
667
|
+
<Label id={\`\${labelId}-\${disabled}\`} className="leading-5">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>
|
|
668
|
+
<SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\`\${labelId}-\${disabled}\`} className="h-9 w-full gap-1 rounded-lg border-0 p-1">
|
|
669
|
+
{options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className="h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1">
|
|
670
|
+
{content !== 'text' && option.icon}
|
|
671
|
+
{content !== 'icon' && option.label}
|
|
672
|
+
</SegmentedControlItem>)}
|
|
673
|
+
</SegmentedControl>
|
|
674
|
+
</div>)}
|
|
675
|
+
</div>
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
<SegmentedSourceDemo content="text" />`,
|
|
679
|
+
},
|
|
680
|
+
{
|
|
681
|
+
id: 'source-leading',
|
|
682
|
+
title: 'Label shell · leading',
|
|
683
|
+
render: () => <SegmentedSourceDemo content="leading" />,
|
|
684
|
+
code: `import * as React from 'react'
|
|
685
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
686
|
+
import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'
|
|
687
|
+
import { Label } from '@open-mercato/ui/primitives/label'
|
|
688
|
+
import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
689
|
+
|
|
690
|
+
function SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {
|
|
691
|
+
const t = useT()
|
|
692
|
+
const labelId = React.useId()
|
|
693
|
+
const [value, setValue] = React.useState('overview')
|
|
694
|
+
const options = [
|
|
695
|
+
{ value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className="size-5" aria-hidden="true" /> },
|
|
696
|
+
{ value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className="size-5" aria-hidden="true" /> },
|
|
697
|
+
{ value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className="size-5" aria-hidden="true" /> },
|
|
698
|
+
]
|
|
699
|
+
return <div className="flex w-full max-w-sm flex-col gap-6">
|
|
700
|
+
{[false, true].map(disabled => <div key={String(disabled)} className="flex flex-col gap-1.5">
|
|
701
|
+
<Label id={\`\${labelId}-\${disabled}\`} className="leading-5">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>
|
|
702
|
+
<SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\`\${labelId}-\${disabled}\`} className="h-9 w-full gap-1 rounded-lg border-0 p-1">
|
|
703
|
+
{options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className="h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1">
|
|
704
|
+
{content !== 'text' && option.icon}
|
|
705
|
+
{content !== 'icon' && option.label}
|
|
706
|
+
</SegmentedControlItem>)}
|
|
707
|
+
</SegmentedControl>
|
|
708
|
+
</div>)}
|
|
709
|
+
</div>
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
<SegmentedSourceDemo content="leading" />`,
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
id: 'source-icon',
|
|
716
|
+
title: 'Label shell · icon',
|
|
717
|
+
render: () => <SegmentedSourceDemo content="icon" />,
|
|
718
|
+
code: `import * as React from 'react'
|
|
719
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
720
|
+
import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'
|
|
721
|
+
import { Label } from '@open-mercato/ui/primitives/label'
|
|
722
|
+
import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'
|
|
723
|
+
|
|
724
|
+
function SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {
|
|
725
|
+
const t = useT()
|
|
726
|
+
const labelId = React.useId()
|
|
727
|
+
const [value, setValue] = React.useState('overview')
|
|
728
|
+
const options = [
|
|
729
|
+
{ value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className="size-5" aria-hidden="true" /> },
|
|
730
|
+
{ value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className="size-5" aria-hidden="true" /> },
|
|
731
|
+
{ value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className="size-5" aria-hidden="true" /> },
|
|
732
|
+
]
|
|
733
|
+
return <div className="flex w-full max-w-sm flex-col gap-6">
|
|
734
|
+
{[false, true].map(disabled => <div key={String(disabled)} className="flex flex-col gap-1.5">
|
|
735
|
+
<Label id={\`\${labelId}-\${disabled}\`} className="leading-5">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>
|
|
736
|
+
<SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\`\${labelId}-\${disabled}\`} className="h-9 w-full gap-1 rounded-lg border-0 p-1">
|
|
737
|
+
{options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className="h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1">
|
|
738
|
+
{content !== 'text' && option.icon}
|
|
739
|
+
{content !== 'icon' && option.label}
|
|
740
|
+
</SegmentedControlItem>)}
|
|
741
|
+
</SegmentedControl>
|
|
742
|
+
</div>)}
|
|
743
|
+
</div>
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
<SegmentedSourceDemo content="icon" />`,
|
|
747
|
+
},
|
|
448
748
|
],
|
|
449
749
|
}
|
|
450
750
|
|
|
451
751
|
const accordionEntry: GalleryEntry = {
|
|
452
752
|
id: 'accordion',
|
|
753
|
+
figmaNodeId: '210:4022',
|
|
453
754
|
title: 'Accordion',
|
|
454
755
|
importPath: '@open-mercato/ui/primitives/accordion',
|
|
455
756
|
docsAnchor: '#accordion',
|
|
@@ -457,28 +758,7 @@ const accordionEntry: GalleryEntry = {
|
|
|
457
758
|
{
|
|
458
759
|
id: 'card',
|
|
459
760
|
title: 'card (default)',
|
|
460
|
-
render: () =>
|
|
461
|
-
<Accordion type="single" collapsible defaultValue="shipping" className="w-full space-y-2">
|
|
462
|
-
<AccordionItem value="shipping">
|
|
463
|
-
<AccordionTrigger>Shipping and delivery</AccordionTrigger>
|
|
464
|
-
<AccordionContent>
|
|
465
|
-
Orders placed before 2 PM ship the same business day from the nearest warehouse.
|
|
466
|
-
</AccordionContent>
|
|
467
|
-
</AccordionItem>
|
|
468
|
-
<AccordionItem value="returns">
|
|
469
|
-
<AccordionTrigger>Returns</AccordionTrigger>
|
|
470
|
-
<AccordionContent>
|
|
471
|
-
Items can be returned within 30 days of delivery in their original packaging.
|
|
472
|
-
</AccordionContent>
|
|
473
|
-
</AccordionItem>
|
|
474
|
-
<AccordionItem value="payments">
|
|
475
|
-
<AccordionTrigger>Payment methods</AccordionTrigger>
|
|
476
|
-
<AccordionContent>
|
|
477
|
-
We accept cards, bank transfer, and deferred payment for verified B2B accounts.
|
|
478
|
-
</AccordionContent>
|
|
479
|
-
</AccordionItem>
|
|
480
|
-
</Accordion>
|
|
481
|
-
),
|
|
761
|
+
render: () => <AccordionNavigationCardSample />,
|
|
482
762
|
code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
|
|
483
763
|
|
|
484
764
|
<Accordion type="single" collapsible defaultValue="shipping" className="w-full space-y-2">
|
|
@@ -499,22 +779,7 @@ const accordionEntry: GalleryEntry = {
|
|
|
499
779
|
{
|
|
500
780
|
id: 'left-icon',
|
|
501
781
|
title: 'With leftIcon',
|
|
502
|
-
render: () =>
|
|
503
|
-
<Accordion type="single" collapsible className="w-full space-y-2">
|
|
504
|
-
<AccordionItem value="shipping">
|
|
505
|
-
<AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>
|
|
506
|
-
<AccordionContent>
|
|
507
|
-
Same-day dispatch on weekdays; delivery typically takes 1–3 business days.
|
|
508
|
-
</AccordionContent>
|
|
509
|
-
</AccordionItem>
|
|
510
|
-
<AccordionItem value="billing">
|
|
511
|
-
<AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>
|
|
512
|
-
<AccordionContent>
|
|
513
|
-
Your card is charged when the order ships, never at checkout.
|
|
514
|
-
</AccordionContent>
|
|
515
|
-
</AccordionItem>
|
|
516
|
-
</Accordion>
|
|
517
|
-
),
|
|
782
|
+
render: () => <AccordionNavigationLeftIconSample />,
|
|
518
783
|
code: `import { CreditCard, Truck } from 'lucide-react'
|
|
519
784
|
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
|
|
520
785
|
|
|
@@ -532,22 +797,7 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@o
|
|
|
532
797
|
{
|
|
533
798
|
id: 'chevron',
|
|
534
799
|
title: 'Chevron indicator',
|
|
535
|
-
render: () =>
|
|
536
|
-
<Accordion type="multiple" className="w-full space-y-2">
|
|
537
|
-
<AccordionItem value="general">
|
|
538
|
-
<AccordionTrigger triggerIcon="chevron">General</AccordionTrigger>
|
|
539
|
-
<AccordionContent>
|
|
540
|
-
Store name, contact details, and default locale for the storefront.
|
|
541
|
-
</AccordionContent>
|
|
542
|
-
</AccordionItem>
|
|
543
|
-
<AccordionItem value="advanced">
|
|
544
|
-
<AccordionTrigger triggerIcon="chevron">Advanced</AccordionTrigger>
|
|
545
|
-
<AccordionContent>
|
|
546
|
-
Webhooks, API keys, and other developer-facing configuration.
|
|
547
|
-
</AccordionContent>
|
|
548
|
-
</AccordionItem>
|
|
549
|
-
</Accordion>
|
|
550
|
-
),
|
|
800
|
+
render: () => <AccordionNavigationChevronSample />,
|
|
551
801
|
code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'
|
|
552
802
|
|
|
553
803
|
<Accordion type="multiple" className="w-full space-y-2">
|
|
@@ -561,13 +811,353 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@o
|
|
|
561
811
|
</AccordionItem>
|
|
562
812
|
</Accordion>`,
|
|
563
813
|
},
|
|
814
|
+
{
|
|
815
|
+
id: 'indicator-start',
|
|
816
|
+
title: 'Indicator at start · closed/open/disabled',
|
|
817
|
+
render: () => <AccordionStartDemo />,
|
|
818
|
+
code: `import * as React from 'react'
|
|
819
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
820
|
+
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@open-mercato/ui/primitives/accordion'
|
|
821
|
+
|
|
822
|
+
function AccordionStartDemo() {
|
|
823
|
+
const t = useT()
|
|
824
|
+
return <Accordion type="single" collapsible defaultValue="details" className="w-full max-w-md space-y-2">
|
|
825
|
+
<AccordionItem value="overview">
|
|
826
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.overview')}</AccordionTrigger>
|
|
827
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
828
|
+
</AccordionItem>
|
|
829
|
+
<AccordionItem value="details">
|
|
830
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.settings')}</AccordionTrigger>
|
|
831
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
832
|
+
</AccordionItem>
|
|
833
|
+
<AccordionItem value="locked" disabled>
|
|
834
|
+
<AccordionTrigger iconPosition="start">{t('design_system.gallery.examples.navigation2.locked')}</AccordionTrigger>
|
|
835
|
+
<AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>
|
|
836
|
+
</AccordionItem>
|
|
837
|
+
</Accordion>
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
<AccordionStartDemo />`,
|
|
841
|
+
},
|
|
842
|
+
],
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
const sidebarEntry: GalleryEntry = {
|
|
846
|
+
id: 'sidebar',
|
|
847
|
+
title: 'Sidebar and Topbar',
|
|
848
|
+
figmaNodeId: '3802:11759',
|
|
849
|
+
importPath: '@open-mercato/ui/primitives/sidebar',
|
|
850
|
+
usage: { do: ['Presentational composition with local state; the application AppShell still owns tenant APIs and injection points.', 'Hover, current navigation, workspace switching, filtering and feature-card actions use real controls.', 'Feature-card primary and neutral surfaces use the existing accessible application palettes; they do not claim exact Figma color parity.'] },
|
|
851
|
+
variants: [
|
|
852
|
+
{ id: 'items', title: 'Sidebar items / expanded and collapsed', render: () => <SidebarItemsExample />, code: shellExampleCode('<SidebarItemsExample />') },
|
|
853
|
+
{ id: 'identity-cards', title: 'Header and profile cards / expanded and collapsed', render: () => <SidebarIdentityExample />, code: shellExampleCode('<SidebarIdentityExample />') },
|
|
854
|
+
{ id: 'feature-meeting', title: 'Feature card / meeting / 4 styles', render: () => <SidebarFeatureExample type="meeting" />, code: shellExampleCode('<SidebarFeatureExample type="meeting" />') },
|
|
855
|
+
{ id: 'feature-progress', title: 'Feature card / progress / 4 styles', render: () => <SidebarFeatureExample type="progress" />, code: shellExampleCode('<SidebarFeatureExample type="progress" />') },
|
|
856
|
+
{ id: 'feature-link', title: 'Feature card / link / 4 styles', render: () => <SidebarFeatureExample type="link" />, code: shellExampleCode('<SidebarFeatureExample type="link" />') },
|
|
857
|
+
{ id: 'feature-gift', title: 'Feature card / gift / 4 styles', render: () => <SidebarFeatureExample type="gift" />, code: shellExampleCode('<SidebarFeatureExample type="gift" />') },
|
|
858
|
+
{ id: 'feature-storage', title: 'Feature card / storage / 4 styles', render: () => <SidebarFeatureExample type="storage" />, code: shellExampleCode('<SidebarFeatureExample type="storage" />') },
|
|
859
|
+
{ id: 'feature-support', title: 'Feature card / support / 4 styles', render: () => <SidebarFeatureExample type="support" />, code: shellExampleCode('<SidebarFeatureExample type="support" />') },
|
|
860
|
+
{ id: 'topbar-hr-default', title: 'HR topbar / default', render: () => <TopbarExample product="hr" />, code: shellExampleCode('<TopbarExample product="hr" />') },
|
|
861
|
+
{ id: 'topbar-hr-icons', title: 'HR topbar / icons', render: () => <TopbarExample product="hr" icons />, code: shellExampleCode('<TopbarExample product="hr" icons />') },
|
|
862
|
+
{ id: 'topbar-finance-default', title: 'FINANCE topbar / default', render: () => <TopbarExample product="finance" />, code: shellExampleCode('<TopbarExample product="finance" />') },
|
|
863
|
+
{ id: 'topbar-finance-icons', title: 'FINANCE topbar / icons', render: () => <TopbarExample product="finance" icons />, code: shellExampleCode('<TopbarExample product="finance" icons />') },
|
|
864
|
+
{ id: 'brand-artwork', title: 'Synergy and Apex / 6 original assets', render: () => <NavigationBrandsExample />, code: shellExampleCode('<NavigationBrandsExample />') },
|
|
865
|
+
],
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
const promptAreaEntry: GalleryEntry = {
|
|
869
|
+
id: 'prompt-area',
|
|
870
|
+
title: 'PromptArea',
|
|
871
|
+
figmaNodeId: '191226:4236',
|
|
872
|
+
importPath: '@open-mercato/ui/primitives/prompt-area',
|
|
873
|
+
usage: { do: ['Desktop and mobile compositions expose all 18 source variants through real hover and focus states.', 'Enter saves a local draft; Shift+Enter inserts a line break. Attachments stay in this browser and can be removed.', 'Model names reproduce source labels. These examples do not call a model or represent a subscription.'] },
|
|
874
|
+
variants: [
|
|
875
|
+
{ id: 'desktop', title: 'Desktop / empty / Default, Hover, Active', render: () => <AiPromptExample />, code: aiProductExampleCode('<AiPromptExample />') },
|
|
876
|
+
{ id: 'desktop-file', title: 'Desktop / file', render: () => <AiPromptExample attachment="file" />, code: aiProductExampleCode('<AiPromptExample attachment="file" />') },
|
|
877
|
+
{ id: 'desktop-image', title: 'Desktop / original image', render: () => <AiPromptExample attachment="image" />, code: aiProductExampleCode('<AiPromptExample attachment="image" />') },
|
|
878
|
+
{ id: 'mobile', title: 'Mobile / empty / Default, Hover, Active', render: () => <AiPromptExample compact />, code: aiProductExampleCode('<AiPromptExample compact />') },
|
|
879
|
+
{ id: 'mobile-file', title: 'Mobile / file', render: () => <AiPromptExample compact attachment="file" />, code: aiProductExampleCode('<AiPromptExample compact attachment="file" />') },
|
|
880
|
+
{ id: 'mobile-image', title: 'Mobile / original image', render: () => <AiPromptExample compact attachment="image" />, code: aiProductExampleCode('<AiPromptExample compact attachment="image" />') },
|
|
881
|
+
],
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// Composed AI-product patterns: point at the demo module rather than claiming a primitive's import path.
|
|
885
|
+
const aiProductPatternCode = (expression: string) => `import { ${expression.match(/<(\w+)/)?.[1] ?? 'AiPromptExample'} } from '@open-mercato/core/modules/design_system/gallery/demos/ai-product'
|
|
886
|
+
|
|
887
|
+
${expression}
|
|
888
|
+
`
|
|
889
|
+
|
|
890
|
+
const aiControlsEntry: GalleryEntry = {
|
|
891
|
+
id: 'ai-controls',
|
|
892
|
+
title: 'AI Product / Controls',
|
|
893
|
+
figmaNodeId: '191042:2378',
|
|
894
|
+
importPath: '@open-mercato/core/modules/design_system/gallery/demos/ai-product',
|
|
895
|
+
usage: { do: ['Source-specific compositions reuse existing primitives with additive semantic radius and typography tokens.', 'Hover, keyboard focus and selected states are real interactions. Authentication buttons only display local explanatory feedback.', 'Original authentication glyphs are preserved as source assets. Application fonts, focus and semantic colors remain explicit adaptations.'] },
|
|
896
|
+
variants: [
|
|
897
|
+
{ id: 'chat-buttons', title: 'Chat custom buttons / 2 styles × 3 states', render: () => <AiIconButtonExamples chat />, code: aiProductPatternCode('<AiIconButtonExamples chat />') },
|
|
898
|
+
{ id: 'icon-buttons', title: 'Custom icon buttons / 4 sizes × 2 tones × 3 states', render: () => <AiIconButtonExamples />, code: aiProductPatternCode('<AiIconButtonExamples />') },
|
|
899
|
+
{ id: 'search', title: 'Search / 2 sizes × 3 states', render: () => <AiSearchExamples />, code: aiProductPatternCode('<AiSearchExamples />') },
|
|
900
|
+
{ id: 'new-chat', title: 'New chat / Default, Hover', render: () => <AiNewChatExample />, code: aiProductPatternCode('<AiNewChatExample />') },
|
|
901
|
+
{ id: 'navigation-items', title: 'Navigation items / 12 variants', render: () => <AiNavigationExamples />, code: aiProductPatternCode('<AiNavigationExamples />') },
|
|
902
|
+
{ id: 'auth-icons', title: 'Authentication / 8 original icons', render: () => <AiAuthExamples />, code: aiProductPatternCode('<AiAuthExamples />') },
|
|
903
|
+
{ id: 'social-google', title: 'Google button / local feedback', render: () => <AiAuthExamples kind="social" />, code: aiProductPatternCode('<AiAuthExamples kind="social" />') },
|
|
904
|
+
{ id: 'text-input', title: 'Text input / 5 source states', render: () => <AiAuthExamples kind="text" />, code: aiProductPatternCode('<AiAuthExamples kind="text" />') },
|
|
905
|
+
{ id: 'digit-input', title: 'Digit input / 5 source states', render: () => <AiAuthExamples kind="digits" />, code: aiProductPatternCode('<AiAuthExamples kind="digits" />') },
|
|
906
|
+
{ id: 'settings', title: 'Settings navigation, select, counter and model / 15 variants', render: () => <AiSettingsExamples />, code: aiProductPatternCode('<AiSettingsExamples />') },
|
|
907
|
+
],
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
const aiSidebarEntry: GalleryEntry = {
|
|
911
|
+
id: 'ai-sidebar',
|
|
912
|
+
title: 'AI Product / Sidebar',
|
|
913
|
+
figmaNodeId: '191050:3105',
|
|
914
|
+
importPath: '@open-mercato/ui/primitives/sidebar',
|
|
915
|
+
usage: { do: ['All four source sidebar variants render using the presentational Sidebar without application API calls.', 'Search filters the local history, navigation updates the selected item, and new chat creates a local draft counter.', 'The collapsed logo expands the sidebar; this adds a keyboard-accessible restoration control to the source composition.'] },
|
|
916
|
+
variants: [
|
|
917
|
+
{ id: 'search-01', title: 'Search 01 / expanded / 272 × 900', render: () => <AiSidebarExample />, code: aiProductExampleCode('<AiSidebarExample />') },
|
|
918
|
+
{ id: 'search-02', title: 'Search 02 / expanded', render: () => <AiSidebarExample search="02" />, code: aiProductExampleCode('<AiSidebarExample search="02" />') },
|
|
919
|
+
{ id: 'search-03', title: 'Search 03 / expanded', render: () => <AiSidebarExample search="03" />, code: aiProductExampleCode('<AiSidebarExample search="03" />') },
|
|
920
|
+
{ id: 'collapsed', title: 'Search 01 / collapsed / 72 × 900', render: () => <AiSidebarExample initialCollapsed />, code: aiProductExampleCode('<AiSidebarExample initialCollapsed />') },
|
|
921
|
+
],
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
const aiMobileNavigationEntry: GalleryEntry = {
|
|
925
|
+
id: 'ai-mobile-navigation',
|
|
926
|
+
title: 'AI Product / Mobile Navigation',
|
|
927
|
+
figmaNodeId: '192681:59134',
|
|
928
|
+
importPath: '@open-mercato/core/modules/design_system/gallery/demos/ai-product',
|
|
929
|
+
usage: { do: ['All four 390 × 64 source compositions have working local controls and keyboard-accessible popovers.', 'Add project stores the entered name only in component state. Escape closes the popover, Enter or Ctrl/Cmd+Enter confirms.'] },
|
|
930
|
+
variants: [
|
|
931
|
+
{ id: 'default', title: 'Default', render: () => <AiMobileNavigationExample />, code: aiProductPatternCode('<AiMobileNavigationExample />') },
|
|
932
|
+
{ id: 'in-projects', title: 'In Projects', render: () => <AiMobileNavigationExample kind="in-projects" />, code: aiProductPatternCode('<AiMobileNavigationExample kind="in-projects" />') },
|
|
933
|
+
{ id: 'projects', title: 'Projects', render: () => <AiMobileNavigationExample kind="projects" />, code: aiProductPatternCode('<AiMobileNavigationExample kind="projects" />') },
|
|
934
|
+
{ id: 'project-details', title: 'Project Details', render: () => <AiMobileNavigationExample kind="project-details" />, code: aiProductPatternCode('<AiMobileNavigationExample kind="project-details" />') },
|
|
564
935
|
],
|
|
565
936
|
}
|
|
566
937
|
|
|
567
938
|
export const entries: GalleryEntry[] = [
|
|
939
|
+
promptAreaEntry,
|
|
940
|
+
aiControlsEntry,
|
|
941
|
+
aiSidebarEntry,
|
|
942
|
+
aiMobileNavigationEntry,
|
|
943
|
+
sidebarEntry,
|
|
568
944
|
tabsEntry,
|
|
569
945
|
breadcrumbEntry,
|
|
570
946
|
paginationEntry,
|
|
571
947
|
segmentedControlEntry,
|
|
572
948
|
accordionEntry,
|
|
573
949
|
]
|
|
950
|
+
|
|
951
|
+
function TabsNavigationUnderlineSample() {
|
|
952
|
+
const t = useT()
|
|
953
|
+
return (<Tabs defaultValue="orders" variant="underline" className="w-full">
|
|
954
|
+
<TabsList aria-label={t('design_system.gallery.sampleCopy.customerSections')}>
|
|
955
|
+
<TabsTrigger value="overview" leading={<LayoutGrid className="size-4" />}>
|
|
956
|
+
{t('design_system.gallery.examples.navigation2.overview')}
|
|
957
|
+
</TabsTrigger>
|
|
958
|
+
<TabsTrigger value="orders" leading={<ShoppingCart className="size-4" />} count={12}>
|
|
959
|
+
{t('design_system.gallery.examples.navigation2.orders')}
|
|
960
|
+
</TabsTrigger>
|
|
961
|
+
<TabsTrigger value="settings" leading={<Settings className="size-4" />}>
|
|
962
|
+
{t('design_system.gallery.examples.navigation2.settings')}
|
|
963
|
+
</TabsTrigger>
|
|
964
|
+
</TabsList>
|
|
965
|
+
<TabsContent value="overview">
|
|
966
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.customerOverviewPanel')}</p>
|
|
967
|
+
</TabsContent>
|
|
968
|
+
<TabsContent value="orders">
|
|
969
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.12OrdersInTheLast30Days')}</p>
|
|
970
|
+
</TabsContent>
|
|
971
|
+
<TabsContent value="settings">
|
|
972
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.notificationAndAccessSettings')}</p>
|
|
973
|
+
</TabsContent>
|
|
974
|
+
</Tabs>)
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
function TabsNavigationPillSample() {
|
|
978
|
+
const t = useT()
|
|
979
|
+
return (<Tabs defaultValue="preview">
|
|
980
|
+
<TabsList aria-label={t('design_system.gallery.sampleCopy.editorView')}>
|
|
981
|
+
<TabsTrigger value="preview">{t('design_system.gallery.samples.table.preview')}</TabsTrigger>
|
|
982
|
+
<TabsTrigger value="code">{t('design_system.gallery.samples.richEditor.labels.code')}</TabsTrigger>
|
|
983
|
+
<TabsTrigger value="logs">{t('design_system.gallery.sampleCopy.logs')}</TabsTrigger>
|
|
984
|
+
</TabsList>
|
|
985
|
+
<TabsContent value="preview">
|
|
986
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.renderedPreview')}</p>
|
|
987
|
+
</TabsContent>
|
|
988
|
+
<TabsContent value="code">
|
|
989
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.sourceCodePanel')}</p>
|
|
990
|
+
</TabsContent>
|
|
991
|
+
<TabsContent value="logs">
|
|
992
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.runtimeLogsPanel')}</p>
|
|
993
|
+
</TabsContent>
|
|
994
|
+
</Tabs>)
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
function TabsNavigationPillVerticalSample() {
|
|
998
|
+
const t = useT()
|
|
999
|
+
return (<Tabs defaultValue="profile" orientation="vertical" className="w-full">
|
|
1000
|
+
<TabsList aria-label={t('design_system.gallery.samples.crypto.accountSettings')}>
|
|
1001
|
+
<TabsTrigger value="profile">{t('design_system.gallery.samples.crypto.profile')}</TabsTrigger>
|
|
1002
|
+
<TabsTrigger value="billing">{t('design_system.gallery.samples.marketing.billing')}</TabsTrigger>
|
|
1003
|
+
<TabsTrigger value="security">{t('design_system.gallery.sampleCopy.security')}</TabsTrigger>
|
|
1004
|
+
</TabsList>
|
|
1005
|
+
<TabsContent value="profile">
|
|
1006
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.profileSettingsPanel')}</p>
|
|
1007
|
+
</TabsContent>
|
|
1008
|
+
<TabsContent value="billing">
|
|
1009
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.billingSettingsPanel')}</p>
|
|
1010
|
+
</TabsContent>
|
|
1011
|
+
<TabsContent value="security">
|
|
1012
|
+
<p className="text-sm text-muted-foreground">{t('design_system.gallery.sampleCopy.securitySettingsPanel')}</p>
|
|
1013
|
+
</TabsContent>
|
|
1014
|
+
</Tabs>)
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
function BreadcrumbNavigationSlashSample() {
|
|
1018
|
+
const t = useT()
|
|
1019
|
+
return (<Breadcrumb>
|
|
1020
|
+
<BreadcrumbList>
|
|
1021
|
+
<BreadcrumbItem>
|
|
1022
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">{t('design_system.gallery.examples.shell.dashboard')}</BreadcrumbLink>
|
|
1023
|
+
</BreadcrumbItem>
|
|
1024
|
+
<BreadcrumbSeparator />
|
|
1025
|
+
<BreadcrumbItem>
|
|
1026
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">{t('design_system.gallery.sampleCopy.products')}</BreadcrumbLink>
|
|
1027
|
+
</BreadcrumbItem>
|
|
1028
|
+
<BreadcrumbSeparator />
|
|
1029
|
+
<BreadcrumbItem>
|
|
1030
|
+
<BreadcrumbPage>{t('design_system.gallery.sampleCopy.winterCatalog')}</BreadcrumbPage>
|
|
1031
|
+
</BreadcrumbItem>
|
|
1032
|
+
</BreadcrumbList>
|
|
1033
|
+
</Breadcrumb>)
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
function BreadcrumbNavigationArrowSample() {
|
|
1037
|
+
const t = useT()
|
|
1038
|
+
return (<Breadcrumb divider="arrow">
|
|
1039
|
+
<BreadcrumbList>
|
|
1040
|
+
<BreadcrumbItem>
|
|
1041
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">{t('design_system.gallery.examples.navigation2.orders')}</BreadcrumbLink>
|
|
1042
|
+
</BreadcrumbItem>
|
|
1043
|
+
<BreadcrumbSeparator />
|
|
1044
|
+
<BreadcrumbItem>
|
|
1045
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">#20418</BreadcrumbLink>
|
|
1046
|
+
</BreadcrumbItem>
|
|
1047
|
+
<BreadcrumbSeparator />
|
|
1048
|
+
<BreadcrumbItem>
|
|
1049
|
+
<BreadcrumbPage>{t('design_system.gallery.sampleCopy.shipment')}</BreadcrumbPage>
|
|
1050
|
+
</BreadcrumbItem>
|
|
1051
|
+
</BreadcrumbList>
|
|
1052
|
+
</Breadcrumb>)
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
function BreadcrumbNavigationEllipsisSample() {
|
|
1056
|
+
const t = useT()
|
|
1057
|
+
return (<Breadcrumb>
|
|
1058
|
+
<BreadcrumbList>
|
|
1059
|
+
<BreadcrumbItem>
|
|
1060
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">{t('design_system.gallery.examples.shell.dashboard')}</BreadcrumbLink>
|
|
1061
|
+
</BreadcrumbItem>
|
|
1062
|
+
<BreadcrumbSeparator />
|
|
1063
|
+
<BreadcrumbItem>
|
|
1064
|
+
<BreadcrumbEllipsis />
|
|
1065
|
+
</BreadcrumbItem>
|
|
1066
|
+
<BreadcrumbSeparator />
|
|
1067
|
+
<BreadcrumbItem>
|
|
1068
|
+
<BreadcrumbLink href="#gallery-entry-breadcrumb">{t('design_system.gallery.sampleCopy.attributes')}</BreadcrumbLink>
|
|
1069
|
+
</BreadcrumbItem>
|
|
1070
|
+
<BreadcrumbSeparator />
|
|
1071
|
+
<BreadcrumbItem>
|
|
1072
|
+
<BreadcrumbPage>{t('design_system.gallery.samples.richEditor.labels.textColor')}</BreadcrumbPage>
|
|
1073
|
+
</BreadcrumbItem>
|
|
1074
|
+
</BreadcrumbList>
|
|
1075
|
+
</Breadcrumb>)
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
function SegmentedControlNavigationDefaultSample() {
|
|
1079
|
+
const t = useT()
|
|
1080
|
+
return (<SegmentedControl defaultValue="all" aria-label={t('design_system.gallery.sampleCopy.viewFilter')}>
|
|
1081
|
+
<SegmentedControlItem value="all">{t('design_system.gallery.samples.feeds.all')}</SegmentedControlItem>
|
|
1082
|
+
<SegmentedControlItem value="active">{t('design_system.gallery.samples.finance.active')}</SegmentedControlItem>
|
|
1083
|
+
<SegmentedControlItem value="archived">{t('design_system.gallery.sampleCopy.archived')}</SegmentedControlItem>
|
|
1084
|
+
</SegmentedControl>)
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
function SegmentedControlNavigationSmallSample() {
|
|
1088
|
+
const t = useT()
|
|
1089
|
+
return (<SegmentedControl size="sm" defaultValue={t('design_system.gallery.sampleCopy.30d')} aria-label={t('design_system.gallery.samples.crypto.chartRange')}>
|
|
1090
|
+
<SegmentedControlItem value="7d">{t('design_system.gallery.sampleCopy.7d')}</SegmentedControlItem>
|
|
1091
|
+
<SegmentedControlItem value="30d">{t('design_system.gallery.sampleCopy.30d')}</SegmentedControlItem>
|
|
1092
|
+
<SegmentedControlItem value="90d">{t('design_system.gallery.sampleCopy.90d')}</SegmentedControlItem>
|
|
1093
|
+
<SegmentedControlItem value="1y">{t('design_system.gallery.sampleCopy.1y')}</SegmentedControlItem>
|
|
1094
|
+
</SegmentedControl>)
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
function SegmentedControlNavigationDisabledSample() {
|
|
1098
|
+
const t = useT()
|
|
1099
|
+
return (<SegmentedControl defaultValue="list" disabled aria-label={t('design_system.gallery.sampleCopy.layout')}>
|
|
1100
|
+
<SegmentedControlItem value="list">{t('design_system.gallery.sampleCopy.list')}</SegmentedControlItem>
|
|
1101
|
+
<SegmentedControlItem value="grid">{t('design_system.gallery.sampleCopy.grid')}</SegmentedControlItem>
|
|
1102
|
+
</SegmentedControl>)
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
function AccordionNavigationCardSample() {
|
|
1106
|
+
const t = useT()
|
|
1107
|
+
return (<Accordion type="single" collapsible defaultValue="shipping" className="w-full space-y-2">
|
|
1108
|
+
<AccordionItem value="shipping">
|
|
1109
|
+
<AccordionTrigger>{t('design_system.gallery.sampleCopy.shippingAndDelivery')}</AccordionTrigger>
|
|
1110
|
+
<AccordionContent>
|
|
1111
|
+
{t('design_system.gallery.sampleCopy.ordersPlacedBefore2PMShipTheSameBusinessDay')}
|
|
1112
|
+
</AccordionContent>
|
|
1113
|
+
</AccordionItem>
|
|
1114
|
+
<AccordionItem value="returns">
|
|
1115
|
+
<AccordionTrigger>{t('design_system.gallery.sampleCopy.returns')}</AccordionTrigger>
|
|
1116
|
+
<AccordionContent>
|
|
1117
|
+
{t('design_system.gallery.sampleCopy.itemsCanBeReturnedWithin30DaysOfDeliveryIn')}
|
|
1118
|
+
</AccordionContent>
|
|
1119
|
+
</AccordionItem>
|
|
1120
|
+
<AccordionItem value="payments">
|
|
1121
|
+
<AccordionTrigger>{t('design_system.gallery.sampleCopy.paymentMethods')}</AccordionTrigger>
|
|
1122
|
+
<AccordionContent>
|
|
1123
|
+
{t('design_system.gallery.sampleCopy.weAcceptCardsBankTransferAndDeferredPaymentForVerified')}
|
|
1124
|
+
</AccordionContent>
|
|
1125
|
+
</AccordionItem>
|
|
1126
|
+
</Accordion>)
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
function AccordionNavigationLeftIconSample() {
|
|
1130
|
+
const t = useT()
|
|
1131
|
+
return (<Accordion type="single" collapsible className="w-full space-y-2">
|
|
1132
|
+
<AccordionItem value="shipping">
|
|
1133
|
+
<AccordionTrigger leftIcon={<Truck />}>{t('design_system.gallery.sampleCopy.howFastIsShipping')}</AccordionTrigger>
|
|
1134
|
+
<AccordionContent>
|
|
1135
|
+
{t('design_system.gallery.sampleCopy.samedayDispatchOnWeekdaysDeliveryTypicallyTakes13BusinessDays')}
|
|
1136
|
+
</AccordionContent>
|
|
1137
|
+
</AccordionItem>
|
|
1138
|
+
<AccordionItem value="billing">
|
|
1139
|
+
<AccordionTrigger leftIcon={<CreditCard />}>{t('design_system.gallery.sampleCopy.whenAmICharged')}</AccordionTrigger>
|
|
1140
|
+
<AccordionContent>
|
|
1141
|
+
{t('design_system.gallery.sampleCopy.yourCardIsChargedWhenTheOrderShipsNeverAt')}
|
|
1142
|
+
</AccordionContent>
|
|
1143
|
+
</AccordionItem>
|
|
1144
|
+
</Accordion>)
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
function AccordionNavigationChevronSample() {
|
|
1148
|
+
const t = useT()
|
|
1149
|
+
return (<Accordion type="multiple" className="w-full space-y-2">
|
|
1150
|
+
<AccordionItem value="general">
|
|
1151
|
+
<AccordionTrigger triggerIcon="chevron">{t('design_system.gallery.sampleCopy.general')}</AccordionTrigger>
|
|
1152
|
+
<AccordionContent>
|
|
1153
|
+
{t('design_system.gallery.sampleCopy.storeNameContactDetailsAndDefaultLocaleForTheStorefront')}
|
|
1154
|
+
</AccordionContent>
|
|
1155
|
+
</AccordionItem>
|
|
1156
|
+
<AccordionItem value="advanced">
|
|
1157
|
+
<AccordionTrigger triggerIcon="chevron">{t('design_system.gallery.samples.finance.advanced')}</AccordionTrigger>
|
|
1158
|
+
<AccordionContent>
|
|
1159
|
+
{t('design_system.gallery.sampleCopy.webhooksAPIKeysAndOtherDeveloperfacingConfiguration')}
|
|
1160
|
+
</AccordionContent>
|
|
1161
|
+
</AccordionItem>
|
|
1162
|
+
</Accordion>)
|
|
1163
|
+
}
|