@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,42 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { GalleryLink as Link } from "./GalleryLink.js";
4
+ import { ArrowRight } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { Button } from "@open-mercato/ui/primitives/button";
7
+ import { Skeleton } from "@open-mercato/ui/primitives/skeleton";
8
+ import { GALLERY_BASE_PATH } from "../registry.js";
9
+ import { FamilyEntryPreview } from "./FamilyEntryPreview.js";
10
+ const representativeEntries = {
11
+ inputs: "input",
12
+ dates: "date-picker",
13
+ filters: "quick-filters",
14
+ scaffolding: "section-header",
15
+ notifications: "notification-item",
16
+ schedule: "schedule-agenda",
17
+ messages: "message-object-preview"
18
+ };
19
+ function ComponentIndex({ families, loaded, failed, onRetry }) {
20
+ const t = useT();
21
+ return /* @__PURE__ */ jsx("div", { className: "columns-1 gap-6 @3xl:columns-2", children: families.map((family) => {
22
+ const entries = loaded[family.id];
23
+ const entry = entries?.find((candidate) => candidate.id === representativeEntries[family.id]) ?? entries?.[0];
24
+ return /* @__PURE__ */ jsxs("section", { "aria-labelledby": `gallery-family-${family.id}`, className: "relative mb-6 min-w-0 break-inside-avoid rounded-lg border border-border bg-card", children: [
25
+ /* @__PURE__ */ jsx("h2", { id: `gallery-family-${family.id}`, className: "text-base font-semibold", children: /* @__PURE__ */ jsxs(Link, { href: `${GALLERY_BASE_PATH}?family=${family.id}`, className: "flex items-center justify-between gap-3 p-5 after:absolute after:inset-0 after:rounded-lg hover:bg-muted/30 focus-visible:outline-none focus-visible:after:shadow-focus", children: [
26
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-3", children: [
27
+ family.icon,
28
+ t(family.labelKey, family.id)
29
+ ] }),
30
+ /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true, className: "size-4 shrink-0 text-muted-foreground" })
31
+ ] }) }),
32
+ /* @__PURE__ */ jsx("div", { className: "min-h-40 border-t border-border bg-muted/20 p-5", children: entry ? /* @__PURE__ */ jsx("div", { inert: true, "aria-hidden": "true", className: "flex min-h-28 min-w-0 flex-wrap items-center gap-3 [&>*]:max-w-full", children: /* @__PURE__ */ jsx(FamilyEntryPreview, { entry }) }) : failed[family.id] ? /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
33
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("design_system.gallery.loadFailed", "Could not load this family") }),
34
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", className: "relative z-10", onClick: () => onRetry(family), children: t("design_system.gallery.retry", "Retry") })
35
+ ] }) : /* @__PURE__ */ jsx(Skeleton, { className: "h-28 w-full" }) })
36
+ ] }, family.id);
37
+ }) });
38
+ }
39
+ export {
40
+ ComponentIndex
41
+ };
42
+ //# sourceMappingURL=ComponentIndex.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/ComponentIndex.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { GalleryLink as Link } from './GalleryLink'\nimport { ArrowRight } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Skeleton } from '@open-mercato/ui/primitives/skeleton'\nimport { GALLERY_BASE_PATH } from '../registry'\nimport type { GalleryEntry, GalleryFamily } from '../types'\nimport { FamilyEntryPreview } from './FamilyEntryPreview'\n\nconst representativeEntries: Record<string, string> = {\n inputs: 'input',\n dates: 'date-picker',\n filters: 'quick-filters',\n scaffolding: 'section-header',\n notifications: 'notification-item',\n schedule: 'schedule-agenda',\n messages: 'message-object-preview',\n}\n\nexport function ComponentIndex({ families, loaded, failed, onRetry }: {\n families: GalleryFamily[]\n loaded: Record<string, GalleryEntry[]>\n failed: Record<string, boolean>\n onRetry: (family: GalleryFamily) => void\n}) {\n const t = useT()\n return <div className=\"columns-1 gap-6 @3xl:columns-2\">\n {families.map(family => {\n const entries = loaded[family.id]\n const entry = entries?.find(candidate => candidate.id === representativeEntries[family.id]) ?? entries?.[0]\n return <section key={family.id} aria-labelledby={`gallery-family-${family.id}`} className=\"relative mb-6 min-w-0 break-inside-avoid rounded-lg border border-border bg-card\">\n <h2 id={`gallery-family-${family.id}`} className=\"text-base font-semibold\">\n <Link href={`${GALLERY_BASE_PATH}?family=${family.id}`} className=\"flex items-center justify-between gap-3 p-5 after:absolute after:inset-0 after:rounded-lg hover:bg-muted/30 focus-visible:outline-none focus-visible:after:shadow-focus\">\n <span className=\"flex items-center gap-3\">{family.icon}{t(family.labelKey, family.id)}</span>\n <ArrowRight aria-hidden className=\"size-4 shrink-0 text-muted-foreground\" />\n </Link>\n </h2>\n <div className=\"min-h-40 border-t border-border bg-muted/20 p-5\">\n {entry ? <div inert aria-hidden=\"true\" className=\"flex min-h-28 min-w-0 flex-wrap items-center gap-3 [&>*]:max-w-full\"><FamilyEntryPreview entry={entry} /></div> : failed[family.id] ? <div className=\"space-y-3\"><p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.loadFailed', 'Could not load this family')}</p><Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"relative z-10\" onClick={() => onRetry(family)}>{t('design_system.gallery.retry', 'Retry')}</Button></div> : <Skeleton className=\"h-28 w-full\" />}\n </div>\n </section>\n })}\n </div>\n}\n"],
5
+ "mappings": ";AAoCY,SACA,KADA;AAjCZ,SAAS,eAAe,YAAY;AACpC,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,yBAAyB;AAElC,SAAS,0BAA0B;AAEnC,MAAM,wBAAgD;AAAA,EACpD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,SAAS,eAAe,EAAE,UAAU,QAAQ,QAAQ,QAAQ,GAKhE;AACD,QAAM,IAAI,KAAK;AACf,SAAO,oBAAC,SAAI,WAAU,kCACnB,mBAAS,IAAI,YAAU;AACtB,UAAM,UAAU,OAAO,OAAO,EAAE;AAChC,UAAM,QAAQ,SAAS,KAAK,eAAa,UAAU,OAAO,sBAAsB,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC;AAC1G,WAAO,qBAAC,aAAwB,mBAAiB,kBAAkB,OAAO,EAAE,IAAI,WAAU,oFACxF;AAAA,0BAAC,QAAG,IAAI,kBAAkB,OAAO,EAAE,IAAI,WAAU,2BAC/C,+BAAC,QAAK,MAAM,GAAG,iBAAiB,WAAW,OAAO,EAAE,IAAI,WAAU,2KAChE;AAAA,6BAAC,UAAK,WAAU,2BAA2B;AAAA,iBAAO;AAAA,UAAM,EAAE,OAAO,UAAU,OAAO,EAAE;AAAA,WAAE;AAAA,QACtF,oBAAC,cAAW,eAAW,MAAC,WAAU,yCAAwC;AAAA,SAC5E,GACF;AAAA,MACA,oBAAC,SAAI,WAAU,mDACZ,kBAAQ,oBAAC,SAAI,OAAK,MAAC,eAAY,QAAO,WAAU,uEAAsE,8BAAC,sBAAmB,OAAc,GAAE,IAAS,OAAO,OAAO,EAAE,IAAI,qBAAC,SAAI,WAAU,aAAY;AAAA,4BAAC,OAAE,WAAU,iCAAiC,YAAE,oCAAoC,4BAA4B,GAAE;AAAA,QAAI,oBAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,MAAK,MAAK,WAAU,iBAAgB,SAAS,MAAM,QAAQ,MAAM,GAAI,YAAE,+BAA+B,OAAO,GAAE;AAAA,SAAS,IAAS,oBAAC,YAAS,WAAU,eAAc,GACthB;AAAA,SATmB,OAAO,EAU5B;AAAA,EACF,CAAC,GACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { GalleryLink as Link } from "./GalleryLink.js";
4
+ import { ArrowRight, Code2, Keyboard, Layers, Palette } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { Button } from "@open-mercato/ui/primitives/button";
7
+ import { GALLERY_BASE_PATH } from "../registry.js";
8
+ const paths = {
9
+ foundations: `${GALLERY_BASE_PATH}?family=foundations`,
10
+ components: `${GALLERY_BASE_PATH}?view=components`,
11
+ button: `${GALLERY_BASE_PATH}?family=buttons&entry=button`,
12
+ patterns: `${GALLERY_BASE_PATH}?family=scaffolding`
13
+ };
14
+ const principles = [
15
+ { id: "semantics", icon: Palette, href: `${paths.foundations}&entry=color-roles` },
16
+ { id: "states", icon: Layers, href: `${GALLERY_BASE_PATH}?family=feedback` },
17
+ { id: "keyboard", icon: Keyboard, href: `${GALLERY_BASE_PATH}?family=overlays` },
18
+ { id: "handoff", icon: Code2, href: paths.button }
19
+ ];
20
+ function DesignSystemPrinciples() {
21
+ const t = useT();
22
+ return /* @__PURE__ */ jsxs("section", { className: "space-y-8", "aria-labelledby": "ds-principles-title", children: [
23
+ /* @__PURE__ */ jsxs("div", { className: "max-w-2xl space-y-3", children: [
24
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-widest text-muted-foreground", children: t("design_system.portal.principles.eyebrow") }),
25
+ /* @__PURE__ */ jsx("h2", { id: "ds-principles-title", className: "text-2xl font-semibold tracking-tight", children: t("design_system.portal.principles.title") }),
26
+ /* @__PURE__ */ jsx("p", { className: "text-base leading-relaxed text-muted-foreground", children: t("design_system.portal.principles.description") })
27
+ ] }),
28
+ /* @__PURE__ */ jsx("div", { className: "grid gap-x-8 gap-y-6 sm:grid-cols-2", children: principles.map(({ id, icon: Icon, href }) => /* @__PURE__ */ jsxs("article", { className: "space-y-3 border-t border-border py-6", children: [
29
+ /* @__PURE__ */ jsx(Icon, { className: "size-5 text-muted-foreground", "aria-hidden": true }),
30
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-medium", children: t(`design_system.portal.principles.${id}.title`) }),
31
+ /* @__PURE__ */ jsx("p", { className: "max-w-prose text-sm leading-relaxed text-muted-foreground", children: t(`design_system.portal.principles.${id}.description`) }),
32
+ /* @__PURE__ */ jsxs(Link, { href, className: "inline-flex items-center gap-2 rounded-sm text-sm underline underline-offset-4 focus-visible:outline-none focus-visible:shadow-focus", children: [
33
+ t("design_system.portal.seeExamples"),
34
+ /* @__PURE__ */ jsx(ArrowRight, { className: "size-4", "aria-hidden": true })
35
+ ] })
36
+ ] }, id)) })
37
+ ] });
38
+ }
39
+ function DesignSystemHome() {
40
+ const t = useT();
41
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-12 pb-8", "data-example": "design-system-home", children: [
42
+ /* @__PURE__ */ jsx("header", { id: "gallery-page-heading", className: "scroll-mt-36 border-b border-border pb-8 lg:scroll-mt-24", children: /* @__PURE__ */ jsxs("div", { className: "max-w-3xl space-y-6", children: [
43
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium uppercase tracking-widest text-muted-foreground", children: t("design_system.portal.eyebrow") }),
44
+ /* @__PURE__ */ jsx("h1", { className: "max-w-2xl text-3xl font-medium leading-tight tracking-tight sm:text-5xl", children: t("design_system.portal.title") }),
45
+ /* @__PURE__ */ jsx("p", { className: "max-w-xl text-base leading-relaxed text-muted-foreground", children: t("design_system.portal.description") }),
46
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-3", children: [
47
+ /* @__PURE__ */ jsx(Button, { asChild: true, size: "lg", children: /* @__PURE__ */ jsxs(Link, { href: paths.components, children: [
48
+ t("design_system.portal.browse"),
49
+ /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true })
50
+ ] }) }),
51
+ /* @__PURE__ */ jsx(Button, { asChild: true, size: "lg", variant: "outline", children: /* @__PURE__ */ jsx(Link, { href: paths.foundations, children: t("design_system.portal.start") }) })
52
+ ] })
53
+ ] }) }),
54
+ /* @__PURE__ */ jsxs("section", { className: "space-y-4 rounded-xl border border-border bg-card p-6", children: [
55
+ /* @__PURE__ */ jsx(Palette, { className: "size-6 text-muted-foreground", "aria-hidden": true }),
56
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-medium", children: t("design_system.styleAgents.title") }),
57
+ /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-sm leading-relaxed text-muted-foreground", children: t("design_system.styleAgents.description") }),
58
+ /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ jsxs(Link, { href: `${GALLERY_BASE_PATH}?view=style-agents`, children: [
59
+ t("design_system.styleAgents.open"),
60
+ /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true })
61
+ ] }) })
62
+ ] })
63
+ ] });
64
+ }
65
+ export {
66
+ DesignSystemHome,
67
+ DesignSystemPrinciples
68
+ };
69
+ //# sourceMappingURL=DesignSystemHome.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/DesignSystemHome.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { GalleryLink as Link } from './GalleryLink'\nimport { ArrowRight, Code2, Keyboard, Layers, Palette } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { GALLERY_BASE_PATH } from '../registry'\n\nconst paths = {\n foundations: `${GALLERY_BASE_PATH}?family=foundations`,\n components: `${GALLERY_BASE_PATH}?view=components`,\n button: `${GALLERY_BASE_PATH}?family=buttons&entry=button`,\n patterns: `${GALLERY_BASE_PATH}?family=scaffolding`,\n}\n\nconst principles = [\n { id: 'semantics', icon: Palette, href: `${paths.foundations}&entry=color-roles` },\n { id: 'states', icon: Layers, href: `${GALLERY_BASE_PATH}?family=feedback` },\n { id: 'keyboard', icon: Keyboard, href: `${GALLERY_BASE_PATH}?family=overlays` },\n { id: 'handoff', icon: Code2, href: paths.button },\n] as const\n\nexport function DesignSystemPrinciples() {\n const t = useT()\n return <section className=\"space-y-8\" aria-labelledby=\"ds-principles-title\">\n <div className=\"max-w-2xl space-y-3\">\n <p className=\"text-xs font-medium uppercase tracking-widest text-muted-foreground\">{t('design_system.portal.principles.eyebrow')}</p>\n <h2 id=\"ds-principles-title\" className=\"text-2xl font-semibold tracking-tight\">{t('design_system.portal.principles.title')}</h2>\n <p className=\"text-base leading-relaxed text-muted-foreground\">{t('design_system.portal.principles.description')}</p>\n </div>\n <div className=\"grid gap-x-8 gap-y-6 sm:grid-cols-2\">\n {principles.map(({ id, icon: Icon, href }) => <article key={id} className=\"space-y-3 border-t border-border py-6\">\n <Icon className=\"size-5 text-muted-foreground\" aria-hidden />\n <h3 className=\"text-lg font-medium\">{t(`design_system.portal.principles.${id}.title`)}</h3>\n <p className=\"max-w-prose text-sm leading-relaxed text-muted-foreground\">{t(`design_system.portal.principles.${id}.description`)}</p>\n <Link href={href} className=\"inline-flex items-center gap-2 rounded-sm text-sm underline underline-offset-4 focus-visible:outline-none focus-visible:shadow-focus\">{t('design_system.portal.seeExamples')}<ArrowRight className=\"size-4\" aria-hidden /></Link>\n </article>)}\n </div>\n </section>\n}\n\nexport function DesignSystemHome() {\n const t = useT()\n return <div className=\"space-y-12 pb-8\" data-example=\"design-system-home\">\n <header id=\"gallery-page-heading\" className=\"scroll-mt-36 border-b border-border pb-8 lg:scroll-mt-24\">\n <div className=\"max-w-3xl space-y-6\">\n <p className=\"text-xs font-medium uppercase tracking-widest text-muted-foreground\">{t('design_system.portal.eyebrow')}</p>\n <h1 className=\"max-w-2xl text-3xl font-medium leading-tight tracking-tight sm:text-5xl\">{t('design_system.portal.title')}</h1>\n <p className=\"max-w-xl text-base leading-relaxed text-muted-foreground\">{t('design_system.portal.description')}</p>\n <div className=\"flex flex-wrap gap-3\">\n <Button asChild size=\"lg\"><Link href={paths.components}>{t('design_system.portal.browse')}<ArrowRight aria-hidden /></Link></Button>\n <Button asChild size=\"lg\" variant=\"outline\"><Link href={paths.foundations}>{t('design_system.portal.start')}</Link></Button>\n </div>\n </div>\n </header>\n\n <section className=\"space-y-4 rounded-xl border border-border bg-card p-6\">\n <Palette className=\"size-6 text-muted-foreground\" aria-hidden />\n <h2 className=\"text-2xl font-medium\">{t('design_system.styleAgents.title')}</h2>\n <p className=\"max-w-2xl text-sm leading-relaxed text-muted-foreground\">{t('design_system.styleAgents.description')}</p>\n <Button asChild variant=\"outline\"><Link href={`${GALLERY_BASE_PATH}?view=style-agents`}>{t('design_system.styleAgents.open')}<ArrowRight aria-hidden /></Link></Button>\n </section>\n\n </div>\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,58 +1,64 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { Check, ExternalLink, X } from "lucide-react";
3
+ import * as React from "react";
4
+ import { GalleryLink as Link } from "./GalleryLink.js";
5
+ import { ArrowRight, Check, ExternalLink, X } from "lucide-react";
4
6
  import { useT } from "@open-mercato/shared/lib/i18n/context";
