cisse-vue-ui 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-C-YXGDTY.js → PageHero.vue_vue_type_script_setup_true_lang-BYx595-2.js} +87 -47
  2. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-C-YXGDTY.js.map → PageHero.vue_vue_type_script_setup_true_lang-BYx595-2.js.map} +1 -1
  3. package/dist/{TagsInput-D0O6z6le.js → TagsInput-DtoJKN3L.js} +17 -5
  4. package/dist/TagsInput-DtoJKN3L.js.map +1 -0
  5. package/dist/components/form/index.js +1 -1
  6. package/dist/components/index.js +2 -2
  7. package/dist/components/layout/index.js +1 -1
  8. package/dist/{index-D9_zMCpN.js → index-F9yanU6_.js} +3 -3
  9. package/dist/index-F9yanU6_.js.map +1 -0
  10. package/dist/index.js +3 -3
  11. package/package.json +1 -1
  12. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs +0 -145
  13. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs.map +0 -1
  14. package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs +0 -98
  15. package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs.map +0 -1
  16. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs +0 -928
  17. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs.map +0 -1
  18. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs +0 -228
  19. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BNOHbbm5.cjs.map +0 -1
  20. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs +0 -2242
  21. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs.map +0 -1
  22. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +0 -149
  23. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +0 -1
  24. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CKCmOxOa.cjs +0 -724
  25. package/dist/PageHero.vue_vue_type_script_setup_true_lang-CKCmOxOa.cjs.map +0 -1
  26. package/dist/TagsInput-BF3zRMcU.cjs +0 -3682
  27. package/dist/TagsInput-BF3zRMcU.cjs.map +0 -1
  28. package/dist/TagsInput-D0O6z6le.js.map +0 -1
  29. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs +0 -10
  30. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs.map +0 -1
  31. package/dist/components/core/Accordion.stories.d.ts +0 -11
  32. package/dist/components/core/Accordion.test.d.ts +0 -1
  33. package/dist/components/core/Accordion.vue.d.ts +0 -27
  34. package/dist/components/core/AccordionItem.stories.d.ts +0 -10
  35. package/dist/components/core/AccordionItem.vue.d.ts +0 -29
  36. package/dist/components/core/AutocompleteComponent.stories.d.ts +0 -14
  37. package/dist/components/core/AutocompleteComponent.test.d.ts +0 -1
  38. package/dist/components/core/AutocompleteComponent.vue.d.ts +0 -25
  39. package/dist/components/core/Avatar.stories.d.ts +0 -12
  40. package/dist/components/core/Avatar.test.d.ts +0 -1
  41. package/dist/components/core/Avatar.vue.d.ts +0 -20
  42. package/dist/components/core/Breadcrumb.stories.d.ts +0 -11
  43. package/dist/components/core/Breadcrumb.test.d.ts +0 -1
  44. package/dist/components/core/Breadcrumb.vue.d.ts +0 -26
  45. package/dist/components/core/Button.stories.d.ts +0 -18
  46. package/dist/components/core/Button.test.d.ts +0 -1
  47. package/dist/components/core/Button.vue.d.ts +0 -49
  48. package/dist/components/core/CardComponent.stories.d.ts +0 -13
  49. package/dist/components/core/CardComponent.test.d.ts +0 -1
  50. package/dist/components/core/CardComponent.vue.d.ts +0 -40
  51. package/dist/components/core/CollapsibleCard.stories.d.ts +0 -10
  52. package/dist/components/core/CollapsibleCard.test.d.ts +0 -1
  53. package/dist/components/core/CollapsibleCard.vue.d.ts +0 -38
  54. package/dist/components/core/DarkModeToggle.stories.d.ts +0 -15
  55. package/dist/components/core/DarkModeToggle.test.d.ts +0 -1
  56. package/dist/components/core/DarkModeToggle.vue.d.ts +0 -21
  57. package/dist/components/core/Drawer.stories.d.ts +0 -12
  58. package/dist/components/core/Drawer.test.d.ts +0 -1
  59. package/dist/components/core/Drawer.vue.d.ts +0 -50
  60. package/dist/components/core/Dropdown.stories.d.ts +0 -11
  61. package/dist/components/core/Dropdown.test.d.ts +0 -1
  62. package/dist/components/core/Dropdown.vue.d.ts +0 -56
  63. package/dist/components/core/FilterTabs.stories.d.ts +0 -14
  64. package/dist/components/core/FilterTabs.test.d.ts +0 -1
  65. package/dist/components/core/FilterTabs.vue.d.ts +0 -29
  66. package/dist/components/core/MenuItem.stories.d.ts +0 -13
  67. package/dist/components/core/MenuItem.test.d.ts +0 -1
  68. package/dist/components/core/MenuItem.vue.d.ts +0 -16
  69. package/dist/components/core/MobileList.stories.d.ts +0 -13
  70. package/dist/components/core/MobileList.test.d.ts +0 -1
  71. package/dist/components/core/MobileList.vue.d.ts +0 -86
  72. package/dist/components/core/Popover.stories.d.ts +0 -10
  73. package/dist/components/core/Popover.test.d.ts +0 -1
  74. package/dist/components/core/Popover.vue.d.ts +0 -44
  75. package/dist/components/core/ResponsiveList.stories.d.ts +0 -15
  76. package/dist/components/core/ResponsiveList.test.d.ts +0 -1
  77. package/dist/components/core/ResponsiveList.vue.d.ts +0 -128
  78. package/dist/components/core/StatsCard.stories.d.ts +0 -15
  79. package/dist/components/core/StatsCard.test.d.ts +0 -1
  80. package/dist/components/core/StatsCard.vue.d.ts +0 -44
  81. package/dist/components/core/StatsGrid.stories.d.ts +0 -12
  82. package/dist/components/core/StatsGrid.test.d.ts +0 -1
  83. package/dist/components/core/StatsGrid.vue.d.ts +0 -16
  84. package/dist/components/core/StatusBadge.stories.d.ts +0 -13
  85. package/dist/components/core/StatusBadge.test.d.ts +0 -1
  86. package/dist/components/core/StatusBadge.vue.d.ts +0 -21
  87. package/dist/components/core/Stepper.stories.d.ts +0 -12
  88. package/dist/components/core/Stepper.test.d.ts +0 -1
  89. package/dist/components/core/Stepper.vue.d.ts +0 -22
  90. package/dist/components/core/TabPanel.stories.d.ts +0 -8
  91. package/dist/components/core/TabPanel.test.d.ts +0 -1
  92. package/dist/components/core/TabPanel.vue.d.ts +0 -21
  93. package/dist/components/core/TableAction.stories.d.ts +0 -14
  94. package/dist/components/core/TableAction.test.d.ts +0 -1
  95. package/dist/components/core/TableAction.vue.d.ts +0 -8
  96. package/dist/components/core/TableComponent.stories.d.ts +0 -16
  97. package/dist/components/core/TableComponent.test.d.ts +0 -1
  98. package/dist/components/core/TableComponent.vue.d.ts +0 -67
  99. package/dist/components/core/Tabs.stories.d.ts +0 -10
  100. package/dist/components/core/Tabs.test.d.ts +0 -1
  101. package/dist/components/core/Tabs.vue.d.ts +0 -39
  102. package/dist/components/core/Timeline.stories.d.ts +0 -11
  103. package/dist/components/core/Timeline.test.d.ts +0 -1
  104. package/dist/components/core/Timeline.vue.d.ts +0 -34
  105. package/dist/components/core/Tooltip.stories.d.ts +0 -10
  106. package/dist/components/core/Tooltip.test.d.ts +0 -1
  107. package/dist/components/core/Tooltip.vue.d.ts +0 -34
  108. package/dist/components/core/index.cjs +0 -33
  109. package/dist/components/core/index.cjs.map +0 -1
  110. package/dist/components/core/index.test.d.ts +0 -1
  111. package/dist/components/feedback/Alert.stories.d.ts +0 -13
  112. package/dist/components/feedback/Alert.test.d.ts +0 -1
  113. package/dist/components/feedback/Alert.vue.d.ts +0 -34
  114. package/dist/components/feedback/CardSkeleton.stories.d.ts +0 -11
  115. package/dist/components/feedback/CardSkeleton.test.d.ts +0 -1
  116. package/dist/components/feedback/CardSkeleton.vue.d.ts +0 -14
  117. package/dist/components/feedback/ConfirmDialog.stories.d.ts +0 -12
  118. package/dist/components/feedback/ConfirmDialog.test.d.ts +0 -1
  119. package/dist/components/feedback/ConfirmDialog.vue.d.ts +0 -53
  120. package/dist/components/feedback/EmptyState.stories.d.ts +0 -13
  121. package/dist/components/feedback/EmptyState.test.d.ts +0 -1
  122. package/dist/components/feedback/EmptyState.vue.d.ts +0 -29
  123. package/dist/components/feedback/ListSkeleton.stories.d.ts +0 -12
  124. package/dist/components/feedback/ListSkeleton.test.d.ts +0 -1
  125. package/dist/components/feedback/ListSkeleton.vue.d.ts +0 -17
  126. package/dist/components/feedback/LoadingSpinner.stories.d.ts +0 -11
  127. package/dist/components/feedback/LoadingSpinner.test.d.ts +0 -1
  128. package/dist/components/feedback/LoadingSpinner.vue.d.ts +0 -12
  129. package/dist/components/feedback/Modal.stories.d.ts +0 -11
  130. package/dist/components/feedback/Modal.test.d.ts +0 -1
  131. package/dist/components/feedback/Modal.vue.d.ts +0 -47
  132. package/dist/components/feedback/NotificationComponent.stories.d.ts +0 -14
  133. package/dist/components/feedback/NotificationComponent.test.d.ts +0 -1
  134. package/dist/components/feedback/NotificationComponent.vue.d.ts +0 -12
  135. package/dist/components/feedback/NotificationList.stories.d.ts +0 -11
  136. package/dist/components/feedback/NotificationList.test.d.ts +0 -1
  137. package/dist/components/feedback/NotificationList.vue.d.ts +0 -18
  138. package/dist/components/feedback/PaginationControls.stories.d.ts +0 -12
  139. package/dist/components/feedback/PaginationControls.test.d.ts +0 -1
  140. package/dist/components/feedback/PaginationControls.vue.d.ts +0 -21
  141. package/dist/components/feedback/Progress.stories.d.ts +0 -14
  142. package/dist/components/feedback/Progress.test.d.ts +0 -1
  143. package/dist/components/feedback/Progress.vue.d.ts +0 -30
  144. package/dist/components/feedback/Skeleton.stories.d.ts +0 -15
  145. package/dist/components/feedback/Skeleton.test.d.ts +0 -1
  146. package/dist/components/feedback/Skeleton.vue.d.ts +0 -19
  147. package/dist/components/feedback/TableSkeleton.stories.d.ts +0 -12
  148. package/dist/components/feedback/TableSkeleton.test.d.ts +0 -1
  149. package/dist/components/feedback/TableSkeleton.vue.d.ts +0 -14
  150. package/dist/components/feedback/Toast.stories.d.ts +0 -12
  151. package/dist/components/feedback/Toast.test.d.ts +0 -1
  152. package/dist/components/feedback/Toast.vue.d.ts +0 -23
  153. package/dist/components/feedback/ToastContainer.stories.d.ts +0 -15
  154. package/dist/components/feedback/ToastContainer.test.d.ts +0 -1
  155. package/dist/components/feedback/ToastContainer.vue.d.ts +0 -24
  156. package/dist/components/feedback/index.cjs +0 -20
  157. package/dist/components/feedback/index.cjs.map +0 -1
  158. package/dist/components/feedback/index.test.d.ts +0 -1
  159. package/dist/components/form/Checkbox.stories.d.ts +0 -13
  160. package/dist/components/form/Checkbox.test.d.ts +0 -1
  161. package/dist/components/form/Checkbox.vue.d.ts +0 -22
  162. package/dist/components/form/ColorPicker.stories.d.ts +0 -12
  163. package/dist/components/form/ColorPicker.test.d.ts +0 -1
  164. package/dist/components/form/ColorPicker.vue.d.ts +0 -26
  165. package/dist/components/form/Combobox.stories.d.ts +0 -15
  166. package/dist/components/form/Combobox.test.d.ts +0 -1
  167. package/dist/components/form/Combobox.vue.d.ts +0 -46
  168. package/dist/components/form/DatePicker.stories.d.ts +0 -15
  169. package/dist/components/form/DatePicker.test.d.ts +0 -1
  170. package/dist/components/form/DatePicker.vue.d.ts +0 -36
  171. package/dist/components/form/EmailInput.stories.d.ts +0 -13
  172. package/dist/components/form/EmailInput.test.d.ts +0 -1
  173. package/dist/components/form/EmailInput.vue.d.ts +0 -32
  174. package/dist/components/form/FileUpload.stories.d.ts +0 -12
  175. package/dist/components/form/FileUpload.test.d.ts +0 -1
  176. package/dist/components/form/FileUpload.vue.d.ts +0 -40
  177. package/dist/components/form/FormActions.stories.d.ts +0 -18
  178. package/dist/components/form/FormActions.test.d.ts +0 -1
  179. package/dist/components/form/FormActions.vue.d.ts +0 -56
  180. package/dist/components/form/FormGroup.stories.d.ts +0 -10
  181. package/dist/components/form/FormGroup.test.d.ts +0 -1
  182. package/dist/components/form/FormGroup.vue.d.ts +0 -30
  183. package/dist/components/form/FormHelp.stories.d.ts +0 -11
  184. package/dist/components/form/FormHelp.test.d.ts +0 -1
  185. package/dist/components/form/FormHelp.vue.d.ts +0 -23
  186. package/dist/components/form/FormInput.stories.d.ts +0 -12
  187. package/dist/components/form/FormInput.test.d.ts +0 -1
  188. package/dist/components/form/FormInput.vue.d.ts +0 -13
  189. package/dist/components/form/FormLabel.stories.d.ts +0 -12
  190. package/dist/components/form/FormLabel.test.d.ts +0 -1
  191. package/dist/components/form/FormLabel.vue.d.ts +0 -21
  192. package/dist/components/form/FormSection.stories.d.ts +0 -13
  193. package/dist/components/form/FormSection.test.d.ts +0 -1
  194. package/dist/components/form/FormSection.vue.d.ts +0 -49
  195. package/dist/components/form/FormSelect.stories.d.ts +0 -13
  196. package/dist/components/form/FormSelect.test.d.ts +0 -1
  197. package/dist/components/form/FormSelect.vue.d.ts +0 -55
  198. package/dist/components/form/IconPicker.vue.d.ts +0 -33
  199. package/dist/components/form/InputWrapper.stories.d.ts +0 -16
  200. package/dist/components/form/InputWrapper.test.d.ts +0 -1
  201. package/dist/components/form/InputWrapper.vue.d.ts +0 -40
  202. package/dist/components/form/MoneyInput.stories.d.ts +0 -16
  203. package/dist/components/form/MoneyInput.test.d.ts +0 -1
  204. package/dist/components/form/MoneyInput.vue.d.ts +0 -40
  205. package/dist/components/form/NumberInput.stories.d.ts +0 -14
  206. package/dist/components/form/NumberInput.test.d.ts +0 -1
  207. package/dist/components/form/NumberInput.vue.d.ts +0 -39
  208. package/dist/components/form/OTPInput.stories.d.ts +0 -13
  209. package/dist/components/form/OTPInput.test.d.ts +0 -1
  210. package/dist/components/form/OTPInput.vue.d.ts +0 -33
  211. package/dist/components/form/PasswordInput.stories.d.ts +0 -15
  212. package/dist/components/form/PasswordInput.test.d.ts +0 -1
  213. package/dist/components/form/PasswordInput.vue.d.ts +0 -36
  214. package/dist/components/form/PercentInput.stories.d.ts +0 -12
  215. package/dist/components/form/PercentInput.test.d.ts +0 -1
  216. package/dist/components/form/PercentInput.vue.d.ts +0 -38
  217. package/dist/components/form/PhoneInput.stories.d.ts +0 -13
  218. package/dist/components/form/PhoneInput.test.d.ts +0 -1
  219. package/dist/components/form/PhoneInput.vue.d.ts +0 -89
  220. package/dist/components/form/QuantityInput.stories.d.ts +0 -12
  221. package/dist/components/form/QuantityInput.test.d.ts +0 -1
  222. package/dist/components/form/QuantityInput.vue.d.ts +0 -32
  223. package/dist/components/form/RangeSlider.stories.d.ts +0 -13
  224. package/dist/components/form/RangeSlider.test.d.ts +0 -1
  225. package/dist/components/form/RangeSlider.vue.d.ts +0 -35
  226. package/dist/components/form/Rating.stories.d.ts +0 -16
  227. package/dist/components/form/Rating.test.d.ts +0 -1
  228. package/dist/components/form/Rating.vue.d.ts +0 -43
  229. package/dist/components/form/SearchInput.stories.d.ts +0 -13
  230. package/dist/components/form/SearchInput.test.d.ts +0 -1
  231. package/dist/components/form/SearchInput.vue.d.ts +0 -26
  232. package/dist/components/form/Slider.stories.d.ts +0 -13
  233. package/dist/components/form/Slider.test.d.ts +0 -1
  234. package/dist/components/form/Slider.vue.d.ts +0 -29
  235. package/dist/components/form/Switch.stories.d.ts +0 -11
  236. package/dist/components/form/Switch.test.d.ts +0 -1
  237. package/dist/components/form/Switch.vue.d.ts +0 -23
  238. package/dist/components/form/TagsInput.stories.d.ts +0 -13
  239. package/dist/components/form/TagsInput.test.d.ts +0 -1
  240. package/dist/components/form/TagsInput.vue.d.ts +0 -37
  241. package/dist/components/form/URLInput.stories.d.ts +0 -11
  242. package/dist/components/form/URLInput.test.d.ts +0 -1
  243. package/dist/components/form/URLInput.vue.d.ts +0 -32
  244. package/dist/components/form/index.cjs +0 -34
  245. package/dist/components/form/index.cjs.map +0 -1
  246. package/dist/components/form/index.test.d.ts +0 -1
  247. package/dist/components/index.cjs +0 -91
  248. package/dist/components/index.cjs.map +0 -1
  249. package/dist/components/index.d.ts +0 -5
  250. package/dist/components/index.test.d.ts +0 -1
  251. package/dist/components/layout/AuthLayout.stories.d.ts +0 -10
  252. package/dist/components/layout/AuthLayout.test.d.ts +0 -1
  253. package/dist/components/layout/AuthLayout.vue.d.ts +0 -88
  254. package/dist/components/layout/BaseLayout.stories.d.ts +0 -11
  255. package/dist/components/layout/BaseLayout.test.d.ts +0 -1
  256. package/dist/components/layout/BaseLayout.vue.d.ts +0 -77
  257. package/dist/components/layout/PageHero.stories.d.ts +0 -11
  258. package/dist/components/layout/PageHero.test.d.ts +0 -1
  259. package/dist/components/layout/PageHero.vue.d.ts +0 -51
  260. package/dist/components/layout/PageLayout.stories.d.ts +0 -10
  261. package/dist/components/layout/PageLayout.test.d.ts +0 -1
  262. package/dist/components/layout/PageLayout.vue.d.ts +0 -37
  263. package/dist/components/layout/index.cjs +0 -8
  264. package/dist/components/layout/index.cjs.map +0 -1
  265. package/dist/components/layout/index.test.d.ts +0 -1
  266. package/dist/components/type/BadgeType.stories.d.ts +0 -13
  267. package/dist/components/type/BadgeType.test.d.ts +0 -1
  268. package/dist/components/type/BooleanType.stories.d.ts +0 -12
  269. package/dist/components/type/BooleanType.test.d.ts +0 -1
  270. package/dist/components/type/DateType.stories.d.ts +0 -12
  271. package/dist/components/type/DateType.test.d.ts +0 -1
  272. package/dist/components/type/NumberType.stories.d.ts +0 -11
  273. package/dist/components/type/NumberType.test.d.ts +0 -1
  274. package/dist/components/type/TextType.stories.d.ts +0 -10
  275. package/dist/components/type/TextType.test.d.ts +0 -1
  276. package/dist/components/type/index.cjs +0 -9
  277. package/dist/components/type/index.cjs.map +0 -1
  278. package/dist/components/type/index.test.d.ts +0 -1
  279. package/dist/composables/index.cjs +0 -19
  280. package/dist/composables/index.cjs.map +0 -1
  281. package/dist/composables/index.d.ts +0 -8
  282. package/dist/composables/index.test.d.ts +0 -1
  283. package/dist/composables/useDarkMode.d.ts +0 -14
  284. package/dist/composables/useDarkMode.test.d.ts +0 -1
  285. package/dist/composables/useDropdown.d.ts +0 -51
  286. package/dist/composables/useDropdown.test.d.ts +0 -1
  287. package/dist/composables/useExportCSV.d.ts +0 -10
  288. package/dist/composables/useExportCSV.test.d.ts +0 -1
  289. package/dist/composables/useFocusTrap.d.ts +0 -41
  290. package/dist/composables/useFocusTrap.test.d.ts +0 -1
  291. package/dist/composables/useId.d.ts +0 -42
  292. package/dist/composables/useId.test.d.ts +0 -1
  293. package/dist/composables/useModal.d.ts +0 -60
  294. package/dist/composables/useModal.test.d.ts +0 -1
  295. package/dist/composables/useNotifications.d.ts +0 -27
  296. package/dist/composables/useNotifications.test.d.ts +0 -1
  297. package/dist/composables/useToast.d.ts +0 -30
  298. package/dist/composables/useToast.test.d.ts +0 -1
  299. package/dist/index-D1x3TH9k.cjs +0 -401
  300. package/dist/index-D1x3TH9k.cjs.map +0 -1
  301. package/dist/index-D9_zMCpN.js.map +0 -1
  302. package/dist/index-PehFvNFG.cjs +0 -94
  303. package/dist/index-PehFvNFG.cjs.map +0 -1
  304. package/dist/index.cjs +0 -123
  305. package/dist/index.cjs.map +0 -1
  306. package/dist/index.d.ts +0 -5
  307. package/dist/index.test.d.ts +0 -1
  308. package/dist/plugin.d.ts +0 -24
  309. package/dist/style.css +0 -2
  310. package/dist/types/components.d.ts +0 -27
  311. package/dist/types/form.d.ts +0 -37
  312. package/dist/types/index.cjs +0 -2
  313. package/dist/types/index.cjs.map +0 -1
  314. package/dist/types/index.d.ts +0 -4
  315. package/dist/types/index.test.d.ts +0 -1
  316. package/dist/types/notification.d.ts +0 -12
  317. package/dist/types/property.d.ts +0 -34
  318. package/dist/useDarkMode-DLZcJEUQ.cjs +0 -52
  319. package/dist/useDarkMode-DLZcJEUQ.cjs.map +0 -1
  320. package/dist/useDropdown-DHFnd259.cjs +0 -130
  321. package/dist/useDropdown-DHFnd259.cjs.map +0 -1
  322. package/dist/useFocusTrap-kcxO8AeU.cjs +0 -119
  323. package/dist/useFocusTrap-kcxO8AeU.cjs.map +0 -1
  324. package/dist/useId-nxrBaIC9.cjs +0 -25
  325. package/dist/useId-nxrBaIC9.cjs.map +0 -1
  326. package/dist/useToast-Bk60GArg.cjs +0 -176
  327. package/dist/useToast-Bk60GArg.cjs.map +0 -1
