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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/build.mjs +11 -0
  3. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
  4. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  5. package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
  6. package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
  7. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
  8. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  9. package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
  10. package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
  11. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
  12. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  13. package/dist/modules/customers/lib/detailHelpers.js +4 -0
  14. package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
  15. package/dist/modules/customers/lib/todoCompatibility.js +5 -0
  16. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  17. package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
  18. package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
  19. package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  20. package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  21. package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  22. package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  23. package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  24. package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  25. package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  26. package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  27. package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  28. package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  29. package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  30. package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  31. package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  32. package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  33. package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  34. package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  35. package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  36. package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  37. package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  38. package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  39. package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  40. package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  41. package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  42. package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  43. package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  44. package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  45. package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  46. package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  47. package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  48. package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  49. package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  50. package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  51. package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  52. package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  53. package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  54. package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  55. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
  56. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
  57. package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
  58. package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
  59. package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
  60. package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  61. package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  62. package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
  63. package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
  64. package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  65. package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  66. package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  67. package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  68. package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
  69. package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
  70. package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
  71. package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
  72. package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  73. package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  74. package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  75. package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  76. package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  77. package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  78. package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  79. package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  80. package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  81. package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  82. package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  83. package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  84. package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  85. package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  86. package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  87. package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
  88. package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
  89. package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
  90. package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
  91. package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
  92. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
  93. package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
  94. package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
  95. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
  96. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
  97. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
  98. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
  99. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
  100. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
  101. package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
  102. package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
  103. package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
  104. package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
  105. package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
  106. package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
  107. package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
  108. package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
  109. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
  110. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
  111. package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
  112. package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
  113. package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
  114. package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
  115. package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
  116. package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
  117. package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
  118. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
  119. package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
  120. package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
  121. package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
  122. package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
  123. package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
  124. package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
  125. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
  126. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
  127. package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
  128. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
  129. package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
  130. package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
  131. package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
  132. package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
  133. package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
  134. package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
  135. package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
  136. package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
  137. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
  138. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
  139. package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
  140. package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
  141. package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
  142. package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
  143. package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
  144. package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
  145. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
  146. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
  147. package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
  148. package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
  149. package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
  150. package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
  151. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
  152. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
  153. package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
  154. package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
  155. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
  156. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
  157. package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
  158. package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
  159. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
  160. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
  161. package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
  162. package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
  163. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
  164. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
  165. package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
  166. package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
  167. package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
  168. package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
  169. package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
  170. package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
  171. package/dist/modules/design_system/gallery/demos/menus.js +150 -0
  172. package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
  173. package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
  174. package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
  175. package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
  176. package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
  177. package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
  178. package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
  179. package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
  180. package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
  181. package/dist/modules/design_system/gallery/demos/shell.js +330 -0
  182. package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
  183. package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
  184. package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
  185. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
  186. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
  187. package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
  188. package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
  189. package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
  190. package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
  191. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
  192. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
  193. package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
  194. package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
  195. package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
  196. package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
  197. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
  198. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
  199. package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
  200. package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
  201. package/dist/modules/design_system/gallery/entries/banners.js +123 -60
  202. package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
  203. package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
  204. package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
  205. package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
  206. package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
  207. package/dist/modules/design_system/gallery/entries/charts.js +532 -186
  208. package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
  209. package/dist/modules/design_system/gallery/entries/dates.js +191 -3
  210. package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
  211. package/dist/modules/design_system/gallery/entries/detail.js +118 -77
  212. package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
  213. package/dist/modules/design_system/gallery/entries/display.js +1449 -240
  214. package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
  215. package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
  216. package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
  217. package/dist/modules/design_system/gallery/entries/filters.js +231 -103
  218. package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
  219. package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
  220. package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
  221. package/dist/modules/design_system/gallery/entries/icons.js +29 -91
  222. package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
  223. package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
  224. package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
  225. package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
  226. package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
  227. package/dist/modules/design_system/gallery/entries/library.js +20 -0
  228. package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
  229. package/dist/modules/design_system/gallery/entries/messages.js +121 -103
  230. package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
  231. package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
  232. package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
  233. package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
  234. package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
  235. package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
  236. package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
  237. package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
  238. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
  239. package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
  240. package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
  241. package/dist/modules/design_system/gallery/presentation.js +108 -0
  242. package/dist/modules/design_system/gallery/presentation.js.map +7 -0
  243. package/dist/modules/design_system/gallery/registry.js +8 -5
  244. package/dist/modules/design_system/gallery/registry.js.map +2 -2
  245. package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
  246. package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
  247. package/dist/modules/design_system/i18n/de.json +7167 -0
  248. package/dist/modules/design_system/i18n/en.json +7167 -0
  249. package/dist/modules/design_system/i18n/es.json +7167 -0
  250. package/dist/modules/design_system/i18n/ko.json +7167 -0
  251. package/dist/modules/design_system/i18n/pl.json +7167 -0
  252. package/dist/modules/push_notifications/lib/queue.js +1 -31
  253. package/dist/modules/push_notifications/lib/queue.js.map +2 -2
  254. package/jest.config.cjs +1 -0
  255. package/jest.mocks/image.js +1 -0
  256. package/package.json +8 -9
  257. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
  258. package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
  259. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
  260. package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
  261. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
  262. package/src/modules/customers/lib/detailHelpers.ts +4 -0
  263. package/src/modules/customers/lib/todoCompatibility.ts +10 -0
  264. package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
  265. package/src/modules/design_system/gallery/assets/README.md +30 -0
  266. package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  267. package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  268. package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  269. package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  270. package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  271. package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  272. package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  273. package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  274. package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  275. package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  276. package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  277. package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  278. package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  279. package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  280. package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  281. package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  282. package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  283. package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  284. package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  285. package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  286. package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  287. package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  288. package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  289. package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  290. package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  291. package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  292. package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  293. package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  294. package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  295. package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  296. package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  297. package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  298. package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  299. package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  300. package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  301. package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  302. package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
  303. package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
  304. package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
  305. package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  306. package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  307. package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
  308. package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  309. package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  310. package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  311. package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  312. package/src/modules/design_system/gallery/assets/select-google.png +0 -0
  313. package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
  314. package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
  315. package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  316. package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  317. package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  318. package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  319. package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  320. package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  321. package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  322. package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  323. package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  324. package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  325. package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  326. package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  327. package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  328. package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  329. package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  330. package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
  331. package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
  332. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
  333. package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
  334. package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
  335. package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
  336. package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
  337. package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
  338. package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
  339. package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
  340. package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
  341. package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
  342. package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
  343. package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
  344. package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
  345. package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
  346. package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
  347. package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
  348. package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
  349. package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
  350. package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
  351. package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
  352. package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
  353. package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
  354. package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
  355. package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
  356. package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
  357. package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
  358. package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
  359. package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
  360. package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
  361. package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
  362. package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
  363. package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
  364. package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
  365. package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
  366. package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
  367. package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
  368. package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
  369. package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
  370. package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
  371. package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
  372. package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
  373. package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
  374. package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
  375. package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
  376. package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
  377. package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
  378. package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
  379. package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
  380. package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
  381. package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
  382. package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
  383. package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
  384. package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
  385. package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
  386. package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
  387. package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
  388. package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
  389. package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
  390. package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
  391. package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
  392. package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
  393. package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
  394. package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
  395. package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
  396. package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
  397. package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
  398. package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
  399. package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
  400. package/src/modules/design_system/gallery/entries/library.tsx +16 -0
  401. package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
  402. package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
  403. package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
  404. package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
  405. package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
  406. package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
  407. package/src/modules/design_system/gallery/presentation.ts +106 -0
  408. package/src/modules/design_system/gallery/registry.ts +8 -6
  409. package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
  410. package/src/modules/design_system/i18n/de.json +7112 -3
  411. package/src/modules/design_system/i18n/en.json +7112 -3
  412. package/src/modules/design_system/i18n/es.json +7112 -3
  413. package/src/modules/design_system/i18n/ko.json +7112 -3
  414. package/src/modules/design_system/i18n/pl.json +7112 -3
  415. package/src/modules/push_notifications/AGENTS.md +9 -5
  416. package/src/modules/push_notifications/lib/queue.ts +15 -44
@@ -1,5 +1,22 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { Building2, MoreHorizontal } from "lucide-react";
2
+ import {
3
+ ContentLabelExample,
4
+ ContentCardExample,
5
+ KeyIconExamples,
6
+ PaymentIconExamples,
7
+ ChartLegendExamples,
8
+ ChartLegendDotExamples
9
+ } from "../demos/key-components.js";
10
+ import { keyComponentExampleCode } from "../demos/key-components-code.generated.js";
11
+ import { TableCellExamples, TableHeaderExamples, tableCellExampleCode } from "../demos/table-cells.js";
12
+ import { tableHeaderExampleCode } from "../demos/table-cells-code.generated.js";
13
+ import { ActivityFeedExample } from "../demos/feeds.js";
14
+ import { activityFeedExampleCode } from "../demos/feeds-code.generated.js";
15
+ import * as React from "react";
16
+ import { Building2, Check, ChevronLeft, ChevronRight, MoreHorizontal, Pin, Plus, Star, User, X } from "lucide-react";
17
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
18
+ import { Button } from "@open-mercato/ui/primitives/button";
19
+ import { ButtonGroup } from "@open-mercato/ui/primitives/button-group";
3
20
  import { Badge } from "@open-mercato/ui/primitives/badge";
4
21
  import { StatusBadge } from "@open-mercato/ui/primitives/status-badge";
5
22
  import { Tag } from "@open-mercato/ui/primitives/tag";
@@ -33,14 +50,545 @@ import {
33
50
  ActivityFeedStatusChip
34
51
  } from "@open-mercato/ui/primitives/activity-feed";
35
52
  import { IconButton } from "@open-mercato/ui/primitives/icon-button";
