cisse-vue-ui 0.7.3 → 0.7.5

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 (330) hide show
  1. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs +145 -0
  2. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs.map +1 -0
  3. package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs +98 -0
  4. package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs.map +1 -0
  5. package/dist/{TagsInput-DtoJKN3L.js → CheckboxGroup.vue_vue_type_script_setup_true_lang-BOGul8zU.js} +400 -225
  6. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-BOGul8zU.js.map +1 -0
  7. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-BcoXb8Xg.cjs +3869 -0
  8. package/dist/CheckboxGroup.vue_vue_type_script_setup_true_lang-BcoXb8Xg.cjs.map +1 -0
  9. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs +928 -0
  10. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs.map +1 -0
  11. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs +228 -0
  12. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs.map +1 -0
  13. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs +2242 -0
  14. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs.map +1 -0
  15. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +149 -0
  16. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +1 -0
  17. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CZ-TibKk.cjs +764 -0
  18. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CZ-TibKk.cjs.map +1 -0
  19. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs +10 -0
  20. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs.map +1 -0
  21. package/dist/components/core/Accordion.stories.d.ts +11 -0
  22. package/dist/components/core/Accordion.test.d.ts +1 -0
  23. package/dist/components/core/Accordion.vue.d.ts +27 -0
  24. package/dist/components/core/AccordionItem.stories.d.ts +10 -0
  25. package/dist/components/core/AccordionItem.vue.d.ts +29 -0
  26. package/dist/components/core/AutocompleteComponent.stories.d.ts +14 -0
  27. package/dist/components/core/AutocompleteComponent.test.d.ts +1 -0
  28. package/dist/components/core/AutocompleteComponent.vue.d.ts +25 -0
  29. package/dist/components/core/Avatar.stories.d.ts +12 -0
  30. package/dist/components/core/Avatar.test.d.ts +1 -0
  31. package/dist/components/core/Avatar.vue.d.ts +20 -0
  32. package/dist/components/core/Breadcrumb.stories.d.ts +11 -0
  33. package/dist/components/core/Breadcrumb.test.d.ts +1 -0
  34. package/dist/components/core/Breadcrumb.vue.d.ts +26 -0
  35. package/dist/components/core/Button.stories.d.ts +18 -0
  36. package/dist/components/core/Button.test.d.ts +1 -0
  37. package/dist/components/core/Button.vue.d.ts +49 -0
  38. package/dist/components/core/CardComponent.stories.d.ts +13 -0
  39. package/dist/components/core/CardComponent.test.d.ts +1 -0
  40. package/dist/components/core/CardComponent.vue.d.ts +40 -0
  41. package/dist/components/core/CollapsibleCard.stories.d.ts +10 -0
  42. package/dist/components/core/CollapsibleCard.test.d.ts +1 -0
  43. package/dist/components/core/CollapsibleCard.vue.d.ts +38 -0
  44. package/dist/components/core/DarkModeToggle.stories.d.ts +15 -0
  45. package/dist/components/core/DarkModeToggle.test.d.ts +1 -0
  46. package/dist/components/core/DarkModeToggle.vue.d.ts +21 -0
  47. package/dist/components/core/Drawer.stories.d.ts +12 -0
  48. package/dist/components/core/Drawer.test.d.ts +1 -0
  49. package/dist/components/core/Drawer.vue.d.ts +50 -0
  50. package/dist/components/core/Dropdown.stories.d.ts +11 -0
  51. package/dist/components/core/Dropdown.test.d.ts +1 -0
  52. package/dist/components/core/Dropdown.vue.d.ts +56 -0
  53. package/dist/components/core/FilterTabs.stories.d.ts +14 -0
  54. package/dist/components/core/FilterTabs.test.d.ts +1 -0
  55. package/dist/components/core/FilterTabs.vue.d.ts +29 -0
  56. package/dist/components/core/MenuItem.stories.d.ts +13 -0
  57. package/dist/components/core/MenuItem.test.d.ts +1 -0
  58. package/dist/components/core/MenuItem.vue.d.ts +16 -0
  59. package/dist/components/core/MobileList.stories.d.ts +13 -0
  60. package/dist/components/core/MobileList.test.d.ts +1 -0
  61. package/dist/components/core/MobileList.vue.d.ts +86 -0
  62. package/dist/components/core/Popover.stories.d.ts +10 -0
  63. package/dist/components/core/Popover.test.d.ts +1 -0
  64. package/dist/components/core/Popover.vue.d.ts +44 -0
  65. package/dist/components/core/ResponsiveList.stories.d.ts +15 -0
  66. package/dist/components/core/ResponsiveList.test.d.ts +1 -0
  67. package/dist/components/core/ResponsiveList.vue.d.ts +128 -0
  68. package/dist/components/core/StatsCard.stories.d.ts +15 -0
  69. package/dist/components/core/StatsCard.test.d.ts +1 -0
  70. package/dist/components/core/StatsCard.vue.d.ts +44 -0
  71. package/dist/components/core/StatsGrid.stories.d.ts +12 -0
  72. package/dist/components/core/StatsGrid.test.d.ts +1 -0
  73. package/dist/components/core/StatsGrid.vue.d.ts +16 -0
  74. package/dist/components/core/StatusBadge.stories.d.ts +13 -0
  75. package/dist/components/core/StatusBadge.test.d.ts +1 -0
  76. package/dist/components/core/StatusBadge.vue.d.ts +21 -0
  77. package/dist/components/core/Stepper.stories.d.ts +12 -0
  78. package/dist/components/core/Stepper.test.d.ts +1 -0
  79. package/dist/components/core/Stepper.vue.d.ts +22 -0
  80. package/dist/components/core/TabPanel.stories.d.ts +8 -0
  81. package/dist/components/core/TabPanel.test.d.ts +1 -0
  82. package/dist/components/core/TabPanel.vue.d.ts +21 -0
  83. package/dist/components/core/TableAction.stories.d.ts +14 -0
  84. package/dist/components/core/TableAction.test.d.ts +1 -0
  85. package/dist/components/core/TableAction.vue.d.ts +8 -0
  86. package/dist/components/core/TableComponent.stories.d.ts +16 -0
  87. package/dist/components/core/TableComponent.test.d.ts +1 -0
  88. package/dist/components/core/TableComponent.vue.d.ts +67 -0
  89. package/dist/components/core/Tabs.stories.d.ts +10 -0
  90. package/dist/components/core/Tabs.test.d.ts +1 -0
  91. package/dist/components/core/Tabs.vue.d.ts +39 -0
  92. package/dist/components/core/Timeline.stories.d.ts +11 -0
  93. package/dist/components/core/Timeline.test.d.ts +1 -0
  94. package/dist/components/core/Timeline.vue.d.ts +34 -0
  95. package/dist/components/core/Tooltip.stories.d.ts +10 -0
  96. package/dist/components/core/Tooltip.test.d.ts +1 -0
  97. package/dist/components/core/Tooltip.vue.d.ts +34 -0
  98. package/dist/components/core/index.cjs +33 -0
  99. package/dist/components/core/index.cjs.map +1 -0
  100. package/dist/components/core/index.test.d.ts +1 -0
  101. package/dist/components/feedback/Alert.stories.d.ts +13 -0
  102. package/dist/components/feedback/Alert.test.d.ts +1 -0
  103. package/dist/components/feedback/Alert.vue.d.ts +34 -0
  104. package/dist/components/feedback/CardSkeleton.stories.d.ts +11 -0
  105. package/dist/components/feedback/CardSkeleton.test.d.ts +1 -0
  106. package/dist/components/feedback/CardSkeleton.vue.d.ts +14 -0
  107. package/dist/components/feedback/ConfirmDialog.stories.d.ts +12 -0
  108. package/dist/components/feedback/ConfirmDialog.test.d.ts +1 -0
  109. package/dist/components/feedback/ConfirmDialog.vue.d.ts +53 -0
  110. package/dist/components/feedback/EmptyState.stories.d.ts +13 -0
  111. package/dist/components/feedback/EmptyState.test.d.ts +1 -0
  112. package/dist/components/feedback/EmptyState.vue.d.ts +29 -0
  113. package/dist/components/feedback/ListSkeleton.stories.d.ts +12 -0
  114. package/dist/components/feedback/ListSkeleton.test.d.ts +1 -0
  115. package/dist/components/feedback/ListSkeleton.vue.d.ts +17 -0
  116. package/dist/components/feedback/LoadingSpinner.stories.d.ts +11 -0
  117. package/dist/components/feedback/LoadingSpinner.test.d.ts +1 -0
  118. package/dist/components/feedback/LoadingSpinner.vue.d.ts +12 -0
  119. package/dist/components/feedback/Modal.stories.d.ts +11 -0
  120. package/dist/components/feedback/Modal.test.d.ts +1 -0
  121. package/dist/components/feedback/Modal.vue.d.ts +47 -0
  122. package/dist/components/feedback/NotificationComponent.stories.d.ts +14 -0
  123. package/dist/components/feedback/NotificationComponent.test.d.ts +1 -0
  124. package/dist/components/feedback/NotificationComponent.vue.d.ts +12 -0
  125. package/dist/components/feedback/NotificationList.stories.d.ts +11 -0
  126. package/dist/components/feedback/NotificationList.test.d.ts +1 -0
  127. package/dist/components/feedback/NotificationList.vue.d.ts +18 -0
  128. package/dist/components/feedback/PaginationControls.stories.d.ts +12 -0
  129. package/dist/components/feedback/PaginationControls.test.d.ts +1 -0
  130. package/dist/components/feedback/PaginationControls.vue.d.ts +21 -0
  131. package/dist/components/feedback/Progress.stories.d.ts +14 -0
  132. package/dist/components/feedback/Progress.test.d.ts +1 -0
  133. package/dist/components/feedback/Progress.vue.d.ts +30 -0
  134. package/dist/components/feedback/Skeleton.stories.d.ts +15 -0
  135. package/dist/components/feedback/Skeleton.test.d.ts +1 -0
  136. package/dist/components/feedback/Skeleton.vue.d.ts +19 -0
  137. package/dist/components/feedback/TableSkeleton.stories.d.ts +12 -0
  138. package/dist/components/feedback/TableSkeleton.test.d.ts +1 -0
  139. package/dist/components/feedback/TableSkeleton.vue.d.ts +14 -0
  140. package/dist/components/feedback/Toast.stories.d.ts +12 -0
  141. package/dist/components/feedback/Toast.test.d.ts +1 -0
  142. package/dist/components/feedback/Toast.vue.d.ts +23 -0
  143. package/dist/components/feedback/ToastContainer.stories.d.ts +15 -0
  144. package/dist/components/feedback/ToastContainer.test.d.ts +1 -0
  145. package/dist/components/feedback/ToastContainer.vue.d.ts +24 -0
  146. package/dist/components/feedback/index.cjs +20 -0
  147. package/dist/components/feedback/index.cjs.map +1 -0
  148. package/dist/components/feedback/index.test.d.ts +1 -0
  149. package/dist/components/form/Checkbox.stories.d.ts +13 -0
  150. package/dist/components/form/Checkbox.test.d.ts +1 -0
  151. package/dist/components/form/Checkbox.vue.d.ts +22 -0
  152. package/dist/components/form/CheckboxGroup.test.d.ts +1 -0
  153. package/dist/components/form/CheckboxGroup.vue.d.ts +26 -0
  154. package/dist/components/form/ColorPicker.stories.d.ts +12 -0
  155. package/dist/components/form/ColorPicker.test.d.ts +1 -0
  156. package/dist/components/form/ColorPicker.vue.d.ts +26 -0
  157. package/dist/components/form/Combobox.stories.d.ts +15 -0
  158. package/dist/components/form/Combobox.test.d.ts +1 -0
  159. package/dist/components/form/Combobox.vue.d.ts +46 -0
  160. package/dist/components/form/DatePicker.stories.d.ts +15 -0
  161. package/dist/components/form/DatePicker.test.d.ts +1 -0
  162. package/dist/components/form/DatePicker.vue.d.ts +36 -0
  163. package/dist/components/form/EmailInput.stories.d.ts +13 -0
  164. package/dist/components/form/EmailInput.test.d.ts +1 -0
  165. package/dist/components/form/EmailInput.vue.d.ts +32 -0
  166. package/dist/components/form/FileUpload.stories.d.ts +12 -0
  167. package/dist/components/form/FileUpload.test.d.ts +1 -0
  168. package/dist/components/form/FileUpload.vue.d.ts +40 -0
  169. package/dist/components/form/FormActions.stories.d.ts +18 -0
  170. package/dist/components/form/FormActions.test.d.ts +1 -0
  171. package/dist/components/form/FormActions.vue.d.ts +56 -0
  172. package/dist/components/form/FormGroup.stories.d.ts +10 -0
  173. package/dist/components/form/FormGroup.test.d.ts +1 -0
  174. package/dist/components/form/FormGroup.vue.d.ts +30 -0
  175. package/dist/components/form/FormHelp.stories.d.ts +11 -0
  176. package/dist/components/form/FormHelp.test.d.ts +1 -0
  177. package/dist/components/form/FormHelp.vue.d.ts +23 -0
  178. package/dist/components/form/FormInput.stories.d.ts +12 -0
  179. package/dist/components/form/FormInput.test.d.ts +1 -0
  180. package/dist/components/form/FormInput.vue.d.ts +13 -0
  181. package/dist/components/form/FormLabel.stories.d.ts +12 -0
  182. package/dist/components/form/FormLabel.test.d.ts +1 -0
  183. package/dist/components/form/FormLabel.vue.d.ts +21 -0
  184. package/dist/components/form/FormSection.stories.d.ts +13 -0
  185. package/dist/components/form/FormSection.test.d.ts +1 -0
  186. package/dist/components/form/FormSection.vue.d.ts +49 -0
  187. package/dist/components/form/FormSelect.stories.d.ts +13 -0
  188. package/dist/components/form/FormSelect.test.d.ts +1 -0
  189. package/dist/components/form/FormSelect.vue.d.ts +55 -0
  190. package/dist/components/form/IconPicker.vue.d.ts +33 -0
  191. package/dist/components/form/InputWrapper.stories.d.ts +16 -0
  192. package/dist/components/form/InputWrapper.test.d.ts +1 -0
  193. package/dist/components/form/InputWrapper.vue.d.ts +40 -0
  194. package/dist/components/form/MoneyInput.stories.d.ts +16 -0
  195. package/dist/components/form/MoneyInput.test.d.ts +1 -0
  196. package/dist/components/form/MoneyInput.vue.d.ts +40 -0
  197. package/dist/components/form/NumberInput.stories.d.ts +14 -0
  198. package/dist/components/form/NumberInput.test.d.ts +1 -0
  199. package/dist/components/form/NumberInput.vue.d.ts +39 -0
  200. package/dist/components/form/OTPInput.stories.d.ts +13 -0
  201. package/dist/components/form/OTPInput.test.d.ts +1 -0
  202. package/dist/components/form/OTPInput.vue.d.ts +33 -0
  203. package/dist/components/form/PasswordInput.stories.d.ts +15 -0
  204. package/dist/components/form/PasswordInput.test.d.ts +1 -0
  205. package/dist/components/form/PasswordInput.vue.d.ts +36 -0
  206. package/dist/components/form/PercentInput.stories.d.ts +12 -0
  207. package/dist/components/form/PercentInput.test.d.ts +1 -0
  208. package/dist/components/form/PercentInput.vue.d.ts +38 -0
  209. package/dist/components/form/PhoneInput.stories.d.ts +13 -0
  210. package/dist/components/form/PhoneInput.test.d.ts +1 -0
  211. package/dist/components/form/PhoneInput.vue.d.ts +91 -0
  212. package/dist/components/form/QuantityInput.stories.d.ts +12 -0
  213. package/dist/components/form/QuantityInput.test.d.ts +1 -0
  214. package/dist/components/form/QuantityInput.vue.d.ts +32 -0
  215. package/dist/components/form/RangeSlider.stories.d.ts +13 -0
  216. package/dist/components/form/RangeSlider.test.d.ts +1 -0
  217. package/dist/components/form/RangeSlider.vue.d.ts +35 -0
  218. package/dist/components/form/Rating.stories.d.ts +16 -0
  219. package/dist/components/form/Rating.test.d.ts +1 -0
  220. package/dist/components/form/Rating.vue.d.ts +43 -0
  221. package/dist/components/form/SearchInput.stories.d.ts +13 -0
  222. package/dist/components/form/SearchInput.test.d.ts +1 -0
  223. package/dist/components/form/SearchInput.vue.d.ts +26 -0
  224. package/dist/components/form/Slider.stories.d.ts +13 -0
  225. package/dist/components/form/Slider.test.d.ts +1 -0
  226. package/dist/components/form/Slider.vue.d.ts +29 -0
  227. package/dist/components/form/Switch.stories.d.ts +11 -0
  228. package/dist/components/form/Switch.test.d.ts +1 -0
  229. package/dist/components/form/Switch.vue.d.ts +23 -0
  230. package/dist/components/form/TagsInput.stories.d.ts +13 -0
  231. package/dist/components/form/TagsInput.test.d.ts +1 -0
  232. package/dist/components/form/TagsInput.vue.d.ts +37 -0
  233. package/dist/components/form/TextArea.test.d.ts +1 -0
  234. package/dist/components/form/TextArea.vue.d.ts +40 -0
  235. package/dist/components/form/URLInput.stories.d.ts +11 -0
  236. package/dist/components/form/URLInput.test.d.ts +1 -0
  237. package/dist/components/form/URLInput.vue.d.ts +32 -0
  238. package/dist/components/form/index.cjs +36 -0
  239. package/dist/components/form/index.cjs.map +1 -0
  240. package/dist/components/form/index.d.ts +2 -0
  241. package/dist/components/form/index.js +3 -1
  242. package/dist/components/form/index.test.d.ts +1 -0
  243. package/dist/components/index.cjs +93 -0
  244. package/dist/components/index.cjs.map +1 -0
  245. package/dist/components/index.d.ts +5 -0
  246. package/dist/components/index.js +3 -1
  247. package/dist/components/index.test.d.ts +1 -0
  248. package/dist/components/layout/AuthLayout.stories.d.ts +10 -0
  249. package/dist/components/layout/AuthLayout.test.d.ts +1 -0
  250. package/dist/components/layout/AuthLayout.vue.d.ts +88 -0
  251. package/dist/components/layout/BaseLayout.stories.d.ts +11 -0
  252. package/dist/components/layout/BaseLayout.test.d.ts +1 -0
  253. package/dist/components/layout/BaseLayout.vue.d.ts +77 -0
  254. package/dist/components/layout/PageHero.stories.d.ts +11 -0
  255. package/dist/components/layout/PageHero.test.d.ts +1 -0
  256. package/dist/components/layout/PageHero.vue.d.ts +55 -0
  257. package/dist/components/layout/PageLayout.stories.d.ts +10 -0
  258. package/dist/components/layout/PageLayout.test.d.ts +1 -0
  259. package/dist/components/layout/PageLayout.vue.d.ts +37 -0
  260. package/dist/components/layout/index.cjs +8 -0
  261. package/dist/components/layout/index.cjs.map +1 -0
  262. package/dist/components/layout/index.test.d.ts +1 -0
  263. package/dist/components/type/BadgeType.stories.d.ts +13 -0
  264. package/dist/components/type/BadgeType.test.d.ts +1 -0
  265. package/dist/components/type/BooleanType.stories.d.ts +12 -0
  266. package/dist/components/type/BooleanType.test.d.ts +1 -0
  267. package/dist/components/type/DateType.stories.d.ts +12 -0
  268. package/dist/components/type/DateType.test.d.ts +1 -0
  269. package/dist/components/type/NumberType.stories.d.ts +11 -0
  270. package/dist/components/type/NumberType.test.d.ts +1 -0
  271. package/dist/components/type/TextType.stories.d.ts +10 -0
  272. package/dist/components/type/TextType.test.d.ts +1 -0
  273. package/dist/components/type/index.cjs +9 -0
  274. package/dist/components/type/index.cjs.map +1 -0
  275. package/dist/components/type/index.test.d.ts +1 -0
  276. package/dist/composables/index.cjs +19 -0
  277. package/dist/composables/index.cjs.map +1 -0
  278. package/dist/composables/index.d.ts +8 -0
  279. package/dist/composables/index.test.d.ts +1 -0
  280. package/dist/composables/useDarkMode.d.ts +14 -0
  281. package/dist/composables/useDarkMode.test.d.ts +1 -0
  282. package/dist/composables/useDropdown.d.ts +51 -0
  283. package/dist/composables/useDropdown.test.d.ts +1 -0
  284. package/dist/composables/useExportCSV.d.ts +10 -0
  285. package/dist/composables/useExportCSV.test.d.ts +1 -0
  286. package/dist/composables/useFocusTrap.d.ts +41 -0
  287. package/dist/composables/useFocusTrap.test.d.ts +1 -0
  288. package/dist/composables/useId.d.ts +42 -0
  289. package/dist/composables/useId.test.d.ts +1 -0
  290. package/dist/composables/useModal.d.ts +60 -0
  291. package/dist/composables/useModal.test.d.ts +1 -0
  292. package/dist/composables/useNotifications.d.ts +27 -0
  293. package/dist/composables/useNotifications.test.d.ts +1 -0
  294. package/dist/composables/useToast.d.ts +30 -0
  295. package/dist/composables/useToast.test.d.ts +1 -0
  296. package/dist/index-D1x3TH9k.cjs +401 -0
  297. package/dist/index-D1x3TH9k.cjs.map +1 -0
  298. package/dist/index-DXO2TliH.cjs +96 -0
  299. package/dist/index-DXO2TliH.cjs.map +1 -0
  300. package/dist/index-DpEkzIVv.js +97 -0
  301. package/dist/index-DpEkzIVv.js.map +1 -0
  302. package/dist/index.cjs +125 -0
  303. package/dist/index.cjs.map +1 -0
  304. package/dist/index.d.ts +5 -0
  305. package/dist/index.js +4 -2
  306. package/dist/index.test.d.ts +1 -0
  307. package/dist/plugin.d.ts +24 -0
  308. package/dist/style.css +2 -0
  309. package/dist/types/components.d.ts +28 -0
  310. package/dist/types/form.d.ts +37 -0
  311. package/dist/types/index.cjs +2 -0
  312. package/dist/types/index.cjs.map +1 -0
  313. package/dist/types/index.d.ts +4 -0
  314. package/dist/types/index.test.d.ts +1 -0
  315. package/dist/types/notification.d.ts +12 -0
  316. package/dist/types/property.d.ts +34 -0
  317. package/dist/useDarkMode-DLZcJEUQ.cjs +52 -0
  318. package/dist/useDarkMode-DLZcJEUQ.cjs.map +1 -0
  319. package/dist/useDropdown-DHFnd259.cjs +130 -0
  320. package/dist/useDropdown-DHFnd259.cjs.map +1 -0
  321. package/dist/useFocusTrap-kcxO8AeU.cjs +119 -0
  322. package/dist/useFocusTrap-kcxO8AeU.cjs.map +1 -0
  323. package/dist/useId-nxrBaIC9.cjs +25 -0
  324. package/dist/useId-nxrBaIC9.cjs.map +1 -0
  325. package/dist/useToast-Bk60GArg.cjs +176 -0
  326. package/dist/useToast-Bk60GArg.cjs.map +1 -0
  327. package/package.json +1 -1
  328. package/dist/TagsInput-DtoJKN3L.js.map +0 -1
  329. package/dist/index-F9yanU6_.js +0 -95
  330. package/dist/index-F9yanU6_.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ export type StatusBadgeVariant = 'default' | 'success' | 'error' | 'warning' | 'info' | 'blue' | 'orange' | 'green' | 'red' | 'yellow' | 'purple' | 'pink' | 'gray';
