@treeui/vue 0.7.0 → 0.10.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 (732) hide show
  1. package/README.md +3 -8
  2. package/dist/components/TAccordion.cjs +2 -0
  3. package/dist/components/TAccordion.cjs.map +1 -0
  4. package/dist/components/TAccordion.js +7 -0
  5. package/dist/components/TAccordion.js.map +1 -0
  6. package/dist/components/{TreeAccordion.vue.d.ts → TAccordion.vue.d.ts} +1 -1
  7. package/dist/components/TAccordion.vue.d.ts.map +1 -0
  8. package/dist/components/TAccordion.vue_vue_type_script_setup_true_lang.cjs +2 -0
  9. package/dist/components/TAccordion.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  10. package/dist/components/TAccordion.vue_vue_type_script_setup_true_lang.js +97 -0
  11. package/dist/components/TAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  12. package/dist/components/TAccordionItem.cjs +2 -0
  13. package/dist/components/TAccordionItem.cjs.map +1 -0
  14. package/dist/components/TAccordionItem.js +7 -0
  15. package/dist/components/TAccordionItem.js.map +1 -0
  16. package/dist/components/{TreeAccordionItem.vue.d.ts → TAccordionItem.vue.d.ts} +1 -1
  17. package/dist/components/TAccordionItem.vue.d.ts.map +1 -0
  18. package/dist/components/TAccordionItem.vue_vue_type_script_setup_true_lang.cjs +2 -0
  19. package/dist/components/TAccordionItem.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  20. package/dist/components/TAccordionItem.vue_vue_type_script_setup_true_lang.js +83 -0
  21. package/dist/components/TAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  22. package/dist/components/TAlert.cjs +2 -0
  23. package/dist/components/TAlert.cjs.map +1 -0
  24. package/dist/components/TAlert.js +7 -0
  25. package/dist/components/TAlert.js.map +1 -0
  26. package/dist/components/{TreeAlert.vue.d.ts → TAlert.vue.d.ts} +7 -7
  27. package/dist/components/TAlert.vue.d.ts.map +1 -0
  28. package/dist/components/TAlert.vue_vue_type_script_setup_true_lang.cjs +2 -0
  29. package/dist/components/TAlert.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  30. package/dist/components/TAlert.vue_vue_type_script_setup_true_lang.js +57 -0
  31. package/dist/components/TAlert.vue_vue_type_script_setup_true_lang.js.map +1 -0
  32. package/dist/components/TAvatar.cjs +2 -0
  33. package/dist/components/TAvatar.cjs.map +1 -0
  34. package/dist/components/TAvatar.js +7 -0
  35. package/dist/components/TAvatar.js.map +1 -0
  36. package/dist/components/{TreeAvatar.vue.d.ts → TAvatar.vue.d.ts} +7 -7
  37. package/dist/components/TAvatar.vue.d.ts.map +1 -0
  38. package/dist/components/TAvatar.vue_vue_type_script_setup_true_lang.cjs +2 -0
  39. package/dist/components/TAvatar.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  40. package/dist/components/TAvatar.vue_vue_type_script_setup_true_lang.js +46 -0
  41. package/dist/components/TAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  42. package/dist/components/TBadge.cjs +2 -0
  43. package/dist/components/TBadge.cjs.map +1 -0
  44. package/dist/components/TBadge.js +7 -0
  45. package/dist/components/TBadge.js.map +1 -0
  46. package/dist/components/{TreeBadge.vue.d.ts → TBadge.vue.d.ts} +9 -9
  47. package/dist/components/TBadge.vue.d.ts.map +1 -0
  48. package/dist/components/TBadge.vue_vue_type_script_setup_true_lang.cjs +2 -0
  49. package/dist/components/TBadge.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  50. package/dist/components/TBadge.vue_vue_type_script_setup_true_lang.js +27 -0
  51. package/dist/components/TBadge.vue_vue_type_script_setup_true_lang.js.map +1 -0
  52. package/dist/components/TBreadcrumb.cjs +2 -0
  53. package/dist/components/TBreadcrumb.cjs.map +1 -0
  54. package/dist/components/TBreadcrumb.js +7 -0
  55. package/dist/components/TBreadcrumb.js.map +1 -0
  56. package/dist/components/{TreeBreadcrumb.vue.d.ts → TBreadcrumb.vue.d.ts} +1 -1
  57. package/dist/components/TBreadcrumb.vue.d.ts.map +1 -0
  58. package/dist/components/TBreadcrumb.vue_vue_type_script_setup_true_lang.cjs +2 -0
  59. package/dist/components/TBreadcrumb.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  60. package/dist/components/TBreadcrumb.vue_vue_type_script_setup_true_lang.js +20 -0
  61. package/dist/components/TBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
  62. package/dist/components/TBreadcrumbItem.cjs +2 -0
  63. package/dist/components/TBreadcrumbItem.cjs.map +1 -0
  64. package/dist/components/TBreadcrumbItem.js +7 -0
  65. package/dist/components/TBreadcrumbItem.js.map +1 -0
  66. package/dist/components/{TreeBreadcrumbItem.vue.d.ts → TBreadcrumbItem.vue.d.ts} +1 -1
  67. package/dist/components/TBreadcrumbItem.vue.d.ts.map +1 -0
  68. package/dist/components/TBreadcrumbItem.vue_vue_type_script_setup_true_lang.cjs +2 -0
  69. package/dist/components/TBreadcrumbItem.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  70. package/dist/components/TBreadcrumbItem.vue_vue_type_script_setup_true_lang.js +28 -0
  71. package/dist/components/TBreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  72. package/dist/components/TButton.cjs +2 -0
  73. package/dist/components/TButton.cjs.map +1 -0
  74. package/dist/components/TButton.js +7 -0
  75. package/dist/components/TButton.js.map +1 -0
  76. package/dist/components/{TreeButton.vue.d.ts → TButton.vue.d.ts} +6 -6
  77. package/dist/components/TButton.vue.d.ts.map +1 -0
  78. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.cjs +2 -0
  79. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  80. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.js +91 -0
  81. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  82. package/dist/components/TCard.cjs +2 -0
  83. package/dist/components/TCard.cjs.map +1 -0
  84. package/dist/components/TCard.js +7 -0
  85. package/dist/components/TCard.js.map +1 -0
  86. package/dist/components/{TreeCard.vue.d.ts → TCard.vue.d.ts} +6 -6
  87. package/dist/components/TCard.vue.d.ts.map +1 -0
  88. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.cjs +2 -0
  89. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  90. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.js +42 -0
  91. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  92. package/dist/components/TCheckbox.cjs +2 -0
  93. package/dist/components/TCheckbox.cjs.map +1 -0
  94. package/dist/components/TCheckbox.js +7 -0
  95. package/dist/components/TCheckbox.js.map +1 -0
  96. package/dist/components/{TreeCheckbox.vue.d.ts → TCheckbox.vue.d.ts} +4 -4
  97. package/dist/components/TCheckbox.vue.d.ts.map +1 -0
  98. package/dist/components/TCheckbox.vue_vue_type_script_setup_true_lang.cjs +2 -0
  99. package/dist/components/TCheckbox.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  100. package/dist/components/TCheckbox.vue_vue_type_script_setup_true_lang.js +106 -0
  101. package/dist/components/TCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  102. package/dist/components/TCombobox.cjs +2 -0
  103. package/dist/components/TCombobox.cjs.map +1 -0
  104. package/dist/components/TCombobox.js +7 -0
  105. package/dist/components/TCombobox.js.map +1 -0
  106. package/dist/components/{TreeCombobox.vue.d.ts → TCombobox.vue.d.ts} +9 -9
  107. package/dist/components/TCombobox.vue.d.ts.map +1 -0
  108. package/dist/components/TCombobox.vue_vue_type_script_setup_true_lang.cjs +2 -0
  109. package/dist/components/TCombobox.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  110. package/dist/components/TCombobox.vue_vue_type_script_setup_true_lang.js +282 -0
  111. package/dist/components/TCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  112. package/dist/components/TConfirmDialog.cjs +2 -0
  113. package/dist/components/TConfirmDialog.cjs.map +1 -0
  114. package/dist/components/TConfirmDialog.js +7 -0
  115. package/dist/components/TConfirmDialog.js.map +1 -0
  116. package/dist/components/{TreeConfirmDialog.vue.d.ts → TConfirmDialog.vue.d.ts} +6 -6
  117. package/dist/components/TConfirmDialog.vue.d.ts.map +1 -0
  118. package/dist/components/TConfirmDialog.vue_vue_type_script_setup_true_lang.cjs +2 -0
  119. package/dist/components/TConfirmDialog.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  120. package/dist/components/TConfirmDialog.vue_vue_type_script_setup_true_lang.js +145 -0
  121. package/dist/components/TConfirmDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  122. package/dist/components/TContainer.cjs +2 -0
  123. package/dist/components/TContainer.cjs.map +1 -0
  124. package/dist/components/TContainer.js +7 -0
  125. package/dist/components/TContainer.js.map +1 -0
  126. package/dist/components/{TreeContainer.vue.d.ts → TContainer.vue.d.ts} +4 -4
  127. package/dist/components/TContainer.vue.d.ts.map +1 -0
  128. package/dist/components/TContainer.vue_vue_type_script_setup_true_lang.cjs +2 -0
  129. package/dist/components/TContainer.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  130. package/dist/components/TContainer.vue_vue_type_script_setup_true_lang.js +43 -0
  131. package/dist/components/TContainer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  132. package/dist/components/TContextMenu.cjs +2 -0
  133. package/dist/components/TContextMenu.cjs.map +1 -0
  134. package/dist/components/TContextMenu.js +7 -0
  135. package/dist/components/TContextMenu.js.map +1 -0
  136. package/dist/components/{TreeContextMenu.vue.d.ts → TContextMenu.vue.d.ts} +9 -9
  137. package/dist/components/TContextMenu.vue.d.ts.map +1 -0
  138. package/dist/components/TContextMenu.vue_vue_type_script_setup_true_lang.cjs +2 -0
  139. package/dist/components/TContextMenu.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  140. package/dist/components/TContextMenu.vue_vue_type_script_setup_true_lang.js +149 -0
  141. package/dist/components/TContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  142. package/dist/components/TDatePicker.cjs +2 -0
  143. package/dist/components/TDatePicker.cjs.map +1 -0
  144. package/dist/components/TDatePicker.js +7 -0
  145. package/dist/components/TDatePicker.js.map +1 -0
  146. package/dist/components/{TreeDatePicker.vue.d.ts → TDatePicker.vue.d.ts} +4 -4
  147. package/dist/components/TDatePicker.vue.d.ts.map +1 -0
  148. package/dist/components/TDatePicker.vue_vue_type_script_setup_true_lang.cjs +2 -0
  149. package/dist/components/TDatePicker.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  150. package/dist/components/TDatePicker.vue_vue_type_script_setup_true_lang.js +305 -0
  151. package/dist/components/TDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  152. package/dist/components/TDateTimePicker.cjs +2 -0
  153. package/dist/components/TDateTimePicker.cjs.map +1 -0
  154. package/dist/components/TDateTimePicker.js +7 -0
  155. package/dist/components/TDateTimePicker.js.map +1 -0
  156. package/dist/components/{TreeDateTimePicker.vue.d.ts → TDateTimePicker.vue.d.ts} +4 -4
  157. package/dist/components/TDateTimePicker.vue.d.ts.map +1 -0
  158. package/dist/components/TDateTimePicker.vue_vue_type_script_setup_true_lang.cjs +2 -0
  159. package/dist/components/TDateTimePicker.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  160. package/dist/components/TDateTimePicker.vue_vue_type_script_setup_true_lang.js +409 -0
  161. package/dist/components/TDateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  162. package/dist/components/TDivider.cjs +2 -0
  163. package/dist/components/TDivider.cjs.map +1 -0
  164. package/dist/components/TDivider.js +7 -0
  165. package/dist/components/TDivider.js.map +1 -0
  166. package/dist/components/{TreeDivider.vue.d.ts → TDivider.vue.d.ts} +1 -1
  167. package/dist/components/TDivider.vue.d.ts.map +1 -0
  168. package/dist/components/TDivider.vue_vue_type_script_setup_true_lang.cjs +2 -0
  169. package/dist/components/TDivider.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  170. package/dist/components/TDivider.vue_vue_type_script_setup_true_lang.js +30 -0
  171. package/dist/components/TDivider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  172. package/dist/components/TDrawer.cjs +2 -0
  173. package/dist/components/TDrawer.cjs.map +1 -0
  174. package/dist/components/TDrawer.js +7 -0
  175. package/dist/components/TDrawer.js.map +1 -0
  176. package/dist/components/{TreeDrawer.vue.d.ts → TDrawer.vue.d.ts} +6 -6
  177. package/dist/components/TDrawer.vue.d.ts.map +1 -0
  178. package/dist/components/TDrawer.vue_vue_type_script_setup_true_lang.cjs +2 -0
  179. package/dist/components/TDrawer.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  180. package/dist/components/TDrawer.vue_vue_type_script_setup_true_lang.js +168 -0
  181. package/dist/components/TDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  182. package/dist/components/TDropdown.cjs +2 -0
  183. package/dist/components/TDropdown.cjs.map +1 -0
  184. package/dist/components/TDropdown.js +7 -0
  185. package/dist/components/TDropdown.js.map +1 -0
  186. package/dist/components/{TreeDropdown.vue.d.ts → TDropdown.vue.d.ts} +12 -9
  187. package/dist/components/TDropdown.vue.d.ts.map +1 -0
  188. package/dist/components/TDropdown.vue_vue_type_script_setup_true_lang.cjs +2 -0
  189. package/dist/components/TDropdown.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  190. package/dist/components/TDropdown.vue_vue_type_script_setup_true_lang.js +176 -0
  191. package/dist/components/TDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -0
  192. package/dist/components/TEmptyState.cjs +2 -0
  193. package/dist/components/TEmptyState.cjs.map +1 -0
  194. package/dist/components/TEmptyState.js +7 -0
  195. package/dist/components/TEmptyState.js.map +1 -0
  196. package/dist/components/{TreeEmptyState.vue.d.ts → TEmptyState.vue.d.ts} +4 -4
  197. package/dist/components/TEmptyState.vue.d.ts.map +1 -0
  198. package/dist/components/TEmptyState.vue_vue_type_script_setup_true_lang.cjs +2 -0
  199. package/dist/components/TEmptyState.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  200. package/dist/components/TEmptyState.vue_vue_type_script_setup_true_lang.js +64 -0
  201. package/dist/components/TEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  202. package/dist/components/TFileUpload.cjs +2 -0
  203. package/dist/components/TFileUpload.cjs.map +1 -0
  204. package/dist/components/TFileUpload.js +7 -0
  205. package/dist/components/TFileUpload.js.map +1 -0
  206. package/dist/components/{TreeFileUpload.vue.d.ts → TFileUpload.vue.d.ts} +9 -9
  207. package/dist/components/TFileUpload.vue.d.ts.map +1 -0
  208. package/dist/components/TFileUpload.vue_vue_type_script_setup_true_lang.cjs +2 -0
  209. package/dist/components/TFileUpload.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  210. package/dist/components/TFileUpload.vue_vue_type_script_setup_true_lang.js +284 -0
  211. package/dist/components/TFileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
  212. package/dist/components/TFormField.cjs +2 -0
  213. package/dist/components/TFormField.cjs.map +1 -0
  214. package/dist/components/TFormField.js +7 -0
  215. package/dist/components/TFormField.js.map +1 -0
  216. package/dist/components/{TreeFormField.vue.d.ts → TFormField.vue.d.ts} +4 -4
  217. package/dist/components/TFormField.vue.d.ts.map +1 -0
  218. package/dist/components/TFormField.vue_vue_type_script_setup_true_lang.cjs +2 -0
  219. package/dist/components/TFormField.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  220. package/dist/components/TFormField.vue_vue_type_script_setup_true_lang.js +63 -0
  221. package/dist/components/TFormField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  222. package/dist/components/TGrid.cjs +2 -0
  223. package/dist/components/TGrid.cjs.map +1 -0
  224. package/dist/components/TGrid.js +7 -0
  225. package/dist/components/TGrid.js.map +1 -0
  226. package/dist/components/{TreeGrid.vue.d.ts → TGrid.vue.d.ts} +2 -2
  227. package/dist/components/TGrid.vue.d.ts.map +1 -0
  228. package/dist/components/TGrid.vue_vue_type_script_setup_true_lang.cjs +2 -0
  229. package/dist/components/TGrid.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  230. package/dist/components/TGrid.vue_vue_type_script_setup_true_lang.js +47 -0
  231. package/dist/components/TGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  232. package/dist/components/TIcon.cjs +2 -0
  233. package/dist/components/TIcon.cjs.map +1 -0
  234. package/dist/components/TIcon.js +7 -0
  235. package/dist/components/TIcon.js.map +1 -0
  236. package/dist/components/{TreeIcon.vue.d.ts → TIcon.vue.d.ts} +3 -3
  237. package/dist/components/TIcon.vue.d.ts.map +1 -0
  238. package/dist/components/TIcon.vue_vue_type_script_setup_true_lang.cjs +2 -0
  239. package/dist/components/TIcon.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  240. package/dist/components/TIcon.vue_vue_type_script_setup_true_lang.js +39 -0
  241. package/dist/components/TIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
  242. package/dist/components/TInput.cjs +2 -0
  243. package/dist/components/TInput.cjs.map +1 -0
  244. package/dist/components/TInput.js +7 -0
  245. package/dist/components/TInput.js.map +1 -0
  246. package/dist/components/{TreeInput.vue.d.ts → TInput.vue.d.ts} +4 -4
  247. package/dist/components/TInput.vue.d.ts.map +1 -0
  248. package/dist/components/TInput.vue_vue_type_script_setup_true_lang.cjs +2 -0
  249. package/dist/components/TInput.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  250. package/dist/components/TInput.vue_vue_type_script_setup_true_lang.js +80 -0
  251. package/dist/components/TInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  252. package/dist/components/TLink.cjs +2 -0
  253. package/dist/components/TLink.cjs.map +1 -0
  254. package/dist/components/TLink.js +7 -0
  255. package/dist/components/TLink.js.map +1 -0
  256. package/dist/components/{TreeLink.vue.d.ts → TLink.vue.d.ts} +4 -4
  257. package/dist/components/TLink.vue.d.ts.map +1 -0
  258. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.cjs +2 -0
  259. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  260. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.js +47 -0
  261. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
  262. package/dist/components/TMarkdownEditor.cjs +2 -0
  263. package/dist/components/TMarkdownEditor.cjs.map +1 -0
  264. package/dist/components/TMarkdownEditor.js +7 -0
  265. package/dist/components/TMarkdownEditor.js.map +1 -0
  266. package/dist/components/{TreeMarkdownEditor.vue.d.ts → TMarkdownEditor.vue.d.ts} +4 -4
  267. package/dist/components/TMarkdownEditor.vue.d.ts.map +1 -0
  268. package/dist/components/TMarkdownEditor.vue_vue_type_script_setup_true_lang.cjs +12 -0
  269. package/dist/components/TMarkdownEditor.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  270. package/dist/components/TMarkdownEditor.vue_vue_type_script_setup_true_lang.js +315 -0
  271. package/dist/components/TMarkdownEditor.vue_vue_type_script_setup_true_lang.js.map +1 -0
  272. package/dist/components/TModal.cjs +2 -0
  273. package/dist/components/TModal.cjs.map +1 -0
  274. package/dist/components/TModal.js +7 -0
  275. package/dist/components/TModal.js.map +1 -0
  276. package/dist/components/{TreeModal.vue.d.ts → TModal.vue.d.ts} +4 -4
  277. package/dist/components/TModal.vue.d.ts.map +1 -0
  278. package/dist/components/TModal.vue_vue_type_script_setup_true_lang.cjs +2 -0
  279. package/dist/components/TModal.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  280. package/dist/components/TModal.vue_vue_type_script_setup_true_lang.js +163 -0
  281. package/dist/components/TModal.vue_vue_type_script_setup_true_lang.js.map +1 -0
  282. package/dist/components/TMultiSelect.cjs +2 -0
  283. package/dist/components/TMultiSelect.cjs.map +1 -0
  284. package/dist/components/TMultiSelect.js +7 -0
  285. package/dist/components/TMultiSelect.js.map +1 -0
  286. package/dist/components/{TreeMultiSelect.vue.d.ts → TMultiSelect.vue.d.ts} +11 -11
  287. package/dist/components/TMultiSelect.vue.d.ts.map +1 -0
  288. package/dist/components/TMultiSelect.vue_vue_type_script_setup_true_lang.cjs +2 -0
  289. package/dist/components/TMultiSelect.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  290. package/dist/components/TMultiSelect.vue_vue_type_script_setup_true_lang.js +282 -0
  291. package/dist/components/TMultiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  292. package/dist/components/TNavMenu.cjs +2 -0
  293. package/dist/components/TNavMenu.cjs.map +1 -0
  294. package/dist/components/TNavMenu.js +7 -0
  295. package/dist/components/TNavMenu.js.map +1 -0
  296. package/dist/components/{TreeNavMenu.vue.d.ts → TNavMenu.vue.d.ts} +11 -11
  297. package/dist/components/TNavMenu.vue.d.ts.map +1 -0
  298. package/dist/components/TNavMenu.vue_vue_type_script_setup_true_lang.cjs +2 -0
  299. package/dist/components/TNavMenu.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  300. package/dist/components/TNavMenu.vue_vue_type_script_setup_true_lang.js +151 -0
  301. package/dist/components/TNavMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  302. package/dist/components/TNavbar.cjs +2 -0
  303. package/dist/components/TNavbar.cjs.map +1 -0
  304. package/dist/components/TNavbar.js +7 -0
  305. package/dist/components/TNavbar.js.map +1 -0
  306. package/dist/components/{TreeNavbar.vue.d.ts → TNavbar.vue.d.ts} +4 -4
  307. package/dist/components/TNavbar.vue.d.ts.map +1 -0
  308. package/dist/components/TNavbar.vue_vue_type_script_setup_true_lang.cjs +2 -0
  309. package/dist/components/TNavbar.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  310. package/dist/components/TNavbar.vue_vue_type_script_setup_true_lang.js +61 -0
  311. package/dist/components/TNavbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  312. package/dist/components/TNumberInput.cjs +2 -0
  313. package/dist/components/TNumberInput.cjs.map +1 -0
  314. package/dist/components/TNumberInput.js +7 -0
  315. package/dist/components/TNumberInput.js.map +1 -0
  316. package/dist/components/{TreeNumberInput.vue.d.ts → TNumberInput.vue.d.ts} +4 -4
  317. package/dist/components/TNumberInput.vue.d.ts.map +1 -0
  318. package/dist/components/TNumberInput.vue_vue_type_script_setup_true_lang.cjs +2 -0
  319. package/dist/components/TNumberInput.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  320. package/dist/components/TNumberInput.vue_vue_type_script_setup_true_lang.js +145 -0
  321. package/dist/components/TNumberInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  322. package/dist/components/TPagination.cjs +2 -0
  323. package/dist/components/TPagination.cjs.map +1 -0
  324. package/dist/components/TPagination.js +7 -0
  325. package/dist/components/TPagination.js.map +1 -0
  326. package/dist/components/{TreePagination.vue.d.ts → TPagination.vue.d.ts} +4 -4
  327. package/dist/components/TPagination.vue.d.ts.map +1 -0
  328. package/dist/components/TPagination.vue_vue_type_script_setup_true_lang.cjs +2 -0
  329. package/dist/components/TPagination.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  330. package/dist/components/TPagination.vue_vue_type_script_setup_true_lang.js +105 -0
  331. package/dist/components/TPagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
  332. package/dist/components/TPopover.cjs +2 -0
  333. package/dist/components/TPopover.cjs.map +1 -0
  334. package/dist/components/TPopover.js +7 -0
  335. package/dist/components/TPopover.js.map +1 -0
  336. package/dist/components/{TreePopover.vue.d.ts → TPopover.vue.d.ts} +4 -4
  337. package/dist/components/TPopover.vue.d.ts.map +1 -0
  338. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.cjs +2 -0
  339. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  340. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.js +106 -0
  341. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
  342. package/dist/components/TPricing.cjs +2 -0
  343. package/dist/components/TPricing.cjs.map +1 -0
  344. package/dist/components/TPricing.js +7 -0
  345. package/dist/components/TPricing.js.map +1 -0
  346. package/dist/components/{TreePricing.vue.d.ts → TPricing.vue.d.ts} +5 -5
  347. package/dist/components/TPricing.vue.d.ts.map +1 -0
  348. package/dist/components/TPricing.vue_vue_type_script_setup_true_lang.cjs +2 -0
  349. package/dist/components/TPricing.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  350. package/dist/components/TPricing.vue_vue_type_script_setup_true_lang.js +33 -0
  351. package/dist/components/TPricing.vue_vue_type_script_setup_true_lang.js.map +1 -0
  352. package/dist/components/TPricingCard.cjs +2 -0
  353. package/dist/components/TPricingCard.cjs.map +1 -0
  354. package/dist/components/TPricingCard.js +7 -0
  355. package/dist/components/TPricingCard.js.map +1 -0
  356. package/dist/components/{TreePricingCard.vue.d.ts → TPricingCard.vue.d.ts} +4 -4
  357. package/dist/components/TPricingCard.vue.d.ts.map +1 -0
  358. package/dist/components/TPricingCard.vue_vue_type_script_setup_true_lang.cjs +2 -0
  359. package/dist/components/TPricingCard.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  360. package/dist/components/TPricingCard.vue_vue_type_script_setup_true_lang.js +93 -0
  361. package/dist/components/TPricingCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  362. package/dist/components/TProgress.cjs +2 -0
  363. package/dist/components/TProgress.cjs.map +1 -0
  364. package/dist/components/TProgress.js +7 -0
  365. package/dist/components/TProgress.js.map +1 -0
  366. package/dist/components/{TreeProgress.vue.d.ts → TProgress.vue.d.ts} +4 -4
  367. package/dist/components/TProgress.vue.d.ts.map +1 -0
  368. package/dist/components/TProgress.vue_vue_type_script_setup_true_lang.cjs +2 -0
  369. package/dist/components/TProgress.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  370. package/dist/components/TProgress.vue_vue_type_script_setup_true_lang.js +33 -0
  371. package/dist/components/TProgress.vue_vue_type_script_setup_true_lang.js.map +1 -0
  372. package/dist/components/TRadio.cjs +2 -0
  373. package/dist/components/TRadio.cjs.map +1 -0
  374. package/dist/components/TRadio.js +7 -0
  375. package/dist/components/TRadio.js.map +1 -0
  376. package/dist/components/{TreeRadio.vue.d.ts → TRadio.vue.d.ts} +4 -4
  377. package/dist/components/TRadio.vue.d.ts.map +1 -0
  378. package/dist/components/TRadio.vue_vue_type_script_setup_true_lang.cjs +2 -0
  379. package/dist/components/TRadio.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  380. package/dist/components/TRadio.vue_vue_type_script_setup_true_lang.js +73 -0
  381. package/dist/components/TRadio.vue_vue_type_script_setup_true_lang.js.map +1 -0
  382. package/dist/components/TRadioGroup.cjs +2 -0
  383. package/dist/components/TRadioGroup.cjs.map +1 -0
  384. package/dist/components/TRadioGroup.js +7 -0
  385. package/dist/components/TRadioGroup.js.map +1 -0
  386. package/dist/components/{TreeRadioGroup.vue.d.ts → TRadioGroup.vue.d.ts} +4 -4
  387. package/dist/components/TRadioGroup.vue.d.ts.map +1 -0
  388. package/dist/components/TRadioGroup.vue_vue_type_script_setup_true_lang.cjs +2 -0
  389. package/dist/components/TRadioGroup.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  390. package/dist/components/TRadioGroup.vue_vue_type_script_setup_true_lang.js +46 -0
  391. package/dist/components/TRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  392. package/dist/components/TSelect.cjs +2 -0
  393. package/dist/components/TSelect.cjs.map +1 -0
  394. package/dist/components/TSelect.js +7 -0
  395. package/dist/components/TSelect.js.map +1 -0
  396. package/dist/components/{TreeSelect.vue.d.ts → TSelect.vue.d.ts} +9 -7
  397. package/dist/components/TSelect.vue.d.ts.map +1 -0
  398. package/dist/components/TSelect.vue_vue_type_script_setup_true_lang.cjs +2 -0
  399. package/dist/components/TSelect.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  400. package/dist/components/TSelect.vue_vue_type_script_setup_true_lang.js +238 -0
  401. package/dist/components/TSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
  402. package/dist/components/TSelectableList.cjs +2 -0
  403. package/dist/components/TSelectableList.cjs.map +1 -0
  404. package/dist/components/TSelectableList.js +7 -0
  405. package/dist/components/TSelectableList.js.map +1 -0
  406. package/dist/components/{TreeSelectableList.vue.d.ts → TSelectableList.vue.d.ts} +9 -9
  407. package/dist/components/TSelectableList.vue.d.ts.map +1 -0
  408. package/dist/components/TSelectableList.vue_vue_type_script_setup_true_lang.cjs +2 -0
  409. package/dist/components/TSelectableList.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  410. package/dist/components/TSelectableList.vue_vue_type_script_setup_true_lang.js +133 -0
  411. package/dist/components/TSelectableList.vue_vue_type_script_setup_true_lang.js.map +1 -0
  412. package/dist/components/TSidebar.cjs +2 -0
  413. package/dist/components/TSidebar.cjs.map +1 -0
  414. package/dist/components/TSidebar.js +7 -0
  415. package/dist/components/TSidebar.js.map +1 -0
  416. package/dist/components/{TreeSidebar.vue.d.ts → TSidebar.vue.d.ts} +7 -7
  417. package/dist/components/TSidebar.vue.d.ts.map +1 -0
  418. package/dist/components/TSidebar.vue_vue_type_script_setup_true_lang.cjs +2 -0
  419. package/dist/components/TSidebar.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  420. package/dist/components/TSidebar.vue_vue_type_script_setup_true_lang.js +98 -0
  421. package/dist/components/TSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  422. package/dist/components/TSkeleton.cjs +2 -0
  423. package/dist/components/TSkeleton.cjs.map +1 -0
  424. package/dist/components/TSkeleton.js +7 -0
  425. package/dist/components/TSkeleton.js.map +1 -0
  426. package/dist/components/{TreeSkeleton.vue.d.ts → TSkeleton.vue.d.ts} +1 -1
  427. package/dist/components/TSkeleton.vue.d.ts.map +1 -0
  428. package/dist/components/TSkeleton.vue_vue_type_script_setup_true_lang.cjs +2 -0
  429. package/dist/components/TSkeleton.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  430. package/dist/components/TSkeleton.vue_vue_type_script_setup_true_lang.js +25 -0
  431. package/dist/components/TSkeleton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  432. package/dist/components/TSpinner.cjs +2 -0
  433. package/dist/components/TSpinner.cjs.map +1 -0
  434. package/dist/components/TSpinner.js +7 -0
  435. package/dist/components/TSpinner.js.map +1 -0
  436. package/dist/components/{TreeSpinner.vue.d.ts → TSpinner.vue.d.ts} +4 -4
  437. package/dist/components/TSpinner.vue.d.ts.map +1 -0
  438. package/dist/components/TSpinner.vue_vue_type_script_setup_true_lang.cjs +2 -0
  439. package/dist/components/TSpinner.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  440. package/dist/components/TSpinner.vue_vue_type_script_setup_true_lang.js +24 -0
  441. package/dist/components/TSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -0
  442. package/dist/components/TStack.cjs +2 -0
  443. package/dist/components/TStack.cjs.map +1 -0
  444. package/dist/components/TStack.js +7 -0
  445. package/dist/components/TStack.js.map +1 -0
  446. package/dist/components/{TreeStack.vue.d.ts → TStack.vue.d.ts} +5 -5
  447. package/dist/components/TStack.vue.d.ts.map +1 -0
  448. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.cjs +2 -0
  449. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  450. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.js +50 -0
  451. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.js.map +1 -0
  452. package/dist/components/TStat.cjs +2 -0
  453. package/dist/components/TStat.cjs.map +1 -0
  454. package/dist/components/TStat.js +7 -0
  455. package/dist/components/TStat.js.map +1 -0
  456. package/dist/components/{TreeStat.vue.d.ts → TStat.vue.d.ts} +7 -7
  457. package/dist/components/TStat.vue.d.ts.map +1 -0
  458. package/dist/components/TStat.vue_vue_type_script_setup_true_lang.cjs +2 -0
  459. package/dist/components/TStat.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  460. package/dist/components/TStat.vue_vue_type_script_setup_true_lang.js +72 -0
  461. package/dist/components/TStat.vue_vue_type_script_setup_true_lang.js.map +1 -0
  462. package/dist/components/TSteps.cjs +2 -0
  463. package/dist/components/TSteps.cjs.map +1 -0
  464. package/dist/components/TSteps.js +7 -0
  465. package/dist/components/TSteps.js.map +1 -0
  466. package/dist/components/{TreeSteps.vue.d.ts → TSteps.vue.d.ts} +16 -16
  467. package/dist/components/TSteps.vue.d.ts.map +1 -0
  468. package/dist/components/TSteps.vue_vue_type_script_setup_true_lang.cjs +2 -0
  469. package/dist/components/TSteps.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  470. package/dist/components/TSteps.vue_vue_type_script_setup_true_lang.js +83 -0
  471. package/dist/components/TSteps.vue_vue_type_script_setup_true_lang.js.map +1 -0
  472. package/dist/components/TSwitch.cjs +2 -0
  473. package/dist/components/TSwitch.cjs.map +1 -0
  474. package/dist/components/TSwitch.js +7 -0
  475. package/dist/components/TSwitch.js.map +1 -0
  476. package/dist/components/{TreeSwitch.vue.d.ts → TSwitch.vue.d.ts} +4 -4
  477. package/dist/components/TSwitch.vue.d.ts.map +1 -0
  478. package/dist/components/TSwitch.vue_vue_type_script_setup_true_lang.cjs +2 -0
  479. package/dist/components/TSwitch.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  480. package/dist/components/TSwitch.vue_vue_type_script_setup_true_lang.js +71 -0
  481. package/dist/components/TSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -0
  482. package/dist/components/TTab.cjs +2 -0
  483. package/dist/components/TTab.cjs.map +1 -0
  484. package/dist/components/TTab.js +7 -0
  485. package/dist/components/TTab.js.map +1 -0
  486. package/dist/components/{TreeTab.vue.d.ts → TTab.vue.d.ts} +1 -1
  487. package/dist/components/TTab.vue.d.ts.map +1 -0
  488. package/dist/components/TTab.vue_vue_type_script_setup_true_lang.cjs +2 -0
  489. package/dist/components/TTab.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  490. package/dist/components/TTab.vue_vue_type_script_setup_true_lang.js +55 -0
  491. package/dist/components/TTab.vue_vue_type_script_setup_true_lang.js.map +1 -0
  492. package/dist/components/TTabList.cjs +2 -0
  493. package/dist/components/TTabList.cjs.map +1 -0
  494. package/dist/components/TTabList.js +7 -0
  495. package/dist/components/TTabList.js.map +1 -0
  496. package/dist/components/{TreeTabList.vue.d.ts → TTabList.vue.d.ts} +1 -1
  497. package/dist/components/TTabList.vue.d.ts.map +1 -0
  498. package/dist/components/TTabList.vue_vue_type_script_setup_true_lang.cjs +2 -0
  499. package/dist/components/TTabList.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  500. package/dist/components/TTabList.vue_vue_type_script_setup_true_lang.js +73 -0
  501. package/dist/components/TTabList.vue_vue_type_script_setup_true_lang.js.map +1 -0
  502. package/dist/components/TTabPanel.cjs +2 -0
  503. package/dist/components/TTabPanel.cjs.map +1 -0
  504. package/dist/components/TTabPanel.js +7 -0
  505. package/dist/components/TTabPanel.js.map +1 -0
  506. package/dist/components/{TreeTabPanel.vue.d.ts → TTabPanel.vue.d.ts} +1 -1
  507. package/dist/components/TTabPanel.vue.d.ts.map +1 -0
  508. package/dist/components/TTabPanel.vue_vue_type_script_setup_true_lang.cjs +2 -0
  509. package/dist/components/TTabPanel.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  510. package/dist/components/TTabPanel.vue_vue_type_script_setup_true_lang.js +24 -0
  511. package/dist/components/TTabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  512. package/dist/components/TTable.cjs +2 -0
  513. package/dist/components/TTable.cjs.map +1 -0
  514. package/dist/components/TTable.js +7 -0
  515. package/dist/components/TTable.js.map +1 -0
  516. package/dist/components/{TreeTable.vue.d.ts → TTable.vue.d.ts} +15 -15
  517. package/dist/components/TTable.vue.d.ts.map +1 -0
  518. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.cjs +2 -0
  519. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  520. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.js +118 -0
  521. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  522. package/dist/components/TTabs.cjs +2 -0
  523. package/dist/components/TTabs.cjs.map +1 -0
  524. package/dist/components/TTabs.js +7 -0
  525. package/dist/components/TTabs.js.map +1 -0
  526. package/dist/components/{TreeTabs.vue.d.ts → TTabs.vue.d.ts} +4 -4
  527. package/dist/components/TTabs.vue.d.ts.map +1 -0
  528. package/dist/components/TTabs.vue_vue_type_script_setup_true_lang.cjs +2 -0
  529. package/dist/components/TTabs.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  530. package/dist/components/TTabs.vue_vue_type_script_setup_true_lang.js +51 -0
  531. package/dist/components/TTabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
  532. package/dist/components/TTag.cjs +2 -0
  533. package/dist/components/TTag.cjs.map +1 -0
  534. package/dist/components/TTag.js +7 -0
  535. package/dist/components/TTag.js.map +1 -0
  536. package/dist/components/{TreeTag.vue.d.ts → TTag.vue.d.ts} +7 -7
  537. package/dist/components/TTag.vue.d.ts.map +1 -0
  538. package/dist/components/TTag.vue_vue_type_script_setup_true_lang.cjs +2 -0
  539. package/dist/components/TTag.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  540. package/dist/components/TTag.vue_vue_type_script_setup_true_lang.js +60 -0
  541. package/dist/components/TTag.vue_vue_type_script_setup_true_lang.js.map +1 -0
  542. package/dist/components/TTextarea.cjs +2 -0
  543. package/dist/components/TTextarea.cjs.map +1 -0
  544. package/dist/components/TTextarea.js +7 -0
  545. package/dist/components/TTextarea.js.map +1 -0
  546. package/dist/components/{TreeTextarea.vue.d.ts → TTextarea.vue.d.ts} +4 -4
  547. package/dist/components/TTextarea.vue.d.ts.map +1 -0
  548. package/dist/components/TTextarea.vue_vue_type_script_setup_true_lang.cjs +2 -0
  549. package/dist/components/TTextarea.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  550. package/dist/components/TTextarea.vue_vue_type_script_setup_true_lang.js +81 -0
  551. package/dist/components/TTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  552. package/dist/components/TTimeline.cjs +2 -0
  553. package/dist/components/TTimeline.cjs.map +1 -0
  554. package/dist/components/TTimeline.js +7 -0
  555. package/dist/components/TTimeline.js.map +1 -0
  556. package/dist/components/{TreeTimeline.vue.d.ts → TTimeline.vue.d.ts} +13 -13
  557. package/dist/components/TTimeline.vue.d.ts.map +1 -0
  558. package/dist/components/TTimeline.vue_vue_type_script_setup_true_lang.cjs +2 -0
  559. package/dist/components/TTimeline.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  560. package/dist/components/TTimeline.vue_vue_type_script_setup_true_lang.js +58 -0
  561. package/dist/components/TTimeline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  562. package/dist/components/TToast.cjs +2 -0
  563. package/dist/components/TToast.cjs.map +1 -0
  564. package/dist/components/TToast.js +7 -0
  565. package/dist/components/TToast.js.map +1 -0
  566. package/dist/components/{TreeToast.vue.d.ts → TToast.vue.d.ts} +1 -1
  567. package/dist/components/TToast.vue.d.ts.map +1 -0
  568. package/dist/components/TToast.vue_vue_type_script_setup_true_lang.cjs +2 -0
  569. package/dist/components/TToast.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  570. package/dist/components/TToast.vue_vue_type_script_setup_true_lang.js +50 -0
  571. package/dist/components/TToast.vue_vue_type_script_setup_true_lang.js.map +1 -0
  572. package/dist/components/TToastProvider.cjs +2 -0
  573. package/dist/components/TToastProvider.cjs.map +1 -0
  574. package/dist/components/TToastProvider.js +7 -0
  575. package/dist/components/TToastProvider.js.map +1 -0
  576. package/dist/components/{TreeToastProvider.vue.d.ts → TToastProvider.vue.d.ts} +1 -1
  577. package/dist/components/TToastProvider.vue.d.ts.map +1 -0
  578. package/dist/components/TToastProvider.vue_vue_type_script_setup_true_lang.cjs +2 -0
  579. package/dist/components/TToastProvider.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  580. package/dist/components/TToastProvider.vue_vue_type_script_setup_true_lang.js +33 -0
  581. package/dist/components/TToastProvider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  582. package/dist/components/TToggleGroup.cjs +2 -0
  583. package/dist/components/TToggleGroup.cjs.map +1 -0
  584. package/dist/components/TToggleGroup.js +7 -0
  585. package/dist/components/TToggleGroup.js.map +1 -0
  586. package/dist/components/{TreeToggleGroup.vue.d.ts → TToggleGroup.vue.d.ts} +15 -15
  587. package/dist/components/TToggleGroup.vue.d.ts.map +1 -0
  588. package/dist/components/TToggleGroup.vue_vue_type_script_setup_true_lang.cjs +2 -0
  589. package/dist/components/TToggleGroup.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  590. package/dist/components/TToggleGroup.vue_vue_type_script_setup_true_lang.js +119 -0
  591. package/dist/components/TToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  592. package/dist/components/TTooltip.cjs +2 -0
  593. package/dist/components/TTooltip.cjs.map +1 -0
  594. package/dist/components/TTooltip.js +7 -0
  595. package/dist/components/TTooltip.js.map +1 -0
  596. package/dist/components/{TreeTooltip.vue.d.ts → TTooltip.vue.d.ts} +4 -4
  597. package/dist/components/TTooltip.vue.d.ts.map +1 -0
  598. package/dist/components/TTooltip.vue_vue_type_script_setup_true_lang.cjs +2 -0
  599. package/dist/components/TTooltip.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  600. package/dist/components/TTooltip.vue_vue_type_script_setup_true_lang.js +75 -0
  601. package/dist/components/TTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  602. package/dist/components/TTreeView.cjs +2 -0
  603. package/dist/components/TTreeView.cjs.map +1 -0
  604. package/dist/components/TTreeView.js +7 -0
  605. package/dist/components/TTreeView.js.map +1 -0
  606. package/dist/components/{TreeTreeView.vue.d.ts → TTreeView.vue.d.ts} +6 -6
  607. package/dist/components/TTreeView.vue.d.ts.map +1 -0
  608. package/dist/components/TTreeView.vue_vue_type_script_setup_true_lang.cjs +2 -0
  609. package/dist/components/TTreeView.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  610. package/dist/components/TTreeView.vue_vue_type_script_setup_true_lang.js +161 -0
  611. package/dist/components/TTreeView.vue_vue_type_script_setup_true_lang.js.map +1 -0
  612. package/dist/components/TTreeViewItem.cjs +2 -0
  613. package/dist/components/TTreeViewItem.cjs.map +1 -0
  614. package/dist/components/TTreeViewItem.js +7 -0
  615. package/dist/components/TTreeViewItem.js.map +1 -0
  616. package/dist/components/{TreeTreeViewItem.vue.d.ts → TTreeViewItem.vue.d.ts} +3 -3
  617. package/dist/components/TTreeViewItem.vue.d.ts.map +1 -0
  618. package/dist/components/TTreeViewItem.vue_vue_type_script_setup_true_lang.cjs +2 -0
  619. package/dist/components/TTreeViewItem.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  620. package/dist/components/TTreeViewItem.vue_vue_type_script_setup_true_lang.js +101 -0
  621. package/dist/components/TTreeViewItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  622. package/dist/components/accordion.cjs +2 -0
  623. package/dist/components/accordion.cjs.map +1 -0
  624. package/dist/components/accordion.js +6 -0
  625. package/dist/components/accordion.js.map +1 -0
  626. package/dist/components/index.d.ts +81 -143
  627. package/dist/components/index.d.ts.map +1 -1
  628. package/dist/components/sidebar.cjs +2 -0
  629. package/dist/components/sidebar.cjs.map +1 -0
  630. package/dist/components/sidebar.d.ts +2 -2
  631. package/dist/components/sidebar.d.ts.map +1 -1
  632. package/dist/components/sidebar.js +6 -0
  633. package/dist/components/sidebar.js.map +1 -0
  634. package/dist/components/tabs-context.cjs +2 -0
  635. package/dist/components/tabs-context.cjs.map +1 -0
  636. package/dist/components/tabs-context.d.ts +2 -2
  637. package/dist/components/tabs-context.d.ts.map +1 -1
  638. package/dist/components/tabs-context.js +6 -0
  639. package/dist/components/tabs-context.js.map +1 -0
  640. package/dist/components/tree-view.cjs +2 -0
  641. package/dist/components/tree-view.cjs.map +1 -0
  642. package/dist/components/tree-view.d.ts +8 -8
  643. package/dist/components/tree-view.d.ts.map +1 -1
  644. package/dist/components/tree-view.js +6 -0
  645. package/dist/components/tree-view.js.map +1 -0
  646. package/dist/composables/useControllableOpen.cjs +2 -0
  647. package/dist/composables/useControllableOpen.cjs.map +1 -0
  648. package/dist/composables/useControllableOpen.js +15 -0
  649. package/dist/composables/useControllableOpen.js.map +1 -0
  650. package/dist/composables/useToast.cjs +2 -0
  651. package/dist/composables/useToast.cjs.map +1 -0
  652. package/dist/composables/useToast.js +41 -0
  653. package/dist/composables/useToast.js.map +1 -0
  654. package/dist/index.cjs +1 -12
  655. package/dist/index.js +66 -6040
  656. package/dist/plugin.cjs +2 -0
  657. package/dist/plugin.cjs.map +1 -0
  658. package/dist/plugin.d.ts.map +1 -1
  659. package/dist/plugin.js +135 -0
  660. package/dist/plugin.js.map +1 -0
  661. package/dist/style.css +1 -1
  662. package/dist/types/contracts.cjs +2 -0
  663. package/dist/types/contracts.cjs.map +1 -0
  664. package/dist/types/contracts.d.ts +5 -5
  665. package/dist/types/contracts.d.ts.map +1 -1
  666. package/dist/types/contracts.js +31 -0
  667. package/dist/types/contracts.js.map +1 -0
  668. package/package.json +5 -5
  669. package/dist/components/TreeAccordion.vue.d.ts.map +0 -1
  670. package/dist/components/TreeAccordionItem.vue.d.ts.map +0 -1
  671. package/dist/components/TreeAlert.vue.d.ts.map +0 -1
  672. package/dist/components/TreeAvatar.vue.d.ts.map +0 -1
  673. package/dist/components/TreeBadge.vue.d.ts.map +0 -1
  674. package/dist/components/TreeBreadcrumb.vue.d.ts.map +0 -1
  675. package/dist/components/TreeBreadcrumbItem.vue.d.ts.map +0 -1
  676. package/dist/components/TreeButton.vue.d.ts.map +0 -1
  677. package/dist/components/TreeCard.vue.d.ts.map +0 -1
  678. package/dist/components/TreeCheckbox.vue.d.ts.map +0 -1
  679. package/dist/components/TreeCombobox.vue.d.ts.map +0 -1
  680. package/dist/components/TreeConfirmDialog.vue.d.ts.map +0 -1
  681. package/dist/components/TreeContainer.vue.d.ts.map +0 -1
  682. package/dist/components/TreeContextMenu.vue.d.ts.map +0 -1
  683. package/dist/components/TreeDatePicker.vue.d.ts.map +0 -1
  684. package/dist/components/TreeDateTimePicker.vue.d.ts.map +0 -1
  685. package/dist/components/TreeDivider.vue.d.ts.map +0 -1
  686. package/dist/components/TreeDrawer.vue.d.ts.map +0 -1
  687. package/dist/components/TreeDropdown.vue.d.ts.map +0 -1
  688. package/dist/components/TreeEmptyState.vue.d.ts.map +0 -1
  689. package/dist/components/TreeFileUpload.vue.d.ts.map +0 -1
  690. package/dist/components/TreeFormField.vue.d.ts.map +0 -1
  691. package/dist/components/TreeGrid.vue.d.ts.map +0 -1
  692. package/dist/components/TreeIcon.vue.d.ts.map +0 -1
  693. package/dist/components/TreeInput.vue.d.ts.map +0 -1
  694. package/dist/components/TreeLink.vue.d.ts.map +0 -1
  695. package/dist/components/TreeMarkdownEditor.vue.d.ts.map +0 -1
  696. package/dist/components/TreeModal.vue.d.ts.map +0 -1
  697. package/dist/components/TreeMultiSelect.vue.d.ts.map +0 -1
  698. package/dist/components/TreeNavMenu.vue.d.ts.map +0 -1
  699. package/dist/components/TreeNavbar.vue.d.ts.map +0 -1
  700. package/dist/components/TreeNumberInput.vue.d.ts.map +0 -1
  701. package/dist/components/TreePagination.vue.d.ts.map +0 -1
  702. package/dist/components/TreePopover.vue.d.ts.map +0 -1
  703. package/dist/components/TreePricing.vue.d.ts.map +0 -1
  704. package/dist/components/TreePricingCard.vue.d.ts.map +0 -1
  705. package/dist/components/TreeProgress.vue.d.ts.map +0 -1
  706. package/dist/components/TreeRadio.vue.d.ts.map +0 -1
  707. package/dist/components/TreeRadioGroup.vue.d.ts.map +0 -1
  708. package/dist/components/TreeSelect.vue.d.ts.map +0 -1
  709. package/dist/components/TreeSelectableList.vue.d.ts.map +0 -1
  710. package/dist/components/TreeSidebar.vue.d.ts.map +0 -1
  711. package/dist/components/TreeSkeleton.vue.d.ts.map +0 -1
  712. package/dist/components/TreeSpinner.vue.d.ts.map +0 -1
  713. package/dist/components/TreeStack.vue.d.ts.map +0 -1
  714. package/dist/components/TreeStat.vue.d.ts.map +0 -1
  715. package/dist/components/TreeSteps.vue.d.ts.map +0 -1
  716. package/dist/components/TreeSwitch.vue.d.ts.map +0 -1
  717. package/dist/components/TreeTab.vue.d.ts.map +0 -1
  718. package/dist/components/TreeTabList.vue.d.ts.map +0 -1
  719. package/dist/components/TreeTabPanel.vue.d.ts.map +0 -1
  720. package/dist/components/TreeTable.vue.d.ts.map +0 -1
  721. package/dist/components/TreeTabs.vue.d.ts.map +0 -1
  722. package/dist/components/TreeTag.vue.d.ts.map +0 -1
  723. package/dist/components/TreeTextarea.vue.d.ts.map +0 -1
  724. package/dist/components/TreeTimeline.vue.d.ts.map +0 -1
  725. package/dist/components/TreeToast.vue.d.ts.map +0 -1
  726. package/dist/components/TreeToastProvider.vue.d.ts.map +0 -1
  727. package/dist/components/TreeToggleGroup.vue.d.ts.map +0 -1
  728. package/dist/components/TreeTooltip.vue.d.ts.map +0 -1
  729. package/dist/components/TreeTreeView.vue.d.ts.map +0 -1
  730. package/dist/components/TreeTreeViewItem.vue.d.ts.map +0 -1
  731. package/dist/index.cjs.map +0 -1
  732. package/dist/index.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ import { useControllableOpen as e } from "../composables/useControllableOpen.js";
