@stachelock/ui 0.5.4 → 0.6.1

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 (442) hide show
  1. package/README.md +118 -5
  2. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-6taLcPq0.js +77 -0
  3. package/dist/{AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js → AlertModal.vue_vue_type_script_setup_true_lang-DzhVQdx4.js} +45 -65
  4. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js +0 -1
  5. package/dist/BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js +0 -1
  6. package/dist/{BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js → BaseModal.vue_vue_type_script_setup_true_lang--iGzFCnC.js} +42 -44
  7. package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js → CalendarHeader.vue_vue_type_script_setup_true_lang-hGa2MLyo.js} +114 -141
  8. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js +0 -1
  9. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js +0 -1
  10. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-BigvbBAU.js +331 -0
  11. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js +0 -1
  12. package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js → DashboardLayout.vue_vue_type_script_setup_true_lang-BAx4gKqh.js} +44 -47
  13. package/dist/{DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js → DatepickerInput.vue_vue_type_style_index_0_lang-DbI3619T.js} +23 -24
  14. package/dist/{DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js → DayCalendar.vue_vue_type_script_setup_true_lang-D-4jcUvI.js} +1 -2
  15. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js +0 -1
  16. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-CgHPOC-w.js +35 -0
  17. package/dist/{DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js → DynamicForm.vue_vue_type_script_setup_true_lang-BR8Pq7Kw.js} +52 -53
  18. package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js → DynamicFormField.vue_vue_type_script_setup_true_lang-BCVmqg_n.js} +7 -8
  19. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js +0 -1
  20. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js +0 -1
  21. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js +0 -1
  22. package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +74 -0
  23. package/dist/EventsList.vue_vue_type_script_setup_true_lang-BTIoGr_e.js +87 -0
  24. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-BJR-_ngq.js +176 -0
  25. package/dist/{FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js → FormErrorWrapper.vue_vue_type_script_setup_true_lang-D7ZAgfPs.js} +12 -13
  26. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js +0 -1
  27. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js +0 -1
  28. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js +0 -1
  29. package/dist/{InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js → InlineTabs.vue_vue_type_script_setup_true_lang-B5w4yzcZ.js} +1 -2
  30. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js +0 -1
  31. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js → LottieAnimation.vue_vue_type_script_setup_true_lang-C0R4ADBb.js} +1 -2
  32. package/dist/{MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js → MonthCalendar.vue_vue_type_style_index_0_lang-lnKkvJ9u.js} +1 -2
  33. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js +0 -1
  34. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js +0 -1
  35. package/dist/{NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js → NotificationContainer.vue_vue_type_style_index_0_lang-CvJRwezr.js} +1 -2
  36. package/dist/{NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js → NotificationToast.vue_vue_type_script_setup_true_lang-BBWpW4km.js} +61 -64
  37. package/dist/PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js +0 -1
  38. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-CKCoHD1o.js +0 -1
  39. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js +0 -1
  40. package/dist/{SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js → SelectInput.vue_vue_type_script_setup_true_lang-D4GNv0MY.js} +56 -58
  41. package/dist/{SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js → SelectTextInput.vue_vue_type_script_setup_true_lang-BVaViHPl.js} +66 -69
  42. package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js → SidebarLayout.vue_vue_type_script_setup_true_lang-CZ21EVcZ.js} +36 -39
  43. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js +0 -1
  44. package/dist/StatCard.vue_vue_type_script_setup_true_lang-B5SuaSXL.js +66 -0
  45. package/dist/{StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js → StepperPanels.vue_vue_type_script_setup_true_lang-DPLQ9mQn.js} +34 -49
  46. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-D5Es9AjF.js +200 -0
  47. package/dist/{SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js → SwitchInputGroup.vue_vue_type_script_setup_true_lang-DigNYqVZ.js} +1 -2
  48. package/dist/{TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js → TabGroup.vue_vue_type_script_setup_true_lang-BsbiEA4E.js} +19 -20
  49. package/dist/{TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js → TabGroupUnderline.vue_vue_type_script_setup_true_lang-CPcp1-Za.js} +21 -22
  50. package/dist/{TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js → TabsInPills.vue_vue_type_script_setup_true_lang-U5CdRL7s.js} +1 -2
  51. package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js → TagifyInput.vue_vue_type_script_setup_true_lang-BF2mK8JC.js} +14 -15
  52. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js +0 -1
  53. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js +0 -1
  54. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js +0 -1
  55. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js +0 -1
  56. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js +0 -1
  57. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js +0 -1
  58. package/dist/{UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js → UiMapAll.vue_vue_type_script_setup_true_lang-11yT7mTH.js} +93 -111
  59. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-gnoIJm6x.js +127 -0
  60. package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js → UiModal.vue_vue_type_script_setup_true_lang-BZC7aN7K.js} +41 -43
  61. package/dist/{UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js → UiNavLink.vue_vue_type_script_setup_true_lang-C5Gicm8o.js} +4 -5
  62. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js +0 -1
  63. package/dist/UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js +0 -1
  64. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js +0 -1
  65. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js +0 -1
  66. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -1
  67. package/dist/calendar-DLry-Vik.js +147 -0
  68. package/dist/calendars/CalendarDashboard.js +3 -4
  69. package/dist/calendars/CalendarHeader.js +1 -2
  70. package/dist/calendars/DayCalendar.js +1 -2
  71. package/dist/calendars/EventCard.js +1 -2
  72. package/dist/calendars/EventsList.js +1 -2
  73. package/dist/calendars/MonthCalendar.js +1 -2
  74. package/dist/calendars/WeekCalendar.js +1 -2
  75. package/dist/calendars/YearCalendar.js +0 -1
  76. package/dist/charts/BarChart.js +0 -1
  77. package/dist/charts/BaseChart.js +42 -59
  78. package/dist/charts/FunnelChart.js +0 -1
  79. package/dist/charts/LineChart.js +0 -1
  80. package/dist/charts/PieChart.js +0 -1
  81. package/dist/charts/SparklineChart.js +0 -1
  82. package/dist/charts/StatCard.js +1 -2
  83. package/dist/charts/chartTheme.js +0 -1
  84. package/dist/charts/index.js +1 -2
  85. package/dist/components/Avatar.js +0 -1
  86. package/dist/components/Badge.js +0 -1
  87. package/dist/components/Banner.js +178 -351
  88. package/dist/components/Breadcrumb.js +41 -42
  89. package/dist/components/Button.js +0 -1
  90. package/dist/components/ButtonGroup.js +0 -1
  91. package/dist/components/Checkbox.js +0 -1
  92. package/dist/components/CloudinaryImage.js +51 -81
  93. package/dist/components/Loading.js +0 -1
  94. package/dist/components/LoadingDots.js +0 -1
  95. package/dist/components/LottieAnimation.js +1 -2
  96. package/dist/components/Menu.js +1 -2
  97. package/dist/components/Modal.js +1 -2
  98. package/dist/components/NavLink.js +1 -2
  99. package/dist/components/ProgressBar.js +0 -1
  100. package/dist/components/RadialProgressBar.js +0 -1
  101. package/dist/components/Table.js +0 -1
  102. package/dist/components/Transition.js +0 -1
  103. package/dist/composables/index.js +1 -2
  104. package/dist/composables/useCalendar.js +1 -2
  105. package/dist/composables/useFormValidation.js +0 -1
  106. package/dist/composables/useMap.js +3 -3
  107. package/dist/composables/useModal.js +0 -1
  108. package/dist/composables/useNotifications.js +0 -1
  109. package/dist/composables/useTabs.js +87 -193
  110. package/dist/composables/useTheme.js +0 -1
  111. package/dist/empty-state/ComingSoon.js +0 -1
  112. package/dist/empty-state/EmptyState.js +0 -1
  113. package/dist/empty-state/index.js +0 -1
  114. package/dist/forms/DynamicForm.js +1 -2
  115. package/dist/forms/DynamicFormField.js +1 -2
  116. package/dist/forms/FormFieldWrapper.js +7 -8
  117. package/dist/id-DafBB_QF.js +0 -1
  118. package/dist/index.js +1343 -725
  119. package/dist/inputs/AddDeleteButtonGroup.js +1 -2
  120. package/dist/inputs/CheckboxInput.js +0 -1
  121. package/dist/inputs/ComboboxInput.js +1 -2
  122. package/dist/inputs/DatepickerInput.js +1 -2
  123. package/dist/inputs/EmailInput.js +0 -1
  124. package/dist/inputs/EmptyInput.js +0 -1
  125. package/dist/inputs/FileDropzoneInput.js +1 -2
  126. package/dist/inputs/HiddenInput.js +0 -1
  127. package/dist/inputs/PhoneInput.js +371 -3539
  128. package/dist/inputs/RichTextInput.js +235 -17298
  129. package/dist/inputs/SelectInput.js +1 -2
  130. package/dist/inputs/SelectTextInput.js +1 -2
  131. package/dist/inputs/SwitchInput.js +1 -2
  132. package/dist/inputs/SwitchInputGroup.js +1 -2
  133. package/dist/inputs/TagifyInput.js +1 -2
  134. package/dist/inputs/TextAreaInput.js +0 -1
  135. package/dist/inputs/TextInput.js +7 -8
  136. package/dist/layouts/DashboardLayout.js +1 -2
  137. package/dist/layouts/DefaultLayout.js +0 -1
  138. package/dist/layouts/HeaderLayout.js +0 -1
  139. package/dist/layouts/NavigationGroup.js +0 -1
  140. package/dist/layouts/NavigationItem.js +0 -1
  141. package/dist/layouts/ProfileHeaderAvatar.js +0 -1
  142. package/dist/layouts/ProjectLogo.js +0 -1
  143. package/dist/layouts/SidebarLayout.js +1 -2
  144. package/dist/loading/ContentSkeleton.js +0 -1
  145. package/dist/loading/SmartLoadingIndicator.js +0 -1
  146. package/dist/loading/index.js +0 -1
  147. package/dist/mapThemes-DFE9fZm3.js +0 -1
  148. package/dist/maps/GoogleMap.js +13 -14
  149. package/dist/maps/UiInfoWindow.js +41 -43
  150. package/dist/maps/UiMap.js +28 -31
  151. package/dist/maps/UiMapAll.js +1 -2
  152. package/dist/maps/UiMapMarker.js +1 -2
  153. package/dist/maps/index.js +1 -2
  154. package/dist/modals/AlertModal.js +1 -2
  155. package/dist/modals/BaseModal.js +1 -2
  156. package/dist/modals/ImageCropperModal.js +130 -1666
  157. package/dist/notifications/NotificationContainer.js +1 -2
  158. package/dist/notifications/NotificationToast.js +1 -2
  159. package/dist/notifications/index.js +2 -3
  160. package/dist/src/components/inputs/AddressInput.d.ts +40 -0
  161. package/dist/src/components/inputs/DatepickerInput.d.ts +7 -7
  162. package/dist/src/components/inputs/index.d.ts +1 -0
  163. package/dist/src/components/maps/UiMap.d.ts +1 -1
  164. package/dist/src/components/maps/UiMapAll.d.ts +6 -6
  165. package/dist/src/plugin/configure.d.ts +3 -1
  166. package/dist/src/services/geocoding.service.d.ts +68 -0
  167. package/dist/src/services/index.d.ts +1 -0
  168. package/dist/src/types/address.d.ts +164 -0
  169. package/dist/src/types/index.d.ts +1 -0
  170. package/dist/src/views/inputs/index.d.ts +1 -0
  171. package/dist/stepper/StepperPanels.js +1 -2
  172. package/dist/stepper/index.js +1 -2
  173. package/dist/style.css +1 -1
  174. package/dist/tabs/InlineTabs.js +1 -2
  175. package/dist/tabs/TabGroup.js +1 -2
  176. package/dist/tabs/TabGroupUnderline.js +1 -2
  177. package/dist/tabs/TabsInPills.js +1 -2
  178. package/dist/tabs/index.js +4 -5
  179. package/dist/ui.css +1 -1
  180. package/dist/useEventSegments-B-r_8zCW.js +0 -1
  181. package/dist/useMap-BGg0H582.js +297 -0
  182. package/dist/useSimpleTabs-CSgkChEU.js +0 -1
  183. package/dist/useStringTransform-CSr7nZWg.js +0 -1
  184. package/dist/wrappers/BackgroundGradientWrapper.js +0 -1
  185. package/dist/wrappers/CardWrapper.js +0 -1
  186. package/dist/wrappers/DisclosureWrapper.js +1 -2
  187. package/dist/wrappers/FormErrorWrapper.js +1 -2
  188. package/dist/wrappers/index.js +2 -3
  189. package/package.json +9 -1
  190. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js +0 -128
  191. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js.map +0 -1
  192. package/dist/AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js.map +0 -1
  193. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js.map +0 -1
  194. package/dist/BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js.map +0 -1
  195. package/dist/Bars3Icon-BdOqcGcY.js +0 -22
  196. package/dist/Bars3Icon-BdOqcGcY.js.map +0 -1
  197. package/dist/BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js.map +0 -1
  198. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js.map +0 -1
  199. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js.map +0 -1
  200. package/dist/CheckIcon-BGlsmVwT.js +0 -20
  201. package/dist/CheckIcon-BGlsmVwT.js.map +0 -1
  202. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js.map +0 -1
  203. package/dist/ChevronRightIcon-DkUqw988.js +0 -20
  204. package/dist/ChevronRightIcon-DkUqw988.js.map +0 -1
  205. package/dist/ChevronUpDownIcon-Bq_fsgrb.js +0 -20
  206. package/dist/ChevronUpDownIcon-Bq_fsgrb.js.map +0 -1
  207. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js +0 -1362
  208. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js.map +0 -1
  209. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js.map +0 -1
  210. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js.map +0 -1
  211. package/dist/DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js.map +0 -1
  212. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js.map +0 -1
  213. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js.map +0 -1
  214. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js +0 -138
  215. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js.map +0 -1
  216. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js.map +0 -1
  217. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js.map +0 -1
  218. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js.map +0 -1
  219. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js.map +0 -1
  220. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js.map +0 -1
  221. package/dist/EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js +0 -136
  222. package/dist/EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js.map +0 -1
  223. package/dist/EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js +0 -102
  224. package/dist/EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js.map +0 -1
  225. package/dist/ExclamationCircleIcon-DjxYk45_.js +0 -22
  226. package/dist/ExclamationCircleIcon-DjxYk45_.js.map +0 -1
  227. package/dist/ExclamationCircleIcon-DmL8Wwjo.js +0 -36
  228. package/dist/ExclamationCircleIcon-DmL8Wwjo.js.map +0 -1
  229. package/dist/ExclamationTriangleIcon-BNKYmV_J.js +0 -22
  230. package/dist/ExclamationTriangleIcon-BNKYmV_J.js.map +0 -1
  231. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js +0 -211
  232. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js.map +0 -1
  233. package/dist/FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js.map +0 -1
  234. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js.map +0 -1
  235. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js.map +0 -1
  236. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js.map +0 -1
  237. package/dist/InformationCircleIcon-B322GNIt.js +0 -40
  238. package/dist/InformationCircleIcon-B322GNIt.js.map +0 -1
  239. package/dist/InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js.map +0 -1
  240. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js.map +0 -1
  241. package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js.map +0 -1
  242. package/dist/MapPinIcon-CSTDUZnD.js +0 -27
  243. package/dist/MapPinIcon-CSTDUZnD.js.map +0 -1
  244. package/dist/MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js.map +0 -1
  245. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js.map +0 -1
  246. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js.map +0 -1
  247. package/dist/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js.map +0 -1
  248. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js.map +0 -1
  249. package/dist/PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js.map +0 -1
  250. package/dist/PlusIcon-aDFVlB90.js +0 -40
  251. package/dist/PlusIcon-aDFVlB90.js.map +0 -1
  252. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-CKCoHD1o.js.map +0 -1
  253. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js.map +0 -1
  254. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js.map +0 -1
  255. package/dist/SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js.map +0 -1
  256. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js.map +0 -1
  257. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js.map +0 -1
  258. package/dist/StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js +0 -111
  259. package/dist/StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js.map +0 -1
  260. package/dist/StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js.map +0 -1
  261. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js +0 -280
  262. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js.map +0 -1
  263. package/dist/SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js.map +0 -1
  264. package/dist/TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js.map +0 -1
  265. package/dist/TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js.map +0 -1
  266. package/dist/TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js.map +0 -1
  267. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js.map +0 -1
  268. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js.map +0 -1
  269. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js.map +0 -1
  270. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js.map +0 -1
  271. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js.map +0 -1
  272. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js.map +0 -1
  273. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js.map +0 -1
  274. package/dist/UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js.map +0 -1
  275. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js +0 -330
  276. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js.map +0 -1
  277. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js.map +0 -1
  278. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js.map +0 -1
  279. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js.map +0 -1
  280. package/dist/UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js.map +0 -1
  281. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js.map +0 -1
  282. package/dist/XMarkIcon-Cwy3T6p8.js +0 -22
  283. package/dist/XMarkIcon-Cwy3T6p8.js.map +0 -1
  284. package/dist/XMarkIcon-DNvCkiOy.js +0 -16
  285. package/dist/XMarkIcon-DNvCkiOy.js.map +0 -1
  286. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js.map +0 -1
  287. package/dist/_plugin-vue_export-helper-CHgC5LLL.js.map +0 -1
  288. package/dist/active-element-history-BTBNVIJN.js +0 -17
  289. package/dist/active-element-history-BTBNVIJN.js.map +0 -1
  290. package/dist/calculate-active-index-Dim3sT-5.js +0 -55
  291. package/dist/calculate-active-index-Dim3sT-5.js.map +0 -1
  292. package/dist/calendar-BlSSD4nO.js +0 -575
  293. package/dist/calendar-BlSSD4nO.js.map +0 -1
  294. package/dist/calendars/CalendarDashboard.js.map +0 -1
  295. package/dist/calendars/CalendarHeader.js.map +0 -1
  296. package/dist/calendars/DayCalendar.js.map +0 -1
  297. package/dist/calendars/EventCard.js.map +0 -1
  298. package/dist/calendars/EventsList.js.map +0 -1
  299. package/dist/calendars/MonthCalendar.js.map +0 -1
  300. package/dist/calendars/WeekCalendar.js.map +0 -1
  301. package/dist/calendars/YearCalendar.js.map +0 -1
  302. package/dist/charts/BarChart.js.map +0 -1
  303. package/dist/charts/BaseChart.js.map +0 -1
  304. package/dist/charts/FunnelChart.js.map +0 -1
  305. package/dist/charts/LineChart.js.map +0 -1
  306. package/dist/charts/PieChart.js.map +0 -1
  307. package/dist/charts/SparklineChart.js.map +0 -1
  308. package/dist/charts/StatCard.js.map +0 -1
  309. package/dist/charts/chartTheme.js.map +0 -1
  310. package/dist/charts/index.js.map +0 -1
  311. package/dist/components/Avatar.js.map +0 -1
  312. package/dist/components/Badge.js.map +0 -1
  313. package/dist/components/Banner.js.map +0 -1
  314. package/dist/components/Breadcrumb.js.map +0 -1
  315. package/dist/components/Button.js.map +0 -1
  316. package/dist/components/ButtonGroup.js.map +0 -1
  317. package/dist/components/Checkbox.js.map +0 -1
  318. package/dist/components/CloudinaryImage.js.map +0 -1
  319. package/dist/components/Loading.js.map +0 -1
  320. package/dist/components/LoadingDots.js.map +0 -1
  321. package/dist/components/LottieAnimation.js.map +0 -1
  322. package/dist/components/Menu.js.map +0 -1
  323. package/dist/components/Modal.js.map +0 -1
  324. package/dist/components/NavLink.js.map +0 -1
  325. package/dist/components/ProgressBar.js.map +0 -1
  326. package/dist/components/RadialProgressBar.js.map +0 -1
  327. package/dist/components/Table.js.map +0 -1
  328. package/dist/components/Transition.js.map +0 -1
  329. package/dist/composables/index.js.map +0 -1
  330. package/dist/composables/useCalendar.js.map +0 -1
  331. package/dist/composables/useFormValidation.js.map +0 -1
  332. package/dist/composables/useMap.js.map +0 -1
  333. package/dist/composables/useModal.js.map +0 -1
  334. package/dist/composables/useNotifications.js.map +0 -1
  335. package/dist/composables/useTabs.js.map +0 -1
  336. package/dist/composables/useTheme.js.map +0 -1
  337. package/dist/description-C7cRw0tq.js +0 -30
  338. package/dist/description-C7cRw0tq.js.map +0 -1
  339. package/dist/dialog-BJ2Ld8l3.js +0 -499
  340. package/dist/dialog-BJ2Ld8l3.js.map +0 -1
  341. package/dist/empty-state/ComingSoon.js.map +0 -1
  342. package/dist/empty-state/EmptyState.js.map +0 -1
  343. package/dist/empty-state/index.js.map +0 -1
  344. package/dist/env-BZfPsfnF.js +0 -29
  345. package/dist/env-BZfPsfnF.js.map +0 -1
  346. package/dist/form-f8yP4kN-.js +0 -35
  347. package/dist/form-f8yP4kN-.js.map +0 -1
  348. package/dist/forms/DynamicForm.js.map +0 -1
  349. package/dist/forms/DynamicFormField.js.map +0 -1
  350. package/dist/forms/FormFieldWrapper.js.map +0 -1
  351. package/dist/hidden-BSRluD1y.js +0 -15
  352. package/dist/hidden-BSRluD1y.js.map +0 -1
  353. package/dist/id-DafBB_QF.js.map +0 -1
  354. package/dist/index-Dca39bYA.js +0 -2167
  355. package/dist/index-Dca39bYA.js.map +0 -1
  356. package/dist/index.js.map +0 -1
  357. package/dist/inputs/AddDeleteButtonGroup.js.map +0 -1
  358. package/dist/inputs/CheckboxInput.js.map +0 -1
  359. package/dist/inputs/ComboboxInput.js.map +0 -1
  360. package/dist/inputs/DatepickerInput.js.map +0 -1
  361. package/dist/inputs/EmailInput.js.map +0 -1
  362. package/dist/inputs/EmptyInput.js.map +0 -1
  363. package/dist/inputs/FileDropzoneInput.js.map +0 -1
  364. package/dist/inputs/HiddenInput.js.map +0 -1
  365. package/dist/inputs/PhoneInput.js.map +0 -1
  366. package/dist/inputs/RichTextInput.js.map +0 -1
  367. package/dist/inputs/SelectInput.js.map +0 -1
  368. package/dist/inputs/SelectTextInput.js.map +0 -1
  369. package/dist/inputs/SwitchInput.js.map +0 -1
  370. package/dist/inputs/SwitchInputGroup.js.map +0 -1
  371. package/dist/inputs/TagifyInput.js.map +0 -1
  372. package/dist/inputs/TextAreaInput.js.map +0 -1
  373. package/dist/inputs/TextInput.js.map +0 -1
  374. package/dist/keyboard-Dd_2-cFu.js +0 -5
  375. package/dist/keyboard-Dd_2-cFu.js.map +0 -1
  376. package/dist/layouts/DashboardLayout.js.map +0 -1
  377. package/dist/layouts/DefaultLayout.js.map +0 -1
  378. package/dist/layouts/HeaderLayout.js.map +0 -1
  379. package/dist/layouts/NavigationGroup.js.map +0 -1
  380. package/dist/layouts/NavigationItem.js.map +0 -1
  381. package/dist/layouts/ProfileHeaderAvatar.js.map +0 -1
  382. package/dist/layouts/ProjectLogo.js.map +0 -1
  383. package/dist/layouts/SidebarLayout.js.map +0 -1
  384. package/dist/listbox-YaWWZiiG.js +0 -257
  385. package/dist/listbox-YaWWZiiG.js.map +0 -1
  386. package/dist/loading/ContentSkeleton.js.map +0 -1
  387. package/dist/loading/SmartLoadingIndicator.js.map +0 -1
  388. package/dist/loading/index.js.map +0 -1
  389. package/dist/mapThemes-DFE9fZm3.js.map +0 -1
  390. package/dist/maps/GoogleMap.js.map +0 -1
  391. package/dist/maps/UiInfoWindow.js.map +0 -1
  392. package/dist/maps/UiMap.js.map +0 -1
  393. package/dist/maps/UiMapAll.js.map +0 -1
  394. package/dist/maps/UiMapMarker.js.map +0 -1
  395. package/dist/maps/index.js.map +0 -1
  396. package/dist/micro-task-D-oTY33s.js +0 -9
  397. package/dist/micro-task-D-oTY33s.js.map +0 -1
  398. package/dist/modals/AlertModal.js.map +0 -1
  399. package/dist/modals/BaseModal.js.map +0 -1
  400. package/dist/modals/ImageCropperModal.js.map +0 -1
  401. package/dist/notifications/NotificationContainer.js.map +0 -1
  402. package/dist/notifications/NotificationToast.js.map +0 -1
  403. package/dist/notifications/index.js.map +0 -1
  404. package/dist/open-closed-JTEvYTg2.js +0 -19
  405. package/dist/open-closed-JTEvYTg2.js.map +0 -1
  406. package/dist/render-QUUPyNjX.js +0 -101
  407. package/dist/render-QUUPyNjX.js.map +0 -1
  408. package/dist/stepper/StepperPanels.js.map +0 -1
  409. package/dist/stepper/index.js.map +0 -1
  410. package/dist/tabs/InlineTabs.js.map +0 -1
  411. package/dist/tabs/TabGroup.js.map +0 -1
  412. package/dist/tabs/TabGroupUnderline.js.map +0 -1
  413. package/dist/tabs/TabsInPills.js.map +0 -1
  414. package/dist/tabs/index.js.map +0 -1
  415. package/dist/tabs-J5phClGv.js +0 -202
  416. package/dist/tabs-J5phClGv.js.map +0 -1
  417. package/dist/transition-_rPfnoET.js +0 -191
  418. package/dist/transition-_rPfnoET.js.map +0 -1
  419. package/dist/use-outside-click-14T0Zn98.js +0 -151
  420. package/dist/use-outside-click-14T0Zn98.js.map +0 -1
  421. package/dist/use-resolve-button-type-h6n-lm9q.js +0 -20
  422. package/dist/use-resolve-button-type-h6n-lm9q.js.map +0 -1
  423. package/dist/use-text-value-DKnkjK00.js +0 -44
  424. package/dist/use-text-value-DKnkjK00.js.map +0 -1
  425. package/dist/use-tree-walker-Bo9gIb_K.js +0 -16
  426. package/dist/use-tree-walker-Bo9gIb_K.js.map +0 -1
  427. package/dist/useEventSegments-B-r_8zCW.js.map +0 -1
  428. package/dist/useMap-BaZEIoWM.js +0 -525
  429. package/dist/useMap-BaZEIoWM.js.map +0 -1
  430. package/dist/useSimpleTabs-CSgkChEU.js.map +0 -1
  431. package/dist/useStringTransform-CSr7nZWg.js.map +0 -1
  432. package/dist/vue-datepicker-CEn0-fJj.js +0 -4871
  433. package/dist/vue-datepicker-CEn0-fJj.js.map +0 -1
  434. package/dist/vue-router-B3K2xmg_.js +0 -120
  435. package/dist/vue-router-B3K2xmg_.js.map +0 -1
  436. package/dist/vue3-lottie.es-DT4qZE-F.js +0 -7981
  437. package/dist/vue3-lottie.es-DT4qZE-F.js.map +0 -1
  438. package/dist/wrappers/BackgroundGradientWrapper.js.map +0 -1
  439. package/dist/wrappers/CardWrapper.js.map +0 -1
  440. package/dist/wrappers/DisclosureWrapper.js.map +0 -1
  441. package/dist/wrappers/FormErrorWrapper.js.map +0 -1
  442. package/dist/wrappers/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js","sources":["../src/components/UiLoading.vue"],"sourcesContent":["<template>\n <div :class=\"containerClasses\">\n <div v-if=\"overlay\" class=\"sl-absolute sl-inset-0 sl-bg-white sl-bg-opacity-75 dark:sl-bg-slate-900 dark:sl-bg-opacity-75 sl-flex sl-items-center sl-justify-center sl-z-50\">\n <div class=\"sl-flex sl-flex-col sl-items-center\">\n <div :class=\"spinnerClasses\">\n <svg class=\"sl-animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"sl-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n />\n <path\n class=\"sl-opacity-75\"\n fill=\"currentColor\"\n d=\"m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n </div>\n <p v-if=\"text\" :class=\"textClasses\">{{ text }}</p>\n </div>\n </div>\n <div v-else :class=\"spinnerClasses\">\n <svg class=\"sl-animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"sl-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n />\n <path\n class=\"sl-opacity-75\"\n fill=\"currentColor\"\n d=\"m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n </div>\n <p v-if=\"text && !overlay\" :class=\"textClasses\">{{ text }}</p>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { LoadingType } from '../types/ui';\n\ninterface LoadingProps extends LoadingType {}\n\nconst props = withDefaults(defineProps<LoadingProps>(), {\n theme: 'primary',\n size: 'md',\n overlay: false,\n});\n\nconst containerClasses = computed(() => {\n const base = 'sl-flex sl-items-center sl-justify-center';\n const classes = [base];\n\n if (props.overlay) {\n classes.push('sl-relative');\n } else {\n classes.push('sl-flex-col sl-space-y-2');\n }\n\n if (props.className) {\n classes.push(props.className);\n }\n\n return classes;\n});\n\nconst spinnerClasses = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-h-3 sl-w-3',\n sm: 'sl-h-4 sl-w-4',\n md: 'sl-h-6 sl-w-6',\n lg: 'sl-h-8 sl-w-8',\n xl: 'sl-h-10 sl-w-10',\n '2xl': 'sl-h-12 sl-w-12',\n };\n\n const colorMapping: Record<string, string> = {\n primary: 'sl-text-primary-600 dark:sl-text-primary-400',\n secondary: 'sl-text-gray-600 dark:sl-text-gray-300',\n dark: 'sl-text-gray-700 dark:sl-text-gray-300',\n light: 'sl-text-white', // White spinner for dark backgrounds\n white: 'sl-text-white', // Alias for light\n success: 'sl-text-green-600 dark:sl-text-green-400',\n warning: 'sl-text-yellow-600 dark:sl-text-yellow-400',\n danger: 'sl-text-red-600 dark:sl-text-red-400',\n ghost: 'sl-text-gray-600 dark:sl-text-gray-300',\n };\n\n return [\n sizeMapping[props.size || 'md'],\n colorMapping[props.theme || 'primary']\n ];\n});\n\nconst textClasses = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-text-xs',\n sm: 'sl-text-sm',\n md: 'sl-text-base',\n lg: 'sl-text-lg',\n xl: 'sl-text-xl',\n '2xl': 'sl-text-2xl',\n };\n\n const colorMapping: Record<string, string> = {\n primary: 'sl-text-stachelock-700 dark:sl-text-stachelock-300',\n secondary: 'sl-text-gray-700 dark:sl-text-gray-300',\n dark: 'sl-text-gray-800 dark:sl-text-gray-200',\n light: 'sl-text-white',\n white: 'sl-text-white', // Alias for light\n success: 'sl-text-green-700 dark:sl-text-green-300',\n warning: 'sl-text-yellow-700 dark:sl-text-yellow-300',\n danger: 'sl-text-red-700 dark:sl-text-red-300',\n ghost: 'sl-text-gray-700 dark:sl-text-gray-300',\n };\n\n return [\n sizeMapping[props.size || 'md'],\n colorMapping[props.theme || 'primary'],\n 'sl-font-medium'\n ];\n});\n</script>\n\n\n"],"names":["props","__props","containerClasses","computed","classes","spinnerClasses","sizeMapping","colorMapping","textClasses","_createElementBlock","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js","sources":["../node_modules/@heroicons/vue/24/outline/esm/ArrowsPointingOutIcon.js","../src/components/maps/UiMapAll.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\"\n })\n ]))\n}","<template>\n <UiMap\n ref=\"mapRef\"\n v-bind=\"mapProps\"\n :show-custom-controls=\"showControls\"\n :show-default-zoom-controls=\"showDefaultZoomControls\"\n :controls-position=\"controlsPosition\"\n @ready=\"handleMapReady\"\n @click=\"handleMapClick\"\n @bounds-changed=\"handleBoundsChanged\"\n @zoom-changed=\"handleZoomChanged\"\n @idle=\"handleIdle\"\n @error=\"handleError\"\n v-model:center=\"internalCenter\"\n v-model:zoom=\"internalZoom\"\n >\n <template #default=\"{ ready, map }\">\n <template v-if=\"ready && map\">\n <!-- Cluster Markers -->\n <template v-if=\"shouldShowClusters\">\n <UiMapMarker\n v-for=\"cluster in clusters\"\n :key=\"cluster.id\"\n :position=\"cluster.position\"\n :id=\"cluster.id\"\n :title=\"`${cluster.size} items in this area`\"\n :ready=\"ready\"\n :icon=\"getClusterIcon(cluster)\"\n :z-index=\"1000\"\n @click=\"handleClusterClick(cluster, map)\"\n />\n </template>\n\n <!-- Individual Markers -->\n <UiMapMarker\n v-for=\"marker in visibleMarkers\"\n :key=\"marker.id\"\n :position=\"marker.position\"\n :id=\"marker.id\"\n :title=\"marker.title\"\n :data=\"(marker.data as Record<string, any> | undefined)\"\n :ready=\"ready\"\n :color=\"markerColor\"\n :size=\"markerSize\"\n :pin=\"pinMarkers\"\n :icon=\"markerIcon\"\n :z-index=\"100\"\n @click=\"handleMarkerClick\"\n />\n </template>\n </template>\n\n <!-- Loading Overlay -->\n <template #overlay=\"{ isDark }\">\n <div \n v-if=\"isDataLoading\"\n class=\"sl-absolute sl-top-4 sl-left-4 sl-z-10 sl-flex sl-items-center sl-gap-2 sl-px-3 sl-py-2 sl-rounded-lg sl-shadow-md\"\n :class=\"isDark ? 'sl-bg-gray-800' : 'sl-bg-white'\"\n >\n <div \n class=\"sl-animate-spin sl-h-4 sl-w-4 sl-border-2 sl-border-t-transparent sl-rounded-full\"\n :class=\"isDark ? 'sl-border-primary-400' : 'sl-border-primary-600'\"\n />\n <span \n class=\"sl-text-sm\"\n :class=\"isDark ? 'sl-text-gray-300' : 'sl-text-gray-600'\"\n >\n {{ dataLoadingText }}\n </span>\n </div>\n\n <!-- Marker Count Badge -->\n <div \n v-if=\"showMarkerCount && markers.length > 0\"\n class=\"sl-absolute sl-top-4 sl-right-4 sl-z-10 sl-px-2 sl-py-1 sl-rounded-md sl-text-xs sl-font-medium\"\n :class=\"isDark ? 'sl-bg-gray-800/90 sl-text-gray-300' : 'sl-bg-white/90 sl-text-gray-700'\"\n >\n {{ markers.length }} {{ markers.length === 1 ? 'marker' : 'markers' }}\n </div>\n\n <!-- Custom Overlay Slot -->\n <slot name=\"overlay\" :is-dark=\"isDark\" :markers=\"markers\" :clusters=\"clusters\" />\n </template>\n\n <!-- Custom Controls -->\n <template #controls=\"{ isDark }\">\n <div class=\"sl-flex sl-flex-col sl-gap-2\">\n <!-- Zoom Controls -->\n <div \n v-if=\"showDefaultZoomControls\"\n class=\"sl-flex sl-flex-col sl-rounded-lg sl-shadow-md sl-overflow-hidden\"\n :class=\"isDark ? 'sl-bg-gray-800' : 'sl-bg-white'\"\n >\n <button\n @click=\"zoomIn\"\n class=\"sl-w-8 sl-h-8 sl-flex sl-items-center sl-justify-center sl-border-b sl-transition-colors\"\n :class=\"isDark ? 'sl-border-gray-700 hover:sl-bg-gray-700' : 'sl-border-gray-200 hover:sl-bg-gray-50'\"\n title=\"Zoom in\"\n >\n <PlusIcon class=\"sl-w-4 sl-h-4\" :class=\"isDark ? 'sl-text-gray-300' : 'sl-text-gray-600'\" />\n </button>\n <button\n @click=\"zoomOut\"\n class=\"sl-w-8 sl-h-8 sl-flex sl-items-center sl-justify-center sl-transition-colors\"\n :class=\"isDark ? 'hover:sl-bg-gray-700' : 'hover:sl-bg-gray-50'\"\n title=\"Zoom out\"\n >\n <MinusIcon class=\"sl-w-4 sl-h-4\" :class=\"isDark ? 'sl-text-gray-300' : 'sl-text-gray-600'\" />\n </button>\n </div>\n\n <!-- Fit to Markers Button -->\n <button\n v-if=\"showFitButton && markers.length > 0\"\n @click=\"fitToAllMarkers\"\n class=\"sl-w-8 sl-h-8 sl-flex sl-items-center sl-justify-center sl-rounded-lg sl-shadow-md sl-transition-colors\"\n :class=\"isDark ? 'sl-bg-gray-800 hover:sl-bg-gray-700' : 'sl-bg-white hover:sl-bg-gray-50'\"\n title=\"Fit to all markers\"\n >\n <ArrowsPointingOutIcon class=\"sl-w-4 sl-h-4\" :class=\"isDark ? 'sl-text-gray-300' : 'sl-text-gray-600'\" />\n </button>\n\n <!-- Custom Controls Slot -->\n <slot name=\"controls\" :is-dark=\"isDark\" />\n </div>\n </template>\n </UiMap>\n\n <!-- Info Window Modal -->\n <UiInfoWindow\n v-model:visible=\"infoWindow.visible\"\n :loading=\"infoWindow.loading\"\n :error=\"infoWindow.error\"\n :title=\"infoWindow.title\"\n :subtitle=\"infoWindow.subtitle\"\n :image-url=\"infoWindow.imageUrl\"\n :details=\"infoWindow.details\"\n :actions=\"infoWindow.actions\"\n :data=\"(infoWindow.data as Record<string, any> | undefined)\"\n :show-avatar=\"showInfoAvatar\"\n @close=\"closeInfoWindow\"\n @retry=\"retryInfoWindow\"\n @action=\"handleInfoAction\"\n >\n <slot \n name=\"info-content\" \n :data=\"infoWindow.data\" \n :marker=\"selectedMarker\"\n />\n <template #footer>\n <slot \n name=\"info-footer\" \n :data=\"infoWindow.data\" \n :marker=\"selectedMarker\"\n />\n </template>\n </UiInfoWindow>\n</template>\n\n<script setup lang=\"ts\">\n/// <reference types=\"@types/google.maps\" />\n/**\n * @component UiMapAll\n * @description A full-featured map component with markers, clustering, and info windows\n * \n * Supports:\n * - Multiple markers with clustering\n * - Dark/light mode\n * - Info window modals\n * - Custom marker styling\n * - Data loading states\n * - Automatic bounds fitting\n */\n\nimport { ref, computed, watch, onMounted, type PropType } from 'vue';\nimport { PlusIcon, MinusIcon, ArrowsPointingOutIcon } from '@heroicons/vue/24/outline';\nimport UiMap from './UiMap.vue';\nimport UiMapMarker from './UiMapMarker.vue';\nimport UiInfoWindow from './UiInfoWindow.vue';\nimport { useMap } from '../../composables/useMap';\nimport type { \n LatLngLiteral, \n LatLngBoundsLiteral, \n MapMarker, \n MapCluster,\n MapTheme,\n MapMarkerIcon,\n InfoWindowContent,\n ClusteringOptions,\n CoordinateExtractor,\n} from '../../types/maps';\nimport { getClusterColor } from '../../utils/mapThemes';\n\n// Props\nconst props = defineProps({\n /** Google Maps API key */\n apiKey: {\n type: String,\n default: '',\n },\n /** Array of markers or data objects */\n items: {\n type: Array as PropType<MapMarker[] | Record<string, unknown>[]>,\n default: () => [],\n },\n /** Custom coordinate extractor for data objects */\n coordinateExtractor: {\n type: Function as PropType<CoordinateExtractor<Record<string, unknown>>>,\n default: undefined,\n },\n /** ID field for data objects */\n idField: {\n type: String,\n default: 'id',\n },\n /** Title field for data objects */\n titleField: {\n type: String,\n default: 'name',\n },\n /** Initial map center */\n center: {\n type: Object as PropType<LatLngLiteral>,\n default: () => ({ lat: 39.8283, lng: -98.5795 }), // US center\n },\n /** Initial zoom level */\n zoom: {\n type: Number,\n default: 4,\n },\n /** Map width */\n width: {\n type: String,\n default: '100%',\n },\n /** Map height */\n height: {\n type: String,\n default: '400px',\n },\n /** Map theme */\n theme: {\n type: String as PropType<MapTheme>,\n default: 'ultraLight',\n },\n /** Auto-switch theme based on dark mode */\n autoTheme: {\n type: Boolean,\n default: true,\n },\n /** Enable clustering */\n enableClustering: {\n type: Boolean,\n default: true,\n },\n /** Clustering options */\n clusteringOptions: {\n type: Object as PropType<ClusteringOptions>,\n default: () => ({\n minimumClusterSize: 2,\n maxZoom: 15,\n gridSize: 60,\n maxMarkersWithoutClustering: 100,\n }),\n },\n /** Maximum markers to render */\n maxMarkers: {\n type: Number,\n default: 500,\n },\n /** Marker color */\n markerColor: {\n type: String,\n default: 'primary',\n },\n /** Marker size */\n markerSize: {\n type: String as PropType<'sm' | 'md' | 'lg'>,\n default: 'md',\n },\n /** Use pin-style markers */\n pinMarkers: {\n type: Boolean,\n default: false,\n },\n /** Custom marker icon */\n markerIcon: {\n type: Object as PropType<MapMarkerIcon>,\n default: undefined,\n },\n /** Show info window on marker click */\n showInfoWindow: {\n type: Boolean,\n default: true,\n },\n /** Show avatar in info window */\n showInfoAvatar: {\n type: Boolean,\n default: true,\n },\n /** Info window actions */\n infoActions: {\n type: Array as PropType<InfoWindowContent['actions']>,\n default: () => [],\n },\n /** Info window field mapping */\n infoFields: {\n type: Array as PropType<Array<{ field: string; label: string; type?: string }>>,\n default: () => [],\n },\n /** Data loading state */\n isDataLoading: {\n type: Boolean,\n default: false,\n },\n /** Data loading text */\n dataLoadingText: {\n type: String,\n default: 'Loading data...',\n },\n /** Show marker count badge */\n showMarkerCount: {\n type: Boolean,\n default: false,\n },\n /** Show controls */\n showControls: {\n type: Boolean,\n default: true,\n },\n /** Show default zoom controls */\n showDefaultZoomControls: {\n type: Boolean,\n default: true,\n },\n /** Show fit to markers button */\n showFitButton: {\n type: Boolean,\n default: true,\n },\n /** Controls position */\n controlsPosition: {\n type: String as PropType<'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'>,\n default: 'bottom-left',\n },\n /** Auto fit to markers on load */\n autoFit: {\n type: Boolean,\n default: false,\n },\n /** Fit padding */\n fitPadding: {\n type: Number,\n default: 50,\n },\n});\n\n// Emits\nconst emit = defineEmits<{\n (e: 'marker-click', payload: { marker: MapMarker; position: LatLngLiteral }): void;\n (e: 'cluster-click', payload: { cluster: MapCluster; markers: MapMarker[] }): void;\n (e: 'info-action', payload: { action: string; data?: unknown; marker?: MapMarker }): void;\n (e: 'ready', payload: { map: google.maps.Map }): void;\n (e: 'error', payload: { message: string; error?: Error }): void;\n (e: 'update:visible-markers', markers: MapMarker[]): void;\n (e: 'update:center', center: LatLngLiteral): void;\n (e: 'update:zoom', zoom: number): void;\n}>();\n\n// Use map composable for clustering\nconst {\n markers: processedMarkers,\n clusters,\n shouldShowClusters,\n processMarkers,\n markersFromData,\n} = useMap({\n clustering: props.enableClustering ? {\n enabled: true,\n ...props.clusteringOptions,\n } : { enabled: false },\n});\n\n// Refs\nconst mapRef = ref<InstanceType<typeof UiMap> | null>(null);\nconst internalCenter = ref<LatLngLiteral>(props.center);\nconst internalZoom = ref<number>(props.zoom);\nconst currentBounds = ref<LatLngBoundsLiteral | null>(null);\nconst selectedMarker = ref<MapMarker | null>(null);\nconst mapInstance = ref<google.maps.Map | null>(null);\nconst isMapReady = ref(false);\n\n// Info window state\nconst infoWindow = ref({\n visible: false,\n loading: false,\n error: null as string | null,\n title: '',\n subtitle: '',\n imageUrl: '',\n details: [] as InfoWindowContent['details'],\n actions: [] as InfoWindowContent['actions'],\n data: undefined as unknown,\n});\n\n// Computed\nconst mapProps = computed(() => ({\n apiKey: props.apiKey,\n center: props.center,\n zoom: props.zoom,\n width: props.width,\n height: props.height,\n theme: props.theme,\n autoTheme: props.autoTheme,\n}));\n\nconst markers = computed<MapMarker[]>(() => {\n if (!props.items.length) return [];\n \n // Check if items are already MapMarker objects\n const firstItem = props.items[0];\n if ('position' in firstItem && 'id' in firstItem) {\n return props.items as MapMarker[];\n }\n \n // Convert data objects to markers\n return markersFromData(\n props.items as Record<string, unknown>[],\n props.coordinateExtractor,\n props.idField as keyof Record<string, unknown>\n ).slice(0, props.maxMarkers);\n});\n\nconst visibleMarkers = computed<MapMarker[]>(() => {\n // When clustering is active, show only non-clustered markers\n if (shouldShowClusters.value && props.enableClustering) {\n const clusteredIds = new Set<string | number>();\n clusters.value.forEach(cluster => {\n cluster.markers.forEach(m => clusteredIds.add(m.id));\n });\n return markers.value.filter(m => !clusteredIds.has(m.id)).slice(0, props.maxMarkers);\n }\n \n // Filter by bounds if available\n if (currentBounds.value) {\n return markers.value.filter(m => {\n const { lat, lng } = m.position;\n const b = currentBounds.value!;\n return lat >= b.south && lat <= b.north && lng >= b.west && lng <= b.east;\n }).slice(0, props.maxMarkers);\n }\n \n return markers.value.slice(0, props.maxMarkers);\n});\n\n// Methods\nfunction handleMapReady(payload: { map: google.maps.Map }) {\n mapInstance.value = payload.map;\n isMapReady.value = true;\n emit('ready', payload);\n \n // Auto fit to markers\n if (props.autoFit && markers.value.length > 0) {\n setTimeout(() => fitToAllMarkers(), 100);\n }\n}\n\nfunction handleMapClick() {\n closeInfoWindow();\n}\n\nfunction handleBoundsChanged(payload: { bounds: LatLngBoundsLiteral }) {\n currentBounds.value = payload.bounds;\n \n // Re-process markers for clustering\n if (props.enableClustering) {\n processMarkers(internalZoom.value, payload.bounds);\n }\n \n // Emit visible markers update\n emit('update:visible-markers', visibleMarkers.value);\n}\n\nfunction handleZoomChanged(payload: { zoom: number }) {\n internalZoom.value = payload.zoom;\n emit('update:zoom', payload.zoom);\n \n // Re-process markers for clustering\n if (props.enableClustering && currentBounds.value) {\n processMarkers(payload.zoom, currentBounds.value);\n }\n}\n\nfunction handleIdle() {\n // Update bounds when map becomes idle\n if (mapRef.value) {\n const bounds = mapRef.value.getBounds?.();\n if (bounds) {\n currentBounds.value = bounds;\n }\n }\n}\n\nfunction handleError(payload: { message: string; error?: Error }) {\n emit('error', payload);\n}\n\nfunction handleMarkerClick(payload: { marker: MapMarker; position: LatLngLiteral }) {\n emit('marker-click', payload);\n \n if (props.showInfoWindow) {\n selectedMarker.value = payload.marker;\n showMarkerInfo(payload.marker);\n }\n}\n\nfunction handleClusterClick(cluster: MapCluster, map: google.maps.Map) {\n emit('cluster-click', { cluster, markers: cluster.markers });\n \n // Zoom to cluster bounds\n const bounds = new google.maps.LatLngBounds();\n cluster.markers.forEach(m => bounds.extend(m.position));\n map.fitBounds(bounds, props.fitPadding);\n}\n\nfunction showMarkerInfo(marker: MapMarker) {\n const data = marker.data as Record<string, unknown> | undefined;\n \n infoWindow.value = {\n visible: true,\n loading: false,\n error: null,\n title: marker.title || (data?.[props.titleField] as string) || 'Details',\n subtitle: (data?.subtitle as string) || '',\n imageUrl: (data?.imageUrl as string) || (data?.profile_image as string) || (data?.image as string) || '',\n details: props.infoFields.length > 0 \n ? props.infoFields.map(field => ({\n label: field.label,\n value: data?.[field.field] as string || '',\n type: field.type as 'text' | 'email' | 'phone' | 'link' | 'address',\n }))\n : [],\n actions: props.infoActions,\n data: marker.data,\n };\n}\n\nfunction closeInfoWindow() {\n infoWindow.value.visible = false;\n selectedMarker.value = null;\n}\n\nfunction retryInfoWindow() {\n if (selectedMarker.value) {\n showMarkerInfo(selectedMarker.value);\n }\n}\n\nfunction handleInfoAction(payload: { action: string; data?: unknown }) {\n emit('info-action', { ...payload, marker: selectedMarker.value || undefined });\n}\n\nfunction getClusterIcon(cluster: MapCluster): MapMarkerIcon {\n const size = Math.min(20 + Math.log(cluster.size) * 5, 40);\n return {\n path: 0, // google.maps.SymbolPath.CIRCLE\n scale: size,\n fillColor: getClusterColor(cluster.size),\n fillOpacity: 0.8,\n strokeColor: '#ffffff',\n strokeWeight: 2,\n };\n}\n\nfunction zoomIn() {\n if (mapRef.value) {\n const currentZoom = internalZoom.value;\n mapRef.value.setZoom?.(Math.min(currentZoom + 1, 21));\n }\n}\n\nfunction zoomOut() {\n if (mapRef.value) {\n const currentZoom = internalZoom.value;\n mapRef.value.setZoom?.(Math.max(currentZoom - 1, 1));\n }\n}\n\nfunction fitToAllMarkers() {\n if (!mapInstance.value || markers.value.length === 0) return;\n \n const bounds = new google.maps.LatLngBounds();\n markers.value.forEach(m => bounds.extend(m.position));\n mapInstance.value.fitBounds(bounds, props.fitPadding);\n}\n\n// Watch for items changes\nwatch(() => props.items, () => {\n // Update processed markers\n processedMarkers.value = markers.value;\n \n // Re-process clustering\n if (props.enableClustering && currentBounds.value) {\n processMarkers(internalZoom.value, currentBounds.value);\n }\n \n // Auto fit if enabled\n if (props.autoFit && isMapReady.value && markers.value.length > 0) {\n fitToAllMarkers();\n }\n}, { deep: true });\n\n// Watch for center/zoom props changes\nwatch(() => props.center, (newCenter) => {\n internalCenter.value = newCenter;\n emit('update:center', newCenter);\n});\n\nwatch(() => props.zoom, (newZoom) => {\n internalZoom.value = newZoom;\n emit('update:zoom', newZoom);\n});\n\n// Initialize clustering on mount\nonMounted(() => {\n processedMarkers.value = markers.value;\n});\n\n// Expose methods\ndefineExpose({\n getMap: () => mapInstance.value,\n fitToMarkers: fitToAllMarkers,\n zoomIn,\n zoomOut,\n panTo: (position: LatLngLiteral) => mapInstance.value?.panTo(position),\n setZoom: (zoom: number) => mapInstance.value?.setZoom(zoom),\n closeInfoWindow,\n getMarkers: () => markers.value,\n getVisibleMarkers: () => visibleMarkers.value,\n getClusters: () => clusters.value,\n});\n</script>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","props","__props","emit","__emit","processedMarkers","clusters","shouldShowClusters","processMarkers","markersFromData","useMap","mapRef","ref","internalCenter","internalZoom","currentBounds","selectedMarker","mapInstance","isMapReady","infoWindow","mapProps","computed","markers","firstItem","visibleMarkers","clusteredIds","cluster","m","lat","lng","b","handleMapReady","payload","fitToAllMarkers","handleMapClick","closeInfoWindow","handleBoundsChanged","handleZoomChanged","handleIdle","bounds","handleError","handleMarkerClick","showMarkerInfo","handleClusterClick","map","marker","data","field","retryInfoWindow","handleInfoAction","getClusterIcon","getClusterColor","zoomIn","currentZoom","zoomOut","watch","newCenter","newZoom","onMounted","__expose","position","zoom","_createVNode","UiMap","_mergeProps","$event","_withCtx","ready","_Fragment","_unref","_renderList","_createBlock","UiMapMarker","isDark","_normalizeClass","_toDisplayString","_renderSlot","_hoisted_1","PlusIcon","MinusIcon","ArrowsPointingOutIcon","UiInfoWindow"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,330 +0,0 @@
1
- import { createElementBlock as P, openBlock as y, createElementVNode as A, defineComponent as T, ref as w, computed as k, provide as G, onMounted as H, onUnmounted as J, watchEffect as W, nextTick as S, inject as X, createBlock as B, unref as M, withCtx as R, createVNode as D, normalizeClass as _, renderSlot as $, Transition as Y, Fragment as L, renderList as j, createCommentVNode as K, resolveDynamicComponent as ee, toDisplayString as V } from "vue";
2
- import { o as m, u as te, A as O, i as F, N as U } from "./render-QUUPyNjX.js";
3
- import { w as le, a as ae, O as se, h as re, v as ne, N as Z, _ as q } from "./use-outside-click-14T0Zn98.js";
4
- import { s as oe } from "./use-resolve-button-type-h6n-lm9q.js";
5
- import { p as ue } from "./use-text-value-DKnkjK00.js";
6
- import { u as ie, f as de, c as I } from "./calculate-active-index-Dim3sT-5.js";
7
- import { i as ce } from "./use-tree-walker-Bo9gIb_K.js";
8
- import { t as pe, l as fe, i as E } from "./open-closed-JTEvYTg2.js";
9
- import { o as p } from "./keyboard-Dd_2-cFu.js";
10
- function ve(l, g) {
11
- return y(), P("svg", {
12
- xmlns: "http://www.w3.org/2000/svg",
13
- viewBox: "0 0 20 20",
14
- fill: "currentColor",
15
- "aria-hidden": "true",
16
- "data-slot": "icon"
17
- }, [
18
- A("path", { d: "M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z" })
19
- ]);
20
- }
21
- var me = ((l) => (l[l.Open = 0] = "Open", l[l.Closed = 1] = "Closed", l))(me || {}), ge = ((l) => (l[l.Pointer = 0] = "Pointer", l[l.Other = 1] = "Other", l))(ge || {});
22
- function be(l) {
23
- requestAnimationFrame(() => requestAnimationFrame(l));
24
- }
25
- let z = Symbol("MenuContext");
26
- function N(l) {
27
- let g = X(z, null);
28
- if (g === null) {
29
- let c = new Error(`<${l} /> is missing a parent <Menu /> component.`);
30
- throw Error.captureStackTrace && Error.captureStackTrace(c, N), c;
31
- }
32
- return g;
33
- }
34
- let he = T({ name: "Menu", props: { as: { type: [Object, String], default: "template" } }, setup(l, { slots: g, attrs: c }) {
35
- let b = w(1), h = w(null), f = w(null), t = w([]), u = w(""), s = w(null), d = w(1);
36
- function v(e = (a) => a) {
37
- let a = s.value !== null ? t.value[s.value] : null, r = se(e(t.value.slice()), (x) => m(x.dataRef.domRef)), o = a ? r.indexOf(a) : null;
38
- return o === -1 && (o = null), { items: r, activeItemIndex: o };
39
- }
40
- let n = { menuState: b, buttonRef: h, itemsRef: f, items: t, searchQuery: u, activeItemIndex: s, activationTrigger: d, closeMenu: () => {
41
- b.value = 1, s.value = null;
42
- }, openMenu: () => b.value = 0, goToItem(e, a, r) {
43
- let o = v(), x = de(e === I.Specific ? { focus: I.Specific, id: a } : { focus: e }, { resolveItems: () => o.items, resolveActiveIndex: () => o.activeItemIndex, resolveId: (i) => i.id, resolveDisabled: (i) => i.dataRef.disabled });
44
- u.value = "", s.value = x, d.value = r ?? 1, t.value = o.items;
45
- }, search(e) {
46
- let a = u.value !== "" ? 0 : 1;
47
- u.value += e.toLowerCase();
48
- let r = (s.value !== null ? t.value.slice(s.value + a).concat(t.value.slice(0, s.value + a)) : t.value).find((x) => x.dataRef.textValue.startsWith(u.value) && !x.dataRef.disabled), o = r ? t.value.indexOf(r) : -1;
49
- o === -1 || o === s.value || (s.value = o, d.value = 1);
50
- }, clearSearch() {
51
- u.value = "";
52
- }, registerItem(e, a) {
53
- let r = v((o) => [...o, { id: e, dataRef: a }]);
54
- t.value = r.items, s.value = r.activeItemIndex, d.value = 1;
55
- }, unregisterItem(e) {
56
- let a = v((r) => {
57
- let o = r.findIndex((x) => x.id === e);
58
- return o !== -1 && r.splice(o, 1), r;
59
- });
60
- t.value = a.items, s.value = a.activeItemIndex, d.value = 1;
61
- } };
62
- return le([h, f], (e, a) => {
63
- var r;
64
- n.closeMenu(), ae(a, re.Loose) || (e.preventDefault(), (r = m(h)) == null || r.focus());
65
- }, k(() => b.value === 0)), G(z, n), pe(k(() => te(b.value, { 0: E.Open, 1: E.Closed }))), () => {
66
- let e = { open: b.value === 0, close: n.closeMenu };
67
- return O({ ourProps: {}, theirProps: l, slot: e, slots: g, attrs: c, name: "Menu" });
68
- };
69
- } }), xe = T({ name: "MenuButton", props: { disabled: { type: Boolean, default: !1 }, as: { type: [Object, String], default: "button" }, id: { type: String, default: null } }, setup(l, { attrs: g, slots: c, expose: b }) {
70
- var h;
71
- let f = (h = l.id) != null ? h : `headlessui-menu-button-${F()}`, t = N("MenuButton");
72
- b({ el: t.buttonRef, $el: t.buttonRef });
73
- function u(n) {
74
- switch (n.key) {
75
- case p.Space:
76
- case p.Enter:
77
- case p.ArrowDown:
78
- n.preventDefault(), n.stopPropagation(), t.openMenu(), S(() => {
79
- var e;
80
- (e = m(t.itemsRef)) == null || e.focus({ preventScroll: !0 }), t.goToItem(I.First);
81
- });
82
- break;
83
- case p.ArrowUp:
84
- n.preventDefault(), n.stopPropagation(), t.openMenu(), S(() => {
85
- var e;
86
- (e = m(t.itemsRef)) == null || e.focus({ preventScroll: !0 }), t.goToItem(I.Last);
87
- });
88
- break;
89
- }
90
- }
91
- function s(n) {
92
- switch (n.key) {
93
- case p.Space:
94
- n.preventDefault();
95
- break;
96
- }
97
- }
98
- function d(n) {
99
- l.disabled || (t.menuState.value === 0 ? (t.closeMenu(), S(() => {
100
- var e;
101
- return (e = m(t.buttonRef)) == null ? void 0 : e.focus({ preventScroll: !0 });
102
- })) : (n.preventDefault(), t.openMenu(), be(() => {
103
- var e;
104
- return (e = m(t.itemsRef)) == null ? void 0 : e.focus({ preventScroll: !0 });
105
- })));
106
- }
107
- let v = oe(k(() => ({ as: l.as, type: g.type })), t.buttonRef);
108
- return () => {
109
- var n;
110
- let e = { open: t.menuState.value === 0 }, { ...a } = l, r = { ref: t.buttonRef, id: f, type: v.value, "aria-haspopup": "menu", "aria-controls": (n = m(t.itemsRef)) == null ? void 0 : n.id, "aria-expanded": t.menuState.value === 0, onKeydown: u, onKeyup: s, onClick: d };
111
- return O({ ourProps: r, theirProps: a, slot: e, attrs: g, slots: c, name: "MenuButton" });
112
- };
113
- } }), Ie = T({ name: "MenuItems", props: { as: { type: [Object, String], default: "div" }, static: { type: Boolean, default: !1 }, unmount: { type: Boolean, default: !0 }, id: { type: String, default: null } }, setup(l, { attrs: g, slots: c, expose: b }) {
114
- var h;
115
- let f = (h = l.id) != null ? h : `headlessui-menu-items-${F()}`, t = N("MenuItems"), u = w(null);
116
- b({ el: t.itemsRef, $el: t.itemsRef }), ce({ container: k(() => m(t.itemsRef)), enabled: k(() => t.menuState.value === 0), accept(e) {
117
- return e.getAttribute("role") === "menuitem" ? NodeFilter.FILTER_REJECT : e.hasAttribute("role") ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
118
- }, walk(e) {
119
- e.setAttribute("role", "none");
120
- } });
121
- function s(e) {
122
- var a;
123
- switch (u.value && clearTimeout(u.value), e.key) {
124
- case p.Space:
125
- if (t.searchQuery.value !== "") return e.preventDefault(), e.stopPropagation(), t.search(e.key);
126
- case p.Enter:
127
- if (e.preventDefault(), e.stopPropagation(), t.activeItemIndex.value !== null) {
128
- let r = t.items.value[t.activeItemIndex.value];
129
- (a = m(r.dataRef.domRef)) == null || a.click();
130
- }
131
- t.closeMenu(), q(m(t.buttonRef));
132
- break;
133
- case p.ArrowDown:
134
- return e.preventDefault(), e.stopPropagation(), t.goToItem(I.Next);
135
- case p.ArrowUp:
136
- return e.preventDefault(), e.stopPropagation(), t.goToItem(I.Previous);
137
- case p.Home:
138
- case p.PageUp:
139
- return e.preventDefault(), e.stopPropagation(), t.goToItem(I.First);
140
- case p.End:
141
- case p.PageDown:
142
- return e.preventDefault(), e.stopPropagation(), t.goToItem(I.Last);
143
- case p.Escape:
144
- e.preventDefault(), e.stopPropagation(), t.closeMenu(), S(() => {
145
- var r;
146
- return (r = m(t.buttonRef)) == null ? void 0 : r.focus({ preventScroll: !0 });
147
- });
148
- break;
149
- case p.Tab:
150
- e.preventDefault(), e.stopPropagation(), t.closeMenu(), S(() => ne(m(t.buttonRef), e.shiftKey ? Z.Previous : Z.Next));
151
- break;
152
- default:
153
- e.key.length === 1 && (t.search(e.key), u.value = setTimeout(() => t.clearSearch(), 350));
154
- break;
155
- }
156
- }
157
- function d(e) {
158
- switch (e.key) {
159
- case p.Space:
160
- e.preventDefault();
161
- break;
162
- }
163
- }
164
- let v = fe(), n = k(() => v !== null ? (v.value & E.Open) === E.Open : t.menuState.value === 0);
165
- return () => {
166
- var e, a;
167
- let r = { open: t.menuState.value === 0 }, { ...o } = l, x = { "aria-activedescendant": t.activeItemIndex.value === null || (e = t.items.value[t.activeItemIndex.value]) == null ? void 0 : e.id, "aria-labelledby": (a = m(t.buttonRef)) == null ? void 0 : a.id, id: f, onKeydown: s, onKeyup: d, role: "menu", tabIndex: 0, ref: t.itemsRef };
168
- return O({ ourProps: x, theirProps: o, slot: r, attrs: g, slots: c, features: U.RenderStrategy | U.Static, visible: n.value, name: "MenuItems" });
169
- };
170
- } }), ke = T({ name: "MenuItem", inheritAttrs: !1, props: { as: { type: [Object, String], default: "template" }, disabled: { type: Boolean, default: !1 }, id: { type: String, default: null } }, setup(l, { slots: g, attrs: c, expose: b }) {
171
- var h;
172
- let f = (h = l.id) != null ? h : `headlessui-menu-item-${F()}`, t = N("MenuItem"), u = w(null);
173
- b({ el: u, $el: u });
174
- let s = k(() => t.activeItemIndex.value !== null ? t.items.value[t.activeItemIndex.value].id === f : !1), d = ue(u), v = k(() => ({ disabled: l.disabled, get textValue() {
175
- return d();
176
- }, domRef: u }));
177
- H(() => t.registerItem(f, v)), J(() => t.unregisterItem(f)), W(() => {
178
- t.menuState.value === 0 && s.value && t.activationTrigger.value !== 0 && S(() => {
179
- var i, C;
180
- return (C = (i = m(u)) == null ? void 0 : i.scrollIntoView) == null ? void 0 : C.call(i, { block: "nearest" });
181
- });
182
- });
183
- function n(i) {
184
- if (l.disabled) return i.preventDefault();
185
- t.closeMenu(), q(m(t.buttonRef));
186
- }
187
- function e() {
188
- if (l.disabled) return t.goToItem(I.Nothing);
189
- t.goToItem(I.Specific, f);
190
- }
191
- let a = ie();
192
- function r(i) {
193
- a.update(i);
194
- }
195
- function o(i) {
196
- a.wasMoved(i) && (l.disabled || s.value || t.goToItem(I.Specific, f, 0));
197
- }
198
- function x(i) {
199
- a.wasMoved(i) && (l.disabled || s.value && t.goToItem(I.Nothing));
200
- }
201
- return () => {
202
- let { disabled: i, ...C } = l, Q = { active: s.value, disabled: i, close: t.closeMenu };
203
- return O({ ourProps: { id: f, ref: u, role: "menuitem", tabIndex: i === !0 ? void 0 : -1, "aria-disabled": i === !0 ? !0 : void 0, onClick: n, onFocus: e, onPointerenter: r, onMouseenter: r, onPointermove: o, onMousemove: o, onPointerleave: x, onMouseleave: x }, theirProps: { ...c, ...C }, slot: Q, attrs: c, slots: g, name: "MenuItem" });
204
- };
205
- } });
206
- const we = ["onClick"], ye = { class: "sl-flex-1 sl-text-left" }, Se = {
207
- key: 1,
208
- class: "sl-text-xs sl-text-slate-400 dark:sl-text-slate-500"
209
- }, Me = "sl-p-2 sl-text-slate-500 dark:sl-text-slate-300 hover:sl-bg-slate-100 dark:hover:sl-bg-slate-700 hover:sl-text-slate-700 dark:hover:sl-text-white", Ne = /* @__PURE__ */ T({
210
- __name: "UiMenu",
211
- props: {
212
- items: { default: () => [] },
213
- placement: { default: "right" },
214
- width: { default: "md" },
215
- disabled: { type: Boolean, default: !1 }
216
- },
217
- emits: ["item-click"],
218
- setup(l, { emit: g }) {
219
- const c = l, b = g, h = k(() => c.placement === "left" ? "sl-left-0" : "sl-right-0"), f = k(() => ({
220
- auto: "sl-w-auto sl-min-w-[10rem]",
221
- sm: "sl-w-40",
222
- md: "sl-w-56",
223
- lg: "sl-w-72",
224
- full: "sl-w-full"
225
- })[c.width]), t = k(() => {
226
- if (!c.items.length) return [];
227
- const s = [];
228
- let d = [];
229
- for (const v of c.items)
230
- d.push(v), v.dividerAfter && (s.push(d), d = []);
231
- return d.length && s.push(d), s;
232
- }), u = (s) => {
233
- s.disabled || (s.action && s.action(), b("item-click", s));
234
- };
235
- return (s, d) => (y(), B(M(he), {
236
- as: "div",
237
- class: "sl-relative sl-inline-block sl-text-left"
238
- }, {
239
- default: R(() => [
240
- A("div", null, [
241
- D(M(xe), {
242
- disabled: l.disabled,
243
- class: _([
244
- "sl-inline-flex sl-items-center sl-justify-center sl-rounded-lg sl-transition-colors",
245
- l.disabled ? "sl-opacity-50 sl-cursor-not-allowed" : "sl-cursor-pointer",
246
- !s.$slots.trigger && Me
247
- ])
248
- }, {
249
- default: R(() => [
250
- $(s.$slots, "trigger", {}, () => [
251
- D(M(ve), {
252
- class: "sl-h-5 sl-w-5",
253
- "aria-hidden": "true"
254
- })
255
- ])
256
- ]),
257
- _: 3
258
- }, 8, ["disabled", "class"])
259
- ]),
260
- D(Y, {
261
- "enter-active-class": "sl-transition sl-duration-100 sl-ease-out",
262
- "enter-from-class": "sl-transform sl-scale-95 sl-opacity-0",
263
- "enter-to-class": "sl-transform sl-scale-100 sl-opacity-100",
264
- "leave-active-class": "sl-transition sl-duration-75 sl-ease-in",
265
- "leave-from-class": "sl-transform sl-scale-100 sl-opacity-100",
266
- "leave-to-class": "sl-transform sl-scale-95 sl-opacity-0"
267
- }, {
268
- default: R(() => [
269
- D(M(Ie), {
270
- class: _([
271
- "sl-absolute sl-z-50 sl-mt-2 sl-origin-top-right sl-rounded-xl sl-bg-white dark:sl-bg-slate-800 sl-shadow-lg dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black/5 dark:sl-ring-slate-700 sl-focus:outline-none sl-py-1 sl-divide-y sl-divide-slate-100 dark:sl-divide-slate-700",
272
- h.value,
273
- f.value
274
- ])
275
- }, {
276
- default: R(() => [
277
- (y(!0), P(L, null, j(t.value, (v, n) => (y(), P("div", {
278
- key: n,
279
- class: "sl-py-1"
280
- }, [
281
- (y(!0), P(L, null, j(v, (e) => (y(), B(M(ke), {
282
- key: e.label,
283
- disabled: e.disabled
284
- }, {
285
- default: R(({ active: a, disabled: r }) => [
286
- A("button", {
287
- onClick: (o) => u(e),
288
- class: _([
289
- "sl-group sl-flex sl-w-full sl-items-center sl-gap-3 sl-px-4 sl-py-2.5 sl-text-sm sl-transition-colors",
290
- a && !e.danger ? "sl-bg-slate-100 dark:sl-bg-slate-700 sl-text-slate-900 dark:sl-text-white" : "",
291
- a && e.danger ? "sl-bg-red-50 dark:sl-bg-red-900/30 sl-text-red-700 dark:sl-text-red-400" : "",
292
- !a && e.danger ? "sl-text-red-600 dark:sl-text-red-400" : "",
293
- !a && !e.danger ? "sl-text-slate-700 dark:sl-text-slate-200" : "",
294
- r ? "sl-opacity-50 sl-cursor-not-allowed" : "sl-cursor-pointer"
295
- ])
296
- }, [
297
- e.icon ? (y(), B(ee(e.icon), {
298
- key: 0,
299
- class: _([
300
- "sl-h-4 sl-w-4 sl-flex-shrink-0",
301
- a && !e.danger ? "sl-text-slate-500 dark:sl-text-slate-300" : "",
302
- a && e.danger ? "sl-text-red-500 dark:sl-text-red-400" : "",
303
- !a && e.danger ? "sl-text-red-400 dark:sl-text-red-500" : "",
304
- !a && !e.danger ? "sl-text-slate-400 dark:sl-text-slate-500" : ""
305
- ]),
306
- "aria-hidden": "true"
307
- }, null, 8, ["class"])) : K("", !0),
308
- A("span", ye, V(e.label), 1),
309
- e.shortcut ? (y(), P("span", Se, V(e.shortcut), 1)) : K("", !0)
310
- ], 10, we)
311
- ]),
312
- _: 2
313
- }, 1032, ["disabled"]))), 128))
314
- ]))), 128)),
315
- $(s.$slots, "default")
316
- ]),
317
- _: 3
318
- }, 8, ["class"])
319
- ]),
320
- _: 3
321
- })
322
- ]),
323
- _: 3
324
- }));
325
- }
326
- });
327
- export {
328
- Ne as _
329
- };
330
- //# sourceMappingURL=UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js","sources":["../node_modules/@heroicons/vue/20/solid/esm/EllipsisVerticalIcon.js","../node_modules/@headlessui/vue/dist/components/menu/menu.js","../src/components/UiMenu.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", { d: \"M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z\" })\n ]))\n}","import{computed as y,defineComponent as T,inject as K,nextTick as x,onMounted as N,onUnmounted as j,provide as L,ref as R,watchEffect as B}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{useOutsideClick as U}from'../../hooks/use-outside-click.js';import{useResolveButtonType as $}from'../../hooks/use-resolve-button-type.js';import{useTextValue as V}from'../../hooks/use-text-value.js';import{useTrackedPointer as H}from'../../hooks/use-tracked-pointer.js';import{useTreeWalker as Q}from'../../hooks/use-tree-walker.js';import{State as D,useOpenClosed as _,useOpenClosedProvider as q}from'../../internal/open-closed.js';import{Keys as c}from'../../keyboard.js';import{calculateActiveIndex as W,Focus as S}from'../../utils/calculate-active-index.js';import{dom as m}from'../../utils/dom.js';import{Focus as E,FocusableMode as J,focusFrom as z,isFocusableElement as G,restoreFocusIfNecessary as k,sortByDomNode as X}from'../../utils/focus-management.js';import{match as Y}from'../../utils/match.js';import{Features as F,render as P}from'../../utils/render.js';var Z=(i=>(i[i.Open=0]=\"Open\",i[i.Closed=1]=\"Closed\",i))(Z||{}),ee=(i=>(i[i.Pointer=0]=\"Pointer\",i[i.Other=1]=\"Other\",i))(ee||{});function te(o){requestAnimationFrame(()=>requestAnimationFrame(o))}let A=Symbol(\"MenuContext\");function O(o){let M=K(A,null);if(M===null){let i=new Error(`<${o} /> is missing a parent <Menu /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(i,O),i}return M}let ge=T({name:\"Menu\",props:{as:{type:[Object,String],default:\"template\"}},setup(o,{slots:M,attrs:i}){let I=R(1),p=R(null),e=R(null),r=R([]),f=R(\"\"),d=R(null),g=R(1);function b(t=a=>a){let a=d.value!==null?r.value[d.value]:null,n=X(t(r.value.slice()),v=>m(v.dataRef.domRef)),s=a?n.indexOf(a):null;return s===-1&&(s=null),{items:n,activeItemIndex:s}}let l={menuState:I,buttonRef:p,itemsRef:e,items:r,searchQuery:f,activeItemIndex:d,activationTrigger:g,closeMenu:()=>{I.value=1,d.value=null},openMenu:()=>I.value=0,goToItem(t,a,n){let s=b(),v=W(t===S.Specific?{focus:S.Specific,id:a}:{focus:t},{resolveItems:()=>s.items,resolveActiveIndex:()=>s.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.disabled});f.value=\"\",d.value=v,g.value=n!=null?n:1,r.value=s.items},search(t){let n=f.value!==\"\"?0:1;f.value+=t.toLowerCase();let v=(d.value!==null?r.value.slice(d.value+n).concat(r.value.slice(0,d.value+n)):r.value).find(h=>h.dataRef.textValue.startsWith(f.value)&&!h.dataRef.disabled),u=v?r.value.indexOf(v):-1;u===-1||u===d.value||(d.value=u,g.value=1)},clearSearch(){f.value=\"\"},registerItem(t,a){let n=b(s=>[...s,{id:t,dataRef:a}]);r.value=n.items,d.value=n.activeItemIndex,g.value=1},unregisterItem(t){let a=b(n=>{let s=n.findIndex(v=>v.id===t);return s!==-1&&n.splice(s,1),n});r.value=a.items,d.value=a.activeItemIndex,g.value=1}};return U([p,e],(t,a)=>{var n;l.closeMenu(),G(a,J.Loose)||(t.preventDefault(),(n=m(p))==null||n.focus())},y(()=>I.value===0)),L(A,l),q(y(()=>Y(I.value,{[0]:D.Open,[1]:D.Closed}))),()=>{let t={open:I.value===0,close:l.closeMenu};return P({ourProps:{},theirProps:o,slot:t,slots:M,attrs:i,name:\"Menu\"})}}}),Se=T({name:\"MenuButton\",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:\"button\"},id:{type:String,default:null}},setup(o,{attrs:M,slots:i,expose:I}){var b;let p=(b=o.id)!=null?b:`headlessui-menu-button-${w()}`,e=O(\"MenuButton\");I({el:e.buttonRef,$el:e.buttonRef});function r(l){switch(l.key){case c.Space:case c.Enter:case c.ArrowDown:l.preventDefault(),l.stopPropagation(),e.openMenu(),x(()=>{var t;(t=m(e.itemsRef))==null||t.focus({preventScroll:!0}),e.goToItem(S.First)});break;case c.ArrowUp:l.preventDefault(),l.stopPropagation(),e.openMenu(),x(()=>{var t;(t=m(e.itemsRef))==null||t.focus({preventScroll:!0}),e.goToItem(S.Last)});break}}function f(l){switch(l.key){case c.Space:l.preventDefault();break}}function d(l){o.disabled||(e.menuState.value===0?(e.closeMenu(),x(()=>{var t;return(t=m(e.buttonRef))==null?void 0:t.focus({preventScroll:!0})})):(l.preventDefault(),e.openMenu(),te(()=>{var t;return(t=m(e.itemsRef))==null?void 0:t.focus({preventScroll:!0})})))}let g=$(y(()=>({as:o.as,type:M.type})),e.buttonRef);return()=>{var n;let l={open:e.menuState.value===0},{...t}=o,a={ref:e.buttonRef,id:p,type:g.value,\"aria-haspopup\":\"menu\",\"aria-controls\":(n=m(e.itemsRef))==null?void 0:n.id,\"aria-expanded\":e.menuState.value===0,onKeydown:r,onKeyup:f,onClick:d};return P({ourProps:a,theirProps:t,slot:l,attrs:M,slots:i,name:\"MenuButton\"})}}}),Me=T({name:\"MenuItems\",props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:null}},setup(o,{attrs:M,slots:i,expose:I}){var l;let p=(l=o.id)!=null?l:`headlessui-menu-items-${w()}`,e=O(\"MenuItems\"),r=R(null);I({el:e.itemsRef,$el:e.itemsRef}),Q({container:y(()=>m(e.itemsRef)),enabled:y(()=>e.menuState.value===0),accept(t){return t.getAttribute(\"role\")===\"menuitem\"?NodeFilter.FILTER_REJECT:t.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(t){t.setAttribute(\"role\",\"none\")}});function f(t){var a;switch(r.value&&clearTimeout(r.value),t.key){case c.Space:if(e.searchQuery.value!==\"\")return t.preventDefault(),t.stopPropagation(),e.search(t.key);case c.Enter:if(t.preventDefault(),t.stopPropagation(),e.activeItemIndex.value!==null){let s=e.items.value[e.activeItemIndex.value];(a=m(s.dataRef.domRef))==null||a.click()}e.closeMenu(),k(m(e.buttonRef));break;case c.ArrowDown:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Next);case c.ArrowUp:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Previous);case c.Home:case c.PageUp:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.First);case c.End:case c.PageDown:return t.preventDefault(),t.stopPropagation(),e.goToItem(S.Last);case c.Escape:t.preventDefault(),t.stopPropagation(),e.closeMenu(),x(()=>{var n;return(n=m(e.buttonRef))==null?void 0:n.focus({preventScroll:!0})});break;case c.Tab:t.preventDefault(),t.stopPropagation(),e.closeMenu(),x(()=>z(m(e.buttonRef),t.shiftKey?E.Previous:E.Next));break;default:t.key.length===1&&(e.search(t.key),r.value=setTimeout(()=>e.clearSearch(),350));break}}function d(t){switch(t.key){case c.Space:t.preventDefault();break}}let g=_(),b=y(()=>g!==null?(g.value&D.Open)===D.Open:e.menuState.value===0);return()=>{var s,v;let t={open:e.menuState.value===0},{...a}=o,n={\"aria-activedescendant\":e.activeItemIndex.value===null||(s=e.items.value[e.activeItemIndex.value])==null?void 0:s.id,\"aria-labelledby\":(v=m(e.buttonRef))==null?void 0:v.id,id:p,onKeydown:f,onKeyup:d,role:\"menu\",tabIndex:0,ref:e.itemsRef};return P({ourProps:n,theirProps:a,slot:t,attrs:M,slots:i,features:F.RenderStrategy|F.Static,visible:b.value,name:\"MenuItems\"})}}}),be=T({name:\"MenuItem\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"template\"},disabled:{type:Boolean,default:!1},id:{type:String,default:null}},setup(o,{slots:M,attrs:i,expose:I}){var v;let p=(v=o.id)!=null?v:`headlessui-menu-item-${w()}`,e=O(\"MenuItem\"),r=R(null);I({el:r,$el:r});let f=y(()=>e.activeItemIndex.value!==null?e.items.value[e.activeItemIndex.value].id===p:!1),d=V(r),g=y(()=>({disabled:o.disabled,get textValue(){return d()},domRef:r}));N(()=>e.registerItem(p,g)),j(()=>e.unregisterItem(p)),B(()=>{e.menuState.value===0&&f.value&&e.activationTrigger.value!==0&&x(()=>{var u,h;return(h=(u=m(r))==null?void 0:u.scrollIntoView)==null?void 0:h.call(u,{block:\"nearest\"})})});function b(u){if(o.disabled)return u.preventDefault();e.closeMenu(),k(m(e.buttonRef))}function l(){if(o.disabled)return e.goToItem(S.Nothing);e.goToItem(S.Specific,p)}let t=H();function a(u){t.update(u)}function n(u){t.wasMoved(u)&&(o.disabled||f.value||e.goToItem(S.Specific,p,0))}function s(u){t.wasMoved(u)&&(o.disabled||f.value&&e.goToItem(S.Nothing))}return()=>{let{disabled:u,...h}=o,C={active:f.value,disabled:u,close:e.closeMenu};return P({ourProps:{id:p,ref:r,role:\"menuitem\",tabIndex:u===!0?void 0:-1,\"aria-disabled\":u===!0?!0:void 0,onClick:b,onFocus:l,onPointerenter:a,onMouseenter:a,onPointermove:n,onMousemove:n,onPointerleave:s,onMouseleave:s},theirProps:{...i,...h},slot:C,attrs:i,slots:M,name:\"MenuItem\"})}}});export{ge as Menu,Se as MenuButton,be as MenuItem,Me as MenuItems};\n","<!--\n @component UiMenu\n @description Dropdown menu using Headless UI for actions and navigation.\n \n @props\n - items: Array of menu items with label, icon, action, etc.\n - placement: Dropdown placement (left, right)\n - width: Menu width (auto, sm, md, lg, full)\n - disabled: Disable the menu trigger\n \n @slots\n - trigger: Custom trigger button content\n - default: Menu items (alternative to items prop)\n \n @example\n <UiMenu :items=\"menuItems\" />\n \n @example Custom trigger\n <UiMenu :items=\"menuItems\">\n <template #trigger>\n <Button>Options</Button>\n </template>\n </UiMenu>\n-->\n<template>\n <Menu as=\"div\" class=\"sl-relative sl-inline-block sl-text-left\">\n <div>\n <MenuButton\n :disabled=\"disabled\"\n :class=\"[\n 'sl-inline-flex sl-items-center sl-justify-center sl-rounded-lg sl-transition-colors',\n disabled ? 'sl-opacity-50 sl-cursor-not-allowed' : 'sl-cursor-pointer',\n !$slots.trigger && defaultTriggerClasses\n ]\"\n >\n <slot name=\"trigger\">\n <EllipsisVerticalIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </slot>\n </MenuButton>\n </div>\n\n <transition\n enter-active-class=\"sl-transition sl-duration-100 sl-ease-out\"\n enter-from-class=\"sl-transform sl-scale-95 sl-opacity-0\"\n enter-to-class=\"sl-transform sl-scale-100 sl-opacity-100\"\n leave-active-class=\"sl-transition sl-duration-75 sl-ease-in\"\n leave-from-class=\"sl-transform sl-scale-100 sl-opacity-100\"\n leave-to-class=\"sl-transform sl-scale-95 sl-opacity-0\"\n >\n <MenuItems\n :class=\"[\n 'sl-absolute sl-z-50 sl-mt-2 sl-origin-top-right sl-rounded-xl sl-bg-white dark:sl-bg-slate-800 sl-shadow-lg dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black/5 dark:sl-ring-slate-700 sl-focus:outline-none sl-py-1 sl-divide-y sl-divide-slate-100 dark:sl-divide-slate-700',\n placementClasses,\n widthClasses\n ]\"\n >\n <!-- Grouped items -->\n <div v-for=\"(group, groupIndex) in groupedItems\" :key=\"groupIndex\" class=\"sl-py-1\">\n <MenuItem\n v-for=\"item in group\"\n :key=\"item.label\"\n :disabled=\"item.disabled\"\n v-slot=\"{ active, disabled: itemDisabled }\"\n >\n <button\n @click=\"handleItemClick(item)\"\n :class=\"[\n 'sl-group sl-flex sl-w-full sl-items-center sl-gap-3 sl-px-4 sl-py-2.5 sl-text-sm sl-transition-colors',\n active && !item.danger ? 'sl-bg-slate-100 dark:sl-bg-slate-700 sl-text-slate-900 dark:sl-text-white' : '',\n active && item.danger ? 'sl-bg-red-50 dark:sl-bg-red-900/30 sl-text-red-700 dark:sl-text-red-400' : '',\n !active && item.danger ? 'sl-text-red-600 dark:sl-text-red-400' : '',\n !active && !item.danger ? 'sl-text-slate-700 dark:sl-text-slate-200' : '',\n itemDisabled ? 'sl-opacity-50 sl-cursor-not-allowed' : 'sl-cursor-pointer',\n ]\"\n >\n <component\n v-if=\"item.icon\"\n :is=\"item.icon\"\n :class=\"[\n 'sl-h-4 sl-w-4 sl-flex-shrink-0',\n active && !item.danger ? 'sl-text-slate-500 dark:sl-text-slate-300' : '',\n active && item.danger ? 'sl-text-red-500 dark:sl-text-red-400' : '',\n !active && item.danger ? 'sl-text-red-400 dark:sl-text-red-500' : '',\n !active && !item.danger ? 'sl-text-slate-400 dark:sl-text-slate-500' : '',\n ]\"\n aria-hidden=\"true\"\n />\n <span class=\"sl-flex-1 sl-text-left\">{{ item.label }}</span>\n <span v-if=\"item.shortcut\" class=\"sl-text-xs sl-text-slate-400 dark:sl-text-slate-500\">\n {{ item.shortcut }}\n </span>\n </button>\n </MenuItem>\n </div>\n\n <!-- Default slot for custom content -->\n <slot />\n </MenuItems>\n </transition>\n </Menu>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/vue';\nimport { EllipsisVerticalIcon } from '@heroicons/vue/20/solid';\nimport type { Component } from 'vue';\n\nexport interface MenuItemType {\n label: string;\n icon?: Component;\n action?: () => void;\n href?: string;\n disabled?: boolean;\n danger?: boolean;\n shortcut?: string;\n dividerAfter?: boolean;\n}\n\ntype MenuPlacement = 'left' | 'right';\ntype MenuWidth = 'auto' | 'sm' | 'md' | 'lg' | 'full';\n\ninterface Props {\n items?: MenuItemType[];\n placement?: MenuPlacement;\n width?: MenuWidth;\n disabled?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n items: () => [],\n placement: 'right',\n width: 'md',\n disabled: false,\n});\n\nconst emit = defineEmits<{\n 'item-click': [item: MenuItemType];\n}>();\n\n// Default trigger button styles\nconst defaultTriggerClasses = 'sl-p-2 sl-text-slate-500 dark:sl-text-slate-300 hover:sl-bg-slate-100 dark:hover:sl-bg-slate-700 hover:sl-text-slate-700 dark:hover:sl-text-white';\n\n// Placement classes\nconst placementClasses = computed(() => {\n return props.placement === 'left' ? 'sl-left-0' : 'sl-right-0';\n});\n\n// Width classes\nconst widthClasses = computed(() => {\n const widths: Record<MenuWidth, string> = {\n auto: 'sl-w-auto sl-min-w-[10rem]',\n sm: 'sl-w-40',\n md: 'sl-w-56',\n lg: 'sl-w-72',\n full: 'sl-w-full',\n };\n return widths[props.width];\n});\n\n// Group items by dividers\nconst groupedItems = computed(() => {\n if (!props.items.length) return [];\n \n const groups: MenuItemType[][] = [];\n let currentGroup: MenuItemType[] = [];\n \n for (const item of props.items) {\n currentGroup.push(item);\n if (item.dividerAfter) {\n groups.push(currentGroup);\n currentGroup = [];\n }\n }\n \n if (currentGroup.length) {\n groups.push(currentGroup);\n }\n \n return groups;\n});\n\n// Handle item click\nconst handleItemClick = (item: MenuItemType) => {\n if (item.disabled) return;\n \n if (item.action) {\n item.action();\n }\n \n emit('item-click', item);\n};\n</script>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","Z","i","ee","te","o","A","O","M","K","ge","T","I","R","p","e","r","f","d","g","b","t","n","X","v","m","s","l","W","S","u","h","U","G","J","y","L","q","Y","D","P","Se","w","c","x","$","a","Me","Q","k","z","E","_","F","be","V","N","j","B","H","C","defaultTriggerClasses","props","__props","emit","__emit","placementClasses","computed","widthClasses","groupedItems","groups","currentGroup","item","handleItemClick","_createBlock","_unref","Menu","_createVNode","MenuButton","_normalizeClass","$slots","_renderSlot","EllipsisVerticalIcon","_Transition","MenuItems","_Fragment","_renderList","group","groupIndex","MenuItem","active","itemDisabled","$event","_resolveDynamicComponent","_hoisted_2","_toDisplayString","_hoisted_3"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js","sources":["../src/components/UiModal.vue"],"sourcesContent":["<!--\n @component UiModal\n @description Modal dialog component with Headless UI integration.\n \n A flexible modal/dialog component built on Headless UI's Dialog primitives.\n Supports customizable size, position, and action buttons.\n \n @props\n - modelValue (boolean, required): Controls visibility via v-model\n - size (string, optional): Modal width - 'sm:max-w-sm' through 'sm:max-w-7xl'\n - position (string, optional): Vertical position - 'center' or 'top'\n - showCancel (boolean, optional): Show cancel button\n - showConfirm (boolean, optional): Show confirm button\n - cancelText (string, optional): Cancel button text\n - confirmText (string, optional): Confirm button text\n - confirmTheme (Theme, optional): Theme for confirm button\n \n @emits\n - update:modelValue: Emitted when modal should close\n - cancel: Emitted when cancel/close action triggered\n - confirm: Emitted when confirm action triggered\n \n @slots\n - icon: Icon displayed in modal header circle\n - header: Modal title content\n - body: Modal content (or use default slot)\n - default: Alternative to body slot\n - footer: Custom footer replacing default buttons\n \n @example\n <UiModal v-model=\"isOpen\" @confirm=\"handleConfirm\">\n <template #header>Confirm Action</template>\n <template #body>Are you sure you want to continue?</template>\n </UiModal>\n-->\n<template>\n <TransitionRoot as=\"template\" :show=\"props.modelValue\">\n <Dialog as=\"div\" class=\"sl-relative sl-z-50\" @close=\"onClose\" :initial-focus=\"initialFocusElement\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\" enter-from=\"opacity-0\" enter-to=\"opacity-100\"\n leave=\"ease-in duration-200\" leave-from=\"opacity-100\" leave-to=\"opacity-0\">\n <div class=\"sl-fixed sl-inset-0 sl-bg-gray-500/75 dark:sl-bg-slate-900/80 sl-transition-opacity\" />\n </TransitionChild>\n\n <div class=\"sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto\">\n <div class=\"sl-flex sl-min-h-full sl-items-center sl-justify-center sl-p-4 sl-text-center\"\n :class=\"[props.position === 'top' ? 'sm:sl-items-start sm:sl-pt-16' : 'sm:sl-items-center']\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\"\n enter-from=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to=\"opacity-100 translate-y-0 sm:scale-100\" leave=\"ease-in duration-200\"\n leave-from=\"opacity-100 translate-y-0 sm:scale-100\" leave-to=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\">\n <DialogPanel\n class=\"sl-relative sl-transform sl-rounded-lg sl-bg-white dark:sl-bg-slate-800 sl-text-left sl-shadow-xl sl-transition-all sl-w-full\"\n :style=\"sizeStyle\">\n <div class=\"sl-bg-white dark:sl-bg-slate-800\">\n <div class=\"sl-px-4 sl-pt-5 sl-pb-4 sm:sl-p-6 sm:sl-pb-4\">\n <div class=\"sm:sl-flex sm:sl-items-start\">\n <div class=\"sl-mx-auto sl-flex sl-h-12 sl-w-12 sl-flex-shrink-0 sl-items-center sl-justify-center sl-rounded-full sl-bg-gray-100 dark:sl-bg-slate-700 sm:sl-mx-0 sm:sl-h-10 sm:sl-w-10\">\n <slot name=\"icon\" />\n </div>\n <div class=\"sl-mt-3 sl-text-center sm:sl-ml-4 sm:sl-mt-0 sm:sl-text-left sl-w-full\">\n <DialogTitle as=\"h3\" class=\"sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-900 dark:sl-text-white\">\n <slot name=\"header\" />\n </DialogTitle>\n <div class=\"sl-mt-2 sl-text-gray-600 dark:sl-text-slate-300\">\n <slot name=\"body\">\n <slot />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sl-bg-gray-50 dark:sl-bg-slate-800/50 sl-px-4 sl-py-3 sm:sl-flex sm:sl-flex-row-reverse sm:sl-px-6\">\n <slot name=\"footer\">\n <div class=\"sl-flex sl-w-full sl-justify-end sl-gap-3\">\n <UiButton v-if=\"props.showCancel\" center-label theme=\"light\" :outlined=\"true\" @button-click=\"onClose\">\n {{ props.cancelText }}\n </UiButton>\n <UiButton v-if=\"props.showConfirm\" center-label :theme=\"props.confirmTheme\" :outlined=\"false\" @button-click=\"onConfirm\">\n {{ props.confirmText }}\n </UiButton>\n </div>\n </slot>\n </div>\n </div>\n <button ref=\"fallbackFocusRef\" class=\"sl-sr-only\">Close</button>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * UiModal - Dialog component with Headless UI\n * \n * Provides a modal/dialog overlay with customizable content, header, and footer.\n * Uses Headless UI for accessibility and transition handling.\n * \n * ## Features\n * - Multiple size variants\n * - Centered or top position\n * - Customizable action buttons\n * - Accessible with keyboard navigation\n * - Backdrop click to close\n * - Focus trapping\n * \n * @module components/UiModal\n * @see {@link ModalProps} for prop interface\n */\nimport { Dialog, DialogPanel, DialogTitle, TransitionChild, TransitionRoot } from '@headlessui/vue';\nimport { ref, computed } from 'vue';\nimport type { Theme } from '@/types/core';\nimport UiButton from '@/components/UiButton.vue';\n\nconst props = defineProps({\n modelValue: { type: Boolean, required: true },\n size: {\n type: String,\n default: 'lg',\n validator: (value: string) => [\n 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full',\n // Also support legacy class-based values for backwards compatibility\n 'sm:max-w-sm','sm:max-w-md','sm:max-w-lg','sm:max-w-xl','sm:max-w-2xl','sm:max-w-3xl','sm:max-w-4xl','sm:max-w-5xl','sm:max-w-6xl','sm:max-w-7xl'\n ].includes(value)\n },\n position: { type: String, default: 'center', validator: (value: string) => ['center', 'top'].includes(value) },\n showCancel: { type: Boolean, default: true },\n showConfirm: { type: Boolean, default: true },\n cancelText: { type: String, default: 'Cancel' },\n confirmText: { type: String, default: 'Confirm' },\n confirmTheme: { type: String as () => Theme, default: 'primary' }\n});\n\n// Convert size prop to max-width style\nconst sizeStyle = computed(() => {\n const sizeMap: Record<string, string> = {\n 'sm': '24rem', // 384px\n 'md': '28rem', // 448px\n 'lg': '32rem', // 512px\n 'xl': '36rem', // 576px\n '2xl': '42rem', // 672px\n '3xl': '48rem', // 768px\n '4xl': '56rem', // 896px\n '5xl': '64rem', // 1024px\n '6xl': '72rem', // 1152px\n '7xl': '80rem', // 1280px\n 'full': '100%',\n // Legacy class-based values\n 'sm:max-w-sm': '24rem',\n 'sm:max-w-md': '28rem',\n 'sm:max-w-lg': '32rem',\n 'sm:max-w-xl': '36rem',\n 'sm:max-w-2xl': '42rem',\n 'sm:max-w-3xl': '48rem',\n 'sm:max-w-4xl': '56rem',\n 'sm:max-w-5xl': '64rem',\n 'sm:max-w-6xl': '72rem',\n 'sm:max-w-7xl': '80rem',\n };\n return {\n maxWidth: sizeMap[props.size] || sizeMap['lg'],\n };\n});\n\nconst emit = defineEmits(['update:modelValue', 'cancel', 'confirm']);\nconst fallbackFocusRef = ref(null);\nconst initialFocusElement = computed(() => fallbackFocusRef.value);\n\nconst onClose = () => {\n emit('update:modelValue', false);\n emit('cancel');\n};\n\nconst onConfirm = () => {\n emit('confirm');\n emit('update:modelValue', false);\n};\n</script>\n\n<style scoped>\n</style>\n\n\n"],"names":["props","__props","sizeStyle","computed","sizeMap","emit","__emit","fallbackFocusRef","ref","initialFocusElement","onClose","onConfirm","_createBlock","_unref","TransitionRoot","_createVNode","Dialog","TransitionChild","_cache","_createElementVNode","_hoisted_1","_normalizeClass","DialogPanel","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_renderSlot","_ctx","_hoisted_6","DialogTitle","_hoisted_7","_hoisted_8","_hoisted_9","UiButton","_createTextVNode","_toDisplayString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js","sources":["../src/components/UiNavLink.vue"],"sourcesContent":["<template>\n <UiButton center-label v-bind=\"$attrs\" :disabled=\"disabled\" :loading=\"displayLoading\" :trailing-loading=\"true\"\n :trailing-loading-size=\"'xs'\" :custom-class=\"computedClasses\" :aria-current=\"ariaCurrent\" @click=\"handleClick\">\n <!-- This container spans the full width and arranges its children -->\n <div class=\"sl-flex sl-items-center sl-w-full\">\n <!-- Primary text container: icon and default slot (primary text) -->\n <div class=\"sl-flex sl-items-center sl-space-x-2 sl-flex-1\">\n <slot name=\"icon\" :is-exact-active=\"isExactActive\" :is-active=\"isActive\" />\n <slot />\n </div>\n <!-- Secondary text container: aligned to the right if content exists -->\n <div v-if=\"$slots.secondaryText || $slots.badge\" class=\"sl-flex sl-items-center sl-ml-auto\">\n <slot name=\"secondaryText\" />\n <!-- Badge slot (if provided) will be handled by UiButton's own positioning -->\n <slot name=\"badge\" />\n </div>\n </div>\n </UiButton>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs, ref, watch, computed } from 'vue';\nimport { useRoute, useLink, useRouter, type RouteLocationRaw, type RouteRecordNameGeneric } from 'vue-router';\nimport UiButton from './UiButton.vue';\n\n// Define the props interface for this component.\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\ninterface UiNavLinkProps {\n to: RouteLocationRaw;\n inactiveClass?: string;\n activeClass?: string;\n ariaCurrent?: \"time\" | \"page\" | \"step\" | \"location\" | \"date\" | undefined;\n current?: boolean;\n disabled?: boolean;\n customDisabled?: boolean; // New prop for custom disabled styling (gray text, no cursor)\n useCustomActiveState?: boolean; // New prop to control active state behavior\n}\n\n// Define the component props with default values.\nconst props = withDefaults(defineProps<UiNavLinkProps>(), {\n inactiveClass: '',\n activeClass: '',\n ariaCurrent: undefined,\n current: false,\n disabled: false,\n customDisabled: false,\n useCustomActiveState: false,\n});\n\n// Declare an emit for click events.\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void;\n}>();\n\n// Destructure the props into refs.\nconst { to, inactiveClass, activeClass, ariaCurrent, current, disabled, customDisabled, useCustomActiveState } = toRefs(props);\n\n// Get navigation helpers from vue-router.\nconst { navigate, isExactActive, isActive } = useLink({ to });\n\n// Get the router instance.\nconst router = useRouter();\n\n// Track the previous route for sidebar closing logic.\nconst route = useRoute();\nconst previousRoute = ref<RouteRecordNameGeneric | null>(route.name);\nwatch(route, (to, from) => {\n previousRoute.value = from.name;\n});\n\n// Determine if the target route is valid and not an error page.\nconst isReal = computed(() => {\n const resolved = router.resolve(to.value);\n return resolved && resolved.matched.length > 0 && !resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n});\n\n// Compute custom classes for the UiButton.\nconst computedClasses = computed(() => {\n // If useCustomActiveState is true, use only the current prop\n // Otherwise use the router's isActive behavior\n const shouldBeActive = useCustomActiveState.value ? current.value : isActive.value;\n\n const classes = [\n (shouldBeActive ? activeClass.value : inactiveClass.value),\n 'sl-w-full',\n 'sl-flex', // Make the button container a flexbox.\n 'sl-items-center', // Vertically align items.\n 'sl-relative', // Essential for loading overlay positioning\n 'sl-justify-between', // Space between content and trailing loading\n ];\n\n // Handle cursor and disabled styling\n if (customDisabled.value) {\n classes.push('sl-cursor-not-allowed', 'sl-text-gray-500');\n } else if (!isReal.value || disabled.value) {\n classes.push('sl-cursor-not-allowed');\n } else {\n classes.push('sl-cursor-pointer');\n }\n\n return classes.join(' ');\n});\n\n// Simple loading state for demonstration\nconst displayLoading = ref(false);\n\n// Click handler that emits events and manages navigation.\nconst handleClick = async (event: MouseEvent) => {\n // Emit the click event for parent components to intercept.\n emit('click', event);\n\n // If the default action was prevented, do not proceed.\n if (event.defaultPrevented) {\n return;\n }\n\n // Don't navigate if custom disabled\n if (customDisabled.value) {\n return;\n }\n\n // Don't navigate if disabled\n if (disabled.value) {\n return;\n }\n\n // Use the enhanced navigation from the composable\n try {\n displayLoading.value = true;\n await navigate();\n } catch (error) {\n console.error('[UiNavLink] Navigation failed:', error);\n } finally {\n displayLoading.value = false;\n }\n};\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","emit","__emit","to","inactiveClass","activeClass","ariaCurrent","current","disabled","customDisabled","useCustomActiveState","toRefs","navigate","isExactActive","isActive","useLink","router","useRouter","route","useRoute","previousRoute","ref","watch","from","isReal","computed","resolved","computedClasses","classes","displayLoading","handleClick","event","error","_openBlock","_createBlock","UiButton","_mergeProps","$attrs","_unref","_createElementVNode","_hoisted_1","_hoisted_2","_renderSlot","_ctx","$slots","_createElementBlock","_hoisted_3"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0CA,UAAMA,IAAQC,GAWRC,IAAOC,GAKP,EAAE,IAAAC,GAAI,eAAAC,GAAe,aAAAC,GAAa,aAAAC,GAAa,SAAAC,GAAS,UAAAC,GAAU,gBAAAC,GAAgB,sBAAAC,MAAyBC,EAAOZ,CAAK,GAGvH,EAAE,UAAAa,GAAU,eAAAC,GAAe,UAAAC,EAAA,IAAaC,EAAQ,EAAE,IAAAZ,GAAI,GAGtDa,IAASC,EAAA,GAGTC,IAAQC,EAAA,GACRC,IAAgBC,EAAmCH,EAAM,IAAI;AACnE,IAAAI,EAAMJ,GAAO,CAACf,GAAIoB,MAAS;AACzB,MAAAH,EAAc,QAAQG,EAAK;AAAA,IAC7B,CAAC;AAGD,UAAMC,IAASC,EAAS,MAAM;AAC5B,YAAMC,IAAWV,EAAO,QAAQb,EAAG,KAAK;AACxC,aAAOuB,KAAYA,EAAS,QAAQ,SAAS,KAAK,CAACA,EAAS,QAAQ,KAAK,CAACR,MAAgCA,EAAM,MAAM,WAAW;AAAA,IACnI,CAAC,GAGKS,IAAkBF,EAAS,MAAM;AAKrC,YAAMG,IAAU;AAAA,SAFOlB,EAAqB,QAAQH,EAAQ,QAAQO,EAAS,SAGzDT,EAAY,QAAQD,EAAc;AAAA,QACpD;AAAA,QACA;AAAA;AAAA,QACA;AAAA;AAAA,QACA;AAAA;AAAA,QACA;AAAA;AAAA,MAAA;AAIF,aAAIK,EAAe,QACjBmB,EAAQ,KAAK,yBAAyB,kBAAkB,IAC/C,CAACJ,EAAO,SAAShB,EAAS,QACnCoB,EAAQ,KAAK,uBAAuB,IAEpCA,EAAQ,KAAK,mBAAmB,GAG3BA,EAAQ,KAAK,GAAG;AAAA,IACzB,CAAC,GAGKC,IAAiBR,EAAI,EAAK,GAG1BS,IAAc,OAAOC,MAAsB;AAK/C,UAHA9B,EAAK,SAAS8B,CAAK,GAGf,CAAAA,EAAM,oBAKN,CAAAtB,EAAe,SAKf,CAAAD,EAAS;AAKb,YAAI;AACF,UAAAqB,EAAe,QAAQ,IACvB,MAAMjB,EAAA;AAAA,QACR,SAASoB,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK;AAAA,QACvD,UAAA;AACE,UAAAH,EAAe,QAAQ;AAAA,QACzB;AAAA,IACF;sBAzIEI,EAAA,GAAAC,EAgBWC,GAhBXC,EAgBW,EAhBD,gBAAA,GAAA,GAAqBC,EAAAA,QAAM;AAAA,MAAG,UAAUC,EAAA9B,CAAA;AAAA,MAAW,SAASqB,EAAA;AAAA,MAAiB,oBAAkB;AAAA,MACtG,yBAAuB;AAAA,MAAO,gBAAcF,EAAA;AAAA,MAAkB,gBAAcW,EAAAhC,CAAA;AAAA,MAAc,SAAOwB;AAAA,IAAA;iBAElG,MAYM;AAAA,QAZNS,EAYM,OAZNC,GAYM;AAAA,UAVJD,EAGM,OAHNE,GAGM;AAAA,YAFJC,EAA2EC,EAAA,QAAA,QAAA;AAAA,cAAxD,eAAiBL,EAAAzB,CAAA;AAAA,cAAgB,UAAWyB,EAAAxB,CAAA;AAAA,YAAA;YAC/D4B,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;UAGCC,EAAAA,OAAO,iBAAiBA,EAAAA,OAAO,SAA1CX,KAAAY,EAIM,OAJNC,GAIM;AAAA,YAHJJ,EAA6BC,EAAA,QAAA,eAAA;AAAA,YAE7BD,EAAqBC,EAAA,QAAA,OAAA;AAAA,UAAA;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js","sources":["../src/components/UiProgressBar.vue"],"sourcesContent":["<!--\n @component UiProgressBar\n @description Linear progress bar for tracking completion.\n \n @props\n - value: Progress value (0-100)\n - label: Optional label text\n - showLabel: Show percentage label\n - color: Bar color (primary, success, warning, danger)\n - size: Bar height (sm, md, lg)\n-->\n<template>\n <div>\n <div v-if=\"label || showLabel\" class=\"sl-flex sl-justify-between sl-mb-1\">\n <span v-if=\"label\" class=\"sl-text-sm sl-font-medium sl-text-slate-700 dark:sl-text-slate-300\">{{ label }}</span>\n <span v-if=\"showLabel\" class=\"sl-text-sm sl-font-medium sl-text-slate-600 dark:sl-text-slate-300\">{{ clampedValue }}%</span>\n </div>\n <div :class=\"trackClasses\">\n <div \n :class=\"barClasses\"\n :style=\"barStyle\" \n />\n </div>\n </div>\n</template>\n \n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ntype ProgressColor = 'primary' | 'success' | 'warning' | 'danger';\ntype ProgressSize = 'sm' | 'md' | 'lg';\n\ninterface ProgressBarProps {\n value?: number;\n label?: string;\n showLabel?: boolean;\n color?: ProgressColor;\n size?: ProgressSize;\n}\n\nconst props = withDefaults(defineProps<ProgressBarProps>(), {\n value: 0,\n label: '',\n showLabel: false,\n color: 'primary',\n size: 'md',\n});\n\n// Clamp value between 0 and 100\nconst clampedValue = computed(() => {\n return Math.min(100, Math.max(0, props.value));\n});\n\n// Track (background) classes\nconst trackClasses = computed(() => {\n const sizeClasses: Record<ProgressSize, string> = {\n sm: 'sl-h-1.5',\n md: 'sl-h-2.5',\n lg: 'sl-h-4',\n };\n return [\n 'sl-w-full sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded-full sl-overflow-hidden',\n sizeClasses[props.size],\n ];\n});\n\n// Progress bar classes (size only, color via inline style)\nconst barClasses = computed(() => {\n const sizeClasses: Record<ProgressSize, string> = {\n sm: 'sl-h-1.5',\n md: 'sl-h-2.5',\n lg: 'sl-h-4',\n };\n return [\n 'sl-rounded-full sl-transition-all sl-duration-300 sl-ease-out',\n sizeClasses[props.size],\n ];\n});\n\n// Progress bar inline styles (color + width)\nconst barStyle = computed(() => {\n const colors: Record<ProgressColor, string> = {\n primary: 'var(--sl-color-primary-600, #3e4b9a)',\n success: '#22c55e', // green-500\n warning: '#eab308', // yellow-500\n danger: '#ef4444', // red-500\n };\n return {\n width: `${clampedValue.value}%`,\n backgroundColor: colors[props.color],\n };\n});\n</script>\n"],"names":["props","__props","clampedValue","computed","trackClasses","barClasses","barStyle","colors","_createElementBlock","_openBlock","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwCA,UAAMA,IAAQC,GASRC,IAAeC,EAAS,MACrB,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGH,EAAM,KAAK,CAAC,CAC9C,GAGKI,IAAeD,EAAS,MAMrB;AAAA,MACL;AAAA,MANgD;AAAA,QAChD,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,EAIQH,EAAM,IAAI;AAAA,IAAA,CAEzB,GAGKK,IAAaF,EAAS,MAMnB;AAAA,MACL;AAAA,MANgD;AAAA,QAChD,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA,EAIQH,EAAM,IAAI;AAAA,IAAA,CAEzB,GAGKM,IAAWH,EAAS,MAAM;AAC9B,YAAMI,IAAwC;AAAA,QAC5C,SAAS;AAAA,QACT,SAAS;AAAA;AAAA,QACT,SAAS;AAAA;AAAA,QACT,QAAQ;AAAA;AAAA,MAAA;AAEV,aAAO;AAAA,QACL,OAAO,GAAGL,EAAa,KAAK;AAAA,QAC5B,iBAAiBK,EAAOP,EAAM,KAAK;AAAA,MAAA;AAAA,IAEvC,CAAC;2BA/ECQ,EAWM,OAAA,MAAA;AAAA,MAVOP,EAAA,SAASA,EAAA,aAApBQ,KAAAD,EAGM,OAHNE,GAGM;AAAA,QAFQT,EAAA,cAAZO,EAAgH,QAAhHG,GAAgHC,EAAfX,EAAA,KAAK,GAAA,CAAA;QAC1FA,EAAA,aAAZQ,EAAA,GAAAD,EAA4H,QAA5HK,GAA4HD,EAAvBV,EAAA,KAAY,IAAG,KAAC,CAAA;;MAEvHY,EAKM,OAAA;AAAA,QALA,SAAOV,EAAA,KAAY;AAAA,MAAA;QACvBU,EAGE,OAAA;AAAA,UAFC,SAAOT,EAAA,KAAU;AAAA,UACjB,SAAOC,EAAA,KAAQ;AAAA,QAAA;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js","sources":["../src/components/UiTable.vue"],"sourcesContent":["<template>\n <div class=\"sl-px-4 sm:sl-px-6 lg:sl-px-8\">\n <div class=\"sm:sl-flex sm:sl-items-center\">\n <div class=\"sm:sl-flex-auto\">\n <h1 v-if=\"$slots.title\" class=\"sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-800 dark:sl-text-white\">\n <slot name=\"title\" />\n </h1>\n <p v-if=\"$slots.description\" class=\"sl-mt-2 sl-text-sm sl-text-gray-700 dark:sl-text-slate-300\">\n <slot name=\"description\" />\n </p>\n </div>\n <div v-if=\"$slots.right\" class=\"sl-mt-4 sm:sl-ml-16 sm:sl-mt-0 sm:sl-flex-none\">\n <slot name=\"right\" />\n </div>\n </div>\n\n <!-- Mobile cards -->\n <div class=\"md:sl-hidden\" v-if=\"!isLoading\">\n <div class=\"sl-mt-6 sl-space-y-4\">\n <div v-for=\"row in table.getRowModel().rows\" :key=\"row.id\" class=\"sl-bg-white dark:sl-bg-slate-800 sl-rounded-lg sl-shadow dark:sl-shadow-slate-900/50 sl-p-4\">\n <div class=\"sl-flex sl-items-start sl-justify-between\">\n <div class=\"sl-text-sm sl-font-medium sl-text-gray-900 dark:sl-text-white\">\n {{ getColumnValue(getTitleCell(row)) }}\n </div>\n <div class=\"sl-ml-4 sl-shrink-0\">\n <slot name=\"row:actions\" :row=\"row\" />\n </div>\n </div>\n <div class=\"sl-mt-3 sl-grid sl-grid-cols-1 sl-gap-2\">\n <div v-for=\"cell in getPrimaryCells(row)\" :key=\"cell.id\" class=\"sl-text-sm sl-text-gray-700 dark:sl-text-slate-300\">\n <span class=\"sl-font-medium sl-text-gray-900 dark:sl-text-white\">{{ getColumnHeader(cell) }}:</span>\n <span class=\"sl-ml-1\">{{ getColumnValue(cell) }}</span>\n </div>\n </div>\n <div class=\"sl-mt-3\" v-if=\"getSecondaryCells(row).length\">\n <details class=\"sl-group\">\n <summary class=\"sl-cursor-pointer sl-text-sm sl-text-gray-700 dark:sl-text-slate-300 sl-select-none\">More</summary>\n <div class=\"sl-mt-2\">\n <dl class=\"sl-divide-y sl-divide-gray-100 dark:sl-divide-slate-700\">\n <div v-for=\"cell in getSecondaryCells(row)\" :key=\"cell.id\" class=\"sl-py-2 sl-grid sl-grid-cols-3 sl-gap-4\">\n <dt class=\"sl-text-sm sl-font-medium sl-text-gray-900 dark:sl-text-white sl-col-span-1\">{{ getColumnHeader(cell) }}</dt>\n <dd class=\"sl-mt-1 sl-text-sm sl-text-gray-700 dark:sl-text-slate-300 sl-col-span-2\">{{ getColumnValue(cell) }}</dd>\n </div>\n </dl>\n </div>\n </details>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile loading -->\n <div v-if=\"isLoading\" class=\"md:sl-hidden sl-mt-6\">\n <div class=\"sl-space-y-4\">\n <div v-for=\"i in 3\" :key=\"i\" class=\"sl-animate-pulse\">\n <div class=\"sl-bg-white dark:sl-bg-slate-800 sl-rounded-lg sl-shadow dark:sl-shadow-slate-900/50 sl-p-4\">\n <div class=\"sl-flex sl-items-center sl-justify-between sl-mb-3\">\n <div class=\"sl-h-4 sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded sl-w-1/2\"></div>\n <div class=\"sl-h-8 sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded-full sl-w-8\"></div>\n </div>\n <div class=\"sl-space-y-2\">\n <div class=\"sl-h-3 sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded sl-w-full\"></div>\n <div class=\"sl-h-3 sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded sl-w-3/4\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Desktop table -->\n <div class=\"sl-hidden md:sl-block\">\n <div class=\"sl-mt-8 sl-flow-root\">\n <div class=\"sl--my-2 sl--mx-4 sl-overflow-x-auto sm:sl--mx-6 lg:sl--mx-8\">\n <div class=\"sl-inline-block sl-min-w-full sl-py-2 sl-align-middle md:sl-px-6 lg:sl-px-8\">\n <div class=\"sl-overflow-hidden sl-shadow dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black sl-ring-opacity-5 dark:sl-ring-slate-700 md:sl-rounded-lg\">\n <table class=\"sl-min-w-full sl-divide-y sl-divide-gray-300 dark:sl-divide-slate-700\">\n <thead class=\"sl-bg-gray-50 dark:sl-bg-slate-800\">\n <tr>\n <th v-for=\"header in table.getHeaderGroups()[0].headers\" :key=\"header.id\"\n scope=\"col\" class=\"sl-px-3 sl-py-3.5 sl-text-left sl-text-sm sl-font-semibold sl-text-gray-900 dark:sl-text-white\">\n <FlexRender :render=\"header.column.columnDef.header\" :props=\"header.getContext()\" />\n </th>\n <th v-if=\"$slots['row:actions']\" class=\"sl-px-3 sl-py-3.5\"></th>\n </tr>\n </thead>\n <tbody class=\"sl-divide-y sl-divide-gray-200 dark:sl-divide-slate-700 sl-bg-white dark:sl-bg-slate-900\">\n <tr v-for=\"row in table.getRowModel().rows\" :key=\"row.id\" class=\"hover:sl-bg-gray-50 dark:hover:sl-bg-slate-800\">\n <td v-for=\"cell in row.getVisibleCells()\" :key=\"cell.id\" class=\"sl-whitespace-nowrap sl-px-3 sl-py-4 sl-text-sm sl-text-gray-500 dark:sl-text-slate-300\">\n <FlexRender :render=\"cell.column.columnDef.cell\" :props=\"cell.getContext()\" />\n </td>\n <td v-if=\"$slots['row:actions']\" class=\"sl-whitespace-nowrap sl-px-3 sl-py-4 sl-text-sm sl-text-right\">\n <slot name=\"row:actions\" :row=\"row\" />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { FlexRender, getCoreRowModel, useVueTable } from '@tanstack/vue-table';\nimport { getSortedRowModel } from '@tanstack/table-core';\nimport type { TableOptions, Updater, Row, Cell, SortingState, ColumnDef } from '@tanstack/vue-table';\nimport type { TableRowData, TableColumnDef } from '../../types/tables';\n\n// Define a generic row data type for the table\ntype TableDataRow = TableRowData;\n\ninterface TableProps {\n data: TableDataRow[];\n columns: TableColumnDef<TableDataRow>[];\n truncate: Array<{ column: string; length: number; link?: string }>;\n isLoading: boolean;\n mobileConfig: {\n titleColumn?: string;\n primaryColumns?: string[];\n secondaryColumns?: string[];\n expandableColumns?: string[];\n maxPrimaryColumns?: number;\n };\n}\n\nconst props = withDefaults(defineProps<TableProps>(), {\n truncate: () => [],\n isLoading: false,\n mobileConfig: () => ({})\n});\n\nconst sorting = ref<SortingState>([]);\n\nconst tableColumns = computed(() => {\n return props.columns.map((col: ColumnDef<TableDataRow>) => {\n const truncateConfig = props.truncate.find(t => t.column === (col as { accessorKey?: string }).accessorKey);\n if (truncateConfig) {\n return {\n ...col,\n cell: (info: { getValue: () => unknown }) => {\n const value = info.getValue();\n if (typeof value === 'string' && value.length > truncateConfig.length) {\n return `${value.substring(0, truncateConfig.length)}...`;\n }\n return value;\n }\n } as ColumnDef<TableDataRow>;\n }\n return col;\n });\n});\n\nconst tableOptions: TableOptions<TableDataRow> = {\n get data() { return props.data; },\n get columns() { return tableColumns.value; },\n getCoreRowModel: getCoreRowModel(),\n enableColumnResizing: true,\n columnResizeMode: 'onChange',\n getSortedRowModel: getSortedRowModel(),\n state: {\n get sorting() {\n return sorting.value;\n },\n },\n onSortingChange: (updaterOrValue: Updater<SortingState>) => {\n sorting.value = typeof updaterOrValue === 'function' ? updaterOrValue(sorting.value) : updaterOrValue;\n },\n defaultColumn: { enableSorting: true },\n};\n\nconst table = useVueTable(tableOptions);\n\nconst getTitleCell = (row: Row<TableDataRow>): Cell<TableDataRow, unknown> | null => {\n if (!row) return null;\n const visibleCells = row.getVisibleCells() || [];\n const config = props.mobileConfig || {};\n if (config.titleColumn) {\n return visibleCells.find(cell => cell.column.id === config.titleColumn) || null;\n }\n const titlePatterns = ['name', 'title', 'embedCode'];\n for (const pattern of titlePatterns) {\n const cell = visibleCells.find(cell => cell.column.id.toLowerCase().includes(pattern.toLowerCase()));\n if (cell) return cell;\n }\n return visibleCells[0] || null;\n};\n\nconst getColumnHeader = (cell: Cell<TableDataRow, unknown>): string => {\n if (!cell) return '';\n const header = cell.column.columnDef.header;\n if (typeof header === 'string') return header;\n return cell.column.id;\n};\n\nconst getColumnValue = (cell: Cell<TableDataRow, unknown> | null): unknown => {\n if (!cell) return '';\n const value = cell.getValue?.();\n return typeof value === 'object' && value !== null ? JSON.stringify(value) : value;\n};\n\nconst getPrimaryCells = (row: Row<TableDataRow>): Cell<TableDataRow, unknown>[] => {\n const visibleCells = row.getVisibleCells() || [];\n const config = props.mobileConfig || {};\n const ids = config.primaryColumns || [];\n if (ids.length) return visibleCells.filter(c => ids.includes(c.column.id));\n return visibleCells.slice(0, Math.min(3, visibleCells.length));\n};\n\nconst getSecondaryCells = (row: Row<TableDataRow>): Cell<TableDataRow, unknown>[] => {\n const visibleCells = row.getVisibleCells() || [];\n const config = props.mobileConfig || {};\n const ids = config.secondaryColumns || [];\n if (ids.length) return visibleCells.filter(c => ids.includes(c.column.id));\n return visibleCells.slice(3);\n};\n</script>\n\n<style scoped>\n</style>\n\n\n"],"names":["props","__props","sorting","ref","tableColumns","computed","col","truncateConfig","info","value","tableOptions","getCoreRowModel","getSortedRowModel","updaterOrValue","table","useVueTable","getTitleCell","row","visibleCells","config","cell","titlePatterns","pattern","getColumnHeader","header","getColumnValue","getPrimaryCells","ids","c","getSecondaryCells","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","$slots","_hoisted_4","_renderSlot","_ctx","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_Fragment","_unref","_hoisted_9","_hoisted_10","_toDisplayString","_hoisted_11","_hoisted_12","_renderList","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_cache","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","i","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_createVNode","FlexRender","_hoisted_30","_hoisted_31","_hoisted_32"],"mappings":"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"}