@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,127 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { renderWithUi, screen, userEvent } from "@/test/render";
3
- import { Button } from "../../general/button";
4
- import { Alert, AlertActions, AlertContent, AlertDescription, AlertTitle } from "../alert";
5
-
6
- describe("Alert", () => {
7
- it("renders with role=alert and variant styling", () => {
8
- renderWithUi(
9
- <Alert variant="warning">
10
- <AlertContent>
11
- <AlertTitle>Pin lithium</AlertTitle>
12
- <AlertDescription>MSDS bắt buộc trước khi xuất kho.</AlertDescription>
13
- </AlertContent>
14
- </Alert>,
15
- );
16
- const alert = screen.getByRole("alert");
17
- expect(alert).toHaveAttribute("data-variant", "warning");
18
- expect(screen.getByText("Pin lithium")).toBeInTheDocument();
19
- expect(screen.getByText(/MSDS/)).toBeInTheDocument();
20
- });
21
-
22
- it("renders destructive variant for API errors", () => {
23
- renderWithUi(
24
- <Alert variant="destructive">
25
- <AlertContent>
26
- <AlertTitle>Không tải được</AlertTitle>
27
- <AlertDescription>503 Service Unavailable</AlertDescription>
28
- </AlertContent>
29
- </Alert>,
30
- );
31
- expect(screen.getByRole("alert")).toHaveAttribute("data-variant", "destructive");
32
- expect(screen.getByText("Không tải được")).toHaveAttribute("data-slot", "alert-title");
33
- });
34
-
35
- it("renders actions slot", async () => {
36
- const user = userEvent.setup();
37
- const onAction = vi.fn();
38
- renderWithUi(
39
- <Alert variant="default">
40
- <AlertContent>
41
- <AlertTitle>Bảo trì</AlertTitle>
42
- <AlertDescription>Pub/Sub emulator restart lúc 02:00 JST.</AlertDescription>
43
- </AlertContent>
44
- <AlertActions>
45
- <Button size="sm" onClick={onAction}>
46
- Xem lịch
47
- </Button>
48
- </AlertActions>
49
- </Alert>,
50
- );
51
- await user.click(screen.getByRole("button", { name: "Xem lịch" }));
52
- expect(onAction).toHaveBeenCalledOnce();
53
- });
54
-
55
- it("calls onDismiss when dismiss control clicked", async () => {
56
- const user = userEvent.setup();
57
- const onDismiss = vi.fn();
58
- renderWithUi(
59
- <Alert variant="success" onDismiss={onDismiss}>
60
- <AlertContent>
61
- <AlertTitle>Đã lưu template Zalo</AlertTitle>
62
- <AlertDescription>Thay đổi có hiệu lực ngay.</AlertDescription>
63
- </AlertContent>
64
- </Alert>,
65
- );
66
- await user.click(screen.getByRole("button", { name: "Dismiss" }));
67
- expect(onDismiss).toHaveBeenCalledOnce();
68
- });
69
-
70
- it("hides icon when icon={false}", () => {
71
- const { container } = renderWithUi(
72
- <Alert variant="warning" icon={false}>
73
- <AlertContent>
74
- <AlertTitle>No icon</AlertTitle>
75
- </AlertContent>
76
- </Alert>,
77
- );
78
- expect(container.querySelector("svg")).toBeNull();
79
- });
80
-
81
- it("renders success variant styling", () => {
82
- renderWithUi(
83
- <Alert variant="success">
84
- <AlertContent>
85
- <AlertTitle>Template saved</AlertTitle>
86
- <AlertDescription>Zalo OA preview ready.</AlertDescription>
87
- </AlertContent>
88
- </Alert>,
89
- );
90
- expect(screen.getByRole("alert")).toHaveAttribute("data-variant", "success");
91
- });
92
-
93
- it("renders default variant without destructive classes", () => {
94
- renderWithUi(
95
- <Alert variant="default">
96
- <AlertContent>
97
- <AlertTitle>Maintenance</AlertTitle>
98
- </AlertContent>
99
- </Alert>,
100
- );
101
- const alert = screen.getByRole("alert");
102
- expect(alert).toHaveAttribute("data-variant", "default");
103
- });
104
- });
105
-
106
- describe("Alert.QueryError", () => {
107
- it("shows message and retry", async () => {
108
- const user = userEvent.setup();
109
- const onRetry = vi.fn();
110
- renderWithUi(<Alert.QueryError error={new Error("boom")} onRetry={onRetry} />);
111
- expect(screen.getByRole("alert")).toBeInTheDocument();
112
- expect(screen.getByText(/boom/)).toBeInTheDocument();
113
- await user.click(screen.getByRole("button", { name: /thử lại/i }));
114
- expect(onRetry).toHaveBeenCalledOnce();
115
- });
116
-
117
- it("omits retry button when onRetry is omitted", () => {
118
- renderWithUi(<Alert.QueryError error="Validation failed: declared_value must be > 0" />);
119
- expect(screen.getByRole("alert")).toBeInTheDocument();
120
- expect(screen.queryByRole("button", { name: /thử lại/i })).not.toBeInTheDocument();
121
- });
122
-
123
- it("uses destructive Alert styling", () => {
124
- renderWithUi(<Alert.QueryError error={new Error("503")} onRetry={() => undefined} />);
125
- expect(screen.getByRole("alert")).toHaveAttribute("data-variant", "destructive");
126
- });
127
- });
@@ -1,290 +0,0 @@
1
- import * as React from "react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { renderWithUi, screen, userEvent, waitFor } from "@/test/render";
4
- import {
5
- Dialog,
6
- DialogAction,
7
- DialogCancel,
8
- DialogConfirm,
9
- DialogContent,
10
- DialogDescription,
11
- DialogFooter,
12
- DialogHeader,
13
- DialogTitle,
14
- DialogTrigger,
15
- } from "../dialog";
16
- import { Button } from "../../general/button";
17
-
18
- function PhraseResetHarness() {
19
- const [open, setOpen] = React.useState(true);
20
- return (
21
- <>
22
- <button type="button" onClick={() => setOpen(true)}>
23
- Reopen
24
- </button>
25
- <DialogConfirm
26
- open={open}
27
- onOpenChange={setOpen}
28
- title="Purge?"
29
- confirmPhrase="DELETE"
30
- confirmLabel="Purge"
31
- onConfirm={() => undefined}
32
- />
33
- </>
34
- );
35
- }
36
-
37
- describe("Dialog form mode", () => {
38
- it("opens on trigger click and closes via escape", async () => {
39
- const user = userEvent.setup();
40
- renderWithUi(
41
- <Dialog>
42
- <DialogTrigger asChild>
43
- <Button type="button">Mở</Button>
44
- </DialogTrigger>
45
- <DialogContent>
46
- <DialogHeader>
47
- <DialogTitle>Xác nhận manifest</DialogTitle>
48
- <DialogDescription>Chốt 12 kiện Osaka?</DialogDescription>
49
- </DialogHeader>
50
- <DialogFooter>
51
- <Button type="button" variant="ghost">
52
- Hủy
53
- </Button>
54
- </DialogFooter>
55
- </DialogContent>
56
- </Dialog>,
57
- );
58
-
59
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
60
- await user.click(screen.getByRole("button", { name: "Mở" }));
61
- expect(screen.getByRole("dialog")).toHaveAttribute("data-slot", "dialog-content");
62
- expect(screen.getByText("Chốt 12 kiện Osaka?")).toBeInTheDocument();
63
- await user.keyboard("{Escape}");
64
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
65
- });
66
-
67
- it("calls onOpenChange when controlled", async () => {
68
- const user = userEvent.setup();
69
- const onOpenChange = vi.fn();
70
- renderWithUi(
71
- <Dialog open onOpenChange={onOpenChange}>
72
- <DialogContent>
73
- <DialogTitle>Controlled</DialogTitle>
74
- </DialogContent>
75
- </Dialog>,
76
- );
77
- await user.keyboard("{Escape}");
78
- expect(onOpenChange).toHaveBeenCalledWith(false);
79
- });
80
- });
81
-
82
- describe("Dialog confirm mode (compound)", () => {
83
- it("uses alertdialog role and has no close icon", () => {
84
- renderWithUi(
85
- <Dialog mode="confirm" open onOpenChange={() => undefined}>
86
- <DialogContent>
87
- <DialogHeader>
88
- <DialogTitle>Proceed?</DialogTitle>
89
- <DialogDescription>This cannot be undone.</DialogDescription>
90
- </DialogHeader>
91
- </DialogContent>
92
- </Dialog>,
93
- );
94
- expect(screen.getByRole("alertdialog")).toHaveAttribute("data-slot", "dialog-content");
95
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
96
- expect(screen.queryByRole("button", { name: /close/i })).not.toBeInTheDocument();
97
- });
98
-
99
- it("calls onOpenChange(false) when cancel clicked", async () => {
100
- const user = userEvent.setup();
101
- const onOpenChange = vi.fn();
102
- renderWithUi(
103
- <Dialog mode="confirm" open onOpenChange={onOpenChange}>
104
- <DialogContent>
105
- <DialogHeader>
106
- <DialogTitle>Proceed?</DialogTitle>
107
- </DialogHeader>
108
- <DialogFooter>
109
- <DialogCancel asChild>
110
- <Button variant="ghost">Cancel</Button>
111
- </DialogCancel>
112
- </DialogFooter>
113
- </DialogContent>
114
- </Dialog>,
115
- );
116
- await user.click(screen.getByRole("button", { name: "Cancel" }));
117
- expect(onOpenChange).toHaveBeenCalledWith(false);
118
- });
119
-
120
- it("renders DialogAction", () => {
121
- renderWithUi(
122
- <Dialog mode="confirm" open onOpenChange={() => undefined}>
123
- <DialogContent>
124
- <DialogHeader>
125
- <DialogTitle>Seal manifest</DialogTitle>
126
- </DialogHeader>
127
- <DialogFooter>
128
- <DialogAction asChild>
129
- <Button>Seal</Button>
130
- </DialogAction>
131
- </DialogFooter>
132
- </DialogContent>
133
- </Dialog>,
134
- );
135
- expect(screen.getByRole("button", { name: "Seal" })).toBeInTheDocument();
136
- });
137
- });
138
-
139
- describe("Dialog.Confirm preset", () => {
140
- it("renders alertdialog with title and description", () => {
141
- renderWithUi(
142
- <DialogConfirm
143
- open
144
- onOpenChange={() => undefined}
145
- title="Chốt manifest?"
146
- description="47 kiện sẽ bị khóa."
147
- onConfirm={() => undefined}
148
- />,
149
- );
150
-
151
- expect(screen.getByRole("alertdialog")).toBeInTheDocument();
152
- expect(screen.getByText("Chốt manifest?")).toBeInTheDocument();
153
- expect(screen.getByText("47 kiện sẽ bị khóa.")).toBeInTheDocument();
154
- });
155
-
156
- it("calls onConfirm and closes when confirmed", async () => {
157
- const user = userEvent.setup();
158
- const onOpenChange = vi.fn();
159
- const onConfirm = vi.fn();
160
- renderWithUi(
161
- <DialogConfirm
162
- open
163
- onOpenChange={onOpenChange}
164
- title="Confirm?"
165
- description="Sure?"
166
- onConfirm={onConfirm}
167
- />,
168
- );
169
-
170
- await user.click(screen.getByRole("button", { name: "Tiếp tục" }));
171
- await waitFor(() => {
172
- expect(onConfirm).toHaveBeenCalledOnce();
173
- });
174
- expect(onOpenChange).toHaveBeenCalledWith(false);
175
- });
176
-
177
- it("closes on cancel without calling onConfirm", async () => {
178
- const user = userEvent.setup();
179
- const onOpenChange = vi.fn();
180
- const onConfirm = vi.fn();
181
- renderWithUi(
182
- <DialogConfirm open onOpenChange={onOpenChange} title="Confirm?" onConfirm={onConfirm} />,
183
- );
184
-
185
- await user.click(screen.getByRole("button", { name: "Hủy" }));
186
- expect(onOpenChange).toHaveBeenCalledWith(false);
187
- expect(onConfirm).not.toHaveBeenCalled();
188
- });
189
-
190
- it("disables both buttons when pending", () => {
191
- renderWithUi(
192
- <DialogConfirm
193
- open
194
- onOpenChange={() => undefined}
195
- title="Wait"
196
- pending
197
- onConfirm={() => undefined}
198
- />,
199
- );
200
- expect(screen.getByRole("button", { name: "Đang xử lý…" })).toBeDisabled();
201
- expect(screen.getByRole("button", { name: "Hủy" })).toBeDisabled();
202
- });
203
-
204
- it("keeps dialog open when keepOpenOnConfirm is true", async () => {
205
- const user = userEvent.setup();
206
- const onOpenChange = vi.fn();
207
- renderWithUi(
208
- <DialogConfirm
209
- open
210
- onOpenChange={onOpenChange}
211
- title="Next step"
212
- keepOpenOnConfirm
213
- onConfirm={() => undefined}
214
- />,
215
- );
216
-
217
- await user.click(screen.getByRole("button", { name: "Tiếp tục" }));
218
- expect(onOpenChange).not.toHaveBeenCalledWith(false);
219
- });
220
-
221
- describe("confirmPhrase", () => {
222
- it("shows type-to-confirm field and defaults confirm label to delete", () => {
223
- renderWithUi(
224
- <DialogConfirm
225
- open
226
- onOpenChange={() => undefined}
227
- title="Purge?"
228
- confirmPhrase="DELETE"
229
- onConfirm={() => undefined}
230
- />,
231
- );
232
-
233
- expect(screen.getByPlaceholderText("DELETE")).toBeInTheDocument();
234
- expect(screen.getByRole("button", { name: "Xóa" })).toBeDisabled();
235
- });
236
-
237
- it("enables confirm only when phrase matches exactly", async () => {
238
- const user = userEvent.setup();
239
- renderWithUi(
240
- <DialogConfirm
241
- open
242
- onOpenChange={() => undefined}
243
- title="Purge?"
244
- confirmPhrase="DELETE"
245
- confirmLabel="Purge"
246
- onConfirm={() => undefined}
247
- />,
248
- );
249
-
250
- const confirmBtn = screen.getByRole("button", { name: "Purge" });
251
- const input = screen.getByPlaceholderText("DELETE");
252
- expect(confirmBtn).toBeDisabled();
253
-
254
- await user.type(input, "DELET");
255
- expect(confirmBtn).toBeDisabled();
256
-
257
- await user.type(input, "E");
258
- expect(confirmBtn).toBeEnabled();
259
- });
260
-
261
- it("clears typed phrase when dialog closes and reopens", async () => {
262
- const user = userEvent.setup();
263
- renderWithUi(<PhraseResetHarness />);
264
-
265
- await user.type(screen.getByPlaceholderText("DELETE"), "DELETE");
266
- await user.click(screen.getByRole("button", { name: "Hủy" }));
267
-
268
- await user.click(screen.getByRole("button", { name: "Reopen" }));
269
- expect(screen.getByPlaceholderText("DELETE")).toHaveValue("");
270
- expect(screen.getByRole("button", { name: "Purge" })).toBeDisabled();
271
- });
272
- });
273
- });
274
-
275
- describe("Dialog namespace", () => {
276
- it("exposes Confirm preset on Dialog.Confirm", () => {
277
- expect(Dialog.Confirm).toBe(DialogConfirm);
278
- });
279
-
280
- it("supports shadcn showCloseButton naming", () => {
281
- renderWithUi(
282
- <Dialog open onOpenChange={() => undefined}>
283
- <DialogContent showCloseButton={false}>
284
- <DialogTitle>No close</DialogTitle>
285
- </DialogContent>
286
- </Dialog>,
287
- );
288
- expect(screen.queryByRole("button", { name: /close/i })).not.toBeInTheDocument();
289
- });
290
- });
@@ -1,94 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { renderWithUi, screen, userEvent } from "@/test/render";
3
- import { Button } from "../../general/button";
4
- import {
5
- Sheet,
6
- SheetContent,
7
- SheetDescription,
8
- SheetFooter,
9
- SheetHeader,
10
- SheetTitle,
11
- SheetTrigger,
12
- } from "../sheet";
13
-
14
- describe("Sheet", () => {
15
- it("opens side panel from trigger", async () => {
16
- const user = userEvent.setup();
17
- renderWithUi(
18
- <Sheet>
19
- <SheetTrigger asChild>
20
- <Button type="button">Bộ lọc</Button>
21
- </SheetTrigger>
22
- <SheetContent>
23
- <SheetHeader>
24
- <SheetTitle>Lọc khách CRM</SheetTitle>
25
- </SheetHeader>
26
- </SheetContent>
27
- </Sheet>,
28
- );
29
- await user.click(screen.getByRole("button", { name: "Bộ lọc" }));
30
- expect(screen.getByRole("dialog", { name: "Lọc khách CRM" })).toHaveAttribute(
31
- "data-slot",
32
- "sheet-content",
33
- );
34
- });
35
-
36
- it("renders description inside panel", async () => {
37
- const user = userEvent.setup();
38
- renderWithUi(
39
- <Sheet>
40
- <SheetTrigger asChild>
41
- <Button type="button">Chi tiết</Button>
42
- </SheetTrigger>
43
- <SheetContent>
44
- <SheetHeader>
45
- <SheetTitle>Đơn hàng #1024</SheetTitle>
46
- <SheetDescription>Xem thông tin vận chuyển</SheetDescription>
47
- </SheetHeader>
48
- </SheetContent>
49
- </Sheet>,
50
- );
51
- await user.click(screen.getByRole("button", { name: "Chi tiết" }));
52
- expect(screen.getByText("Xem thông tin vận chuyển")).toBeInTheDocument();
53
- });
54
-
55
- it("closes when pressing Escape", async () => {
56
- const user = userEvent.setup();
57
- renderWithUi(
58
- <Sheet>
59
- <SheetTrigger asChild>
60
- <Button type="button">Bộ lọc</Button>
61
- </SheetTrigger>
62
- <SheetContent>
63
- <SheetHeader>
64
- <SheetTitle>Lọc khách CRM</SheetTitle>
65
- </SheetHeader>
66
- </SheetContent>
67
- </Sheet>,
68
- );
69
- await user.click(screen.getByRole("button", { name: "Bộ lọc" }));
70
- expect(screen.getByRole("dialog", { name: "Lọc khách CRM" })).toBeInTheDocument();
71
- await user.keyboard("{Escape}");
72
- expect(screen.queryByRole("dialog", { name: "Lọc khách CRM" })).not.toBeInTheDocument();
73
- });
74
-
75
- it("exposes footer slot and optional close button", async () => {
76
- const user = userEvent.setup();
77
- renderWithUi(
78
- <Sheet>
79
- <SheetTrigger asChild>
80
- <Button type="button">Footer</Button>
81
- </SheetTrigger>
82
- <SheetContent showCloseButton={false}>
83
- <SheetHeader>
84
- <SheetTitle>Panel</SheetTitle>
85
- </SheetHeader>
86
- <SheetFooter>Actions</SheetFooter>
87
- </SheetContent>
88
- </Sheet>,
89
- );
90
- await user.click(screen.getByRole("button", { name: "Footer" }));
91
- expect(screen.getByText("Actions")).toHaveAttribute("data-slot", "sheet-footer");
92
- expect(screen.queryByRole("button", { name: /close/i })).not.toBeInTheDocument();
93
- });
94
- });
@@ -1,25 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { renderWithUi } from "@/test/render";
3
- import { SkeletonCard, SkeletonDetail, SkeletonRows, SkeletonTable } from "../skeleton";
4
-
5
- describe("Skeleton", () => {
6
- it("SkeletonRows marks busy state", () => {
7
- const { container } = renderWithUi(<SkeletonRows rows={2} columns={3} />);
8
- expect(container.querySelector("[aria-busy='true']")).toBeInTheDocument();
9
- });
10
-
11
- it("SkeletonTable renders header and body placeholders", () => {
12
- const { container } = renderWithUi(<SkeletonTable rows={3} columns={4} />);
13
- expect(container.querySelector(".ui-skeleton-table")).toBeInTheDocument();
14
- });
15
-
16
- it("SkeletonDetail renders title blocks", () => {
17
- const { container } = renderWithUi(<SkeletonDetail />);
18
- expect(container.querySelectorAll(".ui-skeleton-block").length).toBeGreaterThan(0);
19
- });
20
-
21
- it("SkeletonCard renders stat tile shape", () => {
22
- const { container } = renderWithUi(<SkeletonCard />);
23
- expect(container.querySelector(".ui-skeleton-card")).toBeInTheDocument();
24
- });
25
- });
@@ -1,52 +0,0 @@
1
- import * as React from "react";
2
- import { beforeEach, describe, expect, it, vi } from "vitest";
3
- import { renderWithUi, screen } from "@/test/render";
4
- import { Toaster } from "../sonner";
5
- import { toast, useToast } from "../use-toast";
6
-
7
- const sonnerMock = vi.hoisted(() => {
8
- const fn = vi.fn();
9
- return Object.assign(fn, {
10
- success: vi.fn(),
11
- error: vi.fn(),
12
- dismiss: vi.fn(),
13
- });
14
- });
15
-
16
- vi.mock("sonner", () => ({
17
- toast: sonnerMock,
18
- Toaster: ({ className, ...props }: { className?: string; children?: React.ReactNode }) => (
19
- <div data-testid="sonner-mock" className={className} {...props} />
20
- ),
21
- }));
22
-
23
- describe("Toaster", () => {
24
- it("renders Sonner container", () => {
25
- renderWithUi(<Toaster />);
26
- expect(screen.getByTestId("sonner-mock")).toBeInTheDocument();
27
- });
28
- });
29
-
30
- describe("toast adapter", () => {
31
- beforeEach(() => {
32
- sonnerMock.mockClear();
33
- sonnerMock.success.mockClear();
34
- sonnerMock.error.mockClear();
35
- });
36
-
37
- it("maps legacy success variant to sonner.success", () => {
38
- toast({ title: "Đã lưu manifest", variant: "success" });
39
- expect(sonnerMock.success).toHaveBeenCalledWith("Đã lưu manifest", expect.any(Object));
40
- });
41
-
42
- it("maps legacy destructive variant to sonner.error", () => {
43
- toast({ title: "Lỗi xuất kho", variant: "destructive" });
44
- expect(sonnerMock.error).toHaveBeenCalledWith("Lỗi xuất kho", expect.any(Object));
45
- });
46
-
47
- it("useToast exposes legacy toast helper", () => {
48
- const { toast: legacy } = useToast();
49
- legacy({ title: "Ping", variant: "default" });
50
- expect(sonnerMock).toHaveBeenCalledWith("Ping", expect.any(Object));
51
- });
52
- });