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,152 @@
1
+ import { DatePickerEvent, DatePickerSelection, DatePickerValue, DateMatcher } from '../VDatePicker/VDatePicker.js';
2
+ import { IconSource } from '../VIcon/types.js';
3
+ /**
4
+ * A field for choosing a date: a text field, and a calendar in a panel below it.
5
+ *
6
+ * The panel is opened from code rather than by the browser, and that is not a detail: a
7
+ * text input cannot be declared as the thing that opens a popover, and opening it
8
+ * ourselves is also what lets the focus be moved INTO the calendar's grid, so the
9
+ * keyboard lands where the dates are. Closing is ours too — the focus leaving the
10
+ * component, or Escape.
11
+ *
12
+ * The field itself comes in two forms. It can be TYPED into, which is the default: the
13
+ * reader types digits only and the separators appear as they go, in the order and with
14
+ * the punctuation their language uses. Or it can be read-only, in which case the calendar
15
+ * is the only way in.
16
+ *
17
+ * That is a different question from WHAT is being chosen — one date, a period, or several
18
+ * dates — which is passed straight through to the calendar.
19
+ */
20
+ type Placement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
21
+ /** Whether the field can be typed into, or only filled from the calendar. */
22
+ export type DateInputMode = 'readonly' | 'input';
23
+ interface DateInputProps {
24
+ /** What is being chosen: one date, a period between two, or several separate dates. */
25
+ selection?: DatePickerSelection;
26
+ /**
27
+ * A BCP 47 locale, which decides the month and day names, the first day of the week and
28
+ * the order the field is typed in. It TAKES PRECEDENCE over the design system's global
29
+ * locale and falls back to it — which is why it has no literal default: `undefined` has
30
+ * to stay recognizable for the global locale to have its chance.
31
+ */
32
+ locale?: string;
33
+ /** Forces the day the weeks start on, from 0 for Sunday to 6 for Saturday. */
34
+ firstDayOfWeek?: number;
35
+ /** The earliest date that can be chosen, as an ISO string. */
36
+ min?: string;
37
+ /** The latest date that can be chosen, as an ISO string. */
38
+ max?: string;
39
+ /** Dates that cannot be chosen, as a list or as a function. */
40
+ disabledDates?: DateMatcher;
41
+ /** Fills the corners of the grid with the greyed days of the neighbouring months. */
42
+ showAdjacentDays?: boolean;
43
+ /** Lets those neighbouring days be clicked, which implies showing them. */
44
+ selectAdjacentDays?: boolean;
45
+ /** Events to mark under the days they fall on. */
46
+ events?: DatePickerEvent[];
47
+ /**
48
+ * Whether the field can be TYPED into — the default, using the numeric form of the
49
+ * reader's language — or is read-only, the calendar then being the only way in.
50
+ *
51
+ * Typing is reserved for choosing a SINGLE date: a period or a list falls back to
52
+ * read-only, there being no sensible way to type either.
53
+ */
54
+ mode?: DateInputMode;
55
+ /**
56
+ * Offers the date picker alongside a field that can be typed into: an icon at the end of
57
+ * the field, and a panel that opens on focus. It means nothing in read-only mode, where
58
+ * the picker is already the only way to choose.
59
+ */
60
+ showPicker?: boolean;
61
+ /** The label above the field. */
62
+ label?: string;
63
+ /** A line of help under the field. */
64
+ hint?: string;
65
+ /** What the field says while empty. */
66
+ placeholder?: string;
67
+ /** The height of the field: 32, 40 or 48 pixels. */
68
+ size?: 'sm' | 'md' | 'lg';
69
+ /** Takes 4px off the height. */
70
+ compact?: boolean;
71
+ /** Makes the field unusable, greyed out through the colour tokens. */
72
+ disabled?: boolean;
73
+ /** Marks the field as invalid — for a rule of your own. */
74
+ invalid?: boolean;
75
+ /** Offers a cross that empties the value, shown before the end icon. */
76
+ clearable?: boolean;
77
+ /**
78
+ * The icon that opens the date picker, at the end of the field. The clear cross appears
79
+ * to its left rather than in its place, and no icon is rendered at all when there is no
80
+ * panel to open.
81
+ */
82
+ pickerIcon?: IconSource;
83
+ /**
84
+ * How the date is WRITTEN OUT in the field. It has no effect on a field being typed
85
+ * into, which necessarily shows the numeric form one types — so it concerns the
86
+ * read-only mode, and the period and list selections, which fall back to it.
87
+ */
88
+ displayFormat?: Intl.DateTimeFormatOptions;
89
+ /** Where the panel opens relative to the field. */
90
+ placement?: Placement;
91
+ }
92
+ type __VLS_Props = DateInputProps;
93
+ type __VLS_Slots = {
94
+ /** What a day cell shows, handed straight to the calendar. */
95
+ day?(props: {
96
+ iso: string;
97
+ day: number;
98
+ inMonth: boolean;
99
+ disabled: boolean;
100
+ selected: boolean;
101
+ today: boolean;
102
+ inRange: boolean;
103
+ events: DatePickerEvent[];
104
+ }): unknown;
105
+ /**
106
+ * The strip at the foot of the panel — actions, or preset dates such as "today". It
107
+ * receives `close`, which is what lets one of those buttons dismiss the panel.
108
+ */
109
+ footer?(props: {
110
+ close: () => void;
111
+ }): unknown;
112
+ };
113
+ type __VLS_ModelProps = {
114
+ modelValue?: DatePickerValue;
115
+ };
116
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
117
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
118
+ "update:modelValue": (value: DatePickerValue) => any;
119
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
120
+ "onUpdate:modelValue"?: ((value: DatePickerValue) => any) | undefined;
121
+ }>, {
122
+ label: string;
123
+ selection: DatePickerSelection;
124
+ placeholder: string;
125
+ size: "sm" | "md" | "lg";
126
+ placement: Placement;
127
+ mode: DateInputMode;
128
+ compact: boolean;
129
+ disabled: boolean;
130
+ invalid: boolean;
131
+ hint: string;
132
+ clearable: boolean;
133
+ max: string;
134
+ min: string;
135
+ locale: string;
136
+ firstDayOfWeek: number;
137
+ disabledDates: DateMatcher;
138
+ showAdjacentDays: boolean;
139
+ selectAdjacentDays: boolean;
140
+ events: DatePickerEvent[];
141
+ showPicker: boolean;
142
+ pickerIcon: IconSource;
143
+ displayFormat: Intl.DateTimeFormatOptions;
144
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
145
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
146
+ declare const _default: typeof __VLS_export;
147
+ export default _default;
148
+ type __VLS_WithSlots<T, S> = T & {
149
+ new (): {
150
+ $slots: S;
151
+ };
152
+ };
@@ -0,0 +1,9 @@
1
+ import './VDateInput.css';
2
+ import e from "./VDateInput.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region src/components/VDateInput/VDateInput.vue
5
+ var t = e;
6
+ //#endregion
7
+ export { t as default };
8
+
9
+ //# sourceMappingURL=VDateInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VDateInput.js","names":[],"sources":["../../../src/components/VDateInput/VDateInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, useId, watchEffect } from 'vue'\n\nimport VDatePicker from '../VDatePicker/VDatePicker.vue'\nimport type {\n DatePickerEvent,\n DatePickerSelection,\n DatePickerValue,\n DateMatcher,\n DateRange,\n} from '../VDatePicker/VDatePicker.vue'\nimport {\n caretAfterDigits,\n dateMaskFor,\n formatDateMask,\n formatDisplay,\n formatDisplayRange,\n isValidISO,\n isWithin,\n isoToMask,\n maskPlaceholder,\n parseDateMask,\n} from '../../utils/date'\nimport { digitsOf } from '../../utils/text'\nimport { resolveMatcher } from '../../utils/matcher'\nimport { isDev } from '../../utils/env'\nimport { calendar_today as calendarTodayIcon } from '../VIcon/icons/calendar_today'\nimport type { IconSource } from '../VIcon/types'\nimport VInput from '../VInput/VInput.vue'\nimport VPopover from '../VPopover/VPopover.vue'\n\nimport { useRootAttrs } from '../../composables/useRootAttrs'\n\nimport { useFieldPanel } from '../../composables/useFieldPanel'\nimport { useMaskedField } from '../../composables/useMaskedField'\nimport { useLocale, useMessages } from '../../i18n/state'\n\n// @a11y @core\n/**\n * A field for choosing a date: a text field, and a calendar in a panel below it.\n *\n * The panel is opened from code rather than by the browser, and that is not a detail: a\n * text input cannot be declared as the thing that opens a popover, and opening it\n * ourselves is also what lets the focus be moved INTO the calendar's grid, so the\n * keyboard lands where the dates are. Closing is ours too — the focus leaving the\n * component, or Escape.\n *\n * The field itself comes in two forms. It can be TYPED into, which is the default: the\n * reader types digits only and the separators appear as they go, in the order and with\n * the punctuation their language uses. Or it can be read-only, in which case the calendar\n * is the only way in.\n *\n * That is a different question from WHAT is being chosen — one date, a period, or several\n * dates — which is passed straight through to the calendar.\n */\ntype Placement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end'\n\n/** Whether the field can be typed into, or only filled from the calendar. */\nexport type DateInputMode = 'readonly' | 'input'\n\nconst MODES: DateInputMode[] = ['readonly', 'input']\n\n/**\n * The century a two-digit year is expanded into — \"10/06/26\" becomes 2026 — applied only\n * when the reader leaves the field.\n *\n * It is FIXED and never derived from the current year. A sliding rule would make the\n * component's behaviour depend on when it runs, which is the same objection that keeps\n * today's date out of VDatePicker's setup, and it would give the tests a shelf life.\n */\nconst YEAR_PIVOT = 2000\n\nconst DEFAULT_DISPLAY_FORMAT: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n}\n\ninterface DateInputProps {\n // Everything from here to `events` is handed straight to the calendar.\n /** What is being chosen: one date, a period between two, or several separate dates. */\n selection?: DatePickerSelection\n /**\n * A BCP 47 locale, which decides the month and day names, the first day of the week and\n * the order the field is typed in. It TAKES PRECEDENCE over the design system's global\n * locale and falls back to it — which is why it has no literal default: `undefined` has\n * to stay recognizable for the global locale to have its chance.\n */\n locale?: string\n /** Forces the day the weeks start on, from 0 for Sunday to 6 for Saturday. */\n firstDayOfWeek?: number\n /** The earliest date that can be chosen, as an ISO string. */\n min?: string\n /** The latest date that can be chosen, as an ISO string. */\n max?: string\n /** Dates that cannot be chosen, as a list or as a function. */\n disabledDates?: DateMatcher\n /** Fills the corners of the grid with the greyed days of the neighbouring months. */\n showAdjacentDays?: boolean\n /** Lets those neighbouring days be clicked, which implies showing them. */\n selectAdjacentDays?: boolean\n /** Events to mark under the days they fall on. */\n events?: DatePickerEvent[]\n // From here on: the field.\n /**\n * Whether the field can be TYPED into — the default, using the numeric form of the\n * reader's language — or is read-only, the calendar then being the only way in.\n *\n * Typing is reserved for choosing a SINGLE date: a period or a list falls back to\n * read-only, there being no sensible way to type either.\n */\n mode?: DateInputMode\n /**\n * Offers the date picker alongside a field that can be typed into: an icon at the end of\n * the field, and a panel that opens on focus. It means nothing in read-only mode, where\n * the picker is already the only way to choose.\n */\n showPicker?: boolean\n /** The label above the field. */\n label?: string\n /** A line of help under the field. */\n hint?: string\n /** What the field says while empty. */\n placeholder?: string\n /** The height of the field: 32, 40 or 48 pixels. */\n size?: 'sm' | 'md' | 'lg'\n /** Takes 4px off the height. */\n compact?: boolean\n /** Makes the field unusable, greyed out through the colour tokens. */\n disabled?: boolean\n /** Marks the field as invalid — for a rule of your own. */\n invalid?: boolean\n /** Offers a cross that empties the value, shown before the end icon. */\n clearable?: boolean\n /**\n * The icon that opens the date picker, at the end of the field. The clear cross appears\n * to its left rather than in its place, and no icon is rendered at all when there is no\n * panel to open.\n */\n pickerIcon?: IconSource\n /**\n * How the date is WRITTEN OUT in the field. It has no effect on a field being typed\n * into, which necessarily shows the numeric form one types — so it concerns the\n * read-only mode, and the period and list selections, which fall back to it.\n */\n displayFormat?: Intl.DateTimeFormatOptions\n /** Where the panel opens relative to the field. */\n placement?: Placement\n}\n\nconst props = withDefaults(defineProps<DateInputProps>(), {\n selection: 'single',\n locale: undefined,\n firstDayOfWeek: undefined,\n min: undefined,\n max: undefined,\n disabledDates: undefined,\n showAdjacentDays: false,\n selectAdjacentDays: false,\n events: undefined,\n // Deliberately left undefined rather than defaulted to the typed mode: that is what\n // distinguishes \"the prop was not given\" from \"the prop was given this value\", and\n // therefore what allows warning ONLY the consumer who explicitly asked for something\n // that cannot work.\n mode: undefined,\n showPicker: false,\n label: undefined,\n hint: undefined,\n placeholder: undefined,\n size: 'md',\n compact: false,\n disabled: false,\n invalid: false,\n clearable: true,\n pickerIcon: () => calendarTodayIcon,\n // Left undefined rather than defaulted to the format object, for the same reason: it is\n // what lets the component notice that a consumer has asked for a display format in a\n // mode where it has no effect, and say so.\n displayFormat: undefined,\n placement: 'bottom-start',\n})\n\nconst model = defineModel<DatePickerValue>({ default: null })\n\ndefineSlots<{\n /** What a day cell shows, handed straight to the calendar. */\n day?(props: {\n iso: string\n day: number\n inMonth: boolean\n disabled: boolean\n selected: boolean\n today: boolean\n inRange: boolean\n events: DatePickerEvent[]\n }): unknown\n /**\n * The strip at the foot of the panel — actions, or preset dates such as \"today\". It\n * receives `close`, which is what lets one of those buttons dismiss the panel.\n */\n footer?(props: { close: () => void }): unknown\n}>()\n\n// `class` and `style` stay on the wrapper; everything else goes down to the text field,\n// which is what a consumer's label points at and what assistive technology deals with.\ndefineOptions({ inheritAttrs: false })\nconst { rootClass, rootStyle, forwardedAttrs } = useRootAttrs()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst panelRef = ref<InstanceType<typeof VPopover> | null>(null)\nconst inputRef = ref<InstanceType<typeof VInput> | null>(null)\nconst pickerRef = ref<InstanceType<typeof VDatePicker> | null>(null)\nconst panelId = useId()\n\n/** The real input inside the field, which the mask and the caret work on. */\nconst fieldEl = computed<HTMLInputElement | null>(() => inputRef.value?.el ?? null)\n\n/** What was asked for, falling back to the default when nothing or nonsense was given. */\nconst requestedMode = computed<DateInputMode>(() =>\n props.mode !== undefined && MODES.includes(props.mode) ? props.mode : 'input',\n)\n/**\n * What is actually used. Typing is only possible for a single date: a period or a list\n * has no form one could type into a single field.\n */\nconst resolvedMode = computed<DateInputMode>(() =>\n requestedMode.value === 'input' && props.selection === 'single' ? 'input' : 'readonly',\n)\nconst typing = computed(() => resolvedMode.value === 'input')\n\n/**\n * Whether there is a panel at all. The calendar is only optional beside a field one can\n * type into: read-only, it is the only way to choose anything.\n */\nconst hasPanel = computed(() => !typing.value || props.showPicker)\n\n// @devwarn\nif (isDev) {\n watchEffect(() => {\n if (props.mode !== undefined && !MODES.includes(props.mode))\n console.warn(\n `[VDateInput] unknown mode \"${props.mode}\": use \"input\" (the default) or \"readonly\".`,\n )\n // Tested on the PROP and not on what was resolved from it: typing being the default,\n // a period or a list falls back on its own with nobody having asked for anything.\n // Only a consumer who explicitly asked to type deserves to be told it cannot work.\n if (props.mode === 'input' && props.selection !== 'single')\n console.warn(\n `[VDateInput] mode=\"input\" ignored in \"${props.selection}\" selection: a range or a list of dates cannot be typed on the keyboard.`,\n )\n // Here it is the RESOLVED mode that matters: the format really was supplied, and it\n // really will have no effect, whichever route led to a typed field. The warning stays\n // something the consumer can act on.\n if (props.displayFormat && typing.value)\n console.warn(\n '[VDateInput] displayFormat is ignored in \"input\" mode (the default): the field displays the locale\\'s numeric mask, the only typeable format. Pass mode=\"readonly\" for a formatted display.',\n )\n })\n}\n\n// The whole \"field plus panel\" shell, shared with VTimeInput: opening and closing, the\n// focus leaving the component, a click on the field, and the Escape, ArrowDown and Enter\n// keys.\nconst { open, openPanel, closePanel, onControlClick, onFocusout, onKeydown, onPanelMousedown } =\n useFieldPanel({\n rootEl,\n panelRef,\n fieldEl: inputRef,\n // With no panel there is nothing to open. This is the composable's SINGLE cut-off\n // point, and every way in passes through it — clicking the field, focusing it, the\n // down arrow, Enter, the icon — so the condition never has to be repeated in a\n // handler.\n disabled: () => props.disabled || !hasPanel.value,\n focusInPanel: () => pickerRef.value?.focus(),\n // Beside a field one types into, the panel opens WITHOUT taking the focus: typing\n // carries on in the field, and the down arrow remains the way into the grid.\n focusOnOpen: () => !typing.value,\n })\n\nconst hasValue = computed(() => {\n if (props.selection === 'multiple') return Array.isArray(model.value) && model.value.length > 0\n if (props.selection === 'range') {\n const r = model.value as DateRange | null\n return !!(r && (r.start || r.end))\n }\n return typeof model.value === 'string' && !!model.value\n})\n\nconst vectisLocale = useLocale()\n/* The prop wins, and the design system's global locale is what it falls back to.\n\n TRAP — this component is the SINGLE place that resolution happens: what flows down to\n the calendar is the RESULT, never the prop, which would usually be undefined and would\n have the calendar resolve the language a second time — with every chance of the two\n disagreeing after a later change. */\nconst resolvedLocale = computed(() => props.locale ?? vectisLocale.value)\n\nconst displayText = computed(() => {\n const locale = resolvedLocale.value\n const displayFormat = props.displayFormat ?? DEFAULT_DISPLAY_FORMAT\n if (props.selection === 'single') {\n return typeof model.value === 'string' && isValidISO(model.value)\n ? formatDisplay(model.value, locale, displayFormat)\n : ''\n }\n if (props.selection === 'range') {\n const r = model.value as DateRange | null\n if (!r?.start) return ''\n if (!r.end) return formatDisplay(r.start, locale, displayFormat)\n return formatDisplayRange(r.start, r.end, locale, displayFormat)\n }\n const list = Array.isArray(model.value) ? model.value : []\n return list.map((iso) => formatDisplay(iso, locale, displayFormat)).join(', ')\n})\n\n/* From here on: everything the typed field needs. */\n\nconst mask = computed(() => dateMaskFor(resolvedLocale.value))\nconst maskHint = computed(() => maskPlaceholder(resolvedLocale.value, mask.value))\nconst isDisabledDate = computed(() => resolveMatcher(props.disabledDates))\n\n/**\n * Whether a date the reader has finished typing may actually be taken: it has to fall\n * within the allowed bounds and not be one of the excluded days.\n */\nconst acceptable = (iso: string) =>\n isWithin(iso, props.min, props.max) && !isDisabledDate.value(iso)\n\n/*\n * The mask machinery — the text being typed, the bridge to the value, the reformatting\n * that preserves the caret, the commit as soon as the date is complete and the silent\n * revert when it is not — is shared with VTimeInput and lives in `useMaskedField`.\n *\n * What is injected here is the date VOCABULARY alone: the order of the fields, the\n * separator between them and their widths, all derived from the reader's language.\n */\nconst { draft, fieldModel, writeField, commitLive, commitOrRevert, onFieldInput } = useMaskedField({\n fieldEl,\n typing: () => typing.value,\n displayText: () => displayText.value,\n readValue: () =>\n typeof model.value === 'string' && isValidISO(model.value) ? model.value : null,\n writeValue: (iso) => {\n model.value = iso\n },\n maxDigits: () => mask.value.size,\n format: (digits) => formatDateMask(digits, mask.value),\n caret: (text, digitsBefore, inserting) =>\n caretAfterDigits(text, digitsBefore, inserting ? mask.value.separator : undefined),\n // A two-digit year is only expanded on the FINAL commit, when the reader leaves the\n // field — never while they are still typing, where \"26\" may well be on its way to\n // becoming \"2026\".\n parse: (text, final) =>\n parseDateMask(text, mask.value, final ? { yearPivot: YEAR_PIVOT } : undefined),\n toMask: (iso) => (iso ? isoToMask(iso, mask.value) : ''),\n acceptable,\n})\n\n/**\n * Typing anything that is not a digit — a slash, a dot, a space — completes the field\n * being typed with a leading zero and moves on to the next. It is what lets someone type\n * \"5/6/2026\" and get the same result as typing all eight digits.\n *\n * It applies to the day and the month only: a year cut short has no such convention, \"26\"\n * being neither 0026 nor 2026 until the reader has finished.\n */\nfunction padCurrentField(el: HTMLInputElement) {\n const start = el.selectionStart ?? el.value.length\n const before = digitsOf(el.value.slice(0, start)).length\n const digits = digitsOf(el.value)\n let offset = 0\n for (let k = 0; k < mask.value.order.length; k++) {\n const len = mask.value.lengths[k] as number\n if (before < offset + len) {\n const filled = before - offset\n if (mask.value.order[k] === 'year' || filled !== len - 1) return\n const next = digits.slice(0, offset) + '0'.repeat(len - filled) + digits.slice(offset)\n const text = formatDateMask(next.slice(0, mask.value.size), mask.value)\n writeField(text, caretAfterDigits(text, offset + len, mask.value.separator))\n return\n }\n offset += len\n }\n}\n\n// @keyboard @core — the keys the mask itself needs: completing a field with a separator,\n// erasing across one, and the down arrow, which is the one explicit way from the field\n// into the calendar.\nfunction onFieldKeydown(event: KeyboardEvent) {\n if (!typing.value) return\n const el = fieldEl.value\n if (!el) return\n\n if (event.key === 'Enter') {\n // Cancelling the default does two things at once: it stops the surrounding form from\n // being submitted, and it stops the panel this keystroke has just closed from being\n // reopened as the event travels up to the root.\n event.preventDefault()\n commitOrRevert()\n if (open.value) closeAndFocus()\n return\n }\n if (event.key === 'ArrowDown' && open.value) {\n // The one explicit route from the field into the grid of days.\n event.preventDefault()\n pickerRef.value?.focus()\n return\n }\n if (event.key === 'Backspace') {\n const start = el.selectionStart\n if (\n start !== null &&\n start === el.selectionEnd &&\n start > 0 &&\n !/\\d/.test(el.value[start - 1] ?? '')\n ) {\n // TRAP — a separator is PLACED by the mask and never typed, so erasing one has to\n // erase the DIGIT before it, which is what the reader believes they are erasing.\n // Left alone, the mask would write the separator straight back and the key would\n // look dead.\n event.preventDefault()\n const n = digitsOf(el.value.slice(0, start)).length\n const digits = digitsOf(el.value)\n const text = formatDateMask(digits.slice(0, n - 1) + digits.slice(n), mask.value)\n writeField(text, caretAfterDigits(text, n - 1))\n commitLive()\n }\n return\n }\n if (\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !/\\d/.test(event.key)\n ) {\n event.preventDefault()\n padCurrentField(el)\n }\n}\n\n/**\n * Pasting. A date recognizable as a whole — in the ISO form, or already written the way\n * this field writes them — is adopted as it stands; anything else contributes its digits\n * alone.\n *\n * Without this, pasting \"2026-06-10\" into a field expecting day, month, year would\n * produce \"20/26/0610\": the digits would be taken in order and the separators ignored.\n */\nfunction onFieldPaste(event: ClipboardEvent) {\n if (!typing.value) return\n const el = fieldEl.value\n if (!el) return\n event.preventDefault()\n const pasted = (event.clipboardData?.getData('text') ?? '').trim()\n const iso = isValidISO(pasted)\n ? pasted\n : parseDateMask(pasted, mask.value, { yearPivot: YEAR_PIVOT })\n if (iso) {\n const text = isoToMask(iso, mask.value)\n writeField(text, text.length)\n commitLive()\n return\n }\n const start = el.selectionStart ?? el.value.length\n const end = el.selectionEnd ?? start\n const digits = digitsOf(el.value)\n const from = digitsOf(el.value.slice(0, start)).length\n const to = digitsOf(el.value.slice(0, end)).length\n const inserted = digitsOf(pasted)\n const next = (digits.slice(0, from) + inserted + digits.slice(to)).slice(0, mask.value.size)\n const text = formatDateMask(next, mask.value)\n writeField(text, caretAfterDigits(text, Math.min(from + inserted.length, next.length)))\n commitLive()\n}\n\n// @a11y\n/**\n * TRAP — closing the panel hands the focus back to the field, and beside a field one\n * types into the panel opens ON FOCUS: the two would chase each other and the panel would\n * never close.\n *\n * This lock covers the focus call, which is synchronous. EVERY close that returns the\n * focus must go through here; closing directly brings the loop straight back.\n */\nlet refocusing = false\nfunction closeAndFocus() {\n refocusing = true\n closePanel(true)\n refocusing = false\n}\n\nfunction onFieldFocus() {\n if (!typing.value || refocusing) return\n openPanel(false)\n}\n\n// @keyboard @a11y\nfunction onRootKeydown(event: KeyboardEvent) {\n if (typing.value && event.key === 'Escape' && open.value) {\n event.preventDefault()\n closeAndFocus()\n return\n }\n onKeydown(event)\n}\n\n/*\n * The clear cross is the field's own, which renders it BEFORE the end icon rather than in\n * its place — the convention every field in the design system follows, so the two live\n * side by side.\n *\n * Whether it is shown has to be answered explicitly here: outside the typed mode the field\n * is read-only, and a read-only field hides its cross by default, rightly so — but here\n * the value comes from the panel, so there is something to clear all the same.\n */\nconst canClear = computed(\n () => props.clearable && !props.disabled && (hasValue.value || (typing.value && !!draft.value)),\n)\nconst endIcon = computed<IconSource | undefined>(() =>\n hasPanel.value ? props.pickerIcon : undefined,\n)\n// @a11y @devwarn\n/*\n * TRAP — the LABEL is defined at all times, even when no icon is rendered at all.\n *\n * The helper detecting a click handler on an icon warns AT SETUP if one is attached\n * without a label, and it has no way of knowing whether an icon exists. Since the\n * listener here is attached permanently and that detection is static, making the label\n * conditional would produce a false warning every time a field without a calendar is\n * mounted.\n *\n * The wording itself has no prop: the dictionary is where it is changed — see `src/i18n/`.\n */\nconst m = useMessages()\n\nconst endIconLabel = computed(() => m.value.dateInput.open)\n\nfunction onEndIcon() {\n if (open.value) closeAndFocus()\n // Clicking the icon is an explicit request for the calendar, and the focus has already\n // left the field for the button — so carrying it into the grid is right in both modes.\n else openPanel(true)\n}\n// @a11y\n/*\n * Emptying the value, called by the field as it emits its clear event.\n *\n * TRAP — the focus is taken here, under the lock, on purpose: the field focuses itself\n * immediately afterwards, and focusing an element that ALREADY has the focus emits no\n * event at all. That is what stops the panel reopening. Taking the lock away from this\n * function brings the reopening straight back.\n */\nfunction clearValue() {\n model.value =\n props.selection === 'multiple'\n ? []\n : props.selection === 'range'\n ? { start: null, end: null }\n : null\n // The typed text is emptied EXPLICITLY: when the value was already empty, nothing\n // changes, and the guard that keeps the field and the value from chasing each other\n // would leave the text where it was.\n if (typing.value) writeField('')\n refocusing = true\n inputRef.value?.focus()\n refocusing = false\n}\n\n/**\n * A date was chosen in the calendar. Choosing ONE date finishes the job, so the panel\n * closes; a period or a list is still being built and it stays open.\n */\nfunction onSelect() {\n if (props.selection === 'single') closeAndFocus()\n}\n\nconst close = () => closeAndFocus()\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"v-date-input\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-open=\"open ? '' : undefined\"\n :data-mode=\"resolvedMode\"\n @focusout=\"onFocusout\"\n @keydown=\"onRootKeydown\"\n >\n <div class=\"v-date-input-control\" @click=\"onControlClick\">\n <!-- The field is declared a combobox rather than left as the plain text box it\n implicitly is, because a text box may not carry the attribute saying whether\n something is expanded — and a text field with a panel attached IS the combobox\n pattern, the same role VCombobox gives its own field.\n\n The role and the three attributes are all conditioned on the SAME thing, so the\n role never appears without the expanded state it requires, and nothing ever\n points at a panel that was not rendered. -->\n <VInput\n ref=\"inputRef\"\n v-model=\"fieldModel\"\n :inputmode=\"typing ? 'numeric' : undefined\"\n :autocomplete=\"typing ? 'off' : undefined\"\n v-bind=\"forwardedAttrs\"\n :readonly=\"!typing\"\n :label=\"label\"\n :hint=\"hint\"\n :placeholder=\"placeholder ?? (typing ? maskHint : undefined)\"\n :size=\"size\"\n :compact=\"compact\"\n :disabled=\"disabled\"\n :invalid=\"invalid\"\n :clearable=\"clearable\"\n :clear-visible=\"canClear\"\n :clear-label=\"m.dateInput.clear\"\n :icon-end=\"endIcon\"\n :icon-end-label=\"endIconLabel\"\n :role=\"hasPanel ? 'combobox' : undefined\"\n :aria-haspopup=\"hasPanel ? 'dialog' : undefined\"\n :aria-expanded=\"hasPanel ? open : undefined\"\n :aria-controls=\"hasPanel ? panelId : undefined\"\n @click:icon-end=\"onEndIcon\"\n @clear=\"clearValue\"\n @focus=\"onFieldFocus\"\n @input=\"onFieldInput\"\n @change=\"commitOrRevert\"\n @blur=\"commitOrRevert\"\n @keydown=\"onFieldKeydown\"\n @paste=\"onFieldPaste\"\n />\n </div>\n\n <!-- With no panel rendered there is nothing to hold a reference to, and the open state\n — which is fed by the panel's own events — can no longer become true. The absence\n of a panel is therefore self-enforcing. -->\n <VPopover\n v-if=\"hasPanel\"\n :id=\"panelId\"\n ref=\"panelRef\"\n v-model:open=\"open\"\n mode=\"manual\"\n anchor=\"--date-input-anchor\"\n :placement=\"placement\"\n surface\n role=\"dialog\"\n :aria-label=\"label ?? m.dateInput.label\"\n class=\"v-date-input-panel\"\n @mousedown=\"onPanelMousedown\"\n >\n <VDatePicker\n ref=\"pickerRef\"\n v-model=\"model\"\n :selection=\"selection\"\n :locale=\"resolvedLocale\"\n :first-day-of-week=\"firstDayOfWeek\"\n :min=\"min\"\n :max=\"max\"\n :disabled-dates=\"disabledDates\"\n :show-adjacent-days=\"showAdjacentDays\"\n :select-adjacent-days=\"selectAdjacentDays\"\n :events=\"events\"\n @select=\"onSelect\"\n >\n <template v-if=\"$slots.day\" #day=\"slotProps\">\n <slot name=\"day\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.footer\" #footer>\n <slot name=\"footer\" :close=\"close\" />\n </template>\n </VDatePicker>\n </VPopover>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-date-input {\n /* Confines the anchor to this instance (the root = the common ancestor of the\n control and the panel) */\n anchor-scope: --date-input-anchor;\n display: block;\n width: 100%;\n font-family: var(--vectis-text-family);\n }\n\n .v-date-input-control {\n anchor-name: --date-input-anchor;\n display: block;\n cursor: pointer;\n }\n\n /* Input mode: the field is editable, and the <input>'s text caret takes over from the\n control's `pointer` (which signals \"this opens a panel\"). The mask has a fixed width:\n tabular figures, otherwise the caret jitters from one digit to the next. */\n .v-date-input[data-mode='input'] .v-date-input-control {\n cursor: text;\n }\n\n .v-date-input[data-mode='input'] .v-input-control {\n font-variant-numeric: tabular-nums;\n }\n\n /* `position-anchor` and the chrome come from VPopover (the `anchor` and `surface`\n props, the latter setting `.v-panel`): only the dimensions are left here, which\n `panel.css` deliberately does not carry. The padding is cancelled — VDatePicker handles\n its own breathing room; compounded with `.v-popover-panel` (VPopover puts both\n classes on the same element) because `.v-panel` declares `padding` too, and at\n equal specificity the winner would depend on the order in which the consumer's\n bundler concatenates the CSS. */\n .v-popover-panel.v-date-input-panel {\n width: max-content;\n padding: 0;\n }\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,324 @@
1
+ import { useLocale as e, useMessages as t } from "../../i18n/state.js";
2
+ import n from "../VPopover/VPopover.js";
3
+ import { resolveMatcher as r } from "../../utils/matcher.js";
4
+ import { useRootAttrs as i } from "../../composables/useRootAttrs.js";
5
+ import a from "../VInput/VInput.js";
6
+ import { digitsOf as o } from "../../utils/text.js";
7
+ import { caretAfterDigits as s, dateMaskFor as c, formatDateMask as l, formatDisplay as u, formatDisplayRange as d, isValidISO as f, isWithin as p, isoToMask as m, maskPlaceholder as h, parseDateMask as g } from "../../utils/date.js";
8
+ import _ from "../VDatePicker/VDatePicker.js";
9
+ import { calendar_today as v } from "../VIcon/icons/calendar_today.js";
10
+ import { useFieldPanel as ee } from "../../composables/useFieldPanel.js";
11
+ import { useMaskedField as te } from "../../composables/useMaskedField.js";
12
+ import { computed as y, createBlock as ne, createCommentVNode as re, createElementBlock as ie, createElementVNode as ae, createSlots as oe, createVNode as b, defineComponent as x, guardReactiveProps as se, isRef as S, mergeModels as C, mergeProps as ce, normalizeClass as le, normalizeProps as ue, normalizeStyle as de, openBlock as w, ref as T, renderSlot as E, unref as D, useId as fe, useModel as pe, withCtx as O } from "vue";
13
+ //#region src/components/VDateInput/VDateInput.vue?vue&type=script&setup=true&lang.ts
14
+ var me = ["data-open", "data-mode"], k = 2e3, A = /*@__PURE__*/ x({
15
+ inheritAttrs: !1,
16
+ __name: "VDateInput",
17
+ props: /*@__PURE__*/ C({
18
+ selection: { default: "single" },
19
+ locale: { default: void 0 },
20
+ firstDayOfWeek: { default: void 0 },
21
+ min: { default: void 0 },
22
+ max: { default: void 0 },
23
+ disabledDates: {
24
+ type: [Array, Function],
25
+ default: void 0
26
+ },
27
+ showAdjacentDays: {
28
+ type: Boolean,
29
+ default: !1
30
+ },
31
+ selectAdjacentDays: {
32
+ type: Boolean,
33
+ default: !1
34
+ },
35
+ events: { default: void 0 },
36
+ mode: { default: void 0 },
37
+ showPicker: {
38
+ type: Boolean,
39
+ default: !1
40
+ },
41
+ label: { default: void 0 },
42
+ hint: { default: void 0 },
43
+ placeholder: { default: void 0 },
44
+ size: { default: "md" },
45
+ compact: {
46
+ type: Boolean,
47
+ default: !1
48
+ },
49
+ disabled: {
50
+ type: Boolean,
51
+ default: !1
52
+ },
53
+ invalid: {
54
+ type: Boolean,
55
+ default: !1
56
+ },
57
+ clearable: {
58
+ type: Boolean,
59
+ default: !0
60
+ },
61
+ pickerIcon: { default: () => v },
62
+ displayFormat: { default: void 0 },
63
+ placement: { default: "bottom-start" }
64
+ }, {
65
+ modelValue: { default: null },
66
+ modelModifiers: {}
67
+ }),
68
+ emits: ["update:modelValue"],
69
+ setup(v) {
70
+ let x = ["readonly", "input"], C = {
71
+ day: "numeric",
72
+ month: "short",
73
+ year: "numeric"
74
+ }, A = v, j = pe(v, "modelValue"), { rootClass: he, rootStyle: ge, forwardedAttrs: _e } = i(), M = T(null), N = T(null), P = T(null), F = T(null), I = fe(), L = y(() => P.value?.el ?? null), ve = y(() => A.mode !== void 0 && x.includes(A.mode) ? A.mode : "input"), R = y(() => ve.value === "input" && A.selection === "single" ? "input" : "readonly"), z = y(() => R.value === "input"), B = y(() => !z.value || A.showPicker), { open: V, openPanel: H, closePanel: ye, onControlClick: U, onFocusout: W, onKeydown: be, onPanelMousedown: xe } = ee({
75
+ rootEl: M,
76
+ panelRef: N,
77
+ fieldEl: P,
78
+ disabled: () => A.disabled || !B.value,
79
+ focusInPanel: () => F.value?.focus(),
80
+ focusOnOpen: () => !z.value
81
+ }), Se = y(() => {
82
+ if (A.selection === "multiple") return Array.isArray(j.value) && j.value.length > 0;
83
+ if (A.selection === "range") {
84
+ let e = j.value;
85
+ return !!(e && (e.start || e.end));
86
+ }
87
+ return typeof j.value == "string" && !!j.value;
88
+ }), Ce = e(), G = y(() => A.locale ?? Ce.value), we = y(() => {
89
+ let e = G.value, t = A.displayFormat ?? C;
90
+ if (A.selection === "single") return typeof j.value == "string" && f(j.value) ? u(j.value, e, t) : "";
91
+ if (A.selection === "range") {
92
+ let n = j.value;
93
+ return n?.start ? n.end ? d(n.start, n.end, e, t) : u(n.start, e, t) : "";
94
+ }
95
+ return (Array.isArray(j.value) ? j.value : []).map((n) => u(n, e, t)).join(", ");
96
+ }), K = y(() => c(G.value)), Te = y(() => h(G.value, K.value)), Ee = y(() => r(A.disabledDates)), { draft: De, fieldModel: q, writeField: J, commitLive: Y, commitOrRevert: X, onFieldInput: Oe } = te({
97
+ fieldEl: L,
98
+ typing: () => z.value,
99
+ displayText: () => we.value,
100
+ readValue: () => typeof j.value == "string" && f(j.value) ? j.value : null,
101
+ writeValue: (e) => {
102
+ j.value = e;
103
+ },
104
+ maxDigits: () => K.value.size,
105
+ format: (e) => l(e, K.value),
106
+ caret: (e, t, n) => s(e, t, n ? K.value.separator : void 0),
107
+ parse: (e, t) => g(e, K.value, t ? { yearPivot: k } : void 0),
108
+ toMask: (e) => e ? m(e, K.value) : "",
109
+ acceptable: (e) => p(e, A.min, A.max) && !Ee.value(e)
110
+ });
111
+ function ke(e) {
112
+ let t = e.selectionStart ?? e.value.length, n = o(e.value.slice(0, t)).length, r = o(e.value), i = 0;
113
+ for (let e = 0; e < K.value.order.length; e++) {
114
+ let t = K.value.lengths[e];
115
+ if (n < i + t) {
116
+ let a = n - i;
117
+ if (K.value.order[e] === "year" || a !== t - 1) return;
118
+ let o = l((r.slice(0, i) + "0".repeat(t - a) + r.slice(i)).slice(0, K.value.size), K.value);
119
+ J(o, s(o, i + t, K.value.separator));
120
+ return;
121
+ }
122
+ i += t;
123
+ }
124
+ }
125
+ function Ae(e) {
126
+ if (!z.value) return;
127
+ let t = L.value;
128
+ if (t) {
129
+ if (e.key === "Enter") {
130
+ e.preventDefault(), X(), V.value && Q();
131
+ return;
132
+ }
133
+ if (e.key === "ArrowDown" && V.value) {
134
+ e.preventDefault(), F.value?.focus();
135
+ return;
136
+ }
137
+ if (e.key === "Backspace") {
138
+ let n = t.selectionStart;
139
+ if (n !== null && n === t.selectionEnd && n > 0 && !/\d/.test(t.value[n - 1] ?? "")) {
140
+ e.preventDefault();
141
+ let r = o(t.value.slice(0, n)).length, i = o(t.value), a = l(i.slice(0, r - 1) + i.slice(r), K.value);
142
+ J(a, s(a, r - 1)), Y();
143
+ }
144
+ return;
145
+ }
146
+ e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey && !/\d/.test(e.key) && (e.preventDefault(), ke(t));
147
+ }
148
+ }
149
+ function je(e) {
150
+ if (!z.value) return;
151
+ let t = L.value;
152
+ if (!t) return;
153
+ e.preventDefault();
154
+ let n = (e.clipboardData?.getData("text") ?? "").trim(), r = f(n) ? n : g(n, K.value, { yearPivot: k });
155
+ if (r) {
156
+ let e = m(r, K.value);
157
+ J(e, e.length), Y();
158
+ return;
159
+ }
160
+ let i = t.selectionStart ?? t.value.length, a = t.selectionEnd ?? i, c = o(t.value), u = o(t.value.slice(0, i)).length, d = o(t.value.slice(0, a)).length, p = o(n), h = (c.slice(0, u) + p + c.slice(d)).slice(0, K.value.size), _ = l(h, K.value);
161
+ J(_, s(_, Math.min(u + p.length, h.length))), Y();
162
+ }
163
+ let Z = !1;
164
+ function Q() {
165
+ Z = !0, ye(!0), Z = !1;
166
+ }
167
+ function Me() {
168
+ !z.value || Z || H(!1);
169
+ }
170
+ function Ne(e) {
171
+ if (z.value && e.key === "Escape" && V.value) {
172
+ e.preventDefault(), Q();
173
+ return;
174
+ }
175
+ be(e);
176
+ }
177
+ let Pe = y(() => A.clearable && !A.disabled && (Se.value || z.value && !!De.value)), Fe = y(() => B.value ? A.pickerIcon : void 0), $ = t(), Ie = y(() => $.value.dateInput.open);
178
+ function Le() {
179
+ V.value ? Q() : H(!0);
180
+ }
181
+ function Re() {
182
+ j.value = A.selection === "multiple" ? [] : A.selection === "range" ? {
183
+ start: null,
184
+ end: null
185
+ } : null, z.value && J(""), Z = !0, P.value?.focus(), Z = !1;
186
+ }
187
+ function ze() {
188
+ A.selection === "single" && Q();
189
+ }
190
+ let Be = () => Q();
191
+ return (e, t) => (w(), ie("div", {
192
+ ref_key: "rootEl",
193
+ ref: M,
194
+ class: le(["v-date-input", D(he)]),
195
+ style: de(D(ge)),
196
+ "data-open": D(V) ? "" : void 0,
197
+ "data-mode": R.value,
198
+ onFocusout: t[4] ||= (...e) => D(W) && D(W)(...e),
199
+ onKeydown: Ne
200
+ }, [ae("div", {
201
+ class: "v-date-input-control",
202
+ onClick: t[1] ||= (...e) => D(U) && D(U)(...e)
203
+ }, [b(a, ce({
204
+ ref_key: "inputRef",
205
+ ref: P,
206
+ modelValue: D(q),
207
+ "onUpdate:modelValue": t[0] ||= (e) => S(q) ? q.value = e : null,
208
+ inputmode: z.value ? "numeric" : void 0,
209
+ autocomplete: z.value ? "off" : void 0
210
+ }, D(_e), {
211
+ readonly: !z.value,
212
+ label: v.label,
213
+ hint: v.hint,
214
+ placeholder: v.placeholder ?? (z.value ? Te.value : void 0),
215
+ size: v.size,
216
+ compact: v.compact,
217
+ disabled: v.disabled,
218
+ invalid: v.invalid,
219
+ clearable: v.clearable,
220
+ "clear-visible": Pe.value,
221
+ "clear-label": D($).dateInput.clear,
222
+ "icon-end": Fe.value,
223
+ "icon-end-label": Ie.value,
224
+ role: B.value ? "combobox" : void 0,
225
+ "aria-haspopup": B.value ? "dialog" : void 0,
226
+ "aria-expanded": B.value ? D(V) : void 0,
227
+ "aria-controls": B.value ? D(I) : void 0,
228
+ "onClick:iconEnd": Le,
229
+ onClear: Re,
230
+ onFocus: Me,
231
+ onInput: D(Oe),
232
+ onChange: D(X),
233
+ onBlur: D(X),
234
+ onKeydown: Ae,
235
+ onPaste: je
236
+ }), null, 16, [
237
+ "modelValue",
238
+ "inputmode",
239
+ "autocomplete",
240
+ "readonly",
241
+ "label",
242
+ "hint",
243
+ "placeholder",
244
+ "size",
245
+ "compact",
246
+ "disabled",
247
+ "invalid",
248
+ "clearable",
249
+ "clear-visible",
250
+ "clear-label",
251
+ "icon-end",
252
+ "icon-end-label",
253
+ "role",
254
+ "aria-haspopup",
255
+ "aria-expanded",
256
+ "aria-controls",
257
+ "onInput",
258
+ "onChange",
259
+ "onBlur"
260
+ ])]), B.value ? (w(), ne(n, {
261
+ key: 0,
262
+ id: D(I),
263
+ ref_key: "panelRef",
264
+ ref: N,
265
+ open: D(V),
266
+ "onUpdate:open": t[3] ||= (e) => S(V) ? V.value = e : null,
267
+ mode: "manual",
268
+ anchor: "--date-input-anchor",
269
+ placement: v.placement,
270
+ surface: "",
271
+ role: "dialog",
272
+ "aria-label": v.label ?? D($).dateInput.label,
273
+ class: "v-date-input-panel",
274
+ onMousedown: D(xe)
275
+ }, {
276
+ default: O(() => [b(_, {
277
+ ref_key: "pickerRef",
278
+ ref: F,
279
+ modelValue: j.value,
280
+ "onUpdate:modelValue": t[2] ||= (e) => j.value = e,
281
+ selection: v.selection,
282
+ locale: G.value,
283
+ "first-day-of-week": v.firstDayOfWeek,
284
+ min: v.min,
285
+ max: v.max,
286
+ "disabled-dates": v.disabledDates,
287
+ "show-adjacent-days": v.showAdjacentDays,
288
+ "select-adjacent-days": v.selectAdjacentDays,
289
+ events: v.events,
290
+ onSelect: ze
291
+ }, oe({ _: 2 }, [e.$slots.day ? {
292
+ name: "day",
293
+ fn: O((t) => [E(e.$slots, "day", ue(se(t)))]),
294
+ key: "0"
295
+ } : void 0, e.$slots.footer ? {
296
+ name: "footer",
297
+ fn: O(() => [E(e.$slots, "footer", { close: Be })]),
298
+ key: "1"
299
+ } : void 0]), 1032, [
300
+ "modelValue",
301
+ "selection",
302
+ "locale",
303
+ "first-day-of-week",
304
+ "min",
305
+ "max",
306
+ "disabled-dates",
307
+ "show-adjacent-days",
308
+ "select-adjacent-days",
309
+ "events"
310
+ ])]),
311
+ _: 3
312
+ }, 8, [
313
+ "id",
314
+ "open",
315
+ "placement",
316
+ "aria-label",
317
+ "onMousedown"
318
+ ])) : re("", !0)], 46, me));
319
+ }
320
+ });
321
+ //#endregion
322
+ export { A as default };
323
+
324
+ //# sourceMappingURL=VDateInput.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VDateInput.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/VDateInput/VDateInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, useId, watchEffect } from 'vue'\n\nimport VDatePicker from '../VDatePicker/VDatePicker.vue'\nimport type {\n DatePickerEvent,\n DatePickerSelection,\n DatePickerValue,\n DateMatcher,\n DateRange,\n} from '../VDatePicker/VDatePicker.vue'\nimport {\n caretAfterDigits,\n dateMaskFor,\n formatDateMask,\n formatDisplay,\n formatDisplayRange,\n isValidISO,\n isWithin,\n isoToMask,\n maskPlaceholder,\n parseDateMask,\n} from '../../utils/date'\nimport { digitsOf } from '../../utils/text'\nimport { resolveMatcher } from '../../utils/matcher'\nimport { isDev } from '../../utils/env'\nimport { calendar_today as calendarTodayIcon } from '../VIcon/icons/calendar_today'\nimport type { IconSource } from '../VIcon/types'\nimport VInput from '../VInput/VInput.vue'\nimport VPopover from '../VPopover/VPopover.vue'\n\nimport { useRootAttrs } from '../../composables/useRootAttrs'\n\nimport { useFieldPanel } from '../../composables/useFieldPanel'\nimport { useMaskedField } from '../../composables/useMaskedField'\nimport { useLocale, useMessages } from '../../i18n/state'\n\n// @a11y @core\n/**\n * A field for choosing a date: a text field, and a calendar in a panel below it.\n *\n * The panel is opened from code rather than by the browser, and that is not a detail: a\n * text input cannot be declared as the thing that opens a popover, and opening it\n * ourselves is also what lets the focus be moved INTO the calendar's grid, so the\n * keyboard lands where the dates are. Closing is ours too — the focus leaving the\n * component, or Escape.\n *\n * The field itself comes in two forms. It can be TYPED into, which is the default: the\n * reader types digits only and the separators appear as they go, in the order and with\n * the punctuation their language uses. Or it can be read-only, in which case the calendar\n * is the only way in.\n *\n * That is a different question from WHAT is being chosen — one date, a period, or several\n * dates — which is passed straight through to the calendar.\n */\ntype Placement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end'\n\n/** Whether the field can be typed into, or only filled from the calendar. */\nexport type DateInputMode = 'readonly' | 'input'\n\nconst MODES: DateInputMode[] = ['readonly', 'input']\n\n/**\n * The century a two-digit year is expanded into — \"10/06/26\" becomes 2026 — applied only\n * when the reader leaves the field.\n *\n * It is FIXED and never derived from the current year. A sliding rule would make the\n * component's behaviour depend on when it runs, which is the same objection that keeps\n * today's date out of VDatePicker's setup, and it would give the tests a shelf life.\n */\nconst YEAR_PIVOT = 2000\n\nconst DEFAULT_DISPLAY_FORMAT: Intl.DateTimeFormatOptions = {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n}\n\ninterface DateInputProps {\n // Everything from here to `events` is handed straight to the calendar.\n /** What is being chosen: one date, a period between two, or several separate dates. */\n selection?: DatePickerSelection\n /**\n * A BCP 47 locale, which decides the month and day names, the first day of the week and\n * the order the field is typed in. It TAKES PRECEDENCE over the design system's global\n * locale and falls back to it — which is why it has no literal default: `undefined` has\n * to stay recognizable for the global locale to have its chance.\n */\n locale?: string\n /** Forces the day the weeks start on, from 0 for Sunday to 6 for Saturday. */\n firstDayOfWeek?: number\n /** The earliest date that can be chosen, as an ISO string. */\n min?: string\n /** The latest date that can be chosen, as an ISO string. */\n max?: string\n /** Dates that cannot be chosen, as a list or as a function. */\n disabledDates?: DateMatcher\n /** Fills the corners of the grid with the greyed days of the neighbouring months. */\n showAdjacentDays?: boolean\n /** Lets those neighbouring days be clicked, which implies showing them. */\n selectAdjacentDays?: boolean\n /** Events to mark under the days they fall on. */\n events?: DatePickerEvent[]\n // From here on: the field.\n /**\n * Whether the field can be TYPED into — the default, using the numeric form of the\n * reader's language — or is read-only, the calendar then being the only way in.\n *\n * Typing is reserved for choosing a SINGLE date: a period or a list falls back to\n * read-only, there being no sensible way to type either.\n */\n mode?: DateInputMode\n /**\n * Offers the date picker alongside a field that can be typed into: an icon at the end of\n * the field, and a panel that opens on focus. It means nothing in read-only mode, where\n * the picker is already the only way to choose.\n */\n showPicker?: boolean\n /** The label above the field. */\n label?: string\n /** A line of help under the field. */\n hint?: string\n /** What the field says while empty. */\n placeholder?: string\n /** The height of the field: 32, 40 or 48 pixels. */\n size?: 'sm' | 'md' | 'lg'\n /** Takes 4px off the height. */\n compact?: boolean\n /** Makes the field unusable, greyed out through the colour tokens. */\n disabled?: boolean\n /** Marks the field as invalid — for a rule of your own. */\n invalid?: boolean\n /** Offers a cross that empties the value, shown before the end icon. */\n clearable?: boolean\n /**\n * The icon that opens the date picker, at the end of the field. The clear cross appears\n * to its left rather than in its place, and no icon is rendered at all when there is no\n * panel to open.\n */\n pickerIcon?: IconSource\n /**\n * How the date is WRITTEN OUT in the field. It has no effect on a field being typed\n * into, which necessarily shows the numeric form one types — so it concerns the\n * read-only mode, and the period and list selections, which fall back to it.\n */\n displayFormat?: Intl.DateTimeFormatOptions\n /** Where the panel opens relative to the field. */\n placement?: Placement\n}\n\nconst props = withDefaults(defineProps<DateInputProps>(), {\n selection: 'single',\n locale: undefined,\n firstDayOfWeek: undefined,\n min: undefined,\n max: undefined,\n disabledDates: undefined,\n showAdjacentDays: false,\n selectAdjacentDays: false,\n events: undefined,\n // Deliberately left undefined rather than defaulted to the typed mode: that is what\n // distinguishes \"the prop was not given\" from \"the prop was given this value\", and\n // therefore what allows warning ONLY the consumer who explicitly asked for something\n // that cannot work.\n mode: undefined,\n showPicker: false,\n label: undefined,\n hint: undefined,\n placeholder: undefined,\n size: 'md',\n compact: false,\n disabled: false,\n invalid: false,\n clearable: true,\n pickerIcon: () => calendarTodayIcon,\n // Left undefined rather than defaulted to the format object, for the same reason: it is\n // what lets the component notice that a consumer has asked for a display format in a\n // mode where it has no effect, and say so.\n displayFormat: undefined,\n placement: 'bottom-start',\n})\n\nconst model = defineModel<DatePickerValue>({ default: null })\n\ndefineSlots<{\n /** What a day cell shows, handed straight to the calendar. */\n day?(props: {\n iso: string\n day: number\n inMonth: boolean\n disabled: boolean\n selected: boolean\n today: boolean\n inRange: boolean\n events: DatePickerEvent[]\n }): unknown\n /**\n * The strip at the foot of the panel — actions, or preset dates such as \"today\". It\n * receives `close`, which is what lets one of those buttons dismiss the panel.\n */\n footer?(props: { close: () => void }): unknown\n}>()\n\n// `class` and `style` stay on the wrapper; everything else goes down to the text field,\n// which is what a consumer's label points at and what assistive technology deals with.\ndefineOptions({ inheritAttrs: false })\nconst { rootClass, rootStyle, forwardedAttrs } = useRootAttrs()\n\nconst rootEl = ref<HTMLElement | null>(null)\nconst panelRef = ref<InstanceType<typeof VPopover> | null>(null)\nconst inputRef = ref<InstanceType<typeof VInput> | null>(null)\nconst pickerRef = ref<InstanceType<typeof VDatePicker> | null>(null)\nconst panelId = useId()\n\n/** The real input inside the field, which the mask and the caret work on. */\nconst fieldEl = computed<HTMLInputElement | null>(() => inputRef.value?.el ?? null)\n\n/** What was asked for, falling back to the default when nothing or nonsense was given. */\nconst requestedMode = computed<DateInputMode>(() =>\n props.mode !== undefined && MODES.includes(props.mode) ? props.mode : 'input',\n)\n/**\n * What is actually used. Typing is only possible for a single date: a period or a list\n * has no form one could type into a single field.\n */\nconst resolvedMode = computed<DateInputMode>(() =>\n requestedMode.value === 'input' && props.selection === 'single' ? 'input' : 'readonly',\n)\nconst typing = computed(() => resolvedMode.value === 'input')\n\n/**\n * Whether there is a panel at all. The calendar is only optional beside a field one can\n * type into: read-only, it is the only way to choose anything.\n */\nconst hasPanel = computed(() => !typing.value || props.showPicker)\n\n// @devwarn\nif (isDev) {\n watchEffect(() => {\n if (props.mode !== undefined && !MODES.includes(props.mode))\n console.warn(\n `[VDateInput] unknown mode \"${props.mode}\": use \"input\" (the default) or \"readonly\".`,\n )\n // Tested on the PROP and not on what was resolved from it: typing being the default,\n // a period or a list falls back on its own with nobody having asked for anything.\n // Only a consumer who explicitly asked to type deserves to be told it cannot work.\n if (props.mode === 'input' && props.selection !== 'single')\n console.warn(\n `[VDateInput] mode=\"input\" ignored in \"${props.selection}\" selection: a range or a list of dates cannot be typed on the keyboard.`,\n )\n // Here it is the RESOLVED mode that matters: the format really was supplied, and it\n // really will have no effect, whichever route led to a typed field. The warning stays\n // something the consumer can act on.\n if (props.displayFormat && typing.value)\n console.warn(\n '[VDateInput] displayFormat is ignored in \"input\" mode (the default): the field displays the locale\\'s numeric mask, the only typeable format. Pass mode=\"readonly\" for a formatted display.',\n )\n })\n}\n\n// The whole \"field plus panel\" shell, shared with VTimeInput: opening and closing, the\n// focus leaving the component, a click on the field, and the Escape, ArrowDown and Enter\n// keys.\nconst { open, openPanel, closePanel, onControlClick, onFocusout, onKeydown, onPanelMousedown } =\n useFieldPanel({\n rootEl,\n panelRef,\n fieldEl: inputRef,\n // With no panel there is nothing to open. This is the composable's SINGLE cut-off\n // point, and every way in passes through it — clicking the field, focusing it, the\n // down arrow, Enter, the icon — so the condition never has to be repeated in a\n // handler.\n disabled: () => props.disabled || !hasPanel.value,\n focusInPanel: () => pickerRef.value?.focus(),\n // Beside a field one types into, the panel opens WITHOUT taking the focus: typing\n // carries on in the field, and the down arrow remains the way into the grid.\n focusOnOpen: () => !typing.value,\n })\n\nconst hasValue = computed(() => {\n if (props.selection === 'multiple') return Array.isArray(model.value) && model.value.length > 0\n if (props.selection === 'range') {\n const r = model.value as DateRange | null\n return !!(r && (r.start || r.end))\n }\n return typeof model.value === 'string' && !!model.value\n})\n\nconst vectisLocale = useLocale()\n/* The prop wins, and the design system's global locale is what it falls back to.\n\n TRAP — this component is the SINGLE place that resolution happens: what flows down to\n the calendar is the RESULT, never the prop, which would usually be undefined and would\n have the calendar resolve the language a second time — with every chance of the two\n disagreeing after a later change. */\nconst resolvedLocale = computed(() => props.locale ?? vectisLocale.value)\n\nconst displayText = computed(() => {\n const locale = resolvedLocale.value\n const displayFormat = props.displayFormat ?? DEFAULT_DISPLAY_FORMAT\n if (props.selection === 'single') {\n return typeof model.value === 'string' && isValidISO(model.value)\n ? formatDisplay(model.value, locale, displayFormat)\n : ''\n }\n if (props.selection === 'range') {\n const r = model.value as DateRange | null\n if (!r?.start) return ''\n if (!r.end) return formatDisplay(r.start, locale, displayFormat)\n return formatDisplayRange(r.start, r.end, locale, displayFormat)\n }\n const list = Array.isArray(model.value) ? model.value : []\n return list.map((iso) => formatDisplay(iso, locale, displayFormat)).join(', ')\n})\n\n/* From here on: everything the typed field needs. */\n\nconst mask = computed(() => dateMaskFor(resolvedLocale.value))\nconst maskHint = computed(() => maskPlaceholder(resolvedLocale.value, mask.value))\nconst isDisabledDate = computed(() => resolveMatcher(props.disabledDates))\n\n/**\n * Whether a date the reader has finished typing may actually be taken: it has to fall\n * within the allowed bounds and not be one of the excluded days.\n */\nconst acceptable = (iso: string) =>\n isWithin(iso, props.min, props.max) && !isDisabledDate.value(iso)\n\n/*\n * The mask machinery — the text being typed, the bridge to the value, the reformatting\n * that preserves the caret, the commit as soon as the date is complete and the silent\n * revert when it is not — is shared with VTimeInput and lives in `useMaskedField`.\n *\n * What is injected here is the date VOCABULARY alone: the order of the fields, the\n * separator between them and their widths, all derived from the reader's language.\n */\nconst { draft, fieldModel, writeField, commitLive, commitOrRevert, onFieldInput } = useMaskedField({\n fieldEl,\n typing: () => typing.value,\n displayText: () => displayText.value,\n readValue: () =>\n typeof model.value === 'string' && isValidISO(model.value) ? model.value : null,\n writeValue: (iso) => {\n model.value = iso\n },\n maxDigits: () => mask.value.size,\n format: (digits) => formatDateMask(digits, mask.value),\n caret: (text, digitsBefore, inserting) =>\n caretAfterDigits(text, digitsBefore, inserting ? mask.value.separator : undefined),\n // A two-digit year is only expanded on the FINAL commit, when the reader leaves the\n // field — never while they are still typing, where \"26\" may well be on its way to\n // becoming \"2026\".\n parse: (text, final) =>\n parseDateMask(text, mask.value, final ? { yearPivot: YEAR_PIVOT } : undefined),\n toMask: (iso) => (iso ? isoToMask(iso, mask.value) : ''),\n acceptable,\n})\n\n/**\n * Typing anything that is not a digit — a slash, a dot, a space — completes the field\n * being typed with a leading zero and moves on to the next. It is what lets someone type\n * \"5/6/2026\" and get the same result as typing all eight digits.\n *\n * It applies to the day and the month only: a year cut short has no such convention, \"26\"\n * being neither 0026 nor 2026 until the reader has finished.\n */\nfunction padCurrentField(el: HTMLInputElement) {\n const start = el.selectionStart ?? el.value.length\n const before = digitsOf(el.value.slice(0, start)).length\n const digits = digitsOf(el.value)\n let offset = 0\n for (let k = 0; k < mask.value.order.length; k++) {\n const len = mask.value.lengths[k] as number\n if (before < offset + len) {\n const filled = before - offset\n if (mask.value.order[k] === 'year' || filled !== len - 1) return\n const next = digits.slice(0, offset) + '0'.repeat(len - filled) + digits.slice(offset)\n const text = formatDateMask(next.slice(0, mask.value.size), mask.value)\n writeField(text, caretAfterDigits(text, offset + len, mask.value.separator))\n return\n }\n offset += len\n }\n}\n\n// @keyboard @core — the keys the mask itself needs: completing a field with a separator,\n// erasing across one, and the down arrow, which is the one explicit way from the field\n// into the calendar.\nfunction onFieldKeydown(event: KeyboardEvent) {\n if (!typing.value) return\n const el = fieldEl.value\n if (!el) return\n\n if (event.key === 'Enter') {\n // Cancelling the default does two things at once: it stops the surrounding form from\n // being submitted, and it stops the panel this keystroke has just closed from being\n // reopened as the event travels up to the root.\n event.preventDefault()\n commitOrRevert()\n if (open.value) closeAndFocus()\n return\n }\n if (event.key === 'ArrowDown' && open.value) {\n // The one explicit route from the field into the grid of days.\n event.preventDefault()\n pickerRef.value?.focus()\n return\n }\n if (event.key === 'Backspace') {\n const start = el.selectionStart\n if (\n start !== null &&\n start === el.selectionEnd &&\n start > 0 &&\n !/\\d/.test(el.value[start - 1] ?? '')\n ) {\n // TRAP — a separator is PLACED by the mask and never typed, so erasing one has to\n // erase the DIGIT before it, which is what the reader believes they are erasing.\n // Left alone, the mask would write the separator straight back and the key would\n // look dead.\n event.preventDefault()\n const n = digitsOf(el.value.slice(0, start)).length\n const digits = digitsOf(el.value)\n const text = formatDateMask(digits.slice(0, n - 1) + digits.slice(n), mask.value)\n writeField(text, caretAfterDigits(text, n - 1))\n commitLive()\n }\n return\n }\n if (\n event.key.length === 1 &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !/\\d/.test(event.key)\n ) {\n event.preventDefault()\n padCurrentField(el)\n }\n}\n\n/**\n * Pasting. A date recognizable as a whole — in the ISO form, or already written the way\n * this field writes them — is adopted as it stands; anything else contributes its digits\n * alone.\n *\n * Without this, pasting \"2026-06-10\" into a field expecting day, month, year would\n * produce \"20/26/0610\": the digits would be taken in order and the separators ignored.\n */\nfunction onFieldPaste(event: ClipboardEvent) {\n if (!typing.value) return\n const el = fieldEl.value\n if (!el) return\n event.preventDefault()\n const pasted = (event.clipboardData?.getData('text') ?? '').trim()\n const iso = isValidISO(pasted)\n ? pasted\n : parseDateMask(pasted, mask.value, { yearPivot: YEAR_PIVOT })\n if (iso) {\n const text = isoToMask(iso, mask.value)\n writeField(text, text.length)\n commitLive()\n return\n }\n const start = el.selectionStart ?? el.value.length\n const end = el.selectionEnd ?? start\n const digits = digitsOf(el.value)\n const from = digitsOf(el.value.slice(0, start)).length\n const to = digitsOf(el.value.slice(0, end)).length\n const inserted = digitsOf(pasted)\n const next = (digits.slice(0, from) + inserted + digits.slice(to)).slice(0, mask.value.size)\n const text = formatDateMask(next, mask.value)\n writeField(text, caretAfterDigits(text, Math.min(from + inserted.length, next.length)))\n commitLive()\n}\n\n// @a11y\n/**\n * TRAP — closing the panel hands the focus back to the field, and beside a field one\n * types into the panel opens ON FOCUS: the two would chase each other and the panel would\n * never close.\n *\n * This lock covers the focus call, which is synchronous. EVERY close that returns the\n * focus must go through here; closing directly brings the loop straight back.\n */\nlet refocusing = false\nfunction closeAndFocus() {\n refocusing = true\n closePanel(true)\n refocusing = false\n}\n\nfunction onFieldFocus() {\n if (!typing.value || refocusing) return\n openPanel(false)\n}\n\n// @keyboard @a11y\nfunction onRootKeydown(event: KeyboardEvent) {\n if (typing.value && event.key === 'Escape' && open.value) {\n event.preventDefault()\n closeAndFocus()\n return\n }\n onKeydown(event)\n}\n\n/*\n * The clear cross is the field's own, which renders it BEFORE the end icon rather than in\n * its place — the convention every field in the design system follows, so the two live\n * side by side.\n *\n * Whether it is shown has to be answered explicitly here: outside the typed mode the field\n * is read-only, and a read-only field hides its cross by default, rightly so — but here\n * the value comes from the panel, so there is something to clear all the same.\n */\nconst canClear = computed(\n () => props.clearable && !props.disabled && (hasValue.value || (typing.value && !!draft.value)),\n)\nconst endIcon = computed<IconSource | undefined>(() =>\n hasPanel.value ? props.pickerIcon : undefined,\n)\n// @a11y @devwarn\n/*\n * TRAP — the LABEL is defined at all times, even when no icon is rendered at all.\n *\n * The helper detecting a click handler on an icon warns AT SETUP if one is attached\n * without a label, and it has no way of knowing whether an icon exists. Since the\n * listener here is attached permanently and that detection is static, making the label\n * conditional would produce a false warning every time a field without a calendar is\n * mounted.\n *\n * The wording itself has no prop: the dictionary is where it is changed — see `src/i18n/`.\n */\nconst m = useMessages()\n\nconst endIconLabel = computed(() => m.value.dateInput.open)\n\nfunction onEndIcon() {\n if (open.value) closeAndFocus()\n // Clicking the icon is an explicit request for the calendar, and the focus has already\n // left the field for the button — so carrying it into the grid is right in both modes.\n else openPanel(true)\n}\n// @a11y\n/*\n * Emptying the value, called by the field as it emits its clear event.\n *\n * TRAP — the focus is taken here, under the lock, on purpose: the field focuses itself\n * immediately afterwards, and focusing an element that ALREADY has the focus emits no\n * event at all. That is what stops the panel reopening. Taking the lock away from this\n * function brings the reopening straight back.\n */\nfunction clearValue() {\n model.value =\n props.selection === 'multiple'\n ? []\n : props.selection === 'range'\n ? { start: null, end: null }\n : null\n // The typed text is emptied EXPLICITLY: when the value was already empty, nothing\n // changes, and the guard that keeps the field and the value from chasing each other\n // would leave the text where it was.\n if (typing.value) writeField('')\n refocusing = true\n inputRef.value?.focus()\n refocusing = false\n}\n\n/**\n * A date was chosen in the calendar. Choosing ONE date finishes the job, so the panel\n * closes; a period or a list is still being built and it stays open.\n */\nfunction onSelect() {\n if (props.selection === 'single') closeAndFocus()\n}\n\nconst close = () => closeAndFocus()\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"v-date-input\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-open=\"open ? '' : undefined\"\n :data-mode=\"resolvedMode\"\n @focusout=\"onFocusout\"\n @keydown=\"onRootKeydown\"\n >\n <div class=\"v-date-input-control\" @click=\"onControlClick\">\n <!-- The field is declared a combobox rather than left as the plain text box it\n implicitly is, because a text box may not carry the attribute saying whether\n something is expanded — and a text field with a panel attached IS the combobox\n pattern, the same role VCombobox gives its own field.\n\n The role and the three attributes are all conditioned on the SAME thing, so the\n role never appears without the expanded state it requires, and nothing ever\n points at a panel that was not rendered. -->\n <VInput\n ref=\"inputRef\"\n v-model=\"fieldModel\"\n :inputmode=\"typing ? 'numeric' : undefined\"\n :autocomplete=\"typing ? 'off' : undefined\"\n v-bind=\"forwardedAttrs\"\n :readonly=\"!typing\"\n :label=\"label\"\n :hint=\"hint\"\n :placeholder=\"placeholder ?? (typing ? maskHint : undefined)\"\n :size=\"size\"\n :compact=\"compact\"\n :disabled=\"disabled\"\n :invalid=\"invalid\"\n :clearable=\"clearable\"\n :clear-visible=\"canClear\"\n :clear-label=\"m.dateInput.clear\"\n :icon-end=\"endIcon\"\n :icon-end-label=\"endIconLabel\"\n :role=\"hasPanel ? 'combobox' : undefined\"\n :aria-haspopup=\"hasPanel ? 'dialog' : undefined\"\n :aria-expanded=\"hasPanel ? open : undefined\"\n :aria-controls=\"hasPanel ? panelId : undefined\"\n @click:icon-end=\"onEndIcon\"\n @clear=\"clearValue\"\n @focus=\"onFieldFocus\"\n @input=\"onFieldInput\"\n @change=\"commitOrRevert\"\n @blur=\"commitOrRevert\"\n @keydown=\"onFieldKeydown\"\n @paste=\"onFieldPaste\"\n />\n </div>\n\n <!-- With no panel rendered there is nothing to hold a reference to, and the open state\n — which is fed by the panel's own events — can no longer become true. The absence\n of a panel is therefore self-enforcing. -->\n <VPopover\n v-if=\"hasPanel\"\n :id=\"panelId\"\n ref=\"panelRef\"\n v-model:open=\"open\"\n mode=\"manual\"\n anchor=\"--date-input-anchor\"\n :placement=\"placement\"\n surface\n role=\"dialog\"\n :aria-label=\"label ?? m.dateInput.label\"\n class=\"v-date-input-panel\"\n @mousedown=\"onPanelMousedown\"\n >\n <VDatePicker\n ref=\"pickerRef\"\n v-model=\"model\"\n :selection=\"selection\"\n :locale=\"resolvedLocale\"\n :first-day-of-week=\"firstDayOfWeek\"\n :min=\"min\"\n :max=\"max\"\n :disabled-dates=\"disabledDates\"\n :show-adjacent-days=\"showAdjacentDays\"\n :select-adjacent-days=\"selectAdjacentDays\"\n :events=\"events\"\n @select=\"onSelect\"\n >\n <template v-if=\"$slots.day\" #day=\"slotProps\">\n <slot name=\"day\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.footer\" #footer>\n <slot name=\"footer\" :close=\"close\" />\n </template>\n </VDatePicker>\n </VPopover>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-date-input {\n /* Confines the anchor to this instance (the root = the common ancestor of the\n control and the panel) */\n anchor-scope: --date-input-anchor;\n display: block;\n width: 100%;\n font-family: var(--vectis-text-family);\n }\n\n .v-date-input-control {\n anchor-name: --date-input-anchor;\n display: block;\n cursor: pointer;\n }\n\n /* Input mode: the field is editable, and the <input>'s text caret takes over from the\n control's `pointer` (which signals \"this opens a panel\"). The mask has a fixed width:\n tabular figures, otherwise the caret jitters from one digit to the next. */\n .v-date-input[data-mode='input'] .v-date-input-control {\n cursor: text;\n }\n\n .v-date-input[data-mode='input'] .v-input-control {\n font-variant-numeric: tabular-nums;\n }\n\n /* `position-anchor` and the chrome come from VPopover (the `anchor` and `surface`\n props, the latter setting `.v-panel`): only the dimensions are left here, which\n `panel.css` deliberately does not carry. The padding is cancelled — VDatePicker handles\n its own breathing room; compounded with `.v-popover-panel` (VPopover puts both\n classes on the same element) because `.v-panel` declares `padding` too, and at\n equal specificity the winner would depend on the order in which the consumer's\n bundler concatenates the CSS. */\n .v-popover-panel.v-date-input-panel {\n width: max-content;\n padding: 0;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;qCAsEM,IAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAVnB,IAAM,IAAyB,CAAC,YAAY,OAAO,GAY7C,IAAqD;GACzD,KAAK;GACL,OAAO;GACP,MAAM;EACR,GA0EM,IAAQ,GAgCR,IAAQ,GAA4B,GAAA,YAAkB,GAwBtD,EAAE,eAAW,eAAW,uBAAmB,EAAa,GAExD,IAAS,EAAwB,IAAI,GACrC,IAAW,EAA0C,IAAI,GACzD,IAAW,EAAwC,IAAI,GACvD,IAAY,EAA6C,IAAI,GAC7D,IAAU,GAAM,GAGhB,IAAU,QAAwC,EAAS,OAAO,MAAM,IAAI,GAG5E,KAAgB,QACpB,EAAM,SAAS,KAAA,KAAa,EAAM,SAAS,EAAM,IAAI,IAAI,EAAM,OAAO,OACxE,GAKM,IAAe,QACnB,GAAc,UAAU,WAAW,EAAM,cAAc,WAAW,UAAU,UAC9E,GACM,IAAS,QAAe,EAAa,UAAU,OAAO,GAMtD,IAAW,QAAe,CAAC,EAAO,SAAS,EAAM,UAAU,GA6B3D,EAAE,SAAM,cAAW,gBAAY,mBAAgB,eAAY,eAAW,yBAC1E,GAAc;GACZ;GACA;GACA,SAAS;GAKT,gBAAgB,EAAM,YAAY,CAAC,EAAS;GAC5C,oBAAoB,EAAU,OAAO,MAAM;GAG3C,mBAAmB,CAAC,EAAO;EAC7B,CAAC,GAEG,KAAW,QAAe;GAC9B,IAAI,EAAM,cAAc,YAAY,OAAO,MAAM,QAAQ,EAAM,KAAK,KAAK,EAAM,MAAM,SAAS;GAC9F,IAAI,EAAM,cAAc,SAAS;IAC/B,IAAM,IAAI,EAAM;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;GAC/B;GACA,OAAO,OAAO,EAAM,SAAU,YAAY,CAAC,CAAC,EAAM;EACpD,CAAC,GAEK,KAAe,EAAU,GAOzB,IAAiB,QAAe,EAAM,UAAU,GAAa,KAAK,GAElE,KAAc,QAAe;GACjC,IAAM,IAAS,EAAe,OACxB,IAAgB,EAAM,iBAAiB;GAC7C,IAAI,EAAM,cAAc,UACtB,OAAO,OAAO,EAAM,SAAU,YAAY,EAAW,EAAM,KAAK,IAC5D,EAAc,EAAM,OAAO,GAAQ,CAAa,IAChD;GAEN,IAAI,EAAM,cAAc,SAAS;IAC/B,IAAM,IAAI,EAAM;IAGhB,OAFK,GAAG,QACH,EAAE,MACA,EAAmB,EAAE,OAAO,EAAE,KAAK,GAAQ,CAAa,IAD5C,EAAc,EAAE,OAAO,GAAQ,CAAa,IADzC;GAGxB;GAEA,QADa,MAAM,QAAQ,EAAM,KAAK,IAAI,EAAM,QAAQ,CAAC,EAAA,CAC7C,KAAK,MAAQ,EAAc,GAAK,GAAQ,CAAa,CAAC,CAAC,CAAC,KAAK,IAAI;EAC/E,CAAC,GAIK,IAAO,QAAe,EAAY,EAAe,KAAK,CAAC,GACvD,KAAW,QAAe,EAAgB,EAAe,OAAO,EAAK,KAAK,CAAC,GAC3E,KAAiB,QAAe,EAAe,EAAM,aAAa,CAAC,GAiBnE,EAAE,WAAO,eAAY,eAAY,eAAY,mBAAgB,qBAAiB,GAAe;GACjG;GACA,cAAc,EAAO;GACrB,mBAAmB,GAAY;GAC/B,iBACE,OAAO,EAAM,SAAU,YAAY,EAAW,EAAM,KAAK,IAAI,EAAM,QAAQ;GAC7E,aAAa,MAAQ;IACnB,EAAM,QAAQ;GAChB;GACA,iBAAiB,EAAK,MAAM;GAC5B,SAAS,MAAW,EAAe,GAAQ,EAAK,KAAK;GACrD,QAAQ,GAAM,GAAc,MAC1B,EAAiB,GAAM,GAAc,IAAY,EAAK,MAAM,YAAY,KAAA,CAAS;GAInF,QAAQ,GAAM,MACZ,EAAc,GAAM,EAAK,OAAO,IAAQ,EAAE,WAAW,EAAW,IAAI,KAAA,CAAS;GAC/E,SAAS,MAAS,IAAM,EAAU,GAAK,EAAK,KAAK,IAAI;GACrD,aA9BkB,MAClB,EAAS,GAAK,EAAM,KAAK,EAAM,GAAG,KAAK,CAAC,GAAe,MAAM,CAAG;EA8BlE,CAAC;EAUD,SAAS,GAAgB,GAAsB;GAC7C,IAAM,IAAQ,EAAG,kBAAkB,EAAG,MAAM,QACtC,IAAS,EAAS,EAAG,MAAM,MAAM,GAAG,CAAK,CAAC,CAAC,CAAC,QAC5C,IAAS,EAAS,EAAG,KAAK,GAC5B,IAAS;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,MAAM,MAAM,QAAQ,KAAK;IAChD,IAAM,IAAM,EAAK,MAAM,QAAQ;IAC/B,IAAI,IAAS,IAAS,GAAK;KACzB,IAAM,IAAS,IAAS;KACxB,IAAI,EAAK,MAAM,MAAM,OAAO,UAAU,MAAW,IAAM,GAAG;KAE1D,IAAM,IAAO,GADA,EAAO,MAAM,GAAG,CAAM,IAAI,IAAI,OAAO,IAAM,CAAM,IAAI,EAAO,MAAM,CAAM,EAAA,CACpD,MAAM,GAAG,EAAK,MAAM,IAAI,GAAG,EAAK,KAAK;KACtE,EAAW,GAAM,EAAiB,GAAM,IAAS,GAAK,EAAK,MAAM,SAAS,CAAC;KAC3E;IACF;IACA,KAAU;GACZ;EACF;EAKA,SAAS,GAAe,GAAsB;GAC5C,IAAI,CAAC,EAAO,OAAO;GACnB,IAAM,IAAK,EAAQ;GACd,OAEL;QAAI,EAAM,QAAQ,SAAS;KAMzB,AAFA,EAAM,eAAe,GACrB,EAAe,GACX,EAAK,SAAO,EAAc;KAC9B;IACF;IACA,IAAI,EAAM,QAAQ,eAAe,EAAK,OAAO;KAG3C,AADA,EAAM,eAAe,GACrB,EAAU,OAAO,MAAM;KACvB;IACF;IACA,IAAI,EAAM,QAAQ,aAAa;KAC7B,IAAM,IAAQ,EAAG;KACjB,IACE,MAAU,QACV,MAAU,EAAG,gBACb,IAAQ,KACR,CAAC,KAAK,KAAK,EAAG,MAAM,IAAQ,MAAM,EAAE,GACpC;MAKA,EAAM,eAAe;MACrB,IAAM,IAAI,EAAS,EAAG,MAAM,MAAM,GAAG,CAAK,CAAC,CAAC,CAAC,QACvC,IAAS,EAAS,EAAG,KAAK,GAC1B,IAAO,EAAe,EAAO,MAAM,GAAG,IAAI,CAAC,IAAI,EAAO,MAAM,CAAC,GAAG,EAAK,KAAK;MAEhF,AADA,EAAW,GAAM,EAAiB,GAAM,IAAI,CAAC,CAAC,GAC9C,EAAW;KACb;KACA;IACF;IACA,AACE,EAAM,IAAI,WAAW,KACrB,CAAC,EAAM,WACP,CAAC,EAAM,WACP,CAAC,EAAM,UACP,CAAC,KAAK,KAAK,EAAM,GAAG,MAEpB,EAAM,eAAe,GACrB,GAAgB,CAAE;GApCpB;EAsCF;EAUA,SAAS,GAAa,GAAuB;GAC3C,IAAI,CAAC,EAAO,OAAO;GACnB,IAAM,IAAK,EAAQ;GACnB,IAAI,CAAC,GAAI;GACT,EAAM,eAAe;GACrB,IAAM,KAAU,EAAM,eAAe,QAAQ,MAAM,KAAK,GAAA,CAAI,KAAK,GAC3D,IAAM,EAAW,CAAM,IACzB,IACA,EAAc,GAAQ,EAAK,OAAO,EAAE,WAAW,EAAW,CAAC;GAC/D,IAAI,GAAK;IACP,IAAM,IAAO,EAAU,GAAK,EAAK,KAAK;IAEtC,AADA,EAAW,GAAM,EAAK,MAAM,GAC5B,EAAW;IACX;GACF;GACA,IAAM,IAAQ,EAAG,kBAAkB,EAAG,MAAM,QACtC,IAAM,EAAG,gBAAgB,GACzB,IAAS,EAAS,EAAG,KAAK,GAC1B,IAAO,EAAS,EAAG,MAAM,MAAM,GAAG,CAAK,CAAC,CAAC,CAAC,QAC1C,IAAK,EAAS,EAAG,MAAM,MAAM,GAAG,CAAG,CAAC,CAAC,CAAC,QACtC,IAAW,EAAS,CAAM,GAC1B,KAAQ,EAAO,MAAM,GAAG,CAAI,IAAI,IAAW,EAAO,MAAM,CAAE,EAAA,CAAG,MAAM,GAAG,EAAK,MAAM,IAAI,GACrF,IAAO,EAAe,GAAM,EAAK,KAAK;GAE5C,AADA,EAAW,GAAM,EAAiB,GAAM,KAAK,IAAI,IAAO,EAAS,QAAQ,EAAK,MAAM,CAAC,CAAC,GACtF,EAAW;EACb;EAWA,IAAI,IAAa;EACjB,SAAS,IAAgB;GAGvB,AAFA,IAAa,IACb,GAAW,EAAI,GACf,IAAa;EACf;EAEA,SAAS,KAAe;GAClB,CAAC,EAAO,SAAS,KACrB,EAAU,EAAK;EACjB;EAGA,SAAS,GAAc,GAAsB;GAC3C,IAAI,EAAO,SAAS,EAAM,QAAQ,YAAY,EAAK,OAAO;IAExD,AADA,EAAM,eAAe,GACrB,EAAc;IACd;GACF;GACA,GAAU,CAAK;EACjB;EAWA,IAAM,KAAW,QACT,EAAM,aAAa,CAAC,EAAM,aAAa,GAAS,SAAU,EAAO,SAAS,CAAC,CAAC,GAAM,MAC1F,GACM,KAAU,QACd,EAAS,QAAQ,EAAM,aAAa,KAAA,CACtC,GAaM,IAAI,EAAY,GAEhB,KAAe,QAAe,EAAE,MAAM,UAAU,IAAI;EAE1D,SAAS,KAAY;GACnB,AAAI,EAAK,QAAO,EAAc,IAGzB,EAAU,EAAI;EACrB;EAUA,SAAS,KAAa;GAapB,AAZA,EAAM,QACJ,EAAM,cAAc,aAChB,CAAC,IACD,EAAM,cAAc,UAClB;IAAE,OAAO;IAAM,KAAK;GAAK,IACzB,MAIJ,EAAO,SAAO,EAAW,EAAE,GAC/B,IAAa,IACb,EAAS,OAAO,MAAM,GACtB,IAAa;EACf;EAMA,SAAS,KAAW;GAClB,AAAI,EAAM,cAAc,YAAU,EAAc;EAClD;EAEA,IAAM,WAAc,EAAc;yBAIhC,GA4FM,OAAA;YA3FA;GAAJ,KAAI;GACJ,OAAK,GAAA,CAAC,gBACE,EAAA,EAAA,CAAS,CAAA;GAChB,OAAK,GAAE,EAAA,EAAA,CAAS;GAChB,aAAW,EAAA,CAAA,IAAI,KAAQ,KAAA;GACvB,aAAW,EAAA;GACX,YAAQ,AAAA,EAAA,QAAA,GAAA,MAAE,EAAA,CAAA,KAAA,EAAA,CAAA,CAAA,CAAA,GAAA,CAAA;GACV,WAAS;MAEV,GAyCM,OAAA;GAzCD,OAAM;GAAwB,SAAK,AAAA,EAAA,QAAA,GAAA,MAAE,EAAA,CAAA,KAAA,EAAA,CAAA,CAAA,CAAA,GAAA,CAAA;MASxC,EA+BE,GA/BF,GA+BE;YA9BI;GAAJ,KAAI;eACK,EAAA,CAAA;mDAAU,QAAA,IAAA;GAClB,WAAW,EAAA,QAAM,YAAe,KAAA;GAChC,cAAc,EAAA,QAAM,QAAW,KAAA;KACxB,EAAA,EAAA,GAAc;GACrB,UAAQ,CAAG,EAAA;GACX,OAAO,EAAA;GACP,MAAM,EAAA;GACN,aAAa,EAAA,gBAAgB,EAAA,QAAS,GAAA,QAAW,KAAA;GACjD,MAAM,EAAA;GACN,SAAS,EAAA;GACT,UAAU,EAAA;GACV,SAAS,EAAA;GACT,WAAW,EAAA;GACX,iBAAe,GAAA;GACf,eAAa,EAAA,CAAA,CAAC,CAAC,UAAU;GACzB,YAAU,GAAA;GACV,kBAAgB,GAAA;GAChB,MAAM,EAAA,QAAQ,aAAgB,KAAA;GAC9B,iBAAe,EAAA,QAAQ,WAAc,KAAA;GACrC,iBAAe,EAAA,QAAW,EAAA,CAAA,IAAO,KAAA;GACjC,iBAAe,EAAA,QAAW,EAAA,CAAA,IAAU,KAAA;GACpC,mBAAgB;GAChB,SAAO;GACP,SAAO;GACP,SAAO,EAAA,EAAA;GACP,UAAQ,EAAA,CAAA;GACR,QAAM,EAAA,CAAA;GACN,WAAS;GACT,SAAO;;;;;;;;;;;;;;;;;;;;;;;;;QAQJ,EAAA,SAAA,EAAA,GADR,GAmCW,GAAA;;GAjCR,IAAI,EAAA,CAAA;YACD;GAAJ,KAAI;GACI,MAAM,EAAA,CAAA;6CAAI,QAAA,IAAA;GAClB,MAAK;GACL,QAAO;GACN,WAAW,EAAA;GACZ,SAAA;GACA,MAAK;GACJ,cAAY,EAAA,SAAS,EAAA,CAAA,CAAC,CAAC,UAAU;GAClC,OAAM;GACL,aAAW,EAAA,EAAA;;oBAsBE,CApBd,EAoBc,GAAA;aAnBR;IAAJ,KAAI;gBACK,EAAA;6CAAK,QAAA;IACb,WAAW,EAAA;IACX,QAAQ,EAAA;IACR,qBAAmB,EAAA;IACnB,KAAK,EAAA;IACL,KAAK,EAAA;IACL,kBAAgB,EAAA;IAChB,sBAAoB,EAAA;IACpB,wBAAsB,EAAA;IACtB,QAAQ,EAAA;IACA;oBAEOA,EAAAA,OAAO,MAAA;UAAM;WAAK,MAAS,CACzC,EAAsC,EAAA,QAAA,OAAA,GAAA,GAAb,CAAS,CAAA,CAAA,CAAA,CAAA;;eAEpBA,EAAAA,OAAO,SAAA;UAAS;gBACO,CAArC,EAAqC,EAAA,QAAA,UAAA,EAAT,UAAK,CAAA,CAAA,CAAA"}