@open-mercato/core 0.7.1-develop.7203.1.9396450b78 → 0.8.1-develop.7204.1.83330e271e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/build.mjs +11 -0
  3. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
  4. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  5. package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
  6. package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
  7. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
  8. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  9. package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
  10. package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
  11. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
  12. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  13. package/dist/modules/customers/lib/detailHelpers.js +4 -0
  14. package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
  15. package/dist/modules/customers/lib/todoCompatibility.js +5 -0
  16. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  17. package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
  18. package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
  19. package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  20. package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  21. package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  22. package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  23. package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  24. package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  25. package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  26. package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  27. package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  28. package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  29. package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  30. package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  31. package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  32. package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  33. package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  34. package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  35. package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  36. package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  37. package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  38. package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  39. package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  40. package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  41. package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  42. package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  43. package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  44. package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  45. package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  46. package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  47. package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  48. package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  49. package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  50. package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  51. package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  52. package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  53. package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  54. package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  55. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
  56. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
  57. package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
  58. package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
  59. package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
  60. package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  61. package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  62. package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
  63. package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
  64. package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  65. package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  66. package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  67. package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  68. package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
  69. package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
  70. package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
  71. package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
  72. package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  73. package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  74. package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  75. package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  76. package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  77. package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  78. package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  79. package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  80. package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  81. package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  82. package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  83. package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  84. package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  85. package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  86. package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  87. package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
  88. package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
  89. package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
  90. package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
  91. package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
  92. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
  93. package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
  94. package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
  95. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
  96. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
  97. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
  98. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
  99. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
  100. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
  101. package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
  102. package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
  103. package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
  104. package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
  105. package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
  106. package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
  107. package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
  108. package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
  109. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
  110. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
  111. package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
  112. package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
  113. package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
  114. package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
  115. package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
  116. package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
  117. package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
  118. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
  119. package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
  120. package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
  121. package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
  122. package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
  123. package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
  124. package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
  125. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
  126. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
  127. package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
  128. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
  129. package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
  130. package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
  131. package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
  132. package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
  133. package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
  134. package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
  135. package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
  136. package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
  137. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
  138. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
  139. package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
  140. package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
  141. package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
  142. package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
  143. package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
  144. package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
  145. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
  146. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
  147. package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
  148. package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
  149. package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
  150. package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
  151. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
  152. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
  153. package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
  154. package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
  155. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
  156. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
  157. package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
  158. package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
  159. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
  160. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
  161. package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
  162. package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
  163. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
  164. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
  165. package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
  166. package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
  167. package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
  168. package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
  169. package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
  170. package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
  171. package/dist/modules/design_system/gallery/demos/menus.js +150 -0
  172. package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
  173. package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
  174. package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
  175. package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
  176. package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
  177. package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
  178. package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
  179. package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
  180. package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
  181. package/dist/modules/design_system/gallery/demos/shell.js +330 -0
  182. package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
  183. package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
  184. package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
  185. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
  186. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
  187. package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
  188. package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
  189. package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
  190. package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
  191. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
  192. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
  193. package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
  194. package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
  195. package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
  196. package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
  197. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
  198. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
  199. package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
  200. package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
  201. package/dist/modules/design_system/gallery/entries/banners.js +123 -60
  202. package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
  203. package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
  204. package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
  205. package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
  206. package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
  207. package/dist/modules/design_system/gallery/entries/charts.js +532 -186
  208. package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
  209. package/dist/modules/design_system/gallery/entries/dates.js +191 -3
  210. package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
  211. package/dist/modules/design_system/gallery/entries/detail.js +118 -77
  212. package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
  213. package/dist/modules/design_system/gallery/entries/display.js +1449 -240
  214. package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
  215. package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
  216. package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
  217. package/dist/modules/design_system/gallery/entries/filters.js +231 -103
  218. package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
  219. package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
  220. package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
  221. package/dist/modules/design_system/gallery/entries/icons.js +29 -91
  222. package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
  223. package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
  224. package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
  225. package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
  226. package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
  227. package/dist/modules/design_system/gallery/entries/library.js +20 -0
  228. package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
  229. package/dist/modules/design_system/gallery/entries/messages.js +121 -103
  230. package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
  231. package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
  232. package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
  233. package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
  234. package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
  235. package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
  236. package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
  237. package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
  238. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
  239. package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
  240. package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
  241. package/dist/modules/design_system/gallery/presentation.js +108 -0
  242. package/dist/modules/design_system/gallery/presentation.js.map +7 -0
  243. package/dist/modules/design_system/gallery/registry.js +8 -5
  244. package/dist/modules/design_system/gallery/registry.js.map +2 -2
  245. package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
  246. package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
  247. package/dist/modules/design_system/i18n/de.json +7167 -0
  248. package/dist/modules/design_system/i18n/en.json +7167 -0
  249. package/dist/modules/design_system/i18n/es.json +7167 -0
  250. package/dist/modules/design_system/i18n/ko.json +7167 -0
  251. package/dist/modules/design_system/i18n/pl.json +7167 -0
  252. package/dist/modules/push_notifications/lib/queue.js +1 -31
  253. package/dist/modules/push_notifications/lib/queue.js.map +2 -2
  254. package/jest.config.cjs +1 -0
  255. package/jest.mocks/image.js +1 -0
  256. package/package.json +8 -8
  257. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
  258. package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
  259. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
  260. package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
  261. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
  262. package/src/modules/customers/lib/detailHelpers.ts +4 -0
  263. package/src/modules/customers/lib/todoCompatibility.ts +10 -0
  264. package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
  265. package/src/modules/design_system/gallery/assets/README.md +30 -0
  266. package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  267. package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  268. package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  269. package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  270. package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  271. package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  272. package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  273. package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  274. package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  275. package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  276. package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  277. package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  278. package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  279. package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  280. package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  281. package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  282. package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  283. package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  284. package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  285. package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  286. package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  287. package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  288. package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  289. package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  290. package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  291. package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  292. package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  293. package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  294. package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  295. package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  296. package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  297. package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  298. package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  299. package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  300. package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  301. package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  302. package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
  303. package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
  304. package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
  305. package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  306. package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  307. package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
  308. package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  309. package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  310. package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  311. package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  312. package/src/modules/design_system/gallery/assets/select-google.png +0 -0
  313. package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
  314. package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
  315. package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  316. package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  317. package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  318. package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  319. package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  320. package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  321. package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  322. package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  323. package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  324. package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  325. package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  326. package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  327. package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  328. package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  329. package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  330. package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
  331. package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
  332. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
  333. package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
  334. package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
  335. package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
  336. package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
  337. package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
  338. package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
  339. package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
  340. package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
  341. package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
  342. package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
  343. package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
  344. package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
  345. package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
  346. package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
  347. package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
  348. package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
  349. package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
  350. package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
  351. package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
  352. package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
  353. package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
  354. package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
  355. package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
  356. package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
  357. package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
  358. package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
  359. package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
  360. package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
  361. package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
  362. package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
  363. package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
  364. package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
  365. package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
  366. package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
  367. package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
  368. package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
  369. package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
  370. package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
  371. package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
  372. package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
  373. package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
  374. package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
  375. package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
  376. package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
  377. package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
  378. package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
  379. package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
  380. package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
  381. package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
  382. package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
  383. package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
  384. package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
  385. package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
  386. package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
  387. package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
  388. package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
  389. package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
  390. package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
  391. package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
  392. package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
  393. package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
  394. package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
  395. package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
  396. package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
  397. package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
  398. package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
  399. package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
  400. package/src/modules/design_system/gallery/entries/library.tsx +16 -0
  401. package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
  402. package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
  403. package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
  404. package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
  405. package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
  406. package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
  407. package/src/modules/design_system/gallery/presentation.ts +106 -0
  408. package/src/modules/design_system/gallery/registry.ts +8 -6
  409. package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
  410. package/src/modules/design_system/i18n/de.json +7112 -3
  411. package/src/modules/design_system/i18n/en.json +7112 -3
  412. package/src/modules/design_system/i18n/es.json +7112 -3
  413. package/src/modules/design_system/i18n/ko.json +7112 -3
  414. package/src/modules/design_system/i18n/pl.json +7112 -3
  415. package/src/modules/push_notifications/AGENTS.md +9 -5
  416. package/src/modules/push_notifications/lib/queue.ts +15 -44
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/design_system/gallery/entries/navigation.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport { CreditCard, LayoutGrid, Settings, ShoppingCart, Truck } from 'lucide-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\nimport {\n SegmentedControl,\n SegmentedControlItem,\n} from '@open-mercato/ui/primitives/segmented-control'\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@open-mercato/ui/primitives/accordion'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// Pagination is a controlled component \u2014 these small wrappers own the page\n// state so the preview stays interactive without polluting the entry shape.\n\nfunction PaginationBasicDemo() {\n const [page, setPage] = React.useState(2)\n const [pageSize, setPageSize] = React.useState(25)\n return (\n <Pagination\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n )\n}\n\nfunction PaginationCompactDemo() {\n const [page, setPage] = React.useState(1)\n return (\n <Pagination\n page={page}\n pageSize={20}\n total={120}\n onPageChange={setPage}\n showFirstLast={false}\n showPageSize={false}\n />\n )\n}\n\nconst tabsEntry: GalleryEntry = {\n id: 'tabs',\n title: 'Tabs',\n importPath: '@open-mercato/ui/primitives/tabs',\n usage: {\n do: [\n 'variant=\"underline\" is the canon for page-level tab strips; pill only for small embedded switchers.',\n 'TabsList always carries an aria-label; use count and leading to add context to triggers.',\n ],\n dont: ['No hand-rolled tab strips from buttons and border classes \u2014 lint flags raw tab lists.'],\n },\n docsAnchor: '#tabs',\n figmaNodeId: '553:734',\n variants: [\n {\n id: 'underline',\n title: 'underline',\n // Underline is the DS canon for page-level tab strips \u2014 flat rail\n // with an accent underline, per-tab `leading` icon and `count` badge.\n render: () => (\n <Tabs defaultValue=\"orders\" variant=\"underline\" className=\"w-full\">\n <TabsList aria-label=\"Customer sections\">\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-4\" />}>\n Overview\n </TabsTrigger>\n <TabsTrigger value=\"orders\" leading={<ShoppingCart className=\"size-4\" />} count={12}>\n Orders\n </TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-4\" />}>\n Settings\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">\n <p className=\"text-sm text-muted-foreground\">Customer overview panel.</p>\n </TabsContent>\n <TabsContent value=\"orders\">\n <p className=\"text-sm text-muted-foreground\">12 orders in the last 30 days.</p>\n </TabsContent>\n <TabsContent value=\"settings\">\n <p className=\"text-sm text-muted-foreground\">Notification and access settings.</p>\n </TabsContent>\n </Tabs>\n ),\n code: `import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"orders\" variant=\"underline\">\n <TabsList aria-label=\"Customer sections\">\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-4\" />}>Overview</TabsTrigger>\n <TabsTrigger value=\"orders\" leading={<ShoppingCart className=\"size-4\" />} count={12}>Orders</TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-4\" />}>Settings</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">\u2026</TabsContent>\n <TabsContent value=\"orders\">\u2026</TabsContent>\n <TabsContent value=\"settings\">\u2026</TabsContent>\n</Tabs>`,\n },\n {\n id: 'pill',\n title: 'pill (default)',\n render: () => (\n <Tabs defaultValue=\"preview\">\n <TabsList aria-label=\"Editor view\">\n <TabsTrigger value=\"preview\">Preview</TabsTrigger>\n <TabsTrigger value=\"code\">Code</TabsTrigger>\n <TabsTrigger value=\"logs\">Logs</TabsTrigger>\n </TabsList>\n <TabsContent value=\"preview\">\n <p className=\"text-sm text-muted-foreground\">Rendered preview.</p>\n </TabsContent>\n <TabsContent value=\"code\">\n <p className=\"text-sm text-muted-foreground\">Source code panel.</p>\n </TabsContent>\n <TabsContent value=\"logs\">\n <p className=\"text-sm text-muted-foreground\">Runtime logs panel.</p>\n </TabsContent>\n </Tabs>\n ),\n code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"preview\">\n <TabsList aria-label=\"Editor view\">\n <TabsTrigger value=\"preview\">Preview</TabsTrigger>\n <TabsTrigger value=\"code\">Code</TabsTrigger>\n <TabsTrigger value=\"logs\">Logs</TabsTrigger>\n </TabsList>\n <TabsContent value=\"preview\">\u2026</TabsContent>\n <TabsContent value=\"code\">\u2026</TabsContent>\n <TabsContent value=\"logs\">\u2026</TabsContent>\n</Tabs>`,\n },\n {\n id: 'pill-vertical',\n title: 'pill, vertical',\n render: () => (\n <Tabs defaultValue=\"profile\" orientation=\"vertical\" className=\"w-full\">\n <TabsList aria-label=\"Account settings\">\n <TabsTrigger value=\"profile\">Profile</TabsTrigger>\n <TabsTrigger value=\"billing\">Billing</TabsTrigger>\n <TabsTrigger value=\"security\">Security</TabsTrigger>\n </TabsList>\n <TabsContent value=\"profile\">\n <p className=\"text-sm text-muted-foreground\">Profile settings panel.</p>\n </TabsContent>\n <TabsContent value=\"billing\">\n <p className=\"text-sm text-muted-foreground\">Billing settings panel.</p>\n </TabsContent>\n <TabsContent value=\"security\">\n <p className=\"text-sm text-muted-foreground\">Security settings panel.</p>\n </TabsContent>\n </Tabs>\n ),\n code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"profile\" orientation=\"vertical\">\n <TabsList aria-label=\"Account settings\">\n <TabsTrigger value=\"profile\">Profile</TabsTrigger>\n <TabsTrigger value=\"billing\">Billing</TabsTrigger>\n <TabsTrigger value=\"security\">Security</TabsTrigger>\n </TabsList>\n <TabsContent value=\"profile\">\u2026</TabsContent>\n <TabsContent value=\"billing\">\u2026</TabsContent>\n <TabsContent value=\"security\">\u2026</TabsContent>\n</Tabs>`,\n },\n ],\n}\n\nconst breadcrumbEntry: GalleryEntry = {\n id: 'breadcrumb',\n title: 'Breadcrumb',\n importPath: '@open-mercato/ui/primitives/breadcrumb',\n docsAnchor: '#breadcrumb',\n variants: [\n {\n id: 'slash',\n title: 'slash (default)',\n render: () => (\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">Products</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Winter catalog</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n code: `import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/products\">Products</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Winter catalog</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n {\n id: 'arrow',\n title: 'arrow divider',\n render: () => (\n <Breadcrumb divider=\"arrow\">\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">Orders</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">#20418</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Shipment</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n code: `import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb divider=\"arrow\">\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/orders\">Orders</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/orders/20418\">#20418</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Shipment</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n {\n id: 'ellipsis',\n title: 'collapsed (ellipsis)',\n render: () => (\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbEllipsis />\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">Attributes</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Color</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>\n ),\n code: `import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbEllipsis />\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/products/attributes\">Attributes</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Color</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n ],\n}\n\nconst paginationEntry: GalleryEntry = {\n id: 'pagination',\n title: 'Pagination',\n importPath: '@open-mercato/ui/primitives/pagination',\n docsAnchor: '#pagination',\n variants: [\n {\n id: 'basic',\n title: 'Basic',\n render: () => <PaginationBasicDemo />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n/>`,\n },\n {\n id: 'compact',\n title: 'Compact',\n render: () => <PaginationCompactDemo />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(1)\n\n<Pagination\n page={page}\n pageSize={20}\n total={120}\n onPageChange={setPage}\n showFirstLast={false}\n showPageSize={false}\n/>`,\n },\n ],\n}\n\nconst segmentedControlEntry: GalleryEntry = {\n id: 'segmented-control',\n title: 'SegmentedControl',\n importPath: '@open-mercato/ui/primitives/segmented-control',\n docsAnchor: '#segmentedcontrol',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <SegmentedControl defaultValue=\"all\" aria-label=\"View filter\">\n <SegmentedControlItem value=\"all\">All</SegmentedControlItem>\n <SegmentedControlItem value=\"active\">Active</SegmentedControlItem>\n <SegmentedControlItem value=\"archived\">Archived</SegmentedControlItem>\n </SegmentedControl>\n ),\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl defaultValue=\"all\" aria-label=\"View filter\">\n <SegmentedControlItem value=\"all\">All</SegmentedControlItem>\n <SegmentedControlItem value=\"active\">Active</SegmentedControlItem>\n <SegmentedControlItem value=\"archived\">Archived</SegmentedControlItem>\n</SegmentedControl>`,\n },\n {\n id: 'small',\n title: 'Small',\n render: () => (\n <SegmentedControl size=\"sm\" defaultValue=\"30d\" aria-label=\"Chart period\">\n <SegmentedControlItem value=\"7d\">7d</SegmentedControlItem>\n <SegmentedControlItem value=\"30d\">30d</SegmentedControlItem>\n <SegmentedControlItem value=\"90d\">90d</SegmentedControlItem>\n <SegmentedControlItem value=\"1y\">1y</SegmentedControlItem>\n </SegmentedControl>\n ),\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl size=\"sm\" defaultValue=\"30d\" aria-label=\"Chart period\">\n <SegmentedControlItem value=\"7d\">7d</SegmentedControlItem>\n <SegmentedControlItem value=\"30d\">30d</SegmentedControlItem>\n <SegmentedControlItem value=\"90d\">90d</SegmentedControlItem>\n <SegmentedControlItem value=\"1y\">1y</SegmentedControlItem>\n</SegmentedControl>`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => (\n <SegmentedControl defaultValue=\"list\" disabled aria-label=\"Layout\">\n <SegmentedControlItem value=\"list\">List</SegmentedControlItem>\n <SegmentedControlItem value=\"grid\">Grid</SegmentedControlItem>\n </SegmentedControl>\n ),\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl defaultValue=\"list\" disabled aria-label=\"Layout\">\n <SegmentedControlItem value=\"list\">List</SegmentedControlItem>\n <SegmentedControlItem value=\"grid\">Grid</SegmentedControlItem>\n</SegmentedControl>`,\n },\n ],\n}\n\nconst accordionEntry: GalleryEntry = {\n id: 'accordion',\n title: 'Accordion',\n importPath: '@open-mercato/ui/primitives/accordion',\n docsAnchor: '#accordion',\n variants: [\n {\n id: 'card',\n title: 'card (default)',\n render: () => (\n <Accordion type=\"single\" collapsible defaultValue=\"shipping\" className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger>Shipping and delivery</AccordionTrigger>\n <AccordionContent>\n Orders placed before 2 PM ship the same business day from the nearest warehouse.\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"returns\">\n <AccordionTrigger>Returns</AccordionTrigger>\n <AccordionContent>\n Items can be returned within 30 days of delivery in their original packaging.\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"payments\">\n <AccordionTrigger>Payment methods</AccordionTrigger>\n <AccordionContent>\n We accept cards, bank transfer, and deferred payment for verified B2B accounts.\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n ),\n code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"single\" collapsible defaultValue=\"shipping\" className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger>Shipping and delivery</AccordionTrigger>\n <AccordionContent>Orders placed before 2 PM ship the same business day.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"returns\">\n <AccordionTrigger>Returns</AccordionTrigger>\n <AccordionContent>Items can be returned within 30 days of delivery.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"payments\">\n <AccordionTrigger>Payment methods</AccordionTrigger>\n <AccordionContent>We accept cards, bank transfer, and deferred payment.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n {\n id: 'left-icon',\n title: 'With leftIcon',\n render: () => (\n <Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>\n <AccordionContent>\n Same-day dispatch on weekdays; delivery typically takes 1\u20133 business days.\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"billing\">\n <AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>\n <AccordionContent>\n Your card is charged when the order ships, never at checkout.\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n ),\n code: `import { CreditCard, Truck } from 'lucide-react'\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>\n <AccordionContent>Same-day dispatch on weekdays.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"billing\">\n <AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>\n <AccordionContent>Your card is charged when the order ships.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n {\n id: 'chevron',\n title: 'Chevron indicator',\n render: () => (\n <Accordion type=\"multiple\" className=\"w-full space-y-2\">\n <AccordionItem value=\"general\">\n <AccordionTrigger triggerIcon=\"chevron\">General</AccordionTrigger>\n <AccordionContent>\n Store name, contact details, and default locale for the storefront.\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"advanced\">\n <AccordionTrigger triggerIcon=\"chevron\">Advanced</AccordionTrigger>\n <AccordionContent>\n Webhooks, API keys, and other developer-facing configuration.\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n ),\n code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"multiple\" className=\"w-full space-y-2\">\n <AccordionItem value=\"general\">\n <AccordionTrigger triggerIcon=\"chevron\">General</AccordionTrigger>\n <AccordionContent>Store name, contact details, and default locale.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"advanced\">\n <AccordionTrigger triggerIcon=\"chevron\">Advanced</AccordionTrigger>\n <AccordionContent>Webhooks, API keys, and developer configuration.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n tabsEntry,\n breadcrumbEntry,\n paginationEntry,\n segmentedControlEntry,\n accordionEntry,\n]\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { CreditCard, LayoutGrid, Settings, ShoppingCart, Truck } from 'lucide-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\nimport { Pagination, type PaginationAppearance } from '@open-mercato/ui/primitives/pagination'\nimport {\n SegmentedControl,\n SegmentedControlItem,\n} from '@open-mercato/ui/primitives/segmented-control'\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '@open-mercato/ui/primitives/accordion'\nimport { SidebarExample, SidebarFeatureExample, SidebarIdentityExample, SidebarItemsExample, TopbarExample, NavigationBrandsExample } from '../demos/shell'\nimport { shellExampleCode } from '../demos/shell-code.generated'\nimport { AiPromptExample, AiIconButtonExamples, AiNavigationExamples, AiSearchExamples, AiAuthExamples, AiSettingsExamples, AiNewChatExample, AiSidebarExample, AiMobileNavigationExample } from '../demos/ai-product'\nimport { aiProductExampleCode } from '../demos/ai-product-code.generated'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// Pagination is a controlled component \u2014 these small wrappers own the page\n// state so the preview stays interactive without polluting the entry shape.\n\nfunction PaginationBasicDemo({ appearance, disabled = false }: { appearance?: PaginationAppearance; disabled?: boolean }) {\n const [page, setPage] = React.useState(2)\n const [pageSize, setPageSize] = React.useState(25)\n return (\n <Pagination\n appearance={appearance}\n disabled={disabled}\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n />\n )\n}\n\nfunction PaginationCompactDemo() {\n const [page, setPage] = React.useState(1)\n return (\n <Pagination\n page={page}\n pageSize={20}\n total={120}\n onPageChange={setPage}\n showFirstLast={false}\n showPageSize={false}\n />\n )\n}\n\nfunction TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {\n const t = useT()\n const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]\n return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>\n {counts.map(count => <Tabs key={count} defaultValue=\"1\" variant={variant} orientation={orientation} className=\"min-w-0\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>\n {orientation === 'vertical' && <span aria-hidden=\"true\" className=\"px-2 py-1 text-xs font-medium uppercase text-muted-foreground\">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}\n {Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className=\"size-5\" />} count={index === 1 ? 12 : undefined}>\n {t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}\n </TabsTrigger>)}\n </TabsList>\n {Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className=\"text-sm text-muted-foreground\">\n {t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}\n </TabsContent>)}\n </Tabs>)}\n </div>\n}\n\nfunction TabsKeyboardDemo() {\n const t = useT()\n return <Tabs defaultValue=\"overview\" variant=\"underline\" className=\"w-full\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.keyboard')}>\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-5\" />}>{t('design_system.gallery.examples.navigation2.overview')}</TabsTrigger>\n <TabsTrigger value=\"locked\" disabled count={4}>{t('design_system.gallery.examples.navigation2.locked')}</TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-5\" />}>{t('design_system.gallery.examples.navigation2.settings')}</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">{t('design_system.gallery.examples.navigation2.keyboardHint')}</TabsContent>\n <TabsContent value=\"settings\">{t('design_system.gallery.examples.navigation2.settingsPanel')}</TabsContent>\n </Tabs>\n}\n\nfunction BreadcrumbQuantityDemo() {\n const t = useT()\n const targetId = React.useId()\n return <div className=\"flex w-full flex-col gap-4\">\n {(['arrow', 'slash', 'dot'] as const).map(divider => <div key={divider} className=\"flex flex-col gap-4\">\n {[3, 4, 5].map(count => <Breadcrumb key={count} divider={divider} aria-label={t('design_system.gallery.examples.navigation2.path', { count })}>\n <BreadcrumbList className=\"flex-wrap\">\n {Array.from({ length: count }, (_, index) => <React.Fragment key={index}>\n {index > 0 && <BreadcrumbSeparator className=\"size-5 justify-center\">{divider === 'dot' ? '\u2022' : undefined}</BreadcrumbSeparator>}\n <BreadcrumbItem>\n {index === count - 1\n ? <BreadcrumbPage>{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbPage>\n : <BreadcrumbLink href={`#${targetId}`}><LayoutGrid className=\"size-5\" aria-hidden=\"true\" />{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbLink>}\n </BreadcrumbItem>\n </React.Fragment>)}\n </BreadcrumbList>\n </Breadcrumb>)}\n </div>)}\n <p id={targetId} tabIndex={-1} className=\"text-sm text-muted-foreground\">{t('design_system.gallery.examples.navigation2.localDestination')}</p>\n </div>\n}\n\nfunction AccordionStartDemo() {\n const t = useT()\n return <Accordion type=\"single\" collapsible defaultValue=\"details\" className=\"w-full max-w-md space-y-2\">\n <AccordionItem value=\"overview\">\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.overview')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"details\">\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.settings')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"locked\" disabled>\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.locked')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n </Accordion>\n}\n\nfunction SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {\n const t = useT()\n const labelId = React.useId()\n const [value, setValue] = React.useState('overview')\n const options = [\n { value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className=\"size-5\" aria-hidden=\"true\" /> },\n ]\n return <div className=\"flex w-full max-w-sm flex-col gap-6\">\n {[false, true].map(disabled => <div key={String(disabled)} className=\"flex flex-col gap-1.5\">\n <Label id={`${labelId}-${disabled}`} className=\"leading-5\">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>\n <SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={`${labelId}-${disabled}`} className=\"h-9 w-full gap-1 rounded-lg border-0 p-1\">\n {options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className=\"h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1\">\n {content !== 'text' && option.icon}\n {content !== 'icon' && option.label}\n </SegmentedControlItem>)}\n </SegmentedControl>\n </div>)}\n </div>\n}\n\nconst tabsEntry: GalleryEntry = {\n id: 'tabs',\n title: 'Tabs',\n importPath: '@open-mercato/ui/primitives/tabs',\n usage: {\n do: [\n 'variant=\"underline\" is the canon for page-level tab strips; pill only for small embedded switchers.',\n 'TabsList always carries an aria-label; use count and leading to add context to triggers.',\n ],\n dont: ['No hand-rolled tab strips from buttons and border classes \u2014 lint flags raw tab lists.'],\n },\n docsAnchor: '#tabs',\n figmaNodeId: '553:734',\n variants: [\n {\n id: 'underline',\n title: 'underline',\n // Underline is the DS canon for page-level tab strips \u2014 flat rail\n // with an accent underline, per-tab `leading` icon and `count` badge.\n render: () => <TabsNavigationUnderlineSample />,\n code: `import { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"orders\" variant=\"underline\">\n <TabsList aria-label=\"Customer sections\">\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-4\" />}>Overview</TabsTrigger>\n <TabsTrigger value=\"orders\" leading={<ShoppingCart className=\"size-4\" />} count={12}>Orders</TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-4\" />}>Settings</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">\u2026</TabsContent>\n <TabsContent value=\"orders\">\u2026</TabsContent>\n <TabsContent value=\"settings\">\u2026</TabsContent>\n</Tabs>`,\n },\n {\n id: 'pill',\n title: 'pill (default)',\n render: () => <TabsNavigationPillSample />,\n code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"preview\">\n <TabsList aria-label=\"Editor view\">\n <TabsTrigger value=\"preview\">Preview</TabsTrigger>\n <TabsTrigger value=\"code\">Code</TabsTrigger>\n <TabsTrigger value=\"logs\">Logs</TabsTrigger>\n </TabsList>\n <TabsContent value=\"preview\">\u2026</TabsContent>\n <TabsContent value=\"code\">\u2026</TabsContent>\n <TabsContent value=\"logs\">\u2026</TabsContent>\n</Tabs>`,\n },\n {\n id: 'pill-vertical',\n title: 'pill, vertical',\n render: () => <TabsNavigationPillVerticalSample />,\n code: `import { Tabs, TabsContent, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\n\n<Tabs defaultValue=\"profile\" orientation=\"vertical\">\n <TabsList aria-label=\"Account settings\">\n <TabsTrigger value=\"profile\">Profile</TabsTrigger>\n <TabsTrigger value=\"billing\">Billing</TabsTrigger>\n <TabsTrigger value=\"security\">Security</TabsTrigger>\n </TabsList>\n <TabsContent value=\"profile\">\u2026</TabsContent>\n <TabsContent value=\"billing\">\u2026</TabsContent>\n <TabsContent value=\"security\">\u2026</TabsContent>\n</Tabs>`,\n },\n {\n id: 'underline-quantities',\n title: 'underline \u00B7 all source counts',\n render: () => <TabsQuantityDemo variant=\"underline\" orientation=\"horizontal\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings } from 'lucide-react'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'\n\nfunction TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {\n const t = useT()\n const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]\n return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>\n {counts.map(count => <Tabs key={count} defaultValue=\"1\" variant={variant} orientation={orientation} className=\"min-w-0\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>\n {orientation === 'vertical' && <span aria-hidden=\"true\" className=\"px-2 py-1 text-xs font-medium uppercase text-muted-foreground\">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}\n {Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className=\"size-5\" />} count={index === 1 ? 12 : undefined}>\n {t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}\n </TabsTrigger>)}\n </TabsList>\n {Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className=\"text-sm text-muted-foreground\">\n {t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}\n </TabsContent>)}\n </Tabs>)}\n </div>\n}\n\n<TabsQuantityDemo variant=\"underline\" orientation=\"horizontal\" />`,\n },\n {\n id: 'card-quantities',\n title: 'card \u00B7 all source counts',\n render: () => <TabsQuantityDemo variant=\"card\" orientation=\"vertical\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings } from 'lucide-react'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'\n\nfunction TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {\n const t = useT()\n const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]\n return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>\n {counts.map(count => <Tabs key={count} defaultValue=\"1\" variant={variant} orientation={orientation} className=\"min-w-0\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>\n {orientation === 'vertical' && <span aria-hidden=\"true\" className=\"px-2 py-1 text-xs font-medium uppercase text-muted-foreground\">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}\n {Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className=\"size-5\" />} count={index === 1 ? 12 : undefined}>\n {t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}\n </TabsTrigger>)}\n </TabsList>\n {Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className=\"text-sm text-muted-foreground\">\n {t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}\n </TabsContent>)}\n </Tabs>)}\n </div>\n}\n\n<TabsQuantityDemo variant=\"card\" orientation=\"vertical\" />`,\n },\n {\n id: 'list-quantities',\n title: 'list \u00B7 all source counts',\n render: () => <TabsQuantityDemo variant=\"list\" orientation=\"vertical\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings } from 'lucide-react'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'\n\nfunction TabsQuantityDemo({ variant, orientation }: { variant: 'underline' | 'card' | 'list'; orientation: 'horizontal' | 'vertical' }) {\n const t = useT()\n const counts = orientation === 'vertical' ? [2, 3, 4, 5, 6, 7, 8] : [2, 3, 4, 5, 6]\n return <div className={orientation === 'vertical' ? 'grid w-full gap-6 xl:grid-cols-2' : 'flex w-full flex-col gap-6'}>\n {counts.map(count => <Tabs key={count} defaultValue=\"1\" variant={variant} orientation={orientation} className=\"min-w-0\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.sections', { count })} className={orientation === 'vertical' ? 'w-64 shrink-0' : 'flex w-full overflow-x-auto'}>\n {orientation === 'vertical' && <span aria-hidden=\"true\" className=\"px-2 py-1 text-xs font-medium uppercase text-muted-foreground\">{t('design_system.gallery.examples.navigation2.selectMenu')}</span>}\n {Array.from({ length: count }, (_, index) => <TabsTrigger key={index} value={String(index + 1)} leading={<LayoutGrid className=\"size-5\" />} count={index === 1 ? 12 : undefined}>\n {t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}\n </TabsTrigger>)}\n </TabsList>\n {Array.from({ length: count }, (_, index) => <TabsContent key={index} value={String(index + 1)} className=\"text-sm text-muted-foreground\">\n {t('design_system.gallery.examples.navigation2.panel', { number: index + 1 })}\n </TabsContent>)}\n </Tabs>)}\n </div>\n}\n\n<TabsQuantityDemo variant=\"list\" orientation=\"vertical\" />`,\n },\n {\n id: 'keyboard-states',\n title: 'Keyboard and disabled tabs',\n render: () => <TabsKeyboardDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings } from 'lucide-react'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@open-mercato/ui/primitives/tabs'\n\nfunction TabsKeyboardDemo() {\n const t = useT()\n return <Tabs defaultValue=\"overview\" variant=\"underline\" className=\"w-full\">\n <TabsList aria-label={t('design_system.gallery.examples.navigation2.keyboard')}>\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-5\" />}>{t('design_system.gallery.examples.navigation2.overview')}</TabsTrigger>\n <TabsTrigger value=\"locked\" disabled count={4}>{t('design_system.gallery.examples.navigation2.locked')}</TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-5\" />}>{t('design_system.gallery.examples.navigation2.settings')}</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">{t('design_system.gallery.examples.navigation2.keyboardHint')}</TabsContent>\n <TabsContent value=\"settings\">{t('design_system.gallery.examples.navigation2.settingsPanel')}</TabsContent>\n </Tabs>\n}\n\n<TabsKeyboardDemo />`,\n },\n ],\n}\n\nconst breadcrumbEntry: GalleryEntry = {\n id: 'breadcrumb',\n figmaNodeId: '447:8832',\n title: 'Breadcrumb',\n importPath: '@open-mercato/ui/primitives/breadcrumb',\n docsAnchor: '#breadcrumb',\n variants: [\n {\n id: 'slash',\n title: 'slash (default)',\n render: () => <BreadcrumbNavigationSlashSample />,\n code: `import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/products\">Products</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Winter catalog</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n {\n id: 'arrow',\n title: 'arrow divider',\n render: () => <BreadcrumbNavigationArrowSample />,\n code: `import {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb divider=\"arrow\">\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/orders\">Orders</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/orders/20418\">#20418</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Shipment</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n {\n id: 'ellipsis',\n title: 'collapsed (ellipsis)',\n render: () => <BreadcrumbNavigationEllipsisSample />,\n code: `import {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@open-mercato/ui/primitives/breadcrumb'\n\n<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend\">Dashboard</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbEllipsis />\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"/backend/products/attributes\">Attributes</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>Color</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`,\n },\n {\n id: 'dividers-quantities',\n title: 'Arrow / Slash / Dot \u00B73,4,5items',\n render: () => <BreadcrumbQuantityDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid } from 'lucide-react'\nimport { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbSeparator, BreadcrumbLink, BreadcrumbPage } from '@open-mercato/ui/primitives/breadcrumb'\n\nfunction BreadcrumbQuantityDemo() {\n const t = useT()\n const targetId = React.useId()\n return <div className=\"flex w-full flex-col gap-4\">\n {(['arrow', 'slash', 'dot'] as const).map(divider => <div key={divider} className=\"flex flex-col gap-4\">\n {[3, 4, 5].map(count => <Breadcrumb key={count} divider={divider} aria-label={t('design_system.gallery.examples.navigation2.path', { count })}>\n <BreadcrumbList className=\"flex-wrap\">\n {Array.from({ length: count }, (_, index) => <React.Fragment key={index}>\n {index > 0 && <BreadcrumbSeparator className=\"size-5 justify-center\">{divider === 'dot' ? '\u2022' : undefined}</BreadcrumbSeparator>}\n <BreadcrumbItem>\n {index === count - 1\n ? <BreadcrumbPage>{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbPage>\n : <BreadcrumbLink href={\\`#\\${targetId}\\`}><LayoutGrid className=\"size-5\" aria-hidden=\"true\" />{t('design_system.gallery.examples.navigation2.section', { number: index + 1 })}</BreadcrumbLink>}\n </BreadcrumbItem>\n </React.Fragment>)}\n </BreadcrumbList>\n </Breadcrumb>)}\n </div>)}\n <p id={targetId} tabIndex={-1} className=\"text-sm text-muted-foreground\">{t('design_system.gallery.examples.navigation2.localDestination')}</p>\n </div>\n}\n\n<BreadcrumbQuantityDemo />`,\n },\n ],\n}\n\nconst paginationEntry: GalleryEntry = {\n id: 'pagination',\n title: 'Pagination',\n importPath: '@open-mercato/ui/primitives/pagination',\n docsAnchor: '#pagination',\n figmaNodeId: '513:3892',\n variants: [\n {\n id: 'basic',\n title: 'Basic',\n render: () => <PaginationBasicDemo />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n/>`,\n },\n {\n id: 'compact',\n title: 'Compact',\n render: () => <PaginationCompactDemo />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(1)\n\n<Pagination\n page={page}\n pageSize={20}\n total={120}\n onPageChange={setPage}\n showFirstLast={false}\n showPageSize={false}\n/>`,\n },\n {\n id: 'source-basic',\n title: 'Basic cells',\n render: () => <PaginationBasicDemo appearance=\"basic\" />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n appearance=\"basic\"\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n/>`,\n },\n {\n id: 'circle',\n title: 'Full radius',\n render: () => <PaginationBasicDemo appearance=\"circle\" />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n appearance=\"circle\"\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n/>`,\n },\n {\n id: 'group',\n title: 'Connected group',\n render: () => <PaginationBasicDemo appearance=\"group\" />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n appearance=\"group\"\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n/>`,\n },\n {\n id: 'disabled',\n title: 'Disabled states',\n render: () => <PaginationBasicDemo appearance=\"circle\" disabled />,\n code: `import * as React from 'react'\nimport { Pagination } from '@open-mercato/ui/primitives/pagination'\n\nconst [page, setPage] = React.useState(2)\nconst [pageSize, setPageSize] = React.useState(25)\n\n<Pagination\n appearance=\"circle\"\n page={page}\n pageSize={pageSize}\n total={400}\n onPageChange={setPage}\n onPageSizeChange={setPageSize}\n disabled\n/>`,\n },\n ],\n}\n\nconst segmentedControlEntry: GalleryEntry = {\n id: 'segmented-control',\n figmaNodeId: '2604:114',\n title: 'SegmentedControl',\n importPath: '@open-mercato/ui/primitives/segmented-control',\n docsAnchor: '#segmentedcontrol',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => <SegmentedControlNavigationDefaultSample />,\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl defaultValue=\"all\" aria-label=\"View filter\">\n <SegmentedControlItem value=\"all\">All</SegmentedControlItem>\n <SegmentedControlItem value=\"active\">Active</SegmentedControlItem>\n <SegmentedControlItem value=\"archived\">Archived</SegmentedControlItem>\n</SegmentedControl>`,\n },\n {\n id: 'small',\n title: 'Small',\n render: () => <SegmentedControlNavigationSmallSample />,\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl size=\"sm\" defaultValue=\"30d\" aria-label=\"Chart period\">\n <SegmentedControlItem value=\"7d\">7d</SegmentedControlItem>\n <SegmentedControlItem value=\"30d\">30d</SegmentedControlItem>\n <SegmentedControlItem value=\"90d\">90d</SegmentedControlItem>\n <SegmentedControlItem value=\"1y\">1y</SegmentedControlItem>\n</SegmentedControl>`,\n },\n {\n id: 'disabled',\n title: 'Disabled',\n render: () => <SegmentedControlNavigationDisabledSample />,\n code: `import { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\n<SegmentedControl defaultValue=\"list\" disabled aria-label=\"Layout\">\n <SegmentedControlItem value=\"list\">List</SegmentedControlItem>\n <SegmentedControlItem value=\"grid\">Grid</SegmentedControlItem>\n</SegmentedControl>`,\n },\n {\n id: 'source-text',\n title: 'Label shell \u00B7 text',\n render: () => <SegmentedSourceDemo content=\"text\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\nfunction SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {\n const t = useT()\n const labelId = React.useId()\n const [value, setValue] = React.useState('overview')\n const options = [\n { value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className=\"size-5\" aria-hidden=\"true\" /> },\n ]\n return <div className=\"flex w-full max-w-sm flex-col gap-6\">\n {[false, true].map(disabled => <div key={String(disabled)} className=\"flex flex-col gap-1.5\">\n <Label id={\\`\\${labelId}-\\${disabled}\\`} className=\"leading-5\">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>\n <SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\\`\\${labelId}-\\${disabled}\\`} className=\"h-9 w-full gap-1 rounded-lg border-0 p-1\">\n {options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className=\"h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1\">\n {content !== 'text' && option.icon}\n {content !== 'icon' && option.label}\n </SegmentedControlItem>)}\n </SegmentedControl>\n </div>)}\n </div>\n}\n\n<SegmentedSourceDemo content=\"text\" />`,\n },\n {\n id: 'source-leading',\n title: 'Label shell \u00B7 leading',\n render: () => <SegmentedSourceDemo content=\"leading\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\nfunction SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {\n const t = useT()\n const labelId = React.useId()\n const [value, setValue] = React.useState('overview')\n const options = [\n { value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className=\"size-5\" aria-hidden=\"true\" /> },\n ]\n return <div className=\"flex w-full max-w-sm flex-col gap-6\">\n {[false, true].map(disabled => <div key={String(disabled)} className=\"flex flex-col gap-1.5\">\n <Label id={\\`\\${labelId}-\\${disabled}\\`} className=\"leading-5\">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>\n <SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\\`\\${labelId}-\\${disabled}\\`} className=\"h-9 w-full gap-1 rounded-lg border-0 p-1\">\n {options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className=\"h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1\">\n {content !== 'text' && option.icon}\n {content !== 'icon' && option.label}\n </SegmentedControlItem>)}\n </SegmentedControl>\n </div>)}\n </div>\n}\n\n<SegmentedSourceDemo content=\"leading\" />`,\n },\n {\n id: 'source-icon',\n title: 'Label shell \u00B7 icon',\n render: () => <SegmentedSourceDemo content=\"icon\" />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { LayoutGrid, Settings, ShoppingCart } from 'lucide-react'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport { SegmentedControl, SegmentedControlItem } from '@open-mercato/ui/primitives/segmented-control'\n\nfunction SegmentedSourceDemo({ content }: { content: 'text' | 'leading' | 'icon' }) {\n const t = useT()\n const labelId = React.useId()\n const [value, setValue] = React.useState('overview')\n const options = [\n { value: 'overview', label: t('design_system.gallery.examples.navigation2.overview'), icon: <LayoutGrid className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'settings', label: t('design_system.gallery.examples.navigation2.settings'), icon: <Settings className=\"size-5\" aria-hidden=\"true\" /> },\n { value: 'orders', label: t('design_system.gallery.examples.navigation2.orders'), icon: <ShoppingCart className=\"size-5\" aria-hidden=\"true\" /> },\n ]\n return <div className=\"flex w-full max-w-sm flex-col gap-6\">\n {[false, true].map(disabled => <div key={String(disabled)} className=\"flex flex-col gap-1.5\">\n <Label id={\\`\\${labelId}-\\${disabled}\\`} className=\"leading-5\">{disabled ? t('design_system.gallery.examples.navigation2.locked') : t('design_system.gallery.examples.navigation2.selectMenu')}</Label>\n <SegmentedControl value={value} onValueChange={setValue} disabled={disabled} aria-labelledby={\\`\\${labelId}-\\${disabled}\\`} className=\"h-9 w-full gap-1 rounded-lg border-0 p-1\">\n {options.map(option => <SegmentedControlItem key={option.value} value={option.value} aria-label={content === 'icon' ? option.label : undefined} className=\"h-7 min-w-0 flex-1 gap-1.5 rounded-md p-1\">\n {content !== 'text' && option.icon}\n {content !== 'icon' && option.label}\n </SegmentedControlItem>)}\n </SegmentedControl>\n </div>)}\n </div>\n}\n\n<SegmentedSourceDemo content=\"icon\" />`,\n },\n ],\n}\n\nconst accordionEntry: GalleryEntry = {\n id: 'accordion',\n figmaNodeId: '210:4022',\n title: 'Accordion',\n importPath: '@open-mercato/ui/primitives/accordion',\n docsAnchor: '#accordion',\n variants: [\n {\n id: 'card',\n title: 'card (default)',\n render: () => <AccordionNavigationCardSample />,\n code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"single\" collapsible defaultValue=\"shipping\" className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger>Shipping and delivery</AccordionTrigger>\n <AccordionContent>Orders placed before 2 PM ship the same business day.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"returns\">\n <AccordionTrigger>Returns</AccordionTrigger>\n <AccordionContent>Items can be returned within 30 days of delivery.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"payments\">\n <AccordionTrigger>Payment methods</AccordionTrigger>\n <AccordionContent>We accept cards, bank transfer, and deferred payment.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n {\n id: 'left-icon',\n title: 'With leftIcon',\n render: () => <AccordionNavigationLeftIconSample />,\n code: `import { CreditCard, Truck } from 'lucide-react'\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger leftIcon={<Truck />}>How fast is shipping?</AccordionTrigger>\n <AccordionContent>Same-day dispatch on weekdays.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"billing\">\n <AccordionTrigger leftIcon={<CreditCard />}>When am I charged?</AccordionTrigger>\n <AccordionContent>Your card is charged when the order ships.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n {\n id: 'chevron',\n title: 'Chevron indicator',\n render: () => <AccordionNavigationChevronSample />,\n code: `import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@open-mercato/ui/primitives/accordion'\n\n<Accordion type=\"multiple\" className=\"w-full space-y-2\">\n <AccordionItem value=\"general\">\n <AccordionTrigger triggerIcon=\"chevron\">General</AccordionTrigger>\n <AccordionContent>Store name, contact details, and default locale.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"advanced\">\n <AccordionTrigger triggerIcon=\"chevron\">Advanced</AccordionTrigger>\n <AccordionContent>Webhooks, API keys, and developer configuration.</AccordionContent>\n </AccordionItem>\n</Accordion>`,\n },\n {\n id: 'indicator-start',\n title: 'Indicator at start \u00B7 closed/open/disabled',\n render: () => <AccordionStartDemo />,\n code: `import * as React from 'react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@open-mercato/ui/primitives/accordion'\n\nfunction AccordionStartDemo() {\n const t = useT()\n return <Accordion type=\"single\" collapsible defaultValue=\"details\" className=\"w-full max-w-md space-y-2\">\n <AccordionItem value=\"overview\">\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.overview')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"details\">\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.settings')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"locked\" disabled>\n <AccordionTrigger iconPosition=\"start\">{t('design_system.gallery.examples.navigation2.locked')}</AccordionTrigger>\n <AccordionContent>{t('design_system.gallery.examples.navigation2.accordionBody')}</AccordionContent>\n </AccordionItem>\n </Accordion>\n}\n\n<AccordionStartDemo />`,\n },\n ],\n}\n\nconst sidebarEntry: GalleryEntry = {\n id: 'sidebar',\n title: 'Sidebar and Topbar',\n figmaNodeId: '3802:11759',\n importPath: '@open-mercato/ui/primitives/sidebar',\n usage: { do: ['Presentational composition with local state; the application AppShell still owns tenant APIs and injection points.', 'Hover, current navigation, workspace switching, filtering and feature-card actions use real controls.', 'Feature-card primary and neutral surfaces use the existing accessible application palettes; they do not claim exact Figma color parity.'] },\n variants: [\n { id: 'items', title: 'Sidebar items / expanded and collapsed', render: () => <SidebarItemsExample />, code: shellExampleCode('<SidebarItemsExample />') },\n { id: 'identity-cards', title: 'Header and profile cards / expanded and collapsed', render: () => <SidebarIdentityExample />, code: shellExampleCode('<SidebarIdentityExample />') },\n { id: 'feature-meeting', title: 'Feature card / meeting / 4 styles', render: () => <SidebarFeatureExample type=\"meeting\" />, code: shellExampleCode('<SidebarFeatureExample type=\"meeting\" />') },\n { id: 'feature-progress', title: 'Feature card / progress / 4 styles', render: () => <SidebarFeatureExample type=\"progress\" />, code: shellExampleCode('<SidebarFeatureExample type=\"progress\" />') },\n { id: 'feature-link', title: 'Feature card / link / 4 styles', render: () => <SidebarFeatureExample type=\"link\" />, code: shellExampleCode('<SidebarFeatureExample type=\"link\" />') },\n { id: 'feature-gift', title: 'Feature card / gift / 4 styles', render: () => <SidebarFeatureExample type=\"gift\" />, code: shellExampleCode('<SidebarFeatureExample type=\"gift\" />') },\n { id: 'feature-storage', title: 'Feature card / storage / 4 styles', render: () => <SidebarFeatureExample type=\"storage\" />, code: shellExampleCode('<SidebarFeatureExample type=\"storage\" />') },\n { id: 'feature-support', title: 'Feature card / support / 4 styles', render: () => <SidebarFeatureExample type=\"support\" />, code: shellExampleCode('<SidebarFeatureExample type=\"support\" />') },\n { id: 'topbar-hr-default', title: 'HR topbar / default', render: () => <TopbarExample product=\"hr\" />, code: shellExampleCode('<TopbarExample product=\"hr\" />') },\n { id: 'topbar-hr-icons', title: 'HR topbar / icons', render: () => <TopbarExample product=\"hr\" icons />, code: shellExampleCode('<TopbarExample product=\"hr\" icons />') },\n { id: 'topbar-finance-default', title: 'FINANCE topbar / default', render: () => <TopbarExample product=\"finance\" />, code: shellExampleCode('<TopbarExample product=\"finance\" />') },\n { id: 'topbar-finance-icons', title: 'FINANCE topbar / icons', render: () => <TopbarExample product=\"finance\" icons />, code: shellExampleCode('<TopbarExample product=\"finance\" icons />') },\n { id: 'brand-artwork', title: 'Synergy and Apex / 6 original assets', render: () => <NavigationBrandsExample />, code: shellExampleCode('<NavigationBrandsExample />') },\n ],\n}\n\nconst promptAreaEntry: GalleryEntry = {\n id: 'prompt-area',\n title: 'PromptArea',\n figmaNodeId: '191226:4236',\n importPath: '@open-mercato/ui/primitives/prompt-area',\n usage: { do: ['Desktop and mobile compositions expose all 18 source variants through real hover and focus states.', 'Enter saves a local draft; Shift+Enter inserts a line break. Attachments stay in this browser and can be removed.', 'Model names reproduce source labels. These examples do not call a model or represent a subscription.'] },\n variants: [\n { id: 'desktop', title: 'Desktop / empty / Default, Hover, Active', render: () => <AiPromptExample />, code: aiProductExampleCode('<AiPromptExample />') },\n { id: 'desktop-file', title: 'Desktop / file', render: () => <AiPromptExample attachment=\"file\" />, code: aiProductExampleCode('<AiPromptExample attachment=\"file\" />') },\n { id: 'desktop-image', title: 'Desktop / original image', render: () => <AiPromptExample attachment=\"image\" />, code: aiProductExampleCode('<AiPromptExample attachment=\"image\" />') },\n { id: 'mobile', title: 'Mobile / empty / Default, Hover, Active', render: () => <AiPromptExample compact />, code: aiProductExampleCode('<AiPromptExample compact />') },\n { id: 'mobile-file', title: 'Mobile / file', render: () => <AiPromptExample compact attachment=\"file\" />, code: aiProductExampleCode('<AiPromptExample compact attachment=\"file\" />') },\n { id: 'mobile-image', title: 'Mobile / original image', render: () => <AiPromptExample compact attachment=\"image\" />, code: aiProductExampleCode('<AiPromptExample compact attachment=\"image\" />') },\n ],\n}\n\n// Composed AI-product patterns: point at the demo module rather than claiming a primitive's import path.\nconst aiProductPatternCode = (expression: string) => `import { ${expression.match(/<(\\w+)/)?.[1] ?? 'AiPromptExample'} } from '@open-mercato/core/modules/design_system/gallery/demos/ai-product'\n\n${expression}\n`\n\nconst aiControlsEntry: GalleryEntry = {\n id: 'ai-controls',\n title: 'AI Product / Controls',\n figmaNodeId: '191042:2378',\n importPath: '@open-mercato/core/modules/design_system/gallery/demos/ai-product',\n usage: { do: ['Source-specific compositions reuse existing primitives with additive semantic radius and typography tokens.', 'Hover, keyboard focus and selected states are real interactions. Authentication buttons only display local explanatory feedback.', 'Original authentication glyphs are preserved as source assets. Application fonts, focus and semantic colors remain explicit adaptations.'] },\n variants: [\n { id: 'chat-buttons', title: 'Chat custom buttons / 2 styles \u00D7 3 states', render: () => <AiIconButtonExamples chat />, code: aiProductPatternCode('<AiIconButtonExamples chat />') },\n { id: 'icon-buttons', title: 'Custom icon buttons / 4 sizes \u00D7 2 tones \u00D7 3 states', render: () => <AiIconButtonExamples />, code: aiProductPatternCode('<AiIconButtonExamples />') },\n { id: 'search', title: 'Search / 2 sizes \u00D7 3 states', render: () => <AiSearchExamples />, code: aiProductPatternCode('<AiSearchExamples />') },\n { id: 'new-chat', title: 'New chat / Default, Hover', render: () => <AiNewChatExample />, code: aiProductPatternCode('<AiNewChatExample />') },\n { id: 'navigation-items', title: 'Navigation items / 12 variants', render: () => <AiNavigationExamples />, code: aiProductPatternCode('<AiNavigationExamples />') },\n { id: 'auth-icons', title: 'Authentication / 8 original icons', render: () => <AiAuthExamples />, code: aiProductPatternCode('<AiAuthExamples />') },\n { id: 'social-google', title: 'Google button / local feedback', render: () => <AiAuthExamples kind=\"social\" />, code: aiProductPatternCode('<AiAuthExamples kind=\"social\" />') },\n { id: 'text-input', title: 'Text input / 5 source states', render: () => <AiAuthExamples kind=\"text\" />, code: aiProductPatternCode('<AiAuthExamples kind=\"text\" />') },\n { id: 'digit-input', title: 'Digit input / 5 source states', render: () => <AiAuthExamples kind=\"digits\" />, code: aiProductPatternCode('<AiAuthExamples kind=\"digits\" />') },\n { id: 'settings', title: 'Settings navigation, select, counter and model / 15 variants', render: () => <AiSettingsExamples />, code: aiProductPatternCode('<AiSettingsExamples />') },\n ],\n}\n\nconst aiSidebarEntry: GalleryEntry = {\n id: 'ai-sidebar',\n title: 'AI Product / Sidebar',\n figmaNodeId: '191050:3105',\n importPath: '@open-mercato/ui/primitives/sidebar',\n usage: { do: ['All four source sidebar variants render using the presentational Sidebar without application API calls.', 'Search filters the local history, navigation updates the selected item, and new chat creates a local draft counter.', 'The collapsed logo expands the sidebar; this adds a keyboard-accessible restoration control to the source composition.'] },\n variants: [\n { id: 'search-01', title: 'Search 01 / expanded / 272 \u00D7 900', render: () => <AiSidebarExample />, code: aiProductExampleCode('<AiSidebarExample />') },\n { id: 'search-02', title: 'Search 02 / expanded', render: () => <AiSidebarExample search=\"02\" />, code: aiProductExampleCode('<AiSidebarExample search=\"02\" />') },\n { id: 'search-03', title: 'Search 03 / expanded', render: () => <AiSidebarExample search=\"03\" />, code: aiProductExampleCode('<AiSidebarExample search=\"03\" />') },\n { id: 'collapsed', title: 'Search 01 / collapsed / 72 \u00D7 900', render: () => <AiSidebarExample initialCollapsed />, code: aiProductExampleCode('<AiSidebarExample initialCollapsed />') },\n ],\n}\n\nconst aiMobileNavigationEntry: GalleryEntry = {\n id: 'ai-mobile-navigation',\n title: 'AI Product / Mobile Navigation',\n figmaNodeId: '192681:59134',\n importPath: '@open-mercato/core/modules/design_system/gallery/demos/ai-product',\n usage: { do: ['All four 390 \u00D7 64 source compositions have working local controls and keyboard-accessible popovers.', 'Add project stores the entered name only in component state. Escape closes the popover, Enter or Ctrl/Cmd+Enter confirms.'] },\n variants: [\n { id: 'default', title: 'Default', render: () => <AiMobileNavigationExample />, code: aiProductPatternCode('<AiMobileNavigationExample />') },\n { id: 'in-projects', title: 'In Projects', render: () => <AiMobileNavigationExample kind=\"in-projects\" />, code: aiProductPatternCode('<AiMobileNavigationExample kind=\"in-projects\" />') },\n { id: 'projects', title: 'Projects', render: () => <AiMobileNavigationExample kind=\"projects\" />, code: aiProductPatternCode('<AiMobileNavigationExample kind=\"projects\" />') },\n { id: 'project-details', title: 'Project Details', render: () => <AiMobileNavigationExample kind=\"project-details\" />, code: aiProductPatternCode('<AiMobileNavigationExample kind=\"project-details\" />') },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n promptAreaEntry,\n aiControlsEntry,\n aiSidebarEntry,\n aiMobileNavigationEntry,\n sidebarEntry,\n tabsEntry,\n breadcrumbEntry,\n paginationEntry,\n segmentedControlEntry,\n accordionEntry,\n]\n\nfunction TabsNavigationUnderlineSample() {\n const t = useT()\n return (<Tabs defaultValue=\"orders\" variant=\"underline\" className=\"w-full\">\n <TabsList aria-label={t('design_system.gallery.sampleCopy.customerSections')}>\n <TabsTrigger value=\"overview\" leading={<LayoutGrid className=\"size-4\" />}>\n {t('design_system.gallery.examples.navigation2.overview')}\n </TabsTrigger>\n <TabsTrigger value=\"orders\" leading={<ShoppingCart className=\"size-4\" />} count={12}>\n {t('design_system.gallery.examples.navigation2.orders')}\n </TabsTrigger>\n <TabsTrigger value=\"settings\" leading={<Settings className=\"size-4\" />}>\n {t('design_system.gallery.examples.navigation2.settings')}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.customerOverviewPanel')}</p>\n </TabsContent>\n <TabsContent value=\"orders\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.12OrdersInTheLast30Days')}</p>\n </TabsContent>\n <TabsContent value=\"settings\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.notificationAndAccessSettings')}</p>\n </TabsContent>\n </Tabs>)\n}\n\nfunction TabsNavigationPillSample() {\n const t = useT()\n return (<Tabs defaultValue=\"preview\">\n <TabsList aria-label={t('design_system.gallery.sampleCopy.editorView')}>\n <TabsTrigger value=\"preview\">{t('design_system.gallery.samples.table.preview')}</TabsTrigger>\n <TabsTrigger value=\"code\">{t('design_system.gallery.samples.richEditor.labels.code')}</TabsTrigger>\n <TabsTrigger value=\"logs\">{t('design_system.gallery.sampleCopy.logs')}</TabsTrigger>\n </TabsList>\n <TabsContent value=\"preview\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.renderedPreview')}</p>\n </TabsContent>\n <TabsContent value=\"code\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.sourceCodePanel')}</p>\n </TabsContent>\n <TabsContent value=\"logs\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.runtimeLogsPanel')}</p>\n </TabsContent>\n </Tabs>)\n}\n\nfunction TabsNavigationPillVerticalSample() {\n const t = useT()\n return (<Tabs defaultValue=\"profile\" orientation=\"vertical\" className=\"w-full\">\n <TabsList aria-label={t('design_system.gallery.samples.crypto.accountSettings')}>\n <TabsTrigger value=\"profile\">{t('design_system.gallery.samples.crypto.profile')}</TabsTrigger>\n <TabsTrigger value=\"billing\">{t('design_system.gallery.samples.marketing.billing')}</TabsTrigger>\n <TabsTrigger value=\"security\">{t('design_system.gallery.sampleCopy.security')}</TabsTrigger>\n </TabsList>\n <TabsContent value=\"profile\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.profileSettingsPanel')}</p>\n </TabsContent>\n <TabsContent value=\"billing\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.billingSettingsPanel')}</p>\n </TabsContent>\n <TabsContent value=\"security\">\n <p className=\"text-sm text-muted-foreground\">{t('design_system.gallery.sampleCopy.securitySettingsPanel')}</p>\n </TabsContent>\n </Tabs>)\n}\n\nfunction BreadcrumbNavigationSlashSample() {\n const t = useT()\n return (<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">{t('design_system.gallery.examples.shell.dashboard')}</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">{t('design_system.gallery.sampleCopy.products')}</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>{t('design_system.gallery.sampleCopy.winterCatalog')}</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>)\n}\n\nfunction BreadcrumbNavigationArrowSample() {\n const t = useT()\n return (<Breadcrumb divider=\"arrow\">\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">{t('design_system.gallery.examples.navigation2.orders')}</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">#20418</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>{t('design_system.gallery.sampleCopy.shipment')}</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>)\n}\n\nfunction BreadcrumbNavigationEllipsisSample() {\n const t = useT()\n return (<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">{t('design_system.gallery.examples.shell.dashboard')}</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbEllipsis />\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#gallery-entry-breadcrumb\">{t('design_system.gallery.sampleCopy.attributes')}</BreadcrumbLink>\n </BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbPage>{t('design_system.gallery.samples.richEditor.labels.textColor')}</BreadcrumbPage>\n </BreadcrumbItem>\n </BreadcrumbList>\n </Breadcrumb>)\n}\n\nfunction SegmentedControlNavigationDefaultSample() {\n const t = useT()\n return (<SegmentedControl defaultValue=\"all\" aria-label={t('design_system.gallery.sampleCopy.viewFilter')}>\n <SegmentedControlItem value=\"all\">{t('design_system.gallery.samples.feeds.all')}</SegmentedControlItem>\n <SegmentedControlItem value=\"active\">{t('design_system.gallery.samples.finance.active')}</SegmentedControlItem>\n <SegmentedControlItem value=\"archived\">{t('design_system.gallery.sampleCopy.archived')}</SegmentedControlItem>\n </SegmentedControl>)\n}\n\nfunction SegmentedControlNavigationSmallSample() {\n const t = useT()\n return (<SegmentedControl size=\"sm\" defaultValue={t('design_system.gallery.sampleCopy.30d')} aria-label={t('design_system.gallery.samples.crypto.chartRange')}>\n <SegmentedControlItem value=\"7d\">{t('design_system.gallery.sampleCopy.7d')}</SegmentedControlItem>\n <SegmentedControlItem value=\"30d\">{t('design_system.gallery.sampleCopy.30d')}</SegmentedControlItem>\n <SegmentedControlItem value=\"90d\">{t('design_system.gallery.sampleCopy.90d')}</SegmentedControlItem>\n <SegmentedControlItem value=\"1y\">{t('design_system.gallery.sampleCopy.1y')}</SegmentedControlItem>\n </SegmentedControl>)\n}\n\nfunction SegmentedControlNavigationDisabledSample() {\n const t = useT()\n return (<SegmentedControl defaultValue=\"list\" disabled aria-label={t('design_system.gallery.sampleCopy.layout')}>\n <SegmentedControlItem value=\"list\">{t('design_system.gallery.sampleCopy.list')}</SegmentedControlItem>\n <SegmentedControlItem value=\"grid\">{t('design_system.gallery.sampleCopy.grid')}</SegmentedControlItem>\n </SegmentedControl>)\n}\n\nfunction AccordionNavigationCardSample() {\n const t = useT()\n return (<Accordion type=\"single\" collapsible defaultValue=\"shipping\" className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger>{t('design_system.gallery.sampleCopy.shippingAndDelivery')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.ordersPlacedBefore2PMShipTheSameBusinessDay')}\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"returns\">\n <AccordionTrigger>{t('design_system.gallery.sampleCopy.returns')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.itemsCanBeReturnedWithin30DaysOfDeliveryIn')}\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"payments\">\n <AccordionTrigger>{t('design_system.gallery.sampleCopy.paymentMethods')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.weAcceptCardsBankTransferAndDeferredPaymentForVerified')}\n </AccordionContent>\n </AccordionItem>\n </Accordion>)\n}\n\nfunction AccordionNavigationLeftIconSample() {\n const t = useT()\n return (<Accordion type=\"single\" collapsible className=\"w-full space-y-2\">\n <AccordionItem value=\"shipping\">\n <AccordionTrigger leftIcon={<Truck />}>{t('design_system.gallery.sampleCopy.howFastIsShipping')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.samedayDispatchOnWeekdaysDeliveryTypicallyTakes13BusinessDays')}\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"billing\">\n <AccordionTrigger leftIcon={<CreditCard />}>{t('design_system.gallery.sampleCopy.whenAmICharged')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.yourCardIsChargedWhenTheOrderShipsNeverAt')}\n </AccordionContent>\n </AccordionItem>\n </Accordion>)\n}\n\nfunction AccordionNavigationChevronSample() {\n const t = useT()\n return (<Accordion type=\"multiple\" className=\"w-full space-y-2\">\n <AccordionItem value=\"general\">\n <AccordionTrigger triggerIcon=\"chevron\">{t('design_system.gallery.sampleCopy.general')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.storeNameContactDetailsAndDefaultLocaleForTheStorefront')}\n </AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"advanced\">\n <AccordionTrigger triggerIcon=\"chevron\">{t('design_system.gallery.samples.finance.advanced')}</AccordionTrigger>\n <AccordionContent>\n {t('design_system.gallery.sampleCopy.webhooksAPIKeysAndOtherDeveloperfacingConfiguration')}\n </AccordionContent>\n </AccordionItem>\n </Accordion>)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,21 +1,109 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
2
3
  import * as React from "react";
