@miaixz/ui 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +190 -0
  4. package/dist/accessibility/focus-scope.d.ts +57 -0
  5. package/dist/accessibility/focus-scope.d.ts.map +1 -0
  6. package/dist/accessibility/focus-scope.js +272 -0
  7. package/dist/accessibility/focus-scope.js.map +1 -0
  8. package/dist/accessibility/index.d.ts +2 -0
  9. package/dist/accessibility/index.d.ts.map +1 -0
  10. package/dist/accessibility/index.js +2 -0
  11. package/dist/accessibility/index.js.map +1 -0
  12. package/dist/components/alert/alert.d.ts +8 -0
  13. package/dist/components/alert/alert.d.ts.map +1 -0
  14. package/dist/components/alert/alert.js +24 -0
  15. package/dist/components/alert/alert.js.map +1 -0
  16. package/dist/components/alert/alert.types.d.ts +43 -0
  17. package/dist/components/alert/alert.types.d.ts.map +1 -0
  18. package/dist/components/alert/alert.types.js +2 -0
  19. package/dist/components/alert/alert.types.js.map +1 -0
  20. package/dist/components/alert/index.d.ts +4 -0
  21. package/dist/components/alert/index.d.ts.map +1 -0
  22. package/dist/components/alert/index.js +2 -0
  23. package/dist/components/alert/index.js.map +1 -0
  24. package/dist/components/avatar/avatar.d.ts +8 -0
  25. package/dist/components/avatar/avatar.d.ts.map +1 -0
  26. package/dist/components/avatar/avatar.js +29 -0
  27. package/dist/components/avatar/avatar.js.map +1 -0
  28. package/dist/components/avatar/avatar.types.d.ts +35 -0
  29. package/dist/components/avatar/avatar.types.d.ts.map +1 -0
  30. package/dist/components/avatar/avatar.types.js +2 -0
  31. package/dist/components/avatar/avatar.types.js.map +1 -0
  32. package/dist/components/avatar/index.d.ts +4 -0
  33. package/dist/components/avatar/index.d.ts.map +1 -0
  34. package/dist/components/avatar/index.js +2 -0
  35. package/dist/components/avatar/index.js.map +1 -0
  36. package/dist/components/badge/badge.d.ts +8 -0
  37. package/dist/components/badge/badge.d.ts.map +1 -0
  38. package/dist/components/badge/badge.js +12 -0
  39. package/dist/components/badge/badge.js.map +1 -0
  40. package/dist/components/badge/badge.types.d.ts +37 -0
  41. package/dist/components/badge/badge.types.d.ts.map +1 -0
  42. package/dist/components/badge/badge.types.js +2 -0
  43. package/dist/components/badge/badge.types.js.map +1 -0
  44. package/dist/components/badge/index.d.ts +3 -0
  45. package/dist/components/badge/index.d.ts.map +1 -0
  46. package/dist/components/badge/index.js +2 -0
  47. package/dist/components/badge/index.js.map +1 -0
  48. package/dist/components/breadcrumb/breadcrumb.d.ts +14 -0
  49. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  50. package/dist/components/breadcrumb/breadcrumb.js +22 -0
  51. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  52. package/dist/components/breadcrumb/breadcrumb.types.d.ts +30 -0
  53. package/dist/components/breadcrumb/breadcrumb.types.d.ts.map +1 -0
  54. package/dist/components/breadcrumb/breadcrumb.types.js +2 -0
  55. package/dist/components/breadcrumb/breadcrumb.types.js.map +1 -0
  56. package/dist/components/breadcrumb/index.d.ts +3 -0
  57. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  58. package/dist/components/breadcrumb/index.js +2 -0
  59. package/dist/components/breadcrumb/index.js.map +1 -0
  60. package/dist/components/button/button.d.ts +8 -0
  61. package/dist/components/button/button.d.ts.map +1 -0
  62. package/dist/components/button/button.js +16 -0
  63. package/dist/components/button/button.js.map +1 -0
  64. package/dist/components/button/button.types.d.ts +99 -0
  65. package/dist/components/button/button.types.d.ts.map +1 -0
  66. package/dist/components/button/button.types.js +2 -0
  67. package/dist/components/button/button.types.js.map +1 -0
  68. package/dist/components/button/index.d.ts +3 -0
  69. package/dist/components/button/index.d.ts.map +1 -0
  70. package/dist/components/button/index.js +2 -0
  71. package/dist/components/button/index.js.map +1 -0
  72. package/dist/components/checkbox/checkbox.d.ts +8 -0
  73. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  74. package/dist/components/checkbox/checkbox.js +18 -0
  75. package/dist/components/checkbox/checkbox.js.map +1 -0
  76. package/dist/components/checkbox/checkbox.types.d.ts +23 -0
  77. package/dist/components/checkbox/checkbox.types.d.ts.map +1 -0
  78. package/dist/components/checkbox/checkbox.types.js +2 -0
  79. package/dist/components/checkbox/checkbox.types.js.map +1 -0
  80. package/dist/components/checkbox/index.d.ts +3 -0
  81. package/dist/components/checkbox/index.d.ts.map +1 -0
  82. package/dist/components/checkbox/index.js +2 -0
  83. package/dist/components/checkbox/index.js.map +1 -0
  84. package/dist/components/combobox/combobox.d.ts +123 -0
  85. package/dist/components/combobox/combobox.d.ts.map +1 -0
  86. package/dist/components/combobox/combobox.js +378 -0
  87. package/dist/components/combobox/combobox.js.map +1 -0
  88. package/dist/components/combobox/combobox.types.d.ts +108 -0
  89. package/dist/components/combobox/combobox.types.d.ts.map +1 -0
  90. package/dist/components/combobox/combobox.types.js +2 -0
  91. package/dist/components/combobox/combobox.types.js.map +1 -0
  92. package/dist/components/combobox/index.d.ts +3 -0
  93. package/dist/components/combobox/index.d.ts.map +1 -0
  94. package/dist/components/combobox/index.js +2 -0
  95. package/dist/components/combobox/index.js.map +1 -0
  96. package/dist/components/confirm-dialog/confirm-dialog.d.ts +10 -0
  97. package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  98. package/dist/components/confirm-dialog/confirm-dialog.js +70 -0
  99. package/dist/components/confirm-dialog/confirm-dialog.js.map +1 -0
  100. package/dist/components/confirm-dialog/confirm-dialog.types.d.ts +63 -0
  101. package/dist/components/confirm-dialog/confirm-dialog.types.d.ts.map +1 -0
  102. package/dist/components/confirm-dialog/confirm-dialog.types.js +2 -0
  103. package/dist/components/confirm-dialog/confirm-dialog.types.js.map +1 -0
  104. package/dist/components/confirm-dialog/index.d.ts +3 -0
  105. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  106. package/dist/components/confirm-dialog/index.js +2 -0
  107. package/dist/components/confirm-dialog/index.js.map +1 -0
  108. package/dist/components/data-table/data-table.d.ts +9 -0
  109. package/dist/components/data-table/data-table.d.ts.map +1 -0
  110. package/dist/components/data-table/data-table.js +198 -0
  111. package/dist/components/data-table/data-table.js.map +1 -0
  112. package/dist/components/data-table/data-table.types.d.ts +127 -0
  113. package/dist/components/data-table/data-table.types.d.ts.map +1 -0
  114. package/dist/components/data-table/data-table.types.js +2 -0
  115. package/dist/components/data-table/data-table.types.js.map +1 -0
  116. package/dist/components/data-table/index.d.ts +3 -0
  117. package/dist/components/data-table/index.d.ts.map +1 -0
  118. package/dist/components/data-table/index.js +2 -0
  119. package/dist/components/data-table/index.js.map +1 -0
  120. package/dist/components/dialog/dialog.d.ts +8 -0
  121. package/dist/components/dialog/dialog.d.ts.map +1 -0
  122. package/dist/components/dialog/dialog.js +45 -0
  123. package/dist/components/dialog/dialog.js.map +1 -0
  124. package/dist/components/dialog/dialog.types.d.ts +57 -0
  125. package/dist/components/dialog/dialog.types.d.ts.map +1 -0
  126. package/dist/components/dialog/dialog.types.js +2 -0
  127. package/dist/components/dialog/dialog.types.js.map +1 -0
  128. package/dist/components/dialog/index.d.ts +3 -0
  129. package/dist/components/dialog/index.d.ts.map +1 -0
  130. package/dist/components/dialog/index.js +2 -0
  131. package/dist/components/dialog/index.js.map +1 -0
  132. package/dist/components/divider/divider.d.ts +8 -0
  133. package/dist/components/divider/divider.d.ts.map +1 -0
  134. package/dist/components/divider/divider.js +12 -0
  135. package/dist/components/divider/divider.js.map +1 -0
  136. package/dist/components/divider/divider.types.d.ts +22 -0
  137. package/dist/components/divider/divider.types.d.ts.map +1 -0
  138. package/dist/components/divider/divider.types.js +2 -0
  139. package/dist/components/divider/divider.types.js.map +1 -0
  140. package/dist/components/divider/index.d.ts +3 -0
  141. package/dist/components/divider/index.d.ts.map +1 -0
  142. package/dist/components/divider/index.js +2 -0
  143. package/dist/components/divider/index.js.map +1 -0
  144. package/dist/components/drawer/drawer.d.ts +8 -0
  145. package/dist/components/drawer/drawer.d.ts.map +1 -0
  146. package/dist/components/drawer/drawer.js +45 -0
  147. package/dist/components/drawer/drawer.js.map +1 -0
  148. package/dist/components/drawer/drawer.types.d.ts +69 -0
  149. package/dist/components/drawer/drawer.types.d.ts.map +1 -0
  150. package/dist/components/drawer/drawer.types.js +2 -0
  151. package/dist/components/drawer/drawer.types.js.map +1 -0
  152. package/dist/components/drawer/index.d.ts +3 -0
  153. package/dist/components/drawer/index.d.ts.map +1 -0
  154. package/dist/components/drawer/index.js +2 -0
  155. package/dist/components/drawer/index.js.map +1 -0
  156. package/dist/components/dropdown/dropdown.d.ts +26 -0
  157. package/dist/components/dropdown/dropdown.d.ts.map +1 -0
  158. package/dist/components/dropdown/dropdown.js +70 -0
  159. package/dist/components/dropdown/dropdown.js.map +1 -0
  160. package/dist/components/dropdown/dropdown.types.d.ts +83 -0
  161. package/dist/components/dropdown/dropdown.types.d.ts.map +1 -0
  162. package/dist/components/dropdown/dropdown.types.js +2 -0
  163. package/dist/components/dropdown/dropdown.types.js.map +1 -0
  164. package/dist/components/dropdown/index.d.ts +3 -0
  165. package/dist/components/dropdown/index.d.ts.map +1 -0
  166. package/dist/components/dropdown/index.js +2 -0
  167. package/dist/components/dropdown/index.js.map +1 -0
  168. package/dist/components/dropzone/dropzone.d.ts +8 -0
  169. package/dist/components/dropzone/dropzone.d.ts.map +1 -0
  170. package/dist/components/dropzone/dropzone.js +98 -0
  171. package/dist/components/dropzone/dropzone.js.map +1 -0
  172. package/dist/components/dropzone/dropzone.types.d.ts +40 -0
  173. package/dist/components/dropzone/dropzone.types.d.ts.map +1 -0
  174. package/dist/components/dropzone/dropzone.types.js +2 -0
  175. package/dist/components/dropzone/dropzone.types.js.map +1 -0
  176. package/dist/components/dropzone/index.d.ts +3 -0
  177. package/dist/components/dropzone/index.d.ts.map +1 -0
  178. package/dist/components/dropzone/index.js +2 -0
  179. package/dist/components/dropzone/index.js.map +1 -0
  180. package/dist/components/empty-state/empty-state.d.ts +8 -0
  181. package/dist/components/empty-state/empty-state.d.ts.map +1 -0
  182. package/dist/components/empty-state/empty-state.js +13 -0
  183. package/dist/components/empty-state/empty-state.js.map +1 -0
  184. package/dist/components/empty-state/empty-state.types.d.ts +37 -0
  185. package/dist/components/empty-state/empty-state.types.d.ts.map +1 -0
  186. package/dist/components/empty-state/empty-state.types.js +2 -0
  187. package/dist/components/empty-state/empty-state.types.js.map +1 -0
  188. package/dist/components/empty-state/index.d.ts +3 -0
  189. package/dist/components/empty-state/index.d.ts.map +1 -0
  190. package/dist/components/empty-state/index.js +2 -0
  191. package/dist/components/empty-state/index.js.map +1 -0
  192. package/dist/components/file-upload/file-upload.d.ts +8 -0
  193. package/dist/components/file-upload/file-upload.d.ts.map +1 -0
  194. package/dist/components/file-upload/file-upload.js +359 -0
  195. package/dist/components/file-upload/file-upload.js.map +1 -0
  196. package/dist/components/file-upload/file-upload.types.d.ts +91 -0
  197. package/dist/components/file-upload/file-upload.types.d.ts.map +1 -0
  198. package/dist/components/file-upload/file-upload.types.js +2 -0
  199. package/dist/components/file-upload/file-upload.types.js.map +1 -0
  200. package/dist/components/file-upload/index.d.ts +3 -0
  201. package/dist/components/file-upload/index.d.ts.map +1 -0
  202. package/dist/components/file-upload/index.js +2 -0
  203. package/dist/components/file-upload/index.js.map +1 -0
  204. package/dist/components/form-field/form-field.d.ts +11 -0
  205. package/dist/components/form-field/form-field.d.ts.map +1 -0
  206. package/dist/components/form-field/form-field.js +41 -0
  207. package/dist/components/form-field/form-field.js.map +1 -0
  208. package/dist/components/form-field/form-field.types.d.ts +66 -0
  209. package/dist/components/form-field/form-field.types.d.ts.map +1 -0
  210. package/dist/components/form-field/form-field.types.js +2 -0
  211. package/dist/components/form-field/form-field.types.js.map +1 -0
  212. package/dist/components/form-field/index.d.ts +3 -0
  213. package/dist/components/form-field/index.d.ts.map +1 -0
  214. package/dist/components/form-field/index.js +2 -0
  215. package/dist/components/form-field/index.js.map +1 -0
  216. package/dist/components/icon/icon.d.ts +14 -0
  217. package/dist/components/icon/icon.d.ts.map +1 -0
  218. package/dist/components/icon/icon.js +48 -0
  219. package/dist/components/icon/icon.js.map +1 -0
  220. package/dist/components/icon/icon.types.d.ts +69 -0
  221. package/dist/components/icon/icon.types.d.ts.map +1 -0
  222. package/dist/components/icon/icon.types.js +2 -0
  223. package/dist/components/icon/icon.types.js.map +1 -0
  224. package/dist/components/icon/index.d.ts +3 -0
  225. package/dist/components/icon/index.d.ts.map +1 -0
  226. package/dist/components/icon/index.js +2 -0
  227. package/dist/components/icon/index.js.map +1 -0
  228. package/dist/components/index.d.ts +46 -0
  229. package/dist/components/index.d.ts.map +1 -0
  230. package/dist/components/index.js +45 -0
  231. package/dist/components/index.js.map +1 -0
  232. package/dist/components/inline-message/index.d.ts +4 -0
  233. package/dist/components/inline-message/index.d.ts.map +1 -0
  234. package/dist/components/inline-message/index.js +2 -0
  235. package/dist/components/inline-message/index.js.map +1 -0
  236. package/dist/components/inline-message/inline-message.d.ts +8 -0
  237. package/dist/components/inline-message/inline-message.d.ts.map +1 -0
  238. package/dist/components/inline-message/inline-message.js +20 -0
  239. package/dist/components/inline-message/inline-message.js.map +1 -0
  240. package/dist/components/inline-message/inline-message.types.d.ts +27 -0
  241. package/dist/components/inline-message/inline-message.types.d.ts.map +1 -0
  242. package/dist/components/inline-message/inline-message.types.js +2 -0
  243. package/dist/components/inline-message/inline-message.types.js.map +1 -0
  244. package/dist/components/input/index.d.ts +3 -0
  245. package/dist/components/input/index.d.ts.map +1 -0
  246. package/dist/components/input/index.js +2 -0
  247. package/dist/components/input/index.js.map +1 -0
  248. package/dist/components/input/input.d.ts +8 -0
  249. package/dist/components/input/input.d.ts.map +1 -0
  250. package/dist/components/input/input.js +13 -0
  251. package/dist/components/input/input.js.map +1 -0
  252. package/dist/components/input/input.types.d.ts +35 -0
  253. package/dist/components/input/input.types.d.ts.map +1 -0
  254. package/dist/components/input/input.types.js +2 -0
  255. package/dist/components/input/input.types.js.map +1 -0
  256. package/dist/components/list/index.d.ts +3 -0
  257. package/dist/components/list/index.d.ts.map +1 -0
  258. package/dist/components/list/index.js +2 -0
  259. package/dist/components/list/index.js.map +1 -0
  260. package/dist/components/list/list.d.ts +14 -0
  261. package/dist/components/list/list.d.ts.map +1 -0
  262. package/dist/components/list/list.js +21 -0
  263. package/dist/components/list/list.js.map +1 -0
  264. package/dist/components/list/list.types.d.ts +72 -0
  265. package/dist/components/list/list.types.d.ts.map +1 -0
  266. package/dist/components/list/list.types.js +2 -0
  267. package/dist/components/list/list.types.js.map +1 -0
  268. package/dist/components/loading-overlay/index.d.ts +3 -0
  269. package/dist/components/loading-overlay/index.d.ts.map +1 -0
  270. package/dist/components/loading-overlay/index.js +2 -0
  271. package/dist/components/loading-overlay/index.js.map +1 -0
  272. package/dist/components/loading-overlay/loading-overlay.d.ts +8 -0
  273. package/dist/components/loading-overlay/loading-overlay.d.ts.map +1 -0
  274. package/dist/components/loading-overlay/loading-overlay.js +13 -0
  275. package/dist/components/loading-overlay/loading-overlay.js.map +1 -0
  276. package/dist/components/loading-overlay/loading-overlay.types.d.ts +28 -0
  277. package/dist/components/loading-overlay/loading-overlay.types.d.ts.map +1 -0
  278. package/dist/components/loading-overlay/loading-overlay.types.js +2 -0
  279. package/dist/components/loading-overlay/loading-overlay.types.js.map +1 -0
  280. package/dist/components/multi-select/index.d.ts +3 -0
  281. package/dist/components/multi-select/index.d.ts.map +1 -0
  282. package/dist/components/multi-select/index.js +2 -0
  283. package/dist/components/multi-select/index.js.map +1 -0
  284. package/dist/components/multi-select/multi-select.d.ts +9 -0
  285. package/dist/components/multi-select/multi-select.d.ts.map +1 -0
  286. package/dist/components/multi-select/multi-select.js +74 -0
  287. package/dist/components/multi-select/multi-select.js.map +1 -0
  288. package/dist/components/multi-select/multi-select.types.d.ts +35 -0
  289. package/dist/components/multi-select/multi-select.types.d.ts.map +1 -0
  290. package/dist/components/multi-select/multi-select.types.js +2 -0
  291. package/dist/components/multi-select/multi-select.types.js.map +1 -0
  292. package/dist/components/navigation/index.d.ts +3 -0
  293. package/dist/components/navigation/index.d.ts.map +1 -0
  294. package/dist/components/navigation/index.js +2 -0
  295. package/dist/components/navigation/index.js.map +1 -0
  296. package/dist/components/navigation/navigation.d.ts +14 -0
  297. package/dist/components/navigation/navigation.d.ts.map +1 -0
  298. package/dist/components/navigation/navigation.js +29 -0
  299. package/dist/components/navigation/navigation.js.map +1 -0
  300. package/dist/components/navigation/navigation.types.d.ts +84 -0
  301. package/dist/components/navigation/navigation.types.d.ts.map +1 -0
  302. package/dist/components/navigation/navigation.types.js +2 -0
  303. package/dist/components/navigation/navigation.types.js.map +1 -0
  304. package/dist/components/page-layout/index.d.ts +3 -0
  305. package/dist/components/page-layout/index.d.ts.map +1 -0
  306. package/dist/components/page-layout/index.js +2 -0
  307. package/dist/components/page-layout/index.js.map +1 -0
  308. package/dist/components/page-layout/page-layout.d.ts +74 -0
  309. package/dist/components/page-layout/page-layout.d.ts.map +1 -0
  310. package/dist/components/page-layout/page-layout.js +103 -0
  311. package/dist/components/page-layout/page-layout.js.map +1 -0
  312. package/dist/components/page-layout/page-layout.types.d.ts +188 -0
  313. package/dist/components/page-layout/page-layout.types.d.ts.map +1 -0
  314. package/dist/components/page-layout/page-layout.types.js +2 -0
  315. package/dist/components/page-layout/page-layout.types.js.map +1 -0
  316. package/dist/components/pagination/index.d.ts +4 -0
  317. package/dist/components/pagination/index.d.ts.map +1 -0
  318. package/dist/components/pagination/index.js +2 -0
  319. package/dist/components/pagination/index.js.map +1 -0
  320. package/dist/components/pagination/pagination.d.ts +24 -0
  321. package/dist/components/pagination/pagination.d.ts.map +1 -0
  322. package/dist/components/pagination/pagination.js +48 -0
  323. package/dist/components/pagination/pagination.js.map +1 -0
  324. package/dist/components/pagination/pagination.types.d.ts +43 -0
  325. package/dist/components/pagination/pagination.types.d.ts.map +1 -0
  326. package/dist/components/pagination/pagination.types.js +2 -0
  327. package/dist/components/pagination/pagination.types.js.map +1 -0
  328. package/dist/components/panel/index.d.ts +3 -0
  329. package/dist/components/panel/index.d.ts.map +1 -0
  330. package/dist/components/panel/index.js +2 -0
  331. package/dist/components/panel/index.js.map +1 -0
  332. package/dist/components/panel/panel.d.ts +14 -0
  333. package/dist/components/panel/panel.d.ts.map +1 -0
  334. package/dist/components/panel/panel.js +22 -0
  335. package/dist/components/panel/panel.js.map +1 -0
  336. package/dist/components/panel/panel.types.d.ts +62 -0
  337. package/dist/components/panel/panel.types.d.ts.map +1 -0
  338. package/dist/components/panel/panel.types.js +2 -0
  339. package/dist/components/panel/panel.types.js.map +1 -0
  340. package/dist/components/popover/index.d.ts +3 -0
  341. package/dist/components/popover/index.d.ts.map +1 -0
  342. package/dist/components/popover/index.js +2 -0
  343. package/dist/components/popover/index.js.map +1 -0
  344. package/dist/components/popover/popover-context.d.ts +29 -0
  345. package/dist/components/popover/popover-context.d.ts.map +1 -0
  346. package/dist/components/popover/popover-context.js +14 -0
  347. package/dist/components/popover/popover-context.js.map +1 -0
  348. package/dist/components/popover/popover.d.ts +8 -0
  349. package/dist/components/popover/popover.d.ts.map +1 -0
  350. package/dist/components/popover/popover.js +60 -0
  351. package/dist/components/popover/popover.js.map +1 -0
  352. package/dist/components/popover/popover.types.d.ts +47 -0
  353. package/dist/components/popover/popover.types.d.ts.map +1 -0
  354. package/dist/components/popover/popover.types.js +2 -0
  355. package/dist/components/popover/popover.types.js.map +1 -0
  356. package/dist/components/progress/index.d.ts +3 -0
  357. package/dist/components/progress/index.d.ts.map +1 -0
  358. package/dist/components/progress/index.js +2 -0
  359. package/dist/components/progress/index.js.map +1 -0
  360. package/dist/components/progress/progress.d.ts +8 -0
  361. package/dist/components/progress/progress.d.ts.map +1 -0
  362. package/dist/components/progress/progress.js +32 -0
  363. package/dist/components/progress/progress.js.map +1 -0
  364. package/dist/components/progress/progress.types.d.ts +36 -0
  365. package/dist/components/progress/progress.types.d.ts.map +1 -0
  366. package/dist/components/progress/progress.types.js +2 -0
  367. package/dist/components/progress/progress.types.js.map +1 -0
  368. package/dist/components/radio/index.d.ts +3 -0
  369. package/dist/components/radio/index.d.ts.map +1 -0
  370. package/dist/components/radio/index.js +2 -0
  371. package/dist/components/radio/index.js.map +1 -0
  372. package/dist/components/radio/radio.d.ts +8 -0
  373. package/dist/components/radio/radio.d.ts.map +1 -0
  374. package/dist/components/radio/radio.js +12 -0
  375. package/dist/components/radio/radio.js.map +1 -0
  376. package/dist/components/radio/radio.types.d.ts +17 -0
  377. package/dist/components/radio/radio.types.d.ts.map +1 -0
  378. package/dist/components/radio/radio.types.js +2 -0
  379. package/dist/components/radio/radio.types.js.map +1 -0
  380. package/dist/components/search-input/index.d.ts +3 -0
  381. package/dist/components/search-input/index.d.ts.map +1 -0
  382. package/dist/components/search-input/index.js +2 -0
  383. package/dist/components/search-input/index.js.map +1 -0
  384. package/dist/components/search-input/search-input.d.ts +8 -0
  385. package/dist/components/search-input/search-input.d.ts.map +1 -0
  386. package/dist/components/search-input/search-input.js +35 -0
  387. package/dist/components/search-input/search-input.js.map +1 -0
  388. package/dist/components/search-input/search-input.types.d.ts +38 -0
  389. package/dist/components/search-input/search-input.types.d.ts.map +1 -0
  390. package/dist/components/search-input/search-input.types.js +2 -0
  391. package/dist/components/search-input/search-input.types.js.map +1 -0
  392. package/dist/components/select/index.d.ts +3 -0
  393. package/dist/components/select/index.d.ts.map +1 -0
  394. package/dist/components/select/index.js +2 -0
  395. package/dist/components/select/index.js.map +1 -0
  396. package/dist/components/select/select.d.ts +8 -0
  397. package/dist/components/select/select.d.ts.map +1 -0
  398. package/dist/components/select/select.js +14 -0
  399. package/dist/components/select/select.js.map +1 -0
  400. package/dist/components/select/select.types.d.ts +27 -0
  401. package/dist/components/select/select.types.d.ts.map +1 -0
  402. package/dist/components/select/select.types.js +2 -0
  403. package/dist/components/select/select.types.js.map +1 -0
  404. package/dist/components/shared.types.d.ts +13 -0
  405. package/dist/components/shared.types.d.ts.map +1 -0
  406. package/dist/components/shared.types.js +2 -0
  407. package/dist/components/shared.types.js.map +1 -0
  408. package/dist/components/skeleton/index.d.ts +3 -0
  409. package/dist/components/skeleton/index.d.ts.map +1 -0
  410. package/dist/components/skeleton/index.js +2 -0
  411. package/dist/components/skeleton/index.js.map +1 -0
  412. package/dist/components/skeleton/skeleton.d.ts +8 -0
  413. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  414. package/dist/components/skeleton/skeleton.js +12 -0
  415. package/dist/components/skeleton/skeleton.js.map +1 -0
  416. package/dist/components/skeleton/skeleton.types.d.ts +29 -0
  417. package/dist/components/skeleton/skeleton.types.d.ts.map +1 -0
  418. package/dist/components/skeleton/skeleton.types.js +2 -0
  419. package/dist/components/skeleton/skeleton.types.js.map +1 -0
  420. package/dist/components/spinner/index.d.ts +4 -0
  421. package/dist/components/spinner/index.d.ts.map +1 -0
  422. package/dist/components/spinner/index.js +2 -0
  423. package/dist/components/spinner/index.js.map +1 -0
  424. package/dist/components/spinner/spinner.d.ts +8 -0
  425. package/dist/components/spinner/spinner.d.ts.map +1 -0
  426. package/dist/components/spinner/spinner.js +19 -0
  427. package/dist/components/spinner/spinner.js.map +1 -0
  428. package/dist/components/spinner/spinner.types.d.ts +27 -0
  429. package/dist/components/spinner/spinner.types.d.ts.map +1 -0
  430. package/dist/components/spinner/spinner.types.js +2 -0
  431. package/dist/components/spinner/spinner.types.js.map +1 -0
  432. package/dist/components/status-indicator/index.d.ts +4 -0
  433. package/dist/components/status-indicator/index.d.ts.map +1 -0
  434. package/dist/components/status-indicator/index.js +2 -0
  435. package/dist/components/status-indicator/index.js.map +1 -0
  436. package/dist/components/status-indicator/status-indicator.d.ts +8 -0
  437. package/dist/components/status-indicator/status-indicator.d.ts.map +1 -0
  438. package/dist/components/status-indicator/status-indicator.js +12 -0
  439. package/dist/components/status-indicator/status-indicator.js.map +1 -0
  440. package/dist/components/status-indicator/status-indicator.types.d.ts +25 -0
  441. package/dist/components/status-indicator/status-indicator.types.d.ts.map +1 -0
  442. package/dist/components/status-indicator/status-indicator.types.js +2 -0
  443. package/dist/components/status-indicator/status-indicator.types.js.map +1 -0
  444. package/dist/components/switch/index.d.ts +3 -0
  445. package/dist/components/switch/index.d.ts.map +1 -0
  446. package/dist/components/switch/index.js +2 -0
  447. package/dist/components/switch/index.js.map +1 -0
  448. package/dist/components/switch/switch.d.ts +8 -0
  449. package/dist/components/switch/switch.d.ts.map +1 -0
  450. package/dist/components/switch/switch.js +12 -0
  451. package/dist/components/switch/switch.js.map +1 -0
  452. package/dist/components/switch/switch.types.d.ts +17 -0
  453. package/dist/components/switch/switch.types.d.ts.map +1 -0
  454. package/dist/components/switch/switch.types.js +2 -0
  455. package/dist/components/switch/switch.types.js.map +1 -0
  456. package/dist/components/table/index.d.ts +3 -0
  457. package/dist/components/table/index.d.ts.map +1 -0
  458. package/dist/components/table/index.js +2 -0
  459. package/dist/components/table/index.js.map +1 -0
  460. package/dist/components/table/table.d.ts +56 -0
  461. package/dist/components/table/table.d.ts.map +1 -0
  462. package/dist/components/table/table.js +76 -0
  463. package/dist/components/table/table.js.map +1 -0
  464. package/dist/components/table/table.types.d.ts +101 -0
  465. package/dist/components/table/table.types.d.ts.map +1 -0
  466. package/dist/components/table/table.types.js +2 -0
  467. package/dist/components/table/table.types.js.map +1 -0
  468. package/dist/components/tabs/index.d.ts +3 -0
  469. package/dist/components/tabs/index.d.ts.map +1 -0
  470. package/dist/components/tabs/index.js +2 -0
  471. package/dist/components/tabs/index.js.map +1 -0
  472. package/dist/components/tabs/tabs.d.ts +26 -0
  473. package/dist/components/tabs/tabs.d.ts.map +1 -0
  474. package/dist/components/tabs/tabs.js +122 -0
  475. package/dist/components/tabs/tabs.js.map +1 -0
  476. package/dist/components/tabs/tabs.types.d.ts +70 -0
  477. package/dist/components/tabs/tabs.types.d.ts.map +1 -0
  478. package/dist/components/tabs/tabs.types.js +2 -0
  479. package/dist/components/tabs/tabs.types.js.map +1 -0
  480. package/dist/components/textarea/index.d.ts +3 -0
  481. package/dist/components/textarea/index.d.ts.map +1 -0
  482. package/dist/components/textarea/index.js +2 -0
  483. package/dist/components/textarea/index.js.map +1 -0
  484. package/dist/components/textarea/textarea.d.ts +8 -0
  485. package/dist/components/textarea/textarea.d.ts.map +1 -0
  486. package/dist/components/textarea/textarea.js +13 -0
  487. package/dist/components/textarea/textarea.js.map +1 -0
  488. package/dist/components/textarea/textarea.types.d.ts +39 -0
  489. package/dist/components/textarea/textarea.types.d.ts.map +1 -0
  490. package/dist/components/textarea/textarea.types.js +2 -0
  491. package/dist/components/textarea/textarea.types.js.map +1 -0
  492. package/dist/components/toast/index.d.ts +3 -0
  493. package/dist/components/toast/index.d.ts.map +1 -0
  494. package/dist/components/toast/index.js +2 -0
  495. package/dist/components/toast/index.js.map +1 -0
  496. package/dist/components/toast/toast.d.ts +24 -0
  497. package/dist/components/toast/toast.d.ts.map +1 -0
  498. package/dist/components/toast/toast.js +111 -0
  499. package/dist/components/toast/toast.js.map +1 -0
  500. package/dist/components/toast/toast.types.d.ts +103 -0
  501. package/dist/components/toast/toast.types.d.ts.map +1 -0
  502. package/dist/components/toast/toast.types.js +2 -0
  503. package/dist/components/toast/toast.types.js.map +1 -0
  504. package/dist/components/toolbar/index.d.ts +3 -0
  505. package/dist/components/toolbar/index.d.ts.map +1 -0
  506. package/dist/components/toolbar/index.js +2 -0
  507. package/dist/components/toolbar/index.js.map +1 -0
  508. package/dist/components/toolbar/toolbar.d.ts +20 -0
  509. package/dist/components/toolbar/toolbar.d.ts.map +1 -0
  510. package/dist/components/toolbar/toolbar.js +28 -0
  511. package/dist/components/toolbar/toolbar.js.map +1 -0
  512. package/dist/components/toolbar/toolbar.types.d.ts +37 -0
  513. package/dist/components/toolbar/toolbar.types.d.ts.map +1 -0
  514. package/dist/components/toolbar/toolbar.types.js +2 -0
  515. package/dist/components/toolbar/toolbar.types.js.map +1 -0
  516. package/dist/components/tooltip/index.d.ts +3 -0
  517. package/dist/components/tooltip/index.d.ts.map +1 -0
  518. package/dist/components/tooltip/index.js +2 -0
  519. package/dist/components/tooltip/index.js.map +1 -0
  520. package/dist/components/tooltip/tooltip.d.ts +8 -0
  521. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  522. package/dist/components/tooltip/tooltip.js +84 -0
  523. package/dist/components/tooltip/tooltip.js.map +1 -0
  524. package/dist/components/tooltip/tooltip.types.d.ts +34 -0
  525. package/dist/components/tooltip/tooltip.types.d.ts.map +1 -0
  526. package/dist/components/tooltip/tooltip.types.js +2 -0
  527. package/dist/components/tooltip/tooltip.types.js.map +1 -0
  528. package/dist/components/tree-view/index.d.ts +3 -0
  529. package/dist/components/tree-view/index.d.ts.map +1 -0
  530. package/dist/components/tree-view/index.js +2 -0
  531. package/dist/components/tree-view/index.js.map +1 -0
  532. package/dist/components/tree-view/tree-view.d.ts +9 -0
  533. package/dist/components/tree-view/tree-view.d.ts.map +1 -0
  534. package/dist/components/tree-view/tree-view.js +573 -0
  535. package/dist/components/tree-view/tree-view.js.map +1 -0
  536. package/dist/components/tree-view/tree-view.types.d.ts +92 -0
  537. package/dist/components/tree-view/tree-view.types.d.ts.map +1 -0
  538. package/dist/components/tree-view/tree-view.types.js +2 -0
  539. package/dist/components/tree-view/tree-view.types.js.map +1 -0
  540. package/dist/components/visually-hidden/index.d.ts +3 -0
  541. package/dist/components/visually-hidden/index.d.ts.map +1 -0
  542. package/dist/components/visually-hidden/index.js +2 -0
  543. package/dist/components/visually-hidden/index.js.map +1 -0
  544. package/dist/components/visually-hidden/visually-hidden.d.ts +8 -0
  545. package/dist/components/visually-hidden/visually-hidden.d.ts.map +1 -0
  546. package/dist/components/visually-hidden/visually-hidden.js +12 -0
  547. package/dist/components/visually-hidden/visually-hidden.js.map +1 -0
  548. package/dist/components/visually-hidden/visually-hidden.types.d.ts +9 -0
  549. package/dist/components/visually-hidden/visually-hidden.types.d.ts.map +1 -0
  550. package/dist/components/visually-hidden/visually-hidden.types.js +2 -0
  551. package/dist/components/visually-hidden/visually-hidden.types.js.map +1 -0
  552. package/dist/errors/index.d.ts +2 -0
  553. package/dist/errors/index.d.ts.map +1 -0
  554. package/dist/errors/index.js +2 -0
  555. package/dist/errors/index.js.map +1 -0
  556. package/dist/errors/ui-error.d.ts +60 -0
  557. package/dist/errors/ui-error.d.ts.map +1 -0
  558. package/dist/errors/ui-error.js +219 -0
  559. package/dist/errors/ui-error.js.map +1 -0
  560. package/dist/i18n/i18n.d.ts +52 -0
  561. package/dist/i18n/i18n.d.ts.map +1 -0
  562. package/dist/i18n/i18n.js +156 -0
  563. package/dist/i18n/i18n.js.map +1 -0
  564. package/dist/i18n/index.d.ts +3 -0
  565. package/dist/i18n/index.d.ts.map +1 -0
  566. package/dist/i18n/index.js +3 -0
  567. package/dist/i18n/index.js.map +1 -0
  568. package/dist/icons/icon-names.d.ts +7 -0
  569. package/dist/icons/icon-names.d.ts.map +1 -0
  570. package/dist/icons/icon-names.js +2 -0
  571. package/dist/icons/icon-names.js.map +1 -0
  572. package/dist/icons/icon-registry.d.ts +30 -0
  573. package/dist/icons/icon-registry.d.ts.map +1 -0
  574. package/dist/icons/icon-registry.js +31 -0
  575. package/dist/icons/icon-registry.js.map +1 -0
  576. package/dist/icons/index.d.ts +4 -0
  577. package/dist/icons/index.d.ts.map +1 -0
  578. package/dist/icons/index.js +2 -0
  579. package/dist/icons/index.js.map +1 -0
  580. package/dist/index.d.ts +6 -0
  581. package/dist/index.d.ts.map +1 -0
  582. package/dist/index.js +5 -0
  583. package/dist/index.js.map +1 -0
  584. package/dist/internal/class-names.d.ts +8 -0
  585. package/dist/internal/class-names.d.ts.map +1 -0
  586. package/dist/internal/class-names.js +10 -0
  587. package/dist/internal/class-names.js.map +1 -0
  588. package/dist/internal/menu/index.d.ts +3 -0
  589. package/dist/internal/menu/index.d.ts.map +1 -0
  590. package/dist/internal/menu/index.js +2 -0
  591. package/dist/internal/menu/index.js.map +1 -0
  592. package/dist/internal/menu/menu.d.ts +33 -0
  593. package/dist/internal/menu/menu.d.ts.map +1 -0
  594. package/dist/internal/menu/menu.js +150 -0
  595. package/dist/internal/menu/menu.js.map +1 -0
  596. package/dist/internal/overlay/dismissible-layer.d.ts +38 -0
  597. package/dist/internal/overlay/dismissible-layer.d.ts.map +1 -0
  598. package/dist/internal/overlay/dismissible-layer.js +99 -0
  599. package/dist/internal/overlay/dismissible-layer.js.map +1 -0
  600. package/dist/internal/overlay/document-scroll-lock.d.ts +8 -0
  601. package/dist/internal/overlay/document-scroll-lock.d.ts.map +1 -0
  602. package/dist/internal/overlay/document-scroll-lock.js +58 -0
  603. package/dist/internal/overlay/document-scroll-lock.js.map +1 -0
  604. package/dist/internal/overlay/floating-position.d.ts +46 -0
  605. package/dist/internal/overlay/floating-position.d.ts.map +1 -0
  606. package/dist/internal/overlay/floating-position.js +137 -0
  607. package/dist/internal/overlay/floating-position.js.map +1 -0
  608. package/dist/internal/overlay/index.d.ts +8 -0
  609. package/dist/internal/overlay/index.d.ts.map +1 -0
  610. package/dist/internal/overlay/index.js +6 -0
  611. package/dist/internal/overlay/index.js.map +1 -0
  612. package/dist/internal/overlay/native-modal.d.ts +11 -0
  613. package/dist/internal/overlay/native-modal.d.ts.map +1 -0
  614. package/dist/internal/overlay/native-modal.js +160 -0
  615. package/dist/internal/overlay/native-modal.js.map +1 -0
  616. package/dist/internal/overlay/portal-target.d.ts +19 -0
  617. package/dist/internal/overlay/portal-target.d.ts.map +1 -0
  618. package/dist/internal/overlay/portal-target.js +113 -0
  619. package/dist/internal/overlay/portal-target.js.map +1 -0
  620. package/dist/internal/overlay/top-layer.d.ts +21 -0
  621. package/dist/internal/overlay/top-layer.d.ts.map +1 -0
  622. package/dist/internal/overlay/top-layer.js +51 -0
  623. package/dist/internal/overlay/top-layer.js.map +1 -0
  624. package/dist/internal/use-merged-ref.d.ts +11 -0
  625. package/dist/internal/use-merged-ref.d.ts.map +1 -0
  626. package/dist/internal/use-merged-ref.js +31 -0
  627. package/dist/internal/use-merged-ref.js.map +1 -0
  628. package/dist/internal/use-native-dialog.d.ts +9 -0
  629. package/dist/internal/use-native-dialog.d.ts.map +1 -0
  630. package/dist/internal/use-native-dialog.js +19 -0
  631. package/dist/internal/use-native-dialog.js.map +1 -0
  632. package/dist/runtime/appearance.d.ts +32 -0
  633. package/dist/runtime/appearance.d.ts.map +1 -0
  634. package/dist/runtime/appearance.js +123 -0
  635. package/dist/runtime/appearance.js.map +1 -0
  636. package/dist/styles/components/alert.css +99 -0
  637. package/dist/styles/components/avatar.css +70 -0
  638. package/dist/styles/components/badge.css +101 -0
  639. package/dist/styles/components/breadcrumb.css +65 -0
  640. package/dist/styles/components/button.css +136 -0
  641. package/dist/styles/components/choice.css +120 -0
  642. package/dist/styles/components/combobox.css +200 -0
  643. package/dist/styles/components/confirm-dialog.css +50 -0
  644. package/dist/styles/components/data-table.css +120 -0
  645. package/dist/styles/components/dialog.css +135 -0
  646. package/dist/styles/components/divider.css +27 -0
  647. package/dist/styles/components/drawer.css +160 -0
  648. package/dist/styles/components/dropdown.css +75 -0
  649. package/dist/styles/components/dropzone.css +94 -0
  650. package/dist/styles/components/empty-state.css +85 -0
  651. package/dist/styles/components/file-upload.css +145 -0
  652. package/dist/styles/components/form-field.css +49 -0
  653. package/dist/styles/components/icon.css +53 -0
  654. package/dist/styles/components/inline-message.css +33 -0
  655. package/dist/styles/components/input.css +77 -0
  656. package/dist/styles/components/list.css +132 -0
  657. package/dist/styles/components/loading-overlay.css +24 -0
  658. package/dist/styles/components/menu.css +6 -0
  659. package/dist/styles/components/multi-select.css +68 -0
  660. package/dist/styles/components/navigation.css +116 -0
  661. package/dist/styles/components/page-layout.css +279 -0
  662. package/dist/styles/components/pagination.css +99 -0
  663. package/dist/styles/components/panel.css +123 -0
  664. package/dist/styles/components/popover.css +41 -0
  665. package/dist/styles/components/progress.css +65 -0
  666. package/dist/styles/components/search-input.css +12 -0
  667. package/dist/styles/components/select.css +56 -0
  668. package/dist/styles/components/skeleton.css +93 -0
  669. package/dist/styles/components/spinner.css +27 -0
  670. package/dist/styles/components/status-indicator.css +54 -0
  671. package/dist/styles/components/switch.css +111 -0
  672. package/dist/styles/components/table.css +127 -0
  673. package/dist/styles/components/tabs.css +144 -0
  674. package/dist/styles/components/textarea.css +79 -0
  675. package/dist/styles/components/toast.css +134 -0
  676. package/dist/styles/components/toolbar.css +27 -0
  677. package/dist/styles/components/tooltip.css +32 -0
  678. package/dist/styles/components/tree-view.css +146 -0
  679. package/dist/styles/components.css +45 -0
  680. package/dist/styles/foundation/controls.css +91 -0
  681. package/dist/styles/foundation/density.css +76 -0
  682. package/dist/styles/foundation/icons.css +29 -0
  683. package/dist/styles/foundation/layout.css +150 -0
  684. package/dist/styles/foundation/motion.css +58 -0
  685. package/dist/styles/foundation/surface.css +60 -0
  686. package/dist/styles/foundation/theme.css +166 -0
  687. package/dist/styles/foundation/typography.css +84 -0
  688. package/dist/styles/foundation.css +10 -0
  689. package/dist/styles/miaixz.css +4 -0
  690. package/package.json +304 -0