5
7
  import { LinkButton } from "@open-mercato/ui/primitives/link-button";
6
- import { DS_DOCS_URL, figmaNodeUrl } from "../registry.js";
8
+ import { DS_DOCS_URL } from "../registry.js";
7
9
  import { VariantPreview } from "./VariantPreview.js";
8
10
  import { CodeSnippet } from "./CodeSnippet.js";
9
- function EntryCard({ entry }) {
11
+ import { FamilyEntryPreview } from "./FamilyEntryPreview.js";
12
+ import { EntryHeader } from "./EntryHeader.js";
13
+ function EntryCard({ entry, href, summary = false, summaryPreview = false, onNavigate, hideTitle = false, fullWidth = false }) {
10
14
  const t = useT();
15
+ const availableVariants = React.useMemo(() => entry.id === "file-upload" ? entry.variants.filter((variant) => variant.id !== "drag-and-drop") : entry.variants, [entry.id, entry.variants]);
11
16
  return /* @__PURE__ */ jsxs(
12
17
  "section",
13
18
  {
14
19
  id: `gallery-entry-${entry.id}`,
15
- "aria-labelledby": `gallery-entry-${entry.id}-title`,
16
- className: "scroll-mt-4 space-y-4 rounded-lg border border-border bg-card p-4",
20
+ "aria-label": hideTitle ? entry.title : void 0,
21
+ "aria-labelledby": hideTitle ? void 0 : `gallery-entry-${entry.id}-title`,
22
+ className: summary ? `relative min-w-0 rounded-lg border border-border bg-card p-4 sm:p-5 ${summaryPreview ? `flex flex-col gap-4 ${fullWidth ? "@3xl:col-span-2" : ""}` : "space-y-4"}` : "min-w-0 space-y-6",
17
23
  children: [
18
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between", children: [
19
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-1", children: [
20
- /* @__PURE__ */ jsx("h3", { id: `gallery-entry-${entry.id}-title`, className: "text-base font-semibold leading-tight", children: entry.title }),
21
- entry.descriptionKey ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t(entry.descriptionKey, entry.title) }) : null,
22
- /* @__PURE__ */ jsx("code", { className: "block truncate text-xs text-muted-foreground", children: entry.importPath })
24
+ !hideTitle ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between", children: [
25
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 space-y-1", children: [
26
+ /* @__PURE__ */ jsx("h3", { id: `gallery-entry-${entry.id}-title`, className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsxs(Link, { href, onNavigate, className: "flex items-center justify-between gap-3 rounded-sm after:absolute after:inset-0 after:rounded-lg focus-visible:outline-none focus-visible:after:shadow-focus", children: [
27
+ entry.title,
28
+ summaryPreview ? /* @__PURE__ */ jsx(ArrowRight, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true }) : null
29
+ ] }) : entry.title }),
30
+ entry.descriptionKey && !summaryPreview ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t(entry.descriptionKey, entry.title) }) : null
23
31
  ] }),
