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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/build.mjs +11 -0
  3. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +23 -0
  4. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  5. package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
  6. package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
  7. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -1
  8. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  9. package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -2
  10. package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
  11. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -1
  12. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  13. package/dist/modules/customers/lib/detailHelpers.js +4 -0
  14. package/dist/modules/customers/lib/detailHelpers.js.map +2 -2
  15. package/dist/modules/customers/lib/todoCompatibility.js +5 -0
  16. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  17. package/dist/modules/design_system/backend/design-system/page.meta.js +3 -2
  18. package/dist/modules/design_system/backend/design-system/page.meta.js.map +2 -2
  19. package/dist/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  20. package/dist/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  21. package/dist/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  22. package/dist/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  23. package/dist/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  24. package/dist/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  25. package/dist/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  26. package/dist/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  27. package/dist/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  28. package/dist/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  29. package/dist/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  30. package/dist/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  31. package/dist/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  32. package/dist/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  33. package/dist/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  34. package/dist/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  35. package/dist/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  36. package/dist/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  37. package/dist/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  38. package/dist/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  39. package/dist/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  40. package/dist/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  41. package/dist/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  42. package/dist/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  43. package/dist/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  44. package/dist/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  45. package/dist/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  46. package/dist/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  47. package/dist/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  48. package/dist/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  49. package/dist/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  50. package/dist/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  51. package/dist/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  52. package/dist/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  53. package/dist/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  54. package/dist/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  55. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js +67 -0
  56. package/dist/modules/design_system/gallery/assets/cryptocurrency-artwork.js.map +7 -0
  57. package/dist/modules/design_system/gallery/assets/github-logo.png +0 -0
  58. package/dist/modules/design_system/gallery/assets/images.d.js +1 -0
  59. package/dist/modules/design_system/gallery/assets/images.d.js.map +7 -0
  60. package/dist/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  61. package/dist/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  62. package/dist/modules/design_system/gallery/assets/marketing-artwork.js +83 -0
  63. package/dist/modules/design_system/gallery/assets/marketing-artwork.js.map +7 -0
  64. package/dist/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  65. package/dist/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  66. package/dist/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  67. package/dist/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  68. package/dist/modules/design_system/gallery/assets/select-google.png +0 -0
  69. package/dist/modules/design_system/gallery/assets/select-poland.png +0 -0
  70. package/dist/modules/design_system/gallery/assets/selection-artwork.js +5 -0
  71. package/dist/modules/design_system/gallery/assets/selection-artwork.js.map +7 -0
  72. package/dist/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  73. package/dist/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  74. package/dist/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  75. package/dist/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  76. package/dist/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  77. package/dist/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  78. package/dist/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  79. package/dist/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  80. package/dist/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  81. package/dist/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  82. package/dist/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  83. package/dist/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  84. package/dist/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  85. package/dist/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  86. package/dist/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  87. package/dist/modules/design_system/gallery/assets/upload-images.js +8 -0
  88. package/dist/modules/design_system/gallery/assets/upload-images.js.map +7 -0
  89. package/dist/modules/design_system/gallery/components/BrandStylePreview.js +74 -0
  90. package/dist/modules/design_system/gallery/components/BrandStylePreview.js.map +7 -0
  91. package/dist/modules/design_system/gallery/components/CodeSnippet.js +31 -31
  92. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +2 -2
  93. package/dist/modules/design_system/gallery/components/ColorPlayground.js +408 -0
  94. package/dist/modules/design_system/gallery/components/ColorPlayground.js.map +7 -0
  95. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js +166 -0
  96. package/dist/modules/design_system/gallery/components/ColorStudioCompositions.js.map +7 -0
  97. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js +182 -0
  98. package/dist/modules/design_system/gallery/components/ColorStudioSpecimen.js.map +7 -0
  99. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js +80 -0
  100. package/dist/modules/design_system/gallery/components/CompactEntrySpecimen.js.map +7 -0
  101. package/dist/modules/design_system/gallery/components/ComponentIndex.js +42 -0
  102. package/dist/modules/design_system/gallery/components/ComponentIndex.js.map +7 -0
  103. package/dist/modules/design_system/gallery/components/DesignSystemHome.js +69 -0
  104. package/dist/modules/design_system/gallery/components/DesignSystemHome.js.map +7 -0
  105. package/dist/modules/design_system/gallery/components/EntryCard.js +47 -41
  106. package/dist/modules/design_system/gallery/components/EntryCard.js.map +2 -2
  107. package/dist/modules/design_system/gallery/components/EntryHeader.js +68 -0
  108. package/dist/modules/design_system/gallery/components/EntryHeader.js.map +7 -0
  109. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js +19 -0
  110. package/dist/modules/design_system/gallery/components/FamilyEntryPreview.js.map +7 -0
  111. package/dist/modules/design_system/gallery/components/FoundationGuide.js +46 -0
  112. package/dist/modules/design_system/gallery/components/FoundationGuide.js.map +7 -0
  113. package/dist/modules/design_system/gallery/components/GalleryLink.js +21 -0
  114. package/dist/modules/design_system/gallery/components/GalleryLink.js.map +7 -0
  115. package/dist/modules/design_system/gallery/components/GalleryNavigation.js +82 -0
  116. package/dist/modules/design_system/gallery/components/GalleryNavigation.js.map +7 -0
  117. package/dist/modules/design_system/gallery/components/GalleryShell.js +147 -67
  118. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +3 -3
  119. package/dist/modules/design_system/gallery/components/IconsBrowser.js +33 -0
  120. package/dist/modules/design_system/gallery/components/IconsBrowser.js.map +7 -0
  121. package/dist/modules/design_system/gallery/components/SourceLibrary.js +93 -0
  122. package/dist/modules/design_system/gallery/components/SourceLibrary.js.map +7 -0
  123. package/dist/modules/design_system/gallery/components/StyleAgents.js +139 -0
  124. package/dist/modules/design_system/gallery/components/StyleAgents.js.map +7 -0
  125. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js +101 -0
  126. package/dist/modules/design_system/gallery/components/ThemeTokenReference.js.map +7 -0
  127. package/dist/modules/design_system/gallery/components/VariantPreview.js +2 -2
  128. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +2 -2
  129. package/dist/modules/design_system/gallery/components/colorPreview.js +58 -0
  130. package/dist/modules/design_system/gallery/components/colorPreview.js.map +7 -0
  131. package/dist/modules/design_system/gallery/components/colorStudio.js +218 -0
  132. package/dist/modules/design_system/gallery/components/colorStudio.js.map +7 -0
  133. package/dist/modules/design_system/gallery/components/styleAgentBranding.js +46 -0
  134. package/dist/modules/design_system/gallery/components/styleAgentBranding.js.map +7 -0
  135. package/dist/modules/design_system/gallery/components/themeTokens.js +32 -0
  136. package/dist/modules/design_system/gallery/components/themeTokens.js.map +7 -0
  137. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js +194 -0
  138. package/dist/modules/design_system/gallery/demos/ai-product-code.generated.js.map +7 -0
  139. package/dist/modules/design_system/gallery/demos/ai-product.js +423 -0
  140. package/dist/modules/design_system/gallery/demos/ai-product.js.map +7 -0
  141. package/dist/modules/design_system/gallery/demos/buttons.js +289 -0
  142. package/dist/modules/design_system/gallery/demos/buttons.js.map +7 -0
  143. package/dist/modules/design_system/gallery/demos/cryptocurrency.js +1708 -0
  144. package/dist/modules/design_system/gallery/demos/cryptocurrency.js.map +7 -0
  145. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js +92 -0
  146. package/dist/modules/design_system/gallery/demos/feeds-code.generated.js.map +7 -0
  147. package/dist/modules/design_system/gallery/demos/feeds.js +148 -0
  148. package/dist/modules/design_system/gallery/demos/feeds.js.map +7 -0
  149. package/dist/modules/design_system/gallery/demos/file-upload.js +72 -0
  150. package/dist/modules/design_system/gallery/demos/file-upload.js.map +7 -0
  151. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js +4875 -0
  152. package/dist/modules/design_system/gallery/demos/foundation-reference-data.js.map +7 -0
  153. package/dist/modules/design_system/gallery/demos/foundation-references.js +188 -0
  154. package/dist/modules/design_system/gallery/demos/foundation-references.js.map +7 -0
  155. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js +6 -0
  156. package/dist/modules/design_system/gallery/demos/key-components-code.generated.js.map +7 -0
  157. package/dist/modules/design_system/gallery/demos/key-components.js +127 -0
  158. package/dist/modules/design_system/gallery/demos/key-components.js.map +7 -0
  159. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js +98 -0
  160. package/dist/modules/design_system/gallery/demos/marketing-controls-code.generated.js.map +7 -0
  161. package/dist/modules/design_system/gallery/demos/marketing-controls.js +134 -0
  162. package/dist/modules/design_system/gallery/demos/marketing-controls.js.map +7 -0
  163. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js +195 -0
  164. package/dist/modules/design_system/gallery/demos/marketing-widgets-code.generated.js.map +7 -0
  165. package/dist/modules/design_system/gallery/demos/marketing-widgets.js +586 -0
  166. package/dist/modules/design_system/gallery/demos/marketing-widgets.js.map +7 -0
  167. package/dist/modules/design_system/gallery/demos/menu-fixtures.js +40 -0
  168. package/dist/modules/design_system/gallery/demos/menu-fixtures.js.map +7 -0
  169. package/dist/modules/design_system/gallery/demos/menu-sources.js +295 -0
  170. package/dist/modules/design_system/gallery/demos/menu-sources.js.map +7 -0
  171. package/dist/modules/design_system/gallery/demos/menus.js +150 -0
  172. package/dist/modules/design_system/gallery/demos/menus.js.map +7 -0
  173. package/dist/modules/design_system/gallery/demos/rating-reviews.js +53 -0
  174. package/dist/modules/design_system/gallery/demos/rating-reviews.js.map +7 -0
  175. package/dist/modules/design_system/gallery/demos/registered-icons.js +104 -0
  176. package/dist/modules/design_system/gallery/demos/registered-icons.js.map +7 -0
  177. package/dist/modules/design_system/gallery/demos/selection-cards.js +99 -0
  178. package/dist/modules/design_system/gallery/demos/selection-cards.js.map +7 -0
  179. package/dist/modules/design_system/gallery/demos/shell-code.generated.js +189 -0
  180. package/dist/modules/design_system/gallery/demos/shell-code.generated.js.map +7 -0
  181. package/dist/modules/design_system/gallery/demos/shell.js +330 -0
  182. package/dist/modules/design_system/gallery/demos/shell.js.map +7 -0
  183. package/dist/modules/design_system/gallery/demos/source-artwork.js +120 -0
  184. package/dist/modules/design_system/gallery/demos/source-artwork.js.map +7 -0
  185. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js +125 -0
  186. package/dist/modules/design_system/gallery/demos/source-filters-code.generated.js.map +7 -0
  187. package/dist/modules/design_system/gallery/demos/source-filters.js +185 -0
  188. package/dist/modules/design_system/gallery/demos/source-filters.js.map +7 -0
  189. package/dist/modules/design_system/gallery/demos/source-icons.js +69 -0
  190. package/dist/modules/design_system/gallery/demos/source-icons.js.map +7 -0
  191. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js +150 -0
  192. package/dist/modules/design_system/gallery/demos/table-cells-code.generated.js.map +7 -0
  193. package/dist/modules/design_system/gallery/demos/table-cells.js +181 -0
  194. package/dist/modules/design_system/gallery/demos/table-cells.js.map +7 -0
  195. package/dist/modules/design_system/gallery/demos/text-inputs.js +113 -0
  196. package/dist/modules/design_system/gallery/demos/text-inputs.js.map +7 -0
  197. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js +41 -0
  198. package/dist/modules/design_system/gallery/demos/time-picker-code.generated.js.map +7 -0
  199. package/dist/modules/design_system/gallery/demos/time-picker.js +41 -0
  200. package/dist/modules/design_system/gallery/demos/time-picker.js.map +7 -0
  201. package/dist/modules/design_system/gallery/entries/banners.js +123 -60
  202. package/dist/modules/design_system/gallery/entries/banners.js.map +2 -2
  203. package/dist/modules/design_system/gallery/entries/buttons-snippets.js +433 -0
  204. package/dist/modules/design_system/gallery/entries/buttons-snippets.js.map +7 -0
  205. package/dist/modules/design_system/gallery/entries/buttons.js +127 -148
  206. package/dist/modules/design_system/gallery/entries/buttons.js.map +2 -2
  207. package/dist/modules/design_system/gallery/entries/charts.js +532 -186
  208. package/dist/modules/design_system/gallery/entries/charts.js.map +2 -2
  209. package/dist/modules/design_system/gallery/entries/dates.js +191 -3
  210. package/dist/modules/design_system/gallery/entries/dates.js.map +2 -2
  211. package/dist/modules/design_system/gallery/entries/detail.js +118 -77
  212. package/dist/modules/design_system/gallery/entries/detail.js.map +2 -2
  213. package/dist/modules/design_system/gallery/entries/display.js +1449 -240
  214. package/dist/modules/design_system/gallery/entries/display.js.map +2 -2
  215. package/dist/modules/design_system/gallery/entries/feedback.js +1058 -132
  216. package/dist/modules/design_system/gallery/entries/feedback.js.map +2 -2
  217. package/dist/modules/design_system/gallery/entries/filters.js +231 -103
  218. package/dist/modules/design_system/gallery/entries/filters.js.map +2 -2
  219. package/dist/modules/design_system/gallery/entries/foundations.js +368 -57
  220. package/dist/modules/design_system/gallery/entries/foundations.js.map +2 -2
  221. package/dist/modules/design_system/gallery/entries/icons.js +29 -91
  222. package/dist/modules/design_system/gallery/entries/icons.js.map +2 -2
  223. package/dist/modules/design_system/gallery/entries/inputs-snippets.js +154 -0
  224. package/dist/modules/design_system/gallery/entries/inputs-snippets.js.map +7 -0
  225. package/dist/modules/design_system/gallery/entries/inputs.js +2043 -306
  226. package/dist/modules/design_system/gallery/entries/inputs.js.map +2 -2
  227. package/dist/modules/design_system/gallery/entries/library.js +20 -0
  228. package/dist/modules/design_system/gallery/entries/library.js.map +7 -0
  229. package/dist/modules/design_system/gallery/entries/messages.js +121 -103
  230. package/dist/modules/design_system/gallery/entries/messages.js.map +2 -2
  231. package/dist/modules/design_system/gallery/entries/navigation.js +676 -103
  232. package/dist/modules/design_system/gallery/entries/navigation.js.map +2 -2
  233. package/dist/modules/design_system/gallery/entries/notifications.js +131 -78
  234. package/dist/modules/design_system/gallery/entries/notifications.js.map +2 -2
  235. package/dist/modules/design_system/gallery/entries/overlays.js +611 -203
  236. package/dist/modules/design_system/gallery/entries/overlays.js.map +2 -2
  237. package/dist/modules/design_system/gallery/entries/scaffolding.js +1175 -120
  238. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +2 -2
  239. package/dist/modules/design_system/gallery/entries/schedule.js +79 -54
  240. package/dist/modules/design_system/gallery/entries/schedule.js.map +2 -2
  241. package/dist/modules/design_system/gallery/presentation.js +108 -0
  242. package/dist/modules/design_system/gallery/presentation.js.map +7 -0
  243. package/dist/modules/design_system/gallery/registry.js +8 -5
  244. package/dist/modules/design_system/gallery/registry.js.map +2 -2
  245. package/dist/modules/design_system/gallery/source-library.generated.js +5 -0
  246. package/dist/modules/design_system/gallery/source-library.generated.js.map +7 -0
  247. package/dist/modules/design_system/i18n/de.json +7167 -0
  248. package/dist/modules/design_system/i18n/en.json +7167 -0
  249. package/dist/modules/design_system/i18n/es.json +7167 -0
  250. package/dist/modules/design_system/i18n/ko.json +7167 -0
  251. package/dist/modules/design_system/i18n/pl.json +7167 -0
  252. package/dist/modules/push_notifications/lib/queue.js +1 -31
  253. package/dist/modules/push_notifications/lib/queue.js.map +2 -2
  254. package/jest.config.cjs +1 -0
  255. package/jest.mocks/image.js +1 -0
  256. package/package.json +8 -9
  257. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +50 -0
  258. package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
  259. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +2 -1
  260. package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -2
  261. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +2 -1
  262. package/src/modules/customers/lib/detailHelpers.ts +4 -0
  263. package/src/modules/customers/lib/todoCompatibility.ts +10 -0
  264. package/src/modules/design_system/backend/design-system/page.meta.ts +3 -2
  265. package/src/modules/design_system/gallery/assets/README.md +30 -0
  266. package/src/modules/design_system/gallery/assets/ai-prompt-image.png +0 -0
  267. package/src/modules/design_system/gallery/assets/avatar-illustration.png +0 -0
  268. package/src/modules/design_system/gallery/assets/avatar-memoji.png +0 -0
  269. package/src/modules/design_system/gallery/assets/avatar-photo.png +0 -0
  270. package/src/modules/design_system/gallery/assets/blog-photo-0.png +0 -0
  271. package/src/modules/design_system/gallery/assets/contact-support-portrait.png +0 -0
  272. package/src/modules/design_system/gallery/assets/crypto-ada.png +0 -0
  273. package/src/modules/design_system/gallery/assets/crypto-avax.png +0 -0
  274. package/src/modules/design_system/gallery/assets/crypto-bnb.png +0 -0
  275. package/src/modules/design_system/gallery/assets/crypto-brand.png +0 -0
  276. package/src/modules/design_system/gallery/assets/crypto-btc.png +0 -0
  277. package/src/modules/design_system/gallery/assets/crypto-clock.svg +3 -0
  278. package/src/modules/design_system/gallery/assets/crypto-crown.svg +3 -0
  279. package/src/modules/design_system/gallery/assets/crypto-dot.png +0 -0
  280. package/src/modules/design_system/gallery/assets/crypto-eth.png +0 -0
  281. package/src/modules/design_system/gallery/assets/crypto-hbar.png +0 -0
  282. package/src/modules/design_system/gallery/assets/crypto-history.svg +3 -0
  283. package/src/modules/design_system/gallery/assets/crypto-link.svg +3 -0
  284. package/src/modules/design_system/gallery/assets/crypto-menu.svg +3 -0
  285. package/src/modules/design_system/gallery/assets/crypto-metamask.png +0 -0
  286. package/src/modules/design_system/gallery/assets/crypto-more.svg +3 -0
  287. package/src/modules/design_system/gallery/assets/crypto-phantom.png +0 -0
  288. package/src/modules/design_system/gallery/assets/crypto-rewards.svg +3 -0
  289. package/src/modules/design_system/gallery/assets/crypto-sad-face.png +0 -0
  290. package/src/modules/design_system/gallery/assets/crypto-sol.png +0 -0
  291. package/src/modules/design_system/gallery/assets/crypto-star.svg +3 -0
  292. package/src/modules/design_system/gallery/assets/crypto-status-cancelled.svg +3 -0
  293. package/src/modules/design_system/gallery/assets/crypto-status-pending.svg +3 -0
  294. package/src/modules/design_system/gallery/assets/crypto-status-success.svg +3 -0
  295. package/src/modules/design_system/gallery/assets/crypto-status-warning.svg +3 -0
  296. package/src/modules/design_system/gallery/assets/crypto-trx.png +0 -0
  297. package/src/modules/design_system/gallery/assets/crypto-usdc.png +0 -0
  298. package/src/modules/design_system/gallery/assets/crypto-usdt.png +0 -0
  299. package/src/modules/design_system/gallery/assets/crypto-walletconnect.png +0 -0
  300. package/src/modules/design_system/gallery/assets/crypto-wei.png +0 -0
  301. package/src/modules/design_system/gallery/assets/crypto-xrp.png +0 -0
  302. package/src/modules/design_system/gallery/assets/cryptocurrency-artwork.ts +63 -0
  303. package/src/modules/design_system/gallery/assets/github-logo.png +0 -0
  304. package/src/modules/design_system/gallery/assets/images.d.ts +9 -0
  305. package/src/modules/design_system/gallery/assets/input-european-union.svg +18 -0
  306. package/src/modules/design_system/gallery/assets/landing-teams-01.png +0 -0
  307. package/src/modules/design_system/gallery/assets/marketing-artwork.ts +79 -0
  308. package/src/modules/design_system/gallery/assets/menu-apex.svg +18 -0
  309. package/src/modules/design_system/gallery/assets/menu-mastercard.svg +7 -0
  310. package/src/modules/design_system/gallery/assets/menu-spotify.svg +4 -0
  311. package/src/modules/design_system/gallery/assets/menu-united-states.svg +16 -0
  312. package/src/modules/design_system/gallery/assets/select-google.png +0 -0
  313. package/src/modules/design_system/gallery/assets/select-poland.png +0 -0
  314. package/src/modules/design_system/gallery/assets/selection-artwork.ts +1 -0
  315. package/src/modules/design_system/gallery/assets/social-apple-filled.svg +4 -0
  316. package/src/modules/design_system/gallery/assets/social-apple-stroke.svg +4 -0
  317. package/src/modules/design_system/gallery/assets/social-dropbox-filled.svg +5 -0
  318. package/src/modules/design_system/gallery/assets/social-dropbox-stroke.svg +5 -0
  319. package/src/modules/design_system/gallery/assets/social-facebook-filled.svg +4 -0
  320. package/src/modules/design_system/gallery/assets/social-facebook-stroke.svg +10 -0
  321. package/src/modules/design_system/gallery/assets/social-github-filled.svg +4 -0
  322. package/src/modules/design_system/gallery/assets/social-github-stroke.svg +4 -0
  323. package/src/modules/design_system/gallery/assets/social-google-filled.svg +7 -0
  324. package/src/modules/design_system/gallery/assets/social-google-stroke.svg +7 -0
  325. package/src/modules/design_system/gallery/assets/social-linkedin-filled.svg +4 -0
  326. package/src/modules/design_system/gallery/assets/social-linkedin-stroke.svg +4 -0
  327. package/src/modules/design_system/gallery/assets/social-x-filled.svg +4 -0
  328. package/src/modules/design_system/gallery/assets/social-x-stroke.svg +4 -0
  329. package/src/modules/design_system/gallery/assets/style-studio-product.png +0 -0
  330. package/src/modules/design_system/gallery/assets/upload-images.ts +5 -0
  331. package/src/modules/design_system/gallery/components/BrandStylePreview.tsx +94 -0
  332. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +34 -34
  333. package/src/modules/design_system/gallery/components/ColorPlayground.tsx +324 -0
  334. package/src/modules/design_system/gallery/components/ColorStudioCompositions.tsx +96 -0
  335. package/src/modules/design_system/gallery/components/ColorStudioSpecimen.tsx +164 -0
  336. package/src/modules/design_system/gallery/components/CompactEntrySpecimen.tsx +65 -0
  337. package/src/modules/design_system/gallery/components/ComponentIndex.tsx +47 -0
  338. package/src/modules/design_system/gallery/components/DesignSystemHome.tsx +66 -0
  339. package/src/modules/design_system/gallery/components/EntryCard.tsx +52 -37
  340. package/src/modules/design_system/gallery/components/EntryHeader.tsx +80 -0
  341. package/src/modules/design_system/gallery/components/FamilyEntryPreview.tsx +22 -0
  342. package/src/modules/design_system/gallery/components/FoundationGuide.tsx +43 -0
  343. package/src/modules/design_system/gallery/components/GalleryLink.tsx +19 -0
  344. package/src/modules/design_system/gallery/components/GalleryNavigation.tsx +86 -0
  345. package/src/modules/design_system/gallery/components/GalleryShell.tsx +149 -63
  346. package/src/modules/design_system/gallery/components/IconsBrowser.tsx +40 -0
  347. package/src/modules/design_system/gallery/components/SourceLibrary.tsx +90 -0
  348. package/src/modules/design_system/gallery/components/StyleAgents.tsx +115 -0
  349. package/src/modules/design_system/gallery/components/ThemeTokenReference.tsx +76 -0
  350. package/src/modules/design_system/gallery/components/VariantPreview.tsx +2 -2
  351. package/src/modules/design_system/gallery/components/colorPreview.ts +63 -0
  352. package/src/modules/design_system/gallery/components/colorStudio.ts +260 -0
  353. package/src/modules/design_system/gallery/components/styleAgentBranding.ts +42 -0
  354. package/src/modules/design_system/gallery/components/themeTokens.ts +26 -0
  355. package/src/modules/design_system/gallery/demos/ai-product-code.generated.ts +3 -0
  356. package/src/modules/design_system/gallery/demos/ai-product.tsx +188 -0
  357. package/src/modules/design_system/gallery/demos/buttons.tsx +331 -0
  358. package/src/modules/design_system/gallery/demos/cryptocurrency.tsx +1943 -0
  359. package/src/modules/design_system/gallery/demos/feeds-code.generated.ts +4 -0
  360. package/src/modules/design_system/gallery/demos/feeds.tsx +82 -0
  361. package/src/modules/design_system/gallery/demos/file-upload.tsx +61 -0
  362. package/src/modules/design_system/gallery/demos/foundation-reference-data.ts +4872 -0
  363. package/src/modules/design_system/gallery/demos/foundation-references.tsx +140 -0
  364. package/src/modules/design_system/gallery/demos/key-components-code.generated.ts +3 -0
  365. package/src/modules/design_system/gallery/demos/key-components.tsx +106 -0
  366. package/src/modules/design_system/gallery/demos/marketing-controls-code.generated.ts +3 -0
  367. package/src/modules/design_system/gallery/demos/marketing-controls.tsx +92 -0
  368. package/src/modules/design_system/gallery/demos/marketing-widgets-code.generated.ts +3 -0
  369. package/src/modules/design_system/gallery/demos/marketing-widgets.tsx +189 -0
  370. package/src/modules/design_system/gallery/demos/menu-fixtures.tsx +48 -0
  371. package/src/modules/design_system/gallery/demos/menu-sources.ts +5 -0
  372. package/src/modules/design_system/gallery/demos/menus.tsx +122 -0
  373. package/src/modules/design_system/gallery/demos/rating-reviews.tsx +44 -0
  374. package/src/modules/design_system/gallery/demos/registered-icons.tsx +117 -0
  375. package/src/modules/design_system/gallery/demos/selection-cards.tsx +97 -0
  376. package/src/modules/design_system/gallery/demos/shell-code.generated.ts +3 -0
  377. package/src/modules/design_system/gallery/demos/shell.tsx +183 -0
  378. package/src/modules/design_system/gallery/demos/source-artwork.tsx +88 -0
  379. package/src/modules/design_system/gallery/demos/source-filters-code.generated.ts +3 -0
  380. package/src/modules/design_system/gallery/demos/source-filters.tsx +119 -0
  381. package/src/modules/design_system/gallery/demos/source-icons.tsx +62 -0
  382. package/src/modules/design_system/gallery/demos/table-cells-code.generated.ts +3 -0
  383. package/src/modules/design_system/gallery/demos/table-cells.tsx +144 -0
  384. package/src/modules/design_system/gallery/demos/text-inputs.tsx +90 -0
  385. package/src/modules/design_system/gallery/demos/time-picker-code.generated.ts +5 -0
  386. package/src/modules/design_system/gallery/demos/time-picker.tsx +31 -0
  387. package/src/modules/design_system/gallery/entries/banners.tsx +143 -94
  388. package/src/modules/design_system/gallery/entries/buttons-snippets.ts +432 -0
  389. package/src/modules/design_system/gallery/entries/buttons.tsx +125 -196
  390. package/src/modules/design_system/gallery/entries/charts.tsx +545 -233
  391. package/src/modules/design_system/gallery/entries/dates.tsx +171 -3
  392. package/src/modules/design_system/gallery/entries/detail.tsx +142 -115
  393. package/src/modules/design_system/gallery/entries/display.tsx +1691 -319
  394. package/src/modules/design_system/gallery/entries/feedback.tsx +1082 -169
  395. package/src/modules/design_system/gallery/entries/filters.tsx +238 -143
  396. package/src/modules/design_system/gallery/entries/foundations.tsx +404 -61
  397. package/src/modules/design_system/gallery/entries/icons.tsx +31 -117
  398. package/src/modules/design_system/gallery/entries/inputs-snippets.ts +156 -0
  399. package/src/modules/design_system/gallery/entries/inputs.tsx +2146 -503
  400. package/src/modules/design_system/gallery/entries/library.tsx +16 -0
  401. package/src/modules/design_system/gallery/entries/messages.tsx +114 -106
  402. package/src/modules/design_system/gallery/entries/navigation.tsx +782 -192
  403. package/src/modules/design_system/gallery/entries/notifications.tsx +145 -120
  404. package/src/modules/design_system/gallery/entries/overlays.tsx +696 -280
  405. package/src/modules/design_system/gallery/entries/scaffolding.tsx +1192 -158
  406. package/src/modules/design_system/gallery/entries/schedule.tsx +72 -58
  407. package/src/modules/design_system/gallery/presentation.ts +106 -0
  408. package/src/modules/design_system/gallery/registry.ts +8 -6
  409. package/src/modules/design_system/gallery/source-library.generated.ts +2 -0
  410. package/src/modules/design_system/i18n/de.json +7112 -3
  411. package/src/modules/design_system/i18n/en.json +7112 -3
  412. package/src/modules/design_system/i18n/es.json +7112 -3
  413. package/src/modules/design_system/i18n/ko.json +7112 -3
  414. package/src/modules/design_system/i18n/pl.json +7112 -3
  415. package/src/modules/push_notifications/AGENTS.md +9 -5
  416. package/src/modules/push_notifications/lib/queue.ts +15 -44
