@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 -9
  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,166 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ArrowUpRight, Check, Clock3, Heart, Layers, MoveUpRight, Palette, Sparkles } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { Avatar, AvatarStack } from "@open-mercato/ui/primitives/avatar";
7
+ import { Button } from "@open-mercato/ui/primitives/button";
8
+ import { IconButton } from "@open-mercato/ui/primitives/icon-button";
9
+ import { Checkbox } from "@open-mercato/ui/primitives/checkbox";
10
+ import product from "../assets/style-studio-product.png";
11
+ import portrait from "../assets/landing-teams-01.png";
12
+ import creator from "../assets/contact-support-portrait.png";
13
+ import workspace from "../assets/blog-photo-0.png";
14
+ const assetSource = (asset) => typeof asset === "string" ? asset : asset.src;
15
+ const CARD = "flex min-h-112 min-w-0 flex-col overflow-hidden rounded-xl border border-border shadow-sm";
16
+ const TASKS = ["collect", "explore", "share"];
17
+ const CATEGORIES = ["identity", "digital", "editorial"];
18
+ function ColorStudioCompositions({ theme, tokens }) {
19
+ const t = useT();
20
+ const id = React.useId();
21
+ const copy = (key) => t(`design_system.colorStudio.compositions.${key}`);
22
+ const [plan, setPlan] = React.useState("solo");
23
+ const [category, setCategory] = React.useState("identity");
24
+ const [completed, setCompleted] = React.useState(["collect"]);
25
+ const [saved, setSaved] = React.useState(false);
26
+ const [following, setFollowing] = React.useState(false);
27
+ const [productSaved, setProductSaved] = React.useState(false);
28
+ const primary = { backgroundColor: tokens["--primary"], color: tokens["--primary-foreground"] };
29
+ const secondary = { backgroundColor: tokens["--studio-secondary-soft"], color: tokens["--studio-secondary-soft-foreground"] };
30
+ const tertiary = { backgroundColor: tokens["--studio-tertiary"], color: tokens["--studio-tertiary-foreground"] };
31
+ const gradient = `linear-gradient(145deg, ${tokens["--accent"]}, ${tokens["--studio-secondary-soft"]}, ${tokens["--studio-tertiary-soft"]})`;
32
+ const appointments = [
33
+ { key: "meeting", time: "09:00\u201310:00", background: tokens["--accent"], foreground: tokens["--accent-foreground"], accent: tokens["--primary"] },
34
+ { key: "research", time: "11:00\u201312:30", background: tokens["--studio-secondary-soft"], foreground: tokens["--studio-secondary-soft-foreground"], accent: tokens["--studio-secondary"] },
35
+ { key: "review", time: "14:00\u201315:00", background: tokens["--studio-tertiary-soft"], foreground: tokens["--studio-tertiary-soft-foreground"], accent: tokens["--studio-tertiary"] }
36
+ ];
37
+ return /* @__PURE__ */ jsxs("section", { "aria-labelledby": `${id}-title`, "data-composition-theme": theme, style: tokens, className: "@container/cards min-w-0 space-y-6 rounded-xl bg-background p-4 text-foreground sm:p-6", children: [
38
+ /* @__PURE__ */ jsxs("div", { className: "flex items-end justify-between gap-4", children: [
39
+ /* @__PURE__ */ jsx("h4", { id: `${id}-title`, className: "text-2xl font-medium tracking-tight", children: copy("galleryTitle") }),
40
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: copy("live") })
41
+ ] }),
42
+ /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 auto-rows-fr gap-6 @md/cards:grid-cols-2 @7xl/cards:grid-cols-4", children: [
43
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} gap-6 bg-card p-6`, "aria-label": t("design_system.colorStudio.agenda"), children: [
44
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
45
+ /* @__PURE__ */ jsx(Clock3, { "aria-hidden": true, className: "size-5 text-muted-foreground" }),
46
+ /* @__PURE__ */ jsx("h5", { className: "text-xl font-medium tracking-tight", children: t("design_system.colorStudio.agenda") }),
47
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: copy("today") })
48
+ ] }),
49
+ /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col gap-3", children: appointments.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2 rounded-lg border-l-4 px-4 py-3", style: { backgroundColor: item.background, color: item.foreground, borderLeftColor: item.accent }, children: [
50
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: t(`design_system.colorStudio.${item.key}`) }),
51
+ /* @__PURE__ */ jsx("p", { className: "text-xs", children: item.time })
52
+ ] }, item.key)) }),
53
+ /* @__PURE__ */ jsxs(AvatarStack, { size: "xs", children: [
54
+ /* @__PURE__ */ jsx(Avatar, { label: copy("creatorName"), src: assetSource(creator) }),
55
+ /* @__PURE__ */ jsx(Avatar, { label: copy("designerName"), src: assetSource(portrait) }),
56
+ /* @__PURE__ */ jsx(Avatar, { label: copy("collaboratorName"), src: assetSource(workspace) })
57
+ ] })
58
+ ] }),
59
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} relative justify-between border-transparent p-6`, style: secondary, "aria-label": copy("poster"), children: [
60
+ /* @__PURE__ */ jsxs("div", { className: "relative -mx-6 -mt-6 h-56 overflow-hidden", "aria-hidden": true, children: [
61
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-6 rounded-full border-8", style: { borderColor: tokens["--studio-secondary"] } }),
62
+ /* @__PURE__ */ jsx("img", { src: assetSource(portrait), alt: "", className: "relative mx-auto h-full w-full object-contain object-bottom", loading: "lazy" }),
63
+ /* @__PURE__ */ jsx("div", { className: "absolute -right-8 -top-8 size-40 rounded-full border-8", style: { borderColor: tokens["--studio-tertiary"] } })
64
+ ] }),
65
+ /* @__PURE__ */ jsxs("div", { className: "relative space-y-4 pt-6", children: [
66
+ /* @__PURE__ */ jsx(Sparkles, { "aria-hidden": true, className: "size-6" }),
67
+ /* @__PURE__ */ jsx("h5", { className: "text-4xl font-semibold leading-tight tracking-tight", children: copy("posterTitle") }),
68
+ /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed", children: copy("posterDescription") })
69
+ ] })
70
+ ] }),
71
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} border-transparent bg-card`, "aria-label": copy("creator"), children: [
72
+ /* @__PURE__ */ jsxs("div", { className: "relative min-h-56 flex-1 overflow-hidden", style: { background: gradient }, children: [
73
+ /* @__PURE__ */ jsx("img", { src: assetSource(creator), alt: copy("creatorPhoto"), className: "absolute inset-0 h-full w-full object-cover", loading: "lazy" }),
74
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 bottom-0 h-24", style: { background: `linear-gradient(transparent, ${tokens["--primary"]})` }, "aria-hidden": true })
75
+ ] }),
76
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 p-6", style: primary, children: [
77
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-wider", children: copy("creator") }),
78
+ /* @__PURE__ */ jsx("h5", { className: "text-3xl font-medium leading-tight tracking-tight", children: copy("creatorName") }),
79
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
80
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: copy("creatorRole") }),
81
+ /* @__PURE__ */ jsx(IconButton, { type: "button", variant: "modifiable", size: "lg", "aria-label": copy(following ? "unfollow" : "follow"), "aria-pressed": following, onClick: () => setFollowing((value) => !value), style: { color: "inherit" }, children: following ? /* @__PURE__ */ jsx(Check, {}) : /* @__PURE__ */ jsx(ArrowUpRight, {}) })
82
+ ] }),
83
+ /* @__PURE__ */ jsx("p", { role: "status", className: "text-xs empty:hidden", children: following ? copy("following") : "" })
84
+ ] })
85
+ ] }),
86
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} justify-between gap-6 p-6`, style: { background: gradient }, "aria-label": copy("product"), children: [
87
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
88
+ /* @__PURE__ */ jsx("span", { className: "rounded-md bg-card px-3 py-2 text-xs font-medium text-card-foreground", children: copy("productLabel") }),
89
+ /* @__PURE__ */ jsx(IconButton, { type: "button", variant: "white", size: "lg", "aria-label": copy(productSaved ? "removeProduct" : "saveProduct"), "aria-pressed": productSaved, onClick: () => setProductSaved((value) => !value), children: /* @__PURE__ */ jsx(Heart, { className: productSaved ? "fill-current" : "" }) })
90
+ ] }),
91
+ /* @__PURE__ */ jsx("img", { src: assetSource(product), alt: copy("productPhoto"), className: "h-56 w-full rounded-lg object-contain", loading: "lazy" }),
92
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2 rounded-lg bg-card p-4 text-card-foreground", children: [
93
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: copy("productCollection") }),
94
+ /* @__PURE__ */ jsx("h5", { className: "text-2xl font-medium tracking-tight", children: copy("productTitle") }),
95
+ /* @__PURE__ */ jsx("p", { role: "status", className: "text-sm text-muted-foreground", children: copy(productSaved ? "productSaved" : "productHint") })
96
+ ] })
97
+ ] }),
98
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} gap-6 bg-card p-6`, "aria-label": copy("plans"), children: [
99
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
100
+ /* @__PURE__ */ jsx(Layers, { "aria-hidden": true, className: "size-6", style: { color: tokens["--primary"] } }),
101
+ /* @__PURE__ */ jsx("h5", { className: "text-2xl font-medium tracking-tight", children: copy("plans") }),
102
+ /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: copy("plansHint") })
103
+ ] }),
104
+ /* @__PURE__ */ jsx("div", { className: "space-y-3", children: ["solo", "team"].map((choice) => /* @__PURE__ */ jsxs(Button, { type: "button", variant: "outline", "aria-pressed": plan === choice, onClick: () => setPlan(choice), className: "h-auto w-full justify-between gap-3 whitespace-normal p-4 text-left", style: plan === choice ? { backgroundColor: tokens["--accent"], color: tokens["--accent-foreground"], borderColor: tokens["--primary"] } : void 0, children: [
105
+ /* @__PURE__ */ jsxs("span", { className: "space-y-1", children: [
106
+ /* @__PURE__ */ jsx("span", { className: "block text-base font-medium", children: copy(choice) }),
107
+ /* @__PURE__ */ jsx("span", { className: "block text-xs font-normal", children: copy(`${choice}Hint`) })
108
+ ] }),
109
+ plan === choice ? /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "size-5 shrink-0" }) : /* @__PURE__ */ jsx("span", { className: "size-5 shrink-0 rounded-full border border-border", "aria-hidden": true })
110
+ ] }, choice)) }),
111
+ /* @__PURE__ */ jsxs("div", { className: "mt-auto space-y-3 border-t border-border pt-5", children: [
112
+ /* @__PURE__ */ jsx("p", { role: "status", className: "text-sm font-medium", children: copy(plan === "solo" ? "soloSelected" : "teamSelected") }),
113
+ /* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: copy("planNote") })
114
+ ] })
115
+ ] }),
116
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} gap-6 bg-card p-6`, "aria-label": copy("categories"), children: [
117
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
118
+ /* @__PURE__ */ jsx(Palette, { "aria-hidden": true, className: "size-6 text-muted-foreground" }),
119
+ /* @__PURE__ */ jsx("h5", { className: "text-2xl font-medium tracking-tight", children: copy("categories") })
120
+ ] }),
121
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: CATEGORIES.map((choice) => /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", "aria-pressed": category === choice, onClick: () => setCategory(choice), style: category === choice ? tertiary : void 0, children: copy(choice) }, choice)) }),
122
+ /* @__PURE__ */ jsx("div", { className: "relative flex min-h-36 flex-1 items-center justify-center overflow-hidden rounded-lg p-6", style: { background: gradient }, "aria-hidden": true, children: /* @__PURE__ */ jsx("div", { className: `flex size-28 items-center justify-center shadow-lg ${category === "identity" ? "rounded-full" : category === "digital" ? "rotate-12 rounded-xl" : "-rotate-6 rounded-md"}`, style: category === "digital" ? secondary : tertiary, children: category === "identity" ? /* @__PURE__ */ jsx(Sparkles, { className: "size-12" }) : category === "digital" ? /* @__PURE__ */ jsx(Layers, { className: "size-12" }) : /* @__PURE__ */ jsx(Palette, { className: "size-12" }) }) }),
123
+ /* @__PURE__ */ jsxs("div", { role: "status", className: "space-y-2", children: [
124
+ /* @__PURE__ */ jsx("h6", { className: "text-lg font-medium", children: copy(`${category}Title`) }),
125
+ /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: copy(`${category}Description`) })
126
+ ] })
127
+ ] }),
128
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} gap-6 bg-card p-6`, "aria-label": copy("tasks"), children: [
129
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
130
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: copy("workspace") }),
131
+ /* @__PURE__ */ jsx("h5", { className: "text-2xl font-medium tracking-tight", children: copy("tasks") })
132
+ ] }),
133
+ /* @__PURE__ */ jsxs("p", { className: "text-5xl font-medium tracking-tight", style: { color: tokens["--primary"] }, children: [
134
+ completed.length,
135
+ /* @__PURE__ */ jsxs("span", { className: "text-xl text-muted-foreground", children: [
136
+ " / ",
137
+ TASKS.length
138
+ ] })
139
+ ] }),
140
+ /* @__PURE__ */ jsx("div", { className: "flex-1 divide-y divide-border", children: TASKS.map((task) => /* @__PURE__ */ jsxs("label", { className: "flex cursor-pointer items-start gap-3 py-4", children: [
141
+ /* @__PURE__ */ jsx(Checkbox, { size: "md", checked: completed.includes(task), onCheckedChange: (checked) => setCompleted((current) => checked ? [...current.filter((item) => item !== task), task] : current.filter((item) => item !== task)), "aria-label": copy(task) }),
142
+ /* @__PURE__ */ jsx("span", { className: `text-sm leading-relaxed ${completed.includes(task) ? "text-muted-foreground line-through" : ""}`, children: copy(task) })
143
+ ] }, task)) }),
144
+ /* @__PURE__ */ jsx("p", { role: "status", className: "rounded-lg p-4 text-sm", style: secondary, children: copy(completed.length === TASKS.length ? "allDone" : "keepGoing") })
145
+ ] }),
146
+ /* @__PURE__ */ jsxs("article", { className: `${CARD} border-transparent`, "aria-label": copy("inspiration"), children: [
147
+ /* @__PURE__ */ jsx("div", { className: "relative min-h-56 flex-1", children: /* @__PURE__ */ jsx("img", { src: assetSource(workspace), alt: copy("workspacePhoto"), className: "absolute inset-0 h-full w-full object-cover", loading: "lazy" }) }),
148
+ /* @__PURE__ */ jsxs("div", { className: "space-y-5 p-6", style: tertiary, children: [
149
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
150
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-wider", children: copy("inspiration") }),
151
+ /* @__PURE__ */ jsx(MoveUpRight, { "aria-hidden": true, className: "size-5" })
152
+ ] }),
153
+ /* @__PURE__ */ jsx("h5", { className: "text-3xl font-medium leading-tight tracking-tight", children: copy("inspirationTitle") }),
154
+ /* @__PURE__ */ jsxs(Button, { type: "button", variant: "outline", "aria-pressed": saved, onClick: () => setSaved((value) => !value), className: "w-full", style: { backgroundColor: tokens["--studio-tertiary-soft"], color: tokens["--studio-tertiary-soft-foreground"], borderColor: "transparent" }, children: [
155
+ /* @__PURE__ */ jsx(Heart, { "aria-hidden": true, className: saved ? "fill-current" : "" }),
156
+ copy(saved ? "saved" : "save")
157
+ ] })
158
+ ] })
159
+ ] })
160
+ ] })
161
+ ] });
162
+ }
163
+ export {
164
+ ColorStudioCompositions
165
+ };
166
+ //# sourceMappingURL=ColorStudioCompositions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/ColorStudioCompositions.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { ArrowUpRight, Check, Clock3, Heart, Layers, MoveUpRight, Palette, Sparkles } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { IconButton } from '@open-mercato/ui/primitives/icon-button'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport product from '../assets/style-studio-product.png'\nimport portrait from '../assets/landing-teams-01.png'\nimport creator from '../assets/contact-support-portrait.png'\nimport workspace from '../assets/blog-photo-0.png'\n\nconst assetSource = (asset: string | { readonly src: string }) => typeof asset === 'string' ? asset : asset.src\nconst CARD = 'flex min-h-112 min-w-0 flex-col overflow-hidden rounded-xl border border-border shadow-sm'\nconst TASKS = ['collect', 'explore', 'share'] as const\nconst CATEGORIES = ['identity', 'digital', 'editorial'] as const\n\nexport function ColorStudioCompositions({ theme, tokens }: { theme: 'light' | 'dark'; tokens: Record<string, string> }) {\n const t = useT()\n const id = React.useId()\n const copy = (key: string) => t(`design_system.colorStudio.compositions.${key}`)\n const [plan, setPlan] = React.useState('solo')\n const [category, setCategory] = React.useState<typeof CATEGORIES[number]>('identity')\n const [completed, setCompleted] = React.useState<string[]>(['collect'])\n const [saved, setSaved] = React.useState(false)\n const [following, setFollowing] = React.useState(false)\n const [productSaved, setProductSaved] = React.useState(false)\n const primary = { backgroundColor: tokens['--primary'], color: tokens['--primary-foreground'] }\n const secondary = { backgroundColor: tokens['--studio-secondary-soft'], color: tokens['--studio-secondary-soft-foreground'] }\n const tertiary = { backgroundColor: tokens['--studio-tertiary'], color: tokens['--studio-tertiary-foreground'] }\n const gradient = `linear-gradient(145deg, ${tokens['--accent']}, ${tokens['--studio-secondary-soft']}, ${tokens['--studio-tertiary-soft']})`\n const appointments = [\n { key: 'meeting', time: '09:00\u201310:00', background: tokens['--accent'], foreground: tokens['--accent-foreground'], accent: tokens['--primary'] },\n { key: 'research', time: '11:00\u201312:30', background: tokens['--studio-secondary-soft'], foreground: tokens['--studio-secondary-soft-foreground'], accent: tokens['--studio-secondary'] },\n { key: 'review', time: '14:00\u201315:00', background: tokens['--studio-tertiary-soft'], foreground: tokens['--studio-tertiary-soft-foreground'], accent: tokens['--studio-tertiary'] },\n ]\n return <section aria-labelledby={`${id}-title`} data-composition-theme={theme} style={tokens as React.CSSProperties} className=\"@container/cards min-w-0 space-y-6 rounded-xl bg-background p-4 text-foreground sm:p-6\">\n <div className=\"flex items-end justify-between gap-4\"><h4 id={`${id}-title`} className=\"text-2xl font-medium tracking-tight\">{copy('galleryTitle')}</h4><p className=\"text-xs text-muted-foreground\">{copy('live')}</p></div>\n <div className=\"grid min-w-0 auto-rows-fr gap-6 @md/cards:grid-cols-2 @7xl/cards:grid-cols-4\">\n <article className={`${CARD} gap-6 bg-card p-6`} aria-label={t('design_system.colorStudio.agenda')}>\n <div className=\"space-y-2\"><Clock3 aria-hidden className=\"size-5 text-muted-foreground\" /><h5 className=\"text-xl font-medium tracking-tight\">{t('design_system.colorStudio.agenda')}</h5><p className=\"text-xs text-muted-foreground\">{copy('today')}</p></div>\n <div className=\"flex flex-1 flex-col gap-3\">{appointments.map(item => <div key={item.key} className=\"flex-1 space-y-2 rounded-lg border-l-4 px-4 py-3\" style={{ backgroundColor: item.background, color: item.foreground, borderLeftColor: item.accent }}>\n <p className=\"text-sm font-semibold\">{t(`design_system.colorStudio.${item.key}`)}</p><p className=\"text-xs\">{item.time}</p>\n </div>)}</div>\n <AvatarStack size=\"xs\"><Avatar label={copy('creatorName')} src={assetSource(creator)} /><Avatar label={copy('designerName')} src={assetSource(portrait)} /><Avatar label={copy('collaboratorName')} src={assetSource(workspace)} /></AvatarStack>\n </article>\n\n <article className={`${CARD} relative justify-between border-transparent p-6`} style={secondary} aria-label={copy('poster')}>\n <div className=\"relative -mx-6 -mt-6 h-56 overflow-hidden\" aria-hidden>\n <div className=\"absolute inset-6 rounded-full border-8\" style={{ borderColor: tokens['--studio-secondary'] }} />\n <img src={assetSource(portrait)} alt=\"\" className=\"relative mx-auto h-full w-full object-contain object-bottom\" loading=\"lazy\" />\n <div className=\"absolute -right-8 -top-8 size-40 rounded-full border-8\" style={{ borderColor: tokens['--studio-tertiary'] }} />\n </div>\n <div className=\"relative space-y-4 pt-6\"><Sparkles aria-hidden className=\"size-6\" /><h5 className=\"text-4xl font-semibold leading-tight tracking-tight\">{copy('posterTitle')}</h5><p className=\"text-sm leading-relaxed\">{copy('posterDescription')}</p></div>\n </article>\n\n <article className={`${CARD} border-transparent bg-card`} aria-label={copy('creator')}>\n <div className=\"relative min-h-56 flex-1 overflow-hidden\" style={{ background: gradient }}><img src={assetSource(creator)} alt={copy('creatorPhoto')} className=\"absolute inset-0 h-full w-full object-cover\" loading=\"lazy\" /><div className=\"absolute inset-x-0 bottom-0 h-24\" style={{ background: `linear-gradient(transparent, ${tokens['--primary']})` }} aria-hidden /></div>\n <div className=\"space-y-4 p-6\" style={primary}><p className=\"text-xs font-medium uppercase tracking-wider\">{copy('creator')}</p><h5 className=\"text-3xl font-medium leading-tight tracking-tight\">{copy('creatorName')}</h5><div className=\"flex items-center justify-between gap-3\"><p className=\"text-sm\">{copy('creatorRole')}</p><IconButton type=\"button\" variant=\"modifiable\" size=\"lg\" aria-label={copy(following ? 'unfollow' : 'follow')} aria-pressed={following} onClick={() => setFollowing(value => !value)} style={{ color: 'inherit' }}>{following ? <Check /> : <ArrowUpRight />}</IconButton></div><p role=\"status\" className=\"text-xs empty:hidden\">{following ? copy('following') : ''}</p></div>\n </article>\n\n <article className={`${CARD} justify-between gap-6 p-6`} style={{ background: gradient }} aria-label={copy('product')}>\n <div className=\"flex items-center justify-between gap-3\"><span className=\"rounded-md bg-card px-3 py-2 text-xs font-medium text-card-foreground\">{copy('productLabel')}</span><IconButton type=\"button\" variant=\"white\" size=\"lg\" aria-label={copy(productSaved ? 'removeProduct' : 'saveProduct')} aria-pressed={productSaved} onClick={() => setProductSaved(value => !value)}><Heart className={productSaved ? 'fill-current' : ''} /></IconButton></div>\n <img src={assetSource(product)} alt={copy('productPhoto')} className=\"h-56 w-full rounded-lg object-contain\" loading=\"lazy\" />\n <div className=\"space-y-2 rounded-lg bg-card p-4 text-card-foreground\"><p className=\"text-xs text-muted-foreground\">{copy('productCollection')}</p><h5 className=\"text-2xl font-medium tracking-tight\">{copy('productTitle')}</h5><p role=\"status\" className=\"text-sm text-muted-foreground\">{copy(productSaved ? 'productSaved' : 'productHint')}</p></div>\n </article>\n\n <article className={`${CARD} gap-6 bg-card p-6`} aria-label={copy('plans')}>\n <div className=\"space-y-3\"><Layers aria-hidden className=\"size-6\" style={{ color: tokens['--primary'] }} /><h5 className=\"text-2xl font-medium tracking-tight\">{copy('plans')}</h5><p className=\"text-sm leading-relaxed text-muted-foreground\">{copy('plansHint')}</p></div>\n <div className=\"space-y-3\">{['solo', 'team'].map(choice => <Button key={choice} type=\"button\" variant=\"outline\" aria-pressed={plan === choice} onClick={() => setPlan(choice)} className=\"h-auto w-full justify-between gap-3 whitespace-normal p-4 text-left\" style={plan === choice ? { backgroundColor: tokens['--accent'], color: tokens['--accent-foreground'], borderColor: tokens['--primary'] } : undefined}><span className=\"space-y-1\"><span className=\"block text-base font-medium\">{copy(choice)}</span><span className=\"block text-xs font-normal\">{copy(`${choice}Hint`)}</span></span>{plan === choice ? <Check aria-hidden className=\"size-5 shrink-0\" /> : <span className=\"size-5 shrink-0 rounded-full border border-border\" aria-hidden />}</Button>)}</div>\n <div className=\"mt-auto space-y-3 border-t border-border pt-5\"><p role=\"status\" className=\"text-sm font-medium\">{copy(plan === 'solo' ? 'soloSelected' : 'teamSelected')}</p><p className=\"text-xs leading-relaxed text-muted-foreground\">{copy('planNote')}</p></div>\n </article>\n\n <article className={`${CARD} gap-6 bg-card p-6`} aria-label={copy('categories')}>\n <div className=\"space-y-2\"><Palette aria-hidden className=\"size-6 text-muted-foreground\" /><h5 className=\"text-2xl font-medium tracking-tight\">{copy('categories')}</h5></div>\n <div className=\"flex flex-wrap gap-2\">{CATEGORIES.map(choice => <Button key={choice} type=\"button\" variant=\"outline\" size=\"sm\" aria-pressed={category === choice} onClick={() => setCategory(choice)} style={category === choice ? tertiary : undefined}>{copy(choice)}</Button>)}</div>\n <div className=\"relative flex min-h-36 flex-1 items-center justify-center overflow-hidden rounded-lg p-6\" style={{ background: gradient }} aria-hidden><div className={`flex size-28 items-center justify-center shadow-lg ${category === 'identity' ? 'rounded-full' : category === 'digital' ? 'rotate-12 rounded-xl' : '-rotate-6 rounded-md'}`} style={category === 'digital' ? secondary : tertiary}>{category === 'identity' ? <Sparkles className=\"size-12\" /> : category === 'digital' ? <Layers className=\"size-12\" /> : <Palette className=\"size-12\" />}</div></div>\n <div role=\"status\" className=\"space-y-2\"><h6 className=\"text-lg font-medium\">{copy(`${category}Title`)}</h6><p className=\"text-sm leading-relaxed text-muted-foreground\">{copy(`${category}Description`)}</p></div>\n </article>\n\n <article className={`${CARD} gap-6 bg-card p-6`} aria-label={copy('tasks')}>\n <div className=\"space-y-2\"><p className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">{copy('workspace')}</p><h5 className=\"text-2xl font-medium tracking-tight\">{copy('tasks')}</h5></div>\n <p className=\"text-5xl font-medium tracking-tight\" style={{ color: tokens['--primary'] }}>{completed.length}<span className=\"text-xl text-muted-foreground\"> / {TASKS.length}</span></p>\n <div className=\"flex-1 divide-y divide-border\">{TASKS.map(task => <label key={task} className=\"flex cursor-pointer items-start gap-3 py-4\"><Checkbox size=\"md\" checked={completed.includes(task)} onCheckedChange={checked => setCompleted(current => checked ? [...current.filter(item => item !== task), task] : current.filter(item => item !== task))} aria-label={copy(task)} /><span className={`text-sm leading-relaxed ${completed.includes(task) ? 'text-muted-foreground line-through' : ''}`}>{copy(task)}</span></label>)}</div>\n <p role=\"status\" className=\"rounded-lg p-4 text-sm\" style={secondary}>{copy(completed.length === TASKS.length ? 'allDone' : 'keepGoing')}</p>\n </article>\n\n <article className={`${CARD} border-transparent`} aria-label={copy('inspiration')}>\n <div className=\"relative min-h-56 flex-1\"><img src={assetSource(workspace)} alt={copy('workspacePhoto')} className=\"absolute inset-0 h-full w-full object-cover\" loading=\"lazy\" /></div>\n <div className=\"space-y-5 p-6\" style={tertiary}><div className=\"flex items-center justify-between gap-3\"><p className=\"text-xs font-medium uppercase tracking-wider\">{copy('inspiration')}</p><MoveUpRight aria-hidden className=\"size-5\" /></div><h5 className=\"text-3xl font-medium leading-tight tracking-tight\">{copy('inspirationTitle')}</h5><Button type=\"button\" variant=\"outline\" aria-pressed={saved} onClick={() => setSaved(value => !value)} className=\"w-full\" style={{ backgroundColor: tokens['--studio-tertiary-soft'], color: tokens['--studio-tertiary-soft-foreground'], borderColor: 'transparent' }}><Heart aria-hidden className={saved ? 'fill-current' : ''} />{copy(saved ? 'saved' : 'save')}</Button></div>\n </article>\n </div>\n </section>\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,182 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Check, FolderKanban, Plus, Search } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { DataTable } from "@open-mercato/ui/backend/DataTable";
7
+ import { Badge } from "@open-mercato/ui/primitives/badge";
8
+ import { Button } from "@open-mercato/ui/primitives/button";
9
+ import { Checkbox } from "@open-mercato/ui/primitives/checkbox";
10
+ import { Input } from "@open-mercato/ui/primitives/input";
11
+ import { Label } from "@open-mercato/ui/primitives/label";
12
+ import { CircularProgress } from "@open-mercato/ui/primitives/progress";
13
+ import { SegmentedControl, SegmentedControlItem } from "@open-mercato/ui/primitives/segmented-control";
14
+ const PROJECTS = [
15
+ { id: "design", titleKey: "project.design", ownerKey: "owner.you", status: "confirmed", progress: 72 },
16
+ { id: "website", titleKey: "project.website", ownerKey: "owner.team", status: "pending", progress: 38 },
17
+ { id: "mobile", titleKey: "project.mobile", ownerKey: "owner.review", status: "error", progress: 16 }
18
+ ];
19
+ const STATUS_VARIANTS = { confirmed: "success", pending: "warning", error: "error" };
20
+ function ColorStudioSpecimen({ theme, tokens, logo }) {
21
+ const t = useT();
22
+ const id = React.useId();
23
+ const [view, setView] = React.useState("projects");
24
+ const [search, setSearch] = React.useState("");
25
+ const [projects, setProjects] = React.useState(PROJECTS);
26
+ const [selectedId, setSelectedId] = React.useState("design");
27
+ const [workspaceName, setWorkspaceName] = React.useState("");
28
+ const [savedName, setSavedName] = React.useState("");
29
+ const [notifications, setNotifications] = React.useState(true);
30
+ const [savedNotifications, setSavedNotifications] = React.useState(true);
31
+ const [feedback, setFeedback] = React.useState(null);
32
+ const selectedProject = projects.find((project) => project.id === selectedId) ?? projects[0];
33
+ const hasNewProject = projects.some((project) => project.id === "new");
34
+ const visibleProjects = projects.filter((project) => `${t(`design_system.colorStudio.${project.titleKey}`)} ${t(`design_system.colorStudio.${project.ownerKey}`)}`.toLocaleLowerCase().includes(search.trim().toLocaleLowerCase()));
35
+ const columns = React.useMemo(() => [
36
+ {
37
+ id: "project",
38
+ header: t("design_system.colorStudio.projectName"),
39
+ meta: { truncate: false },
40
+ cell: ({ row }) => /* @__PURE__ */ jsxs(
41
+ Button,
42
+ {
43
+ type: "button",
44
+ variant: "secondary",
45
+ size: "sm",
46
+ "aria-pressed": row.original.id === selectedId,
47
+ onClick: () => setSelectedId(row.original.id),
48
+ className: "h-auto w-full justify-start gap-3 whitespace-normal rounded-md px-0 py-1 text-left shadow-none",
49
+ style: { backgroundColor: "transparent", color: tokens["--foreground"] },
50
+ children: [
51
+ /* @__PURE__ */ jsx("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-md", style: { backgroundColor: row.original.id === selectedId ? tokens["--accent"] : tokens["--muted"], color: row.original.id === selectedId ? tokens["--accent-foreground"] : tokens["--muted-foreground"] }, children: row.original.id === selectedId ? /* @__PURE__ */ jsx(Check, { className: "size-4", "aria-hidden": true }) : /* @__PURE__ */ jsx(FolderKanban, { className: "size-4", "aria-hidden": true }) }),
52
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 space-y-1", children: [
53
+ /* @__PURE__ */ jsx("span", { className: "block text-sm font-medium", children: t(`design_system.colorStudio.${row.original.titleKey}`) }),
54
+ /* @__PURE__ */ jsx("span", { className: "block text-xs font-normal text-muted-foreground", children: t(`design_system.colorStudio.${row.original.ownerKey}`) })
55
+ ] })
56
+ ]
57
+ }
58
+ )
59
+ },
60
+ {
61
+ id: "status",
62
+ header: t("design_system.colorStudio.status"),
63
+ meta: { truncate: false },
64
+ cell: ({ row }) => /* @__PURE__ */ jsx(Badge, { variant: STATUS_VARIANTS[row.original.status], dot: true, children: t(`design_system.colorPreview.${row.original.status}`) })
65
+ }
66
+ ], [selectedId, t, tokens]);
67
+ function addProject() {
68
+ if (hasNewProject) return;
69
+ setProjects((current) => [...current, { id: "new", titleKey: "newProject", ownerKey: "owner.you", status: "pending", progress: 0 }]);
70
+ setSelectedId("new");
71
+ setSearch("");
72
+ setFeedback("added");
73
+ }
74
+ function saveSettings() {
75
+ setSavedName(workspaceName);
76
+ setSavedNotifications(notifications);
77
+ setFeedback("saved");
78
+ }
79
+ return /* @__PURE__ */ jsxs(
80
+ "section",
81
+ {
82
+ role: "region",
83
+ "aria-label": `${t("design_system.colorStudio.preview")} \u2014 ${t(`design_system.colorPreview.${theme}`)}`,
84
+ "data-preview-theme": theme,
85
+ style: tokens,
86
+ className: "min-w-0 overflow-hidden rounded-xl border border-border bg-card text-foreground",
87
+ children: [
88
+ /* @__PURE__ */ jsxs("header", { className: "flex flex-wrap items-center justify-between gap-3 border-b border-border bg-card px-5 py-4", children: [
89
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-3", children: [
90
+ logo ? /* @__PURE__ */ jsx("img", { src: logo, alt: t("design_system.styleAgents.logoPreview"), className: "h-9 w-28 shrink-0 object-contain object-left" }) : /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-accent text-accent-foreground", children: /* @__PURE__ */ jsx(FolderKanban, { className: "size-5", "aria-hidden": true }) }),
91
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
92
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold", children: savedName || t("design_system.colorStudio.workspace") }),
93
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t(`design_system.colorPreview.${theme}`) })
94
+ ] })
95
+ ] }),
96
+ /* @__PURE__ */ jsxs(SegmentedControl, { value: view, onValueChange: (value) => {
97
+ setView(value);
98
+ setFeedback(null);
99
+ }, "aria-label": t("design_system.colorStudio.overview"), size: "sm", children: [
100
+ /* @__PURE__ */ jsx(SegmentedControlItem, { value: "projects", children: t("design_system.colorStudio.projects") }),
101
+ /* @__PURE__ */ jsx(SegmentedControlItem, { value: "settings", children: t("design_system.colorStudio.settings") })
102
+ ] })
103
+ ] }),
104
+ /* @__PURE__ */ jsxs("div", { className: "space-y-5 p-5 sm:p-6", children: [
105
+ view === "projects" ? /* @__PURE__ */ jsxs(Fragment, { children: [
106
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
107
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold tracking-tight", children: t("design_system.colorStudio.projects") }),
108
+ /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", onClick: addProject, disabled: hasNewProject, children: [
109
+ /* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
110
+ t("design_system.colorStudio.newProject")
111
+ ] })
112
+ ] }),
113
+ /* @__PURE__ */ jsxs("div", { className: "grid items-start gap-6", style: { gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 24rem), 1fr))" }, children: [
114
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-4", children: [
115
+ /* @__PURE__ */ jsx(Input, { value: search, onChange: (event) => setSearch(event.target.value), "aria-label": t("design_system.colorStudio.search"), placeholder: t("design_system.colorStudio.search"), leading: /* @__PURE__ */ jsx(Search, { className: "size-4", "aria-hidden": true }) }),
116
+ /* @__PURE__ */ jsx(DataTable, { data: visibleProjects, columns, embedded: true, sortable: false, exporter: false, onRowClick: (project) => setSelectedId(project.id), emptyState: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("design_system.colorStudio.noResults") }) })
117
+ ] }),
118
+ /* @__PURE__ */ jsxs("aside", { className: "space-y-6 rounded-xl border border-border bg-background p-6", "aria-label": t("design_system.colorStudio.selected"), children: [
119
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
120
+ /* @__PURE__ */ jsx(Badge, { variant: STATUS_VARIANTS[selectedProject.status], dot: true, children: t(`design_system.colorPreview.${selectedProject.status}`) }),
121
+ /* @__PURE__ */ jsx("h4", { className: "text-xl font-medium tracking-tight", children: t(`design_system.colorStudio.${selectedProject.titleKey}`) }),
122
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t(`design_system.colorStudio.${selectedProject.ownerKey}`) })
123
+ ] }),
124
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-5 border-t border-border pt-5", children: [
125
+ /* @__PURE__ */ jsx(CircularProgress, { value: selectedProject.progress, size: "lg", showValue: true, "aria-label": t("design_system.colorStudio.progress") }),
126
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-2", children: [
127
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: t("design_system.colorStudio.progress") }),
128
+ /* @__PURE__ */ jsx("p", { className: "text-xs leading-relaxed text-muted-foreground", children: t("design_system.colorStudio.progressHint") })
129
+ ] })
130
+ ] })
131
+ ] })
132
+ ] })
133
+ ] }) : /* @__PURE__ */ jsxs("form", { className: "max-w-xl space-y-5", onSubmit: (event) => {
134
+ event.preventDefault();
135
+ saveSettings();
136
+ }, children: [
137
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
138
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold tracking-tight", children: t("design_system.colorStudio.settings") }),
139
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("design_system.colorStudio.detailsHint") })
140
+ ] }),
141
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
142
+ /* @__PURE__ */ jsx(Label, { htmlFor: `${id}-workspace`, children: t("design_system.colorPreview.name") }),
143
+ /* @__PURE__ */ jsx(Input, { id: `${id}-workspace`, value: workspaceName, placeholder: t("design_system.colorStudio.workspace"), onChange: (event) => {
144
+ setWorkspaceName(event.target.value);
145
+ setFeedback(null);
146
+ } })
147
+ ] }),
148
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3 rounded-lg border border-border bg-card p-4", children: [
149
+ /* @__PURE__ */ jsx(Checkbox, { id: `${id}-notifications`, checked: notifications, onCheckedChange: (checked) => {
150
+ setNotifications(checked === true);
151
+ setFeedback(null);
152
+ } }),
153
+ /* @__PURE__ */ jsx(Label, { htmlFor: `${id}-notifications`, className: "leading-5", children: t("design_system.colorStudio.notifications") })
154
+ ] }),
155
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
156
+ /* @__PURE__ */ jsx(Button, { type: "submit", children: t("design_system.colorPreview.save") }),
157
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "secondary", onClick: () => {
158
+ setWorkspaceName(savedName);
159
+ setNotifications(savedNotifications);
160
+ setFeedback(null);
161
+ }, children: t("design_system.colorPreview.cancel") })
162
+ ] })
163
+ ] }),
164
+ /* @__PURE__ */ jsx("p", { role: "status", className: "text-xs text-status-success-text empty:hidden", children: feedback ? t(feedback === "saved" ? "design_system.colorPreview.saved" : "design_system.colorStudio.added") : null })
165
+ ] }),
166
+ /* @__PURE__ */ jsxs("footer", { className: "flex flex-wrap items-center justify-between gap-4 border-t border-border bg-background px-6 py-4", children: [
167
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground", children: t("design_system.colorStudio.states") }),
168
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-3", children: [
169
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", children: t("design_system.colorStudio.default") }),
170
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", style: { backgroundColor: tokens["--primary-hover"], color: tokens["--primary-foreground"] }, children: t("design_system.colorStudio.hover") }),
171
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", style: { boxShadow: `0 0 0 2px ${tokens["--background"]}, 0 0 0 4px ${tokens["--focus-ring-outer"]}` }, children: t("design_system.colorStudio.focus") }),
172
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", disabled: true, children: t("design_system.colorStudio.disabled") })
173
+ ] })
174
+ ] })
175
+ ]
176
+ }
177
+ );
178
+ }
179
+ export {
180
+ ColorStudioSpecimen
181
+ };
182
+ //# sourceMappingURL=ColorStudioSpecimen.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport type { LegacyColumnDef as ColumnDef } from '@tanstack/react-table/legacy'\nimport { Check, FolderKanban, Plus, Search } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { DataTable } from '@open-mercato/ui/backend/DataTable'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { CircularProgress } from '@open-mercato/ui/primitives/progress'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\ntype Project = {\n id: string\n titleKey: string\n ownerKey: string\n status: 'confirmed' | 'pending' | 'error'\n progress: number\n}\n\nconst PROJECTS: Project[] = [\n { id: 'design', titleKey: 'project.design', ownerKey: 'owner.you', status: 'confirmed', progress: 72 },\n { id: 'website', titleKey: 'project.website', ownerKey: 'owner.team', status: 'pending', progress: 38 },\n { id: 'mobile', titleKey: 'project.mobile', ownerKey: 'owner.review', status: 'error', progress: 16 },\n]\n\nconst STATUS_VARIANTS = { confirmed: 'success', pending: 'warning', error: 'error' } as const\n\nexport function ColorStudioSpecimen({ theme, tokens, logo }: { logo?: string | null; theme: 'light' | 'dark'; tokens: Record<string, string> }) {\n const t = useT()\n const id = React.useId()\n const [view, setView] = React.useState('projects')\n const [search, setSearch] = React.useState('')\n const [projects, setProjects] = React.useState(PROJECTS)\n const [selectedId, setSelectedId] = React.useState('design')\n const [workspaceName, setWorkspaceName] = React.useState('')\n const [savedName, setSavedName] = React.useState('')\n const [notifications, setNotifications] = React.useState(true)\n const [savedNotifications, setSavedNotifications] = React.useState(true)\n const [feedback, setFeedback] = React.useState<'saved' | 'added' | null>(null)\n const selectedProject = projects.find(project => project.id === selectedId) ?? projects[0]\n const hasNewProject = projects.some(project => project.id === 'new')\n const visibleProjects = projects.filter(project => `${t(`design_system.colorStudio.${project.titleKey}`)} ${t(`design_system.colorStudio.${project.ownerKey}`)}`.toLocaleLowerCase().includes(search.trim().toLocaleLowerCase()))\n const columns = React.useMemo<ColumnDef<Project, unknown>[]>(() => [\n {\n id: 'project',\n header: t('design_system.colorStudio.projectName'),\n meta: { truncate: false },\n cell: ({ row }) => <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n aria-pressed={row.original.id === selectedId}\n onClick={() => setSelectedId(row.original.id)}\n className=\"h-auto w-full justify-start gap-3 whitespace-normal rounded-md px-0 py-1 text-left shadow-none\"\n style={{ backgroundColor: 'transparent', color: tokens['--foreground'] }}\n >\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-md\" style={{ backgroundColor: row.original.id === selectedId ? tokens['--accent'] : tokens['--muted'], color: row.original.id === selectedId ? tokens['--accent-foreground'] : tokens['--muted-foreground'] }}>{row.original.id === selectedId ? <Check className=\"size-4\" aria-hidden /> : <FolderKanban className=\"size-4\" aria-hidden />}</span>\n <span className=\"min-w-0 space-y-1\">\n <span className=\"block text-sm font-medium\">{t(`design_system.colorStudio.${row.original.titleKey}`)}</span>\n <span className=\"block text-xs font-normal text-muted-foreground\">{t(`design_system.colorStudio.${row.original.ownerKey}`)}</span>\n </span>\n </Button>,\n },\n {\n id: 'status',\n header: t('design_system.colorStudio.status'),\n meta: { truncate: false },\n cell: ({ row }) => <Badge variant={STATUS_VARIANTS[row.original.status]} dot>{t(`design_system.colorPreview.${row.original.status}`)}</Badge>,\n },\n ], [selectedId, t, tokens])\n\n function addProject() {\n if (hasNewProject) return\n setProjects(current => [...current, { id: 'new', titleKey: 'newProject', ownerKey: 'owner.you', status: 'pending', progress: 0 }])\n setSelectedId('new')\n setSearch('')\n setFeedback('added')\n }\n\n function saveSettings() {\n setSavedName(workspaceName)\n setSavedNotifications(notifications)\n setFeedback('saved')\n }\n\n return <section\n role=\"region\"\n aria-label={`${t('design_system.colorStudio.preview')} \u2014 ${t(`design_system.colorPreview.${theme}`)}`}\n data-preview-theme={theme}\n style={tokens as React.CSSProperties}\n className=\"min-w-0 overflow-hidden rounded-xl border border-border bg-card text-foreground\"\n >\n <header className=\"flex flex-wrap items-center justify-between gap-3 border-b border-border bg-card px-5 py-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {logo ? <img src={logo} alt={t('design_system.styleAgents.logoPreview')} className=\"h-9 w-28 shrink-0 object-contain object-left\" /> : <span className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-accent text-accent-foreground\"><FolderKanban className=\"size-5\" aria-hidden /></span>}\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{savedName || t('design_system.colorStudio.workspace')}</p>\n <p className=\"text-xs text-muted-foreground\">{t(`design_system.colorPreview.${theme}`)}</p>\n </div>\n </div>\n <SegmentedControl value={view} onValueChange={value => { setView(value); setFeedback(null) }} aria-label={t('design_system.colorStudio.overview')} size=\"sm\">\n <SegmentedControlItem value=\"projects\">{t('design_system.colorStudio.projects')}</SegmentedControlItem>\n <SegmentedControlItem value=\"settings\">{t('design_system.colorStudio.settings')}</SegmentedControlItem>\n </SegmentedControl>\n </header>\n <div className=\"space-y-5 p-5 sm:p-6\">\n {view === 'projects' ? <>\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <h3 className=\"text-lg font-semibold tracking-tight\">{t('design_system.colorStudio.projects')}</h3>\n <Button type=\"button\" size=\"sm\" onClick={addProject} disabled={hasNewProject}><Plus aria-hidden />{t('design_system.colorStudio.newProject')}</Button>\n </div>\n <div className=\"grid items-start gap-6\" style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 24rem), 1fr))' }}>\n <div className=\"min-w-0 space-y-4\">\n <Input value={search} onChange={event => setSearch(event.target.value)} aria-label={t('design_system.colorStudio.search')} placeholder={t('design_system.colorStudio.search')} leading={<Search className=\"size-4\" aria-hidden />} />\n <DataTable<Project> data={visibleProjects} columns={columns} embedded sortable={false} exporter={false} onRowClick={project => setSelectedId(project.id)} emptyState={<p className=\"text-sm text-muted-foreground\">{t('design_system.colorStudio.noResults')}</p>} />\n </div>\n <aside className=\"space-y-6 rounded-xl border border-border bg-background p-6\" aria-label={t('design_system.colorStudio.selected')}>\n <div className=\"space-y-3\">\n <Badge variant={STATUS_VARIANTS[selectedProject.status]} dot>{t(`design_system.colorPreview.${selectedProject.status}`)}</Badge>\n <h4 className=\"text-xl font-medium tracking-tight\">{t(`design_system.colorStudio.${selectedProject.titleKey}`)}</h4>\n <p className=\"text-xs text-muted-foreground\">{t(`design_system.colorStudio.${selectedProject.ownerKey}`)}</p>\n </div>\n <div className=\"flex items-center gap-5 border-t border-border pt-5\">\n <CircularProgress value={selectedProject.progress} size=\"lg\" showValue aria-label={t('design_system.colorStudio.progress')} />\n <div className=\"min-w-0 space-y-2\"><p className=\"text-sm font-medium\">{t('design_system.colorStudio.progress')}</p><p className=\"text-xs leading-relaxed text-muted-foreground\">{t('design_system.colorStudio.progressHint')}</p></div>\n </div>\n </aside>\n </div>\n </> : <form className=\"max-w-xl space-y-5\" onSubmit={event => { event.preventDefault(); saveSettings() }}>\n <div className=\"space-y-1\">\n <h3 className=\"text-lg font-semibold tracking-tight\">{t('design_system.colorStudio.settings')}</h3>\n <p className=\"text-sm text-muted-foreground\">{t('design_system.colorStudio.detailsHint')}</p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor={`${id}-workspace`}>{t('design_system.colorPreview.name')}</Label>\n <Input id={`${id}-workspace`} value={workspaceName} placeholder={t('design_system.colorStudio.workspace')} onChange={event => { setWorkspaceName(event.target.value); setFeedback(null) }} />\n </div>\n <div className=\"flex items-start gap-3 rounded-lg border border-border bg-card p-4\">\n <Checkbox id={`${id}-notifications`} checked={notifications} onCheckedChange={checked => { setNotifications(checked === true); setFeedback(null) }} />\n <Label htmlFor={`${id}-notifications`} className=\"leading-5\">{t('design_system.colorStudio.notifications')}</Label>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"submit\">{t('design_system.colorPreview.save')}</Button>\n <Button type=\"button\" variant=\"secondary\" onClick={() => { setWorkspaceName(savedName); setNotifications(savedNotifications); setFeedback(null) }}>{t('design_system.colorPreview.cancel')}</Button>\n </div>\n </form>}\n <p role=\"status\" className=\"text-xs text-status-success-text empty:hidden\">{feedback ? t(feedback === 'saved' ? 'design_system.colorPreview.saved' : 'design_system.colorStudio.added') : null}</p>\n </div>\n <footer className=\"flex flex-wrap items-center justify-between gap-4 border-t border-border bg-background px-6 py-4\">\n <p className=\"text-xs font-medium text-muted-foreground\">{t('design_system.colorStudio.states')}</p>\n <div className=\"flex flex-wrap gap-3\">\n <Button type=\"button\" size=\"sm\">{t('design_system.colorStudio.default')}</Button>\n <Button type=\"button\" size=\"sm\" style={{ backgroundColor: tokens['--primary-hover'], color: tokens['--primary-foreground'] }}>{t('design_system.colorStudio.hover')}</Button>\n <Button type=\"button\" size=\"sm\" style={{ boxShadow: `0 0 0 2px ${tokens['--background']}, 0 0 0 4px ${tokens['--focus-ring-outer']}` }}>{t('design_system.colorStudio.focus')}</Button>\n <Button type=\"button\" size=\"sm\" disabled>{t('design_system.colorStudio.disabled')}</Button>\n </div>\n\n </footer>\n </section>\n}\n"],
5
+ "mappings": ";AA4DmU,SAkDtS,UAlDsS,KAC3T,YAD2T;AA1DnU,YAAY,WAAW;AAEvB,SAAS,OAAO,cAAc,MAAM,cAAc;AAClD,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,wBAAwB;AACjC,SAAS,kBAAkB,4BAA4B;AAUvD,MAAM,WAAsB;AAAA,EAC1B,EAAE,IAAI,UAAU,UAAU,kBAAkB,UAAU,aAAa,QAAQ,aAAa,UAAU,GAAG;AAAA,EACrG,EAAE,IAAI,WAAW,UAAU,mBAAmB,UAAU,cAAc,QAAQ,WAAW,UAAU,GAAG;AAAA,EACtG,EAAE,IAAI,UAAU,UAAU,kBAAkB,UAAU,gBAAgB,QAAQ,SAAS,UAAU,GAAG;AACtG;AAEA,MAAM,kBAAkB,EAAE,WAAW,WAAW,SAAS,WAAW,OAAO,QAAQ;AAE5E,SAAS,oBAAoB,EAAE,OAAO,QAAQ,KAAK,GAAsF;AAC9I,QAAM,IAAI,KAAK;AACf,QAAM,KAAK,MAAM,MAAM;AACvB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,UAAU;AACjD,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,EAAE;AAC7C,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,QAAQ;AACvD,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,QAAQ;AAC3D,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,EAAE;AAC3D,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,EAAE;AACnD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,IAAI;AAC7D,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAAS,IAAI;AACvE,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAmC,IAAI;AAC7E,QAAM,kBAAkB,SAAS,KAAK,aAAW,QAAQ,OAAO,UAAU,KAAK,SAAS,CAAC;AACzF,QAAM,gBAAgB,SAAS,KAAK,aAAW,QAAQ,OAAO,KAAK;AACnE,QAAM,kBAAkB,SAAS,OAAO,aAAW,GAAG,EAAE,6BAA6B,QAAQ,QAAQ,EAAE,CAAC,IAAI,EAAE,6BAA6B,QAAQ,QAAQ,EAAE,CAAC,GAAG,kBAAkB,EAAE,SAAS,OAAO,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAChO,QAAM,UAAU,MAAM,QAAuC,MAAM;AAAA,IACjE;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ,EAAE,uCAAuC;AAAA,MACjD,MAAM,EAAE,UAAU,MAAM;AAAA,MACxB,MAAM,CAAC,EAAE,IAAI,MAAM;AAAA,QAAC;AAAA;AAAA,UAClB,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,gBAAc,IAAI,SAAS,OAAO;AAAA,UAClC,SAAS,MAAM,cAAc,IAAI,SAAS,EAAE;AAAA,UAC5C,WAAU;AAAA,UACV,OAAO,EAAE,iBAAiB,eAAe,OAAO,OAAO,cAAc,EAAE;AAAA,UAEvE;AAAA,gCAAC,UAAK,WAAU,+DAA8D,OAAO,EAAE,iBAAiB,IAAI,SAAS,OAAO,aAAa,OAAO,UAAU,IAAI,OAAO,SAAS,GAAG,OAAO,IAAI,SAAS,OAAO,aAAa,OAAO,qBAAqB,IAAI,OAAO,oBAAoB,EAAE,GAAI,cAAI,SAAS,OAAO,aAAa,oBAAC,SAAM,WAAU,UAAS,eAAW,MAAC,IAAK,oBAAC,gBAAa,WAAU,UAAS,eAAW,MAAC,GAAG;AAAA,YACtZ,qBAAC,UAAK,WAAU,qBACd;AAAA,kCAAC,UAAK,WAAU,6BAA6B,YAAE,6BAA6B,IAAI,SAAS,QAAQ,EAAE,GAAE;AAAA,cACrG,oBAAC,UAAK,WAAU,mDAAmD,YAAE,6BAA6B,IAAI,SAAS,QAAQ,EAAE,GAAE;AAAA,eAC7H;AAAA;AAAA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ,EAAE,kCAAkC;AAAA,MAC5C,MAAM,EAAE,UAAU,MAAM;AAAA,MACxB,MAAM,CAAC,EAAE,IAAI,MAAM,oBAAC,SAAM,SAAS,gBAAgB,IAAI,SAAS,MAAM,GAAG,KAAG,MAAE,YAAE,8BAA8B,IAAI,SAAS,MAAM,EAAE,GAAE;AAAA,IACvI;AAAA,EACF,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;AAE1B,WAAS,aAAa;AACpB,QAAI,cAAe;AACnB,gBAAY,aAAW,CAAC,GAAG,SAAS,EAAE,IAAI,OAAO,UAAU,cAAc,UAAU,aAAa,QAAQ,WAAW,UAAU,EAAE,CAAC,CAAC;AACjI,kBAAc,KAAK;AACnB,cAAU,EAAE;AACZ,gBAAY,OAAO;AAAA,EACrB;AAEA,WAAS,eAAe;AACtB,iBAAa,aAAa;AAC1B,0BAAsB,aAAa;AACnC,gBAAY,OAAO;AAAA,EACrB;AAEA,SAAO;AAAA,IAAC;AAAA;AAAA,MACN,MAAK;AAAA,MACL,cAAY,GAAG,EAAE,mCAAmC,CAAC,WAAM,EAAE,8BAA8B,KAAK,EAAE,CAAC;AAAA,MACnG,sBAAoB;AAAA,MACpB,OAAO;AAAA,MACP,WAAU;AAAA,MAEV;AAAA,6BAAC,YAAO,WAAU,8FAChB;AAAA,+BAAC,SAAI,WAAU,mCACZ;AAAA,mBAAO,oBAAC,SAAI,KAAK,MAAM,KAAK,EAAE,uCAAuC,GAAG,WAAU,gDAA+C,IAAK,oBAAC,UAAK,WAAU,gGAA+F,8BAAC,gBAAa,WAAU,UAAS,eAAW,MAAC,GAAE;AAAA,YACrS,qBAAC,SAAI,WAAU,WACb;AAAA,kCAAC,OAAE,WAAU,kCAAkC,uBAAa,EAAE,qCAAqC,GAAE;AAAA,cACrG,oBAAC,OAAE,WAAU,iCAAiC,YAAE,8BAA8B,KAAK,EAAE,GAAE;AAAA,eACzF;AAAA,aACF;AAAA,UACA,qBAAC,oBAAiB,OAAO,MAAM,eAAe,WAAS;AAAE,oBAAQ,KAAK;AAAG,wBAAY,IAAI;AAAA,UAAE,GAAG,cAAY,EAAE,oCAAoC,GAAG,MAAK,MACtJ;AAAA,gCAAC,wBAAqB,OAAM,YAAY,YAAE,oCAAoC,GAAE;AAAA,YAChF,oBAAC,wBAAqB,OAAM,YAAY,YAAE,oCAAoC,GAAE;AAAA,aAClF;AAAA,WACF;AAAA,QACA,qBAAC,SAAI,WAAU,wBACZ;AAAA,mBAAS,aAAa,iCACrB;AAAA,iCAAC,SAAI,WAAU,qDACb;AAAA,kCAAC,QAAG,WAAU,wCAAwC,YAAE,oCAAoC,GAAE;AAAA,cAC9F,qBAAC,UAAO,MAAK,UAAS,MAAK,MAAK,SAAS,YAAY,UAAU,eAAe;AAAA,oCAAC,QAAK,eAAW,MAAC;AAAA,gBAAG,EAAE,sCAAsC;AAAA,iBAAE;AAAA,eAC/I;AAAA,YACA,qBAAC,SAAI,WAAU,0BAAyB,OAAO,EAAE,qBAAqB,kDAAkD,GACtH;AAAA,mCAAC,SAAI,WAAU,qBACb;AAAA,oCAAC,SAAM,OAAO,QAAQ,UAAU,WAAS,UAAU,MAAM,OAAO,KAAK,GAAG,cAAY,EAAE,kCAAkC,GAAG,aAAa,EAAE,kCAAkC,GAAG,SAAS,oBAAC,UAAO,WAAU,UAAS,eAAW,MAAC,GAAI;AAAA,gBACnO,oBAAC,aAAmB,MAAM,iBAAiB,SAAkB,UAAQ,MAAC,UAAU,OAAO,UAAU,OAAO,YAAY,aAAW,cAAc,QAAQ,EAAE,GAAG,YAAY,oBAAC,OAAE,WAAU,iCAAiC,YAAE,qCAAqC,GAAE,GAAM;AAAA,iBACrQ;AAAA,cACA,qBAAC,WAAM,WAAU,+DAA8D,cAAY,EAAE,oCAAoC,GAC/H;AAAA,qCAAC,SAAI,WAAU,aACb;AAAA,sCAAC,SAAM,SAAS,gBAAgB,gBAAgB,MAAM,GAAG,KAAG,MAAE,YAAE,8BAA8B,gBAAgB,MAAM,EAAE,GAAE;AAAA,kBACxH,oBAAC,QAAG,WAAU,sCAAsC,YAAE,6BAA6B,gBAAgB,QAAQ,EAAE,GAAE;AAAA,kBAC/G,oBAAC,OAAE,WAAU,iCAAiC,YAAE,6BAA6B,gBAAgB,QAAQ,EAAE,GAAE;AAAA,mBAC3G;AAAA,gBACA,qBAAC,SAAI,WAAU,uDACb;AAAA,sCAAC,oBAAiB,OAAO,gBAAgB,UAAU,MAAK,MAAK,WAAS,MAAC,cAAY,EAAE,oCAAoC,GAAG;AAAA,kBAC5H,qBAAC,SAAI,WAAU,qBAAoB;AAAA,wCAAC,OAAE,WAAU,uBAAuB,YAAE,oCAAoC,GAAE;AAAA,oBAAI,oBAAC,OAAE,WAAU,iDAAiD,YAAE,wCAAwC,GAAE;AAAA,qBAAI;AAAA,mBACnO;AAAA,iBACF;AAAA,eACF;AAAA,aACF,IAAM,qBAAC,UAAK,WAAU,sBAAqB,UAAU,WAAS;AAAE,kBAAM,eAAe;AAAG,yBAAa;AAAA,UAAE,GACrG;AAAA,iCAAC,SAAI,WAAU,aACb;AAAA,kCAAC,QAAG,WAAU,wCAAwC,YAAE,oCAAoC,GAAE;AAAA,cAC9F,oBAAC,OAAE,WAAU,iCAAiC,YAAE,uCAAuC,GAAE;AAAA,eAC3F;AAAA,YACA,qBAAC,SAAI,WAAU,aACb;AAAA,kCAAC,SAAM,SAAS,GAAG,EAAE,cAAe,YAAE,iCAAiC,GAAE;AAAA,cACzE,oBAAC,SAAM,IAAI,GAAG,EAAE,cAAc,OAAO,eAAe,aAAa,EAAE,qCAAqC,GAAG,UAAU,WAAS;AAAE,iCAAiB,MAAM,OAAO,KAAK;AAAG,4BAAY,IAAI;AAAA,cAAE,GAAG;AAAA,eAC7L;AAAA,YACA,qBAAC,SAAI,WAAU,sEACb;AAAA,kCAAC,YAAS,IAAI,GAAG,EAAE,kBAAkB,SAAS,eAAe,iBAAiB,aAAW;AAAE,iCAAiB,YAAY,IAAI;AAAG,4BAAY,IAAI;AAAA,cAAE,GAAG;AAAA,cACpJ,oBAAC,SAAM,SAAS,GAAG,EAAE,kBAAkB,WAAU,aAAa,YAAE,yCAAyC,GAAE;AAAA,eAC7G;AAAA,YACA,qBAAC,SAAI,WAAU,wBACb;AAAA,kCAAC,UAAO,MAAK,UAAU,YAAE,iCAAiC,GAAE;AAAA,cAC5D,oBAAC,UAAO,MAAK,UAAS,SAAQ,aAAY,SAAS,MAAM;AAAE,iCAAiB,SAAS;AAAG,iCAAiB,kBAAkB;AAAG,4BAAY,IAAI;AAAA,cAAE,GAAI,YAAE,mCAAmC,GAAE;AAAA,eAC7L;AAAA,aACF;AAAA,UACA,oBAAC,OAAE,MAAK,UAAS,WAAU,iDAAiD,qBAAW,EAAE,aAAa,UAAU,qCAAqC,iCAAiC,IAAI,MAAK;AAAA,WACjM;AAAA,QACA,qBAAC,YAAO,WAAU,oGAChB;AAAA,8BAAC,OAAE,WAAU,6CAA6C,YAAE,kCAAkC,GAAE;AAAA,UAChG,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,UAAO,MAAK,UAAS,MAAK,MAAM,YAAE,mCAAmC,GAAE;AAAA,YACxE,oBAAC,UAAO,MAAK,UAAS,MAAK,MAAK,OAAO,EAAE,iBAAiB,OAAO,iBAAiB,GAAG,OAAO,OAAO,sBAAsB,EAAE,GAAI,YAAE,iCAAiC,GAAE;AAAA,YACpK,oBAAC,UAAO,MAAK,UAAS,MAAK,MAAK,OAAO,EAAE,WAAW,aAAa,OAAO,cAAc,CAAC,eAAe,OAAO,oBAAoB,CAAC,GAAG,GAAI,YAAE,iCAAiC,GAAE;AAAA,YAC9K,oBAAC,UAAO,MAAK,UAAS,MAAK,MAAK,UAAQ,MAAE,YAAE,oCAAoC,GAAE;AAAA,aACpF;AAAA,WAEF;AAAA;AAAA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,80 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Plus } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { Alert, AlertDescription, AlertTitle } from "@open-mercato/ui/primitives/alert";
7
+ import { Banner } from "@open-mercato/ui/primitives/banner";
8
+ import { Button } from "@open-mercato/ui/primitives/button";
9
+ import { CompactButton } from "@open-mercato/ui/primitives/compact-button";
10
+ import { KeyIcon, KeyIconGlyph } from "@open-mercato/ui/primitives/key-icon";
11
+ import { EmptyStateIllustration } from "@open-mercato/ui/primitives/empty-state-illustration";
12
+ function CompactButtons() {
13
+ const t = useT();
14
+ const [pressed, setPressed] = React.useState({});
15
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-4", children: ["stroke", "ghost", "white", "modifiable"].map((appearance) => /* @__PURE__ */ jsx("div", { className: appearance === "modifiable" ? "rounded-md bg-primary p-2 text-primary-foreground" : "p-2", children: /* @__PURE__ */ jsx(
16
+ CompactButton,
17
+ {
18
+ type: "button",
19
+ appearance,
20
+ size: 24,
21
+ "aria-label": t("design_system.gallery.examples.buttons.compactAction"),
22
+ "aria-pressed": pressed[appearance] ?? false,
23
+ onClick: () => setPressed((current) => ({ ...current, [appearance]: !current[appearance] })),
24
+ children: /* @__PURE__ */ jsx(Plus, { "aria-hidden": true })
25
+ }
26
+ ) }, appearance)) });
27
+ }
28
+ function KeyIcons() {
29
+ const t = useT();
30
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-4", children: ["gray", "blue", "green", "orange", "purple"].map((color, index) => /* @__PURE__ */ jsx(KeyIcon, { color, size: 40, appearance: index < 2 ? "stroke" : "lighter", "aria-label": t(`design_system.gallery.examples.keyComponents.color.${color}`), children: /* @__PURE__ */ jsx(KeyIconGlyph, {}) }, color)) });
31
+ }
32
+ function AlertSpecimen() {
33
+ const t = useT();
34
+ return /* @__PURE__ */ jsxs(Alert, { status: "information", style: "light", size: "default", className: "w-full", children: [
35
+ /* @__PURE__ */ jsx(AlertTitle, { children: t("design_system.gallery.samples.banner.title") }),
36
+ /* @__PURE__ */ jsx(AlertDescription, { children: t("design_system.gallery.samples.banner.description") })
37
+ ] });
38
+ }
39
+ function BannerSpecimen() {
40
+ const t = useT();
41
+ const [dismissed, setDismissed] = React.useState(false);
42
+ const [expanded, setExpanded] = React.useState(false);
43
+ if (dismissed) return /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", onClick: () => {
44
+ setDismissed(false);
45
+ setExpanded(false);
46
+ }, children: t("design_system.gallery.samples.banner.restore") });
47
+ return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-3", children: [
48
+ /* @__PURE__ */ jsx(
49
+ Banner,
50
+ {
51
+ status: "information",
52
+ style: "lighter",
53
+ title: t("design_system.gallery.samples.banner.title"),
54
+ onDismiss: () => setDismissed(true),
55
+ action: /* @__PURE__ */ jsx(Button, { variant: "link", className: "h-auto p-0 text-inherit underline", "aria-expanded": expanded, onClick: () => setExpanded((value) => !value), children: t("design_system.gallery.samples.banner.details") })
56
+ }
57
+ ),
58
+ expanded ? /* @__PURE__ */ jsx("p", { role: "status", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.banner.detailsBody") }) : null
59
+ ] });
60
+ }
61
+ function getCompactEntrySpecimen(entryId) {
62
+ switch (entryId) {
63
+ case "compact-button":
64
+ return /* @__PURE__ */ jsx(CompactButtons, {});
65
+ case "key-icon":
66
+ return /* @__PURE__ */ jsx(KeyIcons, {});
67
+ case "alert":
68
+ return /* @__PURE__ */ jsx(AlertSpecimen, {});
69
+ case "banner":
70
+ return /* @__PURE__ */ jsx(BannerSpecimen, {});
71
+ case "empty-state-illustration":
72
+ return /* @__PURE__ */ jsx(EmptyStateIllustration, { kind: "mercato-records" });
73
+ default:
74
+ return void 0;
75
+ }
76
+ }
77
+ export {
78
+ getCompactEntrySpecimen
79
+ };
80
+ //# sourceMappingURL=CompactEntrySpecimen.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { Plus } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'\nimport { Banner } from '@open-mercato/ui/primitives/banner'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { CompactButton } from '@open-mercato/ui/primitives/compact-button'\nimport { KeyIcon, KeyIconGlyph } from '@open-mercato/ui/primitives/key-icon'\nimport { EmptyStateIllustration } from '@open-mercato/ui/primitives/empty-state-illustration'\n\nfunction CompactButtons() {\n const t = useT()\n const [pressed, setPressed] = React.useState<Record<string, boolean>>({})\n return <div className=\"flex flex-wrap items-center gap-4\">\n {(['stroke', 'ghost', 'white', 'modifiable'] as const).map(appearance => <div key={appearance} className={appearance === 'modifiable' ? 'rounded-md bg-primary p-2 text-primary-foreground' : 'p-2'}>\n <CompactButton type=\"button\" appearance={appearance} size={24}\n aria-label={t('design_system.gallery.examples.buttons.compactAction')}\n aria-pressed={pressed[appearance] ?? false}\n onClick={() => setPressed(current => ({ ...current, [appearance]: !current[appearance] }))}>\n <Plus aria-hidden />\n </CompactButton>\n </div>)}\n </div>\n}\n\nfunction KeyIcons() {\n const t = useT()\n return <div className=\"flex flex-wrap items-center gap-4\">\n {(['gray', 'blue', 'green', 'orange', 'purple'] as const).map((color, index) => <KeyIcon key={color} color={color} size={40} appearance={index < 2 ? 'stroke' : 'lighter'} aria-label={t(`design_system.gallery.examples.keyComponents.color.${color}`)}><KeyIconGlyph /></KeyIcon>)}\n </div>\n}\n\nfunction AlertSpecimen() {\n const t = useT()\n return <Alert status=\"information\" style=\"light\" size=\"default\" className=\"w-full\">\n <AlertTitle>{t('design_system.gallery.samples.banner.title')}</AlertTitle>\n <AlertDescription>{t('design_system.gallery.samples.banner.description')}</AlertDescription>\n </Alert>\n}\n\nfunction BannerSpecimen() {\n const t = useT()\n const [dismissed, setDismissed] = React.useState(false)\n const [expanded, setExpanded] = React.useState(false)\n if (dismissed) return <Button variant=\"outline\" size=\"sm\" onClick={() => { setDismissed(false); setExpanded(false) }}>{t('design_system.gallery.samples.banner.restore')}</Button>\n return <div className=\"w-full space-y-3\">\n <Banner status=\"information\" style=\"lighter\" title={t('design_system.gallery.samples.banner.title')}\n onDismiss={() => setDismissed(true)}\n action={<Button variant=\"link\" className=\"h-auto p-0 text-inherit underline\" aria-expanded={expanded} onClick={() => setExpanded(value => !value)}>{t('design_system.gallery.samples.banner.details')}</Button>} />\n {expanded ? <p role=\"status\" className=\"text-sm text-muted-foreground\">{t('design_system.gallery.samples.banner.detailsBody')}</p> : null}\n </div>\n}\n\nexport function getCompactEntrySpecimen(entryId: string): React.ReactNode | undefined {\n switch (entryId) {\n case 'compact-button': return <CompactButtons />\n case 'key-icon': return <KeyIcons />\n case 'alert': return <AlertSpecimen />\n case 'banner': return <BannerSpecimen />\n case 'empty-state-illustration': return <EmptyStateIllustration kind=\"mercato-records\" />\n default: return undefined\n }\n}\n"],
5
+ "mappings": ";AAqBQ,cAeC,YAfD;AAnBR,YAAY,WAAW;AACvB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,OAAO,kBAAkB,kBAAkB;AACpD,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAC9B,SAAS,SAAS,oBAAoB;AACtC,SAAS,8BAA8B;AAEvC,SAAS,iBAAiB;AACxB,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAkC,CAAC,CAAC;AACxE,SAAO,oBAAC,SAAI,WAAU,qCAClB,WAAC,UAAU,SAAS,SAAS,YAAY,EAAY,IAAI,gBAAc,oBAAC,SAAqB,WAAW,eAAe,eAAe,sDAAsD,OAC5L;AAAA,IAAC;AAAA;AAAA,MAAc,MAAK;AAAA,MAAS;AAAA,MAAwB,MAAM;AAAA,MACzD,cAAY,EAAE,sDAAsD;AAAA,MACpE,gBAAc,QAAQ,UAAU,KAAK;AAAA,MACrC,SAAS,MAAM,WAAW,cAAY,EAAE,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,QAAQ,UAAU,EAAE,EAAE;AAAA,MACzF,8BAAC,QAAK,eAAW,MAAC;AAAA;AAAA,EACpB,KANiF,UAOnF,CAAM,GACR;AACF;AAEA,SAAS,WAAW;AAClB,QAAM,IAAI,KAAK;AACf,SAAO,oBAAC,SAAI,WAAU,qCAClB,WAAC,QAAQ,QAAQ,SAAS,UAAU,QAAQ,EAAY,IAAI,CAAC,OAAO,UAAU,oBAAC,WAAoB,OAAc,MAAM,IAAI,YAAY,QAAQ,IAAI,WAAW,WAAW,cAAY,EAAE,sDAAsD,KAAK,EAAE,GAAG,8BAAC,gBAAa,KAAzK,KAA2K,CAAU,GACrR;AACF;AAEA,SAAS,gBAAgB;AACvB,QAAM,IAAI,KAAK;AACf,SAAO,qBAAC,SAAM,QAAO,eAAc,OAAM,SAAQ,MAAK,WAAU,WAAU,UACxE;AAAA,wBAAC,cAAY,YAAE,4CAA4C,GAAE;AAAA,IAC7D,oBAAC,oBAAkB,YAAE,kDAAkD,GAAE;AAAA,KAC3E;AACF;AAEA,SAAS,iBAAiB;AACxB,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AACtD,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AACpD,MAAI,UAAW,QAAO,oBAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM;AAAE,iBAAa,KAAK;AAAG,gBAAY,KAAK;AAAA,EAAE,GAAI,YAAE,8CAA8C,GAAE;AACzK,SAAO,qBAAC,SAAI,WAAU,oBACpB;AAAA;AAAA,MAAC;AAAA;AAAA,QAAO,QAAO;AAAA,QAAc,OAAM;AAAA,QAAU,OAAO,EAAE,4CAA4C;AAAA,QAChG,WAAW,MAAM,aAAa,IAAI;AAAA,QAClC,QAAQ,oBAAC,UAAO,SAAQ,QAAO,WAAU,qCAAoC,iBAAe,UAAU,SAAS,MAAM,YAAY,WAAS,CAAC,KAAK,GAAI,YAAE,8CAA8C,GAAE;AAAA;AAAA,IAAW;AAAA,IAClN,WAAW,oBAAC,OAAE,MAAK,UAAS,WAAU,iCAAiC,YAAE,kDAAkD,GAAE,IAAO;AAAA,KACvI;AACF;AAEO,SAAS,wBAAwB,SAA8C;AACpF,UAAQ,SAAS;AAAA,IACf,KAAK;AAAkB,aAAO,oBAAC,kBAAe;AAAA,IAC9C,KAAK;AAAY,aAAO,oBAAC,YAAS;AAAA,IAClC,KAAK;AAAS,aAAO,oBAAC,iBAAc;AAAA,IACpC,KAAK;AAAU,aAAO,oBAAC,kBAAe;AAAA,IACtC,KAAK;AAA4B,aAAO,oBAAC,0BAAuB,MAAK,mBAAkB;AAAA,IACvF;AAAS,aAAO;AAAA,EAClB;AACF;",
6
+ "names": []
7
+ }