24
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-3", children: [
25
- entry.figmaNodeId ? /* @__PURE__ */ jsx(LinkButton, { asChild: true, size: "sm", children: /* @__PURE__ */ jsxs("a", { href: figmaNodeUrl(entry.figmaNodeId), target: "_blank", rel: "noreferrer", children: [
26
- t("design_system.gallery.openInFigma", "Open in Figma"),
27
- /* @__PURE__ */ jsx(ExternalLink, {})
28
- ] }) }) : null,
29
- entry.docsAnchor ? /* @__PURE__ */ jsx(LinkButton, { asChild: true, size: "sm", variant: "gray", children: /* @__PURE__ */ jsxs("a", { href: `${DS_DOCS_URL}${entry.docsAnchor}`, target: "_blank", rel: "noreferrer", children: [
30
- t("design_system.gallery.viewDocs", "View docs"),
31
- /* @__PURE__ */ jsx(ExternalLink, {})
32
- ] }) }) : null
33
- ] })
34
- ] }),
35
- entry.usage && (entry.usage.do?.length || entry.usage.dont?.length) ? /* @__PURE__ */ jsxs("div", { className: "grid gap-4 rounded-md border border-border bg-muted/30 p-4 sm:grid-cols-2", children: [
36
- entry.usage.do?.length ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
37
- /* @__PURE__ */ jsx("div", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: t("design_system.gallery.usageDo", "Do") }),
38
- /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: entry.usage.do.map((rule) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground", children: [
39
- /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-status-success-icon" }),
40
- /* @__PURE__ */ jsx("span", { children: rule })
41
- ] }, rule)) })
42
- ] }) : null,
43
- entry.usage.dont?.length ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
44
- /* @__PURE__ */ jsx("div", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: t("design_system.gallery.usageDont", "Don't") }),
45
- /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: entry.usage.dont.map((rule) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground", children: [
46
- /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-status-error-icon" }),
47
- /* @__PURE__ */ jsx("span", { children: rule })
48
- ] }, rule)) })
49
- ] }) : null
32
+ /* @__PURE__ */ jsx("div", { className: "flex shrink-0 flex-wrap items-center gap-3", children: entry.docsAnchor && !summary ? /* @__PURE__ */ jsx(LinkButton, { asChild: true, size: "sm", variant: "gray", children: /* @__PURE__ */ jsxs("a", { href: `${DS_DOCS_URL}${entry.docsAnchor}`, target: "_blank", rel: "noreferrer", children: [
33
+ t("design_system.gallery.viewDocs", "View docs"),
34
+ /* @__PURE__ */ jsx(ExternalLink, {})
35
+ ] }) }) : null })
50
36
  ] }) : null,
51
- /* @__PURE__ */ jsx("div", { className: "space-y-4", children: entry.variants.map((variant) => /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
52
- /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: variant.title }),
53
- /* @__PURE__ */ jsx(VariantPreview, { children: variant.render() }),
54
- /* @__PURE__ */ jsx(CodeSnippet, { code: variant.code })
55
- ] }, variant.id)) })
37
+ summary && summaryPreview && entry.variants.length ? /* @__PURE__ */ jsx("div", { inert: true, "aria-hidden": "true", className: "flex flex-1", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-32 min-w-0 flex-1 flex-wrap items-center gap-4 rounded-md bg-muted/20 p-4 [&>*]:max-w-full", children: /* @__PURE__ */ jsx(FamilyEntryPreview, { entry }) }) }) : null,
38
+ !summary ? /* @__PURE__ */ jsx(EntryHeader, { entry, variants: availableVariants }) : null,
39
+ !summary ? /* @__PURE__ */ jsx("div", { className: "space-y-8", children: availableVariants.map((variant) => /* @__PURE__ */ jsxs("div", { id: `gallery-variant-${entry.id}-${variant.id}`, className: "scroll-mt-36 lg:scroll-mt-24 space-y-3", children: [
40
+ availableVariants.length > 1 ? /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium", children: t(`design_system.gallery.variantTitles.${variant.title}`, variant.title) }) : null,
41
+ /* @__PURE__ */ jsx(CodeSnippet, { code: variant.code, preview: /* @__PURE__ */ jsx(VariantPreview, { framed: !fullWidth, children: variant.render() }) })
42
+ ] }, variant.id)) }) : null,
43
+ !summary && entry.usage && (entry.usage.do?.length || entry.usage.dont?.length) ? /* @__PURE__ */ jsxs("section", { className: "rounded-md border border-border", children: [
44
+ /* @__PURE__ */ jsx("h3", { className: "p-4 text-sm font-medium", children: t("design_system.portal.nav.principles") }),
45
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-4 border-t border-border p-4 sm:grid-cols-2", children: [
46
+ entry.usage.do?.length ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
47
+ /* @__PURE__ */ jsx("div", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: t("design_system.gallery.usageDo", "Do") }),
48
+ /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: entry.usage.do.map((rule, index) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground", children: [
49
+ /* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-status-success-icon" }),
50
+ /* @__PURE__ */ jsx("span", { children: t(`design_system.gallery.usage.${entry.id}.do.${index}`, rule) })
51
+ ] }, rule)) })
52
+ ] }) : null,
53
+ entry.usage.dont?.length ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
54
+ /* @__PURE__ */ jsx("div", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: t("design_system.gallery.usageDont", "Don't") }),
55
+ /* @__PURE__ */ jsx("ul", { className: "space-y-1.5", children: entry.usage.dont.map((rule, index) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground", children: [
56
+ /* @__PURE__ */ jsx(X, { "aria-hidden": true, className: "mt-0.5 size-3.5 shrink-0 text-status-error-icon" }),
57
+ /* @__PURE__ */ jsx("span", { children: t(`design_system.gallery.usage.${entry.id}.dont.${index}`, rule) })
58
+ ] }, rule)) })
59
+ ] }) : null
60
+ ] })
61
+ ] }) : null
56
62
  ]
57
63
  }
