cisse-vue-ui 0.7.3 → 0.7.4

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 (315) 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/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs +928 -0
  6. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs.map +1 -0
  7. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs +228 -0
  8. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs.map +1 -0
  9. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs +2242 -0
  10. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs.map +1 -0
  11. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +149 -0
  12. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +1 -0
  13. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CZ-TibKk.cjs +764 -0
  14. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CZ-TibKk.cjs.map +1 -0
  15. package/dist/TagsInput-tlIso0sZ.cjs +3694 -0
  16. package/dist/TagsInput-tlIso0sZ.cjs.map +1 -0
  17. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs +10 -0
  18. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs.map +1 -0
  19. package/dist/components/core/Accordion.stories.d.ts +11 -0
  20. package/dist/components/core/Accordion.test.d.ts +1 -0
  21. package/dist/components/core/Accordion.vue.d.ts +27 -0
  22. package/dist/components/core/AccordionItem.stories.d.ts +10 -0
  23. package/dist/components/core/AccordionItem.vue.d.ts +29 -0
  24. package/dist/components/core/AutocompleteComponent.stories.d.ts +14 -0
  25. package/dist/components/core/AutocompleteComponent.test.d.ts +1 -0
  26. package/dist/components/core/AutocompleteComponent.vue.d.ts +25 -0
  27. package/dist/components/core/Avatar.stories.d.ts +12 -0
  28. package/dist/components/core/Avatar.test.d.ts +1 -0
  29. package/dist/components/core/Avatar.vue.d.ts +20 -0
  30. package/dist/components/core/Breadcrumb.stories.d.ts +11 -0
  31. package/dist/components/core/Breadcrumb.test.d.ts +1 -0
  32. package/dist/components/core/Breadcrumb.vue.d.ts +26 -0
  33. package/dist/components/core/Button.stories.d.ts +18 -0
  34. package/dist/components/core/Button.test.d.ts +1 -0
  35. package/dist/components/core/Button.vue.d.ts +49 -0
  36. package/dist/components/core/CardComponent.stories.d.ts +13 -0
  37. package/dist/components/core/CardComponent.test.d.ts +1 -0
  38. package/dist/components/core/CardComponent.vue.d.ts +40 -0
  39. package/dist/components/core/CollapsibleCard.stories.d.ts +10 -0
  40. package/dist/components/core/CollapsibleCard.test.d.ts +1 -0
  41. package/dist/components/core/CollapsibleCard.vue.d.ts +38 -0
  42. package/dist/components/core/DarkModeToggle.stories.d.ts +15 -0
  43. package/dist/components/core/DarkModeToggle.test.d.ts +1 -0
  44. package/dist/components/core/DarkModeToggle.vue.d.ts +21 -0
  45. package/dist/components/core/Drawer.stories.d.ts +12 -0
  46. package/dist/components/core/Drawer.test.d.ts +1 -0
  47. package/dist/components/core/Drawer.vue.d.ts +50 -0
  48. package/dist/components/core/Dropdown.stories.d.ts +11 -0
  49. package/dist/components/core/Dropdown.test.d.ts +1 -0
  50. package/dist/components/core/Dropdown.vue.d.ts +56 -0
  51. package/dist/components/core/FilterTabs.stories.d.ts +14 -0
  52. package/dist/components/core/FilterTabs.test.d.ts +1 -0
  53. package/dist/components/core/FilterTabs.vue.d.ts +29 -0
  54. package/dist/components/core/MenuItem.stories.d.ts +13 -0
  55. package/dist/components/core/MenuItem.test.d.ts +1 -0
  56. package/dist/components/core/MenuItem.vue.d.ts +16 -0
  57. package/dist/components/core/MobileList.stories.d.ts +13 -0
  58. package/dist/components/core/MobileList.test.d.ts +1 -0
  59. package/dist/components/core/MobileList.vue.d.ts +86 -0
  60. package/dist/components/core/Popover.stories.d.ts +10 -0
  61. package/dist/components/core/Popover.test.d.ts +1 -0
  62. package/dist/components/core/Popover.vue.d.ts +44 -0
  63. package/dist/components/core/ResponsiveList.stories.d.ts +15 -0
  64. package/dist/components/core/ResponsiveList.test.d.ts +1 -0
  65. package/dist/components/core/ResponsiveList.vue.d.ts +128 -0
  66. package/dist/components/core/StatsCard.stories.d.ts +15 -0
  67. package/dist/components/core/StatsCard.test.d.ts +1 -0
  68. package/dist/components/core/StatsCard.vue.d.ts +44 -0
  69. package/dist/components/core/StatsGrid.stories.d.ts +12 -0
  70. package/dist/components/core/StatsGrid.test.d.ts +1 -0
  71. package/dist/components/core/StatsGrid.vue.d.ts +16 -0
  72. package/dist/components/core/StatusBadge.stories.d.ts +13 -0
  73. package/dist/components/core/StatusBadge.test.d.ts +1 -0
  74. package/dist/components/core/StatusBadge.vue.d.ts +21 -0
  75. package/dist/components/core/Stepper.stories.d.ts +12 -0
  76. package/dist/components/core/Stepper.test.d.ts +1 -0
  77. package/dist/components/core/Stepper.vue.d.ts +22 -0
  78. package/dist/components/core/TabPanel.stories.d.ts +8 -0
  79. package/dist/components/core/TabPanel.test.d.ts +1 -0
  80. package/dist/components/core/TabPanel.vue.d.ts +21 -0
  81. package/dist/components/core/TableAction.stories.d.ts +14 -0
  82. package/dist/components/core/TableAction.test.d.ts +1 -0
  83. package/dist/components/core/TableAction.vue.d.ts +8 -0
  84. package/dist/components/core/TableComponent.stories.d.ts +16 -0
  85. package/dist/components/core/TableComponent.test.d.ts +1 -0
  86. package/dist/components/core/TableComponent.vue.d.ts +67 -0
  87. package/dist/components/core/Tabs.stories.d.ts +10 -0
  88. package/dist/components/core/Tabs.test.d.ts +1 -0
  89. package/dist/components/core/Tabs.vue.d.ts +39 -0
  90. package/dist/components/core/Timeline.stories.d.ts +11 -0
  91. package/dist/components/core/Timeline.test.d.ts +1 -0
  92. package/dist/components/core/Timeline.vue.d.ts +34 -0
  93. package/dist/components/core/Tooltip.stories.d.ts +10 -0
  94. package/dist/components/core/Tooltip.test.d.ts +1 -0
  95. package/dist/components/core/Tooltip.vue.d.ts +34 -0
  96. package/dist/components/core/index.cjs +33 -0
  97. package/dist/components/core/index.cjs.map +1 -0
  98. package/dist/components/core/index.test.d.ts +1 -0
  99. package/dist/components/feedback/Alert.stories.d.ts +13 -0
  100. package/dist/components/feedback/Alert.test.d.ts +1 -0
  101. package/dist/components/feedback/Alert.vue.d.ts +34 -0
  102. package/dist/components/feedback/CardSkeleton.stories.d.ts +11 -0
  103. package/dist/components/feedback/CardSkeleton.test.d.ts +1 -0
  104. package/dist/components/feedback/CardSkeleton.vue.d.ts +14 -0
  105. package/dist/components/feedback/ConfirmDialog.stories.d.ts +12 -0
  106. package/dist/components/feedback/ConfirmDialog.test.d.ts +1 -0
  107. package/dist/components/feedback/ConfirmDialog.vue.d.ts +53 -0
  108. package/dist/components/feedback/EmptyState.stories.d.ts +13 -0
  109. package/dist/components/feedback/EmptyState.test.d.ts +1 -0
  110. package/dist/components/feedback/EmptyState.vue.d.ts +29 -0
  111. package/dist/components/feedback/ListSkeleton.stories.d.ts +12 -0
  112. package/dist/components/feedback/ListSkeleton.test.d.ts +1 -0
  113. package/dist/components/feedback/ListSkeleton.vue.d.ts +17 -0
  114. package/dist/components/feedback/LoadingSpinner.stories.d.ts +11 -0
  115. package/dist/components/feedback/LoadingSpinner.test.d.ts +1 -0
  116. package/dist/components/feedback/LoadingSpinner.vue.d.ts +12 -0
  117. package/dist/components/feedback/Modal.stories.d.ts +11 -0
  118. package/dist/components/feedback/Modal.test.d.ts +1 -0
  119. package/dist/components/feedback/Modal.vue.d.ts +47 -0
  120. package/dist/components/feedback/NotificationComponent.stories.d.ts +14 -0
  121. package/dist/components/feedback/NotificationComponent.test.d.ts +1 -0
  122. package/dist/components/feedback/NotificationComponent.vue.d.ts +12 -0
  123. package/dist/components/feedback/NotificationList.stories.d.ts +11 -0
  124. package/dist/components/feedback/NotificationList.test.d.ts +1 -0
  125. package/dist/components/feedback/NotificationList.vue.d.ts +18 -0
  126. package/dist/components/feedback/PaginationControls.stories.d.ts +12 -0
  127. package/dist/components/feedback/PaginationControls.test.d.ts +1 -0
  128. package/dist/components/feedback/PaginationControls.vue.d.ts +21 -0
  129. package/dist/components/feedback/Progress.stories.d.ts +14 -0
  130. package/dist/components/feedback/Progress.test.d.ts +1 -0
  131. package/dist/components/feedback/Progress.vue.d.ts +30 -0
  132. package/dist/components/feedback/Skeleton.stories.d.ts +15 -0
  133. package/dist/components/feedback/Skeleton.test.d.ts +1 -0
  134. package/dist/components/feedback/Skeleton.vue.d.ts +19 -0
  135. package/dist/components/feedback/TableSkeleton.stories.d.ts +12 -0
  136. package/dist/components/feedback/TableSkeleton.test.d.ts +1 -0
  137. package/dist/components/feedback/TableSkeleton.vue.d.ts +14 -0
  138. package/dist/components/feedback/Toast.stories.d.ts +12 -0
  139. package/dist/components/feedback/Toast.test.d.ts +1 -0
  140. package/dist/components/feedback/Toast.vue.d.ts +23 -0
  141. package/dist/components/feedback/ToastContainer.stories.d.ts +15 -0
  142. package/dist/components/feedback/ToastContainer.test.d.ts +1 -0
  143. package/dist/components/feedback/ToastContainer.vue.d.ts +24 -0
  144. package/dist/components/feedback/index.cjs +20 -0
  145. package/dist/components/feedback/index.cjs.map +1 -0
  146. package/dist/components/feedback/index.test.d.ts +1 -0
  147. package/dist/components/form/Checkbox.stories.d.ts +13 -0
  148. package/dist/components/form/Checkbox.test.d.ts +1 -0
  149. package/dist/components/form/Checkbox.vue.d.ts +22 -0
  150. package/dist/components/form/ColorPicker.stories.d.ts +12 -0
  151. package/dist/components/form/ColorPicker.test.d.ts +1 -0
  152. package/dist/components/form/ColorPicker.vue.d.ts +26 -0
  153. package/dist/components/form/Combobox.stories.d.ts +15 -0
  154. package/dist/components/form/Combobox.test.d.ts +1 -0
  155. package/dist/components/form/Combobox.vue.d.ts +46 -0
  156. package/dist/components/form/DatePicker.stories.d.ts +15 -0
  157. package/dist/components/form/DatePicker.test.d.ts +1 -0
  158. package/dist/components/form/DatePicker.vue.d.ts +36 -0
  159. package/dist/components/form/EmailInput.stories.d.ts +13 -0
  160. package/dist/components/form/EmailInput.test.d.ts +1 -0
  161. package/dist/components/form/EmailInput.vue.d.ts +32 -0
  162. package/dist/components/form/FileUpload.stories.d.ts +12 -0
  163. package/dist/components/form/FileUpload.test.d.ts +1 -0
  164. package/dist/components/form/FileUpload.vue.d.ts +40 -0
  165. package/dist/components/form/FormActions.stories.d.ts +18 -0
  166. package/dist/components/form/FormActions.test.d.ts +1 -0
  167. package/dist/components/form/FormActions.vue.d.ts +56 -0
  168. package/dist/components/form/FormGroup.stories.d.ts +10 -0
  169. package/dist/components/form/FormGroup.test.d.ts +1 -0
  170. package/dist/components/form/FormGroup.vue.d.ts +30 -0
  171. package/dist/components/form/FormHelp.stories.d.ts +11 -0
  172. package/dist/components/form/FormHelp.test.d.ts +1 -0
  173. package/dist/components/form/FormHelp.vue.d.ts +23 -0
  174. package/dist/components/form/FormInput.stories.d.ts +12 -0
  175. package/dist/components/form/FormInput.test.d.ts +1 -0
  176. package/dist/components/form/FormInput.vue.d.ts +13 -0
  177. package/dist/components/form/FormLabel.stories.d.ts +12 -0
  178. package/dist/components/form/FormLabel.test.d.ts +1 -0
  179. package/dist/components/form/FormLabel.vue.d.ts +21 -0
  180. package/dist/components/form/FormSection.stories.d.ts +13 -0
  181. package/dist/components/form/FormSection.test.d.ts +1 -0
  182. package/dist/components/form/FormSection.vue.d.ts +49 -0
  183. package/dist/components/form/FormSelect.stories.d.ts +13 -0
  184. package/dist/components/form/FormSelect.test.d.ts +1 -0
  185. package/dist/components/form/FormSelect.vue.d.ts +55 -0
  186. package/dist/components/form/IconPicker.vue.d.ts +33 -0
  187. package/dist/components/form/InputWrapper.stories.d.ts +16 -0
  188. package/dist/components/form/InputWrapper.test.d.ts +1 -0
  189. package/dist/components/form/InputWrapper.vue.d.ts +40 -0
  190. package/dist/components/form/MoneyInput.stories.d.ts +16 -0
  191. package/dist/components/form/MoneyInput.test.d.ts +1 -0
  192. package/dist/components/form/MoneyInput.vue.d.ts +40 -0
  193. package/dist/components/form/NumberInput.stories.d.ts +14 -0
  194. package/dist/components/form/NumberInput.test.d.ts +1 -0
  195. package/dist/components/form/NumberInput.vue.d.ts +39 -0
  196. package/dist/components/form/OTPInput.stories.d.ts +13 -0
  197. package/dist/components/form/OTPInput.test.d.ts +1 -0
  198. package/dist/components/form/OTPInput.vue.d.ts +33 -0
  199. package/dist/components/form/PasswordInput.stories.d.ts +15 -0
  200. package/dist/components/form/PasswordInput.test.d.ts +1 -0
  201. package/dist/components/form/PasswordInput.vue.d.ts +36 -0
  202. package/dist/components/form/PercentInput.stories.d.ts +12 -0
  203. package/dist/components/form/PercentInput.test.d.ts +1 -0
  204. package/dist/components/form/PercentInput.vue.d.ts +38 -0
  205. package/dist/components/form/PhoneInput.stories.d.ts +13 -0
  206. package/dist/components/form/PhoneInput.test.d.ts +1 -0
  207. package/dist/components/form/PhoneInput.vue.d.ts +91 -0
  208. package/dist/components/form/QuantityInput.stories.d.ts +12 -0
  209. package/dist/components/form/QuantityInput.test.d.ts +1 -0
  210. package/dist/components/form/QuantityInput.vue.d.ts +32 -0
  211. package/dist/components/form/RangeSlider.stories.d.ts +13 -0
  212. package/dist/components/form/RangeSlider.test.d.ts +1 -0
  213. package/dist/components/form/RangeSlider.vue.d.ts +35 -0
  214. package/dist/components/form/Rating.stories.d.ts +16 -0
  215. package/dist/components/form/Rating.test.d.ts +1 -0
  216. package/dist/components/form/Rating.vue.d.ts +43 -0
  217. package/dist/components/form/SearchInput.stories.d.ts +13 -0
  218. package/dist/components/form/SearchInput.test.d.ts +1 -0
  219. package/dist/components/form/SearchInput.vue.d.ts +26 -0
  220. package/dist/components/form/Slider.stories.d.ts +13 -0
  221. package/dist/components/form/Slider.test.d.ts +1 -0
  222. package/dist/components/form/Slider.vue.d.ts +29 -0
  223. package/dist/components/form/Switch.stories.d.ts +11 -0
  224. package/dist/components/form/Switch.test.d.ts +1 -0
  225. package/dist/components/form/Switch.vue.d.ts +23 -0
  226. package/dist/components/form/TagsInput.stories.d.ts +13 -0
  227. package/dist/components/form/TagsInput.test.d.ts +1 -0
  228. package/dist/components/form/TagsInput.vue.d.ts +37 -0
  229. package/dist/components/form/URLInput.stories.d.ts +11 -0
  230. package/dist/components/form/URLInput.test.d.ts +1 -0
  231. package/dist/components/form/URLInput.vue.d.ts +32 -0
  232. package/dist/components/form/index.cjs +34 -0
  233. package/dist/components/form/index.cjs.map +1 -0
  234. package/dist/components/form/index.test.d.ts +1 -0
  235. package/dist/components/index.cjs +91 -0
  236. package/dist/components/index.cjs.map +1 -0
  237. package/dist/components/index.d.ts +5 -0
  238. package/dist/components/index.test.d.ts +1 -0
  239. package/dist/components/layout/AuthLayout.stories.d.ts +10 -0
  240. package/dist/components/layout/AuthLayout.test.d.ts +1 -0
  241. package/dist/components/layout/AuthLayout.vue.d.ts +88 -0
  242. package/dist/components/layout/BaseLayout.stories.d.ts +11 -0
  243. package/dist/components/layout/BaseLayout.test.d.ts +1 -0
  244. package/dist/components/layout/BaseLayout.vue.d.ts +77 -0
  245. package/dist/components/layout/PageHero.stories.d.ts +11 -0
  246. package/dist/components/layout/PageHero.test.d.ts +1 -0
  247. package/dist/components/layout/PageHero.vue.d.ts +55 -0
  248. package/dist/components/layout/PageLayout.stories.d.ts +10 -0
  249. package/dist/components/layout/PageLayout.test.d.ts +1 -0
  250. package/dist/components/layout/PageLayout.vue.d.ts +37 -0
  251. package/dist/components/layout/index.cjs +8 -0
  252. package/dist/components/layout/index.cjs.map +1 -0
  253. package/dist/components/layout/index.test.d.ts +1 -0
  254. package/dist/components/type/BadgeType.stories.d.ts +13 -0
  255. package/dist/components/type/BadgeType.test.d.ts +1 -0
  256. package/dist/components/type/BooleanType.stories.d.ts +12 -0
  257. package/dist/components/type/BooleanType.test.d.ts +1 -0
  258. package/dist/components/type/DateType.stories.d.ts +12 -0
  259. package/dist/components/type/DateType.test.d.ts +1 -0
  260. package/dist/components/type/NumberType.stories.d.ts +11 -0
  261. package/dist/components/type/NumberType.test.d.ts +1 -0
  262. package/dist/components/type/TextType.stories.d.ts +10 -0
  263. package/dist/components/type/TextType.test.d.ts +1 -0
  264. package/dist/components/type/index.cjs +9 -0
  265. package/dist/components/type/index.cjs.map +1 -0
  266. package/dist/components/type/index.test.d.ts +1 -0
  267. package/dist/composables/index.cjs +19 -0
  268. package/dist/composables/index.cjs.map +1 -0
  269. package/dist/composables/index.d.ts +8 -0
  270. package/dist/composables/index.test.d.ts +1 -0
  271. package/dist/composables/useDarkMode.d.ts +14 -0
  272. package/dist/composables/useDarkMode.test.d.ts +1 -0
  273. package/dist/composables/useDropdown.d.ts +51 -0
  274. package/dist/composables/useDropdown.test.d.ts +1 -0
  275. package/dist/composables/useExportCSV.d.ts +10 -0
  276. package/dist/composables/useExportCSV.test.d.ts +1 -0
  277. package/dist/composables/useFocusTrap.d.ts +41 -0
  278. package/dist/composables/useFocusTrap.test.d.ts +1 -0
  279. package/dist/composables/useId.d.ts +42 -0
  280. package/dist/composables/useId.test.d.ts +1 -0
  281. package/dist/composables/useModal.d.ts +60 -0
  282. package/dist/composables/useModal.test.d.ts +1 -0
  283. package/dist/composables/useNotifications.d.ts +27 -0
  284. package/dist/composables/useNotifications.test.d.ts +1 -0
  285. package/dist/composables/useToast.d.ts +30 -0
  286. package/dist/composables/useToast.test.d.ts +1 -0
  287. package/dist/index-Ci0UGwko.cjs +94 -0
  288. package/dist/index-Ci0UGwko.cjs.map +1 -0
  289. package/dist/index-D1x3TH9k.cjs +401 -0
  290. package/dist/index-D1x3TH9k.cjs.map +1 -0
  291. package/dist/index.cjs +123 -0
  292. package/dist/index.cjs.map +1 -0
  293. package/dist/index.d.ts +5 -0
  294. package/dist/index.test.d.ts +1 -0
  295. package/dist/plugin.d.ts +24 -0
  296. package/dist/style.css +2 -0
  297. package/dist/types/components.d.ts +28 -0
  298. package/dist/types/form.d.ts +37 -0
  299. package/dist/types/index.cjs +2 -0
  300. package/dist/types/index.cjs.map +1 -0
  301. package/dist/types/index.d.ts +4 -0
  302. package/dist/types/index.test.d.ts +1 -0
  303. package/dist/types/notification.d.ts +12 -0
  304. package/dist/types/property.d.ts +34 -0
  305. package/dist/useDarkMode-DLZcJEUQ.cjs +52 -0
  306. package/dist/useDarkMode-DLZcJEUQ.cjs.map +1 -0
  307. package/dist/useDropdown-DHFnd259.cjs +130 -0
  308. package/dist/useDropdown-DHFnd259.cjs.map +1 -0
  309. package/dist/useFocusTrap-kcxO8AeU.cjs +119 -0
  310. package/dist/useFocusTrap-kcxO8AeU.cjs.map +1 -0
  311. package/dist/useId-nxrBaIC9.cjs +25 -0
  312. package/dist/useId-nxrBaIC9.cjs.map +1 -0
  313. package/dist/useToast-Bk60GArg.cjs +176 -0
  314. package/dist/useToast-Bk60GArg.cjs.map +1 -0
  315. package/package.json +1 -1
