vectis-ui 0.1.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 (676) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +27 -0
  3. package/README.md +354 -0
  4. package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
  5. package/dist/components/VAccordion/VAccordion.css +2 -0
  6. package/dist/components/VAccordion/VAccordion.d.ts +59 -0
  7. package/dist/components/VAccordion/VAccordion.js +9 -0
  8. package/dist/components/VAccordion/VAccordion.js.map +1 -0
  9. package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js +42 -0
  10. package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  11. package/dist/components/VAccordion/VAccordionItem.css +2 -0
  12. package/dist/components/VAccordion/VAccordionItem.d.ts +64 -0
  13. package/dist/components/VAccordion/VAccordionItem.js +9 -0
  14. package/dist/components/VAccordion/VAccordionItem.js.map +1 -0
  15. package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js +70 -0
  16. package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  17. package/dist/components/VAccordion/context.d.ts +18 -0
  18. package/dist/components/VAccordion/context.js +6 -0
  19. package/dist/components/VAccordion/context.js.map +1 -0
  20. package/dist/components/VAvatar/VAvatar.css +2 -0
  21. package/dist/components/VAvatar/VAvatar.d.ts +68 -0
  22. package/dist/components/VAvatar/VAvatar.js +9 -0
  23. package/dist/components/VAvatar/VAvatar.js.map +1 -0
  24. package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js +87 -0
  25. package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  26. package/dist/components/VAvatar/VAvatarGroup.css +2 -0
  27. package/dist/components/VAvatar/VAvatarGroup.d.ts +59 -0
  28. package/dist/components/VAvatar/VAvatarGroup.js +9 -0
  29. package/dist/components/VAvatar/VAvatarGroup.js.map +1 -0
  30. package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js +43 -0
  31. package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  32. package/dist/components/VAvatar/context.d.ts +17 -0
  33. package/dist/components/VAvatar/context.js +6 -0
  34. package/dist/components/VAvatar/context.js.map +1 -0
  35. package/dist/components/VBadge/VBadge.css +2 -0
  36. package/dist/components/VBadge/VBadge.d.ts +74 -0
  37. package/dist/components/VBadge/VBadge.js +9 -0
  38. package/dist/components/VBadge/VBadge.js.map +1 -0
  39. package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js +40 -0
  40. package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js.map +1 -0
  41. package/dist/components/VBreadcrumb/VBreadcrumb.css +2 -0
  42. package/dist/components/VBreadcrumb/VBreadcrumb.d.ts +68 -0
  43. package/dist/components/VBreadcrumb/VBreadcrumb.js +9 -0
  44. package/dist/components/VBreadcrumb/VBreadcrumb.js.map +1 -0
  45. package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js +70 -0
  46. package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
  47. package/dist/components/VButton/VButton.css +2 -0
  48. package/dist/components/VButton/VButton.d.ts +88 -0
  49. package/dist/components/VButton/VButton.js +9 -0
  50. package/dist/components/VButton/VButton.js.map +1 -0
  51. package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js +86 -0
  52. package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  53. package/dist/components/VButton/VButtonGroup.css +2 -0
  54. package/dist/components/VButton/VButtonGroup.d.ts +32 -0
  55. package/dist/components/VButton/VButtonGroup.js +9 -0
  56. package/dist/components/VButton/VButtonGroup.js.map +1 -0
  57. package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js +17 -0
  58. package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  59. package/dist/components/VCalendar/VCalendar.css +2 -0
  60. package/dist/components/VCalendar/VCalendar.d.ts +129 -0
  61. package/dist/components/VCalendar/VCalendar.js +9 -0
  62. package/dist/components/VCalendar/VCalendar.js.map +1 -0
  63. package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js +374 -0
  64. package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  65. package/dist/components/VCalendar/VCalendarEvent.css +2 -0
  66. package/dist/components/VCalendar/VCalendarEvent.d.ts +71 -0
  67. package/dist/components/VCalendar/VCalendarEvent.js +9 -0
  68. package/dist/components/VCalendar/VCalendarEvent.js.map +1 -0
  69. package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js +106 -0
  70. package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  71. package/dist/components/VCalendar/VCalendarMonth.css +2 -0
  72. package/dist/components/VCalendar/VCalendarMonth.d.ts +60 -0
  73. package/dist/components/VCalendar/VCalendarMonth.js +9 -0
  74. package/dist/components/VCalendar/VCalendarMonth.js.map +1 -0
  75. package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js +342 -0
  76. package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -0
  77. package/dist/components/VCalendar/VCalendarTimeGrid.css +2 -0
  78. package/dist/components/VCalendar/VCalendarTimeGrid.d.ts +85 -0
  79. package/dist/components/VCalendar/VCalendarTimeGrid.js +9 -0
  80. package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -0
  81. package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js +621 -0
  82. package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  83. package/dist/components/VCalendar/VCalendarYear.css +2 -0
  84. package/dist/components/VCalendar/VCalendarYear.d.ts +31 -0
  85. package/dist/components/VCalendar/VCalendarYear.js +9 -0
  86. package/dist/components/VCalendar/VCalendarYear.js.map +1 -0
  87. package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js +76 -0
  88. package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -0
  89. package/dist/components/VCalendar/color.d.ts +9 -0
  90. package/dist/components/VCalendar/color.js +9 -0
  91. package/dist/components/VCalendar/color.js.map +1 -0
  92. package/dist/components/VCalendar/edgeStep.d.ts +38 -0
  93. package/dist/components/VCalendar/edgeStep.js +28 -0
  94. package/dist/components/VCalendar/edgeStep.js.map +1 -0
  95. package/dist/components/VCalendar/keyboard.d.ts +78 -0
  96. package/dist/components/VCalendar/keyboard.js +86 -0
  97. package/dist/components/VCalendar/keyboard.js.map +1 -0
  98. package/dist/components/VCalendar/layout.d.ts +355 -0
  99. package/dist/components/VCalendar/layout.js +292 -0
  100. package/dist/components/VCalendar/layout.js.map +1 -0
  101. package/dist/components/VCalendar/types.d.ts +78 -0
  102. package/dist/components/VCarousel/VCarousel.css +2 -0
  103. package/dist/components/VCarousel/VCarousel.d.ts +241 -0
  104. package/dist/components/VCarousel/VCarousel.js +9 -0
  105. package/dist/components/VCarousel/VCarousel.js.map +1 -0
  106. package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js +262 -0
  107. package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  108. package/dist/components/VCarousel/VCarouselItem.d.ts +41 -0
  109. package/dist/components/VCarousel/VCarouselItem.js +7 -0
  110. package/dist/components/VCarousel/VCarouselItem.js.map +1 -0
  111. package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js +25 -0
  112. package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  113. package/dist/components/VCarousel/context.d.ts +23 -0
  114. package/dist/components/VCarousel/context.js +6 -0
  115. package/dist/components/VCarousel/context.js.map +1 -0
  116. package/dist/components/VCheckbox/VCheckbox.css +2 -0
  117. package/dist/components/VCheckbox/VCheckbox.d.ts +63 -0
  118. package/dist/components/VCheckbox/VCheckbox.js +9 -0
  119. package/dist/components/VCheckbox/VCheckbox.js.map +1 -0
  120. package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js +83 -0
  121. package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  122. package/dist/components/VChip/VChip.css +2 -0
  123. package/dist/components/VChip/VChip.d.ts +120 -0
  124. package/dist/components/VChip/VChip.js +9 -0
  125. package/dist/components/VChip/VChip.js.map +1 -0
  126. package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js +118 -0
  127. package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  128. package/dist/components/VCombobox/VCombobox.css +2 -0
  129. package/dist/components/VCombobox/VCombobox.d.ts +183 -0
  130. package/dist/components/VCombobox/VCombobox.js +9 -0
  131. package/dist/components/VCombobox/VCombobox.js.map +1 -0
  132. package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +428 -0
  133. package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  134. package/dist/components/VCombobox/VComboboxGroup.css +2 -0
  135. package/dist/components/VCombobox/VComboboxGroup.d.ts +26 -0
  136. package/dist/components/VCombobox/VComboboxGroup.js +9 -0
  137. package/dist/components/VCombobox/VComboboxGroup.js.map +1 -0
  138. package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js +21 -0
  139. package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  140. package/dist/components/VCombobox/VComboboxOption.css +2 -0
  141. package/dist/components/VCombobox/VComboboxOption.d.ts +48 -0
  142. package/dist/components/VCombobox/VComboboxOption.js +9 -0
  143. package/dist/components/VCombobox/VComboboxOption.js.map +1 -0
  144. package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js +56 -0
  145. package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -0
  146. package/dist/components/VCombobox/VComboboxSeparator.css +2 -0
  147. package/dist/components/VCombobox/VComboboxSeparator.d.ts +3 -0
  148. package/dist/components/VCombobox/VComboboxSeparator.js +9 -0
  149. package/dist/components/VCombobox/VComboboxSeparator.js.map +1 -0
  150. package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js +16 -0
  151. package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  152. package/dist/components/VCombobox/infiniteScroll.d.ts +22 -0
  153. package/dist/components/VCombobox/infiniteScroll.js +28 -0
  154. package/dist/components/VCombobox/infiniteScroll.js.map +1 -0
  155. package/dist/components/VDataTable/VDataTable.css +2 -0
  156. package/dist/components/VDataTable/VDataTable.d.ts +214 -0
  157. package/dist/components/VDataTable/VDataTable.js +9 -0
  158. package/dist/components/VDataTable/VDataTable.js.map +1 -0
  159. package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +396 -0
  160. package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  161. package/dist/components/VDateInput/VDateInput.css +2 -0
  162. package/dist/components/VDateInput/VDateInput.d.ts +152 -0
  163. package/dist/components/VDateInput/VDateInput.js +9 -0
  164. package/dist/components/VDateInput/VDateInput.js.map +1 -0
  165. package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +324 -0
  166. package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  167. package/dist/components/VDatePicker/VDatePicker.css +2 -0
  168. package/dist/components/VDatePicker/VDatePicker.d.ts +143 -0
  169. package/dist/components/VDatePicker/VDatePicker.js +9 -0
  170. package/dist/components/VDatePicker/VDatePicker.js.map +1 -0
  171. package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +454 -0
  172. package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  173. package/dist/components/VDatePicker/keyboard.d.ts +56 -0
  174. package/dist/components/VDatePicker/keyboard.js +26 -0
  175. package/dist/components/VDatePicker/keyboard.js.map +1 -0
  176. package/dist/components/VDialog/VDialog.css +2 -0
  177. package/dist/components/VDialog/VDialog.d.ts +96 -0
  178. package/dist/components/VDialog/VDialog.js +9 -0
  179. package/dist/components/VDialog/VDialog.js.map +1 -0
  180. package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js +134 -0
  181. package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  182. package/dist/components/VDialog/VDialogAlert.d.ts +67 -0
  183. package/dist/components/VDialog/VDialogAlert.js +7 -0
  184. package/dist/components/VDialog/VDialogAlert.js.map +1 -0
  185. package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js +60 -0
  186. package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js.map +1 -0
  187. package/dist/components/VFileInput/VFileInput.css +2 -0
  188. package/dist/components/VFileInput/VFileInput.d.ts +156 -0
  189. package/dist/components/VFileInput/VFileInput.js +9 -0
  190. package/dist/components/VFileInput/VFileInput.js.map +1 -0
  191. package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +244 -0
  192. package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  193. package/dist/components/VFileInput/truncate.d.ts +29 -0
  194. package/dist/components/VFileInput/truncate.js +10 -0
  195. package/dist/components/VFileInput/truncate.js.map +1 -0
  196. package/dist/components/VFilePicker/VFilePicker.css +2 -0
  197. package/dist/components/VFilePicker/VFilePicker.d.ts +203 -0
  198. package/dist/components/VFilePicker/VFilePicker.js +9 -0
  199. package/dist/components/VFilePicker/VFilePicker.js.map +1 -0
  200. package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js +266 -0
  201. package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  202. package/dist/components/VFilePicker/fileKind.d.ts +29 -0
  203. package/dist/components/VFilePicker/fileKind.js +91 -0
  204. package/dist/components/VFilePicker/fileKind.js.map +1 -0
  205. package/dist/components/VHotkeys/VHotkeys.css +2 -0
  206. package/dist/components/VHotkeys/VHotkeys.d.ts +100 -0
  207. package/dist/components/VHotkeys/VHotkeys.js +9 -0
  208. package/dist/components/VHotkeys/VHotkeys.js.map +1 -0
  209. package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js +76 -0
  210. package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -0
  211. package/dist/components/VHotkeys/platform.d.ts +82 -0
  212. package/dist/components/VHotkeys/platform.js +115 -0
  213. package/dist/components/VHotkeys/platform.js.map +1 -0
  214. package/dist/components/VIcon/VIcon.css +2 -0
  215. package/dist/components/VIcon/VIcon.d.ts +57 -0
  216. package/dist/components/VIcon/VIcon.js +9 -0
  217. package/dist/components/VIcon/VIcon.js.map +1 -0
  218. package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js +99 -0
  219. package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
  220. package/dist/components/VIcon/iconProps.d.ts +30 -0
  221. package/dist/components/VIcon/iconProps.js +6 -0
  222. package/dist/components/VIcon/iconProps.js.map +1 -0
  223. package/dist/components/VIcon/icons/arrow_downward.d.ts +5 -0
  224. package/dist/components/VIcon/icons/arrow_downward.js +9 -0
  225. package/dist/components/VIcon/icons/arrow_downward.js.map +1 -0
  226. package/dist/components/VIcon/icons/arrow_downward_alt.d.ts +5 -0
  227. package/dist/components/VIcon/icons/arrow_downward_alt.js +9 -0
  228. package/dist/components/VIcon/icons/arrow_downward_alt.js.map +1 -0
  229. package/dist/components/VIcon/icons/arrow_drop_down.d.ts +5 -0
  230. package/dist/components/VIcon/icons/arrow_drop_down.js +9 -0
  231. package/dist/components/VIcon/icons/arrow_drop_down.js.map +1 -0
  232. package/dist/components/VIcon/icons/arrow_drop_up.d.ts +5 -0
  233. package/dist/components/VIcon/icons/arrow_drop_up.js +9 -0
  234. package/dist/components/VIcon/icons/arrow_drop_up.js.map +1 -0
  235. package/dist/components/VIcon/icons/arrow_left_alt.d.ts +5 -0
  236. package/dist/components/VIcon/icons/arrow_left_alt.js +9 -0
  237. package/dist/components/VIcon/icons/arrow_left_alt.js.map +1 -0
  238. package/dist/components/VIcon/icons/arrow_right_alt.d.ts +5 -0
  239. package/dist/components/VIcon/icons/arrow_right_alt.js +9 -0
  240. package/dist/components/VIcon/icons/arrow_right_alt.js.map +1 -0
  241. package/dist/components/VIcon/icons/arrow_upward.d.ts +5 -0
  242. package/dist/components/VIcon/icons/arrow_upward.js +9 -0
  243. package/dist/components/VIcon/icons/arrow_upward.js.map +1 -0
  244. package/dist/components/VIcon/icons/arrow_upward_alt.d.ts +5 -0
  245. package/dist/components/VIcon/icons/arrow_upward_alt.js +9 -0
  246. package/dist/components/VIcon/icons/arrow_upward_alt.js.map +1 -0
  247. package/dist/components/VIcon/icons/attach_file.d.ts +5 -0
  248. package/dist/components/VIcon/icons/attach_file.js +9 -0
  249. package/dist/components/VIcon/icons/attach_file.js.map +1 -0
  250. package/dist/components/VIcon/icons/audio_file.d.ts +5 -0
  251. package/dist/components/VIcon/icons/audio_file.js +9 -0
  252. package/dist/components/VIcon/icons/audio_file.js.map +1 -0
  253. package/dist/components/VIcon/icons/calendar_today.d.ts +5 -0
  254. package/dist/components/VIcon/icons/calendar_today.js +9 -0
  255. package/dist/components/VIcon/icons/calendar_today.js.map +1 -0
  256. package/dist/components/VIcon/icons/check.d.ts +5 -0
  257. package/dist/components/VIcon/icons/check.js +9 -0
  258. package/dist/components/VIcon/icons/check.js.map +1 -0
  259. package/dist/components/VIcon/icons/check_circle.d.ts +5 -0
  260. package/dist/components/VIcon/icons/check_circle.js +9 -0
  261. package/dist/components/VIcon/icons/check_circle.js.map +1 -0
  262. package/dist/components/VIcon/icons/chevron_left.d.ts +5 -0
  263. package/dist/components/VIcon/icons/chevron_left.js +9 -0
  264. package/dist/components/VIcon/icons/chevron_left.js.map +1 -0
  265. package/dist/components/VIcon/icons/chevron_right.d.ts +5 -0
  266. package/dist/components/VIcon/icons/chevron_right.js +9 -0
  267. package/dist/components/VIcon/icons/chevron_right.js.map +1 -0
  268. package/dist/components/VIcon/icons/close.d.ts +5 -0
  269. package/dist/components/VIcon/icons/close.js +9 -0
  270. package/dist/components/VIcon/icons/close.js.map +1 -0
  271. package/dist/components/VIcon/icons/cloud_upload.d.ts +5 -0
  272. package/dist/components/VIcon/icons/cloud_upload.js +9 -0
  273. package/dist/components/VIcon/icons/cloud_upload.js.map +1 -0
  274. package/dist/components/VIcon/icons/code.d.ts +5 -0
  275. package/dist/components/VIcon/icons/code.js +9 -0
  276. package/dist/components/VIcon/icons/code.js.map +1 -0
  277. package/dist/components/VIcon/icons/description.d.ts +5 -0
  278. package/dist/components/VIcon/icons/description.js +9 -0
  279. package/dist/components/VIcon/icons/description.js.map +1 -0
  280. package/dist/components/VIcon/icons/error.d.ts +5 -0
  281. package/dist/components/VIcon/icons/error.js +9 -0
  282. package/dist/components/VIcon/icons/error.js.map +1 -0
  283. package/dist/components/VIcon/icons/expand_less.d.ts +5 -0
  284. package/dist/components/VIcon/icons/expand_less.js +9 -0
  285. package/dist/components/VIcon/icons/expand_less.js.map +1 -0
  286. package/dist/components/VIcon/icons/expand_more.d.ts +5 -0
  287. package/dist/components/VIcon/icons/expand_more.js +9 -0
  288. package/dist/components/VIcon/icons/expand_more.js.map +1 -0
  289. package/dist/components/VIcon/icons/folder_zip.d.ts +5 -0
  290. package/dist/components/VIcon/icons/folder_zip.js +9 -0
  291. package/dist/components/VIcon/icons/folder_zip.js.map +1 -0
  292. package/dist/components/VIcon/icons/image.d.ts +5 -0
  293. package/dist/components/VIcon/icons/image.js +9 -0
  294. package/dist/components/VIcon/icons/image.js.map +1 -0
  295. package/dist/components/VIcon/icons/index.d.ts +183 -0
  296. package/dist/components/VIcon/icons/index.js +77 -0
  297. package/dist/components/VIcon/icons/index.js.map +1 -0
  298. package/dist/components/VIcon/icons/info.d.ts +5 -0
  299. package/dist/components/VIcon/icons/info.js +9 -0
  300. package/dist/components/VIcon/icons/info.js.map +1 -0
  301. package/dist/components/VIcon/icons/more_horiz.d.ts +5 -0
  302. package/dist/components/VIcon/icons/more_horiz.js +9 -0
  303. package/dist/components/VIcon/icons/more_horiz.js.map +1 -0
  304. package/dist/components/VIcon/icons/names.d.ts +11 -0
  305. package/dist/components/VIcon/icons/names.js +5 -0
  306. package/dist/components/VIcon/icons/names.js.map +1 -0
  307. package/dist/components/VIcon/icons/notifications.d.ts +5 -0
  308. package/dist/components/VIcon/icons/notifications.js +9 -0
  309. package/dist/components/VIcon/icons/notifications.js.map +1 -0
  310. package/dist/components/VIcon/icons/picture_as_pdf.d.ts +5 -0
  311. package/dist/components/VIcon/icons/picture_as_pdf.js +9 -0
  312. package/dist/components/VIcon/icons/picture_as_pdf.js.map +1 -0
  313. package/dist/components/VIcon/icons/schedule.d.ts +5 -0
  314. package/dist/components/VIcon/icons/schedule.js +9 -0
  315. package/dist/components/VIcon/icons/schedule.js.map +1 -0
  316. package/dist/components/VIcon/icons/search.d.ts +5 -0
  317. package/dist/components/VIcon/icons/search.js +9 -0
  318. package/dist/components/VIcon/icons/search.js.map +1 -0
  319. package/dist/components/VIcon/icons/swap_vert.d.ts +5 -0
  320. package/dist/components/VIcon/icons/swap_vert.js +9 -0
  321. package/dist/components/VIcon/icons/swap_vert.js.map +1 -0
  322. package/dist/components/VIcon/icons/table_chart.d.ts +5 -0
  323. package/dist/components/VIcon/icons/table_chart.js +9 -0
  324. package/dist/components/VIcon/icons/table_chart.js.map +1 -0
  325. package/dist/components/VIcon/icons/video_file.d.ts +5 -0
  326. package/dist/components/VIcon/icons/video_file.js +9 -0
  327. package/dist/components/VIcon/icons/video_file.js.map +1 -0
  328. package/dist/components/VIcon/icons/viewBox.d.ts +6 -0
  329. package/dist/components/VIcon/icons/viewBox.js +6 -0
  330. package/dist/components/VIcon/icons/viewBox.js.map +1 -0
  331. package/dist/components/VIcon/icons/warning.d.ts +5 -0
  332. package/dist/components/VIcon/icons/warning.js +9 -0
  333. package/dist/components/VIcon/icons/warning.js.map +1 -0
  334. package/dist/components/VIcon/resolver.d.ts +76 -0
  335. package/dist/components/VIcon/resolver.js +35 -0
  336. package/dist/components/VIcon/resolver.js.map +1 -0
  337. package/dist/components/VIcon/types.d.ts +77 -0
  338. package/dist/components/VIconButton/VIconButton.css +2 -0
  339. package/dist/components/VIconButton/VIconButton.d.ts +66 -0
  340. package/dist/components/VIconButton/VIconButton.js +9 -0
  341. package/dist/components/VIconButton/VIconButton.js.map +1 -0
  342. package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js +70 -0
  343. package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  344. package/dist/components/VInput/VInput.css +2 -0
  345. package/dist/components/VInput/VInput.d.ts +152 -0
  346. package/dist/components/VInput/VInput.js +9 -0
  347. package/dist/components/VInput/VInput.js.map +1 -0
  348. package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +185 -0
  349. package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  350. package/dist/components/VInputOTP/VInputOTP.css +2 -0
  351. package/dist/components/VInputOTP/VInputOTP.d.ts +76 -0
  352. package/dist/components/VInputOTP/VInputOTP.js +9 -0
  353. package/dist/components/VInputOTP/VInputOTP.js.map +1 -0
  354. package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +149 -0
  355. package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -0
  356. package/dist/components/VMenu/VMenu.d.ts +91 -0
  357. package/dist/components/VMenu/VMenu.js +7 -0
  358. package/dist/components/VMenu/VMenu.js.map +1 -0
  359. package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js +73 -0
  360. package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  361. package/dist/components/VMenu/VMenuGroup.css +2 -0
  362. package/dist/components/VMenu/VMenuGroup.d.ts +22 -0
  363. package/dist/components/VMenu/VMenuGroup.js +9 -0
  364. package/dist/components/VMenu/VMenuGroup.js.map +1 -0
  365. package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js +21 -0
  366. package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  367. package/dist/components/VMenu/VMenuItem.css +2 -0
  368. package/dist/components/VMenu/VMenuItem.d.ts +85 -0
  369. package/dist/components/VMenu/VMenuItem.js +9 -0
  370. package/dist/components/VMenu/VMenuItem.js.map +1 -0
  371. package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +121 -0
  372. package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  373. package/dist/components/VMenu/VMenuPanel.css +2 -0
  374. package/dist/components/VMenu/VMenuPanel.d.ts +91 -0
  375. package/dist/components/VMenu/VMenuPanel.js +9 -0
  376. package/dist/components/VMenu/VMenuPanel.js.map +1 -0
  377. package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +103 -0
  378. package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  379. package/dist/components/VMenu/VMenuSeparator.css +2 -0
  380. package/dist/components/VMenu/VMenuSeparator.d.ts +3 -0
  381. package/dist/components/VMenu/VMenuSeparator.js +9 -0
  382. package/dist/components/VMenu/VMenuSeparator.js.map +1 -0
  383. package/dist/components/VMenu/VMenuSeparator.vue_vue_type_script_setup_true_lang.js +13 -0
  384. package/dist/components/VMenu/VMenuSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  385. package/dist/components/VMenu/context.d.ts +33 -0
  386. package/dist/components/VMenu/context.js +9 -0
  387. package/dist/components/VMenu/context.js.map +1 -0
  388. package/dist/components/VPagination/VPagination.css +2 -0
  389. package/dist/components/VPagination/VPagination.d.ts +103 -0
  390. package/dist/components/VPagination/VPagination.js +9 -0
  391. package/dist/components/VPagination/VPagination.js.map +1 -0
  392. package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +270 -0
  393. package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
  394. package/dist/components/VPopover/VPopover.css +2 -0
  395. package/dist/components/VPopover/VPopover.d.ts +82 -0
  396. package/dist/components/VPopover/VPopover.js +9 -0
  397. package/dist/components/VPopover/VPopover.js.map +1 -0
  398. package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js +65 -0
  399. package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
  400. package/dist/components/VProgressCircular/VProgressCircular.css +2 -0
  401. package/dist/components/VProgressCircular/VProgressCircular.d.ts +60 -0
  402. package/dist/components/VProgressCircular/VProgressCircular.js +9 -0
  403. package/dist/components/VProgressCircular/VProgressCircular.js.map +1 -0
  404. package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js +74 -0
  405. package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js.map +1 -0
  406. package/dist/components/VProgressLinear/VProgressLinear.css +2 -0
  407. package/dist/components/VProgressLinear/VProgressLinear.d.ts +74 -0
  408. package/dist/components/VProgressLinear/VProgressLinear.js +9 -0
  409. package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -0
  410. package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js +74 -0
  411. package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -0
  412. package/dist/components/VRadio/VRadio.css +2 -0
  413. package/dist/components/VRadio/VRadio.d.ts +58 -0
  414. package/dist/components/VRadio/VRadio.js +9 -0
  415. package/dist/components/VRadio/VRadio.js.map +1 -0
  416. package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js +60 -0
  417. package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -0
  418. package/dist/components/VSeparator/VSeparator.css +2 -0
  419. package/dist/components/VSeparator/VSeparator.d.ts +23 -0
  420. package/dist/components/VSeparator/VSeparator.js +9 -0
  421. package/dist/components/VSeparator/VSeparator.js.map +1 -0
  422. package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js +17 -0
  423. package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  424. package/dist/components/VSideNavigation/VSideNavigation.css +2 -0
  425. package/dist/components/VSideNavigation/VSideNavigation.d.ts +64 -0
  426. package/dist/components/VSideNavigation/VSideNavigation.js +9 -0
  427. package/dist/components/VSideNavigation/VSideNavigation.js.map +1 -0
  428. package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +67 -0
  429. package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js.map +1 -0
  430. package/dist/components/VSideNavigation/VSideNavigationGroup.css +2 -0
  431. package/dist/components/VSideNavigation/VSideNavigationGroup.d.ts +33 -0
  432. package/dist/components/VSideNavigation/VSideNavigationGroup.js +9 -0
  433. package/dist/components/VSideNavigation/VSideNavigationGroup.js.map +1 -0
  434. package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js +20 -0
  435. package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  436. package/dist/components/VSideNavigation/VSideNavigationItem.css +2 -0
  437. package/dist/components/VSideNavigation/VSideNavigationItem.d.ts +103 -0
  438. package/dist/components/VSideNavigation/VSideNavigationItem.js +9 -0
  439. package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -0
  440. package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +154 -0
  441. package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  442. package/dist/components/VSideNavigation/VSideNavigationSeparator.css +2 -0
  443. package/dist/components/VSideNavigation/VSideNavigationSeparator.d.ts +3 -0
  444. package/dist/components/VSideNavigation/VSideNavigationSeparator.js +17 -0
  445. package/dist/components/VSideNavigation/VSideNavigationSeparator.js.map +1 -0
  446. package/dist/components/VSideNavigation/context.d.ts +37 -0
  447. package/dist/components/VSideNavigation/context.js +6 -0
  448. package/dist/components/VSideNavigation/context.js.map +1 -0
  449. package/dist/components/VSkeletonLoader/VSkeletonLoader.css +2 -0
  450. package/dist/components/VSkeletonLoader/VSkeletonLoader.d.ts +75 -0
  451. package/dist/components/VSkeletonLoader/VSkeletonLoader.js +9 -0
  452. package/dist/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -0
  453. package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js +61 -0
  454. package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  455. package/dist/components/VSlider/VSlider.css +2 -0
  456. package/dist/components/VSlider/VSlider.d.ts +82 -0
  457. package/dist/components/VSlider/VSlider.js +9 -0
  458. package/dist/components/VSlider/VSlider.js.map +1 -0
  459. package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +220 -0
  460. package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  461. package/dist/components/VSnackbar/VSnackbar.css +2 -0
  462. package/dist/components/VSnackbar/VSnackbar.d.ts +51 -0
  463. package/dist/components/VSnackbar/VSnackbar.js +9 -0
  464. package/dist/components/VSnackbar/VSnackbar.js.map +1 -0
  465. package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js +83 -0
  466. package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  467. package/dist/components/VSnackbar/state.d.ts +92 -0
  468. package/dist/components/VSnackbar/state.js +18 -0
  469. package/dist/components/VSnackbar/state.js.map +1 -0
  470. package/dist/components/VSpinner/VSpinner.css +2 -0
  471. package/dist/components/VSpinner/VSpinner.d.ts +21 -0
  472. package/dist/components/VSpinner/VSpinner.js +9 -0
  473. package/dist/components/VSpinner/VSpinner.js.map +1 -0
  474. package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js +25 -0
  475. package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -0
  476. package/dist/components/VSwitch/VSwitch.css +2 -0
  477. package/dist/components/VSwitch/VSwitch.d.ts +46 -0
  478. package/dist/components/VSwitch/VSwitch.js +9 -0
  479. package/dist/components/VSwitch/VSwitch.js.map +1 -0
  480. package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js +51 -0
  481. package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -0
  482. package/dist/components/VTabs/VTab.css +2 -0
  483. package/dist/components/VTabs/VTab.d.ts +42 -0
  484. package/dist/components/VTabs/VTab.js +9 -0
  485. package/dist/components/VTabs/VTab.js.map +1 -0
  486. package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js +66 -0
  487. package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -0
  488. package/dist/components/VTabs/VTabPanel.css +2 -0
  489. package/dist/components/VTabs/VTabPanel.d.ts +34 -0
  490. package/dist/components/VTabs/VTabPanel.js +9 -0
  491. package/dist/components/VTabs/VTabPanel.js.map +1 -0
  492. package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js +34 -0
  493. package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  494. package/dist/components/VTabs/VTabs.css +2 -0
  495. package/dist/components/VTabs/VTabs.d.ts +107 -0
  496. package/dist/components/VTabs/VTabs.js +9 -0
  497. package/dist/components/VTabs/VTabs.js.map +1 -0
  498. package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js +199 -0
  499. package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
  500. package/dist/components/VTabs/context.d.ts +43 -0
  501. package/dist/components/VTabs/context.js +6 -0
  502. package/dist/components/VTabs/context.js.map +1 -0
  503. package/dist/components/VTextarea/VTextarea.css +2 -0
  504. package/dist/components/VTextarea/VTextarea.d.ts +140 -0
  505. package/dist/components/VTextarea/VTextarea.js +9 -0
  506. package/dist/components/VTextarea/VTextarea.js.map +1 -0
  507. package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js +187 -0
  508. package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  509. package/dist/components/VTimeInput/VTimeInput.css +2 -0
  510. package/dist/components/VTimeInput/VTimeInput.d.ts +112 -0
  511. package/dist/components/VTimeInput/VTimeInput.js +9 -0
  512. package/dist/components/VTimeInput/VTimeInput.js.map +1 -0
  513. package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +385 -0
  514. package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  515. package/dist/components/VTimePicker/VTimePicker.css +2 -0
  516. package/dist/components/VTimePicker/VTimePicker.d.ts +89 -0
  517. package/dist/components/VTimePicker/VTimePicker.js +9 -0
  518. package/dist/components/VTimePicker/VTimePicker.js.map +1 -0
  519. package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +257 -0
  520. package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  521. package/dist/components/VToast/VToast.css +2 -0
  522. package/dist/components/VToast/VToast.d.ts +24 -0
  523. package/dist/components/VToast/VToast.js +9 -0
  524. package/dist/components/VToast/VToast.js.map +1 -0
  525. package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js +62 -0
  526. package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js.map +1 -0
  527. package/dist/components/VToast/VToaster.css +2 -0
  528. package/dist/components/VToast/VToaster.d.ts +42 -0
  529. package/dist/components/VToast/VToaster.js +9 -0
  530. package/dist/components/VToast/VToaster.js.map +1 -0
  531. package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +112 -0
  532. package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js.map +1 -0
  533. package/dist/components/VToast/state.d.ts +74 -0
  534. package/dist/components/VToast/state.js +25 -0
  535. package/dist/components/VToast/state.js.map +1 -0
  536. package/dist/components/VToggle/VToggle.css +2 -0
  537. package/dist/components/VToggle/VToggle.d.ts +84 -0
  538. package/dist/components/VToggle/VToggle.js +9 -0
  539. package/dist/components/VToggle/VToggle.js.map +1 -0
  540. package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js +103 -0
  541. package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
  542. package/dist/components/VToggle/VToggleItem.css +2 -0
  543. package/dist/components/VToggle/VToggleItem.d.ts +35 -0
  544. package/dist/components/VToggle/VToggleItem.js +9 -0
  545. package/dist/components/VToggle/VToggleItem.js.map +1 -0
  546. package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js +51 -0
  547. package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  548. package/dist/components/VToggle/context.d.ts +37 -0
  549. package/dist/components/VToggle/context.js +6 -0
  550. package/dist/components/VToggle/context.js.map +1 -0
  551. package/dist/components/VTooltip/VTooltip.css +2 -0
  552. package/dist/components/VTooltip/VTooltip.d.ts +76 -0
  553. package/dist/components/VTooltip/VTooltip.js +9 -0
  554. package/dist/components/VTooltip/VTooltip.js.map +1 -0
  555. package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js +50 -0
  556. package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  557. package/dist/components/VTypography/VTypography.css +2 -0
  558. package/dist/components/VTypography/VTypography.d.ts +46 -0
  559. package/dist/components/VTypography/VTypography.js +9 -0
  560. package/dist/components/VTypography/VTypography.js.map +1 -0
  561. package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js +49 -0
  562. package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js.map +1 -0
  563. package/dist/composables/useAriaLabel.d.ts +19 -0
  564. package/dist/composables/useAriaLabel.js +10 -0
  565. package/dist/composables/useAriaLabel.js.map +1 -0
  566. package/dist/composables/useFieldIds.d.ts +21 -0
  567. package/dist/composables/useFieldIds.js +14 -0
  568. package/dist/composables/useFieldIds.js.map +1 -0
  569. package/dist/composables/useFieldPanel.d.ts +61 -0
  570. package/dist/composables/useFieldPanel.js +39 -0
  571. package/dist/composables/useFieldPanel.js.map +1 -0
  572. package/dist/composables/useFileDrop.d.ts +30 -0
  573. package/dist/composables/useFileDrop.js +28 -0
  574. package/dist/composables/useFileDrop.js.map +1 -0
  575. package/dist/composables/useFileField.d.ts +36 -0
  576. package/dist/composables/useFileField.js +45 -0
  577. package/dist/composables/useFileField.js.map +1 -0
  578. package/dist/composables/useFocusoutDismiss.d.ts +17 -0
  579. package/dist/composables/useFocusoutDismiss.js +11 -0
  580. package/dist/composables/useFocusoutDismiss.js.map +1 -0
  581. package/dist/composables/useIconClickHandlers.d.ts +27 -0
  582. package/dist/composables/useIconClickHandlers.js +13 -0
  583. package/dist/composables/useIconClickHandlers.js.map +1 -0
  584. package/dist/composables/useMaskedField.d.ts +65 -0
  585. package/dist/composables/useMaskedField.js +54 -0
  586. package/dist/composables/useMaskedField.js.map +1 -0
  587. package/dist/composables/usePopover.d.ts +7 -0
  588. package/dist/composables/usePopover.js +24 -0
  589. package/dist/composables/usePopover.js.map +1 -0
  590. package/dist/composables/useProgressValue.d.ts +13 -0
  591. package/dist/composables/useProgressValue.js +14 -0
  592. package/dist/composables/useProgressValue.js.map +1 -0
  593. package/dist/composables/useRootAttrs.d.ts +34 -0
  594. package/dist/composables/useRootAttrs.js +15 -0
  595. package/dist/composables/useRootAttrs.js.map +1 -0
  596. package/dist/composables/useTextLimit.d.ts +31 -0
  597. package/dist/composables/useTextLimit.js +19 -0
  598. package/dist/composables/useTextLimit.js.map +1 -0
  599. package/dist/composables/useTimer.d.ts +18 -0
  600. package/dist/composables/useTimer.js +19 -0
  601. package/dist/composables/useTimer.js.map +1 -0
  602. package/dist/i18n/en.d.ts +10 -0
  603. package/dist/i18n/en.js +179 -0
  604. package/dist/i18n/en.js.map +1 -0
  605. package/dist/i18n/fr.d.ts +18 -0
  606. package/dist/i18n/fr.js +179 -0
  607. package/dist/i18n/fr.js.map +1 -0
  608. package/dist/i18n/state.d.ts +64 -0
  609. package/dist/i18n/state.js +40 -0
  610. package/dist/i18n/state.js.map +1 -0
  611. package/dist/i18n/types.d.ts +345 -0
  612. package/dist/icons.d.ts +16 -0
  613. package/dist/icons.js +38 -0
  614. package/dist/index.d.ts +90 -0
  615. package/dist/index.js +64 -0
  616. package/dist/styles.css +1 -0
  617. package/dist/tokens/css.d.ts +25 -0
  618. package/dist/tokens/css.js +29 -0
  619. package/dist/tokens/css.js.map +1 -0
  620. package/dist/tokens/index.d.ts +370 -0
  621. package/dist/tokens/index.js +15 -0
  622. package/dist/tokens/index.js.map +1 -0
  623. package/dist/tokens/primitives.d.ts +101 -0
  624. package/dist/tokens/primitives.js +166 -0
  625. package/dist/tokens/primitives.js.map +1 -0
  626. package/dist/tokens/semantic.d.ts +236 -0
  627. package/dist/tokens/semantic.js +219 -0
  628. package/dist/tokens/semantic.js.map +1 -0
  629. package/dist/tokens/themes/dark.d.ts +49 -0
  630. package/dist/tokens/themes/dark.js +53 -0
  631. package/dist/tokens/themes/dark.js.map +1 -0
  632. package/dist/tokens/types.d.ts +38 -0
  633. package/dist/tokens/types.js +16 -0
  634. package/dist/tokens/types.js.map +1 -0
  635. package/dist/tokens.json +1516 -0
  636. package/dist/utils/array.d.ts +10 -0
  637. package/dist/utils/array.js +8 -0
  638. package/dist/utils/array.js.map +1 -0
  639. package/dist/utils/arrowNav.d.ts +27 -0
  640. package/dist/utils/arrowNav.js +26 -0
  641. package/dist/utils/arrowNav.js.map +1 -0
  642. package/dist/utils/chip.d.ts +26 -0
  643. package/dist/utils/chip.js +13 -0
  644. package/dist/utils/chip.js.map +1 -0
  645. package/dist/utils/css.d.ts +19 -0
  646. package/dist/utils/css.js +13 -0
  647. package/dist/utils/css.js.map +1 -0
  648. package/dist/utils/date.d.ts +199 -0
  649. package/dist/utils/date.js +225 -0
  650. package/dist/utils/date.js.map +1 -0
  651. package/dist/utils/direction.d.ts +18 -0
  652. package/dist/utils/direction.js +8 -0
  653. package/dist/utils/direction.js.map +1 -0
  654. package/dist/utils/env.d.ts +10 -0
  655. package/dist/utils/file.d.ts +95 -0
  656. package/dist/utils/file.js +70 -0
  657. package/dist/utils/file.js.map +1 -0
  658. package/dist/utils/focus.d.ts +24 -0
  659. package/dist/utils/focus.js +13 -0
  660. package/dist/utils/focus.js.map +1 -0
  661. package/dist/utils/matcher.d.ts +13 -0
  662. package/dist/utils/matcher.js +11 -0
  663. package/dist/utils/matcher.js.map +1 -0
  664. package/dist/utils/number.d.ts +9 -0
  665. package/dist/utils/number.js +8 -0
  666. package/dist/utils/number.js.map +1 -0
  667. package/dist/utils/text.d.ts +19 -0
  668. package/dist/utils/text.js +12 -0
  669. package/dist/utils/text.js.map +1 -0
  670. package/dist/utils/time.d.ts +138 -0
  671. package/dist/utils/time.js +123 -0
  672. package/dist/utils/time.js.map +1 -0
  673. package/dist/utils/vnode.d.ts +21 -0
  674. package/dist/utils/vnode.js +14 -0
  675. package/dist/utils/vnode.js.map +1 -0
  676. package/package.json +114 -0
