@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/build.mjs +11 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/lib/detailHelpers.js +4 -0
- package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +5 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
- package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
- package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
- package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
- package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
- package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
- package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
- package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
- package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
- package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
- package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
- package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
- package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
- package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
- package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menus.js +150 -0
- package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell.js +330 -0
- package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +123 -60
- package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
- package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/charts.js +532 -186
- package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/dates.js +191 -3
- package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/detail.js +118 -77
- package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/display.js +1449 -240
- package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
- package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/filters.js +231 -103
- package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
- package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/icons.js +29 -91
- package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
- package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/library.js +20 -0
- package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +121 -103
- package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
- package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
- package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
- package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
- package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
- package/dist/modules/design_system/gallery/presentation.js +108 -0
- package/dist/modules/design_system/gallery/presentation.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +8 -5
- package/dist/modules/design_system/gallery/registry.js.map +2 -2
- package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
- package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
- package/dist/modules/design_system/i18n/de.json +7167 -0
- package/dist/modules/design_system/i18n/en.json +7167 -0
- package/dist/modules/design_system/i18n/es.json +7167 -0
- package/dist/modules/design_system/i18n/ko.json +7167 -0
- package/dist/modules/design_system/i18n/pl.json +7167 -0
- package/dist/modules/push_notifications/lib/queue.js +1 -31
- package/dist/modules/push_notifications/lib/queue.js.map +2 -2
- package/jest.config.cjs +1 -0
- package/jest.mocks/image.js +1 -0
- package/package.json +8 -9
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/lib/detailHelpers.ts +4 -0
- package/src/modules/customers/lib/todoCompatibility.ts +10 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
- package/src/modules/design_system/gallery/assets/README.md +30 -0
- package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
- package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
- package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
- package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/src/modules/design_system/gallery/assets/select-google.png +0 -0
- package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
- package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
- package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
- package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
- package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
- package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
- package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
- package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
- package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
- package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
- package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
- package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
- package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
- package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
- package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
- package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
- package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
- package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
- package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
- package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
- package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
- package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
- package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
- package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
- package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
- package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
- package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
- package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
- package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
- package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
- package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
- package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
- package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
- package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
- package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
- package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
- package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
- package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
- package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
- package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
- package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
- package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
- package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
- package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
- package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
- package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
- package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
- package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
- package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
- package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
- package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
- package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
- package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
- package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
- package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
- package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
- package/src/modules/design_system/gallery/entries/library.tsx +16 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
- package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
- package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
- package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
- package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
- package/src/modules/design_system/gallery/presentation.ts +106 -0
- package/src/modules/design_system/gallery/registry.ts +8 -6
- package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
- package/src/modules/design_system/i18n/de.json +7112 -3
- package/src/modules/design_system/i18n/en.json +7112 -3
- package/src/modules/design_system/i18n/es.json +7112 -3
- package/src/modules/design_system/i18n/ko.json +7112 -3
- package/src/modules/design_system/i18n/pl.json +7112 -3
- package/src/modules/push_notifications/AGENTS.md +9 -5
- package/src/modules/push_notifications/lib/queue.ts +15 -44
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/menu-sources.ts"],
|
|
4
|
+
"sourcesContent": ["export const selectSourceCode = \"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 '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'\\nimport apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'\\nimport spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'\\nimport unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'\\nimport google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'\\nimport poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'\\nimport avatar from '@open-mercato/core/modules/design_system/gallery/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\\nimport { Info, Plus } from 'lucide-react'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Kbd } from '@open-mercato/ui/primitives/kbd'\\nimport { FormField } from '@open-mercato/ui/primitives/form-field'\\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'\\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'\\nimport { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'\\n\\nexport function SelectSourceExample({ kind, size = 36, state = 'filled' }: {\\n kind: MenuKind\\n size?: 32 | 36 | 40\\n state?: 'default' | 'filled' | 'disabled' | 'error'\\n}) {\\n const t = useT()\\n const choices = useMenuChoices(kind)\\n const [value, setValue] = React.useState(state === 'default' || state === 'error' ? '' : choices[0].value)\\n const selected = choices.find((choice) => choice.value === value)\\n const disabled = state === 'disabled'\\n const label = t(`design_system.gallery.samples.menu.kind.${kind}`)\\n const providerPadding = kind !== 'provider' ? undefined : size === 40 ? 'p-2' : size === 36 ? 'p-1.5' : 'p-1'\\n return (\\n <Select value={value} onValueChange={setValue} disabled={disabled}>\\n <FormField label={label} disabled={disabled} description={t('design_system.gallery.samples.menu.hint')} error={state === 'error' ? t('design_system.gallery.samples.menu.required') : undefined}>\\n <SelectTrigger size={size} className={providerPadding}>\\n {kind !== 'basic' && <SelectTriggerLeading><MenuVisual kind={kind} alternative={selected?.alternative} providerSize=\\\"select\\\" /></SelectTriggerLeading>}\\n <SelectValue className=\\\"min-w-0 flex-1 text-left\\\" placeholder={t('design_system.gallery.samples.menu.placeholder')} />\\n </SelectTrigger>\\n </FormField>\\n <SelectContent>\\n {choices.map((choice) => <SelectItem key={choice.value} value={choice.value} disabled={choice.disabled} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} alternative={choice.alternative} />}>\\n {choice.label}\\n </SelectItem>)}\\n </SelectContent>\\n </Select>\\n )\\n}\\n\\nexport function SelectSourceMatrix({ size = 36, state = 'filled' }: { size?: 32 | 36 | 40; state?: 'default' | 'filled' | 'disabled' | 'error' }) {\\n 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>\\n}\\n\\n\"\n\nexport const dropdownSourceCode = \"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 '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'\\nimport apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'\\nimport spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'\\nimport unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'\\nimport google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'\\nimport poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'\\nimport avatar from '@open-mercato/core/modules/design_system/gallery/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\\nimport { Info, Plus } from 'lucide-react'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Kbd } from '@open-mercato/ui/primitives/kbd'\\nimport { FormField } from '@open-mercato/ui/primitives/form-field'\\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'\\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'\\nimport { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'\\n\\nexport function DropdownSourceExample({ size = 36, empty = false }: { size?: 36 | 56; empty?: boolean }) {\\n const t = useT()\\n const [open, setOpen] = React.useState(false)\\n const [value, setValue] = React.useState('basic')\\n const [query, setQuery] = React.useState(empty ? 'zzzz' : '')\\n const [workspaceCount, setWorkspaceCount] = React.useState(0)\\n return (\\n <div className=\\\"flex w-full flex-col items-start gap-3\\\">\\n <Dropdown open={open} onOpenChange={setOpen}>\\n <DropdownTrigger asChild><Button variant=\\\"outline\\\">{t('design_system.gallery.samples.menu.openDropdown')}</Button></DropdownTrigger>\\n <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') }}>\\n <DropdownInput value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')} />\\n <DropdownList>\\n <DropdownEmpty>{t('design_system.gallery.samples.menu.noResults')}</DropdownEmpty>\\n {selectKinds.map((kind) => {\\n const label = t(`design_system.gallery.samples.menu.${kind}.0`)\\n return <DropdownItem key={kind} value={label} size={size} checked={value === kind} leading={<MenuVisual kind={kind} large={size === 56} />}\\n description={size === 56 ? t('design_system.gallery.samples.menu.description') : undefined}\\n sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}\\n badge={kind === 'brand' ? <Badge appearance=\\\"lighter\\\" tone=\\\"info\\\" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}\\n shortcut={kind === 'company' ? <Kbd>\\u23181</Kbd> : undefined}\\n onSelect={() => { setValue(kind); setOpen(false) }}>\\n {label}\\n </DropdownItem>\\n })}\\n <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>\\n </DropdownList>\\n <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>\\n <DropdownCaption>{t('design_system.gallery.samples.menu.localCaption')}</DropdownCaption>\\n </DropdownContent>\\n </Dropdown>\\n <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>\\n {workspaceCount > 0 && <output aria-live=\\\"polite\\\" className=\\\"text-sm text-muted-foreground\\\">{t('design_system.gallery.samples.menu.created', { count: workspaceCount })}</output>}\\n </div>\\n )\\n}\\n\\n\"\n\nexport const commandSourceCode = \"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 '@open-mercato/core/modules/design_system/gallery/assets/menu-mastercard.svg'\\nimport apex from '@open-mercato/core/modules/design_system/gallery/assets/menu-apex.svg'\\nimport spotify from '@open-mercato/core/modules/design_system/gallery/assets/menu-spotify.svg'\\nimport unitedStates from '@open-mercato/core/modules/design_system/gallery/assets/menu-united-states.svg'\\nimport google from '@open-mercato/core/modules/design_system/gallery/assets/select-google.png'\\nimport poland from '@open-mercato/core/modules/design_system/gallery/assets/select-poland.png'\\nimport avatar from '@open-mercato/core/modules/design_system/gallery/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\\nimport { Info, Plus } from 'lucide-react'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Kbd } from '@open-mercato/ui/primitives/kbd'\\nimport { FormField } from '@open-mercato/ui/primitives/form-field'\\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'\\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'\\nimport { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'\\n\\nfunction CommandSourceRows({ size, onSelect }: { size: 40 | 64; onSelect: (value: string) => void }) {\\n const t = useT()\\n return <>{commandKinds.map((kind) => {\\n const label = t(`design_system.gallery.samples.menu.${kind}.0`)\\n return <CommandMenuItem key={kind} value={label} size={size} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} large={size === 64} />}\\n description={size === 64 ? t('design_system.gallery.samples.menu.description') : undefined}\\n sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}\\n badge={kind === 'brand' ? <Badge appearance=\\\"lighter\\\" tone=\\\"info\\\" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}\\n shortcut={kind === 'company' ? <Kbd>\\u2318K</Kbd> : undefined}\\n onSelect={() => onSelect(label)}>{label}</CommandMenuItem>\\n })}</>\\n}\\n\\nexport function CommandSourceExample({ size = 40, empty = false, withGroups = false }: { size?: 40 | 64; empty?: boolean; withGroups?: boolean }) {\\n const t = useT()\\n const [open, setOpen] = React.useState(false)\\n const [query, setQuery] = React.useState(empty ? 'zzzz' : '')\\n const [result, setResult] = React.useState('')\\n const onSelect = (label: string) => { setResult(label); setOpen(false) }\\n const rows = <CommandSourceRows size={size} onSelect={onSelect} />\\n return (\\n <div className=\\\"flex flex-col items-start gap-3\\\">\\n <CommandMenu open={open} onOpenChange={setOpen}>\\n <CommandMenuTrigger asChild><Button variant=\\\"outline\\\">{t('design_system.gallery.samples.menu.openCommand')}</Button></CommandMenuTrigger>\\n <CommandMenuContent title={t('design_system.gallery.samples.menu.openCommand')} commandProps={{ loop: true }}>\\n <CommandMenuInput appearance=\\\"source\\\" value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')}\\n 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>} />\\n <CommandMenuList>\\n <CommandMenuEmpty>{t('design_system.gallery.samples.menu.noResults')}</CommandMenuEmpty>\\n {withGroups ? <CommandMenuGroup heading={t('design_system.gallery.samples.menu.caption')} actionLabel={t('design_system.gallery.samples.menu.seeAll')} onAction={() => setQuery('')}>{rows}</CommandMenuGroup> : rows}\\n {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></>}\\n </CommandMenuList>\\n <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>} />\\n </CommandMenuContent>\\n </CommandMenu>\\n {result && <output aria-live=\\\"polite\\\" className=\\\"text-sm text-muted-foreground\\\">{t('design_system.gallery.samples.menu.selected', { value: result })}</output>}\\n </div>\\n )\\n}\\n\"\n"],
|
|
5
|
+
"mappings": "AAAO,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEzB,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE3B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Info, Plus } from "lucide-react";
|
|
4
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
5
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
6
|
+
import { Badge } from "@open-mercato/ui/primitives/badge";
|
|
7
|
+
import { Kbd } from "@open-mercato/ui/primitives/kbd";
|
|
8
|
+
import { FormField } from "@open-mercato/ui/primitives/form-field";
|
|
9
|
+
import { SimpleTooltip } from "@open-mercato/ui/primitives/tooltip";
|
|
10
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from "@open-mercato/ui/primitives/select";
|
|
11
|
+
import { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from "@open-mercato/ui/primitives/dropdown";
|
|
12
|
+
import { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from "@open-mercato/ui/primitives/command-menu";
|
|
13
|
+
import { MenuVisual, useMenuChoices, selectKinds, commandKinds } from "./menu-fixtures.js";
|
|
14
|
+
function SelectSourceExample({ kind, size = 36, state = "filled" }) {
|
|
15
|
+
const t = useT();
|
|
16
|
+
const choices = useMenuChoices(kind);
|
|
17
|
+
const [value, setValue] = React.useState(state === "default" || state === "error" ? "" : choices[0].value);
|
|
18
|
+
const selected = choices.find((choice) => choice.value === value);
|
|
19
|
+
const disabled = state === "disabled";
|
|
20
|
+
const label = t(`design_system.gallery.samples.menu.kind.${kind}`);
|
|
21
|
+
const providerPadding = kind !== "provider" ? void 0 : size === 40 ? "p-2" : size === 36 ? "p-1.5" : "p-1";
|
|
22
|
+
return /* @__PURE__ */ jsxs(Select, { value, onValueChange: setValue, disabled, children: [
|
|
23
|
+
/* @__PURE__ */ jsx(FormField, { label, disabled, description: t("design_system.gallery.samples.menu.hint"), error: state === "error" ? t("design_system.gallery.samples.menu.required") : void 0, children: /* @__PURE__ */ jsxs(SelectTrigger, { size, className: providerPadding, children: [
|
|
24
|
+
kind !== "basic" && /* @__PURE__ */ jsx(SelectTriggerLeading, { children: /* @__PURE__ */ jsx(MenuVisual, { kind, alternative: selected?.alternative, providerSize: "select" }) }),
|
|
25
|
+
/* @__PURE__ */ jsx(SelectValue, { className: "min-w-0 flex-1 text-left", placeholder: t("design_system.gallery.samples.menu.placeholder") })
|
|
26
|
+
] }) }),
|
|
27
|
+
/* @__PURE__ */ jsx(SelectContent, { children: choices.map((choice) => /* @__PURE__ */ jsx(SelectItem, { value: choice.value, disabled: choice.disabled, leading: kind === "basic" ? void 0 : /* @__PURE__ */ jsx(MenuVisual, { kind, alternative: choice.alternative }), children: choice.label }, choice.value)) })
|
|
28
|
+
] });
|
|
29
|
+
}
|
|
30
|
+
function SelectSourceMatrix({ size = 36, state = "filled" }) {
|
|
31
|
+
return /* @__PURE__ */ jsx("div", { className: "grid w-full gap-6 sm:grid-cols-2 xl:grid-cols-3", children: selectKinds.map((kind) => /* @__PURE__ */ jsx(SelectSourceExample, { kind, size, state }, kind)) });
|
|
32
|
+
}
|
|
33
|
+
function DropdownSourceExample({ size = 36, empty = false }) {
|
|
34
|
+
const t = useT();
|
|
35
|
+
const [open, setOpen] = React.useState(false);
|
|
36
|
+
const [value, setValue] = React.useState("basic");
|
|
37
|
+
const [query, setQuery] = React.useState(empty ? "zzzz" : "");
|
|
38
|
+
const [workspaceCount, setWorkspaceCount] = React.useState(0);
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col items-start gap-3", children: [
|
|
40
|
+
/* @__PURE__ */ jsxs(Dropdown, { open, onOpenChange: setOpen, children: [
|
|
41
|
+
/* @__PURE__ */ jsx(DropdownTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "outline", children: t("design_system.gallery.samples.menu.openDropdown") }) }),
|
|
42
|
+
/* @__PURE__ */ jsxs(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") }, children: [
|
|
43
|
+
/* @__PURE__ */ jsx(DropdownInput, { value: query, onValueChange: setQuery, "aria-label": t("design_system.gallery.samples.menu.search"), placeholder: t("design_system.gallery.samples.menu.search") }),
|
|
44
|
+
/* @__PURE__ */ jsxs(DropdownList, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx(DropdownEmpty, { children: t("design_system.gallery.samples.menu.noResults") }),
|
|
46
|
+
selectKinds.map((kind) => {
|
|
47
|
+
const label = t(`design_system.gallery.samples.menu.${kind}.0`);
|
|
48
|
+
return /* @__PURE__ */ jsx(
|
|
49
|
+
DropdownItem,
|
|
50
|
+
{
|
|
51
|
+
value: label,
|
|
52
|
+
size,
|
|
53
|
+
checked: value === kind,
|
|
54
|
+
leading: /* @__PURE__ */ jsx(MenuVisual, { kind, large: size === 56 }),
|
|
55
|
+
description: size === 56 ? t("design_system.gallery.samples.menu.description") : void 0,
|
|
56
|
+
sublabel: kind === "basic" ? t("design_system.gallery.samples.menu.sublabel") : void 0,
|
|
57
|
+
badge: kind === "brand" ? /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", size: 20, children: t("design_system.gallery.samples.menu.new") }) : void 0,
|
|
58
|
+
shortcut: kind === "company" ? /* @__PURE__ */ jsx(Kbd, { children: "\u23181" }) : void 0,
|
|
59
|
+
onSelect: () => {
|
|
60
|
+
setValue(kind);
|
|
61
|
+
setOpen(false);
|
|
62
|
+
},
|
|
63
|
+
children: label
|
|
64
|
+
},
|
|
65
|
+
kind
|
|
66
|
+
);
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ jsx(DropdownItem, { value: t("design_system.gallery.samples.menu.unavailable"), size, disabled: true, leading: /* @__PURE__ */ jsx(MenuVisual, { kind: "basic", large: size === 56 }), children: t("design_system.gallery.samples.menu.unavailable") })
|
|
69
|
+
] }),
|
|
70
|
+
/* @__PURE__ */ jsx(DropdownFooter, { children: /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", className: "w-full", onClick: () => {
|
|
71
|
+
setWorkspaceCount((count) => count + 1);
|
|
72
|
+
setOpen(false);
|
|
73
|
+
}, children: [
|
|
74
|
+
/* @__PURE__ */ jsx(Plus, { className: "size-5" }),
|
|
75
|
+
t("design_system.gallery.samples.menu.addWorkspace")
|
|
76
|
+
] }) }),
|
|
77
|
+
/* @__PURE__ */ jsx(DropdownCaption, { children: t("design_system.gallery.samples.menu.localCaption") })
|
|
78
|
+
] })
|
|
79
|
+
] }),
|
|
80
|
+
/* @__PURE__ */ jsx("output", { "aria-live": "polite", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.menu.selected", { value: t(`design_system.gallery.samples.menu.${value}.0`) }) }),
|
|
81
|
+
workspaceCount > 0 && /* @__PURE__ */ jsx("output", { "aria-live": "polite", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.menu.created", { count: workspaceCount }) })
|
|
82
|
+
] });
|
|
83
|
+
}
|
|
84
|
+
function CommandSourceRows({ size, onSelect }) {
|
|
85
|
+
const t = useT();
|
|
86
|
+
return /* @__PURE__ */ jsx(Fragment, { children: commandKinds.map((kind) => {
|
|
87
|
+
const label = t(`design_system.gallery.samples.menu.${kind}.0`);
|
|
88
|
+
return /* @__PURE__ */ jsx(
|
|
89
|
+
CommandMenuItem,
|
|
90
|
+
{
|
|
91
|
+
value: label,
|
|
92
|
+
size,
|
|
93
|
+
leading: kind === "basic" ? void 0 : /* @__PURE__ */ jsx(MenuVisual, { kind, large: size === 64 }),
|
|
94
|
+
description: size === 64 ? t("design_system.gallery.samples.menu.description") : void 0,
|
|
95
|
+
sublabel: kind === "basic" ? t("design_system.gallery.samples.menu.sublabel") : void 0,
|
|
96
|
+
badge: kind === "brand" ? /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", size: 20, children: t("design_system.gallery.samples.menu.new") }) : void 0,
|
|
97
|
+
shortcut: kind === "company" ? /* @__PURE__ */ jsx(Kbd, { children: "\u2318K" }) : void 0,
|
|
98
|
+
onSelect: () => onSelect(label),
|
|
99
|
+
children: label
|
|
100
|
+
},
|
|
101
|
+
kind
|
|
102
|
+
);
|
|
103
|
+
}) });
|
|
104
|
+
}
|
|
105
|
+
function CommandSourceExample({ size = 40, empty = false, withGroups = false }) {
|
|
106
|
+
const t = useT();
|
|
107
|
+
const [open, setOpen] = React.useState(false);
|
|
108
|
+
const [query, setQuery] = React.useState(empty ? "zzzz" : "");
|
|
109
|
+
const [result, setResult] = React.useState("");
|
|
110
|
+
const onSelect = (label) => {
|
|
111
|
+
setResult(label);
|
|
112
|
+
setOpen(false);
|
|
113
|
+
};
|
|
114
|
+
const rows = /* @__PURE__ */ jsx(CommandSourceRows, { size, onSelect });
|
|
115
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-3", children: [
|
|
116
|
+
/* @__PURE__ */ jsxs(CommandMenu, { open, onOpenChange: setOpen, children: [
|
|
117
|
+
/* @__PURE__ */ jsx(CommandMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "outline", children: t("design_system.gallery.samples.menu.openCommand") }) }),
|
|
118
|
+
/* @__PURE__ */ jsxs(CommandMenuContent, { title: t("design_system.gallery.samples.menu.openCommand"), commandProps: { loop: true }, children: [
|
|
119
|
+
/* @__PURE__ */ jsx(
|
|
120
|
+
CommandMenuInput,
|
|
121
|
+
{
|
|
122
|
+
appearance: "source",
|
|
123
|
+
value: query,
|
|
124
|
+
onValueChange: setQuery,
|
|
125
|
+
"aria-label": t("design_system.gallery.samples.menu.search"),
|
|
126
|
+
placeholder: t("design_system.gallery.samples.menu.search"),
|
|
127
|
+
trailing: /* @__PURE__ */ jsx(SimpleTooltip, { content: t("design_system.gallery.samples.menu.hint"), children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "2xs", "aria-label": t("design_system.gallery.samples.menu.help"), children: /* @__PURE__ */ jsx(Info, { className: "size-5" }) }) })
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
/* @__PURE__ */ jsxs(CommandMenuList, { children: [
|
|
131
|
+
/* @__PURE__ */ jsx(CommandMenuEmpty, { children: t("design_system.gallery.samples.menu.noResults") }),
|
|
132
|
+
withGroups ? /* @__PURE__ */ jsx(CommandMenuGroup, { heading: t("design_system.gallery.samples.menu.caption"), actionLabel: t("design_system.gallery.samples.menu.seeAll"), onAction: () => setQuery(""), children: rows }) : rows,
|
|
133
|
+
withGroups && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
134
|
+
/* @__PURE__ */ jsx(CommandMenuSeparator, {}),
|
|
135
|
+
/* @__PURE__ */ jsx(CommandMenuGroup, { heading: t("design_system.gallery.samples.menu.unavailable"), children: /* @__PURE__ */ jsx(CommandMenuItem, { value: "unavailable", disabled: true, size, children: t("design_system.gallery.samples.menu.unavailable") }) })
|
|
136
|
+
] })
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsx(CommandMenuFooter, { className: "min-h-12 flex-wrap px-5 py-3.5", helpSlot: /* @__PURE__ */ jsx(Button, { variant: "link", size: "2xs", onClick: () => setResult(t("design_system.gallery.samples.menu.hint")), children: t("design_system.gallery.samples.menu.help") }) })
|
|
139
|
+
] })
|
|
140
|
+
] }),
|
|
141
|
+
result && /* @__PURE__ */ jsx("output", { "aria-live": "polite", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.menu.selected", { value: result }) })
|
|
142
|
+
] });
|
|
143
|
+
}
|
|
144
|
+
export {
|
|
145
|
+
CommandSourceExample,
|
|
146
|
+
DropdownSourceExample,
|
|
147
|
+
SelectSourceExample,
|
|
148
|
+
SelectSourceMatrix
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=menus.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/menus.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { Info, Plus } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Kbd } from '@open-mercato/ui/primitives/kbd'\nimport { FormField } from '@open-mercato/ui/primitives/form-field'\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectTriggerLeading, SelectValue } from '@open-mercato/ui/primitives/select'\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownInput, DropdownList, DropdownEmpty, DropdownItem, DropdownFooter, DropdownCaption } from '@open-mercato/ui/primitives/dropdown'\nimport { CommandMenu, CommandMenuTrigger, CommandMenuContent, CommandMenuInput, CommandMenuList, CommandMenuEmpty, CommandMenuItem, CommandMenuGroup, CommandMenuSeparator, CommandMenuFooter } from '@open-mercato/ui/primitives/command-menu'\nimport { MenuVisual, useMenuChoices, selectKinds, commandKinds, type MenuKind } from './menu-fixtures'\n\nexport function SelectSourceExample({ kind, size = 36, state = 'filled' }: {\n kind: MenuKind\n size?: 32 | 36 | 40\n state?: 'default' | 'filled' | 'disabled' | 'error'\n}) {\n const t = useT()\n const choices = useMenuChoices(kind)\n const [value, setValue] = React.useState(state === 'default' || state === 'error' ? '' : choices[0].value)\n const selected = choices.find((choice) => choice.value === value)\n const disabled = state === 'disabled'\n const label = t(`design_system.gallery.samples.menu.kind.${kind}`)\n const providerPadding = kind !== 'provider' ? undefined : size === 40 ? 'p-2' : size === 36 ? 'p-1.5' : 'p-1'\n return (\n <Select value={value} onValueChange={setValue} disabled={disabled}>\n <FormField label={label} disabled={disabled} description={t('design_system.gallery.samples.menu.hint')} error={state === 'error' ? t('design_system.gallery.samples.menu.required') : undefined}>\n <SelectTrigger size={size} className={providerPadding}>\n {kind !== 'basic' && <SelectTriggerLeading><MenuVisual kind={kind} alternative={selected?.alternative} providerSize=\"select\" /></SelectTriggerLeading>}\n <SelectValue className=\"min-w-0 flex-1 text-left\" placeholder={t('design_system.gallery.samples.menu.placeholder')} />\n </SelectTrigger>\n </FormField>\n <SelectContent>\n {choices.map((choice) => <SelectItem key={choice.value} value={choice.value} disabled={choice.disabled} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} alternative={choice.alternative} />}>\n {choice.label}\n </SelectItem>)}\n </SelectContent>\n </Select>\n )\n}\n\nexport function SelectSourceMatrix({ size = 36, state = 'filled' }: { size?: 32 | 36 | 40; state?: 'default' | 'filled' | 'disabled' | 'error' }) {\n 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>\n}\n\nexport function DropdownSourceExample({ size = 36, empty = false }: { size?: 36 | 56; empty?: boolean }) {\n const t = useT()\n const [open, setOpen] = React.useState(false)\n const [value, setValue] = React.useState('basic')\n const [query, setQuery] = React.useState(empty ? 'zzzz' : '')\n const [workspaceCount, setWorkspaceCount] = React.useState(0)\n return (\n <div className=\"flex w-full flex-col items-start gap-3\">\n <Dropdown open={open} onOpenChange={setOpen}>\n <DropdownTrigger asChild><Button variant=\"outline\">{t('design_system.gallery.samples.menu.openDropdown')}</Button></DropdownTrigger>\n <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') }}>\n <DropdownInput value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')} />\n <DropdownList>\n <DropdownEmpty>{t('design_system.gallery.samples.menu.noResults')}</DropdownEmpty>\n {selectKinds.map((kind) => {\n const label = t(`design_system.gallery.samples.menu.${kind}.0`)\n return <DropdownItem key={kind} value={label} size={size} checked={value === kind} leading={<MenuVisual kind={kind} large={size === 56} />}\n description={size === 56 ? t('design_system.gallery.samples.menu.description') : undefined}\n sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}\n badge={kind === 'brand' ? <Badge appearance=\"lighter\" tone=\"info\" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}\n shortcut={kind === 'company' ? <Kbd>\u23181</Kbd> : undefined}\n onSelect={() => { setValue(kind); setOpen(false) }}>\n {label}\n </DropdownItem>\n })}\n <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>\n </DropdownList>\n <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>\n <DropdownCaption>{t('design_system.gallery.samples.menu.localCaption')}</DropdownCaption>\n </DropdownContent>\n </Dropdown>\n <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>\n {workspaceCount > 0 && <output aria-live=\"polite\" className=\"text-sm text-muted-foreground\">{t('design_system.gallery.samples.menu.created', { count: workspaceCount })}</output>}\n </div>\n )\n}\n\nfunction CommandSourceRows({ size, onSelect }: { size: 40 | 64; onSelect: (value: string) => void }) {\n const t = useT()\n return <>{commandKinds.map((kind) => {\n const label = t(`design_system.gallery.samples.menu.${kind}.0`)\n return <CommandMenuItem key={kind} value={label} size={size} leading={kind === 'basic' ? undefined : <MenuVisual kind={kind} large={size === 64} />}\n description={size === 64 ? t('design_system.gallery.samples.menu.description') : undefined}\n sublabel={kind === 'basic' ? t('design_system.gallery.samples.menu.sublabel') : undefined}\n badge={kind === 'brand' ? <Badge appearance=\"lighter\" tone=\"info\" size={20}>{t('design_system.gallery.samples.menu.new')}</Badge> : undefined}\n shortcut={kind === 'company' ? <Kbd>\u2318K</Kbd> : undefined}\n onSelect={() => onSelect(label)}>{label}</CommandMenuItem>\n })}</>\n}\n\nexport function CommandSourceExample({ size = 40, empty = false, withGroups = false }: { size?: 40 | 64; empty?: boolean; withGroups?: boolean }) {\n const t = useT()\n const [open, setOpen] = React.useState(false)\n const [query, setQuery] = React.useState(empty ? 'zzzz' : '')\n const [result, setResult] = React.useState('')\n const onSelect = (label: string) => { setResult(label); setOpen(false) }\n const rows = <CommandSourceRows size={size} onSelect={onSelect} />\n return (\n <div className=\"flex flex-col items-start gap-3\">\n <CommandMenu open={open} onOpenChange={setOpen}>\n <CommandMenuTrigger asChild><Button variant=\"outline\">{t('design_system.gallery.samples.menu.openCommand')}</Button></CommandMenuTrigger>\n <CommandMenuContent title={t('design_system.gallery.samples.menu.openCommand')} commandProps={{ loop: true }}>\n <CommandMenuInput appearance=\"source\" value={query} onValueChange={setQuery} aria-label={t('design_system.gallery.samples.menu.search')} placeholder={t('design_system.gallery.samples.menu.search')}\n 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>} />\n <CommandMenuList>\n <CommandMenuEmpty>{t('design_system.gallery.samples.menu.noResults')}</CommandMenuEmpty>\n {withGroups ? <CommandMenuGroup heading={t('design_system.gallery.samples.menu.caption')} actionLabel={t('design_system.gallery.samples.menu.seeAll')} onAction={() => setQuery('')}>{rows}</CommandMenuGroup> : rows}\n {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></>}\n </CommandMenuList>\n <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>} />\n </CommandMenuContent>\n </CommandMenu>\n {result && <output aria-live=\"polite\" className=\"text-sm text-muted-foreground\">{t('design_system.gallery.samples.menu.selected', { value: result })}</output>}\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "@open-mercato/shared/lib/utils";
|
|
4
|
+
import { useLocale, useT } from "@open-mercato/shared/lib/i18n/context";
|
|
5
|
+
import { Rating } from "@open-mercato/ui/primitives/rating";
|
|
6
|
+
import { LinkButton } from "@open-mercato/ui/primitives/link-button";
|
|
7
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
8
|
+
import { ScrollArea } from "@open-mercato/ui/primitives/scroll-area";
|
|
9
|
+
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@open-mercato/ui/primitives/dialog";
|
|
10
|
+
function RatingCellDemo({ icon, initialValue = 0, max = 1, disabled = false }) {
|
|
11
|
+
const t = useT();
|
|
12
|
+
const [value, setValue] = React.useState(initialValue);
|
|
13
|
+
return /* @__PURE__ */ jsx(Rating, { value, onChange: setValue, max, icon, appearance: "cell", disabled, "aria-label": t("design_system.gallery.samples.rating.label") });
|
|
14
|
+
}
|
|
15
|
+
function RatingReviewDemo({ icon, alignment }) {
|
|
16
|
+
const t = useT();
|
|
17
|
+
const locale = useLocale();
|
|
18
|
+
const [open, setOpen] = React.useState(false);
|
|
19
|
+
const value = new Intl.NumberFormat(locale).format(4.5);
|
|
20
|
+
const count = new Intl.NumberFormat(locale, { notation: "compact", maximumFractionDigits: 1 }).format(5200);
|
|
21
|
+
const summary = t("design_system.gallery.samples.rating.summary", "{value} \u2219 {count} Ratings", { value, count });
|
|
22
|
+
const reviews = t("design_system.gallery.samples.rating.reviews", "{count} reviews", { count: 18 });
|
|
23
|
+
return /* @__PURE__ */ jsxs(Dialog, { open, onOpenChange: setOpen, children: [
|
|
24
|
+
/* @__PURE__ */ jsxs("div", { "data-slot": "rating-review", "data-alignment": alignment, className: cn("inline-flex max-w-full items-start gap-2", alignment === "vertical" ? "flex-col" : "flex-wrap"), children: [
|
|
25
|
+
/* @__PURE__ */ jsx(Rating, { value: 4.5, allowHalf: true, icon }),
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-start gap-1 text-sm leading-5", children: [
|
|
27
|
+
/* @__PURE__ */ jsx("span", { children: summary }),
|
|
28
|
+
/* @__PURE__ */ jsx(LinkButton, { asChild: true, variant: "gray", underline: "always", children: /* @__PURE__ */ jsx(DialogTrigger, { children: reviews }) })
|
|
29
|
+
] })
|
|
30
|
+
] }),
|
|
31
|
+
/* @__PURE__ */ jsxs(DialogContent, { onKeyDownCapture: (event) => {
|
|
32
|
+
if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
|
|
33
|
+
event.preventDefault();
|
|
34
|
+
setOpen(false);
|
|
35
|
+
}
|
|
36
|
+
}, children: [
|
|
37
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
38
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: reviews }),
|
|
39
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: summary })
|
|
40
|
+
] }),
|
|
41
|
+
/* @__PURE__ */ jsx(ScrollArea, { className: "h-72", scrollbarSize: "md", children: /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-3 pr-6", children: Array.from({ length: 18 }, (_, index) => /* @__PURE__ */ jsxs("li", { className: "flex items-center justify-between gap-3 text-sm", children: [
|
|
42
|
+
/* @__PURE__ */ jsx("span", { children: t("design_system.gallery.samples.rating.reviewNumber", "Review {number}", { number: index + 1 }) }),
|
|
43
|
+
/* @__PURE__ */ jsx(Rating, { value: index < 9 ? 5 : 4, icon })
|
|
44
|
+
] }, index)) }) }),
|
|
45
|
+
/* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ jsx(DialogClose, { children: t("common.close") }) }) })
|
|
46
|
+
] })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
RatingCellDemo,
|
|
51
|
+
RatingReviewDemo
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=rating-reviews.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/rating-reviews.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { cn } from '@open-mercato/shared/lib/utils'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Rating } from '@open-mercato/ui/primitives/rating'\nimport { LinkButton } from '@open-mercato/ui/primitives/link-button'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'\nimport { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@open-mercato/ui/primitives/dialog'\n\nexport function RatingCellDemo({ icon, initialValue = 0, max = 1, disabled = false }: { icon: 'star' | 'heart'; initialValue?: number; max?: number; disabled?: boolean }) {\n const t = useT()\n const [value, setValue] = React.useState(initialValue)\n return <Rating value={value} onChange={setValue} max={max} icon={icon} appearance=\"cell\" disabled={disabled} aria-label={t('design_system.gallery.samples.rating.label')} />\n}\n\nexport function RatingReviewDemo({ icon, alignment }: { icon: 'star' | 'heart'; alignment: 'vertical' | 'horizontal' }) {\n const t = useT()\n const locale = useLocale()\n const [open, setOpen] = React.useState(false)\n const value = new Intl.NumberFormat(locale).format(4.5)\n const count = new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(5200)\n const summary = t('design_system.gallery.samples.rating.summary', '{value} \u2219 {count} Ratings', { value, count })\n const reviews = t('design_system.gallery.samples.rating.reviews', '{count} reviews', { count: 18 })\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <div data-slot=\"rating-review\" data-alignment={alignment} className={cn('inline-flex max-w-full items-start gap-2', alignment === 'vertical' ? 'flex-col' : 'flex-wrap')}>\n <Rating value={4.5} allowHalf icon={icon} />\n <div className=\"flex flex-wrap items-start gap-1 text-sm leading-5\">\n <span>{summary}</span>\n <LinkButton asChild variant=\"gray\" underline=\"always\"><DialogTrigger>{reviews}</DialogTrigger></LinkButton>\n </div>\n </div>\n <DialogContent onKeyDownCapture={event => { if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) { event.preventDefault(); setOpen(false) } }}>\n <DialogHeader><DialogTitle>{reviews}</DialogTitle><DialogDescription>{summary}</DialogDescription></DialogHeader>\n <ScrollArea className=\"h-72\" scrollbarSize=\"md\">\n <ol className=\"flex flex-col gap-3 pr-6\">\n {Array.from({ length: 18 }, (_, index) => <li key={index} className=\"flex items-center justify-between gap-3 text-sm\"><span>{t('design_system.gallery.samples.rating.reviewNumber', 'Review {number}', { number: index + 1 })}</span><Rating value={index < 9 ? 5 : 4} icon={icon} /></li>)}\n </ol>\n </ScrollArea>\n <DialogFooter><Button asChild variant=\"outline\"><DialogClose>{t('common.close')}</DialogClose></Button></DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAYS,cAeD,YAfC;AAZT,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,WAAW,YAAY;AAChC,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,QAAQ,aAAa,eAAe,mBAAmB,cAAc,cAAc,aAAa,qBAAqB;AAEvH,SAAS,eAAe,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,MAAM,GAAwF;AACzK,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,YAAY;AACrD,SAAO,oBAAC,UAAO,OAAc,UAAU,UAAU,KAAU,MAAY,YAAW,QAAO,UAAoB,cAAY,EAAE,4CAA4C,GAAG;AAC5K;AAEO,SAAS,iBAAiB,EAAE,MAAM,UAAU,GAAqE;AACtH,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,QAAQ,IAAI,KAAK,aAAa,MAAM,EAAE,OAAO,GAAG;AACtD,QAAM,QAAQ,IAAI,KAAK,aAAa,QAAQ,EAAE,UAAU,WAAW,uBAAuB,EAAE,CAAC,EAAE,OAAO,IAAI;AAC1G,QAAM,UAAU,EAAE,gDAAgD,kCAA6B,EAAE,OAAO,MAAM,CAAC;AAC/G,QAAM,UAAU,EAAE,gDAAgD,mBAAmB,EAAE,OAAO,GAAG,CAAC;AAClG,SACE,qBAAC,UAAO,MAAY,cAAc,SAChC;AAAA,yBAAC,SAAI,aAAU,iBAAgB,kBAAgB,WAAW,WAAW,GAAG,4CAA4C,cAAc,aAAa,aAAa,WAAW,GACrK;AAAA,0BAAC,UAAO,OAAO,KAAK,WAAS,MAAC,MAAY;AAAA,MAC1C,qBAAC,SAAI,WAAU,sDACb;AAAA,4BAAC,UAAM,mBAAQ;AAAA,QACf,oBAAC,cAAW,SAAO,MAAC,SAAQ,QAAO,WAAU,UAAS,8BAAC,iBAAe,mBAAQ,GAAgB;AAAA,SAChG;AAAA,OACF;AAAA,IACA,qBAAC,iBAAc,kBAAkB,WAAS;AAAE,UAAI,MAAM,QAAQ,YAAY,MAAM,WAAW,MAAM,UAAU;AAAE,cAAM,eAAe;AAAG,gBAAQ,KAAK;AAAA,MAAE;AAAA,IAAE,GACpJ;AAAA,2BAAC,gBAAa;AAAA,4BAAC,eAAa,mBAAQ;AAAA,QAAc,oBAAC,qBAAmB,mBAAQ;AAAA,SAAoB;AAAA,MAClG,oBAAC,cAAW,WAAU,QAAO,eAAc,MACzC,8BAAC,QAAG,WAAU,4BACX,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,UAAU,qBAAC,QAAe,WAAU,mDAAkD;AAAA,4BAAC,UAAM,YAAE,qDAAqD,mBAAmB,EAAE,QAAQ,QAAQ,EAAE,CAAC,GAAE;AAAA,QAAO,oBAAC,UAAO,OAAO,QAAQ,IAAI,IAAI,GAAG,MAAY;AAAA,WAAhO,KAAkO,CAAK,GAC5R,GACF;AAAA,MACA,oBAAC,gBAAa,8BAAC,UAAO,SAAO,MAAC,SAAQ,WAAU,8BAAC,eAAa,YAAE,cAAc,GAAE,GAAc,GAAS;AAAA,OACzG;AAAA,KACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
4
|
+
import { LUCIDE_ICON_REGISTRY } from "@open-mercato/ui/backend/icons/lucideRegistry";
|
|
5
|
+
import { SearchInput } from "@open-mercato/ui/primitives/search-input";
|
|
6
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
7
|
+
import { Pagination } from "@open-mercato/ui/primitives/pagination";
|
|
8
|
+
import { EmptyState } from "@open-mercato/ui/primitives/empty-state";
|
|
9
|
+
import { Popover, PopoverClose, PopoverContent, PopoverTrigger } from "@open-mercato/ui/primitives/popover";
|
|
10
|
+
import { flash } from "@open-mercato/ui/backend/FlashMessages";
|
|
11
|
+
function pascalCase(registryName) {
|
|
12
|
+
return registryName.split(/[-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
13
|
+
}
|
|
14
|
+
function IconTile({ name }) {
|
|
15
|
+
const t = useT();
|
|
16
|
+
const Icon = LUCIDE_ICON_REGISTRY[name];
|
|
17
|
+
const jsxSnippet = `<${pascalCase(name)} aria-hidden className="size-4" />`;
|
|
18
|
+
const copy = React.useCallback(async (payload) => {
|
|
19
|
+
try {
|
|
20
|
+
await navigator.clipboard.writeText(payload);
|
|
21
|
+
flash(t("design_system.gallery.iconCopied", "Copied: {snippet}", { snippet: payload }), "success");
|
|
22
|
+
} catch {
|
|
23
|
+
flash(t("design_system.gallery.copyFailed", "Could not copy the snippet"), "error");
|
|
24
|
+
}
|
|
25
|
+
}, [t]);
|
|
26
|
+
return /* @__PURE__ */ jsxs(Popover, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
28
|
+
Button,
|
|
29
|
+
{
|
|
30
|
+
type: "button",
|
|
31
|
+
variant: "ghost",
|
|
32
|
+
className: "h-auto min-h-28 min-w-0 flex-col gap-3 whitespace-normal rounded-lg border border-border bg-background p-3",
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Icon, { "aria-hidden": true, className: "size-7 text-foreground", strokeWidth: 1.75 }),
|
|
35
|
+
/* @__PURE__ */ jsx("code", { className: "max-w-full break-words text-xs leading-4 text-muted-foreground", children: name })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
) }),
|
|
39
|
+
/* @__PURE__ */ jsx(PopoverContent, { align: "center", className: "w-auto max-w-xs p-2", children: /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(PopoverClose, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
41
|
+
Button,
|
|
42
|
+
{
|
|
43
|
+
type: "button",
|
|
44
|
+
variant: "ghost",
|
|
45
|
+
onClick: () => copy(name),
|
|
46
|
+
className: "h-auto w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus",
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground", children: t("design_system.gallery.iconCopyMeta", "Copy name for page.meta icon") }),
|
|
49
|
+
/* @__PURE__ */ jsx("code", { className: "text-xs text-muted-foreground", children: name })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
) }),
|
|
53
|
+
/* @__PURE__ */ jsx(PopoverClose, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
54
|
+
Button,
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
variant: "ghost",
|
|
58
|
+
onClick: () => copy(jsxSnippet),
|
|
59
|
+
className: "h-auto w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus",
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground", children: t("design_system.gallery.iconCopyJsx", "Copy JSX (lucide-react)") }),
|
|
62
|
+
/* @__PURE__ */ jsx("code", { className: "max-w-full truncate text-xs text-muted-foreground", children: jsxSnippet })
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
) })
|
|
66
|
+
] }) })
|
|
67
|
+
] });
|
|
68
|
+
}
|
|
69
|
+
function IconGrid({ collectionControl } = {}) {
|
|
70
|
+
const t = useT();
|
|
71
|
+
const [query, setQuery] = React.useState("");
|
|
72
|
+
const names = React.useMemo(() => Object.keys(LUCIDE_ICON_REGISTRY).sort((a, b) => a.localeCompare(b)), []);
|
|
73
|
+
const [page, setPage] = React.useState(1);
|
|
74
|
+
const needle = query.trim().toLowerCase();
|
|
75
|
+
const filtered = needle ? names.filter((name) => name.toLowerCase().includes(needle)) : names;
|
|
76
|
+
const visible = filtered.slice((page - 1) * 48, page * 48);
|
|
77
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
78
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
79
|
+
collectionControl,
|
|
80
|
+
/* @__PURE__ */ jsx("div", { className: "max-w-sm flex-1", children: /* @__PURE__ */ jsx(
|
|
81
|
+
SearchInput,
|
|
82
|
+
{
|
|
83
|
+
value: query,
|
|
84
|
+
onChange: (value) => {
|
|
85
|
+
setQuery(value);
|
|
86
|
+
setPage(1);
|
|
87
|
+
},
|
|
88
|
+
placeholder: t("design_system.gallery.iconSearchPlaceholder", "Filter icons\u2026"),
|
|
89
|
+
"aria-label": t("design_system.gallery.iconSearchPlaceholder", "Filter icons\u2026")
|
|
90
|
+
}
|
|
91
|
+
) }),
|
|
92
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: needle ? t("design_system.gallery.iconCountFiltered", "{visible} of {total} icons", {
|
|
93
|
+
visible: filtered.length,
|
|
94
|
+
total: names.length
|
|
95
|
+
}) : t("design_system.gallery.iconCountAll", "{total} icons", { total: names.length }) })
|
|
96
|
+
] }),
|
|
97
|
+
visible.length ? /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-3 sm:grid-cols-4 lg:grid-cols-6", children: visible.map((name) => /* @__PURE__ */ jsx(IconTile, { name }, name)) }) : /* @__PURE__ */ jsx(EmptyState, { title: t("design_system.gallery.noResults") }),
|
|
98
|
+
filtered.length > 48 ? /* @__PURE__ */ jsx(Pagination, { page, pageSize: 48, total: filtered.length, showPageSize: false, onPageChange: setPage, "aria-label": t("design_system.gallery.sourceIcons.pages") }) : null
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
IconGrid
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=registered-icons.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/registered-icons.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LUCIDE_ICON_REGISTRY } from '@open-mercato/ui/backend/icons/lucideRegistry'\nimport { SearchInput } from '@open-mercato/ui/primitives/search-input'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\nimport { EmptyState } from '@open-mercato/ui/primitives/empty-state'\nimport { Popover, PopoverClose, PopoverContent, PopoverTrigger } from '@open-mercato/ui/primitives/popover'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\n\nfunction pascalCase(registryName: string): string {\n return registryName\n .split(/[-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction IconTile({ name }: { name: string }) {\n const t = useT()\n const Icon = LUCIDE_ICON_REGISTRY[name]\n const jsxSnippet = `<${pascalCase(name)} aria-hidden className=\"size-4\" />`\n\n const copy = React.useCallback(async (payload: string) => {\n try {\n await navigator.clipboard.writeText(payload)\n flash(t('design_system.gallery.iconCopied', 'Copied: {snippet}', { snippet: payload }), 'success')\n } catch {\n flash(t('design_system.gallery.copyFailed', 'Could not copy the snippet'), 'error')\n }\n }, [t])\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-auto min-h-28 min-w-0 flex-col gap-3 whitespace-normal rounded-lg border border-border bg-background p-3\"\n >\n <Icon aria-hidden className=\"size-7 text-foreground\" strokeWidth={1.75} />\n <code className=\"max-w-full break-words text-xs leading-4 text-muted-foreground\">{name}</code>\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"center\" className=\"w-auto max-w-xs p-2\">\n <div className=\"space-y-1\">\n <PopoverClose asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => copy(name)}\n className=\"h-auto w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus\"\n >\n <span className=\"text-xs font-medium text-foreground\">\n {t('design_system.gallery.iconCopyMeta', 'Copy name for page.meta icon')}\n </span>\n <code className=\"text-xs text-muted-foreground\">{name}</code>\n </Button>\n </PopoverClose>\n <PopoverClose asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => copy(jsxSnippet)}\n className=\"h-auto w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus\"\n >\n <span className=\"text-xs font-medium text-foreground\">\n {t('design_system.gallery.iconCopyJsx', 'Copy JSX (lucide-react)')}\n </span>\n <code className=\"max-w-full truncate text-xs text-muted-foreground\">{jsxSnippet}</code>\n </Button>\n </PopoverClose>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\nexport function IconGrid({ collectionControl }: { collectionControl?: React.ReactNode } = {}) {\n const t = useT()\n const [query, setQuery] = React.useState('')\n const names = React.useMemo(() => Object.keys(LUCIDE_ICON_REGISTRY).sort((a, b) => a.localeCompare(b)), [])\n const [page, setPage] = React.useState(1)\n const needle = query.trim().toLowerCase()\n const filtered = needle ? names.filter((name) => name.toLowerCase().includes(needle)) : names\n const visible = filtered.slice((page - 1) * 48, page * 48)\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center gap-3\">\n {collectionControl}\n <div className=\"max-w-sm flex-1\">\n <SearchInput\n value={query}\n onChange={value => { setQuery(value); setPage(1) }}\n placeholder={t('design_system.gallery.iconSearchPlaceholder', 'Filter icons\u2026')}\n aria-label={t('design_system.gallery.iconSearchPlaceholder', 'Filter icons\u2026')}\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {needle\n ? t('design_system.gallery.iconCountFiltered', '{visible} of {total} icons', {\n visible: filtered.length,\n total: names.length,\n })\n : t('design_system.gallery.iconCountAll', '{total} icons', { total: names.length })}\n </p>\n </div>\n {visible.length ? <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4 lg:grid-cols-6\">\n {visible.map((name) => (\n <IconTile key={name} name={name} />\n ))}\n </div> : <EmptyState title={t('design_system.gallery.noResults')} />}\n {filtered.length > 48 ? <Pagination page={page} pageSize={48} total={filtered.length} showPageSize={false} onPageChange={setPage} aria-label={t('design_system.gallery.sourceIcons.pages')} /> : null}\n </div>\n )\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Settings } from "lucide-react";
|
|
4
|
+
import { cn } from "@open-mercato/shared/lib/utils";
|
|
5
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
6
|
+
import { Avatar } from "@open-mercato/ui/primitives/avatar";
|
|
7
|
+
import { Badge } from "@open-mercato/ui/primitives/badge";
|
|
8
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
9
|
+
import { CheckboxField } from "@open-mercato/ui/primitives/checkbox-field";
|
|
10
|
+
import { RadioGroup } from "@open-mercato/ui/primitives/radio";
|
|
11
|
+
import { RadioField } from "@open-mercato/ui/primitives/radio-field";
|
|
12
|
+
import { Switch } from "@open-mercato/ui/primitives/switch";
|
|
13
|
+
import { SwitchField } from "@open-mercato/ui/primitives/switch-field";
|
|
14
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@open-mercato/ui/primitives/dialog";
|
|
15
|
+
import avatar from "../assets/avatar-photo.png";
|
|
16
|
+
import mastercard from "../assets/menu-mastercard.svg";
|
|
17
|
+
import spotify from "../assets/menu-spotify.svg";
|
|
18
|
+
import company from "../assets/menu-apex.svg";
|
|
19
|
+
import { selectionArtwork } from "../assets/selection-artwork.js";
|
|
20
|
+
const imageSource = (asset) => typeof asset === "string" ? asset : asset.src;
|
|
21
|
+
const selectionSourceCardClassName = "relative flex w-90 max-w-full items-start gap-3.5 rounded-selection-card bg-background p-4 ring-1 ring-inset ring-border shadow-xs transition-colors hover:bg-muted hover:shadow-none has-[[data-state=checked]]:ring-accent-indigo has-[[data-state=checked]]:shadow-none has-[:focus-visible]:shadow-focus [&_label]:after:absolute [&_label]:after:inset-0 [&_label]:after:rounded-selection-card [&_button]:relative [&_button]:z-10";
|
|
22
|
+
function SelectionLeading({ kind }) {
|
|
23
|
+
if (kind === "avatar") return /* @__PURE__ */ jsx(Avatar, { label: "James Brown", size: 40, src: imageSource(avatar), "aria-hidden": "true" });
|
|
24
|
+
const source = kind === "icon" ? selectionArtwork.keyIcon : imageSource(kind === "provider" ? mastercard : kind === "brand" ? spotify : company);
|
|
25
|
+
return /* @__PURE__ */ jsx("img", { src: source, alt: "", "aria-hidden": "true", className: kind === "provider" ? "h-6 w-8 shrink-0 object-contain" : "size-10 shrink-0 object-contain" });
|
|
26
|
+
}
|
|
27
|
+
function SourceSelectionCard({ control, kind, state }) {
|
|
28
|
+
const t = useT();
|
|
29
|
+
const disabled = state === "disabled";
|
|
30
|
+
const fields = {
|
|
31
|
+
label: t("design_system.gallery.samples.selection.label"),
|
|
32
|
+
sublabel: t("design_system.gallery.samples.selection.sublabel"),
|
|
33
|
+
description: t("design_system.gallery.samples.selection.description"),
|
|
34
|
+
badge: /* @__PURE__ */ jsx(Badge, { size: 16, appearance: disabled ? "stroke" : "light", tone: disabled ? "neutral" : "info", className: disabled ? "border-border text-text-disabled" : void 0, children: t("design_system.gallery.samples.selection.new") }),
|
|
35
|
+
disabled,
|
|
36
|
+
containerClassName: "min-w-0 flex-1 gap-3.5",
|
|
37
|
+
contentClassName: disabled ? "[&_label]:text-text-disabled [&_label]:opacity-100 [&_p]:text-text-disabled [&_span]:text-text-disabled" : void 0,
|
|
38
|
+
className: cn("mt-0", disabled && control !== "switch" && "disabled:opacity-100 disabled:data-[state=checked]:bg-bg-disabled disabled:data-[state=checked]:border-border-disabled disabled:data-[state=checked]:text-background")
|
|
39
|
+
};
|
|
40
|
+
return /* @__PURE__ */ jsxs("div", { "data-slot": "selection-source-card", "data-kind": kind, "data-disabled": disabled, className: cn(selectionSourceCardClassName, disabled && "shadow-none hover:bg-background has-[[data-state=checked]]:ring-border"), children: [
|
|
41
|
+
/* @__PURE__ */ jsx(SelectionLeading, { kind }),
|
|
42
|
+
control === "radio" ? /* @__PURE__ */ jsx(RadioField, { value: state, flip: true, ...fields }) : control === "switch" ? /* @__PURE__ */ jsx(SwitchField, { defaultChecked: state === "active", ...fields }) : /* @__PURE__ */ jsx(CheckboxField, { defaultChecked: state !== "default", flip: true, ...fields })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
function SelectionSourceCardsDemo({ control, kind }) {
|
|
46
|
+
const t = useT();
|
|
47
|
+
if (control === "radio") return /* @__PURE__ */ jsxs("div", { className: "grid gap-3", children: [
|
|
48
|
+
/* @__PURE__ */ jsxs(RadioGroup, { defaultValue: "active", "aria-label": t("design_system.gallery.samples.selection.preferences"), className: "gap-3", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(SourceSelectionCard, { control, kind, state: "default" }),
|
|
50
|
+
/* @__PURE__ */ jsx(SourceSelectionCard, { control, kind, state: "active" })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ jsx(RadioGroup, { value: "disabled", disabled: true, "aria-label": t("design_system.gallery.samples.selection.preferences"), children: /* @__PURE__ */ jsx(SourceSelectionCard, { control, kind, state: "disabled" }) })
|
|
53
|
+
] });
|
|
54
|
+
return /* @__PURE__ */ jsx("div", { className: "grid gap-3", children: ["default", "active", "disabled"].map((state) => /* @__PURE__ */ jsx(SourceSelectionCard, { control, kind, state }, state)) });
|
|
55
|
+
}
|
|
56
|
+
function IntegrationSwitchDemo({ alignment, appearance }) {
|
|
57
|
+
const t = useT();
|
|
58
|
+
const id = React.useId();
|
|
59
|
+
const [checked, setChecked] = React.useState(false);
|
|
60
|
+
const [open, setOpen] = React.useState(false);
|
|
61
|
+
const horizontal = alignment === "horizontal";
|
|
62
|
+
const card = appearance === "card";
|
|
63
|
+
return /* @__PURE__ */ jsxs(Dialog, { open, onOpenChange: setOpen, children: [
|
|
64
|
+
/* @__PURE__ */ jsxs("div", { "data-slot": "integration-switch", "data-alignment": alignment, "data-appearance": appearance, className: cn("relative flex max-w-full gap-3.5", horizontal ? "w-154 flex-wrap items-center sm:flex-nowrap" : "w-95 flex-col items-start", card && "rounded-selection-card bg-background p-4 ring-1 ring-inset ring-border shadow-xs"), children: [
|
|
65
|
+
/* @__PURE__ */ jsx("img", { src: card ? selectionArtwork.officeCard : selectionArtwork.officeList, alt: "", className: cn("shrink-0", card ? "size-10" : "size-12") }),
|
|
66
|
+
/* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-col gap-1", horizontal && "min-w-40 flex-1"), children: [
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
|
|
68
|
+
/* @__PURE__ */ jsx("span", { id, className: cn("font-medium text-foreground", card ? "text-sm leading-5" : "text-base leading-6"), children: "Microsoft Office 365" }),
|
|
69
|
+
/* @__PURE__ */ jsx(Badge, { size: 16, appearance: "light", tone: "info", children: t("design_system.gallery.samples.selection.new") })
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", card ? "text-xs leading-4" : "text-sm leading-5"), children: t("design_system.gallery.samples.selection.integrationDescription") })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", size: "default", className: horizontal ? void 0 : "w-full", children: /* @__PURE__ */ jsxs(DialogTrigger, { children: [
|
|
74
|
+
/* @__PURE__ */ jsx(Settings, { "aria-hidden": "true" }),
|
|
75
|
+
t("design_system.gallery.samples.selection.integrationManage")
|
|
76
|
+
] }) }),
|
|
77
|
+
/* @__PURE__ */ jsx(Switch, { "aria-labelledby": id, checked, onCheckedChange: setChecked, className: horizontal ? void 0 : card ? "absolute top-5 right-5" : "absolute top-3 right-3" })
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsxs(DialogContent, { onKeyDownCapture: (event) => {
|
|
80
|
+
if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
setOpen(false);
|
|
83
|
+
}
|
|
84
|
+
}, children: [
|
|
85
|
+
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
86
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: t("design_system.gallery.samples.selection.integrationDialog") }),
|
|
87
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: t("design_system.gallery.samples.selection.integrationDescription") })
|
|
88
|
+
] }),
|
|
89
|
+
/* @__PURE__ */ jsx(SwitchField, { label: t("design_system.gallery.samples.selection.integrationEnabled"), checked, onCheckedChange: setChecked }),
|
|
90
|
+
/* @__PURE__ */ jsx(DialogFooter, { children: /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => setOpen(false), children: t("common.close") }) })
|
|
91
|
+
] })
|
|
92
|
+
] });
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
IntegrationSwitchDemo,
|
|
96
|
+
SelectionSourceCardsDemo,
|
|
97
|
+
selectionSourceCardClassName
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=selection-cards.js.map
|