53
+ import githubLogo from "../assets/github-logo.png";
54
+ import avatarPhoto from "../assets/avatar-photo.png";
55
+ import avatarMemoji from "../assets/avatar-memoji.png";
56
+ import avatarIllustration from "../assets/avatar-illustration.png";
57
+ function BadgeEntrySemanticPreview() {
58
+ const t = useT();
59
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
60
+ /* @__PURE__ */ jsx(Badge, { variant: "success", children: t("design_system.gallery.samples.content.success") }),
61
+ /* @__PURE__ */ jsx(Badge, { variant: "warning", children: t("design_system.gallery.samples.content.warning") }),
62
+ /* @__PURE__ */ jsx(Badge, { variant: "info", children: t("design_system.gallery.samples.content.info") }),
63
+ /* @__PURE__ */ jsx(Badge, { variant: "neutral", children: t("design_system.gallery.samples.content.neutral") }),
64
+ /* @__PURE__ */ jsx(Badge, { variant: "error", children: t("design_system.gallery.samples.content.error") }),
65
+ /* @__PURE__ */ jsx(Badge, { variant: "brand", children: t("design_system.gallery.samples.content.brand") })
66
+ ] });
67
+ }
68
+ function BadgeEntrySizesPreview() {
69
+ const t = useT();
70
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
71
+ /* @__PURE__ */ jsx(Badge, { variant: "info", size: "lg", children: t("design_system.gallery.samples.content.large") }),
72
+ /* @__PURE__ */ jsx(Badge, { variant: "info", size: "default", children: t("design_system.gallery.samples.content.default") }),
73
+ /* @__PURE__ */ jsx(Badge, { variant: "info", size: "sm", children: t("design_system.gallery.samples.content.small") })
74
+ ] });
75
+ }
76
+ function BadgeEntryDotPreview() {
77
+ const t = useT();
78
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
79
+ /* @__PURE__ */ jsx(Badge, { variant: "success", dot: true, children: t("design_system.gallery.samples.content.active") }),
80
+ /* @__PURE__ */ jsx(Badge, { variant: "neutral", dot: true, children: t("design_system.gallery.samples.content.draft") }),
81
+ /* @__PURE__ */ jsx(Badge, { variant: "brand", dot: true, children: t("design_system.gallery.samples.content.customView") })
82
+ ] });
83
+ }
84
+ function StatusBadgeEntryWithDotPreview() {
85
+ const t = useT();
86
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
87
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "success", dot: true, children: t("design_system.gallery.samples.content.active") }),
88
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "warning", dot: true, children: t("design_system.gallery.samples.content.pending") }),
89
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "error", dot: true, children: t("design_system.gallery.samples.content.failed") }),
90
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "info", dot: true, children: t("design_system.gallery.samples.content.syncing") }),
91
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", dot: true, children: t("design_system.gallery.samples.content.archived") })
92
+ ] });
93
+ }
94
+ function StatusBadgeEntryWithoutDotPreview() {
95
+ const t = useT();
96
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
97
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "success", children: t("design_system.gallery.samples.content.paid") }),
98
+ /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", children: t("design_system.gallery.samples.content.draft") })
99
+ ] });
100
+ }
101
+ function TagEntryDotPreview() {
102
+ const t = useT();
103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ /* @__PURE__ */ jsx(Tag, { variant: "success", dot: true, children: t("design_system.gallery.samples.content.customer") }),
105
+ /* @__PURE__ */ jsx(Tag, { variant: "brand", dot: true, children: t("design_system.gallery.samples.content.renewal") }),
106
+ /* @__PURE__ */ jsx(Tag, { variant: "pink", dot: true, children: t("design_system.gallery.samples.content.campaign") })
107
+ ] });
108
+ }
109
+ function TableEntryDefaultPreview() {
110
+ const t = useT();
111
+ return /* @__PURE__ */ jsxs(Table, { children: [
112
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
113
+ /* @__PURE__ */ jsx(TableHead, { children: t("design_system.gallery.samples.content.order") }),
114
+ /* @__PURE__ */ jsx(TableHead, { children: t("design_system.gallery.samples.content.customer") }),
115
+ /* @__PURE__ */ jsx(TableHead, { children: t("design_system.gallery.samples.content.status") }),
116
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: t("design_system.gallery.samples.content.total") })
117
+ ] }) }),
118
+ /* @__PURE__ */ jsxs(TableBody, { children: [
119
+ /* @__PURE__ */ jsxs(TableRow, { children: [
120
+ /* @__PURE__ */ jsx(TableCell, { children: "#1042" }),
121
+ /* @__PURE__ */ jsx(TableCell, { children: "Wei Chen" }),
122
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "success", dot: true, children: t("design_system.gallery.samples.content.paid") }) }),
123
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,250.00" })
124
+ ] }),
125
+ /* @__PURE__ */ jsxs(TableRow, { children: [
126
+ /* @__PURE__ */ jsx(TableCell, { children: "#1041" }),
127
+ /* @__PURE__ */ jsx(TableCell, { children: "Laura Perez" }),
128
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "warning", dot: true, children: t("design_system.gallery.samples.content.pending") }) }),
129
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$310.50" })
130
+ ] }),
131
+ /* @__PURE__ */ jsxs(TableRow, { children: [
132
+ /* @__PURE__ */ jsx(TableCell, { children: "#1040" }),
133
+ /* @__PURE__ */ jsx(TableCell, { children: "Omar Haddad" }),
134
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", dot: true, children: t("design_system.gallery.samples.content.draft") }) }),
135
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$89.00" })
136
+ ] })
137
+ ] })
138
+ ] });
139
+ }
140
+ function TableEntryStripedPreview() {
141
+ const t = useT();
142
+ return /* @__PURE__ */ jsxs(Table, { variant: "striped", children: [
143
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
144
+ /* @__PURE__ */ jsx(TableHead, { children: "SKU" }),
145
+ /* @__PURE__ */ jsx(TableHead, { children: t("design_system.gallery.samples.content.product") }),
146
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: t("design_system.gallery.samples.content.stock") })
147
+ ] }) }),
148
+ /* @__PURE__ */ jsxs(TableBody, { children: [
149
+ /* @__PURE__ */ jsxs(TableRow, { children: [
150
+ /* @__PURE__ */ jsx(TableCell, { children: "AP-100" }),
151
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.apexDeskLamp") }),
152
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "120" })
153
+ ] }),
154
+ /* @__PURE__ */ jsxs(TableRow, { children: [
155
+ /* @__PURE__ */ jsx(TableCell, { children: "AP-101" }),
156
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.apexMonitorStand") }),
157
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "64" })
158
+ ] }),
159
+ /* @__PURE__ */ jsxs(TableRow, { children: [
160
+ /* @__PURE__ */ jsx(TableCell, { children: "AP-102" }),
161
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.apexCableKit") }),
162
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "310" })
163
+ ] }),
164
+ /* @__PURE__ */ jsxs(TableRow, { children: [
165
+ /* @__PURE__ */ jsx(TableCell, { children: "AP-103" }),
166
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.apexLaptopRiser") }),
167
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "18" })
168
+ ] })
169
+ ] })
170
+ ] });
171
+ }
172
+ function TableEntryWithFooterPreview() {
173
+ const t = useT();
174
+ return /* @__PURE__ */ jsxs(Table, { children: [
175
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
176
+ /* @__PURE__ */ jsx(TableHead, { children: t("design_system.gallery.samples.content.line") }),
177
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: t("design_system.gallery.samples.content.amount") })
178
+ ] }) }),
179
+ /* @__PURE__ */ jsxs(TableBody, { children: [
180
+ /* @__PURE__ */ jsxs(TableRow, { children: [
181
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.subtotal") }),
182
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,560.50" })
183
+ ] }),
184
+ /* @__PURE__ */ jsxs(TableRow, { children: [
185
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.shipping") }),
186
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$24.00" })
187
+ ] })
188
+ ] }),
189
+ /* @__PURE__ */ jsx(TableFooter, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
190
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.samples.content.total") }),
191
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,584.50" })
192
+ ] }) })
193
+ ] });
194
+ }
195
+ function CardEntryDefaultPreview() {
196
+ const t = useT();
197
+ return /* @__PURE__ */ jsxs(Card, { className: "w-full max-w-sm", children: [
198
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
199
+ /* @__PURE__ */ jsx(CardTitle, { children: t("design_system.gallery.samples.content.monthlyRevenue") }),
200
+ /* @__PURE__ */ jsx(CardDescription, { children: t("design_system.gallery.samples.content.netRevenueAcrossAllChannels") })
201
+ ] }),
202
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold", children: "$48,210" }) }),
203
+ /* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.content.updated5MinutesAgo") }) })
204
+ ] });
205
+ }
206
+ function CardEntryWithActionPreview() {
207
+ const t = useT();
208
+ return /* @__PURE__ */ jsxs(Card, { className: "w-full max-w-sm", children: [
209
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
210
+ /* @__PURE__ */ jsx(CardTitle, { children: t("design_system.gallery.samples.content.teamMembers") }),
211
+ /* @__PURE__ */ jsx(CardDescription, { children: t("design_system.gallery.samples.content.peopleWithAccessToThisWorkspace") }),
212
+ /* @__PURE__ */ jsx(CardAction, { children: /* @__PURE__ */ jsx(IconButton, { type: "button", variant: "ghost", "aria-label": t("design_system.gallery.samples.content.more"), children: /* @__PURE__ */ jsx(MoreHorizontal, {}) }) })
213
+ ] }),
214
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(AvatarStack, { max: 3, size: "sm", children: [
215
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: "sm" }),
216
+ /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size: "sm" }),
217
+ /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size: "sm" }),
218
+ /* @__PURE__ */ jsx(Avatar, { label: "Ines Kowalska", size: "sm" })
219
+ ] }) })
220
+ ] });
221
+ }
222
+ function SeparatorEntryDefaultPreview() {
223
+ const t = useT();
224
+ return /* @__PURE__ */ jsxs("div", { className: "w-full max-w-sm", children: [
225
+ /* @__PURE__ */ jsx("p", { className: "text-sm", children: t("design_system.gallery.samples.content.shippingDetails") }),
226
+ /* @__PURE__ */ jsx(Separator, { className: "my-3" }),
227
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.content.billingDetails") })
228
+ ] });
229
+ }
230
+ function SeparatorEntryLabeledPreview() {
231
+ const t = useT();
232
+ return /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Separator, { label: t("design_system.gallery.samples.content.or") }) });
233
+ }
234
+ function ScrollAreaEntryVerticalPreview() {
235
+ const t = useT();
236
+ return /* @__PURE__ */ jsx(ScrollArea, { className: "h-40 w-full max-w-xs rounded-md border", children: /* @__PURE__ */ jsx("div", { className: "p-3", children: Array.from(
237
+ {
238
+ length: 20
239
+ },
240
+ (_, i) => /* @__PURE__ */ jsxs("p", { className: "border-b py-1.5 text-sm last:border-b-0", children: [
241
+ t("design_system.gallery.samples.content.warehouseZone"),
242
+ String.fromCharCode(65 + i % 6),
243
+ "-",
244
+ i + 1
245
+ ] }, i)
246
+ ) }) });
247
+ }
248
+ function ScrollAreaEntryHorizontalPreview() {
249
+ const t = useT();
250
+ return /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "horizontal", className: "w-full max-w-xs rounded-md border", children: /* @__PURE__ */ jsx("div", { className: "flex w-max gap-2 p-3", children: Array.from(
251
+ {
252
+ length: 12
253
+ },
254
+ (_, i) => /* @__PURE__ */ jsxs(Tag, { variant: "neutral", shape: "square", children: [
255
+ t("design_system.gallery.samples.content.channel"),
256
+ i + 1
257
+ ] }, i)
258
+ ) }) });
259
+ }
260
+ function ActivityFeedEntryBasicPreview() {
261
+ const t = useT();
262
+ return /* @__PURE__ */ jsxs(ActivityFeed, { className: "w-full max-w-md", children: [
263
+ /* @__PURE__ */ jsx(
264
+ ActivityFeedItem,
265
+ {
266
+ avatar: /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: "sm" }),
267
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
268
+ "Wei Chen",
269
+ " ",
270
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: t("design_system.gallery.samples.content.created") }),
271
+ t("design_system.gallery.samples.content.order1042")
272
+ ] }),
273
+ timestamp: t("design_system.gallery.samples.content.4MinAgo")
274
+ }
275
+ ),
276
+ /* @__PURE__ */ jsx(
277
+ ActivityFeedItem,
278
+ {
279
+ avatar: /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size: "sm" }),
280
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
281
+ "Laura Perez",
282
+ " ",
283
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: t("design_system.gallery.samples.content.updatedTheShippingAddress") })
284
+ ] }),
285
+ timestamp: t("design_system.gallery.samples.content.1HourAgo"),
286
+ actions: /* @__PURE__ */ jsx(IconButton, { variant: "ghost", size: "sm", "aria-label": t("design_system.gallery.samples.content.more"), children: /* @__PURE__ */ jsx(MoreHorizontal, {}) })
287
+ }
288
+ )
289
+ ] });
290
+ }
291
+ function ActivityFeedEntryWithAttachmentPreview() {
292
+ const t = useT();
293
+ return /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
294
+ ActivityFeedItem,
295
+ {
296
+ avatar: /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size: "sm" }),
297
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
298
+ "Omar Haddad",
299
+ " ",
300
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: t("design_system.gallery.samples.content.uploaded") }),
301
+ t("design_system.gallery.samples.content.q2FinancialReport")
302
+ ] }),
303
+ timestamp: t("design_system.gallery.samples.content.2DaysAgo"),
304
+ children: /* @__PURE__ */ jsx(ActivityFeedFileChip, { name: "apex-report.pdf", size: "4mb", onDownload: () => {
305
+ } })
306
+ }
307
+ ) });
308
+ }
309
+ function ActivityFeedEntryWithCommentPreview() {
310
+ const t = useT();
311
+ return /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
312
+ ActivityFeedItem,
313
+ {
314
+ avatar: /* @__PURE__ */ jsx(Avatar, { label: "Ines Kowalska", size: "sm" }),
315
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
316
+ "Ines Kowalska",
317
+ " ",
318
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: t("design_system.gallery.samples.content.commented") })
319
+ ] }),
320
+ timestamp: t("design_system.gallery.samples.content.6DaysAgo"),
321
+ children: /* @__PURE__ */ jsx(ActivityFeedComment, { onReply: () => {
322
+ }, children: t("design_system.gallery.samples.content.pleaseReviseTheRiskMetricsBeforeFriday") })
323
+ }
324
+ ) });
325
+ }
326
+ function ActivityFeedEntryStatusChipsPreview() {
327
+ const t = useT();
328
+ return /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs(
329
+ ActivityFeedItem,
330
+ {
331
+ avatar: /* @__PURE__ */ jsx(Avatar, { label: "Ravi Patel", size: "sm" }),
332
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
333
+ "Ravi Patel",
334
+ " ",
335
+ /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: t("design_system.gallery.samples.content.moved3Tasks") })
336
+ ] }),
337
+ timestamp: t("design_system.gallery.samples.content.1WeekAgo"),
338
+ children: [
339
+ /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "success", children: t("design_system.gallery.samples.content.approved") }),
340
+ /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "warning", children: t("design_system.gallery.samples.content.needsReview") }),
341
+ /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "error", children: t("design_system.gallery.samples.content.blocked") })
342
+ ]
343
+ }
344
+ ) });
345
+ }
346
+ const githubLogoSrc = typeof githubLogo === "string" ? githubLogo : githubLogo.src;
347
+ const avatarPhotoSrc = typeof avatarPhoto === "string" ? avatarPhoto : avatarPhoto.src;
348
+ const avatarMemojiSrc = typeof avatarMemoji === "string" ? avatarMemoji : avatarMemoji.src;
349
+ const avatarIllustrationSrc = typeof avatarIllustration === "string" ? avatarIllustration : avatarIllustration.src;
350
+ function AvatarBadgesDemo() {
351
+ const t = useT();
352
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-6 p-2", children: [
353
+ /* @__PURE__ */ jsx(
354
+ Avatar,
355
+ {
356
+ label: "Wei Chen",
357
+ ariaLabel: t("design_system.gallery.examples.avatar.verified"),
358
+ badge: /* @__PURE__ */ jsx(Check, { className: "size-3" }),
359
+ badgeClassName: "bg-status-info-icon text-white"
360
+ }
361
+ ),
362
+ /* @__PURE__ */ jsx(
363
+ Avatar,
364
+ {
365
+ label: "Laura Perez",
366
+ ariaLabel: t("design_system.gallery.examples.avatar.pinned"),
367
+ badge: /* @__PURE__ */ jsx(Pin, { className: "size-3" }),
368
+ badgeClassName: "bg-accent-indigo text-white"
369
+ }
370
+ ),
371
+ /* @__PURE__ */ jsx(
372
+ Avatar,
373
+ {
374
+ label: "Omar Haddad",
375
+ ariaLabel: t("design_system.gallery.examples.avatar.favorite"),
376
+ badge: /* @__PURE__ */ jsx(Star, { className: "size-3" }),
377
+ badgeClassName: "bg-status-success-icon text-white"
378
+ }
379
+ ),
380
+ /* @__PURE__ */ jsx(
381
+ Avatar,
382
+ {
383
+ label: "Ines Kowalska",
384
+ ariaLabel: t("design_system.gallery.examples.avatar.add"),
385
+ badge: /* @__PURE__ */ jsx(Plus, { className: "size-3" })
386
+ }
387
+ ),
388
+ /* @__PURE__ */ jsx(
389
+ Avatar,
390
+ {
391
+ label: "Ravi Patel",
392
+ ariaLabel: t("design_system.gallery.examples.avatar.remove"),
393
+ badge: /* @__PURE__ */ jsx(X, { className: "size-3" }),
394
+ badgeClassName: "bg-status-error-icon text-white"
395
+ }
396
+ ),
397
+ /* @__PURE__ */ jsx(
398
+ Avatar,
399
+ {
400
+ label: "James Brown",
401
+ ariaLabel: t("design_system.gallery.examples.avatar.notification"),
402
+ status: "error",
403
+ statusPosition: "top-right"
404
+ }
405
+ )
406
+ ] });
407
+ }
408
+ function SeparatorActionDemo({ kind }) {
409
+ const t = useT();
410
+ return /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center gap-2.5", children: [
411
+ /* @__PURE__ */ jsx(Separator, { className: "min-w-0 flex-1" }),
412
+ kind === "icon" ? /* @__PURE__ */ jsx(IconButton, { size: "default", "aria-label": t("design_system.gallery.examples.separator.add"), children: /* @__PURE__ */ jsx(Plus, { className: "size-5" }) }) : kind === "icon-group" ? /* @__PURE__ */ jsxs(ButtonGroup, { "aria-label": t("design_system.gallery.examples.separator.actions"), children: [
413
+ /* @__PURE__ */ jsx(IconButton, { size: "default", "aria-label": t("design_system.gallery.examples.separator.previous"), children: /* @__PURE__ */ jsx(ChevronLeft, { className: "size-5" }) }),
414
+ /* @__PURE__ */ jsx(IconButton, { size: "default", "aria-label": t("design_system.gallery.examples.separator.add"), children: /* @__PURE__ */ jsx(Plus, { className: "size-5" }) }),
415
+ /* @__PURE__ */ jsx(IconButton, { size: "default", "aria-label": t("design_system.gallery.examples.separator.next"), children: /* @__PURE__ */ jsx(ChevronRight, { className: "size-5" }) })
416
+ ] }) : kind === "text" ? /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", variant: "outline", className: "px-2.5", children: t("design_system.gallery.examples.separator.add") }) : /* @__PURE__ */ jsxs(ButtonGroup, { size: "sm", "aria-label": t("design_system.gallery.examples.separator.actions"), children: [
417
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", variant: "outline", className: "px-3.5", children: t("design_system.gallery.examples.separator.previous") }),
418
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", variant: "outline", className: "px-3.5", children: t("design_system.gallery.examples.separator.add") }),
419
+ /* @__PURE__ */ jsx(Button, { type: "button", size: "sm", variant: "outline", className: "px-3.5", children: t("design_system.gallery.examples.separator.next") })
420
+ ] }),
421
+ /* @__PURE__ */ jsx(Separator, { className: "min-w-0 flex-1" })
422
+ ] });
423
+ }
424
+ function SeparatorTextDemo({ kind }) {
425
+ const t = useT();
426
+ return kind === "text" ? /* @__PURE__ */ jsx(Separator, { section: true, label: t("design_system.gallery.examples.separator.or"), className: "bg-transparent px-2 py-1" }) : /* @__PURE__ */ jsxs("div", { className: "grid w-full gap-6", children: [
427
+ /* @__PURE__ */ jsx(Separator, { label: t("design_system.gallery.examples.separator.or"), labelAlign: "start" }),
428
+ /* @__PURE__ */ jsx(Separator, { label: t("design_system.gallery.examples.separator.or"), labelAlign: "center" }),
429
+ /* @__PURE__ */ jsx(Separator, { label: t("design_system.gallery.examples.separator.or"), labelAlign: "end" })
430
+ ] });
431
+ }
432
+ function BadgeAppearanceDemo({ appearance }) {
433
+ const t = useT();
434
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
435
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: ["neutral", "info", "warning", "error", "success", "pink", "yellow", "purple", "sky", "teal"].map(
436
+ (tone) => /* @__PURE__ */ jsx(Badge, { appearance, tone, dot: true, children: tone }, tone)
437
+ ) }),
438
+ /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-xs leading-5 text-muted-foreground", children: t("design_system.gallery.examples.badgeTag.paletteHint") })
439
+ ] });
440
+ }
441
+ function BadgeSourceSizeDemo() {
442
+ const t = useT();
443
+ const label = t("design_system.gallery.examples.badgeTag.label");
444
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-6", children: [16, 20].map((size) => /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
445
+ /* @__PURE__ */ jsxs("span", { className: "w-12 text-xs text-muted-foreground", children: [
446
+ size,
447
+ "px"
448
+ ] }),
449
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "filled", tone: "purple", children: label }),
450
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "light", tone: "yellow", dot: true, children: label }),
451
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "lighter", tone: "sky", leadingIcon: /* @__PURE__ */ jsx(User, {}), children: label }),
452
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "stroke", tone: "teal", trailingIcon: /* @__PURE__ */ jsx(ChevronRight, {}), children: label }),
453
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "filled", tone: "info", numeric: true, children: 2 }),
454
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "filled", tone: "info", numeric: true, children: 125 }),
455
+ /* @__PURE__ */ jsx(Badge, { size, appearance: "stroke", tone: "purple", disabled: true, children: label })
456
+ ] }, size)) });
457
+ }
458
+ function BadgeContentDemo() {
459
+ const t = useT();
460
+ const label = t("design_system.gallery.examples.badgeTag.label");
461
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
462
+ /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", children: label }),
463
+ /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", dot: true, children: label }),
464
+ /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", leadingIcon: /* @__PURE__ */ jsx(User, {}), children: label }),
465
+ /* @__PURE__ */ jsx(Badge, { appearance: "lighter", tone: "info", trailingIcon: /* @__PURE__ */ jsx(ChevronRight, {}), children: label }),
466
+ /* @__PURE__ */ jsx(Badge, { appearance: "filled", tone: "info", children: 4 }),
467
+ /* @__PURE__ */ jsx(Badge, { appearance: "stroke", tone: "info", children: 24 })
468
+ ] });
469
+ }
470
+ function BadgeDisabledDemo() {
471
+ const t = useT();
472
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: ["filled", "light", "lighter", "stroke"].map((appearance) => /* @__PURE__ */ jsx(Badge, { appearance, tone: "info", disabled: true, leadingIcon: /* @__PURE__ */ jsx(User, {}), children: t("design_system.gallery.examples.badgeTag.locked") }, appearance)) });
473
+ }
474
+ function RemovableBadgeDemo() {
475
+ const t = useT();
476
+ const [visible, setVisible] = React.useState(true);
477
+ const region = t("design_system.gallery.examples.badgeTag.region");
478
+ const locked = t("design_system.gallery.examples.badgeTag.locked");
479
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
480
+ visible && /* @__PURE__ */ jsx(
481
+ Badge,
482
+ {
483
+ appearance: "lighter",
484
+ tone: "neutral",
485
+ removable: true,
486
+ onRemove: () => setVisible(false),
487
+ removeAriaLabel: t("design_system.gallery.examples.badgeTag.remove", {
488
+ label: region
489
+ }),
490
+ children: region
491
+ }
492
+ ),
493
+ /* @__PURE__ */ jsx(
494
+ Badge,
495
+ {
496
+ appearance: "lighter",
497
+ tone: "neutral",
498
+ disabled: true,
499
+ removable: true,
500
+ onRemove: () => setVisible(false),
501
+ removeAriaLabel: t("design_system.gallery.examples.badgeTag.remove", {
502
+ label: locked
503
+ }),
504
+ children: locked
505
+ }
506
+ ),
507
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: visible, onClick: () => setVisible(true), children: t("design_system.gallery.examples.badgeTag.restore") })
508
+ ] });
509
+ }
510
+ function StatusAppearanceDemo({ appearance }) {
511
+ return /* @__PURE__ */ jsx("div", { className: "grid gap-4", children: [true, false].map((dot) => /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: ["success", "warning", "error", "info", "neutral"].map((variant) => /* @__PURE__ */ jsx(StatusBadge, { variant, appearance, dot, children: variant }, variant)) }, String(dot))) });
512
+ }
513
+ function TagAppearanceDemo({ appearance }) {
514
+ const t = useT();
515
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
516
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
517
+ /* @__PURE__ */ jsx(Tag, { appearance, children: t("design_system.gallery.examples.badgeTag.label") }),
518
+ /* @__PURE__ */ jsx(Tag, { appearance, leading: /* @__PURE__ */ jsx(User, {}), children: t("design_system.gallery.examples.badgeTag.customer") }),
519
+ /* @__PURE__ */ jsx(
520
+ Tag,
521
+ {
522
+ appearance,
523
+ leading: /* @__PURE__ */ jsx("img", { src: avatarPhotoSrc, alt: "", className: "size-4 rounded-full object-cover" }),
524
+ children: "James Brown"
525
+ }
526
+ ),
527
+ /* @__PURE__ */ jsx(Tag, { appearance, leading: /* @__PURE__ */ jsx("span", { children: "\u{1F1F5}\u{1F1F1}" }), children: t("design_system.gallery.examples.badgeTag.country") }),
528
+ /* @__PURE__ */ jsx(
529
+ Tag,
530
+ {
531
+ appearance,
532
+ leading: /* @__PURE__ */ jsx("img", { src: githubLogoSrc, alt: "", className: "size-4 rounded-sm bg-white" }),
533
+ children: "GitHub"
534
+ }
535
+ ),
536
+ /* @__PURE__ */ jsx(Tag, { appearance, leading: /* @__PURE__ */ jsx(Building2, {}), sublabel: "(4)", children: "Open Mercato" })
537
+ ] }),
538
+ /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-xs leading-5 text-muted-foreground", children: t("design_system.gallery.examples.badgeTag.tagHint") })
539
+ ] });
540
+ }
541
+ function RemovableTagDemo() {
542
+ const t = useT();
543
+ const [removed, setRemoved] = React.useState([]);
544
+ const region = t("design_system.gallery.examples.badgeTag.region");
545
+ const locked = t("design_system.gallery.examples.badgeTag.locked");
546
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
547
+ /* @__PURE__ */ jsx("p", { className: "max-w-2xl text-xs leading-5 text-muted-foreground", children: t("design_system.gallery.examples.badgeTag.statesHint") }),
548
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
549
+ ["stroke", "gray"].map((appearance) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
550
+ !removed.includes(appearance) && /* @__PURE__ */ jsx(
551
+ Tag,
552
+ {
553
+ appearance,
554
+ leading: /* @__PURE__ */ jsx(User, {}),
555
+ sublabel: "(4)",
556
+ onRemove: () => setRemoved((current) => [...current, appearance]),
557
+ removeAriaLabel: t("design_system.gallery.examples.badgeTag.remove", {
558
+ label: region
559
+ }),
560
+ children: region
561
+ }
562
+ ),
563
+ /* @__PURE__ */ jsx(
564
+ Tag,
565
+ {
566
+ appearance,
567
+ disabled: true,
568
+ leading: /* @__PURE__ */ jsx(User, {}),
569
+ sublabel: "(4)",
570
+ onRemove: () => setRemoved((current) => [...current, appearance]),
571
+ removeAriaLabel: t("design_system.gallery.examples.badgeTag.remove", {
572
+ label: locked
573
+ }),
574
+ children: locked
575
+ }
576
+ )
577
+ ] }, appearance)),
578
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: !removed.length, onClick: () => setRemoved([]), children: t("design_system.gallery.examples.badgeTag.restore") })
579
+ ] })
580
+ ] });
581
+ }
36
582
  const badgeEntry = {
37
583
  id: "badge",
38
584
  title: "Badge",
39
585
  importPath: "@open-mercato/ui/primitives/badge",
586
+ figmaNodeId: "118:2324",
40
587
  usage: {
41
588
  do: [
42
589
  "Counts and short semantic labels; the brand variant for custom-view and renewal pills.",
43
- "Semantic variants (success/warning/info/neutral/error) come from status tokens \u2014 no custom colors."
590
+ "Semantic variants (success/warning/info/neutral/error) come from status tokens \u2014 no custom colors.",
591
+ "Four appearances and ten color families; numeric sizes16/20 follow measured source dimensions. Named sizes and semantic status palettes retain application defaults; new category fills use measured Figma colors with accessible text."
44
592
  ],
45
593
  dont: ["Not for system statuses (use StatusBadge) or user-applied labels (use Tag)."]
46
594
  },
@@ -48,14 +596,7 @@ const badgeEntry = {
48
596
  {
49
597
  id: "semantic",
50
598
  title: "Semantic variants",
51
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
52
- /* @__PURE__ */ jsx(Badge, { variant: "success", children: "Success" }),
53
- /* @__PURE__ */ jsx(Badge, { variant: "warning", children: "Warning" }),
54
- /* @__PURE__ */ jsx(Badge, { variant: "info", children: "Info" }),
55
- /* @__PURE__ */ jsx(Badge, { variant: "neutral", children: "Neutral" }),
56
- /* @__PURE__ */ jsx(Badge, { variant: "error", children: "Error" }),
57
- /* @__PURE__ */ jsx(Badge, { variant: "brand", children: "Brand" })
58
- ] }),
599
+ render: () => /* @__PURE__ */ jsx(BadgeEntrySemanticPreview, {}),
59
600
  code: `import { Badge } from '@open-mercato/ui/primitives/badge'
60
601
 
61
602
  <Badge variant="success">Success</Badge>
@@ -68,11 +609,7 @@ const badgeEntry = {
68
609
  {
69
610
  id: "sizes",
70
611
  title: "Sizes",
71
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
72
- /* @__PURE__ */ jsx(Badge, { variant: "info", size: "lg", children: "Large" }),
73
- /* @__PURE__ */ jsx(Badge, { variant: "info", size: "default", children: "Default" }),
74
- /* @__PURE__ */ jsx(Badge, { variant: "info", size: "sm", children: "Small" })
75
- ] }),
612
+ render: () => /* @__PURE__ */ jsx(BadgeEntrySizesPreview, {}),
76
613
  code: `import { Badge } from '@open-mercato/ui/primitives/badge'