@@ -0,0 +1,70 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { useMiaixzLocale } from "../../i18n/index.js";
4
+ import { Button } from "../button/index.js";
5
+ import { Dialog } from "../dialog/index.js";
6
+ import { InlineMessage } from "../inline-message/index.js";
7
+ import { Input } from "../input/index.js";
8
+ /**
9
+ * Renders a focus-safe confirmation flow by composing the shared modal dialog.
10
+ *
11
+ * @param props - Controlled confirmation state, content, actions, and optional safety controls.
12
+ * @returns A confirmation dialog that keeps cancellation as the initial focus target.
13
+ * @public
14
+ */
15
+ export function ConfirmDialog(props) {
16
+ const { open, onOpenChange, title, description, confirmLabel, cancelLabel, tone = "normal", confirmationText, pending = false, error, onConfirm, } = props;
17
+ const { t } = useMiaixzLocale();
18
+ const confirmationInputRef = useRef(null);
19
+ const previousOpenRef = useRef(open);
20
+ const internalPendingRef = useRef(false);
21
+ const [internalPending, setInternalPending] = useState(false);
22
+ const [confirmationMatches, setConfirmationMatches] = useState(confirmationText === undefined);
23
+ const isPending = pending || internalPending;
24
+ const canConfirm = confirmationText === undefined || confirmationMatches;
25
+ useEffect(() => {
26
+ const opened = open && !previousOpenRef.current;
27
+ previousOpenRef.current = open;
28
+ if (opened) {
29
+ if (confirmationInputRef.current !== null)
30
+ confirmationInputRef.current.value = "";
31
+ setConfirmationMatches(confirmationText === undefined);
32
+ return;
33
+ }
34
+ if (open && confirmationText !== undefined) {
35
+ setConfirmationMatches(confirmationInputRef.current?.value === confirmationText);
36
+ }
37
+ }, [confirmationText, open]);
38
+ /**
39
+ * Forwards dismissal requests only while no confirmation operation is pending.
40
+ *
41
+ * @param nextOpen - Requested controlled open state.
42
+ */
43
+ const handleOpenChange = (nextOpen) => {
44
+ if (!nextOpen && (pending || internalPendingRef.current))
45
+ return;
46
+ onOpenChange(nextOpen);
47
+ };
48
+ /**
49
+ * Runs the confirmation action exactly once and contains synchronous or asynchronous failures.
50
+ */
51
+ const handleConfirm = async () => {
52
+ if (pending || internalPendingRef.current || !canConfirm)
53
+ return;
54
+ internalPendingRef.current = true;
55
+ setInternalPending(true);
56
+ try {
57
+ await onConfirm();
58
+ onOpenChange(false);
59
+ }
60
+ catch {
61
+ // Consumers own localized error presentation through the explicit error property.
62
+ }
63
+ finally {
64
+ internalPendingRef.current = false;
65
+ setInternalPending(false);
66
+ }
67
+ };
68
+ return (_jsx(Dialog, { open: open, onOpenChange: handleOpenChange, title: title, description: description, size: "small", showClose: false, "aria-busy": isPending || undefined, className: "miaixz-confirm-dialog", children: _jsxs("div", { className: "miaixz-confirm-dialog-content", children: [_jsx(Button, { className: "miaixz-confirm-dialog-cancel", disabled: isPending, onClick: () => handleOpenChange(false), children: cancelLabel }), confirmationText !== undefined && (_jsx("div", { className: "miaixz-confirm-dialog-input", children: _jsx(Input, { ref: confirmationInputRef, "aria-label": t("ui.confirm.confirmationInputLabel"), autoComplete: "off", disabled: isPending, spellCheck: false, onChange: (event) => setConfirmationMatches(event.currentTarget.value === confirmationText) }) })), error !== undefined && (_jsx(InlineMessage, { tone: "danger", className: "miaixz-confirm-dialog-error", children: error })), _jsx(Button, { className: "miaixz-confirm-dialog-confirm", variant: tone === "danger" ? "danger" : "primary", disabled: !canConfirm || isPending, loading: isPending, onClick: () => void handleConfirm(), children: confirmLabel })] }) }));
69
+ }
70
+ //# sourceMappingURL=confirm-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.js","sourceRoot":"","sources":["../../../src/components/confirm-dialog/confirm-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { useMiaixzLocale } from \"../../i18n/index.js\";\nimport { Button } from \"../button/index.js\";\nimport { Dialog } from \"../dialog/index.js\";\nimport { InlineMessage } from \"../inline-message/index.js\";\nimport { Input } from \"../input/index.js\";\nimport type { ConfirmDialogProps } from \"./confirm-dialog.types.js\";\n\n/**\n * Renders a focus-safe confirmation flow by composing the shared modal dialog.\n *\n * @param props - Controlled confirmation state, content, actions, and optional safety controls.\n * @returns A confirmation dialog that keeps cancellation as the initial focus target.\n * @public\n */\nexport function ConfirmDialog(props: ConfirmDialogProps) {\n const {\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n tone = \"normal\",\n confirmationText,\n pending = false,\n error,\n onConfirm,\n } = props;\n const { t } = useMiaixzLocale();\n const confirmationInputRef = useRef<HTMLInputElement>(null);\n const previousOpenRef = useRef(open);\n const internalPendingRef = useRef(false);\n const [internalPending, setInternalPending] = useState(false);\n const [confirmationMatches, setConfirmationMatches] = useState(confirmationText === undefined);\n const isPending = pending || internalPending;\n const canConfirm = confirmationText === undefined || confirmationMatches;\n\n useEffect(() => {\n const opened = open && !previousOpenRef.current;\n previousOpenRef.current = open;\n if (opened) {\n if (confirmationInputRef.current !== null) confirmationInputRef.current.value = \"\";\n setConfirmationMatches(confirmationText === undefined);\n return;\n }\n if (open && confirmationText !== undefined) {\n setConfirmationMatches(confirmationInputRef.current?.value === confirmationText);\n }\n }, [confirmationText, open]);\n\n /**\n * Forwards dismissal requests only while no confirmation operation is pending.\n *\n * @param nextOpen - Requested controlled open state.\n */\n const handleOpenChange = (nextOpen: boolean): void => {\n if (!nextOpen && (pending || internalPendingRef.current)) return;\n onOpenChange(nextOpen);\n };\n\n /**\n * Runs the confirmation action exactly once and contains synchronous or asynchronous failures.\n */\n const handleConfirm = async (): Promise<void> => {\n if (pending || internalPendingRef.current || !canConfirm) return;\n internalPendingRef.current = true;\n setInternalPending(true);\n try {\n await onConfirm();\n onOpenChange(false);\n } catch {\n // Consumers own localized error presentation through the explicit error property.\n } finally {\n internalPendingRef.current = false;\n setInternalPending(false);\n }\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={handleOpenChange}\n title={title}\n description={description}\n size=\"small\"\n showClose={false}\n aria-busy={isPending || undefined}\n className=\"miaixz-confirm-dialog\"\n >\n <div className=\"miaixz-confirm-dialog-content\">\n <Button\n className=\"miaixz-confirm-dialog-cancel\"\n disabled={isPending}\n onClick={() => handleOpenChange(false)}\n >\n {cancelLabel}\n </Button>\n {confirmationText !== undefined && (\n <div className=\"miaixz-confirm-dialog-input\">\n <Input\n ref={confirmationInputRef}\n aria-label={t(\"ui.confirm.confirmationInputLabel\")}\n autoComplete=\"off\"\n disabled={isPending}\n spellCheck={false}\n onChange={(event) =>\n setConfirmationMatches(event.currentTarget.value === confirmationText)\n }\n />\n </div>\n )}\n {error !== undefined && (\n <InlineMessage tone=\"danger\" className=\"miaixz-confirm-dialog-error\">\n {error}\n </InlineMessage>\n )}\n <Button\n className=\"miaixz-confirm-dialog-confirm\"\n variant={tone === \"danger\" ? \"danger\" : \"primary\"}\n disabled={!canConfirm || isPending}\n loading={isPending}\n onClick={() => void handleConfirm()}\n >\n {confirmLabel}\n </Button>\n </div>\n </Dialog>\n );\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Defines the semantic treatment of a confirmation action.
4
+ *
5
+ * @public
6
+ */
7
+ export type ConfirmDialogTone = "normal" | "danger";
8
+ /**
9
+ * Configures a controlled confirmation dialog without exposing native dialog attributes.
10
+ *
11
+ * @public
12
+ */
13
+ export interface ConfirmDialogProps {
14
+ /**
15
+ * Controls whether the confirmation dialog is open.
16
+ */
17
+ open: boolean;
18
+ /**
19
+ * Receives accepted open-state changes.
20
+ */
21
+ onOpenChange: (open: boolean) => void;
22
+ /**
23
+ * Supplies the confirmation heading.
24
+ */
25
+ title: ReactNode;
26
+ /**
27
+ * Supplies the confirmation description.
28
+ */
29
+ description: ReactNode;
30
+ /**
31
+ * Supplies the visible confirmation action label.
32
+ */
33
+ confirmLabel: string;
34
+ /**
35
+ * Supplies the visible cancellation action label.
36
+ */
37
+ cancelLabel: string;
38
+ /**
39
+ * Selects the normal or destructive confirmation treatment.
40
+ *
41
+ * @defaultValue `"normal"`
42
+ */
43
+ tone?: ConfirmDialogTone;
44
+ /**
45
+ * Requires an exact internally managed text entry before confirmation.
46
+ */
47
+ confirmationText?: string;
48
+ /**
49
+ * Disables dismissal and actions while an externally managed operation is pending.
50
+ *
51
+ * @defaultValue `false`
52
+ */
53
+ pending?: boolean;
54
+ /**
55
+ * Supplies an already localized failure message.
56
+ */
57
+ error?: ReactNode;
58
+ /**
59
+ * Runs the confirmation action synchronously or asynchronously.
60
+ */
61
+ onConfirm: () => void | Promise<void>;
62
+ }
63
+ //# sourceMappingURL=confirm-dialog.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.types.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/confirm-dialog.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;OAEG;IACH,WAAW,EAAE,SAAS,CAAC;IACvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=confirm-dialog.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.types.js","sourceRoot":"","sources":["../../../src/components/confirm-dialog/confirm-dialog.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReactNode } from \"react\";\n\n/**\n * Defines the semantic treatment of a confirmation action.\n *\n * @public\n */\nexport type ConfirmDialogTone = \"normal\" | \"danger\";\n\n/**\n * Configures a controlled confirmation dialog without exposing native dialog attributes.\n *\n * @public\n */\nexport interface ConfirmDialogProps {\n /**\n * Controls whether the confirmation dialog is open.\n */\n open: boolean;\n /**\n * Receives accepted open-state changes.\n */\n onOpenChange: (open: boolean) => void;\n /**\n * Supplies the confirmation heading.\n */\n title: ReactNode;\n /**\n * Supplies the confirmation description.\n */\n description: ReactNode;\n /**\n * Supplies the visible confirmation action label.\n */\n confirmLabel: string;\n /**\n * Supplies the visible cancellation action label.\n */\n cancelLabel: string;\n /**\n * Selects the normal or destructive confirmation treatment.\n *\n * @defaultValue `\"normal\"`\n */\n tone?: ConfirmDialogTone;\n /**\n * Requires an exact internally managed text entry before confirmation.\n */\n confirmationText?: string;\n /**\n * Disables dismissal and actions while an externally managed operation is pending.\n *\n * @defaultValue `false`\n */\n pending?: boolean;\n /**\n * Supplies an already localized failure message.\n */\n error?: ReactNode;\n /**\n * Runs the confirmation action synchronously or asynchronously.\n */\n onConfirm: () => void | Promise<void>;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { ConfirmDialog } from "./confirm-dialog.js";
2
+ export type { ConfirmDialogProps, ConfirmDialogTone } from "./confirm-dialog.types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/confirm-dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ConfirmDialog } from "./confirm-dialog.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/confirm-dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export { ConfirmDialog } from \"./confirm-dialog.js\";\nexport type { ConfirmDialogProps, ConfirmDialogTone } from \"./confirm-dialog.types.js\";\n"]}
@@ -0,0 +1,9 @@
1
+ import { type ReactElement, type RefAttributes } from "react";
2
+ import type { DataTableProps } from "./data-table.types.js";
3
+ /**
4
+ * Renders a generic controlled server-side data table.
5
+ *
6
+ * @public
7
+ */
8
+ export declare const DataTable: <Row>(props: DataTableProps<Row> & RefAttributes<HTMLDivElement>) => ReactElement;
9
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/data-table.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAqBjF,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,uBAAuB,CAAC;AA8X/B;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAA0C,CAAC,GAAG,EAClE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,KACvD,YAAY,CAAC"}
@@ -0,0 +1,198 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useId } from "react";
3
+ import { createMiaixzUiError } from "../../errors/index.js";
4
+ import { useMiaixzLocale } from "../../i18n/index.js";
5
+ import { classNames } from "../../internal/class-names.js";
6
+ import { Checkbox } from "../checkbox/index.js";
7
+ import { Icon } from "../icon/index.js";
8
+ import { LoadingOverlay } from "../loading-overlay/index.js";
9
+ import { Radio } from "../radio/index.js";
10
+ import { Table, TableBody, TableCaption, TableCell, TableContainer, TableHead, TableHeader, TableRow, } from "../table/index.js";
11
+ /**
12
+ * Resolves the visual and semantic state exposed by the DataTable root.
13
+ *
14
+ * @param loading - Whether server data is currently loading.
15
+ * @param error - Project-owned error content.
16
+ * @param rowCount - Current page row count.
17
+ * @returns Stable DataTable state attribute.
18
+ */
19
+ function getMiaixzDataTableState(loading, error, rowCount) {
20
+ if (loading)
21
+ return "loading";
22
+ if (error !== undefined)
23
+ return "error";
24
+ if (rowCount === 0)
25
+ return "empty";
26
+ return "ready";
27
+ }
28
+ /**
29
+ * Validates unique column identifiers before rendering semantic headings.
30
+ *
31
+ * @typeParam Row - Consumer-owned row shape.
32
+ * @param translate - Active localized message resolver.
33
+ * @param columns - Consumer-provided column definitions.
34
+ */
35
+ function validateMiaixzDataTableColumns(translate, columns) {
36
+ const identifiers = new Set();
37
+ for (const column of columns) {
38
+ if (identifiers.has(column.id)) {
39
+ throw createMiaixzUiError(translate, {
40
+ code: "UI_TABLE_DUPLICATE_COLUMN_ID",
41
+ messageKey: "ui.error.table.duplicateColumnId",
42
+ details: { duplicateId: column.id },
43
+ });
44
+ }
45
+ identifiers.add(column.id);
46
+ }
47
+ }
48
+ /**
49
+ * Resolves row identifiers once and rejects duplicate values.
50
+ *
51
+ * @typeParam Row - Consumer-owned row shape.
52
+ * @param translate - Active localized message resolver.
53
+ * @param rows - Current server-provided page.
54
+ * @param getRowId - Consumer identifier resolver.
55
+ * @returns Current rows paired with validated identifiers.
56
+ */
57
+ function createMiaixzDataTableRows(translate, rows, getRowId) {
58
+ const identifiers = new Set();
59
+ return rows.map((row) => {
60
+ const id = getRowId(row);
61
+ if (identifiers.has(id)) {
62
+ throw createMiaixzUiError(translate, {
63
+ code: "UI_TABLE_DUPLICATE_ROW_ID",
64
+ messageKey: "ui.error.table.duplicateRowId",
65
+ details: { duplicateId: id },
66
+ });
67
+ }
68
+ identifiers.add(id);
69
+ return { id, value: row };
70
+ });
71
+ }
72
+ /**
73
+ * Validates controlled sort and row-selection contracts.
74
+ *
75
+ * @param translate - Active localized message resolver.
76
+ * @param sortControlled - Whether a controlled sort value was supplied.
77
+ * @param hasSortHandler - Whether sort intentions can be observed.
78
+ * @param selectionControlled - Whether controlled selected identifiers were supplied.
79
+ * @param hasSelectionHandler - Whether selection intentions can be observed.
80
+ */
81
+ function validateMiaixzDataTableControls(translate, sortControlled, hasSortHandler, selectionControlled, hasSelectionHandler) {
82
+ if ((sortControlled && !hasSortHandler) || (selectionControlled && !hasSelectionHandler)) {
83
+ throw createMiaixzUiError(translate, {
84
+ code: "UI_CONTROLLED_VALUE_INVALID",
85
+ messageKey: "ui.error.controlled.valueInvalid",
86
+ });
87
+ }
88
+ }
89
+ /**
90
+ * Produces the next sort intent in the frozen three-state cycle.
91
+ *
92
+ * @param columnId - Activated sortable column identifier.
93
+ * @param current - Current controlled server-side sort state.
94
+ * @returns Next sort intent or undefined when the cycle resets.
95
+ */
96
+ function getNextMiaixzDataTableSort(columnId, current) {
97
+ if (current?.columnId !== columnId)
98
+ return { columnId, direction: "ascending" };
99
+ if (current.direction === "ascending")
100
+ return { columnId, direction: "descending" };
101
+ return undefined;
102
+ }
103
+ /**
104
+ * Resolves the sort direction associated with one heading.
105
+ *
106
+ * @param columnId - Column identifier being rendered.
107
+ * @param sort - Current controlled server-side sort state.
108
+ * @returns Active ARIA sort direction when this is the sorted column.
109
+ */
110
+ function getMiaixzDataTableColumnSort(columnId, sort) {
111
+ return sort?.columnId === columnId ? sort.direction : undefined;
112
+ }
113
+ /**
114
+ * Creates a logical alignment class shared by a heading and its body cells.
115
+ *
116
+ * @param align - Optional column alignment.
117
+ * @returns Stable alignment class name.
118
+ */
119
+ function getMiaixzDataTableAlignmentClass(align) {
120
+ return `miaixz-data-table-align-${align ?? "start"}`;
121
+ }
122
+ /**
123
+ * Renders the generic controlled DataTable implementation.
124
+ *
125
+ * @typeParam Row - Consumer-owned row shape.
126
+ * @param properties - DataTable properties and inherited div attributes.
127
+ * @param reference - Forwarded DataTable root reference.
128
+ * @returns Semantic table, async states, and optional pagination slot.
129
+ */
130
+ function DataTableImplementation(properties, reference) {
131
+ const { rows, columns, getRowId, sort, onSortChange, selectedRowIds, onSelectedRowIdsChange, selectionMode = "none", loading = false, error, emptyState, pagination, caption, className, ...props } = properties;
132
+ const { t } = useMiaixzLocale();
133
+ const selectionName = useId();
134
+ validateMiaixzDataTableControls(t, sort !== undefined, onSortChange !== undefined, selectedRowIds !== undefined, onSelectedRowIdsChange !== undefined);
135
+ validateMiaixzDataTableColumns(t, columns);
136
+ const resolvedRows = createMiaixzDataTableRows(t, rows, getRowId);
137
+ const selectedIds = new Set(selectedRowIds ?? []);
138
+ const currentIds = new Set(resolvedRows.map((row) => row.id));
139
+ const selectedCurrentIds = resolvedRows.filter((row) => selectedIds.has(row.id));
140
+ if (selectionMode === "single" && selectedCurrentIds.length > 1) {
141
+ throw createMiaixzUiError(t, {
142
+ code: "UI_CONTROLLED_VALUE_INVALID",
143
+ messageKey: "ui.error.controlled.valueInvalid",
144
+ });
145
+ }
146
+ const hasSelectionColumn = selectionMode !== "none";
147
+ const columnCount = columns.length + (hasSelectionColumn ? 1 : 0);
148
+ const allCurrentSelected = resolvedRows.length > 0 && selectedCurrentIds.length === rows.length;
149
+ const someCurrentSelected = selectedCurrentIds.length > 0 && !allCurrentSelected;
150
+ const state = getMiaixzDataTableState(loading, error, rows.length);
151
+ /**
152
+ * Reports one current-page row-selection intent without retaining internal state.
153
+ *
154
+ * @param rowId - Activated row identifier.
155
+ * @param selected - Requested native control state.
156
+ */
157
+ function changeRowSelection(rowId, selected) {
158
+ if (selectionMode === "single") {
159
+ onSelectedRowIdsChange?.(selected ? [rowId] : []);
160
+ return;
161
+ }
162
+ const nextIds = new Set(selectedIds);
163
+ if (selected)
164
+ nextIds.add(rowId);
165
+ else
166
+ nextIds.delete(rowId);
167
+ onSelectedRowIdsChange?.([...nextIds]);
168
+ }
169
+ /**
170
+ * Reports a current-page select-all intent while preserving invisible identifiers.
171
+ */
172
+ function changePageSelection() {
173
+ const nextIds = new Set(selectedIds);
174
+ if (allCurrentSelected) {
175
+ for (const id of currentIds)
176
+ nextIds.delete(id);
177
+ }
178
+ else {
179
+ for (const id of currentIds)
180
+ nextIds.add(id);
181
+ }
182
+ onSelectedRowIdsChange?.([...nextIds]);
183
+ }
184
+ return (_jsxs("div", { ...props, ref: reference, "aria-busy": loading || undefined, "data-state": state, className: classNames("miaixz-data-table", className), children: [_jsx(LoadingOverlay, { active: loading, label: t("ui.loading"), children: _jsx(TableContainer, { "aria-label": caption, role: "region", tabIndex: 0, className: "miaixz-data-table-container", children: _jsxs(Table, { children: [_jsx(TableCaption, { children: caption }), _jsx(TableHeader, { children: _jsxs(TableRow, { children: [selectionMode === "multiple" && (_jsx(TableHead, { className: "miaixz-data-table-selection-cell", scope: "col", children: _jsx(Checkbox, { "aria-label": t("ui.table.selectPage"), checked: allCurrentSelected, indeterminate: someCurrentSelected, disabled: resolvedRows.length === 0 || onSelectedRowIdsChange === undefined, onChange: changePageSelection, className: "miaixz-data-table-selection-control" }) })), selectionMode === "single" && (_jsx(TableHead, { className: "miaixz-data-table-selection-cell", scope: "col" })), columns.map((column) => {
185
+ const direction = getMiaixzDataTableColumnSort(column.id, sort);
186
+ return (_jsx(TableHead, { scope: "col", "aria-sort": direction, className: classNames("miaixz-data-table-heading", getMiaixzDataTableAlignmentClass(column.align)), children: column.sortable ? (_jsxs("button", { type: "button", disabled: onSortChange === undefined, "data-state": direction ?? "none", className: "miaixz-data-table-sort", onClick: () => onSortChange?.(getNextMiaixzDataTableSort(column.id, sort)), children: [_jsx("span", { className: "miaixz-data-table-heading-content", children: column.header }), _jsx(Icon, { name: "ChevronDown", size: "inline", className: "miaixz-data-table-sort-icon" })] })) : (column.header) }, column.id));
187
+ })] }) }), _jsx(TableBody, { children: error !== undefined ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: columnCount, className: "miaixz-data-table-state-cell", children: _jsx("div", { className: "miaixz-data-table-error", role: "alert", children: error }) }) })) : resolvedRows.length === 0 ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: columnCount, className: "miaixz-data-table-state-cell", children: _jsx("div", { className: "miaixz-data-table-empty", children: emptyState }) }) })) : (resolvedRows.map((row) => {
188
+ const selected = selectedIds.has(row.id) && hasSelectionColumn;
189
+ return (_jsxs(TableRow, { selected: selected, children: [hasSelectionColumn && (_jsx(TableCell, { className: "miaixz-data-table-selection-cell", children: selectionMode === "multiple" ? (_jsx(Checkbox, { "aria-label": t("ui.table.selectRow"), checked: selected, disabled: onSelectedRowIdsChange === undefined, onChange: (event) => changeRowSelection(row.id, event.currentTarget.checked), className: "miaixz-data-table-selection-control" })) : (_jsx(Radio, { "aria-label": t("ui.table.selectRow"), name: selectionName, checked: selected, disabled: onSelectedRowIdsChange === undefined, onChange: (event) => changeRowSelection(row.id, event.currentTarget.checked), className: "miaixz-data-table-selection-control" })) })), columns.map((column) => (_jsx(TableCell, { className: classNames("miaixz-data-table-cell", getMiaixzDataTableAlignmentClass(column.align)), children: column.cell(row.value) }, column.id)))] }, row.id));
190
+ })) })] }) }) }), pagination !== undefined && _jsx("div", { className: "miaixz-data-table-pagination", children: pagination })] }));
191
+ }
192
+ /**
193
+ * Renders a generic controlled server-side data table.
194
+ *
195
+ * @public
196
+ */
197
+ export const DataTable = forwardRef(DataTableImplementation);
198
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../src/components/data-table/data-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useId, type ReactElement, type RefAttributes } from \"react\";\n\nimport type { MiaixzTranslator } from \"@miaixz/sdk/i18n\";\n\nimport { createMiaixzUiError } from \"../../errors/index.js\";\nimport { useMiaixzLocale } from \"../../i18n/index.js\";\nimport { classNames } from \"../../internal/class-names.js\";\nimport { Checkbox } from \"../checkbox/index.js\";\nimport { Icon } from \"../icon/index.js\";\nimport { LoadingOverlay } from \"../loading-overlay/index.js\";\nimport { Radio } from \"../radio/index.js\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableContainer,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../table/index.js\";\nimport type {\n DataTableColumn,\n DataTableProps,\n DataTableSort,\n DataTableSortDirection,\n} from \"./data-table.types.js\";\n\n/**\n * Associates one immutable row value with its validated identifier.\n *\n * @typeParam Row - Consumer-owned row shape.\n */\ninterface MiaixzDataTableRow<Row> {\n /**\n * Contains the validated unique row identifier.\n */\n readonly id: string;\n\n /**\n * Contains the original consumer-owned row value.\n */\n readonly value: Row;\n}\n\n/**\n * Resolves the visual and semantic state exposed by the DataTable root.\n *\n * @param loading - Whether server data is currently loading.\n * @param error - Project-owned error content.\n * @param rowCount - Current page row count.\n * @returns Stable DataTable state attribute.\n */\nfunction getMiaixzDataTableState(\n loading: boolean,\n error: unknown,\n rowCount: number,\n): \"loading\" | \"error\" | \"empty\" | \"ready\" {\n if (loading) return \"loading\";\n if (error !== undefined) return \"error\";\n if (rowCount === 0) return \"empty\";\n return \"ready\";\n}\n\n/**\n * Validates unique column identifiers before rendering semantic headings.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @param translate - Active localized message resolver.\n * @param columns - Consumer-provided column definitions.\n */\nfunction validateMiaixzDataTableColumns<Row>(\n translate: MiaixzTranslator,\n columns: readonly DataTableColumn<Row>[],\n): void {\n const identifiers = new Set<string>();\n for (const column of columns) {\n if (identifiers.has(column.id)) {\n throw createMiaixzUiError(translate, {\n code: \"UI_TABLE_DUPLICATE_COLUMN_ID\",\n messageKey: \"ui.error.table.duplicateColumnId\",\n details: { duplicateId: column.id },\n });\n }\n identifiers.add(column.id);\n }\n}\n\n/**\n * Resolves row identifiers once and rejects duplicate values.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @param translate - Active localized message resolver.\n * @param rows - Current server-provided page.\n * @param getRowId - Consumer identifier resolver.\n * @returns Current rows paired with validated identifiers.\n */\nfunction createMiaixzDataTableRows<Row>(\n translate: MiaixzTranslator,\n rows: readonly Row[],\n getRowId: (row: Readonly<Row>) => string,\n): readonly MiaixzDataTableRow<Row>[] {\n const identifiers = new Set<string>();\n return rows.map((row) => {\n const id = getRowId(row);\n if (identifiers.has(id)) {\n throw createMiaixzUiError(translate, {\n code: \"UI_TABLE_DUPLICATE_ROW_ID\",\n messageKey: \"ui.error.table.duplicateRowId\",\n details: { duplicateId: id },\n });\n }\n identifiers.add(id);\n return { id, value: row };\n });\n}\n\n/**\n * Validates controlled sort and row-selection contracts.\n *\n * @param translate - Active localized message resolver.\n * @param sortControlled - Whether a controlled sort value was supplied.\n * @param hasSortHandler - Whether sort intentions can be observed.\n * @param selectionControlled - Whether controlled selected identifiers were supplied.\n * @param hasSelectionHandler - Whether selection intentions can be observed.\n */\nfunction validateMiaixzDataTableControls(\n translate: MiaixzTranslator,\n sortControlled: boolean,\n hasSortHandler: boolean,\n selectionControlled: boolean,\n hasSelectionHandler: boolean,\n): void {\n if ((sortControlled && !hasSortHandler) || (selectionControlled && !hasSelectionHandler)) {\n throw createMiaixzUiError(translate, {\n code: \"UI_CONTROLLED_VALUE_INVALID\",\n messageKey: \"ui.error.controlled.valueInvalid\",\n });\n }\n}\n\n/**\n * Produces the next sort intent in the frozen three-state cycle.\n *\n * @param columnId - Activated sortable column identifier.\n * @param current - Current controlled server-side sort state.\n * @returns Next sort intent or undefined when the cycle resets.\n */\nfunction getNextMiaixzDataTableSort(\n columnId: string,\n current: DataTableSort | undefined,\n): DataTableSort | undefined {\n if (current?.columnId !== columnId) return { columnId, direction: \"ascending\" };\n if (current.direction === \"ascending\") return { columnId, direction: \"descending\" };\n return undefined;\n}\n\n/**\n * Resolves the sort direction associated with one heading.\n *\n * @param columnId - Column identifier being rendered.\n * @param sort - Current controlled server-side sort state.\n * @returns Active ARIA sort direction when this is the sorted column.\n */\nfunction getMiaixzDataTableColumnSort(\n columnId: string,\n sort: DataTableSort | undefined,\n): DataTableSortDirection | undefined {\n return sort?.columnId === columnId ? sort.direction : undefined;\n}\n\n/**\n * Creates a logical alignment class shared by a heading and its body cells.\n *\n * @param align - Optional column alignment.\n * @returns Stable alignment class name.\n */\nfunction getMiaixzDataTableAlignmentClass(align: DataTableColumn<unknown>[\"align\"]): string {\n return `miaixz-data-table-align-${align ?? \"start\"}`;\n}\n\n/**\n * Renders the generic controlled DataTable implementation.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @param properties - DataTable properties and inherited div attributes.\n * @param reference - Forwarded DataTable root reference.\n * @returns Semantic table, async states, and optional pagination slot.\n */\nfunction DataTableImplementation<Row>(\n properties: DataTableProps<Row>,\n reference: React.ForwardedRef<HTMLDivElement>,\n): ReactElement {\n const {\n rows,\n columns,\n getRowId,\n sort,\n onSortChange,\n selectedRowIds,\n onSelectedRowIdsChange,\n selectionMode = \"none\",\n loading = false,\n error,\n emptyState,\n pagination,\n caption,\n className,\n ...props\n } = properties;\n const { t } = useMiaixzLocale();\n const selectionName = useId();\n validateMiaixzDataTableControls(\n t,\n sort !== undefined,\n onSortChange !== undefined,\n selectedRowIds !== undefined,\n onSelectedRowIdsChange !== undefined,\n );\n validateMiaixzDataTableColumns(t, columns);\n const resolvedRows = createMiaixzDataTableRows(t, rows, getRowId);\n const selectedIds = new Set(selectedRowIds ?? []);\n const currentIds = new Set(resolvedRows.map((row) => row.id));\n const selectedCurrentIds = resolvedRows.filter((row) => selectedIds.has(row.id));\n if (selectionMode === \"single\" && selectedCurrentIds.length > 1) {\n throw createMiaixzUiError(t, {\n code: \"UI_CONTROLLED_VALUE_INVALID\",\n messageKey: \"ui.error.controlled.valueInvalid\",\n });\n }\n\n const hasSelectionColumn = selectionMode !== \"none\";\n const columnCount = columns.length + (hasSelectionColumn ? 1 : 0);\n const allCurrentSelected = resolvedRows.length > 0 && selectedCurrentIds.length === rows.length;\n const someCurrentSelected = selectedCurrentIds.length > 0 && !allCurrentSelected;\n const state = getMiaixzDataTableState(loading, error, rows.length);\n\n /**\n * Reports one current-page row-selection intent without retaining internal state.\n *\n * @param rowId - Activated row identifier.\n * @param selected - Requested native control state.\n */\n function changeRowSelection(rowId: string, selected: boolean): void {\n if (selectionMode === \"single\") {\n onSelectedRowIdsChange?.(selected ? [rowId] : []);\n return;\n }\n const nextIds = new Set(selectedIds);\n if (selected) nextIds.add(rowId);\n else nextIds.delete(rowId);\n onSelectedRowIdsChange?.([...nextIds]);\n }\n\n /**\n * Reports a current-page select-all intent while preserving invisible identifiers.\n */\n function changePageSelection(): void {\n const nextIds = new Set(selectedIds);\n if (allCurrentSelected) {\n for (const id of currentIds) nextIds.delete(id);\n } else {\n for (const id of currentIds) nextIds.add(id);\n }\n onSelectedRowIdsChange?.([...nextIds]);\n }\n\n return (\n <div\n {...props}\n ref={reference}\n aria-busy={loading || undefined}\n data-state={state}\n className={classNames(\"miaixz-data-table\", className)}\n >\n <LoadingOverlay active={loading} label={t(\"ui.loading\")}>\n <TableContainer\n aria-label={caption}\n role=\"region\"\n tabIndex={0}\n className=\"miaixz-data-table-container\"\n >\n <Table>\n <TableCaption>{caption}</TableCaption>\n <TableHeader>\n <TableRow>\n {selectionMode === \"multiple\" && (\n <TableHead className=\"miaixz-data-table-selection-cell\" scope=\"col\">\n <Checkbox\n aria-label={t(\"ui.table.selectPage\")}\n checked={allCurrentSelected}\n indeterminate={someCurrentSelected}\n disabled={resolvedRows.length === 0 || onSelectedRowIdsChange === undefined}\n onChange={changePageSelection}\n className=\"miaixz-data-table-selection-control\"\n />\n </TableHead>\n )}\n {selectionMode === \"single\" && (\n <TableHead className=\"miaixz-data-table-selection-cell\" scope=\"col\" />\n )}\n {columns.map((column) => {\n const direction = getMiaixzDataTableColumnSort(column.id, sort);\n return (\n <TableHead\n key={column.id}\n scope=\"col\"\n aria-sort={direction}\n className={classNames(\n \"miaixz-data-table-heading\",\n getMiaixzDataTableAlignmentClass(column.align),\n )}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n disabled={onSortChange === undefined}\n data-state={direction ?? \"none\"}\n className=\"miaixz-data-table-sort\"\n onClick={() =>\n onSortChange?.(getNextMiaixzDataTableSort(column.id, sort))\n }\n >\n <span className=\"miaixz-data-table-heading-content\">{column.header}</span>\n <Icon\n name=\"ChevronDown\"\n size=\"inline\"\n className=\"miaixz-data-table-sort-icon\"\n />\n </button>\n ) : (\n column.header\n )}\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {error !== undefined ? (\n <TableRow>\n <TableCell colSpan={columnCount} className=\"miaixz-data-table-state-cell\">\n <div className=\"miaixz-data-table-error\" role=\"alert\">\n {error}\n </div>\n </TableCell>\n </TableRow>\n ) : resolvedRows.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columnCount} className=\"miaixz-data-table-state-cell\">\n <div className=\"miaixz-data-table-empty\">{emptyState}</div>\n </TableCell>\n </TableRow>\n ) : (\n resolvedRows.map((row) => {\n const selected = selectedIds.has(row.id) && hasSelectionColumn;\n return (\n <TableRow key={row.id} selected={selected}>\n {hasSelectionColumn && (\n <TableCell className=\"miaixz-data-table-selection-cell\">\n {selectionMode === \"multiple\" ? (\n <Checkbox\n aria-label={t(\"ui.table.selectRow\")}\n checked={selected}\n disabled={onSelectedRowIdsChange === undefined}\n onChange={(event) =>\n changeRowSelection(row.id, event.currentTarget.checked)\n }\n className=\"miaixz-data-table-selection-control\"\n />\n ) : (\n <Radio\n aria-label={t(\"ui.table.selectRow\")}\n name={selectionName}\n checked={selected}\n disabled={onSelectedRowIdsChange === undefined}\n onChange={(event) =>\n changeRowSelection(row.id, event.currentTarget.checked)\n }\n className=\"miaixz-data-table-selection-control\"\n />\n )}\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={column.id}\n className={classNames(\n \"miaixz-data-table-cell\",\n getMiaixzDataTableAlignmentClass(column.align),\n )}\n >\n {column.cell(row.value)}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n </TableContainer>\n </LoadingOverlay>\n {pagination !== undefined && <div className=\"miaixz-data-table-pagination\">{pagination}</div>}\n </div>\n );\n}\n\n/**\n * Renders a generic controlled server-side data table.\n *\n * @public\n */\nexport const DataTable = forwardRef(DataTableImplementation) as <Row>(\n props: DataTableProps<Row> & RefAttributes<HTMLDivElement>,\n) => ReactElement;\n"]}
@@ -0,0 +1,127 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ /**
3
+ * Defines the server-owned sort directions exposed by DataTable.
4
+ *
5
+ * @public
6
+ */
7
+ export type DataTableSortDirection = "ascending" | "descending";
8
+ /**
9
+ * Describes the active server-side sort intent.
10
+ *
11
+ * @public
12
+ */
13
+ export interface DataTableSort {
14
+ /**
15
+ * Identifies the column requested by the consumer.
16
+ */
17
+ readonly columnId: string;
18
+ /**
19
+ * Identifies the requested server-side sort direction.
20
+ */
21
+ readonly direction: DataTableSortDirection;
22
+ }
23
+ /**
24
+ * Defines one generic DataTable column without coupling it to business fields.
25
+ *
26
+ * @typeParam Row - Consumer-owned row shape.
27
+ * @public
28
+ */
29
+ export interface DataTableColumn<Row> {
30
+ /**
31
+ * Supplies the unique column identifier.
32
+ */
33
+ readonly id: string;
34
+ /**
35
+ * Renders the semantic column heading.
36
+ */
37
+ readonly header: ReactNode;
38
+ /**
39
+ * Renders a cell for one immutable row value.
40
+ */
41
+ readonly cell: (row: Readonly<Row>) => ReactNode;
42
+ /**
43
+ * Enables server-side sort intent for this column.
44
+ *
45
+ * @defaultValue `false`
46
+ */
47
+ readonly sortable?: boolean;
48
+ /**
49
+ * Aligns the heading and cells using logical text directions.
50
+ *
51
+ * @defaultValue `"start"`
52
+ */
53
+ readonly align?: "start" | "center" | "end";
54
+ }
55
+ /**
56
+ * Defines the properties owned by the generic Miaixz DataTable contract.
57
+ *
58
+ * @typeParam Row - Consumer-owned row shape.
59
+ * @public
60
+ */
61
+ export interface MiaixzDataTableOwnProps<Row> {
62
+ /**
63
+ * Supplies the current server-provided page of rows.
64
+ */
65
+ rows: readonly Row[];
66
+ /**
67
+ * Supplies immutable generic column definitions.
68
+ */
69
+ columns: readonly DataTableColumn<Row>[];
70
+ /**
71
+ * Resolves a stable unique identifier for one row.
72
+ */
73
+ getRowId: (row: Readonly<Row>) => string;
74
+ /**
75
+ * Supplies the controlled server-side sort state.
76
+ */
77
+ sort?: DataTableSort;
78
+ /**
79
+ * Receives the next server-side sort intent.
80
+ */
81
+ onSortChange?: (sort: DataTableSort | undefined) => void;
82
+ /**
83
+ * Supplies the controlled selected-row identifiers.
84
+ */
85
+ selectedRowIds?: readonly string[];
86
+ /**
87
+ * Receives selected identifiers after a current-page selection intent.
88
+ */
89
+ onSelectedRowIdsChange?: (ids: readonly string[]) => void;
90
+ /**
91
+ * Selects the row-selection behavior.
92
+ *
93
+ * @defaultValue `"none"`
94
+ */
95
+ selectionMode?: "none" | "single" | "multiple";
96
+ /**
97
+ * Indicates that the consumer is loading server data.
98
+ *
99
+ * @defaultValue `false`
100
+ */
101
+ loading?: boolean;
102
+ /**
103
+ * Supplies project-owned error-state content.
104
+ */
105
+ error?: ReactNode;
106
+ /**
107
+ * Supplies project-owned empty-state content.
108
+ */
109
+ emptyState?: ReactNode;
110
+ /**
111
+ * Supplies a project-owned server pagination control.
112
+ */
113
+ pagination?: ReactNode;
114
+ /**
115
+ * Supplies the required accessible table caption.
116
+ */
117
+ caption: string;
118
+ }
119
+ /**
120
+ * Configures a generic controlled server-side data table.
121
+ *
122
+ * @typeParam Row - Consumer-owned row shape.
123
+ * @public
124
+ */
125
+ export interface DataTableProps<Row> extends Omit<HTMLAttributes<HTMLDivElement>, keyof MiaixzDataTableOwnProps<Row>>, MiaixzDataTableOwnProps<Row> {
126
+ }
127
+ //# sourceMappingURL=data-table.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/data-table.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,YAAY,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IAEjD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB,CAAC,GAAG;IAC1C;;OAEG;IACH,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,SAAS,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC;IAEzC;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC;;OAEG;IACH,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAE1D;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAE/C;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG,CACjC,SACE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC,EACxE,uBAAuB,CAAC,GAAG,CAAC;CAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data-table.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.types.js","sourceRoot":"","sources":["../../../src/components/data-table/data-table.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Defines the server-owned sort directions exposed by DataTable.\n *\n * @public\n */\nexport type DataTableSortDirection = \"ascending\" | \"descending\";\n\n/**\n * Describes the active server-side sort intent.\n *\n * @public\n */\nexport interface DataTableSort {\n /**\n * Identifies the column requested by the consumer.\n */\n readonly columnId: string;\n\n /**\n * Identifies the requested server-side sort direction.\n */\n readonly direction: DataTableSortDirection;\n}\n\n/**\n * Defines one generic DataTable column without coupling it to business fields.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @public\n */\nexport interface DataTableColumn<Row> {\n /**\n * Supplies the unique column identifier.\n */\n readonly id: string;\n\n /**\n * Renders the semantic column heading.\n */\n readonly header: ReactNode;\n\n /**\n * Renders a cell for one immutable row value.\n */\n readonly cell: (row: Readonly<Row>) => ReactNode;\n\n /**\n * Enables server-side sort intent for this column.\n *\n * @defaultValue `false`\n */\n readonly sortable?: boolean;\n\n /**\n * Aligns the heading and cells using logical text directions.\n *\n * @defaultValue `\"start\"`\n */\n readonly align?: \"start\" | \"center\" | \"end\";\n}\n\n/**\n * Defines the properties owned by the generic Miaixz DataTable contract.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @public\n */\nexport interface MiaixzDataTableOwnProps<Row> {\n /**\n * Supplies the current server-provided page of rows.\n */\n rows: readonly Row[];\n\n /**\n * Supplies immutable generic column definitions.\n */\n columns: readonly DataTableColumn<Row>[];\n\n /**\n * Resolves a stable unique identifier for one row.\n */\n getRowId: (row: Readonly<Row>) => string;\n\n /**\n * Supplies the controlled server-side sort state.\n */\n sort?: DataTableSort;\n\n /**\n * Receives the next server-side sort intent.\n */\n onSortChange?: (sort: DataTableSort | undefined) => void;\n\n /**\n * Supplies the controlled selected-row identifiers.\n */\n selectedRowIds?: readonly string[];\n\n /**\n * Receives selected identifiers after a current-page selection intent.\n */\n onSelectedRowIdsChange?: (ids: readonly string[]) => void;\n\n /**\n * Selects the row-selection behavior.\n *\n * @defaultValue `\"none\"`\n */\n selectionMode?: \"none\" | \"single\" | \"multiple\";\n\n /**\n * Indicates that the consumer is loading server data.\n *\n * @defaultValue `false`\n */\n loading?: boolean;\n\n /**\n * Supplies project-owned error-state content.\n */\n error?: ReactNode;\n\n /**\n * Supplies project-owned empty-state content.\n */\n emptyState?: ReactNode;\n\n /**\n * Supplies a project-owned server pagination control.\n */\n pagination?: ReactNode;\n\n /**\n * Supplies the required accessible table caption.\n */\n caption: string;\n}\n\n/**\n * Configures a generic controlled server-side data table.\n *\n * @typeParam Row - Consumer-owned row shape.\n * @public\n */\nexport interface DataTableProps<Row>\n extends\n Omit<HTMLAttributes<HTMLDivElement>, keyof MiaixzDataTableOwnProps<Row>>,\n MiaixzDataTableOwnProps<Row> {}\n"]}
@@ -0,0 +1,3 @@
1
+ export { DataTable } from "./data-table.js";
2
+ export type { DataTableColumn, DataTableProps, DataTableSort, DataTableSortDirection, MiaixzDataTableOwnProps, } from "./data-table.types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DataTable } from "./data-table.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/data-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export { DataTable } from \"./data-table.js\";\nexport type {\n DataTableColumn,\n DataTableProps,\n DataTableSort,\n DataTableSortDirection,\n MiaixzDataTableOwnProps,\n} from \"./data-table.types.js\";\n"]}
@@ -0,0 +1,8 @@
1
+ import type { DialogProps } from "./dialog.types.js";
2
+ /**
3
+ * Controls a native modal dialog with localized dismissal and focus-safe lifecycle.
4
+ *
5
+ * @public
6
+ */
7
+ export declare const Dialog: import("react").ForwardRefExoticComponent<DialogProps & import("react").RefAttributes<HTMLDialogElement>>;
8
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/components/dialog/dialog.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,MAAM,2GA0FjB,CAAC"}