@@ -0,0 +1,928 @@
1
+ "use strict";
2
+ const vue = require("vue");
3
+ const vue$1 = require("@iconify/vue");
4
+ const _pluginVue_exportHelper = require("./_plugin-vue_export-helper-DM9IkUGy.cjs");
5
+ const useId = require("./useId-nxrBaIC9.cjs");
6
+ const useFocusTrap = require("./useFocusTrap-kcxO8AeU.cjs");
7
+ const Button_vue_vue_type_script_setup_true_lang = require("./Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs");
8
+ const _hoisted_1$9 = ["aria-label"];
9
+ const _hoisted_2$8 = { class: "text-center" };
10
+ const _hoisted_3$8 = {
11
+ key: 0,
12
+ class: "mt-4 text-gray-600 dark:text-gray-400"
13
+ };
14
+ const _hoisted_4$6 = {
15
+ key: 1,
16
+ class: "sr-only"
17
+ };
18
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
19
+ __name: "LoadingSpinner",
20
+ props: {
21
+ text: {},
22
+ size: { default: "md" },
23
+ ariaLabel: { default: "Loading" }
24
+ },
25
+ setup(__props) {
26
+ const props = __props;
27
+ const sizeClasses = {
28
+ sm: "size-8",
29
+ md: "size-12",
30
+ lg: "size-16"
31
+ };
32
+ const accessibleLabel = vue.computed(() => props.text || props.ariaLabel);
33
+ return (_ctx, _cache) => {
34
+ return vue.openBlock(), vue.createElementBlock("div", {
35
+ class: "flex items-center justify-center py-12",
36
+ role: "status",
37
+ "aria-live": "polite",
38
+ "aria-label": accessibleLabel.value
39
+ }, [
40
+ vue.createElementVNode("div", _hoisted_2$8, [
41
+ vue.createElementVNode("div", {
42
+ class: vue.normalizeClass([sizeClasses[__props.size], "border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent"]),
43
+ "aria-hidden": "true"
44
+ }, null, 2),
45
+ __props.text ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$8, vue.toDisplayString(__props.text), 1)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$6, vue.toDisplayString(accessibleLabel.value), 1))
46
+ ])
47
+ ], 8, _hoisted_1$9);
48
+ };
49
+ }
50
+ });
51
+ const _hoisted_1$8 = ["id", "aria-labelledby"];
52
+ const _hoisted_2$7 = {
53
+ key: 0,
54
+ class: "flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"
55
+ };
56
+ const _hoisted_3$7 = ["id"];
57
+ const _hoisted_4$5 = { class: "sr-only" };
58
+ const _hoisted_5$2 = { class: "flex-1 overflow-y-auto px-6 py-4" };
59
+ const _hoisted_6$1 = {
60
+ key: 1,
61
+ class: "flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700"
62
+ };
63
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
64
+ __name: "Modal",
65
+ props: {
66
+ title: { default: "" },
67
+ size: { default: "default" },
68
+ closeOnBackdrop: { type: Boolean, default: true },
69
+ closeOnEscape: { type: Boolean, default: true },
70
+ closeButtonLabel: { default: "Close" },
71
+ teleport: { type: [String, Boolean], default: "body" },
72
+ id: {}
73
+ },
74
+ emits: ["close"],
75
+ setup(__props, { emit: __emit }) {
76
+ const props = __props;
77
+ const {
78
+ title,
79
+ size,
80
+ closeOnBackdrop,
81
+ closeOnEscape,
82
+ closeButtonLabel
83
+ } = props;
84
+ const teleportDisabled = vue.computed(() => props.teleport === false);
85
+ const teleportTarget = vue.computed(() => props.teleport === false ? "body" : props.teleport);
86
+ const emit = __emit;
87
+ const { id: modalId, related } = useId.useId({ prefix: "modal", id: props.id });
88
+ const titleId = vue.computed(() => related("title"));
89
+ const isActive = vue.ref(true);
90
+ const { containerRef: dialogRef } = useFocusTrap.useFocusTrap({
91
+ active: isActive,
92
+ focusFirst: true,
93
+ restoreFocus: true
94
+ });
95
+ const hasTitle = vue.computed(() => Boolean(props.title));
96
+ const sizeClasses = {
97
+ sm: "max-w-md",
98
+ default: "max-w-3xl",
99
+ lg: "max-w-5xl",
100
+ xl: "max-w-7xl",
101
+ full: "max-w-full mx-4"
102
+ };
103
+ const handleBackdropClick = () => {
104
+ if (closeOnBackdrop) {
105
+ emit("close");
106
+ }
107
+ };
108
+ const handleEscape = (e) => {
109
+ if (e.key === "Escape" && closeOnEscape) {
110
+ emit("close");
111
+ }
112
+ };
113
+ vue.onMounted(() => {
114
+ document.addEventListener("keydown", handleEscape);
115
+ document.body.style.overflow = "hidden";
116
+ });
117
+ vue.onUnmounted(() => {
118
+ document.removeEventListener("keydown", handleEscape);
119
+ document.body.style.overflow = "";
120
+ });
121
+ return (_ctx, _cache) => {
122
+ return vue.openBlock(), vue.createBlock(vue.Teleport, {
123
+ to: teleportTarget.value,
124
+ disabled: teleportDisabled.value
125
+ }, [
126
+ vue.createElementVNode("div", {
127
+ class: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
128
+ onClick: vue.withModifiers(handleBackdropClick, ["self"])
129
+ }, [
130
+ vue.createElementVNode("div", {
131
+ ref_key: "dialogRef",
132
+ ref: dialogRef,
133
+ id: vue.unref(modalId),
134
+ role: "dialog",
135
+ "aria-modal": "true",
136
+ "aria-labelledby": hasTitle.value ? titleId.value : void 0,
137
+ class: vue.normalizeClass([sizeClasses[vue.unref(size)], "flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900"])
138
+ }, [
139
+ vue.unref(title) || _ctx.$slots.header || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
140
+ vue.createElementVNode("h3", {
141
+ id: titleId.value,
142
+ class: "text-xl font-semibold text-gray-900 dark:text-gray-100"
143
+ }, [
144
+ vue.renderSlot(_ctx.$slots, "header", {}, () => [
145
+ vue.renderSlot(_ctx.$slots, "title", {}, () => [
146
+ vue.createTextVNode(vue.toDisplayString(vue.unref(title)), 1)
147
+ ])
148
+ ])
149
+ ], 8, _hoisted_3$7),
150
+ vue.createElementVNode("button", {
151
+ class: "rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100",
152
+ type: "button",
153
+ "aria-label": "Close dialog",
154
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
155
+ }, [
156
+ vue.createVNode(vue.unref(vue$1.Icon), {
157
+ class: "size-5",
158
+ icon: "lucide:x",
159
+ "aria-hidden": "true"
160
+ }),
161
+ vue.createElementVNode("span", _hoisted_4$5, vue.toDisplayString(vue.unref(closeButtonLabel)), 1)
162
+ ])
163
+ ])) : vue.createCommentVNode("", true),
164
+ vue.createElementVNode("div", _hoisted_5$2, [
165
+ vue.renderSlot(_ctx.$slots, "default")
166
+ ]),
167
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, [
168
+ vue.renderSlot(_ctx.$slots, "footer")
169
+ ])) : vue.createCommentVNode("", true)
170
+ ], 10, _hoisted_1$8)
171
+ ])
172
+ ], 8, ["to", "disabled"]);
173
+ };
174
+ }
175
+ });
176
+ const _hoisted_1$7 = {
177
+ key: 0,
178
+ class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700"
179
+ };
180
+ const _hoisted_2$6 = { class: "flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4" };
181
+ const _hoisted_3$6 = { class: "text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left" };
182
+ const _hoisted_4$4 = {
183
+ key: 0,
184
+ class: "flex items-center justify-center sm:justify-start gap-2"
185
+ };
186
+ const _hoisted_5$1 = {
187
+ class: "text-sm text-gray-600 dark:text-gray-400 hidden sm:inline",
188
+ for: "page-size"
189
+ };
190
+ const _hoisted_6 = ["value"];
191
+ const _hoisted_7 = ["value"];
192
+ const _hoisted_8 = { class: "flex justify-center sm:justify-end gap-2" };
193
+ const _hoisted_9 = ["disabled"];
194
+ const _hoisted_10 = { class: "hidden sm:inline" };
195
+ const _hoisted_11 = ["disabled"];
196
+ const _hoisted_12 = { class: "hidden sm:inline" };
197
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
198
+ __name: "PaginationControls",
199
+ props: {
200
+ currentPage: {},
201
+ totalPages: {},
202
+ loading: { type: Boolean, default: false },
203
+ pageSize: { default: 10 },
204
+ pageSizeOptions: { default: () => [10, 20, 50, 100] },
205
+ showPageSize: { type: Boolean, default: true },
206
+ pageLabel: { default: "Page" },
207
+ ofLabel: { default: "of" },
208
+ itemsPerPageLabel: { default: "Items per page:" },
209
+ previousLabel: { default: "Previous" },
210
+ nextLabel: { default: "Next" }
211
+ },
212
+ emits: ["update:page", "update:pageSize"],
213
+ setup(__props, { emit: __emit }) {
214
+ const emit = __emit;
215
+ const changePage = (page) => {
216
+ if (page >= 1 && page <= __props.totalPages && !__props.loading) {
217
+ emit("update:page", page);
218
+ }
219
+ };
220
+ const changePageSize = (event) => {
221
+ const target = event.target;
222
+ emit("update:pageSize", Number(target.value));
223
+ };
224
+ return (_ctx, _cache) => {
225
+ return __props.totalPages > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
226
+ vue.createElementVNode("div", _hoisted_2$6, [
227
+ vue.createElementVNode("div", _hoisted_3$6, vue.toDisplayString(__props.pageLabel) + " " + vue.toDisplayString(__props.currentPage) + " " + vue.toDisplayString(__props.ofLabel) + " " + vue.toDisplayString(__props.totalPages), 1),
228
+ __props.showPageSize ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$4, [
229
+ vue.createElementVNode("label", _hoisted_5$1, vue.toDisplayString(__props.itemsPerPageLabel), 1),
230
+ vue.createElementVNode("select", {
231
+ id: "page-size",
232
+ value: __props.pageSize,
233
+ class: "focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100",
234
+ onChange: changePageSize
235
+ }, [
236
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.pageSizeOptions, (size) => {
237
+ return vue.openBlock(), vue.createElementBlock("option", {
238
+ key: size,
239
+ value: size
240
+ }, vue.toDisplayString(size), 9, _hoisted_7);
241
+ }), 128))
242
+ ], 40, _hoisted_6)
243
+ ])) : vue.createCommentVNode("", true)
244
+ ]),
245
+ vue.createElementVNode("div", _hoisted_8, [
246
+ vue.createElementVNode("button", {
247
+ disabled: __props.currentPage === 1 || __props.loading,
248
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
249
+ onClick: _cache[0] || (_cache[0] = ($event) => changePage(__props.currentPage - 1))
250
+ }, [
251
+ vue.createVNode(vue.unref(vue$1.Icon), {
252
+ class: "size-4",
253
+ icon: "lucide:chevron-left"
254
+ }),
255
+ vue.createElementVNode("span", _hoisted_10, vue.toDisplayString(__props.previousLabel), 1)
256
+ ], 8, _hoisted_9),
257
+ vue.createElementVNode("button", {
258
+ disabled: __props.currentPage === __props.totalPages || __props.loading,
259
+ class: "focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700",
260
+ onClick: _cache[1] || (_cache[1] = ($event) => changePage(__props.currentPage + 1))
261
+ }, [
262
+ vue.createElementVNode("span", _hoisted_12, vue.toDisplayString(__props.nextLabel), 1),
263
+ vue.createVNode(vue.unref(vue$1.Icon), {
264
+ class: "size-4",
265
+ icon: "lucide:chevron-right"
266
+ })
267
+ ], 8, _hoisted_11)
268
+ ])
269
+ ])) : vue.createCommentVNode("", true);
270
+ };
271
+ }
272
+ });
273
+ const _hoisted_1$6 = { class: "flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black" };
274
+ const _hoisted_2$5 = { class: "flex min-w-0 flex-1 flex-col" };
275
+ const _hoisted_3$5 = {
276
+ key: 0,
277
+ class: "text-sm font-semibold text-gray-900 dark:text-gray-100"
278
+ };
279
+ const _hoisted_4$3 = {
280
+ key: 1,
281
+ class: "mt-1 text-sm text-gray-600 dark:text-gray-400"
282
+ };
283
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
284
+ __name: "NotificationComponent",
285
+ props: {
286
+ notification: {},
287
+ autoDismiss: { type: Boolean },
288
+ duration: {}
289
+ },
290
+ emits: ["dismiss"],
291
+ setup(__props, { emit: __emit }) {
292
+ const props = __props;
293
+ const emit = __emit;
294
+ const iconName = vue.computed(() => {
295
+ switch (props.notification.type) {
296
+ case "success":
297
+ return "lucide:check-circle";
298
+ case "info":
299
+ return "lucide:info";
300
+ case "warning":
301
+ return "lucide:alert-triangle";
302
+ case "error":
303
+ return "lucide:x-circle";
304
+ default:
305
+ return "lucide:bell";
306
+ }
307
+ });
308
+ const iconColor = vue.computed(() => {
309
+ switch (props.notification.type) {
310
+ case "success":
311
+ return "text-green-600 dark:text-green-400";
312
+ case "info":
313
+ return "text-blue-600 dark:text-blue-400";
314
+ case "warning":
315
+ return "text-yellow-600 dark:text-yellow-400";
316
+ case "error":
317
+ return "text-red-600 dark:text-red-400";
318
+ default:
319
+ return "text-gray-600 dark:text-gray-400";
320
+ }
321
+ });
322
+ const bgColor = vue.computed(() => {
323
+ switch (props.notification.type) {
324
+ case "success":
325
+ return "bg-green-50 dark:bg-green-950";
326
+ case "info":
327
+ return "bg-blue-50 dark:bg-blue-950";
328
+ case "warning":
329
+ return "bg-yellow-50 dark:bg-yellow-950";
330
+ case "error":
331
+ return "bg-red-50 dark:bg-red-950";
332
+ default:
333
+ return "bg-gray-50 dark:bg-gray-950";
334
+ }
335
+ });
336
+ const handleDismiss = () => {
337
+ if (props.notification.id) {
338
+ emit("dismiss", props.notification.id);
339
+ }
340
+ };
341
+ vue.onMounted(() => {
342
+ const duration = props.notification.duration ?? props.duration ?? 5e3;
343
+ if (props.autoDismiss !== false && duration > 0) {
344
+ setTimeout(() => {
345
+ handleDismiss();
346
+ }, duration);
347
+ }
348
+ });
349
+ return (_ctx, _cache) => {
350
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
351
+ vue.createElementVNode("div", {
352
+ class: vue.normalizeClass([bgColor.value, "flex items-center justify-center rounded-full p-2"])
353
+ }, [
354
+ vue.createVNode(vue.unref(vue$1.Icon), {
355
+ class: vue.normalizeClass([iconColor.value, "size-5"]),
356
+ icon: iconName.value
357
+ }, null, 8, ["class", "icon"])
358
+ ], 2),
359
+ vue.createElementVNode("div", _hoisted_2$5, [
360
+ __props.notification.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_3$5, vue.toDisplayString(__props.notification.title), 1)) : vue.createCommentVNode("", true),
361
+ __props.notification.message ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4$3, vue.toDisplayString(__props.notification.message), 1)) : vue.createCommentVNode("", true)
362
+ ]),
363
+ vue.createElementVNode("button", {
364
+ class: "shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400",
365
+ onClick: handleDismiss
366
+ }, [
367
+ vue.createVNode(vue.unref(vue$1.Icon), {
368
+ class: "size-4",
369
+ icon: "lucide:x"
370
+ })
371
+ ])
372
+ ]);
373
+ };
374
+ }
375
+ });
376
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
377
+ __name: "NotificationList",
378
+ props: {
379
+ notifications: {},
380
+ autoDismiss: { type: Boolean },
381
+ duration: {},
382
+ position: { default: "top-right" },
383
+ topOffset: {}
384
+ },
385
+ emits: ["dismiss"],
386
+ setup(__props, { emit: __emit }) {
387
+ const props = __props;
388
+ const emit = __emit;
389
+ const positionClasses = {
390
+ "top-right": "top-5 right-5",
391
+ "top-left": "top-5 left-5",
392
+ "bottom-right": "bottom-5 right-5",
393
+ "bottom-left": "bottom-5 left-5"
394
+ };
395
+ const isTopPosition = vue.computed(() => {
396
+ var _a;
397
+ return (_a = props.position) == null ? void 0 : _a.startsWith("top");
398
+ });
399
+ const topStyle = vue.computed(() => {
400
+ if (!isTopPosition.value || !props.topOffset) return {};
401
+ return { top: props.topOffset };
402
+ });
403
+ return (_ctx, _cache) => {
404
+ return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
405
+ vue.createElementVNode("div", {
406
+ class: vue.normalizeClass(["fixed z-50 flex flex-col gap-3 w-full max-w-sm", positionClasses[__props.position]]),
407
+ style: vue.normalizeStyle(topStyle.value)
408
+ }, [
409
+ vue.createVNode(vue.TransitionGroup, {
410
+ "enter-active-class": "transition duration-300 ease-out",
411
+ "enter-from-class": "opacity-0 translate-x-4",
412
+ "enter-to-class": "opacity-100 translate-x-0",
413
+ "leave-active-class": "transition duration-200 ease-in",
414
+ "leave-from-class": "opacity-100 translate-x-0",
415
+ "leave-to-class": "opacity-0 translate-x-4"
416
+ }, {
417
+ default: vue.withCtx(() => [
418
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.notifications, (notification) => {
419
+ return vue.openBlock(), vue.createBlock(_sfc_main$8, {
420
+ key: notification.id,
421
+ notification,
422
+ "auto-dismiss": __props.autoDismiss,
423
+ duration: __props.duration,
424
+ onDismiss: _cache[0] || (_cache[0] = ($event) => emit("dismiss", $event))
425
+ }, null, 8, ["notification", "auto-dismiss", "duration"]);
426
+ }), 128))
427
+ ]),
428
+ _: 1
429
+ })
430
+ ], 6)
431
+ ]);
432
+ };
433
+ }
434
+ });
435
+ const _hoisted_1$5 = { class: "flex-1" };
436
+ const _hoisted_2$4 = {
437
+ key: 0,
438
+ class: "mb-1 font-medium text-gray-900 dark:text-white"
439
+ };
440
+ const _hoisted_3$4 = { class: "text-sm text-gray-700 dark:text-gray-300" };
441
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
442
+ __name: "Alert",
443
+ props: {
444
+ variant: { default: "info" },
445
+ title: {},
446
+ dismissible: { type: Boolean },
447
+ icon: {}
448
+ },
449
+ emits: ["dismiss"],
450
+ setup(__props, { emit: __emit }) {
451
+ const props = __props;
452
+ const emit = __emit;
453
+ const variantStyles = {
454
+ info: {
455
+ bg: "bg-blue-50 dark:bg-blue-900/20",
456
+ border: "border-blue-200 dark:border-blue-800",
457
+ icon: "lucide:info",
458
+ iconColor: "text-blue-500"
459
+ },
460
+ success: {
461
+ bg: "bg-green-50 dark:bg-green-900/20",
462
+ border: "border-green-200 dark:border-green-800",
463
+ icon: "lucide:check-circle",
464
+ iconColor: "text-green-500"
465
+ },
466
+ warning: {
467
+ bg: "bg-yellow-50 dark:bg-yellow-900/20",
468
+ border: "border-yellow-200 dark:border-yellow-800",
469
+ icon: "lucide:alert-triangle",
470
+ iconColor: "text-yellow-500"
471
+ },
472
+ error: {
473
+ bg: "bg-red-50 dark:bg-red-900/20",
474
+ border: "border-red-200 dark:border-red-800",
475
+ icon: "lucide:alert-circle",
476
+ iconColor: "text-red-500"
477
+ }
478
+ };
479
+ const styles = variantStyles[props.variant];
480
+ return (_ctx, _cache) => {
481
+ return vue.openBlock(), vue.createElementBlock("div", {
482
+ class: vue.normalizeClass([
483
+ "flex gap-3 rounded-lg border p-4",
484
+ vue.unref(styles).bg,
485
+ vue.unref(styles).border
486
+ ]),
487
+ role: "alert"
488
+ }, [
489
+ vue.createVNode(vue.unref(vue$1.Icon), {
490
+ icon: __props.icon || vue.unref(styles).icon,
491
+ class: vue.normalizeClass(["size-5 shrink-0", vue.unref(styles).iconColor]),
492
+ "aria-hidden": "true"
493
+ }, null, 8, ["icon", "class"]),
494
+ vue.createElementVNode("div", _hoisted_1$5, [
495
+ __props.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_2$4, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
496
+ vue.createElementVNode("div", _hoisted_3$4, [
497
+ vue.renderSlot(_ctx.$slots, "default")
498
+ ])
499
+ ]),
500
+ __props.dismissible ? (vue.openBlock(), vue.createElementBlock("button", {
501
+ key: 0,
502
+ type: "button",
503
+ class: "shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",
504
+ "aria-label": "Dismiss alert",
505
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("dismiss"))
506
+ }, [
507
+ vue.createVNode(vue.unref(vue$1.Icon), {
508
+ icon: "lucide:x",
509
+ class: "size-4",
510
+ "aria-hidden": "true"
511
+ })
512
+ ])) : vue.createCommentVNode("", true)
513
+ ], 2);
514
+ };
515
+ }
516
+ });
517
+ const _hoisted_1$4 = { class: "py-12 text-center" };
518
+ const _hoisted_2$3 = {
519
+ key: 1,
520
+ class: "mb-2 text-lg font-medium text-gray-900 dark:text-white"
521
+ };
522
+ const _hoisted_3$3 = { class: "text-gray-500 dark:text-gray-400" };
523
+ const _hoisted_4$2 = {
524
+ key: 2,
525
+ class: "mt-4"
526
+ };
527
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
528
+ __name: "EmptyState",
529
+ props: {
530
+ message: { default: "No results found" },
531
+ icon: { default: "lucide:inbox" },
532
+ title: {}
533
+ },
534
+ setup(__props) {
535
+ return (_ctx, _cache) => {
536
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
537
+ __props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
538
+ key: 0,
539
+ icon: __props.icon,
540
+ class: "mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500"
541
+ }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
542
+ __props.title ? (vue.openBlock(), vue.createElementBlock("h3", _hoisted_2$3, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
543
+ vue.createElementVNode("p", _hoisted_3$3, [
544
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
545
+ vue.createTextVNode(vue.toDisplayString(__props.message), 1)
546
+ ])
547
+ ]),
548
+ _ctx.$slots.action ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [
549
+ vue.renderSlot(_ctx.$slots, "action")
550
+ ])) : vue.createCommentVNode("", true)
551
+ ]);
552
+ };
553
+ }
554
+ });
555
+ const _hoisted_1$3 = { class: "flex-1 min-w-0" };
556
+ const _hoisted_2$2 = {
557
+ key: 0,
558
+ class: "font-medium text-gray-900 dark:text-white"
559
+ };
560
+ const _hoisted_3$2 = { class: "text-sm text-gray-700 dark:text-gray-300" };
561
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
562
+ __name: "Toast",
563
+ props: {
564
+ message: {},
565
+ type: { default: "info" },
566
+ title: {},
567
+ closable: { type: Boolean, default: true },
568
+ duration: { default: 5e3 }
569
+ },
570
+ emits: ["close"],
571
+ setup(__props, { emit: __emit }) {
572
+ const props = __props;
573
+ const emit = __emit;
574
+ const typeConfig = {
575
+ success: {
576
+ icon: "lucide:check-circle",
577
+ bg: "bg-green-50 border-green-200 dark:bg-green-950 dark:border-green-800",
578
+ iconColor: "text-green-500"
579
+ },
580
+ error: {
581
+ icon: "lucide:x-circle",
582
+ bg: "bg-red-50 border-red-200 dark:bg-red-950 dark:border-red-800",
583
+ iconColor: "text-red-500"
584
+ },
585
+ warning: {
586
+ icon: "lucide:alert-triangle",
587
+ bg: "bg-yellow-50 border-yellow-200 dark:bg-yellow-950 dark:border-yellow-800",
588
+ iconColor: "text-yellow-500"
589
+ },
590
+ info: {
591
+ icon: "lucide:info",
592
+ bg: "bg-blue-50 border-blue-200 dark:bg-blue-950 dark:border-blue-800",
593
+ iconColor: "text-blue-500"
594
+ }
595
+ };
596
+ const config = typeConfig[props.type];
597
+ if (props.duration > 0) {
598
+ setTimeout(() => {
599
+ emit("close");
600
+ }, props.duration);
601
+ }
602
+ return (_ctx, _cache) => {
603
+ return vue.openBlock(), vue.createElementBlock("div", {
604
+ class: vue.normalizeClass([
605
+ "flex items-start gap-3 rounded-lg border p-4 shadow-lg",
606
+ vue.unref(config).bg
607
+ ]),
608
+ role: "alert"
609
+ }, [
610
+ vue.createVNode(vue.unref(vue$1.Icon), {
611
+ icon: vue.unref(config).icon,
612
+ class: vue.normalizeClass(["size-5 shrink-0", vue.unref(config).iconColor]),
613
+ "aria-hidden": "true"
614
+ }, null, 8, ["icon", "class"]),
615
+ vue.createElementVNode("div", _hoisted_1$3, [
616
+ __props.title ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$2, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
617
+ vue.createElementVNode("p", _hoisted_3$2, vue.toDisplayString(__props.message), 1)
618
+ ]),
619
+ __props.closable ? (vue.openBlock(), vue.createElementBlock("button", {
620
+ key: 0,
621
+ type: "button",
622
+ class: "shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",
623
+ "aria-label": "Dismiss notification",
624
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
625
+ }, [
626
+ vue.createVNode(vue.unref(vue$1.Icon), {
627
+ icon: "lucide:x",
628
+ class: "size-4",
629
+ "aria-hidden": "true"
630
+ })
631
+ ])) : vue.createCommentVNode("", true)
632
+ ], 2);
633
+ };
634
+ }
635
+ });
636
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
637
+ __name: "ToastContainer",
638
+ props: {
639
+ toasts: {},
640
+ position: { default: "top-right" },
641
+ topOffset: {}
642
+ },
643
+ emits: ["close"],
644
+ setup(__props, { emit: __emit }) {
645
+ const props = __props;
646
+ const emit = __emit;
647
+ const positionClasses = {
648
+ "top-right": "right-4",
649
+ "top-left": "left-4",
650
+ "bottom-right": "bottom-4 right-4",
651
+ "bottom-left": "bottom-4 left-4",
652
+ "top-center": "left-1/2 -translate-x-1/2",
653
+ "bottom-center": "bottom-4 left-1/2 -translate-x-1/2"
654
+ };
655
+ const isTopPosition = vue.computed(() => {
656
+ var _a;
657
+ return (_a = props.position) == null ? void 0 : _a.startsWith("top");
658
+ });
659
+ const topStyle = vue.computed(() => {
660
+ if (!isTopPosition.value) return {};
661
+ return { top: props.topOffset || "1rem" };
662
+ });
663
+ return (_ctx, _cache) => {
664
+ return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
665
+ vue.createElementVNode("div", {
666
+ class: vue.normalizeClass(["fixed z-9999 flex flex-col gap-2 w-full max-w-sm", positionClasses[__props.position]]),
667
+ style: vue.normalizeStyle(topStyle.value),
668
+ "aria-live": "polite",
669
+ "aria-atomic": "false"
670
+ }, [
671
+ vue.createVNode(vue.TransitionGroup, {
672
+ "enter-active-class": "transition duration-300 ease-out",
673
+ "enter-from-class": "opacity-0 translate-x-4",
674
+ "enter-to-class": "opacity-100 translate-x-0",
675
+ "leave-active-class": "transition duration-200 ease-in",
676
+ "leave-from-class": "opacity-100 translate-x-0",
677
+ "leave-to-class": "opacity-0 translate-x-4"
678
+ }, {
679
+ default: vue.withCtx(() => [
680
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.toasts, (toast) => {
681
+ return vue.openBlock(), vue.createBlock(_sfc_main$4, {
682
+ key: toast.id,
683
+ message: toast.message,
684
+ type: toast.type,
685
+ title: toast.title,
686
+ duration: toast.duration,
687
+ onClose: ($event) => emit("close", toast.id)
688
+ }, null, 8, ["message", "type", "title", "duration", "onClose"]);
689
+ }), 128))
690
+ ]),
691
+ _: 1
692
+ })
693
+ ], 6)
694
+ ]);
695
+ };
696
+ }
697
+ });
698
+ const _hoisted_1$2 = { class: "w-full" };
699
+ const _hoisted_2$1 = {
700
+ key: 0,
701
+ class: "mb-1 flex justify-between text-sm"
702
+ };
703
+ const _hoisted_3$1 = { class: "font-medium text-gray-900 dark:text-white" };
704
+ const _hoisted_4$1 = ["aria-valuenow", "aria-valuemax"];
705
+ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
706
+ __name: "Progress",
707
+ props: {
708
+ value: {},
709
+ max: { default: 100 },
710
+ size: { default: "md" },
711
+ variant: { default: "default" },
712
+ showLabel: { type: Boolean, default: false },
713
+ striped: { type: Boolean, default: false },
714
+ animated: { type: Boolean, default: false },
715
+ indeterminate: { type: Boolean, default: false }
716
+ },
717
+ setup(__props) {
718
+ const props = __props;
719
+ const percentage = vue.computed(() => {
720
+ if (props.indeterminate) return 100;
721
+ return Math.min(Math.max(props.value / props.max * 100, 0), 100);
722
+ });
723
+ const sizeClasses = {
724
+ sm: "h-1",
725
+ md: "h-2",
726
+ lg: "h-4"
727
+ };
728
+ const variantClasses = {
729
+ default: "bg-primary",
730
+ success: "bg-green-500",
731
+ warning: "bg-yellow-500",
732
+ error: "bg-red-500"
733
+ };
734
+ return (_ctx, _cache) => {
735
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
736
+ __props.showLabel && !__props.indeterminate ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [
737
+ _cache[0] || (_cache[0] = vue.createElementVNode("span", { class: "text-gray-600 dark:text-gray-400" }, "Progress", -1)),
738
+ vue.createElementVNode("span", _hoisted_3$1, vue.toDisplayString(Math.round(percentage.value)) + "%", 1)
739
+ ])) : vue.createCommentVNode("", true),
740
+ vue.createElementVNode("div", {
741
+ class: vue.normalizeClass([
742
+ "w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700",
743
+ sizeClasses[__props.size]
744
+ ]),
745
+ role: "progressbar",
746
+ "aria-valuenow": __props.indeterminate ? void 0 : __props.value,
747
+ "aria-valuemin": 0,
748
+ "aria-valuemax": __props.max
749
+ }, [
750
+ vue.createElementVNode("div", {
751
+ class: vue.normalizeClass([
752
+ "h-full rounded-full transition-all duration-300",
753
+ variantClasses[__props.variant],
754
+ __props.striped && "bg-stripes",
755
+ __props.animated && "animate-stripes",
756
+ __props.indeterminate && "animate-indeterminate"
757
+ ]),
758
+ style: vue.normalizeStyle({ width: __props.indeterminate ? "30%" : `${percentage.value}%` })
759
+ }, null, 6)
760
+ ], 10, _hoisted_4$1)
761
+ ]);
762
+ };
763
+ }
764
+ });
765
+ const Progress = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$2, [["__scopeId", "data-v-7ff636cf"]]);
766
+ const _hoisted_1$1 = {
767
+ key: 0,
768
+ class: "space-y-2",
769
+ "aria-hidden": "true"
770
+ };
771
+ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
772
+ __name: "Skeleton",
773
+ props: {
774
+ variant: { default: "text" },
775
+ width: {},
776
+ height: {},
777
+ lines: { default: 1 },
778
+ animate: { type: Boolean, default: true }
779
+ },
780
+ setup(__props) {
781
+ const variantClasses = {
782
+ text: "h-4 rounded",
783
+ circular: "rounded-full",
784
+ rectangular: "",
785
+ rounded: "rounded-lg"
786
+ };
787
+ return (_ctx, _cache) => {
788
+ return __props.variant === "text" && __props.lines > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
789
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.lines, (i) => {
790
+ return vue.openBlock(), vue.createElementBlock("div", {
791
+ key: i,
792
+ class: vue.normalizeClass([
793
+ "bg-gray-200 dark:bg-gray-700",
794
+ variantClasses[__props.variant],
795
+ __props.animate && "animate-pulse"
796
+ ]),
797
+ style: vue.normalizeStyle({
798
+ width: i === __props.lines ? "75%" : __props.width || "100%",
799
+ height: __props.height
800
+ })
801
+ }, null, 6);
802
+ }), 128))
803
+ ])) : (vue.openBlock(), vue.createElementBlock("div", {
804
+ key: 1,
805
+ class: vue.normalizeClass([
806
+ "bg-gray-200 dark:bg-gray-700",
807
+ variantClasses[__props.variant],
808
+ __props.animate && "animate-pulse"
809
+ ]),
810
+ style: vue.normalizeStyle({
811
+ width: __props.width || (__props.variant === "circular" ? "3rem" : "100%"),
812
+ height: __props.height || (__props.variant === "circular" ? "3rem" : __props.variant === "text" ? "1rem" : "6rem")
813
+ }),
814
+ "aria-hidden": "true"
815
+ }, null, 6));
816
+ };
817
+ }
818
+ });
819
+ const _hoisted_1 = { class: "text-center" };
820
+ const _hoisted_2 = { class: "mx-auto mb-4 flex size-14 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800" };
821
+ const _hoisted_3 = { class: "mb-2 text-lg font-semibold text-gray-900 dark:text-gray-100" };
822
+ const _hoisted_4 = { class: "mb-6 text-gray-600 dark:text-gray-400" };
823
+ const _hoisted_5 = { class: "flex justify-center gap-3" };
824
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
825
+ __name: "ConfirmDialog",
826
+ props: {
827
+ open: { type: Boolean, default: false },
828
+ title: { default: "Confirm" },
829
+ message: { default: "Are you sure you want to proceed?" },
830
+ confirmText: { default: "Confirm" },
831
+ cancelText: { default: "Cancel" },
832
+ variant: { default: "info" },
833
+ loading: { type: Boolean, default: false },
834
+ icon: {},
835
+ teleport: { type: [String, Boolean], default: "body" }
836
+ },
837
+ emits: ["confirm", "cancel"],
838
+ setup(__props, { emit: __emit }) {
839
+ const props = __props;
840
+ const emit = __emit;
841
+ const variantConfig = {
842
+ info: {
843
+ icon: "lucide:info",
844
+ iconClass: "text-blue-500",
845
+ buttonVariant: "primary"
846
+ },
847
+ warning: {
848
+ icon: "lucide:alert-triangle",
849
+ iconClass: "text-yellow-500",
850
+ buttonVariant: "primary"
851
+ },
852
+ danger: {
853
+ icon: "lucide:alert-circle",
854
+ iconClass: "text-red-500",
855
+ buttonVariant: "danger"
856
+ },
857
+ success: {
858
+ icon: "lucide:check-circle",
859
+ iconClass: "text-green-500",
860
+ buttonVariant: "success"
861
+ }
862
+ };
863
+ const config = variantConfig[props.variant];
864
+ return (_ctx, _cache) => {
865
+ return __props.open ? (vue.openBlock(), vue.createBlock(_sfc_main$a, {
866
+ key: 0,
867
+ size: "sm",
868
+ "close-on-backdrop": !__props.loading,
869
+ "close-on-escape": !__props.loading,
870
+ teleport: __props.teleport,
871
+ onClose: _cache[2] || (_cache[2] = ($event) => emit("cancel"))
872
+ }, {
873
+ default: vue.withCtx(() => [
874
+ vue.createElementVNode("div", _hoisted_1, [
875
+ vue.createElementVNode("div", _hoisted_2, [
876
+ vue.createVNode(vue.unref(vue$1.Icon), {
877
+ icon: __props.icon || vue.unref(config).icon,
878
+ class: vue.normalizeClass([vue.unref(config).iconClass, "size-8"])
879
+ }, null, 8, ["icon", "class"])
880
+ ]),
881
+ vue.createElementVNode("h3", _hoisted_3, vue.toDisplayString(__props.title), 1),
882
+ vue.createElementVNode("p", _hoisted_4, [
883
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
884
+ vue.createTextVNode(vue.toDisplayString(__props.message), 1)
885
+ ])
886
+ ]),
887
+ vue.createElementVNode("div", _hoisted_5, [
888
+ vue.createVNode(Button_vue_vue_type_script_setup_true_lang._sfc_main, {
889
+ variant: "outline",
890
+ disabled: __props.loading,
891
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("cancel"))
892
+ }, {
893
+ default: vue.withCtx(() => [
894
+ vue.createTextVNode(vue.toDisplayString(__props.cancelText), 1)
895
+ ]),
896
+ _: 1
897
+ }, 8, ["disabled"]),
898
+ vue.createVNode(Button_vue_vue_type_script_setup_true_lang._sfc_main, {
899
+ variant: vue.unref(config).buttonVariant,
900
+ loading: __props.loading,
901
+ onClick: _cache[1] || (_cache[1] = ($event) => emit("confirm"))
902
+ }, {
903
+ default: vue.withCtx(() => [
904
+ vue.createTextVNode(vue.toDisplayString(__props.confirmText), 1)
905
+ ]),
906
+ _: 1
907
+ }, 8, ["variant", "loading"])
908
+ ])
909
+ ])
910
+ ]),
911
+ _: 3
912
+ }, 8, ["close-on-backdrop", "close-on-escape", "teleport"])) : vue.createCommentVNode("", true);
913
+ };
914
+ }
915
+ });
916
+ exports.Progress = Progress;
917
+ exports._sfc_main = _sfc_main$b;
918
+ exports._sfc_main$1 = _sfc_main$a;
919
+ exports._sfc_main$10 = _sfc_main;
920
+ exports._sfc_main$2 = _sfc_main$9;
921
+ exports._sfc_main$3 = _sfc_main$8;
922
+ exports._sfc_main$4 = _sfc_main$7;
923
+ exports._sfc_main$5 = _sfc_main$6;
924
+ exports._sfc_main$6 = _sfc_main$5;
925
+ exports._sfc_main$7 = _sfc_main$4;
926
+ exports._sfc_main$8 = _sfc_main$3;
927
+ exports._sfc_main$9 = _sfc_main$1;
928
+ //# sourceMappingURL=ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs.map