77
614
 
78
615
  <Badge variant="info" size="lg">Large</Badge>
@@ -82,11 +619,7 @@ const badgeEntry = {
82
619
  {
83
620
  id: "dot",
84
621
  title: "With dot",
85
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
86
- /* @__PURE__ */ jsx(Badge, { variant: "success", dot: true, children: "Active" }),
87
- /* @__PURE__ */ jsx(Badge, { variant: "neutral", dot: true, children: "Draft" }),
88
- /* @__PURE__ */ jsx(Badge, { variant: "brand", dot: true, children: "Custom view" })
89
- ] }),
622
+ render: () => /* @__PURE__ */ jsx(BadgeEntryDotPreview, {}),
90
623
  code: `import { Badge } from '@open-mercato/ui/primitives/badge'
91
624
 
92
625
  <Badge variant="success" dot>Active</Badge>
@@ -96,16 +629,107 @@ const badgeEntry = {
96
629
  {
97
630
  id: "removable",
98
631
  title: "Removable",
99
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
100
- /* @__PURE__ */ jsx(Badge, { variant: "neutral", removable: true, onRemove: () => {
101
- }, children: "Filter: Region" }),
102
- /* @__PURE__ */ jsx(Badge, { variant: "brand", removable: true, onRemove: () => {
103
- }, children: "Renewal" })
104
- ] }),
632
+ render: () => /* @__PURE__ */ jsx(RemovableBadgeDemo, {}),
633
+ code: `import * as React from 'react'
634
+ import { Badge } from '@open-mercato/ui/primitives/badge'
635
+ import { Button } from '@open-mercato/ui/primitives/button'
636
+
637
+ const [visible, setVisible] = React.useState(true)
638
+ {visible && <Badge appearance="lighter" tone="neutral" removable onRemove={() => setVisible(false)} removeAriaLabel={removeLabel}>{label}</Badge>}
639
+ <Badge appearance="lighter" tone="neutral" disabled removable onRemove={() => setVisible(false)} removeAriaLabel={removeLockedLabel}>{lockedLabel}</Badge>
640
+ <Button type="button" variant="outline" size="sm" disabled={visible} onClick={() => setVisible(true)}>{restoreLabel}</Button>`
641
+ },
642
+ {
643
+ id: "appearance-filled",
644
+ title: "Filled appearance",
645
+ render: () => /* @__PURE__ */ jsx(BadgeAppearanceDemo, { appearance: "filled" }),
105
646
  code: `import { Badge } from '@open-mercato/ui/primitives/badge'
