@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.
Files changed (416) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/build.mjs +11 -0
  3. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
  4. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  5. package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
  6. package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
  7. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
  8. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  9. package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
  10. package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
  11. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
  12. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  13. package/dist/modules/customers/lib/detailHelpers.js +4 -0
  14. package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
  15. package/dist/modules/customers/lib/todoCompatibility.js +5 -0
  16. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  17. package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
  18. package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
  19. package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  20. package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  21. package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  22. package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  23. package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  24. package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  25. package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  26. package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  27. package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  28. package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  29. package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  30. package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  31. package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  32. package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  33. package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  34. package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  35. package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  36. package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  37. package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  38. package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  39. package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  40. package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  41. package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  42. package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  43. package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  44. package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  45. package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  46. package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  47. package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  48. package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  49. package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  50. package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  51. package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  52. package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  53. package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  54. package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  55. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
  56. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
  57. package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
  58. package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
  59. package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
  60. package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  61. package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  62. package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
  63. package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
  64. package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  65. package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  66. package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  67. package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  68. package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
  69. package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
  70. package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
  71. package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
  72. package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  73. package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  74. package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  75. package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  76. package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  77. package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  78. package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  79. package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  80. package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  81. package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  82. package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  83. package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  84. package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  85. package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  86. package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  87. package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
  88. package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
  89. package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
  90. package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
  91. package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
  92. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
  93. package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
  94. package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
  95. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
  96. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
  97. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
  98. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
  99. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
  100. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
  101. package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
  102. package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
  103. package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
  104. package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
  105. package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
  106. package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
  107. package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
  108. package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
  109. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
  110. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
  111. package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
  112. package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
  113. package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
  114. package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
  115. package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
  116. package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
  117. package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
  118. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
  119. package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
  120. package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
  121. package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
  122. package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
  123. package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
  124. package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
  125. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
  126. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
  127. package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
  128. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
  129. package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
  130. package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
  131. package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
  132. package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
  133. package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
  134. package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
  135. package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
  136. package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
  137. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
  138. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
  139. package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
  140. package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
  141. package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
  142. package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
  143. package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
  144. package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
  145. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
  146. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
  147. package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
  148. package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
  149. package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
  150. package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
  151. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
  152. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
  153. package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
  154. package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
  155. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
  156. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
  157. package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
  158. package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
  159. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
  160. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
  161. package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
  162. package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
  163. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
  164. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
  165. package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
  166. package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
  167. package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
  168. package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
  169. package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
  170. package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
  171. package/dist/modules/design_system/gallery/demos/menus.js +150 -0
  172. package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
  173. package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
  174. package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
  175. package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
  176. package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
  177. package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
  178. package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
  179. package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
  180. package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
  181. package/dist/modules/design_system/gallery/demos/shell.js +330 -0
  182. package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
  183. package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
  184. package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
  185. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
  186. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
  187. package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
  188. package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
  189. package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
  190. package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
  191. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
  192. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
  193. package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
  194. package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
  195. package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
  196. package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
  197. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
  198. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
  199. package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
  200. package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
  201. package/dist/modules/design_system/gallery/entries/banners.js +123 -60
  202. package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
  203. package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
  204. package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
  205. package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
  206. package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
  207. package/dist/modules/design_system/gallery/entries/charts.js +532 -186
  208. package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
  209. package/dist/modules/design_system/gallery/entries/dates.js +191 -3
  210. package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
  211. package/dist/modules/design_system/gallery/entries/detail.js +118 -77
  212. package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
  213. package/dist/modules/design_system/gallery/entries/display.js +1449 -240
  214. package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
  215. package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
  216. package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
  217. package/dist/modules/design_system/gallery/entries/filters.js +231 -103
  218. package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
  219. package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
  220. package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
  221. package/dist/modules/design_system/gallery/entries/icons.js +29 -91
  222. package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
  223. package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
  224. package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
  225. package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
  226. package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
  227. package/dist/modules/design_system/gallery/entries/library.js +20 -0
  228. package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
  229. package/dist/modules/design_system/gallery/entries/messages.js +121 -103
  230. package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
  231. package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
  232. package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
  233. package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
  234. package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
  235. package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
  236. package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
  237. package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
  238. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
  239. package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
  240. package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
  241. package/dist/modules/design_system/gallery/presentation.js +108 -0
  242. package/dist/modules/design_system/gallery/presentation.js.map +7 -0
  243. package/dist/modules/design_system/gallery/registry.js +8 -5
  244. package/dist/modules/design_system/gallery/registry.js.map +2 -2
  245. package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
  246. package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
  247. package/dist/modules/design_system/i18n/de.json +7167 -0
  248. package/dist/modules/design_system/i18n/en.json +7167 -0
  249. package/dist/modules/design_system/i18n/es.json +7167 -0
  250. package/dist/modules/design_system/i18n/ko.json +7167 -0
  251. package/dist/modules/design_system/i18n/pl.json +7167 -0
  252. package/dist/modules/push_notifications/lib/queue.js +1 -31
  253. package/dist/modules/push_notifications/lib/queue.js.map +2 -2
  254. package/jest.config.cjs +1 -0
  255. package/jest.mocks/image.js +1 -0
  256. package/package.json +8 -8
  257. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
  258. package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
  259. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
  260. package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
  261. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
  262. package/src/modules/customers/lib/detailHelpers.ts +4 -0
  263. package/src/modules/customers/lib/todoCompatibility.ts +10 -0
  264. package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
  265. package/src/modules/design_system/gallery/assets/README.md +30 -0
  266. package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  267. package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  268. package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  269. package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  270. package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  271. package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  272. package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  273. package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  274. package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  275. package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  276. package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  277. package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  278. package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  279. package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  280. package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  281. package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  282. package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  283. package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  284. package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  285. package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  286. package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  287. package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  288. package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  289. package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  290. package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  291. package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  292. package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  293. package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  294. package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  295. package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  296. package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  297. package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  298. package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  299. package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  300. package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  301. package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  302. package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
  303. package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
  304. package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
  305. package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  306. package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  307. package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
  308. package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  309. package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  310. package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  311. package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  312. package/src/modules/design_system/gallery/assets/select-google.png +0 -0
  313. package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
  314. package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
  315. package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  316. package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  317. package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  318. package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  319. package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  320. package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  321. package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  322. package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  323. package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  324. package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  325. package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  326. package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  327. package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  328. package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  329. package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  330. package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
  331. package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
  332. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
  333. package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
  334. package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
  335. package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
  336. package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
  337. package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
  338. package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
  339. package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
  340. package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
  341. package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
  342. package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
  343. package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
  344. package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
  345. package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
  346. package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
  347. package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
  348. package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
  349. package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
  350. package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
  351. package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
  352. package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
  353. package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
  354. package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
  355. package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
  356. package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
  357. package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
  358. package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
  359. package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
  360. package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
  361. package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
  362. package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
  363. package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
  364. package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
  365. package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
  366. package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
  367. package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
  368. package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
  369. package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
  370. package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
  371. package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
  372. package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
  373. package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
  374. package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
  375. package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
  376. package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
  377. package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
  378. package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
  379. package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
  380. package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
  381. package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
  382. package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
  383. package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
  384. package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
  385. package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
  386. package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
  387. package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
  388. package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
  389. package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
  390. package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
  391. package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
  392. package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
  393. package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
  394. package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
  395. package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
  396. package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
  397. package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
  398. package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
  399. package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
  400. package/src/modules/design_system/gallery/entries/library.tsx +16 -0
  401. package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
  402. package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
  403. package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
  404. package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
  405. package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
  406. package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
  407. package/src/modules/design_system/gallery/presentation.ts +106 -0
  408. package/src/modules/design_system/gallery/registry.ts +8 -6
  409. package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
  410. package/src/modules/design_system/i18n/de.json +7112 -3
  411. package/src/modules/design_system/i18n/en.json +7112 -3
  412. package/src/modules/design_system/i18n/es.json +7112 -3
  413. package/src/modules/design_system/i18n/ko.json +7112 -3
  414. package/src/modules/design_system/i18n/pl.json +7112 -3
  415. package/src/modules/push_notifications/AGENTS.md +9 -5
  416. 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
+ }