@vueland/ui 0.0.1 → 0.0.3

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 (383) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/dist/_virtual/_plugin-vue_export-helper.js +9 -0
  4. package/dist/components/CApp/CApp.js +4 -5
  5. package/dist/components/CAutocomplete/CAutocomplete.js +200 -91
  6. package/dist/components/CBtn/CBtn.js +26 -27
  7. package/dist/components/CCheckbox/CCheckbox.js +40 -58
  8. package/dist/components/CCheckbox/CheckboxElement.js +96 -0
  9. package/dist/components/CCheckbox/index2.js +5 -0
  10. package/dist/components/CChip/CChip.js +13 -0
  11. package/dist/components/CDateInput/CDateInput.js +245 -0
  12. package/dist/components/CDateInput/index.js +5 -0
  13. package/dist/components/CDatePicker/CDatePicker.js +324 -0
  14. package/dist/components/CDatePicker/CDatePickerDates.js +300 -0
  15. package/dist/components/CDatePicker/CDatePickerHeader.js +62 -0
  16. package/dist/components/CDatePicker/CDatePickerMonths.js +114 -0
  17. package/dist/components/CDatePicker/CDatePickerYears.js +143 -0
  18. package/dist/components/CDatePicker/helpers.js +17 -0
  19. package/dist/components/CDatePicker/index.js +14 -0
  20. package/dist/components/CDatePicker/index2.js +5 -0
  21. package/dist/components/CDatePicker/index3.js +5 -0
  22. package/dist/components/CDatePicker/index4.js +5 -0
  23. package/dist/components/CDatePicker/index5.js +5 -0
  24. package/dist/components/CDatePicker/index6.js +5 -0
  25. package/dist/components/CDatePicker/locales/en.json.js +44 -0
  26. package/dist/components/CDatePicker/locales/index.js +9 -0
  27. package/dist/components/CDatePicker/locales/ru.json.js +44 -0
  28. package/dist/components/CDatePicker/utils.js +20 -0
  29. package/dist/components/CDialog/CDialog.js +2 -4
  30. package/dist/components/CField/CField.js +160 -28
  31. package/dist/components/CForm/CForm.js +38 -22
  32. package/dist/components/CGrid/CCol.js +1 -3
  33. package/dist/components/CGrid/CRow.js +5 -7
  34. package/dist/components/CIcon/CIcon.js +3 -3
  35. package/dist/components/CInput/CInput.js +119 -109
  36. package/dist/components/CList/CList.js +106 -34
  37. package/dist/components/CList/CListItem.js +44 -14
  38. package/dist/components/CMenu/CMenu.js +54 -55
  39. package/dist/components/COverlay/COverlay.js +6 -5
  40. package/dist/components/CRadio/CRadio.js +11 -5
  41. package/dist/components/CRadio/CRadioGroup.js +10 -0
  42. package/dist/components/CSelect/CSelect.js +180 -71
  43. package/dist/components/CSelectControl/CSelectControl.js +14 -2
  44. package/dist/components/CTextField/CTextField.js +79 -52
  45. package/dist/components/CTextField/index.js +2 -2
  46. package/dist/components/CTextField/index2.js +5 -0
  47. package/dist/components/CToolbar/CToolbar.js +1 -3
  48. package/dist/components/CTooltip/CTooltip.js +13 -11
  49. package/dist/components/CTooltip/index.js +2 -2
  50. package/dist/components/CTooltip/index2.js +5 -0
  51. package/dist/components/global-components.d.ts +44 -0
  52. package/dist/components/index.d.ts +841 -504
  53. package/dist/components/index.js +11 -7
  54. package/dist/composables/index.d.ts +384 -235
  55. package/dist/composables/index.js +22 -14
  56. package/dist/composables/use-activator.js +15 -25
  57. package/dist/composables/{use-app-scroll.js → use-application-scroll.js} +4 -8
  58. package/dist/composables/use-aria-activator.js +15 -0
  59. package/dist/composables/use-aria-dialog.js +16 -0
  60. package/dist/composables/use-aria-field.js +18 -0
  61. package/dist/composables/use-aria-listbox.js +14 -0
  62. package/dist/composables/use-aria-toggle.js +15 -0
  63. package/dist/composables/use-auto-position.js +206 -118
  64. package/dist/composables/use-autocomplete.js +21 -19
  65. package/dist/composables/use-breakpoints.js +8 -0
  66. package/dist/composables/use-button-presets.js +3 -7
  67. package/dist/composables/use-delay-actions.js +8 -2
  68. package/dist/composables/use-display.js +26 -18
  69. package/dist/composables/use-field-presets.js +82 -0
  70. package/dist/composables/use-icon.js +106 -34
  71. package/dist/composables/use-id.js +9 -0
  72. package/dist/composables/use-input-presets.js +88 -19
  73. package/dist/composables/use-keyboard.js +52 -0
  74. package/dist/composables/use-list.js +8 -0
  75. package/dist/composables/use-menu.js +8 -0
  76. package/dist/composables/use-normalized-items.js +22 -0
  77. package/dist/composables/use-overlay-stack.js +4 -1
  78. package/dist/composables/use-presets.js +2 -2
  79. package/dist/composables/use-select-control.js +8 -0
  80. package/dist/composables/use-selected-chips.js +40 -0
  81. package/dist/composables/use-validate.js +32 -24
  82. package/dist/constants/aria.js +32 -0
  83. package/dist/constants/attrs.js +21 -0
  84. package/dist/constants/icons.js +55 -8
  85. package/dist/constants/index.d.ts +187 -53
  86. package/dist/constants/index.js +3 -1
  87. package/dist/constants/provide-keys.js +2 -1
  88. package/dist/css/lib.css +1 -0
  89. package/dist/css/utils/_borders.css +1 -0
  90. package/dist/css/utils/_borders.js +3 -0
  91. package/dist/css/utils/_display.css +1 -1
  92. package/dist/css/utils/_flex.css +1 -1
  93. package/dist/css/utils/_grid.css +1 -0
  94. package/dist/css/utils/_grid.js +3 -0
  95. package/dist/css/utils/_helpers.css +1 -1
  96. package/dist/css/utils/_positions.css +1 -1
  97. package/dist/css/utils/_radius.css +1 -1
  98. package/dist/css/utils/_sizing.css +1 -1
  99. package/dist/css/utils/_spaces.css +1 -1
  100. package/dist/css/utils/_text.css +1 -1
  101. package/dist/css/utils/_transitions.css +1 -1
  102. package/dist/css/utils/_typography.css +1 -1
  103. package/dist/enums/IconName.js +13 -0
  104. package/dist/enums/index.d.ts +15 -2
  105. package/dist/helpers/preset.js +11 -0
  106. package/dist/helpers/theme.js +41 -0
  107. package/dist/library.js +31 -9
  108. package/dist/resolvers/font-awesome.js +30 -0
  109. package/dist/resolvers/index.d.ts +48 -0
  110. package/dist/resolvers/index.js +1 -0
  111. package/dist/scss/lib.scss +26 -0
  112. package/dist/scss/maps/colors-map.scss +342 -0
  113. package/dist/scss/maps/elevations-map.scss +88 -0
  114. package/dist/scss/maps/flexes-map.scss +24 -0
  115. package/dist/scss/maps/grids.scss +23 -0
  116. package/dist/scss/modules/_global-vars.scss +88 -0
  117. package/dist/scss/ress.scss +281 -0
  118. package/dist/scss/styles.scss +20 -0
  119. package/dist/scss/utils/_borders.scss +28 -0
  120. package/dist/scss/utils/_colors.scss +86 -0
  121. package/dist/scss/utils/_cursor.scss +140 -0
  122. package/dist/scss/utils/_display.scss +32 -0
  123. package/dist/scss/utils/_elevations.scss +15 -0
  124. package/dist/scss/utils/_flex.scss +137 -0
  125. package/dist/scss/utils/_grid.scss +173 -0
  126. package/dist/scss/utils/_helpers.scss +47 -0
  127. package/dist/scss/utils/_opacity.scss +13 -0
  128. package/dist/scss/utils/_overflow.scss +51 -0
  129. package/dist/scss/utils/_positions.scss +42 -0
  130. package/dist/scss/utils/_radius.scss +41 -0
  131. package/dist/scss/utils/_sizing.scss +40 -0
  132. package/dist/scss/utils/_spaces.scss +164 -0
  133. package/dist/scss/utils/_text.scss +76 -0
  134. package/dist/scss/utils/_transitions.scss +98 -0
  135. package/dist/scss/utils/_typography.scss +81 -0
  136. package/dist/styles.css +1 -1
  137. package/dist/temp-types/src/components/CApp/CApp.vue.d.ts +2 -4
  138. package/dist/temp-types/src/components/CApp/CApp.vue.d.ts.map +1 -1
  139. package/dist/temp-types/src/components/CApp/types.d.ts +4 -0
  140. package/dist/temp-types/src/components/CApp/types.d.ts.map +1 -1
  141. package/dist/temp-types/src/components/CAutocomplete/CAutocomplete.vue.d.ts +7 -2
  142. package/dist/temp-types/src/components/CAutocomplete/CAutocomplete.vue.d.ts.map +1 -1
  143. package/dist/temp-types/src/components/CAutocomplete/types.d.ts +16 -6
  144. package/dist/temp-types/src/components/CAutocomplete/types.d.ts.map +1 -1
  145. package/dist/temp-types/src/components/CBtn/CBtn.vue.d.ts +5 -1
  146. package/dist/temp-types/src/components/CBtn/CBtn.vue.d.ts.map +1 -1
  147. package/dist/temp-types/src/components/CBtn/index.d.ts +1 -0
  148. package/dist/temp-types/src/components/CBtn/index.d.ts.map +1 -1
  149. package/dist/temp-types/src/components/CBtn/types.d.ts +1 -0
  150. package/dist/temp-types/src/components/CBtn/types.d.ts.map +1 -1
  151. package/dist/temp-types/src/components/CCheckbox/CCheckbox.vue.d.ts +2 -6
  152. package/dist/temp-types/src/components/CCheckbox/CCheckbox.vue.d.ts.map +1 -1
  153. package/dist/temp-types/src/components/CCheckbox/CheckboxElement.vue.d.ts +32 -0
  154. package/dist/temp-types/src/components/CCheckbox/CheckboxElement.vue.d.ts.map +1 -0
  155. package/dist/temp-types/src/components/CCheckbox/types.d.ts +7 -4
  156. package/dist/temp-types/src/components/CCheckbox/types.d.ts.map +1 -1
  157. package/dist/temp-types/src/components/CChip/CChip.vue.d.ts +13 -0
  158. package/dist/temp-types/src/components/CChip/CChip.vue.d.ts.map +1 -0
  159. package/dist/temp-types/src/components/CChip/index.d.ts +2 -0
  160. package/dist/temp-types/src/components/CChip/index.d.ts.map +1 -0
  161. package/dist/temp-types/src/components/CDateInput/CDateInput.vue.d.ts +61 -0
  162. package/dist/temp-types/src/components/CDateInput/CDateInput.vue.d.ts.map +1 -0
  163. package/dist/temp-types/src/components/CDateInput/index.d.ts +3 -0
  164. package/dist/temp-types/src/components/CDateInput/index.d.ts.map +1 -0
  165. package/dist/temp-types/src/components/CDatePicker/CDatePicker.vue.d.ts +82 -0
  166. package/dist/temp-types/src/components/CDatePicker/CDatePicker.vue.d.ts.map +1 -0
  167. package/dist/temp-types/src/components/CDatePicker/CDatePickerDates.vue.d.ts +60 -0
  168. package/dist/temp-types/src/components/CDatePicker/CDatePickerDates.vue.d.ts.map +1 -0
  169. package/dist/temp-types/src/components/CDatePicker/CDatePickerHeader.vue.d.ts +27 -0
  170. package/dist/temp-types/src/components/CDatePicker/CDatePickerHeader.vue.d.ts.map +1 -0
  171. package/dist/temp-types/src/components/CDatePicker/CDatePickerMonths.vue.d.ts +40 -0
  172. package/dist/temp-types/src/components/CDatePicker/CDatePickerMonths.vue.d.ts.map +1 -0
  173. package/dist/temp-types/src/components/CDatePicker/CDatePickerYears.vue.d.ts +34 -0
  174. package/dist/temp-types/src/components/CDatePicker/CDatePickerYears.vue.d.ts.map +1 -0
  175. package/dist/temp-types/src/components/CDatePicker/helpers.d.ts +4 -0
  176. package/dist/temp-types/src/components/CDatePicker/helpers.d.ts.map +1 -0
  177. package/dist/temp-types/src/components/CDatePicker/index.d.ts +6 -0
  178. package/dist/temp-types/src/components/CDatePicker/index.d.ts.map +1 -0
  179. package/dist/temp-types/src/components/CDatePicker/locales/index.d.ts +7 -0
  180. package/dist/temp-types/src/components/CDatePicker/locales/index.d.ts.map +1 -0
  181. package/dist/temp-types/src/components/CDatePicker/types.d.ts +22 -0
  182. package/dist/temp-types/src/components/CDatePicker/types.d.ts.map +1 -0
  183. package/dist/temp-types/src/components/CDatePicker/utils.d.ts +8 -0
  184. package/dist/temp-types/src/components/CDatePicker/utils.d.ts.map +1 -0
  185. package/dist/temp-types/src/components/CDialog/CDialog.vue.d.ts +1 -1
  186. package/dist/temp-types/src/components/CDialog/CDialog.vue.d.ts.map +1 -1
  187. package/dist/temp-types/src/components/CDialog/CDialogsStack.vue.d.ts.map +1 -1
  188. package/dist/temp-types/src/components/CDialog/types.d.ts.map +1 -1
  189. package/dist/temp-types/src/components/CField/CField.vue.d.ts +26 -10
  190. package/dist/temp-types/src/components/CField/CField.vue.d.ts.map +1 -1
  191. package/dist/temp-types/src/components/CField/index.d.ts +1 -0
  192. package/dist/temp-types/src/components/CField/index.d.ts.map +1 -1
  193. package/dist/temp-types/src/components/CField/types.d.ts +22 -0
  194. package/dist/temp-types/src/components/CField/types.d.ts.map +1 -0
  195. package/dist/temp-types/src/components/CForm/CForm.vue.d.ts +10 -8
  196. package/dist/temp-types/src/components/CForm/CForm.vue.d.ts.map +1 -1
  197. package/dist/temp-types/src/components/CForm/types.d.ts +13 -3
  198. package/dist/temp-types/src/components/CForm/types.d.ts.map +1 -1
  199. package/dist/temp-types/src/components/CGrid/CCol.d.ts.map +1 -1
  200. package/dist/temp-types/src/components/CGrid/CRow.d.ts +1 -1
  201. package/dist/temp-types/src/components/CGrid/CRow.d.ts.map +1 -1
  202. package/dist/temp-types/src/components/CGrid/index.d.ts +1 -1
  203. package/dist/temp-types/src/components/CIcon/CIcon.vue.d.ts.map +1 -1
  204. package/dist/temp-types/src/components/CIcon/types.d.ts +1 -2
  205. package/dist/temp-types/src/components/CIcon/types.d.ts.map +1 -1
  206. package/dist/temp-types/src/components/CInput/CInput.vue.d.ts +23 -7
  207. package/dist/temp-types/src/components/CInput/CInput.vue.d.ts.map +1 -1
  208. package/dist/temp-types/src/components/CInput/types.d.ts +42 -28
  209. package/dist/temp-types/src/components/CInput/types.d.ts.map +1 -1
  210. package/dist/temp-types/src/components/CLabel/CLabel.d.ts.map +1 -1
  211. package/dist/temp-types/src/components/CList/CList.vue.d.ts +7 -1
  212. package/dist/temp-types/src/components/CList/CList.vue.d.ts.map +1 -1
  213. package/dist/temp-types/src/components/CList/CListItem.vue.d.ts.map +1 -1
  214. package/dist/temp-types/src/components/CList/types.d.ts +18 -1
  215. package/dist/temp-types/src/components/CList/types.d.ts.map +1 -1
  216. package/dist/temp-types/src/components/CMenu/CMenu.vue.d.ts +6 -6
  217. package/dist/temp-types/src/components/CMenu/CMenu.vue.d.ts.map +1 -1
  218. package/dist/temp-types/src/components/CMenu/types.d.ts +2 -2
  219. package/dist/temp-types/src/components/CMenu/types.d.ts.map +1 -1
  220. package/dist/temp-types/src/components/COverlay/COverlay.vue.d.ts.map +1 -1
  221. package/dist/temp-types/src/components/CRadio/CRadio.vue.d.ts.map +1 -1
  222. package/dist/temp-types/src/components/CRadio/CRadioGroup.vue.d.ts +13 -0
  223. package/dist/temp-types/src/components/CRadio/CRadioGroup.vue.d.ts.map +1 -0
  224. package/dist/temp-types/src/components/CRadio/index.d.ts +1 -0
  225. package/dist/temp-types/src/components/CRadio/index.d.ts.map +1 -1
  226. package/dist/temp-types/src/components/CScrim/index.d.ts.map +1 -1
  227. package/dist/temp-types/src/components/CSelect/CSelect.vue.d.ts +7 -2
  228. package/dist/temp-types/src/components/CSelect/CSelect.vue.d.ts.map +1 -1
  229. package/dist/temp-types/src/components/CSelect/types.d.ts +16 -6
  230. package/dist/temp-types/src/components/CSelect/types.d.ts.map +1 -1
  231. package/dist/temp-types/src/components/CSelectControl/CSelectControl.vue.d.ts +5 -1
  232. package/dist/temp-types/src/components/CSelectControl/CSelectControl.vue.d.ts.map +1 -1
  233. package/dist/temp-types/src/components/CTextField/CTextField.vue.d.ts +19 -17
  234. package/dist/temp-types/src/components/CTextField/CTextField.vue.d.ts.map +1 -1
  235. package/dist/temp-types/src/components/CTextField/index.d.ts +10 -1
  236. package/dist/temp-types/src/components/CTextField/index.d.ts.map +1 -1
  237. package/dist/temp-types/src/components/CTextField/types.d.ts +16 -0
  238. package/dist/temp-types/src/components/CTextField/types.d.ts.map +1 -0
  239. package/dist/temp-types/src/components/CToolbar/CToolbar.vue.d.ts.map +1 -1
  240. package/dist/temp-types/src/components/CTooltip/CTooltip.vue.d.ts +3 -1
  241. package/dist/temp-types/src/components/CTooltip/CTooltip.vue.d.ts.map +1 -1
  242. package/dist/temp-types/src/components/CTooltip/index.d.ts +7 -1
  243. package/dist/temp-types/src/components/CTooltip/index.d.ts.map +1 -1
  244. package/dist/temp-types/src/components/index.d.ts +17 -15
  245. package/dist/temp-types/src/components/index.d.ts.map +1 -1
  246. package/dist/temp-types/src/composables/index.d.ts +22 -14
  247. package/dist/temp-types/src/composables/index.d.ts.map +1 -1
  248. package/dist/temp-types/src/composables/use-activator.d.ts +4 -2
  249. package/dist/temp-types/src/composables/use-activator.d.ts.map +1 -1
  250. package/dist/temp-types/src/composables/{use-app-scroll.d.ts → use-application-scroll.d.ts} +2 -2
  251. package/dist/temp-types/src/composables/use-application-scroll.d.ts.map +1 -0
  252. package/dist/temp-types/src/composables/use-application.d.ts.map +1 -1
  253. package/dist/temp-types/src/composables/use-aria-activator.d.ts +8 -0
  254. package/dist/temp-types/src/composables/use-aria-activator.d.ts.map +1 -0
  255. package/dist/temp-types/src/composables/use-aria-dialog.d.ts +9 -0
  256. package/dist/temp-types/src/composables/use-aria-dialog.d.ts.map +1 -0
  257. package/dist/temp-types/src/composables/use-aria-field.d.ts +13 -0
  258. package/dist/temp-types/src/composables/use-aria-field.d.ts.map +1 -0
  259. package/dist/temp-types/src/composables/use-aria-listbox.d.ts +8 -0
  260. package/dist/temp-types/src/composables/use-aria-listbox.d.ts.map +1 -0
  261. package/dist/temp-types/src/composables/use-aria-toggle.d.ts +11 -0
  262. package/dist/temp-types/src/composables/use-aria-toggle.d.ts.map +1 -0
  263. package/dist/temp-types/src/composables/use-auto-position.d.ts +12 -9
  264. package/dist/temp-types/src/composables/use-auto-position.d.ts.map +1 -1
  265. package/dist/temp-types/src/composables/use-autocomplete.d.ts +9 -4
  266. package/dist/temp-types/src/composables/use-autocomplete.d.ts.map +1 -1
  267. package/dist/temp-types/src/composables/use-breakpoints.d.ts +1 -0
  268. package/dist/temp-types/src/composables/use-breakpoints.d.ts.map +1 -1
  269. package/dist/temp-types/src/composables/use-button-presets.d.ts +2 -2
  270. package/dist/temp-types/src/composables/use-button-presets.d.ts.map +1 -1
  271. package/dist/temp-types/src/composables/use-core.d.ts.map +1 -1
  272. package/dist/temp-types/src/composables/use-delay-actions.d.ts.map +1 -1
  273. package/dist/temp-types/src/composables/use-dialogs-stack.d.ts +3 -3
  274. package/dist/temp-types/src/composables/use-dialogs-stack.d.ts.map +1 -1
  275. package/dist/temp-types/src/composables/use-display.d.ts +29 -55
  276. package/dist/temp-types/src/composables/use-display.d.ts.map +1 -1
  277. package/dist/temp-types/src/composables/use-effect.d.ts.map +1 -1
  278. package/dist/temp-types/src/composables/use-field-presets.d.ts +12 -0
  279. package/dist/temp-types/src/composables/use-field-presets.d.ts.map +1 -0
  280. package/dist/temp-types/src/composables/use-form.d.ts +1 -1
  281. package/dist/temp-types/src/composables/use-form.d.ts.map +1 -1
  282. package/dist/temp-types/src/composables/use-icon.d.ts +32 -4
  283. package/dist/temp-types/src/composables/use-icon.d.ts.map +1 -1
  284. package/dist/temp-types/src/composables/use-id.d.ts +6 -0
  285. package/dist/temp-types/src/composables/use-id.d.ts.map +1 -0
  286. package/dist/temp-types/src/composables/use-input-presets.d.ts +6 -7
  287. package/dist/temp-types/src/composables/use-input-presets.d.ts.map +1 -1
  288. package/dist/temp-types/src/composables/use-keyboard.d.ts +11 -0
  289. package/dist/temp-types/src/composables/use-keyboard.d.ts.map +1 -0
  290. package/dist/temp-types/src/composables/use-list.d.ts +3 -0
  291. package/dist/temp-types/src/composables/use-list.d.ts.map +1 -0
  292. package/dist/temp-types/src/composables/use-menu.d.ts +2 -0
  293. package/dist/temp-types/src/composables/use-menu.d.ts.map +1 -0
  294. package/dist/temp-types/src/composables/use-normalized-items.d.ts +18 -0
  295. package/dist/temp-types/src/composables/use-normalized-items.d.ts.map +1 -0
  296. package/dist/temp-types/src/composables/use-overlay-stack.d.ts +1 -0
  297. package/dist/temp-types/src/composables/use-overlay-stack.d.ts.map +1 -1
  298. package/dist/temp-types/src/composables/use-presets.d.ts.map +1 -1
  299. package/dist/temp-types/src/composables/use-select-control.d.ts +2 -0
  300. package/dist/temp-types/src/composables/use-select-control.d.ts.map +1 -0
  301. package/dist/temp-types/src/composables/use-selected-chips.d.ts +16 -0
  302. package/dist/temp-types/src/composables/use-selected-chips.d.ts.map +1 -0
  303. package/dist/temp-types/src/composables/use-toggle.d.ts +1 -1
  304. package/dist/temp-types/src/composables/use-toggle.d.ts.map +1 -1
  305. package/dist/temp-types/src/composables/use-validate.d.ts +10 -8
  306. package/dist/temp-types/src/composables/use-validate.d.ts.map +1 -1
  307. package/dist/temp-types/src/constants/aria.d.ts +35 -0
  308. package/dist/temp-types/src/constants/aria.d.ts.map +1 -0
  309. package/dist/temp-types/src/constants/attrs.d.ts +2 -0
  310. package/dist/temp-types/src/constants/attrs.d.ts.map +1 -0
  311. package/dist/temp-types/src/constants/icons.d.ts +91 -18
  312. package/dist/temp-types/src/constants/icons.d.ts.map +1 -1
  313. package/dist/temp-types/src/constants/index.d.ts +3 -1
  314. package/dist/temp-types/src/constants/index.d.ts.map +1 -1
  315. package/dist/temp-types/src/constants/provide-keys.d.ts +7 -6
  316. package/dist/temp-types/src/constants/provide-keys.d.ts.map +1 -1
  317. package/dist/temp-types/src/directives/v-click-outside.d.ts.map +1 -1
  318. package/dist/temp-types/src/enums/IconName.d.ts +15 -2
  319. package/dist/temp-types/src/enums/IconName.d.ts.map +1 -1
  320. package/dist/temp-types/src/helpers/index.d.ts +2 -0
  321. package/dist/temp-types/src/helpers/index.d.ts.map +1 -1
  322. package/dist/temp-types/src/helpers/preset.d.ts +8 -0
  323. package/dist/temp-types/src/helpers/preset.d.ts.map +1 -0
  324. package/dist/temp-types/src/helpers/theme.d.ts +4 -0
  325. package/dist/temp-types/src/helpers/theme.d.ts.map +1 -0
  326. package/dist/temp-types/src/index.d.ts.map +1 -1
  327. package/dist/temp-types/src/library.d.ts +10 -3
  328. package/dist/temp-types/src/library.d.ts.map +1 -1
  329. package/dist/temp-types/src/resolvers/font-awesome.d.ts +18 -0
  330. package/dist/temp-types/src/resolvers/font-awesome.d.ts.map +1 -0
  331. package/dist/temp-types/src/resolvers/index.d.ts +2 -0
  332. package/dist/temp-types/src/resolvers/index.d.ts.map +1 -0
  333. package/dist/temp-types/src/resolvers/material.d.ts +1 -0
  334. package/dist/temp-types/src/resolvers/material.d.ts.map +1 -0
  335. package/dist/temp-types/src/types/icons.d.ts +29 -0
  336. package/dist/temp-types/src/types/icons.d.ts.map +1 -0
  337. package/dist/temp-types/src/types/index.d.ts +4 -2
  338. package/dist/temp-types/src/types/index.d.ts.map +1 -1
  339. package/dist/temp-types/src/types/presets.d.ts +35 -47
  340. package/dist/temp-types/src/types/presets.d.ts.map +1 -1
  341. package/dist/temp-types/src/types/theme.d.ts +32 -0
  342. package/dist/temp-types/src/types/theme.d.ts.map +1 -0
  343. package/dist/temp-types/src/utils/aria.d.ts +36 -0
  344. package/dist/temp-types/src/utils/aria.d.ts.map +1 -0
  345. package/dist/temp-types/src/utils/compile-css-classes.d.ts.map +1 -1
  346. package/dist/temp-types/src/utils/create-simple-functional.d.ts.map +1 -1
  347. package/dist/temp-types/src/utils/index.d.ts +3 -2
  348. package/dist/temp-types/src/utils/index.d.ts.map +1 -1
  349. package/dist/temp-types/src/utils/throttle.d.ts.map +1 -1
  350. package/dist/temp-types/tsconfig.build.tsbuildinfo +1 -1
  351. package/dist/types/index.d.ts +125 -0
  352. package/dist/types.d.ts +137 -72
  353. package/dist/utils/aria.js +95 -0
  354. package/dist/utils/compile-css-classes.js +3 -13
  355. package/dist/utils/create-simple-functional.js +1 -5
  356. package/dist/utils/index.d.ts +48 -10
  357. package/dist/utils/index.js +3 -2
  358. package/package.json +35 -9
  359. package/dist/components/CItems/CItems.js +0 -66
  360. package/dist/composables/use-field-attrs.js +0 -43
  361. package/dist/composables/use-input-state.js +0 -41
  362. package/dist/composables/use-input-value.js +0 -18
  363. package/dist/composables/use-menu-presets.js +0 -17
  364. package/dist/composables/use-position-classes.js +0 -12
  365. package/dist/css/themes/default-theme.css +0 -1
  366. package/dist/temp-types/src/components/CItems/CItems.d.ts +0 -16
  367. package/dist/temp-types/src/components/CItems/CItems.d.ts.map +0 -1
  368. package/dist/temp-types/src/components/CItems/index.d.ts +0 -2
  369. package/dist/temp-types/src/components/CItems/index.d.ts.map +0 -1
  370. package/dist/temp-types/src/composables/use-app-scroll.d.ts.map +0 -1
  371. package/dist/temp-types/src/composables/use-field-attrs.d.ts +0 -10
  372. package/dist/temp-types/src/composables/use-field-attrs.d.ts.map +0 -1
  373. package/dist/temp-types/src/composables/use-input-state.d.ts +0 -17
  374. package/dist/temp-types/src/composables/use-input-state.d.ts.map +0 -1
  375. package/dist/temp-types/src/composables/use-input-value.d.ts +0 -3
  376. package/dist/temp-types/src/composables/use-input-value.d.ts.map +0 -1
  377. package/dist/temp-types/src/composables/use-menu-presets.d.ts +0 -7
  378. package/dist/temp-types/src/composables/use-menu-presets.d.ts.map +0 -1
  379. package/dist/temp-types/src/composables/use-position-classes.d.ts +0 -10
  380. package/dist/temp-types/src/composables/use-position-classes.d.ts.map +0 -1
  381. package/dist/temp-types/src/utils/define-preset.d.ts +0 -2
  382. package/dist/temp-types/src/utils/define-preset.d.ts.map +0 -1
  383. /package/dist/css/{themes/default-theme.js → lib.js} +0 -0
