@godxjp/ui 6.0.0 → 6.0.2

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 (434) hide show
  1. package/dist/app/index.d.ts +140 -0
  2. package/dist/app/index.js +38 -0
  3. package/dist/app.prop-IobwLwaM.d.ts +90 -0
  4. package/dist/checkbox-NkFkqsQ8.d.ts +13 -0
  5. package/dist/chunk-2XW7J3EI.js +226 -0
  6. package/dist/chunk-3F2AKYRD.js +416 -0
  7. package/dist/chunk-3KPEZ5CF.js +37 -0
  8. package/dist/chunk-3UGU5TYP.js +89 -0
  9. package/{src/props/registry.ts → dist/chunk-6RA3KSVK.js} +118 -133
  10. package/dist/chunk-7NZFVD24.js +122 -0
  11. package/dist/chunk-7PWBC4BY.js +25 -0
  12. package/dist/chunk-7S7MYFXE.js +61 -0
  13. package/dist/chunk-7WRZG2IG.js +71 -0
  14. package/dist/chunk-B775Y6BE.js +1 -0
  15. package/dist/chunk-BHV2FUOA.js +111 -0
  16. package/dist/chunk-BI3HERR7.js +70 -0
  17. package/dist/chunk-BPSKQUL2.js +68 -0
  18. package/dist/chunk-CDWPQ5RP.js +187 -0
  19. package/dist/chunk-CP2LET6N.js +244 -0
  20. package/dist/chunk-CQBADMFG.js +20 -0
  21. package/dist/chunk-CRERCLIZ.js +33 -0
  22. package/dist/chunk-DU6ZYZRP.js +238 -0
  23. package/dist/chunk-DY5C44UP.js +55 -0
  24. package/dist/chunk-E4HJNQ62.js +117 -0
  25. package/dist/chunk-E76QIYSY.js +93 -0
  26. package/dist/chunk-F7PG4OEV.js +37 -0
  27. package/dist/chunk-GDSVW62T.js +171 -0
  28. package/dist/chunk-H2FHJOLU.js +178 -0
  29. package/dist/chunk-HJEBRCXL.js +55 -0
  30. package/dist/chunk-ICM6XBST.js +16 -0
  31. package/{src/components/data-entry/calendar.tsx → dist/chunk-IK7I3ABN.js} +33 -35
  32. package/dist/chunk-L6J44O74.js +144 -0
  33. package/dist/chunk-LDSLS6HE.js +1 -0
  34. package/dist/chunk-LVNUHUEZ.js +191 -0
  35. package/dist/chunk-M64MVRLS.js +92 -0
  36. package/dist/chunk-NGQW3KEM.js +402 -0
  37. package/dist/chunk-NZ4FOC5N.js +559 -0
  38. package/dist/chunk-PIIRNAXA.js +26 -0
  39. package/dist/chunk-S66TJXJU.js +33 -0
  40. package/dist/chunk-SMLKNECP.js +133 -0
  41. package/dist/chunk-TAHBM3F2.js +66 -0
  42. package/dist/chunk-TO33OY4L.js +150 -0
  43. package/dist/chunk-TO7URV7U.js +51 -0
  44. package/dist/chunk-TOO5AEKL.js +81 -0
  45. package/dist/chunk-U3GHAOIJ.js +299 -0
  46. package/dist/chunk-U7N2A7A3.js +9 -0
  47. package/dist/chunk-UX634MYF.js +123 -0
  48. package/dist/chunk-V6UWJKZF.js +28 -0
  49. package/{src/components/data-entry/input.tsx → dist/chunk-VOHTRR5X.js} +18 -16
  50. package/dist/chunk-WRFKVUPW.js +332 -0
  51. package/dist/chunk-WXW43RK5.js +24 -0
  52. package/{src/components/navigation/tabs.tsx → dist/chunk-XG7XDYIM.js} +46 -53
  53. package/dist/chunk-YFCQKO3B.js +842 -0
  54. package/dist/chunk-ZDWXGWLY.js +73 -0
  55. package/dist/chunk-ZLK5SPT6.js +11 -0
  56. package/dist/chunk-ZS6DTAM2.js +31 -0
  57. package/dist/chunk-ZT5UEUBO.js +1 -0
  58. package/dist/components/admin/index.d.ts +80 -0
  59. package/dist/components/admin/index.js +38 -0
  60. package/dist/components/data-display/badge.d.ts +12 -0
  61. package/dist/components/data-display/badge.js +3 -0
  62. package/dist/components/data-display/card.d.ts +87 -0
  63. package/dist/components/data-display/card.js +2 -0
  64. package/dist/components/data-display/index.d.ts +72 -0
  65. package/dist/components/data-display/index.js +89 -0
  66. package/dist/components/data-display/popover.d.ts +13 -0
  67. package/dist/components/data-display/popover.js +2 -0
  68. package/dist/components/data-display/scroll-area.d.ts +7 -0
  69. package/dist/components/data-display/scroll-area.js +2 -0
  70. package/dist/components/data-display/table.d.ts +10 -0
  71. package/dist/components/data-display/table.js +3 -0
  72. package/dist/components/data-entry/autocomplete.d.ts +16 -0
  73. package/dist/components/data-entry/autocomplete.js +8 -0
  74. package/dist/components/data-entry/calendar.d.ts +16 -0
  75. package/dist/components/data-entry/calendar.js +4 -0
  76. package/dist/components/data-entry/cascader.d.ts +32 -0
  77. package/dist/components/data-entry/cascader.js +13 -0
  78. package/dist/components/data-entry/checkbox.d.ts +13 -0
  79. package/dist/components/data-entry/checkbox.js +4 -0
  80. package/dist/components/data-entry/color-picker.d.ts +16 -0
  81. package/dist/components/data-entry/color-picker.js +6 -0
  82. package/dist/components/data-entry/command.d.ts +69 -0
  83. package/dist/components/data-entry/command.js +3 -0
  84. package/dist/components/data-entry/date-picker.d.ts +16 -0
  85. package/dist/components/data-entry/date-picker.js +8 -0
  86. package/dist/components/data-entry/date-range-picker.d.ts +16 -0
  87. package/dist/components/data-entry/date-range-picker.js +8 -0
  88. package/dist/components/data-entry/index.d.ts +53 -0
  89. package/dist/components/data-entry/index.js +152 -0
  90. package/dist/components/data-entry/input.d.ts +6 -0
  91. package/dist/components/data-entry/input.js +2 -0
  92. package/dist/components/data-entry/label.d.ts +8 -0
  93. package/dist/components/data-entry/label.js +2 -0
  94. package/dist/components/data-entry/radio.d.ts +24 -0
  95. package/dist/components/data-entry/radio.js +4 -0
  96. package/dist/components/data-entry/select.d.ts +18 -0
  97. package/dist/components/data-entry/select.js +3 -0
  98. package/dist/components/data-entry/slider.d.ts +16 -0
  99. package/dist/components/data-entry/slider.js +2 -0
  100. package/dist/components/data-entry/switch.d.ts +17 -0
  101. package/dist/components/data-entry/switch.js +2 -0
  102. package/dist/components/data-entry/textarea.d.ts +6 -0
  103. package/dist/components/data-entry/textarea.js +3 -0
  104. package/dist/components/data-entry/time-picker.d.ts +16 -0
  105. package/dist/components/data-entry/time-picker.js +7 -0
  106. package/dist/components/data-entry/transfer.d.ts +17 -0
  107. package/dist/components/data-entry/transfer.js +11 -0
  108. package/dist/components/data-entry/tree-select.d.ts +26 -0
  109. package/dist/components/data-entry/tree-select.js +13 -0
  110. package/dist/components/data-entry/upload.d.ts +42 -0
  111. package/dist/components/data-entry/upload.js +11 -0
  112. package/dist/components/feedback/alert.d.ts +60 -0
  113. package/dist/components/feedback/alert.js +7 -0
  114. package/dist/components/feedback/dialog.d.ts +64 -0
  115. package/dist/components/feedback/dialog.js +7 -0
  116. package/dist/components/feedback/index.d.ts +16 -0
  117. package/dist/components/feedback/index.js +14 -0
  118. package/dist/components/feedback/sheet.d.ts +24 -0
  119. package/dist/components/feedback/sheet.js +2 -0
  120. package/dist/components/feedback/sonner.d.ts +6 -0
  121. package/dist/components/feedback/sonner.js +1 -0
  122. package/dist/components/general/button.d.ts +20 -0
  123. package/dist/components/general/button.js +2 -0
  124. package/dist/components/general/index.d.ts +6 -0
  125. package/dist/components/general/index.js +2 -0
  126. package/dist/components/layout/index.d.ts +71 -0
  127. package/dist/components/layout/index.js +5 -0
  128. package/dist/components/navigation/dropdown-menu.d.ts +28 -0
  129. package/dist/components/navigation/dropdown-menu.js +2 -0
  130. package/dist/components/navigation/index.d.ts +32 -0
  131. package/dist/components/navigation/index.js +12 -0
  132. package/dist/components/navigation/pagination.d.ts +11 -0
  133. package/dist/components/navigation/pagination.js +7 -0
  134. package/dist/components/navigation/steps.d.ts +12 -0
  135. package/dist/components/navigation/steps.js +3 -0
  136. package/dist/components/navigation/tabs-items.d.ts +12 -0
  137. package/dist/components/navigation/tabs-items.js +3 -0
  138. package/dist/components/navigation/tabs.d.ts +12 -0
  139. package/dist/components/navigation/tabs.js +2 -0
  140. package/dist/components/query/index.d.ts +43 -0
  141. package/dist/components/query/index.js +8 -0
  142. package/dist/components/ui/index.d.ts +57 -0
  143. package/dist/components/ui/index.js +37 -0
  144. package/{src/props/vocabulary/content.prop.ts → dist/content.prop-D1Dd3TAc.d.ts} +16 -20
  145. package/dist/data-display.prop-DNTAzmDy.d.ts +58 -0
  146. package/dist/data-entry.prop-BEGA1lTq.d.ts +323 -0
  147. package/dist/data-table-D1u_rKLK.d.ts +83 -0
  148. package/dist/data.prop-BVvfKC_g.d.ts +41 -0
  149. package/dist/feedback.prop-BmxUlpAW.d.ts +64 -0
  150. package/dist/filter-bar-B7OGFO9S.d.ts +10 -0
  151. package/dist/form/index.d.ts +21 -0
  152. package/dist/form/index.js +4 -0
  153. package/dist/form.prop-BHgpuFFm.d.ts +41 -0
  154. package/dist/format-date-ByyZoqI5.d.ts +51 -0
  155. package/dist/general.prop-D7brMPNL.d.ts +16 -0
  156. package/dist/i18n/index.d.ts +217 -0
  157. package/dist/i18n/index.js +2 -0
  158. package/dist/index.d.ts +53 -0
  159. package/dist/index.js +39 -0
  160. package/dist/inline-C5u6ptJV.d.ts +10 -0
  161. package/dist/interaction.prop-Cdn7wOtq.d.ts +25 -0
  162. package/{src/props/vocabulary/layout.prop.ts → dist/layout.prop-4TCNvyQZ.d.ts} +9 -14
  163. package/dist/layout.prop-C795F0qg.d.ts +112 -0
  164. package/dist/lib/datetime/index.d.ts +31 -0
  165. package/dist/lib/datetime/index.js +1 -0
  166. package/dist/lib/utils.d.ts +5 -0
  167. package/dist/lib/utils.js +1 -0
  168. package/dist/navigation.prop-DpZqcXey.d.ts +78 -0
  169. package/dist/navigation.prop-DxBiClEH.d.ts +20 -0
  170. package/dist/props/components/index.d.ts +27 -0
  171. package/dist/props/components/index.js +1 -0
  172. package/dist/props/index.d.ts +28 -0
  173. package/dist/props/index.js +3 -0
  174. package/dist/props/registry.d.ts +649 -0
  175. package/dist/props/registry.js +1 -0
  176. package/dist/props/vocabulary/index.d.ts +7 -0
  177. package/dist/props/vocabulary/index.js +1 -0
  178. package/dist/query.prop-hIPrk2zI.d.ts +71 -0
  179. package/dist/search-input-uP01rY1L.d.ts +22 -0
  180. package/dist/shared.prop-BNRJc9K0.d.ts +45 -0
  181. package/{src → dist}/styles/control.css +1 -1
  182. package/dist/types-mvzYGrma.d.ts +37 -0
  183. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  184. package/package.json +234 -68
  185. package/src/app/__tests__/app-provider.test.tsx +0 -232
  186. package/src/app/__tests__/date-format-labels.test.ts +0 -36
  187. package/src/app/__tests__/date-formats.test.ts +0 -44
  188. package/src/app/__tests__/timezones.test.ts +0 -65
  189. package/src/app/app-provider.tsx +0 -227
  190. package/src/app/date-format-labels.ts +0 -21
  191. package/src/app/date-formats.ts +0 -30
  192. package/src/app/index.ts +0 -40
  193. package/src/app/locales.ts +0 -32
  194. package/src/app/request-headers.ts +0 -31
  195. package/src/app/storage.ts +0 -44
  196. package/src/app/time-format-labels.ts +0 -19
  197. package/src/app/time-formats.ts +0 -15
  198. package/src/app/timezones.ts +0 -208
  199. package/src/app/types.ts +0 -39
  200. package/src/app/use-formatting.ts +0 -47
  201. package/src/components/__tests__/accessibility-primitives.test.tsx +0 -65
  202. package/src/components/__tests__/docs-parity.test.ts +0 -41
  203. package/src/components/__tests__/shadcn-release-guardrails.test.ts +0 -71
  204. package/src/components/__tests__/theme-axes-integration.test.tsx +0 -242
  205. package/src/components/admin/index.ts +0 -76
  206. package/src/components/data-display/__tests__/card-table.test.tsx +0 -328
  207. package/src/components/data-display/__tests__/data-display.test.tsx +0 -73
  208. package/src/components/data-display/__tests__/data-table.test.tsx +0 -84
  209. package/src/components/data-display/__tests__/popover.test.tsx +0 -92
  210. package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +0 -66
  211. package/src/components/data-display/badge.tsx +0 -27
  212. package/src/components/data-display/card.tsx +0 -194
  213. package/src/components/data-display/code-badge.tsx +0 -28
  214. package/src/components/data-display/collapsible.tsx +0 -5
  215. package/src/components/data-display/data-table.tsx +0 -476
  216. package/src/components/data-display/empty-state.tsx +0 -22
  217. package/src/components/data-display/index.ts +0 -41
  218. package/src/components/data-display/key-value-grid.tsx +0 -46
  219. package/src/components/data-display/popover.tsx +0 -62
  220. package/src/components/data-display/progress-meter.tsx +0 -20
  221. package/src/components/data-display/scan-panel.tsx +0 -16
  222. package/src/components/data-display/scroll-area.tsx +0 -42
  223. package/src/components/data-display/status-badge.tsx +0 -83
  224. package/src/components/data-display/table.tsx +0 -59
  225. package/src/components/data-display/timeline.tsx +0 -42
  226. package/src/components/data-display/tree-list.tsx +0 -42
  227. package/src/components/data-entry/__fixtures__/tree-options.ts +0 -80
  228. package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +0 -417
  229. package/src/components/data-entry/__tests__/checkbox-group.test.tsx +0 -40
  230. package/src/components/data-entry/__tests__/checkbox.test.tsx +0 -20
  231. package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +0 -94
  232. package/src/components/data-entry/__tests__/form-field.test.tsx +0 -49
  233. package/src/components/data-entry/__tests__/input-textarea.test.tsx +0 -38
  234. package/src/components/data-entry/__tests__/label-select.test.tsx +0 -62
  235. package/src/components/data-entry/__tests__/pickers.test.tsx +0 -74
  236. package/src/components/data-entry/__tests__/radio.test.tsx +0 -46
  237. package/src/components/data-entry/__tests__/search-input.test.tsx +0 -32
  238. package/src/components/data-entry/__tests__/switch-field.test.tsx +0 -52
  239. package/src/components/data-entry/__tests__/upload.test.tsx +0 -125
  240. package/src/components/data-entry/autocomplete.tsx +0 -91
  241. package/src/components/data-entry/cascader.tsx +0 -305
  242. package/src/components/data-entry/checkbox-group.tsx +0 -90
  243. package/src/components/data-entry/checkbox.tsx +0 -30
  244. package/src/components/data-entry/choice-field.tsx +0 -27
  245. package/src/components/data-entry/choice-option.ts +0 -20
  246. package/src/components/data-entry/color-picker.tsx +0 -75
  247. package/src/components/data-entry/command.tsx +0 -56
  248. package/src/components/data-entry/country-select.tsx +0 -88
  249. package/src/components/data-entry/date-picker.tsx +0 -69
  250. package/src/components/data-entry/date-range-picker.tsx +0 -75
  251. package/src/components/data-entry/form-field.tsx +0 -59
  252. package/src/components/data-entry/index.ts +0 -62
  253. package/src/components/data-entry/label.tsx +0 -25
  254. package/src/components/data-entry/radio.tsx +0 -109
  255. package/src/components/data-entry/search-input.tsx +0 -103
  256. package/src/components/data-entry/select.tsx +0 -149
  257. package/src/components/data-entry/slider.tsx +0 -38
  258. package/src/components/data-entry/switch-field.tsx +0 -91
  259. package/src/components/data-entry/switch.tsx +0 -24
  260. package/src/components/data-entry/textarea.tsx +0 -12
  261. package/src/components/data-entry/time-picker.tsx +0 -214
  262. package/src/components/data-entry/transfer.tsx +0 -231
  263. package/src/components/data-entry/tree-select-strategy.ts +0 -6
  264. package/src/components/data-entry/tree-select.tsx +0 -279
  265. package/src/components/data-entry/tree-utils.ts +0 -221
  266. package/src/components/data-entry/upload-crop-dialog.tsx +0 -109
  267. package/src/components/data-entry/upload-types.ts +0 -86
  268. package/src/components/data-entry/upload.tsx +0 -498
  269. package/src/components/data-entry/use-upload-draft.ts +0 -93
  270. package/src/components/feedback/__tests__/alert.test.tsx +0 -127
  271. package/src/components/feedback/__tests__/dialog.test.tsx +0 -290
  272. package/src/components/feedback/__tests__/sheet.test.tsx +0 -94
  273. package/src/components/feedback/__tests__/skeleton.test.tsx +0 -25
  274. package/src/components/feedback/__tests__/toast.test.tsx +0 -52
  275. package/src/components/feedback/alert.tsx +0 -167
  276. package/src/components/feedback/dialog.tsx +0 -325
  277. package/src/components/feedback/index.ts +0 -53
  278. package/src/components/feedback/sheet.tsx +0 -130
  279. package/src/components/feedback/skeleton.tsx +0 -95
  280. package/src/components/feedback/sonner.tsx +0 -54
  281. package/src/components/feedback/toaster.tsx +0 -1
  282. package/src/components/feedback/use-toast.ts +0 -62
  283. package/src/components/general/__tests__/button.test.tsx +0 -71
  284. package/src/components/general/button.tsx +0 -61
  285. package/src/components/general/index.ts +0 -2
  286. package/src/components/layout/__tests__/page-container.test.tsx +0 -69
  287. package/src/components/layout/__tests__/page-inset.test.tsx +0 -14
  288. package/src/components/layout/__tests__/stack-inline.test.tsx +0 -39
  289. package/src/components/layout/app-shell.tsx +0 -42
  290. package/src/components/layout/breadcrumb.tsx +0 -35
  291. package/src/components/layout/index.ts +0 -31
  292. package/src/components/layout/inline.tsx +0 -13
  293. package/src/components/layout/menu.tsx +0 -34
  294. package/src/components/layout/mobile-frame.tsx +0 -57
  295. package/src/components/layout/page-container.tsx +0 -81
  296. package/src/components/layout/page-inset.tsx +0 -16
  297. package/src/components/layout/responsive-grid.tsx +0 -14
  298. package/src/components/layout/shell-app.tsx +0 -30
  299. package/src/components/layout/sidebar.tsx +0 -98
  300. package/src/components/layout/split-pane.tsx +0 -16
  301. package/src/components/layout/stack.tsx +0 -13
  302. package/src/components/layout/topbar.tsx +0 -108
  303. package/src/components/navigation/__tests__/app-pickers.test.tsx +0 -118
  304. package/src/components/navigation/__tests__/dropdown-menu.test.tsx +0 -104
  305. package/src/components/navigation/__tests__/navigation.test.tsx +0 -61
  306. package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +0 -76
  307. package/src/components/navigation/date-format-picker.tsx +0 -55
  308. package/src/components/navigation/dropdown-menu.tsx +0 -190
  309. package/src/components/navigation/filter-bar.tsx +0 -38
  310. package/src/components/navigation/index.ts +0 -28
  311. package/src/components/navigation/locale-picker.tsx +0 -49
  312. package/src/components/navigation/page-header.tsx +0 -50
  313. package/src/components/navigation/pagination-utils.ts +0 -35
  314. package/src/components/navigation/pagination.tsx +0 -168
  315. package/src/components/navigation/steps.tsx +0 -163
  316. package/src/components/navigation/tabs-items.tsx +0 -69
  317. package/src/components/navigation/time-format-picker.tsx +0 -55
  318. package/src/components/navigation/timezone-picker.tsx +0 -63
  319. package/src/components/query/__tests__/data-state.test.tsx +0 -214
  320. package/src/components/query/__tests__/infinite-prefetch.test.tsx +0 -105
  321. package/src/components/query/__tests__/query-helpers.test.tsx +0 -61
  322. package/src/components/query/data-state.tsx +0 -58
  323. package/src/components/query/index.ts +0 -10
  324. package/src/components/query/infinite-query-state.tsx +0 -99
  325. package/src/components/query/mutation-feedback.tsx +0 -31
  326. package/src/components/query/prefetch-link.tsx +0 -45
  327. package/src/components/query/query-refetch-button.tsx +0 -41
  328. package/src/components/ui/alert-dialog.tsx +0 -1
  329. package/src/components/ui/alert.tsx +0 -1
  330. package/src/components/ui/autocomplete.tsx +0 -1
  331. package/src/components/ui/badge.tsx +0 -1
  332. package/src/components/ui/button.tsx +0 -1
  333. package/src/components/ui/calendar.tsx +0 -1
  334. package/src/components/ui/card.tsx +0 -1
  335. package/src/components/ui/checkbox.tsx +0 -1
  336. package/src/components/ui/color-picker.tsx +0 -1
  337. package/src/components/ui/command.tsx +0 -1
  338. package/src/components/ui/date-picker.tsx +0 -1
  339. package/src/components/ui/date-range-picker.tsx +0 -1
  340. package/src/components/ui/dialog.tsx +0 -1
  341. package/src/components/ui/dropdown-menu.tsx +0 -1
  342. package/src/components/ui/index.tsx +0 -31
  343. package/src/components/ui/input.tsx +0 -1
  344. package/src/components/ui/label.tsx +0 -1
  345. package/src/components/ui/pagination.tsx +0 -1
  346. package/src/components/ui/popover.tsx +0 -1
  347. package/src/components/ui/radio.tsx +0 -1
  348. package/src/components/ui/scroll-area.tsx +0 -1
  349. package/src/components/ui/select.tsx +0 -1
  350. package/src/components/ui/sheet.tsx +0 -1
  351. package/src/components/ui/slider.tsx +0 -1
  352. package/src/components/ui/sonner.tsx +0 -1
  353. package/src/components/ui/switch.tsx +0 -1
  354. package/src/components/ui/table.tsx +0 -1
  355. package/src/components/ui/tabs-items.tsx +0 -1
  356. package/src/components/ui/tabs.tsx +0 -1
  357. package/src/components/ui/textarea.tsx +0 -1
  358. package/src/components/ui/time-picker.tsx +0 -1
  359. package/src/components/ui/upload.tsx +0 -1
  360. package/src/form/__tests__/use-zod-form.test.tsx +0 -97
  361. package/src/form/form-field-control.tsx +0 -44
  362. package/src/form/form-root.tsx +0 -29
  363. package/src/form/index.ts +0 -7
  364. package/src/form/use-zod-form.ts +0 -29
  365. package/src/i18n/__tests__/translate.test.ts +0 -23
  366. package/src/i18n/index.ts +0 -9
  367. package/src/i18n/messages/en.json +0 -171
  368. package/src/i18n/messages/ja.json +0 -171
  369. package/src/i18n/messages/vi.json +0 -171
  370. package/src/i18n/translate.ts +0 -74
  371. package/src/i18n/use-translation.ts +0 -53
  372. package/src/index.ts +0 -3
  373. package/src/lib/__tests__/control-styles.test.ts +0 -78
  374. package/src/lib/__tests__/datetime.test.ts +0 -77
  375. package/src/lib/__tests__/format-date.test.ts +0 -97
  376. package/src/lib/__tests__/format.test.ts +0 -62
  377. package/src/lib/__tests__/theme-tokens-audit.test.ts +0 -176
  378. package/src/lib/__tests__/theme-tokens-css.test.ts +0 -118
  379. package/src/lib/__tests__/token-governance.test.ts +0 -191
  380. package/src/lib/__tests__/variants.test.ts +0 -18
  381. package/src/lib/control-styles.ts +0 -33
  382. package/src/lib/datetime/detect.ts +0 -25
  383. package/src/lib/datetime/format-date.ts +0 -100
  384. package/src/lib/datetime/format.ts +0 -140
  385. package/src/lib/datetime/index.ts +0 -25
  386. package/src/lib/datetime/parse.ts +0 -51
  387. package/src/lib/datetime/sync.ts +0 -48
  388. package/src/lib/format.ts +0 -114
  389. package/src/lib/hooks.ts +0 -54
  390. package/src/lib/utils.ts +0 -6
  391. package/src/lib/variants.ts +0 -40
  392. package/src/props/components/app.prop.ts +0 -99
  393. package/src/props/components/data-display.prop.ts +0 -73
  394. package/src/props/components/data-entry.prop.ts +0 -334
  395. package/src/props/components/feedback.prop.ts +0 -80
  396. package/src/props/components/form.prop.ts +0 -46
  397. package/src/props/components/general.prop.ts +0 -18
  398. package/src/props/components/index.ts +0 -99
  399. package/src/props/components/layout.prop.ts +0 -130
  400. package/src/props/components/navigation.prop.ts +0 -88
  401. package/src/props/components/query.prop.ts +0 -94
  402. package/src/props/index.ts +0 -17
  403. package/src/props/vocabulary/data.prop.ts +0 -46
  404. package/src/props/vocabulary/index.ts +0 -73
  405. package/src/props/vocabulary/interaction.prop.ts +0 -42
  406. package/src/props/vocabulary/navigation.prop.ts +0 -19
  407. package/src/props/vocabulary/shared.prop.ts +0 -59
  408. package/src/test/__tests__/render-loop-guard.test.tsx +0 -38
  409. package/src/test/jest-dom.d.ts +0 -4
  410. package/src/test/render-loop-guard.tsx +0 -50
  411. package/src/test/render.tsx +0 -29
  412. package/src/test/theme-globals.test.ts +0 -77
  413. package/src/test/theme-globals.ts +0 -134
  414. package/src/test/theme-test-utils.tsx +0 -67
  415. /package/{src → dist}/styles/alert-layout.css +0 -0
  416. /package/{src → dist}/styles/badge-layout.css +0 -0
  417. /package/{src → dist}/styles/card-layout.css +0 -0
  418. /package/{src → dist}/styles/data-display-layout.css +0 -0
  419. /package/{src → dist}/styles/density.css +0 -0
  420. /package/{src → dist}/styles/dialog-layout.css +0 -0
  421. /package/{src → dist}/styles/index.css +0 -0
  422. /package/{src → dist}/styles/layout.css +0 -0
  423. /package/{src → dist}/styles/shell-layout.css +0 -0
  424. /package/{src → dist}/styles/table-layout.css +0 -0
  425. /package/{src → dist}/theme/example.service.css +0 -0
  426. /package/{src → dist}/tokens/base.css +0 -0
  427. /package/{src → dist}/tokens/foundation.css +0 -0
  428. /package/{src → dist}/tokens/primitives/badge.css +0 -0
  429. /package/{src → dist}/tokens/primitives/card.css +0 -0
  430. /package/{src → dist}/tokens/primitives/control.css +0 -0
  431. /package/{src → dist}/tokens/primitives/feedback.css +0 -0
  432. /package/{src → dist}/tokens/primitives/layout.css +0 -0
  433. /package/{src → dist}/tokens/primitives/navigation.css +0 -0
  434. /package/{src → dist}/tokens/primitives/table.css +0 -0
