@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.1-develop.7204.1.83330e271e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/build.mjs +11 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/lib/detailHelpers.js +4 -0
- package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +5 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
- package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
- package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
- package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
- package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
- package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
- package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
- package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
- package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
- package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
- package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
- package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
- package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
- package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
- package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menus.js +150 -0
- package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell.js +330 -0
- package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +123 -60
- package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
- package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/charts.js +532 -186
- package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/dates.js +191 -3
- package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/detail.js +118 -77
- package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/display.js +1449 -240
- package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
- package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/filters.js +231 -103
- package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
- package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/icons.js +29 -91
- package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
- package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/library.js +20 -0
- package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +121 -103
- package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
- package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
- package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
- package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
- package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
- package/dist/modules/design_system/gallery/presentation.js +108 -0
- package/dist/modules/design_system/gallery/presentation.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +8 -5
- package/dist/modules/design_system/gallery/registry.js.map +2 -2
- package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
- package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
- package/dist/modules/design_system/i18n/de.json +7167 -0
- package/dist/modules/design_system/i18n/en.json +7167 -0
- package/dist/modules/design_system/i18n/es.json +7167 -0
- package/dist/modules/design_system/i18n/ko.json +7167 -0
- package/dist/modules/design_system/i18n/pl.json +7167 -0
- package/dist/modules/push_notifications/lib/queue.js +1 -31
- package/dist/modules/push_notifications/lib/queue.js.map +2 -2
- package/jest.config.cjs +1 -0
- package/jest.mocks/image.js +1 -0
- package/package.json +8 -8
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/lib/detailHelpers.ts +4 -0
- package/src/modules/customers/lib/todoCompatibility.ts +10 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
- package/src/modules/design_system/gallery/assets/README.md +30 -0
- package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
- package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
- package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
- package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/src/modules/design_system/gallery/assets/select-google.png +0 -0
- package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
- package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
- package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
- package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
- package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
- package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
- package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
- package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
- package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
- package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
- package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
- package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
- package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
- package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
- package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
- package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
- package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
- package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
- package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
- package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
- package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
- package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
- package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
- package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
- package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
- package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
- package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
- package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
- package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
- package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
- package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
- package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
- package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
- package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
- package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
- package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
- package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
- package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
- package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
- package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
- package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
- package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
- package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
- package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
- package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
- package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
- package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
- package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
- package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
- package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
- package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
- package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
- package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
- package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
- package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
- package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
- package/src/modules/design_system/gallery/entries/library.tsx +16 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
- package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
- package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
- package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
- package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
- package/src/modules/design_system/gallery/presentation.ts +106 -0
- package/src/modules/design_system/gallery/registry.ts +8 -6
- package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
- package/src/modules/design_system/i18n/de.json +7112 -3
- package/src/modules/design_system/i18n/en.json +7112 -3
- package/src/modules/design_system/i18n/es.json +7112 -3
- package/src/modules/design_system/i18n/ko.json +7112 -3
- package/src/modules/design_system/i18n/pl.json +7112 -3
- package/src/modules/push_notifications/AGENTS.md +9 -5
- package/src/modules/push_notifications/lib/queue.ts +15 -44
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/marketing-widgets.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, Line, LineChart, Pie, PieChart, PolarAngleAxis, PolarGrid, Radar, RadarChart, ReferenceLine, ResponsiveContainer, Tooltip, XAxis } from 'recharts'\nimport { ArrowDownLeft, ArrowUp, ArrowUpRight, CheckCircle2, ChevronLeft, ChevronRight, Clock3, Code, Info, Minus, Plus, Store, Target, UserRound } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { cn } from '@open-mercato/shared/lib/utils'\nimport { ChartContainer, ChartTooltipContent } from '@open-mercato/ui/backend/charts'\nimport { Avatar } from '@open-mercato/ui/primitives/avatar'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Card } from '@open-mercato/ui/primitives/card'\nimport { CompactButton } from '@open-mercato/ui/primitives/compact-button'\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@open-mercato/ui/primitives/dialog'\nimport { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'\nimport { SearchInput } from '@open-mercato/ui/primitives/search-input'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@open-mercato/ui/primitives/select'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport { marketingBrands, marketingProducts, marketingWorldMap, marketingActivityIcons } from '../assets/marketing-artwork'\n\nexport type MarketingWidgetKind = 'total-sales' | 'total-visitors' | 'conversion-rate' | 'user-retention' | 'weekly-visitors' | 'visitor-channels' | 'geography' | 'realtime-visitors' | 'marketing-channels' | 'product-performance' | 'shipping-tracking' | 'my-products' | 'product-categories' | 'customer-segments' | 'sales-channels' | 'campaign-data' | 'support-analytics' | 'recent-activities'\nconst key = (name: string) => `design_system.gallery.samples.marketing.${name}`\nconst chartColor = 'var(--chart-orange)'\nconst palette = ['var(--chart-orange)','var(--chart-amber)','var(--chart-teal)','var(--chart-cyan)','var(--chart-violet)','var(--chart-indigo)']\nfunction useMarketing() {\n const t = useT()\n const locale = useLocale()\n const number = (value: number, digits = 0) => new Intl.NumberFormat(locale,{maximumFractionDigits:digits,minimumFractionDigits:digits}).format(value)\n const money = (value: number) => new Intl.NumberFormat(locale,{style:'currency',currency:'USD',maximumFractionDigits:value % 1 ? 2 : 0}).format(value)\n const date = (value: string, options: Intl.DateTimeFormatOptions = {month:'short',day:'numeric',year:'numeric'}) => new Intl.DateTimeFormat(locale,{...options,timeZone:'UTC'}).format(new Date(value))\n return { t, locale, number, money, date }\n}\nfunction Trend({ value, badge = false, previous = false }: { value: number; badge?: boolean; previous?: boolean }) {\n const { t, number } = useMarketing()\n const label = `${value > 0 ? '+' : ''}${number(value,1)}%`\n return <span className=\"inline-flex items-center gap-1 whitespace-nowrap text-sm\">{badge ? <Badge appearance=\"light\" tone={value < 0 ? 'error' : 'success'} size={20}>{label}</Badge> : <span className={value < 0 ? 'text-status-error-icon' : 'text-status-success-icon'}>{label}</span>}{previous ? <span className=\"text-muted-foreground\">{t(key('versusWeek'))}</span> : null}</span>\n}\nfunction MarketingFrame({ children, compact = false, tall = false, flush = false, className }: { children: React.ReactNode; compact?: boolean; tall?: boolean; flush?: boolean; className?: string }) {\n return <Card data-slot=\"marketing-widget\" className={cn('relative w-88 max-w-full overflow-hidden rounded-xl border-0 bg-background ring-1 ring-inset ring-border shadow-xs',tall ? 'h-196' : compact ? 'h-44.5' : 'h-95',flush ? 'gap-0 p-0' : 'gap-5 p-5',className)}>{children}</Card>\n}\nfunction Header({ title, value, action, children, info = false, className }: { title: string; value?: React.ReactNode; action?: React.ReactNode; children?: React.ReactNode; info?: boolean; className?: string }) {\n return <div className={cn('flex h-14 shrink-0 items-start gap-2',className)}><div className=\"min-w-0 flex-1\"><h3 className=\"flex items-center gap-1 text-sm font-medium leading-5 text-muted-foreground\">{title}{info ? <Info aria-hidden=\"true\" className=\"size-3 shrink-0 text-text-disabled\" /> : null}</h3><div className=\"mt-1 flex items-center gap-2\"><span className=\"whitespace-nowrap text-2xl font-medium leading-8 tracking-tight\">{value}</span>{children}</div></div>{action}</div>\n}\nfunction Details({ title, children, label, className }: { title: string; children: React.ReactNode; label?: string; className?: string }) {\n const {t} = useMarketing()\n const [open,setOpen] = React.useState(false)\n return <Dialog open={open} onOpenChange={setOpen}><Button asChild variant=\"outline\" className={cn('h-7 shrink-0 rounded-lg px-2.5 text-sm font-normal',className)}><DialogTrigger>{label ?? t(key('details'))}</DialogTrigger></Button><DialogContent onKeyDownCapture={event=>{if(event.key==='Enter'&&(event.ctrlKey||event.metaKey)){event.preventDefault();setOpen(false)}}}><DialogHeader><DialogTitle>{title}</DialogTitle><DialogDescription>{t(key('localData'))}</DialogDescription></DialogHeader><ScrollArea className=\"max-h-96\" scrollbarSize=\"sm\">{children}</ScrollArea><DialogFooter><Button variant=\"outline\" onClick={()=>setOpen(false)}>{t(key('close'))}</Button></DialogFooter></DialogContent></Dialog>\n}\nfunction Period({ value, onChange, compact = false }: { value: string; onChange: (value: string)=>void; compact?: boolean }) {\n const {t}=useMarketing()\n return compact ? <Select value={value} onValueChange={onChange}><SelectTrigger aria-label={t(key('period'))} className=\"h-7 w-auto gap-2 rounded-lg px-2.5 text-sm\"><SelectValue /></SelectTrigger><SelectContent>{['weekly','monthly','yearly'].map(option=><SelectItem key={option} value={option}>{t(key(option))}</SelectItem>)}</SelectContent></Select> : <SegmentedControl value={value} onValueChange={onChange} aria-label={t(key('period'))} className=\"h-6 w-full shrink-0 rounded-sm bg-background p-0\">{['1d','1w','1m','3m','1y'].map(option=><SegmentedControlItem key={option} value={option} className=\"h-6 flex-1 rounded-none border-r border-border p-0 text-xs last:border-0 data-[state=checked]:bg-muted data-[state=checked]:font-medium data-[state=checked]:shadow-none\">{t(key(`period${option}`))}</SegmentedControlItem>)}</SegmentedControl>\n}\nfunction Choices({ values, value, onChange, label }: { values: string[]; value: string; onChange: (value:string)=>void; label: string }) {\n const {t}=useMarketing()\n return <SegmentedControl value={value} onValueChange={onChange} aria-label={label} className=\"h-7 max-w-full gap-2 rounded-none border-0 bg-transparent p-0\">{values.map(option=><SegmentedControlItem key={option} value={option} className=\"h-7 rounded-lg bg-muted px-2.5 text-sm font-normal data-[state=checked]:bg-accent-orange/10 data-[state=checked]:font-normal data-[state=checked]:text-accent-orange-text data-[state=checked]:shadow-none data-[state=unchecked]:bg-muted\">{t(key(option))}</SegmentedControlItem>)}</SegmentedControl>\n}\nfunction DataList({ rows }: { rows: { label: string; value: React.ReactNode; detail?: React.ReactNode; icon?: React.ReactNode }[] }) {\n return <div className=\"flex flex-col gap-4\">{rows.map(row=><div key={row.label} className=\"flex min-h-5 items-center gap-2 text-sm text-muted-foreground\">{row.icon}<span className=\"min-w-0 flex-1\">{row.label}</span><span>{row.value}</span>{row.detail ? <span className=\"ml-3 flex w-18 items-center justify-end gap-1\">{row.detail}</span> : null}</div>)}</div>\n}\nconst salesSeries = [28,14,33,11,57,26,57,7,42,39,24,44,31,36,15,25,13,21,41,46,15,30,24,44,18]\nfunction TotalSales() {\n const {t,money}=useMarketing()\n const [period,setPeriod]=React.useState('1w')\n const factor = {'1d':0.4,'1w':1,'1m':2,'3m':3,'1y':7}[period] ?? 1\n const rows=[{label:t(key('onlineStore')),value:money(52.12*factor),icon:<Store aria-hidden=\"true\" className=\"size-5\" />,delta:4.5},{label:'Facebook',value:money(38.45*factor),icon:<img src={marketingBrands.facebook} alt=\"\" className=\"size-5\" />,delta:-2.8},{label:'Instagram',value:money(37.75*factor),icon:<img src={marketingBrands.instagram} alt=\"\" className=\"size-5\" />,delta:3.2}].map(row=>({...row,detail:<><ArrowUp aria-hidden=\"true\" className={cn('size-4',row.delta < 0 ? 'rotate-180 text-status-error-icon':'text-status-success-icon')} />{row.delta>0?'+':''}{row.delta}%</>}))\n return <MarketingFrame><Header title={t(key('totalSales'))} value={money(128.32*factor)} action={<Details title={t(key('totalSales'))} label={t(key('report'))}><DataList rows={rows} /></Details>}><Trend value={2} badge /></Header><Period value={period} onChange={setPeriod}/><ChartContainer config={{value:{label:t(key('sales')),color:chartColor}}} className=\"h-27 min-h-0 w-full shrink-0\" aria-label={t(key('totalSales'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><LineChart data={salesSeries.map((value,index)=>({index,value:value*factor}))} margin={{top:0,right:0,bottom:0,left:0}}><CartesianGrid stroke=\"var(--border)\" strokeDasharray=\"3 3\"/><Tooltip content={<ChartTooltipContent/>}/><Line dataKey=\"value\" type=\"linear\" stroke={chartColor} strokeWidth={1.5} dot={false} isAnimationActive={false}/></LineChart></ResponsiveContainer></ChartContainer><DataList rows={rows}/></MarketingFrame>\n}\nfunction TotalVisitors() {\n const {t,number}=useMarketing()\n const values=[{key:'desktop',value:27,delta:-3.2,color:'bg-chart-amber'},{key:'tablet',value:12,delta:-6.4,color:'bg-chart-cyan'},{key:'mobile',value:61,delta:0.8,color:'bg-chart-violet'}]\n return <MarketingFrame><Header title={t(key('totalVisitors'))} value={number(237456)}><Trend value={-1.4} badge/></Header><div className=\"flex min-h-0 flex-1 border-t border-border pt-5\">{values.map(item=><div key={item.key} className=\"flex min-w-0 flex-1 flex-col border-r border-dashed border-border px-4 first:pl-0 last:border-0 last:pr-0\"><p className=\"text-sm text-muted-foreground\">{t(key(item.key))}</p><p className=\"mt-1 text-xl font-medium\">{item.value}%</p><span className=\"mt-auto flex items-center gap-1 text-sm text-muted-foreground\">{item.delta>0?'+':''}{number(item.delta,1)}%{item.delta<0?<ArrowDownLeft aria-hidden=\"true\" className=\"size-3 text-status-error-icon\"/>:<ArrowUpRight aria-hidden=\"true\" className=\"size-3 text-status-success-icon\"/>}</span><span className={cn('mt-4 h-2 w-full rounded-sm',item.color)}/></div>)}</div></MarketingFrame>\n}\nfunction ConversionRate() {\n const {t,number}=useMarketing()\n const rows=[['addedToCart',3842,1.8],['reachedCheckout',1256,-1.2],['purchased',649,2.4]] as const\n const list=<DataList rows={rows.map(([label,value,delta])=>({label:t(key(label)),value:number(value),detail:<Trend value={delta}/>}))}/>\n const series=[12,9,6,12,3,8,7,6,23,19,28,3,14,4].map((value,index)=>({month:index,value,previous:value+8+(index%3)*5}))\n return <MarketingFrame><Header title={t(key('conversionRate'))} value={`${number(16.9,1)}%`} action={<Details title={t(key('conversionRate'))}>{list}</Details>}><Trend value={2.1} badge/></Header><div className=\"border-t border-border pt-5\">{list}</div><ChartContainer config={{value:{label:t(key('purchased')),color:chartColor},previous:{label:t(key('previousPeriod')),color:'var(--chart-orange)'}}} className=\"min-h-0 flex-1\" aria-label={t(key('conversionRate'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><AreaChart data={series} margin={{top:0,right:0,left:0,bottom:0}}><CartesianGrid stroke=\"var(--border)\"/><Tooltip content={<ChartTooltipContent/>}/><Area dataKey=\"previous\" stroke=\"none\" fill={chartColor} fillOpacity={0.18} isAnimationActive={false}/><Area dataKey=\"value\" stroke=\"none\" fill={chartColor} fillOpacity={1} isAnimationActive={false}/></AreaChart></ResponsiveContainer></ChartContainer><div className=\"-mt-3 flex justify-between text-overline text-muted-foreground\">{['feb','mar','apr','may','jun','jul'].map(month=><span key={month}>{t(key(month))}</span>)}</div></MarketingFrame>\n}\nfunction Retention() {\n const {t,number}=useMarketing()\n const [selected,setSelected]=React.useState<[number,number]|null>(null)\n const cells=Array.from({length:12},(_,row)=>Array.from({length:12-row},(_,column)=>({row,column,value:Math.max(8,100-row*6-column*4+(row*column%5)*5)}))).flat()\n return <MarketingFrame><Header title={t(key('retention'))} value=\"24%\" action={<Details title={t(key('retention'))}><DataList rows={cells.filter(cell=>cell.column===0).map(cell=>({label:t(key('month'),undefined,{month:cell.row+1}),value:`${cell.value}%`}))}/></Details>}><Trend value={2} badge/></Header><div className=\"grid h-48 shrink-0 grid-cols-12 grid-rows-12 gap-0.5\" role=\"group\" aria-label={t(key('retentionCohorts'))}>{cells.map(cell=><button key={`${cell.row}-${cell.column}`} type=\"button\" aria-label={t(key('cohortCell'),undefined,{cohort:cell.row+1,month:cell.column+1,value:cell.value})} aria-pressed={selected?.[0]===cell.row&&selected?.[1]===cell.column} className=\"min-h-0 min-w-0 bg-chart-orange outline-none focus-visible:ring-2 focus-visible:ring-foreground focus-visible:ring-offset-1\" style={{gridRow:cell.row+1,gridColumn:cell.column+1,opacity:cell.value/100}} onClick={()=>setSelected([cell.row,cell.column])}/>)}</div><div className=\"-mt-3 grid grid-cols-12 text-center text-overline text-muted-foreground\">{Array.from({length:12},(_,index)=><span key={index}>{index+1}</span>)}</div><p aria-live=\"polite\" className=\"mt-auto flex h-7 items-center gap-2 rounded-lg border border-border px-2 text-xs text-muted-foreground\"><Info aria-hidden=\"true\" className=\"size-3 shrink-0\"/><span className=\"truncate\">{selected?t(key('cohortCell'),undefined,{cohort:selected[0]+1,month:selected[1]+1,value:number(cells.find(cell=>cell.row===selected[0]&&cell.column===selected[1])?.value??0)}):t(key('retentionUpdated'))}</span></p></MarketingFrame>\n}\nfunction WeeklyVisitors() {\n const {t,number}=useMarketing()\n const values=['happiness','sadness','anger','fear','surprise','disgust','love','excitement']\n const [series,setSeries]=React.useState({fresh:true,returning:true})\n return <MarketingFrame className=\"gap-4\"><Header title={t(key('weeklyVisitors'))} value={number(16008)}><Trend value={1.1} badge/></Header><div className=\"flex h-7 shrink-0 rounded-lg border border-border\">{(['fresh','returning'] as const).map((item,index)=><Button key={item} variant=\"ghost\" aria-pressed={series[item]} onClick={()=>setSeries(current=>({...current,[item]:!current[item]}))} className=\"h-7 min-w-0 flex-1 gap-2 p-0 text-xs font-normal\"><span className={cn('size-2 rounded-full',index?'bg-chart-emerald':'bg-chart-orange',!series[item]&&'opacity-30')}/>{t(key(item==='fresh'?'newVisitors':'returningVisitors'))}</Button>)}</div><ChartContainer config={{fresh:{label:t(key('newVisitors')),color:chartColor},returning:{label:t(key('returningVisitors')),color:'var(--chart-emerald)'}}} className=\"min-h-0 flex-1\" aria-label={t(key('weeklyVisitors'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><RadarChart data={values.map((label,index)=>({label:t(key(label)),fresh:[76,39,84,72,40,70,74,32][index],returning:[43,75,39,40,0,54,39,75][index]}))} outerRadius=\"62%\"><PolarGrid stroke=\"var(--border)\"/><PolarAngleAxis dataKey=\"label\" tick={{fontSize:11,fill:'var(--muted-foreground)'}}/>{series.fresh?<Radar name={t(key('newVisitors'))} dataKey=\"fresh\" stroke={chartColor} fill={chartColor} fillOpacity={0.08} dot={{r:2}} isAnimationActive={false}/>:null}{series.returning?<Radar name={t(key('returningVisitors'))} dataKey=\"returning\" stroke=\"var(--chart-emerald)\" fill=\"var(--chart-emerald)\" fillOpacity={0.08} dot={{r:2}} isAnimationActive={false}/>:null}<Tooltip content={<ChartTooltipContent/>}/></RadarChart></ResponsiveContainer></ChartContainer></MarketingFrame>\n}\nfunction ChannelRows({ marketing = false }: { marketing?: boolean }) {\n const {t,money,number}=useMarketing()\n const names=marketing?['acquisition','conversion','roi']:['Facebook','Instagram','Google']\n return <div className=\"flex flex-col gap-4\"><div className=\"flex items-center text-xs text-muted-foreground\"><span className=\"flex-1\">{t(key('channels'))}</span><span className=\"w-22\">{t(key(marketing?'metric':'percent'))}</span><span className=\"w-12\">{t(key('total'))}</span></div>{names.map((name,index)=><div key={name} className=\"flex h-5 items-center gap-2 text-sm text-muted-foreground\">{marketing ? index===0?<UserRound aria-hidden=\"true\" className=\"size-5\"/>:index===1?<Clock3 aria-hidden=\"true\" className=\"size-5\"/>:<Target aria-hidden=\"true\" className=\"size-5\"/>:<img src={marketingBrands[name.toLowerCase() as 'facebook'|'instagram'|'google']} alt=\"\" className=\"size-5\"/>}<span className=\"min-w-0 flex-1\">{marketing?t(key(name)):name}</span><span className=\"w-18\">{marketing?[money(38.25),t(key('days'),undefined,{count:4.2}),'324%'][index]:`${[28,23,32][index]}%`}</span><span className=\"w-12 text-right\">{marketing?<Trend value={[5.2,3.8,4.5][index]}/>:number([6958,5716,7952][index])}</span></div>)}</div>\n}\nfunction Channels({ marketing = false }: { marketing?: boolean }) {\n const {t}=useMarketing()\n const title=t(key(marketing?'marketingChannels':'visitorChannels'))\n return <MarketingFrame><Header title={title} info={marketing} value={marketing?'82%':'78%'} action={marketing?<Details title={title}><ChannelRows marketing/></Details>:undefined}><Trend value={marketing?2.1:-0.4} badge={!marketing} previous={marketing}/></Header><div className=\"space-y-4\"><div className=\"flex h-2 gap-1\">{[41,41,16].map((width,index)=><span key={index} className=\"rounded-sm\" style={{width:`${width}%`,background:marketing?palette[index]:['var(--chart-amber)','var(--chart-cyan)','var(--chart-violet)'][index]}}/>)}</div><div className=\"flex justify-between gap-1 text-xs text-muted-foreground\">{(marketing?['organicSearch','socialMedia','direct']:['organic','referral','direct']).map((name,index)=><span key={name} className=\"flex items-center gap-2\"><span className=\"size-2 shrink-0 rounded-full\" style={{background:marketing?palette[index]:['var(--chart-amber)','var(--chart-cyan)','var(--chart-violet)'][index]}}/>{t(key(name))}</span>)}</div></div><div className={cn('border-t border-border pt-5',marketing&&'border-dashed')}><ChannelRows marketing={marketing}/></div><Details title={title} label={t(key('viewReports'))} className=\"mt-auto h-8 w-full\"><ChannelRows marketing={marketing}/></Details></MarketingFrame>\n}\nconst mapPoints=[{key:'greenland',x:161,y:7,visitors:1032},{key:'usa',x:80,y:69,visitors:8530},{key:'brazil',x:129,y:126,visitors:3240},{key:'turkey',x:222,y:110,visitors:6504},{key:'china',x:276,y:57,visitors:9322}]\nfunction Geography() {\n const {t,number}=useMarketing()\n const [selected,setSelected]=React.useState('turkey')\n const [zoom,setZoom]=React.useState(1)\n const place=mapPoints.find(point=>point.key===selected)??mapPoints[3]\n return <MarketingFrame className=\"gap-4\"><Header title={t(key('geography'))} value={number(place.visitors)} action={<Details title={t(key('geography'))}><DataList rows={mapPoints.map(point=>({label:t(key(point.key)),value:number(point.visitors)}))}/></Details>}><span className=\"flex h-6 items-center gap-1 rounded-sm border border-border px-1 text-xs text-muted-foreground\">{selected==='turkey'?<img src={marketingBrands.turkey} alt=\"\" className=\"size-4\"/>:null}{t(key(selected))}</span></Header><div className=\"flex h-7 shrink-0 items-center justify-around rounded-lg border border-border text-xs text-muted-foreground\">{['men','women','other'].map((item,index)=><span key={item}>{t(key(item))} <span className=\"text-foreground\">{[32,60,8][index]}%</span></span>)}</div><div data-slot=\"marketing-map\" className=\"relative h-56 w-full shrink-0 overflow-hidden\"><div className=\"absolute inset-0 origin-center transition-transform\" style={{transform:`scale(${zoom})`}}><span aria-hidden=\"true\" className=\"absolute left-0 top-0 h-56 w-83 bg-text-disabled\" style={{maskImage:`url(\"${marketingWorldMap}\")`,WebkitMaskImage:`url(\"${marketingWorldMap}\")`,maskSize:'100% 100%',WebkitMaskSize:'100% 100%'}}/>{mapPoints.map(point=><button key={point.key} type=\"button\" aria-label={t(key(point.key))} aria-pressed={selected===point.key} onClick={()=>setSelected(point.key)} style={{left:`${point.x/312*100}%`,top:`${point.y/224*100}%`}} className={cn('absolute flex size-4 items-center justify-center rounded-full bg-background ring-1 ring-inset ring-border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground',selected===point.key&&'bg-accent-orange ring-4 ring-accent-orange/20')}><span className={cn('size-2 rounded-full',selected===point.key?'bg-accent-orange-foreground':'bg-text-disabled')}/></button>)}</div><div className=\"absolute bottom-0 left-0 flex flex-col gap-2\"><CompactButton aria-label={t(key('zoomIn'))} disabled={zoom>=2} onClick={()=>setZoom(current=>Math.min(2,current+0.25))}><Plus aria-hidden=\"true\"/></CompactButton><CompactButton aria-label={t(key('zoomOut'))} disabled={zoom<=1} onClick={()=>setZoom(current=>Math.max(1,current-0.25))}><Minus aria-hidden=\"true\"/></CompactButton></div><CompactButton className=\"absolute bottom-0 right-0\" aria-label={t(key('resetMap'))} onClick={()=>{setZoom(1);setSelected('turkey')}}><Code aria-hidden=\"true\"/></CompactButton></div></MarketingFrame>\n}\nfunction RealtimeVisitors() {\n const {t,number}=useMarketing()\n return <MarketingFrame><Header title={t(key('realtimeVisitors'))} value={t(key('millions'),undefined,{value:number(32.6,1)})}><Trend value={8.4} badge/></Header><div className=\"relative h-39 shrink-0\" aria-label={t(key('regionalVisitors'))}><div className=\"absolute left-1/2 top-1/2 -ml-10.5 -mt-9.5 flex size-20 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-chart-emerald/25 text-xl text-status-success-foreground\">20%</div><div className=\"absolute left-1/2 top-1/2 ml-10 mt-1 flex size-33 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-chart-orange/25 text-title-4 font-medium text-accent-orange-text\">48%</div><div className=\"absolute left-1/2 top-1/2 -ml-14.5 mt-7.5 flex size-24 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-chart-amber/25 text-2xl font-medium text-status-warning-foreground\">32%</div></div><DataList rows={['europe','asia','americas'].map((region,index)=>({label:t(key(region)),value:t(key('millions'),undefined,{value:number([15.8,10.2,6.6][index],1)}),icon:<span className=\"ml-1 size-2 rounded-full\" style={{background:[palette[0],palette[1],'var(--chart-emerald)'][index]}}/>,detail:<><ArrowUpRight aria-hidden=\"true\" className={cn('size-4',index===1?'rotate-90 text-status-error-icon':'text-status-success-icon')}/>+{number([4.7,6.2,3.8][index],1)}%</>}))}/></MarketingFrame>\n}\nfunction ProductPerformance() {\n const {t,number}=useMarketing()\n const [period,setPeriod]=React.useState('1w')\n const factor=period==='1w'?1:period==='1d'?0.6:0.85\n return <MarketingFrame><Header title={t(key('productPerformance'))} value={`${number(22.8*factor,1)}%`}><Trend value={8.4} badge/></Header><Period value={period} onChange={setPeriod}/><div className=\"flex h-39.5 shrink-0 items-end gap-2.5\" aria-label={t(key('productPerformance'))}>{[50,80,100,60,40].map((value,index)=><div key={index} className=\"flex min-w-0 flex-1 flex-col items-center justify-between rounded-lg bg-chart-orange px-1 py-2 text-xs font-medium text-accent-orange-foreground\" style={{height:`${value*factor}%`}}><span>{Math.round(value*factor)}%</span><span>{String.fromCharCode(65+index)}</span></div>)}</div><div className=\"flex flex-1\">{['averageRating','satisfaction','returnRate'].map((name,index)=><div key={name} className=\"flex min-w-0 flex-1 flex-col items-center justify-center border-r border-border last:border-0\"><p className=\"text-base font-medium text-muted-foreground\">{[number(4.7,1),'92%',`${number(4.2,1)}%`][index]}</p><p className=\"mt-1 text-xs text-muted-foreground\">{t(key(name))}</p></div>)}</div></MarketingFrame>\n}\nconst productData=[{image:0,name:'Apple Watch S5 GPS 40MM',count:500},{image:4,name:'AirPods Max Green',count:960},{image:6,name:'iMac M1 24-inch Purple',count:45},{image:8,name:'iPhone 15 Pro 512GB',count:150},{image:1,name:'MacBook Air',count:380},{image:3,name:'AirPods Pro',count:780}]\nfunction ProductRows({ query = '' }: { query?: string }) {\n const {t,number}=useMarketing()\n const matches=productData.filter(product=>product.name.toLocaleLowerCase().includes(query.toLocaleLowerCase()))\n return matches.length ? <div>{matches.map(product=><div key={product.name} className=\"flex min-h-17 items-center gap-3 border-b border-border px-5 py-3 last:border-0\"><img src={marketingProducts[product.image].src} alt=\"\" className=\"size-8 shrink-0 object-contain\"/><div className=\"min-w-0\"><p className=\"truncate text-sm font-medium\">{product.name}</p><p className=\"mt-1 text-xs text-muted-foreground\">{t(key('unitsSold'),undefined,{count:number(product.count)})}</p></div></div>)}</div> : <p role=\"status\" className=\"p-5 text-sm text-muted-foreground\">{t(key('noProducts'))}</p>\n}\nfunction MyProducts() {\n const {t,number}=useMarketing()\n const [query,setQuery]=React.useState('')\n return <MarketingFrame flush><Header title={t(key('myProducts'))} info value={number(468)} className=\"h-23 px-5 py-5\" action={<Details title={t(key('myProducts'))} label={t(key('seeAll'))}><ProductRows query={query}/></Details>}><Trend value={2.1} previous/></Header><div className=\"border-y border-border px-5\"><SearchInput aria-label={t(key('searchProducts'))} placeholder={t(key('searchProducts'))} value={query} onChange={setQuery} className=\"h-11 rounded-none border-0 px-0 shadow-none\"/></div><ScrollArea className=\"min-h-0 flex-1\" scrollbarSize=\"xs\"><ProductRows query={query}/></ScrollArea></MarketingFrame>\n}\nfunction ShippingTracking() {\n const {t,number,date}=useMarketing()\n const [period,setPeriod]=React.useState('weekly')\n const [status,setStatus]=React.useState('delivered')\n const [product,setProduct]=React.useState(0)\n const factor=(status==='delivered'?1:status==='inTransit'?0.55:0.2)*(period==='weekly'?1:period==='monthly'?3:12)\n const data=[0,10,44,59,0,29,0,0,45,29,29,10,29,29,0,59,29,29].map((value,index)=>({day:date(`2024-02-${String(19+Math.floor(index/3)).padStart(2,'0')}T00:00:00Z`,{weekday:'short'}),value:(value+product*3)*factor}))\n return <MarketingFrame flush><div className=\"flex h-35 shrink-0 flex-col gap-4 p-5\"><Header title={t(key('shippingTracking'))} value={number(Math.round(3844*factor))} info action={<Period compact value={period} onChange={setPeriod}/>}><Trend value={1.8} badge/></Header><Choices values={['delivered','inTransit','returned']} value={status} onChange={setStatus} label={t(key('shippingStatus'))}/></div><div className=\"flex h-12 shrink-0 items-center gap-2 border-y border-border px-5\"><img src={marketingProducts[product].src} alt=\"\" className=\"size-6\"/><span className=\"min-w-0 flex-1 truncate text-sm text-muted-foreground\">{marketingProducts[product].name}</span><div className=\"flex\"><CompactButton aria-label={t(key('previousProduct'))} onClick={()=>setProduct(current=>(current+marketingProducts.length-1)%marketingProducts.length)}><ChevronLeft aria-hidden=\"true\"/></CompactButton><CompactButton aria-label={t(key('nextProduct'))} onClick={()=>setProduct(current=>(current+1)%marketingProducts.length)}><ChevronRight aria-hidden=\"true\"/></CompactButton></div></div><ChartContainer config={{value:{label:t(key(status)),color:chartColor}}} className=\"min-h-0 flex-1\" aria-label={t(key('shippingTracking'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><LineChart data={data} margin={{top:0,right:20,left:20,bottom:0}}><CartesianGrid stroke=\"var(--border)\"/><XAxis dataKey=\"day\" interval={2} tickLine={false} axisLine={false} tick={{fontSize:12,fill:'var(--muted-foreground)'}}/><Tooltip content={<ChartTooltipContent/>}/><Line type=\"stepAfter\" dataKey=\"value\" dot={false} stroke={chartColor} strokeWidth={1.5} isAnimationActive={false}/></LineChart></ResponsiveContainer></ChartContainer></MarketingFrame>\n}\nfunction ProductCategories() {\n const {t,number}=useMarketing()\n const [category,setCategory]=React.useState(0)\n const categories=['accessories','computers','audio']\n const percentage=[58,72,34][category]\n const details=<DataList rows={categories.map((name,index)=>({label:t(key(name)),value:t(key('productsCount'),undefined,{count:[45,32,18][index]})}))}/>\n return <MarketingFrame compact className=\"gap-4\"><Header title={t(key('productCategories'))} value={`${percentage}%`} info action={<Details title={t(key('productCategories'))}>{details}</Details>}><Trend value={2.1} previous/></Header><div className=\"flex h-7.5 shrink-0 gap-0.5\" role=\"meter\" aria-label={t(key('productCategories'))} aria-valuemin={0} aria-valuemax={100} aria-valuenow={percentage}>{Array.from({length:36},(_,index)=><span key={index} className={cn('min-w-0 flex-1',index<Math.round(percentage/100*36)?'bg-chart-orange':'bg-border')}/>)}</div><div className=\"flex min-h-5 items-center gap-2 text-sm text-muted-foreground\"><span>{t(key(categories[category]))}</span><div className=\"flex\"><CompactButton aria-label={t(key('previousCategory'))} onClick={()=>setCategory(current=>(current+2)%3)}><ChevronLeft aria-hidden=\"true\"/></CompactButton><CompactButton aria-label={t(key('nextCategory'))} onClick={()=>setCategory(current=>(current+1)%3)}><ChevronRight aria-hidden=\"true\"/></CompactButton></div><span className=\"ml-auto whitespace-nowrap\">{t(key('productsCount'),undefined,{count:number([45,32,18][category])})}</span><Trend value={3.2}/></div></MarketingFrame>\n}\nfunction CustomerSegments() {\n const {t,money}=useMarketing()\n const data=[{label:'premium',value:32,amount:9450},{label:'regular',value:46,amount:8320},{label:'new',value:20,amount:3280}]\n return <MarketingFrame compact><div className=\"flex h-5 shrink-0 items-center justify-between gap-2\"><h3 className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground\">{t(key('customerSegments'))}<Info aria-hidden=\"true\" className=\"size-3 text-text-disabled\"/></h3><Trend value={5.8} previous/></div><div className=\"flex h-25 items-center gap-5\"><ChartContainer config={Object.fromEntries(data.map((item,index)=>[item.label,{label:t(key(item.label)),color:palette[index]}]))} className=\"size-25 shrink-0\" aria-label={t(key('customerSegments'))}><PieChart width={100} height={100}><Pie data={data} dataKey=\"value\" nameKey=\"label\" cx={45} cy={45} innerRadius={34} outerRadius={49} paddingAngle={3} stroke=\"none\" startAngle={90} endAngle={450} isAnimationActive={false}>{data.map((item,index)=><Cell key={item.label} fill={palette[index]}/>)}</Pie><Tooltip content={<ChartTooltipContent/>}/></PieChart></ChartContainer><div className=\"flex min-w-0 flex-1 flex-col gap-3\">{data.map((item,index)=><div key={item.label} className=\"flex items-center gap-2 text-sm text-muted-foreground\"><span className=\"size-2 shrink-0 rounded-full\" style={{background:palette[index]}}/><span className=\"min-w-0 flex-1 truncate\">{t(key(item.label))}</span><span>{money(item.amount)}</span><span className=\"text-xs\">{item.value}%</span></div>)}</div></div></MarketingFrame>\n}\nfunction SalesChannels() {\n const {t,number,date}=useMarketing()\n const [period,setPeriod]=React.useState('weekly')\n const multiplier=period==='weekly'?1:period==='monthly'?4:52\n return <MarketingFrame compact className=\"gap-4\"><Header title={t(key('salesChannels'))} value={number(246*multiplier)} info action={<Period compact value={period} onChange={setPeriod}/>}><Trend value={2.1} previous/></Header><div className=\"space-y-2\"><div className=\"flex justify-between text-xs text-muted-foreground\"><span>{date('2024-02-21T00:00:00Z')}</span><span>{date(period==='weekly'?'2024-02-28T00:00:00Z':period==='monthly'?'2024-03-21T00:00:00Z':'2025-02-21T00:00:00Z')}</span></div><div className=\"flex h-10.5 gap-1\" aria-label={t(key('salesChannels'))}>{[26,21,16,13,10,5,2].map((width,index)=><span key={index} className=\"rounded-sm\" style={{flex:width,background:['var(--chart-indigo)','var(--chart-cyan)','var(--chart-violet)','var(--chart-orange)','var(--chart-amber)','var(--chart-emerald)','var(--chart-teal)'][index]}}/>)}</div></div></MarketingFrame>\n}\nfunction CampaignData() {\n const {t,money}=useMarketing()\n return <MarketingFrame compact flush><Header title={t(key('campaignData'))} value={money(1750)} info className=\"h-23.5 px-5 py-5\" action={<Details title={t(key('campaignData'))}><DataList rows={[{label:t(key('campaignBudget')),value:money(1750)},{label:t(key('usedBudget')),value:money(32900)},{label:t(key('campaignProgress')),value:'45%'}]}/></Details>}><Badge size={20} appearance=\"lighter\" tone=\"success\">{t(key('lastDays'),undefined,{count:15})}</Badge></Header><div className=\"flex min-h-0 flex-1 border-t border-border\"><ChartContainer config={{value:{label:t(key('campaignData')),color:chartColor}}} className=\"w-44 min-w-0 shrink-0 border-r border-accent-orange-border\" aria-label={t(key('campaignData'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><AreaChart data={salesSeries.slice(0,18).map((value,index)=>({index,value:value+index*2}))} margin={{top:0,left:0,right:0,bottom:0}}><Tooltip content={<ChartTooltipContent/>}/><Area dataKey=\"value\" type=\"linear\" stroke={chartColor} strokeWidth={1.5} fill={chartColor} fillOpacity={0.18} isAnimationActive={false}/></AreaChart></ResponsiveContainer></ChartContainer><div className=\"flex min-w-0 flex-1 flex-col justify-end p-4\"><p className=\"text-base font-medium\">45%</p><p className=\"text-xs text-muted-foreground\">{t(key('budgetUsed'),undefined,{amount:money(32900)})}</p></div></div></MarketingFrame>\n}\ntype TicketStatus = 'solved' | 'inProgress' | 'pending'\nconst ticketSamples: {name:string;status:TicketStatus;minutes:number;priority:string;id:number}[]=[{name:'James Brown',status:'solved',minutes:12,priority:'high',id:98745},{name:'Sophia Williams',status:'inProgress',minutes:48,priority:'medium',id:98744},{name:'Matthew Johnson',status:'pending',minutes:19,priority:'low',id:98743}]\nfunction SupportAnalytics() {\n const {t,number,date}=useMarketing()\n const [period,setPeriod]=React.useState('weekly')\n const [category,setCategory]=React.useState('technical')\n const [tab,setTab]=React.useState('allTickets')\n const [tickets,setTickets]=React.useState(ticketSamples)\n const [selected,setSelected]=React.useState<number|null>(null)\n const factor=(['technical','billing','account','product'].indexOf(category)+4)/4*(period==='weekly'?1:period==='monthly'?4:52)\n const current=tickets.find(ticket=>ticket.id===selected)\n const visible=tickets.filter(ticket=>tab==='allTickets'||(tab==='openTickets'?ticket.status!=='solved':ticket.status==='solved'))\n const metrics=[{label:'firstResponse',detail:'belowSla',value:t(key('minutes'),undefined,{count:Math.round(15*factor)}),delta:-22},{label:'resolutionTime',detail:'meetingSla',value:t(key('minutes'),undefined,{count:Math.round(48*factor)}),delta:-18},{label:'csat',detail:'aboveTarget',value:'4.8/5',delta:-0.3}]\n return <><MarketingFrame tall flush><div className=\"flex h-34 shrink-0 flex-col gap-3 p-5\"><Header title={t(key('supportAnalytics'))} value={number(Math.round(2450*factor))} info action={<Period compact value={period} onChange={setPeriod}/>}><Trend value={5.4}/><span className=\"text-sm text-muted-foreground\">{t(key('totalTickets'))}</span></Header><Choices values={['technical','billing','account','product']} value={category} onChange={setCategory} label={t(key('ticketCategory'))}/></div><ChartContainer config={{value:{label:t(key('responseTime')),color:chartColor}}} className=\"h-44 shrink-0 border-y border-border px-3 pt-4\" aria-label={t(key('responseTime'))}><ResponsiveContainer width=\"100%\" height=\"100%\"><BarChart data={[10,34,44,58,44,34,34].map((value,index)=>({day:date(`2024-02-${19+index}T00:00:00Z`,{weekday:'short'}),value:Math.round(value*factor)}))} margin={{top:0,right:0,left:0,bottom:0}}><XAxis dataKey=\"day\" axisLine={false} tickLine={false} tick={{fontSize:12,fill:'var(--muted-foreground)'}}/><Tooltip content={<ChartTooltipContent/>}/><ReferenceLine y={30*factor} stroke=\"var(--muted-foreground)\" strokeDasharray=\"4 4\" label={{value:t(key('targetMinutes'),undefined,{count:30}),fill:'var(--foreground)',fontSize:12,position:'insideTopLeft'}}/><Bar dataKey=\"value\" radius={[6,6,6,6]} isAnimationActive={false}>{Array.from({length:7},(_,index)=><Cell key={index} fill={index===4?chartColor:'var(--border)'}/>)}</Bar></BarChart></ResponsiveContainer></ChartContainer><Tabs value={tab} onValueChange={setTab} variant=\"underline\" className=\"min-h-0 flex-1 gap-0\"><TabsList className=\"h-12 w-full shrink-0 justify-start gap-4 px-5\"><TabsTrigger value=\"allTickets\" className=\"min-w-0 flex-auto justify-center px-0 text-sm font-normal data-[state=active]:border-accent-orange-border hover:text-accent-orange-text\">{t(key('allTickets'))}</TabsTrigger><TabsTrigger value=\"openTickets\" className=\"min-w-0 flex-auto justify-center px-0 text-sm font-normal data-[state=active]:border-accent-orange-border hover:text-accent-orange-text\">{t(key('openTickets'))}</TabsTrigger><TabsTrigger value=\"solvedTickets\" className=\"min-w-0 flex-auto justify-center px-0 text-sm font-normal data-[state=active]:border-accent-orange-border hover:text-accent-orange-text\">{t(key('solvedTickets'))}</TabsTrigger></TabsList>{['allTickets','openTickets','solvedTickets'].map(value=><TabsContent key={value} value={value} className=\"m-0 flex min-h-0 flex-1 flex-col\"><div className=\"flex shrink-0 flex-col gap-4 px-5 pb-5 pt-4\"><div className=\"flex text-xs text-muted-foreground\"><span className=\"flex-1\">{t(key('channels'))}</span><span className=\"w-18\">{t(key('actual'))}</span><span className=\"w-10\">{t(key('average'))}</span></div>{metrics.map((metric,index)=><div key={metric.label} className=\"flex items-center text-sm\"><div className=\"min-w-0 flex-1\"><p>{t(key(metric.label))}</p><p className=\"mt-1 text-xs text-muted-foreground\">{t(key(metric.detail))}</p></div><span className=\"w-18 text-muted-foreground\">{metric.value}</span><span className={cn('w-10',index===2?'text-status-error-icon':'text-status-success-icon')}>{number(metric.delta,index===2?1:0)}%</span></div>)}</div><div className=\"min-h-0 flex-1 border-t border-border px-5 pt-4\"><p className=\"mb-3 text-xs text-muted-foreground\">{t(key('recentTickets'))}</p><ScrollArea className=\"h-40\" scrollbarSize=\"xs\"><div className=\"flex flex-col gap-4\">{visible.map((ticket,index)=><Button key={ticket.id} variant=\"ghost\" onClick={()=>setSelected(ticket.id)} className=\"h-auto min-h-10 w-full justify-start gap-3 p-0 text-left font-normal hover:bg-muted\"><Avatar label={ticket.name} size={32} className={index===1?'bg-chart-amber/20 text-status-warning-foreground':index===2?'bg-chart-violet/20 text-accent-indigo':'bg-muted'}/><div className=\"min-w-0 flex-1\"><p className=\"truncate text-sm font-medium\">{ticket.name}</p><p className=\"mt-1 flex items-center gap-1 text-xs text-muted-foreground\">{t(key(ticket.priority))} \u00B7 <span className={ticket.status==='solved'?'text-status-success-icon':'text-status-warning-icon'}>{t(key(ticket.status))}</span></p></div><div className=\"text-right\"><p className=\"text-sm\">{t(key('minutes'),undefined,{count:ticket.minutes})}</p><p className=\"mt-1 text-xs text-muted-foreground\">#TKT-{ticket.id}</p></div></Button>)}</div></ScrollArea></div></TabsContent>)}</Tabs></MarketingFrame><Dialog open={selected!==null} onOpenChange={open=>{if(!open)setSelected(null)}}><DialogContent onKeyDownCapture={event=>{if(event.key==='Enter'&&(event.ctrlKey||event.metaKey)){event.preventDefault();setSelected(null)}}}><DialogHeader><DialogTitle>{current?.name}</DialogTitle><DialogDescription>{current?`#TKT-${current.id}`:t(key('recentTickets'))}</DialogDescription></DialogHeader>{current?<DataList rows={[{label:t(key('status')),value:t(key(current.status))},{label:t(key('priority')),value:t(key(current.priority))}]}/>:null}<DialogFooter><Button variant=\"outline\" onClick={()=>setSelected(null)}>{t(key('close'))}</Button><Button disabled={current?.status==='solved'} onClick={()=>{setTickets(items=>items.map(ticket=>ticket.id===selected?{...ticket,status:'solved'}:ticket));setSelected(null)}}>{t(key('resolveTicket'))}</Button></DialogFooter></DialogContent></Dialog></>\n}\nconst activityKinds=[{key:'inventory',icon:'stack-line',color:'text-chart-violet',detail:'inventoryDetail'},{key:'price',icon:'price-tag-line',color:'text-status-success-icon',detail:'priceDetail'},{key:'newProduct',icon:'add-circle-line',color:'text-chart-violet',detail:'newProductDetail'},{key:'images',icon:'image-line',color:'text-status-warning-icon',detail:'imagesDetail'},{key:'descriptionUpdated',icon:'pencil-line',color:'text-muted-foreground',detail:'descriptionDetail'}] satisfies {key:string;icon:string;color:string;detail:string}[]\nfunction RecentActivities() {\n const {t,date}=useMarketing()\n const [period,setPeriod]=React.useState('today')\n const [query,setQuery]=React.useState('')\n const records=Array.from({length:period==='today'?7:period==='yesterday'?2:9},(_,index)=>({id:index,...activityKinds[index%5]})).filter(item=>[t(key(item.key)),t(key(item.detail)),t(key('activityProduct'))].join(' ').toLocaleLowerCase().includes(query.toLocaleLowerCase()))\n const list=<div className=\"flex flex-col gap-5\">{records.map((item,index)=><div key={item.id} className=\"relative flex gap-4\"><div className=\"relative flex w-7 shrink-0 justify-center\"><span className=\"z-10 flex size-7 items-center justify-center rounded-full border border-border bg-background shadow-xs\"><span aria-hidden=\"true\" className={cn('size-4 bg-current',item.color)} style={{maskImage:`url(\"${marketingActivityIcons[item.key as keyof typeof marketingActivityIcons]}\")`,WebkitMaskImage:`url(\"${marketingActivityIcons[item.key as keyof typeof marketingActivityIcons]}\")`,maskSize:'contain',WebkitMaskSize:'contain'}}/></span>{index<records.length-1?<span aria-hidden=\"true\" className=\"absolute bottom-0 top-8 w-px bg-border\"/>:null}</div><div className=\"min-w-0 flex-1\"><div className=\"flex items-center gap-2\"><p className=\"min-w-0 flex-1 text-sm font-medium\">{t(key(item.key))}</p><time className=\"text-overline text-muted-foreground\">{date('2024-02-21T11:30:00Z',{hour:'numeric',minute:'2-digit'})}</time></div><p className=\"mt-1 text-xs text-muted-foreground\">{item.key==='price'?t(key('seasonalDiscount')):t(key('activityProduct'))}</p><p className=\"mt-1 text-xs text-muted-foreground\">{t(key(item.detail))}</p></div></div>)}{!records.length?<p role=\"status\" className=\"text-sm text-muted-foreground\">{t(key('noActivities'))}</p>:null}</div>\n return <MarketingFrame tall flush><div className=\"flex h-33 shrink-0 flex-col gap-4 p-5\"><div className=\"flex items-start\"><div className=\"flex-1\"><h3 className=\"text-sm font-medium\">{t(key('recentActivities'))}</h3><p className=\"mt-1 text-sm text-muted-foreground\">{t(key('newActivities'),undefined,{count:5})}</p></div><Details title={t(key('recentActivities'))}>{list}</Details></div><Choices values={['today','yesterday','thisWeek']} value={period} onChange={setPeriod} label={t(key('activityPeriod'))}/></div><div className=\"border-y border-border px-5\"><SearchInput aria-label={t(key('searchActivities'))} placeholder={t(key('searchActivities'))} value={query} onChange={setQuery} className=\"h-12 rounded-none border-0 px-0 shadow-none\"/></div><ScrollArea className=\"min-h-0 flex-1 px-5 py-5\" scrollbarSize=\"xs\">{list}</ScrollArea></MarketingFrame>\n}\nconst widgets: Record<MarketingWidgetKind, React.ComponentType> = {\n 'total-sales':TotalSales,'total-visitors':TotalVisitors,'conversion-rate':ConversionRate,'user-retention':Retention,'weekly-visitors':WeeklyVisitors,'visitor-channels':Channels,geography:Geography,'realtime-visitors':RealtimeVisitors,'marketing-channels':()=> <Channels marketing/>,'product-performance':ProductPerformance,'shipping-tracking':ShippingTracking,'my-products':MyProducts,'product-categories':ProductCategories,'customer-segments':CustomerSegments,'sales-channels':SalesChannels,'campaign-data':CampaignData,'support-analytics':SupportAnalytics,'recent-activities':RecentActivities,\n}\nexport function MarketingWidgetDemo({kind}:{kind:MarketingWidgetKind}) { const Widget=widgets[kind]; return <Widget/> }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["_"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Globe, UserRound } from "lucide-react";
|
|
3
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
4
|
+
import { Avatar } from "@open-mercato/ui/primitives/avatar";
|
|
5
|
+
import mastercard from "../assets/menu-mastercard.svg";
|
|
6
|
+
import apex from "../assets/menu-apex.svg";
|
|
7
|
+
import spotify from "../assets/menu-spotify.svg";
|
|
8
|
+
import unitedStates from "../assets/menu-united-states.svg";
|
|
9
|
+
import google from "../assets/select-google.png";
|
|
10
|
+
import poland from "../assets/select-poland.png";
|
|
11
|
+
import avatar from "../assets/avatar-illustration.png";
|
|
12
|
+
const selectKinds = ["basic", "country", "avatar", "provider", "brand", "company"];
|
|
13
|
+
const commandKinds = ["basic", "avatar", "icon", "brand", "company", "country"];
|
|
14
|
+
const imageSource = (asset) => typeof asset === "string" ? asset : asset.src;
|
|
15
|
+
function useMenuChoices(kind) {
|
|
16
|
+
const t = useT();
|
|
17
|
+
return [0, 1, 2].map((index) => ({
|
|
18
|
+
value: `${kind}-${index}`,
|
|
19
|
+
label: t(`design_system.gallery.samples.menu.${kind}.${index}`),
|
|
20
|
+
description: t("design_system.gallery.samples.menu.description"),
|
|
21
|
+
disabled: index === 2,
|
|
22
|
+
alternative: index !== 0
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
function MenuVisual({ kind, large = false, alternative = false, providerSize = "row" }) {
|
|
26
|
+
if (kind === "avatar") {
|
|
27
|
+
return /* @__PURE__ */ jsx(Avatar, { size: large ? 40 : 20, label: alternative ? "Sophia Williams" : "James Brown", src: alternative ? void 0 : imageSource(avatar) });
|
|
28
|
+
}
|
|
29
|
+
const asset = kind === "country" ? alternative ? poland : unitedStates : kind === "provider" ? mastercard : kind === "brand" ? alternative ? google : spotify : kind === "company" ? apex : void 0;
|
|
30
|
+
const Icon = kind === "icon" ? UserRound : Globe;
|
|
31
|
+
const content = asset ? /* @__PURE__ */ jsx("img", { src: imageSource(asset), alt: "", className: kind === "provider" ? providerSize === "select" ? "h-6 w-8 object-contain" : "h-5 w-6.5 object-contain" : large ? "size-6 object-contain" : "size-5 object-contain" }) : /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: large ? "size-6" : "size-5" });
|
|
32
|
+
return /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: large ? "flex size-10 shrink-0 items-center justify-center rounded-full border border-input bg-background text-muted-foreground" : "inline-flex shrink-0 items-center justify-center text-muted-foreground", children: content });
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
MenuVisual,
|
|
36
|
+
commandKinds,
|
|
37
|
+
selectKinds,
|
|
38
|
+
useMenuChoices
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=menu-fixtures.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/menu-fixtures.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { Globe, UserRound } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar } from '@open-mercato/ui/primitives/avatar'\nimport mastercard from '../assets/menu-mastercard.svg'\nimport apex from '../assets/menu-apex.svg'\nimport spotify from '../assets/menu-spotify.svg'\nimport unitedStates from '../assets/menu-united-states.svg'\nimport google from '../assets/select-google.png'\nimport poland from '../assets/select-poland.png'\nimport avatar from '../assets/avatar-illustration.png'\n\nexport type MenuKind = 'basic' | 'country' | 'avatar' | 'provider' | 'brand' | 'company' | 'icon'\nexport const selectKinds: MenuKind[] = ['basic', 'country', 'avatar', 'provider', 'brand', 'company']\nexport const commandKinds: MenuKind[] = ['basic', 'avatar', 'icon', 'brand', 'company', 'country']\n\nconst imageSource = (asset: string | { readonly src: string }) => typeof asset === 'string' ? asset : asset.src\n\nexport function useMenuChoices(kind: MenuKind) {\n const t = useT()\n return [0, 1, 2].map((index) => ({\n value: `${kind}-${index}`,\n label: t(`design_system.gallery.samples.menu.${kind}.${index}`),\n description: t('design_system.gallery.samples.menu.description'),\n disabled: index === 2,\n alternative: index !== 0,\n }))\n}\n\nexport function MenuVisual({ kind, large = false, alternative = false, providerSize = 'row' }: {\n kind: MenuKind\n large?: boolean\n alternative?: boolean\n providerSize?: 'row' | 'select'\n}) {\n if (kind === 'avatar') {\n return <Avatar size={large ? 40 : 20} label={alternative ? 'Sophia Williams' : 'James Brown'} src={alternative ? undefined : imageSource(avatar)} />\n }\n const asset = kind === 'country' ? alternative ? poland : unitedStates\n : kind === 'provider' ? mastercard\n : kind === 'brand' ? alternative ? google : spotify\n : kind === 'company' ? apex : undefined\n const Icon = kind === 'icon' ? UserRound : Globe\n const content = asset\n ? <img src={imageSource(asset)} alt=\"\" className={kind === 'provider' ? providerSize === 'select' ? 'h-6 w-8 object-contain' : 'h-5 w-6.5 object-contain' : large ? 'size-6 object-contain' : 'size-5 object-contain'} />\n : <Icon aria-hidden=\"true\" className={large ? 'size-6' : 'size-5'} />\n return <span aria-hidden=\"true\" className={large ? 'flex size-10 shrink-0 items-center justify-center rounded-full border border-input bg-background text-muted-foreground' : 'inline-flex shrink-0 items-center justify-center text-muted-foreground'}>{content}</span>\n}\n"],
|
|
5
|
+
"mappings": "AAoCW;AAnCX,SAAS,OAAO,iBAAiB;AACjC,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,OAAO,gBAAgB;AACvB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAO,kBAAkB;AACzB,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,OAAO,YAAY;AAGZ,MAAM,cAA0B,CAAC,SAAS,WAAW,UAAU,YAAY,SAAS,SAAS;AAC7F,MAAM,eAA2B,CAAC,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AAEjG,MAAM,cAAc,CAAC,UAA6C,OAAO,UAAU,WAAW,QAAQ,MAAM;AAErG,SAAS,eAAe,MAAgB;AAC7C,QAAM,IAAI,KAAK;AACf,SAAO,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW;AAAA,IAC/B,OAAO,GAAG,IAAI,IAAI,KAAK;AAAA,IACvB,OAAO,EAAE,sCAAsC,IAAI,IAAI,KAAK,EAAE;AAAA,IAC9D,aAAa,EAAE,gDAAgD;AAAA,IAC/D,UAAU,UAAU;AAAA,IACpB,aAAa,UAAU;AAAA,EACzB,EAAE;AACJ;AAEO,SAAS,WAAW,EAAE,MAAM,QAAQ,OAAO,cAAc,OAAO,eAAe,MAAM,GAKzF;AACD,MAAI,SAAS,UAAU;AACrB,WAAO,oBAAC,UAAO,MAAM,QAAQ,KAAK,IAAI,OAAO,cAAc,oBAAoB,eAAe,KAAK,cAAc,SAAY,YAAY,MAAM,GAAG;AAAA,EACpJ;AACA,QAAM,QAAQ,SAAS,YAAY,cAAc,SAAS,eACtD,SAAS,aAAa,aACpB,SAAS,UAAU,cAAc,SAAS,UACxC,SAAS,YAAY,OAAO;AACpC,QAAM,OAAO,SAAS,SAAS,YAAY;AAC3C,QAAM,UAAU,QACZ,oBAAC,SAAI,KAAK,YAAY,KAAK,GAAG,KAAI,IAAG,WAAW,SAAS,aAAa,iBAAiB,WAAW,2BAA2B,6BAA6B,QAAQ,0BAA0B,yBAAyB,IACrN,oBAAC,QAAK,eAAY,QAAO,WAAW,QAAQ,WAAW,UAAU;AACrE,SAAO,oBAAC,UAAK,eAAY,QAAO,WAAW,QAAQ,2HAA2H,0EAA2E,mBAAQ;AACnQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
const selectSourceCode = `import * as React from 'react'
|
|
2
|
+
import { Globe, UserRound } from 'lucide-react'
|
|
3
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
4
|
+
import { Avatar } from '@open-mercato/ui/primitives/avatar'
|
|
5
|
+
import mastercard from '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'
|
|
6
|
+
import apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'
|
|
7
|
+
import spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'
|
|
8
|
+
import unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'
|
|
9
|
+
import google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'
|
|
10
|
+
import poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'
|
|
11
|
+
import avatar from '@open-mercato/core/modules/design_system/gallery/assets/avatar-illustration.png'
|
|
12
|
+
|
|
13
|
+
export type MenuKind = 'basic' | 'country' | 'avatar' | 'provider' | 'brand' | 'company' | 'icon'
|
|
14
|
+
export const selectKinds: MenuKind[] = ['basic', 'country', 'avatar', 'provider', 'brand', 'company']
|
|
15
|
+
export const commandKinds: MenuKind[] = ['basic', 'avatar', 'icon', 'brand', 'company', 'country']
|
|
16
|
+
|
|
17
|
+
const imageSource = (asset: string | { readonly src: string }) => typeof asset === 'string' ? asset : asset.src
|
|
18
|
+
|
|
19
|
+
export function useMenuChoices(kind: MenuKind) {
|
|
20
|
+
const t = useT()
|
|
21
|
+
return [0, 1, 2].map((index) => ({
|
|
22
|
+
value: \`\${kind}-\${index}\`,
|
|
23
|
+
label: t(\`design_system.gallery.samples.menu.\${kind}.\${index}\`),
|
|
24
|
+
description: t('design_system.gallery.samples.menu.description'),
|
|
25
|
+
disabled: index === 2,
|
|
26
|
+
alternative: index !== 0,
|
|
27
|
+
}))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function MenuVisual({ kind, large = false, alternative = false, providerSize = 'row' }: {
|
|
31
|
+
kind: MenuKind
|
|
32
|
+
large?: boolean
|
|
33
|
+
alternative?: boolean
|
|
34
|
+
providerSize?: 'row' | 'select'
|
|
35
|
+
}) {
|
|
36
|
+
if (kind === 'avatar') {
|
|
37
|
+
return <Avatar size={large ? 40 : 20} label={alternative ? 'Sophia Williams' : 'James Brown'} src={alternative ? undefined : imageSource(avatar)} />
|
|
38
|
+
}
|
|
39
|
+
const asset = kind === 'country' ? alternative ? poland : unitedStates
|
|
40
|
+
: kind === 'provider' ? mastercard
|
|
41
|
+
: kind === 'brand' ? alternative ? google : spotify
|
|
42
|
+
: kind === 'company' ? apex : undefined
|
|
43
|
+
const Icon = kind === 'icon' ? UserRound : Globe
|
|
44
|
+
const content = asset
|
|
45
|
+
? <img src={imageSource(asset)} alt="" className={kind === 'provider' ? providerSize === 'select' ? 'h-6 w-8 object-contain' : 'h-5 w-6.5 object-contain' : large ? 'size-6 object-contain' : 'size-5 object-contain'} />
|
|
46
|
+
: <Icon aria-hidden="true" className={large ? 'size-6' : 'size-5'} />
|
|
47
|
+
return <span aria-hidden="true" className={large ? 'flex size-10 shrink-0 items-center justify-center rounded-full border border-input bg-background text-muted-foreground' : 'inline-flex shrink-0 items-center justify-center text-muted-foreground'}>{content}</span>
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
import { Info, Plus } from 'lucide-react'
|
|
51
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
52
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
53
|
+
import { Kbd } from '@open-mercato/ui/primitives/kbd'
|
|
54
|
+
import { FormField } from '@open-mercato/ui/primitives/form-field'
|
|
55
|
+
import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
|
|
56
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'
|
|
57
|
+
import { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'
|
|
58
|
+
import { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'
|
|
59
|
+
|
|
60
|
+
export function SelectSourceExample({ kind, size = 36, state = 'filled' }: {
|
|
61
|
+
kind: MenuKind
|
|
62
|
+
size?: 32 | 36 | 40
|
|
63
|
+
state?: 'default' | 'filled' | 'disabled' | 'error'
|
|
64
|
+
}) {
|
|
65
|
+
const t = useT()
|
|
66
|
+
const choices = useMenuChoices(kind)
|
|
67
|
+
const [value, setValue] = React.useState(state === 'default' || state === 'error' ? '' : choices[0].value)
|
|
68
|
+
const selected = choices.find((choice) => choice.value === value)
|
|
69
|
+
const disabled = state === 'disabled'
|
|
70
|
+
const label = t(\`design_system.gallery.samples.menu.kind.\${kind}\`)
|
|
71
|
+
const providerPadding = kind !== 'provider' ? undefined : size === 40 ? 'p-2' : size === 36 ? 'p-1.5' : 'p-1'
|
|
72
|
+
return (
|
|
73
|
+
<Select value={value} onValueChange={setValue} disabled={disabled}>
|
|
74
|
+
<FormField label={label} disabled={disabled} description={t('design_system.gallery.samples.menu.hint')} error={state === 'error' ? t('design_system.gallery.samples.menu.required') : undefined}>
|
|
75
|
+
<SelectTrigger size={size} className={providerPadding}>
|
|
76
|
+
{kind !== 'basic' && <SelectTriggerLeading><MenuVisual kind={kind} alternative={selected?.alternative} providerSize="select" /></SelectTriggerLeading>}
|
|
77
|
+
<SelectValue className="min-w-0 flex-1 text-left" placeholder={t('design_system.gallery.samples.menu.placeholder')} />
|
|
78
|
+
</SelectTrigger>
|
|
79
|
+
</FormField>
|
|
80
|
+
<SelectContent>
|
|
81
|
+
{choices.map((choice) => <SelectItem key={choice.value} value={choice.value} disabled={choice.disabled} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} alternative={choice.alternative} />}>
|
|
82
|
+
{choice.label}
|
|
83
|
+
</SelectItem>)}
|
|
84
|
+
</SelectContent>
|
|
85
|
+
</Select>
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function SelectSourceMatrix({ size = 36, state = 'filled' }: { size?: 32 | 36 | 40; state?: 'default' | 'filled' | 'disabled' | 'error' }) {
|
|
90
|
+
return <div className="grid w-full gap-6 sm:grid-cols-2 xl:grid-cols-3">{selectKinds.map((kind) => <SelectSourceExample key={kind} kind={kind} size={size} state={state} />)}</div>
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
`;
|
|
94
|
+
const dropdownSourceCode = `import * as React from 'react'
|
|
95
|
+
import { Globe, UserRound } from 'lucide-react'
|
|
96
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
97
|
+
import { Avatar } from '@open-mercato/ui/primitives/avatar'
|
|
98
|
+
import mastercard from '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'
|
|
99
|
+
import apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'
|
|
100
|
+
import spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'
|
|
101
|
+
import unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'
|
|
102
|
+
import google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'
|
|
103
|
+
import poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'
|
|
104
|
+
import avatar from '@open-mercato/core/modules/design_system/gallery/assets/avatar-illustration.png'
|
|
105
|
+
|
|
106
|
+
export type MenuKind = 'basic' | 'country' | 'avatar' | 'provider' | 'brand' | 'company' | 'icon'
|
|
107
|
+
export const selectKinds: MenuKind[] = ['basic', 'country', 'avatar', 'provider', 'brand', 'company']
|
|
108
|
+
export const commandKinds: MenuKind[] = ['basic', 'avatar', 'icon', 'brand', 'company', 'country']
|
|
109
|
+
|
|
110
|
+
const imageSource = (asset: string | { readonly src: string }) => typeof asset === 'string' ? asset : asset.src
|
|
111
|
+
|
|
112
|
+
export function useMenuChoices(kind: MenuKind) {
|
|
113
|
+
const t = useT()
|
|
114
|
+
return [0, 1, 2].map((index) => ({
|
|
115
|
+
value: \`\${kind}-\${index}\`,
|
|
116
|
+
label: t(\`design_system.gallery.samples.menu.\${kind}.\${index}\`),
|
|
117
|
+
description: t('design_system.gallery.samples.menu.description'),
|
|
118
|
+
disabled: index === 2,
|
|
119
|
+
alternative: index !== 0,
|
|
120
|
+
}))
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function MenuVisual({ kind, large = false, alternative = false, providerSize = 'row' }: {
|
|
124
|
+
kind: MenuKind
|
|
125
|
+
large?: boolean
|
|
126
|
+
alternative?: boolean
|
|
127
|
+
providerSize?: 'row' | 'select'
|
|
128
|
+
}) {
|
|
129
|
+
if (kind === 'avatar') {
|
|
130
|
+
return <Avatar size={large ? 40 : 20} label={alternative ? 'Sophia Williams' : 'James Brown'} src={alternative ? undefined : imageSource(avatar)} />
|
|
131
|
+
}
|
|
132
|
+
const asset = kind === 'country' ? alternative ? poland : unitedStates
|
|
133
|
+
: kind === 'provider' ? mastercard
|
|
134
|
+
: kind === 'brand' ? alternative ? google : spotify
|
|
135
|
+
: kind === 'company' ? apex : undefined
|
|
136
|
+
const Icon = kind === 'icon' ? UserRound : Globe
|
|
137
|
+
const content = asset
|
|
138
|
+
? <img src={imageSource(asset)} alt="" className={kind === 'provider' ? providerSize === 'select' ? 'h-6 w-8 object-contain' : 'h-5 w-6.5 object-contain' : large ? 'size-6 object-contain' : 'size-5 object-contain'} />
|
|
139
|
+
: <Icon aria-hidden="true" className={large ? 'size-6' : 'size-5'} />
|
|
140
|
+
return <span aria-hidden="true" className={large ? 'flex size-10 shrink-0 items-center justify-center rounded-full border border-input bg-background text-muted-foreground' : 'inline-flex shrink-0 items-center justify-center text-muted-foreground'}>{content}</span>
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
import { Info, Plus } from 'lucide-react'
|
|
144
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
145
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
146
|
+
import { Kbd } from '@open-mercato/ui/primitives/kbd'
|
|
147
|
+
import { FormField } from '@open-mercato/ui/primitives/form-field'
|
|
148
|
+
import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
|
|
149
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'
|
|
150
|
+
import { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'
|
|
151
|
+
import { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'
|
|
152
|
+
|
|
153
|
+
export function DropdownSourceExample({ size = 36, empty = false }: { size?: 36 | 56; empty?: boolean }) {
|
|
154
|
+
const t = useT()
|
|
155
|
+
const [open, setOpen] = React.useState(false)
|
|
156
|
+
const [value, setValue] = React.useState('basic')
|
|
157
|
+
const [query, setQuery] = React.useState(empty ? 'zzzz' : '')
|
|
158
|
+
const [workspaceCount, setWorkspaceCount] = React.useState(0)
|
|
159
|
+
return (
|
|
160
|
+
<div className="flex w-full flex-col items-start gap-3">
|
|
161
|
+
<Dropdown open={open} onOpenChange={setOpen}>
|
|
162
|
+
<DropdownTrigger asChild><Button variant="outline">{t('design_system.gallery.samples.menu.openDropdown')}</Button></DropdownTrigger>
|
|
163
|
+
<DropdownContent className="w-96 max-w-full" aria-label={t('design_system.gallery.samples.menu.openDropdown')} commandProps={{ label: t('design_system.gallery.samples.menu.options') }}>
|
|
164
|
+
<DropdownInput value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')} />
|
|
165
|
+
<DropdownList>
|
|
166
|
+
<DropdownEmpty>{t('design_system.gallery.samples.menu.noResults')}</DropdownEmpty>
|
|
167
|
+
{selectKinds.map((kind) => {
|
|
168
|
+
const label = t(\`design_system.gallery.samples.menu.\${kind}.0\`)
|
|
169
|
+
return <DropdownItem key={kind} value={label} size={size} checked={value === kind} leading={<MenuVisual kind={kind} large={size === 56} />}
|
|
170
|
+
description={size === 56 ? t('design_system.gallery.samples.menu.description') : undefined}
|
|
171
|
+
sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}
|
|
172
|
+
badge={kind === 'brand' ? <Badge appearance="lighter" tone="info" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}
|
|
173
|
+
shortcut={kind === 'company' ? <Kbd>\u23181</Kbd> : undefined}
|
|
174
|
+
onSelect={() => { setValue(kind); setOpen(false) }}>
|
|
175
|
+
{label}
|
|
176
|
+
</DropdownItem>
|
|
177
|
+
})}
|
|
178
|
+
<DropdownItem value={t('design_system.gallery.samples.menu.unavailable')} size={size} disabled leading={<MenuVisual kind="basic" large={size === 56} />}>{t('design_system.gallery.samples.menu.unavailable')}</DropdownItem>
|
|
179
|
+
</DropdownList>
|
|
180
|
+
<DropdownFooter><Button variant="outline" size="sm" className="w-full" onClick={() => { setWorkspaceCount((count) => count + 1); setOpen(false) }}><Plus className="size-5" />{t('design_system.gallery.samples.menu.addWorkspace')}</Button></DropdownFooter>
|
|
181
|
+
<DropdownCaption>{t('design_system.gallery.samples.menu.localCaption')}</DropdownCaption>
|
|
182
|
+
</DropdownContent>
|
|
183
|
+
</Dropdown>
|
|
184
|
+
<output aria-live="polite" className="text-sm text-muted-foreground">{t('design_system.gallery.samples.menu.selected', { value: t(\`design_system.gallery.samples.menu.\${value}.0\`) })}</output>
|
|
185
|
+
{workspaceCount > 0 && <output aria-live="polite" className="text-sm text-muted-foreground">{t('design_system.gallery.samples.menu.created', { count: workspaceCount })}</output>}
|
|
186
|
+
</div>
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
`;
|
|
191
|
+
const commandSourceCode = `import * as React from 'react'
|
|
192
|
+
import { Globe, UserRound } from 'lucide-react'
|
|
193
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
194
|
+
import { Avatar } from '@open-mercato/ui/primitives/avatar'
|
|
195
|
+
import mastercard from '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'
|
|
196
|
+
import apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'
|
|
197
|
+
import spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'
|
|
198
|
+
import unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'
|
|
199
|
+
import google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'
|
|
200
|
+
import poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'
|
|
201
|
+
import avatar from '@open-mercato/core/modules/design_system/gallery/assets/avatar-illustration.png'
|
|
202
|
+
|
|
203
|
+
export type MenuKind = 'basic' | 'country' | 'avatar' | 'provider' | 'brand' | 'company' | 'icon'
|
|
204
|
+
export const selectKinds: MenuKind[] = ['basic', 'country', 'avatar', 'provider', 'brand', 'company']
|
|
205
|
+
export const commandKinds: MenuKind[] = ['basic', 'avatar', 'icon', 'brand', 'company', 'country']
|
|
206
|
+
|
|
207
|
+
const imageSource = (asset: string | { readonly src: string }) => typeof asset === 'string' ? asset : asset.src
|
|
208
|
+
|
|
209
|
+
export function useMenuChoices(kind: MenuKind) {
|
|
210
|
+
const t = useT()
|
|
211
|
+
return [0, 1, 2].map((index) => ({
|
|
212
|
+
value: \`\${kind}-\${index}\`,
|
|
213
|
+
label: t(\`design_system.gallery.samples.menu.\${kind}.\${index}\`),
|
|
214
|
+
description: t('design_system.gallery.samples.menu.description'),
|
|
215
|
+
disabled: index === 2,
|
|
216
|
+
alternative: index !== 0,
|
|
217
|
+
}))
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function MenuVisual({ kind, large = false, alternative = false, providerSize = 'row' }: {
|
|
221
|
+
kind: MenuKind
|
|
222
|
+
large?: boolean
|
|
223
|
+
alternative?: boolean
|
|
224
|
+
providerSize?: 'row' | 'select'
|
|
225
|
+
}) {
|
|
226
|
+
if (kind === 'avatar') {
|
|
227
|
+
return <Avatar size={large ? 40 : 20} label={alternative ? 'Sophia Williams' : 'James Brown'} src={alternative ? undefined : imageSource(avatar)} />
|
|
228
|
+
}
|
|
229
|
+
const asset = kind === 'country' ? alternative ? poland : unitedStates
|
|
230
|
+
: kind === 'provider' ? mastercard
|
|
231
|
+
: kind === 'brand' ? alternative ? google : spotify
|
|
232
|
+
: kind === 'company' ? apex : undefined
|
|
233
|
+
const Icon = kind === 'icon' ? UserRound : Globe
|
|
234
|
+
const content = asset
|
|
235
|
+
? <img src={imageSource(asset)} alt="" className={kind === 'provider' ? providerSize === 'select' ? 'h-6 w-8 object-contain' : 'h-5 w-6.5 object-contain' : large ? 'size-6 object-contain' : 'size-5 object-contain'} />
|
|
236
|
+
: <Icon aria-hidden="true" className={large ? 'size-6' : 'size-5'} />
|
|
237
|
+
return <span aria-hidden="true" className={large ? 'flex size-10 shrink-0 items-center justify-center rounded-full border border-input bg-background text-muted-foreground' : 'inline-flex shrink-0 items-center justify-center text-muted-foreground'}>{content}</span>
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
import { Info, Plus } from 'lucide-react'
|
|
241
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
242
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
243
|
+
import { Kbd } from '@open-mercato/ui/primitives/kbd'
|
|
244
|
+
import { FormField } from '@open-mercato/ui/primitives/form-field'
|
|
245
|
+
import { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'
|
|
246
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'
|
|
247
|
+
import { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'
|
|
248
|
+
import { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'
|
|
249
|
+
|
|
250
|
+
function CommandSourceRows({ size, onSelect }: { size: 40 | 64; onSelect: (value: string) => void }) {
|
|
251
|
+
const t = useT()
|
|
252
|
+
return <>{commandKinds.map((kind) => {
|
|
253
|
+
const label = t(\`design_system.gallery.samples.menu.\${kind}.0\`)
|
|
254
|
+
return <CommandMenuItem key={kind} value={label} size={size} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} large={size === 64} />}
|
|
255
|
+
description={size === 64 ? t('design_system.gallery.samples.menu.description') : undefined}
|
|
256
|
+
sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}
|
|
257
|
+
badge={kind === 'brand' ? <Badge appearance="lighter" tone="info" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}
|
|
258
|
+
shortcut={kind === 'company' ? <Kbd>\u2318K</Kbd> : undefined}
|
|
259
|
+
onSelect={() => onSelect(label)}>{label}</CommandMenuItem>
|
|
260
|
+
})}</>
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export function CommandSourceExample({ size = 40, empty = false, withGroups = false }: { size?: 40 | 64; empty?: boolean; withGroups?: boolean }) {
|
|
264
|
+
const t = useT()
|
|
265
|
+
const [open, setOpen] = React.useState(false)
|
|
266
|
+
const [query, setQuery] = React.useState(empty ? 'zzzz' : '')
|
|
267
|
+
const [result, setResult] = React.useState('')
|
|
268
|
+
const onSelect = (label: string) => { setResult(label); setOpen(false) }
|
|
269
|
+
const rows = <CommandSourceRows size={size} onSelect={onSelect} />
|
|
270
|
+
return (
|
|
271
|
+
<div className="flex flex-col items-start gap-3">
|
|
272
|
+
<CommandMenu open={open} onOpenChange={setOpen}>
|
|
273
|
+
<CommandMenuTrigger asChild><Button variant="outline">{t('design_system.gallery.samples.menu.openCommand')}</Button></CommandMenuTrigger>
|
|
274
|
+
<CommandMenuContent title={t('design_system.gallery.samples.menu.openCommand')} commandProps={{ loop: true }}>
|
|
275
|
+
<CommandMenuInput appearance="source" value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')}
|
|
276
|
+
trailing={<SimpleTooltip content={t('design_system.gallery.samples.menu.hint')}><Button variant="ghost" size="2xs" aria-label={t('design_system.gallery.samples.menu.help')}><Info className="size-5" /></Button></SimpleTooltip>} />
|
|
277
|
+
<CommandMenuList>
|
|
278
|
+
<CommandMenuEmpty>{t('design_system.gallery.samples.menu.noResults')}</CommandMenuEmpty>
|
|
279
|
+
{withGroups ? <CommandMenuGroup heading={t('design_system.gallery.samples.menu.caption')} actionLabel={t('design_system.gallery.samples.menu.seeAll')} onAction={() => setQuery('')}>{rows}</CommandMenuGroup> : rows}
|
|
280
|
+
{withGroups && <><CommandMenuSeparator /><CommandMenuGroup heading={t('design_system.gallery.samples.menu.unavailable')}><CommandMenuItem value="unavailable" disabled size={size}>{t('design_system.gallery.samples.menu.unavailable')}</CommandMenuItem></CommandMenuGroup></>}
|
|
281
|
+
</CommandMenuList>
|
|
282
|
+
<CommandMenuFooter className="min-h-12 flex-wrap px-5 py-3.5" helpSlot={<Button variant="link" size="2xs" onClick={() => setResult(t('design_system.gallery.samples.menu.hint'))}>{t('design_system.gallery.samples.menu.help')}</Button>} />
|
|
283
|
+
</CommandMenuContent>
|
|
284
|
+
</CommandMenu>
|
|
285
|
+
{result && <output aria-live="polite" className="text-sm text-muted-foreground">{t('design_system.gallery.samples.menu.selected', { value: result })}</output>}
|
|
286
|
+
</div>
|
|
287
|
+
)
|
|
288
|
+
}
|
|
289
|
+
`;
|
|
290
|
+
export {
|
|
291
|
+
commandSourceCode,
|
|
292
|
+
dropdownSourceCode,
|
|
293
|
+
selectSourceCode
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=menu-sources.js.map
|