58
64
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/design_system/gallery/components/EntryCard.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { Check, ExternalLink, X } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LinkButton } from '@open-mercato/ui/primitives/link-button'\nimport type { GalleryEntry } from '../types'\nimport { DS_DOCS_URL, figmaNodeUrl } from '../registry'\nimport { VariantPreview } from './VariantPreview'\nimport { CodeSnippet } from './CodeSnippet'\n\nexport function EntryCard({ entry }: { entry: GalleryEntry }) {\n const t = useT()\n\n return (\n <section\n id={`gallery-entry-${entry.id}`}\n aria-labelledby={`gallery-entry-${entry.id}-title`}\n className=\"scroll-mt-4 space-y-4 rounded-lg border border-border bg-card p-4\"\n >\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0 space-y-1\">\n <h3 id={`gallery-entry-${entry.id}-title`} className=\"text-base font-semibold leading-tight\">\n {entry.title}\n </h3>\n {entry.descriptionKey ? (\n <p className=\"text-sm text-muted-foreground\">{t(entry.descriptionKey, entry.title)}</p>\n ) : null}\n <code className=\"block truncate text-xs text-muted-foreground\">{entry.importPath}</code>\n </div>\n <div className=\"flex shrink-0 items-center gap-3\">\n {entry.figmaNodeId ? (\n <LinkButton asChild size=\"sm\">\n <a href={figmaNodeUrl(entry.figmaNodeId)} target=\"_blank\" rel=\"noreferrer\">\n {t('design_system.gallery.openInFigma', 'Open in Figma')}\n <ExternalLink />\n </a>\n </LinkButton>\n ) : null}\n {entry.docsAnchor ? (\n <LinkButton asChild size=\"sm\" variant=\"gray\">\n <a href={`${DS_DOCS_URL}${entry.docsAnchor}`} target=\"_blank\" rel=\"noreferrer\">\n {t('design_system.gallery.viewDocs', 'View docs')}\n <ExternalLink />\n </a>\n </LinkButton>\n ) : null}\n </div>\n </div>\n {entry.usage && (entry.usage.do?.length || entry.usage.dont?.length) ? (\n <div className=\"grid gap-4 rounded-md border border-border bg-muted/30 p-4 sm:grid-cols-2\">\n {entry.usage.do?.length ? (\n <div className=\"space-y-1.5\">\n <div className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {t('design_system.gallery.usageDo', 'Do')}\n </div>\n <ul className=\"space-y-1.5\">\n {entry.usage.do.map((rule) => (\n <li key={rule} className=\"flex items-start gap-2 text-sm text-foreground\">\n <Check aria-hidden className=\"mt-0.5 size-3.5 shrink-0 text-status-success-icon\" />\n <span>{rule}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n {entry.usage.dont?.length ? (\n <div className=\"space-y-1.5\">\n <div className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {t('design_system.gallery.usageDont', \"Don't\")}\n </div>\n <ul className=\"space-y-1.5\">\n {entry.usage.dont.map((rule) => (\n <li key={rule} className=\"flex items-start gap-2 text-sm text-foreground\">\n <X aria-hidden className=\"mt-0.5 size-3.5 shrink-0 text-status-error-icon\" />\n <span>{rule}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n ) : null}\n <div className=\"space-y-4\">\n {entry.variants.map((variant) => (\n <div key={variant.id} className=\"space-y-2\">\n <div className=\"text-sm font-medium text-foreground\">{variant.title}</div>\n <VariantPreview>{variant.render()}</VariantPreview>\n <CodeSnippet code={variant.code} />\n </div>\n ))}\n </div>\n </section>\n )\n}\n"],
5
- "mappings": ";AAqBQ,SACE,KADF;AAlBR,SAAS,OAAO,cAAc,SAAS;AACvC,SAAS,YAAY;AACrB,SAAS,kBAAkB;AAE3B,SAAS,aAAa,oBAAoB;AAC1C,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAErB,SAAS,UAAU,EAAE,MAAM,GAA4B;AAC5D,QAAM,IAAI,KAAK;AAEf,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAI,iBAAiB,MAAM,EAAE;AAAA,MAC7B,mBAAiB,iBAAiB,MAAM,EAAE;AAAA,MAC1C,WAAU;AAAA,MAEV;AAAA,6BAAC,SAAI,WAAU,qEACb;AAAA,+BAAC,SAAI,WAAU,qBACb;AAAA,gCAAC,QAAG,IAAI,iBAAiB,MAAM,EAAE,UAAU,WAAU,yCAClD,gBAAM,OACT;AAAA,YACC,MAAM,iBACL,oBAAC,OAAE,WAAU,iCAAiC,YAAE,MAAM,gBAAgB,MAAM,KAAK,GAAE,IACjF;AAAA,YACJ,oBAAC,UAAK,WAAU,gDAAgD,gBAAM,YAAW;AAAA,aACnF;AAAA,UACA,qBAAC,SAAI,WAAU,oCACZ;AAAA,kBAAM,cACL,oBAAC,cAAW,SAAO,MAAC,MAAK,MACvB,+BAAC,OAAE,MAAM,aAAa,MAAM,WAAW,GAAG,QAAO,UAAS,KAAI,cAC3D;AAAA,gBAAE,qCAAqC,eAAe;AAAA,cACvD,oBAAC,gBAAa;AAAA,eAChB,GACF,IACE;AAAA,YACH,MAAM,aACL,oBAAC,cAAW,SAAO,MAAC,MAAK,MAAK,SAAQ,QACpC,+BAAC,OAAE,MAAM,GAAG,WAAW,GAAG,MAAM,UAAU,IAAI,QAAO,UAAS,KAAI,cAC/D;AAAA,gBAAE,kCAAkC,WAAW;AAAA,cAChD,oBAAC,gBAAa;AAAA,eAChB,GACF,IACE;AAAA,aACN;AAAA,WACF;AAAA,QACC,MAAM,UAAU,MAAM,MAAM,IAAI,UAAU,MAAM,MAAM,MAAM,UAC3D,qBAAC,SAAI,WAAU,6EACZ;AAAA,gBAAM,MAAM,IAAI,SACf,qBAAC,SAAI,WAAU,eACb;AAAA,gCAAC,SAAI,WAAU,sEACZ,YAAE,iCAAiC,IAAI,GAC1C;AAAA,YACA,oBAAC,QAAG,WAAU,eACX,gBAAM,MAAM,GAAG,IAAI,CAAC,SACnB,qBAAC,QAAc,WAAU,kDACvB;AAAA,kCAAC,SAAM,eAAW,MAAC,WAAU,qDAAoD;AAAA,cACjF,oBAAC,UAAM,gBAAK;AAAA,iBAFL,IAGT,CACD,GACH;AAAA,aACF,IACE;AAAA,UACH,MAAM,MAAM,MAAM,SACjB,qBAAC,SAAI,WAAU,eACb;AAAA,gCAAC,SAAI,WAAU,sEACZ,YAAE,mCAAmC,OAAO,GAC/C;AAAA,YACA,oBAAC,QAAG,WAAU,eACX,gBAAM,MAAM,KAAK,IAAI,CAAC,SACrB,qBAAC,QAAc,WAAU,kDACvB;AAAA,kCAAC,KAAE,eAAW,MAAC,WAAU,mDAAkD;AAAA,cAC3E,oBAAC,UAAM,gBAAK;AAAA,iBAFL,IAGT,CACD,GACH;AAAA,aACF,IACE;AAAA,WACN,IACE;AAAA,QACJ,oBAAC,SAAI,WAAU,aACZ,gBAAM,SAAS,IAAI,CAAC,YACnB,qBAAC,SAAqB,WAAU,aAC9B;AAAA,8BAAC,SAAI,WAAU,uCAAuC,kBAAQ,OAAM;AAAA,UACpE,oBAAC,kBAAgB,kBAAQ,OAAO,GAAE;AAAA,UAClC,oBAAC,eAAY,MAAM,QAAQ,MAAM;AAAA,aAHzB,QAAQ,EAIlB,CACD,GACH;AAAA;AAAA;AAAA,EACF;AAEJ;",
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { GalleryLink as Link } from './GalleryLink'\nimport { ArrowRight, Check, ExternalLink, X } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LinkButton } from '@open-mercato/ui/primitives/link-button'\nimport type { GalleryEntry } from '../types'\nimport { DS_DOCS_URL } from '../registry'\nimport { VariantPreview } from './VariantPreview'\nimport { CodeSnippet } from './CodeSnippet'\nimport { FamilyEntryPreview } from './FamilyEntryPreview'\nimport { EntryHeader } from './EntryHeader'\n\ntype EntryCardProps = {\n entry: GalleryEntry\n href?: string\n summary?: boolean\n summaryPreview?: boolean\n onNavigate?: () => void\n hideTitle?: boolean\n fullWidth?: boolean\n}\n\nexport function EntryCard({ entry, href, summary = false, summaryPreview = false, onNavigate, hideTitle = false, fullWidth = false }: EntryCardProps) {\n const t = useT()\n const availableVariants = React.useMemo(() => entry.id === 'file-upload' ? entry.variants.filter(variant => variant.id !== 'drag-and-drop') : entry.variants, [entry.id, entry.variants])\n\n\n return (\n <section\n id={`gallery-entry-${entry.id}`}\n aria-label={hideTitle ? entry.title : undefined}\n aria-labelledby={hideTitle ? undefined : `gallery-entry-${entry.id}-title`}\n className={summary ? `relative min-w-0 rounded-lg border border-border bg-card p-4 sm:p-5 ${summaryPreview ? `flex flex-col gap-4 ${fullWidth ? '@3xl:col-span-2' : ''}` : 'space-y-4'}` : 'min-w-0 space-y-6'}\n >\n {!hideTitle ? <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0 flex-1 space-y-1\">\n <h3 id={`gallery-entry-${entry.id}-title`} className=\"text-base font-semibold leading-tight\">\n {href ? <Link href={href} onNavigate={onNavigate} className=\"flex items-center justify-between gap-3 rounded-sm after:absolute after:inset-0 after:rounded-lg focus-visible:outline-none focus-visible:after:shadow-focus\">{entry.title}{summaryPreview ? <ArrowRight className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden /> : null}</Link> : entry.title}\n </h3>\n {entry.descriptionKey && !summaryPreview ? (\n <p className=\"text-sm text-muted-foreground\">{t(entry.descriptionKey, entry.title)}</p>\n ) : null}\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center gap-3\">\n {entry.docsAnchor && !summary ? (\n <LinkButton asChild size=\"sm\" variant=\"gray\">\n <a href={`${DS_DOCS_URL}${entry.docsAnchor}`} target=\"_blank\" rel=\"noreferrer\">\n {t('design_system.gallery.viewDocs', 'View docs')}\n <ExternalLink />\n </a>\n </LinkButton>\n ) : null}\n </div>\n </div> : null}\n {summary && summaryPreview && entry.variants.length ? <div inert aria-hidden=\"true\" className=\"flex flex-1\">\n <div className=\"flex min-h-32 min-w-0 flex-1 flex-wrap items-center gap-4 rounded-md bg-muted/20 p-4 [&>*]:max-w-full\">\n <FamilyEntryPreview entry={entry} />\n </div>\n </div> : null}\n {!summary ? <EntryHeader entry={entry} variants={availableVariants} /> : null}\n {!summary ? <div className=\"space-y-8\">\n {availableVariants.map((variant) => (\n <div key={variant.id} id={`gallery-variant-${entry.id}-${variant.id}`} className=\"scroll-mt-36 lg:scroll-mt-24 space-y-3\">\n {availableVariants.length > 1 ? <h2 className=\"text-lg font-medium\">{t(`design_system.gallery.variantTitles.${variant.title}`, variant.title)}</h2> : null}\n <CodeSnippet code={variant.code} preview={<VariantPreview framed={!fullWidth}>{variant.render()}</VariantPreview>} />\n </div>\n ))}\n </div> : null}\n {!summary && entry.usage && (entry.usage.do?.length || entry.usage.dont?.length) ? (\n <section className=\"rounded-md border border-border\">\n <h3 className=\"p-4 text-sm font-medium\">{t('design_system.portal.nav.principles')}</h3>\n <div className=\"grid gap-4 border-t border-border p-4 sm:grid-cols-2\">\n {entry.usage.do?.length ? (\n <div className=\"space-y-1.5\">\n <div className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {t('design_system.gallery.usageDo', 'Do')}\n </div>\n <ul className=\"space-y-1.5\">\n {entry.usage.do.map((rule, index) => (\n <li key={rule} className=\"flex items-start gap-2 text-sm text-foreground\">\n <Check aria-hidden className=\"mt-0.5 size-3.5 shrink-0 text-status-success-icon\" />\n <span>{t(`design_system.gallery.usage.${entry.id}.do.${index}`, rule)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n {entry.usage.dont?.length ? (\n <div className=\"space-y-1.5\">\n <div className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {t('design_system.gallery.usageDont', \"Don't\")}\n </div>\n <ul className=\"space-y-1.5\">\n {entry.usage.dont.map((rule, index) => (\n <li key={rule} className=\"flex items-start gap-2 text-sm text-foreground\">\n <X aria-hidden className=\"mt-0.5 size-3.5 shrink-0 text-status-error-icon\" />\n <span>{t(`design_system.gallery.usage.${entry.id}.dont.${index}`, rule)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n </section>\n ) : null}\n </section>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Copy, LayoutTemplate } from "lucide-react";
5
+ import { useSearchParams } from "next/navigation";
6
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
7
+ import { IconButton } from "@open-mercato/ui/primitives/icon-button";
8
+ import { flash } from "@open-mercato/ui/backend/FlashMessages";
9
+ import { GALLERY_BASE_PATH } from "../registry.js";
10
+ import { GalleryLink as Link } from "./GalleryLink.js";
11
+ import { copyTextToClipboard } from "./CodeSnippet.js";
12
+ const VARIANT_INDEX_THRESHOLD = 4;
13
+ function isPatternEntry(entry) {
14
+ return entry.importPath.includes("/design_system/gallery/");
15
+ }
16
+ function resolveImportStatement(entry) {
17
+ const escapedPath = entry.importPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
18
+ const statement = new RegExp(`import[^;'"]*?from\\s+['"]${escapedPath}['"]`);
19
+ for (const variant of entry.variants) {
20
+ const match = variant.code.match(statement);
21
+ if (match) return match[0].replace(/\s+/g, " ");
22
+ }
23
+ return entry.importPath;
24
+ }
25
+ function EntryHeader({ entry, variants }) {
26
+ const t = useT();
27
+ const searchParams = useSearchParams();
28
+ const familyId = searchParams?.get("family") ?? null;
29
+ const importStatement = React.useMemo(() => resolveImportStatement(entry), [entry]);
30
+ const copyLabel = t("design_system.gallery.copyImport", "Copy import");
31
+ const onCopy = React.useCallback(async () => {
32
+ try {
33
+ await copyTextToClipboard(importStatement);
34
+ flash(t("design_system.gallery.importCopied", "Import copied to clipboard"), "success");
35
+ } catch {
36
+ flash(t("design_system.gallery.copyFailed", "Could not copy the snippet"), "error");
37
+ }
38
+ }, [importStatement, t]);
39
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", "data-testid": "gallery-entry-header", children: [
40
+ isPatternEntry(entry) ? /* @__PURE__ */ jsxs("p", { className: "flex items-start gap-2 rounded-md border border-status-info-border bg-status-info-bg p-3 text-sm text-status-info-text", children: [
41
+ /* @__PURE__ */ jsx(LayoutTemplate, { "aria-hidden": true, className: "mt-0.5 size-4 shrink-0 text-status-info-icon" }),
42
+ /* @__PURE__ */ jsx("span", { children: t("design_system.gallery.patternNote", "This is a sample layout composed from library components, not an importable component. Use it as a pattern.") })
43
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/50 py-1 pl-3 pr-1", children: [
44
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs font-medium uppercase tracking-wider text-muted-foreground", children: t("design_system.gallery.importLabel", "Import") }),
45
+ /* @__PURE__ */ jsx("code", { className: "min-w-0 flex-1 overflow-x-auto whitespace-nowrap py-1 text-xs", children: importStatement }),
46
+ /* @__PURE__ */ jsx(IconButton, { type: "button", variant: "ghost", size: "sm", "aria-label": copyLabel, title: copyLabel, onClick: onCopy, children: /* @__PURE__ */ jsx(Copy, {}) })
47
+ ] }),
48
+ variants.length >= VARIANT_INDEX_THRESHOLD ? /* @__PURE__ */ jsxs("nav", { "aria-label": t("design_system.gallery.variantsNav", "Variants"), className: "space-y-2", children: [
49
+ /* @__PURE__ */ jsxs("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground", children: [
50
+ t("design_system.gallery.variantsNav", "Variants"),
51
+ " (",
52
+ variants.length,
53
+ ")"
54
+ ] }),
55
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-wrap gap-x-4 gap-y-1", children: variants.map((variant) => {
56
+ const label = t(`design_system.gallery.variantTitles.${variant.title}`, variant.title);
57
+ const className = "rounded-sm text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:shadow-focus";
58
+ return /* @__PURE__ */ jsx("li", { children: familyId ? /* @__PURE__ */ jsx(Link, { href: `${GALLERY_BASE_PATH}?family=${familyId}&entry=${entry.id}&variant=${variant.id}`, className, children: label }) : /* @__PURE__ */ jsx("a", { href: `#gallery-variant-${entry.id}-${variant.id}`, className, children: label }) }, variant.id);
59
+ }) })
60
+ ] }) : null
61
+ ] });
62
+ }
63
+ export {
64
+ EntryHeader,
65
+ isPatternEntry,
66
+ resolveImportStatement
67
+ };
68
+ //# sourceMappingURL=EntryHeader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/EntryHeader.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { Copy, LayoutTemplate } from 'lucide-react'\nimport { useSearchParams } from 'next/navigation'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { IconButton } from '@open-mercato/ui/primitives/icon-button'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport type { GalleryEntry, GalleryVariant } from '../types'\nimport { GALLERY_BASE_PATH } from '../registry'\nimport { GalleryLink as Link } from './GalleryLink'\nimport { copyTextToClipboard } from './CodeSnippet'\n\nconst VARIANT_INDEX_THRESHOLD = 4\n\nexport function isPatternEntry(entry: GalleryEntry): boolean {\n return entry.importPath.includes('/design_system/gallery/')\n}\n\nexport function resolveImportStatement(entry: GalleryEntry): string {\n const escapedPath = entry.importPath.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const statement = new RegExp(`import[^;'\"]*?from\\\\s+['\"]${escapedPath}['\"]`)\n for (const variant of entry.variants) {\n const match = variant.code.match(statement)\n if (match) return match[0].replace(/\\s+/g, ' ')\n }\n return entry.importPath\n}\n\nexport function EntryHeader({ entry, variants }: { entry: GalleryEntry; variants: GalleryVariant[] }) {\n const t = useT()\n const searchParams = useSearchParams()\n const familyId = searchParams?.get('family') ?? null\n const importStatement = React.useMemo(() => resolveImportStatement(entry), [entry])\n const copyLabel = t('design_system.gallery.copyImport', 'Copy import')\n\n const onCopy = React.useCallback(async () => {\n try {\n await copyTextToClipboard(importStatement)\n flash(t('design_system.gallery.importCopied', 'Import copied to clipboard'), 'success')\n } catch {\n flash(t('design_system.gallery.copyFailed', 'Could not copy the snippet'), 'error')\n }\n }, [importStatement, t])\n\n return (\n <div className=\"space-y-4\" data-testid=\"gallery-entry-header\">\n {isPatternEntry(entry) ? (\n <p className=\"flex items-start gap-2 rounded-md border border-status-info-border bg-status-info-bg p-3 text-sm text-status-info-text\">\n <LayoutTemplate aria-hidden className=\"mt-0.5 size-4 shrink-0 text-status-info-icon\" />\n <span>{t('design_system.gallery.patternNote', 'This is a sample layout composed from library components, not an importable component. Use it as a pattern.')}</span>\n </p>\n ) : (\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-muted/50 py-1 pl-3 pr-1\">\n <span className=\"shrink-0 text-xs font-medium uppercase tracking-wider text-muted-foreground\">{t('design_system.gallery.importLabel', 'Import')}</span>\n <code className=\"min-w-0 flex-1 overflow-x-auto whitespace-nowrap py-1 text-xs\">{importStatement}</code>\n <IconButton type=\"button\" variant=\"ghost\" size=\"sm\" aria-label={copyLabel} title={copyLabel} onClick={onCopy}><Copy /></IconButton>\n </div>\n )}\n {variants.length >= VARIANT_INDEX_THRESHOLD ? (\n <nav aria-label={t('design_system.gallery.variantsNav', 'Variants')} className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">{t('design_system.gallery.variantsNav', 'Variants')} ({variants.length})</p>\n <ul className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {variants.map((variant) => {\n const label = t(`design_system.gallery.variantTitles.${variant.title}`, variant.title)\n const className = 'rounded-sm text-sm text-muted-foreground underline-offset-4 hover:text-foreground hover:underline focus-visible:outline-none focus-visible:shadow-focus'\n return (\n <li key={variant.id}>\n {familyId\n ? <Link href={`${GALLERY_BASE_PATH}?family=${familyId}&entry=${entry.id}&variant=${variant.id}`} className={className}>{label}</Link>\n : <a href={`#gallery-variant-${entry.id}-${variant.id}`} className={className}>{label}</a>}\n </li>\n )\n })}\n </ul>\n </nav>\n ) : null}\n </div>\n )\n}\n"],
5
+ "mappings": ";AAgDQ,SACE,KADF;AA9CR,YAAY,WAAW;AACvB,SAAS,MAAM,sBAAsB;AACrC,SAAS,uBAAuB;AAChC,SAAS,YAAY;AACrB,SAAS,kBAAkB;AAC3B,SAAS,aAAa;AAEtB,SAAS,yBAAyB;AAClC,SAAS,eAAe,YAAY;AACpC,SAAS,2BAA2B;AAEpC,MAAM,0BAA0B;AAEzB,SAAS,eAAe,OAA8B;AAC3D,SAAO,MAAM,WAAW,SAAS,yBAAyB;AAC5D;AAEO,SAAS,uBAAuB,OAA6B;AAClE,QAAM,cAAc,MAAM,WAAW,QAAQ,uBAAuB,MAAM;AAC1E,QAAM,YAAY,IAAI,OAAO,6BAA6B,WAAW,MAAM;AAC3E,aAAW,WAAW,MAAM,UAAU;AACpC,UAAM,QAAQ,QAAQ,KAAK,MAAM,SAAS;AAC1C,QAAI,MAAO,QAAO,MAAM,CAAC,EAAE,QAAQ,QAAQ,GAAG;AAAA,EAChD;AACA,SAAO,MAAM;AACf;AAEO,SAAS,YAAY,EAAE,OAAO,SAAS,GAAwD;AACpG,QAAM,IAAI,KAAK;AACf,QAAM,eAAe,gBAAgB;AACrC,QAAM,WAAW,cAAc,IAAI,QAAQ,KAAK;AAChD,QAAM,kBAAkB,MAAM,QAAQ,MAAM,uBAAuB,KAAK,GAAG,CAAC,KAAK,CAAC;AAClF,QAAM,YAAY,EAAE,oCAAoC,aAAa;AAErE,QAAM,SAAS,MAAM,YAAY,YAAY;AAC3C,QAAI;AACF,YAAM,oBAAoB,eAAe;AACzC,YAAM,EAAE,sCAAsC,4BAA4B,GAAG,SAAS;AAAA,IACxF,QAAQ;AACN,YAAM,EAAE,oCAAoC,4BAA4B,GAAG,OAAO;AAAA,IACpF;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAEvB,SACE,qBAAC,SAAI,WAAU,aAAY,eAAY,wBACpC;AAAA,mBAAe,KAAK,IACnB,qBAAC,OAAE,WAAU,0HACX;AAAA,0BAAC,kBAAe,eAAW,MAAC,WAAU,gDAA+C;AAAA,MACrF,oBAAC,UAAM,YAAE,qCAAqC,6GAA6G,GAAE;AAAA,OAC/J,IAEA,qBAAC,SAAI,WAAU,8FACb;AAAA,0BAAC,UAAK,WAAU,+EAA+E,YAAE,qCAAqC,QAAQ,GAAE;AAAA,MAChJ,oBAAC,UAAK,WAAU,iEAAiE,2BAAgB;AAAA,MACjG,oBAAC,cAAW,MAAK,UAAS,SAAQ,SAAQ,MAAK,MAAK,cAAY,WAAW,OAAO,WAAW,SAAS,QAAQ,8BAAC,QAAK,GAAE;AAAA,OACxH;AAAA,IAED,SAAS,UAAU,0BAClB,qBAAC,SAAI,cAAY,EAAE,qCAAqC,UAAU,GAAG,WAAU,aAC7E;AAAA,2BAAC,OAAE,WAAU,sEAAsE;AAAA,UAAE,qCAAqC,UAAU;AAAA,QAAE;AAAA,QAAG,SAAS;AAAA,QAAO;AAAA,SAAC;AAAA,MAC1J,oBAAC,QAAG,WAAU,kCACX,mBAAS,IAAI,CAAC,YAAY;AACzB,cAAM,QAAQ,EAAE,uCAAuC,QAAQ,KAAK,IAAI,QAAQ,KAAK;AACrF,cAAM,YAAY;AAClB,eACE,oBAAC,QACE,qBACG,oBAAC,QAAK,MAAM,GAAG,iBAAiB,WAAW,QAAQ,UAAU,MAAM,EAAE,YAAY,QAAQ,EAAE,IAAI,WAAuB,iBAAM,IAC5H,oBAAC,OAAE,MAAM,oBAAoB,MAAM,EAAE,IAAI,QAAQ,EAAE,IAAI,WAAuB,iBAAM,KAHjF,QAAQ,EAIjB;AAAA,MAEJ,CAAC,GACH;AAAA,OACF,IACE;AAAA,KACN;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { Fragment, jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { SourceIcon } from "@open-mercato/ui/assets/source-icons";
5
+ import { representativeVariantIds } from "../presentation.js";
6
+ import { getCompactEntrySpecimen } from "./CompactEntrySpecimen.js";
7
+ function FamilyEntryPreview({ entry }) {
8
+ const compact = getCompactEntrySpecimen(entry.id);
9
+ if (compact !== void 0) return compact;
10
+ if (entry.id === "button") return /* @__PURE__ */ jsx(Fragment, { children: entry.variants.filter((variant) => ["default", "outline", "ghost"].includes(variant.id)).map((variant) => /* @__PURE__ */ jsx(React.Fragment, { children: variant.render() }, variant.id)) });
11
+ if (entry.id === "icon-registry") return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 gap-6", children: ["activity", "arrow-right", "bell", "calendar", "check", "house", "plus", "search"].map((name) => /* @__PURE__ */ jsx(SourceIcon, { name, "aria-hidden": "true", className: "size-6" }, name)) });
12
+ const overviewVariant = [representativeVariantIds[entry.id], "default"].map((id) => entry.variants.find((variant) => variant.id === id)).find(Boolean) ?? entry.variants[0];
13
+ if (entry.id === "table") return /* @__PURE__ */ jsx("div", { className: "w-full min-w-0 overflow-x-auto", children: overviewVariant?.render() });
14
+ return overviewVariant?.render() ?? null;
15
+ }
16
+ export {
17
+ FamilyEntryPreview
18
+ };
19
+ //# sourceMappingURL=FamilyEntryPreview.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/FamilyEntryPreview.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { SourceIcon } from '@open-mercato/ui/assets/source-icons'\nimport type { GalleryEntry } from '../types'\nimport { representativeVariantIds } from '../presentation'\nimport { getCompactEntrySpecimen } from './CompactEntrySpecimen'\n\nexport function FamilyEntryPreview({ entry }: { entry: GalleryEntry }) {\n const compact = getCompactEntrySpecimen(entry.id)\n if (compact !== undefined) return compact\n\n if (entry.id === 'button') return <>{entry.variants.filter(variant => ['default', 'outline', 'ghost'].includes(variant.id)).map(variant => <React.Fragment key={variant.id}>{variant.render()}</React.Fragment>)}</>\n\n if (entry.id === 'icon-registry') return <div className=\"grid grid-cols-4 gap-6\">{(['activity', 'arrow-right', 'bell', 'calendar', 'check', 'house', 'plus', 'search'] as const).map(name => <SourceIcon key={name} name={name} aria-hidden=\"true\" className=\"size-6\" />)}</div>\n\n const overviewVariant = [representativeVariantIds[entry.id], 'default']\n .map(id => entry.variants.find(variant => variant.id === id))\n .find(Boolean) ?? entry.variants[0]\n if (entry.id === 'table') return <div className=\"w-full min-w-0 overflow-x-auto\">{overviewVariant?.render()}</div>\n return overviewVariant?.render() ?? null\n}\n"],
5
+ "mappings": ";AAYoC,mBAAyG,WAAzG;AAVpC,YAAY,WAAW;AACvB,SAAS,kBAAkB;AAE3B,SAAS,gCAAgC;AACzC,SAAS,+BAA+B;AAEjC,SAAS,mBAAmB,EAAE,MAAM,GAA4B;AACrE,QAAM,UAAU,wBAAwB,MAAM,EAAE;AAChD,MAAI,YAAY,OAAW,QAAO;AAElC,MAAI,MAAM,OAAO,SAAU,QAAO,gCAAG,gBAAM,SAAS,OAAO,aAAW,CAAC,WAAW,WAAW,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC,EAAE,IAAI,aAAW,oBAAC,MAAM,UAAN,EAAiC,kBAAQ,OAAO,KAA5B,QAAQ,EAAsB,CAAiB,GAAE;AAEjN,MAAI,MAAM,OAAO,gBAAiB,QAAO,oBAAC,SAAI,WAAU,0BAA2B,WAAC,YAAY,eAAe,QAAQ,YAAY,SAAS,SAAS,QAAQ,QAAQ,EAAY,IAAI,UAAQ,oBAAC,cAAsB,MAAY,eAAY,QAAO,WAAU,YAA/C,IAAwD,CAAE,GAAE;AAE1Q,QAAM,kBAAkB,CAAC,yBAAyB,MAAM,EAAE,GAAG,SAAS,EACnE,IAAI,QAAM,MAAM,SAAS,KAAK,aAAW,QAAQ,OAAO,EAAE,CAAC,EAC3D,KAAK,OAAO,KAAK,MAAM,SAAS,CAAC;AACpC,MAAI,MAAM,OAAO,QAAS,QAAO,oBAAC,SAAI,WAAU,kCAAkC,2BAAiB,OAAO,GAAE;AAC5G,SAAO,iBAAiB,OAAO,KAAK;AACtC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { GalleryLink as Link } from "./GalleryLink.js";
4
+ import { ArrowRight } from "lucide-react";
5
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
+ import { Button } from "@open-mercato/ui/primitives/button";
7
+ import { CodeSnippet } from "./CodeSnippet.js";
8
+ import { ThemeTokenReference } from "./ThemeTokenReference.js";
9
+ import { GALLERY_BASE_PATH } from "../registry.js";
10
+ function FoundationGuide({ entries }) {
11
+ const t = useT();
12
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-12 pb-12", children: [
13
+ /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-base leading-relaxed text-muted-foreground", children: t("design_system.foundations.intro") }),
14
+ entries.some((entry) => entry.id === "brand-colors" || entry.id === "color-tokens") ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 rounded-lg border border-border bg-muted/30 p-4", children: [
15
+ /* @__PURE__ */ jsx("p", { className: "max-w-xl text-sm text-muted-foreground", children: t("design_system.styleAgents.referenceHint") }),
16
+ /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ jsxs(Link, { href: `${GALLERY_BASE_PATH}?view=style-agents`, children: [
17
+ t("design_system.styleAgents.open"),
18
+ /* @__PURE__ */ jsx(ArrowRight, { "aria-hidden": true })
19
+ ] }) })
20
+ ] }) : null,
21
+ entries.map((entry) => /* @__PURE__ */ jsxs("section", { id: `gallery-entry-${entry.id}`, "aria-labelledby": `gallery-entry-${entry.id}-title`, className: "min-w-0 scroll-mt-36 lg:scroll-mt-24 space-y-8 border-t border-border pt-8", children: [
22
+ /* @__PURE__ */ jsxs("header", { className: "max-w-2xl space-y-3", children: [
23
+ /* @__PURE__ */ jsx("h2", { id: `gallery-entry-${entry.id}-title`, className: "text-2xl font-medium tracking-tight", children: t(`design_system.foundations.${entry.id}.title`, entry.title) }),
24
+ /* @__PURE__ */ jsx("p", { className: "text-base leading-relaxed text-muted-foreground", children: t(`design_system.foundations.${entry.id}.description`) })
25
+ ] }),
26
+ /* @__PURE__ */ jsx(CodeSnippet, { code: entry.variants.map((variant) => variant.code).join("\n\n"), preview: /* @__PURE__ */ jsxs("div", { className: "space-y-8", children: [
27
+ entry.variants.map((variant) => /* @__PURE__ */ jsxs("div", { id: `gallery-variant-${entry.id}-${variant.id}`, className: "min-w-0 scroll-mt-36 space-y-4 lg:scroll-mt-24", children: [
28
+ entry.variants.length > 1 && entry.id !== "typography" ? /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium text-muted-foreground", children: t(`design_system.foundations.variants.${variant.id}`, variant.title) }) : null,
29
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 overflow-x-auto py-2", children: variant.render() })
30
+ ] }, variant.id)),
31
+ entry.id === "color-tokens" ? /* @__PURE__ */ jsx(ThemeTokenReference, {}) : null
32
+ ] }) }),
33
+ entry.usage ? /* @__PURE__ */ jsxs("section", { className: "rounded-md border border-border", children: [
34
+ /* @__PURE__ */ jsx("h3", { className: "p-4 text-sm font-medium", children: t("design_system.portal.nav.principles") }),
35
+ /* @__PURE__ */ jsx("div", { className: "grid gap-6 border-t border-border p-4 sm:grid-cols-2", children: ["do", "dont"].map((kind) => entry.usage?.[kind]?.length ? /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
36
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-medium", children: t(kind === "do" ? "design_system.gallery.usageDo" : "design_system.gallery.usageDont") }),
37
+ /* @__PURE__ */ jsx("ul", { className: "list-disc space-y-2 pl-4 text-sm leading-relaxed text-muted-foreground", children: entry.usage[kind]?.map((rule, index) => /* @__PURE__ */ jsx("li", { children: t(`design_system.gallery.usage.${entry.id}.${kind}.${index}`, rule) }, rule)) })
38
+ ] }, kind) : null) })
39
+ ] }) : null
40
+ ] }, entry.id))
41
+ ] });
42
+ }
43
+ export {
44
+ FoundationGuide
45
+ };
46
+ //# sourceMappingURL=FoundationGuide.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/FoundationGuide.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { GalleryLink as Link } from './GalleryLink'\nimport { ArrowRight } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport type { GalleryEntry } from '../types'\nimport { CodeSnippet } from './CodeSnippet'\nimport { ThemeTokenReference } from './ThemeTokenReference'\nimport { GALLERY_BASE_PATH } from '../registry'\n\nexport function FoundationGuide({ entries }: { entries: GalleryEntry[] }) {\n const t = useT()\n return <div className=\"space-y-12 pb-12\">\n <p className=\"max-w-2xl text-base leading-relaxed text-muted-foreground\">{t('design_system.foundations.intro')}</p>\n {entries.some(entry => entry.id === 'brand-colors' || entry.id === 'color-tokens') ? <div className=\"flex flex-wrap items-center justify-between gap-4 rounded-lg border border-border bg-muted/30 p-4\">\n <p className=\"max-w-xl text-sm text-muted-foreground\">{t('design_system.styleAgents.referenceHint')}</p>\n <Button asChild variant=\"outline\"><Link href={`${GALLERY_BASE_PATH}?view=style-agents`}>{t('design_system.styleAgents.open')}<ArrowRight aria-hidden /></Link></Button>\n </div> : null}\n {entries.map(entry => <section key={entry.id} id={`gallery-entry-${entry.id}`} aria-labelledby={`gallery-entry-${entry.id}-title`} className=\"min-w-0 scroll-mt-36 lg:scroll-mt-24 space-y-8 border-t border-border pt-8\">\n <header className=\"max-w-2xl space-y-3\">\n <h2 id={`gallery-entry-${entry.id}-title`} className=\"text-2xl font-medium tracking-tight\">{t(`design_system.foundations.${entry.id}.title`, entry.title)}</h2>\n <p className=\"text-base leading-relaxed text-muted-foreground\">{t(`design_system.foundations.${entry.id}.description`)}</p>\n </header>\n <CodeSnippet code={entry.variants.map(variant => variant.code).join('\\n\\n')} preview={<div className=\"space-y-8\">{entry.variants.map(variant => <div key={variant.id} id={`gallery-variant-${entry.id}-${variant.id}`} className=\"min-w-0 scroll-mt-36 space-y-4 lg:scroll-mt-24\">\n {entry.variants.length > 1 && entry.id !== 'typography' ? <h3 className=\"text-sm font-medium text-muted-foreground\">{t(`design_system.foundations.variants.${variant.id}`, variant.title)}</h3> : null}\n <div className=\"min-w-0 overflow-x-auto py-2\">{variant.render()}</div>\n </div>)}\n {entry.id === 'color-tokens' ? <ThemeTokenReference /> : null}\n </div>} />\n {entry.usage ? <section className=\"rounded-md border border-border\">\n <h3 className=\"p-4 text-sm font-medium\">{t('design_system.portal.nav.principles')}</h3>\n <div className=\"grid gap-6 border-t border-border p-4 sm:grid-cols-2\">\n {(['do', 'dont'] as const).map(kind => entry.usage?.[kind]?.length ? <div key={kind} className=\"space-y-3\">\n <h3 className=\"text-sm font-medium\">{t(kind === 'do' ? 'design_system.gallery.usageDo' : 'design_system.gallery.usageDont')}</h3>\n <ul className=\"list-disc space-y-2 pl-4 text-sm leading-relaxed text-muted-foreground\">{entry.usage[kind]?.map((rule, index) => <li key={rule}>{t(`design_system.gallery.usage.${entry.id}.${kind}.${index}`, rule)}</li>)}</ul>\n </div> : null)}\n </div>\n </section> : null}\n </section>)}\n </div>\n}\n"],
5
+ "mappings": ";AAeI,cAGoC,YAHpC;AAZJ,SAAS,eAAe,YAAY;AACpC,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,cAAc;AAEvB,SAAS,mBAAmB;AAC5B,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAE3B,SAAS,gBAAgB,EAAE,QAAQ,GAAgC;AACxE,QAAM,IAAI,KAAK;AACf,SAAO,qBAAC,SAAI,WAAU,oBACpB;AAAA,wBAAC,OAAE,WAAU,6DAA6D,YAAE,iCAAiC,GAAE;AAAA,IAC9G,QAAQ,KAAK,WAAS,MAAM,OAAO,kBAAkB,MAAM,OAAO,cAAc,IAAI,qBAAC,SAAI,WAAU,qGAClG;AAAA,0BAAC,OAAE,WAAU,0CAA0C,YAAE,yCAAyC,GAAE;AAAA,MACpG,oBAAC,UAAO,SAAO,MAAC,SAAQ,WAAU,+BAAC,QAAK,MAAM,GAAG,iBAAiB,sBAAuB;AAAA,UAAE,gCAAgC;AAAA,QAAE,oBAAC,cAAW,eAAW,MAAC;AAAA,SAAE,GAAO;AAAA,OAChK,IAAS;AAAA,IACR,QAAQ,IAAI,WAAS,qBAAC,aAAuB,IAAI,iBAAiB,MAAM,EAAE,IAAI,mBAAiB,iBAAiB,MAAM,EAAE,UAAU,WAAU,8EAC3I;AAAA,2BAAC,YAAO,WAAU,uBAChB;AAAA,4BAAC,QAAG,IAAI,iBAAiB,MAAM,EAAE,UAAU,WAAU,uCAAuC,YAAE,6BAA6B,MAAM,EAAE,UAAU,MAAM,KAAK,GAAE;AAAA,QAC1J,oBAAC,OAAE,WAAU,mDAAmD,YAAE,6BAA6B,MAAM,EAAE,cAAc,GAAE;AAAA,SACzH;AAAA,MACA,oBAAC,eAAY,MAAM,MAAM,SAAS,IAAI,aAAW,QAAQ,IAAI,EAAE,KAAK,MAAM,GAAG,SAAS,qBAAC,SAAI,WAAU,aAAa;AAAA,cAAM,SAAS,IAAI,aAAW,qBAAC,SAAqB,IAAI,mBAAmB,MAAM,EAAE,IAAI,QAAQ,EAAE,IAAI,WAAU,kDAC9N;AAAA,gBAAM,SAAS,SAAS,KAAK,MAAM,OAAO,eAAe,oBAAC,QAAG,WAAU,6CAA6C,YAAE,sCAAsC,QAAQ,EAAE,IAAI,QAAQ,KAAK,GAAE,IAAQ;AAAA,UAClM,oBAAC,SAAI,WAAU,gCAAgC,kBAAQ,OAAO,GAAE;AAAA,aAFwF,QAAQ,EAGlK,CAAM;AAAA,QACL,MAAM,OAAO,iBAAiB,oBAAC,uBAAoB,IAAK;AAAA,SACzD,GAAQ;AAAA,MACP,MAAM,QAAQ,qBAAC,aAAQ,WAAU,mCAChC;AAAA,4BAAC,QAAG,WAAU,2BAA2B,YAAE,qCAAqC,GAAE;AAAA,QAClF,oBAAC,SAAI,WAAU,wDACX,WAAC,MAAM,MAAM,EAAY,IAAI,UAAQ,MAAM,QAAQ,IAAI,GAAG,SAAS,qBAAC,SAAe,WAAU,aAC7F;AAAA,8BAAC,QAAG,WAAU,uBAAuB,YAAE,SAAS,OAAO,kCAAkC,iCAAiC,GAAE;AAAA,UAC5H,oBAAC,QAAG,WAAU,0EAA0E,gBAAM,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,UAAU,oBAAC,QAAe,YAAE,+BAA+B,MAAM,EAAE,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAzE,IAA2E,CAAK,GAAE;AAAA,aAF9I,IAG/E,IAAS,IAAI,GACf;AAAA,SACF,IAAa;AAAA,SAnBqB,MAAM,EAoB1C,CAAU;AAAA,KACZ;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { GALLERY_BASE_PATH } from "../registry.js";
5
+ function navigateGallery(href) {
6
+ const target = new URL(href, window.location.href);
7
+ if (target.origin !== window.location.origin || target.pathname !== GALLERY_BASE_PATH || window.location.pathname !== GALLERY_BASE_PATH) return false;
8
+ if (target.href !== window.location.href) window.history.pushState(null, "", target.href);
9
+ return true;
10
+ }
11
+ function GalleryLink({ onNavigate, ...props }) {
12
+ return /* @__PURE__ */ jsx(Link, { ...props, prefetch: false, onNavigate: (event) => {
13
+ if (typeof props.href === "string" && navigateGallery(props.href)) event.preventDefault();
14
+ onNavigate?.(event);
15
+ } });
16
+ }
17
+ export {
18
+ GalleryLink,
19
+ navigateGallery
20
+ };
21
+ //# sourceMappingURL=GalleryLink.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/components/GalleryLink.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { GALLERY_BASE_PATH } from '../registry'\n\nexport function navigateGallery(href: string): boolean {\n const target = new URL(href, window.location.href)\n if (target.origin !== window.location.origin || target.pathname !== GALLERY_BASE_PATH || window.location.pathname !== GALLERY_BASE_PATH) return false\n if (target.href !== window.location.href) window.history.pushState(null, '', target.href)\n return true\n}\n\nexport function GalleryLink({ onNavigate, ...props }: React.ComponentProps<typeof Link>) {\n return <Link {...props} prefetch={false} onNavigate={event => {\n if (typeof props.href === 'string' && navigateGallery(props.href)) event.preventDefault()\n onNavigate?.(event)\n }} />\n}\n"],
5
+ "mappings": ";AAcS;AAXT,OAAO,UAAU;AACjB,SAAS,yBAAyB;AAE3B,SAAS,gBAAgB,MAAuB;AACrD,QAAM,SAAS,IAAI,IAAI,MAAM,OAAO,SAAS,IAAI;AACjD,MAAI,OAAO,WAAW,OAAO,SAAS,UAAU,OAAO,aAAa,qBAAqB,OAAO,SAAS,aAAa,kBAAmB,QAAO;AAChJ,MAAI,OAAO,SAAS,OAAO,SAAS,KAAM,QAAO,QAAQ,UAAU,MAAM,IAAI,OAAO,IAAI;AACxF,SAAO;AACT;AAEO,SAAS,YAAY,EAAE,YAAY,GAAG,MAAM,GAAsC;AACvF,SAAO,oBAAC,QAAM,GAAG,OAAO,UAAU,OAAO,YAAY,WAAS;AAC5D,QAAI,OAAO,MAAM,SAAS,YAAY,gBAAgB,MAAM,IAAI,EAAG,OAAM,eAAe;AACxF,iBAAa,KAAK;AAAA,EACpB,GAAG;AACL;",
6
+ "names": []
7
+ }