2
+ export type TableActionColor = 'info' | 'warning' | 'success' | 'error';
3
+ export type ModalSize = 'sm' | 'default' | 'lg' | 'xl' | 'full';
4
+ export type SpinnerSize = 'sm' | 'md' | 'lg';
5
+ export interface MenuItemProps {
6
+ label: string;
7
+ icon: string;
8
+ link: string;
9
+ notification?: boolean;
10
+ }
11
+ export interface PaginationProps {
12
+ currentPage: number;
13
+ totalPages: number;
14
+ loading?: boolean;
15
+ pageSize?: number;
16
+ pageSizeOptions?: number[];
17
+ showPageSize?: boolean;
18
+ }
19
+ export type { ButtonVariant, ButtonSize } from '../components/core/Button.vue';
20
+ export type { AvatarSize } from '../components/core/Avatar.vue';
21
+ export type { Tab } from '../components/core/Tabs.vue';
22
+ export type { DropdownItem } from '../components/core/Dropdown.vue';
23
+ export type { Step } from '../components/core/Stepper.vue';
24
+ export type { AlertVariant } from '../components/feedback/Alert.vue';
25
+ export type { PageBreadcrumb } from '../components/layout/PageLayout.vue';
26
+ export type { SortDirection } from '../components/core/TableComponent.vue';
27
+ export type { MenuPosition, UserMenuItem } from '../components/layout/BaseLayout.vue';
28
+ export type { PageHeroStat, PageHeroColorScheme } from '../components/layout/PageHero.vue';
@@ -0,0 +1,37 @@
1
+ export interface InputProps {
2
+ type?: string;
3
+ value?: string;
4
+ placeholder?: string;
5
+ disabled?: boolean;
6
+ invalid?: boolean;
7
+ id?: string;
8
+ name?: string;
9
+ /** Mark as required field */
10
+ required?: boolean;
11
+ /** ID of element that describes this input (for aria-describedby) */
12
+ describedBy?: string;
13
+ /** Icon name (iconify format) - displayed on the left */
14
+ icon?: string;
15
+ /** Icon on the right side */
16
+ iconRight?: string;
17
+ }
18
+ export interface SelectOption {
19
+ value: string | number | boolean | null;
20
+ label: string;
21
+ hidden?: boolean;
22
+ }
23
+ export interface SelectProps extends InputProps {
24
+ options?: SelectOption[];
25
+ }
26
+ export interface FormGroupProps extends InputProps, SelectProps {
27
+ label?: string;
28
+ cols?: number;
29
+ hidden?: boolean;
30
+ error?: string | boolean;
31
+ /** Set to true to render a select instead of input */
32
+ select?: boolean;
33
+ }
34
+ export interface AutocompleteOption {
35
+ value: string;
36
+ label: string;
37
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './property';
2
+ export * from './notification';
3
+ export * from './form';
4
+ export * from './components';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ export type NotificationType = 'success' | 'warning' | 'error' | 'info';
2
+ export interface Notification {
3
+ id: string;
4
+ type: NotificationType;
5
+ message: string;
6
+ title?: string | null;
7
+ duration?: number;
8
+ }
9
+ export interface NotificationOptions {
10
+ duration?: number;
11
+ title?: string;
12
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Table column property definition
3
+ *
4
+ * This interface defines how table columns are configured and rendered.
5
+ * The `type` field automatically loads the corresponding type component.
6
+ *
7
+ * Built-in types:
8
+ * - 'text': Default text display (TextType.vue)
9
+ * - 'number': Formatted number display (NumberType.vue)
10
+ * - 'date': Formatted date display (DateType.vue)
11
+ * - 'boolean': Yes/No with icons (BooleanType.vue)
12
+ * - 'badge': Badge display (BadgeType.vue)
13
+ */
14
+ export interface Property {
15
+ /** Column key - corresponds to the data field name */
16
+ name: string;
17
+ /** Display label for the column header */
18
+ label?: string;
19
+ /**
20
+ * Column type for automatic rendering (default: 'text')
21
+ * Built-in: 'text' | 'number' | 'date' | 'badge' | 'boolean'
22
+ */
23
+ type?: 'text' | 'number' | 'date' | 'badge' | 'boolean' | string;
24
+ /** Whether the column is sortable (default: false) */
25
+ sortable?: boolean;
26
+ /** Whether to hide the column (default: false) */
27
+ hidden?: boolean;
28
+ /** Text alignment in the column (default: 'left') */
29
+ align?: 'left' | 'center' | 'right';
30
+ /** Optional Tailwind CSS classes to apply to column cells */
31
+ className?: string;
32
+ /** Whether the column is the main/primary column (default: false) */
33
+ main?: boolean;
34
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ function useDarkMode(options = {}) {
4
+ const {
5
+ selector = "html",
6
+ attribute = "class",
7
+ storageKey = "dark-mode",
8
+ defaultValue = false
9
+ } = options;
10
+ const isDark = vue.ref(defaultValue);
11
+ const getInitialValue = () => {
12
+ if (typeof window === "undefined") return defaultValue;
13
+ const stored = localStorage.getItem(storageKey);
14
+ if (stored !== null) {
15
+ return stored === "true";
16
+ }
17
+ return window.matchMedia("(prefers-color-scheme: dark)").matches;
18
+ };
19
+ const updateDOM = (dark) => {
20
+ if (typeof document === "undefined") return;
21
+ const element = document.querySelector(selector);
22
+ if (!element) return;
23
+ if (attribute === "class") {
24
+ element.classList.toggle("dark", dark);
25
+ } else {
26
+ element.setAttribute(attribute, dark ? "dark" : "light");
27
+ }
28
+ };
29
+ const toggle = () => {
30
+ isDark.value = !isDark.value;
31
+ };
32
+ const set = (value) => {
33
+ isDark.value = value;
34
+ };
35
+ vue.watch(isDark, (newValue) => {
36
+ updateDOM(newValue);
37
+ if (typeof localStorage !== "undefined") {
38
+ localStorage.setItem(storageKey, String(newValue));
39
+ }
40
+ });
41
+ vue.onMounted(() => {
42
+ isDark.value = getInitialValue();
43
+ updateDOM(isDark.value);
44
+ });
45
+ return {
46
+ isDark,
47
+ toggle,
48
+ set
49
+ };
50
+ }
51
+ exports.useDarkMode = useDarkMode;
52
+ //# sourceMappingURL=useDarkMode-DLZcJEUQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDarkMode-DLZcJEUQ.cjs","sources":["../src/composables/useDarkMode.ts"],"sourcesContent":["import { ref, watch, onMounted } from 'vue'\n\nexport interface DarkModeOptions {\n selector?: string\n attribute?: string\n storageKey?: string\n defaultValue?: boolean\n}\n\n/**\n * Composable for managing dark mode state\n */\nexport function useDarkMode(options: DarkModeOptions = {}) {\n const {\n selector = 'html',\n attribute = 'class',\n storageKey = 'dark-mode',\n defaultValue = false,\n } = options\n\n const isDark = ref(defaultValue)\n\n const getInitialValue = (): boolean => {\n if (typeof window === 'undefined') return defaultValue\n\n const stored = localStorage.getItem(storageKey)\n if (stored !== null) {\n return stored === 'true'\n }\n\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n }\n\n const updateDOM = (dark: boolean) => {\n if (typeof document === 'undefined') return\n\n const element = document.querySelector(selector)\n if (!element) return\n\n if (attribute === 'class') {\n element.classList.toggle('dark', dark)\n } else {\n element.setAttribute(attribute, dark ? 'dark' : 'light')\n }\n }\n\n const toggle = () => {\n isDark.value = !isDark.value\n }\n\n const set = (value: boolean) => {\n isDark.value = value\n }\n\n watch(isDark, (newValue) => {\n updateDOM(newValue)\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(storageKey, String(newValue))\n }\n })\n\n onMounted(() => {\n isDark.value = getInitialValue()\n updateDOM(isDark.value)\n })\n\n return {\n isDark,\n toggle,\n set,\n }\n}\n"],"names":["ref","watch","onMounted"],"mappings":";;AAYO,SAAS,YAAY,UAA2B,IAAI;AACzD,QAAM;AAAA,IACJ,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,EAAA,IACb;AAEJ,QAAM,SAASA,IAAAA,IAAI,YAAY;AAE/B,QAAM,kBAAkB,MAAe;AACrC,QAAI,OAAO,WAAW,YAAa,QAAO;AAE1C,UAAM,SAAS,aAAa,QAAQ,UAAU;AAC9C,QAAI,WAAW,MAAM;AACnB,aAAO,WAAW;AAAA,IACpB;AAEA,WAAO,OAAO,WAAW,8BAA8B,EAAE;AAAA,EAC3D;AAEA,QAAM,YAAY,CAAC,SAAkB;AACnC,QAAI,OAAO,aAAa,YAAa;AAErC,UAAM,UAAU,SAAS,cAAc,QAAQ;AAC/C,QAAI,CAAC,QAAS;AAEd,QAAI,cAAc,SAAS;AACzB,cAAQ,UAAU,OAAO,QAAQ,IAAI;AAAA,IACvC,OAAO;AACL,cAAQ,aAAa,WAAW,OAAO,SAAS,OAAO;AAAA,IACzD;AAAA,EACF;AAEA,QAAM,SAAS,MAAM;AACnB,WAAO,QAAQ,CAAC,OAAO;AAAA,EACzB;AAEA,QAAM,MAAM,CAAC,UAAmB;AAC9B,WAAO,QAAQ;AAAA,EACjB;AAEAC,YAAM,QAAQ,CAAC,aAAa;AAC1B,cAAU,QAAQ;AAClB,QAAI,OAAO,iBAAiB,aAAa;AACvC,mBAAa,QAAQ,YAAY,OAAO,QAAQ,CAAC;AAAA,IACnD;AAAA,EACF,CAAC;AAEDC,MAAAA,UAAU,MAAM;AACd,WAAO,QAAQ,gBAAA;AACf,cAAU,OAAO,KAAK;AAAA,EACxB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ function useDropdown(triggerRef, dropdownRef, options = {}) {
4
+ const { teleport = true, align = "left", gap = 8, onOpen, onClose } = options;
5
+ const isOpen = vue.ref(false);
6
+ const highlightedIndex = vue.ref(-1);
7
+ const dropdownPosition = vue.ref({ top: 0, left: 0, right: 0, width: 0 });
8
+ const updatePosition = () => {
9
+ if (!triggerRef.value || !teleport) return;
10
+ const rect = triggerRef.value.getBoundingClientRect();
11
+ dropdownPosition.value = {
12
+ top: rect.bottom + window.scrollY + gap,
13
+ left: rect.left + window.scrollX,
14
+ right: window.innerWidth - rect.right - window.scrollX,
15
+ width: rect.width
16
+ };
17
+ };
18
+ const open = () => {
19
+ isOpen.value = true;
20
+ vue.nextTick(updatePosition);
21
+ onOpen == null ? void 0 : onOpen();
22
+ };
23
+ const close = () => {
24
+ isOpen.value = false;
25
+ highlightedIndex.value = -1;
26
+ onClose == null ? void 0 : onClose();
27
+ };
28
+ const toggle = () => {
29
+ if (isOpen.value) {
30
+ close();
31
+ } else {
32
+ open();
33
+ }
34
+ };
35
+ const handleClickOutside = (event) => {
36
+ var _a, _b;
37
+ const target = event.target;
38
+ const isInsideTrigger = (_a = triggerRef.value) == null ? void 0 : _a.contains(target);
39
+ const isInsideDropdown = (_b = dropdownRef.value) == null ? void 0 : _b.contains(target);
40
+ if (!isInsideTrigger && !isInsideDropdown) {
41
+ close();
42
+ }
43
+ };
44
+ const scrollToHighlighted = (dropdownEl) => {
45
+ vue.nextTick(() => {
46
+ if (dropdownEl) {
47
+ const highlighted = dropdownEl.querySelector(
48
+ `[data-index="${highlightedIndex.value}"]`
49
+ );
50
+ if (highlighted) {
51
+ highlighted.scrollIntoView({ block: "nearest" });
52
+ }
53
+ }
54
+ });
55
+ };
56
+ const handleKeydown = (event, navOptions) => {
57
+ const { itemCount, onSelect, onOpen: onOpenNav, handleOpenKeys = false } = navOptions;
58
+ if (!isOpen.value) {
59
+ if (handleOpenKeys && (event.key === "Enter" || event.key === " " || event.key === "ArrowDown")) {
60
+ event.preventDefault();
61
+ onOpenNav == null ? void 0 : onOpenNav();
62
+ open();
63
+ }
64
+ return;
65
+ }
66
+ switch (event.key) {
67
+ case "ArrowDown":
68
+ event.preventDefault();
69
+ highlightedIndex.value = Math.min(highlightedIndex.value + 1, itemCount - 1);
70
+ break;
71
+ case "ArrowUp":
72
+ event.preventDefault();
73
+ highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0);
74
+ break;
75
+ case "Enter":
76
+ event.preventDefault();
77
+ if (highlightedIndex.value >= 0) {
78
+ onSelect == null ? void 0 : onSelect(highlightedIndex.value);
79
+ }
80
+ break;
81
+ case "Escape":
82
+ event.preventDefault();
83
+ close();
84
+ break;
85
+ case "Tab":
86
+ close();
87
+ break;
88
+ }
89
+ };
90
+ const dropdownStyle = vue.computed(() => {
91
+ if (!teleport) return {};
92
+ return {
93
+ position: "absolute",
94
+ top: `${dropdownPosition.value.top}px`,
95
+ left: align === "right" ? "auto" : `${dropdownPosition.value.left}px`,
96
+ right: align === "right" ? `${dropdownPosition.value.right}px` : "auto",
97
+ width: `${dropdownPosition.value.width}px`
98
+ };
99
+ });
100
+ vue.watch(isOpen, (newValue) => {
101
+ if (newValue) {
102
+ document.addEventListener("click", handleClickOutside);
103
+ window.addEventListener("scroll", updatePosition, true);
104
+ window.addEventListener("resize", updatePosition);
105
+ } else {
106
+ document.removeEventListener("click", handleClickOutside);
107
+ window.removeEventListener("scroll", updatePosition, true);
108
+ window.removeEventListener("resize", updatePosition);
109
+ }
110
+ });
111
+ vue.onUnmounted(() => {
112
+ document.removeEventListener("click", handleClickOutside);
113
+ window.removeEventListener("scroll", updatePosition, true);
114
+ window.removeEventListener("resize", updatePosition);
115
+ });
116
+ return {
117
+ isOpen,
118
+ highlightedIndex,
119
+ dropdownPosition,
120
+ dropdownStyle,
121
+ open,
122
+ close,
123
+ toggle,
124
+ updatePosition,
125
+ handleKeydown,
126
+ scrollToHighlighted
127
+ };
128
+ }
129
+ exports.useDropdown = useDropdown;
130
+ //# sourceMappingURL=useDropdown-DHFnd259.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDropdown-DHFnd259.cjs","sources":["../src/composables/useDropdown.ts"],"sourcesContent":["import { ref, computed, watch, onUnmounted, nextTick, type Ref, type ComputedRef } from 'vue'\n\nexport interface UseDropdownOptions {\n /** Whether teleport is enabled (affects position calculation) */\n teleport?: boolean\n /** Alignment for position calculation */\n align?: 'left' | 'right'\n /** Gap between trigger and dropdown in pixels */\n gap?: number\n /** Callback when dropdown opens */\n onOpen?: () => void\n /** Callback when dropdown closes */\n onClose?: () => void\n}\n\nexport interface UseDropdownReturn {\n /** Whether the dropdown is currently open */\n isOpen: Ref<boolean>\n /** Current highlighted index for keyboard navigation */\n highlightedIndex: Ref<number>\n /** Calculated position for teleported dropdown */\n dropdownPosition: Ref<{ top: number; left: number; right: number; width: number }>\n /** Computed style object for teleported dropdown */\n dropdownStyle: ComputedRef<Record<string, string>>\n /** Open the dropdown */\n open: () => void\n /** Close the dropdown */\n close: () => void\n /** Toggle the dropdown */\n toggle: () => void\n /** Update position (call after DOM changes) */\n updatePosition: () => void\n /** Handle keyboard navigation */\n handleKeydown: (event: KeyboardEvent, options: KeyboardNavigationOptions) => void\n /** Scroll to highlighted item */\n scrollToHighlighted: (dropdownEl: HTMLElement | null) => void\n}\n\nexport interface KeyboardNavigationOptions {\n /** Total number of items to navigate */\n itemCount: number\n /** Called when Enter is pressed on a highlighted item */\n onSelect?: (index: number) => void\n /** Called when the dropdown should open (Space/Enter/ArrowDown when closed) */\n onOpen?: () => void\n /** Whether to handle open keys (Space/Enter/ArrowDown) when closed */\n handleOpenKeys?: boolean\n}\n\nexport function useDropdown(\n triggerRef: Ref<HTMLElement | null | undefined>,\n dropdownRef: Ref<HTMLElement | null | undefined>,\n options: UseDropdownOptions = {}\n): UseDropdownReturn {\n const { teleport = true, align = 'left', gap = 8, onOpen, onClose } = options\n\n const isOpen = ref(false)\n const highlightedIndex = ref(-1)\n const dropdownPosition = ref({ top: 0, left: 0, right: 0, width: 0 })\n\n const updatePosition = () => {\n if (!triggerRef.value || !teleport) return\n const rect = triggerRef.value.getBoundingClientRect()\n dropdownPosition.value = {\n top: rect.bottom + window.scrollY + gap,\n left: rect.left + window.scrollX,\n right: window.innerWidth - rect.right - window.scrollX,\n width: rect.width,\n }\n }\n\n const open = () => {\n isOpen.value = true\n nextTick(updatePosition)\n onOpen?.()\n }\n\n const close = () => {\n isOpen.value = false\n highlightedIndex.value = -1\n onClose?.()\n }\n\n const toggle = () => {\n if (isOpen.value) {\n close()\n } else {\n open()\n }\n }\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node\n const isInsideTrigger = triggerRef.value?.contains(target)\n const isInsideDropdown = dropdownRef.value?.contains(target)\n if (!isInsideTrigger && !isInsideDropdown) {\n close()\n }\n }\n\n const scrollToHighlighted = (dropdownEl: HTMLElement | null) => {\n nextTick(() => {\n if (dropdownEl) {\n const highlighted = dropdownEl.querySelector(\n `[data-index=\"${highlightedIndex.value}\"]`\n ) as HTMLElement\n if (highlighted) {\n highlighted.scrollIntoView({ block: 'nearest' })\n }\n }\n })\n }\n\n const handleKeydown = (event: KeyboardEvent, navOptions: KeyboardNavigationOptions) => {\n const { itemCount, onSelect, onOpen: onOpenNav, handleOpenKeys = false } = navOptions\n\n if (!isOpen.value) {\n if (handleOpenKeys && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')) {\n event.preventDefault()\n onOpenNav?.()\n open()\n }\n return\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n highlightedIndex.value = Math.min(highlightedIndex.value + 1, itemCount - 1)\n break\n case 'ArrowUp':\n event.preventDefault()\n highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0)\n break\n case 'Enter':\n event.preventDefault()\n if (highlightedIndex.value >= 0) {\n onSelect?.(highlightedIndex.value)\n }\n break\n case 'Escape':\n event.preventDefault()\n close()\n break\n case 'Tab':\n close()\n break\n }\n }\n\n const dropdownStyle = computed(() => {\n if (!teleport) return {} as Record<string, string>\n return {\n position: 'absolute',\n top: `${dropdownPosition.value.top}px`,\n left: align === 'right' ? 'auto' : `${dropdownPosition.value.left}px`,\n right: align === 'right' ? `${dropdownPosition.value.right}px` : 'auto',\n width: `${dropdownPosition.value.width}px`,\n } as Record<string, string>\n })\n\n // Event listener management\n watch(isOpen, (newValue) => {\n if (newValue) {\n document.addEventListener('click', handleClickOutside)\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n } else {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n })\n\n onUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n })\n\n return {\n isOpen,\n highlightedIndex,\n dropdownPosition,\n dropdownStyle,\n open,\n close,\n toggle,\n updatePosition,\n handleKeydown,\n scrollToHighlighted,\n }\n}\n"],"names":["ref","nextTick","computed","watch","onUnmounted"],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ const FOCUSABLE_SELECTORS = [
4
+ "a[href]",
5
+ "button:not([disabled])",
6
+ "input:not([disabled])",
7
+ "select:not([disabled])",
8
+ "textarea:not([disabled])",
9
+ '[tabindex]:not([tabindex="-1"])',
10
+ '[contenteditable="true"]'
11
+ ].join(", ");
12
+ function useFocusTrap(options = {}) {
13
+ const { focusFirst = true, restoreFocus = true, initialFocus = null } = options;
14
+ const containerRef = vue.ref(null);
15
+ const isActive = vue.ref(false);
16
+ const previouslyFocusedElement = vue.ref(null);
17
+ function getFocusableElements() {
18
+ if (!containerRef.value) return [];
19
+ return Array.from(containerRef.value.querySelectorAll(FOCUSABLE_SELECTORS)).filter(
20
+ (el) => el.offsetParent !== null
21
+ // Element is visible
22
+ );
23
+ }
24
+ function getInitialFocusElement() {
25
+ if (!containerRef.value) return null;
26
+ if (initialFocus) {
27
+ if (typeof initialFocus === "string") {
28
+ return containerRef.value.querySelector(initialFocus);
29
+ }
30
+ return initialFocus;
31
+ }
32
+ const focusable = getFocusableElements();
33
+ return focusable[0] || null;
34
+ }
35
+ function handleKeyDown(event) {
36
+ if (event.key !== "Tab" || !containerRef.value) return;
37
+ const focusable = getFocusableElements();
38
+ if (focusable.length === 0) return;
39
+ const firstFocusable = focusable[0];
40
+ const lastFocusable = focusable[focusable.length - 1];
41
+ const activeElement = document.activeElement;
42
+ if (event.shiftKey) {
43
+ if (activeElement === firstFocusable || !containerRef.value.contains(activeElement)) {
44
+ event.preventDefault();
45
+ lastFocusable.focus();
46
+ }
47
+ } else {
48
+ if (activeElement === lastFocusable || !containerRef.value.contains(activeElement)) {
49
+ event.preventDefault();
50
+ firstFocusable.focus();
51
+ }
52
+ }
53
+ }
54
+ function activate() {
55
+ if (isActive.value) return;
56
+ previouslyFocusedElement.value = document.activeElement;
57
+ isActive.value = true;
58
+ document.addEventListener("keydown", handleKeyDown);
59
+ if (focusFirst) {
60
+ requestAnimationFrame(() => {
61
+ const initialElement = getInitialFocusElement();
62
+ if (initialElement) {
63
+ initialElement.focus();
64
+ }
65
+ });
66
+ }
67
+ }
68
+ function deactivate() {
69
+ if (!isActive.value) return;
70
+ isActive.value = false;
71
+ document.removeEventListener("keydown", handleKeyDown);
72
+ if (restoreFocus && previouslyFocusedElement.value) {
73
+ previouslyFocusedElement.value.focus();
74
+ previouslyFocusedElement.value = null;
75
+ }
76
+ }
77
+ const activeOption = options.active;
78
+ if (activeOption !== void 0) {
79
+ if (typeof activeOption === "boolean") {
80
+ if (activeOption) {
81
+ const unwatch = vue.watch(
82
+ containerRef,
83
+ (container) => {
84
+ if (container) {
85
+ activate();
86
+ unwatch();
87
+ }
88
+ },
89
+ { immediate: true }
90
+ );
91
+ }
92
+ } else {
93
+ vue.watch(
94
+ [activeOption, containerRef],
95
+ ([active, container]) => {
96
+ if (active && container) {
97
+ activate();
98
+ } else if (!active) {
99
+ deactivate();
100
+ }
101
+ },
102
+ { immediate: true }
103
+ );
104
+ }
105
+ }
106
+ if (vue.getCurrentInstance()) {
107
+ vue.onUnmounted(() => {
108
+ deactivate();
109
+ });
110
+ }
111
+ return {
112
+ containerRef,
113
+ activate,
114
+ deactivate,
115
+ isActive
116
+ };
117
+ }
118
+ exports.useFocusTrap = useFocusTrap;
119
+ //# sourceMappingURL=useFocusTrap-kcxO8AeU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap-kcxO8AeU.cjs","sources":["../src/composables/useFocusTrap.ts"],"sourcesContent":["import { ref, watch, onUnmounted, getCurrentInstance, type Ref } from 'vue'\n\nconst FOCUSABLE_SELECTORS = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(', ')\n\nexport interface UseFocusTrapOptions {\n /** Whether the focus trap is active */\n active?: Ref<boolean> | boolean\n /** Focus the first focusable element when trap activates */\n focusFirst?: boolean\n /** Restore focus to the previously focused element when trap deactivates */\n restoreFocus?: boolean\n /** Initial element to focus (selector or element) */\n initialFocus?: string | HTMLElement | null\n}\n\nexport interface UseFocusTrapReturn {\n /** Ref to attach to the container element */\n containerRef: Ref<HTMLElement | null>\n /** Activate the focus trap manually */\n activate: () => void\n /** Deactivate the focus trap manually */\n deactivate: () => void\n /** Whether the focus trap is currently active */\n isActive: Ref<boolean>\n}\n\n/**\n * Composable for trapping focus within a container element (for modals, dialogs, etc.)\n *\n * @example\n * ```vue\n * <script setup>\n * const isOpen = ref(false)\n * const { containerRef } = useFocusTrap({ active: isOpen })\n * </script>\n *\n * <template>\n * <div v-if=\"isOpen\" ref=\"containerRef\" role=\"dialog\">\n * <button>First focusable</button>\n * <input type=\"text\" />\n * <button @click=\"isOpen = false\">Close</button>\n * </div>\n * </template>\n * ```\n */\nexport function useFocusTrap(options: UseFocusTrapOptions = {}): UseFocusTrapReturn {\n const { focusFirst = true, restoreFocus = true, initialFocus = null } = options\n\n const containerRef = ref<HTMLElement | null>(null)\n const isActive = ref(false)\n const previouslyFocusedElement = ref<HTMLElement | null>(null)\n\n function getFocusableElements(): HTMLElement[] {\n if (!containerRef.value) return []\n return Array.from(containerRef.value.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS)).filter(\n (el) => el.offsetParent !== null, // Element is visible\n )\n }\n\n function getInitialFocusElement(): HTMLElement | null {\n if (!containerRef.value) return null\n\n if (initialFocus) {\n if (typeof initialFocus === 'string') {\n return containerRef.value.querySelector<HTMLElement>(initialFocus)\n }\n return initialFocus\n }\n\n const focusable = getFocusableElements()\n return focusable[0] || null\n }\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Tab' || !containerRef.value) return\n\n const focusable = getFocusableElements()\n if (focusable.length === 0) return\n\n const firstFocusable = focusable[0]\n const lastFocusable = focusable[focusable.length - 1]\n const activeElement = document.activeElement as HTMLElement\n\n if (event.shiftKey) {\n // Shift + Tab: move backwards\n if (activeElement === firstFocusable || !containerRef.value.contains(activeElement)) {\n event.preventDefault()\n lastFocusable.focus()\n }\n } else {\n // Tab: move forwards\n if (activeElement === lastFocusable || !containerRef.value.contains(activeElement)) {\n event.preventDefault()\n firstFocusable.focus()\n }\n }\n }\n\n function activate(): void {\n if (isActive.value) return\n\n // Store the currently focused element\n previouslyFocusedElement.value = document.activeElement as HTMLElement\n\n isActive.value = true\n\n // Add event listener\n document.addEventListener('keydown', handleKeyDown)\n\n // Focus initial element after a tick to ensure DOM is ready\n if (focusFirst) {\n requestAnimationFrame(() => {\n const initialElement = getInitialFocusElement()\n if (initialElement) {\n initialElement.focus()\n }\n })\n }\n }\n\n function deactivate(): void {\n if (!isActive.value) return\n\n isActive.value = false\n\n // Remove event listener\n document.removeEventListener('keydown', handleKeyDown)\n\n // Restore focus\n if (restoreFocus && previouslyFocusedElement.value) {\n previouslyFocusedElement.value.focus()\n previouslyFocusedElement.value = null\n }\n }\n\n // Handle reactive active option\n const activeOption = options.active\n if (activeOption !== undefined) {\n if (typeof activeOption === 'boolean') {\n if (activeOption) {\n // Wait for containerRef to be set\n const unwatch = watch(\n containerRef,\n (container) => {\n if (container) {\n activate()\n unwatch()\n }\n },\n { immediate: true },\n )\n }\n } else {\n // It's a Ref<boolean>\n watch(\n [activeOption, containerRef],\n ([active, container]) => {\n if (active && container) {\n activate()\n } else if (!active) {\n deactivate()\n }\n },\n { immediate: true },\n )\n }\n }\n\n // Cleanup on unmount (only when used inside a component)\n if (getCurrentInstance()) {\n onUnmounted(() => {\n deactivate()\n })\n }\n\n return {\n containerRef,\n activate,\n deactivate,\n isActive,\n }\n}\n"],"names":["ref","watch","getCurrentInstance","onUnmounted"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ let idCounter = 0;
4
+ function generateId(prefix = "id") {
5
+ idCounter++;
6
+ return `cisse-${prefix}-${idCounter}`;
7
+ }
8
+ function resetIdCounter() {
9
+ idCounter = 0;
10
+ }
11
+ function useId(options = {}) {
12
+ const { prefix = "id", id: customId } = options;
13
+ const id = vue.ref(customId || generateId(prefix));
14
+ const related = (suffix) => {
15
+ return `${id.value}-${suffix}`;
16
+ };
17
+ return {
18
+ id,
19
+ related
20
+ };
21
+ }
22
+ exports.generateId = generateId;
23
+ exports.resetIdCounter = resetIdCounter;
24
+ exports.useId = useId;
25
+ //# sourceMappingURL=useId-nxrBaIC9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId-nxrBaIC9.cjs","sources":["../src/composables/useId.ts"],"sourcesContent":["import { ref, type Ref } from 'vue'\n\nlet idCounter = 0\n\n/**\n * Generates a unique ID for accessibility relationships (aria-labelledby, aria-describedby, etc.)\n * Pattern: cisse-{prefix}-{counter}\n */\nexport function generateId(prefix = 'id'): string {\n idCounter++\n return `cisse-${prefix}-${idCounter}`\n}\n\n/**\n * Resets the ID counter (useful for testing)\n */\nexport function resetIdCounter(): void {\n idCounter = 0\n}\n\nexport interface UseIdOptions {\n /** Prefix for the generated ID */\n prefix?: string\n /** Custom ID to use instead of generating one */\n id?: string\n}\n\nexport interface UseIdReturn {\n /** The unique ID (reactive) */\n id: Ref<string>\n /** Generate a related ID with a suffix (e.g., id-label, id-description) */\n related: (suffix: string) => string\n}\n\n/**\n * Composable for generating unique IDs for accessibility relationships\n *\n * @example\n * ```vue\n * <script setup>\n * const { id, related } = useId({ prefix: 'modal' })\n * // id.value = 'cisse-modal-1'\n * // related('title') = 'cisse-modal-1-title'\n * // related('description') = 'cisse-modal-1-description'\n * </script>\n *\n * <template>\n * <div :id=\"id\" role=\"dialog\" :aria-labelledby=\"related('title')\">\n * <h2 :id=\"related('title')\">Modal Title</h2>\n * </div>\n * </template>\n * ```\n */\nexport function useId(options: UseIdOptions = {}): UseIdReturn {\n const { prefix = 'id', id: customId } = options\n\n const id = ref(customId || generateId(prefix))\n\n const related = (suffix: string): string => {\n return `${id.value}-${suffix}`\n }\n\n return {\n id,\n related,\n }\n}\n"],"names":["ref"],"mappings":";;AAEA,IAAI,YAAY;AAMT,SAAS,WAAW,SAAS,MAAc;AAChD;AACA,SAAO,SAAS,MAAM,IAAI,SAAS;AACrC;AAKO,SAAS,iBAAuB;AACrC,cAAY;AACd;AAmCO,SAAS,MAAM,UAAwB,IAAiB;AAC7D,QAAM,EAAE,SAAS,MAAM,IAAI,aAAa;AAExC,QAAM,KAAKA,IAAAA,IAAI,YAAY,WAAW,MAAM,CAAC;AAE7C,QAAM,UAAU,CAAC,WAA2B;AAC1C,WAAO,GAAG,GAAG,KAAK,IAAI,MAAM;AAAA,EAC9B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EAAA;AAEJ;;;;"}