2
+ import { Fragment as t, Transition as n, computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, mergeProps as ee, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, openBlock as m, ref as h, renderList as g, renderSlot as _, toDisplayString as v, toRef as te, unref as y, useAttrs as b, watch as x, withCtx as S } from "vue";
3
+ import { createId as C, isActivationKey as w, isEscapeKey as T } from "@treeui/utils";
4
+ //#region src/components/TDropdown.vue?vue&type=script&setup=true&lang.ts
5
+ var E = ["data-state"], D = { class: "t-dropdown__trigger-wrapper" }, O = [
6
+ "disabled",
7
+ "aria-controls",
8
+ "aria-expanded"
9
+ ], k = { class: "t-dropdown__label" }, A = ["id", "aria-label"], j = [
10
+ "aria-disabled",
11
+ "tabindex",
12
+ "onClick",
13
+ "onKeydown"
14
+ ], M = /*@__PURE__*/ l({
15
+ inheritAttrs: !1,
16
+ __name: "TDropdown",
17
+ props: {
18
+ items: { default: () => [] },
19
+ open: {
20
+ type: Boolean,
21
+ default: void 0
22
+ },
23
+ defaultOpen: {
24
+ type: Boolean,
25
+ default: !1
26
+ },
27
+ disabled: {
28
+ type: Boolean,
29
+ default: !1
30
+ },
31
+ size: { default: "md" },
32
+ label: { default: "" },
33
+ align: { default: "start" }
34
+ },
35
+ emits: [
36
+ "select",
37
+ "update:open",
38
+ "open-change"
39
+ ],
40
+ setup(l, { emit: M }) {
41
+ let N = l, P = M, F = b(), I = C("t-dropdown"), L = h(null), R = h(null), z = h(/* @__PURE__ */ new Map()), B = h(-1), V = r(() => {
42
+ let { class: e, style: t, ...n } = F;
43
+ return n;
44
+ }), { value: H, setValue: U } = e(te(N, "open"), N.defaultOpen, (e) => {
45
+ P("update:open", e), P("open-change", e);
46
+ }), W = r(() => [
47
+ "t-dropdown",
48
+ `t-dropdown--${N.size}`,
49
+ {
50
+ "t-dropdown--align-end": N.align === "end",
51
+ "is-disabled": N.disabled,
52
+ "is-open": H.value
53
+ },
54
+ F.class
55
+ ]), G = r(() => F.style), K = r(() => N.items.filter((e) => !e.disabled)), q = () => {
56
+ N.disabled || (B.value = K.value.length > 0 ? N.items.indexOf(K.value[0]) : 0, U(!0), u(() => Z(B.value)));
57
+ }, J = (e = !1) => {
58
+ U(!1), B.value = -1, e && u(() => R.value?.focus());
59
+ }, Y = () => {
60
+ H.value ? J() : q();
61
+ }, X = (e) => {
62
+ e.disabled || (P("select", e.value), J(!0));
63
+ }, Z = (e) => {
64
+ let t = N.items[e];
65
+ t && z.value.get(t.value)?.focus();
66
+ }, ne = (e, t) => {
67
+ e instanceof HTMLElement ? z.value.set(t, e) : z.value.delete(t);
68
+ }, Q = (e) => {
69
+ let t = B.value + e;
70
+ for (; t >= 0 && t < N.items.length;) {
71
+ if (!N.items[t].disabled) {
72
+ B.value = t, Z(t);
73
+ return;
74
+ }
75
+ t += e;
76
+ }
77
+ }, re = (e) => {
78
+ if (!N.disabled) {
79
+ if (T(e) && H.value) {
80
+ e.preventDefault(), J();
81
+ return;
82
+ }
83
+ (w(e) || e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), q());
84
+ }
85
+ }, ie = (e, t) => {
86
+ if (T(e)) {
87
+ e.preventDefault(), J(!0);
88
+ return;
89
+ }
90
+ if (w(e)) {
91
+ e.preventDefault(), X(t);
92
+ return;
93
+ }
94
+ switch (e.key) {
95
+ case "ArrowDown":
96
+ e.preventDefault(), Q(1);
97
+ break;
98
+ case "ArrowUp":
99
+ e.preventDefault(), Q(-1);
100
+ break;
101
+ case "Home":
102
+ e.preventDefault(), B.value = K.value.length > 0 ? N.items.indexOf(K.value[0]) : 0, Z(B.value);
103
+ break;
104
+ case "End":
105
+ e.preventDefault(), B.value = K.value.length > 0 ? N.items.indexOf(K.value[K.value.length - 1]) : N.items.length - 1, Z(B.value);
106
+ break;
107
+ default: break;
108
+ }
109
+ }, $ = (e) => {
110
+ if (!H.value) return;
111
+ let t = e.target;
112
+ t instanceof Node && (L.value?.contains(t) || J());
113
+ };
114
+ return x(H, (e) => {
115
+ e ? document.addEventListener("pointerdown", $) : document.removeEventListener("pointerdown", $);
116
+ }), p(() => {
117
+ document.removeEventListener("pointerdown", $);
118
+ }), (e, r) => (m(), a("div", {
119
+ ref_key: "rootRef",
120
+ ref: L,
121
+ class: d(W.value),
122
+ style: f(G.value),
123
+ "data-state": y(H) ? "open" : "closed"
124
+ }, [o("span", D, [_(e.$slots, "trigger", { isOpen: y(H) }, () => [o("button", ee({
125
+ ref_key: "triggerRef",
126
+ ref: R
127
+ }, V.value, {
128
+ type: "button",
129
+ class: "t-dropdown__trigger",
130
+ disabled: l.disabled,
131
+ "aria-controls": y(H) ? y(I) : void 0,
132
+ "aria-haspopup": "menu",
133
+ "aria-expanded": y(H),
134
+ onClick: Y,
135
+ onKeydown: re
136
+ }), [o("span", k, v(l.label), 1), r[0] ||= o("svg", {
137
+ class: "t-dropdown__chevron",
138
+ viewBox: "0 0 16 16",
139
+ fill: "none",
140
+ stroke: "currentColor",
141
+ "stroke-width": "2",
142
+ "stroke-linecap": "round",
143
+ "stroke-linejoin": "round",
144
+ "aria-hidden": "true"
145
+ }, [o("polyline", { points: "4 6 8 10 12 6" })], -1)], 16, O)])]), c(n, { name: "t-fade" }, {
146
+ default: S(() => [y(H) && !l.disabled ? (m(), a("ul", {
147
+ key: 0,
148
+ id: y(I),
149
+ role: "menu",
150
+ class: "t-dropdown__menu",
151
+ "aria-label": l.label || void 0
152
+ }, [(m(!0), a(t, null, g(l.items, (t, n) => (m(), a("li", {
153
+ key: t.value,
154
+ ref_for: !0,
155
+ ref: (e) => ne(e, t.value),
156
+ role: "menuitem",
157
+ class: d(["t-dropdown__item", {
158
+ "is-disabled": t.disabled,
159
+ "is-focused": n === B.value
160
+ }]),
161
+ "aria-disabled": t.disabled || void 0,
162
+ tabindex: t.disabled ? -1 : 0,
163
+ onClick: (e) => X(t),
164
+ onKeydown: (e) => ie(e, t)
165
+ }, [_(e.$slots, "item", {
166
+ item: t,
167
+ index: n
168
+ }, () => [s(v(t.label), 1)])], 42, j))), 128))], 8, A)) : i("", !0)]),
169
+ _: 3
170
+ })], 14, E));
171
+ }
172
+ });
173
+ //#endregion
174
+ export { M as default };
175
+
176
+ //# sourceMappingURL=TDropdown.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TDropdown.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId, isActivationKey, isEscapeKey } from '@treeui/utils';\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport interface TDropdownItem {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nexport type TDropdownAlign = 'start' | 'end';\n\nconst props = withDefaults(\n defineProps<{\n items?: TDropdownItem[];\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n size?: TSize;\n label?: string;\n align?: TDropdownAlign;\n }>(),\n {\n items: () => [],\n open: undefined,\n defaultOpen: false,\n disabled: false,\n size: 'md',\n label: '',\n align: 'start',\n },\n);\n\nconst emit = defineEmits<{\n select: [value: string];\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean }): unknown;\n item(props: { item: TDropdownItem; index: number }): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst menuId = createId('t-dropdown');\nconst rootRef = ref<HTMLElement | null>(null);\nconst triggerRef = ref<HTMLButtonElement | null>(null);\nconst itemRefs = ref<Map<string, HTMLElement>>(new Map());\nconst focusedIndex = ref(-1);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-dropdown',\n `t-dropdown--${props.size}`,\n {\n 't-dropdown--align-end': props.align === 'end',\n 'is-disabled': props.disabled,\n 'is-open': isOpen.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst enabledItems = computed(() => props.items.filter((i) => !i.disabled));\n\nconst openMenu = () => {\n if (props.disabled) return;\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n setValue(true);\n nextTick(() => focusItem(focusedIndex.value));\n};\n\nconst closeMenu = (restoreFocus = false) => {\n setValue(false);\n focusedIndex.value = -1;\n if (restoreFocus) {\n nextTick(() => triggerRef.value?.focus());\n }\n};\n\nconst toggleMenu = () => {\n if (isOpen.value) {\n closeMenu();\n } else {\n openMenu();\n }\n};\n\nconst selectItem = (item: TDropdownItem) => {\n if (item.disabled) return;\n emit('select', item.value);\n closeMenu(true);\n};\n\nconst focusItem = (index: number) => {\n const item = props.items[index];\n if (!item) return;\n const el = itemRefs.value.get(item.value);\n el?.focus();\n};\n\nconst setItemRef = (el: Element | null, value: string) => {\n if (el instanceof HTMLElement) {\n itemRefs.value.set(value, el);\n } else {\n itemRefs.value.delete(value);\n }\n};\n\nconst moveFocus = (direction: 1 | -1) => {\n let nextIndex = focusedIndex.value + direction;\n while (nextIndex >= 0 && nextIndex < props.items.length) {\n if (!props.items[nextIndex].disabled) {\n focusedIndex.value = nextIndex;\n focusItem(nextIndex);\n return;\n }\n nextIndex += direction;\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closeMenu();\n return;\n }\n\n if (isActivationKey(event) || event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n openMenu();\n }\n};\n\nconst onItemKeydown = (event: KeyboardEvent, item: TDropdownItem) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closeMenu(true);\n return;\n }\n\n if (isActivationKey(event)) {\n event.preventDefault();\n selectItem(item);\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[0])\n : 0;\n focusItem(focusedIndex.value);\n break;\n case 'End':\n event.preventDefault();\n focusedIndex.value = enabledItems.value.length > 0\n ? props.items.indexOf(enabledItems.value[enabledItems.value.length - 1])\n : props.items.length - 1;\n focusItem(focusedIndex.value);\n break;\n default:\n break;\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closeMenu();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <span class=\"t-dropdown__trigger-wrapper\">\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n >\n <button\n ref=\"triggerRef\"\n v-bind=\"triggerAttrs\"\n type=\"button\"\n class=\"t-dropdown__trigger\"\n :disabled=\"disabled\"\n :aria-controls=\"isOpen ? menuId : undefined\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"isOpen\"\n @click=\"toggleMenu\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"t-dropdown__label\">{{ label }}</span>\n <svg\n class=\"t-dropdown__chevron\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"4 6 8 10 12 6\" />\n </svg>\n </button>\n </slot>\n </span>\n <transition name=\"t-fade\">\n <ul\n v-if=\"isOpen && !disabled\"\n :id=\"menuId\"\n role=\"menu\"\n class=\"t-dropdown__menu\"\n :aria-label=\"label || undefined\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"item.value\"\n :ref=\"(el) => setItemRef(el as Element | null, item.value)\"\n role=\"menuitem\"\n class=\"t-dropdown__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-focused': index === focusedIndex,\n }\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : 0\"\n @click=\"selectItem(item)\"\n @keydown=\"onItemKeydown($event, item)\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n :index=\"index\"\n >\n {{ item.label }}\n </slot>\n </li>\n </ul>\n </transition>\n </div>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=require("./TEmptyState.vue_vue_type_script_setup_true_lang.cjs").default;exports.default=e;
2
+ //# sourceMappingURL=TEmptyState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TEmptyState.cjs","names":[],"sources":["../../src/components/TEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('t-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 't-empty-state',\n `t-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"t-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"t-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"t-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"t-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"t-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import e from "./TEmptyState.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/TEmptyState.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
6
+
7
+ //# sourceMappingURL=TEmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TEmptyState.js","names":[],"sources":["../../src/components/TEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('t-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 't-empty-state',\n `t-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"t-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"t-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"t-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"t-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"t-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
- import { TreeSize } from '../types/contracts';
1
+ import { TSize } from '../types/contracts';
2
2
  type __VLS_Props = {
3
3
  as?: string;
4
- size?: TreeSize;
4
+ size?: TSize;
5
5
  title?: string;
6
6
  description?: string;
7
7
  };