106
647
 
107
- <Badge variant="neutral" removable onRemove={() => setRegion(null)}>Filter: Region</Badge>
108
- <Badge variant="brand" removable onRemove={() => clearTag()}>Renewal</Badge>`
648
+ {(['neutral', 'info', 'warning', 'error', 'success', 'pink', 'yellow', 'purple', 'sky', 'teal'] as const).map(tone => (
649
+ <Badge key={tone} appearance="filled" tone={tone} dot>{tone}</Badge>
650
+ ))}`
651
+ },
652
+ {
653
+ id: "appearance-light",
654
+ title: "Light appearance",
655
+ render: () => /* @__PURE__ */ jsx(BadgeAppearanceDemo, { appearance: "light" }),
656
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
657
+
658
+ {(['neutral', 'info', 'warning', 'error', 'success', 'pink', 'yellow', 'purple', 'sky', 'teal'] as const).map(tone => (
659
+ <Badge key={tone} appearance="light" tone={tone} dot>{tone}</Badge>
660
+ ))}`
661
+ },
662
+ {
663
+ id: "appearance-lighter",
664
+ title: "Lighter appearance",
665
+ render: () => /* @__PURE__ */ jsx(BadgeAppearanceDemo, { appearance: "lighter" }),
666
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
667
+
668
+ {(['neutral', 'info', 'warning', 'error', 'success', 'pink', 'yellow', 'purple', 'sky', 'teal'] as const).map(tone => (
669
+ <Badge key={tone} appearance="lighter" tone={tone} dot>{tone}</Badge>
670
+ ))}`
671
+ },
672
+ {
673
+ id: "appearance-stroke",
674
+ title: "Stroke appearance",
675
+ render: () => /* @__PURE__ */ jsx(BadgeAppearanceDemo, { appearance: "stroke" }),
676
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
677
+
678
+ {(['neutral', 'info', 'warning', 'error', 'success', 'pink', 'yellow', 'purple', 'sky', 'teal'] as const).map(tone => (
679
+ <Badge key={tone} appearance="stroke" tone={tone} dot>{tone}</Badge>
680
+ ))}`
681
+ },
682
+ {
683
+ id: "content",
684
+ title: "Basic, dot, icons and numeric content",
685
+ render: () => /* @__PURE__ */ jsx(BadgeContentDemo, {}),
686
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
687
+ import { User, ChevronRight } from 'lucide-react'
688
+
689
+ <Badge appearance="lighter" tone="info">{label}</Badge>
690
+ <Badge appearance="lighter" tone="info" dot>{label}</Badge>
691
+ <Badge appearance="lighter" tone="info" leadingIcon={<User />}>{label}</Badge>
692
+ <Badge appearance="lighter" tone="info" trailingIcon={<ChevronRight />}>{label}</Badge>
693
+ <Badge appearance="filled" tone="info">{4}</Badge>
694
+ <Badge appearance="stroke" tone="info">{24}</Badge>`
695
+ },
696
+ {
697
+ id: "disabled",
698
+ title: "Disabled appearances",
699
+ render: () => /* @__PURE__ */ jsx(BadgeDisabledDemo, {}),
700
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
701
+ import { User } from 'lucide-react'
702
+
703
+ {(['filled', 'light', 'lighter', 'stroke'] as const).map(appearance => (
704
+ <Badge key={appearance} appearance={appearance} tone="info" disabled leadingIcon={<User />}>{label}</Badge>
705
+ ))}`
706
+ },
707
+ {
708
+ id: "source-sizes",
709
+ title: "Source16px /20px and numeric content",
710
+ render: () => /* @__PURE__ */ jsx(BadgeSourceSizeDemo, {}),
711
+ code: `import { Badge } from '@open-mercato/ui/primitives/badge'
712
+ import { User, ChevronRight } from 'lucide-react'
713
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
714
+
715
+ function BadgeSourceSizeDemo() {
716
+ const t = useT()
717
+ const label = t('design_system.gallery.examples.badgeTag.label')
718
+ return <div className="flex flex-col gap-6">
719
+ {([16, 20] as const).map(size => <div key={size} className="flex flex-wrap items-center gap-3">
720
+ <span className="w-12 text-xs text-muted-foreground">{size}px</span>
721
+ <Badge size={size} appearance="filled" tone="purple">{label}</Badge>
722
+ <Badge size={size} appearance="light" tone="yellow" dot>{label}</Badge>
723
+ <Badge size={size} appearance="lighter" tone="sky" leadingIcon={<User />}>{label}</Badge>
724
+ <Badge size={size} appearance="stroke" tone="teal" trailingIcon={<ChevronRight />}>{label}</Badge>
725
+ <Badge size={size} appearance="filled" tone="info" numeric>{2}</Badge>
726
+ <Badge size={size} appearance="filled" tone="info" numeric>{125}</Badge>
727
+ <Badge size={size} appearance="stroke" tone="purple" disabled>{label}</Badge>
728
+ </div>)}
729
+ </div>
730
+ }
731
+
732
+ <BadgeSourceSizeDemo />`
109
733
  }
110
734
  ]
111
735
  };
@@ -113,6 +737,7 @@ const statusBadgeEntry = {
113
737
  id: "status-badge",
114
738
  title: "StatusBadge",
115
739
  importPath: "@open-mercato/ui/primitives/status-badge",
740
+ figmaNodeId: "171:5100",
116
741
  usage: {
117
742
  do: [
118
743
  "System-computed statuses (active, pending, failed) \u2014 drive variants through a shared StatusMap.",
@@ -124,13 +749,7 @@ const statusBadgeEntry = {
124
749
  {
125
750
  id: "with-dot",
126
751
  title: "Variants with dot",
127
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
128
- /* @__PURE__ */ jsx(StatusBadge, { variant: "success", dot: true, children: "Active" }),
129
- /* @__PURE__ */ jsx(StatusBadge, { variant: "warning", dot: true, children: "Pending" }),
130
- /* @__PURE__ */ jsx(StatusBadge, { variant: "error", dot: true, children: "Failed" }),
131
- /* @__PURE__ */ jsx(StatusBadge, { variant: "info", dot: true, children: "Syncing" }),
132
- /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", dot: true, children: "Archived" })
133
- ] }),
752
+ render: () => /* @__PURE__ */ jsx(StatusBadgeEntryWithDotPreview, {}),
134
753
  code: `import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
135
754
 
136
755
  <StatusBadge variant="success" dot>Active</StatusBadge>
@@ -142,14 +761,31 @@ const statusBadgeEntry = {
142
761
  {
143
762
  id: "without-dot",
144
763
  title: "Without dot",
145
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
146
- /* @__PURE__ */ jsx(StatusBadge, { variant: "success", children: "Paid" }),
147
- /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", children: "Draft" })
148
- ] }),
764
+ render: () => /* @__PURE__ */ jsx(StatusBadgeEntryWithoutDotPreview, {}),
149
765
  code: `import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
150
766
 
151
767
  <StatusBadge variant="success">Paid</StatusBadge>
152
768
  <StatusBadge variant="neutral">Draft</StatusBadge>`
769
+ },
770
+ {
771
+ id: "appearance-light",
772
+ title: "Light appearance, with and without dot",
773
+ render: () => /* @__PURE__ */ jsx(StatusAppearanceDemo, { appearance: "light" }),
774
+ code: `import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
775
+
776
+ {[true, false].map(dot => (['success', 'warning', 'error', 'info', 'neutral'] as const).map(variant => (
777
+ <StatusBadge key={variant + String(dot)} variant={variant} appearance="light" dot={dot}>{variant}</StatusBadge>
778
+ )))}`
779
+ },
780
+ {
781
+ id: "appearance-stroke",
782
+ title: "Stroke appearance, with and without dot",
783
+ render: () => /* @__PURE__ */ jsx(StatusAppearanceDemo, { appearance: "stroke" }),
784
+ code: `import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
785
+
786
+ {[true, false].map(dot => (['success', 'warning', 'error', 'info', 'neutral'] as const).map(variant => (
787
+ <StatusBadge key={variant + String(dot)} variant={variant} appearance="stroke" dot={dot}>{variant}</StatusBadge>
788
+ )))}`
153
789
  }
154
790
  ]
155
791
  };
@@ -157,6 +793,7 @@ const tagEntry = {
157
793
  id: "tag",
158
794
  title: "Tag",
159
795
  importPath: "@open-mercato/ui/primitives/tag",
796
+ figmaNodeId: "431:16147",
160
797
  usage: {
161
798
  do: ["User-applied labels and categories; map domain types via TagMap for consistency."],
162
799
  dont: ["Not for system status \u2014 that is StatusBadge."]
@@ -189,11 +826,7 @@ const tagEntry = {
189
826
  {
190
827
  id: "dot",
191
828
  title: "With dot",
192
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
193
- /* @__PURE__ */ jsx(Tag, { variant: "success", dot: true, children: "Customer" }),
194
- /* @__PURE__ */ jsx(Tag, { variant: "brand", dot: true, children: "Renewal" }),
195
- /* @__PURE__ */ jsx(Tag, { variant: "pink", dot: true, children: "Campaign" })
196
- ] }),
829
+ render: () => /* @__PURE__ */ jsx(TagEntryDotPreview, {}),
197
830
  code: `import { Tag } from '@open-mercato/ui/primitives/tag'
198
831
 
199
832
  <Tag variant="success" dot>Customer</Tag>
@@ -215,16 +848,46 @@ const tagEntry = {
215
848
  {
216
849
  id: "removable",
217
850
  title: "Removable",
218
- render: () => /* @__PURE__ */ jsxs(Fragment, { children: [
219
- /* @__PURE__ */ jsx(Tag, { variant: "neutral", onRemove: () => {
220
- }, children: "Wholesale" }),
221
- /* @__PURE__ */ jsx(Tag, { variant: "neutral", onRemove: () => {
222
- }, disabled: true, children: "Locked" })
223
- ] }),
851
+ render: () => /* @__PURE__ */ jsx(RemovableTagDemo, {}),
852
+ code: `import * as React from 'react'
853
+ import { Tag } from '@open-mercato/ui/primitives/tag'
854
+ import { Button } from '@open-mercato/ui/primitives/button'
855
+ import { User } from 'lucide-react'
856
+
857
+ const [removed, setRemoved] = React.useState<string[]>([])
858
+ {(['stroke', 'gray'] as const).map(appearance => <React.Fragment key={appearance}>
859
+ {!removed.includes(appearance) && <Tag appearance={appearance} leading={<User />} sublabel="(4)" onRemove={() => setRemoved(current => [...current, appearance])} removeAriaLabel={removeLabel}>{label}</Tag>}
860
+ <Tag appearance={appearance} disabled leading={<User />} sublabel="(4)" onRemove={() => setRemoved(current => [...current, appearance])} removeAriaLabel={removeLockedLabel}>{lockedLabel}</Tag>
861
+ </React.Fragment>)}
862
+ <Button type="button" variant="outline" size="sm" disabled={!removed.length} onClick={() => setRemoved([])}>{restoreLabel}</Button>`
863
+ },
864
+ {
865
+ id: "appearance-stroke",
866
+ title: "Stroke appearance and leading content",
867
+ render: () => /* @__PURE__ */ jsx(TagAppearanceDemo, { appearance: "stroke" }),
224
868
  code: `import { Tag } from '@open-mercato/ui/primitives/tag'
869
+ import { User, Building2 } from 'lucide-react'
225
870
 
226
- <Tag variant="neutral" onRemove={() => removeTag('wholesale')}>Wholesale</Tag>
227
- <Tag variant="neutral" onRemove={() => {}} disabled>Locked</Tag>`
871
+ <Tag appearance="stroke">{label}</Tag>
872
+ <Tag appearance="stroke" leading={<User />}>{customerLabel}</Tag>
873
+ <Tag appearance="stroke" leading={<img src={avatarPhotoSrc} alt="" className="size-4 rounded-full object-cover" />}>James Brown</Tag>
874
+ <Tag appearance="stroke" leading={<span>\u{1F1F5}\u{1F1F1}</span>}>{countryLabel}</Tag>
875
+ <Tag appearance="stroke" leading={<img src={githubLogoSrc} alt="" className="size-4 rounded-sm bg-white" />}>GitHub</Tag>
876
+ <Tag appearance="stroke" leading={<Building2 />} sublabel="(4)">Open Mercato</Tag>`
877
+ },
878
+ {
879
+ id: "appearance-gray",
880
+ title: "Gray appearance and leading content",
881
+ render: () => /* @__PURE__ */ jsx(TagAppearanceDemo, { appearance: "gray" }),
882
+ code: `import { Tag } from '@open-mercato/ui/primitives/tag'
883
+ import { User, Building2 } from 'lucide-react'
884
+
885
+ <Tag appearance="gray">{label}</Tag>
886
+ <Tag appearance="gray" leading={<User />}>{customerLabel}</Tag>
887
+ <Tag appearance="gray" leading={<img src={avatarPhotoSrc} alt="" className="size-4 rounded-full object-cover" />}>James Brown</Tag>
888
+ <Tag appearance="gray" leading={<span>\u{1F1F5}\u{1F1F1}</span>}>{countryLabel}</Tag>
889
+ <Tag appearance="gray" leading={<img src={githubLogoSrc} alt="" className="size-4 rounded-sm bg-white" />}>GitHub</Tag>
890
+ <Tag appearance="gray" leading={<Building2 />} sublabel="(4)">Open Mercato</Tag>`
228
891
  }
