@godxjp/ui 6.0.0 → 6.0.1

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/dist/types-mvzYGrma.d.ts +37 -0
  182. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  183. package/package.json +233 -67
  184. package/src/app/__tests__/app-provider.test.tsx +0 -232
  185. package/src/app/__tests__/date-format-labels.test.ts +0 -36
  186. package/src/app/__tests__/date-formats.test.ts +0 -44
  187. package/src/app/__tests__/timezones.test.ts +0 -65
  188. package/src/app/app-provider.tsx +0 -227
  189. package/src/app/date-format-labels.ts +0 -21
  190. package/src/app/date-formats.ts +0 -30
  191. package/src/app/index.ts +0 -40
  192. package/src/app/locales.ts +0 -32
  193. package/src/app/request-headers.ts +0 -31
  194. package/src/app/storage.ts +0 -44
  195. package/src/app/time-format-labels.ts +0 -19
  196. package/src/app/time-formats.ts +0 -15
  197. package/src/app/timezones.ts +0 -208
  198. package/src/app/types.ts +0 -39
  199. package/src/app/use-formatting.ts +0 -47
  200. package/src/components/__tests__/accessibility-primitives.test.tsx +0 -65
  201. package/src/components/__tests__/docs-parity.test.ts +0 -41
  202. package/src/components/__tests__/shadcn-release-guardrails.test.ts +0 -71
  203. package/src/components/__tests__/theme-axes-integration.test.tsx +0 -242
  204. package/src/components/admin/index.ts +0 -76
  205. package/src/components/data-display/__tests__/card-table.test.tsx +0 -328
  206. package/src/components/data-display/__tests__/data-display.test.tsx +0 -73
  207. package/src/components/data-display/__tests__/data-table.test.tsx +0 -84
  208. package/src/components/data-display/__tests__/popover.test.tsx +0 -92
  209. package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +0 -66
  210. package/src/components/data-display/badge.tsx +0 -27
  211. package/src/components/data-display/card.tsx +0 -194
  212. package/src/components/data-display/code-badge.tsx +0 -28
  213. package/src/components/data-display/collapsible.tsx +0 -5
  214. package/src/components/data-display/data-table.tsx +0 -476
  215. package/src/components/data-display/empty-state.tsx +0 -22
  216. package/src/components/data-display/index.ts +0 -41
  217. package/src/components/data-display/key-value-grid.tsx +0 -46
  218. package/src/components/data-display/popover.tsx +0 -62
  219. package/src/components/data-display/progress-meter.tsx +0 -20
  220. package/src/components/data-display/scan-panel.tsx +0 -16
  221. package/src/components/data-display/scroll-area.tsx +0 -42
  222. package/src/components/data-display/status-badge.tsx +0 -83
  223. package/src/components/data-display/table.tsx +0 -59
  224. package/src/components/data-display/timeline.tsx +0 -42
  225. package/src/components/data-display/tree-list.tsx +0 -42
  226. package/src/components/data-entry/__fixtures__/tree-options.ts +0 -80
  227. package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +0 -417
  228. package/src/components/data-entry/__tests__/checkbox-group.test.tsx +0 -40
  229. package/src/components/data-entry/__tests__/checkbox.test.tsx +0 -20
  230. package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +0 -94
  231. package/src/components/data-entry/__tests__/form-field.test.tsx +0 -49
  232. package/src/components/data-entry/__tests__/input-textarea.test.tsx +0 -38
  233. package/src/components/data-entry/__tests__/label-select.test.tsx +0 -62
  234. package/src/components/data-entry/__tests__/pickers.test.tsx +0 -74
  235. package/src/components/data-entry/__tests__/radio.test.tsx +0 -46
  236. package/src/components/data-entry/__tests__/search-input.test.tsx +0 -32
  237. package/src/components/data-entry/__tests__/switch-field.test.tsx +0 -52
  238. package/src/components/data-entry/__tests__/upload.test.tsx +0 -125
  239. package/src/components/data-entry/autocomplete.tsx +0 -91
  240. package/src/components/data-entry/cascader.tsx +0 -305
  241. package/src/components/data-entry/checkbox-group.tsx +0 -90
  242. package/src/components/data-entry/checkbox.tsx +0 -30
  243. package/src/components/data-entry/choice-field.tsx +0 -27
  244. package/src/components/data-entry/choice-option.ts +0 -20
  245. package/src/components/data-entry/color-picker.tsx +0 -75
  246. package/src/components/data-entry/command.tsx +0 -56
  247. package/src/components/data-entry/country-select.tsx +0 -88
  248. package/src/components/data-entry/date-picker.tsx +0 -69
  249. package/src/components/data-entry/date-range-picker.tsx +0 -75
  250. package/src/components/data-entry/form-field.tsx +0 -59
  251. package/src/components/data-entry/index.ts +0 -62
  252. package/src/components/data-entry/label.tsx +0 -25
  253. package/src/components/data-entry/radio.tsx +0 -109
  254. package/src/components/data-entry/search-input.tsx +0 -103
  255. package/src/components/data-entry/select.tsx +0 -149
  256. package/src/components/data-entry/slider.tsx +0 -38
  257. package/src/components/data-entry/switch-field.tsx +0 -91
  258. package/src/components/data-entry/switch.tsx +0 -24
  259. package/src/components/data-entry/textarea.tsx +0 -12
  260. package/src/components/data-entry/time-picker.tsx +0 -214
  261. package/src/components/data-entry/transfer.tsx +0 -231
  262. package/src/components/data-entry/tree-select-strategy.ts +0 -6
  263. package/src/components/data-entry/tree-select.tsx +0 -279
  264. package/src/components/data-entry/tree-utils.ts +0 -221
  265. package/src/components/data-entry/upload-crop-dialog.tsx +0 -109
  266. package/src/components/data-entry/upload-types.ts +0 -86
  267. package/src/components/data-entry/upload.tsx +0 -498
  268. package/src/components/data-entry/use-upload-draft.ts +0 -93
  269. package/src/components/feedback/__tests__/alert.test.tsx +0 -127
  270. package/src/components/feedback/__tests__/dialog.test.tsx +0 -290
  271. package/src/components/feedback/__tests__/sheet.test.tsx +0 -94
  272. package/src/components/feedback/__tests__/skeleton.test.tsx +0 -25
  273. package/src/components/feedback/__tests__/toast.test.tsx +0 -52
  274. package/src/components/feedback/alert.tsx +0 -167
  275. package/src/components/feedback/dialog.tsx +0 -325
  276. package/src/components/feedback/index.ts +0 -53
  277. package/src/components/feedback/sheet.tsx +0 -130
  278. package/src/components/feedback/skeleton.tsx +0 -95
  279. package/src/components/feedback/sonner.tsx +0 -54
  280. package/src/components/feedback/toaster.tsx +0 -1
  281. package/src/components/feedback/use-toast.ts +0 -62
  282. package/src/components/general/__tests__/button.test.tsx +0 -71
  283. package/src/components/general/button.tsx +0 -61
  284. package/src/components/general/index.ts +0 -2
  285. package/src/components/layout/__tests__/page-container.test.tsx +0 -69
  286. package/src/components/layout/__tests__/page-inset.test.tsx +0 -14
  287. package/src/components/layout/__tests__/stack-inline.test.tsx +0 -39
  288. package/src/components/layout/app-shell.tsx +0 -42
  289. package/src/components/layout/breadcrumb.tsx +0 -35
  290. package/src/components/layout/index.ts +0 -31
  291. package/src/components/layout/inline.tsx +0 -13
  292. package/src/components/layout/menu.tsx +0 -34
  293. package/src/components/layout/mobile-frame.tsx +0 -57
  294. package/src/components/layout/page-container.tsx +0 -81
  295. package/src/components/layout/page-inset.tsx +0 -16
  296. package/src/components/layout/responsive-grid.tsx +0 -14
  297. package/src/components/layout/shell-app.tsx +0 -30
  298. package/src/components/layout/sidebar.tsx +0 -98
  299. package/src/components/layout/split-pane.tsx +0 -16
  300. package/src/components/layout/stack.tsx +0 -13
  301. package/src/components/layout/topbar.tsx +0 -108
  302. package/src/components/navigation/__tests__/app-pickers.test.tsx +0 -118
  303. package/src/components/navigation/__tests__/dropdown-menu.test.tsx +0 -104
  304. package/src/components/navigation/__tests__/navigation.test.tsx +0 -61
  305. package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +0 -76
  306. package/src/components/navigation/date-format-picker.tsx +0 -55
  307. package/src/components/navigation/dropdown-menu.tsx +0 -190
  308. package/src/components/navigation/filter-bar.tsx +0 -38
  309. package/src/components/navigation/index.ts +0 -28
  310. package/src/components/navigation/locale-picker.tsx +0 -49
  311. package/src/components/navigation/page-header.tsx +0 -50
  312. package/src/components/navigation/pagination-utils.ts +0 -35
  313. package/src/components/navigation/pagination.tsx +0 -168
  314. package/src/components/navigation/steps.tsx +0 -163
  315. package/src/components/navigation/tabs-items.tsx +0 -69
  316. package/src/components/navigation/time-format-picker.tsx +0 -55
  317. package/src/components/navigation/timezone-picker.tsx +0 -63
  318. package/src/components/query/__tests__/data-state.test.tsx +0 -214
  319. package/src/components/query/__tests__/infinite-prefetch.test.tsx +0 -105
  320. package/src/components/query/__tests__/query-helpers.test.tsx +0 -61
  321. package/src/components/query/data-state.tsx +0 -58
  322. package/src/components/query/index.ts +0 -10
  323. package/src/components/query/infinite-query-state.tsx +0 -99
  324. package/src/components/query/mutation-feedback.tsx +0 -31
  325. package/src/components/query/prefetch-link.tsx +0 -45
  326. package/src/components/query/query-refetch-button.tsx +0 -41
  327. package/src/components/ui/alert-dialog.tsx +0 -1
  328. package/src/components/ui/alert.tsx +0 -1
  329. package/src/components/ui/autocomplete.tsx +0 -1
  330. package/src/components/ui/badge.tsx +0 -1
  331. package/src/components/ui/button.tsx +0 -1
  332. package/src/components/ui/calendar.tsx +0 -1
  333. package/src/components/ui/card.tsx +0 -1
  334. package/src/components/ui/checkbox.tsx +0 -1
  335. package/src/components/ui/color-picker.tsx +0 -1
  336. package/src/components/ui/command.tsx +0 -1
  337. package/src/components/ui/date-picker.tsx +0 -1
  338. package/src/components/ui/date-range-picker.tsx +0 -1
  339. package/src/components/ui/dialog.tsx +0 -1
  340. package/src/components/ui/dropdown-menu.tsx +0 -1
  341. package/src/components/ui/index.tsx +0 -31
  342. package/src/components/ui/input.tsx +0 -1
  343. package/src/components/ui/label.tsx +0 -1
  344. package/src/components/ui/pagination.tsx +0 -1
  345. package/src/components/ui/popover.tsx +0 -1
  346. package/src/components/ui/radio.tsx +0 -1
  347. package/src/components/ui/scroll-area.tsx +0 -1
  348. package/src/components/ui/select.tsx +0 -1
  349. package/src/components/ui/sheet.tsx +0 -1
  350. package/src/components/ui/slider.tsx +0 -1
  351. package/src/components/ui/sonner.tsx +0 -1
  352. package/src/components/ui/switch.tsx +0 -1
  353. package/src/components/ui/table.tsx +0 -1
  354. package/src/components/ui/tabs-items.tsx +0 -1
  355. package/src/components/ui/tabs.tsx +0 -1
  356. package/src/components/ui/textarea.tsx +0 -1
  357. package/src/components/ui/time-picker.tsx +0 -1
  358. package/src/components/ui/upload.tsx +0 -1
  359. package/src/form/__tests__/use-zod-form.test.tsx +0 -97
  360. package/src/form/form-field-control.tsx +0 -44
  361. package/src/form/form-root.tsx +0 -29
  362. package/src/form/index.ts +0 -7
  363. package/src/form/use-zod-form.ts +0 -29
  364. package/src/i18n/__tests__/translate.test.ts +0 -23
  365. package/src/i18n/index.ts +0 -9
  366. package/src/i18n/messages/en.json +0 -171
  367. package/src/i18n/messages/ja.json +0 -171
  368. package/src/i18n/messages/vi.json +0 -171
  369. package/src/i18n/translate.ts +0 -74
  370. package/src/i18n/use-translation.ts +0 -53
  371. package/src/index.ts +0 -3
  372. package/src/lib/__tests__/control-styles.test.ts +0 -78
  373. package/src/lib/__tests__/datetime.test.ts +0 -77
  374. package/src/lib/__tests__/format-date.test.ts +0 -97
  375. package/src/lib/__tests__/format.test.ts +0 -62
  376. package/src/lib/__tests__/theme-tokens-audit.test.ts +0 -176
  377. package/src/lib/__tests__/theme-tokens-css.test.ts +0 -118
  378. package/src/lib/__tests__/token-governance.test.ts +0 -191
  379. package/src/lib/__tests__/variants.test.ts +0 -18
  380. package/src/lib/control-styles.ts +0 -33
  381. package/src/lib/datetime/detect.ts +0 -25
  382. package/src/lib/datetime/format-date.ts +0 -100
  383. package/src/lib/datetime/format.ts +0 -140
  384. package/src/lib/datetime/index.ts +0 -25
  385. package/src/lib/datetime/parse.ts +0 -51
  386. package/src/lib/datetime/sync.ts +0 -48
  387. package/src/lib/format.ts +0 -114
  388. package/src/lib/hooks.ts +0 -54
  389. package/src/lib/utils.ts +0 -6
  390. package/src/lib/variants.ts +0 -40
  391. package/src/props/components/app.prop.ts +0 -99
  392. package/src/props/components/data-display.prop.ts +0 -73
  393. package/src/props/components/data-entry.prop.ts +0 -334
  394. package/src/props/components/feedback.prop.ts +0 -80
  395. package/src/props/components/form.prop.ts +0 -46
  396. package/src/props/components/general.prop.ts +0 -18
  397. package/src/props/components/index.ts +0 -99
  398. package/src/props/components/layout.prop.ts +0 -130
  399. package/src/props/components/navigation.prop.ts +0 -88
  400. package/src/props/components/query.prop.ts +0 -94
  401. package/src/props/index.ts +0 -17
  402. package/src/props/vocabulary/data.prop.ts +0 -46
  403. package/src/props/vocabulary/index.ts +0 -73
  404. package/src/props/vocabulary/interaction.prop.ts +0 -42
  405. package/src/props/vocabulary/navigation.prop.ts +0 -19
  406. package/src/props/vocabulary/shared.prop.ts +0 -59
  407. package/src/test/__tests__/render-loop-guard.test.tsx +0 -38
  408. package/src/test/jest-dom.d.ts +0 -4
  409. package/src/test/render-loop-guard.tsx +0 -50
  410. package/src/test/render.tsx +0 -29
  411. package/src/test/theme-globals.test.ts +0 -77
  412. package/src/test/theme-globals.ts +0 -134
  413. package/src/test/theme-test-utils.tsx +0 -67
  414. /package/{src → dist}/styles/alert-layout.css +0 -0
  415. /package/{src → dist}/styles/badge-layout.css +0 -0
  416. /package/{src → dist}/styles/card-layout.css +0 -0
  417. /package/{src → dist}/styles/control.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;