@@ -1,2242 +0,0 @@
1
- "use strict";
2
- const vue = require("vue");
3
- const index = require("./index-D1x3TH9k.cjs");
4
- const ListSkeleton_vue_vue_type_script_setup_true_lang = require("./ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs");
5
- const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs");
6
- const vue$1 = require("@iconify/vue");
7
- const useDropdown = require("./useDropdown-DHFnd259.cjs");
8
- const useId = require("./useId-nxrBaIC9.cjs");
9
- const useDarkMode = require("./useDarkMode-DLZcJEUQ.cjs");
10
- const _hoisted_1$h = {
11
- key: 1,
12
- class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950"
13
- };
14
- const _hoisted_2$d = { class: "flex flex-col gap-0.5" };
15
- const _hoisted_3$8 = {
16
- key: 1,
17
- class: "text-sm font-normal text-gray-600 dark:text-gray-400"
18
- };
19
- const _hoisted_4$6 = { class: "flex gap-2" };
20
- const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
21
- __name: "CardComponent",
22
- props: {
23
- title: {},
24
- description: {},
25
- titleClass: {},
26
- dividerClass: {},
27
- loading: { type: Boolean, default: false },
28
- loadingLines: { default: 3 },
29
- loadingAvatar: { type: Boolean, default: false },
30
- loadingActions: { type: Boolean, default: false }
31
- },
32
- setup(__props) {
33
- const props = __props;
34
- const titleClasses = vue.computed(
35
- () => props.titleClass || "text-gray-800 dark:text-gray-200"
36
- );
37
- const dividerClasses = vue.computed(
38
- () => props.dividerClass || "border-gray-200 dark:border-gray-700"
39
- );
40
- return (_ctx, _cache) => {
41
- return __props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$1, {
42
- key: 0,
43
- lines: __props.loadingLines,
44
- "show-avatar": __props.loadingAvatar,
45
- "show-actions": __props.loadingActions
46
- }, null, 8, ["lines", "show-avatar", "show-actions"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
47
- _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", {
48
- key: 0,
49
- class: vue.normalizeClass(["border-b", dividerClasses.value])
50
- }, [
51
- vue.renderSlot(_ctx.$slots, "header")
52
- ], 2)) : __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", {
53
- key: 1,
54
- class: vue.normalizeClass(["flex items-center justify-between border-b px-5 py-3", dividerClasses.value])
55
- }, [
56
- vue.createElementVNode("div", _hoisted_2$d, [
57
- __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", {
58
- key: 0,
59
- class: vue.normalizeClass(["text-md font-semibold", titleClasses.value])
60
- }, [
61
- vue.renderSlot(_ctx.$slots, "title", {}, () => [
62
- vue.createTextVNode(vue.toDisplayString(__props.title), 1)
63
- ])
64
- ], 2)) : vue.createCommentVNode("", true),
65
- __props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$8, [
66
- vue.renderSlot(_ctx.$slots, "description", {}, () => [
67
- vue.createTextVNode(vue.toDisplayString(__props.description), 1)
68
- ])
69
- ])) : vue.createCommentVNode("", true)
70
- ]),
71
- vue.createElementVNode("div", _hoisted_4$6, [
72
- vue.renderSlot(_ctx.$slots, "actions")
73
- ])
74
- ], 2)) : vue.createCommentVNode("", true),
75
- vue.renderSlot(_ctx.$slots, "default")
76
- ]));
77
- };
78
- }
79
- });
80
- const _hoisted_1$g = { class: "overflow-hidden" };
81
- const _hoisted_2$c = {
82
- key: 1,
83
- class: "overflow-x-auto"
84
- };
85
- const _hoisted_3$7 = { class: "w-full divide-y divide-black/10 text-left dark:divide-white/10" };
86
- const _hoisted_4$5 = { class: "bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400" };
87
- const _hoisted_5$3 = {
88
- key: 0,
89
- class: "w-12 px-3 py-3"
90
- };
91
- const _hoisted_6$3 = ["onClick"];
92
- const _hoisted_7$3 = {
93
- key: 0,
94
- d: "M7 14l5-5 5 5H7z"
95
- };
96
- const _hoisted_8$3 = {
97
- key: 1,
98
- d: "M7 10l5 5 5-5H7z"
99
- };
100
- const _hoisted_9$3 = {
101
- key: 1,
102
- class: "px-3 py-3 text-right"
103
- };
104
- const _hoisted_10$2 = { class: "divide-y divide-black/10 font-medium dark:divide-white/10" };
105
- const _hoisted_11$1 = {
106
- key: 0,
107
- class: "px-3 py-4"
108
- };
109
- const _hoisted_12$1 = {
110
- key: 1,
111
- class: "flex items-center justify-end gap-2 px-3 py-4"
112
- };
113
- const _hoisted_13 = { key: 0 };
114
- const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
115
- __name: "TableComponent",
116
- props: {
117
- properties: {},
118
- items: {},
119
- selectable: { type: Boolean, default: false },
120
- selectedItems: {},
121
- selectableFilter: {},
122
- keyField: { default: "id" },
123
- sortBy: {},
124
- sortDirection: {},
125
- loading: { type: Boolean, default: false },
126
- loadingRows: { default: 5 }
127
- },
128
- emits: ["select", "selectAll", "sort"],
129
- setup(__props, { emit: __emit }) {
130
- const slots = vue.useSlots();
131
- const props = __props;
132
- const emit = __emit;
133
- const typeComponents = {
134
- text: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1,
135
- number: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$2,
136
- date: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$3,
137
- boolean: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$4,
138
- badge: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$5
139
- };
140
- const getTypeComponent = (type = "text") => {
141
- return typeComponents[type] || BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1;
142
- };
143
- const visibleProperties = vue.computed(() => props.properties.filter((p) => !p.hidden));
144
- const getKey = (item) => {
145
- const keyValue = item[props.keyField];
146
- return String(keyValue ?? Math.random());
147
- };
148
- const getItemValue = (item, property) => {
149
- if (property.name.includes(".")) {
150
- let value = item;
151
- for (const key of property.name.split(".")) {
152
- if (value && typeof value === "object" && key in value) {
153
- value = value[key];
154
- } else {
155
- return void 0;
156
- }
157
- }
158
- return value;
159
- }
160
- return item[property.name];
161
- };
162
- const getAlignmentClass = (align) => {
163
- switch (align) {
164
- case "center":
165
- return "text-center";
166
- case "right":
167
- return "text-right";
168
- default:
169
- return "text-left";
170
- }
171
- };
172
- const getMainClass = (main) => {
173
- if (main) {
174
- return "text-sm font-semibold text-gray-900 dark:text-gray-100";
175
- }
176
- return "text-xs font-medium text-gray-600 dark:text-gray-400";
177
- };
178
- const selectableItems = vue.computed(() => {
179
- if (!props.selectableFilter) return props.items;
180
- return props.items.filter(props.selectableFilter);
181
- });
182
- const allSelected = vue.computed(() => {
183
- if (selectableItems.value.length === 0) return false;
184
- return selectableItems.value.every((item) => {
185
- var _a;
186
- return (_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item));
187
- });
188
- });
189
- const someSelected = vue.computed(() => {
190
- var _a;
191
- return (((_a = props.selectedItems) == null ? void 0 : _a.size) || 0) > 0 && !allSelected.value;
192
- });
193
- const isSelected = (item) => {
194
- var _a;
195
- return ((_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item))) || false;
196
- };
197
- const isSelectable = (item) => {
198
- if (!props.selectable) return false;
199
- if (!props.selectableFilter) return true;
200
- return props.selectableFilter(item);
201
- };
202
- const handleSelect = (item) => {
203
- emit("select", getKey(item));
204
- };
205
- const hasActionSlot = vue.computed(() => !!slots.action);
206
- const handleSort = (property) => {
207
- if (!property.sortable) return;
208
- const newDirection = props.sortBy === property.name && props.sortDirection === "asc" ? "desc" : "asc";
209
- emit("sort", property.name, newDirection);
210
- };
211
- const isSortedColumn = (property) => {
212
- return props.sortBy === property.name;
213
- };
214
- return (_ctx, _cache) => {
215
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [
216
- __props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main, {
217
- key: 0,
218
- rows: __props.loadingRows,
219
- columns: visibleProperties.value.length
220
- }, null, 8, ["rows", "columns"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$c, [
221
- vue.createElementVNode("table", _hoisted_3$7, [
222
- vue.createElementVNode("thead", _hoisted_4$5, [
223
- vue.createElementVNode("tr", null, [
224
- __props.selectable ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_5$3, [
225
- vue.createVNode(index._sfc_main, {
226
- "model-value": allSelected.value,
227
- indeterminate: someSelected.value,
228
- disabled: selectableItems.value.length === 0,
229
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
230
- }, null, 8, ["model-value", "indeterminate", "disabled"])
231
- ])) : vue.createCommentVNode("", true),
232
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleProperties.value, (property) => {
233
- return vue.openBlock(), vue.createElementBlock("th", {
234
- key: property.name,
235
- class: vue.normalizeClass([
236
- getAlignmentClass(property.align),
237
- "px-3 py-3",
238
- property.sortable ? "cursor-pointer select-none hover:bg-black/5 dark:hover:bg-white/5" : ""
239
- ]),
240
- onClick: ($event) => handleSort(property)
241
- }, [
242
- vue.createElementVNode("div", {
243
- class: vue.normalizeClass(["flex items-center gap-1", {
244
- "justify-center": property.align === "center",
245
- "justify-end": property.align === "right"
246
- }])
247
- }, [
248
- vue.renderSlot(_ctx.$slots, "header-" + property.name, { property }, () => [
249
- vue.createTextVNode(vue.toDisplayString(property.label ?? property.name), 1)
250
- ]),
251
- property.sortable ? (vue.openBlock(), vue.createElementBlock("svg", {
252
- key: 0,
253
- class: vue.normalizeClass([
254
- "size-4 transition-colors",
255
- isSortedColumn(property) ? "text-primary-500" : "text-gray-400"
256
- ]),
257
- viewBox: "0 0 24 24",
258
- fill: "currentColor"
259
- }, [
260
- isSortedColumn(property) && __props.sortDirection === "asc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_7$3)) : isSortedColumn(property) && __props.sortDirection === "desc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_8$3)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
261
- _cache[1] || (_cache[1] = vue.createElementVNode("path", {
262
- d: "M7 14l5-5 5 5H7z",
263
- class: "opacity-40"
264
- }, null, -1)),
265
- _cache[2] || (_cache[2] = vue.createElementVNode("path", {
266
- d: "M7 10l5 5 5-5H7z",
267
- class: "opacity-40"
268
- }, null, -1))
269
- ], 64))
270
- ], 2)) : vue.createCommentVNode("", true)
271
- ], 2)
272
- ], 10, _hoisted_6$3);
273
- }), 128)),
274
- hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_9$3)) : vue.createCommentVNode("", true)
275
- ])
276
- ]),
277
- vue.createElementVNode("tbody", _hoisted_10$2, [
278
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
279
- return vue.openBlock(), vue.createElementBlock("tr", {
280
- key: getKey(item),
281
- class: vue.normalizeClass(["hover:bg-black/5 dark:hover:bg-white/5 transition-colors", { "bg-primary/5 dark:bg-primary/10": isSelected(item) }])
282
- }, [
283
- __props.selectable ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_11$1, [
284
- isSelectable(item) ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
285
- key: 0,
286
- "model-value": isSelected(item),
287
- "onUpdate:modelValue": ($event) => handleSelect(item)
288
- }, null, 8, ["model-value", "onUpdate:modelValue"])) : vue.createCommentVNode("", true)
289
- ])) : vue.createCommentVNode("", true),
290
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleProperties.value, (property) => {
291
- return vue.openBlock(), vue.createElementBlock("td", {
292
- key: property.name,
293
- class: vue.normalizeClass([
294
- getAlignmentClass(property.align),
295
- getMainClass(property.main),
296
- property.className,
297
- "px-3 py-4"
298
- ])
299
- }, [
300
- vue.renderSlot(_ctx.$slots, "item-" + property.name, {
301
- item,
302
- property,
303
- value: getItemValue(item, property)
304
- }, () => [
305
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getTypeComponent(property.type || "text")), {
306
- value: getItemValue(item, property)
307
- }, null, 8, ["value"]))
308
- ])
309
- ], 2);
310
- }), 128)),
311
- hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_12$1, [
312
- vue.renderSlot(_ctx.$slots, "action", { item })
313
- ])) : vue.createCommentVNode("", true)
314
- ], 2);
315
- }), 128))
316
- ])
317
- ]),
318
- !__props.items || __props.items.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
319
- vue.renderSlot(_ctx.$slots, "empty")
320
- ])) : vue.createCommentVNode("", true)
321
- ]))
322
- ]);
323
- };
324
- }
325
- });
326
- const _hoisted_1$f = { class: "space-y-3" };
327
- const _hoisted_2$b = { class: "flex items-center gap-3 p-3" };
328
- const _hoisted_3$6 = { class: "text-sm text-gray-600 dark:text-gray-400" };
329
- const _hoisted_4$4 = {
330
- key: 0,
331
- class: "text-sm text-primary font-medium"
332
- };
333
- const _hoisted_5$2 = { class: "p-4 flex items-center gap-4" };
334
- const _hoisted_6$2 = {
335
- key: 0,
336
- class: "shrink-0"
337
- };
338
- const _hoisted_7$2 = {
339
- key: 1,
340
- class: "size-5"
341
- };
342
- const _hoisted_8$2 = { class: "flex-1 min-w-0 overflow-hidden" };
343
- const _hoisted_9$2 = { class: "shrink-0" };
344
- const _hoisted_10$1 = { key: 1 };
345
- const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
346
- __name: "MobileList",
347
- props: {
348
- items: {},
349
- keyField: { default: "id" },
350
- selectable: { type: Boolean, default: false },
351
- selectedItems: {},
352
- selectableFilter: {},
353
- loading: { type: Boolean, default: false },
354
- loadingItems: { default: 5 }
355
- },
356
- emits: ["select", "selectAll"],
357
- setup(__props, { emit: __emit }) {
358
- const props = __props;
359
- const emit = __emit;
360
- const slots = vue.useSlots();
361
- const getKey = (item) => {
362
- const keyValue = item[props.keyField];
363
- return String(keyValue ?? Math.random());
364
- };
365
- const selectableItems = vue.computed(() => {
366
- if (!props.selectableFilter) return props.items;
367
- return props.items.filter(props.selectableFilter);
368
- });
369
- const allSelected = vue.computed(() => {
370
- if (selectableItems.value.length === 0) return false;
371
- return selectableItems.value.every((item) => {
372
- var _a;
373
- return (_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item));
374
- });
375
- });
376
- const someSelected = vue.computed(() => {
377
- var _a;
378
- return (((_a = props.selectedItems) == null ? void 0 : _a.size) || 0) > 0 && !allSelected.value;
379
- });
380
- const isSelected = (item) => {
381
- var _a;
382
- return ((_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item))) || false;
383
- };
384
- const isSelectable = (item) => {
385
- if (!props.selectable) return false;
386
- if (!props.selectableFilter) return true;
387
- return props.selectableFilter(item);
388
- };
389
- const handleSelect = (item) => {
390
- emit("select", getKey(item));
391
- };
392
- const hasEmptySlot = vue.computed(() => !!slots.empty);
393
- return (_ctx, _cache) => {
394
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
395
- __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$l, { key: 0 }, {
396
- default: vue.withCtx(() => [
397
- vue.createVNode(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$2, {
398
- items: __props.loadingItems,
399
- "show-avatar": "",
400
- "show-secondary": "",
401
- "show-action": ""
402
- }, null, 8, ["items"])
403
- ]),
404
- _: 1
405
- })) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
406
- __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$l, { key: 0 }, {
407
- default: vue.withCtx(() => [
408
- vue.createElementVNode("div", _hoisted_2$b, [
409
- vue.createVNode(index._sfc_main, {
410
- "model-value": allSelected.value,
411
- indeterminate: someSelected.value,
412
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
413
- }, null, 8, ["model-value", "indeterminate"]),
414
- vue.createElementVNode("span", _hoisted_3$6, vue.toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
415
- __props.selectedItems && __props.selectedItems.size > 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$4, " (" + vue.toDisplayString(__props.selectedItems.size) + " sélectionné" + vue.toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : vue.createCommentVNode("", true)
416
- ])
417
- ]),
418
- _: 1
419
- })) : vue.createCommentVNode("", true),
420
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
421
- return vue.openBlock(), vue.createBlock(_sfc_main$l, {
422
- key: getKey(item),
423
- class: vue.normalizeClass(["hover:shadow-lg transition-all duration-200", {
424
- "ring-2 ring-primary": isSelected(item)
425
- }])
426
- }, {
427
- default: vue.withCtx(() => [
428
- vue.createElementVNode("div", _hoisted_5$2, [
429
- __props.selectable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$2, [
430
- isSelectable(item) ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
431
- key: 0,
432
- "model-value": isSelected(item),
433
- "onUpdate:modelValue": ($event) => handleSelect(item)
434
- }, null, 8, ["model-value", "onUpdate:modelValue"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2))
435
- ])) : vue.createCommentVNode("", true),
436
- vue.renderSlot(_ctx.$slots, "avatar", { item }),
437
- vue.createElementVNode("div", _hoisted_8$2, [
438
- vue.renderSlot(_ctx.$slots, "content", { item })
439
- ]),
440
- vue.createElementVNode("div", _hoisted_9$2, [
441
- vue.renderSlot(_ctx.$slots, "actions", { item })
442
- ])
443
- ])
444
- ]),
445
- _: 2
446
- }, 1032, ["class"]);
447
- }), 128)),
448
- __props.items.length === 0 && hasEmptySlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
449
- vue.renderSlot(_ctx.$slots, "empty")
450
- ])) : vue.createCommentVNode("", true)
451
- ], 64))
452
- ]);
453
- };
454
- }
455
- });
456
- const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
457
- __name: "ResponsiveList",
458
- props: {
459
- items: {},
460
- columns: {},
461
- keyField: { default: "id" },
462
- selectable: { type: Boolean, default: false },
463
- selectedItems: {},
464
- selectableFilter: {},
465
- breakpoint: { default: "lg" },
466
- sortBy: {},
467
- sortDirection: {},
468
- loading: { type: Boolean, default: false },
469
- loadingRows: { default: 5 }
470
- },
471
- emits: ["select", "selectAll", "sort"],
472
- setup(__props, { emit: __emit }) {
473
- const props = __props;
474
- const emit = __emit;
475
- const slots = vue.useSlots();
476
- const getColumnKey = (col) => col.key || col.name || "";
477
- const tableProperties = vue.computed(
478
- () => props.columns.map((col) => ({
479
- name: getColumnKey(col),
480
- label: col.label,
481
- type: col.type,
482
- sortable: col.sortable,
483
- hidden: col.hidden,
484
- align: col.align,
485
- className: col.className,
486
- main: col.main
487
- }))
488
- );
489
- const getCellValue = (item, key) => {
490
- const keys = key.split(".");
491
- let value = item;
492
- for (const k of keys) {
493
- if (value && typeof value === "object" && k in value) {
494
- value = value[k];
495
- } else {
496
- return void 0;
497
- }
498
- }
499
- return value;
500
- };
501
- const hasCellSlot = (key) => {
502
- return !!slots[`cell-${key}`];
503
- };
504
- const hasActionsSlot = vue.computed(() => !!slots.actions);
505
- const breakpoints = index.useBreakpoints({
506
- sm: 640,
507
- md: 768,
508
- lg: 1024,
509
- xl: 1280,
510
- "2xl": 1536
511
- });
512
- const isDesktop = vue.computed(() => breakpoints.greaterOrEqual(props.breakpoint).value);
513
- return (_ctx, _cache) => {
514
- return vue.openBlock(), vue.createElementBlock("div", null, [
515
- !isDesktop.value ? (vue.openBlock(), vue.createBlock(_sfc_main$j, {
516
- key: 0,
517
- items: __props.items,
518
- "key-field": __props.keyField,
519
- selectable: __props.selectable,
520
- "selected-items": __props.selectedItems,
521
- "selectable-filter": __props.selectableFilter,
522
- loading: __props.loading,
523
- "loading-items": __props.loadingRows,
524
- onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event)),
525
- onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
526
- }, {
527
- avatar: vue.withCtx(({ item }) => [
528
- vue.renderSlot(_ctx.$slots, "avatar", { item })
529
- ]),
530
- content: vue.withCtx(({ item }) => [
531
- vue.renderSlot(_ctx.$slots, "mobileContent", { item })
532
- ]),
533
- actions: vue.withCtx(({ item }) => [
534
- vue.renderSlot(_ctx.$slots, "mobileActions", { item }, () => [
535
- vue.renderSlot(_ctx.$slots, "actions", { item })
536
- ])
537
- ]),
538
- empty: vue.withCtx(() => [
539
- vue.renderSlot(_ctx.$slots, "empty")
540
- ]),
541
- _: 3
542
- }, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter", "loading", "loading-items"])) : (vue.openBlock(), vue.createBlock(_sfc_main$l, { key: 1 }, {
543
- default: vue.withCtx(() => [
544
- vue.createVNode(_sfc_main$k, {
545
- items: __props.items,
546
- properties: tableProperties.value,
547
- "key-field": __props.keyField,
548
- selectable: __props.selectable,
549
- "selected-items": __props.selectedItems,
550
- "selectable-filter": __props.selectableFilter,
551
- "sort-by": __props.sortBy,
552
- "sort-direction": __props.sortDirection,
553
- loading: __props.loading,
554
- "loading-rows": __props.loadingRows,
555
- onSelect: _cache[2] || (_cache[2] = ($event) => emit("select", $event)),
556
- onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll")),
557
- onSort: _cache[4] || (_cache[4] = (col, dir) => emit("sort", col, dir))
558
- }, vue.createSlots({
559
- empty: vue.withCtx(() => [
560
- vue.renderSlot(_ctx.$slots, "empty")
561
- ]),
562
- _: 2
563
- }, [
564
- vue.renderList(__props.columns, (col) => {
565
- return {
566
- name: `item-${getColumnKey(col)}`,
567
- fn: vue.withCtx(({ item, value }) => [
568
- hasCellSlot(getColumnKey(col)) ? vue.renderSlot(_ctx.$slots, `cell-${getColumnKey(col)}`, {
569
- key: 0,
570
- item,
571
- value: getCellValue(item, getColumnKey(col))
572
- }) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
573
- vue.createTextVNode(vue.toDisplayString(value), 1)
574
- ], 64))
575
- ])
576
- };
577
- }),
578
- hasActionsSlot.value ? {
579
- name: "action",
580
- fn: vue.withCtx(({ item }) => [
581
- vue.renderSlot(_ctx.$slots, "actions", { item })
582
- ]),
583
- key: "0"
584
- } : void 0
585
- ]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter", "sort-by", "sort-direction", "loading", "loading-rows"])
586
- ]),
587
- _: 3
588
- }))
589
- ]);
590
- };
591
- }
592
- });
593
- const _hoisted_1$e = {
594
- key: 0,
595
- class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
596
- };
597
- const _hoisted_2$a = { class: "relative" };
598
- const _hoisted_3$5 = ["disabled", "placeholder"];
599
- const _hoisted_4$3 = ["disabled"];
600
- const _hoisted_5$1 = {
601
- key: 0,
602
- class: "px-4 py-3 text-sm text-gray-500"
603
- };
604
- const _hoisted_6$1 = ["data-index", "onClick"];
605
- const _hoisted_7$1 = { class: "flex-1 dark:text-white" };
606
- const _hoisted_8$1 = { class: "text-xs text-gray-400" };
607
- const _hoisted_9$1 = {
608
- key: 1,
609
- class: "mt-1 text-sm text-red-600"
610
- };
611
- const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
612
- __name: "AutocompleteComponent",
613
- props: {
614
- modelValue: {},
615
- options: {},
616
- placeholder: {},
617
- disabled: { type: Boolean },
618
- label: {},
619
- error: {},
620
- noResultsText: {},
621
- teleport: { type: Boolean, default: true }
622
- },
623
- emits: ["update:modelValue"],
624
- setup(__props, { emit: __emit }) {
625
- const props = __props;
626
- const emit = __emit;
627
- const searchQuery = vue.ref("");
628
- const inputRef = vue.ref(null);
629
- const containerRef = vue.ref(null);
630
- const dropdownRef = vue.ref(null);
631
- const inputWrapperRef = vue.ref(null);
632
- const {
633
- isOpen,
634
- highlightedIndex,
635
- dropdownStyle,
636
- open: openBase,
637
- close: closeBase,
638
- handleKeydown: baseHandleKeydown,
639
- scrollToHighlighted
640
- } = useDropdown.useDropdown(inputWrapperRef, dropdownRef, {
641
- teleport: props.teleport
642
- });
643
- const filteredOptions = vue.computed(() => {
644
- if (!searchQuery.value) {
645
- return props.options;
646
- }
647
- const query = searchQuery.value.toLowerCase();
648
- return props.options.filter(
649
- (option) => option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)
650
- );
651
- });
652
- const selectedLabel = vue.computed(() => {
653
- if (!props.modelValue) return "";
654
- const option = props.options.find((opt) => opt.value === props.modelValue);
655
- return (option == null ? void 0 : option.label) || "";
656
- });
657
- vue.watch(
658
- () => props.modelValue,
659
- () => {
660
- if (!isOpen.value) {
661
- searchQuery.value = selectedLabel.value;
662
- }
663
- },
664
- { immediate: true }
665
- );
666
- const openDropdown = () => {
667
- if (props.disabled) return;
668
- searchQuery.value = "";
669
- highlightedIndex.value = -1;
670
- openBase();
671
- vue.nextTick(() => {
672
- var _a;
673
- (_a = inputRef.value) == null ? void 0 : _a.focus();
674
- });
675
- };
676
- const closeDropdown = () => {
677
- closeBase();
678
- searchQuery.value = selectedLabel.value;
679
- };
680
- const selectOption = (option) => {
681
- emit("update:modelValue", option.value);
682
- searchQuery.value = option.label;
683
- closeDropdown();
684
- };
685
- const clearSelection = () => {
686
- emit("update:modelValue", null);
687
- searchQuery.value = "";
688
- highlightedIndex.value = -1;
689
- vue.nextTick(() => {
690
- var _a;
691
- (_a = inputRef.value) == null ? void 0 : _a.focus();
692
- });
693
- };
694
- const handleKeydown = (event) => {
695
- baseHandleKeydown(event, {
696
- itemCount: filteredOptions.value.length,
697
- onSelect: (index2) => {
698
- if (filteredOptions.value[index2]) {
699
- selectOption(filteredOptions.value[index2]);
700
- }
701
- }
702
- });
703
- if (isOpen.value) {
704
- scrollToHighlighted(dropdownRef.value);
705
- }
706
- };
707
- return (_ctx, _cache) => {
708
- return vue.openBlock(), vue.createElementBlock("div", {
709
- ref_key: "containerRef",
710
- ref: containerRef,
711
- class: "autocomplete-container"
712
- }, [
713
- __props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_1$e, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
714
- vue.createElementVNode("div", _hoisted_2$a, [
715
- vue.createElementVNode("div", {
716
- ref_key: "inputWrapperRef",
717
- ref: inputWrapperRef,
718
- class: vue.normalizeClass([{
719
- "border-red-500": __props.error,
720
- "border-gray-300 dark:border-gray-600": !__props.error && !vue.unref(isOpen),
721
- "border-primary ring-2 ring-primary/20": vue.unref(isOpen),
722
- "cursor-not-allowed opacity-50": __props.disabled
723
- }, "flex items-center gap-2 rounded-lg border bg-white px-3 py-2 transition dark:bg-gray-800"])
724
- }, [
725
- vue.createVNode(vue.unref(vue$1.Icon), {
726
- class: "size-5 text-gray-400",
727
- icon: "lucide:search"
728
- }),
729
- vue.withDirectives(vue.createElementVNode("input", {
730
- ref_key: "inputRef",
731
- ref: inputRef,
732
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
733
- disabled: __props.disabled,
734
- placeholder: __props.placeholder || "Search...",
735
- class: "flex-1 bg-transparent text-sm outline-hidden dark:text-white",
736
- type: "text",
737
- onFocus: openDropdown,
738
- onKeydown: handleKeydown
739
- }, null, 40, _hoisted_3$5), [
740
- [vue.vModelText, searchQuery.value]
741
- ]),
742
- __props.modelValue && !__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
743
- key: 0,
744
- class: "rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700",
745
- type: "button",
746
- onClick: vue.withModifiers(clearSelection, ["stop"])
747
- }, [
748
- vue.createVNode(vue.unref(vue$1.Icon), {
749
- class: "size-4 text-gray-400",
750
- icon: "lucide:x"
751
- })
752
- ])) : vue.createCommentVNode("", true),
753
- vue.createElementVNode("button", {
754
- disabled: __props.disabled,
755
- class: "rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700",
756
- type: "button",
757
- onClick: _cache[1] || (_cache[1] = vue.withModifiers(($event) => vue.unref(isOpen) ? closeDropdown() : openDropdown(), ["stop"]))
758
- }, [
759
- vue.createVNode(vue.unref(vue$1.Icon), {
760
- class: vue.normalizeClass([{ "rotate-180": vue.unref(isOpen) }, "size-4 text-gray-400 transition"]),
761
- icon: "lucide:chevron-down"
762
- }, null, 8, ["class"])
763
- ], 8, _hoisted_4$3)
764
- ], 2),
765
- (vue.openBlock(), vue.createBlock(vue.Teleport, {
766
- to: "body",
767
- disabled: !__props.teleport
768
- }, [
769
- vue.createVNode(vue.Transition, {
770
- "enter-active-class": "transition duration-100 ease-out",
771
- "enter-from-class": "opacity-0 scale-95",
772
- "enter-to-class": "opacity-100 scale-100",
773
- "leave-active-class": "transition duration-75 ease-in",
774
- "leave-from-class": "opacity-100 scale-100",
775
- "leave-to-class": "opacity-0 scale-95"
776
- }, {
777
- default: vue.withCtx(() => [
778
- vue.unref(isOpen) ? (vue.openBlock(), vue.createElementBlock("div", {
779
- key: 0,
780
- ref_key: "dropdownRef",
781
- ref: dropdownRef,
782
- style: vue.normalizeStyle(vue.unref(dropdownStyle)),
783
- class: vue.normalizeClass([
784
- "autocomplete-dropdown z-9999 max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800",
785
- !__props.teleport && "absolute mt-2 w-full"
786
- ])
787
- }, [
788
- filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$1, vue.toDisplayString(__props.noResultsText || "No results found"), 1)) : vue.createCommentVNode("", true),
789
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index2) => {
790
- return vue.openBlock(), vue.createElementBlock("button", {
791
- key: option.value,
792
- class: vue.normalizeClass([{
793
- "bg-gray-100 dark:bg-gray-700": vue.unref(highlightedIndex) === index2,
794
- "bg-primary/10": __props.modelValue === option.value
795
- }, "flex w-full items-center gap-2 px-4 py-2 text-left text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700"]),
796
- "data-index": index2,
797
- type: "button",
798
- onClick: ($event) => selectOption(option)
799
- }, [
800
- __props.modelValue === option.value ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
801
- key: 0,
802
- class: "size-4 text-primary",
803
- icon: "lucide:check"
804
- })) : vue.createCommentVNode("", true),
805
- vue.createElementVNode("span", _hoisted_7$1, vue.toDisplayString(option.label), 1),
806
- vue.createElementVNode("span", _hoisted_8$1, "(" + vue.toDisplayString(option.value) + ")", 1)
807
- ], 10, _hoisted_6$1);
808
- }), 128))
809
- ], 6)) : vue.createCommentVNode("", true)
810
- ]),
811
- _: 1
812
- })
813
- ], 8, ["disabled"]))
814
- ]),
815
- __props.error ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_9$1, vue.toDisplayString(__props.error), 1)) : vue.createCommentVNode("", true)
816
- ], 512);
817
- };
818
- }
819
- });
820
- const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
821
- __name: "TableAction",
822
- props: {
823
- link: {},
824
- icon: {},
825
- color: {}
826
- },
827
- setup(__props) {
828
- const colorClass = vue.computed(() => {
829
- switch (__props.color) {
830
- case "info":
831
- return "border-blue-200 hover:bg-blue-100 dark:border-blue-800 dark:hover:bg-blue-900";
832
- case "warning":
833
- return "border-yellow-200 hover:bg-yellow-100 dark:border-yellow-800 dark:hover:bg-yellow-900";
834
- case "success":
835
- return "border-green-200 hover:bg-green-100 dark:border-green-800 dark:hover:bg-green-900";
836
- case "error":
837
- return "border-red-200 hover:bg-red-100 dark:border-red-800 dark:hover:bg-red-900";
838
- default:
839
- return "border-gray-200 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:hover:bg-gray-800";
840
- }
841
- });
842
- const iconColorClass = vue.computed(() => {
843
- switch (__props.color) {
844
- case "info":
845
- return "text-blue-600 group-hover:text-blue-900 dark:text-blue-400 dark:group-hover:text-blue-100";
846
- case "warning":
847
- return "text-yellow-600 group-hover:text-yellow-900 dark:text-yellow-400 dark:group-hover:text-yellow-100";
848
- case "success":
849
- return "text-green-600 group-hover:text-green-900 dark:text-green-400 dark:group-hover:text-green-100";
850
- case "error":
851
- return "text-red-600 group-hover:text-red-900 dark:text-red-400 dark:group-hover:text-red-100";
852
- default:
853
- return "text-gray-600 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-gray-100";
854
- }
855
- });
856
- const linkComponent = vue.computed(() => {
857
- if (!__props.link) return "button";
858
- try {
859
- const RouterLink = vue.resolveComponent("RouterLink");
860
- if (typeof RouterLink !== "string") {
861
- return RouterLink;
862
- }
863
- } catch {
864
- }
865
- return "a";
866
- });
867
- const linkProps = vue.computed(() => {
868
- if (!__props.link) return {};
869
- if (linkComponent.value === "a") {
870
- return { href: __props.link };
871
- }
872
- return { to: __props.link };
873
- });
874
- return (_ctx, _cache) => {
875
- return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(linkComponent.value), vue.mergeProps(linkProps.value, {
876
- class: [colorClass.value, "group flex size-8 items-center justify-center rounded-lg border"]
877
- }), {
878
- default: vue.withCtx(() => [
879
- vue.createVNode(vue.unref(vue$1.Icon), {
880
- class: vue.normalizeClass([iconColorClass.value, "size-4"]),
881
- icon: __props.icon
882
- }, null, 8, ["class", "icon"])
883
- ]),
884
- _: 1
885
- }, 16, ["class"]);
886
- };
887
- }
888
- });
889
- const _hoisted_1$d = { class: "relative inline-block" };
890
- const _hoisted_2$9 = ["src", "alt"];
891
- const _hoisted_3$4 = { key: 1 };
892
- const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
893
- __name: "Avatar",
894
- props: {
895
- src: {},
896
- alt: {},
897
- name: {},
898
- size: { default: "md" },
899
- status: {},
900
- rounded: { default: "full" }
901
- },
902
- setup(__props) {
903
- const props = __props;
904
- const imageError = vue.ref(false);
905
- const sizeClasses = {
906
- xs: "size-6 text-xs",
907
- sm: "size-8 text-sm",
908
- md: "size-10 text-base",
909
- lg: "size-12 text-lg",
910
- xl: "size-16 text-xl",
911
- "2xl": "size-20 text-2xl"
912
- };
913
- const statusSizes = {
914
- xs: "size-1.5",
915
- sm: "size-2",
916
- md: "size-2.5",
917
- lg: "size-3",
918
- xl: "size-4",
919
- "2xl": "size-5"
920
- };
921
- const statusColors = {
922
- online: "bg-green-500",
923
- offline: "bg-gray-400",
924
- away: "bg-yellow-500",
925
- busy: "bg-red-500"
926
- };
927
- const roundedClasses = {
928
- full: "rounded-full",
929
- lg: "rounded-lg",
930
- md: "rounded-md"
931
- };
932
- const initials = vue.computed(() => {
933
- if (!props.name) return "";
934
- return props.name.split(" ").map((n) => n[0]).slice(0, 2).join("").toUpperCase();
935
- });
936
- const showImage = vue.computed(() => props.src && !imageError.value);
937
- return (_ctx, _cache) => {
938
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
939
- vue.createElementVNode("div", {
940
- class: vue.normalizeClass([
941
- "flex items-center justify-center overflow-hidden bg-gray-200 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-300",
942
- sizeClasses[__props.size],
943
- roundedClasses[__props.rounded]
944
- ])
945
- }, [
946
- showImage.value ? (vue.openBlock(), vue.createElementBlock("img", {
947
- key: 0,
948
- src: __props.src,
949
- alt: __props.alt || __props.name,
950
- class: "size-full object-cover",
951
- onError: _cache[0] || (_cache[0] = ($event) => imageError.value = true)
952
- }, null, 40, _hoisted_2$9)) : initials.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$4, vue.toDisplayString(initials.value), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
953
- key: 2,
954
- icon: "lucide:user",
955
- class: "size-1/2"
956
- }))
957
- ], 2),
958
- __props.status ? (vue.openBlock(), vue.createElementBlock("span", {
959
- key: 0,
960
- class: vue.normalizeClass([
961
- "absolute bottom-0 right-0 block rounded-full ring-2 ring-white dark:ring-gray-900",
962
- statusSizes[__props.size],
963
- statusColors[__props.status]
964
- ])
965
- }, null, 2)) : vue.createCommentVNode("", true)
966
- ]);
967
- };
968
- }
969
- });
970
- const _hoisted_1$c = ["aria-selected", "disabled", "onClick"];
971
- const _hoisted_2$8 = { class: "mt-4" };
972
- const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
973
- __name: "Tabs",
974
- props: {
975
- tabs: {},
976
- modelValue: {},
977
- variant: { default: "underline" }
978
- },
979
- emits: ["update:modelValue"],
980
- setup(__props, { emit: __emit }) {
981
- const props = __props;
982
- const emit = __emit;
983
- const activeTab = vue.computed({
984
- get: () => {
985
- var _a;
986
- return props.modelValue || ((_a = props.tabs[0]) == null ? void 0 : _a.key);
987
- },
988
- set: (value) => emit("update:modelValue", value)
989
- });
990
- const selectTab = (tab) => {
991
- if (tab.disabled) return;
992
- activeTab.value = tab.key;
993
- };
994
- const variantClasses = {
995
- underline: {
996
- container: "border-b border-gray-200 dark:border-gray-700",
997
- tab: "border-b-2 -mb-px px-4 py-2",
998
- active: "border-primary text-primary dark:text-primary",
999
- inactive: "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300"
1000
- },
1001
- pills: {
1002
- container: "gap-2",
1003
- tab: "px-4 py-2 rounded-lg",
1004
- active: "bg-primary text-white",
1005
- inactive: "text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"
1006
- },
1007
- boxed: {
1008
- container: "bg-gray-100 dark:bg-gray-800 p-1 rounded-lg gap-1",
1009
- tab: "px-4 py-2 rounded-md",
1010
- active: "bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow-sm",
1011
- inactive: "text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
1012
- }
1013
- };
1014
- vue.provide("activeTab", activeTab);
1015
- return (_ctx, _cache) => {
1016
- return vue.openBlock(), vue.createElementBlock("div", null, [
1017
- vue.createElementVNode("div", {
1018
- class: vue.normalizeClass([
1019
- "flex",
1020
- variantClasses[__props.variant].container
1021
- ]),
1022
- role: "tablist"
1023
- }, [
1024
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.tabs, (tab) => {
1025
- return vue.openBlock(), vue.createElementBlock("button", {
1026
- key: tab.key,
1027
- type: "button",
1028
- role: "tab",
1029
- "aria-selected": activeTab.value === tab.key,
1030
- disabled: tab.disabled,
1031
- class: vue.normalizeClass([
1032
- "text-sm font-medium transition-colors focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
1033
- variantClasses[__props.variant].tab,
1034
- activeTab.value === tab.key ? variantClasses[__props.variant].active : variantClasses[__props.variant].inactive
1035
- ]),
1036
- onClick: ($event) => selectTab(tab)
1037
- }, vue.toDisplayString(tab.label), 11, _hoisted_1$c);
1038
- }), 128))
1039
- ], 2),
1040
- vue.createElementVNode("div", _hoisted_2$8, [
1041
- vue.renderSlot(_ctx.$slots, "default", { activeTab: activeTab.value })
1042
- ])
1043
- ]);
1044
- };
1045
- }
1046
- });
1047
- const _hoisted_1$b = { role: "tabpanel" };
1048
- const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
1049
- __name: "TabPanel",
1050
- props: {
1051
- value: {}
1052
- },
1053
- setup(__props) {
1054
- const props = __props;
1055
- const activeTab = vue.inject("activeTab");
1056
- const isActive = vue.computed(() => (activeTab == null ? void 0 : activeTab.value) === props.value);
1057
- return (_ctx, _cache) => {
1058
- return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
1059
- vue.renderSlot(_ctx.$slots, "default")
1060
- ], 512)), [
1061
- [vue.vShow, isActive.value]
1062
- ]);
1063
- };
1064
- }
1065
- });
1066
- const _hoisted_1$a = {
1067
- key: 2,
1068
- class: "text-sm font-semibold"
1069
- };
1070
- const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
1071
- __name: "Stepper",
1072
- props: {
1073
- steps: {},
1074
- modelValue: {},
1075
- orientation: { default: "horizontal" }
1076
- },
1077
- emits: ["update:modelValue"],
1078
- setup(__props) {
1079
- const props = __props;
1080
- const getCurrentStepIndex = () => {
1081
- if (props.modelValue === void 0) return 0;
1082
- const index2 = props.steps.findIndex((s) => s.key === props.modelValue);
1083
- return index2 >= 0 ? index2 : 0;
1084
- };
1085
- const isStepComplete = (index2) => index2 < getCurrentStepIndex();
1086
- const isStepActive = (index2) => index2 === getCurrentStepIndex();
1087
- const isStepPending = (index2) => index2 > getCurrentStepIndex();
1088
- return (_ctx, _cache) => {
1089
- return vue.openBlock(), vue.createElementBlock("div", {
1090
- class: vue.normalizeClass([
1091
- "w-full",
1092
- __props.orientation === "vertical" ? "flex flex-col" : ""
1093
- ])
1094
- }, [
1095
- vue.createElementVNode("div", {
1096
- class: vue.normalizeClass([
1097
- __props.orientation === "horizontal" ? "relative flex items-start justify-between" : "relative flex flex-col gap-4"
1098
- ])
1099
- }, [
1100
- __props.orientation === "horizontal" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
1101
- _cache[0] || (_cache[0] = vue.createElementVNode("div", {
1102
- class: "absolute left-0 top-6 h-0.5 w-full bg-gray-200 dark:bg-gray-700",
1103
- "aria-hidden": "true"
1104
- }, null, -1)),
1105
- vue.createElementVNode("div", {
1106
- class: "absolute left-0 top-6 h-0.5 bg-primary transition-all duration-500 ease-in-out",
1107
- style: vue.normalizeStyle({
1108
- width: `${getCurrentStepIndex() / (__props.steps.length - 1) * 100}%`
1109
- }),
1110
- "aria-hidden": "true"
1111
- }, null, 4)
1112
- ], 64)) : vue.createCommentVNode("", true),
1113
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.steps, (step, index2) => {
1114
- return vue.openBlock(), vue.createElementBlock("div", {
1115
- key: step.key,
1116
- class: vue.normalizeClass([
1117
- "relative",
1118
- __props.orientation === "horizontal" ? "flex flex-1 flex-col items-center" : "flex items-start gap-4"
1119
- ])
1120
- }, [
1121
- __props.orientation === "vertical" && index2 < __props.steps.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1122
- key: 0,
1123
- class: vue.normalizeClass(["absolute left-6 top-12 h-full w-0.5 -translate-x-1/2", isStepComplete(index2) ? "bg-primary" : "bg-gray-200 dark:bg-gray-700"])
1124
- }, null, 2)) : vue.createCommentVNode("", true),
1125
- vue.createElementVNode("div", {
1126
- class: vue.normalizeClass(["relative z-10 flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300", {
1127
- "border-primary bg-primary text-white shadow-lg": isStepActive(index2) || isStepComplete(index2),
1128
- "border-gray-300 bg-white text-gray-400 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-500": isStepPending(index2)
1129
- }])
1130
- }, [
1131
- isStepComplete(index2) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1132
- key: 0,
1133
- icon: "lucide:check",
1134
- class: "size-6"
1135
- })) : step.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1136
- key: 1,
1137
- icon: step.icon,
1138
- class: "size-6"
1139
- }, null, 8, ["icon"])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$a, vue.toDisplayString(index2 + 1), 1))
1140
- ], 2),
1141
- vue.createElementVNode("div", {
1142
- class: vue.normalizeClass([
1143
- __props.orientation === "horizontal" ? "mt-4 flex flex-col items-center text-center" : "flex flex-col pt-2"
1144
- ])
1145
- }, [
1146
- vue.createElementVNode("p", {
1147
- class: vue.normalizeClass(["text-sm font-semibold transition-colors", {
1148
- "text-primary dark:text-primary": isStepActive(index2) || isStepComplete(index2),
1149
- "text-gray-500 dark:text-gray-400": isStepPending(index2)
1150
- }])
1151
- }, vue.toDisplayString(step.title), 3),
1152
- step.description ? (vue.openBlock(), vue.createElementBlock("p", {
1153
- key: 0,
1154
- class: vue.normalizeClass(["mt-1 text-xs", {
1155
- "text-gray-600 dark:text-gray-300": isStepActive(index2),
1156
- "text-gray-500 dark:text-gray-400": !isStepActive(index2)
1157
- }])
1158
- }, vue.toDisplayString(step.description), 3)) : vue.createCommentVNode("", true)
1159
- ], 2)
1160
- ], 2);
1161
- }), 128))
1162
- ], 2)
1163
- ], 2);
1164
- };
1165
- }
1166
- });
1167
- const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
1168
- __name: "CollapsibleCard",
1169
- props: {
1170
- title: {},
1171
- description: {},
1172
- defaultExpanded: { type: Boolean, default: true },
1173
- headerClass: { default: "w-full text-left" },
1174
- contentClass: { default: "" }
1175
- },
1176
- setup(__props) {
1177
- const props = __props;
1178
- const slots = vue.useSlots();
1179
- const isExpanded = vue.ref(props.defaultExpanded);
1180
- const toggle = () => {
1181
- isExpanded.value = !isExpanded.value;
1182
- };
1183
- const hasCustomHeader = () => !!slots.header;
1184
- return (_ctx, _cache) => {
1185
- return vue.openBlock(), vue.createBlock(_sfc_main$l, null, vue.createSlots({
1186
- default: vue.withCtx(() => [
1187
- vue.createVNode(vue.Transition, {
1188
- "enter-active-class": "transition-all duration-200 ease-out",
1189
- "enter-from-class": "opacity-0 max-h-0",
1190
- "enter-to-class": "opacity-100 max-h-[2000px]",
1191
- "leave-active-class": "transition-all duration-200 ease-in",
1192
- "leave-from-class": "opacity-100 max-h-[2000px]",
1193
- "leave-to-class": "opacity-0 max-h-0"
1194
- }, {
1195
- default: vue.withCtx(() => [
1196
- vue.withDirectives(vue.createElementVNode("div", {
1197
- class: vue.normalizeClass(["overflow-hidden", __props.contentClass])
1198
- }, [
1199
- vue.createElementVNode("div", {
1200
- class: vue.normalizeClass(hasCustomHeader() ? "" : "space-y-4 p-6")
1201
- }, [
1202
- vue.renderSlot(_ctx.$slots, "default")
1203
- ], 2)
1204
- ], 2), [
1205
- [vue.vShow, isExpanded.value]
1206
- ])
1207
- ]),
1208
- _: 3
1209
- })
1210
- ]),
1211
- _: 2
1212
- }, [
1213
- hasCustomHeader() ? {
1214
- name: "header",
1215
- fn: vue.withCtx(() => [
1216
- vue.createElementVNode("button", {
1217
- type: "button",
1218
- class: vue.normalizeClass(__props.headerClass),
1219
- onClick: toggle
1220
- }, [
1221
- vue.renderSlot(_ctx.$slots, "header", {
1222
- expanded: isExpanded.value,
1223
- toggle
1224
- })
1225
- ], 2)
1226
- ]),
1227
- key: "0"
1228
- } : __props.title || __props.description ? {
1229
- name: "title",
1230
- fn: vue.withCtx(() => [
1231
- vue.createTextVNode(vue.toDisplayString(__props.title), 1)
1232
- ]),
1233
- key: "1"
1234
- } : void 0,
1235
- !hasCustomHeader() && __props.description ? {
1236
- name: "description",
1237
- fn: vue.withCtx(() => [
1238
- vue.createTextVNode(vue.toDisplayString(__props.description), 1)
1239
- ]),
1240
- key: "2"
1241
- } : void 0,
1242
- !hasCustomHeader() ? {
1243
- name: "actions",
1244
- fn: vue.withCtx(() => [
1245
- vue.renderSlot(_ctx.$slots, "actions"),
1246
- vue.createElementVNode("button", {
1247
- type: "button",
1248
- class: "rounded-lg p-1.5 text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800",
1249
- onClick: toggle
1250
- }, [
1251
- vue.createVNode(vue.unref(vue$1.Icon), {
1252
- icon: isExpanded.value ? "lucide:chevron-up" : "lucide:chevron-down",
1253
- class: "size-5"
1254
- }, null, 8, ["icon"])
1255
- ])
1256
- ]),
1257
- key: "3"
1258
- } : void 0
1259
- ]), 1024);
1260
- };
1261
- }
1262
- });
1263
- const _hoisted_1$9 = ["aria-describedby"];
1264
- const _hoisted_2$7 = ["id"];
1265
- const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
1266
- __name: "Tooltip",
1267
- props: {
1268
- content: {},
1269
- position: { default: "top" },
1270
- delay: { default: 0 },
1271
- disabled: { type: Boolean, default: false },
1272
- id: {}
1273
- },
1274
- setup(__props) {
1275
- const props = __props;
1276
- const { id: tooltipId } = useId.useId({ prefix: "tooltip", id: props.id });
1277
- const isVisible = vue.ref(false);
1278
- let timeoutId = null;
1279
- const show = () => {
1280
- if (props.disabled) return;
1281
- if (props.delay > 0) {
1282
- timeoutId = setTimeout(() => {
1283
- isVisible.value = true;
1284
- }, props.delay);
1285
- } else {
1286
- isVisible.value = true;
1287
- }
1288
- };
1289
- const hide = () => {
1290
- if (timeoutId) {
1291
- clearTimeout(timeoutId);
1292
- timeoutId = null;
1293
- }
1294
- isVisible.value = false;
1295
- };
1296
- const positionClasses = vue.computed(() => {
1297
- const base = "absolute z-50 px-2 py-1 text-xs font-medium text-white bg-gray-900 rounded shadow-lg whitespace-nowrap dark:bg-gray-700";
1298
- const arrow = "after:absolute after:border-4 after:border-transparent";
1299
- switch (props.position) {
1300
- case "top":
1301
- return `${base} ${arrow} bottom-full left-1/2 -translate-x-1/2 mb-2 after:top-full after:left-1/2 after:-translate-x-1/2 after:border-t-gray-900 dark:after:border-t-gray-700`;
1302
- case "bottom":
1303
- return `${base} ${arrow} top-full left-1/2 -translate-x-1/2 mt-2 after:bottom-full after:left-1/2 after:-translate-x-1/2 after:border-b-gray-900 dark:after:border-b-gray-700`;
1304
- case "left":
1305
- return `${base} ${arrow} right-full top-1/2 -translate-y-1/2 mr-2 after:left-full after:top-1/2 after:-translate-y-1/2 after:border-l-gray-900 dark:after:border-l-gray-700`;
1306
- case "right":
1307
- return `${base} ${arrow} left-full top-1/2 -translate-y-1/2 ml-2 after:right-full after:top-1/2 after:-translate-y-1/2 after:border-r-gray-900 dark:after:border-r-gray-700`;
1308
- default:
1309
- return base;
1310
- }
1311
- });
1312
- return (_ctx, _cache) => {
1313
- return vue.openBlock(), vue.createElementBlock("div", {
1314
- class: "relative inline-block",
1315
- "aria-describedby": __props.content && !__props.disabled ? vue.unref(tooltipId) : void 0,
1316
- onMouseenter: show,
1317
- onMouseleave: hide,
1318
- onFocus: show,
1319
- onBlur: hide
1320
- }, [
1321
- vue.renderSlot(_ctx.$slots, "default"),
1322
- vue.createVNode(vue.Transition, {
1323
- "enter-active-class": "transition duration-150 ease-out",
1324
- "enter-from-class": "opacity-0 scale-95",
1325
- "enter-to-class": "opacity-100 scale-100",
1326
- "leave-active-class": "transition duration-100 ease-in",
1327
- "leave-from-class": "opacity-100 scale-100",
1328
- "leave-to-class": "opacity-0 scale-95"
1329
- }, {
1330
- default: vue.withCtx(() => [
1331
- isVisible.value && __props.content ? (vue.openBlock(), vue.createElementBlock("div", {
1332
- key: 0,
1333
- id: vue.unref(tooltipId),
1334
- class: vue.normalizeClass(positionClasses.value),
1335
- role: "tooltip"
1336
- }, vue.toDisplayString(__props.content), 11, _hoisted_2$7)) : vue.createCommentVNode("", true)
1337
- ]),
1338
- _: 1
1339
- })
1340
- ], 40, _hoisted_1$9);
1341
- };
1342
- }
1343
- });
1344
- const _hoisted_1$8 = ["id", "aria-expanded", "aria-controls"];
1345
- const _hoisted_2$6 = ["id", "aria-labelledby"];
1346
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
1347
- __name: "Popover",
1348
- props: {
1349
- position: { default: "bottom" },
1350
- hover: { type: Boolean, default: false },
1351
- teleport: { type: Boolean, default: true },
1352
- width: { default: "auto" },
1353
- id: {}
1354
- },
1355
- setup(__props) {
1356
- const props = __props;
1357
- const { related } = useId.useId({ prefix: "popover", id: props.id });
1358
- const triggerId = vue.computed(() => related("trigger"));
1359
- const popoverId = vue.computed(() => related("content"));
1360
- const triggerRef = vue.ref();
1361
- const popoverRef = vue.ref();
1362
- const { isOpen, dropdownStyle, toggle, close, open } = useDropdown.useDropdown(triggerRef, popoverRef, {
1363
- teleport: props.teleport,
1364
- gap: 8
1365
- });
1366
- const handleTrigger = () => {
1367
- if (!props.hover) {
1368
- toggle();
1369
- }
1370
- };
1371
- const handleMouseEnter = () => {
1372
- if (props.hover) {
1373
- open();
1374
- }
1375
- };
1376
- const handleMouseLeave = () => {
1377
- if (props.hover) {
1378
- close();
1379
- }
1380
- };
1381
- const widthClasses = {
1382
- auto: "w-auto min-w-48",
1383
- sm: "w-48",
1384
- md: "w-64",
1385
- lg: "w-80"
1386
- };
1387
- return (_ctx, _cache) => {
1388
- return vue.openBlock(), vue.createElementBlock("div", {
1389
- class: "relative inline-block",
1390
- onMouseenter: handleMouseEnter,
1391
- onMouseleave: handleMouseLeave
1392
- }, [
1393
- vue.createElementVNode("div", {
1394
- ref_key: "triggerRef",
1395
- ref: triggerRef,
1396
- id: triggerId.value,
1397
- "aria-expanded": vue.unref(isOpen),
1398
- "aria-controls": popoverId.value,
1399
- onClick: handleTrigger
1400
- }, [
1401
- vue.renderSlot(_ctx.$slots, "trigger")
1402
- ], 8, _hoisted_1$8),
1403
- (vue.openBlock(), vue.createBlock(vue.Teleport, {
1404
- to: "body",
1405
- disabled: !__props.teleport
1406
- }, [
1407
- vue.createVNode(vue.Transition, {
1408
- "enter-active-class": "transition duration-150 ease-out",
1409
- "enter-from-class": "opacity-0 scale-95",
1410
- "enter-to-class": "opacity-100 scale-100",
1411
- "leave-active-class": "transition duration-100 ease-in",
1412
- "leave-from-class": "opacity-100 scale-100",
1413
- "leave-to-class": "opacity-0 scale-95"
1414
- }, {
1415
- default: vue.withCtx(() => [
1416
- vue.unref(isOpen) ? (vue.openBlock(), vue.createElementBlock("div", {
1417
- key: 0,
1418
- id: popoverId.value,
1419
- ref_key: "popoverRef",
1420
- ref: popoverRef,
1421
- role: "dialog",
1422
- "aria-labelledby": triggerId.value,
1423
- style: vue.normalizeStyle(vue.unref(dropdownStyle)),
1424
- class: vue.normalizeClass([
1425
- "z-9999 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800",
1426
- widthClasses[__props.width]
1427
- ])
1428
- }, [
1429
- vue.renderSlot(_ctx.$slots, "default", { close: vue.unref(close) })
1430
- ], 14, _hoisted_2$6)) : vue.createCommentVNode("", true)
1431
- ]),
1432
- _: 3
1433
- })
1434
- ], 8, ["disabled"]))
1435
- ], 32);
1436
- };
1437
- }
1438
- });
1439
- const _hoisted_1$7 = {
1440
- key: 0,
1441
- class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700"
1442
- };
1443
- const _hoisted_2$5 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
1444
- const _hoisted_3$3 = { class: "flex-1 overflow-y-auto p-4" };
1445
- const _hoisted_4$2 = {
1446
- key: 1,
1447
- class: "px-4 py-3 border-t border-gray-200 dark:border-gray-700"
1448
- };
1449
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1450
- __name: "Drawer",
1451
- props: {
1452
- modelValue: { type: Boolean },
1453
- position: { default: "right" },
1454
- size: { default: "md" },
1455
- title: {},
1456
- showClose: { type: Boolean, default: true },
1457
- closeOnOverlay: { type: Boolean, default: true },
1458
- closeOnEscape: { type: Boolean, default: true },
1459
- overlay: { type: Boolean, default: true }
1460
- },
1461
- emits: ["update:modelValue"],
1462
- setup(__props, { emit: __emit }) {
1463
- const props = __props;
1464
- const emit = __emit;
1465
- const close = () => {
1466
- emit("update:modelValue", false);
1467
- };
1468
- const handleOverlayClick = () => {
1469
- if (props.closeOnOverlay) {
1470
- close();
1471
- }
1472
- };
1473
- const handleKeydown = (e) => {
1474
- if (e.key === "Escape" && props.closeOnEscape && props.modelValue) {
1475
- close();
1476
- }
1477
- };
1478
- vue.onMounted(() => {
1479
- document.addEventListener("keydown", handleKeydown);
1480
- });
1481
- vue.onUnmounted(() => {
1482
- document.removeEventListener("keydown", handleKeydown);
1483
- });
1484
- vue.watch(
1485
- () => props.modelValue,
1486
- (isOpen) => {
1487
- if (isOpen) {
1488
- document.body.style.overflow = "hidden";
1489
- } else {
1490
- document.body.style.overflow = "";
1491
- }
1492
- }
1493
- );
1494
- const sizeClasses = vue.computed(() => {
1495
- const isHorizontal = props.position === "left" || props.position === "right";
1496
- const sizes = {
1497
- sm: isHorizontal ? "w-64" : "h-32",
1498
- md: isHorizontal ? "w-80" : "h-48",
1499
- lg: isHorizontal ? "w-96" : "h-64",
1500
- xl: isHorizontal ? "w-lg" : "h-96",
1501
- full: isHorizontal ? "w-screen" : "h-screen"
1502
- };
1503
- return sizes[props.size];
1504
- });
1505
- const positionClasses = vue.computed(() => {
1506
- const base = "fixed bg-white dark:bg-gray-800 shadow-xl flex flex-col";
1507
- switch (props.position) {
1508
- case "left":
1509
- return `${base} inset-y-0 left-0 ${sizeClasses.value}`;
1510
- case "right":
1511
- return `${base} inset-y-0 right-0 ${sizeClasses.value}`;
1512
- case "top":
1513
- return `${base} inset-x-0 top-0 ${sizeClasses.value}`;
1514
- case "bottom":
1515
- return `${base} inset-x-0 bottom-0 ${sizeClasses.value}`;
1516
- default:
1517
- return base;
1518
- }
1519
- });
1520
- const transformClasses = vue.computed(() => {
1521
- switch (props.position) {
1522
- case "left":
1523
- return { enter: "-translate-x-full", leave: "-translate-x-full" };
1524
- case "right":
1525
- return { enter: "translate-x-full", leave: "translate-x-full" };
1526
- case "top":
1527
- return { enter: "-translate-y-full", leave: "-translate-y-full" };
1528
- case "bottom":
1529
- return { enter: "translate-y-full", leave: "translate-y-full" };
1530
- default:
1531
- return { enter: "", leave: "" };
1532
- }
1533
- });
1534
- return (_ctx, _cache) => {
1535
- return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
1536
- vue.createVNode(vue.Transition, {
1537
- "enter-active-class": "transition-opacity duration-300 ease-out",
1538
- "enter-from-class": "opacity-0",
1539
- "enter-to-class": "opacity-100",
1540
- "leave-active-class": "transition-opacity duration-200 ease-in",
1541
- "leave-from-class": "opacity-100",
1542
- "leave-to-class": "opacity-0"
1543
- }, {
1544
- default: vue.withCtx(() => [
1545
- __props.modelValue && __props.overlay ? (vue.openBlock(), vue.createElementBlock("div", {
1546
- key: 0,
1547
- class: "fixed inset-0 z-40 bg-black/50",
1548
- onClick: handleOverlayClick
1549
- })) : vue.createCommentVNode("", true)
1550
- ]),
1551
- _: 1
1552
- }),
1553
- vue.createVNode(vue.Transition, {
1554
- "enter-active-class": "transition-transform duration-300 ease-out",
1555
- "enter-from-class": transformClasses.value.enter,
1556
- "enter-to-class": "translate-x-0 translate-y-0",
1557
- "leave-active-class": "transition-transform duration-200 ease-in",
1558
- "leave-from-class": "translate-x-0 translate-y-0",
1559
- "leave-to-class": transformClasses.value.leave
1560
- }, {
1561
- default: vue.withCtx(() => [
1562
- __props.modelValue ? (vue.openBlock(), vue.createElementBlock("div", {
1563
- key: 0,
1564
- class: vue.normalizeClass([positionClasses.value, "z-50"]),
1565
- role: "dialog",
1566
- "aria-modal": "true"
1567
- }, [
1568
- __props.title || __props.showClose || _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
1569
- vue.renderSlot(_ctx.$slots, "header", {}, () => [
1570
- vue.createElementVNode("h2", _hoisted_2$5, vue.toDisplayString(__props.title), 1)
1571
- ]),
1572
- __props.showClose ? (vue.openBlock(), vue.createElementBlock("button", {
1573
- key: 0,
1574
- type: "button",
1575
- class: "p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",
1576
- onClick: close
1577
- }, [
1578
- vue.createVNode(vue.unref(vue$1.Icon), {
1579
- icon: "heroicons:x-mark",
1580
- class: "size-5"
1581
- })
1582
- ])) : vue.createCommentVNode("", true)
1583
- ])) : vue.createCommentVNode("", true),
1584
- vue.createElementVNode("div", _hoisted_3$3, [
1585
- vue.renderSlot(_ctx.$slots, "default")
1586
- ]),
1587
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [
1588
- vue.renderSlot(_ctx.$slots, "footer")
1589
- ])) : vue.createCommentVNode("", true)
1590
- ], 2)) : vue.createCommentVNode("", true)
1591
- ]),
1592
- _: 3
1593
- }, 8, ["enter-from-class", "leave-to-class"])
1594
- ]);
1595
- };
1596
- }
1597
- });
1598
- const _hoisted_1$6 = { "aria-label": "Breadcrumb" };
1599
- const _hoisted_2$4 = { class: "flex items-center flex-wrap gap-1 text-sm" };
1600
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
1601
- __name: "Breadcrumb",
1602
- props: {
1603
- items: {},
1604
- separator: { default: "heroicons:chevron-right" },
1605
- homeIcon: { default: "heroicons:home" },
1606
- showHomeIcon: { type: Boolean, default: true }
1607
- },
1608
- emits: ["click"],
1609
- setup(__props) {
1610
- return (_ctx, _cache) => {
1611
- return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$6, [
1612
- vue.createElementVNode("ol", _hoisted_2$4, [
1613
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
1614
- return vue.openBlock(), vue.createElementBlock("li", {
1615
- key: index2,
1616
- class: "flex items-center"
1617
- }, [
1618
- index2 > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1619
- key: 0,
1620
- icon: __props.separator,
1621
- class: "size-4 mx-2 text-gray-400 dark:text-gray-500 shrink-0"
1622
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
1623
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.to ? "router-link" : item.href ? "a" : "span"), {
1624
- to: item.to,
1625
- href: item.href,
1626
- class: vue.normalizeClass([
1627
- "flex items-center gap-1.5 transition-colors",
1628
- index2 === __props.items.length - 1 ? "text-gray-900 dark:text-white font-medium cursor-default" : "text-gray-500 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400"
1629
- ]),
1630
- "aria-current": index2 === __props.items.length - 1 ? "page" : void 0,
1631
- onClick: ($event) => _ctx.$emit("click", item, index2)
1632
- }, {
1633
- default: vue.withCtx(() => [
1634
- index2 === 0 && __props.showHomeIcon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1635
- key: 0,
1636
- icon: item.icon || __props.homeIcon,
1637
- class: "size-4"
1638
- }, null, 8, ["icon"])) : item.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1639
- key: 1,
1640
- icon: item.icon,
1641
- class: "size-4"
1642
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
1643
- vue.createElementVNode("span", null, vue.toDisplayString(item.label), 1)
1644
- ]),
1645
- _: 2
1646
- }, 1032, ["to", "href", "class", "aria-current", "onClick"]))
1647
- ]);
1648
- }), 128))
1649
- ])
1650
- ]);
1651
- };
1652
- }
1653
- });
1654
- const _hoisted_1$5 = { class: "divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden" };
1655
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
1656
- __name: "Accordion",
1657
- props: {
1658
- mode: { default: "single" },
1659
- defaultOpen: { default: () => [] }
1660
- },
1661
- setup(__props) {
1662
- const props = __props;
1663
- const openItems = vue.ref(new Set(props.defaultOpen));
1664
- const toggle = (key) => {
1665
- if (openItems.value.has(key)) {
1666
- openItems.value.delete(key);
1667
- } else {
1668
- if (props.mode === "single") {
1669
- openItems.value.clear();
1670
- }
1671
- openItems.value.add(key);
1672
- }
1673
- openItems.value = new Set(openItems.value);
1674
- };
1675
- const isOpen = (key) => openItems.value.has(key);
1676
- vue.provide("accordion", {
1677
- toggle,
1678
- isOpen
1679
- });
1680
- return (_ctx, _cache) => {
1681
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
1682
- vue.renderSlot(_ctx.$slots, "default")
1683
- ]);
1684
- };
1685
- }
1686
- });
1687
- const _hoisted_1$4 = ["id", "disabled", "aria-expanded", "aria-controls"];
1688
- const _hoisted_2$3 = { class: "flex items-center gap-2 font-medium" };
1689
- const _hoisted_3$2 = ["id", "aria-labelledby"];
1690
- const _hoisted_4$1 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
1691
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1692
- __name: "AccordionItem",
1693
- props: {
1694
- itemKey: {},
1695
- title: {},
1696
- icon: {},
1697
- disabled: { type: Boolean },
1698
- id: {}
1699
- },
1700
- setup(__props) {
1701
- const props = __props;
1702
- const { related } = useId.useId({ prefix: "accordion", id: props.id });
1703
- const headerId = vue.computed(() => related("header"));
1704
- const panelId = vue.computed(() => related("panel"));
1705
- const accordion = vue.inject("accordion");
1706
- const isOpen = vue.computed(() => (accordion == null ? void 0 : accordion.isOpen(props.itemKey)) ?? false);
1707
- const toggle = () => {
1708
- if (!props.disabled) {
1709
- accordion == null ? void 0 : accordion.toggle(props.itemKey);
1710
- }
1711
- };
1712
- return (_ctx, _cache) => {
1713
- return vue.openBlock(), vue.createElementBlock("div", null, [
1714
- vue.createElementVNode("button", {
1715
- id: headerId.value,
1716
- type: "button",
1717
- class: vue.normalizeClass(["flex items-center justify-between w-full px-4 py-3 text-left transition-colors", [
1718
- __props.disabled ? "bg-gray-50 text-gray-400 cursor-not-allowed dark:bg-gray-800 dark:text-gray-500" : "bg-white hover:bg-gray-50 text-gray-900 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-white"
1719
- ]]),
1720
- disabled: __props.disabled,
1721
- "aria-expanded": isOpen.value,
1722
- "aria-controls": panelId.value,
1723
- onClick: toggle
1724
- }, [
1725
- vue.createElementVNode("span", _hoisted_2$3, [
1726
- __props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1727
- key: 0,
1728
- icon: __props.icon,
1729
- class: "size-5",
1730
- "aria-hidden": "true"
1731
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
1732
- vue.createTextVNode(" " + vue.toDisplayString(__props.title), 1)
1733
- ]),
1734
- vue.createVNode(vue.unref(vue$1.Icon), {
1735
- icon: "heroicons:chevron-down",
1736
- class: vue.normalizeClass(["size-5 transition-transform duration-200", { "rotate-180": isOpen.value }]),
1737
- "aria-hidden": "true"
1738
- }, null, 8, ["class"])
1739
- ], 10, _hoisted_1$4),
1740
- vue.createVNode(vue.Transition, {
1741
- "enter-active-class": "transition-all duration-200 ease-out",
1742
- "enter-from-class": "opacity-0 max-h-0",
1743
- "enter-to-class": "opacity-100 max-h-screen",
1744
- "leave-active-class": "transition-all duration-150 ease-in",
1745
- "leave-from-class": "opacity-100 max-h-screen",
1746
- "leave-to-class": "opacity-0 max-h-0"
1747
- }, {
1748
- default: vue.withCtx(() => [
1749
- vue.withDirectives(vue.createElementVNode("div", {
1750
- id: panelId.value,
1751
- role: "region",
1752
- "aria-labelledby": headerId.value,
1753
- class: "overflow-hidden"
1754
- }, [
1755
- vue.createElementVNode("div", _hoisted_4$1, [
1756
- vue.renderSlot(_ctx.$slots, "default")
1757
- ])
1758
- ], 8, _hoisted_3$2), [
1759
- [vue.vShow, isOpen.value]
1760
- ])
1761
- ]),
1762
- _: 3
1763
- })
1764
- ]);
1765
- };
1766
- }
1767
- });
1768
- const _hoisted_1$3 = {
1769
- key: 0,
1770
- class: "relative"
1771
- };
1772
- const _hoisted_2$2 = { class: "flex items-start gap-4" };
1773
- const _hoisted_3$1 = { class: "flex-1 min-w-0 pt-0.5" };
1774
- const _hoisted_4 = { class: "flex items-center justify-between gap-2" };
1775
- const _hoisted_5 = { class: "text-sm font-medium text-gray-900 dark:text-white" };
1776
- const _hoisted_6 = {
1777
- key: 0,
1778
- class: "text-xs text-gray-500 dark:text-gray-400 whitespace-nowrap"
1779
- };
1780
- const _hoisted_7 = {
1781
- key: 0,
1782
- class: "mt-1 text-sm text-gray-600 dark:text-gray-400"
1783
- };
1784
- const _hoisted_8 = {
1785
- key: 1,
1786
- class: "flex items-start overflow-x-auto pb-4"
1787
- };
1788
- const _hoisted_9 = { class: "flex items-center w-full" };
1789
- const _hoisted_10 = { class: "mt-2 text-center max-w-[120px]" };
1790
- const _hoisted_11 = { class: "text-xs font-medium text-gray-900 dark:text-white" };
1791
- const _hoisted_12 = {
1792
- key: 0,
1793
- class: "text-xs text-gray-500 dark:text-gray-400"
1794
- };
1795
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1796
- __name: "Timeline",
1797
- props: {
1798
- items: {},
1799
- orientation: { default: "vertical" }
1800
- },
1801
- setup(__props) {
1802
- const getStatusClasses = (status) => {
1803
- switch (status) {
1804
- case "completed":
1805
- return {
1806
- dot: "bg-green-500",
1807
- line: "bg-green-500",
1808
- icon: "text-white"
1809
- };
1810
- case "current":
1811
- return {
1812
- dot: "bg-primary-500 ring-4 ring-primary-100 dark:ring-primary-900",
1813
- line: "bg-gray-200 dark:bg-gray-700",
1814
- icon: "text-white"
1815
- };
1816
- case "error":
1817
- return {
1818
- dot: "bg-red-500",
1819
- line: "bg-red-500",
1820
- icon: "text-white"
1821
- };
1822
- default:
1823
- return {
1824
- dot: "bg-gray-300 dark:bg-gray-600",
1825
- line: "bg-gray-200 dark:bg-gray-700",
1826
- icon: "text-gray-500 dark:text-gray-400"
1827
- };
1828
- }
1829
- };
1830
- const getDefaultIcon = (status) => {
1831
- switch (status) {
1832
- case "completed":
1833
- return "heroicons:check";
1834
- case "error":
1835
- return "heroicons:x-mark";
1836
- default:
1837
- return "";
1838
- }
1839
- };
1840
- return (_ctx, _cache) => {
1841
- return __props.orientation === "vertical" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
1842
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
1843
- return vue.openBlock(), vue.createElementBlock("div", {
1844
- key: item.key,
1845
- class: "relative pb-8 last:pb-0"
1846
- }, [
1847
- index2 < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1848
- key: 0,
1849
- class: vue.normalizeClass(["absolute left-4 top-8 w-0.5 h-full -ml-px", getStatusClasses(item.status).line])
1850
- }, null, 2)) : vue.createCommentVNode("", true),
1851
- vue.createElementVNode("div", _hoisted_2$2, [
1852
- vue.createElementVNode("div", {
1853
- class: vue.normalizeClass(["relative z-10 flex items-center justify-center size-8 rounded-full shrink-0", getStatusClasses(item.status).dot])
1854
- }, [
1855
- item.icon || getDefaultIcon(item.status) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1856
- key: 0,
1857
- icon: item.icon || getDefaultIcon(item.status),
1858
- class: vue.normalizeClass(["size-4", getStatusClasses(item.status).icon])
1859
- }, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true)
1860
- ], 2),
1861
- vue.createElementVNode("div", _hoisted_3$1, [
1862
- vue.createElementVNode("div", _hoisted_4, [
1863
- vue.createElementVNode("h3", _hoisted_5, vue.toDisplayString(item.title), 1),
1864
- item.date ? (vue.openBlock(), vue.createElementBlock("time", _hoisted_6, vue.toDisplayString(item.date), 1)) : vue.createCommentVNode("", true)
1865
- ]),
1866
- item.description ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_7, vue.toDisplayString(item.description), 1)) : vue.createCommentVNode("", true),
1867
- vue.renderSlot(_ctx.$slots, item.key, { item })
1868
- ])
1869
- ])
1870
- ]);
1871
- }), 128))
1872
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_8, [
1873
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
1874
- return vue.openBlock(), vue.createElementBlock("div", {
1875
- key: item.key,
1876
- class: vue.normalizeClass(["flex flex-col items-center shrink-0", { "flex-1": index2 < __props.items.length - 1 }])
1877
- }, [
1878
- vue.createElementVNode("div", _hoisted_9, [
1879
- vue.createElementVNode("div", {
1880
- class: vue.normalizeClass(["relative z-10 flex items-center justify-center size-8 rounded-full shrink-0", getStatusClasses(item.status).dot])
1881
- }, [
1882
- item.icon || getDefaultIcon(item.status) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1883
- key: 0,
1884
- icon: item.icon || getDefaultIcon(item.status),
1885
- class: vue.normalizeClass(["size-4", getStatusClasses(item.status).icon])
1886
- }, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true)
1887
- ], 2),
1888
- index2 < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1889
- key: 0,
1890
- class: vue.normalizeClass(["flex-1 h-0.5 mx-2", getStatusClasses(item.status).line])
1891
- }, null, 2)) : vue.createCommentVNode("", true)
1892
- ]),
1893
- vue.createElementVNode("div", _hoisted_10, [
1894
- vue.createElementVNode("h3", _hoisted_11, vue.toDisplayString(item.title), 1),
1895
- item.date ? (vue.openBlock(), vue.createElementBlock("time", _hoisted_12, vue.toDisplayString(item.date), 1)) : vue.createCommentVNode("", true)
1896
- ])
1897
- ], 2);
1898
- }), 128))
1899
- ]));
1900
- };
1901
- }
1902
- });
1903
- const _hoisted_1$2 = ["aria-label"];
1904
- const _hoisted_2$1 = {
1905
- key: 0,
1906
- class: "text-sm font-medium"
1907
- };
1908
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1909
- __name: "DarkModeToggle",
1910
- props: {
1911
- size: { default: "md" },
1912
- lightIcon: { default: "lucide:sun" },
1913
- darkIcon: { default: "lucide:moon" },
1914
- showLabel: { type: Boolean, default: false },
1915
- storageKey: { default: "dark-mode" }
1916
- },
1917
- setup(__props) {
1918
- const props = __props;
1919
- const { isDark, toggle } = useDarkMode.useDarkMode({ storageKey: props.storageKey });
1920
- const sizeClasses = {
1921
- sm: { button: "p-1.5", icon: "size-4" },
1922
- md: { button: "p-2", icon: "size-5" },
1923
- lg: { button: "p-2.5", icon: "size-6" }
1924
- };
1925
- return (_ctx, _cache) => {
1926
- return vue.openBlock(), vue.createElementBlock("button", {
1927
- type: "button",
1928
- class: vue.normalizeClass([
1929
- sizeClasses[__props.size].button,
1930
- "inline-flex items-center gap-2 rounded-lg transition-colors",
1931
- "text-gray-600 hover:bg-gray-100 hover:text-gray-900",
1932
- "dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-100",
1933
- "focus:outline-hidden focus:ring-2 focus:ring-primary focus:ring-offset-2"
1934
- ]),
1935
- "aria-label": vue.unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
1936
- onClick: _cache[0] || (_cache[0] = //@ts-ignore
1937
- (...args) => vue.unref(toggle) && vue.unref(toggle)(...args))
1938
- }, [
1939
- vue.createVNode(vue.unref(vue$1.Icon), {
1940
- icon: vue.unref(isDark) ? __props.darkIcon : __props.lightIcon,
1941
- class: vue.normalizeClass(sizeClasses[__props.size].icon)
1942
- }, null, 8, ["icon", "class"]),
1943
- __props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$1, vue.toDisplayString(vue.unref(isDark) ? "Dark" : "Light"), 1)) : vue.createCommentVNode("", true)
1944
- ], 10, _hoisted_1$2);
1945
- };
1946
- }
1947
- });
1948
- const _hoisted_1$1 = {
1949
- key: 0,
1950
- class: "text-gray-400"
1951
- };
1952
- const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1953
- __name: "StatsCard",
1954
- props: {
1955
- label: {},
1956
- value: {},
1957
- icon: {},
1958
- change: {},
1959
- changeLabel: {},
1960
- variant: { default: "default" },
1961
- color: { default: "primary" }
1962
- },
1963
- setup(__props) {
1964
- return (_ctx, _cache) => {
1965
- return vue.openBlock(), vue.createElementBlock("div", {
1966
- class: vue.normalizeClass([
1967
- "rounded-2xl p-4 text-center transition-all",
1968
- __props.variant === "default" && "bg-white dark:bg-slate-800 border border-gray-100 dark:border-slate-700 shadow-sm",
1969
- __props.variant === "glass" && "bg-white/15 backdrop-blur-sm border border-white/20",
1970
- __props.variant === "outline" && "border-2 border-gray-200 dark:border-slate-600",
1971
- __props.variant === "solid" && __props.color === "primary" && "bg-primary-500 text-white",
1972
- __props.variant === "solid" && __props.color === "success" && "bg-emerald-500 text-white",
1973
- __props.variant === "solid" && __props.color === "warning" && "bg-amber-500 text-white",
1974
- __props.variant === "solid" && __props.color === "danger" && "bg-red-500 text-white",
1975
- __props.variant === "solid" && __props.color === "info" && "bg-blue-500 text-white"
1976
- ])
1977
- }, [
1978
- __props.icon ? (vue.openBlock(), vue.createElementBlock("div", {
1979
- key: 0,
1980
- class: vue.normalizeClass([
1981
- "size-10 mx-auto mb-2 rounded-xl flex items-center justify-center",
1982
- __props.variant === "glass" && "bg-white/20",
1983
- __props.variant === "solid" && "bg-white/20",
1984
- __props.variant === "default" && __props.color === "primary" && "bg-primary-100 dark:bg-primary-900/30",
1985
- __props.variant === "default" && __props.color === "success" && "bg-emerald-100 dark:bg-emerald-900/30",
1986
- __props.variant === "default" && __props.color === "warning" && "bg-amber-100 dark:bg-amber-900/30",
1987
- __props.variant === "default" && __props.color === "danger" && "bg-red-100 dark:bg-red-900/30",
1988
- __props.variant === "default" && __props.color === "info" && "bg-blue-100 dark:bg-blue-900/30",
1989
- __props.variant === "outline" && "bg-gray-100 dark:bg-slate-700"
1990
- ])
1991
- }, [
1992
- vue.createVNode(vue.unref(vue$1.Icon), {
1993
- icon: __props.icon,
1994
- class: vue.normalizeClass([
1995
- "size-5",
1996
- (__props.variant === "glass" || __props.variant === "solid") && "text-white",
1997
- __props.variant === "default" && __props.color === "primary" && "text-primary-600 dark:text-primary-400",
1998
- __props.variant === "default" && __props.color === "success" && "text-emerald-600 dark:text-emerald-400",
1999
- __props.variant === "default" && __props.color === "warning" && "text-amber-600 dark:text-amber-400",
2000
- __props.variant === "default" && __props.color === "danger" && "text-red-600 dark:text-red-400",
2001
- __props.variant === "default" && __props.color === "info" && "text-blue-600 dark:text-blue-400",
2002
- __props.variant === "outline" && "text-gray-600 dark:text-gray-400"
2003
- ])
2004
- }, null, 8, ["icon", "class"])
2005
- ], 2)) : vue.createCommentVNode("", true),
2006
- vue.createElementVNode("div", {
2007
- class: vue.normalizeClass([
2008
- "text-2xl sm:text-3xl font-bold",
2009
- (__props.variant === "glass" || __props.variant === "solid") && "text-white",
2010
- (__props.variant === "default" || __props.variant === "outline") && "text-gray-900 dark:text-white"
2011
- ])
2012
- }, [
2013
- vue.renderSlot(_ctx.$slots, "value", {}, () => [
2014
- vue.createTextVNode(vue.toDisplayString(__props.value), 1)
2015
- ])
2016
- ], 2),
2017
- vue.createElementVNode("div", {
2018
- class: vue.normalizeClass([
2019
- "text-xs sm:text-sm",
2020
- __props.variant === "glass" && "text-white/80",
2021
- __props.variant === "solid" && "text-white/90",
2022
- (__props.variant === "default" || __props.variant === "outline") && "text-gray-500 dark:text-gray-400"
2023
- ])
2024
- }, [
2025
- vue.renderSlot(_ctx.$slots, "label", {}, () => [
2026
- vue.createTextVNode(vue.toDisplayString(__props.label), 1)
2027
- ])
2028
- ], 2),
2029
- __props.change !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", {
2030
- key: 1,
2031
- class: vue.normalizeClass([
2032
- "mt-2 text-xs font-medium inline-flex items-center gap-1",
2033
- __props.change >= 0 ? "text-emerald-500" : "text-red-500"
2034
- ])
2035
- }, [
2036
- vue.createVNode(vue.unref(vue$1.Icon), {
2037
- icon: __props.change >= 0 ? "heroicons:arrow-trending-up" : "heroicons:arrow-trending-down",
2038
- class: "size-3.5"
2039
- }, null, 8, ["icon"]),
2040
- vue.createElementVNode("span", null, vue.toDisplayString(__props.change >= 0 ? "+" : "") + vue.toDisplayString(__props.change) + "%", 1),
2041
- __props.changeLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$1, vue.toDisplayString(__props.changeLabel), 1)) : vue.createCommentVNode("", true)
2042
- ], 2)) : vue.createCommentVNode("", true)
2043
- ], 2);
2044
- };
2045
- }
2046
- });
2047
- const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
2048
- __name: "StatsGrid",
2049
- props: {
2050
- stats: {},
2051
- cols: {},
2052
- variant: { default: "default" },
2053
- color: { default: "primary" }
2054
- },
2055
- setup(__props) {
2056
- return (_ctx, _cache) => {
2057
- return vue.openBlock(), vue.createElementBlock("div", {
2058
- class: vue.normalizeClass(["grid gap-3 sm:gap-4", [
2059
- __props.cols === 2 && "grid-cols-2",
2060
- __props.cols === 3 && "grid-cols-3",
2061
- __props.cols === 4 && "grid-cols-2 sm:grid-cols-4",
2062
- !__props.cols && __props.stats.length === 2 && "grid-cols-2",
2063
- !__props.cols && __props.stats.length === 3 && "grid-cols-3",
2064
- !__props.cols && __props.stats.length === 4 && "grid-cols-2 sm:grid-cols-4",
2065
- !__props.cols && __props.stats.length > 4 && "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"
2066
- ]])
2067
- }, [
2068
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.stats, (stat, index2) => {
2069
- return vue.openBlock(), vue.createBlock(_sfc_main$2, {
2070
- key: index2,
2071
- label: stat.label,
2072
- value: stat.value,
2073
- icon: stat.icon,
2074
- change: stat.change,
2075
- "change-label": stat.changeLabel,
2076
- variant: __props.variant,
2077
- color: __props.color
2078
- }, null, 8, ["label", "value", "icon", "change", "change-label", "variant", "color"]);
2079
- }), 128))
2080
- ], 2);
2081
- };
2082
- }
2083
- });
2084
- const _hoisted_1 = ["disabled", "onClick"];
2085
- const _hoisted_2 = ["disabled", "onClick"];
2086
- const _hoisted_3 = ["disabled", "onClick"];
2087
- const _sfc_main = /* @__PURE__ */ vue.defineComponent({
2088
- __name: "FilterTabs",
2089
- props: /* @__PURE__ */ vue.mergeModels({
2090
- options: {},
2091
- variant: { default: "pills" },
2092
- size: { default: "md" },
2093
- fullWidth: { type: Boolean }
2094
- }, {
2095
- "modelValue": { required: true },
2096
- "modelModifiers": {}
2097
- }),
2098
- emits: ["update:modelValue"],
2099
- setup(__props) {
2100
- const modelValue = vue.useModel(__props, "modelValue");
2101
- return (_ctx, _cache) => {
2102
- return __props.variant === "pills" ? (vue.openBlock(), vue.createElementBlock("div", {
2103
- key: 0,
2104
- class: vue.normalizeClass([
2105
- "inline-flex p-1 bg-white dark:bg-slate-800 rounded-2xl shadow-sm border border-gray-100 dark:border-slate-700 gap-1",
2106
- __props.fullWidth && "w-full"
2107
- ])
2108
- }, [
2109
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option) => {
2110
- return vue.openBlock(), vue.createElementBlock("button", {
2111
- key: option.key,
2112
- type: "button",
2113
- disabled: option.disabled,
2114
- class: vue.normalizeClass([
2115
- "flex items-center justify-center gap-2 rounded-xl font-medium transition-all",
2116
- __props.fullWidth && "flex-1",
2117
- __props.size === "sm" && "px-3 py-1.5 text-xs",
2118
- __props.size === "md" && "px-4 py-2.5 text-sm",
2119
- __props.size === "lg" && "px-5 py-3 text-base",
2120
- modelValue.value === option.key ? "bg-primary-500 text-white shadow-md" : "text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-slate-700",
2121
- option.disabled && "opacity-50 cursor-not-allowed"
2122
- ]),
2123
- onClick: ($event) => !option.disabled && (modelValue.value = option.key)
2124
- }, [
2125
- option.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2126
- key: 0,
2127
- icon: option.icon,
2128
- class: "size-4"
2129
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
2130
- vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1),
2131
- option.count !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", {
2132
- key: 1,
2133
- class: vue.normalizeClass([
2134
- "px-1.5 py-0.5 rounded-full text-xs font-medium",
2135
- modelValue.value === option.key ? "bg-white/20 text-white" : "bg-gray-100 dark:bg-slate-700 text-gray-600 dark:text-gray-400"
2136
- ])
2137
- }, vue.toDisplayString(option.count), 3)) : vue.createCommentVNode("", true)
2138
- ], 10, _hoisted_1);
2139
- }), 128))
2140
- ], 2)) : __props.variant === "underline" ? (vue.openBlock(), vue.createElementBlock("div", {
2141
- key: 1,
2142
- class: vue.normalizeClass([
2143
- "flex border-b border-gray-200 dark:border-slate-700",
2144
- __props.fullWidth && "w-full"
2145
- ])
2146
- }, [
2147
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option) => {
2148
- return vue.openBlock(), vue.createElementBlock("button", {
2149
- key: option.key,
2150
- type: "button",
2151
- disabled: option.disabled,
2152
- class: vue.normalizeClass([
2153
- "flex items-center justify-center gap-2 font-medium transition-all border-b-2 -mb-px",
2154
- __props.fullWidth && "flex-1",
2155
- __props.size === "sm" && "px-3 py-2 text-xs",
2156
- __props.size === "md" && "px-4 py-3 text-sm",
2157
- __props.size === "lg" && "px-5 py-4 text-base",
2158
- modelValue.value === option.key ? "border-primary-500 text-primary-600 dark:text-primary-400" : "border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300",
2159
- option.disabled && "opacity-50 cursor-not-allowed"
2160
- ]),
2161
- onClick: ($event) => !option.disabled && (modelValue.value = option.key)
2162
- }, [
2163
- option.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2164
- key: 0,
2165
- icon: option.icon,
2166
- class: "size-4"
2167
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
2168
- vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1),
2169
- option.count !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", {
2170
- key: 1,
2171
- class: vue.normalizeClass([
2172
- "px-1.5 py-0.5 rounded-full text-xs font-medium",
2173
- modelValue.value === option.key ? "bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400" : "bg-gray-100 dark:bg-slate-700 text-gray-500"
2174
- ])
2175
- }, vue.toDisplayString(option.count), 3)) : vue.createCommentVNode("", true)
2176
- ], 10, _hoisted_2);
2177
- }), 128))
2178
- ], 2)) : __props.variant === "boxed" ? (vue.openBlock(), vue.createElementBlock("div", {
2179
- key: 2,
2180
- class: vue.normalizeClass([
2181
- "inline-flex bg-gray-100 dark:bg-slate-800 rounded-xl p-1 gap-1",
2182
- __props.fullWidth && "w-full"
2183
- ])
2184
- }, [
2185
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option) => {
2186
- return vue.openBlock(), vue.createElementBlock("button", {
2187
- key: option.key,
2188
- type: "button",
2189
- disabled: option.disabled,
2190
- class: vue.normalizeClass([
2191
- "flex items-center justify-center gap-2 rounded-lg font-medium transition-all",
2192
- __props.fullWidth && "flex-1",
2193
- __props.size === "sm" && "px-3 py-1.5 text-xs",
2194
- __props.size === "md" && "px-4 py-2 text-sm",
2195
- __props.size === "lg" && "px-5 py-2.5 text-base",
2196
- modelValue.value === option.key ? "bg-white dark:bg-slate-700 text-gray-900 dark:text-white shadow-sm" : "text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white",
2197
- option.disabled && "opacity-50 cursor-not-allowed"
2198
- ]),
2199
- onClick: ($event) => !option.disabled && (modelValue.value = option.key)
2200
- }, [
2201
- option.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2202
- key: 0,
2203
- icon: option.icon,
2204
- class: "size-4"
2205
- }, null, 8, ["icon"])) : vue.createCommentVNode("", true),
2206
- vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1),
2207
- option.count !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", {
2208
- key: 1,
2209
- class: vue.normalizeClass([
2210
- "px-1.5 py-0.5 rounded-full text-xs font-medium",
2211
- modelValue.value === option.key ? "bg-gray-100 dark:bg-slate-600 text-gray-600 dark:text-gray-300" : "bg-gray-200 dark:bg-slate-700 text-gray-500 dark:text-gray-400"
2212
- ])
2213
- }, vue.toDisplayString(option.count), 3)) : vue.createCommentVNode("", true)
2214
- ], 10, _hoisted_3);
2215
- }), 128))
2216
- ], 2)) : vue.createCommentVNode("", true);
2217
- };
2218
- }
2219
- });
2220
- exports._sfc_main = _sfc_main$l;
2221
- exports._sfc_main$1 = _sfc_main$k;
2222
- exports._sfc_main$10 = _sfc_main$b;
2223
- exports._sfc_main$11 = _sfc_main$a;
2224
- exports._sfc_main$12 = _sfc_main$9;
2225
- exports._sfc_main$13 = _sfc_main$8;
2226
- exports._sfc_main$14 = _sfc_main$7;
2227
- exports._sfc_main$15 = _sfc_main$6;
2228
- exports._sfc_main$16 = _sfc_main$5;
2229
- exports._sfc_main$17 = _sfc_main$4;
2230
- exports._sfc_main$18 = _sfc_main$3;
2231
- exports._sfc_main$19 = _sfc_main$2;
2232
- exports._sfc_main$2 = _sfc_main$j;
2233
- exports._sfc_main$20 = _sfc_main$1;
2234
- exports._sfc_main$21 = _sfc_main;
2235
- exports._sfc_main$3 = _sfc_main$i;
2236
- exports._sfc_main$4 = _sfc_main$h;
2237
- exports._sfc_main$5 = _sfc_main$g;
2238
- exports._sfc_main$6 = _sfc_main$f;
2239
- exports._sfc_main$7 = _sfc_main$e;
2240
- exports._sfc_main$8 = _sfc_main$d;
2241
- exports._sfc_main$9 = _sfc_main$c;
2242
- //# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs.map