229
892
  ]
230
893
  };
@@ -232,6 +895,21 @@ const avatarEntry = {
232
895
  id: "avatar",
233
896
  title: "Avatar",
234
897
  importPath: "@open-mercato/ui/primitives/avatar",
898
+ figmaNodeId: "245:18786",
899
+ usage: {
900
+ do: [
901
+ "Use src for photos, Memoji, and illustrations; use label for initials or icon for an entity symbol.",
902
+ "Numeric sizes reproduce all nine Figma diameters: 20, 24, 32, 40, 48, 56, 64, 72, and 80 px. Legacy xs/sm/md/lg/xl sizes remain 20/28/36/48/64 px.",
903
+ "Numeric 20\u201332 px initials use one letter; 40\u201380 px use two. Font size, line height, and medium weight follow the source. The application font and tracking remain governed by existing tokens.",
904
+ "Photo stacks use the audited size-specific overlaps. Initial stacks reduce overlap where two letters need more room, and full overflow counts can widen beyond the avatar diameter.",
905
+ "The six top-status examples use the existing circular badge slot and semantic colors. They show supported compositions, not an exact replica of the Figma verified silhouette.",
906
+ "Local James Brown assets come from Figma nodes 246:11135, 246:11139, and 246:11141. The production image crop can differ from Figma."
907
+ ],
908
+ dont: [
909
+ "Do not assume square avatars or simultaneous top and bottom decorations are supported by the current API.",
910
+ "Do not render interactive actions inside the decorative badge slot; put actions in a separate button."
911
+ ]
912
+ },
235
913
  variants: [
236
914
  {
237
915
  id: "sizes",
@@ -251,6 +929,96 @@ const avatarEntry = {
251
929
  <Avatar label="Wei Chen" size="md" />
252
930
  <Avatar label="Wei Chen" size="sm" />
253
931
  <Avatar label="Wei Chen" size="xs" />`
932
+ },
933
+ {
934
+ id: "figma-sizes",
935
+ title: "Figma sizes (20\u201380 px)",
936
+ render: () => /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-end gap-6", children: [20, 24, 32, 40, 48, 56, 64, 72, 80].map((size) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3", children: [
937
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size }),
938
+ /* @__PURE__ */ jsxs("code", { className: "text-xs text-muted-foreground", children: [
939
+ size,
940
+ "px"
941
+ ] })
942
+ ] }, size)) }),
943
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
944
+
945
+ <Avatar label="Wei Chen" size={20} />
946
+ <Avatar label="Wei Chen" size={24} />
947
+ <Avatar label="Wei Chen" size={32} />
948
+ <Avatar label="Wei Chen" size={40} />
949
+ <Avatar label="Wei Chen" size={48} />
950
+ <Avatar label="Wei Chen" size={56} />
951
+ <Avatar label="Wei Chen" size={64} />
952
+ <Avatar label="Wei Chen" size={72} />
953
+ <Avatar label="Wei Chen" size={80} />`
954
+ },
955
+ {
956
+ id: "figma-stack-sizes",
957
+ title: "Figma stack sizes and readable initials",
958
+ render: () => /* @__PURE__ */ jsx("div", { className: "grid w-full gap-6", children: [20, 24, 32, 40, 48, 56, 64, 72, 80].map((size) => /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-6", children: [
959
+ /* @__PURE__ */ jsxs("code", { className: "text-xs text-muted-foreground", children: [
960
+ size,
961
+ "px"
962
+ ] }),
963
+ /* @__PURE__ */ jsxs(AvatarStack, { size, max: 3, overflowCount: 12, children: [
964
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size }),
965
+ /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size }),
966
+ /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size })
967
+ ] })
968
+ ] }, size)) }),
969
+ code: `import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
970
+
971
+ {([20, 24, 32, 40, 48, 56, 64, 72, 80] as const).map((size) => (
972
+ <AvatarStack key={size} size={size} max={3} overflowCount={12}>
973
+ <Avatar label="Wei Chen" size={size} />
974
+ <Avatar label="Laura Perez" size={size} />
975
+ <Avatar label="Omar Haddad" size={size} />
976
+ </AvatarStack>
977
+ ))}`
978
+ },
979
+ {
980
+ id: "photo",
981
+ title: "Photo source",
982
+ render: () => /* @__PURE__ */ jsx(Avatar, { label: "James Brown", src: avatarPhotoSrc, size: "lg" }),
983
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
984
+ import photo from './avatar-photo.png'
985
+
986
+ <Avatar label="James Brown" src={typeof photo === 'string' ? photo : photo.src} size="lg" />`
987
+ },
988
+ {
989
+ id: "memoji",
990
+ title: "Memoji source",
991
+ render: () => /* @__PURE__ */ jsx(Avatar, { label: "James Brown", src: avatarMemojiSrc, size: "lg", variant: "monochrome" }),
992
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
993
+ import memoji from './avatar-memoji.png'
994
+
995
+ <Avatar label="James Brown" src={typeof memoji === 'string' ? memoji : memoji.src} size="lg" variant="monochrome" />`
996
+ },
997
+ {
998
+ id: "illustration",
999
+ title: "Illustration source",
1000
+ render: () => /* @__PURE__ */ jsx(Avatar, { label: "James Brown", src: avatarIllustrationSrc, size: "lg", variant: "monochrome" }),
1001
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
1002
+ import illustration from './avatar-illustration.png'
1003
+
1004
+ <Avatar label="James Brown" src={typeof illustration === 'string' ? illustration : illustration.src} size="lg" variant="monochrome" />`
1005
+ },
1006
+ {
1007
+ id: "solid-background",
1008
+ title: "Solid background",
1009
+ render: () => /* @__PURE__ */ jsx(Avatar, { label: "James Brown", icon: /* @__PURE__ */ jsx("span", {}), size: "lg", variant: "monochrome" }),
1010
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
1011
+
1012
+ <Avatar label="James Brown" icon={<span />} size="lg" variant="monochrome" />`
1013
+ },
1014
+ {
1015
+ id: "person-icon",
1016
+ title: "Person icon",
1017
+ render: () => /* @__PURE__ */ jsx(Avatar, { label: "James Brown", icon: /* @__PURE__ */ jsx(User, {}), size: "lg", variant: "monochrome" }),
1018
+ code: `import { User } from 'lucide-react'
1019
+ import { Avatar } from '@open-mercato/ui/primitives/avatar'
1020
+
1021
+ <Avatar label="James Brown" icon={<User />} size="lg" variant="monochrome" />`
254
1022
  },
255
1023
  {
256
1024
  id: "variants",
@@ -282,6 +1050,87 @@ import { Avatar } from '@open-mercato/ui/primitives/avatar'
282
1050
  <Avatar label="Laura Perez" status="busy" />
283
1051
  <Avatar label="Omar Haddad" status="away" />
284
1052
  <Avatar label="Ines Kowalska" status="offline" />`
1053
+ },
1054
+ {
1055
+ id: "top-badges",
1056
+ title: "Top Status compositions",
1057
+ render: () => /* @__PURE__ */ jsx(AvatarBadgesDemo, {}),
1058
+ code: `import { Check, Pin, Star, Plus, X } from 'lucide-react'
1059
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1060
+ import { Avatar } from '@open-mercato/ui/primitives/avatar'
1061
+
1062
+ function AvatarBadges() {
1063
+ const t = useT()
1064
+ return (
1065
+ <div className="flex flex-wrap items-center gap-6 p-2">
1066
+ <Avatar label="Wei Chen" ariaLabel={t('design_system.gallery.examples.avatar.verified')} badge={<Check className="size-3" />} badgeClassName="bg-status-info-icon text-white" />
1067
+ <Avatar label="Laura Perez" ariaLabel={t('design_system.gallery.examples.avatar.pinned')} badge={<Pin className="size-3" />} badgeClassName="bg-accent-indigo text-white" />
1068
+ <Avatar label="Omar Haddad" ariaLabel={t('design_system.gallery.examples.avatar.favorite')} badge={<Star className="size-3" />} badgeClassName="bg-status-success-icon text-white" />
1069
+ <Avatar label="Ines Kowalska" ariaLabel={t('design_system.gallery.examples.avatar.add')} badge={<Plus className="size-3" />} />
1070
+ <Avatar label="Ravi Patel" ariaLabel={t('design_system.gallery.examples.avatar.remove')} badge={<X className="size-3" />} badgeClassName="bg-status-error-icon text-white" />
1071
+ <Avatar label="James Brown" ariaLabel={t('design_system.gallery.examples.avatar.notification')} status="error" statusPosition="top-right" />
1072
+ </div>
1073
+ )
1074
+ }`
1075
+ },
1076
+ {
1077
+ id: "company-badge",
1078
+ title: "Company badge composition",
1079
+ render: () => /* @__PURE__ */ jsx(
1080
+ Avatar,
1081
+ {
1082
+ label: "Acme Corp",
1083
+ src: avatarPhotoSrc,
1084
+ size: "lg",
1085
+ badge: /* @__PURE__ */ jsx(Building2, { className: "size-3" }),
1086
+ badgeClassName: "top-auto bottom-0 translate-y-1/4"
1087
+ }
1088
+ ),
1089
+ code: `import { Building2 } from 'lucide-react'
1090
+ import { Avatar } from '@open-mercato/ui/primitives/avatar'
1091
+ import photo from './avatar-photo.png'
1092
+
1093
+ <Avatar label="Acme Corp" src={typeof photo === 'string' ? photo : photo.src} size="lg" badge={<Building2 className="size-3" />} badgeClassName="top-auto bottom-0 translate-y-1/4" />`
1094
+ },
1095
+ {
1096
+ id: "rings",
1097
+ title: "Ring tones (code extension)",
1098
+ render: () => /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-6 p-2", children: [
1099
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", ring: true }),
1100
+ /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", ring: "success" }),
1101
+ /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", ring: "warning" }),
1102
+ /* @__PURE__ */ jsx(Avatar, { label: "Ines Kowalska", ring: "error" }),
1103
+ /* @__PURE__ */ jsx(Avatar, { label: "Ravi Patel", ring: "muted" })
1104
+ ] }),
1105
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
1106
+
1107
+ <div className="flex flex-wrap gap-6 p-2">
1108
+ <Avatar label="Wei Chen" ring />
1109
+ <Avatar label="Laura Perez" ring="success" />
1110
+ <Avatar label="Omar Haddad" ring="warning" />
1111
+ <Avatar label="Ines Kowalska" ring="error" />
1112
+ <Avatar label="Ravi Patel" ring="muted" />
1113
+ </div>`
1114
+ },
1115
+ {
1116
+ id: "stack-sizes",
1117
+ title: "AvatarStack sizes and full overflow counts",
1118
+ render: () => /* @__PURE__ */ jsx("div", { className: "grid gap-6", children: ["xs", "sm", "md", "lg", "xl"].map((size) => /* @__PURE__ */ jsxs(AvatarStack, { size, max: 3, overflowCount: 12, children: [
1119
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size }),
1120
+ /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size }),
1121
+ /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size })
1122
+ ] }, size)) }),
1123
+ code: `import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
1124
+
1125
+ <div className="grid gap-6">
1126
+ {(['xs', 'sm', 'md', 'lg', 'xl'] as const).map((size) => (
1127
+ <AvatarStack key={size} size={size} max={3} overflowCount={12}>
1128
+ <Avatar label="Wei Chen" size={size} />
1129
+ <Avatar label="Laura Perez" size={size} />
1130
+ <Avatar label="Omar Haddad" size={size} />
1131
+ </AvatarStack>
1132
+ ))}
1133
+ </div>`
285
1134
  },