@@ -1,73 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { Inbox } from "lucide-react";
3
- import { renderWithUi, screen } from "@/test/render";
4
- import { EmptyState } from "../empty-state";
5
- import { Button } from "../../general/button";
6
- import { Badge } from "../badge";
7
- import { KeyValueGrid } from "../key-value-grid";
8
- import { StatusBadge } from "../status-badge";
9
-
10
- describe("EmptyState", () => {
11
- it("renders title and description", () => {
12
- renderWithUi(<EmptyState title="No data" description="Try changing filters" />);
13
- expect(screen.getByRole("heading", { level: 3, name: "No data" })).toBeInTheDocument();
14
- expect(screen.getByText("Try changing filters")).toBeInTheDocument();
15
- });
16
-
17
- it("renders icon and action", () => {
18
- renderWithUi(<EmptyState icon={Inbox} title="Empty" action={<Button>Add</Button>} />);
19
- expect(screen.getByRole("button", { name: "Add" })).toBeInTheDocument();
20
- });
21
- });
22
-
23
- describe("Badge", () => {
24
- it("renders children", () => {
25
- renderWithUi(<Badge>New</Badge>);
26
- expect(screen.getByText("New")).toBeInTheDocument();
27
- });
28
-
29
- it("success variant uses semantic success token (not green-*)", () => {
30
- renderWithUi(<Badge variant="success">OK</Badge>);
31
- const el = screen.getByText("OK");
32
- expect(el.className).toContain("success");
33
- expect(el.className).not.toMatch(/green-/);
34
- });
35
- });
36
-
37
- describe("KeyValueGrid", () => {
38
- it("renders label/value pairs via Item children", () => {
39
- renderWithUi(
40
- <KeyValueGrid>
41
- <KeyValueGrid.Item label="ID">01HF</KeyValueGrid.Item>
42
- <KeyValueGrid.Item label="Status">active</KeyValueGrid.Item>
43
- </KeyValueGrid>,
44
- );
45
- expect(screen.getByText("ID")).toBeInTheDocument();
46
- expect(screen.getByText("01HF")).toBeInTheDocument();
47
- expect(screen.getByText("Status")).toBeInTheDocument();
48
- });
49
- });
50
-
51
- describe("StatusBadge", () => {
52
- it("maps known status to label", () => {
53
- renderWithUi(<StatusBadge status="pending" />);
54
- expect(screen.getByText("Chờ xử lý")).toBeInTheDocument();
55
- });
56
-
57
- it("pending tone uses warning token on root badge element", () => {
58
- renderWithUi(<StatusBadge status="pending" />);
59
- const text = screen.getByText("Chờ xử lý");
60
- expect(text.parentElement?.className).toContain("warning");
61
- });
62
-
63
- it("scheduled tone uses info token on root badge element", () => {
64
- renderWithUi(<StatusBadge status="scheduled" />);
65
- const text = screen.getByText("Đã lên lịch");
66
- expect(text.parentElement?.className).toContain("info");
67
- });
68
-
69
- it("falls back for unknown status", () => {
70
- renderWithUi(<StatusBadge status="custom_unknown_xyz" />);
71
- expect(screen.getByText("custom_unknown_xyz")).toBeInTheDocument();
72
- });
73
- });
@@ -1,84 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { renderWithUi, screen, userEvent } from "@/test/render";
3
- import { DataTable } from "../data-table";
4
-
5
- type Row = { id: string; name: string; status: string };
6
-
7
- const rows: Row[] = [
8
- { id: "1", name: "Mai Nguyen", status: "active" },
9
- { id: "2", name: "Ken Tanaka", status: "pending" },
10
- ];
11
-
12
- const columns = [
13
- { key: "name", header: "Khách hàng" },
14
- { key: "status", header: "Trạng thái" },
15
- ] as const;
16
-
17
- describe("DataTable", () => {
18
- it("renders column headers and row data", () => {
19
- renderWithUi(<DataTable data={rows} columns={[...columns]} getRowId={(row) => row.id} />);
20
- expect(screen.getByRole("columnheader", { name: "Khách hàng" })).toBeInTheDocument();
21
- expect(screen.getByText("Mai Nguyen")).toBeInTheDocument();
22
- expect(screen.getByText("Ken Tanaka")).toBeInTheDocument();
23
- });
24
-
25
- it("applies ui-density class wrapper for token-based row height", () => {
26
- const { container } = renderWithUi(
27
- <DataTable data={rows} columns={[...columns]} getRowId={(row) => row.id} density="compact" />,
28
- );
29
- expect(container.querySelector(".ui-density-compact")).toBeInTheDocument();
30
- });
31
-
32
- it("supports row selection when selectable", async () => {
33
- const user = userEvent.setup();
34
- const onSelectChange = vi.fn();
35
- renderWithUi(
36
- <DataTable
37
- data={rows}
38
- columns={[...columns]}
39
- getRowId={(row) => row.id}
40
- selectable
41
- selected={new Set()}
42
- onSelectChange={onSelectChange}
43
- />,
44
- );
45
- const rowCheckbox = screen.getAllByRole("checkbox", { name: /chọn dòng/i })[0];
46
- await user.click(rowCheckbox);
47
- expect(onSelectChange).toHaveBeenCalledWith(new Set(["1"]));
48
- });
49
-
50
- it("calls onRowClick when row is clicked", async () => {
51
- const user = userEvent.setup();
52
- const onRowClick = vi.fn();
53
- renderWithUi(
54
- <DataTable
55
- data={rows}
56
- columns={[...columns]}
57
- getRowId={(row) => row.id}
58
- onRowClick={onRowClick}
59
- />,
60
- );
61
- await user.click(screen.getByText("Mai Nguyen"));
62
- expect(onRowClick).toHaveBeenCalledWith(rows[0]);
63
- });
64
-
65
- it("shows bulk actions when rows selected", () => {
66
- renderWithUi(
67
- <DataTable
68
- data={rows}
69
- columns={[...columns]}
70
- getRowId={(row) => row.id}
71
- selectable
72
- selected={new Set(["1"])}
73
- >
74
- <DataTable.Toolbar>
75
- <DataTable.BulkActions>
76
- <button type="button">Xóa</button>
77
- </DataTable.BulkActions>
78
- </DataTable.Toolbar>
79
- </DataTable>,
80
- );
81
- expect(screen.getByRole("region", { name: /thao tác hàng loạt/i })).toBeInTheDocument();
82
- expect(screen.getByRole("button", { name: "Xóa" })).toBeInTheDocument();
83
- });
84
- });
@@ -1,92 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import * as React from "react";
3
- import { renderWithUi, screen, userEvent } from "@/test/render";
4
- import { Button } from "../../general/button";
5
- import {
6
- Popover,
7
- PopoverContent,
8
- PopoverDescription,
9
- PopoverHeader,
10
- PopoverTitle,
11
- PopoverTrigger,
12
- } from "../popover";
13
-
14
- describe("Popover", () => {
15
- it("shows content when trigger is clicked", async () => {
16
- const user = userEvent.setup();
17
- renderWithUi(
18
- <Popover>
19
- <PopoverTrigger asChild>
20
- <Button type="button">Mở popover</Button>
21
- </PopoverTrigger>
22
- <PopoverContent>Lọc HAWB nâng cao</PopoverContent>
23
- </Popover>,
24
- );
25
- await user.click(screen.getByRole("button", { name: "Mở popover" }));
26
- expect(screen.getByText("Lọc HAWB nâng cao")).toHaveAttribute("data-slot", "popover-content");
27
- });
28
-
29
- it("closes when pressing Escape", async () => {
30
- const user = userEvent.setup();
31
- renderWithUi(
32
- <Popover>
33
- <PopoverTrigger asChild>
34
- <Button type="button">Mở popover</Button>
35
- </PopoverTrigger>
36
- <PopoverContent>Lọc HAWB nâng cao</PopoverContent>
37
- </Popover>,
38
- );
39
- await user.click(screen.getByRole("button", { name: "Mở popover" }));
40
- expect(screen.getByText("Lọc HAWB nâng cao")).toBeInTheDocument();
41
- await user.keyboard("{Escape}");
42
- expect(screen.queryByText("Lọc HAWB nâng cao")).not.toBeInTheDocument();
43
- });
44
-
45
- it("calls onOpenChange in controlled mode", async () => {
46
- const user = userEvent.setup();
47
- const onOpenChange = vi.fn();
48
-
49
- function Demo() {
50
- const [open, setOpen] = React.useState(false);
51
- return (
52
- <Popover
53
- open={open}
54
- onOpenChange={(next) => {
55
- setOpen(next);
56
- onOpenChange(next);
57
- }}
58
- >
59
- <PopoverTrigger asChild>
60
- <Button type="button">Controlled</Button>
61
- </PopoverTrigger>
62
- <PopoverContent>Panel</PopoverContent>
63
- </Popover>
64
- );
65
- }
66
-
67
- renderWithUi(<Demo />);
68
- await user.click(screen.getByRole("button", { name: "Controlled" }));
69
- expect(onOpenChange).toHaveBeenCalledWith(true);
70
- expect(screen.getByText("Panel")).toBeInTheDocument();
71
- });
72
-
73
- it("renders shadcn header slots", async () => {
74
- const user = userEvent.setup();
75
- renderWithUi(
76
- <Popover>
77
- <PopoverTrigger asChild>
78
- <Button type="button">Details</Button>
79
- </PopoverTrigger>
80
- <PopoverContent>
81
- <PopoverHeader>
82
- <PopoverTitle>Title</PopoverTitle>
83
- <PopoverDescription>Description</PopoverDescription>
84
- </PopoverHeader>
85
- </PopoverContent>
86
- </Popover>,
87
- );
88
- await user.click(screen.getByRole("button", { name: "Details" }));
89
- expect(screen.getByText("Title")).toHaveAttribute("data-slot", "popover-title");
90
- expect(screen.getByText("Description")).toHaveAttribute("data-slot", "popover-description");
91
- });
92
- });
@@ -1,66 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import * as React from "react";
3
- import { renderWithUi, screen, userEvent } from "@/test/render";
4
- import { Button } from "../../general/button";
5
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible";
6
- import { ScrollArea } from "../scroll-area";
7
-
8
- describe("ScrollArea", () => {
9
- it("renders scrollable content", () => {
10
- renderWithUi(
11
- <ScrollArea className="h-24 w-48">
12
- <div>
13
- {Array.from({ length: 20 }, (_, i) => (
14
- <p key={i}>Dòng {i + 1}</p>
15
- ))}
16
- </div>
17
- </ScrollArea>,
18
- );
19
- expect(screen.getByText("Dòng 1")).toBeInTheDocument();
20
- expect(screen.getByText("Dòng 20")).toBeInTheDocument();
21
- });
22
- });
23
-
24
- describe("Collapsible", () => {
25
- it("toggles content visibility", async () => {
26
- const user = userEvent.setup();
27
- renderWithUi(
28
- <Collapsible>
29
- <CollapsibleTrigger asChild>
30
- <Button type="button">Mở rộng</Button>
31
- </CollapsibleTrigger>
32
- <CollapsibleContent>Chi tiết lô hàng GX-001</CollapsibleContent>
33
- </Collapsible>,
34
- );
35
-
36
- expect(screen.queryByText("Chi tiết lô hàng GX-001")).not.toBeInTheDocument();
37
- await user.click(screen.getByRole("button", { name: "Mở rộng" }));
38
- expect(screen.getByText("Chi tiết lô hàng GX-001")).toBeInTheDocument();
39
- await user.click(screen.getByRole("button", { name: "Mở rộng" }));
40
- expect(screen.queryByText("Chi tiết lô hàng GX-001")).not.toBeInTheDocument();
41
- });
42
-
43
- it("supports controlled open state", async () => {
44
- const user = userEvent.setup();
45
- function Demo() {
46
- const [open, setOpen] = React.useState(false);
47
- return (
48
- <>
49
- <Button type="button" onClick={() => setOpen(true)}>
50
- Mở ngoài
51
- </Button>
52
- <Collapsible open={open} onOpenChange={setOpen}>
53
- <CollapsibleTrigger asChild>
54
- <Button type="button">Trigger</Button>
55
- </CollapsibleTrigger>
56
- <CollapsibleContent>Nội dung controlled</CollapsibleContent>
57
- </Collapsible>
58
- </>
59
- );
60
- }
61
-
62
- renderWithUi(<Demo />);
63
- await user.click(screen.getByRole("button", { name: "Mở ngoài" }));
64
- expect(screen.getByText("Nội dung controlled")).toBeInTheDocument();
65
- });
66
- });
@@ -1,27 +0,0 @@
1
- import { cva, type VariantProps } from "class-variance-authority";
2
- import { cn } from "../../lib/utils";
3
- import { toneSuccessClass, toneWarningClass } from "../../lib/control-styles";
4
-
5
- const badgeVariants = cva(
6
- "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring",
7
- {
8
- variants: {
9
- variant: {
10
- default: "border-transparent bg-primary text-primary-foreground",
11
- secondary: "border-transparent bg-secondary text-secondary-foreground",
12
- destructive: "border-transparent bg-destructive text-destructive-foreground",
13
- outline: "text-foreground",
14
- success: cn("border-transparent", toneSuccessClass),
15
- warning: cn("border-transparent", toneWarningClass),
16
- },
17
- },
18
- defaultVariants: { variant: "default" },
19
- },
20
- );
21
-
22
- export interface BadgeProps
23
- extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}
24
-
25
- export function Badge({ className, variant, ...props }: BadgeProps) {
26
- return <div className={cn(badgeVariants({ variant }), className)} {...props} />;
27
- }
@@ -1,194 +0,0 @@
1
- import * as React from "react";
2
- import { cva, type VariantProps } from "class-variance-authority";
3
-
4
- import { cn } from "../../lib/utils";
5
-
6
- type CardSize = "default" | "compact";
7
- /** Semantic 3px left-edge accent stripe. */
8
- type CardAccent = "primary" | "success" | "warning" | "info" | "attention" | "destructive";
9
- /** Surface fill — plain card, muted band, borderless outline, or emphasized featured ring. */
10
- type CardVariant = "default" | "muted" | "outline" | "featured";
11
- /** Padding density — base 16px · tight 12px · cozy 20px. */
12
- type CardDensity = "tight" | "cozy";
13
-
14
- const cardVariants = cva("group/card border", {
15
- variants: {
16
- size: {
17
- default: "",
18
- compact: "",
19
- },
20
- },
21
- defaultVariants: { size: "default" },
22
- });
23
-
24
- export type CardProps = React.HTMLAttributes<HTMLDivElement> &
25
- VariantProps<typeof cardVariants> & {
26
- size?: CardSize;
27
- accent?: CardAccent;
28
- variant?: CardVariant;
29
- density?: CardDensity;
30
- };
31
-
32
- export const Card = React.forwardRef<HTMLDivElement, CardProps>(
33
- ({ className, size = "default", accent, variant, density, ...props }, ref) => (
34
- <div
35
- ref={ref}
36
- className={cn(cardVariants({ size }), className)}
37
- data-slot="card"
38
- data-size={size === "compact" ? "compact" : undefined}
39
- data-accent={accent}
40
- data-variant={variant && variant !== "default" ? variant : undefined}
41
- data-density={density}
42
- {...props}
43
- />
44
- ),
45
- );
46
- Card.displayName = "Card";
47
-
48
- /** Full-bleed cover media — first child; header below uses section top (φ⁰), not shell. */
49
- export type CardCoverProps = React.HTMLAttributes<HTMLDivElement>;
50
-
51
- export const CardCover = React.forwardRef<HTMLDivElement, CardCoverProps>(
52
- ({ className, ...props }, ref) => (
53
- <div ref={ref} data-slot="card-cover" className={cn("ui-card-cover", className)} {...props} />
54
- ),
55
- );
56
- CardCover.displayName = "CardCover";
57
-
58
- export type CardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {
59
- /** Muted background + border-bottom — section band (mirror footer `separated`). */
60
- banded?: boolean;
61
- };
62
-
63
- export const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(
64
- ({ className, banded, ...props }, ref) => (
65
- <div
66
- ref={ref}
67
- data-slot="card-header"
68
- data-banded={banded ? "" : undefined}
69
- className={cn(banded && "ui-card-header--banded", className)}
70
- {...props}
71
- />
72
- ),
73
- );
74
- CardHeader.displayName = "CardHeader";
75
-
76
- export const CardTitle = React.forwardRef<
77
- HTMLHeadingElement,
78
- React.HTMLAttributes<HTMLHeadingElement>
79
- >(({ className, children, ...props }, ref) => (
80
- <h3 ref={ref} data-slot="card-title" className={className} {...props}>
81
- {children}
82
- </h3>
83
- ));
84
- CardTitle.displayName = "CardTitle";
85
-
86
- export const CardDescription = React.forwardRef<
87
- HTMLParagraphElement,
88
- React.HTMLAttributes<HTMLParagraphElement>
89
- >(({ className, ...props }, ref) => (
90
- <p ref={ref} data-slot="card-description" className={className} {...props} />
91
- ));
92
- CardDescription.displayName = "CardDescription";
93
-
94
- export type CardContentProps = React.HTMLAttributes<HTMLDivElement> & {
95
- /** Edge-to-edge body (tables, tabs list). Horizontal padding removed. */
96
- flush?: boolean;
97
- /** No gap after header — pair with tabs / flush toolbar. */
98
- tight?: boolean;
99
- /** No header above — top padding matches card shell. */
100
- solo?: boolean;
101
- };
102
-
103
- export const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(
104
- ({ className, flush, tight, solo, ...props }, ref) => (
105
- <div
106
- ref={ref}
107
- data-slot="card-content"
108
- data-flush={flush ? "" : undefined}
109
- data-tight={tight ? "" : undefined}
110
- data-solo={solo ? "" : undefined}
111
- className={className}
112
- {...props}
113
- />
114
- ),
115
- );
116
- CardContent.displayName = "CardContent";
117
-
118
- export type CardFooterProps = React.HTMLAttributes<HTMLDivElement> & {
119
- /** Top border + symmetric action band — form Save/Cancel, table summary. */
120
- separated?: boolean;
121
- /** Full-bleed footer (Ant Design `actions` bar). */
122
- flush?: boolean;
123
- };
124
-
125
- export const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(
126
- ({ className, separated, flush, ...props }, ref) => (
127
- <div
128
- ref={ref}
129
- data-slot="card-footer"
130
- data-separated={separated ? "" : undefined}
131
- data-flush={flush ? "" : undefined}
132
- className={className}
133
- {...props}
134
- />
135
- ),
136
- );
137
- CardFooter.displayName = "CardFooter";
138
-
139
- export type CardStatProps = React.HTMLAttributes<HTMLDivElement> &
140
- VariantProps<typeof cardVariants> & {
141
- label: React.ReactNode;
142
- value: React.ReactNode;
143
- hint?: React.ReactNode;
144
- /** Optional compact trend text beside the value. Avoid badge-like deltas. */
145
- delta?: React.ReactNode;
146
- /** KPI layout: stacked = design default, inline = label left / value right. */
147
- layout?: "stacked" | "inline";
148
- /** Align the metric group. */
149
- align?: "start" | "end";
150
- };
151
-
152
- /** KPI / stat tile — token-driven layout aligned to dashboard KPI cards. */
153
- export function CardStat({
154
- label,
155
- value,
156
- hint,
157
- delta,
158
- layout = "stacked",
159
- align = "start",
160
- className,
161
- size = "compact",
162
- ...props
163
- }: CardStatProps) {
164
- return (
165
- <Card
166
- size={size ?? "compact"}
167
- className={className}
168
- data-stat-card=""
169
- data-stat-layout={layout}
170
- data-stat-align={align}
171
- {...props}
172
- >
173
- <div data-slot="card-stat-body">
174
- <div data-slot="card-stat-label">{label}</div>
175
- {hint && layout === "inline" ? <div data-slot="card-stat-hint">{hint}</div> : null}
176
- </div>
177
- <div>
178
- <div data-slot="card-stat-value-row">
179
- <span data-slot="card-stat-value">{value}</span>
180
- {delta ? <span data-slot="card-stat-delta">{delta}</span> : null}
181
- </div>
182
- {hint && layout !== "inline" ? <div data-slot="card-stat-hint">{hint}</div> : null}
183
- </div>
184
- </Card>
185
- );
186
- }
187
-
188
- /** Header actions slot — pair with `CardHeader className="flex flex-row …"`. */
189
- export const CardAction = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
190
- ({ className, ...props }, ref) => (
191
- <div ref={ref} data-slot="card-action" className={className} {...props} />
192
- ),
193
- );
194
- CardAction.displayName = "CardAction";
@@ -1,28 +0,0 @@
1
- import type { ComponentType, SVGProps } from "react";
2
- import { Hash, ShoppingBag, Truck } from "lucide-react";
3
-
4
- export type CodeBadgeKind = "internal" | "seller" | "yamato";
5
-
6
- export type CodeBadgeProps = {
7
- kind: CodeBadgeKind;
8
- value: string;
9
- };
10
-
11
- const codeBadgeConfig = {
12
- internal: { label: "INT", icon: Hash },
13
- seller: { label: "SLR", icon: ShoppingBag },
14
- yamato: { label: "YMT", icon: Truck },
15
- } satisfies Record<CodeBadgeKind, { label: string; icon: ComponentType<SVGProps<SVGSVGElement>> }>;
16
-
17
- export function CodeBadge({ kind, value }: CodeBadgeProps) {
18
- const config = codeBadgeConfig[kind] ?? codeBadgeConfig.internal;
19
- const Icon = config.icon;
20
-
21
- return (
22
- <span className="ui-code-badge" data-kind={kind}>
23
- <span className="ui-code-badge-label">{config.label}</span>
24
- <Icon aria-hidden="true" />
25
- <span className="ui-code-badge-value">{value}</span>
26
- </span>
27
- );
28
- }
@@ -1,5 +0,0 @@
1
- import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
2
-
3
- export const Collapsible = CollapsiblePrimitive.Root;
4
- export const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;
5
- export const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;