@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.0
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 -9
- 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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/design_system/gallery/entries/charts.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react'\nimport {\n BarChart,\n DeltaBadge,\n KpiCard,\n LineChart,\n PieChart,\n Sparkline,\n TopNTable,\n type TopNTableColumn,\n} from '@open-mercato/ui/backend/charts'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// ---------------------------------------------------------------------------\n// Inline mock datasets \u2014 realistic dashboard shapes, no API calls. All charts\n// pick up the DS palette (`--chart-1`\u2026`--chart-5`) natively; no color props.\n// ---------------------------------------------------------------------------\n\nconst revenueByMonth = [\n { month: 'Jan', revenue: 48200 },\n { month: 'Feb', revenue: 51400 },\n { month: 'Mar', revenue: 47900 },\n { month: 'Apr', revenue: 61200 },\n { month: 'May', revenue: 58600 },\n { month: 'Jun', revenue: 67300 },\n]\n\nconst revenueByChannel = [\n { channel: 'Online store', revenue: 182400 },\n { channel: 'Marketplace', revenue: 96800 },\n { channel: 'Retail', revenue: 64200 },\n { channel: 'Wholesale', revenue: 41500 },\n]\n\nconst ordersByMonth = [\n { month: 'Jan', online: 320, retail: 180 },\n { month: 'Feb', online: 348, retail: 164 },\n { month: 'Mar', online: 331, retail: 196 },\n { month: 'Apr', online: 402, retail: 214 },\n { month: 'May', online: 389, retail: 205 },\n { month: 'Jun', online: 446, retail: 232 },\n]\n\nconst ordersByStatus = [\n { name: 'Completed', value: 268 },\n { name: 'Processing', value: 84 },\n { name: 'Pending payment', value: 37 },\n { name: 'Cancelled', value: 22 },\n]\n\nconst weeklyOrdersTrend = [12, 18, 14, 22, 19, 27, 24, 31, 28, 35, 33, 41]\n\ntype TopProductRow = {\n product: string\n orders: number\n revenue: number\n [key: string]: unknown\n}\n\nconst topProducts: TopProductRow[] = [\n { product: 'Aurora desk lamp', orders: 412, revenue: 28840 },\n { product: 'Birch side table', orders: 366, revenue: 47580 },\n { product: 'Linen throw pillow', orders: 341, revenue: 11935 },\n { product: 'Oak bookshelf', orders: 214, revenue: 53500 },\n { product: 'Ceramic vase set', orders: 198, revenue: 8910 },\n]\n\nconst formatCurrency = (value: number) => `\u20AC${value.toLocaleString('en-US')}`\n\nconst topProductColumns: TopNTableColumn<TopProductRow>[] = [\n { key: 'product', header: 'Product' },\n { key: 'orders', header: 'Orders', align: 'right' },\n {\n key: 'revenue',\n header: 'Revenue',\n align: 'right',\n formatter: (value) => formatCurrency(value as number),\n },\n]\n\nconst kpiCardEntry: GalleryEntry = {\n id: 'kpi-card',\n title: 'KpiCard',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'trend-directions',\n title: 'Trend directions',\n render: () => (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard\n title=\"Revenue\"\n value={67300}\n prefix=\"\u20AC\"\n trend={{ value: 14.8, direction: 'up' }}\n comparisonLabel=\"vs. previous month\"\n />\n <KpiCard\n title=\"Cancelled orders\"\n value={22}\n trend={{ value: 6.1, direction: 'down' }}\n comparisonLabel=\"vs. previous month\"\n />\n <KpiCard\n title=\"Active customers\"\n value={1284}\n trend={{ value: 0, direction: 'unchanged' }}\n comparisonLabel=\"vs. previous month\"\n />\n </div>\n ),\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Revenue\"\n value={67300}\n prefix=\"\u20AC\"\n trend={{ value: 14.8, direction: 'up' }}\n comparisonLabel=\"vs. previous month\"\n/>`,\n },\n {\n id: 'suffix-and-footer',\n title: 'Suffix and footer slot',\n render: () => (\n <div className=\"w-full max-w-xs\">\n <KpiCard\n title=\"Average order value\"\n value={86.4}\n prefix=\"\u20AC\"\n suffix=\"net\"\n trend={{ value: 3.2, direction: 'up' }}\n footer={\n <span className=\"text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Weekly orders trend\" />\n </span>\n }\n />\n </div>\n ),\n code: `import { KpiCard, Sparkline } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Average order value\"\n value={86.4}\n prefix=\"\u20AC\"\n suffix=\"net\"\n trend={{ value: 3.2, direction: 'up' }}\n footer={<Sparkline values={weeklyTrend} ariaLabel=\"Weekly orders trend\" />}\n/>`,\n },\n {\n id: 'states',\n title: 'Loading, error and empty states',\n render: () => (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard title=\"Loading\" value={null} loading />\n <KpiCard title=\"Error\" value={null} error=\"Failed to load metric\" />\n <KpiCard title=\"No data\" value={null} />\n </div>\n ),\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard title=\"Loading\" value={null} loading />\n<KpiCard title=\"Error\" value={null} error=\"Failed to load metric\" />\n<KpiCard title=\"No data\" value={null} />`,\n },\n {\n id: 'delta-badge',\n title: 'DeltaBadge (standalone)',\n render: () => (\n <div className=\"flex items-center gap-3\">\n <DeltaBadge direction=\"up\" value={12.4} />\n <DeltaBadge direction=\"down\" value={4.7} />\n <DeltaBadge direction=\"unchanged\" value={0} />\n <DeltaBadge direction=\"up\" value={38} unit=\" pts\" />\n </div>\n ),\n code: `import { DeltaBadge } from '@open-mercato/ui/backend/charts'\n\n<DeltaBadge direction=\"up\" value={12.4} />\n<DeltaBadge direction=\"down\" value={4.7} />\n<DeltaBadge direction=\"unchanged\" value={0} />\n<DeltaBadge direction=\"up\" value={38} unit=\" pts\" />`,\n },\n ],\n}\n\nconst sparklineEntry: GalleryEntry = {\n id: 'sparkline',\n title: 'Sparkline',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <span className=\"text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Weekly orders trend\" />\n </span>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={[12, 18, 14, 22, 19, 27, 24, 31]} ariaLabel=\"Weekly orders trend\" />`,\n },\n {\n id: 'semantic-color',\n title: 'Colored via currentColor',\n render: () => (\n <div className=\"flex items-center gap-6\">\n <span className=\"text-primary\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Orders trending up\" />\n </span>\n <span className=\"text-destructive\">\n <Sparkline\n values={[...weeklyOrdersTrend].reverse()}\n ariaLabel=\"Returns trending down\"\n />\n </span>\n </div>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n// Sparkline strokes with currentColor \u2014 set a semantic text token on the wrapper.\n<span className=\"text-primary\">\n <Sparkline values={values} ariaLabel=\"Orders trending up\" />\n</span>`,\n },\n {\n id: 'sizes',\n title: 'Custom width and height',\n render: () => (\n <div className=\"flex items-end gap-6 text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Small trend\" width={64} height={20} />\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Default trend\" />\n <Sparkline values={weeklyOrdersTrend} ariaLabel=\"Large trend\" width={160} height={40} />\n </div>\n ),\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={values} ariaLabel=\"Small trend\" width={64} height={20} />\n<Sparkline values={values} ariaLabel=\"Default trend\" />\n<Sparkline values={values} ariaLabel=\"Large trend\" width={160} height={40} />`,\n },\n ],\n}\n\nconst barChartEntry: GalleryEntry = {\n id: 'bar-chart',\n title: 'BarChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'horizontal',\n title: 'Horizontal layout',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Revenue by channel\"\n data={revenueByChannel}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by channel\"\n data={revenueByChannel}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series with legend',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n />\n </div>\n ),\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n/>`,\n },\n ],\n}\n\nconst lineChartEntry: GalleryEntry = {\n id: 'line-chart',\n title: 'LineChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'area',\n title: 'Area fill',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series, monotone curve',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n curveType=\"monotone\"\n />\n </div>\n ),\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n curveType=\"monotone\"\n/>`,\n },\n ],\n}\n\nconst pieChartEntry: GalleryEntry = {\n id: 'pie-chart',\n title: 'PieChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'pie',\n title: 'Pie (orders by status)',\n render: () => (\n <div className=\"w-full max-w-md\">\n <PieChart title=\"Orders by status\" data={ordersByStatus} />\n </div>\n ),\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} />`,\n },\n {\n id: 'donut',\n title: 'Donut',\n render: () => (\n <div className=\"w-full max-w-md\">\n <PieChart title=\"Orders by status\" data={ordersByStatus} variant=\"donut\" />\n </div>\n ),\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} variant=\"donut\" />`,\n },\n ],\n}\n\nconst topNTableEntry: GalleryEntry = {\n id: 'top-n-table',\n title: 'TopNTable',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Top products by revenue',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable title=\"Top products\" data={topProducts} columns={topProductColumns} />\n </div>\n ),\n code: `import { TopNTable, type TopNTableColumn } from '@open-mercato/ui/backend/charts'\n\nconst columns: TopNTableColumn<TopProductRow>[] = [\n { key: 'product', header: 'Product' },\n { key: 'orders', header: 'Orders', align: 'right' },\n { key: 'revenue', header: 'Revenue', align: 'right', formatter: (v) => formatCurrency(v as number) },\n]\n\n<TopNTable title=\"Top products\" data={topProducts} columns={columns} />`,\n },\n {\n id: 'max-rows',\n title: 'Capped with maxRows',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title=\"Top 3 products\"\n data={topProducts}\n columns={topProductColumns}\n maxRows={3}\n />\n </div>\n ),\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top 3 products\" data={topProducts} columns={columns} maxRows={3} />`,\n },\n {\n id: 'empty',\n title: 'Empty state',\n render: () => (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title=\"Top products\"\n data={[]}\n columns={topProductColumns}\n emptyMessage=\"No sales in this period\"\n />\n </div>\n ),\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top products\" data={[]} columns={columns} emptyMessage=\"No sales in this period\" />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n kpiCardEntry,\n sparklineEntry,\n barChartEntry,\n lineChartEntry,\n pieChartEntry,\n topNTableEntry,\n]\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { MarketingWidgetDemo } from '../demos/marketing-widgets'\nimport { marketingWidgetExampleCode } from '../demos/marketing-widgets-code.generated'\nimport * as React from 'react'\nimport {\n BarChart,\n DeltaBadge,\n KpiCard,\n LineChart,\n PieChart,\n Sparkline,\n TopNTable,\n type TopNTableColumn,\n} from '@open-mercato/ui/backend/charts'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// ---------------------------------------------------------------------------\n// Inline mock datasets \u2014 realistic dashboard shapes, no API calls. All charts\n// pick up the DS palette (`--chart-1`\u2026`--chart-5`) natively; no color props.\n// ---------------------------------------------------------------------------\nfunction KpiCardEntryDeltaBadgePreview() {\n const t = useT()\n return (\n <div className=\"flex items-center gap-3\">\n <DeltaBadge direction=\"up\" value={12.4} />\n <DeltaBadge direction=\"down\" value={4.7} />\n <DeltaBadge direction=\"unchanged\" value={0} />\n <DeltaBadge direction=\"up\" value={38} unit={t('design_system.gallery.samples.content.pts')} />\n </div>\n )\n}\nfunction SparklineEntryDefaultPreview() {\n const t = useT()\n return (\n <span className=\"text-muted-foreground\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel={t('design_system.gallery.samples.content.weeklyOrdersTrend')} />\n </span>\n )\n}\nfunction SparklineEntrySemanticColorPreview() {\n const t = useT()\n return (\n <div className=\"flex items-center gap-6\">\n <span className=\"text-primary\">\n <Sparkline values={weeklyOrdersTrend} ariaLabel={t('design_system.gallery.samples.content.ordersTrendingUp')} />\n </span>\n <span className=\"text-destructive\">\n <Sparkline\n values={[...weeklyOrdersTrend].reverse()}\n ariaLabel={t('design_system.gallery.samples.content.returnsTrendingDown')}\n />\n </span>\n </div>\n )\n}\nfunction SparklineEntrySizesPreview() {\n const t = useT()\n return (\n <div className=\"flex items-end gap-6 text-muted-foreground\">\n <Sparkline\n values={weeklyOrdersTrend}\n ariaLabel={t('design_system.gallery.samples.content.smallTrend')}\n width={64}\n height={20}\n />\n <Sparkline values={weeklyOrdersTrend} ariaLabel={t('design_system.gallery.samples.content.defaultTrend')} />\n <Sparkline\n values={weeklyOrdersTrend}\n ariaLabel={t('design_system.gallery.samples.content.largeTrend')}\n width={160}\n height={40}\n />\n </div>\n )\n}\nfunction KpiCardEntryTrendDirectionsPreview() {\n const t = useT()\n return (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard\n title={t('design_system.gallery.samples.content.revenue')}\n value={67300}\n prefix=\"\u20AC\"\n trend={{\n value: 14.8,\n direction: 'up',\n }}\n comparisonLabel={t('design_system.gallery.samples.content.vsPreviousMonth')}\n />\n <KpiCard\n title={t('design_system.gallery.samples.content.cancelledOrders')}\n value={22}\n trend={{\n value: 6.1,\n direction: 'down',\n }}\n comparisonLabel={t('design_system.gallery.samples.content.vsPreviousMonth')}\n />\n <KpiCard\n title={t('design_system.gallery.samples.content.activeCustomers')}\n value={1284}\n trend={{\n value: 0,\n direction: 'unchanged',\n }}\n comparisonLabel={t('design_system.gallery.samples.content.vsPreviousMonth')}\n />\n </div>\n )\n}\nfunction KpiCardEntrySuffixAndFooterPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xs\">\n <KpiCard\n title={t('design_system.gallery.samples.content.averageOrderValue')}\n value={86.4}\n prefix=\"\u20AC\"\n suffix={t('design_system.gallery.samples.content.net')}\n trend={{\n value: 3.2,\n direction: 'up',\n }}\n footer={\n <span className=\"text-muted-foreground\">\n <Sparkline\n values={weeklyOrdersTrend}\n ariaLabel={t('design_system.gallery.samples.content.weeklyOrdersTrend')}\n />\n </span>\n }\n />\n </div>\n )\n}\nfunction KpiCardEntryStatesPreview() {\n const t = useT()\n return (\n <div className=\"grid w-full max-w-3xl grid-cols-1 gap-4 sm:grid-cols-3\">\n <KpiCard title={t('design_system.gallery.samples.content.loading')} value={null} loading />\n <KpiCard\n title={t('design_system.gallery.samples.content.error')}\n value={null}\n error={t('design_system.gallery.samples.content.failedToLoadMetric')}\n />\n <KpiCard title={t('design_system.gallery.samples.content.noData')} value={null} />\n </div>\n )\n}\nfunction BarChartEntryBasicPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title={t('design_system.gallery.samples.content.revenueByMonth')}\n data={revenueByMonth(t)}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n )\n}\nfunction BarChartEntryHorizontalPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title={t('design_system.gallery.samples.content.revenueByChannel')}\n data={revenueByChannel(t)}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n />\n </div>\n )\n}\nfunction BarChartEntryMultiSeriesPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <BarChart\n title={t('design_system.gallery.samples.content.ordersByMonth')}\n data={ordersByMonth(t)}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{\n online: t('design_system.gallery.samples.content.online'),\n retail: t('design_system.gallery.samples.content.retail'),\n }}\n />\n </div>\n )\n}\nfunction LineChartEntryBasicPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title={t('design_system.gallery.samples.content.revenueByMonth')}\n data={revenueByMonth(t)}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n />\n </div>\n )\n}\nfunction LineChartEntryAreaPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title={t('design_system.gallery.samples.content.revenueByMonth')}\n data={revenueByMonth(t)}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n />\n </div>\n )\n}\nfunction LineChartEntryMultiSeriesPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <LineChart\n title={t('design_system.gallery.samples.content.ordersByMonth')}\n data={ordersByMonth(t)}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{\n online: t('design_system.gallery.samples.content.online'),\n retail: t('design_system.gallery.samples.content.retail'),\n }}\n curveType=\"monotone\"\n />\n </div>\n )\n}\nfunction PieChartEntryPiePreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-md\">\n <PieChart title={t('design_system.gallery.samples.content.ordersByStatus')} data={ordersByStatus(t)} />\n </div>\n )\n}\nfunction PieChartEntryDonutPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-md\">\n <PieChart\n title={t('design_system.gallery.samples.content.ordersByStatus')}\n data={ordersByStatus(t)}\n variant=\"donut\"\n />\n </div>\n )\n}\nfunction TopNTableEntryBasicPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title={t('design_system.gallery.samples.content.topProducts')}\n data={topProducts(t)}\n columns={topProductColumns(t)}\n />\n </div>\n )\n}\nfunction TopNTableEntryMaxRowsPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title={t('design_system.gallery.samples.content.top3Products')}\n data={topProducts(t)}\n columns={topProductColumns(t)}\n maxRows={3}\n />\n </div>\n )\n}\nfunction TopNTableEntryEmptyPreview() {\n const t = useT()\n return (\n <div className=\"w-full max-w-xl\">\n <TopNTable\n title={t('design_system.gallery.samples.content.topProducts')}\n data={[]}\n columns={topProductColumns(t)}\n emptyMessage={t('design_system.gallery.samples.content.noSalesInThisPeriod')}\n />\n </div>\n )\n}\nconst revenueByMonth = (t: ReturnType<typeof useT>) => [\n {\n month: t('design_system.gallery.samples.content.jan'),\n revenue: 48200,\n },\n {\n month: t('design_system.gallery.samples.content.feb'),\n revenue: 51400,\n },\n {\n month: t('design_system.gallery.samples.content.mar'),\n revenue: 47900,\n },\n {\n month: t('design_system.gallery.samples.content.apr'),\n revenue: 61200,\n },\n {\n month: t('design_system.gallery.samples.content.may'),\n revenue: 58600,\n },\n {\n month: t('design_system.gallery.samples.content.jun'),\n revenue: 67300,\n },\n]\nconst revenueByChannel = (t: ReturnType<typeof useT>) => [\n {\n channel: t('design_system.gallery.samples.content.onlineStore'),\n revenue: 182400,\n },\n {\n channel: t('design_system.gallery.samples.content.marketplace'),\n revenue: 96800,\n },\n {\n channel: t('design_system.gallery.samples.content.retail'),\n revenue: 64200,\n },\n {\n channel: t('design_system.gallery.samples.content.wholesale'),\n revenue: 41500,\n },\n]\nconst ordersByMonth = (t: ReturnType<typeof useT>) => [\n {\n month: t('design_system.gallery.samples.content.jan'),\n online: 320,\n retail: 180,\n },\n {\n month: t('design_system.gallery.samples.content.feb'),\n online: 348,\n retail: 164,\n },\n {\n month: t('design_system.gallery.samples.content.mar'),\n online: 331,\n retail: 196,\n },\n {\n month: t('design_system.gallery.samples.content.apr'),\n online: 402,\n retail: 214,\n },\n {\n month: t('design_system.gallery.samples.content.may'),\n online: 389,\n retail: 205,\n },\n {\n month: t('design_system.gallery.samples.content.jun'),\n online: 446,\n retail: 232,\n },\n]\nconst ordersByStatus = (t: ReturnType<typeof useT>) => [\n {\n name: t('design_system.gallery.samples.content.completed'),\n value: 268,\n },\n {\n name: t('design_system.gallery.samples.content.processing'),\n value: 84,\n },\n {\n name: t('design_system.gallery.samples.content.pendingPayment'),\n value: 37,\n },\n {\n name: t('design_system.gallery.samples.content.cancelled'),\n value: 22,\n },\n]\nconst weeklyOrdersTrend = [12, 18, 14, 22, 19, 27, 24, 31, 28, 35, 33, 41]\ntype TopProductRow = {\n product: string\n orders: number\n revenue: number\n [key: string]: unknown\n}\nconst topProducts = (t: ReturnType<typeof useT>): TopProductRow[] => [\n {\n product: t('design_system.gallery.samples.content.auroraDeskLamp'),\n orders: 412,\n revenue: 28840,\n },\n {\n product: t('design_system.gallery.samples.content.birchSideTable'),\n orders: 366,\n revenue: 47580,\n },\n {\n product: t('design_system.gallery.samples.content.linenThrowPillow'),\n orders: 341,\n revenue: 11935,\n },\n {\n product: t('design_system.gallery.samples.content.oakBookshelf'),\n orders: 214,\n revenue: 53500,\n },\n {\n product: t('design_system.gallery.samples.content.ceramicVaseSet'),\n orders: 198,\n revenue: 8910,\n },\n]\nconst formatCurrency = (value: number) => `\u20AC${value.toLocaleString('en-US')}`\nconst topProductColumns = (t: ReturnType<typeof useT>): TopNTableColumn<TopProductRow>[] => [\n {\n key: 'product',\n header: t('design_system.gallery.samples.content.product'),\n },\n {\n key: 'orders',\n header: t('design_system.gallery.samples.content.orders'),\n align: 'right',\n },\n {\n key: 'revenue',\n header: t('design_system.gallery.samples.content.revenue'),\n align: 'right',\n formatter: (value) => formatCurrency(value as number),\n },\n]\nconst kpiCardEntry: GalleryEntry = {\n id: 'kpi-card',\n title: 'KpiCard',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'trend-directions',\n title: 'Trend directions',\n render: () => <KpiCardEntryTrendDirectionsPreview />,\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Revenue\"\n value={67300}\n prefix=\"\u20AC\"\n trend={{ value: 14.8, direction: 'up' }}\n comparisonLabel=\"vs. previous month\"\n/>`,\n },\n {\n id: 'suffix-and-footer',\n title: 'Suffix and footer slot',\n render: () => <KpiCardEntrySuffixAndFooterPreview />,\n code: `import { KpiCard, Sparkline } from '@open-mercato/ui/backend/charts'\n\n<KpiCard\n title=\"Average order value\"\n value={86.4}\n prefix=\"\u20AC\"\n suffix=\"net\"\n trend={{ value: 3.2, direction: 'up' }}\n footer={<Sparkline values={weeklyTrend} ariaLabel=\"Weekly orders trend\" />}\n/>`,\n },\n {\n id: 'states',\n title: 'Loading, error and empty states',\n render: () => <KpiCardEntryStatesPreview />,\n code: `import { KpiCard } from '@open-mercato/ui/backend/charts'\n\n<KpiCard title=\"Loading\" value={null} loading />\n<KpiCard title=\"Error\" value={null} error=\"Failed to load metric\" />\n<KpiCard title=\"No data\" value={null} />`,\n },\n {\n id: 'delta-badge',\n title: 'DeltaBadge (standalone)',\n render: () => <KpiCardEntryDeltaBadgePreview />,\n code: `import { DeltaBadge } from '@open-mercato/ui/backend/charts'\n\n<DeltaBadge direction=\"up\" value={12.4} />\n<DeltaBadge direction=\"down\" value={4.7} />\n<DeltaBadge direction=\"unchanged\" value={0} />\n<DeltaBadge direction=\"up\" value={38} unit=\" pts\" />`,\n },\n ],\n}\nconst sparklineEntry: GalleryEntry = {\n id: 'sparkline',\n title: 'Sparkline',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => <SparklineEntryDefaultPreview />,\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={[12, 18, 14, 22, 19, 27, 24, 31]} ariaLabel=\"Weekly orders trend\" />`,\n },\n {\n id: 'semantic-color',\n title: 'Colored via currentColor',\n render: () => <SparklineEntrySemanticColorPreview />,\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n// Sparkline strokes with currentColor \u2014 set a semantic text token on the wrapper.\n<span className=\"text-primary\">\n <Sparkline values={values} ariaLabel=\"Orders trending up\" />\n</span>`,\n },\n {\n id: 'sizes',\n title: 'Custom width and height',\n render: () => <SparklineEntrySizesPreview />,\n code: `import { Sparkline } from '@open-mercato/ui/backend/charts'\n\n<Sparkline values={values} ariaLabel=\"Small trend\" width={64} height={20} />\n<Sparkline values={values} ariaLabel=\"Default trend\" />\n<Sparkline values={values} ariaLabel=\"Large trend\" width={160} height={40} />`,\n },\n ],\n}\nconst barChartEntry: GalleryEntry = {\n id: 'bar-chart',\n title: 'BarChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => <BarChartEntryBasicPreview />,\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'horizontal',\n title: 'Horizontal layout',\n render: () => <BarChartEntryHorizontalPreview />,\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Revenue by channel\"\n data={revenueByChannel}\n index=\"channel\"\n categories={['revenue']}\n layout=\"horizontal\"\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series with legend',\n render: () => <BarChartEntryMultiSeriesPreview />,\n code: `import { BarChart } from '@open-mercato/ui/backend/charts'\n\n<BarChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n/>`,\n },\n ],\n}\nconst lineChartEntry: GalleryEntry = {\n id: 'line-chart',\n title: 'LineChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Basic (revenue by month)',\n render: () => <LineChartEntryBasicPreview />,\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showLegend={false}\n/>`,\n },\n {\n id: 'area',\n title: 'Area fill',\n render: () => <LineChartEntryAreaPreview />,\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Revenue by month\"\n data={revenueByMonth}\n index=\"month\"\n categories={['revenue']}\n showArea\n showLegend={false}\n/>`,\n },\n {\n id: 'multi-series',\n title: 'Multiple series, monotone curve',\n render: () => <LineChartEntryMultiSeriesPreview />,\n code: `import { LineChart } from '@open-mercato/ui/backend/charts'\n\n<LineChart\n title=\"Orders by month\"\n data={ordersByMonth}\n index=\"month\"\n categories={['online', 'retail']}\n categoryLabels={{ online: 'Online', retail: 'Retail' }}\n curveType=\"monotone\"\n/>`,\n },\n ],\n}\nconst pieChartEntry: GalleryEntry = {\n id: 'pie-chart',\n title: 'PieChart',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'pie',\n title: 'Pie (orders by status)',\n render: () => <PieChartEntryPiePreview />,\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} />`,\n },\n {\n id: 'donut',\n title: 'Donut',\n render: () => <PieChartEntryDonutPreview />,\n code: `import { PieChart } from '@open-mercato/ui/backend/charts'\n\n<PieChart title=\"Orders by status\" data={ordersByStatus} variant=\"donut\" />`,\n },\n ],\n}\nconst topNTableEntry: GalleryEntry = {\n id: 'top-n-table',\n title: 'TopNTable',\n importPath: '@open-mercato/ui/backend/charts',\n variants: [\n {\n id: 'basic',\n title: 'Top products by revenue',\n render: () => <TopNTableEntryBasicPreview />,\n code: `import { TopNTable, type TopNTableColumn } from '@open-mercato/ui/backend/charts'\n\nconst columns: TopNTableColumn<TopProductRow>[] = [\n { key: 'product', header: 'Product' },\n { key: 'orders', header: 'Orders', align: 'right' },\n { key: 'revenue', header: 'Revenue', align: 'right', formatter: (v) => formatCurrency(v as number) },\n]\n\n<TopNTable title=\"Top products\" data={topProducts} columns={columns} />`,\n },\n {\n id: 'max-rows',\n title: 'Capped with maxRows',\n render: () => <TopNTableEntryMaxRowsPreview />,\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top 3 products\" data={topProducts} columns={columns} maxRows={3} />`,\n },\n {\n id: 'empty',\n title: 'Empty state',\n render: () => <TopNTableEntryEmptyPreview />,\n code: `import { TopNTable } from '@open-mercato/ui/backend/charts'\n\n<TopNTable title=\"Top products\" data={[]} columns={columns} emptyMessage=\"No sales in this period\" />`,\n },\n ],\n}\nconst marketingWidgetsEntry: GalleryEntry = {\n id: 'marketing-widgets',\n title: 'Marketing & Sales Widgets',\n importPath: '@open-mercato/ui/primitives/card',\n figmaNodeId: '164628:1734',\n variants: [\n {\n id: 'total-sales',\n title: 'total-sales',\n render: () => <MarketingWidgetDemo kind=\"total-sales\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"total-sales\" />'),\n },\n {\n id: 'total-visitors',\n title: 'total-visitors',\n render: () => <MarketingWidgetDemo kind=\"total-visitors\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"total-visitors\" />'),\n },\n {\n id: 'conversion-rate',\n title: 'conversion-rate',\n render: () => <MarketingWidgetDemo kind=\"conversion-rate\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"conversion-rate\" />'),\n },\n {\n id: 'user-retention',\n title: 'user-retention',\n render: () => <MarketingWidgetDemo kind=\"user-retention\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"user-retention\" />'),\n },\n {\n id: 'weekly-visitors',\n title: 'weekly-visitors',\n render: () => <MarketingWidgetDemo kind=\"weekly-visitors\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"weekly-visitors\" />'),\n },\n {\n id: 'visitor-channels',\n title: 'visitor-channels',\n render: () => <MarketingWidgetDemo kind=\"visitor-channels\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"visitor-channels\" />'),\n },\n {\n id: 'geography',\n title: 'geography',\n render: () => <MarketingWidgetDemo kind=\"geography\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"geography\" />'),\n },\n {\n id: 'realtime-visitors',\n title: 'realtime-visitors',\n render: () => <MarketingWidgetDemo kind=\"realtime-visitors\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"realtime-visitors\" />'),\n },\n {\n id: 'marketing-channels',\n title: 'marketing-channels',\n render: () => <MarketingWidgetDemo kind=\"marketing-channels\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"marketing-channels\" />'),\n },\n {\n id: 'product-performance',\n title: 'product-performance',\n render: () => <MarketingWidgetDemo kind=\"product-performance\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"product-performance\" />'),\n },\n {\n id: 'shipping-tracking',\n title: 'shipping-tracking',\n render: () => <MarketingWidgetDemo kind=\"shipping-tracking\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"shipping-tracking\" />'),\n },\n {\n id: 'my-products',\n title: 'my-products',\n render: () => <MarketingWidgetDemo kind=\"my-products\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"my-products\" />'),\n },\n {\n id: 'product-categories',\n title: 'product-categories',\n render: () => <MarketingWidgetDemo kind=\"product-categories\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"product-categories\" />'),\n },\n {\n id: 'customer-segments',\n title: 'customer-segments',\n render: () => <MarketingWidgetDemo kind=\"customer-segments\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"customer-segments\" />'),\n },\n {\n id: 'sales-channels',\n title: 'sales-channels',\n render: () => <MarketingWidgetDemo kind=\"sales-channels\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"sales-channels\" />'),\n },\n {\n id: 'campaign-data',\n title: 'campaign-data',\n render: () => <MarketingWidgetDemo kind=\"campaign-data\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"campaign-data\" />'),\n },\n {\n id: 'support-analytics',\n title: 'support-analytics',\n render: () => <MarketingWidgetDemo kind=\"support-analytics\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"support-analytics\" />'),\n },\n {\n id: 'recent-activities',\n title: 'recent-activities',\n render: () => <MarketingWidgetDemo kind=\"recent-activities\" />,\n code: marketingWidgetExampleCode('<MarketingWidgetDemo kind=\"recent-activities\" />'),\n },\n ],\n}\nexport const entries: GalleryEntry[] = [\n marketingWidgetsEntry,\n kpiCardEntry,\n sparklineEntry,\n barChartEntry,\n lineChartEntry,\n pieChartEntry,\n topNTableEntry,\n]\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
+
import { TimePickerDurationExamples, TimePickerSlotExamples, TimePickerStatusExamples } from "../demos/time-picker.js";
|
|
4
|
+
import { timePickerDurationCode, timePickerSlotCode, timePickerStatusCode } from "../demos/time-picker-code.generated.js";
|
|
5
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
3
6
|
import { Clock } from "lucide-react";
|
|
4
|
-
import { Calendar } from "@open-mercato/ui/primitives/calendar";
|
|
7
|
+
import { Calendar, CalendarMonthSelector } from "@open-mercato/ui/primitives/calendar";
|
|
5
8
|
import { DatePicker } from "@open-mercato/ui/primitives/date-picker";
|
|
9
|
+
import { defaultDateRangePresets } from "@open-mercato/ui/primitives/date-picker-helpers";
|
|
6
10
|
import { DateRangePicker } from "@open-mercato/ui/primitives/date-range-picker";
|
|
7
11
|
import {
|
|
8
12
|
TimePicker,
|
|
@@ -38,8 +42,74 @@ function DemoCalendarRange() {
|
|
|
38
42
|
}
|
|
39
43
|
);
|
|
40
44
|
}
|
|
45
|
+
function CalendarMarkedDemo() {
|
|
46
|
+
const t = useT();
|
|
47
|
+
const [selected, setSelected] = React.useState(new Date(2026, 5, 12));
|
|
48
|
+
const marked = [new Date(2026, 5, 8), new Date(2026, 5, 12), new Date(2026, 5, 20)];
|
|
49
|
+
return /* @__PURE__ */ jsx(
|
|
50
|
+
Calendar,
|
|
51
|
+
{
|
|
52
|
+
mode: "single",
|
|
53
|
+
daySize: 40,
|
|
54
|
+
defaultMonth: new Date(2026, 5, 1),
|
|
55
|
+
today: new Date(2026, 5, 12),
|
|
56
|
+
selected,
|
|
57
|
+
onSelect: setSelected,
|
|
58
|
+
disabled: [new Date(2026, 5, 20)],
|
|
59
|
+
modifiers: { marked },
|
|
60
|
+
modifiersClassNames: { marked: "after:absolute after:bottom-1.5 after:left-1/2 after:size-0.75 after:-translate-x-1/2 after:rounded-full after:bg-current after:content-['']" },
|
|
61
|
+
labels: { labelDayButton: (day, modifiers) => modifiers.marked ? t("design_system.gallery.examples.controls.markedDate", { date: new Intl.DateTimeFormat(void 0, { dateStyle: "full" }).format(day) }) : new Intl.DateTimeFormat(void 0, { dateStyle: "full" }).format(day) }
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
function CalendarBoundaryDemo() {
|
|
66
|
+
const [range, setRange] = React.useState({ from: new Date(2026, 5, 8), to: new Date(2026, 5, 19) });
|
|
67
|
+
return /* @__PURE__ */ jsx(
|
|
68
|
+
Calendar,
|
|
69
|
+
{
|
|
70
|
+
mode: "range",
|
|
71
|
+
daySize: 40,
|
|
72
|
+
defaultMonth: new Date(2026, 5, 1),
|
|
73
|
+
today: new Date(2026, 5, 12),
|
|
74
|
+
startMonth: new Date(2026, 5, 1),
|
|
75
|
+
endMonth: new Date(2026, 5, 30),
|
|
76
|
+
selected: range,
|
|
77
|
+
onSelect: (value) => setRange(value ?? { from: void 0 }),
|
|
78
|
+
disabled: [{ before: new Date(2026, 5, 5) }, { after: new Date(2026, 5, 25) }],
|
|
79
|
+
excludeDisabled: true
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
function CalendarSelectorDemo({ previous, next }) {
|
|
84
|
+
const [month, setMonth] = React.useState(new Date(2026, 5, 1));
|
|
85
|
+
const [selected, setSelected] = React.useState();
|
|
86
|
+
const move = (offset) => setMonth((current) => new Date(current.getFullYear(), current.getMonth() + offset, 1));
|
|
87
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-fit", children: [
|
|
88
|
+
/* @__PURE__ */ jsx(CalendarMonthSelector, { month, onPreviousMonth: previous ? () => move(-1) : void 0, onNextMonth: next ? () => move(1) : void 0 }),
|
|
89
|
+
/* @__PURE__ */ jsx(Calendar, { mode: "single", daySize: 40, month, onMonthChange: setMonth, selected, onSelect: setSelected, today: new Date(2026, 5, 12), components: { MonthCaption: () => /* @__PURE__ */ jsx(Fragment, {}) } })
|
|
90
|
+
] });
|
|
91
|
+
}
|
|
92
|
+
function DatePickerBoundaryDemo() {
|
|
93
|
+
const t = useT();
|
|
94
|
+
const [value, setValue] = React.useState(new Date(2026, 5, 12));
|
|
95
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-3", children: [
|
|
96
|
+
/* @__PURE__ */ jsx(DatePicker, { value, onChange: setValue, minDate: new Date(2026, 5, 5), maxDate: new Date(2026, 5, 25), "aria-label": t("design_system.gallery.examples.controls.date") }),
|
|
97
|
+
/* @__PURE__ */ jsx(DatePicker, { value, onChange: setValue, readOnly: true, "aria-label": t("design_system.gallery.examples.controls.readOnlyDate") }),
|
|
98
|
+
/* @__PURE__ */ jsx("output", { className: "text-sm text-muted-foreground", children: value?.toLocaleDateString() })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
function DateRangePresetDemo() {
|
|
102
|
+
const t = useT();
|
|
103
|
+
const [value, setValue] = React.useState({ start: new Date(2026, 5, 8), end: new Date(2026, 5, 12) });
|
|
104
|
+
const presets = React.useMemo(() => defaultDateRangePresets().map((preset) => ({ ...preset, range: () => preset.range(new Date(2026, 5, 12)) })), []);
|
|
105
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-sm flex-col gap-3", children: [
|
|
106
|
+
/* @__PURE__ */ jsx(DateRangePicker, { value, onChange: setValue, presets, "aria-label": t("design_system.gallery.examples.controls.period") }),
|
|
107
|
+
/* @__PURE__ */ jsx("output", { className: "text-sm text-muted-foreground", children: value ? `${value.start.toLocaleDateString()} \u2013 ${value.end.toLocaleDateString()}` : t("design_system.gallery.examples.controls.empty") })
|
|
108
|
+
] });
|
|
109
|
+
}
|
|
41
110
|
const calendarEntry = {
|
|
42
111
|
id: "calendar",
|
|
112
|
+
figmaNodeId: "437:175",
|
|
43
113
|
title: "Calendar",
|
|
44
114
|
importPath: "@open-mercato/ui/primitives/calendar",
|
|
45
115
|
variants: [
|
|
@@ -70,6 +140,74 @@ const [selected, setSelected] = React.useState<{ from?: Date; to?: Date }>()
|
|
|
70
140
|
code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'
|
|
71
141
|
|
|
72
142
|
<Calendar disabled={{ dayOfWeek: [0, 6] }} />`
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "marked-days",
|
|
146
|
+
title: "Marked / selected / disabled days",
|
|
147
|
+
render: () => /* @__PURE__ */ jsx(CalendarMarkedDemo, {}),
|
|
148
|
+
code: `import * as React from 'react'
|
|
149
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
150
|
+
import { Calendar } from '@open-mercato/ui/primitives/calendar'
|
|
151
|
+
|
|
152
|
+
function CalendarMarkedDemo() {
|
|
153
|
+
const t = useT()
|
|
154
|
+
const [selected, setSelected] = React.useState<Date | undefined>(new Date(2026, 5, 12))
|
|
155
|
+
const marked = [new Date(2026, 5, 8), new Date(2026, 5, 12), new Date(2026, 5, 20)]
|
|
156
|
+
return <Calendar mode="single" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)} selected={selected} onSelect={setSelected}
|
|
157
|
+
disabled={[new Date(2026, 5, 20)]} modifiers={{ marked }}
|
|
158
|
+
modifiersClassNames={{ marked: "after:absolute after:bottom-1.5 after:left-1/2 after:size-0.75 after:-translate-x-1/2 after:rounded-full after:bg-current after:content-['']" }}
|
|
159
|
+
labels={{ labelDayButton: (day, modifiers) => modifiers.marked
|
|
160
|
+
? t('design_system.gallery.examples.controls.markedDate', { date: new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) })
|
|
161
|
+
: new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) }} />
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
<CalendarMarkedDemo />`
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: "range-boundaries",
|
|
168
|
+
title: "Range boundaries",
|
|
169
|
+
render: () => /* @__PURE__ */ jsx(CalendarBoundaryDemo, {}),
|
|
170
|
+
code: `import * as React from 'react'
|
|
171
|
+
import { Calendar } from '@open-mercato/ui/primitives/calendar'
|
|
172
|
+
|
|
173
|
+
function CalendarBoundaryDemo() {
|
|
174
|
+
const [range, setRange] = React.useState<{ from: Date | undefined; to?: Date }>({ from: new Date(2026, 5, 8), to: new Date(2026, 5, 19) })
|
|
175
|
+
return <Calendar mode="range" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)}
|
|
176
|
+
startMonth={new Date(2026, 5, 1)} endMonth={new Date(2026, 5, 30)}
|
|
177
|
+
selected={range} onSelect={(value) => setRange(value ?? { from: undefined })}
|
|
178
|
+
disabled={[{ before: new Date(2026, 5, 5) }, { after: new Date(2026, 5, 25) }]} excludeDisabled />
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
<CalendarBoundaryDemo />`
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: "month-selectors",
|
|
185
|
+
title: "Month selectors \xB7 4 icon combinations",
|
|
186
|
+
render: () => /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-6", children: [
|
|
187
|
+
/* @__PURE__ */ jsx(CalendarSelectorDemo, { previous: false, next: false }),
|
|
188
|
+
/* @__PURE__ */ jsx(CalendarSelectorDemo, { previous: true, next: false }),
|
|
189
|
+
/* @__PURE__ */ jsx(CalendarSelectorDemo, { previous: false, next: true }),
|
|
190
|
+
/* @__PURE__ */ jsx(CalendarSelectorDemo, { previous: true, next: true })
|
|
191
|
+
] }),
|
|
192
|
+
code: `import * as React from 'react'
|
|
193
|
+
import { Calendar, CalendarMonthSelector } from '@open-mercato/ui/primitives/calendar'
|
|
194
|
+
|
|
195
|
+
function CalendarSelectorDemo({ previous, next }: { previous: boolean; next: boolean }) {
|
|
196
|
+
const [month, setMonth] = React.useState(new Date(2026, 5, 1))
|
|
197
|
+
const [selected, setSelected] = React.useState<Date | undefined>()
|
|
198
|
+
const move = (offset: number) => setMonth(current => new Date(current.getFullYear(), current.getMonth() + offset, 1))
|
|
199
|
+
return <div className="w-fit">
|
|
200
|
+
<CalendarMonthSelector month={month} onPreviousMonth={previous ? () => move(-1) : undefined} onNextMonth={next ? () => move(1) : undefined} />
|
|
201
|
+
<Calendar mode="single" daySize={40} month={month} onMonthChange={setMonth} selected={selected} onSelect={setSelected} today={new Date(2026, 5, 12)} components={{ MonthCaption: () => <></> }} />
|
|
202
|
+
</div>
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
<div className="flex w-full flex-wrap gap-6">
|
|
206
|
+
<CalendarSelectorDemo previous={false} next={false} />
|
|
207
|
+
<CalendarSelectorDemo previous next={false} />
|
|
208
|
+
<CalendarSelectorDemo previous={false} next />
|
|
209
|
+
<CalendarSelectorDemo previous next />
|
|
210
|
+
</div>`
|
|
73
211
|
}
|
|
74
212
|
]
|
|
75
213
|
};
|
|
@@ -87,6 +225,7 @@ function DemoDatePickerTodayClear() {
|
|
|
87
225
|
}
|
|
88
226
|
const datePickerEntry = {
|
|
89
227
|
id: "date-picker",
|
|
228
|
+
figmaNodeId: "446:7413",
|
|
90
229
|
title: "DatePicker",
|
|
91
230
|
importPath: "@open-mercato/ui/primitives/date-picker",
|
|
92
231
|
variants: [
|
|
@@ -133,6 +272,26 @@ const [value, setValue] = React.useState<Date | null>(null)
|
|
|
133
272
|
|
|
134
273
|
<DatePicker value={value} onChange={setValue} size="sm" />
|
|
135
274
|
<DatePicker value={value} onChange={setValue} disabled />`
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
id: "boundaries-readonly",
|
|
278
|
+
title: "Date boundaries and readOnly",
|
|
279
|
+
render: () => /* @__PURE__ */ jsx(DatePickerBoundaryDemo, {}),
|
|
280
|
+
code: `import * as React from 'react'
|
|
281
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
282
|
+
import { DatePicker } from '@open-mercato/ui/primitives/date-picker'
|
|
283
|
+
|
|
284
|
+
function DatePickerBoundaryDemo() {
|
|
285
|
+
const t = useT()
|
|
286
|
+
const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12))
|
|
287
|
+
return <div className="flex w-full max-w-sm flex-col gap-3">
|
|
288
|
+
<DatePicker value={value} onChange={setValue} minDate={new Date(2026, 5, 5)} maxDate={new Date(2026, 5, 25)} aria-label={t('design_system.gallery.examples.controls.date')} />
|
|
289
|
+
<DatePicker value={value} onChange={setValue} readOnly aria-label={t('design_system.gallery.examples.controls.readOnlyDate')} />
|
|
290
|
+
<output className="text-sm text-muted-foreground">{value?.toLocaleDateString()}</output>
|
|
291
|
+
</div>
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
<DatePickerBoundaryDemo />`
|
|
136
295
|
}
|
|
137
296
|
]
|
|
138
297
|
};
|
|
@@ -155,6 +314,7 @@ function DemoDateRangePickerCompact() {
|
|
|
155
314
|
}
|
|
156
315
|
const dateRangePickerEntry = {
|
|
157
316
|
id: "date-range-picker",
|
|
317
|
+
figmaNodeId: "446:7412",
|
|
158
318
|
title: "DateRangePicker",
|
|
159
319
|
importPath: "@open-mercato/ui/primitives/date-range-picker",
|
|
160
320
|
variants: [
|
|
@@ -191,33 +351,61 @@ const [value, setValue] = React.useState<DateRange | null>(null)
|
|
|
191
351
|
code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
|
|
192
352
|
|
|
193
353
|
<DateRangePicker value={value} onChange={setValue} disabled />`
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
id: "fixed-presets",
|
|
357
|
+
title: "Eight reproducible presets and draft/apply",
|
|
358
|
+
render: () => /* @__PURE__ */ jsx(DateRangePresetDemo, {}),
|
|
359
|
+
code: `import * as React from 'react'
|
|
360
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
361
|
+
import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'
|
|
362
|
+
import { defaultDateRangePresets } from '@open-mercato/ui/primitives/date-picker-helpers'
|
|
363
|
+
import type { DateRange } from '@open-mercato/ui/backend/date-range'
|
|
364
|
+
|
|
365
|
+
function DateRangePresetDemo() {
|
|
366
|
+
const t = useT()
|
|
367
|
+
const [value, setValue] = React.useState<DateRange | null>({ start: new Date(2026, 5, 8), end: new Date(2026, 5, 12) })
|
|
368
|
+
const presets = React.useMemo(() => defaultDateRangePresets().map(preset => ({ ...preset, range: () => preset.range(new Date(2026, 5, 12)) })), [])
|
|
369
|
+
return <div className="flex w-full max-w-sm flex-col gap-3">
|
|
370
|
+
<DateRangePicker value={value} onChange={setValue} presets={presets} aria-label={t('design_system.gallery.examples.controls.period')} />
|
|
371
|
+
<output className="text-sm text-muted-foreground">{value ? \`\${value.start.toLocaleDateString()} \u2013 \${value.end.toLocaleDateString()}\` : t('design_system.gallery.examples.controls.empty')}</output>
|
|
372
|
+
</div>
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
<DateRangePresetDemo />`
|
|
194
376
|
}
|
|
195
377
|
]
|
|
196
378
|
};
|
|
197
379
|
const sampleSlots = ["09:00", "09:30", "10:00", "10:30", "11:00", "11:30"];
|
|
198
380
|
function DemoTimePickerTrigger() {
|
|
381
|
+
const t = useT();
|
|
199
382
|
return /* @__PURE__ */ jsx(
|
|
200
383
|
TimePicker,
|
|
201
384
|
{
|
|
202
385
|
defaultValue: "10:00",
|
|
203
386
|
slots: sampleSlots,
|
|
204
387
|
maxHeight: 200,
|
|
205
|
-
trigger: /* @__PURE__ */ jsx(Button, { variant: "outline", children: "
|
|
388
|
+
trigger: /* @__PURE__ */ jsx(Button, { variant: "outline", children: t("design_system.gallery.sampleCopy.pickATime") })
|
|
206
389
|
}
|
|
207
390
|
);
|
|
208
391
|
}
|
|
209
392
|
const timePickerEntry = {
|
|
210
393
|
id: "time-picker",
|
|
394
|
+
figmaNodeId: "165483:5687",
|
|
211
395
|
title: "TimePicker",
|
|
212
396
|
importPath: "@open-mercato/ui/primitives/time-picker",
|
|
213
397
|
variants: [
|
|
398
|
+
{ id: "source-statuses", title: "4 statuses / 4 states", render: () => /* @__PURE__ */ jsx(TimePickerStatusExamples, {}), code: timePickerStatusCode },
|
|
399
|
+
{ id: "source-durations", title: "Duration / 4 states", render: () => /* @__PURE__ */ jsx(TimePickerDurationExamples, {}), code: timePickerDurationCode },
|
|
400
|
+
{ id: "source-slots", title: "Selection indicator right / center / 4 states", render: () => /* @__PURE__ */ jsx(TimePickerSlotExamples, {}), code: timePickerSlotCode },
|
|
214
401
|
{
|
|
215
402
|
id: "inline-card",
|
|
216
403
|
title: "Inline card",
|
|
217
|
-
render: () => /* @__PURE__ */ jsx(TimePicker, { defaultValue: "10:00", slots: sampleSlots, maxHeight: 160 }),
|
|
404
|
+
render: () => /* @__PURE__ */ jsx(TimePicker, { defaultValue: "10:00", slots: sampleSlots, maxHeight: 160, className: "max-w-full" }),
|
|
218
405
|
code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'
|
|
219
406
|
|
|
220
407
|
<TimePicker
|
|
408
|
+
className="max-w-full"
|
|
221
409
|
defaultValue="10:00"
|
|
222
410
|
slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}
|
|
223
411
|
/>`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/design_system/gallery/entries/dates.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react'\nimport { Clock } from 'lucide-react'\nimport { Calendar } from '@open-mercato/ui/primitives/calendar'\nimport { DatePicker } from '@open-mercato/ui/primitives/date-picker'\nimport { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\nimport {\n TimePicker,\n TimePickerSlot,\n TimePickerDurationChip,\n TimePickerStatusChip,\n} from '@open-mercato/ui/primitives/time-picker'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport type { DateRange } from '@open-mercato/ui/backend/date-range'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// Fixed sample dates \u2014 previews must not depend on \"today\" so the gallery\n// renders identically on any day (the `today` highlight ring aside).\nconst sampleDay = new Date(2026, 5, 12)\nconst sampleMonth = new Date(2026, 5, 1)\nconst sampleRange: DateRange = { start: new Date(2026, 5, 8), end: new Date(2026, 5, 19) }\n\nfunction DemoCalendarSingle() {\n const [selected, setSelected] = React.useState<Date | undefined>(sampleDay)\n return (\n <Calendar\n mode=\"single\"\n selected={selected}\n onSelect={(day) => setSelected(day)}\n defaultMonth={sampleMonth}\n />\n )\n}\n\nfunction DemoCalendarRange() {\n const [selected, setSelected] = React.useState<\n { from: Date | undefined; to?: Date | undefined } | undefined\n >({ from: sampleRange.start, to: sampleRange.end })\n return (\n <Calendar\n mode=\"range\"\n selected={selected}\n onSelect={(range) => setSelected(range)}\n defaultMonth={sampleMonth}\n />\n )\n}\n\nconst calendarEntry: GalleryEntry = {\n id: 'calendar',\n title: 'Calendar',\n importPath: '@open-mercato/ui/primitives/calendar',\n variants: [\n {\n id: 'single',\n title: 'Single selection',\n render: () => <DemoCalendarSingle />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nconst [selected, setSelected] = React.useState<Date | undefined>()\n\n<Calendar mode=\"single\" selected={selected} onSelect={setSelected} />`,\n },\n {\n id: 'range',\n title: 'Range selection',\n render: () => <DemoCalendarRange />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nconst [selected, setSelected] = React.useState<{ from?: Date; to?: Date }>()\n\n<Calendar mode=\"range\" selected={selected} onSelect={setSelected} />`,\n },\n {\n id: 'disabled-days',\n title: 'Disabled days',\n render: () => <Calendar defaultMonth={sampleMonth} disabled={{ dayOfWeek: [0, 6] }} />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\n<Calendar disabled={{ dayOfWeek: [0, 6] }} />`,\n },\n ],\n}\n\nfunction DemoDatePicker() {\n const [value, setValue] = React.useState<Date | null>(sampleDay)\n return <DatePicker value={value} onChange={setValue} />\n}\n\nfunction DemoDatePickerWithTime() {\n const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12, 9, 30))\n return <DatePicker value={value} onChange={setValue} withTime minuteStep={15} />\n}\n\nfunction DemoDatePickerTodayClear() {\n const [value, setValue] = React.useState<Date | null>(null)\n return <DatePicker value={value} onChange={setValue} footer=\"today-clear\" />\n}\n\nconst datePickerEntry: GalleryEntry = {\n id: 'date-picker',\n title: 'DatePicker',\n importPath: '@open-mercato/ui/primitives/date-picker',\n variants: [\n {\n id: 'default',\n title: 'default (apply-cancel footer)',\n render: () => <DemoDatePicker />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} />`,\n },\n {\n id: 'with-time',\n title: 'withTime',\n render: () => <DemoDatePickerWithTime />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} withTime minuteStep={15} />`,\n },\n {\n id: 'today-clear-footer',\n title: \"footer='today-clear'\",\n render: () => <DemoDatePickerTodayClear />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} footer=\"today-clear\" />`,\n },\n {\n id: 'states',\n title: 'Small / disabled',\n render: () => (\n <>\n <DatePicker value={sampleDay} onChange={() => {}} size=\"sm\" />\n <DatePicker value={sampleDay} onChange={() => {}} disabled />\n </>\n ),\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\n<DatePicker value={value} onChange={setValue} size=\"sm\" />\n<DatePicker value={value} onChange={setValue} disabled />`,\n },\n ],\n}\n\nfunction DemoDateRangePicker() {\n const [value, setValue] = React.useState<DateRange | null>(sampleRange)\n return <DateRangePicker value={value} onChange={setValue} />\n}\n\nfunction DemoDateRangePickerCompact() {\n const [value, setValue] = React.useState<DateRange | null>(null)\n return (\n <DateRangePicker\n value={value}\n onChange={setValue}\n showPresets={false}\n numberOfMonths={1}\n size=\"sm\"\n />\n )\n}\n\nconst dateRangePickerEntry: GalleryEntry = {\n id: 'date-range-picker',\n title: 'DateRangePicker',\n importPath: '@open-mercato/ui/primitives/date-range-picker',\n variants: [\n {\n id: 'default',\n title: 'default (presets + two months)',\n render: () => <DemoDateRangePicker />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\nimport type { DateRange } from '@open-mercato/ui/backend/date-range'\n\nconst [value, setValue] = React.useState<DateRange | null>(null)\n\n<DateRangePicker value={value} onChange={setValue} />`,\n },\n {\n id: 'compact',\n title: 'Compact (no presets, one month)',\n render: () => <DemoDateRangePickerCompact />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\n\n<DateRangePicker\n value={value}\n onChange={setValue}\n showPresets={false}\n numberOfMonths={1}\n size=\"sm\"\n/>`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => <DateRangePicker value={sampleRange} onChange={() => {}} disabled />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\n\n<DateRangePicker value={value} onChange={setValue} disabled />`,\n },\n ],\n}\n\nconst sampleSlots = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']\n\nfunction DemoTimePickerTrigger() {\n return (\n <TimePicker\n defaultValue=\"10:00\"\n slots={sampleSlots}\n maxHeight={200}\n trigger={<Button variant=\"outline\">Pick a time</Button>}\n />\n )\n}\n\nconst timePickerEntry: GalleryEntry = {\n id: 'time-picker',\n title: 'TimePicker',\n importPath: '@open-mercato/ui/primitives/time-picker',\n variants: [\n {\n id: 'inline-card',\n title: 'Inline card',\n render: () => (\n <TimePicker defaultValue=\"10:00\" slots={sampleSlots} maxHeight={160} />\n ),\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\n\n<TimePicker\n defaultValue=\"10:00\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n/>`,\n },\n {\n id: 'durations-statuses',\n title: 'Durations + statuses',\n render: () => (\n <TimePicker\n defaultValue=\"09:30\"\n slots={sampleSlots}\n maxHeight={140}\n durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}\n defaultActiveDuration={30}\n statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}\n defaultActiveStatus=\"available\"\n />\n ),\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\n\n<TimePicker\n defaultValue=\"09:30\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}\n defaultActiveDuration={30}\n statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}\n defaultActiveStatus=\"available\"\n/>`,\n },\n {\n id: 'with-trigger',\n title: 'With trigger (popover)',\n render: () => <DemoTimePickerTrigger />,\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\nimport { Button } from '@open-mercato/ui/primitives/button'\n\n<TimePicker\n defaultValue=\"10:00\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n trigger={<Button variant=\"outline\">Pick a time</Button>}\n/>`,\n },\n {\n id: 'atoms',\n title: 'Atoms (Slot / DurationChip / StatusChip)',\n render: () => (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex w-56 flex-col gap-0.5\">\n <TimePickerSlot value=\"09:30\" />\n <TimePickerSlot value=\"10:00\" selected />\n <TimePickerSlot value=\"10:30\" disabled />\n </div>\n <div className=\"flex items-center gap-2\">\n <TimePickerDurationChip value={30} />\n <TimePickerDurationChip value={90} selected />\n </div>\n <div className=\"flex items-center gap-2\">\n <TimePickerStatusChip variant=\"available\" selected />\n <TimePickerStatusChip variant=\"busy\" />\n <TimePickerStatusChip variant=\"in-meeting\" icon={<Clock className=\"size-3\" aria-hidden=\"true\" />} />\n </div>\n </div>\n ),\n code: `import { Clock } from 'lucide-react'\nimport {\n TimePickerSlot,\n TimePickerDurationChip,\n TimePickerStatusChip,\n} from '@open-mercato/ui/primitives/time-picker'\n\n<TimePickerSlot value=\"10:00\" selected />\n<TimePickerDurationChip value={90} selected />\n<TimePickerStatusChip variant=\"busy\" />\n<TimePickerStatusChip variant=\"in-meeting\" icon={<Clock className=\"size-3\" />} />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n calendarEntry,\n datePickerEntry,\n dateRangePickerEntry,\n timePickerEntry,\n]\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { TimePickerDurationExamples, TimePickerSlotExamples, TimePickerStatusExamples } from '../demos/time-picker'\nimport { timePickerDurationCode, timePickerSlotCode, timePickerStatusCode } from '../demos/time-picker-code.generated'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Clock } from 'lucide-react'\nimport { Calendar, CalendarMonthSelector } from '@open-mercato/ui/primitives/calendar'\nimport { DatePicker } from '@open-mercato/ui/primitives/date-picker'\nimport { defaultDateRangePresets } from '@open-mercato/ui/primitives/date-picker-helpers'\nimport { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\nimport {\n TimePicker,\n TimePickerSlot,\n TimePickerDurationChip,\n TimePickerStatusChip,\n} from '@open-mercato/ui/primitives/time-picker'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport type { DateRange } from '@open-mercato/ui/backend/date-range'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// Fixed sample dates \u2014 previews must not depend on \"today\" so the gallery\n// renders identically on any day (the `today` highlight ring aside).\nconst sampleDay = new Date(2026, 5, 12)\nconst sampleMonth = new Date(2026, 5, 1)\nconst sampleRange: DateRange = { start: new Date(2026, 5, 8), end: new Date(2026, 5, 19) }\n\nfunction DemoCalendarSingle() {\n const [selected, setSelected] = React.useState<Date | undefined>(sampleDay)\n return (\n <Calendar\n mode=\"single\"\n selected={selected}\n onSelect={(day) => setSelected(day)}\n defaultMonth={sampleMonth}\n />\n )\n}\n\nfunction DemoCalendarRange() {\n const [selected, setSelected] = React.useState<\n { from: Date | undefined; to?: Date | undefined } | undefined\n >({ from: sampleRange.start, to: sampleRange.end })\n return (\n <Calendar\n mode=\"range\"\n selected={selected}\n onSelect={(range) => setSelected(range)}\n defaultMonth={sampleMonth}\n />\n )\n}\n\nfunction CalendarMarkedDemo() {\n const t = useT()\n const [selected, setSelected] = React.useState<Date | undefined>(new Date(2026, 5, 12))\n const marked = [new Date(2026, 5, 8), new Date(2026, 5, 12), new Date(2026, 5, 20)]\n return <Calendar mode=\"single\" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)} selected={selected} onSelect={setSelected}\n disabled={[new Date(2026, 5, 20)]} modifiers={{ marked }}\n modifiersClassNames={{ marked: \"after:absolute after:bottom-1.5 after:left-1/2 after:size-0.75 after:-translate-x-1/2 after:rounded-full after:bg-current after:content-['']\" }}\n labels={{ labelDayButton: (day, modifiers) => modifiers.marked\n ? t('design_system.gallery.examples.controls.markedDate', { date: new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) })\n : new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) }} />\n}\n\nfunction CalendarBoundaryDemo() {\n const [range, setRange] = React.useState<{ from: Date | undefined; to?: Date }>({ from: new Date(2026, 5, 8), to: new Date(2026, 5, 19) })\n return <Calendar mode=\"range\" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)}\n startMonth={new Date(2026, 5, 1)} endMonth={new Date(2026, 5, 30)}\n selected={range} onSelect={(value) => setRange(value ?? { from: undefined })}\n disabled={[{ before: new Date(2026, 5, 5) }, { after: new Date(2026, 5, 25) }]} excludeDisabled />\n}\n\nfunction CalendarSelectorDemo({ previous, next }: { previous: boolean; next: boolean }) {\n const [month, setMonth] = React.useState(new Date(2026, 5, 1))\n const [selected, setSelected] = React.useState<Date | undefined>()\n const move = (offset: number) => setMonth(current => new Date(current.getFullYear(), current.getMonth() + offset, 1))\n return <div className=\"w-fit\">\n <CalendarMonthSelector month={month} onPreviousMonth={previous ? () => move(-1) : undefined} onNextMonth={next ? () => move(1) : undefined} />\n <Calendar mode=\"single\" daySize={40} month={month} onMonthChange={setMonth} selected={selected} onSelect={setSelected} today={new Date(2026, 5, 12)} components={{ MonthCaption: () => <></> }} />\n </div>\n}\n\nfunction DatePickerBoundaryDemo() {\n const t = useT()\n const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12))\n return <div className=\"flex w-full max-w-sm flex-col gap-3\">\n <DatePicker value={value} onChange={setValue} minDate={new Date(2026, 5, 5)} maxDate={new Date(2026, 5, 25)} aria-label={t('design_system.gallery.examples.controls.date')} />\n <DatePicker value={value} onChange={setValue} readOnly aria-label={t('design_system.gallery.examples.controls.readOnlyDate')} />\n <output className=\"text-sm text-muted-foreground\">{value?.toLocaleDateString()}</output>\n </div>\n}\n\nfunction DateRangePresetDemo() {\n const t = useT()\n const [value, setValue] = React.useState<DateRange | null>({ start: new Date(2026, 5, 8), end: new Date(2026, 5, 12) })\n const presets = React.useMemo(() => defaultDateRangePresets().map(preset => ({ ...preset, range: () => preset.range(new Date(2026, 5, 12)) })), [])\n return <div className=\"flex w-full max-w-sm flex-col gap-3\">\n <DateRangePicker value={value} onChange={setValue} presets={presets} aria-label={t('design_system.gallery.examples.controls.period')} />\n <output className=\"text-sm text-muted-foreground\">{value ? `${value.start.toLocaleDateString()} \u2013 ${value.end.toLocaleDateString()}` : t('design_system.gallery.examples.controls.empty')}</output>\n </div>\n}\n\nconst calendarEntry: GalleryEntry = {\n id: 'calendar',\n figmaNodeId: '437:175',\n title: 'Calendar',\n importPath: '@open-mercato/ui/primitives/calendar',\n variants: [\n {\n id: 'single',\n title: 'Single selection',\n render: () => <DemoCalendarSingle />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nconst [selected, setSelected] = React.useState<Date | undefined>()\n\n<Calendar mode=\"single\" selected={selected} onSelect={setSelected} />`,\n },\n {\n id: 'range',\n title: 'Range selection',\n render: () => <DemoCalendarRange />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nconst [selected, setSelected] = React.useState<{ from?: Date; to?: Date }>()\n\n<Calendar mode=\"range\" selected={selected} onSelect={setSelected} />`,\n },\n {\n id: 'disabled-days',\n title: 'Disabled days',\n render: () => <Calendar defaultMonth={sampleMonth} disabled={{ dayOfWeek: [0, 6] }} />,\n code: `import { Calendar } from '@open-mercato/ui/primitives/calendar'\n\n<Calendar disabled={{ dayOfWeek: [0, 6] }} />`,\n },\n {\n id: 'marked-days',\n title: 'Marked / selected / disabled days',\n render: () => <CalendarMarkedDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nfunction CalendarMarkedDemo() {\n const t = useT()\n const [selected, setSelected] = React.useState<Date | undefined>(new Date(2026, 5, 12))\n const marked = [new Date(2026, 5, 8), new Date(2026, 5, 12), new Date(2026, 5, 20)]\n return <Calendar mode=\"single\" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)} selected={selected} onSelect={setSelected}\n disabled={[new Date(2026, 5, 20)]} modifiers={{ marked }}\n modifiersClassNames={{ marked: \"after:absolute after:bottom-1.5 after:left-1/2 after:size-0.75 after:-translate-x-1/2 after:rounded-full after:bg-current after:content-['']\" }}\n labels={{ labelDayButton: (day, modifiers) => modifiers.marked\n ? t('design_system.gallery.examples.controls.markedDate', { date: new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) })\n : new Intl.DateTimeFormat(undefined, { dateStyle: 'full' }).format(day) }} />\n}\n\n<CalendarMarkedDemo />`,\n },\n {\n id: 'range-boundaries',\n title: 'Range boundaries',\n render: () => <CalendarBoundaryDemo />,\n code: `import * as React from 'react'\nimport { Calendar } from '@open-mercato/ui/primitives/calendar'\n\nfunction CalendarBoundaryDemo() {\n const [range, setRange] = React.useState<{ from: Date | undefined; to?: Date }>({ from: new Date(2026, 5, 8), to: new Date(2026, 5, 19) })\n return <Calendar mode=\"range\" daySize={40} defaultMonth={new Date(2026, 5, 1)} today={new Date(2026, 5, 12)}\n startMonth={new Date(2026, 5, 1)} endMonth={new Date(2026, 5, 30)}\n selected={range} onSelect={(value) => setRange(value ?? { from: undefined })}\n disabled={[{ before: new Date(2026, 5, 5) }, { after: new Date(2026, 5, 25) }]} excludeDisabled />\n}\n\n<CalendarBoundaryDemo />`,\n },\n {\n id: 'month-selectors',\n title: 'Month selectors \u00B7 4 icon combinations',\n render: () => <div className=\"flex flex-wrap gap-6\"><CalendarSelectorDemo previous={false} next={false} /><CalendarSelectorDemo previous next={false} /><CalendarSelectorDemo previous={false} next /><CalendarSelectorDemo previous next /></div>,\n code: `import * as React from 'react'\nimport { Calendar, CalendarMonthSelector } from '@open-mercato/ui/primitives/calendar'\n\nfunction CalendarSelectorDemo({ previous, next }: { previous: boolean; next: boolean }) {\n const [month, setMonth] = React.useState(new Date(2026, 5, 1))\n const [selected, setSelected] = React.useState<Date | undefined>()\n const move = (offset: number) => setMonth(current => new Date(current.getFullYear(), current.getMonth() + offset, 1))\n return <div className=\"w-fit\">\n <CalendarMonthSelector month={month} onPreviousMonth={previous ? () => move(-1) : undefined} onNextMonth={next ? () => move(1) : undefined} />\n <Calendar mode=\"single\" daySize={40} month={month} onMonthChange={setMonth} selected={selected} onSelect={setSelected} today={new Date(2026, 5, 12)} components={{ MonthCaption: () => <></> }} />\n </div>\n}\n\n<div className=\"flex w-full flex-wrap gap-6\">\n <CalendarSelectorDemo previous={false} next={false} />\n <CalendarSelectorDemo previous next={false} />\n <CalendarSelectorDemo previous={false} next />\n <CalendarSelectorDemo previous next />\n</div>`,\n },\n ],\n}\n\nfunction DemoDatePicker() {\n const [value, setValue] = React.useState<Date | null>(sampleDay)\n return <DatePicker value={value} onChange={setValue} />\n}\n\nfunction DemoDatePickerWithTime() {\n const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12, 9, 30))\n return <DatePicker value={value} onChange={setValue} withTime minuteStep={15} />\n}\n\nfunction DemoDatePickerTodayClear() {\n const [value, setValue] = React.useState<Date | null>(null)\n return <DatePicker value={value} onChange={setValue} footer=\"today-clear\" />\n}\n\nconst datePickerEntry: GalleryEntry = {\n id: 'date-picker',\n figmaNodeId: '446:7413',\n title: 'DatePicker',\n importPath: '@open-mercato/ui/primitives/date-picker',\n variants: [\n {\n id: 'default',\n title: 'default (apply-cancel footer)',\n render: () => <DemoDatePicker />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} />`,\n },\n {\n id: 'with-time',\n title: 'withTime',\n render: () => <DemoDatePickerWithTime />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} withTime minuteStep={15} />`,\n },\n {\n id: 'today-clear-footer',\n title: \"footer='today-clear'\",\n render: () => <DemoDatePickerTodayClear />,\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nconst [value, setValue] = React.useState<Date | null>(null)\n\n<DatePicker value={value} onChange={setValue} footer=\"today-clear\" />`,\n },\n {\n id: 'states',\n title: 'Small / disabled',\n render: () => (\n <>\n <DatePicker value={sampleDay} onChange={() => {}} size=\"sm\" />\n <DatePicker value={sampleDay} onChange={() => {}} disabled />\n </>\n ),\n code: `import { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\n<DatePicker value={value} onChange={setValue} size=\"sm\" />\n<DatePicker value={value} onChange={setValue} disabled />`,\n },\n {\n id: 'boundaries-readonly',\n title: 'Date boundaries and readOnly',\n render: () => <DatePickerBoundaryDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { DatePicker } from '@open-mercato/ui/primitives/date-picker'\n\nfunction DatePickerBoundaryDemo() {\n const t = useT()\n const [value, setValue] = React.useState<Date | null>(new Date(2026, 5, 12))\n return <div className=\"flex w-full max-w-sm flex-col gap-3\">\n <DatePicker value={value} onChange={setValue} minDate={new Date(2026, 5, 5)} maxDate={new Date(2026, 5, 25)} aria-label={t('design_system.gallery.examples.controls.date')} />\n <DatePicker value={value} onChange={setValue} readOnly aria-label={t('design_system.gallery.examples.controls.readOnlyDate')} />\n <output className=\"text-sm text-muted-foreground\">{value?.toLocaleDateString()}</output>\n </div>\n}\n\n<DatePickerBoundaryDemo />`,\n },\n ],\n}\n\nfunction DemoDateRangePicker() {\n const [value, setValue] = React.useState<DateRange | null>(sampleRange)\n return <DateRangePicker value={value} onChange={setValue} />\n}\n\nfunction DemoDateRangePickerCompact() {\n const [value, setValue] = React.useState<DateRange | null>(null)\n return (\n <DateRangePicker\n value={value}\n onChange={setValue}\n showPresets={false}\n numberOfMonths={1}\n size=\"sm\"\n />\n )\n}\n\nconst dateRangePickerEntry: GalleryEntry = {\n id: 'date-range-picker',\n figmaNodeId: '446:7412',\n title: 'DateRangePicker',\n importPath: '@open-mercato/ui/primitives/date-range-picker',\n variants: [\n {\n id: 'default',\n title: 'default (presets + two months)',\n render: () => <DemoDateRangePicker />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\nimport type { DateRange } from '@open-mercato/ui/backend/date-range'\n\nconst [value, setValue] = React.useState<DateRange | null>(null)\n\n<DateRangePicker value={value} onChange={setValue} />`,\n },\n {\n id: 'compact',\n title: 'Compact (no presets, one month)',\n render: () => <DemoDateRangePickerCompact />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\n\n<DateRangePicker\n value={value}\n onChange={setValue}\n showPresets={false}\n numberOfMonths={1}\n size=\"sm\"\n/>`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => <DateRangePicker value={sampleRange} onChange={() => {}} disabled />,\n code: `import { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\n\n<DateRangePicker value={value} onChange={setValue} disabled />`,\n },\n {\n id: 'fixed-presets',\n title: 'Eight reproducible presets and draft/apply',\n render: () => <DateRangePresetDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { DateRangePicker } from '@open-mercato/ui/primitives/date-range-picker'\nimport { defaultDateRangePresets } from '@open-mercato/ui/primitives/date-picker-helpers'\nimport type { DateRange } from '@open-mercato/ui/backend/date-range'\n\nfunction DateRangePresetDemo() {\n const t = useT()\n const [value, setValue] = React.useState<DateRange | null>({ start: new Date(2026, 5, 8), end: new Date(2026, 5, 12) })\n const presets = React.useMemo(() => defaultDateRangePresets().map(preset => ({ ...preset, range: () => preset.range(new Date(2026, 5, 12)) })), [])\n return <div className=\"flex w-full max-w-sm flex-col gap-3\">\n <DateRangePicker value={value} onChange={setValue} presets={presets} aria-label={t('design_system.gallery.examples.controls.period')} />\n <output className=\"text-sm text-muted-foreground\">{value ? \\`\\${value.start.toLocaleDateString()} \u2013 \\${value.end.toLocaleDateString()}\\` : t('design_system.gallery.examples.controls.empty')}</output>\n </div>\n}\n\n<DateRangePresetDemo />`,\n },\n ],\n}\n\nconst sampleSlots = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']\n\nfunction DemoTimePickerTrigger() {\n const t = useT()\n return (\n <TimePicker\n defaultValue=\"10:00\"\n slots={sampleSlots}\n maxHeight={200}\n trigger={<Button variant=\"outline\">{t('design_system.gallery.sampleCopy.pickATime')}</Button>}\n />\n )\n}\n\nconst timePickerEntry: GalleryEntry = {\n id: 'time-picker',\n figmaNodeId: '165483:5687',\n title: 'TimePicker',\n importPath: '@open-mercato/ui/primitives/time-picker',\n variants: [\n { id: 'source-statuses', title: '4 statuses / 4 states', render: () => <TimePickerStatusExamples />, code: timePickerStatusCode },\n { id: 'source-durations', title: 'Duration / 4 states', render: () => <TimePickerDurationExamples />, code: timePickerDurationCode },\n { id: 'source-slots', title: 'Selection indicator right / center / 4 states', render: () => <TimePickerSlotExamples />, code: timePickerSlotCode },\n {\n id: 'inline-card',\n title: 'Inline card',\n render: () => (\n <TimePicker defaultValue=\"10:00\" slots={sampleSlots} maxHeight={160} className=\"max-w-full\" />\n ),\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\n\n<TimePicker\n className=\"max-w-full\"\n defaultValue=\"10:00\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n/>`,\n },\n {\n id: 'durations-statuses',\n title: 'Durations + statuses',\n render: () => (\n <TimePicker\n defaultValue=\"09:30\"\n slots={sampleSlots}\n maxHeight={140}\n durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}\n defaultActiveDuration={30}\n statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}\n defaultActiveStatus=\"available\"\n />\n ),\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\n\n<TimePicker\n defaultValue=\"09:30\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n durations={[{ value: 15 }, { value: 30 }, { value: 60 }, { value: 90 }]}\n defaultActiveDuration={30}\n statuses={[{ variant: 'available' }, { variant: 'busy' }, { variant: 'in-meeting' }]}\n defaultActiveStatus=\"available\"\n/>`,\n },\n {\n id: 'with-trigger',\n title: 'With trigger (popover)',\n render: () => <DemoTimePickerTrigger />,\n code: `import { TimePicker } from '@open-mercato/ui/primitives/time-picker'\nimport { Button } from '@open-mercato/ui/primitives/button'\n\n<TimePicker\n defaultValue=\"10:00\"\n slots={['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']}\n trigger={<Button variant=\"outline\">Pick a time</Button>}\n/>`,\n },\n {\n id: 'atoms',\n title: 'Atoms (Slot / DurationChip / StatusChip)',\n render: () => (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex w-56 flex-col gap-0.5\">\n <TimePickerSlot value=\"09:30\" />\n <TimePickerSlot value=\"10:00\" selected />\n <TimePickerSlot value=\"10:30\" disabled />\n </div>\n <div className=\"flex items-center gap-2\">\n <TimePickerDurationChip value={30} />\n <TimePickerDurationChip value={90} selected />\n </div>\n <div className=\"flex items-center gap-2\">\n <TimePickerStatusChip variant=\"available\" selected />\n <TimePickerStatusChip variant=\"busy\" />\n <TimePickerStatusChip variant=\"in-meeting\" icon={<Clock className=\"size-3\" aria-hidden=\"true\" />} />\n </div>\n </div>\n ),\n code: `import { Clock } from 'lucide-react'\nimport {\n TimePickerSlot,\n TimePickerDurationChip,\n TimePickerStatusChip,\n} from '@open-mercato/ui/primitives/time-picker'\n\n<TimePickerSlot value=\"10:00\" selected />\n<TimePickerDurationChip value={90} selected />\n<TimePickerStatusChip variant=\"busy\" />\n<TimePickerStatusChip variant=\"in-meeting\" icon={<Clock className=\"size-3\" />} />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n calendarEntry,\n datePickerEntry,\n dateRangePickerEntry,\n timePickerEntry,\n]\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|