286
1135
  {
287
1136
  id: "stack",
@@ -344,37 +1193,28 @@ const tableEntry = {
344
1193
  importPath: "@open-mercato/ui/primitives/table",
345
1194
  figmaNodeId: "167144:147544",
346
1195
  variants: [
1196
+ {
1197
+ id: "header-states",
1198
+ title: "Header / default, disabled, empty and sorting",
1199
+ render: () => /* @__PURE__ */ jsx(TableHeaderExamples, {}),
1200
+ code: tableHeaderExampleCode
1201
+ },
1202
+ {
1203
+ id: "cells-48",
1204
+ title: "Cell catalogue / 48px rows",
1205
+ render: () => /* @__PURE__ */ jsx(TableCellExamples, { rowHeight: 48 }),
1206
+ code: tableCellExampleCode(48)
1207
+ },
1208
+ {
1209
+ id: "cells-64",
1210
+ title: "Cell catalogue / 64px rows",
1211
+ render: () => /* @__PURE__ */ jsx(TableCellExamples, { rowHeight: 64 }),
1212
+ code: tableCellExampleCode(64)
1213
+ },
347
1214
  {
348
1215
  id: "default",
349
1216
  title: "default",
350
- render: () => /* @__PURE__ */ jsxs(Table, { children: [
351
- /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
352
- /* @__PURE__ */ jsx(TableHead, { children: "Order" }),
353
- /* @__PURE__ */ jsx(TableHead, { children: "Customer" }),
354
- /* @__PURE__ */ jsx(TableHead, { children: "Status" }),
355
- /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: "Total" })
356
- ] }) }),
357
- /* @__PURE__ */ jsxs(TableBody, { children: [
358
- /* @__PURE__ */ jsxs(TableRow, { children: [
359
- /* @__PURE__ */ jsx(TableCell, { children: "#1042" }),
360
- /* @__PURE__ */ jsx(TableCell, { children: "Wei Chen" }),
361
- /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "success", dot: true, children: "Paid" }) }),
362
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,250.00" })
363
- ] }),
364
- /* @__PURE__ */ jsxs(TableRow, { children: [
365
- /* @__PURE__ */ jsx(TableCell, { children: "#1041" }),
366
- /* @__PURE__ */ jsx(TableCell, { children: "Laura Perez" }),
367
- /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "warning", dot: true, children: "Pending" }) }),
368
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$310.50" })
369
- ] }),
370
- /* @__PURE__ */ jsxs(TableRow, { children: [
371
- /* @__PURE__ */ jsx(TableCell, { children: "#1040" }),
372
- /* @__PURE__ */ jsx(TableCell, { children: "Omar Haddad" }),
373
- /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(StatusBadge, { variant: "neutral", dot: true, children: "Draft" }) }),
374
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$89.00" })
375
- ] })
376
- ] })
377
- ] }),
1217
+ render: () => /* @__PURE__ */ jsx(TableEntryDefaultPreview, {}),
378
1218
  code: `import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@open-mercato/ui/primitives/table'
379
1219
  import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
380
1220
 
@@ -400,35 +1240,7 @@ import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
400
1240
  {
401
1241
  id: "striped",
402
1242
  title: "striped",
403
- render: () => /* @__PURE__ */ jsxs(Table, { variant: "striped", children: [
404
- /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
405
- /* @__PURE__ */ jsx(TableHead, { children: "SKU" }),
406
- /* @__PURE__ */ jsx(TableHead, { children: "Product" }),
407
- /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: "Stock" })
408
- ] }) }),
409
- /* @__PURE__ */ jsxs(TableBody, { children: [
410
- /* @__PURE__ */ jsxs(TableRow, { children: [
411
- /* @__PURE__ */ jsx(TableCell, { children: "AP-100" }),
412
- /* @__PURE__ */ jsx(TableCell, { children: "Apex Desk Lamp" }),
413
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "120" })
414
- ] }),
415
- /* @__PURE__ */ jsxs(TableRow, { children: [
416
- /* @__PURE__ */ jsx(TableCell, { children: "AP-101" }),
417
- /* @__PURE__ */ jsx(TableCell, { children: "Apex Monitor Stand" }),
418
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "64" })
419
- ] }),
420
- /* @__PURE__ */ jsxs(TableRow, { children: [
421
- /* @__PURE__ */ jsx(TableCell, { children: "AP-102" }),
422
- /* @__PURE__ */ jsx(TableCell, { children: "Apex Cable Kit" }),
423
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "310" })
424
- ] }),
425
- /* @__PURE__ */ jsxs(TableRow, { children: [
426
- /* @__PURE__ */ jsx(TableCell, { children: "AP-103" }),
427
- /* @__PURE__ */ jsx(TableCell, { children: "Apex Laptop Riser" }),
428
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "18" })
429
- ] })
430
- ] })
431
- ] }),
1243
+ render: () => /* @__PURE__ */ jsx(TableEntryStripedPreview, {}),
432
1244
  code: `import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@open-mercato/ui/primitives/table'
433
1245
 
434
1246
  <Table variant="striped">
@@ -445,26 +1257,7 @@ import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
445
1257
  {
446
1258
  id: "with-footer",
447
1259
  title: "With footer",
448
- render: () => /* @__PURE__ */ jsxs(Table, { children: [
449
- /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
450
- /* @__PURE__ */ jsx(TableHead, { children: "Line" }),
451
- /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: "Amount" })
452
- ] }) }),
453
- /* @__PURE__ */ jsxs(TableBody, { children: [
454
- /* @__PURE__ */ jsxs(TableRow, { children: [
455
- /* @__PURE__ */ jsx(TableCell, { children: "Subtotal" }),
456
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,560.50" })
457
- ] }),
458
- /* @__PURE__ */ jsxs(TableRow, { children: [
459
- /* @__PURE__ */ jsx(TableCell, { children: "Shipping" }),
460
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$24.00" })
461
- ] })
462
- ] }),
463
- /* @__PURE__ */ jsx(TableFooter, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
464
- /* @__PURE__ */ jsx(TableCell, { children: "Total" }),
465
- /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: "$1,584.50" })
466
- ] }) })
467
- ] }),
1260
+ render: () => /* @__PURE__ */ jsx(TableEntryWithFooterPreview, {}),
468
1261
  code: `import { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell } from '@open-mercato/ui/primitives/table'
469
1262
 
470
1263
  <Table>
@@ -488,14 +1281,7 @@ const cardEntry = {
488
1281
  {
489
1282
  id: "default",
490
1283
  title: "default",
491
- render: () => /* @__PURE__ */ jsxs(Card, { className: "w-full max-w-sm", children: [
492
- /* @__PURE__ */ jsxs(CardHeader, { children: [
493
- /* @__PURE__ */ jsx(CardTitle, { children: "Monthly revenue" }),
494
- /* @__PURE__ */ jsx(CardDescription, { children: "Net revenue across all channels." })
495
- ] }),
496
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx("p", { className: "text-2xl font-semibold", children: "$48,210" }) }),
497
- /* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Updated 5 minutes ago" }) })
498
- ] }),
1284
+ render: () => /* @__PURE__ */ jsx(CardEntryDefaultPreview, {}),
499
1285
  code: `import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from '@open-mercato/ui/primitives/card'
500
1286
 
501
1287
  <Card>
@@ -514,32 +1300,28 @@ const cardEntry = {
514
1300
  {
515
1301
  id: "with-action",
516
1302
  title: "With action slot",
517
- render: () => /* @__PURE__ */ jsxs(Card, { className: "w-full max-w-sm", children: [
518
- /* @__PURE__ */ jsxs(CardHeader, { children: [
519
- /* @__PURE__ */ jsx(CardTitle, { children: "Team members" }),
520
- /* @__PURE__ */ jsx(CardDescription, { children: "People with access to this workspace." }),
521
- /* @__PURE__ */ jsx(CardAction, { children: /* @__PURE__ */ jsx(IconButton, { variant: "ghost", "aria-label": "More", children: /* @__PURE__ */ jsx(MoreHorizontal, {}) }) })
522
- ] }),
523
- /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(AvatarStack, { max: 3, size: "sm", children: [
524
- /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: "sm" }),
525
- /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size: "sm" }),
526
- /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size: "sm" }),
527
- /* @__PURE__ */ jsx(Avatar, { label: "Ines Kowalska", size: "sm" })
528
- ] }) })
529
- ] }),
1303
+ render: () => /* @__PURE__ */ jsx(CardEntryWithActionPreview, {}),
530
1304
  code: `import { MoreHorizontal } from 'lucide-react'
531
1305
  import { Card, CardHeader, CardTitle, CardDescription, CardAction, CardContent } from '@open-mercato/ui/primitives/card'
532
1306
  import { IconButton } from '@open-mercato/ui/primitives/icon-button'
1307
+ import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
533
1308
 
534
- <Card>
1309
+ <Card className="w-full max-w-sm">
535
1310
  <CardHeader>
536
1311
  <CardTitle>Team members</CardTitle>
537
1312
  <CardDescription>People with access to this workspace.</CardDescription>
538
1313
  <CardAction>
539
- <IconButton variant="ghost" aria-label="More"><MoreHorizontal /></IconButton>
1314
+ <IconButton type="button" variant="ghost" aria-label="More"><MoreHorizontal /></IconButton>
540
1315
  </CardAction>
541
1316
  </CardHeader>
542
- <CardContent>{/* content */}</CardContent>
1317
+ <CardContent>
1318
+ <AvatarStack max={3} size="sm">
1319
+ <Avatar label="Wei Chen" size="sm" />
1320
+ <Avatar label="Laura Perez" size="sm" />
1321
+ <Avatar label="Omar Haddad" size="sm" />
1322
+ <Avatar label="Ines Kowalska" size="sm" />
1323
+ </AvatarStack>
1324
+ </CardContent>
543
1325
  </Card>`
544
1326
  }
545
1327
  ]
@@ -548,34 +1330,186 @@ const separatorEntry = {
548
1330
  id: "separator",
549
1331
  title: "Separator",
550
1332
  importPath: "@open-mercato/ui/primitives/separator",
1333
+ figmaNodeId: "414:4401",
1334
+ usage: {
1335
+ do: [
1336
+ "The nine Figma Content Divider layouts are represented: line, line spacing, text and line, text only, solid text, icon button, icon button group, text button, and text button group.",
1337
+ "Place action buttons between two flexible Separator rules with gap-2.5. ButtonGroup supplies joined borders; do not place interactive controls inside a separator role.",
1338
+ "Vertical, dashed, and label-alignment examples expose the existing code API beyond the nine Figma layouts.",
1339
+ "Compositions use production tokens and responsive width. The labeled primitive remains 12/16 px; the audited Figma text-and-line label is 11/12 px."
1340
+ ]
1341
+ },
551
1342
  variants: [
552
1343
  {
553
1344
  id: "default",
554
1345
  title: "default",
555
- render: () => /* @__PURE__ */ jsxs("div", { className: "w-full max-w-sm", children: [
556
- /* @__PURE__ */ jsx("p", { className: "text-sm", children: "Shipping details" }),
557
- /* @__PURE__ */ jsx(Separator, { className: "my-3" }),
558
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Billing details" })
559
- ] }),
1346
+ render: () => /* @__PURE__ */ jsx(SeparatorEntryDefaultPreview, {}),
560
1347
  code: `import { Separator } from '@open-mercato/ui/primitives/separator'
561
1348
 
562
1349
  <Separator className="my-3" />`
1350
+ },
1351
+ {
1352
+ id: "line-spacing",
1353
+ title: "Line Spacing",
1354
+ render: () => /* @__PURE__ */ jsx("div", { className: "flex h-1 w-full items-center", children: /* @__PURE__ */ jsx(Separator, {}) }),
1355
+ code: `import { Separator } from '@open-mercato/ui/primitives/separator'
1356
+
1357
+ <div className="flex h-1 w-full items-center"><Separator /></div>`
563
1358
  },
564
1359
  {
565
1360
  id: "labeled",
566
1361
  title: "Labeled",
567
- render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Separator, { label: "OR" }) }),
1362
+ render: () => /* @__PURE__ */ jsx(SeparatorEntryLabeledPreview, {}),
568
1363
  code: `import { Separator } from '@open-mercato/ui/primitives/separator'
569
1364
 
570
1365
  <Separator label="OR" />`
1366
+ },
1367
+ {
1368
+ id: "text-divider",
1369
+ title: "Text Divider",
1370
+ render: () => /* @__PURE__ */ jsx(SeparatorTextDemo, { kind: "text" }),
1371
+ code: `import { useT } from '@open-mercato/shared/lib/i18n/context'
1372
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1373
+
1374
+ function TextDivider() {
1375
+ const t = useT()
1376
+ return <Separator section label={t('design_system.gallery.examples.separator.or')} className="bg-transparent px-2 py-1" />
1377
+ }`
1378
+ },
1379
+ {
1380
+ id: "label-alignments",
1381
+ title: "Label alignments (code extension)",
1382
+ render: () => /* @__PURE__ */ jsx(SeparatorTextDemo, { kind: "label-alignments" }),
1383
+ code: `import { useT } from '@open-mercato/shared/lib/i18n/context'
1384
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1385
+
1386
+ function LabelAlignments() {
1387
+ const t = useT()
1388
+ return (
1389
+ <div className="grid w-full gap-6">
1390
+ <Separator label={t('design_system.gallery.examples.separator.or')} labelAlign="start" />
1391
+ <Separator label={t('design_system.gallery.examples.separator.or')} labelAlign="center" />
1392
+ <Separator label={t('design_system.gallery.examples.separator.or')} labelAlign="end" />
1393
+ </div>
1394
+ )
1395
+ }`
571
1396
  },
