@open-mercato/core 0.7.1-develop.7202.1.a52dc6707c → 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,150 @@
|
|
|
1
|
+
const source = `import * as React from 'react'
|
|
2
|
+
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
|
|
3
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
4
|
+
import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
|
|
5
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
6
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
7
|
+
import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
8
|
+
import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
|
|
9
|
+
import { Progress } from '@open-mercato/ui/primitives/progress'
|
|
10
|
+
import { Rating } from '@open-mercato/ui/primitives/rating'
|
|
11
|
+
import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
|
|
12
|
+
import { Switch } from '@open-mercato/ui/primitives/switch'
|
|
13
|
+
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'
|
|
14
|
+
|
|
15
|
+
const examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']
|
|
16
|
+
|
|
17
|
+
export function TableHeaderExamples() {
|
|
18
|
+
const t = useT()
|
|
19
|
+
const [selected, setSelected] = React.useState(false)
|
|
20
|
+
const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
|
|
21
|
+
const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
|
|
22
|
+
return <div className="w-full space-y-3 overflow-x-auto">
|
|
23
|
+
<Table className="w-[576px] table-fixed">
|
|
24
|
+
<TableCaption className="sr-only">{t('design_system.gallery.samples.table.caption')}</TableCaption>
|
|
25
|
+
<TableHeader><TableRow>
|
|
26
|
+
<TableHead scope="col" aria-sort={order} className="h-9 w-64 bg-muted px-3 py-0">
|
|
27
|
+
<div className="flex items-center gap-2.5">
|
|
28
|
+
<Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />
|
|
29
|
+
<Button size="sm" variant="ghost" className="h-auto gap-0.5 p-0 font-normal" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>
|
|
30
|
+
{t('design_system.gallery.samples.table.component')}<SortIcon className="size-5" aria-hidden="true" />
|
|
31
|
+
</Button>
|
|
32
|
+
</div>
|
|
33
|
+
</TableHead>
|
|
34
|
+
<TableHead scope="col" className="h-9 w-64 bg-muted px-3 py-0">
|
|
35
|
+
<div className="flex items-center gap-2.5">
|
|
36
|
+
<Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />
|
|
37
|
+
<Button disabled size="sm" variant="ghost" className="h-auto gap-0.5 p-0 font-normal">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className="size-5" aria-hidden="true" /></Button>
|
|
38
|
+
</div>
|
|
39
|
+
</TableHead>
|
|
40
|
+
<TableHead scope="col" className="h-9 w-16 bg-muted px-3 py-0"><span className="sr-only">{t('design_system.gallery.samples.table.empty')}</span></TableHead>
|
|
41
|
+
</TableRow></TableHeader>
|
|
42
|
+
<TableBody><TableRow data-state={selected ? 'selected' : undefined}>
|
|
43
|
+
<TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>
|
|
44
|
+
</TableRow></TableBody>
|
|
45
|
+
</Table>
|
|
46
|
+
<p role="status" className="text-sm text-muted-foreground">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>
|
|
47
|
+
</div>
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {
|
|
51
|
+
const t = useT()
|
|
52
|
+
const [selected, setSelected] = React.useState(['Leading'])
|
|
53
|
+
const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
|
|
54
|
+
const [rating, setRating] = React.useState(3)
|
|
55
|
+
const [notice, setNotice] = React.useState('')
|
|
56
|
+
const typeLabel = (type: string) => t(\`design_system.gallery.samples.table.types.\${type}\`, type)
|
|
57
|
+
const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))
|
|
58
|
+
const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
|
|
59
|
+
const label = t('design_system.gallery.samples.table.label')
|
|
60
|
+
function cell(type: string) {
|
|
61
|
+
switch (type) {
|
|
62
|
+
case 'Leading': return <div className="flex items-center gap-3"><Avatar label="Wei Chen" size={rowHeight === 48 ? 32 : 40} /><div className="space-y-0.5"><p className="text-sm font-medium leading-5">Wei Chen</p>{rowHeight === 64 ? <p className="text-xs leading-4 text-muted-foreground">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>
|
|
63
|
+
case 'Regular': return <span>{label}</span>
|
|
64
|
+
case 'Passive': return <span className="text-muted-foreground">{label}</span>
|
|
65
|
+
case 'Empty': return <span className="sr-only">{t('design_system.gallery.samples.table.empty')}</span>
|
|
66
|
+
case 'Button': return <Button size="sm" variant="outline" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>
|
|
67
|
+
case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant="outline" size="icon" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>
|
|
68
|
+
case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />
|
|
69
|
+
case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />
|
|
70
|
+
case 'Progress': return <Progress value={65} className="w-40" aria-label={t('design_system.gallery.examples.navigation.progress')} />
|
|
71
|
+
case 'StatusBadge': return <StatusBadge variant="success" appearance="light" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>
|
|
72
|
+
case 'BadgeGroup': return <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div>
|
|
73
|
+
case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack>
|
|
74
|
+
default: return null
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return <div className="w-full min-w-0 space-y-3">
|
|
78
|
+
<div className="w-full overflow-x-auto rounded-lg border border-border">
|
|
79
|
+
<Table className="min-w-[600px]">
|
|
80
|
+
<TableCaption className="sr-only">{t('design_system.gallery.samples.table.caption')}</TableCaption>
|
|
81
|
+
<TableHeader><TableRow>
|
|
82
|
+
<TableHead className="h-9 w-12 py-1"><span className="sr-only">{t('design_system.gallery.samples.table.selection')}</span></TableHead>
|
|
83
|
+
<TableHead aria-sort={order} className="h-9 py-1"><Button variant="ghost" size="sm" className="h-auto gap-2 p-0" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden="true" className="size-5" /></Button></TableHead>
|
|
84
|
+
<TableHead className="h-9 py-1">{t('design_system.gallery.samples.table.preview')}</TableHead>
|
|
85
|
+
</TableRow></TableHeader>
|
|
86
|
+
<TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
|
|
87
|
+
<TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>
|
|
88
|
+
<TableCell className="font-medium">{typeLabel(type)}</TableCell>
|
|
89
|
+
<TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>
|
|
90
|
+
</TableRow>)}</TableBody>
|
|
91
|
+
</Table>
|
|
92
|
+
</div>
|
|
93
|
+
<p role="status" className="min-h-5 text-sm text-muted-foreground">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>
|
|
94
|
+
</div>
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function tableCellExampleCode(rowHeight: 48 | 64) {
|
|
98
|
+
return \`import * as React from 'react'
|
|
99
|
+
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
|
|
100
|
+
import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
|
|
101
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
102
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
103
|
+
import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
104
|
+
import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
|
|
105
|
+
import { Progress } from '@open-mercato/ui/primitives/progress'
|
|
106
|
+
import { Rating } from '@open-mercato/ui/primitives/rating'
|
|
107
|
+
import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
|
|
108
|
+
import { Switch } from '@open-mercato/ui/primitives/switch'
|
|
109
|
+
import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'
|
|
110
|
+
|
|
111
|
+
function Example() {
|
|
112
|
+
const [rating, setRating] = React.useState(3)
|
|
113
|
+
const [selected, setSelected] = React.useState<string[]>(['Leading'])
|
|
114
|
+
const [action, setAction] = React.useState('')
|
|
115
|
+
const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
|
|
116
|
+
const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
|
|
117
|
+
const cells = [
|
|
118
|
+
{ name: 'Leading', content: <div className="flex items-center gap-3"><Avatar size={\${rowHeight === 48 ? 32 : 40}} label="Wei Chen" /><div><p className="font-medium">Wei Chen</p>\${rowHeight === 64 ? '<p className="text-xs text-muted-foreground">Account manager</p>' : ''}</div></div> },
|
|
119
|
+
{ name: 'Regular', content: <span>Label</span> },
|
|
120
|
+
{ name: 'Passive', content: <span className="text-muted-foreground">Label</span> },
|
|
121
|
+
{ name: 'Empty', content: null },
|
|
122
|
+
{ name: 'Button', content: <Button size="sm" variant="outline" onClick={() => setAction('Opened')}>Open</Button> },
|
|
123
|
+
{ name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label="Related actions"><Button variant="outline" size="icon" aria-label="Previous" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label="Next" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },
|
|
124
|
+
{ name: 'Switch', content: <Switch defaultChecked aria-label="Enabled" /> },
|
|
125
|
+
{ name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label="Rating" /> },
|
|
126
|
+
{ name: 'Progress', content: <Progress value={65} className="w-40" aria-label="Progress" /> },
|
|
127
|
+
{ name: 'StatusBadge', content: <StatusBadge variant="success" appearance="light" dot>Ready</StatusBadge> },
|
|
128
|
+
{ name: 'BadgeGroup', content: <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div> },
|
|
129
|
+
{ name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack> },
|
|
130
|
+
]
|
|
131
|
+
const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))
|
|
132
|
+
return <div className="w-full overflow-x-auto">
|
|
133
|
+
<Table className="min-w-[600px]">
|
|
134
|
+
<TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size="sm" variant="ghost" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>
|
|
135
|
+
<TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
|
|
136
|
+
<TableCell className="\${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}"><Checkbox checked={selected.includes(cell.name)} aria-label={\\\`Select \\\${cell.name}\\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>
|
|
137
|
+
<TableCell className="font-medium">{cell.name}</TableCell>
|
|
138
|
+
<TableCell className="\${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}">{cell.content}</TableCell>
|
|
139
|
+
</TableRow>)}</TableBody>
|
|
140
|
+
</Table>
|
|
141
|
+
<p role="status">{action || selected.length + ' rows selected'}</p>
|
|
142
|
+
</div>
|
|
143
|
+
}\`
|
|
144
|
+
}
|
|
145
|
+
`;
|
|
146
|
+
const tableHeaderExampleCode = source + "\n<TableHeaderExamples />\n";
|
|
147
|
+
export {
|
|
148
|
+
tableHeaderExampleCode
|
|
149
|
+
};
|
|
150
|
+
//# sourceMappingURL=table-cells-code.generated.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/table-cells-code.generated.ts"],
|
|
4
|
+
"sourcesContent": ["// Generated by yarn storybook:generate from table-cells.tsx.\nconst source = \"import * as React from 'react'\\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\\nimport { Progress } from '@open-mercato/ui/primitives/progress'\\nimport { Rating } from '@open-mercato/ui/primitives/rating'\\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\\nimport { Switch } from '@open-mercato/ui/primitives/switch'\\nimport { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'\\n\\nconst examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']\\n\\nexport function TableHeaderExamples() {\\n const t = useT()\\n const [selected, setSelected] = React.useState(false)\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n return <div className=\\\"w-full space-y-3 overflow-x-auto\\\">\\n <Table className=\\\"w-[576px] table-fixed\\\">\\n <TableCaption className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\\n <TableHeader><TableRow>\\n <TableHead scope=\\\"col\\\" aria-sort={order} className=\\\"h-9 w-64 bg-muted px-3 py-0\\\">\\n <div className=\\\"flex items-center gap-2.5\\\">\\n <Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />\\n <Button size=\\\"sm\\\" variant=\\\"ghost\\\" className=\\\"h-auto gap-0.5 p-0 font-normal\\\" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>\\n {t('design_system.gallery.samples.table.component')}<SortIcon className=\\\"size-5\\\" aria-hidden=\\\"true\\\" />\\n </Button>\\n </div>\\n </TableHead>\\n <TableHead scope=\\\"col\\\" className=\\\"h-9 w-64 bg-muted px-3 py-0\\\">\\n <div className=\\\"flex items-center gap-2.5\\\">\\n <Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />\\n <Button disabled size=\\\"sm\\\" variant=\\\"ghost\\\" className=\\\"h-auto gap-0.5 p-0 font-normal\\\">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className=\\\"size-5\\\" aria-hidden=\\\"true\\\" /></Button>\\n </div>\\n </TableHead>\\n <TableHead scope=\\\"col\\\" className=\\\"h-9 w-16 bg-muted px-3 py-0\\\"><span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.empty')}</span></TableHead>\\n </TableRow></TableHeader>\\n <TableBody><TableRow data-state={selected ? 'selected' : undefined}>\\n <TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>\\n </TableRow></TableBody>\\n </Table>\\n <p role=\\\"status\\\" className=\\\"text-sm text-muted-foreground\\\">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>\\n </div>\\n}\\n\\nexport function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {\\n const t = useT()\\n const [selected, setSelected] = React.useState(['Leading'])\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const [rating, setRating] = React.useState(3)\\n const [notice, setNotice] = React.useState('')\\n const typeLabel = (type: string) => t(`design_system.gallery.samples.table.types.${type}`, type)\\n const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n const label = t('design_system.gallery.samples.table.label')\\n function cell(type: string) {\\n switch (type) {\\n case 'Leading': return <div className=\\\"flex items-center gap-3\\\"><Avatar label=\\\"Wei Chen\\\" size={rowHeight === 48 ? 32 : 40} /><div className=\\\"space-y-0.5\\\"><p className=\\\"text-sm font-medium leading-5\\\">Wei Chen</p>{rowHeight === 64 ? <p className=\\\"text-xs leading-4 text-muted-foreground\\\">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>\\n case 'Regular': return <span>{label}</span>\\n case 'Passive': return <span className=\\\"text-muted-foreground\\\">{label}</span>\\n case 'Empty': return <span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.empty')}</span>\\n case 'Button': return <Button size=\\\"sm\\\" variant=\\\"outline\\\" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>\\n case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>\\n case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />\\n case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />\\n case 'Progress': return <Progress value={65} className=\\\"w-40\\\" aria-label={t('design_system.gallery.examples.navigation.progress')} />\\n case 'StatusBadge': return <StatusBadge variant=\\\"success\\\" appearance=\\\"light\\\" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>\\n case 'BadgeGroup': return <div className=\\\"flex gap-1\\\"><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"purple\\\">CRM</Badge><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"sky\\\">ERP</Badge><Badge size={20} appearance=\\\"stroke\\\" tone=\\\"neutral\\\" numeric>+2</Badge></div>\\n case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label=\\\"Wei Chen\\\" /><Avatar size={24} label=\\\"Laura Perez\\\" /><Avatar size={24} label=\\\"Omar Haddad\\\" /><Avatar size={24} label=\\\"James Brown\\\" /></AvatarStack>\\n default: return null\\n }\\n }\\n return <div className=\\\"w-full min-w-0 space-y-3\\\">\\n <div className=\\\"w-full overflow-x-auto rounded-lg border border-border\\\">\\n <Table className=\\\"min-w-[600px]\\\">\\n <TableCaption className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\\n <TableHeader><TableRow>\\n <TableHead className=\\\"h-9 w-12 py-1\\\"><span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.selection')}</span></TableHead>\\n <TableHead aria-sort={order} className=\\\"h-9 py-1\\\"><Button variant=\\\"ghost\\\" size=\\\"sm\\\" className=\\\"h-auto gap-2 p-0\\\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden=\\\"true\\\" className=\\\"size-5\\\" /></Button></TableHead>\\n <TableHead className=\\\"h-9 py-1\\\">{t('design_system.gallery.samples.table.preview')}</TableHead>\\n </TableRow></TableHeader>\\n <TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className=\\\"data-[state=selected]:bg-muted\\\">\\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>\\n <TableCell className=\\\"font-medium\\\">{typeLabel(type)}</TableCell>\\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>\\n </TableRow>)}</TableBody>\\n </Table>\\n </div>\\n <p role=\\\"status\\\" className=\\\"min-h-5 text-sm text-muted-foreground\\\">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>\\n </div>\\n}\\n\\nexport function tableCellExampleCode(rowHeight: 48 | 64) {\\n return `import * as React from 'react'\\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\\nimport { Progress } from '@open-mercato/ui/primitives/progress'\\nimport { Rating } from '@open-mercato/ui/primitives/rating'\\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\\nimport { Switch } from '@open-mercato/ui/primitives/switch'\\nimport { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'\\n\\nfunction Example() {\\n const [rating, setRating] = React.useState(3)\\n const [selected, setSelected] = React.useState<string[]>(['Leading'])\\n const [action, setAction] = React.useState('')\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n const cells = [\\n { name: 'Leading', content: <div className=\\\"flex items-center gap-3\\\"><Avatar size={${rowHeight === 48 ? 32 : 40}} label=\\\"Wei Chen\\\" /><div><p className=\\\"font-medium\\\">Wei Chen</p>${rowHeight === 64 ? '<p className=\\\"text-xs text-muted-foreground\\\">Account manager</p>' : ''}</div></div> },\\n { name: 'Regular', content: <span>Label</span> },\\n { name: 'Passive', content: <span className=\\\"text-muted-foreground\\\">Label</span> },\\n { name: 'Empty', content: null },\\n { name: 'Button', content: <Button size=\\\"sm\\\" variant=\\\"outline\\\" onClick={() => setAction('Opened')}>Open</Button> },\\n { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label=\\\"Related actions\\\"><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label=\\\"Previous\\\" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label=\\\"Next\\\" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },\\n { name: 'Switch', content: <Switch defaultChecked aria-label=\\\"Enabled\\\" /> },\\n { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label=\\\"Rating\\\" /> },\\n { name: 'Progress', content: <Progress value={65} className=\\\"w-40\\\" aria-label=\\\"Progress\\\" /> },\\n { name: 'StatusBadge', content: <StatusBadge variant=\\\"success\\\" appearance=\\\"light\\\" dot>Ready</StatusBadge> },\\n { name: 'BadgeGroup', content: <div className=\\\"flex gap-1\\\"><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"purple\\\">CRM</Badge><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"sky\\\">ERP</Badge><Badge size={20} appearance=\\\"stroke\\\" tone=\\\"neutral\\\" numeric>+2</Badge></div> },\\n { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label=\\\"Wei Chen\\\" /><Avatar size={24} label=\\\"Laura Perez\\\" /><Avatar size={24} label=\\\"Omar Haddad\\\" /><Avatar size={24} label=\\\"James Brown\\\" /></AvatarStack> },\\n ]\\n const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))\\n return <div className=\\\"w-full overflow-x-auto\\\">\\n <Table className=\\\"min-w-[600px]\\\">\\n <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size=\\\"sm\\\" variant=\\\"ghost\\\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>\\n <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className=\\\"data-[state=selected]:bg-muted\\\">\\n <TableCell className=\\\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\\\"><Checkbox checked={selected.includes(cell.name)} aria-label={\\\\`Select \\\\${cell.name}\\\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>\\n <TableCell className=\\\"font-medium\\\">{cell.name}</TableCell>\\n <TableCell className=\\\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\\\">{cell.content}</TableCell>\\n </TableRow>)}</TableBody>\\n </Table>\\n <p role=\\\"status\\\">{action || selected.length + ' rows selected'}</p>\\n </div>\\n}`\\n}\\n\"\nexport const tableHeaderExampleCode = source + \"\\n<TableHeaderExamples />\\n\"\n"],
|
|
5
|
+
"mappings": "AACA,MAAM,SAAS;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;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;AACR,MAAM,yBAAyB,SAAS;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from "lucide-react";
|
|
4
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
5
|
+
import { Avatar, AvatarStack } from "@open-mercato/ui/primitives/avatar";
|
|
6
|
+
import { Badge } from "@open-mercato/ui/primitives/badge";
|
|
7
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
8
|
+
import { ButtonGroup } from "@open-mercato/ui/primitives/button-group";
|
|
9
|
+
import { Checkbox } from "@open-mercato/ui/primitives/checkbox";
|
|
10
|
+
import { Progress } from "@open-mercato/ui/primitives/progress";
|
|
11
|
+
import { Rating } from "@open-mercato/ui/primitives/rating";
|
|
12
|
+
import { StatusBadge } from "@open-mercato/ui/primitives/status-badge";
|
|
13
|
+
import { Switch } from "@open-mercato/ui/primitives/switch";
|
|
14
|
+
import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@open-mercato/ui/primitives/table";
|
|
15
|
+
const examples = ["Leading", "Regular", "Passive", "Empty", "Button", "ButtonGroup", "Switch", "Rating", "Progress", "StatusBadge", "BadgeGroup", "AvatarStack"];
|
|
16
|
+
function TableHeaderExamples() {
|
|
17
|
+
const t = useT();
|
|
18
|
+
const [selected, setSelected] = React.useState(false);
|
|
19
|
+
const [order, setOrder] = React.useState("none");
|
|
20
|
+
const SortIcon = order === "ascending" ? ArrowUp : order === "descending" ? ArrowDown : ArrowUpDown;
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-3 overflow-x-auto", children: [
|
|
22
|
+
/* @__PURE__ */ jsxs(Table, { className: "w-[576px] table-fixed", children: [
|
|
23
|
+
/* @__PURE__ */ jsx(TableCaption, { className: "sr-only", children: t("design_system.gallery.samples.table.caption") }),
|
|
24
|
+
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
25
|
+
/* @__PURE__ */ jsx(TableHead, { scope: "col", "aria-sort": order, className: "h-9 w-64 bg-muted px-3 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
26
|
+
/* @__PURE__ */ jsx(Checkbox, { checked: selected, onCheckedChange: (value) => setSelected(value === true), "aria-label": t("design_system.gallery.samples.table.selection") }),
|
|
27
|
+
/* @__PURE__ */ jsxs(Button, { size: "sm", variant: "ghost", className: "h-auto gap-0.5 p-0 font-normal", onClick: () => setOrder((value) => value === "none" ? "ascending" : value === "ascending" ? "descending" : "none"), children: [
|
|
28
|
+
t("design_system.gallery.samples.table.component"),
|
|
29
|
+
/* @__PURE__ */ jsx(SortIcon, { className: "size-5", "aria-hidden": "true" })
|
|
30
|
+
] })
|
|
31
|
+
] }) }),
|
|
32
|
+
/* @__PURE__ */ jsx(TableHead, { scope: "col", className: "h-9 w-64 bg-muted px-3 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Checkbox, { disabled: true, "aria-label": t("design_system.gallery.samples.table.selection") }),
|
|
34
|
+
/* @__PURE__ */ jsxs(Button, { disabled: true, size: "sm", variant: "ghost", className: "h-auto gap-0.5 p-0 font-normal", children: [
|
|
35
|
+
t("design_system.gallery.samples.table.preview"),
|
|
36
|
+
/* @__PURE__ */ jsx(ArrowUpDown, { className: "size-5", "aria-hidden": "true" })
|
|
37
|
+
] })
|
|
38
|
+
] }) }),
|
|
39
|
+
/* @__PURE__ */ jsx(TableHead, { scope: "col", className: "h-9 w-16 bg-muted px-3 py-0", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.empty") }) })
|
|
40
|
+
] }) }),
|
|
41
|
+
/* @__PURE__ */ jsx(TableBody, { children: /* @__PURE__ */ jsxs(TableRow, { "data-state": selected ? "selected" : void 0, children: [
|
|
42
|
+
/* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.default") }),
|
|
43
|
+
/* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.disabled") }),
|
|
44
|
+
/* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.empty") })
|
|
45
|
+
] }) })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsx("p", { role: "status", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.table.selected", { count: Number(selected) }) })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
function TableCellExamples({ rowHeight }) {
|
|
51
|
+
const t = useT();
|
|
52
|
+
const [selected, setSelected] = React.useState(["Leading"]);
|
|
53
|
+
const [order, setOrder] = React.useState("none");
|
|
54
|
+
const [rating, setRating] = React.useState(3);
|
|
55
|
+
const [notice, setNotice] = React.useState("");
|
|
56
|
+
const typeLabel = (type) => t(`design_system.gallery.samples.table.types.${type}`, type);
|
|
57
|
+
const sorted = order === "none" ? examples : [...examples].sort((a, b) => order === "ascending" ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)));
|
|
58
|
+
const SortIcon = order === "ascending" ? ArrowUp : order === "descending" ? ArrowDown : ArrowUpDown;
|
|
59
|
+
const label = t("design_system.gallery.samples.table.label");
|
|
60
|
+
function cell(type) {
|
|
61
|
+
switch (type) {
|
|
62
|
+
case "Leading":
|
|
63
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
64
|
+
/* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: rowHeight === 48 ? 32 : 40 }),
|
|
65
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
|
|
66
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium leading-5", children: "Wei Chen" }),
|
|
67
|
+
rowHeight === 64 ? /* @__PURE__ */ jsx("p", { className: "text-xs leading-4 text-muted-foreground", children: t("design_system.gallery.samples.table.description") }) : null
|
|
68
|
+
] })
|
|
69
|
+
] });
|
|
70
|
+
case "Regular":
|
|
71
|
+
return /* @__PURE__ */ jsx("span", { children: label });
|
|
72
|
+
case "Passive":
|
|
73
|
+
return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label });
|
|
74
|
+
case "Empty":
|
|
75
|
+
return /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.empty") });
|
|
76
|
+
case "Button":
|
|
77
|
+
return /* @__PURE__ */ jsx(Button, { size: "sm", variant: "outline", onClick: () => setNotice(t("design_system.gallery.samples.table.actionDone")), children: t("design_system.gallery.samples.table.action") });
|
|
78
|
+
case "ButtonGroup":
|
|
79
|
+
return /* @__PURE__ */ jsxs(ButtonGroup, { size: 32, "aria-label": t("design_system.gallery.samples.table.actions"), children: [
|
|
80
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", "aria-label": t("design_system.gallery.examples.navigation.previous"), onClick: () => setNotice(t("design_system.gallery.examples.navigation.previous")), children: /* @__PURE__ */ jsx(ChevronLeft, {}) }),
|
|
81
|
+
/* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", "aria-label": t("design_system.gallery.examples.navigation.next"), onClick: () => setNotice(t("design_system.gallery.examples.navigation.next")), children: /* @__PURE__ */ jsx(ChevronRight, {}) })
|
|
82
|
+
] });
|
|
83
|
+
case "Switch":
|
|
84
|
+
return /* @__PURE__ */ jsx(Switch, { "aria-label": t("design_system.gallery.samples.table.enabled"), defaultChecked: true });
|
|
85
|
+
case "Rating":
|
|
86
|
+
return /* @__PURE__ */ jsx(Rating, { value: rating, onChange: setRating, "aria-label": t("design_system.gallery.samples.rating.label") });
|
|
87
|
+
case "Progress":
|
|
88
|
+
return /* @__PURE__ */ jsx(Progress, { value: 65, className: "w-40", "aria-label": t("design_system.gallery.examples.navigation.progress") });
|
|
89
|
+
case "StatusBadge":
|
|
90
|
+
return /* @__PURE__ */ jsx(StatusBadge, { variant: "success", appearance: "light", dot: true, children: t("design_system.gallery.samples.table.ready") });
|
|
91
|
+
case "BadgeGroup":
|
|
92
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
|
|
93
|
+
/* @__PURE__ */ jsx(Badge, { size: 20, appearance: "lighter", tone: "purple", children: "CRM" }),
|
|
94
|
+
/* @__PURE__ */ jsx(Badge, { size: 20, appearance: "lighter", tone: "sky", children: "ERP" }),
|
|
95
|
+
/* @__PURE__ */ jsx(Badge, { size: 20, appearance: "stroke", tone: "neutral", numeric: true, children: "+2" })
|
|
96
|
+
] });
|
|
97
|
+
case "AvatarStack":
|
|
98
|
+
return /* @__PURE__ */ jsxs(AvatarStack, { max: 3, size: 24, children: [
|
|
99
|
+
/* @__PURE__ */ jsx(Avatar, { size: 24, label: "Wei Chen" }),
|
|
100
|
+
/* @__PURE__ */ jsx(Avatar, { size: 24, label: "Laura Perez" }),
|
|
101
|
+
/* @__PURE__ */ jsx(Avatar, { size: 24, label: "Omar Haddad" }),
|
|
102
|
+
/* @__PURE__ */ jsx(Avatar, { size: 24, label: "James Brown" })
|
|
103
|
+
] });
|
|
104
|
+
default:
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full min-w-0 space-y-3", children: [
|
|
109
|
+
/* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto rounded-lg border border-border", children: /* @__PURE__ */ jsxs(Table, { className: "min-w-[600px]", children: [
|
|
110
|
+
/* @__PURE__ */ jsx(TableCaption, { className: "sr-only", children: t("design_system.gallery.samples.table.caption") }),
|
|
111
|
+
/* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
|
|
112
|
+
/* @__PURE__ */ jsx(TableHead, { className: "h-9 w-12 py-1", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.selection") }) }),
|
|
113
|
+
/* @__PURE__ */ jsx(TableHead, { "aria-sort": order, className: "h-9 py-1", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-auto gap-2 p-0", onClick: () => setOrder((value) => value === "ascending" ? "descending" : "ascending"), children: [
|
|
114
|
+
t("design_system.gallery.samples.table.component"),
|
|
115
|
+
/* @__PURE__ */ jsx(SortIcon, { "aria-hidden": "true", className: "size-5" })
|
|
116
|
+
] }) }),
|
|
117
|
+
/* @__PURE__ */ jsx(TableHead, { className: "h-9 py-1", children: t("design_system.gallery.samples.table.preview") })
|
|
118
|
+
] }) }),
|
|
119
|
+
/* @__PURE__ */ jsx(TableBody, { children: sorted.map((type) => /* @__PURE__ */ jsxs(TableRow, { "data-state": selected.includes(type) ? "selected" : void 0, className: "data-[state=selected]:bg-muted", children: [
|
|
120
|
+
/* @__PURE__ */ jsx(TableCell, { className: rowHeight === 48 ? "h-12 py-0" : "h-16 py-0", children: /* @__PURE__ */ jsx(Checkbox, { checked: selected.includes(type), "aria-label": t("design_system.gallery.samples.table.select", { name: typeLabel(type) }), onCheckedChange: (checked) => setSelected((value) => checked ? [...value, type] : value.filter((item) => item !== type)) }) }),
|
|
121
|
+
/* @__PURE__ */ jsx(TableCell, { className: "font-medium", children: typeLabel(type) }),
|
|
122
|
+
/* @__PURE__ */ jsx(TableCell, { className: rowHeight === 48 ? "h-12 py-0" : "h-16 py-0", children: cell(type) })
|
|
123
|
+
] }, type)) })
|
|
124
|
+
] }) }),
|
|
125
|
+
/* @__PURE__ */ jsx("p", { role: "status", className: "min-h-5 text-sm text-muted-foreground", children: notice || t("design_system.gallery.samples.table.selected", { count: selected.length }) })
|
|
126
|
+
] });
|
|
127
|
+
}
|
|
128
|
+
function tableCellExampleCode(rowHeight) {
|
|
129
|
+
return `import * as React from 'react'
|
|
130
|
+
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
|
|
131
|
+
import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
|
|
132
|
+
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
133
|
+
import { Button } from '@open-mercato/ui/primitives/button'
|
|
134
|
+
import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
|
|
135
|
+
import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
|
|
136
|
+
import { Progress } from '@open-mercato/ui/primitives/progress'
|
|
137
|
+
import { Rating } from '@open-mercato/ui/primitives/rating'
|
|
138
|
+
import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
|
|
139
|
+
import { Switch } from '@open-mercato/ui/primitives/switch'
|
|
140
|
+
import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'
|
|
141
|
+
|
|
142
|
+
function Example() {
|
|
143
|
+
const [rating, setRating] = React.useState(3)
|
|
144
|
+
const [selected, setSelected] = React.useState<string[]>(['Leading'])
|
|
145
|
+
const [action, setAction] = React.useState('')
|
|
146
|
+
const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
|
|
147
|
+
const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
|
|
148
|
+
const cells = [
|
|
149
|
+
{ name: 'Leading', content: <div className="flex items-center gap-3"><Avatar size={${rowHeight === 48 ? 32 : 40}} label="Wei Chen" /><div><p className="font-medium">Wei Chen</p>${rowHeight === 64 ? '<p className="text-xs text-muted-foreground">Account manager</p>' : ""}</div></div> },
|
|
150
|
+
{ name: 'Regular', content: <span>Label</span> },
|
|
151
|
+
{ name: 'Passive', content: <span className="text-muted-foreground">Label</span> },
|
|
152
|
+
{ name: 'Empty', content: null },
|
|
153
|
+
{ name: 'Button', content: <Button size="sm" variant="outline" onClick={() => setAction('Opened')}>Open</Button> },
|
|
154
|
+
{ name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label="Related actions"><Button variant="outline" size="icon" aria-label="Previous" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label="Next" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },
|
|
155
|
+
{ name: 'Switch', content: <Switch defaultChecked aria-label="Enabled" /> },
|
|
156
|
+
{ name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label="Rating" /> },
|
|
157
|
+
{ name: 'Progress', content: <Progress value={65} className="w-40" aria-label="Progress" /> },
|
|
158
|
+
{ name: 'StatusBadge', content: <StatusBadge variant="success" appearance="light" dot>Ready</StatusBadge> },
|
|
159
|
+
{ name: 'BadgeGroup', content: <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div> },
|
|
160
|
+
{ name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack> },
|
|
161
|
+
]
|
|
162
|
+
const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))
|
|
163
|
+
return <div className="w-full overflow-x-auto">
|
|
164
|
+
<Table className="min-w-[600px]">
|
|
165
|
+
<TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size="sm" variant="ghost" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>
|
|
166
|
+
<TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
|
|
167
|
+
<TableCell className="${rowHeight === 48 ? "h-12 py-0" : "h-16 py-0"}"><Checkbox checked={selected.includes(cell.name)} aria-label={\`Select \${cell.name}\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>
|
|
168
|
+
<TableCell className="font-medium">{cell.name}</TableCell>
|
|
169
|
+
<TableCell className="${rowHeight === 48 ? "h-12 py-0" : "h-16 py-0"}">{cell.content}</TableCell>
|
|
170
|
+
</TableRow>)}</TableBody>
|
|
171
|
+
</Table>
|
|
172
|
+
<p role="status">{action || selected.length + ' rows selected'}</p>
|
|
173
|
+
</div>
|
|
174
|
+
}`;
|
|
175
|
+
}
|
|
176
|
+
export {
|
|
177
|
+
TableCellExamples,
|
|
178
|
+
TableHeaderExamples,
|
|
179
|
+
tableCellExampleCode
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=table-cells.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/demos/table-cells.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Progress } from '@open-mercato/ui/primitives/progress'\nimport { Rating } from '@open-mercato/ui/primitives/rating'\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'\n\nconst examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']\n\nexport function TableHeaderExamples() {\n const t = useT()\n const [selected, setSelected] = React.useState(false)\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n return <div className=\"w-full space-y-3 overflow-x-auto\">\n <Table className=\"w-[576px] table-fixed\">\n <TableCaption className=\"sr-only\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\n <TableHeader><TableRow>\n <TableHead scope=\"col\" aria-sort={order} className=\"h-9 w-64 bg-muted px-3 py-0\">\n <div className=\"flex items-center gap-2.5\">\n <Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />\n <Button size=\"sm\" variant=\"ghost\" className=\"h-auto gap-0.5 p-0 font-normal\" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>\n {t('design_system.gallery.samples.table.component')}<SortIcon className=\"size-5\" aria-hidden=\"true\" />\n </Button>\n </div>\n </TableHead>\n <TableHead scope=\"col\" className=\"h-9 w-64 bg-muted px-3 py-0\">\n <div className=\"flex items-center gap-2.5\">\n <Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />\n <Button disabled size=\"sm\" variant=\"ghost\" className=\"h-auto gap-0.5 p-0 font-normal\">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className=\"size-5\" aria-hidden=\"true\" /></Button>\n </div>\n </TableHead>\n <TableHead scope=\"col\" className=\"h-9 w-16 bg-muted px-3 py-0\"><span className=\"sr-only\">{t('design_system.gallery.samples.table.empty')}</span></TableHead>\n </TableRow></TableHeader>\n <TableBody><TableRow data-state={selected ? 'selected' : undefined}>\n <TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>\n </TableRow></TableBody>\n </Table>\n <p role=\"status\" className=\"text-sm text-muted-foreground\">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>\n </div>\n}\n\nexport function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {\n const t = useT()\n const [selected, setSelected] = React.useState(['Leading'])\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const [rating, setRating] = React.useState(3)\n const [notice, setNotice] = React.useState('')\n const typeLabel = (type: string) => t(`design_system.gallery.samples.table.types.${type}`, type)\n const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n const label = t('design_system.gallery.samples.table.label')\n function cell(type: string) {\n switch (type) {\n case 'Leading': return <div className=\"flex items-center gap-3\"><Avatar label=\"Wei Chen\" size={rowHeight === 48 ? 32 : 40} /><div className=\"space-y-0.5\"><p className=\"text-sm font-medium leading-5\">Wei Chen</p>{rowHeight === 64 ? <p className=\"text-xs leading-4 text-muted-foreground\">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>\n case 'Regular': return <span>{label}</span>\n case 'Passive': return <span className=\"text-muted-foreground\">{label}</span>\n case 'Empty': return <span className=\"sr-only\">{t('design_system.gallery.samples.table.empty')}</span>\n case 'Button': return <Button size=\"sm\" variant=\"outline\" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>\n case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant=\"outline\" size=\"icon\" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant=\"outline\" size=\"icon\" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>\n case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />\n case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />\n case 'Progress': return <Progress value={65} className=\"w-40\" aria-label={t('design_system.gallery.examples.navigation.progress')} />\n case 'StatusBadge': return <StatusBadge variant=\"success\" appearance=\"light\" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>\n case 'BadgeGroup': return <div className=\"flex gap-1\"><Badge size={20} appearance=\"lighter\" tone=\"purple\">CRM</Badge><Badge size={20} appearance=\"lighter\" tone=\"sky\">ERP</Badge><Badge size={20} appearance=\"stroke\" tone=\"neutral\" numeric>+2</Badge></div>\n case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label=\"Wei Chen\" /><Avatar size={24} label=\"Laura Perez\" /><Avatar size={24} label=\"Omar Haddad\" /><Avatar size={24} label=\"James Brown\" /></AvatarStack>\n default: return null\n }\n }\n return <div className=\"w-full min-w-0 space-y-3\">\n <div className=\"w-full overflow-x-auto rounded-lg border border-border\">\n <Table className=\"min-w-[600px]\">\n <TableCaption className=\"sr-only\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\n <TableHeader><TableRow>\n <TableHead className=\"h-9 w-12 py-1\"><span className=\"sr-only\">{t('design_system.gallery.samples.table.selection')}</span></TableHead>\n <TableHead aria-sort={order} className=\"h-9 py-1\"><Button variant=\"ghost\" size=\"sm\" className=\"h-auto gap-2 p-0\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden=\"true\" className=\"size-5\" /></Button></TableHead>\n <TableHead className=\"h-9 py-1\">{t('design_system.gallery.samples.table.preview')}</TableHead>\n </TableRow></TableHeader>\n <TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className=\"data-[state=selected]:bg-muted\">\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>\n <TableCell className=\"font-medium\">{typeLabel(type)}</TableCell>\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>\n </TableRow>)}</TableBody>\n </Table>\n </div>\n <p role=\"status\" className=\"min-h-5 text-sm text-muted-foreground\">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>\n </div>\n}\n\nexport function tableCellExampleCode(rowHeight: 48 | 64) {\n return `import * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Progress } from '@open-mercato/ui/primitives/progress'\nimport { Rating } from '@open-mercato/ui/primitives/rating'\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'\n\nfunction Example() {\n const [rating, setRating] = React.useState(3)\n const [selected, setSelected] = React.useState<string[]>(['Leading'])\n const [action, setAction] = React.useState('')\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n const cells = [\n { name: 'Leading', content: <div className=\"flex items-center gap-3\"><Avatar size={${rowHeight === 48 ? 32 : 40}} label=\"Wei Chen\" /><div><p className=\"font-medium\">Wei Chen</p>${rowHeight === 64 ? '<p className=\"text-xs text-muted-foreground\">Account manager</p>' : ''}</div></div> },\n { name: 'Regular', content: <span>Label</span> },\n { name: 'Passive', content: <span className=\"text-muted-foreground\">Label</span> },\n { name: 'Empty', content: null },\n { name: 'Button', content: <Button size=\"sm\" variant=\"outline\" onClick={() => setAction('Opened')}>Open</Button> },\n { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label=\"Related actions\"><Button variant=\"outline\" size=\"icon\" aria-label=\"Previous\" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant=\"outline\" size=\"icon\" aria-label=\"Next\" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },\n { name: 'Switch', content: <Switch defaultChecked aria-label=\"Enabled\" /> },\n { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label=\"Rating\" /> },\n { name: 'Progress', content: <Progress value={65} className=\"w-40\" aria-label=\"Progress\" /> },\n { name: 'StatusBadge', content: <StatusBadge variant=\"success\" appearance=\"light\" dot>Ready</StatusBadge> },\n { name: 'BadgeGroup', content: <div className=\"flex gap-1\"><Badge size={20} appearance=\"lighter\" tone=\"purple\">CRM</Badge><Badge size={20} appearance=\"lighter\" tone=\"sky\">ERP</Badge><Badge size={20} appearance=\"stroke\" tone=\"neutral\" numeric>+2</Badge></div> },\n { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label=\"Wei Chen\" /><Avatar size={24} label=\"Laura Perez\" /><Avatar size={24} label=\"Omar Haddad\" /><Avatar size={24} label=\"James Brown\" /></AvatarStack> },\n ]\n const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))\n return <div className=\"w-full overflow-x-auto\">\n <Table className=\"min-w-[600px]\">\n <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size=\"sm\" variant=\"ghost\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>\n <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className=\"data-[state=selected]:bg-muted\">\n <TableCell className=\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\"><Checkbox checked={selected.includes(cell.name)} aria-label={\\`Select \\${cell.name}\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>\n <TableCell className=\"font-medium\">{cell.name}</TableCell>\n <TableCell className=\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\">{cell.content}</TableCell>\n </TableRow>)}</TableBody>\n </Table>\n <p role=\"status\">{action || selected.length + ' rows selected'}</p>\n </div>\n}`\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Calendar, Globe, Info, Send, Smile, User } from "lucide-react";
|
|
4
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
5
|
+
import { Input } from "@open-mercato/ui/primitives/input";
|
|
6
|
+
import { Textarea } from "@open-mercato/ui/primitives/textarea";
|
|
7
|
+
import { FormField } from "@open-mercato/ui/primitives/form-field";
|
|
8
|
+
import { EmailInput } from "@open-mercato/ui/primitives/email-input";
|
|
9
|
+
import { SearchInput } from "@open-mercato/ui/primitives/search-input";
|
|
10
|
+
import { PasswordInput } from "@open-mercato/ui/primitives/password-input";
|
|
11
|
+
import { WebsiteInput } from "@open-mercato/ui/primitives/website-input";
|
|
12
|
+
import { AmountInput } from "@open-mercato/ui/primitives/amount-input";
|
|
13
|
+
import { CardInput } from "@open-mercato/ui/primitives/card-input";
|
|
14
|
+
import { ButtonInput } from "@open-mercato/ui/primitives/button-input";
|
|
15
|
+
import { CompactButton } from "@open-mercato/ui/primitives/compact-button";
|
|
16
|
+
import { Popover, PopoverContent, PopoverTrigger } from "@open-mercato/ui/primitives/popover";
|
|
17
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@open-mercato/ui/primitives/select";
|
|
18
|
+
import { PhoneNumberField } from "@open-mercato/ui/backend/inputs/PhoneNumberField";
|
|
19
|
+
import unitedStates from "../assets/menu-united-states.svg";
|
|
20
|
+
import europeanUnion from "../assets/input-european-union.svg";
|
|
21
|
+
import poland from "../assets/select-poland.png";
|
|
22
|
+
const inputKinds = ["basic", "email", "phone", "card", "website", "amount", "date", "search", "password", "button", "dropdown", "emoji"];
|
|
23
|
+
function assetSource(asset) {
|
|
24
|
+
return typeof asset === "string" ? asset : asset.src;
|
|
25
|
+
}
|
|
26
|
+
function SourceTextInput({ kind, size = 36, state = "filled" }) {
|
|
27
|
+
const t = useT();
|
|
28
|
+
const id = React.useId();
|
|
29
|
+
const isPlaceholder = state === "placeholder";
|
|
30
|
+
const disabled = state === "disabled";
|
|
31
|
+
const [text, setText] = React.useState(isPlaceholder ? "" : kind === "basic" || kind === "dropdown" ? "Alex Morgan" : kind === "email" ? "alex@example.com" : kind === "website" ? "openmercato.com" : kind === "password" ? "LocalExample2026!" : kind === "emoji" ? "\u{1F642}" : kind === "date" ? "2026-09-18" : t("design_system.gallery.samples.textInput.sample"));
|
|
32
|
+
const [phone, setPhone] = React.useState(isPlaceholder ? void 0 : "+1 212 555 1234");
|
|
33
|
+
const [amount, setAmount] = React.useState({ amount: isPlaceholder ? "" : "1250.00", currency: "EUR" });
|
|
34
|
+
const [card, setCard] = React.useState(isPlaceholder ? "" : "4242424242424242");
|
|
35
|
+
const [permission, setPermission] = React.useState("view");
|
|
36
|
+
const [emojiOpen, setEmojiOpen] = React.useState(false);
|
|
37
|
+
const [feedback, setFeedback] = React.useState("");
|
|
38
|
+
const dateRef = React.useRef(null);
|
|
39
|
+
const label = t(`design_system.gallery.samples.textInput.${kind}`);
|
|
40
|
+
const error = state === "error" ? t("design_system.gallery.samples.textInput.error") : void 0;
|
|
41
|
+
const hint = t("design_system.gallery.samples.textInput.hint");
|
|
42
|
+
const common = { id, size, disabled, "aria-label": label, "aria-invalid": !!error, "aria-describedby": `${id}-${error ? "error" : "desc"}`, placeholder: t("design_system.gallery.samples.textInput.placeholder") };
|
|
43
|
+
const countries = [
|
|
44
|
+
{ iso2: "US", dialCode: "+1", label: t("design_system.gallery.samples.textInput.us"), flag: "\u{1F1FA}\u{1F1F8}" },
|
|
45
|
+
{ iso2: "PL", dialCode: "+48", label: t("design_system.gallery.samples.textInput.pl"), flag: "\u{1F1F5}\u{1F1F1}" }
|
|
46
|
+
];
|
|
47
|
+
let control;
|
|
48
|
+
if (kind === "phone") {
|
|
49
|
+
control = /* @__PURE__ */ jsx(PhoneNumberField, { id, size, ariaLabel: label, ariaDescribedBy: `${id}-desc`, countryLabel: t("design_system.gallery.samples.textInput.country"), value: phone, onValueChange: setPhone, countries, disabled, externalError: error, renderCountryIcon: (country) => /* @__PURE__ */ jsx("img", { src: assetSource(country.iso2 === "PL" ? poland : unitedStates), alt: "", className: "size-5 object-contain" }) });
|
|
50
|
+
} else if (kind === "email") {
|
|
51
|
+
control = /* @__PURE__ */ jsx(EmailInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
|
|
52
|
+
} else if (kind === "website") {
|
|
53
|
+
control = /* @__PURE__ */ jsx(WebsiteInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
|
|
54
|
+
} else if (kind === "amount") {
|
|
55
|
+
control = /* @__PURE__ */ jsx(AmountInput, { ...common, value: amount, onChange: setAmount, currencies: [{ code: "USD", symbol: "$", label: "USD" }, { code: "EUR", symbol: "\u20AC", label: "EUR" }], renderCurrencyIcon: (currency) => /* @__PURE__ */ jsx("img", { src: assetSource(currency.code === "EUR" ? europeanUnion : unitedStates), alt: "", className: "size-5 object-contain" }) });
|
|
56
|
+
} else if (kind === "card") {
|
|
57
|
+
control = /* @__PURE__ */ jsx(CardInput, { ...common, value: card, onChange: setCard });
|
|
58
|
+
} else if (kind === "search") {
|
|
59
|
+
control = /* @__PURE__ */ jsx(SearchInput, { ...common, value: text, onChange: setText });
|
|
60
|
+
} else if (kind === "password") {
|
|
61
|
+
control = /* @__PURE__ */ jsx(PasswordInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
|
|
62
|
+
} else if (kind === "button") {
|
|
63
|
+
control = /* @__PURE__ */ jsx(ButtonInput, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), trailingAction: /* @__PURE__ */ jsx(CompactButton, { size: 24, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.send"), onClick: () => setFeedback(t("design_system.gallery.samples.textInput.sent")), children: /* @__PURE__ */ jsx(Send, { className: "size-5" }) }) });
|
|
64
|
+
} else if (kind === "dropdown") {
|
|
65
|
+
control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), trailing: /* @__PURE__ */ jsxs(Select, { value: permission, onValueChange: setPermission, disabled, children: [
|
|
66
|
+
/* @__PURE__ */ jsxs(SelectTrigger, { size: 32, "aria-label": t("design_system.gallery.samples.textInput.permission"), className: "h-5 w-auto gap-1 border-0 rounded-none bg-transparent p-0 text-muted-foreground shadow-none", children: [
|
|
67
|
+
/* @__PURE__ */ jsx(Globe, { className: "size-5", "aria-hidden": "true" }),
|
|
68
|
+
/* @__PURE__ */ jsx(SelectValue, {})
|
|
69
|
+
] }),
|
|
70
|
+
/* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
71
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "view", children: t("design_system.gallery.samples.textInput.view") }),
|
|
72
|
+
/* @__PURE__ */ jsx(SelectItem, { value: "edit", children: t("design_system.gallery.samples.textInput.edit") })
|
|
73
|
+
] })
|
|
74
|
+
] }) });
|
|
75
|
+
} else if (kind === "emoji") {
|
|
76
|
+
control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leading: /* @__PURE__ */ jsxs(Popover, { open: emojiOpen, onOpenChange: setEmojiOpen, children: [
|
|
77
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(CompactButton, { size: 20, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.chooseEmoji"), children: /* @__PURE__ */ jsx(Smile, { className: "size-5" }) }) }),
|
|
78
|
+
/* @__PURE__ */ jsx(PopoverContent, { className: "flex w-fit gap-2 p-2", children: ["\u{1F642}", "\u{1F389}", "\u{1F680}", "\u2764\uFE0F"].map((emoji) => /* @__PURE__ */ jsx(CompactButton, { size: 24, appearance: "ghost", "aria-label": emoji, onClick: () => {
|
|
79
|
+
setText((current) => `${current}${emoji}`);
|
|
80
|
+
setEmojiOpen(false);
|
|
81
|
+
}, children: emoji }, emoji)) })
|
|
82
|
+
] }) });
|
|
83
|
+
} else if (kind === "date") {
|
|
84
|
+
control = /* @__PURE__ */ jsx(Input, { ...common, ref: dateRef, type: "date", value: text, onChange: (event) => setText(event.target.value), inputClassName: "[&::-webkit-calendar-picker-indicator]:hidden", leading: /* @__PURE__ */ jsx(CompactButton, { size: 20, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.chooseDate"), onClick: () => {
|
|
85
|
+
dateRef.current?.focus();
|
|
86
|
+
dateRef.current?.showPicker?.();
|
|
87
|
+
}, children: /* @__PURE__ */ jsx(Calendar, { className: "size-5" }) }) });
|
|
88
|
+
} else {
|
|
89
|
+
control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), rightIcon: state === "error" ? /* @__PURE__ */ jsx(Info, {}) : void 0 });
|
|
90
|
+
}
|
|
91
|
+
return /* @__PURE__ */ jsxs("div", { className: "min-w-0", "data-input-kind": kind, "data-input-size": size, children: [
|
|
92
|
+
/* @__PURE__ */ jsx(FormField, { id, label, description: hint, error: kind === "phone" ? void 0 : error, disabled, children: control }),
|
|
93
|
+
feedback ? /* @__PURE__ */ jsx("output", { className: "mt-2 block text-xs text-muted-foreground", "aria-live": "polite", children: feedback }) : null,
|
|
94
|
+
kind === "phone" && phone ? /* @__PURE__ */ jsx("output", { className: "mt-2 block text-xs text-muted-foreground", "aria-live": "polite", children: phone }) : null
|
|
95
|
+
] });
|
|
96
|
+
}
|
|
97
|
+
function SourceTextInputMatrix({ size = 36, state = "filled" }) {
|
|
98
|
+
return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3", children: inputKinds.map((kind) => /* @__PURE__ */ jsx(SourceTextInput, { kind, size, state }, `${kind}-${size}-${state}`)) });
|
|
99
|
+
}
|
|
100
|
+
function SourcePhoneExamples({ state = "filled" }) {
|
|
101
|
+
return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-3", children: [32, 36, 40].map((size) => /* @__PURE__ */ jsx(SourceTextInput, { kind: "phone", size, state }, `${size}-${state}`)) });
|
|
102
|
+
}
|
|
103
|
+
function SourceTextareaExamples() {
|
|
104
|
+
const t = useT();
|
|
105
|
+
return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-2", children: ["placeholder", "filled", "error", "disabled"].map((state) => /* @__PURE__ */ jsx(FormField, { label: t("design_system.gallery.samples.textInput.note"), description: t("design_system.gallery.samples.textInput.hint"), disabled: state === "disabled", error: state === "error" ? t("design_system.gallery.samples.textInput.error") : void 0, children: /* @__PURE__ */ jsx(Textarea, { appearance: "source", showCount: true, maxLength: 200, placeholder: t("design_system.gallery.samples.textInput.placeholder"), defaultValue: state === "placeholder" ? "" : t("design_system.gallery.samples.textInput.noteValue") }) }, state)) });
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
SourcePhoneExamples,
|
|
109
|
+
SourceTextInput,
|
|
110
|
+
SourceTextInputMatrix,
|
|
111
|
+
SourceTextareaExamples
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=text-inputs.js.map
|