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 @@
1
+ {"version":3,"file":"VToggleItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VToggle/VToggleItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * One item of a VToggle. It IS a VButton — the colour, the size, the focus ring and\n * the disabled state all come from there — and what this component adds is the one\n * attribute saying whether the button is currently pressed.\n *\n * That button is also this component's own root element, with nothing wrapped around\n * it, which is what lets the group merge the borders of neighbouring items: it only\n * joins its DIRECT children.\n *\n * Used outside a VToggle it still renders perfectly well, simply never selected, the\n * same way a tab does outside its row.\n */\nimport { computed, inject, useSlots } from 'vue'\n\nimport VButton from '../VButton/VButton.vue'\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport type { IconSource } from '../VIcon/types'\nimport { toggleKey } from './context'\nimport type { ToggleValue } from './VToggle.vue'\n\ninterface ToggleItemProps {\n /**\n * What choosing this item means. It is what the group's v-model holds when the item\n * is selected, and it must be unique within the group.\n */\n value: ToggleValue\n /** The visible label. The default slot replaces it. */\n label?: string\n /** An icon before the label: an icon name, or an explicit render. */\n icon?: IconSource\n /**\n * Makes this item unusable: it no longer responds, the arrow keys skip over it, and\n * it greys out through the colour tokens.\n */\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<ToggleItemProps>(), {\n label: undefined,\n icon: undefined,\n disabled: false,\n})\n\ndefineSlots<{\n /** The content of the item, replacing the `label` prop. */\n default?(): unknown\n}>()\n\nconst slots = useSlots()\nconst toggle = inject(toggleKey, null)\n\nconst selected = computed(() => toggle != null && toggle.isSelected(props.value))\n\n/** An icon and no label at all: the item becomes a square, like a VIconButton. */\nconst iconOnly = computed(() => Boolean(props.icon) && !props.label && !slots.default)\n</script>\n\n<template>\n <!-- The pressed state is always rendered, false included: it is its PRESENCE that\n makes a screen reader announce the button as one that stays pressed, and an\n attribute appearing only when true would leave the unselected items announced\n as ordinary buttons.\n\n The filled form is asked of the icon directly, because VButton's own icon\n options have no effect on an icon handed to it through a slot. -->\n <VButton\n class=\"v-toggle-item\"\n :aria-pressed=\"selected ? 'true' : 'false'\"\n :variant=\"selected ? 'solid' : (toggle?.variant ?? 'ghost')\"\n :tone=\"selected ? (toggle?.tone ?? 'accent') : 'neutral'\"\n :size=\"toggle?.size ?? 'md'\"\n :compact=\"toggle?.compact ?? false\"\n :disabled=\"disabled || toggle?.disabled\"\n :data-icon-only=\"iconOnly ? '' : undefined\"\n @click=\"toggle?.select(value)\"\n >\n <template v-if=\"icon\" #start>\n <VIcon v-bind=\"iconProps(icon)\" :filled=\"selected && (toggle?.selectedIconFilled ?? false)\" />\n </template>\n <slot v-if=\"!iconOnly\">{{ label }}</slot>\n </VButton>\n</template>\n\n<style>\n@layer vectis.components {\n /*\n * An item reduced to its icon becomes a square, like a VIconButton. The selector is\n * qualified by an attribute VButton always renders, which is what makes it beat that\n * button's own padding whatever order the two sheets end up in.\n */\n .v-toggle-item[data-size][data-icon-only] {\n padding-inline: 0;\n min-inline-size: var(--control-height);\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAuCA,IAAM,IAAQ,GAWR,IAAQ,EAAS,GACjB,IAAS,EAAO,GAAW,IAAI,GAE/B,IAAW,QAAe,KAAU,QAAQ,EAAO,WAAW,EAAM,KAAK,CAAC,GAG1E,IAAW,QAAe,EAAQ,EAAM,QAAS,CAAC,EAAM,SAAS,CAAC,EAAM,OAAO;yBAWnF,EAeU,GAAA;GAdR,OAAM;GACL,gBAAc,EAAA,QAAQ,SAAA;GACtB,SAAS,EAAA,QAAQ,UAAc,EAAA,CAAA,CAAM,EAAE,WAAO;GAC9C,MAAM,EAAA,QAAY,EAAA,CAAA,CAAM,EAAE,QAAI,WAAA;GAC9B,MAAM,EAAA,CAAA,CAAM,EAAE,QAAI;GAClB,SAAS,EAAA,CAAA,CAAM,EAAE,WAAO;GACxB,UAAU,EAAA,YAAY,EAAA,CAAA,CAAM,EAAE;GAC9B,kBAAgB,EAAA,QAAQ,KAAQ,KAAA;GAChC,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,CAAA,CAAM,EAAE,OAAO,EAAA,KAAK;;oBAMtB,CADO,EAAA,QAAkB,EAAA,IAAA,EAAA,IAA/B,EAAyC,EAAA,QAAA,WAAA,CAAA,SAAA,CAAA,EAAA,EAAf,EAAA,KAAK,GAAA,CAAA,CAAA,GAAA,KAAA,GAAA,CAAA,CAAA,CAAA;;MAHf,EAAA,OAAA;SAAO;eACyE,CAA9F,EAA8F,GAA9F,EAAe,EAA+E,CAAA,CAAtE,CAAC,EAAA,IAAI,GAAA,EAAI,QAAQ,EAAA,UAAa,EAAA,CAAA,CAAM,EAAE,sBAAkB,IAAA,CAAA,GAAA,MAAA,IAAA,CAAA,QAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { InjectionKey } from 'vue';
2
+ import { ToggleSize, ToggleTone, ToggleValue, ToggleVariant } from './VToggle.js';
3
+ /**
4
+ * What a VToggle passes down to the items inside it. Everything is exposed through
5
+ * getters, which is what keeps the group's props reactive on the other side of the
6
+ * injection.
7
+ *
8
+ * There is no identifier and no registry here, unlike VTabs: nothing in this pattern
9
+ * points at anything else, and whether an item is selected is a plain comparison of
10
+ * values — so the server and the browser reach the same answer with nothing exchanged.
11
+ *
12
+ * That comparison is offered as a QUESTION rather than as the current value, because
13
+ * with several choices allowed it is no longer a simple equality, and only the group
14
+ * knows which of the two it is doing.
15
+ *
16
+ * The size travels through here rather than through CSS inheritance, as it does in
17
+ * VAccordion, because each item renders a button that declares its own size on itself.
18
+ */
19
+ export interface ToggleContext {
20
+ /** Whether the item carrying this value is currently selected. */
21
+ isSelected: (value: ToggleValue) => boolean;
22
+ /** Reports that an item was clicked; the group decides what it does to the selection. */
23
+ select: (value: ToggleValue) => void;
24
+ /** How the unselected items are drawn. */
25
+ readonly variant: ToggleVariant;
26
+ /** The colour a selected item takes. */
27
+ readonly tone: ToggleTone;
28
+ /** The height of the items. */
29
+ readonly size: ToggleSize;
30
+ /** The reduced density. */
31
+ readonly compact: boolean;
32
+ /** Whether the whole group is unusable. */
33
+ readonly disabled: boolean;
34
+ /** Whether the selected item draws its icon filled. */
35
+ readonly selectedIconFilled: boolean;
36
+ }
37
+ export declare const toggleKey: InjectionKey<ToggleContext>;
@@ -0,0 +1,6 @@
1
+ //#region src/components/VToggle/context.ts
2
+ var e = Symbol("v-toggle");
3
+ //#endregion
4
+ export { e as toggleKey };
5
+
6
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/VToggle/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\n\nimport type { ToggleSize, ToggleTone, ToggleValue, ToggleVariant } from './VToggle.vue'\n\n/**\n * What a VToggle passes down to the items inside it. Everything is exposed through\n * getters, which is what keeps the group's props reactive on the other side of the\n * injection.\n *\n * There is no identifier and no registry here, unlike VTabs: nothing in this pattern\n * points at anything else, and whether an item is selected is a plain comparison of\n * values — so the server and the browser reach the same answer with nothing exchanged.\n *\n * That comparison is offered as a QUESTION rather than as the current value, because\n * with several choices allowed it is no longer a simple equality, and only the group\n * knows which of the two it is doing.\n *\n * The size travels through here rather than through CSS inheritance, as it does in\n * VAccordion, because each item renders a button that declares its own size on itself.\n */\nexport interface ToggleContext {\n /** Whether the item carrying this value is currently selected. */\n isSelected: (value: ToggleValue) => boolean\n /** Reports that an item was clicked; the group decides what it does to the selection. */\n select: (value: ToggleValue) => void\n /** How the unselected items are drawn. */\n readonly variant: ToggleVariant\n /** The colour a selected item takes. */\n readonly tone: ToggleTone\n /** The height of the items. */\n readonly size: ToggleSize\n /** The reduced density. */\n readonly compact: boolean\n /** Whether the whole group is unusable. */\n readonly disabled: boolean\n /** Whether the selected item draws its icon filled. */\n readonly selectedIconFilled: boolean\n}\n\nexport const toggleKey: InjectionKey<ToggleContext> = Symbol('v-toggle')\n"],"mappings":";AAuCA,IAAa,IAAyC,OAAO,UAAU"}
@@ -0,0 +1,2 @@
1
+ @layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
2
+ @layer vectis.components{.v-tooltip{anchor-name:--tooltip-anchor;anchor-scope:--tooltip-anchor;align-items:center;display:inline-flex}.v-popover-panel.v-tooltip-panel{width:max-content;max-width:min(18rem, calc(100vw - var(--vectis-space-8)));padding:var(--vectis-space-1) var(--vectis-space-2);background:var(--vectis-color-surface-inverse);color:var(--vectis-color-text-on-inverse);border-radius:var(--vectis-radius-sm);box-shadow:var(--vectis-shadow-sm);font-family:var(--vectis-text-family);font-size:var(--vectis-text-caption-size);line-height:var(--vectis-text-caption-leading);border:none}}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * A short explanation appearing beside an element when the pointer rests on it or
3
+ * when it takes keyboard focus. It is built on VPopover, in the mode where nothing
4
+ * closes by itself, since a tooltip has its own rules about when to appear and when
5
+ * to go.
6
+ *
7
+ * Those rules are why there is JavaScript here at all: HTML has no stable way to say
8
+ * "show this after a short delay on hover or focus" — the proposal for it is still
9
+ * experimental — so the component handles the delay, the pointer, the focus, the press
10
+ * on the trigger, and Escape, which must dismiss a tooltip without moving the focus
11
+ * (WCAG 1.4.13).
12
+ *
13
+ * There are four ways out and each covers a case the others do not: the pointer leaves,
14
+ * the focus leaves, Escape is pressed, or the trigger is PRESSED — that last one for a
15
+ * trigger which opens a panel, where the tooltip would otherwise stand over what it just
16
+ * opened. The template says which browser makes it necessary.
17
+ *
18
+ * The positioning is pure CSS and needs no generated identifier: the wrapper names
19
+ * itself as the anchor and confines that name to its own subtree. The confinement is
20
+ * essential — a visible panel sits in the top layer, which anchor resolution treats
21
+ * as coming after the whole document, so without it every tooltip on the page would
22
+ * attach to the last wrapper carrying the name.
23
+ *
24
+ * The wrapper stays here rather than being delegated to VPopover's trigger slot,
25
+ * because a tooltip trigger is not a button that opens a panel — it would then toggle
26
+ * on click — but an element the panel DESCRIBES.
27
+ */
28
+ type Placement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
29
+ interface TooltipProps {
30
+ /** What the tooltip says. The `#content` slot replaces it when both are given. */
31
+ text?: string;
32
+ /**
33
+ * Which side of the element the tooltip appears on. The browser flips it to the
34
+ * opposite side by itself when there is not enough room.
35
+ */
36
+ placement?: Placement;
37
+ /**
38
+ * How long the pointer must rest on the element before the tooltip appears, in
39
+ * milliseconds. Keyboard focus opens it at once — the intent is not in doubt there
40
+ * — and a delay of 0 disables the wait entirely.
41
+ */
42
+ delay?: number;
43
+ }
44
+ type __VLS_Slots = {
45
+ /**
46
+ * The element the tooltip describes. Bind the `triggerProps` it receives onto it —
47
+ * that is what ties the two together for assistive technology — and make sure it is
48
+ * something that can take focus, or keyboard users will never see the tooltip.
49
+ */
50
+ default(props: {
51
+ triggerProps: {
52
+ 'aria-describedby': string;
53
+ };
54
+ }): unknown;
55
+ /**
56
+ * Content richer than a plain string: formatting, a keyboard shortcut, an icon. It
57
+ * must stay NON-interactive. The tooltip closes as soon as the pointer leaves the
58
+ * element, so a link or a button inside could never be reached, and the description
59
+ * is flattened to plain text for screen readers anyway. Content one can interact
60
+ * with belongs in a panel that stays open, such as VMenu.
61
+ */
62
+ content?(): unknown;
63
+ };
64
+ declare const __VLS_base: import('vue').DefineComponent<TooltipProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TooltipProps> & Readonly<{}>, {
65
+ text: string;
66
+ placement: Placement;
67
+ delay: number;
68
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
69
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
70
+ declare const _default: typeof __VLS_export;
71
+ export default _default;
72
+ type __VLS_WithSlots<T, S> = T & {
73
+ new (): {
74
+ $slots: S;
75
+ };
76
+ };
@@ -0,0 +1,9 @@
1
+ import './VTooltip.css';
2
+ import e from "./VTooltip.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region src/components/VTooltip/VTooltip.vue
5
+ var t = e;
6
+ //#endregion
7
+ export { t as default };
8
+
9
+ //# sourceMappingURL=VTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VTooltip.js","names":[],"sources":["../../../src/components/VTooltip/VTooltip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, useId } from 'vue'\n\nimport VPopover from '../VPopover/VPopover.vue'\n\nimport { useTimer } from '../../composables/useTimer'\n\n/**\n * A short explanation appearing beside an element when the pointer rests on it or\n * when it takes keyboard focus. It is built on VPopover, in the mode where nothing\n * closes by itself, since a tooltip has its own rules about when to appear and when\n * to go.\n *\n * Those rules are why there is JavaScript here at all: HTML has no stable way to say\n * \"show this after a short delay on hover or focus\" — the proposal for it is still\n * experimental — so the component handles the delay, the pointer, the focus, the press\n * on the trigger, and Escape, which must dismiss a tooltip without moving the focus\n * (WCAG 1.4.13).\n *\n * There are four ways out and each covers a case the others do not: the pointer leaves,\n * the focus leaves, Escape is pressed, or the trigger is PRESSED — that last one for a\n * trigger which opens a panel, where the tooltip would otherwise stand over what it just\n * opened. The template says which browser makes it necessary.\n *\n * The positioning is pure CSS and needs no generated identifier: the wrapper names\n * itself as the anchor and confines that name to its own subtree. The confinement is\n * essential — a visible panel sits in the top layer, which anchor resolution treats\n * as coming after the whole document, so without it every tooltip on the page would\n * attach to the last wrapper carrying the name.\n *\n * The wrapper stays here rather than being delegated to VPopover's trigger slot,\n * because a tooltip trigger is not a button that opens a panel — it would then toggle\n * on click — but an element the panel DESCRIBES.\n */\ntype Placement =\n 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right'\n\ninterface TooltipProps {\n /** What the tooltip says. The `#content` slot replaces it when both are given. */\n text?: string\n /**\n * Which side of the element the tooltip appears on. The browser flips it to the\n * opposite side by itself when there is not enough room.\n */\n placement?: Placement\n /**\n * How long the pointer must rest on the element before the tooltip appears, in\n * milliseconds. Keyboard focus opens it at once — the intent is not in doubt there\n * — and a delay of 0 disables the wait entirely.\n */\n delay?: number\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n text: undefined,\n placement: 'top',\n delay: 300,\n})\n\ndefineSlots<{\n /**\n * The element the tooltip describes. Bind the `triggerProps` it receives onto it —\n * that is what ties the two together for assistive technology — and make sure it is\n * something that can take focus, or keyboard users will never see the tooltip.\n */\n default(props: { triggerProps: { 'aria-describedby': string } }): unknown\n /**\n * Content richer than a plain string: formatting, a keyboard shortcut, an icon. It\n * must stay NON-interactive. The tooltip closes as soon as the pointer leaves the\n * element, so a link or a button inside could never be reached, and the description\n * is flattened to plain text for screen readers anyway. Content one can interact\n * with belongs in a panel that stays open, such as VMenu.\n */\n content?(): unknown\n}>()\n\nconst tooltipId = useId()\n// @a11y\n/*\n * The panel is opened and closed by calling it directly rather than through\n * `v-model:open`. Keyboard focus has to open it SYNCHRONOUSLY, and a model would go\n * through VPopover's watcher, hence through a tick. There is nothing lost either way:\n * a tooltip publishes no open state anyone needs to read.\n *\n * Calling twice is harmless — the guards for that live upstream in usePopover.\n */\nconst popoverRef = ref<InstanceType<typeof VPopover> | null>(null)\n\n// The delay before appearing. useTimer is what makes it re-armable and cancels it\n// when the component goes away.\nconst timer = useTimer()\n\n// @core\nfunction show(immediate = false) {\n // A delay of 0 runs the callback synchronously — the design system's convention,\n // and what lets keyboard focus share this code path without waiting a tick.\n timer.start(() => popoverRef.value?.show(), immediate ? 0 : props.delay)\n}\n\nfunction hide() {\n timer.cancel()\n popoverRef.value?.hide()\n}\n\n// @keyboard @a11y — Escape must dismiss a tooltip opened by hover or focus without\n// moving the focus anywhere (WCAG 1.4.13): content appearing on hover has to be\n// dismissible, for a magnifier user whose view it may be covering.\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') hide()\n}\n</script>\n\n<template>\n <!--\n TRAP — `pointerdown` is what stops a tooltip from surviving the click that acted on its\n trigger, and the case it really covers is a trigger that OPENS something: a menu, a\n dialog, a popover of any kind. The tooltip would then stand over what it opened, and\n none of the other three exits applies — the pointer has not left, the focus has not\n moved out on its own, and nobody pressed Escape.\n\n It looks redundant on Chromium and Firefox, where a click focuses the button and the\n panel then takes the focus, which fires this wrapper's `focusout`. Safari on macOS does\n NOT focus a button on click, so nothing leaves the wrapper and the tooltip stays up,\n behind the panel, until the pointer moves. Delete this line and that is the bug that\n comes back, on one browser only.\n\n It is `pointerdown` and not `click`, so the tooltip is gone BEFORE the panel appears\n rather than overlapping it for a frame. Keyboard activation sends no `pointerdown` at\n all, and needs none: focus moving into the panel closes the tooltip everywhere.\n -->\n <span\n class=\"v-tooltip\"\n @pointerenter=\"show()\"\n @pointerleave=\"hide\"\n @pointerdown=\"hide\"\n @focusin=\"show(true)\"\n @focusout=\"hide\"\n @keydown=\"onKeydown\"\n >\n <slot :trigger-props=\"{ 'aria-describedby': tooltipId }\" />\n <VPopover\n :id=\"tooltipId\"\n ref=\"popoverRef\"\n mode=\"manual\"\n anchor=\"--tooltip-anchor\"\n :placement=\"placement\"\n :surface=\"false\"\n role=\"tooltip\"\n class=\"v-tooltip-panel\"\n >\n <slot name=\"content\">{{ text }}</slot>\n </VPopover>\n </span>\n</template>\n\n<style>\n@layer vectis.components {\n /* The wrapper is FLEX and not inline-block, for the same reason as `.v-badge-host`:\n both are inline-level atomic boxes, so the surrounding text flows identically, but\n an inline-block establishes an inline formatting context for the trigger — which\n then sits on a line box and adds the strut's descender to the wrapper's height.\n That is not only a couple of pixels in a flex row: this wrapper is also the ANCHOR,\n so the panel is offset by them too.\n\n `align-items: center` covers what is left. A wrapper stretched by a parent in\n `align-items: stretch` would otherwise stretch the trigger with it, where the\n inline-block form left it at its natural height. */\n .v-tooltip {\n display: inline-flex;\n align-items: center;\n anchor-name: --tooltip-anchor;\n /* Confining the name to this subtree is indispensable: a visible panel moves to\n the top layer, where anchor resolution treats it as coming after the whole\n document, so without it every tooltip would attach to the LAST wrapper carrying\n this name. */\n anchor-scope: --tooltip-anchor;\n }\n\n /* The anchoring itself comes from VPopover, through the `anchor` prop.\n\n The selector is written as a compound of two classes that both land on this same\n element, even though the panel class it guards against — `.v-panel` — is never\n present here, VTooltip asking for no surface. It is written that way so it cannot\n break the day that prop changes: at equal specificity the winner between two\n component sheets is decided by the order the consumer's bundler happens to\n produce, which is nobody's decision. */\n .v-popover-panel.v-tooltip-panel {\n width: max-content;\n max-width: min(18rem, calc(100vw - var(--vectis-space-8)));\n padding: var(--vectis-space-1) var(--vectis-space-2);\n /* The tooltip is painted against the page rather than with it: a dark surface in\n both themes, darker still in the dark one, so it reads as an overlay whatever\n it happens to cover. */\n background: var(--vectis-color-surface-inverse);\n color: var(--vectis-color-text-on-inverse);\n border: none;\n border-radius: var(--vectis-radius-sm);\n box-shadow: var(--vectis-shadow-sm);\n font-family: var(--vectis-text-family);\n font-size: var(--vectis-text-caption-size);\n line-height: var(--vectis-text-caption-leading);\n }\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import e from "../VPopover/VPopover.js";
2
+ import { useTimer as t } from "../../composables/useTimer.js";
3
+ import { createElementBlock as n, createTextVNode as r, createVNode as i, defineComponent as a, openBlock as o, ref as s, renderSlot as c, toDisplayString as l, unref as u, useId as d, withCtx as f } from "vue";
4
+ //#region src/components/VTooltip/VTooltip.vue?vue&type=script&setup=true&lang.ts
5
+ var p = /*@__PURE__*/ a({
6
+ __name: "VTooltip",
7
+ props: {
8
+ text: { default: void 0 },
9
+ placement: { default: "top" },
10
+ delay: { default: 300 }
11
+ },
12
+ setup(a) {
13
+ let p = a, m = d(), h = s(null), g = t();
14
+ function _(e = !1) {
15
+ g.start(() => h.value?.show(), e ? 0 : p.delay);
16
+ }
17
+ function v() {
18
+ g.cancel(), h.value?.hide();
19
+ }
20
+ function y(e) {
21
+ e.key === "Escape" && v();
22
+ }
23
+ return (t, s) => (o(), n("span", {
24
+ class: "v-tooltip",
25
+ onPointerenter: s[0] ||= (e) => _(),
26
+ onPointerleave: v,
27
+ onPointerdown: v,
28
+ onFocusin: s[1] ||= (e) => _(!0),
29
+ onFocusout: v,
30
+ onKeydown: y
31
+ }, [c(t.$slots, "default", { triggerProps: { "aria-describedby": u(m) } }), i(e, {
32
+ id: u(m),
33
+ ref_key: "popoverRef",
34
+ ref: h,
35
+ mode: "manual",
36
+ anchor: "--tooltip-anchor",
37
+ placement: a.placement,
38
+ surface: !1,
39
+ role: "tooltip",
40
+ class: "v-tooltip-panel"
41
+ }, {
42
+ default: f(() => [c(t.$slots, "content", {}, () => [r(l(a.text), 1)])]),
43
+ _: 3
44
+ }, 8, ["id", "placement"])], 32));
45
+ }
46
+ });
47
+ //#endregion
48
+ export { p as default };
49
+
50
+ //# sourceMappingURL=VTooltip.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VTooltip.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VTooltip/VTooltip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, useId } from 'vue'\n\nimport VPopover from '../VPopover/VPopover.vue'\n\nimport { useTimer } from '../../composables/useTimer'\n\n/**\n * A short explanation appearing beside an element when the pointer rests on it or\n * when it takes keyboard focus. It is built on VPopover, in the mode where nothing\n * closes by itself, since a tooltip has its own rules about when to appear and when\n * to go.\n *\n * Those rules are why there is JavaScript here at all: HTML has no stable way to say\n * \"show this after a short delay on hover or focus\" — the proposal for it is still\n * experimental — so the component handles the delay, the pointer, the focus, the press\n * on the trigger, and Escape, which must dismiss a tooltip without moving the focus\n * (WCAG 1.4.13).\n *\n * There are four ways out and each covers a case the others do not: the pointer leaves,\n * the focus leaves, Escape is pressed, or the trigger is PRESSED — that last one for a\n * trigger which opens a panel, where the tooltip would otherwise stand over what it just\n * opened. The template says which browser makes it necessary.\n *\n * The positioning is pure CSS and needs no generated identifier: the wrapper names\n * itself as the anchor and confines that name to its own subtree. The confinement is\n * essential — a visible panel sits in the top layer, which anchor resolution treats\n * as coming after the whole document, so without it every tooltip on the page would\n * attach to the last wrapper carrying the name.\n *\n * The wrapper stays here rather than being delegated to VPopover's trigger slot,\n * because a tooltip trigger is not a button that opens a panel — it would then toggle\n * on click — but an element the panel DESCRIBES.\n */\ntype Placement =\n 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right'\n\ninterface TooltipProps {\n /** What the tooltip says. The `#content` slot replaces it when both are given. */\n text?: string\n /**\n * Which side of the element the tooltip appears on. The browser flips it to the\n * opposite side by itself when there is not enough room.\n */\n placement?: Placement\n /**\n * How long the pointer must rest on the element before the tooltip appears, in\n * milliseconds. Keyboard focus opens it at once — the intent is not in doubt there\n * — and a delay of 0 disables the wait entirely.\n */\n delay?: number\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n text: undefined,\n placement: 'top',\n delay: 300,\n})\n\ndefineSlots<{\n /**\n * The element the tooltip describes. Bind the `triggerProps` it receives onto it —\n * that is what ties the two together for assistive technology — and make sure it is\n * something that can take focus, or keyboard users will never see the tooltip.\n */\n default(props: { triggerProps: { 'aria-describedby': string } }): unknown\n /**\n * Content richer than a plain string: formatting, a keyboard shortcut, an icon. It\n * must stay NON-interactive. The tooltip closes as soon as the pointer leaves the\n * element, so a link or a button inside could never be reached, and the description\n * is flattened to plain text for screen readers anyway. Content one can interact\n * with belongs in a panel that stays open, such as VMenu.\n */\n content?(): unknown\n}>()\n\nconst tooltipId = useId()\n// @a11y\n/*\n * The panel is opened and closed by calling it directly rather than through\n * `v-model:open`. Keyboard focus has to open it SYNCHRONOUSLY, and a model would go\n * through VPopover's watcher, hence through a tick. There is nothing lost either way:\n * a tooltip publishes no open state anyone needs to read.\n *\n * Calling twice is harmless — the guards for that live upstream in usePopover.\n */\nconst popoverRef = ref<InstanceType<typeof VPopover> | null>(null)\n\n// The delay before appearing. useTimer is what makes it re-armable and cancels it\n// when the component goes away.\nconst timer = useTimer()\n\n// @core\nfunction show(immediate = false) {\n // A delay of 0 runs the callback synchronously — the design system's convention,\n // and what lets keyboard focus share this code path without waiting a tick.\n timer.start(() => popoverRef.value?.show(), immediate ? 0 : props.delay)\n}\n\nfunction hide() {\n timer.cancel()\n popoverRef.value?.hide()\n}\n\n// @keyboard @a11y — Escape must dismiss a tooltip opened by hover or focus without\n// moving the focus anywhere (WCAG 1.4.13): content appearing on hover has to be\n// dismissible, for a magnifier user whose view it may be covering.\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') hide()\n}\n</script>\n\n<template>\n <!--\n TRAP — `pointerdown` is what stops a tooltip from surviving the click that acted on its\n trigger, and the case it really covers is a trigger that OPENS something: a menu, a\n dialog, a popover of any kind. The tooltip would then stand over what it opened, and\n none of the other three exits applies — the pointer has not left, the focus has not\n moved out on its own, and nobody pressed Escape.\n\n It looks redundant on Chromium and Firefox, where a click focuses the button and the\n panel then takes the focus, which fires this wrapper's `focusout`. Safari on macOS does\n NOT focus a button on click, so nothing leaves the wrapper and the tooltip stays up,\n behind the panel, until the pointer moves. Delete this line and that is the bug that\n comes back, on one browser only.\n\n It is `pointerdown` and not `click`, so the tooltip is gone BEFORE the panel appears\n rather than overlapping it for a frame. Keyboard activation sends no `pointerdown` at\n all, and needs none: focus moving into the panel closes the tooltip everywhere.\n -->\n <span\n class=\"v-tooltip\"\n @pointerenter=\"show()\"\n @pointerleave=\"hide\"\n @pointerdown=\"hide\"\n @focusin=\"show(true)\"\n @focusout=\"hide\"\n @keydown=\"onKeydown\"\n >\n <slot :trigger-props=\"{ 'aria-describedby': tooltipId }\" />\n <VPopover\n :id=\"tooltipId\"\n ref=\"popoverRef\"\n mode=\"manual\"\n anchor=\"--tooltip-anchor\"\n :placement=\"placement\"\n :surface=\"false\"\n role=\"tooltip\"\n class=\"v-tooltip-panel\"\n >\n <slot name=\"content\">{{ text }}</slot>\n </VPopover>\n </span>\n</template>\n\n<style>\n@layer vectis.components {\n /* The wrapper is FLEX and not inline-block, for the same reason as `.v-badge-host`:\n both are inline-level atomic boxes, so the surrounding text flows identically, but\n an inline-block establishes an inline formatting context for the trigger — which\n then sits on a line box and adds the strut's descender to the wrapper's height.\n That is not only a couple of pixels in a flex row: this wrapper is also the ANCHOR,\n so the panel is offset by them too.\n\n `align-items: center` covers what is left. A wrapper stretched by a parent in\n `align-items: stretch` would otherwise stretch the trigger with it, where the\n inline-block form left it at its natural height. */\n .v-tooltip {\n display: inline-flex;\n align-items: center;\n anchor-name: --tooltip-anchor;\n /* Confining the name to this subtree is indispensable: a visible panel moves to\n the top layer, where anchor resolution treats it as coming after the whole\n document, so without it every tooltip would attach to the LAST wrapper carrying\n this name. */\n anchor-scope: --tooltip-anchor;\n }\n\n /* The anchoring itself comes from VPopover, through the `anchor` prop.\n\n The selector is written as a compound of two classes that both land on this same\n element, even though the panel class it guards against — `.v-panel` — is never\n present here, VTooltip asking for no surface. It is written that way so it cannot\n break the day that prop changes: at equal specificity the winner between two\n component sheets is decided by the order the consumer's bundler happens to\n produce, which is nobody's decision. */\n .v-popover-panel.v-tooltip-panel {\n width: max-content;\n max-width: min(18rem, calc(100vw - var(--vectis-space-8)));\n padding: var(--vectis-space-1) var(--vectis-space-2);\n /* The tooltip is painted against the page rather than with it: a dark surface in\n both themes, darker still in the dark one, so it reads as an overlay whatever\n it happens to cover. */\n background: var(--vectis-color-surface-inverse);\n color: var(--vectis-color-text-on-inverse);\n border: none;\n border-radius: var(--vectis-radius-sm);\n box-shadow: var(--vectis-shadow-sm);\n font-family: var(--vectis-text-family);\n font-size: var(--vectis-text-caption-size);\n line-height: var(--vectis-text-caption-leading);\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;EAqDA,IAAM,IAAQ,GAuBR,IAAY,EAAM,GAUlB,IAAa,EAA0C,IAAI,GAI3D,IAAQ,EAAS;EAGvB,SAAS,EAAK,IAAY,IAAO;GAG/B,EAAM,YAAY,EAAW,OAAO,KAAK,GAAG,IAAY,IAAI,EAAM,KAAK;EACzE;EAEA,SAAS,IAAO;GAEd,AADA,EAAM,OAAO,GACb,EAAW,OAAO,KAAK;EACzB;EAKA,SAAS,EAAU,GAAsB;GACvC,AAAI,EAAM,QAAQ,YAAU,EAAK;EACnC;yBAqBE,EAsBO,QAAA;GArBL,OAAM;GACL,gBAAY,AAAA,EAAA,QAAA,MAAE,EAAI;GAClB,gBAAc;GACd,eAAa;GACb,WAAO,AAAA,EAAA,QAAA,MAAE,EAAI,EAAA;GACb,YAAU;GACD;MAEV,EAA2D,EAAA,QAAA,WAAA,EAApD,cAAa,EAAA,oBAAwB,EAAA,CAAA,EAAS,EAAA,CAAA,GACrD,EAWW,GAAA;GAVR,IAAI,EAAA,CAAA;YACD;GAAJ,KAAI;GACJ,MAAK;GACL,QAAO;GACN,WAAW,EAAA;GACX,SAAS;GACV,MAAK;GACL,OAAM;;oBAEgC,CAAtC,EAAsC,EAAA,QAAA,WAAA,CAAA,SAAA,CAAA,EAAA,EAAd,EAAA,IAAI,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,2 @@
1
+ @layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
2
+ @layer vectis.components{.v-typography{--typography-family:var(--vectis-text-family);--typography-tracking:normal;font-family:var(--typography-family);font-size:var(--typography-size);font-weight:var(--typography-weight);line-height:var(--typography-leading);letter-spacing:var(--typography-tracking);color:var(--typography-color,inherit);overflow-wrap:break-word;margin:0}.v-typography[data-variant=display]{--typography-family:var(--vectis-text-family-heading);--typography-size:var(--vectis-text-display-size);--typography-weight:var(--vectis-text-display-weight);--typography-leading:var(--vectis-text-display-leading);--typography-tracking:var(--vectis-text-display-tracking)}.v-typography[data-variant=heading-1]{--typography-family:var(--vectis-text-family-heading);--typography-size:var(--vectis-text-heading-1-size);--typography-weight:var(--vectis-text-heading-1-weight);--typography-leading:var(--vectis-text-heading-1-leading);--typography-tracking:var(--vectis-text-heading-1-tracking)}.v-typography[data-variant=heading-2]{--typography-family:var(--vectis-text-family-heading);--typography-size:var(--vectis-text-heading-2-size);--typography-weight:var(--vectis-text-heading-2-weight);--typography-leading:var(--vectis-text-heading-2-leading);--typography-tracking:var(--vectis-text-heading-2-tracking)}.v-typography[data-variant=heading-3]{--typography-family:var(--vectis-text-family-heading);--typography-size:var(--vectis-text-heading-3-size);--typography-weight:var(--vectis-text-heading-3-weight);--typography-leading:var(--vectis-text-heading-3-leading)}.v-typography[data-variant=heading-4]{--typography-family:var(--vectis-text-family-heading);--typography-size:var(--vectis-text-heading-4-size);--typography-weight:var(--vectis-text-heading-4-weight);--typography-leading:var(--vectis-text-heading-4-leading)}.v-typography[data-variant=subtitle]{--typography-size:var(--vectis-text-subtitle-size);--typography-weight:var(--vectis-text-subtitle-weight);--typography-leading:var(--vectis-text-subtitle-leading)}.v-typography[data-variant=body-xl]{--typography-size:var(--vectis-text-body-xl-size);--typography-weight:var(--vectis-text-body-xl-weight);--typography-leading:var(--vectis-text-body-xl-leading)}.v-typography[data-variant=body-lg]{--typography-size:var(--vectis-text-body-lg-size);--typography-weight:var(--vectis-text-body-lg-weight);--typography-leading:var(--vectis-text-body-lg-leading)}.v-typography[data-variant=body-md]{--typography-size:var(--vectis-text-body-md-size);--typography-weight:var(--vectis-text-body-md-weight);--typography-leading:var(--vectis-text-body-md-leading)}.v-typography[data-variant=body-sm]{--typography-size:var(--vectis-text-body-sm-size);--typography-weight:var(--vectis-text-body-sm-weight);--typography-leading:var(--vectis-text-body-sm-leading)}.v-typography[data-variant=label]{--typography-size:var(--vectis-text-label-size);--typography-weight:var(--vectis-text-label-weight);--typography-leading:var(--vectis-text-label-leading)}.v-typography[data-variant=caption]{--typography-size:var(--vectis-text-caption-size);--typography-weight:var(--vectis-text-caption-weight);--typography-leading:var(--vectis-text-caption-leading)}.v-typography[data-variant=overline]{--typography-size:var(--vectis-text-overline-size);--typography-weight:var(--vectis-text-overline-weight);--typography-leading:var(--vectis-text-overline-leading);--typography-tracking:var(--vectis-text-overline-tracking);text-transform:uppercase}.v-typography[data-variant=code]{--typography-family:var(--vectis-text-family-code);--typography-size:var(--vectis-text-code-size);--typography-weight:var(--vectis-text-code-weight);--typography-leading:var(--vectis-text-code-leading)}.v-typography[data-tone=muted]{--typography-color:var(--vectis-color-text-muted)}.v-typography[data-tone=subtle]{--typography-color:var(--vectis-color-text-subtle)}.v-typography[data-tone=accent]{--typography-color:var(--vectis-color-accent-text)}.v-typography[data-tone=danger]{--typography-color:var(--vectis-color-danger-text)}.v-typography[data-tone=success]{--typography-color:var(--vectis-color-success-text)}.v-typography[data-tone=warning]{--typography-color:var(--vectis-color-warning-text)}.v-typography[data-tone=on-inverse]{--typography-color:var(--vectis-color-text-on-inverse)}.v-typography[data-truncate]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}
@@ -0,0 +1,46 @@
1
+ export type TypographyVariant = 'display' | 'heading-1' | 'heading-2' | 'heading-3' | 'heading-4' | 'subtitle' | 'body-xl' | 'body-lg' | 'body-md' | 'body-sm' | 'label' | 'caption' | 'overline' | 'code';
2
+ export type TypographyTone = 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success' | 'warning' | 'on-inverse';
3
+ interface TypographyProps {
4
+ /**
5
+ * The role this text plays, which selects a complete recipe of typographic
6
+ * tokens — size, weight, line height and, where the role calls for it, letter
7
+ * spacing and a monospaced family.
8
+ */
9
+ variant?: TypographyVariant;
10
+ /**
11
+ * The HTML tag to render. Each variant already has a sensible default (h1 to h4,
12
+ * p, span, code), so this is for the cases where the meaning and the look differ —
13
+ * a subtitle that is really an `h2`, or a label attached to a field.
14
+ */
15
+ as?: string;
16
+ /**
17
+ * The colour of the text. `default` sets none at all, so the text inherits from
18
+ * whatever surrounds it — which is what lets the same component be used on an
19
+ * inverted surface or inside a coloured toast.
20
+ */
21
+ tone?: TypographyTone;
22
+ /**
23
+ * Cuts the text to one line and ends it with an ellipsis. The element needs a
24
+ * width to be cut against — being a block, or a flex item — otherwise there is
25
+ * nothing to overflow and the text simply stays whole.
26
+ */
27
+ truncate?: boolean;
28
+ }
29
+ type __VLS_Slots = {
30
+ /** Text content. */
31
+ default(): unknown;
32
+ };
33
+ declare const __VLS_base: import('vue').DefineComponent<TypographyProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TypographyProps> & Readonly<{}>, {
34
+ variant: TypographyVariant;
35
+ as: string;
36
+ tone: TypographyTone;
37
+ truncate: boolean;
38
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
39
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
40
+ declare const _default: typeof __VLS_export;
41
+ export default _default;
42
+ type __VLS_WithSlots<T, S> = T & {
43
+ new (): {
44
+ $slots: S;
45
+ };
46
+ };
@@ -0,0 +1,9 @@
1
+ import './VTypography.css';
2
+ import e from "./VTypography.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region src/components/VTypography/VTypography.vue
5
+ var t = e;
6
+ //#endregion
7
+ export { t as default };
8
+
9
+ //# sourceMappingURL=VTypography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VTypography.js","names":[],"sources":["../../../src/components/VTypography/VTypography.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core — the only JS is deriving the default tag from the variant.\n/**\n * The design system's text element. Rather than setting a size here and a weight\n * there, the writer names the ROLE the text plays — a heading, a caption, a label —\n * and `variant` applies the complete typographic recipe that goes with it: family,\n * size, weight, line height and letter spacing, all read from the semantic tokens.\n * `tone` does the same for colour.\n *\n * It renders a single element and adds no behaviour, so the attributes it is given\n * (id, for, aria-*…) land straight on that element. This is what lets it serve as a\n * real field label, with `as=\"label\"` and a `for`.\n */\nimport { computed } from 'vue'\n\nexport type TypographyVariant =\n | 'display'\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'subtitle'\n | 'body-xl'\n | 'body-lg'\n | 'body-md'\n | 'body-sm'\n | 'label'\n | 'caption'\n | 'overline'\n | 'code'\n\nexport type TypographyTone =\n 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success' | 'warning' | 'on-inverse'\n\ninterface TypographyProps {\n /**\n * The role this text plays, which selects a complete recipe of typographic\n * tokens — size, weight, line height and, where the role calls for it, letter\n * spacing and a monospaced family.\n */\n variant?: TypographyVariant\n /**\n * The HTML tag to render. Each variant already has a sensible default (h1 to h4,\n * p, span, code), so this is for the cases where the meaning and the look differ —\n * a subtitle that is really an `h2`, or a label attached to a field.\n */\n as?: string\n /**\n * The colour of the text. `default` sets none at all, so the text inherits from\n * whatever surrounds it — which is what lets the same component be used on an\n * inverted surface or inside a coloured toast.\n */\n tone?: TypographyTone\n /**\n * Cuts the text to one line and ends it with an ellipsis. The element needs a\n * width to be cut against — being a block, or a flex item — otherwise there is\n * nothing to overflow and the text simply stays whole.\n */\n truncate?: boolean\n}\n\nconst props = withDefaults(defineProps<TypographyProps>(), {\n variant: 'body-md',\n as: undefined,\n tone: 'default',\n truncate: false,\n})\n\ndefineSlots<{\n /** Text content. */\n default(): unknown\n}>()\n\n/**\n * The tag each variant renders when `as` says nothing — the one whose meaning\n * matches the role.\n */\nconst DEFAULT_TAGS: Record<TypographyVariant, string> = {\n display: 'p',\n 'heading-1': 'h1',\n 'heading-2': 'h2',\n 'heading-3': 'h3',\n 'heading-4': 'h4',\n subtitle: 'p',\n 'body-xl': 'p',\n 'body-lg': 'p',\n 'body-md': 'p',\n 'body-sm': 'p',\n label: 'span',\n caption: 'p',\n overline: 'span',\n code: 'code',\n}\n\nconst tag = computed(() => props.as ?? DEFAULT_TAGS[props.variant])\n</script>\n\n<template>\n <component\n :is=\"tag\"\n class=\"v-typography\"\n :data-variant=\"variant\"\n :data-tone=\"tone === 'default' ? undefined : tone\"\n :data-truncate=\"truncate ? '' : undefined\"\n >\n <slot />\n </component>\n</template>\n\n<style>\n@layer vectis.components {\n .v-typography {\n /* These two defaults are re-declared on every instance because custom properties\n INHERIT: nested inside a variant that sets letter spacing, or inside a `code`,\n a VTypography would otherwise pick up its ancestor's tracking and monospaced\n family. The [data-variant] blocks below, being more specific, still win. */\n --typography-family: var(--vectis-text-family);\n --typography-tracking: normal;\n\n margin: 0; /* the space around a text block belongs to the layout holding it */\n font-family: var(--typography-family);\n font-size: var(--typography-size);\n font-weight: var(--typography-weight);\n line-height: var(--typography-leading);\n letter-spacing: var(--typography-tracking);\n /* With the `default` tone no colour variable is set, and the fallback makes the\n text inherit — which is what allows the component to be dropped inside an\n already coloured context, an inverted surface or a tinted toast. */\n color: var(--typography-color, inherit);\n overflow-wrap: break-word;\n }\n\n .v-typography[data-variant='display'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-display-size);\n --typography-weight: var(--vectis-text-display-weight);\n --typography-leading: var(--vectis-text-display-leading);\n --typography-tracking: var(--vectis-text-display-tracking);\n }\n\n .v-typography[data-variant='heading-1'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-1-size);\n --typography-weight: var(--vectis-text-heading-1-weight);\n --typography-leading: var(--vectis-text-heading-1-leading);\n --typography-tracking: var(--vectis-text-heading-1-tracking);\n }\n\n .v-typography[data-variant='heading-2'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-2-size);\n --typography-weight: var(--vectis-text-heading-2-weight);\n --typography-leading: var(--vectis-text-heading-2-leading);\n --typography-tracking: var(--vectis-text-heading-2-tracking);\n }\n\n .v-typography[data-variant='heading-3'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-3-size);\n --typography-weight: var(--vectis-text-heading-3-weight);\n --typography-leading: var(--vectis-text-heading-3-leading);\n }\n\n .v-typography[data-variant='heading-4'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-4-size);\n --typography-weight: var(--vectis-text-heading-4-weight);\n --typography-leading: var(--vectis-text-heading-4-leading);\n }\n\n .v-typography[data-variant='subtitle'] {\n --typography-size: var(--vectis-text-subtitle-size);\n --typography-weight: var(--vectis-text-subtitle-weight);\n --typography-leading: var(--vectis-text-subtitle-leading);\n }\n\n .v-typography[data-variant='body-xl'] {\n --typography-size: var(--vectis-text-body-xl-size);\n --typography-weight: var(--vectis-text-body-xl-weight);\n --typography-leading: var(--vectis-text-body-xl-leading);\n }\n\n .v-typography[data-variant='body-lg'] {\n --typography-size: var(--vectis-text-body-lg-size);\n --typography-weight: var(--vectis-text-body-lg-weight);\n --typography-leading: var(--vectis-text-body-lg-leading);\n }\n\n .v-typography[data-variant='body-md'] {\n --typography-size: var(--vectis-text-body-md-size);\n --typography-weight: var(--vectis-text-body-md-weight);\n --typography-leading: var(--vectis-text-body-md-leading);\n }\n\n .v-typography[data-variant='body-sm'] {\n --typography-size: var(--vectis-text-body-sm-size);\n --typography-weight: var(--vectis-text-body-sm-weight);\n --typography-leading: var(--vectis-text-body-sm-leading);\n }\n\n .v-typography[data-variant='label'] {\n --typography-size: var(--vectis-text-label-size);\n --typography-weight: var(--vectis-text-label-weight);\n --typography-leading: var(--vectis-text-label-leading);\n }\n\n .v-typography[data-variant='caption'] {\n --typography-size: var(--vectis-text-caption-size);\n --typography-weight: var(--vectis-text-caption-weight);\n --typography-leading: var(--vectis-text-caption-leading);\n }\n\n .v-typography[data-variant='overline'] {\n --typography-size: var(--vectis-text-overline-size);\n --typography-weight: var(--vectis-text-overline-weight);\n --typography-leading: var(--vectis-text-overline-leading);\n --typography-tracking: var(--vectis-text-overline-tracking);\n\n text-transform: uppercase;\n }\n\n .v-typography[data-variant='code'] {\n --typography-family: var(--vectis-text-family-code);\n --typography-size: var(--vectis-text-code-size);\n --typography-weight: var(--vectis-text-code-weight);\n --typography-leading: var(--vectis-text-code-leading);\n }\n\n /* There is deliberately no block for the `default` tone: leaving the colour\n variable unset is precisely what makes the text inherit. */\n .v-typography[data-tone='muted'] {\n --typography-color: var(--vectis-color-text-muted);\n }\n\n .v-typography[data-tone='subtle'] {\n --typography-color: var(--vectis-color-text-subtle);\n }\n\n .v-typography[data-tone='accent'] {\n --typography-color: var(--vectis-color-accent-text);\n }\n\n .v-typography[data-tone='danger'] {\n --typography-color: var(--vectis-color-danger-text);\n }\n\n .v-typography[data-tone='success'] {\n --typography-color: var(--vectis-color-success-text);\n }\n\n .v-typography[data-tone='warning'] {\n --typography-color: var(--vectis-color-warning-text);\n }\n\n .v-typography[data-tone='on-inverse'] {\n --typography-color: var(--vectis-color-text-on-inverse);\n }\n\n .v-typography[data-truncate] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n</style>\n"],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { computed as e, createBlock as t, defineComponent as n, openBlock as r, renderSlot as i, resolveDynamicComponent as a, withCtx as o } from "vue";
2
+ //#region src/components/VTypography/VTypography.vue?vue&type=script&setup=true&lang.ts
3
+ var s = /*@__PURE__*/ n({
4
+ __name: "VTypography",
5
+ props: {
6
+ variant: { default: "body-md" },
7
+ as: { default: void 0 },
8
+ tone: { default: "default" },
9
+ truncate: {
10
+ type: Boolean,
11
+ default: !1
12
+ }
13
+ },
14
+ setup(n) {
15
+ let s = n, c = {
16
+ display: "p",
17
+ "heading-1": "h1",
18
+ "heading-2": "h2",
19
+ "heading-3": "h3",
20
+ "heading-4": "h4",
21
+ subtitle: "p",
22
+ "body-xl": "p",
23
+ "body-lg": "p",
24
+ "body-md": "p",
25
+ "body-sm": "p",
26
+ label: "span",
27
+ caption: "p",
28
+ overline: "span",
29
+ code: "code"
30
+ }, l = e(() => s.as ?? c[s.variant]);
31
+ return (e, s) => (r(), t(a(l.value), {
32
+ class: "v-typography",
33
+ "data-variant": n.variant,
34
+ "data-tone": n.tone === "default" ? void 0 : n.tone,
35
+ "data-truncate": n.truncate ? "" : void 0
36
+ }, {
37
+ default: o(() => [i(e.$slots, "default")]),
38
+ _: 3
39
+ }, 8, [
40
+ "data-variant",
41
+ "data-tone",
42
+ "data-truncate"
43
+ ]));
44
+ }
45
+ });
46
+ //#endregion
47
+ export { s as default };
48
+
49
+ //# sourceMappingURL=VTypography.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VTypography.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VTypography/VTypography.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core — the only JS is deriving the default tag from the variant.\n/**\n * The design system's text element. Rather than setting a size here and a weight\n * there, the writer names the ROLE the text plays — a heading, a caption, a label —\n * and `variant` applies the complete typographic recipe that goes with it: family,\n * size, weight, line height and letter spacing, all read from the semantic tokens.\n * `tone` does the same for colour.\n *\n * It renders a single element and adds no behaviour, so the attributes it is given\n * (id, for, aria-*…) land straight on that element. This is what lets it serve as a\n * real field label, with `as=\"label\"` and a `for`.\n */\nimport { computed } from 'vue'\n\nexport type TypographyVariant =\n | 'display'\n | 'heading-1'\n | 'heading-2'\n | 'heading-3'\n | 'heading-4'\n | 'subtitle'\n | 'body-xl'\n | 'body-lg'\n | 'body-md'\n | 'body-sm'\n | 'label'\n | 'caption'\n | 'overline'\n | 'code'\n\nexport type TypographyTone =\n 'default' | 'muted' | 'subtle' | 'accent' | 'danger' | 'success' | 'warning' | 'on-inverse'\n\ninterface TypographyProps {\n /**\n * The role this text plays, which selects a complete recipe of typographic\n * tokens — size, weight, line height and, where the role calls for it, letter\n * spacing and a monospaced family.\n */\n variant?: TypographyVariant\n /**\n * The HTML tag to render. Each variant already has a sensible default (h1 to h4,\n * p, span, code), so this is for the cases where the meaning and the look differ —\n * a subtitle that is really an `h2`, or a label attached to a field.\n */\n as?: string\n /**\n * The colour of the text. `default` sets none at all, so the text inherits from\n * whatever surrounds it — which is what lets the same component be used on an\n * inverted surface or inside a coloured toast.\n */\n tone?: TypographyTone\n /**\n * Cuts the text to one line and ends it with an ellipsis. The element needs a\n * width to be cut against — being a block, or a flex item — otherwise there is\n * nothing to overflow and the text simply stays whole.\n */\n truncate?: boolean\n}\n\nconst props = withDefaults(defineProps<TypographyProps>(), {\n variant: 'body-md',\n as: undefined,\n tone: 'default',\n truncate: false,\n})\n\ndefineSlots<{\n /** Text content. */\n default(): unknown\n}>()\n\n/**\n * The tag each variant renders when `as` says nothing — the one whose meaning\n * matches the role.\n */\nconst DEFAULT_TAGS: Record<TypographyVariant, string> = {\n display: 'p',\n 'heading-1': 'h1',\n 'heading-2': 'h2',\n 'heading-3': 'h3',\n 'heading-4': 'h4',\n subtitle: 'p',\n 'body-xl': 'p',\n 'body-lg': 'p',\n 'body-md': 'p',\n 'body-sm': 'p',\n label: 'span',\n caption: 'p',\n overline: 'span',\n code: 'code',\n}\n\nconst tag = computed(() => props.as ?? DEFAULT_TAGS[props.variant])\n</script>\n\n<template>\n <component\n :is=\"tag\"\n class=\"v-typography\"\n :data-variant=\"variant\"\n :data-tone=\"tone === 'default' ? undefined : tone\"\n :data-truncate=\"truncate ? '' : undefined\"\n >\n <slot />\n </component>\n</template>\n\n<style>\n@layer vectis.components {\n .v-typography {\n /* These two defaults are re-declared on every instance because custom properties\n INHERIT: nested inside a variant that sets letter spacing, or inside a `code`,\n a VTypography would otherwise pick up its ancestor's tracking and monospaced\n family. The [data-variant] blocks below, being more specific, still win. */\n --typography-family: var(--vectis-text-family);\n --typography-tracking: normal;\n\n margin: 0; /* the space around a text block belongs to the layout holding it */\n font-family: var(--typography-family);\n font-size: var(--typography-size);\n font-weight: var(--typography-weight);\n line-height: var(--typography-leading);\n letter-spacing: var(--typography-tracking);\n /* With the `default` tone no colour variable is set, and the fallback makes the\n text inherit — which is what allows the component to be dropped inside an\n already coloured context, an inverted surface or a tinted toast. */\n color: var(--typography-color, inherit);\n overflow-wrap: break-word;\n }\n\n .v-typography[data-variant='display'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-display-size);\n --typography-weight: var(--vectis-text-display-weight);\n --typography-leading: var(--vectis-text-display-leading);\n --typography-tracking: var(--vectis-text-display-tracking);\n }\n\n .v-typography[data-variant='heading-1'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-1-size);\n --typography-weight: var(--vectis-text-heading-1-weight);\n --typography-leading: var(--vectis-text-heading-1-leading);\n --typography-tracking: var(--vectis-text-heading-1-tracking);\n }\n\n .v-typography[data-variant='heading-2'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-2-size);\n --typography-weight: var(--vectis-text-heading-2-weight);\n --typography-leading: var(--vectis-text-heading-2-leading);\n --typography-tracking: var(--vectis-text-heading-2-tracking);\n }\n\n .v-typography[data-variant='heading-3'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-3-size);\n --typography-weight: var(--vectis-text-heading-3-weight);\n --typography-leading: var(--vectis-text-heading-3-leading);\n }\n\n .v-typography[data-variant='heading-4'] {\n --typography-family: var(--vectis-text-family-heading);\n --typography-size: var(--vectis-text-heading-4-size);\n --typography-weight: var(--vectis-text-heading-4-weight);\n --typography-leading: var(--vectis-text-heading-4-leading);\n }\n\n .v-typography[data-variant='subtitle'] {\n --typography-size: var(--vectis-text-subtitle-size);\n --typography-weight: var(--vectis-text-subtitle-weight);\n --typography-leading: var(--vectis-text-subtitle-leading);\n }\n\n .v-typography[data-variant='body-xl'] {\n --typography-size: var(--vectis-text-body-xl-size);\n --typography-weight: var(--vectis-text-body-xl-weight);\n --typography-leading: var(--vectis-text-body-xl-leading);\n }\n\n .v-typography[data-variant='body-lg'] {\n --typography-size: var(--vectis-text-body-lg-size);\n --typography-weight: var(--vectis-text-body-lg-weight);\n --typography-leading: var(--vectis-text-body-lg-leading);\n }\n\n .v-typography[data-variant='body-md'] {\n --typography-size: var(--vectis-text-body-md-size);\n --typography-weight: var(--vectis-text-body-md-weight);\n --typography-leading: var(--vectis-text-body-md-leading);\n }\n\n .v-typography[data-variant='body-sm'] {\n --typography-size: var(--vectis-text-body-sm-size);\n --typography-weight: var(--vectis-text-body-sm-weight);\n --typography-leading: var(--vectis-text-body-sm-leading);\n }\n\n .v-typography[data-variant='label'] {\n --typography-size: var(--vectis-text-label-size);\n --typography-weight: var(--vectis-text-label-weight);\n --typography-leading: var(--vectis-text-label-leading);\n }\n\n .v-typography[data-variant='caption'] {\n --typography-size: var(--vectis-text-caption-size);\n --typography-weight: var(--vectis-text-caption-weight);\n --typography-leading: var(--vectis-text-caption-leading);\n }\n\n .v-typography[data-variant='overline'] {\n --typography-size: var(--vectis-text-overline-size);\n --typography-weight: var(--vectis-text-overline-weight);\n --typography-leading: var(--vectis-text-overline-leading);\n --typography-tracking: var(--vectis-text-overline-tracking);\n\n text-transform: uppercase;\n }\n\n .v-typography[data-variant='code'] {\n --typography-family: var(--vectis-text-family-code);\n --typography-size: var(--vectis-text-code-size);\n --typography-weight: var(--vectis-text-code-weight);\n --typography-leading: var(--vectis-text-code-leading);\n }\n\n /* There is deliberately no block for the `default` tone: leaving the colour\n variable unset is precisely what makes the text inherit. */\n .v-typography[data-tone='muted'] {\n --typography-color: var(--vectis-color-text-muted);\n }\n\n .v-typography[data-tone='subtle'] {\n --typography-color: var(--vectis-color-text-subtle);\n }\n\n .v-typography[data-tone='accent'] {\n --typography-color: var(--vectis-color-accent-text);\n }\n\n .v-typography[data-tone='danger'] {\n --typography-color: var(--vectis-color-danger-text);\n }\n\n .v-typography[data-tone='success'] {\n --typography-color: var(--vectis-color-success-text);\n }\n\n .v-typography[data-tone='warning'] {\n --typography-color: var(--vectis-color-warning-text);\n }\n\n .v-typography[data-tone='on-inverse'] {\n --typography-color: var(--vectis-color-text-on-inverse);\n }\n\n .v-typography[data-truncate] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EA6DA,IAAM,IAAQ,GAgBR,IAAkD;GACtD,SAAS;GACT,aAAa;GACb,aAAa;GACb,aAAa;GACb,aAAa;GACb,UAAU;GACV,WAAW;GACX,WAAW;GACX,WAAW;GACX,WAAW;GACX,OAAO;GACP,SAAS;GACT,UAAU;GACV,MAAM;EACR,GAEM,IAAM,QAAe,EAAM,MAAM,EAAa,EAAM,QAAQ;yBAIhE,EAQY,EAPL,EAAA,KAAG,GAAA;GACR,OAAM;GACL,gBAAc,EAAA;GACd,aAAW,EAAA,SAAI,YAAiB,KAAA,IAAY,EAAA;GAC5C,iBAAe,EAAA,WAAQ,KAAQ,KAAA;;oBAExB,CAAR,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { ComputedRef } from 'vue';
2
+ /**
3
+ * Works out the name a screen reader announces for a container that has one: a row of
4
+ * tabs, a group of buttons, a navigation area.
5
+ *
6
+ * A name can be given in three ways, and they are ranked. Pointing at another element
7
+ * that already carries the text wins; an explicit name written on the component comes
8
+ * next; the component's own `label` option is only the fallback. So that option is a
9
+ * DEFAULT and nothing more — an explicit name replaces it, and pointing at another
10
+ * element removes it altogether, since otherwise the element would carry two names at
11
+ * once.
12
+ *
13
+ * This arbitration has to be done by hand as soon as a component both spreads the
14
+ * attributes it was given and writes its own name in the same place: nothing would
15
+ * choose between the two, and both would apply. Elsewhere Vue's normal attribute
16
+ * fallthrough already lets the consumer's win, and all this does is drop a default that
17
+ * has become redundant.
18
+ */
19
+ export declare function useAriaLabel(label: () => string | undefined): ComputedRef<string | undefined>;
@@ -0,0 +1,10 @@
1
+ import { computed as e, useAttrs as t } from "vue";
2
+ //#region src/composables/useAriaLabel.ts
3
+ function n(n) {
4
+ let r = t();
5
+ return e(() => r["aria-labelledby"] === void 0 ? r["aria-label"] ?? n() : void 0);
6
+ }
7
+ //#endregion
8
+ export { n as useAriaLabel };
9
+
10
+ //# sourceMappingURL=useAriaLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAriaLabel.js","names":[],"sources":["../../src/composables/useAriaLabel.ts"],"sourcesContent":["import { computed, useAttrs, type ComputedRef } from 'vue'\n\n// @a11y\n/**\n * Works out the name a screen reader announces for a container that has one: a row of\n * tabs, a group of buttons, a navigation area.\n *\n * A name can be given in three ways, and they are ranked. Pointing at another element\n * that already carries the text wins; an explicit name written on the component comes\n * next; the component's own `label` option is only the fallback. So that option is a\n * DEFAULT and nothing more — an explicit name replaces it, and pointing at another\n * element removes it altogether, since otherwise the element would carry two names at\n * once.\n *\n * This arbitration has to be done by hand as soon as a component both spreads the\n * attributes it was given and writes its own name in the same place: nothing would\n * choose between the two, and both would apply. Elsewhere Vue's normal attribute\n * fallthrough already lets the consumer's win, and all this does is drop a default that\n * has become redundant.\n */\nexport function useAriaLabel(label: () => string | undefined): ComputedRef<string | undefined> {\n const attrs = useAttrs()\n return computed(() =>\n attrs['aria-labelledby'] !== undefined\n ? undefined\n : ((attrs['aria-label'] as string | undefined) ?? label()),\n )\n}\n"],"mappings":";;AAoBA,SAAgB,EAAa,GAAkE;CAC7F,IAAM,IAAQ,EAAS;CACvB,OAAO,QACL,EAAM,uBAAuB,KAAA,IAEvB,EAAM,iBAAwC,EAAM,IADtD,KAAA,CAEN;AACF"}
@@ -0,0 +1,21 @@
1
+ import { ComputedRef } from 'vue';
2
+ /**
3
+ * The identifiers a wrapped field needs — the text input and the multi-line one. They
4
+ * are what ties a label to its field and a field to the help text below it, so that
5
+ * clicking the label focuses the field and a screen reader reads the hint out with it.
6
+ *
7
+ * Two points are worth knowing. An identifier the consumer supplies WINS over the one
8
+ * generated here, or a label they wrote themselves outside the component would point at
9
+ * nothing. And the link to the descriptive text is a LIST rather than a single value, so
10
+ * the component's own hint is ADDED to whatever the consumer already pointed at instead
11
+ * of replacing it.
12
+ *
13
+ * The generated identifiers come from Vue's own facility rather than a counter of our
14
+ * own, which is what makes them identical in the page rendered on the server and in the
15
+ * one the browser takes over.
16
+ */
17
+ export declare function useFieldIds(attrs: Record<string, unknown>, hasHint: () => boolean): {
18
+ fieldId: ComputedRef<string>;
19
+ hintId: string;
20
+ describedBy: ComputedRef<string | undefined>;
21
+ };
@@ -0,0 +1,14 @@
1
+ import { computed as e, useId as t } from "vue";
2
+ //#region src/composables/useFieldIds.ts
3
+ function n(n, r) {
4
+ let i = t(), a = t();
5
+ return {
6
+ fieldId: e(() => n.id ?? i),
7
+ hintId: a,
8
+ describedBy: e(() => [n["aria-describedby"], r() ? a : void 0].filter(Boolean).join(" ") || void 0)
9
+ };
10
+ }
11
+ //#endregion
12
+ export { n as useFieldIds };
13
+
14
+ //# sourceMappingURL=useFieldIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldIds.js","names":[],"sources":["../../src/composables/useFieldIds.ts"],"sourcesContent":["import { computed, useId, type ComputedRef } from 'vue'\n\n// @a11y @ssr\n/**\n * The identifiers a wrapped field needs — the text input and the multi-line one. They\n * are what ties a label to its field and a field to the help text below it, so that\n * clicking the label focuses the field and a screen reader reads the hint out with it.\n *\n * Two points are worth knowing. An identifier the consumer supplies WINS over the one\n * generated here, or a label they wrote themselves outside the component would point at\n * nothing. And the link to the descriptive text is a LIST rather than a single value, so\n * the component's own hint is ADDED to whatever the consumer already pointed at instead\n * of replacing it.\n *\n * The generated identifiers come from Vue's own facility rather than a counter of our\n * own, which is what makes them identical in the page rendered on the server and in the\n * one the browser takes over.\n */\nexport function useFieldIds(\n attrs: Record<string, unknown>,\n hasHint: () => boolean,\n): { fieldId: ComputedRef<string>; hintId: string; describedBy: ComputedRef<string | undefined> } {\n const uid = useId()\n const hintId = useId()\n\n return {\n fieldId: computed(() => (attrs.id as string | undefined) ?? uid),\n hintId,\n describedBy: computed(() => {\n const ids = [attrs['aria-describedby'] as string | undefined, hasHint() ? hintId : undefined]\n return ids.filter(Boolean).join(' ') || undefined\n }),\n }\n}\n"],"mappings":";;AAkBA,SAAgB,EACd,GACA,GACgG;CAChG,IAAM,IAAM,EAAM,GACZ,IAAS,EAAM;CAErB,OAAO;EACL,SAAS,QAAgB,EAAM,MAA6B,CAAG;EAC/D;EACA,aAAa,QAEJ,CADM,EAAM,qBAA2C,EAAQ,IAAI,IAAS,KAAA,CAC5E,CAAA,CAAI,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA,CACzC;CACH;AACF"}
@@ -0,0 +1,61 @@
1
+ import { Ref } from 'vue';
2
+ /** The least this needs of the field: something it can put the focus back on. */
3
+ interface FocusableField {
4
+ focus: () => void;
5
+ }
6
+ /** The least this needs of the panel: something it can open and close. */
7
+ interface PanelControl {
8
+ show: () => void;
9
+ hide: () => void;
10
+ }
11
+ export interface UseFieldPanelOptions {
12
+ /** The component's root, against which "the focus has left" is judged. */
13
+ rootEl: Ref<HTMLElement | null>;
14
+ /** The panel to open and close. */
15
+ panelRef: Ref<PanelControl | null>;
16
+ /** The field the focus returns to. */
17
+ fieldEl: Ref<FocusableField | null>;
18
+ /**
19
+ * Whether opening is refused. It is the SINGLE cut-off point: every route in passes
20
+ * through it, so a component never has to repeat the condition per handler.
21
+ */
22
+ disabled: () => boolean;
23
+ /** Moves the focus INTO the open panel — where in it is the component's business. */
24
+ focusInPanel: () => void;
25
+ /** What the component needs to do as the panel opens: prepare a draft, reset a step. */
26
+ onOpen?: () => void;
27
+ /** What it needs to do as the panel closes: clear an announcement, for instance. */
28
+ onClose?: () => void;
29
+ /**
30
+ * Whether the focus should enter the panel when it opens. It does by default.
31
+ *
32
+ * A field one TYPES into says no: its panel opens without taking the caret, so typing
33
+ * carries on and the down arrow remains the one explicit way in.
34
+ */
35
+ focusOnOpen?: () => boolean;
36
+ }
37
+ /**
38
+ * The shell shared by the date and the time picker: a field, and a panel below it that
39
+ * nothing dismisses by itself. Neither component owns this — it belongs to both.
40
+ *
41
+ * A panel of that kind does NOTHING on its own: it does not close on a click outside, does
42
+ * not take the focus, and does not hand it back. What follows is exactly that minimum,
43
+ * and nothing more; whatever is particular to one component arrives through the three
44
+ * callbacks above.
45
+ *
46
+ * TRAP — the panel is WRITTEN to directly and READ back through a model. The state here is
47
+ * meant to be bound to the panel, which feeds it from its own events, but the opening
48
+ * itself must stay synchronous: the frame scheduled to move the focus assumes the panel is
49
+ * already open by the time it runs, and going through the model would put a tick in
50
+ * between.
51
+ */
52
+ export declare function useFieldPanel(options: UseFieldPanelOptions): {
53
+ open: Ref<boolean, boolean>;
54
+ openPanel: (moveFocus?: boolean) => void;
55
+ closePanel: (refocus?: boolean) => void;
56
+ onControlClick: (event: MouseEvent) => void;
57
+ onFocusout: (event: FocusEvent) => void;
58
+ onKeydown: (event: KeyboardEvent) => void;
59
+ onPanelMousedown: (event: MouseEvent) => void;
60
+ };
61
+ export {};
@@ -0,0 +1,39 @@
1
+ import { useFocusoutDismiss as e } from "./useFocusoutDismiss.js";
2
+ import { ref as t } from "vue";
3
+ //#region src/composables/useFieldPanel.ts
4
+ function n(n) {
5
+ let r = t(!1);
6
+ function i(e = n.focusOnOpen?.() ?? !0) {
7
+ n.disabled() || r.value || (n.onOpen?.(), n.panelRef.value?.show(), e && requestAnimationFrame(() => n.focusInPanel()));
8
+ }
9
+ function a(e = !1) {
10
+ r.value && (n.panelRef.value?.hide(), n.onClose?.(), e && n.fieldEl.value?.focus());
11
+ }
12
+ function o(e) {
13
+ e.target.closest(".v-input-action") || n.disabled() || i();
14
+ }
15
+ let s = e(n.rootEl, () => a(!1));
16
+ function c(e) {
17
+ e.target?.closest("button, a, input, select, textarea, [tabindex]") || e.preventDefault();
18
+ }
19
+ function l(e) {
20
+ if (e.key === "Escape") {
21
+ r.value && (e.preventDefault(), a(!0));
22
+ return;
23
+ }
24
+ (e.key === "ArrowDown" || e.key === "Enter") && !r.value && !e.defaultPrevented && (e.preventDefault(), i(!0));
25
+ }
26
+ return {
27
+ open: r,
28
+ openPanel: i,
29
+ closePanel: a,
30
+ onControlClick: o,
31
+ onFocusout: s,
32
+ onKeydown: l,
33
+ onPanelMousedown: c
34
+ };
35
+ }
36
+ //#endregion
37
+ export { n as useFieldPanel };
38
+
39
+ //# sourceMappingURL=useFieldPanel.js.map