572
1397
  {
573
1398
  id: "section",
574
1399
  title: "Section header",
575
- render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Separator, { section: true, label: "Amount & account" }) }),
1400
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-sm", children: /* @__PURE__ */ jsx(Separator, { section: true, label: "Amount & account", className: "px-5" }) }),
576
1401
  code: `import { Separator } from '@open-mercato/ui/primitives/separator'
577
1402
 
578
- <Separator section label="Amount & account" />`
1403
+ <Separator section label="Amount & account" className="px-5" />`
1404
+ },
1405
+ {
1406
+ id: "icon-button",
1407
+ title: "Icon Button",
1408
+ render: () => /* @__PURE__ */ jsx(SeparatorActionDemo, { kind: "icon" }),
1409
+ code: `import { Plus } from 'lucide-react'
1410
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1411
+ import { IconButton } from '@open-mercato/ui/primitives/icon-button'
1412
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1413
+
1414
+ function IconDivider() {
1415
+ const t = useT()
1416
+ return (
1417
+ <div className="flex w-full items-center gap-2.5">
1418
+ <Separator className="min-w-0 flex-1" />
1419
+ <IconButton size="default" aria-label={t('design_system.gallery.examples.separator.add')}><Plus className="size-5" /></IconButton>
1420
+ <Separator className="min-w-0 flex-1" />
1421
+ </div>
1422
+ )
1423
+ }`
1424
+ },
1425
+ {
1426
+ id: "icon-button-group",
1427
+ title: "Icon Button Group",
1428
+ render: () => /* @__PURE__ */ jsx(SeparatorActionDemo, { kind: "icon-group" }),
1429
+ code: `import { ChevronLeft, Plus, ChevronRight } from 'lucide-react'
1430
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1431
+ import { IconButton } from '@open-mercato/ui/primitives/icon-button'
1432
+ import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
1433
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1434
+
1435
+ function IconGroupDivider() {
1436
+ const t = useT()
1437
+ return (
1438
+ <div className="flex w-full items-center gap-2.5">
1439
+ <Separator className="min-w-0 flex-1" />
1440
+ <ButtonGroup aria-label={t('design_system.gallery.examples.separator.actions')}>
1441
+ <IconButton size="default" aria-label={t('design_system.gallery.examples.separator.previous')}><ChevronLeft className="size-5" /></IconButton>
1442
+ <IconButton size="default" aria-label={t('design_system.gallery.examples.separator.add')}><Plus className="size-5" /></IconButton>
1443
+ <IconButton size="default" aria-label={t('design_system.gallery.examples.separator.next')}><ChevronRight className="size-5" /></IconButton>
1444
+ </ButtonGroup>
1445
+ <Separator className="min-w-0 flex-1" />
1446
+ </div>
1447
+ )
1448
+ }`
1449
+ },
1450
+ {
1451
+ id: "text-button",
1452
+ title: "Text Button",
1453
+ render: () => /* @__PURE__ */ jsx(SeparatorActionDemo, { kind: "text" }),
1454
+ code: `import { useT } from '@open-mercato/shared/lib/i18n/context'
1455
+ import { Button } from '@open-mercato/ui/primitives/button'
1456
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1457
+
1458
+ function TextButtonDivider() {
1459
+ const t = useT()
1460
+ return (
1461
+ <div className="flex w-full items-center gap-2.5">
1462
+ <Separator className="min-w-0 flex-1" />
1463
+ <Button type="button" size="sm" variant="outline" className="px-2.5">{t('design_system.gallery.examples.separator.add')}</Button>
1464
+ <Separator className="min-w-0 flex-1" />
1465
+ </div>
1466
+ )
1467
+ }`
1468
+ },
1469
+ {
1470
+ id: "text-button-group",
1471
+ title: "Text Button Group",
1472
+ render: () => /* @__PURE__ */ jsx(SeparatorActionDemo, { kind: "text-group" }),
1473
+ code: `import { useT } from '@open-mercato/shared/lib/i18n/context'
1474
+ import { Button } from '@open-mercato/ui/primitives/button'
1475
+ import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
1476
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1477
+
1478
+ function TextGroupDivider() {
1479
+ const t = useT()
1480
+ return (
1481
+ <div className="flex w-full items-center gap-2.5">
1482
+ <Separator className="min-w-0 flex-1" />
1483
+ <ButtonGroup size="sm" aria-label={t('design_system.gallery.examples.separator.actions')}>
1484
+ <Button type="button" size="sm" variant="outline" className="px-3.5">{t('design_system.gallery.examples.separator.previous')}</Button>
1485
+ <Button type="button" size="sm" variant="outline" className="px-3.5">{t('design_system.gallery.examples.separator.add')}</Button>
1486
+ <Button type="button" size="sm" variant="outline" className="px-3.5">{t('design_system.gallery.examples.separator.next')}</Button>
1487
+ </ButtonGroup>
1488
+ <Separator className="min-w-0 flex-1" />
1489
+ </div>
1490
+ )
1491
+ }`
1492
+ },
1493
+ {
1494
+ id: "vertical",
1495
+ title: "Vertical (code extension)",
1496
+ render: () => /* @__PURE__ */ jsxs("div", { className: "flex h-16 items-center gap-6", children: [
1497
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen" }),
1498
+ /* @__PURE__ */ jsx(Separator, { orientation: "vertical" }),
1499
+ /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez" }),
1500
+ /* @__PURE__ */ jsx(Separator, { orientation: "vertical", variant: "dashed" }),
1501
+ /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad" })
1502
+ ] }),
1503
+ code: `import { Avatar } from '@open-mercato/ui/primitives/avatar'
1504
+ import { Separator } from '@open-mercato/ui/primitives/separator'
1505
+
1506
+ <div className="flex h-16 items-center gap-6">
1507
+ <Avatar label="Wei Chen" />
1508
+ <Separator orientation="vertical" />
1509
+ <Avatar label="Laura Perez" />
1510
+ <Separator orientation="vertical" variant="dashed" />
1511
+ <Avatar label="Omar Haddad" />
1512
+ </div>`
579
1513
  },
580
1514
  {
581
1515
  id: "dashed",
@@ -587,20 +1521,146 @@ const separatorEntry = {
587
1521
  }
588
1522
  ]
589
1523
  };
1524
+ function FigmaScrollDemo({
1525
+ size,
1526
+ variant,
1527
+ horizontal = false
1528
+ }) {
1529
+ const t = useT();
1530
+ return /* @__PURE__ */ jsx(
1531
+ ScrollArea,
1532
+ {
1533
+ type: "always",
1534
+ scrollbarSize: size,
1535
+ scrollbarVariant: variant,
1536
+ scrollbars: horizontal ? "horizontal" : "vertical",
1537
+ className: "h-60 w-full max-w-xs rounded-md border border-border",
1538
+ children: /* @__PURE__ */ jsx("div", { className: horizontal ? "flex w-max gap-4 p-6" : "flex flex-col gap-2 p-4 pr-8", children: Array.from(
1539
+ {
1540
+ length: 20
1541
+ },
1542
+ (_, index) => /* @__PURE__ */ jsx("p", { className: "whitespace-nowrap text-sm", children: t("design_system.gallery.samples.scroll.row", {
1543
+ number: index + 1
1544
+ }) }, index)
1545
+ ) })
1546
+ }
1547
+ );
1548
+ }
590
1549
  const scrollAreaEntry = {
591
1550
  id: "scroll-area",
592
1551
  title: "ScrollArea",
593
1552
  importPath: "@open-mercato/ui/primitives/scroll-area",
1553
+ figmaNodeId: "166941:61889",
594
1554
  variants: [
1555
+ {
1556
+ id: "default-md",
1557
+ title: "default / Medium",
1558
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "md", variant: "default" }),
1559
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1560
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1561
+
1562
+ const t = useT()
1563
+
1564
+ <ScrollArea type="always" scrollbarSize="md" scrollbarVariant="default" className="h-60 w-full max-w-xs rounded-md border border-border">
1565
+ <div className="flex flex-col gap-2 p-4 pr-8">
1566
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1567
+ </div>
1568
+ </ScrollArea>`
1569
+ },
1570
+ {
1571
+ id: "default-sm",
1572
+ title: "default / Small",
1573
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "sm", variant: "default" }),
1574
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1575
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1576
+
1577
+ const t = useT()
1578
+
1579
+ <ScrollArea type="always" scrollbarSize="sm" scrollbarVariant="default" className="h-60 w-full max-w-xs rounded-md border border-border">
1580
+ <div className="flex flex-col gap-2 p-4 pr-8">
1581
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1582
+ </div>
1583
+ </ScrollArea>`
1584
+ },
1585
+ {
1586
+ id: "default-xs",
1587
+ title: "default / X-Small",
1588
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "xs", variant: "default" }),
1589
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1590
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1591
+
1592
+ const t = useT()
1593
+
1594
+ <ScrollArea type="always" scrollbarSize="xs" scrollbarVariant="default" className="h-60 w-full max-w-xs rounded-md border border-border">
1595
+ <div className="flex flex-col gap-2 p-4 pr-8">
1596
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1597
+ </div>
1598
+ </ScrollArea>`
1599
+ },
1600
+ {
1601
+ id: "lighter-md",
1602
+ title: "lighter / Medium",
1603
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "md", variant: "lighter" }),
1604
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1605
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1606
+
1607
+ const t = useT()
1608
+
1609
+ <ScrollArea type="always" scrollbarSize="md" scrollbarVariant="lighter" className="h-60 w-full max-w-xs rounded-md border border-border">
1610
+ <div className="flex flex-col gap-2 p-4 pr-8">
1611
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1612
+ </div>
1613
+ </ScrollArea>`
1614
+ },
1615
+ {
1616
+ id: "lighter-sm",
1617
+ title: "lighter / Small",
1618
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "sm", variant: "lighter" }),
1619
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1620
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1621
+
1622
+ const t = useT()
1623
+
1624
+ <ScrollArea type="always" scrollbarSize="sm" scrollbarVariant="lighter" className="h-60 w-full max-w-xs rounded-md border border-border">
1625
+ <div className="flex flex-col gap-2 p-4 pr-8">
1626
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1627
+ </div>
1628
+ </ScrollArea>`
1629
+ },
1630
+ {
1631
+ id: "lighter-xs",
1632
+ title: "lighter / X-Small",
1633
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "xs", variant: "lighter" }),
1634
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1635
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1636
+
1637
+ const t = useT()
1638
+
1639
+ <ScrollArea type="always" scrollbarSize="xs" scrollbarVariant="lighter" className="h-60 w-full max-w-xs rounded-md border border-border">
1640
+ <div className="flex flex-col gap-2 p-4 pr-8">
1641
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1642
+ </div>
1643
+ </ScrollArea>`
1644
+ },
1645
+ {
1646
+ id: "horizontal-figma",
1647
+ title: "Horizontal / Lighter / Medium",
1648
+ render: () => /* @__PURE__ */ jsx(FigmaScrollDemo, { size: "md", variant: "lighter", horizontal: true }),
1649
+ code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
1650
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
1651
+
1652
+ const t = useT()
1653
+
1654
+ <ScrollArea type="always" scrollbarSize="md" scrollbarVariant="lighter" scrollbars="horizontal" className="h-60 w-full max-w-xs rounded-md border border-border">
1655
+ <div className="flex w-max gap-4 p-6">
1656
+ {Array.from({ length: 20 }, (_, index) => <p key={index} className="whitespace-nowrap text-sm">{t('design_system.gallery.samples.scroll.row', { number: index + 1 })}</p>)}
1657
+ </div>
1658
+ </ScrollArea>`
1659
+ },
595
1660
  {
596
1661
  id: "vertical",
597
1662
  title: "Vertical",
598
- render: () => /* @__PURE__ */ jsx(ScrollArea, { className: "h-40 w-full max-w-xs rounded-md border", children: /* @__PURE__ */ jsx("div", { className: "p-3", children: Array.from({ length: 20 }, (_, i) => /* @__PURE__ */ jsxs("p", { className: "border-b py-1.5 text-sm last:border-b-0", children: [
599
- "Warehouse zone ",
600
- String.fromCharCode(65 + i % 6),
601
- "-",
602
- i + 1
603
- ] }, i)) }) }),
1663
+ render: () => /* @__PURE__ */ jsx(ScrollAreaEntryVerticalPreview, {}),
604
1664
  code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
605
1665
 
606
1666
  <ScrollArea className="h-40 rounded-md border">
@@ -614,10 +1674,7 @@ const scrollAreaEntry = {
614
1674
  {
615
1675
  id: "horizontal",
616
1676
  title: "Horizontal",
617
- render: () => /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "horizontal", className: "w-full max-w-xs rounded-md border", children: /* @__PURE__ */ jsx("div", { className: "flex w-max gap-2 p-3", children: Array.from({ length: 12 }, (_, i) => /* @__PURE__ */ jsxs(Tag, { variant: "neutral", shape: "square", children: [
618
- "Channel ",
619
- i + 1
620
- ] }, i)) }) }),
1677
+ render: () => /* @__PURE__ */ jsx(ScrollAreaEntryHorizontalPreview, {}),
621
1678
  code: `import { ScrollArea } from '@open-mercato/ui/primitives/scroll-area'
622
1679
  import { Tag } from '@open-mercato/ui/primitives/tag'
623
1680
 
@@ -633,38 +1690,20 @@ import { Tag } from '@open-mercato/ui/primitives/tag'
633
1690
  };
634
1691
  const activityFeedEntry = {
635
1692
  id: "activity-feed",
1693
+ figmaNodeId: "166035:46833",
636
1694
  title: "ActivityFeed",
637
1695
  importPath: "@open-mercato/ui/primitives/activity-feed",
638
1696
  variants: [
1697
+ {
1698
+ id: "source-composition",
1699
+ title: "5 entry types / filter / actions",
1700
+ render: () => /* @__PURE__ */ jsx(ActivityFeedExample, {}),
1701
+ code: activityFeedExampleCode
1702
+ },
639
1703
  {
640
1704
  id: "basic",
641
1705
  title: "Basic entries",
642
- render: () => /* @__PURE__ */ jsxs(ActivityFeed, { className: "w-full max-w-md", children: [
643
- /* @__PURE__ */ jsx(
644
- ActivityFeedItem,
645
- {
646
- avatar: /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: "sm" }),
647
- title: /* @__PURE__ */ jsxs(Fragment, { children: [
648
- "Wei Chen ",
649
- /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "created" }),
650
- " Order #1042"
651
- ] }),
652
- timestamp: "4 min ago"
653
- }
654
- ),
655
- /* @__PURE__ */ jsx(
656
- ActivityFeedItem,
657
- {
658
- avatar: /* @__PURE__ */ jsx(Avatar, { label: "Laura Perez", size: "sm" }),
659
- title: /* @__PURE__ */ jsxs(Fragment, { children: [
660
- "Laura Perez ",
661
- /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "updated the shipping address" })
662
- ] }),
663
- timestamp: "1 hour ago",
664
- actions: /* @__PURE__ */ jsx(IconButton, { variant: "ghost", size: "sm", "aria-label": "More", children: /* @__PURE__ */ jsx(MoreHorizontal, {}) })
665
- }
666
- )
667
- ] }),
1706
+ render: () => /* @__PURE__ */ jsx(ActivityFeedEntryBasicPreview, {}),
668
1707
  code: `import { ActivityFeed, ActivityFeedItem } from '@open-mercato/ui/primitives/activity-feed'
669
1708
  import { Avatar } from '@open-mercato/ui/primitives/avatar'
670
1709
 
@@ -679,20 +1718,7 @@ import { Avatar } from '@open-mercato/ui/primitives/avatar'
679
1718
  {
680
1719
  id: "with-attachment",
681
1720
  title: "File attachment",
682
- render: () => /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
683
- ActivityFeedItem,
684
- {
685
- avatar: /* @__PURE__ */ jsx(Avatar, { label: "Omar Haddad", size: "sm" }),
686
- title: /* @__PURE__ */ jsxs(Fragment, { children: [
687
- "Omar Haddad ",
688
- /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "uploaded" }),
689
- " Q2 financial report"
690
- ] }),
691
- timestamp: "2 days ago",
692
- children: /* @__PURE__ */ jsx(ActivityFeedFileChip, { name: "apex-report.pdf", size: "4mb", onDownload: () => {
693
- } })
694
- }
695
- ) }),
1721
+ render: () => /* @__PURE__ */ jsx(ActivityFeedEntryWithAttachmentPreview, {}),
696
1722
  code: `import { ActivityFeed, ActivityFeedItem, ActivityFeedFileChip } from '@open-mercato/ui/primitives/activity-feed'
697
1723
  import { Avatar } from '@open-mercato/ui/primitives/avatar'
698
1724
 
@@ -707,19 +1733,7 @@ import { Avatar } from '@open-mercato/ui/primitives/avatar'
707
1733
  {
708
1734
  id: "with-comment",
709
1735
  title: "Comment",
710
- render: () => /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
711
- ActivityFeedItem,
712
- {
713
- avatar: /* @__PURE__ */ jsx(Avatar, { label: "Ines Kowalska", size: "sm" }),
714
- title: /* @__PURE__ */ jsxs(Fragment, { children: [
715
- "Ines Kowalska ",
716
- /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "commented" })
717
- ] }),
718
- timestamp: "6 days ago",
719
- children: /* @__PURE__ */ jsx(ActivityFeedComment, { onReply: () => {
720
- }, children: "Please revise the risk metrics before Friday." })
721
- }
722
- ) }),
1736
+ render: () => /* @__PURE__ */ jsx(ActivityFeedEntryWithCommentPreview, {}),
723
1737
  code: `import { ActivityFeed, ActivityFeedItem, ActivityFeedComment } from '@open-mercato/ui/primitives/activity-feed'