@@ -1,43 +1,59 @@
1
1
  import { defineComponent, provide, openBlock, createElementBlock, withModifiers, renderSlot } from 'vue';
2
2
  import { $FORM_API_KEY } from '../../constants/provide-keys.js';
3
3
 
4
+ const _hoisted_1 = ["aria-label"];
4
5
  var _sfc_main = /* @__PURE__ */ defineComponent({
5
- ...{
6
- name: "CForm"
7
- },
6
+ ...{ name: "CForm" },
8
7
  __name: "CForm",
9
- setup(__props, { expose: __expose }) {
8
+ props: {
9
+ label: {}
10
+ },
11
+ emits: ["submit"],
12
+ setup(__props, { expose: __expose, emit: __emit }) {
13
+ const emit = __emit;
10
14
  let validators = [];
15
+ let resetFns = [];
11
16
  function add(fn) {
12
17
  validators.push(fn);
13
18
  }
14
19
  function remove(fn) {
15
20
  validators = validators.filter((v) => v !== fn);
16
21
  }
22
+ function addReset(fn) {
23
+ resetFns.push(fn);
24
+ }
25
+ function removeReset(fn) {
26
+ resetFns = resetFns.filter((v) => v !== fn);
27
+ }
17
28
  async function validate() {
18
- return validators.map((fn) => fn()).every((v) => v);
29
+ const results = await Promise.all(validators.map((fn) => fn()));
30
+ return results.every(Boolean);
19
31
  }
20
- __expose({
21
- validate
22
- });
32
+ function reset() {
33
+ resetFns.forEach((fn) => fn());
34
+ }
35
+ function onSubmit(event) {
36
+ emit("submit", event);
37
+ }
38
+ __expose({ validate, reset });
23
39
  provide($FORM_API_KEY, {
24
40
  add,
25
- remove
41
+ remove,
42
+ addReset,
43
+ removeReset
26
44
  });
27
45
  return (_ctx, _cache) => {
28
- return openBlock(), createElementBlock(
29
- "form",
30
- {
31
- class: "c-form",
32
- onSubmit: _cache[0] || (_cache[0] = withModifiers(() => {
33
- }, ["prevent"]))
34
- },
35
- [
36
- renderSlot(_ctx.$slots, "default", { validate })
37
- ],
38
- 32
39
- /* NEED_HYDRATION */
40
- );
46
+ return openBlock(), createElementBlock("form", {
47
+ class: "c-form",
48
+ novalidate: "",
49
+ "aria-label": __props.label,
50
+ onSubmit: withModifiers(onSubmit, ["prevent"])
51
+ }, [
52
+ renderSlot(_ctx.$slots, "default", {
53
+ validate,
54
+ reset
55
+ })
56
+ ], 40, _hoisted_1);
41
57
  };
42
58
  }
43
59
  });
@@ -35,9 +35,7 @@ const CCol = defineComponent({
35
35
  },
36
36
  setup(props, { slots }) {
37
37
  const classes = computed(() => {
38
- const cls = {
39
- "c-col": true
40
- };
38
+ const cls = { "c-col": true };
41
39
  if (isDef(props.cols)) {
42
40
  cls[`c-col-${props.cols}`] = true;
43
41
  }
@@ -51,9 +51,7 @@ const CRow = defineComponent({
51
51
  },
52
52
  setup(props, { slots }) {
53
53
  const classes = computed(() => {
54
- const cls = {
55
- "c-row": true
56
- };
54
+ const cls = { "c-row": true };
57
55
  if (props.noGutter) {
58
56
  cls["no-gutter"] = true;
59
57
  }
@@ -61,10 +59,10 @@ const CRow = defineComponent({
61
59
  cls[`justify-${props.justify}`] = true;
62
60
  }
63
61
  if (isDef(props.align)) {
64
- cls[`align-${props.align}`] = true;
62
+ cls[`items-${props.align}`] = true;
65
63
  }
66
64
  if (isDef(props.alignContent)) {
67
- cls[`align-content-${props.alignContent}`] = true;
65
+ cls[`content-${props.alignContent}`] = true;
68
66
  }
69
67
  for (const bp of BREAKPOINTS) {
70
68
  const justifyVal = toCamelCase(...`justify-${bp}`.split("-"));
@@ -74,10 +72,10 @@ const CRow = defineComponent({
74
72
  cls[`${bp}:justify-${props[justifyVal]}`] = true;
75
73
  }
76
74
  if (isDef(props[alignVal])) {
77
- cls[`${bp}:align-${props[alignVal]}`] = true;
75
+ cls[`${bp}:items-${props[alignVal]}`] = true;
78
76
  }
79
77
  if (isDef(props[contentVal])) {
80
- cls[`${bp}:align-content-${props[contentVal]}`] = true;
78
+ cls[`${bp}:content-${props[contentVal]}`] = true;
81
79
  }
82
80
  }
83
81
  return cls;
@@ -30,10 +30,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
30
30
  const attrs = useAttrs();
31
31
  const resolvedIcon = useIcon(props);
32
32
  const rootStyle = computed(() => {
33
- var _a, _b, _c, _d;
33
+ var _a, _b, _c, _d, _e, _f;
34
34
  return {
35
- width: convertToUnit(unref((_b = (_a = props.width) != null ? _a : props.size) != null ? _b : 16)),
36
- height: convertToUnit(unref((_d = (_c = props.height) != null ? _c : props.size) != null ? _d : 16))
35
+ width: convertToUnit((_c = (_b = (_a = unref(resolvedIcon).size) != null ? _a : props.width) != null ? _b : props.size) != null ? _c : 16),
36
+ height: convertToUnit((_f = (_e = (_d = unref(resolvedIcon).size) != null ? _d : props.height) != null ? _e : props.size) != null ? _f : 16)
37
37
  };
38
38
  });
39
39
  return (_ctx, _cache) => {
@@ -1,92 +1,137 @@
1
- import { defineComponent, useSlots, useAttrs, computed, unref, onBeforeMount, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, createCommentVNode, mergeProps, withMemo, createVNode, withCtx, createTextVNode, toDisplayString } from 'vue';
2
- import { unique } from '../../helpers/index.js';
3
- import { useInputState } from '../../composables/use-input-state.js';
1
+ import { defineComponent, useSlots, useModel, shallowReactive, useAttrs, computed, unref, onBeforeMount, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, createElementVNode, renderSlot, mergeProps, createVNode, Transition, withCtx, createCommentVNode, mergeModels } from 'vue';
4
2
  import { useValidate } from '../../composables/use-validate.js';
5
3
  import { useForm } from '../../composables/use-form.js';
6
4
  import { useInputPresets } from '../../composables/use-input-presets.js';
7
- import { useFieldAttrs } from '../../composables/use-field-attrs.js';
8
- import { CLabel } from '../CLabel/CLabel.js';
5
+ import { FIELD_ATTRS } from '../../constants/attrs.js';
6
+ import { useAriaField } from '../../composables/use-aria-field.js';
7
+ import { useAriaActivator } from '../../composables/use-aria-activator.js';
8
+ import { useId } from '../../composables/use-id.js';
9
9
 
10
- const _hoisted_1 = {
11
- key: 0,
12
- class: "c-input__prepend"
13
- };
14
- const _hoisted_2 = {
15
- key: 1,
16
- class: "c-input__append"
17
- };
18
- const _hoisted_3 = ["id"];
10
+ const _hoisted_1 = { class: "c-input__field" };
11
+ const _hoisted_2 = ["id"];
19
12
  var _sfc_main = /* @__PURE__ */ defineComponent({
20
13
  ...{
21
14
  name: "CInput",
22
15
  inheritAttrs: false
23
16
  },
24
17
  __name: "CInput",
25
- props: {
18
+ props: /* @__PURE__ */ mergeModels({
26
19
  rules: {},
27
20
  validateOn: {},
28
- disabled: { type: Boolean },
29
- focused: { type: Boolean },
30
- readonly: { type: Boolean },
31
21
  preset: {},
32
22
  id: {},
33
23
  modelValue: {},
34
24
  label: {},
35
25
  details: {},
36
26
  noDetails: { type: Boolean },
37
- clearable: { type: Boolean }
38
- },
27
+ clearable: { type: Boolean },
28
+ disabled: { type: Boolean },
29
+ focused: { type: Boolean },
30
+ readonly: { type: Boolean },
31
+ role: {}
32
+ }, {
33
+ "focused": { type: Boolean, ...{ default: false } },
34
+ "focusedModifiers": {}
35
+ }),
36
+ emits: /* @__PURE__ */ mergeModels(["update:modelValue", "update:focused"], ["update:focused"]),
39
37
  setup(__props, { expose: __expose }) {
40
- var _a;
41
38
  const props = __props;
42
39
  const slots = useSlots();
43
- const uid = `input-${(_a = props.id) != null ? _a : unique(6)}`;
44
- const {
45
- state,
46
- onBlur,
47
- onInput,
48
- onFocus
49
- } = useInputState(props);
40
+ const focusedModel = useModel(__props, "focused");
41
+ const INTERNAL_HANDLERS = /* @__PURE__ */ new Set(["onUpdate:modelValue", "onUpdate:focused"]);
42
+ const state = shallowReactive({
43
+ get focused() {
44
+ return focusedModel.value;
45
+ },
46
+ set focused(v) {
47
+ focusedModel.value = v;
48
+ },
49
+ isDirty: false
50
+ });
50
51
  const {
51
52
  errors,
53
+ resetValidate,
52
54
  validate
53
55
  } = useValidate(props, state);
54
56
  const formApi = useForm();
57
+ const attrs = useAttrs();
55
58
  const preset = useInputPresets({
56
59
  props,
60
+ state,
57
61
  errors
58
62
  });
59
- const attrs = useAttrs();
60
- const fieldAttrs = useFieldAttrs({ props, attrs, errors, uid });
61
- const hasLabel = computed(() => !!slots.label || !!props.label);
62
- const hasPrepend = computed(() => !!(slots == null ? void 0 : slots.prepend));
63
- const hasAppend = computed(() => !!(slots == null ? void 0 : slots.append));
64
- const hasDetails = computed(() => !props.noDetails && (props.details || !!(slots == null ? void 0 : slots.details)));
63
+ const fieldId = useId(props.id, { prefix: props.role });
64
+ const isCombobox = props.role === "combobox";
65
+ const isCheckBox = props.role === "checkbox";
66
+ const isRadio = props.role === "radio";
67
+ const hasDetails = computed(
68
+ () => !props.noDetails && (!!props.details || !!(slots == null ? void 0 : slots.details) || errors.hasError)
69
+ );
70
+ const normalizedAttrsMap = computed(() => Object.entries(attrs).reduce((acc, [k, v]) => {
71
+ if (FIELD_ATTRS.has(k) || k.startsWith("aria-") || k.startsWith("data-") || k.startsWith("on") && !INTERNAL_HANDLERS.has(k)) {
72
+ acc[k] = v;
73
+ }
74
+ return acc;
75
+ }, {}));
76
+ const ariaField = useAriaField(() => ({
77
+ fieldId,
78
+ label: props.label || isCheckBox || isRadio,
79
+ hasDetails: unref(hasDetails),
80
+ hasError: errors.hasError,
81
+ errorMessage: errors.errorMessage,
82
+ readonly: props.readonly,
83
+ disabled: props.disabled
84
+ }));
85
+ const ariaActivator = useAriaActivator(() => ({
86
+ expanded: state.focused,
87
+ haspopup: "listbox",
88
+ controls: `${fieldId}-menu`
89
+ }));
90
+ const fieldAttrs = computed(() => ({
91
+ ...unref(ariaField),
92
+ ...isCombobox ? { role: "combobox", ...unref(ariaActivator) } : {},
93
+ ...unref(normalizedAttrsMap)
94
+ }));
65
95
  const classes = computed(() => [
66
96
  {
67
97
  "c-input--has-error": errors.hasError,
68
- "c-input--default": !errors.hasError,
98
+ "c-input--default": !errors.hasError && !props.disabled && !props.readonly,
69
99
  "c-input--focused": state.focused,
70
100
  "c-input--disabled": props.disabled,
71
101
  "c-input--readonly": props.readonly,
72
- "c-input--has-value": state.hasValue,
73
- "c-input--has-prepend": unref(hasPrepend),
74
- "c-input--has-append": unref(hasAppend),
75
- [attrs.class]: !!attrs.class
102
+ "c-input--clearable": props.clearable
76
103
  },
104
+ attrs.class,
77
105
  ...unref(preset).root
78
106
  ]);
107
+ function focus() {
108
+ if (props.disabled || props.readonly) {
109
+ return;
110
+ }
111
+ state.focused = true;
112
+ }
113
+ function blur() {
114
+ state.focused = false;
115
+ if (!state.isDirty) {
116
+ state.isDirty = true;
117
+ }
118
+ }
119
+ function reset() {
120
+ resetValidate();
121
+ }
79
122
  onBeforeMount(() => {
80
123
  formApi == null ? void 0 : formApi.add(validate);
124
+ formApi == null ? void 0 : formApi.addReset(reset);
81
125
  });
82
126
  onBeforeUnmount(() => {
83
127
  formApi == null ? void 0 : formApi.remove(validate);
128
+ formApi == null ? void 0 : formApi.removeReset(reset);
84
129
  });
85
130
  __expose({
86
131
  validate,
87
- onFocus,
88
- onBlur,
89
- onInput
132
+ focus,
133
+ blur,
134
+ reset
90
135
  });
91
136
  return (_ctx, _cache) => {
92
137
  return openBlock(), createElementBlock(
@@ -95,76 +140,41 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
95
140
  class: normalizeClass(["c-input", classes.value])
96
141
  },
97
142
  [
98
- createElementVNode(
99
- "div",
100
- {
101
- class: normalizeClass(["c-input__field", unref(preset).field])
102
- },
103
- [
104
- _ctx.$slots.prepend ? (openBlock(), createElementBlock("div", _hoisted_1, [
105
- renderSlot(_ctx.$slots, "prepend")
106
- ])) : createCommentVNode("v-if", true),
107
- renderSlot(_ctx.$slots, "field", mergeProps(unref(errors), {
108
- validate: unref(validate),
109
- focused: unref(state).focused,
110
- label: __props.label,
111
- disabled: __props.disabled,
112
- readonly: __props.readonly,
113
- uid,
114
- presets: unref(preset).field,
115
- onFocus: unref(onFocus),
116
- onBlur: unref(onBlur),
117
- onInput: unref(onInput),
118
- attrs: unref(fieldAttrs)
119
- })),
120
- _ctx.$slots.append ? (openBlock(), createElementBlock("div", _hoisted_2, [
121
- renderSlot(_ctx.$slots, "append")
122
- ])) : createCommentVNode("v-if", true)
123
- ],
124
- 2
125
- /* CLASS */
126
- ),
127
- hasLabel.value ? (openBlock(), createElementBlock(
128
- "div",
129
- {
130
- key: 0,
131
- class: normalizeClass(["c-input__label", unref(preset).label])
132
- },
133
- [
134
- renderSlot(_ctx.$slots, "label", { uid }, () => [
135
- withMemo([__props.label], () => createVNode(unref(CLabel), {
136
- id: `${uid}-label`,
137
- tag: "label",
138
- for: uid
139
- }, {
140
- default: withCtx(() => [
141
- createTextVNode(
142
- toDisplayString(__props.label),
143
- 1
144
- /* TEXT */
145
- )
146
- ]),
147
- _: 1
148
- /* STABLE */
149
- }, 8, ["id"]), _cache, 0)
150
- ])
151
- ],
152
- 2
153
- /* CLASS */
154
- )) : createCommentVNode("v-if", true),
143
+ createElementVNode("div", _hoisted_1, [
144
+ renderSlot(_ctx.$slots, "field", mergeProps(unref(errors), {
145
+ validate: unref(validate),
146
+ label: __props.label,
147
+ disabled: __props.disabled,
148
+ readonly: __props.readonly,
149
+ focused: unref(state).focused,
150
+ uid: unref(fieldId),
151
+ preset: unref(preset).field,
152
+ focus,
153
+ blur,
154
+ clearable: __props.clearable,
155
+ reset,
156
+ attrs: fieldAttrs.value
157
+ }))
158
+ ]),
155
159
  hasDetails.value ? (openBlock(), createElementBlock("div", {
156
- key: 1,
157
- id: `${uid}-details`,
160
+ key: 0,
161
+ id: `${unref(fieldId)}-details`,
158
162
  class: normalizeClass(["c-input__details", unref(preset).details])
159
163
  }, [
160
- renderSlot(_ctx.$slots, "details", mergeProps(unref(errors), { uid }), () => [
161
- createTextVNode(
162
- toDisplayString(__props.details),
163
- 1
164
- /* TEXT */
165
- )
166
- ])
167
- ], 10, _hoisted_3)) : createCommentVNode("v-if", true)
164
+ createVNode(Transition, {
165
+ name: "fade-in-down",
166
+ mode: "out-in"
167
+ }, {
168
+ default: withCtx(() => [
169
+ renderSlot(_ctx.$slots, "details", mergeProps(unref(errors), {
170
+ details: __props.details,
171
+ uid: unref(fieldId)
172
+ }))
173
+ ]),
174
+ _: 3
175
+ /* FORWARDED */
176
+ })
177
+ ], 10, _hoisted_2)) : createCommentVNode("v-if", true)
168
178
  ],
169
179
  2
170
180
  /* CLASS */
@@ -1,6 +1,9 @@
1
- import { defineComponent, useModel, useAttrs, computed, provide, openBlock, createElementBlock, normalizeClass, renderSlot, mergeModels, unref, toRaw } from 'vue';
1
+ import { defineComponent, useModel, useAttrs, shallowRef, computed, unref, provide, openBlock, createElementBlock, normalizeClass, renderSlot, mergeModels, toRaw, nextTick } from 'vue';
2
2
  import { $LIST_API_KEY } from '../../constants/provide-keys.js';
3
+ import { useId } from '../../composables/use-id.js';
4
+ import { useKeyboard } from '../../composables/use-keyboard.js';
3
5
 
6
+ const _hoisted_1 = ["role", "tabindex", "aria-multiselectable", "aria-activedescendant"];
4
7
  var _sfc_main = /* @__PURE__ */ defineComponent({
5
8
  ...{
6
9
  name: "CList",
@@ -9,68 +12,137 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
9
12
  __name: "CList",
10
13
  props: /* @__PURE__ */ mergeModels({
11
14
  modelValue: {},
12
- multiple: { type: Boolean, default: false },
13
- mandatory: { type: Boolean, default: false },
14
- readonly: { type: Boolean, default: false }
15
+ multiple: { type: Boolean },
16
+ mandatory: { type: Boolean },
17
+ readonly: { type: Boolean },
18
+ selectable: { type: Boolean },
19
+ role: {}
15
20
  }, {
16
21
  "modelValue": { default: null },
17
22
  "modelModifiers": {}
18
23
  }),
19
24
  emits: ["update:modelValue"],
20
- setup(__props) {
25
+ setup(__props, { expose: __expose }) {
26
+ const props = __props;
21
27
  const model = useModel(__props, "modelValue");
22
28
  const attrs = useAttrs();
29
+ const focused = shallowRef(false);
30
+ const listEl = shallowRef();
31
+ const activeDescendant = shallowRef();
32
+ const listId = useId(void 0, { prefix: "c-list" });
33
+ let handlers = [];
34
+ let currentIndex = -1;
23
35
  const classes = computed(() => ({
24
- "c-list--readonly": __props.readonly,
36
+ "c-list--readonly": props.readonly,
25
37
  [attrs.class]: !!attrs.class
26
38
  }));
27
- function onSelect(listItem) {
28
- if (__props.readonly) return;
29
- if (__props.multiple) {
39
+ const role = computed(() => {
40
+ if (props.role) return props.role;
41
+ if (props.selectable) return "listbox";
42
+ return void 0;
43
+ });
44
+ const tabindex = computed(() => {
45
+ if (attrs.tabindex != null) return attrs.tabindex;
46
+ if (unref(focused)) return 0;
47
+ if (props.selectable) return -1;
48
+ if (props.role === "listbox") return -1;
49
+ if (props.role === "menu") return -1;
50
+ return void 0;
51
+ });
52
+ function select(listItem) {
53
+ if (props.readonly) return;
54
+ if (props.multiple) {
30
55
  model.value = [...unref(model), listItem];
31
56
  } else {
32
57
  model.value = listItem;
33
58
  }
34
59
  }
35
- function onUnselect(listItem) {
36
- var _a;
37
- if (__props.mandatory && !__props.multiple || __props.readonly) return;
38
- if (__props.multiple) {
39
- model.value = (_a = unref(model)) == null ? void 0 : _a.filter((item) => toRaw(item) !== toRaw(listItem));
60
+ function unselect(listItem) {
61
+ if (props.readonly) return;
62
+ if (props.multiple) {
63
+ const current = unref(model);
64
+ if (props.mandatory && (current == null ? void 0 : current.length) <= 1) {
65
+ return;
66
+ }
67
+ model.value = current == null ? void 0 : current.filter((item) => toRaw(item) !== toRaw(listItem));
40
68
  } else {
69
+ if (props.mandatory) return;
41
70
  model.value = null;
42
71
  }
43
72
  }
44
73
  function isActive(listItem) {
45
74
  var _a;
46
- if (__props.multiple) {
75
+ if (props.multiple) {
47
76
  return (_a = unref(model)) == null ? void 0 : _a.some((item) => toRaw(item) === toRaw(listItem));
48
77
  } else {
49
78
  return toRaw(model.value) === toRaw(listItem);
50
79
  }
51
80
  }
81
+ function register(itemControls) {
82
+ const idx = handlers.length;
83
+ handlers.push(itemControls);
84
+ return idx;
85
+ }
86
+ function unregister(itemControls) {
87
+ handlers = handlers.filter((it) => it !== itemControls);
88
+ }
89
+ function setDescendant(id) {
90
+ activeDescendant.value = id;
91
+ }
92
+ async function focus() {
93
+ focused.value = true;
94
+ await nextTick();
95
+ unref(listEl).focus();
96
+ }
97
+ function navigateDown() {
98
+ var _a;
99
+ if (!handlers.length) return;
100
+ const next = Math.min(handlers.length - 1, currentIndex + 1);
101
+ (_a = handlers[currentIndex]) == null ? void 0 : _a.blur();
102
+ handlers[next].focus();
103
+ currentIndex = next;
104
+ }
105
+ function navigateUp() {
106
+ var _a;
107
+ if (!handlers.length || currentIndex <= 0) return;
108
+ const prev = currentIndex - 1;
109
+ (_a = handlers[currentIndex]) == null ? void 0 : _a.blur();
110
+ handlers[prev].focus();
111
+ currentIndex = prev;
112
+ }
113
+ const { onKeydown } = useKeyboard({
114
+ ArrowDown: navigateDown,
115
+ ArrowUp: navigateUp
116
+ });
117
+ __expose({ focus, listId, activeDescendant, navigateDown, navigateUp });
52
118
  provide($LIST_API_KEY, {
53
- model,
54
- select: onSelect,
55
- unselect: onUnselect,
56
- isActive
119
+ role,
120
+ listId,
121
+ register,
122
+ unregister,
123
+ select,
124
+ unselect,
125
+ isActive,
126
+ setDescendant
57
127
  });
58
128
  return (_ctx, _cache) => {
59
- return openBlock(), createElementBlock(
60
- "ul",
61
- {
62
- class: normalizeClass(["c-list", classes.value])
63
- },
64
- [
65
- renderSlot(_ctx.$slots, "default", {
66
- select: onSelect,
67
- unselect: onUnselect,
68
- isActive
69
- })
70
- ],
71
- 2
72
- /* CLASS */
73
- );
129
+ return openBlock(), createElementBlock("ul", {
130
+ ref_key: "listEl",
131
+ ref: listEl,
132
+ class: normalizeClass(["c-list", classes.value]),
133
+ role: role.value,
134
+ tabindex: tabindex.value,
135
+ "aria-multiselectable": __props.multiple,
136
+ "aria-activedescendant": activeDescendant.value,
137
+ onKeydown: _cache[0] || (_cache[0] = //@ts-ignore
138
+ (...args) => unref(onKeydown) && unref(onKeydown)(...args))
139
+ }, [
140
+ renderSlot(_ctx.$slots, "default", {
141
+ select,
142
+ unselect,
143
+ isActive
144
+ })
145
+ ], 42, _hoisted_1);
74
146
  };
75
147
  }
76
148
  });