3
4
  import { Bell } from "lucide-react";
4
5
  import { Button } from "@open-mercato/ui/primitives/button";
5
6
  import { IconButton } from "@open-mercato/ui/primitives/icon-button";
6
- import {
7
- NotificationCountBadge,
8
- NotificationItem,
9
- NotificationPanel
10
- } from "@open-mercato/ui/backend/notifications";
11
- const galleryT = (key, fallbackOrParams, params) => {
12
- const fallback = typeof fallbackOrParams === "string" ? fallbackOrParams : key;
13
- const variables = (typeof fallbackOrParams === "object" ? fallbackOrParams : params) ?? {};
14
- return Object.entries(variables).reduce(
15
- (text, [name, value]) => text.replaceAll(`{${name}}`, String(value)),
16
- fallback
7
+ import { NotificationCountBadge, NotificationItem, NotificationPanel } from "@open-mercato/ui/backend/notifications";
8
+ function NotificationBellEntryPresentationalMockPreview() {
9
+ const t = useT();
10
+ return /* @__PURE__ */ jsxs(
11
+ IconButton,
12
+ {
13
+ variant: "ghost",
14
+ size: "sm",
15
+ className: "relative",
16
+ "aria-label": t("design_system.gallery.samples.content.3UnreadNotifications"),
17
+ children: [
18
+ /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
19
+ /* @__PURE__ */ jsx(NotificationCountBadge, { count: 3 })
20
+ ]
21
+ }
17
22
  );
18
- };
23
+ }
24
+ function NotificationCountBadgeEntryCountsPreview() {
25
+ const t = useT();
26
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
27
+ /* @__PURE__ */ jsxs(
28
+ IconButton,
29
+ {
30
+ variant: "ghost",
31
+ size: "sm",
32
+ className: "relative",
33
+ "aria-label": t("design_system.gallery.samples.content.3UnreadNotifications"),
34
+ children: [
35
+ /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
36
+ /* @__PURE__ */ jsx(NotificationCountBadge, { count: 3 })
37
+ ]
38
+ }
39
+ ),
40
+ /* @__PURE__ */ jsxs(
41
+ IconButton,
42
+ {
43
+ variant: "ghost",
44
+ size: "sm",
45
+ className: "relative",
46
+ "aria-label": t("design_system.gallery.samples.content.12UnreadNotifications"),
47
+ children: [
48
+ /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
49
+ /* @__PURE__ */ jsx(NotificationCountBadge, { count: 12 })
50
+ ]
51
+ }
52
+ ),
53
+ /* @__PURE__ */ jsxs(
54
+ IconButton,
55
+ {
56
+ variant: "ghost",
57
+ size: "sm",
58
+ className: "relative",
59
+ "aria-label": t("design_system.gallery.samples.content.120UnreadNotifications"),
60
+ children: [
61
+ /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
62
+ /* @__PURE__ */ jsx(NotificationCountBadge, { count: 120 })
63
+ ]
64
+ }
65
+ )
66
+ ] });
67
+ }
68
+ function NotificationItemEntryUnreadInfoPreview() {
69
+ const t = useT();
70
+ return /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
71
+ NotificationItem,
72
+ {
73
+ notification: unreadInfoNotification(t),
74
+ onMarkAsRead: noopMarkAsRead,
75
+ onExecuteAction: noopExecuteAction,
76
+ onDismiss: noopDismiss,
77
+ t
78
+ }
79
+ ) });
80
+ }
81
+ function NotificationItemEntryWithBodyPreview() {
82
+ const t = useT();
83
+ return /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
84
+ NotificationItem,
85
+ {
86
+ notification: successWithBodyNotification(t),
87
+ onMarkAsRead: noopMarkAsRead,
88
+ onExecuteAction: noopExecuteAction,
89
+ onDismiss: noopDismiss,
90
+ t
91
+ }
92
+ ) });
93
+ }
94
+ function NotificationItemEntryWithActionsPreview() {
95
+ const t = useT();
96
+ return /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
97
+ NotificationItem,
98
+ {
99
+ notification: actionRequiredNotification(t),
100
+ onMarkAsRead: noopMarkAsRead,
101
+ onExecuteAction: noopExecuteAction,
102
+ onDismiss: noopDismiss,
103
+ t
104
+ }
105
+ ) });
106
+ }
19
107
  const minutesAgo = (minutes) => new Date(Date.now() - minutes * 6e4).toISOString();