724
1738
  import { Avatar } from '@open-mercato/ui/primitives/avatar'
725
1739
 
@@ -736,22 +1750,7 @@ import { Avatar } from '@open-mercato/ui/primitives/avatar'
736
1750
  {
737
1751
  id: "status-chips",
738
1752
  title: "Status chips",
739
- render: () => /* @__PURE__ */ jsx(ActivityFeed, { className: "w-full max-w-md", children: /* @__PURE__ */ jsxs(
740
- ActivityFeedItem,
741
- {
742
- avatar: /* @__PURE__ */ jsx(Avatar, { label: "Ravi Patel", size: "sm" }),
743
- title: /* @__PURE__ */ jsxs(Fragment, { children: [
744
- "Ravi Patel ",
745
- /* @__PURE__ */ jsx("span", { className: "font-normal text-muted-foreground", children: "moved 3 tasks" })
746
- ] }),
747
- timestamp: "1 week ago",
748
- children: [
749
- /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "success", children: "Approved" }),
750
- /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "warning", children: "Needs review" }),
751
- /* @__PURE__ */ jsx(ActivityFeedStatusChip, { status: "error", children: "Blocked" })
752
- ]
753
- }
754
- ) }),
1753
+ render: () => /* @__PURE__ */ jsx(ActivityFeedEntryStatusChipsPreview, {}),
755
1754
  code: `import { ActivityFeed, ActivityFeedItem, ActivityFeedStatusChip } from '@open-mercato/ui/primitives/activity-feed'
756
1755
  import { Avatar } from '@open-mercato/ui/primitives/avatar'
757
1756
 
@@ -767,7 +1766,217 @@ import { Avatar } from '@open-mercato/ui/primitives/avatar'
767
1766
  }
768
1767
  ]
769
1768
  };
1769
+ const content_labelEntry = {
1770
+ id: "content-label",
1771
+ title: "ContentLabel",
1772
+ importPath: "@open-mercato/ui/primitives/content-label",
1773
+ figmaNodeId: "2945:5539",
1774
+ descriptionKey: "design_system.entries.content-label.description",
1775
+ variants: [
1776
+ {
1777
+ id: "basic-40",
1778
+ title: "basic-40",
1779
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "basic", size: 40 }),
1780
+ code: keyComponentExampleCode('<ContentLabelExample kind="basic" size={40} />')
1781
+ },
1782
+ {
1783
+ id: "icon-40",
1784
+ title: "icon-40",
1785
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "icon", size: 40 }),
1786
+ code: keyComponentExampleCode('<ContentLabelExample kind="icon" size={40} />')
1787
+ },
1788
+ {
1789
+ id: "avatar-40",
1790
+ title: "avatar-40",
1791
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "avatar", size: 40 }),
1792
+ code: keyComponentExampleCode('<ContentLabelExample kind="avatar" size={40} />')
1793
+ },
1794
+ {
1795
+ id: "brand-40",
1796
+ title: "brand-40",
1797
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "brand", size: 40 }),
1798
+ code: keyComponentExampleCode('<ContentLabelExample kind="brand" size={40} />')
1799
+ },
1800
+ {
1801
+ id: "company-40",
1802
+ title: "company-40",
1803
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "company", size: 40 }),
1804
+ code: keyComponentExampleCode('<ContentLabelExample kind="company" size={40} />')
1805
+ },
1806
+ {
1807
+ id: "basic-48",
1808
+ title: "basic-48",
1809
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "basic", size: 48 }),
1810
+ code: keyComponentExampleCode('<ContentLabelExample kind="basic" size={48} />')
1811
+ },
1812
+ {
1813
+ id: "icon-48",
1814
+ title: "icon-48",
1815
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "icon", size: 48 }),
1816
+ code: keyComponentExampleCode('<ContentLabelExample kind="icon" size={48} />')
1817
+ },
1818
+ {
1819
+ id: "avatar-48",
1820
+ title: "avatar-48",
1821
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "avatar", size: 48 }),
1822
+ code: keyComponentExampleCode('<ContentLabelExample kind="avatar" size={48} />')
1823
+ },
1824
+ {
1825
+ id: "brand-48",
1826
+ title: "brand-48",
1827
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "brand", size: 48 }),
1828
+ code: keyComponentExampleCode('<ContentLabelExample kind="brand" size={48} />')
1829
+ },
1830
+ {
1831
+ id: "company-48",
1832
+ title: "company-48",
1833
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "company", size: 48 }),
1834
+ code: keyComponentExampleCode('<ContentLabelExample kind="company" size={48} />')
1835
+ },
1836
+ {
1837
+ id: "options",
1838
+ title: "options",
1839
+ render: () => /* @__PURE__ */ jsx(ContentLabelExample, { kind: "icon", size: 48, configurable: true }),
1840
+ code: keyComponentExampleCode('<ContentLabelExample kind="icon" size={48} configurable />')
1841
+ }
1842
+ ]
1843
+ };
1844
+ const content_cardEntry = {
1845
+ id: "content-card",
1846
+ title: "ContentCard",
1847
+ importPath: "@open-mercato/ui/primitives/content-card",
1848
+ figmaNodeId: "2942:9503",
1849
+ descriptionKey: "design_system.entries.content-card.description",
1850
+ variants: [
1851
+ {
1852
+ id: "basic",
1853
+ title: "basic",
1854
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "basic" }),
1855
+ code: keyComponentExampleCode('<ContentCardExample kind="basic" />')
1856
+ },
1857
+ {
1858
+ id: "icon",
1859
+ title: "icon",
1860
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "icon" }),
1861
+ code: keyComponentExampleCode('<ContentCardExample kind="icon" />')
1862
+ },
1863
+ {
1864
+ id: "avatar",
1865
+ title: "avatar",
1866
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "avatar" }),
1867
+ code: keyComponentExampleCode('<ContentCardExample kind="avatar" />')
1868
+ },
1869
+ {
1870
+ id: "provider",
1871
+ title: "provider",
1872
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "provider" }),
1873
+ code: keyComponentExampleCode('<ContentCardExample kind="provider" />')
1874
+ },
1875
+ {
1876
+ id: "brand",
1877
+ title: "brand",
1878
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "brand" }),
1879
+ code: keyComponentExampleCode('<ContentCardExample kind="brand" />')
1880
+ },
1881
+ {
1882
+ id: "company",
1883
+ title: "company",
1884
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "company" }),
1885
+ code: keyComponentExampleCode('<ContentCardExample kind="company" />')
1886
+ },
1887
+ {
1888
+ id: "disabled",
1889
+ title: "disabled",
1890
+ render: () => /* @__PURE__ */ jsx(ContentCardExample, { kind: "icon", disabled: true }),
1891
+ code: keyComponentExampleCode('<ContentCardExample kind="icon" disabled />')
1892
+ }
1893
+ ]
1894
+ };
1895
+ const key_iconEntry = {
1896
+ id: "key-icon",
1897
+ title: "KeyIcon",
1898
+ importPath: "@open-mercato/ui/primitives/key-icon",
1899
+ figmaNodeId: "263:1850",
1900
+ descriptionKey: "design_system.entries.key-icon.description",
1901
+ variants: [
1902
+ {
1903
+ id: "stroke",
1904
+ title: "stroke",
1905
+ render: () => /* @__PURE__ */ jsx(KeyIconExamples, {}),
1906
+ code: keyComponentExampleCode("<KeyIconExamples />")
1907
+ },
1908
+ {
1909
+ id: "lighter",
1910
+ title: "lighter",
1911
+ render: () => /* @__PURE__ */ jsx(KeyIconExamples, { appearance: "lighter" }),
1912
+ code: keyComponentExampleCode('<KeyIconExamples appearance="lighter" />')
1913
+ }
1914
+ ]
1915
+ };
1916
+ const payment_iconEntry = {
1917
+ id: "payment-icon",
1918
+ title: "PaymentIcon",
1919
+ importPath: "@open-mercato/ui/primitives/payment-icon",
1920
+ figmaNodeId: "2942:9995",
1921
+ descriptionKey: "design_system.entries.payment-icon.description",
1922
+ variants: [
1923
+ {
1924
+ id: "categories",
1925
+ title: "categories",
1926
+ render: () => /* @__PURE__ */ jsx(PaymentIconExamples, {}),
1927
+ code: keyComponentExampleCode("<PaymentIconExamples />")
1928
+ }
1929
+ ]
1930
+ };
1931
+ const chart_legendEntry = {
1932
+ id: "chart-legend",
1933
+ title: "ChartLegend",
1934
+ importPath: "@open-mercato/ui/primitives/chart-legend",
1935
+ figmaNodeId: "2942:9934",
1936
+ descriptionKey: "design_system.entries.chart-legend.description",
1937
+ variants: [
1938
+ {
1939
+ id: "colors",
1940
+ title: "colors",
1941
+ render: () => /* @__PURE__ */ jsx(ChartLegendExamples, {}),
1942
+ code: keyComponentExampleCode("<ChartLegendExamples />")
1943
+ },
1944
+ {
1945
+ id: "interactive",
1946
+ title: "interactive",
1947
+ render: () => /* @__PURE__ */ jsx(ChartLegendExamples, { interactive: true }),
1948
+ code: keyComponentExampleCode("<ChartLegendExamples interactive />")
1949
+ }
1950
+ ]
1951
+ };
1952
+ const chart_legend_dotEntry = {
1953
+ id: "chart-legend-dot",
1954
+ title: "ChartLegendDot",
1955
+ importPath: "@open-mercato/ui/primitives/chart-legend",
1956
+ figmaNodeId: "2942:9880",
1957
+ descriptionKey: "design_system.entries.chart-legend-dot.description",
1958
+ variants: [
1959
+ {
1960
+ id: "size-16",
1961
+ title: "size-16",
1962
+ render: () => /* @__PURE__ */ jsx(ChartLegendDotExamples, {}),
1963
+ code: keyComponentExampleCode("<ChartLegendDotExamples />")
1964
+ },
1965
+ {
1966
+ id: "size-20",
1967
+ title: "size-20",
1968
+ render: () => /* @__PURE__ */ jsx(ChartLegendDotExamples, { size: 20 }),
1969
+ code: keyComponentExampleCode("<ChartLegendDotExamples size={20} />")
1970
+ }
1971
+ ]
1972
+ };
770
1973
  const entries = [
1974
+ content_labelEntry,
1975
+ content_cardEntry,
1976
+ key_iconEntry,
1977
+ payment_iconEntry,
1978
+ chart_legendEntry,
1979
+ chart_legend_dotEntry,
771
1980
  badgeEntry,
772
1981
  statusBadgeEntry,
773
1982
  tagEntry,