@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.1-develop.7204.1.83330e271e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/build.mjs +11 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/lib/detailHelpers.js +4 -0
- package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +5 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
- package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
- package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
- package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
- package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
- package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
- package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
- package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
- package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
- package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
- package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
- package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
- package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
- package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
- package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
- package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
- package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
- package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
- package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
- package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
- package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
- package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
- package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
- package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
- package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
- package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
- package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
- package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
- package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
- package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
- package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
- package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
- package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
- package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
- package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
- package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
- package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
- package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
- package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
- package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
- package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
- package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
- package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
- package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
- package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
- package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
- package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/menus.js +150 -0
- package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
- package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
- package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
- package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
- package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/shell.js +330 -0
- package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
- package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
- package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
- package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
- package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
- package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
- package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
- package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
- package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +123 -60
- package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
- package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
- package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/charts.js +532 -186
- package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/dates.js +191 -3
- package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/detail.js +118 -77
- package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/display.js +1449 -240
- package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
- package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/filters.js +231 -103
- package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
- package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/icons.js +29 -91
- package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
- package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
- package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/library.js +20 -0
- package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +121 -103
- package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
- package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
- package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
- package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
- package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
- package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
- package/dist/modules/design_system/gallery/presentation.js +108 -0
- package/dist/modules/design_system/gallery/presentation.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +8 -5
- package/dist/modules/design_system/gallery/registry.js.map +2 -2
- package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
- package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
- package/dist/modules/design_system/i18n/de.json +7167 -0
- package/dist/modules/design_system/i18n/en.json +7167 -0
- package/dist/modules/design_system/i18n/es.json +7167 -0
- package/dist/modules/design_system/i18n/ko.json +7167 -0
- package/dist/modules/design_system/i18n/pl.json +7167 -0
- package/dist/modules/push_notifications/lib/queue.js +1 -31
- package/dist/modules/push_notifications/lib/queue.js.map +2 -2
- package/jest.config.cjs +1 -0
- package/jest.mocks/image.js +1 -0
- package/package.json +8 -8
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
- package/src/modules/customers/lib/detailHelpers.ts +4 -0
- package/src/modules/customers/lib/todoCompatibility.ts +10 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
- package/src/modules/design_system/gallery/assets/README.md +30 -0
- package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
- package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
- package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
- package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
- package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
- package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
- package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
- package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
- package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
- package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
- package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
- package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
- package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
- package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
- package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
- package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
- package/src/modules/design_system/gallery/assets/select-google.png +0 -0
- package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
- package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
- package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
- package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
- package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
- package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
- package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
- package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
- package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
- package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
- package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
- package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
- package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
- package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
- package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
- package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
- package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
- package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
- package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
- package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
- package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
- package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
- package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
- package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
- package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
- package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
- package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
- package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
- package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
- package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
- package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
- package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
- package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
- package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
- package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
- package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
- package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
- package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
- package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
- package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
- package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
- package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
- package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
- package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
- package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
- package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
- package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
- package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
- package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
- package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
- package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
- package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
- package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
- package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
- package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
- package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
- package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
- package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
- package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
- package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
- package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
- package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
- package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
- package/src/modules/design_system/gallery/entries/library.tsx +16 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
- package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
- package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
- package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
- package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
- package/src/modules/design_system/gallery/presentation.ts +106 -0
- package/src/modules/design_system/gallery/registry.ts +8 -6
- package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
- package/src/modules/design_system/i18n/de.json +7112 -3
- package/src/modules/design_system/i18n/en.json +7112 -3
- package/src/modules/design_system/i18n/es.json +7112 -3
- package/src/modules/design_system/i18n/ko.json +7112 -3
- package/src/modules/design_system/i18n/pl.json +7112 -3
- package/src/modules/push_notifications/AGENTS.md +9 -5
- package/src/modules/push_notifications/lib/queue.ts +15 -44
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { ArrowLeft, ArrowRight, GripVertical, Check, Copy, RotateCcw, Sun, Moon, Paintbrush, MousePointer2, Layers, CircleCheck } from "lucide-react";
|
|
5
|
+
import { useT } from "@open-mercato/shared/lib/i18n/context";
|
|
6
|
+
import { Button } from "@open-mercato/ui/primitives/button";
|
|
7
|
+
import { Input } from "@open-mercato/ui/primitives/input";
|
|
8
|
+
import { Label } from "@open-mercato/ui/primitives/label";
|
|
9
|
+
import { Badge } from "@open-mercato/ui/primitives/badge";
|
|
10
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@open-mercato/ui/primitives/select";
|
|
11
|
+
import { SegmentedControl, SegmentedControlItem } from "@open-mercato/ui/primitives/segmented-control";
|
|
12
|
+
import { readThemeTokens } from "./themeTokens.js";
|
|
13
|
+
import { contrastRatio, normalizeHex } from "./colorPreview.js";
|
|
14
|
+
import { createColorStudio, exportColorStudio } from "./colorStudio.js";
|
|
15
|
+
import { ColorStudioSpecimen } from "./ColorStudioSpecimen.js";
|
|
16
|
+
import { ColorStudioCompositions } from "./ColorStudioCompositions.js";
|
|
17
|
+
const INITIAL_COLOR = "#F4700D";
|
|
18
|
+
const PRESETS = ["#BC9AFF", INITIAL_COLOR, "#2563EB", "#0F766E", "#BE185D"];
|
|
19
|
+
const THEMES = ["light", "dark"];
|
|
20
|
+
const ROLE_ICONS = { action: Paintbrush, selection: MousePointer2, surface: Layers, status: CircleCheck };
|
|
21
|
+
function ShadeSelect({ label, scale, value, onChange }) {
|
|
22
|
+
const id = React.useId();
|
|
23
|
+
return /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-2", children: [
|
|
24
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: id, children: label }),
|
|
25
|
+
/* @__PURE__ */ jsxs(Select, { value: String(value), onValueChange: (next) => {
|
|
26
|
+
const stop = scale.find((item) => String(item.step) === next);
|
|
27
|
+
if (stop) onChange(stop.step);
|
|
28
|
+
}, children: [
|
|
29
|
+
/* @__PURE__ */ jsx(SelectTrigger, { id, "aria-label": label, children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
30
|
+
/* @__PURE__ */ jsx(SelectContent, { children: scale.map((stop) => /* @__PURE__ */ jsx(SelectItem, { value: String(stop.step), children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
31
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-4 shrink-0 rounded-sm border border-border", style: { backgroundColor: stop.hex } }),
|
|
32
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-xs", children: [
|
|
33
|
+
stop.step,
|
|
34
|
+
" \xB7 ",
|
|
35
|
+
stop.hex
|
|
36
|
+
] })
|
|
37
|
+
] }) }, stop.step)) })
|
|
38
|
+
] })
|
|
39
|
+
] });
|
|
40
|
+
}
|
|
41
|
+
const COLOR_ROLES = ["primary", "secondary", "tertiary"];
|
|
42
|
+
function ColorRoleSwap({ role, disabled, onSwap, onDragStart, onDragEnd }) {
|
|
43
|
+
const t = useT();
|
|
44
|
+
const index = COLOR_ROLES.indexOf(role);
|
|
45
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
46
|
+
/* @__PURE__ */ jsx("span", { draggable: !disabled, onDragStart, onDragEnd, title: t("design_system.colorStudio.dragColor"), className: "inline-flex size-8 cursor-grab items-center justify-center text-muted-foreground active:cursor-grabbing", "aria-hidden": true, children: /* @__PURE__ */ jsx(GripVertical, { className: "size-4" }) }),
|
|
47
|
+
["left", "right"].map((direction) => {
|
|
48
|
+
const target = COLOR_ROLES[index + (direction === "left" ? -1 : 1)];
|
|
49
|
+
const Icon = direction === "left" ? ArrowLeft : ArrowRight;
|
|
50
|
+
return /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon", disabled: disabled || !target, "aria-label": `${t(`design_system.colorStudio.move${direction === "left" ? "Left" : "Right"}`)}: ${t(`design_system.colorStudio.${role}`)}`, className: "shrink-0 text-muted-foreground", onClick: () => {
|
|
51
|
+
if (target) onSwap(role, target);
|
|
52
|
+
}, children: /* @__PURE__ */ jsx(Icon, { "aria-hidden": true, className: "size-4" }) }, direction);
|
|
53
|
+
})
|
|
54
|
+
] });
|
|
55
|
+
}
|
|
56
|
+
function ColorPlayground({ initialSeeds, initialActionShades, initialView = "compare", logo, onStudioChange } = {}) {
|
|
57
|
+
const t = useT();
|
|
58
|
+
const id = React.useId();
|
|
59
|
+
const [color, setColor] = React.useState(initialSeeds?.primary ?? INITIAL_COLOR);
|
|
60
|
+
const [draft, setDraft] = React.useState(initialSeeds?.primary ?? INITIAL_COLOR);
|
|
61
|
+
const [harmony, setHarmony] = React.useState("triadic");
|
|
62
|
+
const [supporting, setSupporting] = React.useState(initialSeeds ? { secondary: initialSeeds.secondary, tertiary: initialSeeds.tertiary } : {});
|
|
63
|
+
const [supportingDrafts, setSupportingDrafts] = React.useState(initialSeeds ? { secondary: initialSeeds.secondary, tertiary: initialSeeds.tertiary } : {});
|
|
64
|
+
const [neutral, setNeutral] = React.useState("neutral");
|
|
65
|
+
const [view, setView] = React.useState(initialView);
|
|
66
|
+
const [actionShades, setActionShades] = React.useState(initialActionShades ?? {});
|
|
67
|
+
const [hostTokens, setHostTokens] = React.useState(null);
|
|
68
|
+
const [matrixForeground, setMatrixForeground] = React.useState(900);
|
|
69
|
+
const [matrixBackground, setMatrixBackground] = React.useState(50);
|
|
70
|
+
const [draggedRole, setDraggedRole] = React.useState(null);
|
|
71
|
+
const [dropRole, setDropRole] = React.useState(null);
|
|
72
|
+
const [feedback, setFeedback] = React.useState("");
|
|
73
|
+
const [resetVersion, setResetVersion] = React.useState(0);
|
|
74
|
+
const invalid = !normalizeHex(draft);
|
|
75
|
+
const hasManualColors = Object.keys(supportingDrafts).length > 0;
|
|
76
|
+
const studio = React.useMemo(() => createColorStudio(color, neutral, actionShades, { harmony, ...supporting }), [color, neutral, actionShades, harmony, supporting]);
|
|
77
|
+
React.useEffect(() => {
|
|
78
|
+
onStudioChange?.(studio, !invalid && Object.values(supportingDrafts).every((value) => Boolean(normalizeHex(value))));
|
|
79
|
+
}, [studio, invalid, supportingDrafts, onStudioChange]);
|
|
80
|
+
const matrixText = studio.scale.find((stop) => stop.step === matrixForeground).hex;
|
|
81
|
+
const matrixSurface = studio.scale.find((stop) => stop.step === matrixBackground).hex;
|
|
82
|
+
const matrixRatio = contrastRatio(matrixText, matrixSurface);
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
setHostTokens(readThemeTokens(document.styleSheets));
|
|
85
|
+
}, []);
|
|
86
|
+
function chooseColor(value) {
|
|
87
|
+
setDraft(value);
|
|
88
|
+
const normalized = normalizeHex(value);
|
|
89
|
+
if (normalized) setColor(normalized);
|
|
90
|
+
setFeedback("");
|
|
91
|
+
}
|
|
92
|
+
function swapColors(first, second) {
|
|
93
|
+
if (invalid || Object.values(supportingDrafts).some((value) => !normalizeHex(value))) return;
|
|
94
|
+
const next = { ...studio.seeds, [first]: studio.seeds[second], [second]: studio.seeds[first] };
|
|
95
|
+
setColor(next.primary);
|
|
96
|
+
setDraft(next.primary);
|
|
97
|
+
setSupporting({ secondary: next.secondary, tertiary: next.tertiary });
|
|
98
|
+
setSupportingDrafts({ secondary: next.secondary, tertiary: next.tertiary });
|
|
99
|
+
if (first === "primary" || second === "primary") setActionShades({});
|
|
100
|
+
setFeedback(t("design_system.colorStudio.swapped"));
|
|
101
|
+
}
|
|
102
|
+
function reset() {
|
|
103
|
+
chooseColor(INITIAL_COLOR);
|
|
104
|
+
setNeutral("neutral");
|
|
105
|
+
setHarmony("triadic");
|
|
106
|
+
setSupporting({});
|
|
107
|
+
setSupportingDrafts({});
|
|
108
|
+
setView(initialView);
|
|
109
|
+
setActionShades({});
|
|
110
|
+
setMatrixForeground(900);
|
|
111
|
+
setMatrixBackground(50);
|
|
112
|
+
setResetVersion((previous) => previous + 1);
|
|
113
|
+
}
|
|
114
|
+
async function copy(value, message) {
|
|
115
|
+
try {
|
|
116
|
+
await navigator.clipboard.writeText(value);
|
|
117
|
+
setFeedback(message);
|
|
118
|
+
} catch {
|
|
119
|
+
setFeedback(t("design_system.colorPreview.copyFailed"));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const swapDisabled = invalid || Object.values(supportingDrafts).some((value) => !normalizeHex(value));
|
|
123
|
+
function dragStart(role, event) {
|
|
124
|
+
if (swapDisabled) {
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
event.dataTransfer.effectAllowed = "move";
|
|
129
|
+
event.dataTransfer.setData("text/plain", role);
|
|
130
|
+
setDraggedRole(role);
|
|
131
|
+
}
|
|
132
|
+
function dragEnd() {
|
|
133
|
+
setDraggedRole(null);
|
|
134
|
+
setDropRole(null);
|
|
135
|
+
}
|
|
136
|
+
function dropProps(role) {
|
|
137
|
+
return {
|
|
138
|
+
"data-color-role": role,
|
|
139
|
+
className: `space-y-2 rounded-lg transition-shadow ${dropRole === role ? "ring-2 ring-ring" : ""}`,
|
|
140
|
+
onDragOver: (event) => {
|
|
141
|
+
if (!draggedRole || draggedRole === role || swapDisabled) return;
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
event.dataTransfer.dropEffect = "move";
|
|
144
|
+
setDropRole(role);
|
|
145
|
+
},
|
|
146
|
+
onDragLeave: (event) => {
|
|
147
|
+
if (!event.currentTarget.contains(event.relatedTarget)) setDropRole(null);
|
|
148
|
+
},
|
|
149
|
+
onDrop: (event) => {
|
|
150
|
+
event.preventDefault();
|
|
151
|
+
if (draggedRole && draggedRole !== role && !swapDisabled) swapColors(draggedRole, role);
|
|
152
|
+
dragEnd();
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return /* @__PURE__ */ jsxs("section", { className: "space-y-8", "aria-labelledby": `${id}-title`, "data-example": "color-playground", children: [
|
|
157
|
+
/* @__PURE__ */ jsxs("header", { className: "flex flex-wrap items-start justify-between gap-4", children: [
|
|
158
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-2xl space-y-2", children: [
|
|
159
|
+
/* @__PURE__ */ jsx("h2", { id: `${id}-title`, className: "text-2xl font-medium tracking-tight", children: t("design_system.colorStudio.title") }),
|
|
160
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.description") })
|
|
161
|
+
] }),
|
|
162
|
+
/* @__PURE__ */ jsxs(Button, { type: "button", variant: "ghost", onClick: reset, children: [
|
|
163
|
+
/* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": true }),
|
|
164
|
+
t("design_system.colorPreview.reset")
|
|
165
|
+
] })
|
|
166
|
+
] }),
|
|
167
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-6 rounded-xl border border-border bg-card p-5 sm:p-6", children: [
|
|
168
|
+
/* @__PURE__ */ jsxs("div", { className: "grid gap-5 sm:grid-cols-3", children: [
|
|
169
|
+
/* @__PURE__ */ jsxs("div", { ...dropProps("primary"), children: [
|
|
170
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
171
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${id}-hex`, children: t("design_system.colorStudio.primary") }),
|
|
172
|
+
/* @__PURE__ */ jsx(ColorRoleSwap, { role: "primary", disabled: swapDisabled, onSwap: swapColors, onDragStart: (event) => dragStart("primary", event), onDragEnd: dragEnd })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
175
|
+
/* @__PURE__ */ jsx(Input, { type: "color", value: color, "aria-label": t("design_system.colorPreview.color"), onChange: (event) => chooseColor(event.target.value), className: "w-12 shrink-0 p-1", inputClassName: "h-full w-full cursor-pointer p-0" }),
|
|
176
|
+
/* @__PURE__ */ jsx(Input, { id: `${id}-hex`, "aria-label": t("design_system.colorPreview.hex"), value: draft, onChange: (event) => chooseColor(event.target.value), onBlur: () => {
|
|
177
|
+
const value = normalizeHex(draft);
|
|
178
|
+
if (value) setDraft(value);
|
|
179
|
+
}, inputClassName: "font-mono", "aria-invalid": invalid, "aria-describedby": invalid ? `${id}-error` : void 0, spellCheck: false, maxLength: 7 })
|
|
180
|
+
] })
|
|
181
|
+
] }),
|
|
182
|
+
["secondary", "tertiary"].map((role) => {
|
|
183
|
+
const value = supportingDrafts[role] ?? studio.seeds[role];
|
|
184
|
+
const valid = Boolean(normalizeHex(value));
|
|
185
|
+
const change = (next) => {
|
|
186
|
+
setSupportingDrafts((previous) => ({ ...previous, [role]: next }));
|
|
187
|
+
const normalized = normalizeHex(next);
|
|
188
|
+
if (normalized) setSupporting((previous) => ({ ...previous, [role]: normalized }));
|
|
189
|
+
setFeedback("");
|
|
190
|
+
};
|
|
191
|
+
return /* @__PURE__ */ jsxs("div", { ...dropProps(role), children: [
|
|
192
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
193
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${id}-${role}`, children: t(`design_system.colorStudio.${role}`) }),
|
|
194
|
+
/* @__PURE__ */ jsx(ColorRoleSwap, { role, disabled: swapDisabled, onSwap: swapColors, onDragStart: (event) => dragStart(role, event), onDragEnd: dragEnd })
|
|
195
|
+
] }),
|
|
196
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
197
|
+
/* @__PURE__ */ jsx(Input, { type: "color", value: studio.seeds[role], "aria-label": t(`design_system.colorStudio.${role}`), onChange: (event) => change(event.target.value), className: "w-12 shrink-0 p-1", inputClassName: "h-full w-full cursor-pointer p-0" }),
|
|
198
|
+
/* @__PURE__ */ jsx(Input, { id: `${id}-${role}`, value, "aria-label": `${t(`design_system.colorStudio.${role}`)} HEX`, onChange: (event) => change(event.target.value), inputClassName: "font-mono", "aria-invalid": !valid, "aria-describedby": !valid ? `${id}-${role}-error` : void 0, maxLength: 7, spellCheck: false })
|
|
199
|
+
] }),
|
|
200
|
+
!valid ? /* @__PURE__ */ jsx("p", { id: `${id}-${role}-error`, role: "alert", className: "text-xs text-status-error-text", children: t(`design_system.colorStudio.${role}Invalid`) }) : null
|
|
201
|
+
] }, role);
|
|
202
|
+
})
|
|
203
|
+
] }),
|
|
204
|
+
/* @__PURE__ */ jsxs("div", { className: "grid gap-5 sm:grid-cols-2 xl:grid-cols-4", children: [
|
|
205
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
206
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${id}-harmony`, children: t("design_system.colorStudio.harmony") }),
|
|
207
|
+
/* @__PURE__ */ jsxs(Select, { value: harmony, onValueChange: (value) => {
|
|
208
|
+
if (value === "analogous" || value === "triadic" || value === "split") {
|
|
209
|
+
setHarmony(value);
|
|
210
|
+
setSupporting({});
|
|
211
|
+
setSupportingDrafts({});
|
|
212
|
+
setFeedback("");
|
|
213
|
+
}
|
|
214
|
+
}, children: [
|
|
215
|
+
/* @__PURE__ */ jsx(SelectTrigger, { id: `${id}-harmony`, "aria-label": t("design_system.colorStudio.harmony"), "aria-describedby": `${id}-harmony-description`, children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
216
|
+
/* @__PURE__ */ jsx(SelectContent, { children: ["analogous", "triadic", "split"].map((mode) => /* @__PURE__ */ jsx(SelectItem, { value: mode, children: t(`design_system.colorStudio.harmony.${mode}`) }, mode)) })
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ jsx("p", { id: `${id}-harmony-description`, className: "text-xs leading-relaxed text-muted-foreground", children: t(`design_system.colorStudio.harmonyDescription.${harmony}`) })
|
|
219
|
+
] }),
|
|
220
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
221
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: `${id}-neutral`, children: t("design_system.colorStudio.neutral") }),
|
|
222
|
+
/* @__PURE__ */ jsxs(Select, { value: neutral, onValueChange: (value) => {
|
|
223
|
+
if (value === "neutral" || value === "warm" || value === "cool") {
|
|
224
|
+
setNeutral(value);
|
|
225
|
+
setFeedback("");
|
|
226
|
+
}
|
|
227
|
+
}, children: [
|
|
228
|
+
/* @__PURE__ */ jsx(SelectTrigger, { id: `${id}-neutral`, "aria-label": t("design_system.colorStudio.neutral"), children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
229
|
+
/* @__PURE__ */ jsx(SelectContent, { children: ["neutral", "warm", "cool"].map((tone) => /* @__PURE__ */ jsx(SelectItem, { value: tone, children: t(`design_system.colorStudio.neutral.${tone}`) }, tone)) })
|
|
230
|
+
] })
|
|
231
|
+
] }),
|
|
232
|
+
THEMES.map((theme) => /* @__PURE__ */ jsx(ShadeSelect, { label: t(`design_system.colorStudio.${theme}Action`), scale: studio.scale, value: studio[theme].actionStep, onChange: (shade) => {
|
|
233
|
+
setActionShades((previous) => ({ ...previous, [theme]: shade }));
|
|
234
|
+
setFeedback("");
|
|
235
|
+
} }, theme))
|
|
236
|
+
] }),
|
|
237
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 border-t border-border pt-4", children: [
|
|
238
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-2xl space-y-2", children: [
|
|
239
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed", children: t("design_system.colorStudio.harmonyHint") }),
|
|
240
|
+
/* @__PURE__ */ jsx("p", { role: "status", className: "text-xs leading-relaxed text-muted-foreground", children: t(`design_system.colorStudio.${hasManualColors ? "harmonyManual" : "harmonyAutomatic"}`) })
|
|
241
|
+
] }),
|
|
242
|
+
hasManualColors ? /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", variant: "secondary", onClick: () => {
|
|
243
|
+
setSupporting({});
|
|
244
|
+
setSupportingDrafts({});
|
|
245
|
+
setFeedback(t("design_system.colorStudio.harmonyRestored"));
|
|
246
|
+
}, children: [
|
|
247
|
+
/* @__PURE__ */ jsx(RotateCcw, { "aria-hidden": true }),
|
|
248
|
+
t("design_system.colorStudio.auto")
|
|
249
|
+
] }) : null
|
|
250
|
+
] }),
|
|
251
|
+
invalid ? /* @__PURE__ */ jsx("p", { id: `${id}-error`, role: "alert", className: "text-sm text-status-error-text", children: t("design_system.colorPreview.invalid") }) : null,
|
|
252
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: PRESETS.map((preset) => /* @__PURE__ */ jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => chooseColor(preset), "aria-pressed": color === preset, children: [
|
|
253
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "size-4 shrink-0 rounded-full border border-border", style: { backgroundColor: preset } }),
|
|
254
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-xs", children: preset }),
|
|
255
|
+
color === preset ? /* @__PURE__ */ jsx(Check, { className: "size-3", "aria-hidden": true }) : null
|
|
256
|
+
] }, preset)) }),
|
|
257
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-3 border-t border-border pt-5", children: [
|
|
258
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
259
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-medium", children: t("design_system.colorStudio.scale") }),
|
|
260
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.scaleHint") })
|
|
261
|
+
] }),
|
|
262
|
+
[
|
|
263
|
+
{ role: "primary", scale: studio.scale, seed: studio.seeds.primary },
|
|
264
|
+
{ role: "secondary", scale: studio.secondaryScale, seed: studio.seeds.secondary },
|
|
265
|
+
{ role: "tertiary", scale: studio.tertiaryScale, seed: studio.seeds.tertiary }
|
|
266
|
+
].map(({ role, scale, seed }) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
267
|
+
/* @__PURE__ */ jsx("h4", { className: "text-xs font-medium text-muted-foreground", children: t(`design_system.colorStudio.${role}`) }),
|
|
268
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-1 sm:grid-cols-6 xl:grid-cols-11", children: scale.map((stop) => /* @__PURE__ */ jsxs(Button, { type: "button", variant: "ghost", className: "h-24 min-w-0 flex-col items-start justify-end gap-1 rounded-lg px-2 py-3 text-left", style: { backgroundColor: stop.hex, color: contrastRatio(stop.hex, "#FFFFFF") >= contrastRatio(stop.hex, "#000000") ? "#FFFFFF" : "#000000" }, "aria-label": `${t("design_system.colorStudio.copyColor")} ${t(`design_system.colorStudio.${role}`)} ${stop.step} ${stop.hex}`, onClick: () => copy(stop.hex, `${t("design_system.colorStudio.copiedColor")}: ${stop.hex}`), children: [
|
|
269
|
+
/* @__PURE__ */ jsxs("span", { className: "flex w-full items-center justify-between gap-1 text-xs", children: [
|
|
270
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold", children: stop.step }),
|
|
271
|
+
stop.hex === seed ? /* @__PURE__ */ jsxs("span", { title: t("design_system.colorStudio.base"), children: [
|
|
272
|
+
/* @__PURE__ */ jsx(Paintbrush, { className: "size-3", "aria-hidden": true }),
|
|
273
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.colorStudio.base") })
|
|
274
|
+
] }) : null
|
|
275
|
+
] }),
|
|
276
|
+
/* @__PURE__ */ jsx("code", { className: "text-xs font-normal", children: stop.hex })
|
|
277
|
+
] }, stop.step)) })
|
|
278
|
+
] }, role))
|
|
279
|
+
] })
|
|
280
|
+
] }),
|
|
281
|
+
/* @__PURE__ */ jsxs("section", { className: "space-y-4", "aria-labelledby": `${id}-preview-title`, children: [
|
|
282
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-end justify-between gap-4", children: [
|
|
283
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-xl space-y-1", children: [
|
|
284
|
+
/* @__PURE__ */ jsx("h3", { id: `${id}-preview-title`, className: "text-lg font-medium", children: t("design_system.colorStudio.preview") }),
|
|
285
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.previewHint") })
|
|
286
|
+
] }),
|
|
287
|
+
/* @__PURE__ */ jsxs(SegmentedControl, { value: view, onValueChange: (value) => {
|
|
288
|
+
if (value === "light" || value === "dark" || value === "compare") setView(value);
|
|
289
|
+
}, "aria-label": t("design_system.colorPreview.theme"), children: [
|
|
290
|
+
/* @__PURE__ */ jsx(SegmentedControlItem, { value: "light", children: t("design_system.colorPreview.light") }),
|
|
291
|
+
/* @__PURE__ */ jsx(SegmentedControlItem, { value: "dark", children: t("design_system.colorPreview.dark") }),
|
|
292
|
+
/* @__PURE__ */ jsx(SegmentedControlItem, { value: "compare", children: t("design_system.colorStudio.compare") })
|
|
293
|
+
] })
|
|
294
|
+
] }),
|
|
295
|
+
/* @__PURE__ */ jsx("div", { className: view === "compare" ? "grid min-w-0 gap-5 xl:grid-cols-2" : "min-w-0", children: THEMES.filter((theme) => view === "compare" || theme === view).map((theme) => /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-3", children: [
|
|
296
|
+
/* @__PURE__ */ jsxs("p", { className: "flex items-center gap-2 text-xs font-medium text-muted-foreground", children: [
|
|
297
|
+
theme === "light" ? /* @__PURE__ */ jsx(Sun, { className: "size-4", "aria-hidden": true }) : /* @__PURE__ */ jsx(Moon, { className: "size-4", "aria-hidden": true }),
|
|
298
|
+
t(`design_system.colorPreview.${theme}`)
|
|
299
|
+
] }),
|
|
300
|
+
/* @__PURE__ */ jsx(ColorStudioCompositions, { theme, tokens: { ...hostTokens?.[theme], ...studio[theme].tokens } }),
|
|
301
|
+
/* @__PURE__ */ jsx(ColorStudioSpecimen, { logo, theme, tokens: { ...hostTokens?.[theme], ...studio[theme].tokens } }, `${theme}-${resetVersion}`)
|
|
302
|
+
] }, theme)) })
|
|
303
|
+
] }),
|
|
304
|
+
/* @__PURE__ */ jsxs("section", { className: "space-y-4", "aria-labelledby": `${id}-roles-title`, children: [
|
|
305
|
+
/* @__PURE__ */ jsx("h3", { id: `${id}-roles-title`, className: "text-lg font-medium", children: t("design_system.colorStudio.roles") }),
|
|
306
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-5 sm:grid-cols-2 xl:grid-cols-4", children: Object.keys(ROLE_ICONS).map((role) => {
|
|
307
|
+
const Icon = ROLE_ICONS[role];
|
|
308
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-3 border-t border-border pt-4", children: [
|
|
309
|
+
/* @__PURE__ */ jsx(Icon, { "aria-hidden": true, className: "size-5 text-muted-foreground" }),
|
|
310
|
+
/* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: t(`design_system.colorStudio.roles.${role}`) }),
|
|
311
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t(`design_system.colorStudio.roles.${role}Hint`) })
|
|
312
|
+
] }, role);
|
|
313
|
+
}) })
|
|
314
|
+
] }),
|
|
315
|
+
/* @__PURE__ */ jsxs("section", { className: "space-y-4", "aria-labelledby": `${id}-contrast-title`, children: [
|
|
316
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-3xl space-y-1", children: [
|
|
317
|
+
/* @__PURE__ */ jsx("h3", { id: `${id}-contrast-title`, className: "text-lg font-medium", children: t("design_system.colorStudio.contrast") }),
|
|
318
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.contrastHint") })
|
|
319
|
+
] }),
|
|
320
|
+
/* @__PURE__ */ jsxs("div", { className: "grid gap-5 rounded-xl border border-border p-5 lg:grid-cols-2", children: [
|
|
321
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
322
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
323
|
+
/* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: t("design_system.colorStudio.matrix") }),
|
|
324
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.matrixHint") })
|
|
325
|
+
] }),
|
|
326
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
327
|
+
/* @__PURE__ */ jsx(ShadeSelect, { label: t("design_system.colorStudio.foreground"), scale: studio.scale, value: matrixForeground, onChange: setMatrixForeground }),
|
|
328
|
+
/* @__PURE__ */ jsx(ShadeSelect, { label: t("design_system.colorStudio.background"), scale: studio.scale, value: matrixBackground, onChange: setMatrixBackground })
|
|
329
|
+
] })
|
|
330
|
+
] }),
|
|
331
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4 rounded-lg p-6", style: { backgroundColor: matrixSurface, color: matrixText }, children: [
|
|
332
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
333
|
+
/* @__PURE__ */ jsx("span", { className: "text-4xl font-medium", children: "Aa" }),
|
|
334
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm", children: t("design_system.colorStudio.pair.body") })
|
|
335
|
+
] }),
|
|
336
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2 rounded-md bg-card px-3 py-2 text-right text-card-foreground", children: [
|
|
337
|
+
/* @__PURE__ */ jsxs("p", { className: "font-mono text-xl font-semibold", children: [
|
|
338
|
+
matrixRatio.toFixed(2),
|
|
339
|
+
":1"
|
|
340
|
+
] }),
|
|
341
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs", children: t(`design_system.colorStudio.${matrixRatio >= 4.5 ? "pass" : "fail"}`) })
|
|
342
|
+
] })
|
|
343
|
+
] })
|
|
344
|
+
] }),
|
|
345
|
+
/* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-xl border border-border", children: [
|
|
346
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 gap-3 bg-muted px-4 py-3 text-xs font-medium text-muted-foreground", children: [
|
|
347
|
+
/* @__PURE__ */ jsx("span", { children: t("design_system.colorStudio.pair") }),
|
|
348
|
+
THEMES.map((theme) => /* @__PURE__ */ jsx("span", { children: t(`design_system.colorPreview.${theme}`) }, theme))
|
|
349
|
+
] }),
|
|
350
|
+
/* @__PURE__ */ jsx("dl", { className: "divide-y divide-border", children: studio.light.pairs.map((pair) => /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-3 items-center gap-3 px-4 py-3", children: [
|
|
351
|
+
/* @__PURE__ */ jsxs("dt", { className: "space-y-1", children: [
|
|
352
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: t(`design_system.colorStudio.pair.${pair.id}`) }),
|
|
353
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
354
|
+
t("design_system.colorStudio.minimum"),
|
|
355
|
+
": ",
|
|
356
|
+
pair.minimum,
|
|
357
|
+
":1"
|
|
358
|
+
] })
|
|
359
|
+
] }),
|
|
360
|
+
THEMES.map((theme) => {
|
|
361
|
+
const item = studio[theme].pairs.find((candidate) => candidate.id === pair.id);
|
|
362
|
+
const passing = item.ratio >= item.minimum;
|
|
363
|
+
return /* @__PURE__ */ jsxs("dd", { className: "flex flex-wrap items-center gap-3", children: [
|
|
364
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "inline-flex size-10 shrink-0 items-center justify-center rounded-md border border-border font-semibold", style: { backgroundColor: item.background, color: item.foreground }, children: "Aa" }),
|
|
365
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
366
|
+
/* @__PURE__ */ jsxs("p", { className: "font-mono text-sm", children: [
|
|
367
|
+
item.ratio.toFixed(2),
|
|
368
|
+
":1"
|
|
369
|
+
] }),
|
|
370
|
+
/* @__PURE__ */ jsx(Badge, { variant: passing ? "success" : "error", children: t(`design_system.colorStudio.${passing ? "pass" : "fail"}`) }),
|
|
371
|
+
/* @__PURE__ */ jsxs("p", { className: "font-mono text-xs text-muted-foreground", children: [
|
|
372
|
+
item.foreground,
|
|
373
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
374
|
+
item.background
|
|
375
|
+
] })
|
|
376
|
+
] })
|
|
377
|
+
] }, theme);
|
|
378
|
+
})
|
|
379
|
+
] }, pair.id)) })
|
|
380
|
+
] })
|
|
381
|
+
] }),
|
|
382
|
+
/* @__PURE__ */ jsxs("section", { className: "space-y-4 border-t border-border pt-6", "aria-labelledby": `${id}-export-title`, children: [
|
|
383
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
|
|
384
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-xl space-y-1", children: [
|
|
385
|
+
/* @__PURE__ */ jsx("h3", { id: `${id}-export-title`, className: "text-lg font-medium", children: t("design_system.colorStudio.export") }),
|
|
386
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.exportHint") })
|
|
387
|
+
] }),
|
|
388
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: ["css", "json"].map((format) => /* @__PURE__ */ jsxs(Button, { type: "button", variant: "secondary", onClick: () => copy(exportColorStudio(studio, format), t("design_system.colorPreview.copied")), children: [
|
|
389
|
+
/* @__PURE__ */ jsx(Copy, { "aria-hidden": true }),
|
|
390
|
+
t(`design_system.colorStudio.${format === "css" ? "copyCss" : "copyJson"}`)
|
|
391
|
+
] }, format)) })
|
|
392
|
+
] }),
|
|
393
|
+
/* @__PURE__ */ jsxs("div", { className: "max-w-3xl space-y-1", children: [
|
|
394
|
+
/* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: t("design_system.colorStudio.algorithm") }),
|
|
395
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.algorithmHint") })
|
|
396
|
+
] }),
|
|
397
|
+
/* @__PURE__ */ jsxs("section", { className: "rounded-lg border border-border", children: [
|
|
398
|
+
/* @__PURE__ */ jsx("h3", { className: "p-4 text-sm font-medium", children: t("design_system.colorStudio.showTokens") }),
|
|
399
|
+
/* @__PURE__ */ jsx("pre", { className: "max-h-80 overflow-auto border-t border-border bg-muted p-4 text-xs leading-relaxed", children: /* @__PURE__ */ jsx("code", { children: exportColorStudio(studio, "css") }) })
|
|
400
|
+
] })
|
|
401
|
+
] }),
|
|
402
|
+
/* @__PURE__ */ jsx("p", { role: "status", "aria-live": "polite", className: "sticky bottom-4 z-10 w-fit rounded-lg bg-popover px-3 py-2 text-xs text-popover-foreground empty:hidden", children: feedback })
|
|
403
|
+
] });
|
|
404
|
+
}
|
|
405
|
+
export {
|
|
406
|
+
ColorPlayground
|
|
407
|
+
};
|
|
408
|
+
//# sourceMappingURL=ColorPlayground.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/design_system/gallery/components/ColorPlayground.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { ArrowLeft, ArrowRight, GripVertical, Check, Copy, RotateCcw, Sun, Moon, Paintbrush, MousePointer2, Layers, CircleCheck } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@open-mercato/ui/primitives/select'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\nimport { readThemeTokens, type ThemeTokens } from './themeTokens'\nimport { contrastRatio, normalizeHex } from './colorPreview'\nimport { createColorStudio, exportColorStudio, type ColorStudio, type ColorStop, type Harmony, type NeutralTone, type Shade } from './colorStudio'\nimport { ColorStudioSpecimen } from './ColorStudioSpecimen'\nimport { ColorStudioCompositions } from './ColorStudioCompositions'\n\nconst INITIAL_COLOR = '#F4700D'\nconst PRESETS = ['#BC9AFF', INITIAL_COLOR, '#2563EB', '#0F766E', '#BE185D']\nconst THEMES = ['light', 'dark'] as const\nconst ROLE_ICONS = { action: Paintbrush, selection: MousePointer2, surface: Layers, status: CircleCheck }\n\nfunction ShadeSelect({ label, scale, value, onChange }: { label: string; scale: ColorStop[]; value: Shade; onChange: (shade: Shade) => void }) {\n const id = React.useId()\n return <div className=\"min-w-0 space-y-2\">\n <Label htmlFor={id}>{label}</Label>\n <Select value={String(value)} onValueChange={next => {\n const stop = scale.find(item => String(item.step) === next)\n if (stop) onChange(stop.step)\n }}>\n <SelectTrigger id={id} aria-label={label}><SelectValue /></SelectTrigger>\n <SelectContent>{scale.map(stop => <SelectItem key={stop.step} value={String(stop.step)}>\n <span className=\"inline-flex items-center gap-2\"><span aria-hidden className=\"size-4 shrink-0 rounded-sm border border-border\" style={{ backgroundColor: stop.hex }} /><span className=\"font-mono text-xs\">{stop.step} \u00B7 {stop.hex}</span></span>\n </SelectItem>)}</SelectContent>\n </Select>\n </div>\n}\n\nconst COLOR_ROLES = ['primary', 'secondary', 'tertiary'] as const\ntype ColorRole = typeof COLOR_ROLES[number]\n\nfunction ColorRoleSwap({ role, disabled, onSwap, onDragStart, onDragEnd }: {\n role: ColorRole\n disabled: boolean\n onSwap: (first: ColorRole, second: ColorRole) => void\n onDragStart: (event: React.DragEvent) => void\n onDragEnd: () => void\n}) {\n const t = useT()\n const index = COLOR_ROLES.indexOf(role)\n return <div className=\"flex items-center gap-1\">\n <span draggable={!disabled} onDragStart={onDragStart} onDragEnd={onDragEnd} title={t('design_system.colorStudio.dragColor')} className=\"inline-flex size-8 cursor-grab items-center justify-center text-muted-foreground active:cursor-grabbing\" aria-hidden>\n <GripVertical className=\"size-4\" />\n </span>\n {(['left', 'right'] as const).map(direction => {\n const target = COLOR_ROLES[index + (direction === 'left' ? -1 : 1)]\n const Icon = direction === 'left' ? ArrowLeft : ArrowRight\n return <Button key={direction} type=\"button\" variant=\"ghost\" size=\"icon\" disabled={disabled || !target} aria-label={`${t(`design_system.colorStudio.move${direction === 'left' ? 'Left' : 'Right'}`)}: ${t(`design_system.colorStudio.${role}`)}`} className=\"shrink-0 text-muted-foreground\" onClick={() => { if (target) onSwap(role, target) }}>\n <Icon aria-hidden className=\"size-4\" />\n </Button>\n })}\n </div>\n}\n\nexport function ColorPlayground({ initialSeeds, initialActionShades, initialView = 'compare', logo, onStudioChange }: {\n initialSeeds?: ColorStudio['seeds']\n initialActionShades?: { light?: Shade; dark?: Shade }\n initialView?: 'light' | 'dark' | 'compare'\n logo?: string | null\n onStudioChange?: (studio: ColorStudio, valid: boolean) => void\n} = {}) {\n const t = useT()\n const id = React.useId()\n const [color, setColor] = React.useState(initialSeeds?.primary ?? INITIAL_COLOR)\n const [draft, setDraft] = React.useState(initialSeeds?.primary ?? INITIAL_COLOR)\n const [harmony, setHarmony] = React.useState<Harmony>('triadic')\n const [supporting, setSupporting] = React.useState<{ secondary?: string; tertiary?: string }>(initialSeeds ? { secondary: initialSeeds.secondary, tertiary: initialSeeds.tertiary } : {})\n const [supportingDrafts, setSupportingDrafts] = React.useState<{ secondary?: string; tertiary?: string }>(initialSeeds ? { secondary: initialSeeds.secondary, tertiary: initialSeeds.tertiary } : {})\n const [neutral, setNeutral] = React.useState<NeutralTone>('neutral')\n const [view, setView] = React.useState<'light' | 'dark' | 'compare'>(initialView)\n const [actionShades, setActionShades] = React.useState<{ light?: Shade; dark?: Shade }>(initialActionShades ?? {})\n const [hostTokens, setHostTokens] = React.useState<ThemeTokens | null>(null)\n const [matrixForeground, setMatrixForeground] = React.useState<Shade>(900)\n const [matrixBackground, setMatrixBackground] = React.useState<Shade>(50)\n const [draggedRole, setDraggedRole] = React.useState<ColorRole | null>(null)\n const [dropRole, setDropRole] = React.useState<ColorRole | null>(null)\n const [feedback, setFeedback] = React.useState('')\n const [resetVersion, setResetVersion] = React.useState(0)\n const invalid = !normalizeHex(draft)\n const hasManualColors = Object.keys(supportingDrafts).length > 0\n const studio = React.useMemo(() => createColorStudio(color, neutral, actionShades, { harmony, ...supporting }), [color, neutral, actionShades, harmony, supporting])\n\n React.useEffect(() => {\n onStudioChange?.(studio, !invalid && Object.values(supportingDrafts).every(value => Boolean(normalizeHex(value))))\n }, [studio, invalid, supportingDrafts, onStudioChange])\n\n const matrixText = studio.scale.find(stop => stop.step === matrixForeground)!.hex\n const matrixSurface = studio.scale.find(stop => stop.step === matrixBackground)!.hex\n const matrixRatio = contrastRatio(matrixText, matrixSurface)\n\n React.useEffect(() => { setHostTokens(readThemeTokens(document.styleSheets)) }, [])\n\n function chooseColor(value: string) {\n setDraft(value)\n const normalized = normalizeHex(value)\n if (normalized) setColor(normalized)\n setFeedback('')\n }\n\n function swapColors(first: keyof ColorStudio['seeds'], second: keyof ColorStudio['seeds']) {\n if (invalid || Object.values(supportingDrafts).some(value => !normalizeHex(value))) return\n const next = { ...studio.seeds, [first]: studio.seeds[second], [second]: studio.seeds[first] }\n setColor(next.primary)\n setDraft(next.primary)\n setSupporting({ secondary: next.secondary, tertiary: next.tertiary })\n setSupportingDrafts({ secondary: next.secondary, tertiary: next.tertiary })\n if (first === 'primary' || second === 'primary') setActionShades({})\n setFeedback(t('design_system.colorStudio.swapped'))\n }\n\n function reset() {\n chooseColor(INITIAL_COLOR)\n setNeutral('neutral')\n setHarmony('triadic')\n setSupporting({})\n setSupportingDrafts({})\n setView(initialView)\n setActionShades({})\n setMatrixForeground(900)\n setMatrixBackground(50)\n setResetVersion(previous => previous + 1)\n }\n\n async function copy(value: string, message: string) {\n try {\n await navigator.clipboard.writeText(value)\n setFeedback(message)\n } catch { setFeedback(t('design_system.colorPreview.copyFailed')) }\n }\n\n const swapDisabled = invalid || Object.values(supportingDrafts).some(value => !normalizeHex(value))\n function dragStart(role: ColorRole, event: React.DragEvent) {\n if (swapDisabled) { event.preventDefault(); return }\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', role)\n setDraggedRole(role)\n }\n function dragEnd() { setDraggedRole(null); setDropRole(null) }\n function dropProps(role: ColorRole) {\n return {\n 'data-color-role': role,\n className: `space-y-2 rounded-lg transition-shadow ${dropRole === role ? 'ring-2 ring-ring' : ''}`,\n onDragOver: (event: React.DragEvent) => {\n if (!draggedRole || draggedRole === role || swapDisabled) return\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n setDropRole(role)\n },\n onDragLeave: (event: React.DragEvent<HTMLDivElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setDropRole(null)\n },\n onDrop: (event: React.DragEvent) => {\n event.preventDefault()\n if (draggedRole && draggedRole !== role && !swapDisabled) swapColors(draggedRole, role)\n dragEnd()\n },\n }\n }\n\n return <section className=\"space-y-8\" aria-labelledby={`${id}-title`} data-example=\"color-playground\">\n <header className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"max-w-2xl space-y-2\">\n <h2 id={`${id}-title`} className=\"text-2xl font-medium tracking-tight\">{t('design_system.colorStudio.title')}</h2>\n <p className=\"text-sm leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.description')}</p>\n </div>\n <Button type=\"button\" variant=\"ghost\" onClick={reset}><RotateCcw aria-hidden />{t('design_system.colorPreview.reset')}</Button>\n </header>\n\n <div className=\"space-y-6 rounded-xl border border-border bg-card p-5 sm:p-6\">\n <div className=\"grid gap-5 sm:grid-cols-3\">\n <div {...dropProps('primary')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label htmlFor={`${id}-hex`}>{t('design_system.colorStudio.primary')}</Label>\n <ColorRoleSwap role=\"primary\" disabled={swapDisabled} onSwap={swapColors} onDragStart={event => dragStart('primary', event)} onDragEnd={dragEnd} />\n </div>\n <div className=\"flex items-center gap-2\">\n <Input type=\"color\" value={color} aria-label={t('design_system.colorPreview.color')} onChange={event => chooseColor(event.target.value)} className=\"w-12 shrink-0 p-1\" inputClassName=\"h-full w-full cursor-pointer p-0\" />\n <Input id={`${id}-hex`} aria-label={t('design_system.colorPreview.hex')} value={draft} onChange={event => chooseColor(event.target.value)} onBlur={() => { const value = normalizeHex(draft); if (value) setDraft(value) }} inputClassName=\"font-mono\" aria-invalid={invalid} aria-describedby={invalid ? `${id}-error` : undefined} spellCheck={false} maxLength={7} />\n </div>\n </div>\n {(['secondary', 'tertiary'] as const).map(role => {\n const value = supportingDrafts[role] ?? studio.seeds[role]\n const valid = Boolean(normalizeHex(value))\n const change = (next: string) => {\n setSupportingDrafts(previous => ({ ...previous, [role]: next }))\n const normalized = normalizeHex(next)\n if (normalized) setSupporting(previous => ({ ...previous, [role]: normalized }))\n setFeedback('')\n }\n return <div key={role} {...dropProps(role)}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label htmlFor={`${id}-${role}`}>{t(`design_system.colorStudio.${role}`)}</Label>\n <ColorRoleSwap role={role} disabled={swapDisabled} onSwap={swapColors} onDragStart={event => dragStart(role, event)} onDragEnd={dragEnd} />\n </div>\n <div className=\"flex items-center gap-2\">\n <Input type=\"color\" value={studio.seeds[role]} aria-label={t(`design_system.colorStudio.${role}`)} onChange={event => change(event.target.value)} className=\"w-12 shrink-0 p-1\" inputClassName=\"h-full w-full cursor-pointer p-0\" />\n <Input id={`${id}-${role}`} value={value} aria-label={`${t(`design_system.colorStudio.${role}`)} HEX`} onChange={event => change(event.target.value)} inputClassName=\"font-mono\" aria-invalid={!valid} aria-describedby={!valid ? `${id}-${role}-error` : undefined} maxLength={7} spellCheck={false} />\n </div>\n {!valid ? <p id={`${id}-${role}-error`} role=\"alert\" className=\"text-xs text-status-error-text\">{t(`design_system.colorStudio.${role}Invalid`)}</p> : null}\n </div>\n })}\n </div>\n <div className=\"grid gap-5 sm:grid-cols-2 xl:grid-cols-4\">\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-harmony`}>{t('design_system.colorStudio.harmony')}</Label>\n <Select value={harmony} onValueChange={value => { if (value === 'analogous' || value === 'triadic' || value === 'split') { setHarmony(value); setSupporting({}); setSupportingDrafts({}); setFeedback('') } }}>\n <SelectTrigger id={`${id}-harmony`} aria-label={t('design_system.colorStudio.harmony')} aria-describedby={`${id}-harmony-description`}><SelectValue /></SelectTrigger>\n <SelectContent>{(['analogous', 'triadic', 'split'] as const).map(mode => <SelectItem key={mode} value={mode}>{t(`design_system.colorStudio.harmony.${mode}`)}</SelectItem>)}</SelectContent>\n </Select>\n <p id={`${id}-harmony-description`} className=\"text-xs leading-relaxed text-muted-foreground\">{t(`design_system.colorStudio.harmonyDescription.${harmony}`)}</p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-neutral`}>{t('design_system.colorStudio.neutral')}</Label>\n <Select value={neutral} onValueChange={value => { if (value === 'neutral' || value === 'warm' || value === 'cool') { setNeutral(value); setFeedback('') } }}>\n <SelectTrigger id={`${id}-neutral`} aria-label={t('design_system.colorStudio.neutral')}><SelectValue /></SelectTrigger>\n <SelectContent>{(['neutral', 'warm', 'cool'] as const).map(tone => <SelectItem key={tone} value={tone}>{t(`design_system.colorStudio.neutral.${tone}`)}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n {THEMES.map(theme => <ShadeSelect key={theme} label={t(`design_system.colorStudio.${theme}Action`)} scale={studio.scale} value={studio[theme].actionStep} onChange={shade => { setActionShades(previous => ({ ...previous, [theme]: shade })); setFeedback('') }} />)}\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-4 border-t border-border pt-4\">\n <div className=\"max-w-2xl space-y-2\">\n <p className=\"text-sm leading-relaxed\">{t('design_system.colorStudio.harmonyHint')}</p>\n <p role=\"status\" className=\"text-xs leading-relaxed text-muted-foreground\">{t(`design_system.colorStudio.${hasManualColors ? 'harmonyManual' : 'harmonyAutomatic'}`)}</p>\n </div>\n {hasManualColors ? <Button type=\"button\" size=\"sm\" variant=\"secondary\" onClick={() => { setSupporting({}); setSupportingDrafts({}); setFeedback(t('design_system.colorStudio.harmonyRestored')) }}><RotateCcw aria-hidden />{t('design_system.colorStudio.auto')}</Button> : null}\n </div>\n {invalid ? <p id={`${id}-error`} role=\"alert\" className=\"text-sm text-status-error-text\">{t('design_system.colorPreview.invalid')}</p> : null}\n <div className=\"flex flex-wrap gap-2\">{PRESETS.map(preset => <Button type=\"button\" key={preset} variant=\"ghost\" size=\"sm\" onClick={() => chooseColor(preset)} aria-pressed={color === preset}>\n <span aria-hidden className=\"size-4 shrink-0 rounded-full border border-border\" style={{ backgroundColor: preset }} /><span className=\"font-mono text-xs\">{preset}</span>{color === preset ? <Check className=\"size-3\" aria-hidden /> : null}\n </Button>)}</div>\n <div className=\"space-y-3 border-t border-border pt-5\">\n <div className=\"space-y-1\"><h3 className=\"text-sm font-medium\">{t('design_system.colorStudio.scale')}</h3><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.scaleHint')}</p></div>\n {([\n { role: 'primary', scale: studio.scale, seed: studio.seeds.primary },\n { role: 'secondary', scale: studio.secondaryScale, seed: studio.seeds.secondary },\n { role: 'tertiary', scale: studio.tertiaryScale, seed: studio.seeds.tertiary },\n ] as const).map(({ role, scale, seed }) => <div key={role} className=\"space-y-2\">\n <h4 className=\"text-xs font-medium text-muted-foreground\">{t(`design_system.colorStudio.${role}`)}</h4>\n <div className=\"grid grid-cols-3 gap-1 sm:grid-cols-6 xl:grid-cols-11\">\n {scale.map(stop => <Button type=\"button\" key={stop.step} variant=\"ghost\" className=\"h-24 min-w-0 flex-col items-start justify-end gap-1 rounded-lg px-2 py-3 text-left\" style={{ backgroundColor: stop.hex, color: contrastRatio(stop.hex, '#FFFFFF') >= contrastRatio(stop.hex, '#000000') ? '#FFFFFF' : '#000000' }} aria-label={`${t('design_system.colorStudio.copyColor')} ${t(`design_system.colorStudio.${role}`)} ${stop.step} ${stop.hex}`} onClick={() => copy(stop.hex, `${t('design_system.colorStudio.copiedColor')}: ${stop.hex}`)}>\n <span className=\"flex w-full items-center justify-between gap-1 text-xs\"><span className=\"font-semibold\">{stop.step}</span>{stop.hex === seed ? <span title={t('design_system.colorStudio.base')}><Paintbrush className=\"size-3\" aria-hidden /><span className=\"sr-only\">{t('design_system.colorStudio.base')}</span></span> : null}</span>\n <code className=\"text-xs font-normal\">{stop.hex}</code>\n </Button>)}\n </div>\n </div>)}\n </div>\n </div>\n\n <section className=\"space-y-4\" aria-labelledby={`${id}-preview-title`}>\n <div className=\"flex flex-wrap items-end justify-between gap-4\">\n <div className=\"max-w-xl space-y-1\"><h3 id={`${id}-preview-title`} className=\"text-lg font-medium\">{t('design_system.colorStudio.preview')}</h3><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.previewHint')}</p></div>\n <SegmentedControl value={view} onValueChange={value => { if (value === 'light' || value === 'dark' || value === 'compare') setView(value) }} aria-label={t('design_system.colorPreview.theme')}>\n <SegmentedControlItem value=\"light\">{t('design_system.colorPreview.light')}</SegmentedControlItem>\n <SegmentedControlItem value=\"dark\">{t('design_system.colorPreview.dark')}</SegmentedControlItem>\n <SegmentedControlItem value=\"compare\">{t('design_system.colorStudio.compare')}</SegmentedControlItem>\n </SegmentedControl>\n </div>\n <div className={view === 'compare' ? 'grid min-w-0 gap-5 xl:grid-cols-2' : 'min-w-0'}>\n {THEMES.filter(theme => view === 'compare' || theme === view).map(theme => <div key={theme} className=\"min-w-0 space-y-3\">\n <p className=\"flex items-center gap-2 text-xs font-medium text-muted-foreground\">{theme === 'light' ? <Sun className=\"size-4\" aria-hidden /> : <Moon className=\"size-4\" aria-hidden />}{t(`design_system.colorPreview.${theme}`)}</p>\n <ColorStudioCompositions theme={theme} tokens={{ ...hostTokens?.[theme], ...studio[theme].tokens }} />\n <ColorStudioSpecimen logo={logo} key={`${theme}-${resetVersion}`} theme={theme} tokens={{ ...hostTokens?.[theme], ...studio[theme].tokens }} />\n </div>)}\n </div>\n </section>\n\n <section className=\"space-y-4\" aria-labelledby={`${id}-roles-title`}>\n <h3 id={`${id}-roles-title`} className=\"text-lg font-medium\">{t('design_system.colorStudio.roles')}</h3>\n <div className=\"grid gap-5 sm:grid-cols-2 xl:grid-cols-4\">{(Object.keys(ROLE_ICONS) as (keyof typeof ROLE_ICONS)[]).map(role => {\n const Icon = ROLE_ICONS[role]\n return <div key={role} className=\"space-y-3 border-t border-border pt-4\"><Icon aria-hidden className=\"size-5 text-muted-foreground\" /><h4 className=\"text-sm font-medium\">{t(`design_system.colorStudio.roles.${role}`)}</h4><p className=\"text-xs leading-relaxed text-muted-foreground\">{t(`design_system.colorStudio.roles.${role}Hint`)}</p></div>\n })}</div>\n </section>\n\n <section className=\"space-y-4\" aria-labelledby={`${id}-contrast-title`}>\n <div className=\"max-w-3xl space-y-1\"><h3 id={`${id}-contrast-title`} className=\"text-lg font-medium\">{t('design_system.colorStudio.contrast')}</h3><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.contrastHint')}</p></div>\n <div className=\"grid gap-5 rounded-xl border border-border p-5 lg:grid-cols-2\">\n <div className=\"space-y-4\">\n <div className=\"space-y-1\"><h4 className=\"text-sm font-medium\">{t('design_system.colorStudio.matrix')}</h4><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.matrixHint')}</p></div>\n <div className=\"grid grid-cols-2 gap-3\"><ShadeSelect label={t('design_system.colorStudio.foreground')} scale={studio.scale} value={matrixForeground} onChange={setMatrixForeground} /><ShadeSelect label={t('design_system.colorStudio.background')} scale={studio.scale} value={matrixBackground} onChange={setMatrixBackground} /></div>\n </div>\n <div className=\"flex items-center justify-between gap-4 rounded-lg p-6\" style={{ backgroundColor: matrixSurface, color: matrixText }}>\n <div className=\"space-y-2\"><span className=\"text-4xl font-medium\">Aa</span><p className=\"text-sm\">{t('design_system.colorStudio.pair.body')}</p></div>\n <div className=\"space-y-2 rounded-md bg-card px-3 py-2 text-right text-card-foreground\"><p className=\"font-mono text-xl font-semibold\">{matrixRatio.toFixed(2)}:1</p><p className=\"text-xs\">{t(`design_system.colorStudio.${matrixRatio >= 4.5 ? 'pass' : 'fail'}`)}</p></div>\n </div>\n </div>\n <div className=\"overflow-hidden rounded-xl border border-border\">\n <div className=\"grid grid-cols-3 gap-3 bg-muted px-4 py-3 text-xs font-medium text-muted-foreground\"><span>{t('design_system.colorStudio.pair')}</span>{THEMES.map(theme => <span key={theme}>{t(`design_system.colorPreview.${theme}`)}</span>)}</div>\n <dl className=\"divide-y divide-border\">{studio.light.pairs.map(pair => <div key={pair.id} className=\"grid grid-cols-3 items-center gap-3 px-4 py-3\">\n <dt className=\"space-y-1\"><p className=\"text-sm font-medium\">{t(`design_system.colorStudio.pair.${pair.id}`)}</p><p className=\"text-xs text-muted-foreground\">{t('design_system.colorStudio.minimum')}: {pair.minimum}:1</p></dt>\n {THEMES.map(theme => {\n const item = studio[theme].pairs.find(candidate => candidate.id === pair.id)!\n const passing = item.ratio >= item.minimum\n return <dd key={theme} className=\"flex flex-wrap items-center gap-3\">\n <span aria-hidden className=\"inline-flex size-10 shrink-0 items-center justify-center rounded-md border border-border font-semibold\" style={{ backgroundColor: item.background, color: item.foreground }}>Aa</span>\n <div className=\"space-y-1\"><p className=\"font-mono text-sm\">{item.ratio.toFixed(2)}:1</p><Badge variant={passing ? 'success' : 'error'}>{t(`design_system.colorStudio.${passing ? 'pass' : 'fail'}`)}</Badge><p className=\"font-mono text-xs text-muted-foreground\">{item.foreground}<br />{item.background}</p></div>\n </dd>\n })}\n </div>)}</dl>\n </div>\n </section>\n\n <section className=\"space-y-4 border-t border-border pt-6\" aria-labelledby={`${id}-export-title`}>\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <div className=\"max-w-xl space-y-1\"><h3 id={`${id}-export-title`} className=\"text-lg font-medium\">{t('design_system.colorStudio.export')}</h3><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.exportHint')}</p></div>\n <div className=\"flex flex-wrap gap-2\">{(['css', 'json'] as const).map(format => <Button type=\"button\" key={format} variant=\"secondary\" onClick={() => copy(exportColorStudio(studio, format), t('design_system.colorPreview.copied'))}><Copy aria-hidden />{t(`design_system.colorStudio.${format === 'css' ? 'copyCss' : 'copyJson'}`)}</Button>)}</div>\n </div>\n <div className=\"max-w-3xl space-y-1\"><h4 className=\"text-sm font-medium\">{t('design_system.colorStudio.algorithm')}</h4><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.algorithmHint')}</p></div>\n <section className=\"rounded-lg border border-border\"><h3 className=\"p-4 text-sm font-medium\">{t('design_system.colorStudio.showTokens')}</h3><pre className=\"max-h-80 overflow-auto border-t border-border bg-muted p-4 text-xs leading-relaxed\"><code>{exportColorStudio(studio, 'css')}</code></pre></section>\n </section>\n <p role=\"status\" aria-live=\"polite\" className=\"sticky bottom-4 z-10 w-fit rounded-lg bg-popover px-3 py-2 text-xs text-popover-foreground empty:hidden\">{feedback}</p>\n </section>\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|