@@ -0,0 +1,150 @@
1
+ const source = `import * as React from 'react'
2
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
3
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
4
+ import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
5
+ import { Badge } from '@open-mercato/ui/primitives/badge'
6
+ import { Button } from '@open-mercato/ui/primitives/button'
7
+ import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
8
+ import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
9
+ import { Progress } from '@open-mercato/ui/primitives/progress'
10
+ import { Rating } from '@open-mercato/ui/primitives/rating'
11
+ import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
12
+ import { Switch } from '@open-mercato/ui/primitives/switch'
13
+ import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'
14
+
15
+ const examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']
16
+
17
+ export function TableHeaderExamples() {
18
+ const t = useT()
19
+ const [selected, setSelected] = React.useState(false)
20
+ const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
21
+ const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
22
+ return <div className="w-full space-y-3 overflow-x-auto">
23
+ <Table className="w-[576px] table-fixed">
24
+ <TableCaption className="sr-only">{t('design_system.gallery.samples.table.caption')}</TableCaption>
25
+ <TableHeader><TableRow>
26
+ <TableHead scope="col" aria-sort={order} className="h-9 w-64 bg-muted px-3 py-0">
27
+ <div className="flex items-center gap-2.5">
28
+ <Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />
29
+ <Button size="sm" variant="ghost" className="h-auto gap-0.5 p-0 font-normal" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>
30
+ {t('design_system.gallery.samples.table.component')}<SortIcon className="size-5" aria-hidden="true" />
31
+ </Button>
32
+ </div>
33
+ </TableHead>
34
+ <TableHead scope="col" className="h-9 w-64 bg-muted px-3 py-0">
35
+ <div className="flex items-center gap-2.5">
36
+ <Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />
37
+ <Button disabled size="sm" variant="ghost" className="h-auto gap-0.5 p-0 font-normal">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className="size-5" aria-hidden="true" /></Button>
38
+ </div>
39
+ </TableHead>
40
+ <TableHead scope="col" className="h-9 w-16 bg-muted px-3 py-0"><span className="sr-only">{t('design_system.gallery.samples.table.empty')}</span></TableHead>
41
+ </TableRow></TableHeader>
42
+ <TableBody><TableRow data-state={selected ? 'selected' : undefined}>
43
+ <TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>
44
+ </TableRow></TableBody>
45
+ </Table>
46
+ <p role="status" className="text-sm text-muted-foreground">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>
47
+ </div>
48
+ }
49
+
50
+ export function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {
51
+ const t = useT()
52
+ const [selected, setSelected] = React.useState(['Leading'])
53
+ const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
54
+ const [rating, setRating] = React.useState(3)
55
+ const [notice, setNotice] = React.useState('')
56
+ const typeLabel = (type: string) => t(\`design_system.gallery.samples.table.types.\${type}\`, type)
57
+ const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))
58
+ const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
59
+ const label = t('design_system.gallery.samples.table.label')
60
+ function cell(type: string) {
61
+ switch (type) {
62
+ case 'Leading': return <div className="flex items-center gap-3"><Avatar label="Wei Chen" size={rowHeight === 48 ? 32 : 40} /><div className="space-y-0.5"><p className="text-sm font-medium leading-5">Wei Chen</p>{rowHeight === 64 ? <p className="text-xs leading-4 text-muted-foreground">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>
63
+ case 'Regular': return <span>{label}</span>
64
+ case 'Passive': return <span className="text-muted-foreground">{label}</span>
65
+ case 'Empty': return <span className="sr-only">{t('design_system.gallery.samples.table.empty')}</span>
66
+ case 'Button': return <Button size="sm" variant="outline" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>
67
+ case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant="outline" size="icon" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>
68
+ case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />
69
+ case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />
70
+ case 'Progress': return <Progress value={65} className="w-40" aria-label={t('design_system.gallery.examples.navigation.progress')} />
71
+ case 'StatusBadge': return <StatusBadge variant="success" appearance="light" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>
72
+ case 'BadgeGroup': return <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div>
73
+ case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack>
74
+ default: return null
75
+ }
76
+ }
77
+ return <div className="w-full min-w-0 space-y-3">
78
+ <div className="w-full overflow-x-auto rounded-lg border border-border">
79
+ <Table className="min-w-[600px]">
80
+ <TableCaption className="sr-only">{t('design_system.gallery.samples.table.caption')}</TableCaption>
81
+ <TableHeader><TableRow>
82
+ <TableHead className="h-9 w-12 py-1"><span className="sr-only">{t('design_system.gallery.samples.table.selection')}</span></TableHead>
83
+ <TableHead aria-sort={order} className="h-9 py-1"><Button variant="ghost" size="sm" className="h-auto gap-2 p-0" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden="true" className="size-5" /></Button></TableHead>
84
+ <TableHead className="h-9 py-1">{t('design_system.gallery.samples.table.preview')}</TableHead>
85
+ </TableRow></TableHeader>
86
+ <TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
87
+ <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>
88
+ <TableCell className="font-medium">{typeLabel(type)}</TableCell>
89
+ <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>
90
+ </TableRow>)}</TableBody>
91
+ </Table>
92
+ </div>
93
+ <p role="status" className="min-h-5 text-sm text-muted-foreground">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>
94
+ </div>
95
+ }
96
+
97
+ export function tableCellExampleCode(rowHeight: 48 | 64) {
98
+ return \`import * as React from 'react'
99
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
100
+ import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
101
+ import { Badge } from '@open-mercato/ui/primitives/badge'
102
+ import { Button } from '@open-mercato/ui/primitives/button'
103
+ import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
104
+ import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
105
+ import { Progress } from '@open-mercato/ui/primitives/progress'
106
+ import { Rating } from '@open-mercato/ui/primitives/rating'
107
+ import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
108
+ import { Switch } from '@open-mercato/ui/primitives/switch'
109
+ import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'
110
+
111
+ function Example() {
112
+ const [rating, setRating] = React.useState(3)
113
+ const [selected, setSelected] = React.useState<string[]>(['Leading'])
114
+ const [action, setAction] = React.useState('')
115
+ const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
116
+ const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
117
+ const cells = [
118
+ { name: 'Leading', content: <div className="flex items-center gap-3"><Avatar size={\${rowHeight === 48 ? 32 : 40}} label="Wei Chen" /><div><p className="font-medium">Wei Chen</p>\${rowHeight === 64 ? '<p className="text-xs text-muted-foreground">Account manager</p>' : ''}</div></div> },
119
+ { name: 'Regular', content: <span>Label</span> },
120
+ { name: 'Passive', content: <span className="text-muted-foreground">Label</span> },
121
+ { name: 'Empty', content: null },
122
+ { name: 'Button', content: <Button size="sm" variant="outline" onClick={() => setAction('Opened')}>Open</Button> },
123
+ { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label="Related actions"><Button variant="outline" size="icon" aria-label="Previous" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label="Next" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },
124
+ { name: 'Switch', content: <Switch defaultChecked aria-label="Enabled" /> },
125
+ { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label="Rating" /> },
126
+ { name: 'Progress', content: <Progress value={65} className="w-40" aria-label="Progress" /> },
127
+ { name: 'StatusBadge', content: <StatusBadge variant="success" appearance="light" dot>Ready</StatusBadge> },
128
+ { name: 'BadgeGroup', content: <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div> },
129
+ { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack> },
130
+ ]
131
+ const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))
132
+ return <div className="w-full overflow-x-auto">
133
+ <Table className="min-w-[600px]">
134
+ <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size="sm" variant="ghost" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>
135
+ <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
136
+ <TableCell className="\${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}"><Checkbox checked={selected.includes(cell.name)} aria-label={\\\`Select \\\${cell.name}\\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>
137
+ <TableCell className="font-medium">{cell.name}</TableCell>
138
+ <TableCell className="\${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}">{cell.content}</TableCell>
139
+ </TableRow>)}</TableBody>
140
+ </Table>
141
+ <p role="status">{action || selected.length + ' rows selected'}</p>
142
+ </div>
143
+ }\`
144
+ }
145
+ `;
146
+ const tableHeaderExampleCode = source + "\n<TableHeaderExamples />\n";
147
+ export {
148
+ tableHeaderExampleCode
149
+ };
150
+ //# sourceMappingURL=table-cells-code.generated.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/demos/table-cells-code.generated.ts"],
4
+ "sourcesContent": ["// Generated by yarn storybook:generate from table-cells.tsx.\nconst source = \"import * as React from 'react'\\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\\nimport { Progress } from '@open-mercato/ui/primitives/progress'\\nimport { Rating } from '@open-mercato/ui/primitives/rating'\\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\\nimport { Switch } from '@open-mercato/ui/primitives/switch'\\nimport { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'\\n\\nconst examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']\\n\\nexport function TableHeaderExamples() {\\n const t = useT()\\n const [selected, setSelected] = React.useState(false)\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n return <div className=\\\"w-full space-y-3 overflow-x-auto\\\">\\n <Table className=\\\"w-[576px] table-fixed\\\">\\n <TableCaption className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\\n <TableHeader><TableRow>\\n <TableHead scope=\\\"col\\\" aria-sort={order} className=\\\"h-9 w-64 bg-muted px-3 py-0\\\">\\n <div className=\\\"flex items-center gap-2.5\\\">\\n <Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />\\n <Button size=\\\"sm\\\" variant=\\\"ghost\\\" className=\\\"h-auto gap-0.5 p-0 font-normal\\\" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>\\n {t('design_system.gallery.samples.table.component')}<SortIcon className=\\\"size-5\\\" aria-hidden=\\\"true\\\" />\\n </Button>\\n </div>\\n </TableHead>\\n <TableHead scope=\\\"col\\\" className=\\\"h-9 w-64 bg-muted px-3 py-0\\\">\\n <div className=\\\"flex items-center gap-2.5\\\">\\n <Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />\\n <Button disabled size=\\\"sm\\\" variant=\\\"ghost\\\" className=\\\"h-auto gap-0.5 p-0 font-normal\\\">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className=\\\"size-5\\\" aria-hidden=\\\"true\\\" /></Button>\\n </div>\\n </TableHead>\\n <TableHead scope=\\\"col\\\" className=\\\"h-9 w-16 bg-muted px-3 py-0\\\"><span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.empty')}</span></TableHead>\\n </TableRow></TableHeader>\\n <TableBody><TableRow data-state={selected ? 'selected' : undefined}>\\n <TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>\\n </TableRow></TableBody>\\n </Table>\\n <p role=\\\"status\\\" className=\\\"text-sm text-muted-foreground\\\">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>\\n </div>\\n}\\n\\nexport function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {\\n const t = useT()\\n const [selected, setSelected] = React.useState(['Leading'])\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const [rating, setRating] = React.useState(3)\\n const [notice, setNotice] = React.useState('')\\n const typeLabel = (type: string) => t(`design_system.gallery.samples.table.types.${type}`, type)\\n const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n const label = t('design_system.gallery.samples.table.label')\\n function cell(type: string) {\\n switch (type) {\\n case 'Leading': return <div className=\\\"flex items-center gap-3\\\"><Avatar label=\\\"Wei Chen\\\" size={rowHeight === 48 ? 32 : 40} /><div className=\\\"space-y-0.5\\\"><p className=\\\"text-sm font-medium leading-5\\\">Wei Chen</p>{rowHeight === 64 ? <p className=\\\"text-xs leading-4 text-muted-foreground\\\">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>\\n case 'Regular': return <span>{label}</span>\\n case 'Passive': return <span className=\\\"text-muted-foreground\\\">{label}</span>\\n case 'Empty': return <span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.empty')}</span>\\n case 'Button': return <Button size=\\\"sm\\\" variant=\\\"outline\\\" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>\\n case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>\\n case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />\\n case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />\\n case 'Progress': return <Progress value={65} className=\\\"w-40\\\" aria-label={t('design_system.gallery.examples.navigation.progress')} />\\n case 'StatusBadge': return <StatusBadge variant=\\\"success\\\" appearance=\\\"light\\\" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>\\n case 'BadgeGroup': return <div className=\\\"flex gap-1\\\"><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"purple\\\">CRM</Badge><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"sky\\\">ERP</Badge><Badge size={20} appearance=\\\"stroke\\\" tone=\\\"neutral\\\" numeric>+2</Badge></div>\\n case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label=\\\"Wei Chen\\\" /><Avatar size={24} label=\\\"Laura Perez\\\" /><Avatar size={24} label=\\\"Omar Haddad\\\" /><Avatar size={24} label=\\\"James Brown\\\" /></AvatarStack>\\n default: return null\\n }\\n }\\n return <div className=\\\"w-full min-w-0 space-y-3\\\">\\n <div className=\\\"w-full overflow-x-auto rounded-lg border border-border\\\">\\n <Table className=\\\"min-w-[600px]\\\">\\n <TableCaption className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\\n <TableHeader><TableRow>\\n <TableHead className=\\\"h-9 w-12 py-1\\\"><span className=\\\"sr-only\\\">{t('design_system.gallery.samples.table.selection')}</span></TableHead>\\n <TableHead aria-sort={order} className=\\\"h-9 py-1\\\"><Button variant=\\\"ghost\\\" size=\\\"sm\\\" className=\\\"h-auto gap-2 p-0\\\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden=\\\"true\\\" className=\\\"size-5\\\" /></Button></TableHead>\\n <TableHead className=\\\"h-9 py-1\\\">{t('design_system.gallery.samples.table.preview')}</TableHead>\\n </TableRow></TableHeader>\\n <TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className=\\\"data-[state=selected]:bg-muted\\\">\\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>\\n <TableCell className=\\\"font-medium\\\">{typeLabel(type)}</TableCell>\\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>\\n </TableRow>)}</TableBody>\\n </Table>\\n </div>\\n <p role=\\\"status\\\" className=\\\"min-h-5 text-sm text-muted-foreground\\\">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>\\n </div>\\n}\\n\\nexport function tableCellExampleCode(rowHeight: 48 | 64) {\\n return `import * as React from 'react'\\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\\nimport { Badge } from '@open-mercato/ui/primitives/badge'\\nimport { Button } from '@open-mercato/ui/primitives/button'\\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\\nimport { Progress } from '@open-mercato/ui/primitives/progress'\\nimport { Rating } from '@open-mercato/ui/primitives/rating'\\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\\nimport { Switch } from '@open-mercato/ui/primitives/switch'\\nimport { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'\\n\\nfunction Example() {\\n const [rating, setRating] = React.useState(3)\\n const [selected, setSelected] = React.useState<string[]>(['Leading'])\\n const [action, setAction] = React.useState('')\\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\\n const cells = [\\n { name: 'Leading', content: <div className=\\\"flex items-center gap-3\\\"><Avatar size={${rowHeight === 48 ? 32 : 40}} label=\\\"Wei Chen\\\" /><div><p className=\\\"font-medium\\\">Wei Chen</p>${rowHeight === 64 ? '<p className=\\\"text-xs text-muted-foreground\\\">Account manager</p>' : ''}</div></div> },\\n { name: 'Regular', content: <span>Label</span> },\\n { name: 'Passive', content: <span className=\\\"text-muted-foreground\\\">Label</span> },\\n { name: 'Empty', content: null },\\n { name: 'Button', content: <Button size=\\\"sm\\\" variant=\\\"outline\\\" onClick={() => setAction('Opened')}>Open</Button> },\\n { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label=\\\"Related actions\\\"><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label=\\\"Previous\\\" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant=\\\"outline\\\" size=\\\"icon\\\" aria-label=\\\"Next\\\" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },\\n { name: 'Switch', content: <Switch defaultChecked aria-label=\\\"Enabled\\\" /> },\\n { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label=\\\"Rating\\\" /> },\\n { name: 'Progress', content: <Progress value={65} className=\\\"w-40\\\" aria-label=\\\"Progress\\\" /> },\\n { name: 'StatusBadge', content: <StatusBadge variant=\\\"success\\\" appearance=\\\"light\\\" dot>Ready</StatusBadge> },\\n { name: 'BadgeGroup', content: <div className=\\\"flex gap-1\\\"><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"purple\\\">CRM</Badge><Badge size={20} appearance=\\\"lighter\\\" tone=\\\"sky\\\">ERP</Badge><Badge size={20} appearance=\\\"stroke\\\" tone=\\\"neutral\\\" numeric>+2</Badge></div> },\\n { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label=\\\"Wei Chen\\\" /><Avatar size={24} label=\\\"Laura Perez\\\" /><Avatar size={24} label=\\\"Omar Haddad\\\" /><Avatar size={24} label=\\\"James Brown\\\" /></AvatarStack> },\\n ]\\n const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))\\n return <div className=\\\"w-full overflow-x-auto\\\">\\n <Table className=\\\"min-w-[600px]\\\">\\n <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size=\\\"sm\\\" variant=\\\"ghost\\\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>\\n <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className=\\\"data-[state=selected]:bg-muted\\\">\\n <TableCell className=\\\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\\\"><Checkbox checked={selected.includes(cell.name)} aria-label={\\\\`Select \\\\${cell.name}\\\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>\\n <TableCell className=\\\"font-medium\\\">{cell.name}</TableCell>\\n <TableCell className=\\\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\\\">{cell.content}</TableCell>\\n </TableRow>)}</TableBody>\\n </Table>\\n <p role=\\\"status\\\">{action || selected.length + ' rows selected'}</p>\\n </div>\\n}`\\n}\\n\"\nexport const tableHeaderExampleCode = source + \"\\n<TableHeaderExamples />\\n\"\n"],
5
+ "mappings": "AACA,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACR,MAAM,yBAAyB,SAAS;",
6
+ "names": []
7
+ }
@@ -0,0 +1,181 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from "lucide-react";
4
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
5
+ import { Avatar, AvatarStack } from "@open-mercato/ui/primitives/avatar";
6
+ import { Badge } from "@open-mercato/ui/primitives/badge";
7
+ import { Button } from "@open-mercato/ui/primitives/button";
8
+ import { ButtonGroup } from "@open-mercato/ui/primitives/button-group";
9
+ import { Checkbox } from "@open-mercato/ui/primitives/checkbox";
10
+ import { Progress } from "@open-mercato/ui/primitives/progress";
11
+ import { Rating } from "@open-mercato/ui/primitives/rating";
12
+ import { StatusBadge } from "@open-mercato/ui/primitives/status-badge";
13
+ import { Switch } from "@open-mercato/ui/primitives/switch";
14
+ import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@open-mercato/ui/primitives/table";
15
+ const examples = ["Leading", "Regular", "Passive", "Empty", "Button", "ButtonGroup", "Switch", "Rating", "Progress", "StatusBadge", "BadgeGroup", "AvatarStack"];
16
+ function TableHeaderExamples() {
17
+ const t = useT();
18
+ const [selected, setSelected] = React.useState(false);
19
+ const [order, setOrder] = React.useState("none");
20
+ const SortIcon = order === "ascending" ? ArrowUp : order === "descending" ? ArrowDown : ArrowUpDown;
21
+ return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-3 overflow-x-auto", children: [
22
+ /* @__PURE__ */ jsxs(Table, { className: "w-[576px] table-fixed", children: [
23
+ /* @__PURE__ */ jsx(TableCaption, { className: "sr-only", children: t("design_system.gallery.samples.table.caption") }),
24
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
25
+ /* @__PURE__ */ jsx(TableHead, { scope: "col", "aria-sort": order, className: "h-9 w-64 bg-muted px-3 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
26
+ /* @__PURE__ */ jsx(Checkbox, { checked: selected, onCheckedChange: (value) => setSelected(value === true), "aria-label": t("design_system.gallery.samples.table.selection") }),
27
+ /* @__PURE__ */ jsxs(Button, { size: "sm", variant: "ghost", className: "h-auto gap-0.5 p-0 font-normal", onClick: () => setOrder((value) => value === "none" ? "ascending" : value === "ascending" ? "descending" : "none"), children: [
28
+ t("design_system.gallery.samples.table.component"),
29
+ /* @__PURE__ */ jsx(SortIcon, { className: "size-5", "aria-hidden": "true" })
30
+ ] })
31
+ ] }) }),
32
+ /* @__PURE__ */ jsx(TableHead, { scope: "col", className: "h-9 w-64 bg-muted px-3 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
33
+ /* @__PURE__ */ jsx(Checkbox, { disabled: true, "aria-label": t("design_system.gallery.samples.table.selection") }),
34
+ /* @__PURE__ */ jsxs(Button, { disabled: true, size: "sm", variant: "ghost", className: "h-auto gap-0.5 p-0 font-normal", children: [
35
+ t("design_system.gallery.samples.table.preview"),
36
+ /* @__PURE__ */ jsx(ArrowUpDown, { className: "size-5", "aria-hidden": "true" })
37
+ ] })
38
+ ] }) }),
39
+ /* @__PURE__ */ jsx(TableHead, { scope: "col", className: "h-9 w-16 bg-muted px-3 py-0", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.empty") }) })
40
+ ] }) }),
41
+ /* @__PURE__ */ jsx(TableBody, { children: /* @__PURE__ */ jsxs(TableRow, { "data-state": selected ? "selected" : void 0, children: [
42
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.default") }),
43
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.disabled") }),
44
+ /* @__PURE__ */ jsx(TableCell, { children: t("design_system.gallery.variantTitles.empty") })
45
+ ] }) })
46
+ ] }),
47
+ /* @__PURE__ */ jsx("p", { role: "status", className: "text-sm text-muted-foreground", children: t("design_system.gallery.samples.table.selected", { count: Number(selected) }) })
48
+ ] });
49
+ }
50
+ function TableCellExamples({ rowHeight }) {
51
+ const t = useT();
52
+ const [selected, setSelected] = React.useState(["Leading"]);
53
+ const [order, setOrder] = React.useState("none");
54
+ const [rating, setRating] = React.useState(3);
55
+ const [notice, setNotice] = React.useState("");
56
+ const typeLabel = (type) => t(`design_system.gallery.samples.table.types.${type}`, type);
57
+ const sorted = order === "none" ? examples : [...examples].sort((a, b) => order === "ascending" ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)));
58
+ const SortIcon = order === "ascending" ? ArrowUp : order === "descending" ? ArrowDown : ArrowUpDown;
59
+ const label = t("design_system.gallery.samples.table.label");
60
+ function cell(type) {
61
+ switch (type) {
62
+ case "Leading":
63
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
64
+ /* @__PURE__ */ jsx(Avatar, { label: "Wei Chen", size: rowHeight === 48 ? 32 : 40 }),
65
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
66
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium leading-5", children: "Wei Chen" }),
67
+ rowHeight === 64 ? /* @__PURE__ */ jsx("p", { className: "text-xs leading-4 text-muted-foreground", children: t("design_system.gallery.samples.table.description") }) : null
68
+ ] })
69
+ ] });
70
+ case "Regular":
71
+ return /* @__PURE__ */ jsx("span", { children: label });
72
+ case "Passive":
73
+ return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: label });
74
+ case "Empty":
75
+ return /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.empty") });
76
+ case "Button":
77
+ return /* @__PURE__ */ jsx(Button, { size: "sm", variant: "outline", onClick: () => setNotice(t("design_system.gallery.samples.table.actionDone")), children: t("design_system.gallery.samples.table.action") });
78
+ case "ButtonGroup":
79
+ return /* @__PURE__ */ jsxs(ButtonGroup, { size: 32, "aria-label": t("design_system.gallery.samples.table.actions"), children: [
80
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", "aria-label": t("design_system.gallery.examples.navigation.previous"), onClick: () => setNotice(t("design_system.gallery.examples.navigation.previous")), children: /* @__PURE__ */ jsx(ChevronLeft, {}) }),
81
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", "aria-label": t("design_system.gallery.examples.navigation.next"), onClick: () => setNotice(t("design_system.gallery.examples.navigation.next")), children: /* @__PURE__ */ jsx(ChevronRight, {}) })
82
+ ] });
83
+ case "Switch":
84
+ return /* @__PURE__ */ jsx(Switch, { "aria-label": t("design_system.gallery.samples.table.enabled"), defaultChecked: true });
85
+ case "Rating":
86
+ return /* @__PURE__ */ jsx(Rating, { value: rating, onChange: setRating, "aria-label": t("design_system.gallery.samples.rating.label") });
87
+ case "Progress":
88
+ return /* @__PURE__ */ jsx(Progress, { value: 65, className: "w-40", "aria-label": t("design_system.gallery.examples.navigation.progress") });
89
+ case "StatusBadge":
90
+ return /* @__PURE__ */ jsx(StatusBadge, { variant: "success", appearance: "light", dot: true, children: t("design_system.gallery.samples.table.ready") });
91
+ case "BadgeGroup":
92
+ return /* @__PURE__ */ jsxs("div", { className: "flex gap-1", children: [
93
+ /* @__PURE__ */ jsx(Badge, { size: 20, appearance: "lighter", tone: "purple", children: "CRM" }),
94
+ /* @__PURE__ */ jsx(Badge, { size: 20, appearance: "lighter", tone: "sky", children: "ERP" }),
95
+ /* @__PURE__ */ jsx(Badge, { size: 20, appearance: "stroke", tone: "neutral", numeric: true, children: "+2" })
96
+ ] });
97
+ case "AvatarStack":
98
+ return /* @__PURE__ */ jsxs(AvatarStack, { max: 3, size: 24, children: [
99
+ /* @__PURE__ */ jsx(Avatar, { size: 24, label: "Wei Chen" }),
100
+ /* @__PURE__ */ jsx(Avatar, { size: 24, label: "Laura Perez" }),
101
+ /* @__PURE__ */ jsx(Avatar, { size: 24, label: "Omar Haddad" }),
102
+ /* @__PURE__ */ jsx(Avatar, { size: 24, label: "James Brown" })
103
+ ] });
104
+ default:
105
+ return null;
106
+ }
107
+ }
108
+ return /* @__PURE__ */ jsxs("div", { className: "w-full min-w-0 space-y-3", children: [
109
+ /* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto rounded-lg border border-border", children: /* @__PURE__ */ jsxs(Table, { className: "min-w-[600px]", children: [
110
+ /* @__PURE__ */ jsx(TableCaption, { className: "sr-only", children: t("design_system.gallery.samples.table.caption") }),
111
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
112
+ /* @__PURE__ */ jsx(TableHead, { className: "h-9 w-12 py-1", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("design_system.gallery.samples.table.selection") }) }),
113
+ /* @__PURE__ */ jsx(TableHead, { "aria-sort": order, className: "h-9 py-1", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "h-auto gap-2 p-0", onClick: () => setOrder((value) => value === "ascending" ? "descending" : "ascending"), children: [
114
+ t("design_system.gallery.samples.table.component"),
115
+ /* @__PURE__ */ jsx(SortIcon, { "aria-hidden": "true", className: "size-5" })
116
+ ] }) }),
117
+ /* @__PURE__ */ jsx(TableHead, { className: "h-9 py-1", children: t("design_system.gallery.samples.table.preview") })
118
+ ] }) }),
119
+ /* @__PURE__ */ jsx(TableBody, { children: sorted.map((type) => /* @__PURE__ */ jsxs(TableRow, { "data-state": selected.includes(type) ? "selected" : void 0, className: "data-[state=selected]:bg-muted", children: [
120
+ /* @__PURE__ */ jsx(TableCell, { className: rowHeight === 48 ? "h-12 py-0" : "h-16 py-0", children: /* @__PURE__ */ jsx(Checkbox, { checked: selected.includes(type), "aria-label": t("design_system.gallery.samples.table.select", { name: typeLabel(type) }), onCheckedChange: (checked) => setSelected((value) => checked ? [...value, type] : value.filter((item) => item !== type)) }) }),
121
+ /* @__PURE__ */ jsx(TableCell, { className: "font-medium", children: typeLabel(type) }),
122
+ /* @__PURE__ */ jsx(TableCell, { className: rowHeight === 48 ? "h-12 py-0" : "h-16 py-0", children: cell(type) })
123
+ ] }, type)) })
124
+ ] }) }),
125
+ /* @__PURE__ */ jsx("p", { role: "status", className: "min-h-5 text-sm text-muted-foreground", children: notice || t("design_system.gallery.samples.table.selected", { count: selected.length }) })
126
+ ] });
127
+ }
128
+ function tableCellExampleCode(rowHeight) {
129
+ return `import * as React from 'react'
130
+ import { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'
131
+ import { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'
132
+ import { Badge } from '@open-mercato/ui/primitives/badge'
133
+ import { Button } from '@open-mercato/ui/primitives/button'
134
+ import { ButtonGroup } from '@open-mercato/ui/primitives/button-group'
135
+ import { Checkbox } from '@open-mercato/ui/primitives/checkbox'
136
+ import { Progress } from '@open-mercato/ui/primitives/progress'
137
+ import { Rating } from '@open-mercato/ui/primitives/rating'
138
+ import { StatusBadge } from '@open-mercato/ui/primitives/status-badge'
139
+ import { Switch } from '@open-mercato/ui/primitives/switch'
140
+ import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'
141
+
142
+ function Example() {
143
+ const [rating, setRating] = React.useState(3)
144
+ const [selected, setSelected] = React.useState<string[]>(['Leading'])
145
+ const [action, setAction] = React.useState('')
146
+ const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')
147
+ const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown
148
+ const cells = [
149
+ { name: 'Leading', content: <div className="flex items-center gap-3"><Avatar size={${rowHeight === 48 ? 32 : 40}} label="Wei Chen" /><div><p className="font-medium">Wei Chen</p>${rowHeight === 64 ? '<p className="text-xs text-muted-foreground">Account manager</p>' : ""}</div></div> },
150
+ { name: 'Regular', content: <span>Label</span> },
151
+ { name: 'Passive', content: <span className="text-muted-foreground">Label</span> },
152
+ { name: 'Empty', content: null },
153
+ { name: 'Button', content: <Button size="sm" variant="outline" onClick={() => setAction('Opened')}>Open</Button> },
154
+ { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label="Related actions"><Button variant="outline" size="icon" aria-label="Previous" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant="outline" size="icon" aria-label="Next" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },
155
+ { name: 'Switch', content: <Switch defaultChecked aria-label="Enabled" /> },
156
+ { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label="Rating" /> },
157
+ { name: 'Progress', content: <Progress value={65} className="w-40" aria-label="Progress" /> },
158
+ { name: 'StatusBadge', content: <StatusBadge variant="success" appearance="light" dot>Ready</StatusBadge> },
159
+ { name: 'BadgeGroup', content: <div className="flex gap-1"><Badge size={20} appearance="lighter" tone="purple">CRM</Badge><Badge size={20} appearance="lighter" tone="sky">ERP</Badge><Badge size={20} appearance="stroke" tone="neutral" numeric>+2</Badge></div> },
160
+ { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label="Wei Chen" /><Avatar size={24} label="Laura Perez" /><Avatar size={24} label="Omar Haddad" /><Avatar size={24} label="James Brown" /></AvatarStack> },
161
+ ]
162
+ const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))
163
+ return <div className="w-full overflow-x-auto">
164
+ <Table className="min-w-[600px]">
165
+ <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size="sm" variant="ghost" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>
166
+ <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className="data-[state=selected]:bg-muted">
167
+ <TableCell className="${rowHeight === 48 ? "h-12 py-0" : "h-16 py-0"}"><Checkbox checked={selected.includes(cell.name)} aria-label={\`Select \${cell.name}\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>
168
+ <TableCell className="font-medium">{cell.name}</TableCell>
169
+ <TableCell className="${rowHeight === 48 ? "h-12 py-0" : "h-16 py-0"}">{cell.content}</TableCell>
170
+ </TableRow>)}</TableBody>
171
+ </Table>
172
+ <p role="status">{action || selected.length + ' rows selected'}</p>
173
+ </div>
174
+ }`;
175
+ }
176
+ export {
177
+ TableCellExamples,
178
+ TableHeaderExamples,
179
+ tableCellExampleCode
180
+ };
181
+ //# sourceMappingURL=table-cells.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/demos/table-cells.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Progress } from '@open-mercato/ui/primitives/progress'\nimport { Rating } from '@open-mercato/ui/primitives/rating'\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@open-mercato/ui/primitives/table'\n\nconst examples = ['Leading', 'Regular', 'Passive', 'Empty', 'Button', 'ButtonGroup', 'Switch', 'Rating', 'Progress', 'StatusBadge', 'BadgeGroup', 'AvatarStack']\n\nexport function TableHeaderExamples() {\n const t = useT()\n const [selected, setSelected] = React.useState(false)\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n return <div className=\"w-full space-y-3 overflow-x-auto\">\n <Table className=\"w-[576px] table-fixed\">\n <TableCaption className=\"sr-only\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\n <TableHeader><TableRow>\n <TableHead scope=\"col\" aria-sort={order} className=\"h-9 w-64 bg-muted px-3 py-0\">\n <div className=\"flex items-center gap-2.5\">\n <Checkbox checked={selected} onCheckedChange={value => setSelected(value === true)} aria-label={t('design_system.gallery.samples.table.selection')} />\n <Button size=\"sm\" variant=\"ghost\" className=\"h-auto gap-0.5 p-0 font-normal\" onClick={() => setOrder(value => value === 'none' ? 'ascending' : value === 'ascending' ? 'descending' : 'none')}>\n {t('design_system.gallery.samples.table.component')}<SortIcon className=\"size-5\" aria-hidden=\"true\" />\n </Button>\n </div>\n </TableHead>\n <TableHead scope=\"col\" className=\"h-9 w-64 bg-muted px-3 py-0\">\n <div className=\"flex items-center gap-2.5\">\n <Checkbox disabled aria-label={t('design_system.gallery.samples.table.selection')} />\n <Button disabled size=\"sm\" variant=\"ghost\" className=\"h-auto gap-0.5 p-0 font-normal\">{t('design_system.gallery.samples.table.preview')}<ArrowUpDown className=\"size-5\" aria-hidden=\"true\" /></Button>\n </div>\n </TableHead>\n <TableHead scope=\"col\" className=\"h-9 w-16 bg-muted px-3 py-0\"><span className=\"sr-only\">{t('design_system.gallery.samples.table.empty')}</span></TableHead>\n </TableRow></TableHeader>\n <TableBody><TableRow data-state={selected ? 'selected' : undefined}>\n <TableCell>{t('design_system.gallery.variantTitles.default')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.disabled')}</TableCell><TableCell>{t('design_system.gallery.variantTitles.empty')}</TableCell>\n </TableRow></TableBody>\n </Table>\n <p role=\"status\" className=\"text-sm text-muted-foreground\">{t('design_system.gallery.samples.table.selected', { count: Number(selected) })}</p>\n </div>\n}\n\nexport function TableCellExamples({ rowHeight }: { rowHeight: 48 | 64 }) {\n const t = useT()\n const [selected, setSelected] = React.useState(['Leading'])\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const [rating, setRating] = React.useState(3)\n const [notice, setNotice] = React.useState('')\n const typeLabel = (type: string) => t(`design_system.gallery.samples.table.types.${type}`, type)\n const sorted = order === 'none' ? examples : [...examples].sort((a, b) => order === 'ascending' ? typeLabel(a).localeCompare(typeLabel(b)) : typeLabel(b).localeCompare(typeLabel(a)))\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n const label = t('design_system.gallery.samples.table.label')\n function cell(type: string) {\n switch (type) {\n case 'Leading': return <div className=\"flex items-center gap-3\"><Avatar label=\"Wei Chen\" size={rowHeight === 48 ? 32 : 40} /><div className=\"space-y-0.5\"><p className=\"text-sm font-medium leading-5\">Wei Chen</p>{rowHeight === 64 ? <p className=\"text-xs leading-4 text-muted-foreground\">{t('design_system.gallery.samples.table.description')}</p> : null}</div></div>\n case 'Regular': return <span>{label}</span>\n case 'Passive': return <span className=\"text-muted-foreground\">{label}</span>\n case 'Empty': return <span className=\"sr-only\">{t('design_system.gallery.samples.table.empty')}</span>\n case 'Button': return <Button size=\"sm\" variant=\"outline\" onClick={() => setNotice(t('design_system.gallery.samples.table.actionDone'))}>{t('design_system.gallery.samples.table.action')}</Button>\n case 'ButtonGroup': return <ButtonGroup size={32} aria-label={t('design_system.gallery.samples.table.actions')}><Button variant=\"outline\" size=\"icon\" aria-label={t('design_system.gallery.examples.navigation.previous')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.previous'))}><ChevronLeft /></Button><Button variant=\"outline\" size=\"icon\" aria-label={t('design_system.gallery.examples.navigation.next')} onClick={() => setNotice(t('design_system.gallery.examples.navigation.next'))}><ChevronRight /></Button></ButtonGroup>\n case 'Switch': return <Switch aria-label={t('design_system.gallery.samples.table.enabled')} defaultChecked />\n case 'Rating': return <Rating value={rating} onChange={setRating} aria-label={t('design_system.gallery.samples.rating.label')} />\n case 'Progress': return <Progress value={65} className=\"w-40\" aria-label={t('design_system.gallery.examples.navigation.progress')} />\n case 'StatusBadge': return <StatusBadge variant=\"success\" appearance=\"light\" dot>{t('design_system.gallery.samples.table.ready')}</StatusBadge>\n case 'BadgeGroup': return <div className=\"flex gap-1\"><Badge size={20} appearance=\"lighter\" tone=\"purple\">CRM</Badge><Badge size={20} appearance=\"lighter\" tone=\"sky\">ERP</Badge><Badge size={20} appearance=\"stroke\" tone=\"neutral\" numeric>+2</Badge></div>\n case 'AvatarStack': return <AvatarStack max={3} size={24}><Avatar size={24} label=\"Wei Chen\" /><Avatar size={24} label=\"Laura Perez\" /><Avatar size={24} label=\"Omar Haddad\" /><Avatar size={24} label=\"James Brown\" /></AvatarStack>\n default: return null\n }\n }\n return <div className=\"w-full min-w-0 space-y-3\">\n <div className=\"w-full overflow-x-auto rounded-lg border border-border\">\n <Table className=\"min-w-[600px]\">\n <TableCaption className=\"sr-only\">{t('design_system.gallery.samples.table.caption')}</TableCaption>\n <TableHeader><TableRow>\n <TableHead className=\"h-9 w-12 py-1\"><span className=\"sr-only\">{t('design_system.gallery.samples.table.selection')}</span></TableHead>\n <TableHead aria-sort={order} className=\"h-9 py-1\"><Button variant=\"ghost\" size=\"sm\" className=\"h-auto gap-2 p-0\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>{t('design_system.gallery.samples.table.component')}<SortIcon aria-hidden=\"true\" className=\"size-5\" /></Button></TableHead>\n <TableHead className=\"h-9 py-1\">{t('design_system.gallery.samples.table.preview')}</TableHead>\n </TableRow></TableHeader>\n <TableBody>{sorted.map(type => <TableRow key={type} data-state={selected.includes(type) ? 'selected' : undefined} className=\"data-[state=selected]:bg-muted\">\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}><Checkbox checked={selected.includes(type)} aria-label={t('design_system.gallery.samples.table.select', { name: typeLabel(type) })} onCheckedChange={checked => setSelected(value => checked ? [...value, type] : value.filter(item => item !== type))} /></TableCell>\n <TableCell className=\"font-medium\">{typeLabel(type)}</TableCell>\n <TableCell className={rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}>{cell(type)}</TableCell>\n </TableRow>)}</TableBody>\n </Table>\n </div>\n <p role=\"status\" className=\"min-h-5 text-sm text-muted-foreground\">{notice || t('design_system.gallery.samples.table.selected', { count: selected.length })}</p>\n </div>\n}\n\nexport function tableCellExampleCode(rowHeight: 48 | 64) {\n return `import * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Avatar, AvatarStack } from '@open-mercato/ui/primitives/avatar'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { ButtonGroup } from '@open-mercato/ui/primitives/button-group'\nimport { Checkbox } from '@open-mercato/ui/primitives/checkbox'\nimport { Progress } from '@open-mercato/ui/primitives/progress'\nimport { Rating } from '@open-mercato/ui/primitives/rating'\nimport { StatusBadge } from '@open-mercato/ui/primitives/status-badge'\nimport { Switch } from '@open-mercato/ui/primitives/switch'\nimport { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@open-mercato/ui/primitives/table'\n\nfunction Example() {\n const [rating, setRating] = React.useState(3)\n const [selected, setSelected] = React.useState<string[]>(['Leading'])\n const [action, setAction] = React.useState('')\n const [order, setOrder] = React.useState<'none' | 'ascending' | 'descending'>('none')\n const SortIcon = order === 'ascending' ? ArrowUp : order === 'descending' ? ArrowDown : ArrowUpDown\n const cells = [\n { name: 'Leading', content: <div className=\"flex items-center gap-3\"><Avatar size={${rowHeight === 48 ? 32 : 40}} label=\"Wei Chen\" /><div><p className=\"font-medium\">Wei Chen</p>${rowHeight === 64 ? '<p className=\"text-xs text-muted-foreground\">Account manager</p>' : ''}</div></div> },\n { name: 'Regular', content: <span>Label</span> },\n { name: 'Passive', content: <span className=\"text-muted-foreground\">Label</span> },\n { name: 'Empty', content: null },\n { name: 'Button', content: <Button size=\"sm\" variant=\"outline\" onClick={() => setAction('Opened')}>Open</Button> },\n { name: 'ButtonGroup', content: <ButtonGroup size={32} aria-label=\"Related actions\"><Button variant=\"outline\" size=\"icon\" aria-label=\"Previous\" onClick={() => setAction('Previous')}><ChevronLeft /></Button><Button variant=\"outline\" size=\"icon\" aria-label=\"Next\" onClick={() => setAction('Next')}><ChevronRight /></Button></ButtonGroup> },\n { name: 'Switch', content: <Switch defaultChecked aria-label=\"Enabled\" /> },\n { name: 'Rating', content: <Rating value={rating} onChange={setRating} aria-label=\"Rating\" /> },\n { name: 'Progress', content: <Progress value={65} className=\"w-40\" aria-label=\"Progress\" /> },\n { name: 'StatusBadge', content: <StatusBadge variant=\"success\" appearance=\"light\" dot>Ready</StatusBadge> },\n { name: 'BadgeGroup', content: <div className=\"flex gap-1\"><Badge size={20} appearance=\"lighter\" tone=\"purple\">CRM</Badge><Badge size={20} appearance=\"lighter\" tone=\"sky\">ERP</Badge><Badge size={20} appearance=\"stroke\" tone=\"neutral\" numeric>+2</Badge></div> },\n { name: 'AvatarStack', content: <AvatarStack max={3} size={24}><Avatar size={24} label=\"Wei Chen\" /><Avatar size={24} label=\"Laura Perez\" /><Avatar size={24} label=\"Omar Haddad\" /><Avatar size={24} label=\"James Brown\" /></AvatarStack> },\n ]\n const sorted = order === 'none' ? cells : [...cells].sort((a, b) => order === 'ascending' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))\n return <div className=\"w-full overflow-x-auto\">\n <Table className=\"min-w-[600px]\">\n <TableHeader><TableRow><TableHead>Selection</TableHead><TableHead aria-sort={order}><Button size=\"sm\" variant=\"ghost\" onClick={() => setOrder(value => value === 'ascending' ? 'descending' : 'ascending')}>Component<SortIcon /></Button></TableHead><TableHead>Preview</TableHead></TableRow></TableHeader>\n <TableBody>{sorted.map(cell => <TableRow key={cell.name} data-state={selected.includes(cell.name) ? 'selected' : undefined} className=\"data-[state=selected]:bg-muted\">\n <TableCell className=\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\"><Checkbox checked={selected.includes(cell.name)} aria-label={\\`Select \\${cell.name}\\`} onCheckedChange={checked => setSelected(value => checked ? [...value, cell.name] : value.filter(name => name !== cell.name))} /></TableCell>\n <TableCell className=\"font-medium\">{cell.name}</TableCell>\n <TableCell className=\"${rowHeight === 48 ? 'h-12 py-0' : 'h-16 py-0'}\">{cell.content}</TableCell>\n </TableRow>)}</TableBody>\n </Table>\n <p role=\"status\">{action || selected.length + ' rows selected'}</p>\n </div>\n}`\n}\n"],
5
+ "mappings": "AAuBM,cAKM,YALN;AAvBN,YAAY,WAAW;AACvB,SAAS,WAAW,SAAS,aAAa,aAAa,oBAAoB;AAC3E,SAAS,YAAY;AACrB,SAAS,QAAQ,mBAAmB;AACpC,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,OAAO,WAAW,cAAc,WAAW,WAAW,aAAa,gBAAgB;AAE5F,MAAM,WAAW,CAAC,WAAW,WAAW,WAAW,SAAS,UAAU,eAAe,UAAU,UAAU,YAAY,eAAe,cAAc,aAAa;AAExJ,SAAS,sBAAsB;AACpC,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAA8C,MAAM;AACpF,QAAM,WAAW,UAAU,cAAc,UAAU,UAAU,eAAe,YAAY;AACxF,SAAO,qBAAC,SAAI,WAAU,oCACpB;AAAA,yBAAC,SAAM,WAAU,yBACf;AAAA,0BAAC,gBAAa,WAAU,WAAW,YAAE,6CAA6C,GAAE;AAAA,MACpF,oBAAC,eAAY,+BAAC,YACZ;AAAA,4BAAC,aAAU,OAAM,OAAM,aAAW,OAAO,WAAU,+BACjD,+BAAC,SAAI,WAAU,6BACb;AAAA,8BAAC,YAAS,SAAS,UAAU,iBAAiB,WAAS,YAAY,UAAU,IAAI,GAAG,cAAY,EAAE,+CAA+C,GAAG;AAAA,UACpJ,qBAAC,UAAO,MAAK,MAAK,SAAQ,SAAQ,WAAU,kCAAiC,SAAS,MAAM,SAAS,WAAS,UAAU,SAAS,cAAc,UAAU,cAAc,eAAe,MAAM,GACzL;AAAA,cAAE,+CAA+C;AAAA,YAAE,oBAAC,YAAS,WAAU,UAAS,eAAY,QAAO;AAAA,aACtG;AAAA,WACF,GACF;AAAA,QACA,oBAAC,aAAU,OAAM,OAAM,WAAU,+BAC/B,+BAAC,SAAI,WAAU,6BACb;AAAA,8BAAC,YAAS,UAAQ,MAAC,cAAY,EAAE,+CAA+C,GAAG;AAAA,UACnF,qBAAC,UAAO,UAAQ,MAAC,MAAK,MAAK,SAAQ,SAAQ,WAAU,kCAAkC;AAAA,cAAE,6CAA6C;AAAA,YAAE,oBAAC,eAAY,WAAU,UAAS,eAAY,QAAO;AAAA,aAAE;AAAA,WAC/L,GACF;AAAA,QACA,oBAAC,aAAU,OAAM,OAAM,WAAU,+BAA8B,8BAAC,UAAK,WAAU,WAAW,YAAE,2CAA2C,GAAE,GAAO;AAAA,SAClJ,GAAW;AAAA,MACX,oBAAC,aAAU,+BAAC,YAAS,cAAY,WAAW,aAAa,QACvD;AAAA,4BAAC,aAAW,YAAE,6CAA6C,GAAE;AAAA,QAAY,oBAAC,aAAW,YAAE,8CAA8C,GAAE;AAAA,QAAY,oBAAC,aAAW,YAAE,2CAA2C,GAAE;AAAA,SAChN,GAAW;AAAA,OACb;AAAA,IACA,oBAAC,OAAE,MAAK,UAAS,WAAU,iCAAiC,YAAE,gDAAgD,EAAE,OAAO,OAAO,QAAQ,EAAE,CAAC,GAAE;AAAA,KAC7I;AACF;AAEO,SAAS,kBAAkB,EAAE,UAAU,GAA2B;AACvE,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,CAAC,SAAS,CAAC;AAC1D,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAA8C,MAAM;AACpF,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,CAAC;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,EAAE;AAC7C,QAAM,YAAY,CAAC,SAAiB,EAAE,6CAA6C,IAAI,IAAI,IAAI;AAC/F,QAAM,SAAS,UAAU,SAAS,WAAW,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,UAAU,cAAc,UAAU,CAAC,EAAE,cAAc,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,cAAc,UAAU,CAAC,CAAC,CAAC;AACrL,QAAM,WAAW,UAAU,cAAc,UAAU,UAAU,eAAe,YAAY;AACxF,QAAM,QAAQ,EAAE,2CAA2C;AAC3D,WAAS,KAAK,MAAc;AAC1B,YAAQ,MAAM;AAAA,MACZ,KAAK;AAAW,eAAO,qBAAC,SAAI,WAAU,2BAA0B;AAAA,8BAAC,UAAO,OAAM,YAAW,MAAM,cAAc,KAAK,KAAK,IAAI;AAAA,UAAE,qBAAC,SAAI,WAAU,eAAc;AAAA,gCAAC,OAAE,WAAU,iCAAgC,sBAAQ;AAAA,YAAK,cAAc,KAAK,oBAAC,OAAE,WAAU,2CAA2C,YAAE,iDAAiD,GAAE,IAAO;AAAA,aAAK;AAAA,WAAM;AAAA,MACtW,KAAK;AAAW,eAAO,oBAAC,UAAM,iBAAM;AAAA,MACpC,KAAK;AAAW,eAAO,oBAAC,UAAK,WAAU,yBAAyB,iBAAM;AAAA,MACtE,KAAK;AAAS,eAAO,oBAAC,UAAK,WAAU,WAAW,YAAE,2CAA2C,GAAE;AAAA,MAC/F,KAAK;AAAU,eAAO,oBAAC,UAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAM,UAAU,EAAE,gDAAgD,CAAC,GAAI,YAAE,4CAA4C,GAAE;AAAA,MAC1L,KAAK;AAAe,eAAO,qBAAC,eAAY,MAAM,IAAI,cAAY,EAAE,6CAA6C,GAAG;AAAA,8BAAC,UAAO,SAAQ,WAAU,MAAK,QAAO,cAAY,EAAE,oDAAoD,GAAG,SAAS,MAAM,UAAU,EAAE,oDAAoD,CAAC,GAAG,8BAAC,eAAY,GAAE;AAAA,UAAS,oBAAC,UAAO,SAAQ,WAAU,MAAK,QAAO,cAAY,EAAE,gDAAgD,GAAG,SAAS,MAAM,UAAU,EAAE,gDAAgD,CAAC,GAAG,8BAAC,gBAAa,GAAE;AAAA,WAAS;AAAA,MACrhB,KAAK;AAAU,eAAO,oBAAC,UAAO,cAAY,EAAE,6CAA6C,GAAG,gBAAc,MAAC;AAAA,MAC3G,KAAK;AAAU,eAAO,oBAAC,UAAO,OAAO,QAAQ,UAAU,WAAW,cAAY,EAAE,4CAA4C,GAAG;AAAA,MAC/H,KAAK;AAAY,eAAO,oBAAC,YAAS,OAAO,IAAI,WAAU,QAAO,cAAY,EAAE,oDAAoD,GAAG;AAAA,MACnI,KAAK;AAAe,eAAO,oBAAC,eAAY,SAAQ,WAAU,YAAW,SAAQ,KAAG,MAAE,YAAE,2CAA2C,GAAE;AAAA,MACjI,KAAK;AAAc,eAAO,qBAAC,SAAI,WAAU,cAAa;AAAA,8BAAC,SAAM,MAAM,IAAI,YAAW,WAAU,MAAK,UAAS,iBAAG;AAAA,UAAQ,oBAAC,SAAM,MAAM,IAAI,YAAW,WAAU,MAAK,OAAM,iBAAG;AAAA,UAAQ,oBAAC,SAAM,MAAM,IAAI,YAAW,UAAS,MAAK,WAAU,SAAO,MAAC,gBAAE;AAAA,WAAQ;AAAA,MACvP,KAAK;AAAe,eAAO,qBAAC,eAAY,KAAK,GAAG,MAAM,IAAI;AAAA,8BAAC,UAAO,MAAM,IAAI,OAAM,YAAW;AAAA,UAAE,oBAAC,UAAO,MAAM,IAAI,OAAM,eAAc;AAAA,UAAE,oBAAC,UAAO,MAAM,IAAI,OAAM,eAAc;AAAA,UAAE,oBAAC,UAAO,MAAM,IAAI,OAAM,eAAc;AAAA,WAAE;AAAA,MACvN;AAAS,eAAO;AAAA,IAClB;AAAA,EACF;AACA,SAAO,qBAAC,SAAI,WAAU,4BACpB;AAAA,wBAAC,SAAI,WAAU,0DACb,+BAAC,SAAM,WAAU,iBACf;AAAA,0BAAC,gBAAa,WAAU,WAAW,YAAE,6CAA6C,GAAE;AAAA,MACpF,oBAAC,eAAY,+BAAC,YACZ;AAAA,4BAAC,aAAU,WAAU,iBAAgB,8BAAC,UAAK,WAAU,WAAW,YAAE,+CAA+C,GAAE,GAAO;AAAA,QAC1H,oBAAC,aAAU,aAAW,OAAO,WAAU,YAAW,+BAAC,UAAO,SAAQ,SAAQ,MAAK,MAAK,WAAU,oBAAmB,SAAS,MAAM,SAAS,WAAS,UAAU,cAAc,eAAe,WAAW,GAAI;AAAA,YAAE,+CAA+C;AAAA,UAAE,oBAAC,YAAS,eAAY,QAAO,WAAU,UAAS;AAAA,WAAE,GAAS;AAAA,QACtT,oBAAC,aAAU,WAAU,YAAY,YAAE,6CAA6C,GAAE;AAAA,SACpF,GAAW;AAAA,MACX,oBAAC,aAAW,iBAAO,IAAI,UAAQ,qBAAC,YAAoB,cAAY,SAAS,SAAS,IAAI,IAAI,aAAa,QAAW,WAAU,kCAC1H;AAAA,4BAAC,aAAU,WAAW,cAAc,KAAK,cAAc,aAAa,8BAAC,YAAS,SAAS,SAAS,SAAS,IAAI,GAAG,cAAY,EAAE,8CAA8C,EAAE,MAAM,UAAU,IAAI,EAAE,CAAC,GAAG,iBAAiB,aAAW,YAAY,WAAS,UAAU,CAAC,GAAG,OAAO,IAAI,IAAI,MAAM,OAAO,UAAQ,SAAS,IAAI,CAAC,GAAG,GAAE;AAAA,QAC9T,oBAAC,aAAU,WAAU,eAAe,oBAAU,IAAI,GAAE;AAAA,QACpD,oBAAC,aAAU,WAAW,cAAc,KAAK,cAAc,aAAc,eAAK,IAAI,GAAE;AAAA,WAHpC,IAI9C,CAAW,GAAE;AAAA,OACf,GACF;AAAA,IACA,oBAAC,OAAE,MAAK,UAAS,WAAU,yCAAyC,oBAAU,EAAE,gDAAgD,EAAE,OAAO,SAAS,OAAO,CAAC,GAAE;AAAA,KAC9J;AACF;AAEO,SAAS,qBAAqB,WAAoB;AACvD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yFAoBgF,cAAc,KAAK,KAAK,EAAE,oEAAoE,cAAc,KAAK,qEAAqE,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAkBjP,cAAc,KAAK,cAAc,WAAW;AAAA;AAAA,gCAE5C,cAAc,KAAK,cAAc,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAM5E;",
6
+ "names": []
7
+ }
@@ -0,0 +1,113 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Calendar, Globe, Info, Send, Smile, User } from "lucide-react";
4
+ import { useT } from "@open-mercato/shared/lib/i18n/context";
5
+ import { Input } from "@open-mercato/ui/primitives/input";
6
+ import { Textarea } from "@open-mercato/ui/primitives/textarea";
7
+ import { FormField } from "@open-mercato/ui/primitives/form-field";
8
+ import { EmailInput } from "@open-mercato/ui/primitives/email-input";
9
+ import { SearchInput } from "@open-mercato/ui/primitives/search-input";
10
+ import { PasswordInput } from "@open-mercato/ui/primitives/password-input";
11
+ import { WebsiteInput } from "@open-mercato/ui/primitives/website-input";
12
+ import { AmountInput } from "@open-mercato/ui/primitives/amount-input";
13
+ import { CardInput } from "@open-mercato/ui/primitives/card-input";
14
+ import { ButtonInput } from "@open-mercato/ui/primitives/button-input";
15
+ import { CompactButton } from "@open-mercato/ui/primitives/compact-button";
16
+ import { Popover, PopoverContent, PopoverTrigger } from "@open-mercato/ui/primitives/popover";
17
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@open-mercato/ui/primitives/select";
18
+ import { PhoneNumberField } from "@open-mercato/ui/backend/inputs/PhoneNumberField";
19
+ import unitedStates from "../assets/menu-united-states.svg";
20
+ import europeanUnion from "../assets/input-european-union.svg";
21
+ import poland from "../assets/select-poland.png";
22
+ const inputKinds = ["basic", "email", "phone", "card", "website", "amount", "date", "search", "password", "button", "dropdown", "emoji"];
23
+ function assetSource(asset) {
24
+ return typeof asset === "string" ? asset : asset.src;
25
+ }
26
+ function SourceTextInput({ kind, size = 36, state = "filled" }) {
27
+ const t = useT();
28
+ const id = React.useId();
29
+ const isPlaceholder = state === "placeholder";
30
+ const disabled = state === "disabled";
31
+ const [text, setText] = React.useState(isPlaceholder ? "" : kind === "basic" || kind === "dropdown" ? "Alex Morgan" : kind === "email" ? "alex@example.com" : kind === "website" ? "openmercato.com" : kind === "password" ? "LocalExample2026!" : kind === "emoji" ? "\u{1F642}" : kind === "date" ? "2026-09-18" : t("design_system.gallery.samples.textInput.sample"));
32
+ const [phone, setPhone] = React.useState(isPlaceholder ? void 0 : "+1 212 555 1234");
33
+ const [amount, setAmount] = React.useState({ amount: isPlaceholder ? "" : "1250.00", currency: "EUR" });
34
+ const [card, setCard] = React.useState(isPlaceholder ? "" : "4242424242424242");
35
+ const [permission, setPermission] = React.useState("view");
36
+ const [emojiOpen, setEmojiOpen] = React.useState(false);
37
+ const [feedback, setFeedback] = React.useState("");
38
+ const dateRef = React.useRef(null);
39
+ const label = t(`design_system.gallery.samples.textInput.${kind}`);
40
+ const error = state === "error" ? t("design_system.gallery.samples.textInput.error") : void 0;
41
+ const hint = t("design_system.gallery.samples.textInput.hint");
42
+ const common = { id, size, disabled, "aria-label": label, "aria-invalid": !!error, "aria-describedby": `${id}-${error ? "error" : "desc"}`, placeholder: t("design_system.gallery.samples.textInput.placeholder") };
43
+ const countries = [
44
+ { iso2: "US", dialCode: "+1", label: t("design_system.gallery.samples.textInput.us"), flag: "\u{1F1FA}\u{1F1F8}" },
45
+ { iso2: "PL", dialCode: "+48", label: t("design_system.gallery.samples.textInput.pl"), flag: "\u{1F1F5}\u{1F1F1}" }
46
+ ];
47
+ let control;
48
+ if (kind === "phone") {
49
+ control = /* @__PURE__ */ jsx(PhoneNumberField, { id, size, ariaLabel: label, ariaDescribedBy: `${id}-desc`, countryLabel: t("design_system.gallery.samples.textInput.country"), value: phone, onValueChange: setPhone, countries, disabled, externalError: error, renderCountryIcon: (country) => /* @__PURE__ */ jsx("img", { src: assetSource(country.iso2 === "PL" ? poland : unitedStates), alt: "", className: "size-5 object-contain" }) });
50
+ } else if (kind === "email") {
51
+ control = /* @__PURE__ */ jsx(EmailInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
52
+ } else if (kind === "website") {
53
+ control = /* @__PURE__ */ jsx(WebsiteInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
54
+ } else if (kind === "amount") {
55
+ control = /* @__PURE__ */ jsx(AmountInput, { ...common, value: amount, onChange: setAmount, currencies: [{ code: "USD", symbol: "$", label: "USD" }, { code: "EUR", symbol: "\u20AC", label: "EUR" }], renderCurrencyIcon: (currency) => /* @__PURE__ */ jsx("img", { src: assetSource(currency.code === "EUR" ? europeanUnion : unitedStates), alt: "", className: "size-5 object-contain" }) });
56
+ } else if (kind === "card") {
57
+ control = /* @__PURE__ */ jsx(CardInput, { ...common, value: card, onChange: setCard });
58
+ } else if (kind === "search") {
59
+ control = /* @__PURE__ */ jsx(SearchInput, { ...common, value: text, onChange: setText });
60
+ } else if (kind === "password") {
61
+ control = /* @__PURE__ */ jsx(PasswordInput, { ...common, value: text, onChange: (event) => setText(event.target.value) });
62
+ } else if (kind === "button") {
63
+ control = /* @__PURE__ */ jsx(ButtonInput, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), trailingAction: /* @__PURE__ */ jsx(CompactButton, { size: 24, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.send"), onClick: () => setFeedback(t("design_system.gallery.samples.textInput.sent")), children: /* @__PURE__ */ jsx(Send, { className: "size-5" }) }) });
64
+ } else if (kind === "dropdown") {
65
+ control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), trailing: /* @__PURE__ */ jsxs(Select, { value: permission, onValueChange: setPermission, disabled, children: [
66
+ /* @__PURE__ */ jsxs(SelectTrigger, { size: 32, "aria-label": t("design_system.gallery.samples.textInput.permission"), className: "h-5 w-auto gap-1 border-0 rounded-none bg-transparent p-0 text-muted-foreground shadow-none", children: [
67
+ /* @__PURE__ */ jsx(Globe, { className: "size-5", "aria-hidden": "true" }),
68
+ /* @__PURE__ */ jsx(SelectValue, {})
69
+ ] }),
70
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
71
+ /* @__PURE__ */ jsx(SelectItem, { value: "view", children: t("design_system.gallery.samples.textInput.view") }),
72
+ /* @__PURE__ */ jsx(SelectItem, { value: "edit", children: t("design_system.gallery.samples.textInput.edit") })
73
+ ] })
74
+ ] }) });
75
+ } else if (kind === "emoji") {
76
+ control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leading: /* @__PURE__ */ jsxs(Popover, { open: emojiOpen, onOpenChange: setEmojiOpen, children: [
77
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(CompactButton, { size: 20, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.chooseEmoji"), children: /* @__PURE__ */ jsx(Smile, { className: "size-5" }) }) }),
78
+ /* @__PURE__ */ jsx(PopoverContent, { className: "flex w-fit gap-2 p-2", children: ["\u{1F642}", "\u{1F389}", "\u{1F680}", "\u2764\uFE0F"].map((emoji) => /* @__PURE__ */ jsx(CompactButton, { size: 24, appearance: "ghost", "aria-label": emoji, onClick: () => {
79
+ setText((current) => `${current}${emoji}`);
80
+ setEmojiOpen(false);
81
+ }, children: emoji }, emoji)) })
82
+ ] }) });
83
+ } else if (kind === "date") {
84
+ control = /* @__PURE__ */ jsx(Input, { ...common, ref: dateRef, type: "date", value: text, onChange: (event) => setText(event.target.value), inputClassName: "[&::-webkit-calendar-picker-indicator]:hidden", leading: /* @__PURE__ */ jsx(CompactButton, { size: 20, appearance: "ghost", disabled, "aria-label": t("design_system.gallery.samples.textInput.chooseDate"), onClick: () => {
85
+ dateRef.current?.focus();
86
+ dateRef.current?.showPicker?.();
87
+ }, children: /* @__PURE__ */ jsx(Calendar, { className: "size-5" }) }) });
88
+ } else {
89
+ control = /* @__PURE__ */ jsx(Input, { ...common, value: text, onChange: (event) => setText(event.target.value), leftIcon: /* @__PURE__ */ jsx(User, {}), rightIcon: state === "error" ? /* @__PURE__ */ jsx(Info, {}) : void 0 });
90
+ }
91
+ return /* @__PURE__ */ jsxs("div", { className: "min-w-0", "data-input-kind": kind, "data-input-size": size, children: [
92
+ /* @__PURE__ */ jsx(FormField, { id, label, description: hint, error: kind === "phone" ? void 0 : error, disabled, children: control }),
93
+ feedback ? /* @__PURE__ */ jsx("output", { className: "mt-2 block text-xs text-muted-foreground", "aria-live": "polite", children: feedback }) : null,
94
+ kind === "phone" && phone ? /* @__PURE__ */ jsx("output", { className: "mt-2 block text-xs text-muted-foreground", "aria-live": "polite", children: phone }) : null
95
+ ] });
96
+ }
97
+ function SourceTextInputMatrix({ size = 36, state = "filled" }) {
98
+ return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3", children: inputKinds.map((kind) => /* @__PURE__ */ jsx(SourceTextInput, { kind, size, state }, `${kind}-${size}-${state}`)) });
99
+ }
100
+ function SourcePhoneExamples({ state = "filled" }) {
101
+ return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-3", children: [32, 36, 40].map((size) => /* @__PURE__ */ jsx(SourceTextInput, { kind: "phone", size, state }, `${size}-${state}`)) });
102
+ }
103
+ function SourceTextareaExamples() {
104
+ const t = useT();
105
+ return /* @__PURE__ */ jsx("div", { className: "grid w-full grid-cols-1 gap-6 lg:grid-cols-2", children: ["placeholder", "filled", "error", "disabled"].map((state) => /* @__PURE__ */ jsx(FormField, { label: t("design_system.gallery.samples.textInput.note"), description: t("design_system.gallery.samples.textInput.hint"), disabled: state === "disabled", error: state === "error" ? t("design_system.gallery.samples.textInput.error") : void 0, children: /* @__PURE__ */ jsx(Textarea, { appearance: "source", showCount: true, maxLength: 200, placeholder: t("design_system.gallery.samples.textInput.placeholder"), defaultValue: state === "placeholder" ? "" : t("design_system.gallery.samples.textInput.noteValue") }) }, state)) });
106
+ }
107
+ export {
108
+ SourcePhoneExamples,
109
+ SourceTextInput,
110
+ SourceTextInputMatrix,
111
+ SourceTextareaExamples
112
+ };
113
+ //# sourceMappingURL=text-inputs.js.map