@@ -25,7 +25,7 @@ declare function __VLS_template(): {
25
25
  };
26
26
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
27
27
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
28
- size: TreeSize;
28
+ size: TSize;
29
29
  title: string;
30
30
  as: string;
31
31
  description: string;
@@ -37,4 +37,4 @@ type __VLS_WithTemplateSlots<T, S> = T & {
37
37
  $slots: S;
38
38
  };
39
39
  };
40
- //# sourceMappingURL=TreeEmptyState.vue.d.ts.map
40
+ //# sourceMappingURL=TEmptyState.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TEmptyState.vue.d.ts","sourceRoot":"","sources":["../../src/components/TEmptyState.vue"],"names":[],"mappings":"AAgHA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAchD,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAwCJ,iBAAS,cAAc;WA+ET,OAAO,IAA6B;;eAnIzC,MAAM,OAAO;gBACZ,MAAM,OAAO;sBACP,MAAM,OAAO;kBACjB,MAAM,OAAO;kBACb,MAAM,OAAO;;eAJhB,MAAM,OAAO;gBACZ,MAAM,OAAO;sBACP,MAAM,OAAO;kBACjB,MAAM,OAAO;kBACb,MAAM,OAAO;;;;EAoIxB;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;UAhJV,KAAK;WACJ,MAAM;QAFT,MAAM;iBAGG,MAAM;6EAqJtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ let e=require("vue"),t=require("@treeui/utils");var n={key:0,class:`t-empty-state__icon`,"aria-hidden":`true`},r={class:`t-empty-state__content`},i={key:2,class:`t-empty-state__body`},a={key:3,class:`t-empty-state__actions`},o=(0,e.defineComponent)({inheritAttrs:!1,__name:`TEmptyState`,props:{as:{default:`section`},size:{default:`md`},title:{default:``},description:{default:``}},setup(o){let s=(0,e.useSlots)(),c=o,l=(0,e.useAttrs)(),u=(0,t.createId)(`t-empty-state`),d=`${u}-title`,f=`${u}-description`,p=(0,e.computed)(()=>!!(c.title||s.title)),m=(0,e.computed)(()=>!!(c.description||s.description)),h=(0,e.computed)(()=>[`t-empty-state`,`t-empty-state--${c.size}`,l.class]),g=(0,e.computed)(()=>l.style),_=(0,e.computed)(()=>{let{class:e,style:t,...n}=l;return n});return(t,s)=>((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(o.as),(0,e.mergeProps)(_.value,{class:h.value,style:g.value,"aria-labelledby":p.value?d:void 0,"aria-describedby":m.value?f:void 0}),{default:(0,e.withCtx)(()=>[t.$slots.icon?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,n,[(0,e.renderSlot)(t.$slots,`icon`)])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,r,[p.value?((0,e.openBlock)(),(0,e.createElementBlock)(`h2`,{key:0,id:d,class:`t-empty-state__title`},[(0,e.renderSlot)(t.$slots,`title`,{},()=>[(0,e.createTextVNode)((0,e.toDisplayString)(o.title),1)])])):(0,e.createCommentVNode)(``,!0),m.value?((0,e.openBlock)(),(0,e.createElementBlock)(`p`,{key:1,id:f,class:`t-empty-state__description`},[(0,e.renderSlot)(t.$slots,`description`,{},()=>[(0,e.createTextVNode)((0,e.toDisplayString)(o.description),1)])])):(0,e.createCommentVNode)(``,!0),t.$slots.default?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,i,[(0,e.renderSlot)(t.$slots,`default`)])):(0,e.createCommentVNode)(``,!0),t.$slots.actions?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,a,[(0,e.renderSlot)(t.$slots,`actions`)])):(0,e.createCommentVNode)(``,!0)])]),_:3},16,[`class`,`style`,`aria-labelledby`,`aria-describedby`]))}});exports.default=o;
2
+ //# sourceMappingURL=TEmptyState.vue_vue_type_script_setup_true_lang.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TEmptyState.vue_vue_type_script_setup_true_lang.cjs","names":["$slots"],"sources":["../../src/components/TEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('t-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 't-empty-state',\n `t-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"t-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"t-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"t-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"t-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"t-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n"],"mappings":"uYASA,IAAM,GAAA,EAAA,EAAA,SAAA,CAAQ,EAQR,EAAQ,EAeR,GAAA,EAAA,EAAA,SAAA,CAAiB,EACjB,GAAA,EAAA,EAAA,SAAA,CAAwB,eAAe,EACvC,EAAU,GAAG,EAAa,QAC1B,EAAgB,GAAG,EAAa,cAEhC,GAAA,EAAA,EAAA,SAAA,KAA0B,GAAQ,EAAM,OAAS,EAAM,MAAM,EAC7D,GAAA,EAAA,EAAA,SAAA,KAAgC,GAAQ,EAAM,aAAe,EAAM,YAAY,EAE/E,GAAA,EAAA,EAAA,SAAA,KAAyB,CAC7B,gBACA,kBAAkB,EAAM,OACxB,EAAM,KACR,CAAC,EAEK,GAAA,EAAA,EAAA,SAAA,KAA2B,EAAM,KAAK,EAEtC,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,GAAM,CAAE,MAAO,EAAQ,MAAO,EAAQ,GAAG,GAAS,EAClD,OAAO,CACT,CAAC,kFAKQ,EAAA,EAAE,GAAA,EAAA,EAAA,WAAA,CACC,EAiDE,MAjDO,CAChB,MAAO,EAAA,MACP,MAAO,EAAA,MACP,kBAAiB,EAAA,MAAW,EAAU,IAAA,GACtC,mBAAkB,EAAA,MAAiB,EAAgB,IAAA,gCAQ9C,CALEA,EAAAA,OAAO,OAAA,EAAA,EAAA,UAAA,CAAA,GAAA,EAAA,EAAA,mBAAA,CAKT,MANN,EAMM,EAAA,EAAA,EAAA,WAAA,CADgB,EAAA,OAAA,MAAA,CAAA,CAAA,IAAA,EAAA,EAAA,mBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAAA,mBAAA,CAqChB,MAlCN,EAkCM,CAhCI,EAAA,QAAA,EAAA,EAAA,UAAA,CAAA,GAAA,EAAA,EAAA,mBAAA,CAOH,KAAA,OANF,GAAI,EACL,MAAM,0CAIC,EAAA,OAAA,QAAA,CAAA,MAAA,EAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,gBAAA,CADF,EAAA,KAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,EAAA,mBAAA,CAAA,GAAA,EAAA,EAKJ,EAAA,QAAA,EAAA,EAAA,UAAA,CAAA,GAAA,EAAA,EAAA,mBAAA,CAOJ,IAAA,OAND,GAAI,EACL,MAAM,gDAIC,EAAA,OAAA,cAAA,CAAA,MAAA,EAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,gBAAA,CADF,EAAA,WAAW,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,EAAA,mBAAA,CAAA,GAAA,EAAA,EAKVA,EAAAA,OAAO,UAAA,EAAA,EAAA,UAAA,CAAA,GAAA,EAAA,EAAA,mBAAA,CAIT,MALN,EAKM,EAAA,EAAA,EAAA,WAAA,CADI,EAAA,OAAA,SAAA,CAAA,CAAA,IAAA,EAAA,EAAA,mBAAA,CAAA,GAAA,EAAA,EAIFA,EAAAA,OAAO,UAAA,EAAA,EAAA,UAAA,CAAA,GAAA,EAAA,EAAA,mBAAA,CAIT,MALN,EAKM,EAAA,EAAA,EAAA,WAAA,CADmB,EAAA,OAAA,SAAA,CAAA,CAAA,IAAA,EAAA,EAAA,mBAAA,CAAA,GAAA,EAAA"}
@@ -0,0 +1,64 @@
1
+ import { computed as e, createBlock as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, defineComponent as o, mergeProps as s, openBlock as c, renderSlot as l, resolveDynamicComponent as u, toDisplayString as d, useAttrs as f, useSlots as p, withCtx as m } from "vue";
2
+ import { createId as h } from "@treeui/utils";
3
+ //#region src/components/TEmptyState.vue?vue&type=script&setup=true&lang.ts
4
+ var g = {
5
+ key: 0,
6
+ class: "t-empty-state__icon",
7
+ "aria-hidden": "true"
8
+ }, _ = { class: "t-empty-state__content" }, v = {
9
+ key: 2,
10
+ class: "t-empty-state__body"
11
+ }, y = {
12
+ key: 3,
13
+ class: "t-empty-state__actions"
14
+ }, b = /*@__PURE__*/ o({
15
+ inheritAttrs: !1,
16
+ __name: "TEmptyState",
17
+ props: {
18
+ as: { default: "section" },
19
+ size: { default: "md" },
20
+ title: { default: "" },
21
+ description: { default: "" }
22
+ },
23
+ setup(o) {
24
+ let b = p(), x = o, S = f(), C = h("t-empty-state"), w = `${C}-title`, T = `${C}-description`, E = e(() => !!(x.title || b.title)), D = e(() => !!(x.description || b.description)), O = e(() => [
25
+ "t-empty-state",
26
+ `t-empty-state--${x.size}`,
27
+ S.class
28
+ ]), k = e(() => S.style), A = e(() => {
29
+ let { class: e, style: t, ...n } = S;
30
+ return n;
31
+ });
32
+ return (e, f) => (c(), t(u(o.as), s(A.value, {
33
+ class: O.value,
34
+ style: k.value,
35
+ "aria-labelledby": E.value ? w : void 0,
36
+ "aria-describedby": D.value ? T : void 0
37
+ }), {
38
+ default: m(() => [e.$slots.icon ? (c(), r("div", g, [l(e.$slots, "icon")])) : n("", !0), i("div", _, [
39
+ E.value ? (c(), r("h2", {
40
+ key: 0,
41
+ id: w,
42
+ class: "t-empty-state__title"
43
+ }, [l(e.$slots, "title", {}, () => [a(d(o.title), 1)])])) : n("", !0),
44
+ D.value ? (c(), r("p", {
45
+ key: 1,
46
+ id: T,
47
+ class: "t-empty-state__description"
48
+ }, [l(e.$slots, "description", {}, () => [a(d(o.description), 1)])])) : n("", !0),
49
+ e.$slots.default ? (c(), r("div", v, [l(e.$slots, "default")])) : n("", !0),
50
+ e.$slots.actions ? (c(), r("div", y, [l(e.$slots, "actions")])) : n("", !0)
51
+ ])]),
52
+ _: 3
53
+ }, 16, [
54
+ "class",
55
+ "style",
56
+ "aria-labelledby",
57
+ "aria-describedby"
58
+ ]));
59
+ }
60
+ });
61
+ //#endregion
62
+ export { b as default };
63
+
64
+ //# sourceMappingURL=TEmptyState.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TEmptyState.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../src/components/TEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId } from '@treeui/utils';\nimport { computed, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n title?: () => unknown;\n description?: () => unknown;\n default?: () => unknown;\n actions?: () => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n size?: TSize;\n title?: string;\n description?: string;\n }>(),\n {\n as: 'section',\n size: 'md',\n title: '',\n description: '',\n },\n);\n\nconst attrs = useAttrs();\nconst emptyStateId = createId('t-empty-state');\nconst titleId = `${emptyStateId}-title`;\nconst descriptionId = `${emptyStateId}-description`;\n\nconst hasTitle = computed(() => Boolean(props.title || slots.title));\nconst hasDescription = computed(() => Boolean(props.description || slots.description));\n\nconst classes = computed(() => [\n 't-empty-state',\n `t-empty-state--${props.size}`,\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"classes\"\n :style=\"rootStyle\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :aria-describedby=\"hasDescription ? descriptionId : undefined\"\n >\n <div\n v-if=\"$slots.icon\"\n class=\"t-empty-state__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\" />\n </div>\n\n <div class=\"t-empty-state__content\">\n <h2\n v-if=\"hasTitle\"\n :id=\"titleId\"\n class=\"t-empty-state__title\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </h2>\n\n <p\n v-if=\"hasDescription\"\n :id=\"descriptionId\"\n class=\"t-empty-state__description\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </p>\n\n <div\n v-if=\"$slots.default\"\n class=\"t-empty-state__body\"\n >\n <slot />\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-empty-state__actions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EASA,IAAM,IAAQ,EAAA,GAQR,IAAQ,GAeR,IAAQ,EAAS,GACjB,IAAe,EAAS,eAAe,GACvC,IAAU,GAAG,EAAa,SAC1B,IAAgB,GAAG,EAAa,eAEhC,IAAW,QAAe,GAAQ,EAAM,SAAS,EAAM,MAAM,GAC7D,IAAiB,QAAe,GAAQ,EAAM,eAAe,EAAM,YAAY,GAE/E,IAAU,QAAe;GAC7B;GACA,kBAAkB,EAAM;GACxB,EAAM;EACR,CAAC,GAEK,IAAY,QAAe,EAAM,KAAK,GAEtC,IAAY,QAAe;GAC/B,IAAM,EAAE,OAAO,GAAQ,OAAO,GAAQ,GAAG,MAAS;GAClD,OAAO;EACT,CAAC;yBAIC,EAmDY,EAlDL,EAAA,EAAE,GADT,EAEU,EAiDE,OAjDO;GAChB,OAAO,EAAA;GACP,OAAO,EAAA;GACP,mBAAiB,EAAA,QAAW,IAAU,KAAA;GACtC,oBAAkB,EAAA,QAAiB,IAAgB,KAAA;;oBAQ9C,CALEA,EAAAA,OAAO,QAAA,EAAA,GADf,EAMM,OANN,GAMM,CADJ,EAAoB,EAAA,QAAA,MAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAGtB,EAkCM,OAlCN,GAkCM;IAhCI,EAAA,SAAA,EAAA,GADR,EAQK,MAAA;;KANF,IAAI;KACL,OAAM;QAEN,EAEO,EAAA,QAAA,SAAA,CAAA,SAAA,CAAA,EAAA,EADF,EAAA,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;IAKJ,EAAA,SAAA,EAAA,GADR,EAQI,KAAA;;KAND,IAAI;KACL,OAAM;QAEN,EAEO,EAAA,QAAA,eAAA,CAAA,SAAA,CAAA,EAAA,EADF,EAAA,WAAW,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;IAKVA,EAAAA,OAAO,WAAA,EAAA,GADf,EAKM,OALN,GAKM,CADJ,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;IAIFA,EAAAA,OAAO,WAAA,EAAA,GADf,EAKM,OALN,GAKM,CADJ,EAAuB,EAAA,QAAA,SAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
@@ -0,0 +1,2 @@
1
+ var e=require("./TFileUpload.vue_vue_type_script_setup_true_lang.cjs").default;exports.default=e;
2
+ //# sourceMappingURL=TFileUpload.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFileUpload.cjs","names":[],"sources":["../../src/components/TFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\nimport TSpinner from './TSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TFileUploadRejectionReason =\n | 'file-invalid-type'\n | 'file-too-large'\n | 'too-many-files';\n\nexport interface TFileUploadRejection {\n file: File;\n reason: TFileUploadRejectionReason;\n message: string;\n}\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n default?: (props: {\n files: File[];\n isDragActive: boolean;\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n file?: (props: {\n file: File;\n index: number;\n removeFile: () => void;\n }) => unknown;\n actions?: (props: {\n files: File[];\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: File[];\n size?: TSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n accept?: string;\n multiple?: boolean;\n maxFiles?: number | null;\n maxFileSize?: number | null;\n label?: string;\n description?: string;\n buttonLabel?: string;\n filesLabel?: string;\n paste?: boolean;\n drop?: boolean;\n showFileList?: boolean;\n }>(),\n {\n modelValue: () => [],\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n accept: '',\n multiple: true,\n label: 'Drop files here',\n description: 'Click to browse, drag and drop, or paste with Ctrl+V.',\n buttonLabel: 'Browse files',\n filesLabel: 'Selected files',\n maxFiles: null,\n maxFileSize: null,\n paste: true,\n drop: true,\n showFileList: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: File[]];\n 'files-accepted': [files: File[]];\n 'files-rejected': [rejections: TFileUploadRejection[]];\n}>();\n\nconst attrs = useAttrs();\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragActive = ref(false);\nconst isFocusedWithin = ref(false);\nconst dragDepth = ref(0);\nconst feedbackMessages = ref<string[]>([]);\n\nconst uploadId = createId('t-file-upload');\nconst descriptionId = `${uploadId}-description`;\nconst feedbackId = `${uploadId}-feedback`;\nconst filesId = `${uploadId}-files`;\n\nconst isUnavailable = computed(() => props.disabled || props.loading);\nconst hasFiles = computed(() => props.modelValue.length > 0);\nconst hasCustomBody = computed(() => Boolean(slots.default));\n\nconst effectiveMaxFiles = computed(() => {\n if (!props.multiple) {\n return 1;\n }\n\n if (typeof props.maxFiles !== 'number') {\n return Number.POSITIVE_INFINITY;\n }\n\n return Math.max(props.maxFiles, 0);\n});\n\nconst rootClasses = computed(() => [\n 't-file-upload',\n `t-file-upload--${props.size}`,\n {\n 'is-disabled': isUnavailable.value,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-drag-active': isDragActive.value,\n 'has-files': hasFiles.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst describedBy = computed(() => {\n const ids: string[] = [];\n\n if (props.description && !hasCustomBody.value) {\n ids.push(descriptionId);\n }\n\n if (feedbackMessages.value.length > 0) {\n ids.push(feedbackId);\n }\n\n if (props.showFileList && hasFiles.value) {\n ids.push(filesId);\n }\n\n return ids.length > 0 ? ids.join(' ') : undefined;\n});\n\nconst selectedFilesLabel = computed(() => `${props.filesLabel} (${props.modelValue.length})`);\n\nconst formatFileSize = (size: number) => {\n if (size < 1024) {\n return `${size} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n let value = size / 1024;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n\n const roundedValue = value >= 10 || Number.isInteger(value)\n ? Math.round(value)\n : Number(value.toFixed(1));\n\n return `${roundedValue} ${units[unitIndex]}`;\n};\n\nconst fileKey = (file: File, index: number) =>\n `${file.name}-${file.size}-${file.lastModified}-${index}`;\n\nconst matchesAccept = (file: File) => {\n if (!props.accept.trim()) {\n return true;\n }\n\n const tokens = props.accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith('/*')) {\n return fileType.startsWith(token.slice(0, -1));\n }\n\n return fileType === token;\n });\n};\n\nconst buildRejectionMessage = (\n file: File,\n reason: TFileUploadRejectionReason,\n) => {\n switch (reason) {\n case 'file-invalid-type':\n return `${file.name} is not an accepted file type.`;\n case 'file-too-large':\n return `${file.name} exceeds the ${formatFileSize(props.maxFileSize ?? 0)} limit.`;\n case 'too-many-files':\n return `You can only add up to ${effectiveMaxFiles.value} file${effectiveMaxFiles.value === 1 ? '' : 's'}.`;\n default:\n return `${file.name} could not be added.`;\n }\n};\n\nconst resetInputValue = () => {\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n};\n\nconst openFileDialog = () => {\n if (isUnavailable.value) {\n return;\n }\n\n inputRef.value?.click();\n};\n\nconst emitFiles = (\n nextFiles: File[],\n acceptedFiles: File[],\n rejections: TFileUploadRejection[],\n) => {\n feedbackMessages.value = rejections.map((rejection) => rejection.message);\n\n if (rejections.length > 0) {\n emit('files-rejected', rejections);\n }\n\n if (acceptedFiles.length > 0) {\n emit('update:modelValue', nextFiles);\n emit('files-accepted', acceptedFiles);\n }\n};\n\nconst processFiles = (incomingFiles: File[]) => {\n if (isUnavailable.value || incomingFiles.length === 0) {\n return;\n }\n\n const nextFiles = props.multiple ? [...props.modelValue] : [];\n const acceptedFiles: File[] = [];\n const rejections: TFileUploadRejection[] = [];\n let remainingSlots = Number.isFinite(effectiveMaxFiles.value)\n ? Math.max(effectiveMaxFiles.value - nextFiles.length, 0)\n : Number.POSITIVE_INFINITY;\n\n for (const file of incomingFiles) {\n if (remainingSlots <= 0) {\n rejections.push({\n file,\n reason: 'too-many-files',\n message: buildRejectionMessage(file, 'too-many-files'),\n });\n continue;\n }\n\n if (!matchesAccept(file)) {\n rejections.push({\n file,\n reason: 'file-invalid-type',\n message: buildRejectionMessage(file, 'file-invalid-type'),\n });\n continue;\n }\n\n if (\n typeof props.maxFileSize === 'number' &&\n props.maxFileSize > 0 &&\n file.size > props.maxFileSize\n ) {\n rejections.push({\n file,\n reason: 'file-too-large',\n message: buildRejectionMessage(file, 'file-too-large'),\n });\n continue;\n }\n\n acceptedFiles.push(file);\n nextFiles.push(file);\n\n if (Number.isFinite(remainingSlots)) {\n remainingSlots -= 1;\n }\n }\n\n emitFiles(nextFiles, acceptedFiles, rejections);\n};\n\nconst removeFile = (index: number) => {\n if (isUnavailable.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', props.modelValue.filter((_, fileIndex) => fileIndex !== index));\n};\n\nconst clearFiles = () => {\n if (isUnavailable.value || !hasFiles.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', []);\n};\n\nconst hasTransferFiles = (dataTransfer?: DataTransfer | null) => {\n if (!dataTransfer) {\n return false;\n }\n\n return dataTransfer.files.length > 0 || Array.from(dataTransfer.types).includes('Files');\n};\n\nconst getClipboardFiles = (\n clipboardData?: Pick<DataTransfer, 'items'> | null,\n) => {\n if (!clipboardData?.items) {\n return [];\n }\n\n return Array.from(clipboardData.items)\n .map((item) => item.getAsFile?.() ?? null)\n .filter((file): file is File => file instanceof File);\n};\n\nconst onInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n processFiles(Array.from(target.files ?? []));\n resetInputValue();\n};\n\nconst onDropzoneKeydown = (event: KeyboardEvent) => {\n if (!isActivationKey(event) || isUnavailable.value) {\n return;\n }\n\n event.preventDefault();\n openFileDialog();\n};\n\nconst onFocusIn = () => {\n isFocusedWithin.value = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (nextTarget && rootRef.value?.contains(nextTarget)) {\n return;\n }\n\n isFocusedWithin.value = false;\n};\n\nconst onPaste = (event: ClipboardEvent) => {\n if (!props.paste || isUnavailable.value) {\n return;\n }\n\n const clipboardFiles = getClipboardFiles(event.clipboardData);\n\n if (clipboardFiles.length === 0) {\n return;\n }\n\n event.preventDefault();\n processFiles(clipboardFiles);\n};\n\nconst onDocumentPaste = (event: Event) => {\n if (!isFocusedWithin.value || event.defaultPrevented) {\n return;\n }\n\n onPaste(event as ClipboardEvent);\n};\n\nconst onDragEnter = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value += 1;\n isDragActive.value = true;\n};\n\nconst onDragOver = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n isDragActive.value = true;\n};\n\nconst onDragLeave = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = Math.max(dragDepth.value - 1, 0);\n\n if (dragDepth.value === 0) {\n isDragActive.value = false;\n }\n};\n\nconst onDrop = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = 0;\n isDragActive.value = false;\n processFiles(Array.from(event.dataTransfer?.files ?? []));\n};\n\nonMounted(() => {\n document.addEventListener('paste', onDocumentPaste);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('paste', onDocumentPaste);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n @paste=\"onPaste\"\n >\n <input\n :id=\"uploadId\"\n ref=\"inputRef\"\n class=\"t-visually-hidden\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"isUnavailable\"\n @change=\"onInputChange\"\n >\n\n <div\n class=\"t-file-upload__dropzone\"\n :aria-busy=\"loading || undefined\"\n :aria-controls=\"showFileList && hasFiles ? filesId : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"isUnavailable || undefined\"\n :aria-invalid=\"invalid || undefined\"\n role=\"button\"\n :tabindex=\"isUnavailable ? -1 : 0\"\n @click=\"openFileDialog\"\n @keydown=\"onDropzoneKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <div\n v-if=\"$slots.icon || !$slots.default\"\n class=\"t-file-upload__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\">\n <span class=\"t-file-upload__icon-mark\">+</span>\n </slot>\n </div>\n\n <div class=\"t-file-upload__content\">\n <slot\n :files=\"modelValue\"\n :is-drag-active=\"isDragActive\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n >\n <p class=\"t-file-upload__label\">\n {{ label }}\n </p>\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"t-file-upload__description\"\n >\n {{ description }}\n </p>\n <span class=\"t-file-upload__browse\">\n {{ buttonLabel }}\n </span>\n </slot>\n </div>\n\n <TSpinner\n v-if=\"loading\"\n class=\"t-file-upload__spinner\"\n size=\"sm\"\n label=\"Uploading files\"\n />\n </div>\n\n <ul\n v-if=\"feedbackMessages.length > 0\"\n :id=\"feedbackId\"\n class=\"t-file-upload__feedback\"\n aria-live=\"polite\"\n >\n <li\n v-for=\"message in feedbackMessages\"\n :key=\"message\"\n >\n {{ message }}\n </li>\n </ul>\n\n <div\n v-if=\"showFileList && hasFiles\"\n class=\"t-file-upload__files\"\n >\n <div class=\"t-file-upload__files-header\">\n <p\n :id=\"filesId\"\n class=\"t-file-upload__files-label\"\n >\n {{ selectedFilesLabel }}\n </p>\n\n <button\n class=\"t-file-upload__clear\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n @click=\"clearFiles\"\n >\n Clear all\n </button>\n </div>\n\n <ul class=\"t-file-upload__list\">\n <li\n v-for=\"(file, index) in modelValue\"\n :key=\"fileKey(file, index)\"\n class=\"t-file-upload__file\"\n >\n <slot\n name=\"file\"\n :file=\"file\"\n :index=\"index\"\n :remove-file=\"() => removeFile(index)\"\n >\n <div class=\"t-file-upload__file-copy\">\n <p class=\"t-file-upload__file-name\">\n {{ file.name }}\n </p>\n <p class=\"t-file-upload__file-meta\">\n {{ formatFileSize(file.size) }}\n </p>\n </div>\n\n <button\n class=\"t-file-upload__remove\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"removeFile(index)\"\n >\n Remove\n </button>\n </slot>\n </li>\n </ul>\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-file-upload__actions\"\n >\n <slot\n name=\"actions\"\n :files=\"modelValue\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n />\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import e from "./TFileUpload.vue_vue_type_script_setup_true_lang.js";
2
+ //#region src/components/TFileUpload.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
6
+
7
+ //# sourceMappingURL=TFileUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFileUpload.js","names":[],"sources":["../../src/components/TFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\nimport TSpinner from './TSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TFileUploadRejectionReason =\n | 'file-invalid-type'\n | 'file-too-large'\n | 'too-many-files';\n\nexport interface TFileUploadRejection {\n file: File;\n reason: TFileUploadRejectionReason;\n message: string;\n}\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n default?: (props: {\n files: File[];\n isDragActive: boolean;\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n file?: (props: {\n file: File;\n index: number;\n removeFile: () => void;\n }) => unknown;\n actions?: (props: {\n files: File[];\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: File[];\n size?: TSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n accept?: string;\n multiple?: boolean;\n maxFiles?: number | null;\n maxFileSize?: number | null;\n label?: string;\n description?: string;\n buttonLabel?: string;\n filesLabel?: string;\n paste?: boolean;\n drop?: boolean;\n showFileList?: boolean;\n }>(),\n {\n modelValue: () => [],\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n accept: '',\n multiple: true,\n label: 'Drop files here',\n description: 'Click to browse, drag and drop, or paste with Ctrl+V.',\n buttonLabel: 'Browse files',\n filesLabel: 'Selected files',\n maxFiles: null,\n maxFileSize: null,\n paste: true,\n drop: true,\n showFileList: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: File[]];\n 'files-accepted': [files: File[]];\n 'files-rejected': [rejections: TFileUploadRejection[]];\n}>();\n\nconst attrs = useAttrs();\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragActive = ref(false);\nconst isFocusedWithin = ref(false);\nconst dragDepth = ref(0);\nconst feedbackMessages = ref<string[]>([]);\n\nconst uploadId = createId('t-file-upload');\nconst descriptionId = `${uploadId}-description`;\nconst feedbackId = `${uploadId}-feedback`;\nconst filesId = `${uploadId}-files`;\n\nconst isUnavailable = computed(() => props.disabled || props.loading);\nconst hasFiles = computed(() => props.modelValue.length > 0);\nconst hasCustomBody = computed(() => Boolean(slots.default));\n\nconst effectiveMaxFiles = computed(() => {\n if (!props.multiple) {\n return 1;\n }\n\n if (typeof props.maxFiles !== 'number') {\n return Number.POSITIVE_INFINITY;\n }\n\n return Math.max(props.maxFiles, 0);\n});\n\nconst rootClasses = computed(() => [\n 't-file-upload',\n `t-file-upload--${props.size}`,\n {\n 'is-disabled': isUnavailable.value,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-drag-active': isDragActive.value,\n 'has-files': hasFiles.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst describedBy = computed(() => {\n const ids: string[] = [];\n\n if (props.description && !hasCustomBody.value) {\n ids.push(descriptionId);\n }\n\n if (feedbackMessages.value.length > 0) {\n ids.push(feedbackId);\n }\n\n if (props.showFileList && hasFiles.value) {\n ids.push(filesId);\n }\n\n return ids.length > 0 ? ids.join(' ') : undefined;\n});\n\nconst selectedFilesLabel = computed(() => `${props.filesLabel} (${props.modelValue.length})`);\n\nconst formatFileSize = (size: number) => {\n if (size < 1024) {\n return `${size} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n let value = size / 1024;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n\n const roundedValue = value >= 10 || Number.isInteger(value)\n ? Math.round(value)\n : Number(value.toFixed(1));\n\n return `${roundedValue} ${units[unitIndex]}`;\n};\n\nconst fileKey = (file: File, index: number) =>\n `${file.name}-${file.size}-${file.lastModified}-${index}`;\n\nconst matchesAccept = (file: File) => {\n if (!props.accept.trim()) {\n return true;\n }\n\n const tokens = props.accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith('/*')) {\n return fileType.startsWith(token.slice(0, -1));\n }\n\n return fileType === token;\n });\n};\n\nconst buildRejectionMessage = (\n file: File,\n reason: TFileUploadRejectionReason,\n) => {\n switch (reason) {\n case 'file-invalid-type':\n return `${file.name} is not an accepted file type.`;\n case 'file-too-large':\n return `${file.name} exceeds the ${formatFileSize(props.maxFileSize ?? 0)} limit.`;\n case 'too-many-files':\n return `You can only add up to ${effectiveMaxFiles.value} file${effectiveMaxFiles.value === 1 ? '' : 's'}.`;\n default:\n return `${file.name} could not be added.`;\n }\n};\n\nconst resetInputValue = () => {\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n};\n\nconst openFileDialog = () => {\n if (isUnavailable.value) {\n return;\n }\n\n inputRef.value?.click();\n};\n\nconst emitFiles = (\n nextFiles: File[],\n acceptedFiles: File[],\n rejections: TFileUploadRejection[],\n) => {\n feedbackMessages.value = rejections.map((rejection) => rejection.message);\n\n if (rejections.length > 0) {\n emit('files-rejected', rejections);\n }\n\n if (acceptedFiles.length > 0) {\n emit('update:modelValue', nextFiles);\n emit('files-accepted', acceptedFiles);\n }\n};\n\nconst processFiles = (incomingFiles: File[]) => {\n if (isUnavailable.value || incomingFiles.length === 0) {\n return;\n }\n\n const nextFiles = props.multiple ? [...props.modelValue] : [];\n const acceptedFiles: File[] = [];\n const rejections: TFileUploadRejection[] = [];\n let remainingSlots = Number.isFinite(effectiveMaxFiles.value)\n ? Math.max(effectiveMaxFiles.value - nextFiles.length, 0)\n : Number.POSITIVE_INFINITY;\n\n for (const file of incomingFiles) {\n if (remainingSlots <= 0) {\n rejections.push({\n file,\n reason: 'too-many-files',\n message: buildRejectionMessage(file, 'too-many-files'),\n });\n continue;\n }\n\n if (!matchesAccept(file)) {\n rejections.push({\n file,\n reason: 'file-invalid-type',\n message: buildRejectionMessage(file, 'file-invalid-type'),\n });\n continue;\n }\n\n if (\n typeof props.maxFileSize === 'number' &&\n props.maxFileSize > 0 &&\n file.size > props.maxFileSize\n ) {\n rejections.push({\n file,\n reason: 'file-too-large',\n message: buildRejectionMessage(file, 'file-too-large'),\n });\n continue;\n }\n\n acceptedFiles.push(file);\n nextFiles.push(file);\n\n if (Number.isFinite(remainingSlots)) {\n remainingSlots -= 1;\n }\n }\n\n emitFiles(nextFiles, acceptedFiles, rejections);\n};\n\nconst removeFile = (index: number) => {\n if (isUnavailable.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', props.modelValue.filter((_, fileIndex) => fileIndex !== index));\n};\n\nconst clearFiles = () => {\n if (isUnavailable.value || !hasFiles.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', []);\n};\n\nconst hasTransferFiles = (dataTransfer?: DataTransfer | null) => {\n if (!dataTransfer) {\n return false;\n }\n\n return dataTransfer.files.length > 0 || Array.from(dataTransfer.types).includes('Files');\n};\n\nconst getClipboardFiles = (\n clipboardData?: Pick<DataTransfer, 'items'> | null,\n) => {\n if (!clipboardData?.items) {\n return [];\n }\n\n return Array.from(clipboardData.items)\n .map((item) => item.getAsFile?.() ?? null)\n .filter((file): file is File => file instanceof File);\n};\n\nconst onInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n processFiles(Array.from(target.files ?? []));\n resetInputValue();\n};\n\nconst onDropzoneKeydown = (event: KeyboardEvent) => {\n if (!isActivationKey(event) || isUnavailable.value) {\n return;\n }\n\n event.preventDefault();\n openFileDialog();\n};\n\nconst onFocusIn = () => {\n isFocusedWithin.value = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (nextTarget && rootRef.value?.contains(nextTarget)) {\n return;\n }\n\n isFocusedWithin.value = false;\n};\n\nconst onPaste = (event: ClipboardEvent) => {\n if (!props.paste || isUnavailable.value) {\n return;\n }\n\n const clipboardFiles = getClipboardFiles(event.clipboardData);\n\n if (clipboardFiles.length === 0) {\n return;\n }\n\n event.preventDefault();\n processFiles(clipboardFiles);\n};\n\nconst onDocumentPaste = (event: Event) => {\n if (!isFocusedWithin.value || event.defaultPrevented) {\n return;\n }\n\n onPaste(event as ClipboardEvent);\n};\n\nconst onDragEnter = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value += 1;\n isDragActive.value = true;\n};\n\nconst onDragOver = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n isDragActive.value = true;\n};\n\nconst onDragLeave = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = Math.max(dragDepth.value - 1, 0);\n\n if (dragDepth.value === 0) {\n isDragActive.value = false;\n }\n};\n\nconst onDrop = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = 0;\n isDragActive.value = false;\n processFiles(Array.from(event.dataTransfer?.files ?? []));\n};\n\nonMounted(() => {\n document.addEventListener('paste', onDocumentPaste);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('paste', onDocumentPaste);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n @paste=\"onPaste\"\n >\n <input\n :id=\"uploadId\"\n ref=\"inputRef\"\n class=\"t-visually-hidden\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"isUnavailable\"\n @change=\"onInputChange\"\n >\n\n <div\n class=\"t-file-upload__dropzone\"\n :aria-busy=\"loading || undefined\"\n :aria-controls=\"showFileList && hasFiles ? filesId : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"isUnavailable || undefined\"\n :aria-invalid=\"invalid || undefined\"\n role=\"button\"\n :tabindex=\"isUnavailable ? -1 : 0\"\n @click=\"openFileDialog\"\n @keydown=\"onDropzoneKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <div\n v-if=\"$slots.icon || !$slots.default\"\n class=\"t-file-upload__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\">\n <span class=\"t-file-upload__icon-mark\">+</span>\n </slot>\n </div>\n\n <div class=\"t-file-upload__content\">\n <slot\n :files=\"modelValue\"\n :is-drag-active=\"isDragActive\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n >\n <p class=\"t-file-upload__label\">\n {{ label }}\n </p>\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"t-file-upload__description\"\n >\n {{ description }}\n </p>\n <span class=\"t-file-upload__browse\">\n {{ buttonLabel }}\n </span>\n </slot>\n </div>\n\n <TSpinner\n v-if=\"loading\"\n class=\"t-file-upload__spinner\"\n size=\"sm\"\n label=\"Uploading files\"\n />\n </div>\n\n <ul\n v-if=\"feedbackMessages.length > 0\"\n :id=\"feedbackId\"\n class=\"t-file-upload__feedback\"\n aria-live=\"polite\"\n >\n <li\n v-for=\"message in feedbackMessages\"\n :key=\"message\"\n >\n {{ message }}\n </li>\n </ul>\n\n <div\n v-if=\"showFileList && hasFiles\"\n class=\"t-file-upload__files\"\n >\n <div class=\"t-file-upload__files-header\">\n <p\n :id=\"filesId\"\n class=\"t-file-upload__files-label\"\n >\n {{ selectedFilesLabel }}\n </p>\n\n <button\n class=\"t-file-upload__clear\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n @click=\"clearFiles\"\n >\n Clear all\n </button>\n </div>\n\n <ul class=\"t-file-upload__list\">\n <li\n v-for=\"(file, index) in modelValue\"\n :key=\"fileKey(file, index)\"\n class=\"t-file-upload__file\"\n >\n <slot\n name=\"file\"\n :file=\"file\"\n :index=\"index\"\n :remove-file=\"() => removeFile(index)\"\n >\n <div class=\"t-file-upload__file-copy\">\n <p class=\"t-file-upload__file-name\">\n {{ file.name }}\n </p>\n <p class=\"t-file-upload__file-meta\">\n {{ formatFileSize(file.size) }}\n </p>\n </div>\n\n <button\n class=\"t-file-upload__remove\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"removeFile(index)\"\n >\n Remove\n </button>\n </slot>\n </li>\n </ul>\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-file-upload__actions\"\n >\n <slot\n name=\"actions\"\n :files=\"modelValue\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n />\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1,13 +1,13 @@
1
- import { TreeSize } from '../types/contracts';
2
- export type TreeFileUploadRejectionReason = 'file-invalid-type' | 'file-too-large' | 'too-many-files';
3
- export interface TreeFileUploadRejection {
1
+ import { TSize } from '../types/contracts';
2
+ export type TFileUploadRejectionReason = 'file-invalid-type' | 'file-too-large' | 'too-many-files';
3
+ export interface TFileUploadRejection {
4
4
  file: File;
5
- reason: TreeFileUploadRejectionReason;
5
+ reason: TFileUploadRejectionReason;
6
6
  message: string;
7
7
  }
8
8
  type __VLS_Props = {
9
9
  modelValue?: File[];
10
- size?: TreeSize;
10
+ size?: TSize;
11
11
  disabled?: boolean;
12
12
  loading?: boolean;
13
13
  invalid?: boolean;
@@ -72,16 +72,16 @@ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
72
72
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
73
73
  "update:modelValue": (files: File[]) => any;
74
74
  "files-accepted": (files: File[]) => any;
75
- "files-rejected": (rejections: TreeFileUploadRejection[]) => any;
75
+ "files-rejected": (rejections: TFileUploadRejection[]) => any;
76
76
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
77
77
  "onUpdate:modelValue"?: ((files: File[]) => any) | undefined;
78
78
  "onFiles-accepted"?: ((files: File[]) => any) | undefined;
79
- "onFiles-rejected"?: ((rejections: TreeFileUploadRejection[]) => any) | undefined;
79
+ "onFiles-rejected"?: ((rejections: TFileUploadRejection[]) => any) | undefined;
80
80
  }>, {
81
81
  multiple: boolean;
82
82
  modelValue: File[];
83
83
  disabled: boolean;
84
- size: TreeSize;
84
+ size: TSize;
85
85
  label: string;
86
86
  loading: boolean;
87
87
  invalid: boolean;
@@ -105,4 +105,4 @@ type __VLS_WithTemplateSlots<T, S> = T & {
105
105
  $slots: S;
106
106
  };
107
107
  };
108
- //# sourceMappingURL=TreeFileUpload.vue.d.ts.map
108
+ //# sourceMappingURL=TFileUpload.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFileUpload.vue.d.ts","sourceRoot":"","sources":["../../src/components/TFileUpload.vue"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./TSpinner.cjs");let t=require("vue"),n=require("@treeui/utils");var r=[`id`,`accept`,`multiple`,`disabled`],i=[`aria-busy`,`aria-controls`,`aria-describedby`,`aria-disabled`,`aria-invalid`,`tabindex`],a={key:0,class:`t-file-upload__icon`,"aria-hidden":`true`},ee={class:`t-file-upload__content`},te={class:`t-file-upload__label`},o={class:`t-file-upload__browse`},s={key:1,class:`t-file-upload__files`},c={class:`t-file-upload__files-header`},l=[`disabled`],u={class:`t-file-upload__list`},d={class:`t-file-upload__file-copy`},f={class:`t-file-upload__file-name`},p={class:`t-file-upload__file-meta`},m=[`disabled`,`aria-label`,`onClick`],h={key:2,class:`t-file-upload__actions`},g=(0,t.defineComponent)({inheritAttrs:!1,__name:`TFileUpload`,props:{modelValue:{default:()=>[]},size:{default:`md`},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},invalid:{type:Boolean,default:!1},accept:{default:``},multiple:{type:Boolean,default:!0},maxFiles:{default:null},maxFileSize:{default:null},label:{default:`Drop files here`},description:{default:`Click to browse, drag and drop, or paste with Ctrl+V.`},buttonLabel:{default:`Browse files`},filesLabel:{default:`Selected files`},paste:{type:Boolean,default:!0},drop:{type:Boolean,default:!0},showFileList:{type:Boolean,default:!0}},emits:[`update:modelValue`,`files-accepted`,`files-rejected`],setup(g,{emit:_}){let ne=(0,t.useSlots)(),v=g,y=_,b=(0,t.useAttrs)(),x=(0,t.ref)(null),S=(0,t.ref)(null),C=(0,t.ref)(!1),w=(0,t.ref)(!1),T=(0,t.ref)(0),E=(0,t.ref)([]),D=(0,n.createId)(`t-file-upload`),O=`${D}-description`,k=`${D}-feedback`,A=`${D}-files`,j=(0,t.computed)(()=>v.disabled||v.loading),M=(0,t.computed)(()=>v.modelValue.length>0),N=(0,t.computed)(()=>!!ne.default),P=(0,t.computed)(()=>v.multiple?typeof v.maxFiles==`number`?Math.max(v.maxFiles,0):1/0:1),F=(0,t.computed)(()=>[`t-file-upload`,`t-file-upload--${v.size}`,{"is-disabled":j.value,"is-invalid":v.invalid,"is-loading":v.loading,"is-drag-active":C.value,"has-files":M.value},b.class]),I=(0,t.computed)(()=>b.style),L=(0,t.computed)(()=>{let{class:e,style:t,...n}=b;return n}),R=(0,t.computed)(()=>{let e=[];return v.description&&!N.value&&e.push(O),E.value.length>0&&e.push(k),v.showFileList&&M.value&&e.push(A),e.length>0?e.join(` `):void 0}),z=(0,t.computed)(()=>`${v.filesLabel} (${v.modelValue.length})`),B=e=>{if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||Number.isInteger(n)?Math.round(n):Number(n.toFixed(1))} ${t[r]}`},V=(e,t)=>`${e.name}-${e.size}-${e.lastModified}-${t}`,H=e=>{if(!v.accept.trim())return!0;let t=v.accept.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean),n=e.name.toLowerCase(),r=e.type.toLowerCase();return t.some(e=>e.startsWith(`.`)?n.endsWith(e):e.endsWith(`/*`)?r.startsWith(e.slice(0,-1)):r===e)},U=(e,t)=>{switch(t){case`file-invalid-type`:return`${e.name} is not an accepted file type.`;case`file-too-large`:return`${e.name} exceeds the ${B(v.maxFileSize??0)} limit.`;case`too-many-files`:return`You can only add up to ${P.value} file${P.value===1?``:`s`}.`;default:return`${e.name} could not be added.`}},W=()=>{S.value&&(S.value.value=``)},G=()=>{j.value||S.value?.click()},K=(e,t,n)=>{E.value=n.map(e=>e.message),n.length>0&&y(`files-rejected`,n),t.length>0&&(y(`update:modelValue`,e),y(`files-accepted`,t))},q=e=>{if(j.value||e.length===0)return;let t=v.multiple?[...v.modelValue]:[],n=[],r=[],i=Number.isFinite(P.value)?Math.max(P.value-t.length,0):1/0;for(let a of e){if(i<=0){r.push({file:a,reason:`too-many-files`,message:U(a,`too-many-files`)});continue}if(!H(a)){r.push({file:a,reason:`file-invalid-type`,message:U(a,`file-invalid-type`)});continue}if(typeof v.maxFileSize==`number`&&v.maxFileSize>0&&a.size>v.maxFileSize){r.push({file:a,reason:`file-too-large`,message:U(a,`file-too-large`)});continue}n.push(a),t.push(a),Number.isFinite(i)&&--i}K(t,n,r)},J=e=>{j.value||(E.value=[],y(`update:modelValue`,v.modelValue.filter((t,n)=>n!==e)))},Y=()=>{j.value||!M.value||(E.value=[],y(`update:modelValue`,[]))},X=e=>e?e.files.length>0||Array.from(e.types).includes(`Files`):!1,re=e=>e?.items?Array.from(e.items).map(e=>e.getAsFile?.()??null).filter(e=>e instanceof File):[],ie=e=>{let t=e.target;q(Array.from(t.files??[])),W()},ae=e=>{!(0,n.isActivationKey)(e)||j.value||(e.preventDefault(),G())},oe=()=>{w.value=!0},se=e=>{let t=e.relatedTarget;t&&x.value?.contains(t)||(w.value=!1)},Z=e=>{if(!v.paste||j.value)return;let t=re(e.clipboardData);t.length!==0&&(e.preventDefault(),q(t))},Q=e=>{!w.value||e.defaultPrevented||Z(e)},ce=e=>{!v.drop||j.value||!X(e.dataTransfer)||(e.preventDefault(),T.value+=1,C.value=!0)},le=e=>{!v.drop||j.value||!X(e.dataTransfer)||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`),C.value=!0)},$=e=>{!v.drop||j.value||!X(e.dataTransfer)||(e.preventDefault(),T.value=Math.max(T.value-1,0),T.value===0&&(C.value=!1))},ue=e=>{!v.drop||j.value||!X(e.dataTransfer)||(e.preventDefault(),T.value=0,C.value=!1,q(Array.from(e.dataTransfer?.files??[])))};return(0,t.onMounted)(()=>{document.addEventListener(`paste`,Q)}),(0,t.onBeforeUnmount)(()=>{document.removeEventListener(`paste`,Q)}),(n,_)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,(0,t.mergeProps)({ref_key:`rootRef`,ref:x},L.value,{class:F.value,style:I.value,onFocusin:oe,onFocusout:se,onPaste:Z}),[(0,t.createElementVNode)(`input`,{id:(0,t.unref)(D),ref_key:`inputRef`,ref:S,class:`t-visually-hidden`,type:`file`,accept:g.accept||void 0,multiple:g.multiple,disabled:j.value,onChange:ie},null,40,r),(0,t.createElementVNode)(`div`,{class:`t-file-upload__dropzone`,"aria-busy":g.loading||void 0,"aria-controls":g.showFileList&&M.value?A:void 0,"aria-describedby":R.value,"aria-disabled":j.value||void 0,"aria-invalid":g.invalid||void 0,role:`button`,tabindex:j.value?-1:0,onClick:G,onKeydown:ae,onDragenter:ce,onDragover:le,onDragleave:$,onDrop:ue},[n.$slots.icon||!n.$slots.default?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,a,[(0,t.renderSlot)(n.$slots,`icon`,{},()=>[_[0]||=(0,t.createElementVNode)(`span`,{class:`t-file-upload__icon-mark`},`+`,-1)])])):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,ee,[(0,t.renderSlot)(n.$slots,`default`,{files:g.modelValue,isDragActive:C.value,openFileDialog:G,clearFiles:Y},()=>[(0,t.createElementVNode)(`p`,te,(0,t.toDisplayString)(g.label),1),g.description?((0,t.openBlock)(),(0,t.createElementBlock)(`p`,{key:0,id:O,class:`t-file-upload__description`},(0,t.toDisplayString)(g.description),1)):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`span`,o,(0,t.toDisplayString)(g.buttonLabel),1)])]),g.loading?((0,t.openBlock)(),(0,t.createBlock)(e.default,{key:1,class:`t-file-upload__spinner`,size:`sm`,label:`Uploading files`})):(0,t.createCommentVNode)(``,!0)],40,i),E.value.length>0?((0,t.openBlock)(),(0,t.createElementBlock)(`ul`,{key:0,id:k,class:`t-file-upload__feedback`,"aria-live":`polite`},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(E.value,e=>((0,t.openBlock)(),(0,t.createElementBlock)(`li`,{key:e},(0,t.toDisplayString)(e),1))),128))])):(0,t.createCommentVNode)(``,!0),g.showFileList&&M.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,s,[(0,t.createElementVNode)(`div`,c,[(0,t.createElementVNode)(`p`,{id:A,class:`t-file-upload__files-label`},(0,t.toDisplayString)(z.value),1),(0,t.createElementVNode)(`button`,{class:`t-file-upload__clear`,type:`button`,disabled:j.value,onClick:Y},` Clear all `,8,l)]),(0,t.createElementVNode)(`ul`,u,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(g.modelValue,(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`li`,{key:V(e,r),class:`t-file-upload__file`},[(0,t.renderSlot)(n.$slots,`file`,{file:e,index:r,removeFile:()=>J(r)},()=>[(0,t.createElementVNode)(`div`,d,[(0,t.createElementVNode)(`p`,f,(0,t.toDisplayString)(e.name),1),(0,t.createElementVNode)(`p`,p,(0,t.toDisplayString)(B(e.size)),1)]),(0,t.createElementVNode)(`button`,{class:`t-file-upload__remove`,type:`button`,disabled:j.value,"aria-label":`Remove ${e.name}`,onClick:e=>J(r)},` Remove `,8,m)])]))),128))])])):(0,t.createCommentVNode)(``,!0),n.$slots.actions?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,h,[(0,t.renderSlot)(n.$slots,`actions`,{files:g.modelValue,openFileDialog:G,clearFiles:Y})])):(0,t.createCommentVNode)(``,!0)],16))}});exports.default=g;
2
+ //# sourceMappingURL=TFileUpload.vue_vue_type_script_setup_true_lang.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFileUpload.vue_vue_type_script_setup_true_lang.cjs","names":["$slots"],"sources":["../../src/components/TFileUpload.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { createId, isActivationKey } from '@treeui/utils';\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs } from 'vue';\nimport type { TSize } from '../types/contracts';\nimport TSpinner from './TSpinner.vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TFileUploadRejectionReason =\n | 'file-invalid-type'\n | 'file-too-large'\n | 'too-many-files';\n\nexport interface TFileUploadRejection {\n file: File;\n reason: TFileUploadRejectionReason;\n message: string;\n}\n\nconst slots = defineSlots<{\n icon?: () => unknown;\n default?: (props: {\n files: File[];\n isDragActive: boolean;\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n file?: (props: {\n file: File;\n index: number;\n removeFile: () => void;\n }) => unknown;\n actions?: (props: {\n files: File[];\n openFileDialog: () => void;\n clearFiles: () => void;\n }) => unknown;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: File[];\n size?: TSize;\n disabled?: boolean;\n loading?: boolean;\n invalid?: boolean;\n accept?: string;\n multiple?: boolean;\n maxFiles?: number | null;\n maxFileSize?: number | null;\n label?: string;\n description?: string;\n buttonLabel?: string;\n filesLabel?: string;\n paste?: boolean;\n drop?: boolean;\n showFileList?: boolean;\n }>(),\n {\n modelValue: () => [],\n size: 'md',\n disabled: false,\n loading: false,\n invalid: false,\n accept: '',\n multiple: true,\n label: 'Drop files here',\n description: 'Click to browse, drag and drop, or paste with Ctrl+V.',\n buttonLabel: 'Browse files',\n filesLabel: 'Selected files',\n maxFiles: null,\n maxFileSize: null,\n paste: true,\n drop: true,\n showFileList: true,\n },\n);\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: File[]];\n 'files-accepted': [files: File[]];\n 'files-rejected': [rejections: TFileUploadRejection[]];\n}>();\n\nconst attrs = useAttrs();\nconst rootRef = ref<HTMLElement | null>(null);\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragActive = ref(false);\nconst isFocusedWithin = ref(false);\nconst dragDepth = ref(0);\nconst feedbackMessages = ref<string[]>([]);\n\nconst uploadId = createId('t-file-upload');\nconst descriptionId = `${uploadId}-description`;\nconst feedbackId = `${uploadId}-feedback`;\nconst filesId = `${uploadId}-files`;\n\nconst isUnavailable = computed(() => props.disabled || props.loading);\nconst hasFiles = computed(() => props.modelValue.length > 0);\nconst hasCustomBody = computed(() => Boolean(slots.default));\n\nconst effectiveMaxFiles = computed(() => {\n if (!props.multiple) {\n return 1;\n }\n\n if (typeof props.maxFiles !== 'number') {\n return Number.POSITIVE_INFINITY;\n }\n\n return Math.max(props.maxFiles, 0);\n});\n\nconst rootClasses = computed(() => [\n 't-file-upload',\n `t-file-upload--${props.size}`,\n {\n 'is-disabled': isUnavailable.value,\n 'is-invalid': props.invalid,\n 'is-loading': props.loading,\n 'is-drag-active': isDragActive.value,\n 'has-files': hasFiles.value,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst describedBy = computed(() => {\n const ids: string[] = [];\n\n if (props.description && !hasCustomBody.value) {\n ids.push(descriptionId);\n }\n\n if (feedbackMessages.value.length > 0) {\n ids.push(feedbackId);\n }\n\n if (props.showFileList && hasFiles.value) {\n ids.push(filesId);\n }\n\n return ids.length > 0 ? ids.join(' ') : undefined;\n});\n\nconst selectedFilesLabel = computed(() => `${props.filesLabel} (${props.modelValue.length})`);\n\nconst formatFileSize = (size: number) => {\n if (size < 1024) {\n return `${size} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n let value = size / 1024;\n let unitIndex = 0;\n\n while (value >= 1024 && unitIndex < units.length - 1) {\n value /= 1024;\n unitIndex += 1;\n }\n\n const roundedValue = value >= 10 || Number.isInteger(value)\n ? Math.round(value)\n : Number(value.toFixed(1));\n\n return `${roundedValue} ${units[unitIndex]}`;\n};\n\nconst fileKey = (file: File, index: number) =>\n `${file.name}-${file.size}-${file.lastModified}-${index}`;\n\nconst matchesAccept = (file: File) => {\n if (!props.accept.trim()) {\n return true;\n }\n\n const tokens = props.accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith('/*')) {\n return fileType.startsWith(token.slice(0, -1));\n }\n\n return fileType === token;\n });\n};\n\nconst buildRejectionMessage = (\n file: File,\n reason: TFileUploadRejectionReason,\n) => {\n switch (reason) {\n case 'file-invalid-type':\n return `${file.name} is not an accepted file type.`;\n case 'file-too-large':\n return `${file.name} exceeds the ${formatFileSize(props.maxFileSize ?? 0)} limit.`;\n case 'too-many-files':\n return `You can only add up to ${effectiveMaxFiles.value} file${effectiveMaxFiles.value === 1 ? '' : 's'}.`;\n default:\n return `${file.name} could not be added.`;\n }\n};\n\nconst resetInputValue = () => {\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n};\n\nconst openFileDialog = () => {\n if (isUnavailable.value) {\n return;\n }\n\n inputRef.value?.click();\n};\n\nconst emitFiles = (\n nextFiles: File[],\n acceptedFiles: File[],\n rejections: TFileUploadRejection[],\n) => {\n feedbackMessages.value = rejections.map((rejection) => rejection.message);\n\n if (rejections.length > 0) {\n emit('files-rejected', rejections);\n }\n\n if (acceptedFiles.length > 0) {\n emit('update:modelValue', nextFiles);\n emit('files-accepted', acceptedFiles);\n }\n};\n\nconst processFiles = (incomingFiles: File[]) => {\n if (isUnavailable.value || incomingFiles.length === 0) {\n return;\n }\n\n const nextFiles = props.multiple ? [...props.modelValue] : [];\n const acceptedFiles: File[] = [];\n const rejections: TFileUploadRejection[] = [];\n let remainingSlots = Number.isFinite(effectiveMaxFiles.value)\n ? Math.max(effectiveMaxFiles.value - nextFiles.length, 0)\n : Number.POSITIVE_INFINITY;\n\n for (const file of incomingFiles) {\n if (remainingSlots <= 0) {\n rejections.push({\n file,\n reason: 'too-many-files',\n message: buildRejectionMessage(file, 'too-many-files'),\n });\n continue;\n }\n\n if (!matchesAccept(file)) {\n rejections.push({\n file,\n reason: 'file-invalid-type',\n message: buildRejectionMessage(file, 'file-invalid-type'),\n });\n continue;\n }\n\n if (\n typeof props.maxFileSize === 'number' &&\n props.maxFileSize > 0 &&\n file.size > props.maxFileSize\n ) {\n rejections.push({\n file,\n reason: 'file-too-large',\n message: buildRejectionMessage(file, 'file-too-large'),\n });\n continue;\n }\n\n acceptedFiles.push(file);\n nextFiles.push(file);\n\n if (Number.isFinite(remainingSlots)) {\n remainingSlots -= 1;\n }\n }\n\n emitFiles(nextFiles, acceptedFiles, rejections);\n};\n\nconst removeFile = (index: number) => {\n if (isUnavailable.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', props.modelValue.filter((_, fileIndex) => fileIndex !== index));\n};\n\nconst clearFiles = () => {\n if (isUnavailable.value || !hasFiles.value) {\n return;\n }\n\n feedbackMessages.value = [];\n emit('update:modelValue', []);\n};\n\nconst hasTransferFiles = (dataTransfer?: DataTransfer | null) => {\n if (!dataTransfer) {\n return false;\n }\n\n return dataTransfer.files.length > 0 || Array.from(dataTransfer.types).includes('Files');\n};\n\nconst getClipboardFiles = (\n clipboardData?: Pick<DataTransfer, 'items'> | null,\n) => {\n if (!clipboardData?.items) {\n return [];\n }\n\n return Array.from(clipboardData.items)\n .map((item) => item.getAsFile?.() ?? null)\n .filter((file): file is File => file instanceof File);\n};\n\nconst onInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n processFiles(Array.from(target.files ?? []));\n resetInputValue();\n};\n\nconst onDropzoneKeydown = (event: KeyboardEvent) => {\n if (!isActivationKey(event) || isUnavailable.value) {\n return;\n }\n\n event.preventDefault();\n openFileDialog();\n};\n\nconst onFocusIn = () => {\n isFocusedWithin.value = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n\n if (nextTarget && rootRef.value?.contains(nextTarget)) {\n return;\n }\n\n isFocusedWithin.value = false;\n};\n\nconst onPaste = (event: ClipboardEvent) => {\n if (!props.paste || isUnavailable.value) {\n return;\n }\n\n const clipboardFiles = getClipboardFiles(event.clipboardData);\n\n if (clipboardFiles.length === 0) {\n return;\n }\n\n event.preventDefault();\n processFiles(clipboardFiles);\n};\n\nconst onDocumentPaste = (event: Event) => {\n if (!isFocusedWithin.value || event.defaultPrevented) {\n return;\n }\n\n onPaste(event as ClipboardEvent);\n};\n\nconst onDragEnter = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value += 1;\n isDragActive.value = true;\n};\n\nconst onDragOver = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n\n isDragActive.value = true;\n};\n\nconst onDragLeave = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = Math.max(dragDepth.value - 1, 0);\n\n if (dragDepth.value === 0) {\n isDragActive.value = false;\n }\n};\n\nconst onDrop = (event: DragEvent) => {\n if (!props.drop || isUnavailable.value || !hasTransferFiles(event.dataTransfer)) {\n return;\n }\n\n event.preventDefault();\n dragDepth.value = 0;\n isDragActive.value = false;\n processFiles(Array.from(event.dataTransfer?.files ?? []));\n};\n\nonMounted(() => {\n document.addEventListener('paste', onDocumentPaste);\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('paste', onDocumentPaste);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n @paste=\"onPaste\"\n >\n <input\n :id=\"uploadId\"\n ref=\"inputRef\"\n class=\"t-visually-hidden\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"isUnavailable\"\n @change=\"onInputChange\"\n >\n\n <div\n class=\"t-file-upload__dropzone\"\n :aria-busy=\"loading || undefined\"\n :aria-controls=\"showFileList && hasFiles ? filesId : undefined\"\n :aria-describedby=\"describedBy\"\n :aria-disabled=\"isUnavailable || undefined\"\n :aria-invalid=\"invalid || undefined\"\n role=\"button\"\n :tabindex=\"isUnavailable ? -1 : 0\"\n @click=\"openFileDialog\"\n @keydown=\"onDropzoneKeydown\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <div\n v-if=\"$slots.icon || !$slots.default\"\n class=\"t-file-upload__icon\"\n aria-hidden=\"true\"\n >\n <slot name=\"icon\">\n <span class=\"t-file-upload__icon-mark\">+</span>\n </slot>\n </div>\n\n <div class=\"t-file-upload__content\">\n <slot\n :files=\"modelValue\"\n :is-drag-active=\"isDragActive\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n >\n <p class=\"t-file-upload__label\">\n {{ label }}\n </p>\n <p\n v-if=\"description\"\n :id=\"descriptionId\"\n class=\"t-file-upload__description\"\n >\n {{ description }}\n </p>\n <span class=\"t-file-upload__browse\">\n {{ buttonLabel }}\n </span>\n </slot>\n </div>\n\n <TSpinner\n v-if=\"loading\"\n class=\"t-file-upload__spinner\"\n size=\"sm\"\n label=\"Uploading files\"\n />\n </div>\n\n <ul\n v-if=\"feedbackMessages.length > 0\"\n :id=\"feedbackId\"\n class=\"t-file-upload__feedback\"\n aria-live=\"polite\"\n >\n <li\n v-for=\"message in feedbackMessages\"\n :key=\"message\"\n >\n {{ message }}\n </li>\n </ul>\n\n <div\n v-if=\"showFileList && hasFiles\"\n class=\"t-file-upload__files\"\n >\n <div class=\"t-file-upload__files-header\">\n <p\n :id=\"filesId\"\n class=\"t-file-upload__files-label\"\n >\n {{ selectedFilesLabel }}\n </p>\n\n <button\n class=\"t-file-upload__clear\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n @click=\"clearFiles\"\n >\n Clear all\n </button>\n </div>\n\n <ul class=\"t-file-upload__list\">\n <li\n v-for=\"(file, index) in modelValue\"\n :key=\"fileKey(file, index)\"\n class=\"t-file-upload__file\"\n >\n <slot\n name=\"file\"\n :file=\"file\"\n :index=\"index\"\n :remove-file=\"() => removeFile(index)\"\n >\n <div class=\"t-file-upload__file-copy\">\n <p class=\"t-file-upload__file-name\">\n {{ file.name }}\n </p>\n <p class=\"t-file-upload__file-meta\">\n {{ formatFileSize(file.size) }}\n </p>\n </div>\n\n <button\n class=\"t-file-upload__remove\"\n type=\"button\"\n :disabled=\"isUnavailable\"\n :aria-label=\"`Remove ${file.name}`\"\n @click=\"removeFile(index)\"\n >\n Remove\n </button>\n </slot>\n </li>\n </ul>\n </div>\n\n <div\n v-if=\"$slots.actions\"\n class=\"t-file-upload__actions\"\n >\n <slot\n name=\"actions\"\n :files=\"modelValue\"\n :open-file-dialog=\"openFileDialog\"\n :clear-files=\"clearFiles\"\n />\n </div>\n </div>\n</template>\n"],"mappings":"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"}