20
108
  const noopMarkAsRead = async () => {
21
109
  };
@@ -26,7 +114,6 @@ function mockNotification(overrides) {
26
114
  return {
27
115
  id: "gallery-notification",
28
116
  type: "gallery.demo",
29
- title: "Notification",
30
117
  severity: "info",
31
118
  status: "unread",
32
119
  actions: [],
@@ -34,57 +121,66 @@ function mockNotification(overrides) {
34
121
  ...overrides
35
122
  };
36
123
  }
37
- const unreadInfoNotification = mockNotification({
124
+ const unreadInfoNotification = (t) => mockNotification({
38
125
  id: "gallery-unread-info",
39
- title: "Nightly import finished",
126
+ title: t("design_system.gallery.samples.content.nightlyImportFinished"),
40
127
  severity: "info",
41
128
  status: "unread",
42
129
  sourceModule: "catalog",
43
130
  createdAt: minutesAgo(4)
44
131
  });
45
- const successWithBodyNotification = mockNotification({
132
+ const successWithBodyNotification = (t) => mockNotification({
46
133
  id: "gallery-success-body",
47
- title: "Order #10023 shipped",
48
- body: "Carrier picked up 3 parcels. Tracking numbers were emailed to the customer.",
134
+ title: t("design_system.gallery.samples.content.order10023Shipped"),
135
+ body: t("design_system.gallery.samples.content.carrierPickedUp3ParcelsTrackingNumbersWereEmailedToTheCustomer"),
49
136
  severity: "success",
50
137
  status: "read",
51
138
  sourceModule: "sales",
52
139
  createdAt: minutesAgo(35)
53
140
  });
54
- const actionRequiredNotification = mockNotification({
141
+ const actionRequiredNotification = (t) => mockNotification({
55
142
  id: "gallery-action-required",
56
- title: "Price list awaiting approval",
57
- body: "Wholesale EU price list changes 214 products.",
143
+ title: t("design_system.gallery.samples.content.priceListAwaitingApproval"),
144
+ body: t("design_system.gallery.samples.content.wholesaleEuPriceListChanges214Products"),
58
145
  severity: "warning",
59
146
  status: "unread",
60
147
  sourceModule: "pricing",
61
148
  actions: [
62
- { id: "review", label: "Review changes", variant: "outline" },
63
- { id: "approve", label: "Approve", variant: "default" }
149
+ {
150
+ id: "review",
151
+ label: t("design_system.gallery.samples.content.reviewChanges"),
152
+ variant: "outline"
153
+ },
154
+ {
155
+ id: "approve",
156
+ label: t("design_system.gallery.samples.content.approve"),
157
+ variant: "default"
158
+ }
64
159
  ],
65
160
  createdAt: minutesAgo(90)
66
161
  });
67
- const panelNotifications = [
68
- unreadInfoNotification,
69
- actionRequiredNotification,
70
- successWithBodyNotification
162
+ const panelNotifications = (t) => [
163
+ unreadInfoNotification(t),
164
+ actionRequiredNotification(t),
165
+ successWithBodyNotification(t)
71
166
  ];
72
167
  function DemoNotificationPanel() {
168
+ const t = useT();
73
169
  const [open, setOpen] = React.useState(false);
74
170
  return /* @__PURE__ */ jsxs(Fragment, { children: [
75
- /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => setOpen(true), children: "Open notification panel" }),
171
+ /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => setOpen(true), children: t("design_system.gallery.samples.content.openNotificationPanel") }),
76
172
  /* @__PURE__ */ jsx(
77
173
  NotificationPanel,
78
174
  {
79
175
  open,
80
176
  onOpenChange: setOpen,
81
- notifications: panelNotifications,
177
+ notifications: panelNotifications(t),
82
178
  unreadCount: 2,
83
179
  onMarkAsRead: noopMarkAsRead,
84
180
  onExecuteAction: noopExecuteAction,
85
181
  onDismiss: noopDismiss,
86
182
  onMarkAllRead: noopMarkAsRead,
87
- t: galleryT
183
+ t
88
184
  }
89
185
  )
90
186
  ] });
@@ -97,10 +193,7 @@ const notificationBellEntry = {
97
193
  {
98
194
  id: "presentational-mock",
99
195
  title: "Presentational mock (live bell is SSE-wired)",
100
- render: () => /* @__PURE__ */ jsxs(IconButton, { variant: "ghost", size: "sm", className: "relative", "aria-label": "3 unread notifications", children: [
101
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
102
- /* @__PURE__ */ jsx(NotificationCountBadge, { count: 3 })
103
- ] }),
196
+ render: () => /* @__PURE__ */ jsx(NotificationBellEntryPresentationalMockPreview, {}),
104
197
  code: `import { NotificationBell } from '@open-mercato/ui/backend/notifications'
105
198
 
106
199
  // Wired to the notifications API + SSE \u2014 AppShell renders one in the topbar.
@@ -116,20 +209,7 @@ const notificationCountBadgeEntry = {
116
209
  {
117
210
  id: "counts",
118
211
  title: "Counts (caps at 99+)",
119
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
120
- /* @__PURE__ */ jsxs(IconButton, { variant: "ghost", size: "sm", className: "relative", "aria-label": "3 unread notifications", children: [
121
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
122
- /* @__PURE__ */ jsx(NotificationCountBadge, { count: 3 })
123
- ] }),
124
- /* @__PURE__ */ jsxs(IconButton, { variant: "ghost", size: "sm", className: "relative", "aria-label": "12 unread notifications", children: [
125
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
126
- /* @__PURE__ */ jsx(NotificationCountBadge, { count: 12 })
127
- ] }),
128
- /* @__PURE__ */ jsxs(IconButton, { variant: "ghost", size: "sm", className: "relative", "aria-label": "120 unread notifications", children: [
129
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5" }),
130
- /* @__PURE__ */ jsx(NotificationCountBadge, { count: 120 })
131
- ] })
132
- ] }),
212
+ render: () => /* @__PURE__ */ jsx(NotificationCountBadgeEntryCountsPreview, {}),
133
213
  code: `import { NotificationCountBadge } from '@open-mercato/ui/backend/notifications'
134
214
 
135
215
  // Renders nothing for count <= 0; anchors to the nearest relative parent.
@@ -148,16 +228,7 @@ const notificationItemEntry = {
148
228
  {
149
229
  id: "unread-info",
150
230
  title: "Unread (mocked data)",
151
- render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
152
- NotificationItem,
153
- {
154
- notification: unreadInfoNotification,
155
- onMarkAsRead: noopMarkAsRead,
156
- onExecuteAction: noopExecuteAction,
157
- onDismiss: noopDismiss,
158
- t: galleryT
159
- }
160
- ) }),
231
+ render: () => /* @__PURE__ */ jsx(NotificationItemEntryUnreadInfoPreview, {}),
161
232
  code: `import { NotificationItem } from '@open-mercato/ui/backend/notifications'
162
233
 
163
234
  <NotificationItem
@@ -171,16 +242,7 @@ const notificationItemEntry = {
171
242
  {
172
243
  id: "with-body",
173
244
  title: "Read with body bubble (mocked data)",
174
- render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
175
- NotificationItem,
176
- {
177
- notification: successWithBodyNotification,
178
- onMarkAsRead: noopMarkAsRead,
179
- onExecuteAction: noopExecuteAction,
180
- onDismiss: noopDismiss,
181
- t: galleryT
182
- }
183
- ) }),
245
+ render: () => /* @__PURE__ */ jsx(NotificationItemEntryWithBodyPreview, {}),
184
246
  code: `import { NotificationItem } from '@open-mercato/ui/backend/notifications'
185
247
 
186
248
  // A notification with a body renders it as a speech-bubble under the title.
@@ -195,16 +257,7 @@ const notificationItemEntry = {
195
257
  {
196
258
  id: "with-actions",
197
259
  title: "Action required (mocked data)",
198
- render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
199
- NotificationItem,
200
- {
201
- notification: actionRequiredNotification,
202
- onMarkAsRead: noopMarkAsRead,
203
- onExecuteAction: noopExecuteAction,
204
- onDismiss: noopDismiss,
205
- t: galleryT
206
- }
207
- ) }),
260
+ render: () => /* @__PURE__ */ jsx(NotificationItemEntryWithActionsPreview, {}),
208
261
  code: `import { NotificationItem } from '@open-mercato/ui/backend/notifications'
209
262
 
210
263
  // Actions come from notification.actions; the last one renders as primary.