@@ -0,0 +1,203 @@
1
+ import { IconSource } from '../VIcon/types.js';
2
+ import { FileKind } from './fileKind.js';
3
+ /** Where the files taken are listed — under the zone, beside it, or nowhere. */
4
+ export type FilePickerPreview = false | 'bottom' | 'end';
5
+ /** Why a file was turned away: its kind, its size, how many there already are, or the total. */
6
+ export type FilePickerRejectReason = 'type' | 'size' | 'count' | 'total-size';
7
+ /** One file that was turned away, and the reason it was. */
8
+ export interface FilePickerRejection {
9
+ /** The file itself, so a message can name it. */
10
+ file: File;
11
+ /** What it fell foul of. */
12
+ reason: FilePickerRejectReason;
13
+ }
14
+ /**
15
+ * Everything known about one row of the list. The same object is handed to both slots
16
+ * that can replace part of a row, so the two can never be given different information.
17
+ */
18
+ export interface FilePickerRow {
19
+ /** The file itself. */
20
+ file: File;
21
+ /** Its position in the list. */
22
+ index: number;
23
+ /** What kind of file it is, as worked out from its type or its extension. */
24
+ kind: FileKind;
25
+ /**
26
+ * The address of its image thumbnail, when there is one.
27
+ *
28
+ * It is absent on the server AND on the browser's first render — those addresses only
29
+ * exist in a browser, and creating them during the first render would make the two
30
+ * markups differ — and absent as well for anything the browser fails to decode. Fall
31
+ * back to the icon in that case.
32
+ */
33
+ thumbnail: string | undefined;
34
+ /** The icon standing for that kind of file, a consumer's override included. */
35
+ icon: IconSource;
36
+ /** Its size, already written out in the reader's conventions. */
37
+ sizeText: string;
38
+ /** Takes this file out of the list. */
39
+ remove: () => void;
40
+ }
41
+ interface FilePickerProps {
42
+ /**
43
+ * What the reader is being asked to drop, in one line. It is REQUIRED: a drop zone
44
+ * with no instruction is just a rectangle.
45
+ *
46
+ * Note that this prop shadows the HTML attribute of the same name on the component
47
+ * itself, an accepted trade-off — a tooltip on a drop zone would be redundant anyway.
48
+ */
49
+ title: string;
50
+ /** A second line under it, for the constraints in plain words: kinds, sizes, how many. */
51
+ subtitle?: string;
52
+ /** The large icon at the top of the zone. */
53
+ icon?: IconSource;
54
+ /**
55
+ * Shows the separator and the browse button under the instruction. Hiding them
56
+ * changes the zone's nature: it then becomes the control ITSELF, a real button, so
57
+ * Enter, Space and the focus come from the platform rather than from a container that
58
+ * merely reacts to clicks.
59
+ */
60
+ showBrowse?: boolean;
61
+ /** The wording of the browse button. It falls back to the design system dictionary. */
62
+ browseLabel?: string;
63
+ /**
64
+ * Where the files taken are listed: under the zone, or beside it — beside folds back
65
+ * underneath when the COMPONENT is narrow, following the width it was given rather
66
+ * than the width of the window.
67
+ *
68
+ * By default nothing is listed at all: the value is there for a parent that wants to
69
+ * present it its own way.
70
+ */
71
+ preview?: FilePickerPreview;
72
+ /**
73
+ * Shows a thumbnail for each image in that list. Every image is given a temporary
74
+ * address, created in the browser only and released as soon as the file leaves the
75
+ * list or the component goes away.
76
+ *
77
+ * Turning it off shows the kind icon for every file instead — the way out when a list
78
+ * holds many images, or very large ones.
79
+ */
80
+ thumbnails?: boolean;
81
+ /** Replaces the icon of one or more kinds of file. */
82
+ typeIcons?: Partial<Record<FileKind, IconSource>>;
83
+ /** The icon of the button removing a file from the list. */
84
+ removeIcon?: IconSource;
85
+ /** Allows several files to be taken. With one only, every extra file is turned away. */
86
+ multiple?: boolean;
87
+ /**
88
+ * Which kinds of file are accepted, in the browser's own syntax (`image/*,.pdf`).
89
+ *
90
+ * It is applied TWICE, and it has to be: as an attribute, which is what filters the
91
+ * system's file dialog, and again in code, which is the only thing that can filter a
92
+ * DROPPED file — the attribute has no say over a drop.
93
+ */
94
+ accept?: string;
95
+ /** The largest ONE file may be, in bytes. */
96
+ maxSize?: number;
97
+ /** The largest the whole selection may be, in bytes. */
98
+ maxTotalSize?: number;
99
+ /** How many files may be taken at most. */
100
+ maxFiles?: number;
101
+ /** Makes the zone unusable, greyed out through the colour tokens. */
102
+ disabled?: boolean;
103
+ /** Shows what was taken without allowing it to change: no dialog, no drop, no removal. */
104
+ readonly?: boolean;
105
+ }
106
+ type __VLS_Props = FilePickerProps;
107
+ type __VLS_Slots = {
108
+ /**
109
+ * The large icon, for an illustration the icon props cannot express.
110
+ *
111
+ * It must stay non-interactive, and so must the two below: with the browse button
112
+ * hidden, the zone IS a button, and nothing interactive may sit inside one.
113
+ */
114
+ icon?(): unknown;
115
+ /** The instruction. Text and inline elements only, for the same reason. */
116
+ title?(): unknown;
117
+ /** The second line. Same contract as the instruction. */
118
+ subtitle?(): unknown;
119
+ /**
120
+ * The browse button. Call the `open` it receives: without it a button of your own
121
+ * could no longer open the file dialog at all.
122
+ */
123
+ browse?(props: {
124
+ open: () => void;
125
+ disabled: boolean;
126
+ }): unknown;
127
+ /**
128
+ * A WHOLE row of the list — the way out for a row showing its own upload progress. It
129
+ * receives everything the standard row was given, so nothing has to be worked out
130
+ * again.
131
+ */
132
+ item?(props: FilePickerRow): unknown;
133
+ /**
134
+ * The square at the start of a row alone: for a thumbnail produced by your server, a
135
+ * video's poster frame, or a format the browser cannot decode.
136
+ */
137
+ thumbnail?(props: FilePickerRow): unknown;
138
+ /**
139
+ * The control that removes a row. Two of the values it receives are not optional in
140
+ * practice: `remove` is the only thing that can take the file out, and `label` is the
141
+ * ready-made name — including the file's own — without which the button would be
142
+ * announced as nothing at all.
143
+ */
144
+ remove?(props: {
145
+ file: File;
146
+ index: number;
147
+ remove: () => void;
148
+ label: string;
149
+ }): unknown;
150
+ };
151
+ type __VLS_ModelProps = {
152
+ /**
153
+ * Always a LIST of files, whether or not several are allowed — never a file on its own.
154
+ * The shape of the value does not depend on a prop, so a consumer never has to narrow a
155
+ * union TypeScript has no way of discriminating. With a single file it is simply a list
156
+ * of at most one.
157
+ */
158
+ modelValue?: File[];
159
+ };
160
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
161
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {
162
+ /** Moves the focus to the browse control — the button, or the zone when it is one. */
163
+ focus: (options?: FocusOptions) => void | undefined;
164
+ /**
165
+ * Opens the file dialog. It only works when called from something the reader did — a
166
+ * click, a key press: browsers refuse to open a file dialog by themselves.
167
+ */
168
+ open: () => void;
169
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
170
+ remove: (file: File, index: number) => any;
171
+ "update:modelValue": (value: File[]) => any;
172
+ change: (files: File[]) => any;
173
+ reject: (rejection: FilePickerRejection) => any;
174
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
175
+ onRemove?: ((file: File, index: number) => any) | undefined;
176
+ "onUpdate:modelValue"?: ((value: File[]) => any) | undefined;
177
+ onChange?: ((files: File[]) => any) | undefined;
178
+ onReject?: ((rejection: FilePickerRejection) => any) | undefined;
179
+ }>, {
180
+ subtitle: string;
181
+ disabled: boolean;
182
+ icon: IconSource;
183
+ multiple: boolean;
184
+ readonly: boolean;
185
+ preview: FilePickerPreview;
186
+ accept: string;
187
+ maxSize: number;
188
+ maxTotalSize: number;
189
+ maxFiles: number;
190
+ showBrowse: boolean;
191
+ browseLabel: string;
192
+ thumbnails: boolean;
193
+ typeIcons: Partial<Record<FileKind, IconSource>>;
194
+ removeIcon: IconSource;
195
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
196
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
197
+ declare const _default: typeof __VLS_export;
198
+ export default _default;
199
+ type __VLS_WithSlots<T, S> = T & {
200
+ new (): {
201
+ $slots: S;
202
+ };
203
+ };
@@ -0,0 +1,9 @@
1
+ import './VFilePicker.css';
2
+ import e from "./VFilePicker.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region src/components/VFilePicker/VFilePicker.vue
5
+ var t = e;
6
+ //#endregion
7
+ export { t as default };
8
+
9
+ //# sourceMappingURL=VFilePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VFilePicker.js","names":[],"sources":["../../../src/components/VFilePicker/VFilePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core\n/**\n * A drop zone: a dashed rectangle that accepts files dragged onto it or chosen through\n * a dialog, with an optional list of what has been taken.\n *\n * The value is a plain list of files, and the division of labour matters: this component\n * SHOWS and SCREENS, while sending anything anywhere is the parent's business.\n *\n * Four pieces of behaviour need JavaScript, each because the platform leaves no choice.\n * A file dialog opens ONLY from a real click on a real file input, and the list of files\n * it holds cannot be written from a template — hence the relayed click, and the hidden\n * input being a source of files rather than a mirror of the value. The `accept`\n * attribute has no say over a DROP, the browser handing the dropped files over\n * untouched, so the screening has to happen in code. That input has to be reset after\n * every change, or the same file cannot be chosen twice in a row. And a thumbnail has no\n * HTML-only form: an image needs an address, a file only yields one through a temporary\n * URL, and that URL then has to be released.\n *\n * What deliberately is NOT JavaScript is the keyboard. With the browse button hidden,\n * the zone becomes a real button, so Enter, Space, the focus, the role and the complete\n * inertness of a disabled control all come from the browser. The other incarnation, a\n * plain container, exists for one reason only: a button inside a button is invalid\n * markup and unusable by keyboard. Nor is any of the drag highlighting, the \"or\"\n * separator, or the side-by-side layout — all three are CSS.\n */\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n reactive,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\nimport VButton from '../VButton/VButton.vue'\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport { audio_file as audioFileIcon } from '../VIcon/icons/audio_file'\nimport { close as closeIcon } from '../VIcon/icons/close'\nimport { cloud_upload as cloudUploadIcon } from '../VIcon/icons/cloud_upload'\nimport { code as codeIcon } from '../VIcon/icons/code'\nimport { description as descriptionIcon } from '../VIcon/icons/description'\nimport { folder_zip as folderZipIcon } from '../VIcon/icons/folder_zip'\nimport { image as imageIcon } from '../VIcon/icons/image'\nimport { picture_as_pdf as pictureAsPdfIcon } from '../VIcon/icons/picture_as_pdf'\nimport { table_chart as tableChartIcon } from '../VIcon/icons/table_chart'\nimport { video_file as videoFileIcon } from '../VIcon/icons/video_file'\nimport type { IconSource } from '../VIcon/types'\nimport VIconButton from '../VIconButton/VIconButton.vue'\nimport VTypography from '../VTypography/VTypography.vue'\n\nimport { useFileDrop } from '../../composables/useFileDrop'\nimport { useFileField } from '../../composables/useFileField'\nimport { useRootAttrs } from '../../composables/useRootAttrs'\nimport { useLocale, useMessages } from '../../i18n/state'\nimport { isDev } from '../../utils/env'\nimport { formatBytes } from '../../utils/file'\nimport { fileKind, type FileKind } from './fileKind'\n\n/** Where the files taken are listed — under the zone, beside it, or nowhere. */\nexport type FilePickerPreview = false | 'bottom' | 'end'\n\n/** Why a file was turned away: its kind, its size, how many there already are, or the total. */\nexport type FilePickerRejectReason = 'type' | 'size' | 'count' | 'total-size'\n\n/** One file that was turned away, and the reason it was. */\nexport interface FilePickerRejection {\n /** The file itself, so a message can name it. */\n file: File\n /** What it fell foul of. */\n reason: FilePickerRejectReason\n}\n\n/**\n * Everything known about one row of the list. The same object is handed to both slots\n * that can replace part of a row, so the two can never be given different information.\n */\nexport interface FilePickerRow {\n /** The file itself. */\n file: File\n /** Its position in the list. */\n index: number\n /** What kind of file it is, as worked out from its type or its extension. */\n kind: FileKind\n /**\n * The address of its image thumbnail, when there is one.\n *\n * It is absent on the server AND on the browser's first render — those addresses only\n * exist in a browser, and creating them during the first render would make the two\n * markups differ — and absent as well for anything the browser fails to decode. Fall\n * back to the icon in that case.\n */\n thumbnail: string | undefined\n /** The icon standing for that kind of file, a consumer's override included. */\n icon: IconSource\n /** Its size, already written out in the reader's conventions. */\n sizeText: string\n /** Takes this file out of the list. */\n remove: () => void\n}\n\ninterface FilePickerProps {\n /**\n * What the reader is being asked to drop, in one line. It is REQUIRED: a drop zone\n * with no instruction is just a rectangle.\n *\n * Note that this prop shadows the HTML attribute of the same name on the component\n * itself, an accepted trade-off — a tooltip on a drop zone would be redundant anyway.\n */\n title: string\n /** A second line under it, for the constraints in plain words: kinds, sizes, how many. */\n subtitle?: string\n /** The large icon at the top of the zone. */\n icon?: IconSource\n /**\n * Shows the separator and the browse button under the instruction. Hiding them\n * changes the zone's nature: it then becomes the control ITSELF, a real button, so\n * Enter, Space and the focus come from the platform rather than from a container that\n * merely reacts to clicks.\n */\n showBrowse?: boolean\n /** The wording of the browse button. It falls back to the design system dictionary. */\n browseLabel?: string\n /**\n * Where the files taken are listed: under the zone, or beside it — beside folds back\n * underneath when the COMPONENT is narrow, following the width it was given rather\n * than the width of the window.\n *\n * By default nothing is listed at all: the value is there for a parent that wants to\n * present it its own way.\n */\n preview?: FilePickerPreview\n /**\n * Shows a thumbnail for each image in that list. Every image is given a temporary\n * address, created in the browser only and released as soon as the file leaves the\n * list or the component goes away.\n *\n * Turning it off shows the kind icon for every file instead — the way out when a list\n * holds many images, or very large ones.\n */\n thumbnails?: boolean\n /** Replaces the icon of one or more kinds of file. */\n typeIcons?: Partial<Record<FileKind, IconSource>>\n /** The icon of the button removing a file from the list. */\n removeIcon?: IconSource\n /** Allows several files to be taken. With one only, every extra file is turned away. */\n multiple?: boolean\n /**\n * Which kinds of file are accepted, in the browser's own syntax (`image/*,.pdf`).\n *\n * It is applied TWICE, and it has to be: as an attribute, which is what filters the\n * system's file dialog, and again in code, which is the only thing that can filter a\n * DROPPED file — the attribute has no say over a drop.\n */\n accept?: string\n /** The largest ONE file may be, in bytes. */\n maxSize?: number\n /** The largest the whole selection may be, in bytes. */\n maxTotalSize?: number\n /** How many files may be taken at most. */\n maxFiles?: number\n /** Makes the zone unusable, greyed out through the colour tokens. */\n disabled?: boolean\n /** Shows what was taken without allowing it to change: no dialog, no drop, no removal. */\n readonly?: boolean\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<FilePickerProps>(), {\n subtitle: undefined,\n icon: () => cloudUploadIcon,\n showBrowse: true,\n browseLabel: undefined,\n preview: false,\n thumbnails: true,\n typeIcons: undefined,\n removeIcon: () => closeIcon,\n multiple: false,\n accept: undefined,\n maxSize: undefined,\n maxTotalSize: undefined,\n maxFiles: undefined,\n disabled: false,\n readonly: false,\n})\n\nconst emit = defineEmits<{\n /** The reader changed the selection, by adding or removing something. */\n change: [files: File[]]\n /**\n * A file was turned away and never joined the selection. It is emitted once PER file,\n * so a batch drop can be reported precisely.\n */\n reject: [rejection: FilePickerRejection]\n /**\n * One file was taken out, and which one. It exists alongside `change`, which only says\n * what is LEFT: an upload already in flight is aborted from here, without having to\n * compare two lists to find out what went.\n */\n remove: [file: File, index: number]\n}>()\n\ndefineSlots<{\n /**\n * The large icon, for an illustration the icon props cannot express.\n *\n * It must stay non-interactive, and so must the two below: with the browse button\n * hidden, the zone IS a button, and nothing interactive may sit inside one.\n */\n icon?(): unknown\n /** The instruction. Text and inline elements only, for the same reason. */\n title?(): unknown\n /** The second line. Same contract as the instruction. */\n subtitle?(): unknown\n /**\n * The browse button. Call the `open` it receives: without it a button of your own\n * could no longer open the file dialog at all.\n */\n browse?(props: { open: () => void; disabled: boolean }): unknown\n /**\n * A WHOLE row of the list — the way out for a row showing its own upload progress. It\n * receives everything the standard row was given, so nothing has to be worked out\n * again.\n */\n item?(props: FilePickerRow): unknown\n /**\n * The square at the start of a row alone: for a thumbnail produced by your server, a\n * video's poster frame, or a format the browser cannot decode.\n */\n thumbnail?(props: FilePickerRow): unknown\n /**\n * The control that removes a row. Two of the values it receives are not optional in\n * practice: `remove` is the only thing that can take the file out, and `label` is the\n * ready-made name — including the file's own — without which the button would be\n * announced as nothing at all.\n */\n remove?(props: { file: File; index: number; remove: () => void; label: string }): unknown\n}>()\n\n/**\n * Always a LIST of files, whether or not several are allowed — never a file on its own.\n * The shape of the value does not depend on a prop, so a consumer never has to narrow a\n * union TypeScript has no way of discriminating. With a single file it is simply a list\n * of at most one.\n */\nconst model = defineModel<File[]>({ default: () => [] })\n\nconst { attrs, rootClass, rootStyle, forwardedAttrs } = useRootAttrs()\n\nconst m = useMessages()\nconst locale = useLocale()\n\nconst interactive = computed(() => !props.disabled && !props.readonly)\n\n/*\n * The hidden input, the sorting of the consumer's attributes and the single entry point\n * into the value all live in `useFileField`, shared with VFileInput.\n *\n * Here, the bucket meant for \"the control the user deals with\" goes to the ZONE: that is\n * what they see, and what takes the focus once the browse button is hidden. Nothing is\n * pulled out of it, unlike in VFileInput — this component assembles no description of\n * its own.\n */\nconst {\n fileEl,\n nativeAttrs,\n controlAttrs: zoneAttrs,\n acceptFiles,\n onNativeChange,\n openPicker,\n resetNative,\n} = useFileField({\n model,\n forwardedAttrs,\n enabled: () => interactive.value,\n multiple: () => props.multiple,\n limits: () => ({\n accept: props.accept,\n maxSize: props.maxSize,\n maxFiles: props.maxFiles,\n maxTotalSize: props.maxTotalSize,\n }),\n onReject: (rejection) => emit('reject', rejection),\n onChange: (files) => emit('change', files),\n})\n\nconst zoneEl = ref<HTMLElement | null>(null)\nconst listEl = ref<HTMLUListElement | null>(null)\n/** The zone becomes the control exactly when there is no button inside to be one. */\nconst zoneIsControl = computed(() => !props.showBrowse)\nconst showList = computed(() => props.preview !== false && model.value.length > 0)\n\n/**\n * Which icon stands for which kind of file. A consumer overrides it entry by entry, so\n * replacing one icon does not mean restating the other seven.\n */\nconst KIND_ICONS: Record<FileKind, IconSource> = {\n image: imageIcon,\n pdf: pictureAsPdfIcon,\n audio: audioFileIcon,\n video: videoFileIcon,\n archive: folderZipIcon,\n spreadsheet: tableChartIcon,\n code: codeIcon,\n file: descriptionIcon,\n}\n\nconst iconForKind = (kind: FileKind): IconSource => props.typeIcons?.[kind] ?? KIND_ICONS[kind]\n\nfunction onZoneClick(event: MouseEvent) {\n // The browse button already handles its own click, and that click also reaches the\n // zone: without this guard it would open the dialog twice. The test is inert when the\n // zone IS the button, there being nothing inside it to match.\n if (!zoneIsControl.value && (event.target as HTMLElement).closest('button')) return\n openPicker()\n}\n\nconst { dragging, onDragEnter, onDragOver, onDragLeave, onDrop } = useFileDrop(\n () => interactive.value,\n acceptFiles,\n)\n\n// @a11y\n/**\n * What can be focused in the zone, whichever shape it has taken: the zone itself when it\n * is the button, and otherwise the first button inside it.\n *\n * It is found by searching the DOM rather than kept as a reference, because a consumer\n * may have replaced the browse button entirely — theirs is not ours to hold a reference\n * to, and it still has to be reachable.\n */\nfunction focusTarget(): HTMLElement | null {\n const zone = zoneEl.value\n if (!zone) return null\n return zone.matches('button') ? zone : zone.querySelector('button')\n}\n\n// @a11y @core\n/**\n * Takes a file out of the list, and catches the focus that was on its remove button.\n *\n * That button disappears with its row, so the focus would fall back to the page body.\n * It is moved instead to the row that takes its place, or to the browse control once\n * the list is empty. Waiting for the next tick is what makes the new row findable: the\n * page still shows the old one at the moment the value is written.\n */\nasync function removeAt(index: number) {\n const file = model.value[index]\n if (!file || !interactive.value) return\n\n model.value = model.value.filter((_, i) => i !== index)\n resetNative()\n emit('remove', file, index)\n emit('change', model.value)\n\n await nextTick()\n const items = listEl.value?.querySelectorAll<HTMLElement>('.v-file-picker-item') ?? []\n const next = items[Math.min(index, items.length - 1)]?.querySelector('button')\n ;(next ?? focusTarget())?.focus()\n}\n\n/**\n * One temporary address per image, kept against THE FILE OBJECT ITSELF.\n *\n * Using the file as the key is safe, and that is worth knowing: Vue's reactivity only\n * wraps plain objects, arrays and collections, so a File travelling through the value\n * comes back with its identity intact — the exact opposite of VCombobox's option cache,\n * where comparing identities IS the bug. Keying by name would be wrong here: two files\n * picked from different folders can share one.\n *\n * The map is made reactive rather than held in a plain reference, which is what lets a\n * single row re-render when its address is ready, instead of replacing the whole map.\n *\n * TRAP — it is called `thumbUrls` and NOT `thumbnails`. Every top-level binding of a\n * `<script setup>` is exposed to the template, where it would SHADOW the prop of the\n * same name — the same trap VHotkeys' `listening` flag avoids.\n */\nconst thumbUrls = reactive(new Map<File, string>())\n\n/**\n * Whether a thumbnail can be drawn at all, decided on the type the BROWSER reports and\n * not on the kind derived from the extension. A `.heic` file counts as an image and\n * deserves the image icon, but no engine will decode it.\n */\nconst isThumbable = (file: File) => file.type.startsWith('image/')\n\n// @ssr @core\n/**\n * Brings the map into line with the list: releases the addresses of files that have\n * gone, and creates them for files that have arrived.\n *\n * TRAP — it is never called from setup, from a derived value or during rendering, only\n * once mounted, from a watcher and from handlers. That is what keeps the component\n * renderable on a server: the server draws the kind icon, and so does the browser's\n * first render, the map being empty until then — the same reasoning as today's date in\n * VDatePicker.\n */\nfunction syncThumbnails() {\n // With no list rendered there is nothing to draw a thumbnail in, so no address is\n // created at all. This gate — and not a warning — is what makes the default\n // configuration cost strictly nothing.\n const wanted = new Set(\n props.thumbnails && props.preview !== false ? model.value.filter(isThumbable) : [],\n )\n\n for (const [file, url] of thumbUrls) {\n if (wanted.has(file)) continue\n URL.revokeObjectURL(url)\n thumbUrls.delete(file)\n }\n for (const file of wanted) {\n if (!thumbUrls.has(file)) thumbUrls.set(file, URL.createObjectURL(file))\n }\n}\n\n// @fallback\n/**\n * The image failed to decode — a format the browser does not read, a corrupt file, a\n * type that lied about itself. The address is released and the kind icon takes over: a\n * failure to draw must never leave an empty square in the list.\n */\nfunction dropThumbnail(file: File) {\n const url = thumbUrls.get(file)\n if (!url) return\n URL.revokeObjectURL(url)\n thumbUrls.delete(file)\n}\n\n// @ssr — the addresses are created in the browser only; the server and the browser's\n// first render both show the kind icon, so the two markups agree.\nonMounted(syncThumbnails)\n/*\n * Watching deeply costs nothing here and covers a consumer who ADDS to the list rather\n * than replacing it: the walk stops at a File, which is neither a plain object nor a\n * collection, so it never descends past the array itself.\n */\nwatch([model, () => props.thumbnails, () => props.preview], syncThumbnails, { deep: true })\n// Released BEFORE the component is torn down and never after — the same rule `useTimer`\n// and VHotkeys follow.\nonBeforeUnmount(() => {\n for (const url of thumbUrls.values()) URL.revokeObjectURL(url)\n thumbUrls.clear()\n})\n\n/**\n * Everything one row of the list needs, assembled in one place. A Vue template has no\n * way of declaring a reusable fragment, so this is what keeps the two slots that can\n * replace part of a row fed from a single source.\n */\nfunction rowProps(file: File, index: number): FilePickerRow {\n const kind = fileKind(file)\n return {\n file,\n index,\n kind,\n thumbnail: thumbUrls.get(file),\n icon: iconForKind(kind),\n sizeText: formatBytes(file.size, locale.value),\n remove: () => removeAt(index),\n }\n}\n\n// @devwarn — the last two are accessibility guards, and both describe things that fail\n// SILENTLY at runtime: a required control nobody can focus, and a name given to a plain\n// container, which assistive technology ignores.\nif (isDev) {\n watchEffect(() => {\n if (props.maxFiles !== undefined && !props.multiple)\n console.warn(\n '[VFilePicker] `maxFiles` ignored without `multiple`: single mode already caps at one file.',\n )\n if (attrs.required !== undefined)\n console.warn(\n '[VFilePicker] `required` lands on the hidden file input, which is not focusable: the browser blocks submission with no visible message. Validate the v-model yourself.',\n )\n if (\n props.showBrowse &&\n (attrs['aria-label'] !== undefined || attrs['aria-labelledby'] !== undefined)\n )\n console.warn(\n '[VFilePicker] an aria-label on the zone is inert while the browse button is shown: the zone is a plain container then, and axe reports aria-prohibited-attr. Name the zone through `title`, or set `showBrowse: false` to make the zone itself the control.',\n )\n })\n}\n\ndefineExpose({\n /** Moves the focus to the browse control — the button, or the zone when it is one. */\n focus: (options?: FocusOptions) => focusTarget()?.focus(options),\n /**\n * Opens the file dialog. It only works when called from something the reader did — a\n * click, a key press: browsers refuse to open a file dialog by themselves.\n */\n open: openPicker,\n})\n</script>\n\n<template>\n <div\n class=\"v-file-picker\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-preview=\"preview || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-dragging=\"dragging ? '' : undefined\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDrop\"\n >\n <input\n v-bind=\"nativeAttrs\"\n ref=\"fileEl\"\n type=\"file\"\n class=\"v-file-picker-native\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n :accept=\"accept\"\n :multiple=\"multiple || undefined\"\n :disabled=\"disabled || undefined\"\n @change=\"onNativeChange\"\n />\n\n <!-- TRAP — this wrapper is not decoration. The root is what the layout asks about\n its own width, and an element cannot ask about ITSELF: whatever flips has to be\n a descendant of it. Deleting this element makes the side-by-side layout\n silently stop folding, with no error anywhere. -->\n <div class=\"v-file-picker-body\">\n <!-- A real button as soon as the zone IS the control: the role, Enter, Space, the\n focus and the complete inertness of a disabled control then come from the\n platform. A plain container otherwise — a button inside a button is invalid\n markup, and unreachable by keyboard. -->\n <component\n :is=\"zoneIsControl ? 'button' : 'div'\"\n v-bind=\"zoneAttrs\"\n ref=\"zoneEl\"\n class=\"v-file-picker-zone\"\n :type=\"zoneIsControl ? 'button' : undefined\"\n :disabled=\"zoneIsControl && !interactive ? true : undefined\"\n @click=\"onZoneClick\"\n >\n <span class=\"v-file-picker-icon\">\n <slot name=\"icon\"><VIcon v-bind=\"iconProps(icon)\" /></slot>\n </span>\n\n <!-- Rendered as a span in BOTH shapes: a paragraph is not allowed inside a\n button, and the markup must not change form between the two — one shape\n means one set of CSS rules. -->\n <VTypography as=\"span\" variant=\"subtitle\" class=\"v-file-picker-title\">\n <slot name=\"title\">{{ title }}</slot>\n </VTypography>\n\n <VTypography\n v-if=\"subtitle || $slots.subtitle\"\n as=\"span\"\n variant=\"body-sm\"\n class=\"v-file-picker-subtitle\"\n >\n <slot name=\"subtitle\">{{ subtitle }}</slot>\n </VTypography>\n\n <template v-if=\"showBrowse\">\n <!-- Deliberately not hidden from screen readers: \"or\" is real text, and it\n reads naturally between the instruction and the button. The two rules on\n either side of it are pseudo-elements, and therefore decorative by\n construction. -->\n <span class=\"v-file-picker-separator\">{{ m.filePicker.or }}</span>\n\n <slot name=\"browse\" :open=\"openPicker\" :disabled=\"!interactive\">\n <VButton\n class=\"v-file-picker-browse\"\n variant=\"outline\"\n tone=\"neutral\"\n :disabled=\"!interactive\"\n @click=\"openPicker\"\n >\n {{ browseLabel ?? m.filePicker.browse }}\n </VButton>\n </slot>\n </template>\n </component>\n\n <ul v-if=\"showList\" ref=\"listEl\" class=\"v-file-picker-list\" :aria-label=\"m.filePicker.list\">\n <li\n v-for=\"(file, index) in model\"\n :key=\"`${index}-${file.name}`\"\n class=\"v-file-picker-item\"\n >\n <slot name=\"item\" v-bind=\"rowProps(file, index)\">\n <span class=\"v-file-picker-thumb\">\n <slot name=\"thumbnail\" v-bind=\"rowProps(file, index)\">\n <img\n v-if=\"thumbUrls.get(file)\"\n class=\"v-file-picker-image\"\n :src=\"thumbUrls.get(file)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n @error=\"dropThumbnail(file)\"\n />\n <VIcon v-else v-bind=\"iconProps(iconForKind(fileKind(file)))\" />\n </slot>\n </span>\n\n <span class=\"v-file-picker-info\">\n <span class=\"v-file-picker-name\" :title=\"file.name\">{{ file.name }}</span>\n <span class=\"v-file-picker-size\">{{ formatBytes(file.size, locale) }}</span>\n </span>\n\n <slot\n name=\"remove\"\n :file=\"file\"\n :index=\"index\"\n :remove=\"() => removeAt(index)\"\n :label=\"m.filePicker.remove(file.name)\"\n >\n <VIconButton\n class=\"v-file-picker-remove\"\n size=\"sm\"\n :icon=\"removeIcon\"\n :label=\"m.filePicker.remove(file.name)\"\n :disabled=\"!interactive\"\n @click=\"removeAt(index)\"\n />\n </slot>\n </slot>\n </li>\n </ul>\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n /* These variables carry the component's name for a reason: they INHERIT, so a bare\n `--bg` or `--border-color` set by the host application on any ancestor would be\n picked up here instead — and nothing would catch it, since the unit tests evaluate\n no styles at all.\n\n They are declared on the ROOT so that the drag, disabled and read-only states each\n redefine them in ONE place, which is what makes those states structurally incapable\n of disagreeing with hover or focus. */\n .v-file-picker {\n --file-picker-border-color: var(--vectis-color-border-strong);\n --file-picker-bg: var(--vectis-color-surface-sunken);\n --file-picker-text: var(--vectis-color-text);\n --file-picker-text-muted: var(--vectis-color-text-muted);\n --file-picker-row-bg: var(--vectis-color-surface-raised);\n --file-picker-thumb-bg: var(--vectis-color-surface-muted);\n\n /* Positioned so the hidden file input, which has no size at all, has something to be\n placed against. */\n position: relative;\n display: block;\n inline-size: 100%;\n font-family: var(--vectis-text-family);\n }\n\n /* The real file input is a SOURCE of files and not a control anyone deals with. It is\n hidden with `opacity` and never with `display: none`, the design system's rule for a\n hidden form control, which has to stay submittable; it is given no size and made\n deaf to the pointer, so it can never swallow a click meant for the zone. */\n .v-file-picker-native {\n position: absolute;\n inline-size: 0;\n block-size: 0;\n opacity: 0;\n pointer-events: none;\n }\n\n .v-file-picker-body {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-4);\n }\n\n /* One set of rules serves both shapes the zone can take. All that has to be undone is\n what the browser gives a button — its own appearance, font and margin — since\n everything else is declared here regardless. The full width is part of that: a\n button shrinks to fit its content, where a container does not. */\n .v-file-picker-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--vectis-space-2);\n inline-size: 100%;\n min-block-size: var(--vectis-control-size-file-picker-min-block);\n margin: 0;\n padding: var(--vectis-space-6) var(--vectis-space-4);\n appearance: none;\n border: 1px dashed var(--file-picker-border-color);\n border-radius: var(--vectis-radius-surface);\n background: var(--file-picker-bg);\n color: var(--file-picker-text);\n font: inherit;\n text-align: center;\n transition:\n border-color var(--vectis-duration-fast) var(--vectis-ease-default),\n background-color var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n .v-file-picker:not([data-disabled]):not([data-readonly]) .v-file-picker-zone {\n cursor: pointer;\n }\n\n .v-file-picker:not([data-disabled]):not([data-readonly]) .v-file-picker-zone:hover {\n --file-picker-border-color: var(--vectis-color-accent);\n }\n\n .v-file-picker-zone:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: var(--vectis-focus-ring-offset);\n }\n\n /* While a file is being dragged over it, the zone is highlighted by redefining the\n very variables it paints itself with — so the highlight cannot disagree with the\n hover and focus states. */\n .v-file-picker[data-dragging] {\n --file-picker-border-color: var(--vectis-color-accent);\n --file-picker-bg: var(--vectis-color-accent-surface);\n }\n\n /* The large icon's size is set HERE, on its own wrapper, and never on the zone: set\n there it would inherit down and enlarge the browse button's icons as well. */\n .v-file-picker-icon {\n --vectis-icon-size: var(--vectis-control-size-file-picker-icon);\n\n display: inline-flex;\n color: var(--file-picker-text-muted);\n }\n\n .v-file-picker-subtitle {\n /* Set through VTypography's own colour variable rather than with a plain colour:\n there is then a single source, and the disabled state below overrides that same\n one instead of introducing a second. */\n --typography-color: var(--file-picker-text-muted);\n }\n\n /* The word set between two rules, entirely in CSS: the two lines are pseudo-elements\n sharing the row with the text between them. No extra element is added to the markup,\n and nothing decorative reaches the accessibility tree. */\n .v-file-picker-separator {\n display: flex;\n align-items: center;\n gap: var(--vectis-space-3);\n inline-size: 100%;\n margin-block-start: var(--vectis-space-2);\n color: var(--file-picker-text-muted);\n font-size: var(--vectis-text-caption-size);\n }\n\n .v-file-picker-separator::before,\n .v-file-picker-separator::after {\n content: '';\n flex: 1 1 0;\n border-block-start: 1px solid var(--vectis-color-border);\n }\n\n .v-file-picker-list {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n .v-file-picker-item {\n display: flex;\n align-items: center;\n gap: var(--vectis-space-3);\n padding: var(--vectis-space-2);\n border: 1px solid var(--vectis-color-border);\n border-radius: var(--vectis-radius-interactive);\n background: var(--file-picker-row-bg);\n }\n\n .v-file-picker-thumb {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n inline-size: var(--vectis-control-size-file-picker-thumb);\n block-size: var(--vectis-control-size-file-picker-thumb);\n overflow: hidden;\n border-radius: var(--vectis-radius-interactive);\n background: var(--file-picker-thumb-bg);\n color: var(--file-picker-text-muted);\n }\n\n .v-file-picker-image {\n display: block;\n inline-size: 100%;\n block-size: 100%;\n object-fit: cover;\n }\n\n /* The zero minimum is what makes the ellipsis below possible at all: a flex item\n refuses by default to shrink below its own content, so without it a long file name\n would widen the row instead of being cut short. */\n .v-file-picker-info {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-inline-size: 0;\n color: var(--file-picker-text);\n }\n\n .v-file-picker-name {\n overflow: hidden;\n font-size: var(--vectis-text-body-sm-size);\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n /* Figures of equal width, so the sizes line up down the column instead of wobbling.\n That is not a typographic role, so it stays a local rule — the same reasoning as\n VFileInput's counter. */\n .v-file-picker-size {\n color: var(--file-picker-text-muted);\n font-size: var(--vectis-text-caption-size);\n font-variant-numeric: tabular-nums;\n }\n\n /*\n * Making the component a query container is reserved for the side-by-side layout,\n * since only its rule below depends on it — and it is not free.\n *\n * A container of this kind computes its width WITHOUT looking at its content, so the\n * component would lose its natural width inside an automatically sized grid column or\n * an inline box. In the two other layouts it keeps it.\n */\n .v-file-picker[data-preview='end'] {\n container-type: inline-size;\n container-name: v-file-picker;\n }\n\n .v-file-picker[data-preview='end'] .v-file-picker-body {\n flex-direction: row;\n align-items: flex-start;\n }\n\n .v-file-picker[data-preview='end'] .v-file-picker-zone,\n .v-file-picker[data-preview='end'] .v-file-picker-list {\n flex: 1 1 0;\n min-inline-size: 0;\n }\n\n /*\n * The threshold is written as a literal length, a container query accepting no\n * variables. It is the width NEEDED to hold the two columns side by side, and not what\n * is left once they fold: the zone stops being readable below about 18rem — its\n * instruction wraps onto two lines and the button follows — a row needs about 15rem to\n * show a thumbnail, a name worth reading and its remove button, and there is a gutter\n * between them.\n */\n @container v-file-picker (max-width: 34rem) {\n .v-file-picker[data-preview='end'] .v-file-picker-body {\n flex-direction: column;\n }\n }\n\n /* A disabled zone greys out through the colour tokens and never through opacity.\n\n The pairing used is the design system's own for a disabled surface, exactly as\n VInput sets it: a lighter text would look more convincingly disabled, and would fall\n below the required contrast against that background — which the accessibility checks\n refuse.\n\n Both text variables take the SAME value here, so that the secondary line does not\n sink below the title on a surface that is already dimmed. */\n .v-file-picker[data-disabled] {\n --file-picker-border-color: var(--vectis-color-border);\n --file-picker-bg: var(--vectis-color-surface-muted);\n --file-picker-text: var(--vectis-color-text-muted);\n --file-picker-text-muted: var(--vectis-color-text-muted);\n --file-picker-row-bg: var(--vectis-color-surface-muted);\n }\n\n .v-file-picker[data-readonly] {\n --file-picker-border-color: var(--vectis-color-border);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-file-picker-zone {\n transition: none;\n }\n }\n\n /*\n * Under Windows forced colours the backgrounds are dropped and every border colour is\n * replaced, so the drag highlight — which is nothing but colour — would disappear\n * entirely. A change of border STYLE survives that: the dashed outline becomes solid\n * for as long as a file hovers over the zone.\n */\n @media (forced-colors: active) {\n .v-file-picker[data-dragging] .v-file-picker-zone {\n border-style: solid;\n }\n\n .v-file-picker-thumb {\n border: 1px solid;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,266 @@
1
+ import { useLocale as e, useMessages as t } from "../../i18n/state.js";
2
+ import n from "../VIcon/VIcon.js";
3
+ import r from "../VTypography/VTypography.js";
4
+ import { iconProps as i } from "../VIcon/iconProps.js";
5
+ import ee from "../VButton/VButton.js";
6
+ import te from "../VIconButton/VIconButton.js";
7
+ import { useRootAttrs as ne } from "../../composables/useRootAttrs.js";
8
+ import { close as a } from "../VIcon/icons/close.js";
9
+ import { useFileDrop as re } from "../../composables/useFileDrop.js";
10
+ import { formatBytes as o } from "../../utils/file.js";
11
+ import { useFileField as ie } from "../../composables/useFileField.js";
12
+ import { audio_file as ae } from "../VIcon/icons/audio_file.js";
13
+ import { cloud_upload as s } from "../VIcon/icons/cloud_upload.js";
14
+ import { code as oe } from "../VIcon/icons/code.js";
15
+ import { description as se } from "../VIcon/icons/description.js";
16
+ import { folder_zip as ce } from "../VIcon/icons/folder_zip.js";
17
+ import { image as le } from "../VIcon/icons/image.js";
18
+ import { picture_as_pdf as ue } from "../VIcon/icons/picture_as_pdf.js";
19
+ import { table_chart as c } from "../VIcon/icons/table_chart.js";
20
+ import { video_file as de } from "../VIcon/icons/video_file.js";
21
+ import { fileKind as l } from "./fileKind.js";
22
+ import { Fragment as u, computed as d, createBlock as f, createCommentVNode as p, createElementBlock as m, createElementVNode as h, createTextVNode as g, createVNode as _, defineComponent as v, guardReactiveProps as fe, mergeModels as y, mergeProps as b, nextTick as pe, normalizeClass as me, normalizeProps as he, normalizeStyle as ge, onBeforeUnmount as _e, onMounted as ve, openBlock as x, reactive as ye, ref as S, renderList as be, renderSlot as C, resolveDynamicComponent as xe, toDisplayString as w, unref as T, useModel as E, watch as D, withCtx as O } from "vue";
23
+ //#region src/components/VFilePicker/VFilePicker.vue?vue&type=script&setup=true&lang.ts
24
+ var k = [
25
+ "data-preview",
26
+ "data-disabled",
27
+ "data-readonly",
28
+ "data-dragging"
29
+ ], A = [
30
+ "accept",
31
+ "multiple",
32
+ "disabled"
33
+ ], j = { class: "v-file-picker-body" }, M = { class: "v-file-picker-icon" }, Se = { class: "v-file-picker-separator" }, Ce = ["aria-label"], we = { class: "v-file-picker-thumb" }, Te = ["src", "onError"], Ee = { class: "v-file-picker-info" }, N = ["title"], De = { class: "v-file-picker-size" }, P = /*@__PURE__*/ v({
34
+ inheritAttrs: !1,
35
+ __name: "VFilePicker",
36
+ props: /*@__PURE__*/ y({
37
+ title: {},
38
+ subtitle: { default: void 0 },
39
+ icon: { default: () => s },
40
+ showBrowse: {
41
+ type: Boolean,
42
+ default: !0
43
+ },
44
+ browseLabel: { default: void 0 },
45
+ preview: {
46
+ type: [Boolean, String],
47
+ default: !1
48
+ },
49
+ thumbnails: {
50
+ type: Boolean,
51
+ default: !0
52
+ },
53
+ typeIcons: { default: void 0 },
54
+ removeIcon: { default: () => a },
55
+ multiple: {
56
+ type: Boolean,
57
+ default: !1
58
+ },
59
+ accept: { default: void 0 },
60
+ maxSize: { default: void 0 },
61
+ maxTotalSize: { default: void 0 },
62
+ maxFiles: { default: void 0 },
63
+ disabled: {
64
+ type: Boolean,
65
+ default: !1
66
+ },
67
+ readonly: {
68
+ type: Boolean,
69
+ default: !1
70
+ }
71
+ }, {
72
+ modelValue: { default: () => [] },
73
+ modelModifiers: {}
74
+ }),
75
+ emits: /*@__PURE__*/ y([
76
+ "change",
77
+ "reject",
78
+ "remove"
79
+ ], ["update:modelValue"]),
80
+ setup(a, { expose: s, emit: v }) {
81
+ let y = a, P = v, F = E(a, "modelValue"), { attrs: Oe, rootClass: ke, rootStyle: Ae, forwardedAttrs: je } = ne(), I = t(), L = e(), R = d(() => !y.disabled && !y.readonly), { fileEl: Me, nativeAttrs: Ne, controlAttrs: Pe, acceptFiles: Fe, onNativeChange: z, openPicker: B, resetNative: Ie } = ie({
82
+ model: F,
83
+ forwardedAttrs: je,
84
+ enabled: () => R.value,
85
+ multiple: () => y.multiple,
86
+ limits: () => ({
87
+ accept: y.accept,
88
+ maxSize: y.maxSize,
89
+ maxFiles: y.maxFiles,
90
+ maxTotalSize: y.maxTotalSize
91
+ }),
92
+ onReject: (e) => P("reject", e),
93
+ onChange: (e) => P("change", e)
94
+ }), V = S(null), H = S(null), U = d(() => !y.showBrowse), Le = d(() => y.preview !== !1 && F.value.length > 0), Re = {
95
+ image: le,
96
+ pdf: ue,
97
+ audio: ae,
98
+ video: de,
99
+ archive: ce,
100
+ spreadsheet: c,
101
+ code: oe,
102
+ file: se
103
+ }, W = (e) => y.typeIcons?.[e] ?? Re[e];
104
+ function ze(e) {
105
+ !U.value && e.target.closest("button") || B();
106
+ }
107
+ let { dragging: Be, onDragEnter: G, onDragOver: K, onDragLeave: q, onDrop: J } = re(() => R.value, Fe);
108
+ function Y() {
109
+ let e = V.value;
110
+ return e ? e.matches("button") ? e : e.querySelector("button") : null;
111
+ }
112
+ async function X(e) {
113
+ let t = F.value[e];
114
+ if (!t || !R.value) return;
115
+ F.value = F.value.filter((t, n) => n !== e), Ie(), P("remove", t, e), P("change", F.value), await pe();
116
+ let n = H.value?.querySelectorAll(".v-file-picker-item") ?? [];
117
+ (n[Math.min(e, n.length - 1)]?.querySelector("button") ?? Y())?.focus();
118
+ }
119
+ let Z = ye(/* @__PURE__ */ new Map()), Ve = (e) => e.type.startsWith("image/");
120
+ function Q() {
121
+ let e = new Set(y.thumbnails && y.preview !== !1 ? F.value.filter(Ve) : []);
122
+ for (let [t, n] of Z) e.has(t) || (URL.revokeObjectURL(n), Z.delete(t));
123
+ for (let t of e) Z.has(t) || Z.set(t, URL.createObjectURL(t));
124
+ }
125
+ function He(e) {
126
+ let t = Z.get(e);
127
+ t && (URL.revokeObjectURL(t), Z.delete(e));
128
+ }
129
+ ve(Q), D([
130
+ F,
131
+ () => y.thumbnails,
132
+ () => y.preview
133
+ ], Q, { deep: !0 }), _e(() => {
134
+ for (let e of Z.values()) URL.revokeObjectURL(e);
135
+ Z.clear();
136
+ });
137
+ function $(e, t) {
138
+ let n = l(e);
139
+ return {
140
+ file: e,
141
+ index: t,
142
+ kind: n,
143
+ thumbnail: Z.get(e),
144
+ icon: W(n),
145
+ sizeText: o(e.size, L.value),
146
+ remove: () => X(t)
147
+ };
148
+ }
149
+ return s({
150
+ focus: (e) => Y()?.focus(e),
151
+ open: B
152
+ }), (e, t) => (x(), m("div", {
153
+ class: me(["v-file-picker", T(ke)]),
154
+ style: ge(T(Ae)),
155
+ "data-preview": a.preview || void 0,
156
+ "data-disabled": a.disabled ? "" : void 0,
157
+ "data-readonly": a.readonly ? "" : void 0,
158
+ "data-dragging": T(Be) ? "" : void 0,
159
+ onDragenter: t[1] ||= (...e) => T(G) && T(G)(...e),
160
+ onDragover: t[2] ||= (...e) => T(K) && T(K)(...e),
161
+ onDragleave: t[3] ||= (...e) => T(q) && T(q)(...e),
162
+ onDrop: t[4] ||= (...e) => T(J) && T(J)(...e)
163
+ }, [h("input", b(T(Ne), {
164
+ ref_key: "fileEl",
165
+ ref: Me,
166
+ type: "file",
167
+ class: "v-file-picker-native",
168
+ tabindex: "-1",
169
+ "aria-hidden": "true",
170
+ accept: a.accept,
171
+ multiple: a.multiple || void 0,
172
+ disabled: a.disabled || void 0,
173
+ onChange: t[0] ||= (...e) => T(z) && T(z)(...e)
174
+ }), null, 16, A), h("div", j, [(x(), f(xe(U.value ? "button" : "div"), b(T(Pe), {
175
+ ref_key: "zoneEl",
176
+ ref: V,
177
+ class: "v-file-picker-zone",
178
+ type: U.value ? "button" : void 0,
179
+ disabled: U.value && !R.value ? !0 : void 0,
180
+ onClick: ze
181
+ }), {
182
+ default: O(() => [
183
+ h("span", M, [C(e.$slots, "icon", {}, () => [_(n, he(fe(T(i)(a.icon))), null, 16)])]),
184
+ _(r, {
185
+ as: "span",
186
+ variant: "subtitle",
187
+ class: "v-file-picker-title"
188
+ }, {
189
+ default: O(() => [C(e.$slots, "title", {}, () => [g(w(a.title), 1)])]),
190
+ _: 3
191
+ }),
192
+ a.subtitle || e.$slots.subtitle ? (x(), f(r, {
193
+ key: 0,
194
+ as: "span",
195
+ variant: "body-sm",
196
+ class: "v-file-picker-subtitle"
197
+ }, {
198
+ default: O(() => [C(e.$slots, "subtitle", {}, () => [g(w(a.subtitle), 1)])]),
199
+ _: 3
200
+ })) : p("", !0),
201
+ a.showBrowse ? (x(), m(u, { key: 1 }, [h("span", Se, w(T(I).filePicker.or), 1), C(e.$slots, "browse", {
202
+ open: T(B),
203
+ disabled: !R.value
204
+ }, () => [_(ee, {
205
+ class: "v-file-picker-browse",
206
+ variant: "outline",
207
+ tone: "neutral",
208
+ disabled: !R.value,
209
+ onClick: T(B)
210
+ }, {
211
+ default: O(() => [g(w(a.browseLabel ?? T(I).filePicker.browse), 1)]),
212
+ _: 1
213
+ }, 8, ["disabled", "onClick"])])], 64)) : p("", !0)
214
+ ]),
215
+ _: 3
216
+ }, 16, ["type", "disabled"])), Le.value ? (x(), m("ul", {
217
+ key: 0,
218
+ ref_key: "listEl",
219
+ ref: H,
220
+ class: "v-file-picker-list",
221
+ "aria-label": T(I).filePicker.list
222
+ }, [(x(!0), m(u, null, be(F.value, (t, r) => (x(), m("li", {
223
+ key: `${r}-${t.name}`,
224
+ class: "v-file-picker-item"
225
+ }, [C(e.$slots, "item", b({ ref_for: !0 }, $(t, r)), () => [
226
+ h("span", we, [C(e.$slots, "thumbnail", b({ ref_for: !0 }, $(t, r)), () => [Z.get(t) ? (x(), m("img", {
227
+ key: 0,
228
+ class: "v-file-picker-image",
229
+ src: Z.get(t),
230
+ alt: "",
231
+ loading: "lazy",
232
+ decoding: "async",
233
+ onError: (e) => He(t)
234
+ }, null, 40, Te)) : (x(), f(n, b({
235
+ key: 1,
236
+ ref_for: !0
237
+ }, T(i)(W(T(l)(t)))), null, 16))])]),
238
+ h("span", Ee, [h("span", {
239
+ class: "v-file-picker-name",
240
+ title: t.name
241
+ }, w(t.name), 9, N), h("span", De, w(T(o)(t.size, T(L))), 1)]),
242
+ C(e.$slots, "remove", {
243
+ file: t,
244
+ index: r,
245
+ remove: () => X(r),
246
+ label: T(I).filePicker.remove(t.name)
247
+ }, () => [_(te, {
248
+ class: "v-file-picker-remove",
249
+ size: "sm",
250
+ icon: a.removeIcon,
251
+ label: T(I).filePicker.remove(t.name),
252
+ disabled: !R.value,
253
+ onClick: (e) => X(r)
254
+ }, null, 8, [
255
+ "icon",
256
+ "label",
257
+ "disabled",
258
+ "onClick"
259
+ ])])
260
+ ])]))), 128))], 8, Ce)) : p("", !0)])], 46, k));
261
+ }
262
+ });
263
+ //#endregion
264
+ export { P as default };
265
+
266
+ //# sourceMappingURL=VFilePicker.vue_vue_type_script_setup_true_lang.js.map