@stachelock/ui 0.5.5 → 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,280 +0,0 @@
1
- import { ref as V, computed as k, provide as N, defineComponent as L, onMounted as R, onUnmounted as Q, unref as v, inject as A, watch as G, h as D, Fragment as X, createElementBlock as u, openBlock as d, createVNode as O, withCtx as H, createElementVNode as E, createCommentVNode as g, toDisplayString as w, normalizeClass as T, withKeys as K, withModifiers as P } from "vue";
2
- import { useField as Z } from "vee-validate";
3
- import { g as _ } from "./id-DafBB_QF.js";
4
- import ee from "./forms/FormFieldWrapper.js";
5
- import { d as te, p as le } from "./form-f8yP4kN-.js";
6
- import { i as U, A as $, o as se, E as ae, T as oe } from "./render-QUUPyNjX.js";
7
- import { s as ne } from "./use-resolve-button-type-h6n-lm9q.js";
8
- import { f as re, u as ie } from "./hidden-BSRluD1y.js";
9
- import { o as I } from "./keyboard-Dd_2-cFu.js";
10
- import { k as ue } from "./description-C7cRw0tq.js";
11
- let z = Symbol("LabelContext");
12
- function W() {
13
- let e = A(z, null);
14
- if (e === null) {
15
- let r = new Error("You used a <Label /> component, but it is not inside a parent.");
16
- throw Error.captureStackTrace && Error.captureStackTrace(r, W), r;
17
- }
18
- return e;
19
- }
20
- function de({ slot: e = {}, name: r = "Label", props: c = {} } = {}) {
21
- let l = V([]);
22
- function i(n) {
23
- return l.value.push(n), () => {
24
- let o = l.value.indexOf(n);
25
- o !== -1 && l.value.splice(o, 1);
26
- };
27
- }
28
- return N(z, { register: i, slot: e, name: r, props: c }), k(() => l.value.length > 0 ? l.value.join(" ") : void 0);
29
- }
30
- L({ name: "Label", props: { as: { type: [Object, String], default: "label" }, passive: { type: [Boolean], default: !1 }, id: { type: String, default: null } }, setup(e, { slots: r, attrs: c }) {
31
- var l;
32
- let i = (l = e.id) != null ? l : `headlessui-label-${U()}`, n = W();
33
- return R(() => Q(n.register(i))), () => {
34
- let { name: o = "Label", slot: f = {}, props: m = {} } = n, { passive: p, ...y } = e, h = { ...Object.entries(m).reduce((s, [S, x]) => Object.assign(s, { [S]: v(x) }), {}), id: i };
35
- return p && (delete h.onClick, delete h.htmlFor, delete y.onClick), $({ ourProps: h, theirProps: y, slot: f, attrs: c, slots: r, name: o });
36
- };
37
- } });
38
- let Y = Symbol("GroupContext");
39
- L({ name: "SwitchGroup", props: { as: { type: [Object, String], default: "template" } }, setup(e, { slots: r, attrs: c }) {
40
- let l = V(null), i = de({ name: "SwitchLabel", props: { htmlFor: k(() => {
41
- var o;
42
- return (o = l.value) == null ? void 0 : o.id;
43
- }), onClick(o) {
44
- l.value && (o.currentTarget.tagName === "LABEL" && o.preventDefault(), l.value.click(), l.value.focus({ preventScroll: !0 }));
45
- } } }), n = ue({ name: "SwitchDescription" });
46
- return N(Y, { switchRef: l, labelledby: i, describedby: n }), () => $({ theirProps: e, ourProps: {}, slot: {}, slots: r, attrs: c, name: "SwitchGroup" });
47
- } });
48
- let ce = L({ name: "Switch", emits: { "update:modelValue": (e) => !0 }, props: { as: { type: [Object, String], default: "button" }, modelValue: { type: Boolean, default: void 0 }, defaultChecked: { type: Boolean, optional: !0 }, form: { type: String, optional: !0 }, name: { type: String, optional: !0 }, value: { type: String, optional: !0 }, id: { type: String, default: null }, disabled: { type: Boolean, default: !1 }, tabIndex: { type: Number, default: 0 } }, inheritAttrs: !1, setup(e, { emit: r, attrs: c, slots: l, expose: i }) {
49
- var n;
50
- let o = (n = e.id) != null ? n : `headlessui-switch-${U()}`, f = A(Y, null), [m, p] = te(k(() => e.modelValue), (t) => r("update:modelValue", t), k(() => e.defaultChecked));
51
- function y() {
52
- p(!m.value);
53
- }
54
- let h = V(null), s = f === null ? h : f.switchRef, S = ne(k(() => ({ as: e.as, type: c.type })), s);
55
- i({ el: s, $el: s });
56
- function x(t) {
57
- t.preventDefault(), y();
58
- }
59
- function B(t) {
60
- t.key === I.Space ? (t.preventDefault(), y()) : t.key === I.Enter && le(t.currentTarget);
61
- }
62
- function M(t) {
63
- t.preventDefault();
64
- }
65
- let b = k(() => {
66
- var t, a;
67
- return (a = (t = se(s)) == null ? void 0 : t.closest) == null ? void 0 : a.call(t, "form");
68
- });
69
- return R(() => {
70
- G([b], () => {
71
- if (!b.value || e.defaultChecked === void 0) return;
72
- function t() {
73
- p(e.defaultChecked);
74
- }
75
- return b.value.addEventListener("reset", t), () => {
76
- var a;
77
- (a = b.value) == null || a.removeEventListener("reset", t);
78
- };
79
- }, { immediate: !0 });
80
- }), () => {
81
- let { name: t, value: a, form: C, tabIndex: j, ...F } = e, q = { checked: m.value }, J = { id: o, ref: s, role: "switch", type: S.value, tabIndex: j === -1 ? 0 : j, "aria-checked": m.value, "aria-labelledby": f?.labelledby.value, "aria-describedby": f?.describedby.value, onClick: x, onKeyup: B, onKeypress: M };
82
- return D(X, [t != null && m.value != null ? D(re, ae({ features: ie.Hidden, as: "input", type: "checkbox", hidden: !0, readOnly: !0, checked: m.value, form: C, disabled: F.disabled, name: t, value: a })) : null, $({ ourProps: J, theirProps: { ...c, ...oe(F, ["modelValue", "defaultChecked"]) }, slot: q, attrs: c, slots: l, name: "Switch" })]);
83
- };
84
- } });
85
- const fe = { class: "sl-w-full" }, me = { class: "sl-flex sl-items-center sl-justify-between sl-gap-4" }, be = {
86
- key: 0,
87
- class: "sl-flex-1"
88
- }, he = ["for"], ve = ["innerHTML"], pe = { key: 1 }, ye = { class: "sl-sr-only" }, ke = {
89
- key: 1,
90
- class: "sl-ml-3 sl-text-sm"
91
- }, xe = {
92
- key: 0,
93
- class: "sl-font-medium sl-text-gray-800 dark:sl-text-white"
94
- }, ge = {
95
- key: 1,
96
- class: "sl-text-gray-500 dark:sl-text-slate-300"
97
- }, we = {
98
- key: 2,
99
- class: "sl-flex-1"
100
- }, Se = {
101
- key: 0,
102
- class: "sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300"
103
- }, Ve = ["innerHTML"], Oe = /* @__PURE__ */ L({
104
- __name: "SwitchInput",
105
- props: {
106
- name: {},
107
- modelValue: { type: Boolean },
108
- label: {},
109
- description: {},
110
- disabled: { type: Boolean },
111
- immediate: { type: Boolean, default: !1 },
112
- boxShadow: { type: Boolean, default: !1 },
113
- defaultValue: { type: Boolean, default: !1 },
114
- hideMainLabel: { type: Boolean, default: !1 },
115
- textTrue: {},
116
- textFalse: {},
117
- rules: {},
118
- validateOnMount: { type: Boolean },
119
- successMessage: {},
120
- tertiaryLabel: {},
121
- isDescriptionHtml: { type: Boolean, default: !1 },
122
- showErrors: { type: Boolean, default: !1 },
123
- layout: { default: "stacked" }
124
- },
125
- emits: ["update:modelValue", "blur", "focus"],
126
- setup(e, { expose: r, emit: c }) {
127
- const l = e, i = c, n = V(), o = _(`sl-${l.name}`), { value: f, errorMessage: m, handleChange: p, handleBlur: y, meta: h } = Z(
128
- () => l.name,
129
- l.rules,
130
- {
131
- type: "checkbox",
132
- validateOnMount: l.validateOnMount,
133
- initialValue: l.modelValue ?? l.defaultValue,
134
- syncVModel: !0
135
- }
136
- ), s = V(l.modelValue ?? l.defaultValue);
137
- G(
138
- () => l.modelValue,
139
- (t) => {
140
- if (t !== void 0 && t !== s.value) {
141
- const a = !!t;
142
- s.value = a, f.value = a;
143
- }
144
- },
145
- { immediate: !0 }
146
- );
147
- const S = k(() => {
148
- const t = [
149
- "sl-relative",
150
- "sl-inline-flex",
151
- "sl-items-center",
152
- "sl-h-6",
153
- "sl-w-11",
154
- "sl-flex-shrink-0",
155
- "sl-cursor-pointer",
156
- "sl-rounded-full",
157
- "sl-border-2",
158
- "sl-border-transparent",
159
- "sl-transition-colors",
160
- "sl-duration-200",
161
- "sl-ease-in-out",
162
- "focus:sl-outline-none",
163
- "focus:sl-ring-2",
164
- "focus:sl-ring-stachelock-600",
165
- "focus:sl-ring-offset-2",
166
- "dark:focus:sl-ring-offset-slate-900"
167
- ];
168
- return l.disabled && t.push(
169
- "sl-cursor-not-allowed",
170
- "sl-opacity-50"
171
- ), s.value ? t.push("sl-bg-stachelock-600") : t.push("sl-bg-gray-200", "dark:sl-bg-slate-600"), t.join(" ");
172
- }), x = (t) => {
173
- l.disabled || (s.value = t, l.immediate && p(t), i("update:modelValue", t));
174
- }, B = (t) => {
175
- l.immediate || p(s.value), y(t), i("blur", t);
176
- }, M = (t) => {
177
- i("focus", t);
178
- }, b = () => {
179
- l.disabled || x(!s.value);
180
- };
181
- return r({
182
- toggle: b,
183
- value: s,
184
- focus: () => {
185
- const t = n.value;
186
- (t && typeof t == "object" && "$el" in t ? t.$el : t)?.focus?.();
187
- },
188
- blur: () => {
189
- const t = n.value;
190
- (t && typeof t == "object" && "$el" in t ? t.$el : t)?.blur?.();
191
- },
192
- switchRef: n
193
- }), (t, a) => (d(), u("div", fe, [
194
- O(ee, {
195
- id: v(o),
196
- name: e.name,
197
- label: e.layout === "stacked" && !e.hideMainLabel ? e.label : "",
198
- disabled: e.disabled,
199
- optional: !e.rules,
200
- "tertiary-label": e.tertiaryLabel,
201
- "box-shadow": e.boxShadow,
202
- "error-message": v(m),
203
- "success-message": e.successMessage,
204
- "is-valid": v(h).valid,
205
- "is-touched": v(h).touched,
206
- "show-errors": e.showErrors,
207
- "show-valid-check": !1
208
- }, {
209
- default: H(() => [
210
- E("div", me, [
211
- e.layout === "inline" ? (d(), u("div", be, [
212
- e.label && !e.hideMainLabel ? (d(), u("label", {
213
- key: 0,
214
- for: v(o),
215
- class: "sl-block sl-text-sm sl-font-medium sl-text-gray-900 dark:sl-text-white sl-cursor-pointer"
216
- }, w(e.label), 9, he)) : g("", !0),
217
- e.description ? (d(), u("div", {
218
- key: 1,
219
- class: T(["sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300", { "sl-cursor-pointer": !e.disabled }]),
220
- onClick: a[0] || (a[0] = (C) => !e.disabled && b())
221
- }, [
222
- e.isDescriptionHtml ? (d(), u("div", {
223
- key: 0,
224
- innerHTML: e.description
225
- }, null, 8, ve)) : (d(), u("span", pe, w(e.description), 1))
226
- ], 2)) : g("", !0)
227
- ])) : g("", !0),
228
- O(v(ce), {
229
- id: v(o),
230
- ref_key: "switchRef",
231
- ref: n,
232
- modelValue: s.value,
233
- "onUpdate:modelValue": [
234
- a[1] || (a[1] = (C) => s.value = C),
235
- x
236
- ],
237
- disabled: e.disabled,
238
- class: T([
239
- S.value,
240
- { "sl-shadow-md": e.boxShadow }
241
- ]),
242
- onFocus: M,
243
- onBlur: B,
244
- onKeydown: [
245
- K(P(b, ["prevent"]), ["space"]),
246
- K(P(b, ["prevent"]), ["enter"])
247
- ]
248
- }, {
249
- default: H(() => [
250
- E("span", ye, w(e.label), 1),
251
- E("span", {
252
- class: T([
253
- s.value ? "sl-translate-x-5" : "sl-translate-x-0",
254
- "sl-pointer-events-none sl-inline-block sl-h-5 sl-w-5 sl-transform sl-rounded-full sl-bg-white sl-shadow sl-ring-0 sl-transition sl-duration-200 sl-ease-in-out sl-relative"
255
- ])
256
- }, null, 2)
257
- ]),
258
- _: 1
259
- }, 8, ["id", "modelValue", "disabled", "class", "onKeydown"]),
260
- e.textTrue || e.textFalse ? (d(), u("span", ke, [
261
- s.value && e.textTrue ? (d(), u("span", xe, w(e.textTrue), 1)) : !s.value && e.textFalse ? (d(), u("span", ge, w(e.textFalse), 1)) : g("", !0)
262
- ])) : g("", !0),
263
- e.description && e.layout === "stacked" ? (d(), u("div", we, [
264
- e.isDescriptionHtml ? (d(), u("p", {
265
- key: 1,
266
- class: "sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300",
267
- innerHTML: e.description
268
- }, null, 8, Ve)) : (d(), u("p", Se, w(e.description), 1))
269
- ])) : g("", !0)
270
- ])
271
- ]),
272
- _: 1
273
- }, 8, ["id", "name", "label", "disabled", "optional", "tertiary-label", "box-shadow", "error-message", "success-message", "is-valid", "is-touched", "show-errors"])
274
- ]));
275
- }
276
- });
277
- export {
278
- Oe as _
279
- };
280
- //# sourceMappingURL=SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js","sources":["../node_modules/@headlessui/vue/dist/components/label/label.js","../node_modules/@headlessui/vue/dist/components/switch/switch.js","../src/components/inputs/SwitchInput.vue"],"sourcesContent":["import{computed as v,defineComponent as x,inject as L,onMounted as k,onUnmounted as C,provide as j,ref as y,unref as h}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{render as R}from'../../utils/render.js';let a=Symbol(\"LabelContext\");function d(){let t=L(a,null);if(t===null){let n=new Error(\"You used a <Label /> component, but it is not inside a parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(n,d),n}return t}function E({slot:t={},name:n=\"Label\",props:i={}}={}){let e=y([]);function o(r){return e.value.push(r),()=>{let l=e.value.indexOf(r);l!==-1&&e.value.splice(l,1)}}return j(a,{register:o,slot:t,name:n,props:i}),v(()=>e.value.length>0?e.value.join(\" \"):void 0)}let K=x({name:\"Label\",props:{as:{type:[Object,String],default:\"label\"},passive:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(t,{slots:n,attrs:i}){var r;let e=(r=t.id)!=null?r:`headlessui-label-${w()}`,o=d();return k(()=>C(o.register(e))),()=>{let{name:l=\"Label\",slot:p={},props:c={}}=o,{passive:f,...s}=t,u={...Object.entries(c).reduce((b,[g,m])=>Object.assign(b,{[g]:h(m)}),{}),id:e};return f&&(delete u.onClick,delete u.htmlFor,delete s.onClick),R({ourProps:u,theirProps:s,slot:p,attrs:i,slots:n,name:l})}}});export{K as Label,E as useLabels};\n","import{computed as u,defineComponent as v,Fragment as H,h as S,inject as M,onMounted as I,provide as P,ref as w,watch as j}from\"vue\";import{useControllable as G}from'../../hooks/use-controllable.js';import{useId as V}from'../../hooks/use-id.js';import{useResolveButtonType as F}from'../../hooks/use-resolve-button-type.js';import{Features as O,Hidden as A}from'../../internal/hidden.js';import{Keys as g}from'../../keyboard.js';import{dom as N}from'../../utils/dom.js';import{attemptSubmit as $}from'../../utils/form.js';import{compact as U,omit as _,render as k}from'../../utils/render.js';import{Description as q,useDescriptions as z}from'../description/description.js';import{Label as J,useLabels as Q}from'../label/label.js';let C=Symbol(\"GroupContext\"),oe=v({name:\"SwitchGroup\",props:{as:{type:[Object,String],default:\"template\"}},setup(l,{slots:c,attrs:i}){let r=w(null),f=Q({name:\"SwitchLabel\",props:{htmlFor:u(()=>{var t;return(t=r.value)==null?void 0:t.id}),onClick(t){r.value&&(t.currentTarget.tagName===\"LABEL\"&&t.preventDefault(),r.value.click(),r.value.focus({preventScroll:!0}))}}}),p=z({name:\"SwitchDescription\"});return P(C,{switchRef:r,labelledby:f,describedby:p}),()=>k({theirProps:l,ourProps:{},slot:{},slots:c,attrs:i,name:\"SwitchGroup\"})}}),ue=v({name:\"Switch\",emits:{\"update:modelValue\":l=>!0},props:{as:{type:[Object,String],default:\"button\"},modelValue:{type:Boolean,default:void 0},defaultChecked:{type:Boolean,optional:!0},form:{type:String,optional:!0},name:{type:String,optional:!0},value:{type:String,optional:!0},id:{type:String,default:null},disabled:{type:Boolean,default:!1},tabIndex:{type:Number,default:0}},inheritAttrs:!1,setup(l,{emit:c,attrs:i,slots:r,expose:f}){var h;let p=(h=l.id)!=null?h:`headlessui-switch-${V()}`,n=M(C,null),[t,s]=G(u(()=>l.modelValue),e=>c(\"update:modelValue\",e),u(()=>l.defaultChecked));function m(){s(!t.value)}let E=w(null),o=n===null?E:n.switchRef,L=F(u(()=>({as:l.as,type:i.type})),o);f({el:o,$el:o});function D(e){e.preventDefault(),m()}function R(e){e.key===g.Space?(e.preventDefault(),m()):e.key===g.Enter&&$(e.currentTarget)}function x(e){e.preventDefault()}let d=u(()=>{var e,a;return(a=(e=N(o))==null?void 0:e.closest)==null?void 0:a.call(e,\"form\")});return I(()=>{j([d],()=>{if(!d.value||l.defaultChecked===void 0)return;function e(){s(l.defaultChecked)}return d.value.addEventListener(\"reset\",e),()=>{var a;(a=d.value)==null||a.removeEventListener(\"reset\",e)}},{immediate:!0})}),()=>{let{name:e,value:a,form:K,tabIndex:y,...b}=l,T={checked:t.value},B={id:p,ref:o,role:\"switch\",type:L.value,tabIndex:y===-1?0:y,\"aria-checked\":t.value,\"aria-labelledby\":n==null?void 0:n.labelledby.value,\"aria-describedby\":n==null?void 0:n.describedby.value,onClick:D,onKeyup:R,onKeypress:x};return S(H,[e!=null&&t.value!=null?S(A,U({features:O.Hidden,as:\"input\",type:\"checkbox\",hidden:!0,readOnly:!0,checked:t.value,form:K,disabled:b.disabled,name:e,value:a})):null,k({ourProps:B,theirProps:{...i,..._(b,[\"modelValue\",\"defaultChecked\"])},slot:T,attrs:i,slots:r,name:\"Switch\"})])}}}),de=J,ce=q;export{ue as Switch,ce as SwitchDescription,oe as SwitchGroup,de as SwitchLabel};\n","<!--\n @component SwitchInput\n @description Toggle switch input with Headless UI.\n \n A styled toggle switch component with label, description, and ON/OFF text.\n Uses Headless UI's Switch for accessibility.\n \n @props\n - name (string, required): Field name for form binding\n - label (string, optional): Switch label text\n - description (string, optional): Additional description text\n - disabled (boolean, optional): Disabled state\n - rules (Schema, optional): Validation rules\n - modelValue (boolean, optional): Toggle state via v-model\n - layout (string, optional): 'stacked' or 'inline' layout\n - textTrue (string, optional): Text shown when ON\n - textFalse (string, optional): Text shown when OFF\n \n @emits\n - update:modelValue: Emitted when toggle state changes\n - update:validity: Emitted when validation state changes\n \n @example\n <SwitchInput\n name=\"notifications\"\n label=\"Enable notifications\"\n v-model=\"form.notifications\"\n text-true=\"ON\"\n text-false=\"OFF\"\n />\n-->\n<template>\n <div class=\"sl-w-full\">\n <FormFieldWrapper\n :id=\"id\"\n :name=\"name\"\n :label=\"layout === 'stacked' && !hideMainLabel ? label : ''\"\n :disabled=\"disabled\"\n :optional=\"!rules\"\n :tertiary-label=\"tertiaryLabel\"\n :box-shadow=\"boxShadow\"\n :error-message=\"errorMessage\"\n :success-message=\"successMessage\"\n :is-valid=\"meta.valid\"\n :is-touched=\"meta.touched\"\n :show-errors=\"showErrors\"\n :show-valid-check=\"false\"\n >\n <div class=\"sl-flex sl-items-center sl-justify-between sl-gap-4\">\n <div v-if=\"layout === 'inline'\" class=\"sl-flex-1\">\n <label\n v-if=\"label && !hideMainLabel\"\n :for=\"id\"\n class=\"sl-block sl-text-sm sl-font-medium sl-text-gray-900 dark:sl-text-white sl-cursor-pointer\"\n >\n {{ label }}\n </label>\n <div v-if=\"description\" class=\"sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300\" :class=\"{ 'sl-cursor-pointer': !disabled }\" @click=\"!disabled && toggle()\">\n <div v-if=\"isDescriptionHtml\" v-html=\"description\" />\n <span v-else>{{ description }}</span>\n </div>\n </div>\n <Switch\n :id=\"id\"\n ref=\"switchRef\"\n v-model=\"switchValue\"\n :disabled=\"disabled\"\n :class=\"[\n switchClasses,\n { 'sl-shadow-md': boxShadow }\n ]\"\n @update:model-value=\"handleToggle\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @keydown.space.prevent=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n >\n <span class=\"sl-sr-only\">{{ label }}</span>\n <span\n :class=\"[\n switchValue ? 'sl-translate-x-5' : 'sl-translate-x-0',\n 'sl-pointer-events-none sl-inline-block sl-h-5 sl-w-5 sl-transform sl-rounded-full sl-bg-white sl-shadow sl-ring-0 sl-transition sl-duration-200 sl-ease-in-out sl-relative'\n ]\"\n >\n </span>\n </Switch>\n <span v-if=\"textTrue || textFalse\" class=\"sl-ml-3 sl-text-sm\">\n <span v-if=\"switchValue && textTrue\" class=\"sl-font-medium sl-text-gray-800 dark:sl-text-white\">{{ textTrue }}</span>\n <span v-else-if=\"!switchValue && textFalse\" class=\"sl-text-gray-500 dark:sl-text-slate-300\">{{ textFalse }}</span>\n </span>\n <div v-if=\"description && layout === 'stacked'\" class=\"sl-flex-1\">\n <p v-if=\"!isDescriptionHtml\" class=\"sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300\">{{ description }}</p>\n <p v-else class=\"sl-mt-1 sl-text-sm sl-text-gray-600 dark:sl-text-slate-300\" v-html=\"description\" />\n </div>\n </div>\n </FormFieldWrapper>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { Switch } from '@headlessui/vue'\nimport { useField } from 'vee-validate'\nimport { generateId } from '../../utils/id'\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue'\nimport type { ValidationRule } from '../../types/form'\n\ninterface Props {\n name: string\n modelValue?: boolean\n label?: string\n description?: string\n disabled?: boolean\n immediate?: boolean\n boxShadow?: boolean\n defaultValue?: boolean\n hideMainLabel?: boolean\n textTrue?: string\n textFalse?: string\n rules?: ValidationRule\n validateOnMount?: boolean\n successMessage?: string\n tertiaryLabel?: string\n isDescriptionHtml?: boolean\n showErrors?: boolean\n layout?: 'stacked' | 'inline'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n immediate: false,\n boxShadow: false,\n defaultValue: false,\n hideMainLabel: false,\n isDescriptionHtml: false,\n showErrors: false,\n layout: 'stacked'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n blur: [event: FocusEvent]\n focus: [event: FocusEvent]\n}>()\n\nconst switchRef = ref<any>()\nconst id = generateId(`sl-${props.name}`)\n\nconst { value, errorMessage, handleChange, handleBlur, meta } = useField(\n () => props.name,\n props.rules,\n {\n type: 'checkbox',\n validateOnMount: props.validateOnMount,\n initialValue: props.modelValue ?? props.defaultValue,\n syncVModel: true\n }\n)\n\nconst switchValue = ref<boolean>(props.modelValue ?? props.defaultValue)\n\n// Watch for external changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue !== undefined && newValue !== switchValue.value) {\n const boolVal = !!newValue\n switchValue.value = boolVal\n value.value = boolVal\n }\n },\n { immediate: true }\n)\n\nconst switchClasses = computed(() => {\n const baseClasses = [\n 'sl-relative',\n 'sl-inline-flex',\n 'sl-items-center',\n 'sl-h-6',\n 'sl-w-11',\n 'sl-flex-shrink-0',\n 'sl-cursor-pointer',\n 'sl-rounded-full',\n 'sl-border-2',\n 'sl-border-transparent',\n 'sl-transition-colors',\n 'sl-duration-200',\n 'sl-ease-in-out',\n 'focus:sl-outline-none',\n 'focus:sl-ring-2',\n 'focus:sl-ring-stachelock-600',\n 'focus:sl-ring-offset-2',\n 'dark:focus:sl-ring-offset-slate-900'\n ]\n\n if (props.disabled) {\n baseClasses.push(\n 'sl-cursor-not-allowed',\n 'sl-opacity-50'\n )\n }\n\n if (switchValue.value) {\n baseClasses.push('sl-bg-stachelock-600')\n } else {\n baseClasses.push('sl-bg-gray-200', 'dark:sl-bg-slate-600')\n }\n\n return baseClasses.join(' ')\n})\n\nconst handleToggle = (value: boolean) => {\n if (props.disabled) return\n \n switchValue.value = value\n if (props.immediate) {\n handleChange(value)\n }\n emit('update:modelValue', value)\n}\n\nconst onBlur = (event: FocusEvent) => {\n if (!props.immediate) {\n handleChange(switchValue.value)\n }\n handleBlur(event)\n emit('blur', event)\n}\n\nconst onFocus = (event: FocusEvent) => {\n emit('focus', event)\n}\n\n// Expose toggle method for external control\nconst toggle = () => {\n if (!props.disabled) {\n handleToggle(!switchValue.value)\n }\n}\n\ndefineExpose({\n toggle,\n value: switchValue,\n focus: () => {\n const refValue = switchRef.value\n const el = (refValue && typeof refValue === 'object' && '$el' in refValue) \n ? (refValue as { $el?: HTMLElement }).$el \n : refValue\n ;(el as HTMLButtonElement | null)?.focus?.()\n },\n blur: () => {\n const refValue = switchRef.value\n const el = (refValue && typeof refValue === 'object' && '$el' in refValue) \n ? (refValue as { $el?: HTMLElement }).$el \n : refValue\n ;(el as HTMLButtonElement | null)?.blur?.()\n },\n switchRef\n})\n</script>\n\n\n"],"names":["a","d","t","L","n","E","i","e","y","o","r","l","j","v","x","w","k","C","p","c","f","s","u","b","g","m","h","R","Q","z","P","ue","V","M","G","F","D","$","N","I","K","T","B","S","H","A","U","O","_","props","__props","emit","__emit","switchRef","ref","id","generateId","value","errorMessage","handleChange","handleBlur","meta","useField","switchValue","watch","newValue","boolVal","switchClasses","computed","baseClasses","handleToggle","onBlur","event","onFocus","toggle","__expose","refValue","_openBlock","_createElementBlock","_hoisted_1","_createVNode","FormFieldWrapper","_unref","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_normalizeClass","_cache","$event","Switch","_hoisted_7","_toDisplayString","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js","sources":["../src/components/inputs/SwitchInputGroup.vue"],"sourcesContent":["<!--\n @component SwitchInputGroup\n @description Groups multiple switch inputs in a configurable grid layout.\n \n Renders multiple SwitchInput components in a grid or vertical layout with\n optional group label and description. Useful for settings panels with\n multiple related toggle options.\n \n @props\n - switches (SwitchConfig[], required): Array of switch configurations\n - currentValues (Record<string, boolean>, optional): Current values for all switches\n - groupLabel (string, optional): Header title for the group\n - groupDescription (string, optional): Description under the title\n - boxShadow (boolean, optional): Apply card-like shadow wrapper\n - gridColsClass (string, optional): Tailwind grid column classes\n - vertical (boolean, optional): Stack switches vertically instead of grid\n \n @emits\n - update:value: Emitted when any switch value changes { name: string, value: boolean }\n \n @example\n <SwitchInputGroup\n :switches=\"[\n { name: 'dark-mode', label: 'Dark Mode' },\n { name: 'notifications', label: 'Notifications', defaultValue: true }\n ]\"\n :current-values=\"settings\"\n group-label=\"Preferences\"\n @update:value=\"handleSwitch\"\n />\n-->\n<template>\n <div \n v-if=\"boxShadow\" \n class=\"sl-bg-white dark:sl-bg-slate-800 sl-shadow sm:sl-rounded-lg sl-w-full\"\n data-testid=\"switch-input-group\"\n >\n <div class=\"sl-px-4 sl-py-5 sm:sl-p-6\">\n <div v-if=\"groupLabel || groupDescription\" class=\"sl-mb-4\">\n <h3 \n v-if=\"groupLabel\" \n class=\"sl-text-lg sl-font-medium sl-leading-6 sl-text-gray-900 dark:sl-text-white\"\n >\n {{ groupLabel }}\n </h3>\n <p \n v-if=\"groupDescription\" \n class=\"sl-mt-1 sl-text-sm sl-text-gray-500 dark:sl-text-gray-300\"\n >\n {{ groupDescription }}\n </p>\n </div>\n <div v-if=\"!vertical\" :class=\"['sl-grid sl-gap-x-6 sl-gap-y-4', gridColsClass]\">\n <div v-for=\"(switchItem, index) in switches\" :key=\"switchItem.name || index\">\n <SwitchInput\n :name=\"switchItem.name\"\n :label=\"switchItem.label\"\n :description=\"switchItem.description\"\n :text-true=\"switchItem.textTrue\"\n :text-false=\"switchItem.textFalse\"\n :disabled=\"switchItem.disabled\"\n :model-value=\"internalDisplayValues[switchItem.name]\"\n @update:model-value=\"(newValue: boolean) => handleSwitchUpdate(switchItem.name, newValue)\"\n :box-shadow=\"false\"\n />\n </div>\n </div>\n <div v-else class=\"sl-flex sl-flex-col sl-gap-4\">\n <div v-for=\"(switchItem, index) in switches\" :key=\"switchItem.name || index\">\n <SwitchInput\n :name=\"switchItem.name\"\n :label=\"switchItem.label\"\n :description=\"switchItem.description\"\n :text-true=\"switchItem.textTrue\"\n :text-false=\"switchItem.textFalse\"\n :disabled=\"switchItem.disabled\"\n :model-value=\"internalDisplayValues[switchItem.name]\"\n @update:model-value=\"(newValue: boolean) => handleSwitchUpdate(switchItem.name, newValue)\"\n :box-shadow=\"false\"\n />\n </div>\n </div>\n </div>\n </div>\n\n <div v-else data-testid=\"switch-input-group\">\n <div \n v-if=\"groupLabel || groupDescription\" \n :class=\"['sl-mb-4', !vertical ? 'sl-col-span-full' : '']\"\n >\n <h3 \n v-if=\"groupLabel\" \n class=\"sl-text-lg sl-font-medium sl-leading-6 sl-text-gray-900 dark:sl-text-white\"\n >\n {{ groupLabel }}\n </h3>\n <p \n v-if=\"groupDescription\" \n class=\"sl-mt-1 sl-text-sm sl-text-gray-500 dark:sl-text-gray-300\"\n >\n {{ groupDescription }}\n </p>\n </div>\n <div v-if=\"!vertical\" :class=\"['sl-grid sl-gap-x-6 sl-gap-y-4', gridColsClass]\">\n <div v-for=\"(switchItem, index) in switches\" :key=\"switchItem.name || index\">\n <SwitchInput\n :name=\"switchItem.name\"\n :label=\"switchItem.label\"\n :description=\"switchItem.description\"\n :text-true=\"switchItem.textTrue\"\n :text-false=\"switchItem.textFalse\"\n :disabled=\"switchItem.disabled\"\n :model-value=\"internalDisplayValues[switchItem.name]\"\n @update:model-value=\"(newValue: boolean) => handleSwitchUpdate(switchItem.name, newValue)\"\n :box-shadow=\"false\"\n />\n </div>\n </div>\n <div v-else class=\"sl-flex sl-flex-col sl-gap-4\">\n <div v-for=\"(switchItem, index) in switches\" :key=\"switchItem.name || index\">\n <SwitchInput\n :name=\"switchItem.name\"\n :label=\"switchItem.label\"\n :description=\"switchItem.description\"\n :text-true=\"switchItem.textTrue\"\n :text-false=\"switchItem.textFalse\"\n :disabled=\"switchItem.disabled\"\n :model-value=\"internalDisplayValues[switchItem.name]\"\n @update:model-value=\"(newValue: boolean) => handleSwitchUpdate(switchItem.name, newValue)\"\n :box-shadow=\"false\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, type PropType } from 'vue'\nimport SwitchInput from './SwitchInput.vue'\n\n/**\n * Configuration for a single switch in the group\n */\nexport interface SwitchConfig {\n name: string\n label: string\n description?: string\n textTrue?: string\n textFalse?: string\n defaultValue?: boolean\n disabled?: boolean\n rules?: unknown\n}\n\nconst props = defineProps({\n switches: {\n type: Array as PropType<SwitchConfig[]>,\n required: true\n },\n currentValues: {\n type: Object as PropType<Record<string, boolean>>,\n default: () => ({})\n },\n groupLabel: {\n type: String,\n default: ''\n },\n groupDescription: {\n type: String,\n default: ''\n },\n boxShadow: {\n type: Boolean,\n default: true\n },\n gridColsClass: {\n type: String,\n default: 'sl-grid-cols-1 sm:sl-grid-cols-2'\n },\n vertical: {\n type: Boolean,\n default: false\n }\n})\n\nconst emit = defineEmits<{\n 'update:value': [payload: { name: string; value: boolean }]\n}>()\n\nconst internalDisplayValues = ref<Record<string, boolean>>({})\n\nconst initializeOrUpdateInternalDisplayValues = () => {\n const newDisplayValues: Record<string, boolean> = {}\n props.switches.forEach((switchItem) => {\n newDisplayValues[switchItem.name] =\n props.currentValues[switchItem.name] !== undefined\n ? props.currentValues[switchItem.name]\n : switchItem.defaultValue !== undefined\n ? switchItem.defaultValue\n : false\n })\n internalDisplayValues.value = newDisplayValues\n}\n\n// Watch for changes in currentValues to update internalDisplayValues\nwatch(\n () => props.currentValues,\n () => {\n initializeOrUpdateInternalDisplayValues()\n },\n { deep: true }\n)\n\n// Watch for changes in switches prop\nwatch(\n () => props.switches,\n () => {\n initializeOrUpdateInternalDisplayValues()\n },\n { deep: true }\n)\n\n// Initialize on mount\ninitializeOrUpdateInternalDisplayValues()\n\nconst handleSwitchUpdate = (switchName: string, newValue: boolean) => {\n // Update internal display state immediately for responsiveness\n internalDisplayValues.value = {\n ...internalDisplayValues.value,\n [switchName]: newValue\n }\n // Emit the flat update event\n emit('update:value', { name: switchName, value: newValue })\n}\n</script>\n\n"],"names":["props","__props","emit","__emit","internalDisplayValues","ref","initializeOrUpdateInternalDisplayValues","newDisplayValues","switchItem","watch","handleSwitchUpdate","switchName","newValue","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_Fragment","_renderList","index","_createVNode","SwitchInput","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js","sources":["../src/components/tabs/TabGroup.vue"],"sourcesContent":["<!--\n @component TabGroup\n @description Pill-style tab navigation with mobile dropdown support.\n \n A comprehensive tab component that renders as pill-style tabs on desktop\n and automatically switches to a dropdown select on mobile. Uses HeadlessUI\n TabGroup for accessibility.\n \n @props\n - tabGroup (string, required): Name of the tab group for filtering\n - tabs (TabsItemType[], required): Array of tab configurations\n - tab (number, optional): Currently active tab index\n - tabCountTheme (TabCountTheme, optional): Theme for count badges\n - dropdownOnMobile (boolean, optional): Show dropdown on mobile (default: true)\n - fixedHeight (string, optional): Fixed height CSS class for content area\n \n @emits\n - tab-change: Emitted when active tab changes, payload is the new index\n \n @example\n <TabGroup\n tab-group=\"settings\"\n :tabs=\"settingsTabs\"\n :tab=\"activeTab\"\n @tab-change=\"handleTabChange\"\n />\n-->\n<template>\n <div class=\"sl-w-full\">\n <!-- Mobile dropdown using SelectInput -->\n <div v-if=\"showDropdownOnMobile\" class=\"sl-block sm:sl-hidden sl-mb-4\">\n <SelectInput\n :name=\"`${props.tabGroup}-mobile-tab-select`\"\n :items=\"selectInputItems\"\n :model-value=\"selectedTabItem\"\n item-key=\"id\"\n item-text=\"name\"\n placeholder=\"Select tab\"\n @update:model-value=\"handleSelectInputChange\"\n />\n </div>\n\n <!-- Desktop tabs -->\n <HeadlessTabGroup :selected-index=\"selectedTab\" @change=\"handleTabGroupTabChange\">\n <HeadlessTabList class=\"sl-hidden sm:sl-flex sl-space-x-1 sl-rounded-xl sl-bg-stachelock-900/20 dark:sl-bg-slate-800 sl-p-1\">\n <HeadlessTab\n v-for=\"tabItem in filteredTabs\"\n :key=\"tabItem.id\"\n as=\"template\"\n v-slot=\"{ selected }\"\n :disabled=\"tabItem.disabled\"\n >\n <button\n :class=\"[\n 'sl-w-full sl-rounded-lg sl-py-2.5 sl-px-4 sl-text-sm sl-font-medium sl-leading-5 sl-transition-all sl-duration-200',\n 'focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-2 focus:sl-ring-stachelock-500',\n selected\n ? 'sl-bg-white dark:sl-bg-slate-700 sl-text-stachelock-700 dark:sl-text-white sl-shadow'\n : 'sl-text-gray-600 dark:sl-text-slate-300 hover:sl-bg-white/[0.12] hover:sl-text-gray-800 dark:hover:sl-text-white',\n tabItem.disabled ? 'sl-opacity-50 sl-cursor-not-allowed' : 'sl-cursor-pointer'\n ]\"\n @mouseenter=\"mouseEnter(tabItem.id)\"\n @mouseleave=\"mouseLeave(tabItem.id)\"\n >\n <span class=\"sl-flex sl-items-center sl-justify-center sl-gap-2\">\n {{ tabItem.name }}\n <span\n v-if=\"tabItem.count !== undefined && tabItem.count !== null\"\n :class=\"[\n 'sl-ml-2 sl-rounded-full sl-py-0.5 sl-px-2.5 sl-text-xs sl-font-medium sl-tabular-nums',\n selected || hoverStates[tabItem.id]\n ? `sl-ring-1 ${themeClasses.ringColor} ${themeClasses.bgColor} sl-text-gray-800`\n : 'sl-bg-gray-200 dark:sl-bg-slate-600 sl-text-gray-700 dark:sl-text-slate-200'\n ]\"\n >\n {{ tabItem.count }}\n </span>\n </span>\n </button>\n </HeadlessTab>\n </HeadlessTabList>\n\n <!-- Tab content area -->\n <div class=\"sl-mt-4\">\n <slot name=\"component-heading\" />\n \n <KeepAlive>\n <component\n v-if=\"selectedComponent\"\n :is=\"selectedComponent\"\n :key=\"selectedTabId\"\n v-bind=\"selectedProps || {}\"\n v-on=\"selectedEvents || {}\"\n />\n </KeepAlive>\n \n <slot v-if=\"!selectedComponent\" />\n </div>\n </HeadlessTabGroup>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { \n TabGroup as HeadlessTabGroup, \n TabList as HeadlessTabList, \n Tab as HeadlessTab \n} from '@headlessui/vue';\nimport { useTabs, type TabCountTheme, type UseTabsProps } from '../../composables/useTabs';\nimport type { TabsItemType } from '../../types/layouts';\nimport SelectInput from '../inputs/SelectInput.vue';\n\ninterface Props {\n tabGroup: string;\n tabs: TabsItemType[];\n tab?: number | null;\n tabCountTheme?: TabCountTheme;\n dropdownOnMobile?: boolean;\n fixedHeight?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n tab: 0,\n tabCountTheme: 'primary',\n dropdownOnMobile: true,\n});\n\nconst emit = defineEmits<{\n 'tab-change': [index: number];\n}>();\n\nconst tabsProps: UseTabsProps = {\n tabGroup: props.tabGroup,\n tab: props.tab,\n tabs: props.tabs,\n tabCountTheme: props.tabCountTheme,\n dropdownOnMobile: props.dropdownOnMobile,\n fixedHeight: props.fixedHeight,\n};\n\nconst {\n selectedTabId,\n selectedTab,\n filteredTabs,\n hoverStates,\n themeClasses,\n dropdownOnMobile: showDropdownOnMobile,\n selectedComponent,\n selectedProps,\n selectedEvents,\n mouseEnter,\n mouseLeave,\n handleTabGroupTabChange: handleTabGroupChange,\n} = useTabs(tabsProps, (event, ...args) => {\n if (event === 'tab-change') {\n emit('tab-change', args[0] as number);\n }\n});\n\n// SelectInput compatible items - include count in name for mobile dropdown\nconst selectInputItems = computed(() => \n filteredTabs.value.map(tab => ({\n id: tab.id,\n name: tab.count !== undefined && tab.count !== null\n ? `${tab.name} (${tab.count})`\n : tab.name,\n disabled: tab.disabled\n }))\n);\n\n// Currently selected tab item for SelectInput\nconst selectedTabItem = computed(() => \n selectInputItems.value.find(item => item.id === selectedTabId.value) || null\n);\n\nconst handleTabGroupTabChange = (index: number) => {\n handleTabGroupChange(index);\n};\n\n// Handler for SelectInput changes\nconst handleSelectInputChange = (item: { id: number; name: string; disabled?: boolean } | null) => {\n if (!item) return;\n const index = filteredTabs.value.findIndex(t => t.id === item.id);\n if (index >= 0) {\n handleTabGroupTabChange(index);\n }\n};\n</script>\n"],"names":["props","__props","emit","__emit","tabsProps","selectedTabId","selectedTab","filteredTabs","hoverStates","themeClasses","showDropdownOnMobile","selectedComponent","selectedProps","selectedEvents","mouseEnter","mouseLeave","handleTabGroupChange","useTabs","event","args","selectInputItems","computed","tab","selectedTabItem","item","handleTabGroupTabChange","index","handleSelectInputChange","t","_openBlock","_createElementBlock","_hoisted_1","_unref","_hoisted_2","_createVNode","SelectInput","HeadlessTabGroup","HeadlessTabList","_Fragment","_renderList","tabItem","_createBlock","HeadlessTab","_withCtx","selected","_createElementVNode","_normalizeClass","$event","_hoisted_4","_toDisplayString","_hoisted_5","_renderSlot","_ctx","_KeepAlive","_resolveDynamicComponent","_mergeProps","_toHandlers"],"mappings":";;;;;;;;;;;;;;;;;;;AA0HA,UAAMA,IAAQC,GAMRC,IAAOC,GAIPC,IAA0B;AAAA,MAC9B,UAAUJ,EAAM;AAAA,MAChB,KAAKA,EAAM;AAAA,MACX,MAAMA,EAAM;AAAA,MACZ,eAAeA,EAAM;AAAA,MACrB,kBAAkBA,EAAM;AAAA,MACxB,aAAaA,EAAM;AAAA,IAAA,GAGf;AAAA,MACJ,eAAAK;AAAA,MACA,aAAAC;AAAA,MACA,cAAAC;AAAA,MACA,aAAAC;AAAA,MACA,cAAAC;AAAA,MACA,kBAAkBC;AAAA,MAClB,mBAAAC;AAAA,MACA,eAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,yBAAyBC;AAAA,IAAA,IACvBC,EAAQb,GAAW,CAACc,MAAUC,MAAS;AACzC,MAAID,MAAU,gBACZhB,EAAK,cAAciB,EAAK,CAAC,CAAW;AAAA,IAExC,CAAC,GAGKC,IAAmBC;AAAA,MAAS,MAChCd,EAAa,MAAM,IAAI,CAAAe,OAAQ;AAAA,QAC7B,IAAIA,EAAI;AAAA,QACR,MAAMA,EAAI,UAAU,UAAaA,EAAI,UAAU,OAC3C,GAAGA,EAAI,IAAI,KAAKA,EAAI,KAAK,MACzBA,EAAI;AAAA,QACR,UAAUA,EAAI;AAAA,MAAA,EACd;AAAA,IAAA,GAIEC,IAAkBF;AAAA,MAAS,MAC/BD,EAAiB,MAAM,KAAK,OAAQI,EAAK,OAAOnB,EAAc,KAAK,KAAK;AAAA,IAAA,GAGpEoB,IAA0B,CAACC,MAAkB;AACjD,MAAAV,EAAqBU,CAAK;AAAA,IAC5B,GAGMC,IAA0B,CAACH,MAAkE;AACjG,UAAI,CAACA,EAAM;AACX,YAAME,IAAQnB,EAAa,MAAM,UAAU,OAAKqB,EAAE,OAAOJ,EAAK,EAAE;AAChE,MAAIE,KAAS,KACXD,EAAwBC,CAAK;AAAA,IAEjC;sBA/JEG,EAAA,GAAAC,EAuEM,OAvENC,GAuEM;AAAA,MArEOC,EAAAtB,CAAA,KAAXmB,KAAAC,EAUM,OAVNG,GAUM;AAAA,QATJC,EAQEC,GAAA;AAAA,UAPC,MAAI,GAAKnC,EAAM,QAAQ;AAAA,UACvB,OAAOoB,EAAA;AAAA,UACP,eAAaG,EAAA;AAAA,UACd,YAAS;AAAA,UACT,aAAU;AAAA,UACV,aAAY;AAAA,UACX,uBAAoBI;AAAA,QAAA;;MAKzBO,EAuDmBF,EAAAI,CAAA,GAAA;AAAA,QAvDA,kBAAgBJ,EAAA1B,CAAA;AAAA,QAAc,UAAQmB;AAAA,MAAA;mBACvD,MAoCkB;AAAA,UApClBS,EAoCkBF,EAAAK,CAAA,GAAA,EApCD,OAAM,yGAAqG;AAAA,uBAExH,MAA+B;AAAA,sBADjCP,EAkCcQ,GAAA,MAAAC,EAjCMP,EAAAzB,CAAA,GAAY,CAAvBiC,YADTC,EAkCcT,EAAAU,CAAA,GAAA;AAAA,gBAhCX,KAAKF,EAAQ;AAAA,gBACd,IAAG;AAAA,gBAEF,UAAUA,EAAQ;AAAA,cAAA;gBAEnB,SAAAG,EAAA,CA0BS,EA7BC,UAAAC,QAAQ;AAAA,kBAGlBC,EA0BS,UAAA;AAAA,oBAzBN,OAAKC,EAAA;AAAA;;sBAAiQF;sBAAsQJ,EAAQ,WAAQ,wCAAA;AAAA,oBAAA;oBAQ5hB,cAAU,CAAAO,MAAEf,EAAAlB,CAAA,EAAW0B,EAAQ,EAAE;AAAA,oBACjC,cAAU,CAAAO,MAAEf,EAAAjB,CAAA,EAAWyB,EAAQ,EAAE;AAAA,kBAAA;oBAElCK,EAaO,QAbPG,IAaO;AAAA,0BAZFR,EAAQ,IAAI,IAAG,KAClB,CAAA;AAAA,sBACQA,EAAQ,UAAU,UAAaA,EAAQ,UAAK,aADpDV,EAUO,QAAA;AAAA;wBARJ,OAAKgB,EAAA;AAAA;0BAAiIF,KAAYZ,EAAAxB,CAAA,EAAYgC,EAAQ,EAAE,IAAqC,aAAAR,EAAAvB,CAAA,EAAa,SAAS,IAAIuB,EAAAvB,CAAA,EAAa,OAAO;;yBAOzPwC,EAAAT,EAAQ,KAAK,GAAA,CAAA;;;;;;;;;UAQ1BK,EAcM,OAdNK,IAcM;AAAA,YAbJC,EAAiCC,EAAA,QAAA,mBAAA;AAAA,kBAEjCX,EAQYY,GAAA,MAAA;AAAA,cANFrB,EAAArB,CAAA,KADRkB,EAAA,GAAAY,EAMEa,EAJKtB,EAAArB,CAAA,CAAiB,GAFxB4C,EAME,EAHC,KAAKvB,EAAA3B,CAAA,EAAA,GACE2B,EAAApB,CAAA,KAAa,CAAA,GACrB4C,EAAMxB,EAAqBnB,CAAA,KAAP,EAAA,CAAA,GAAA,MAAA,EAAA;;YAIXmB,EAAArB,CAAA,gBAAbwC,EAAkCC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;AAAA;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js","sources":["../src/components/tabs/TabGroupUnderline.vue"],"sourcesContent":["<!--\n @component TabGroupUnderline\n @description Underline-style tab navigation with mobile dropdown support.\n \n A tab component with underline indicator styling. Renders as underline tabs\n on desktop and switches to SelectInput dropdown on mobile.\n \n @props\n - tabGroup (string, required): Name of the tab group for filtering\n - tabs (TabsItemType[], required): Array of tab configurations\n - tab (number, optional): Currently active tab index\n - title (string, optional): Optional heading title\n - tabCountTheme (TabCountTheme, optional): Theme for count badges\n - dropdownOnMobile (boolean, optional): Show dropdown on mobile (default: true)\n - fixedHeight (string, optional): Fixed height CSS class for content area\n \n @emits\n - tab-change: Emitted when active tab changes, payload is the new index\n \n @example\n <TabGroupUnderline\n tab-group=\"users\"\n title=\"User Management\"\n :tabs=\"userTabs\"\n :tab=\"activeTab\"\n @tab-change=\"handleTabChange\"\n />\n-->\n<template>\n <div class=\"sl-w-full\">\n <!-- Optional title -->\n <h2 v-if=\"title\" class=\"sl-text-lg sl-font-semibold sl-text-gray-900 dark:sl-text-white sl-mb-4\">\n {{ title }}\n </h2>\n\n <!-- Mobile dropdown using SelectInput -->\n <div v-if=\"showDropdownOnMobile\" class=\"sl-block sm:sl-hidden sl-mb-4\">\n <SelectInput\n :name=\"`${tabGroup}-mobile-tab-select`\"\n :items=\"selectInputItems\"\n :model-value=\"selectedTabItem\"\n item-key=\"id\"\n item-text=\"name\"\n placeholder=\"Select tab\"\n @update:model-value=\"handleSelectInputChange\"\n />\n </div>\n\n <!-- Desktop tabs -->\n <HeadlessTabGroup :selected-index=\"selectedTab\" @change=\"handleTabGroupTabChange\">\n <div class=\"sl-hidden sm:sl-block\">\n <div class=\"sl-border-b sl-border-gray-200 dark:sl-border-slate-700\">\n <nav class=\"sl--mb-px sl-flex sl-space-x-8\" aria-label=\"Tabs\">\n <button\n v-for=\"tabItem in filteredTabs\"\n :key=\"tabItem.id\"\n @click=\"selectTab(tabItem)\"\n @mouseenter=\"mouseEnter(tabItem.id)\"\n @mouseleave=\"mouseLeave(tabItem.id)\"\n :disabled=\"tabItem.disabled\"\n :class=\"[\n 'sl-flex sl-whitespace-nowrap sl-border-b-2 sl-py-4 sl-px-1 sl-text-sm sl-font-medium sl-transition-colors sl-duration-200',\n tabItem.id === selectedTabId\n ? 'sl-border-stachelock-500 sl-text-stachelock-600 dark:sl-text-stachelock-400'\n : 'sl-border-transparent sl-text-gray-500 dark:sl-text-slate-400 hover:sl-border-gray-200 dark:hover:sl-border-slate-600 hover:sl-text-gray-700 dark:hover:sl-text-slate-300',\n tabItem.disabled ? 'sl-opacity-50 sl-cursor-not-allowed' : 'sl-cursor-pointer'\n ]\"\n :aria-current=\"tabItem.id === selectedTabId ? 'page' : undefined\"\n >\n {{ tabItem.name }}\n <span\n v-if=\"tabItem.count !== undefined && tabItem.count !== null\"\n :class=\"[\n 'sl-ml-3 sl-hidden sl-rounded-full sl-py-0.5 sl-px-2.5 sl-text-xs sl-font-medium md:sl-inline-block sl-tabular-nums',\n tabItem.id === selectedTabId\n ? 'sl-bg-stachelock-100 dark:sl-bg-stachelock-900/30 sl-text-stachelock-600 dark:sl-text-stachelock-400'\n : 'sl-bg-gray-100 dark:sl-bg-slate-700 sl-text-gray-800 dark:sl-text-slate-200',\n hoverStates[tabItem.id] ? 'sl-ring-1 sl-ring-stachelock-600' : ''\n ]\"\n >\n {{ tabItem.count }}\n </span>\n </button>\n </nav>\n </div>\n </div>\n\n <!-- Tab content area -->\n <div class=\"sl-mt-4\">\n <slot name=\"component-heading\" />\n \n <KeepAlive>\n <component\n v-if=\"selectedComponent\"\n :is=\"selectedComponent\"\n :key=\"selectedTabId\"\n v-bind=\"selectedProps || {}\"\n v-on=\"selectedEvents || {}\"\n />\n </KeepAlive>\n \n <slot v-if=\"!selectedComponent\" />\n </div>\n </HeadlessTabGroup>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { TabGroup as HeadlessTabGroup } from '@headlessui/vue';\nimport { useTabs, type TabCountTheme, type UseTabsProps } from '../../composables/useTabs';\nimport type { TabsItemType } from '../../types/layouts';\nimport SelectInput from '../inputs/SelectInput.vue';\n\ninterface Props {\n tabGroup: string;\n tabs: TabsItemType[];\n tab?: number | null;\n title?: string;\n tabCountTheme?: TabCountTheme;\n dropdownOnMobile?: boolean;\n fixedHeight?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n tab: 0,\n tabCountTheme: 'primary',\n dropdownOnMobile: true,\n});\n\nconst emit = defineEmits<{\n 'tab-change': [index: number];\n}>();\n\nconst tabsProps: UseTabsProps = {\n tabGroup: props.tabGroup,\n tab: props.tab,\n tabs: props.tabs,\n tabCountTheme: props.tabCountTheme,\n dropdownOnMobile: props.dropdownOnMobile,\n fixedHeight: props.fixedHeight,\n};\n\nconst {\n selectedTabId,\n selectedTab,\n filteredTabs,\n hoverStates,\n dropdownOnMobile: showDropdownOnMobile,\n selectedComponent,\n selectedProps,\n selectedEvents,\n mouseEnter,\n mouseLeave,\n handleTabGroupTabChange: handleTabGroupChange,\n syncSelectedTabForDesktop,\n} = useTabs(tabsProps, (event, ...args) => {\n if (event === 'tab-change') {\n emit('tab-change', args[0] as number);\n }\n});\n\n// SelectInput compatible items - include count in name for mobile dropdown\nconst selectInputItems = computed(() => \n filteredTabs.value.map(tab => ({\n id: tab.id,\n name: tab.count !== undefined && tab.count !== null\n ? `${tab.name} (${tab.count})`\n : tab.name,\n disabled: tab.disabled\n }))\n);\n\n// Currently selected tab item for SelectInput\nconst selectedTabItem = computed(() => \n selectInputItems.value.find(item => item.id === selectedTabId.value) || null\n);\n\nconst handleTabGroupTabChange = (index: number) => {\n handleTabGroupChange(index);\n};\n\nconst selectTab = (tabItem: TabsItemType) => {\n if (!tabItem.disabled) {\n syncSelectedTabForDesktop(tabItem);\n }\n};\n\n// Handler for SelectInput changes\nconst handleSelectInputChange = (item: { id: number; name: string; disabled?: boolean } | null) => {\n if (!item) return;\n const index = filteredTabs.value.findIndex(t => t.id === item.id);\n if (index >= 0) {\n handleTabGroupTabChange(index);\n }\n};\n</script>\n\n"],"names":["props","__props","emit","__emit","tabsProps","selectedTabId","selectedTab","filteredTabs","hoverStates","showDropdownOnMobile","selectedComponent","selectedProps","selectedEvents","mouseEnter","mouseLeave","handleTabGroupChange","syncSelectedTabForDesktop","useTabs","event","args","selectInputItems","computed","tab","selectedTabItem","item","handleTabGroupTabChange","index","selectTab","tabItem","handleSelectInputChange","t","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","_unref","_hoisted_3","_createVNode","SelectInput","HeadlessTabGroup","_createElementVNode","_hoisted_4","_hoisted_5","_hoisted_6","_Fragment","_renderList","$event","_normalizeClass","_hoisted_8","_renderSlot","_ctx","_createBlock","_KeepAlive","_resolveDynamicComponent","_mergeProps","_toHandlers"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js","sources":["../src/components/tabs/TabsInPills.vue"],"sourcesContent":["<!--\n @component TabsInPills\n @description Pill-style tabs for section headings with mobile dropdown.\n \n A tab component styled as pills, suitable for section headings.\n Includes mobile SelectInput dropdown fallback.\n \n @props\n - tabs (SimpleTabItem[], required): Array of tab configurations\n - label (string, optional): Label for the mobile select\n - badgeTheme (TabBadgeTheme, optional): Theme for count badges (default: 'primary')\n \n @emits\n - tab-changed: Emitted when active tab changes, payload is the new index\n \n @example\n <TabsInPills\n label=\"View\"\n :tabs=\"[\n { name: 'All', current: true },\n { name: 'Active', current: false, count: 5 },\n { name: 'Archived', current: false, count: 12 }\n ]\"\n @tab-changed=\"handleTabChange\"\n >\n <template #All>All items</template>\n <template #Active>Active items</template>\n <template #Archived>Archived items</template>\n </TabsInPills>\n-->\n<template>\n <div class=\"sl-w-full\">\n <!-- Mobile dropdown using SelectInput -->\n <div class=\"sm:sl-hidden\">\n <SelectInput\n :name=\"selectId\"\n :label=\"label\"\n :items=\"selectInputItems\"\n :model-value=\"selectedTabItem\"\n item-key=\"index\"\n item-text=\"name\"\n placeholder=\"Select tab\"\n @update:model-value=\"handleSelectInputChange\"\n />\n </div>\n\n <!-- Desktop pills -->\n <div class=\"sl-hidden sm:sl-block sl-overflow-x-auto\">\n <nav class=\"sl-flex sl-flex-nowrap sl-space-x-4\" aria-label=\"Tabs\">\n <a\n v-for=\"(tab, index) in localTabs\"\n :key=\"tab.name\"\n :href=\"tab.href || '#'\"\n @click.prevent=\"setActiveTab(index)\"\n :class=\"[\n tab.current \n ? 'sl-bg-stachelock-50 dark:sl-bg-stachelock-900/30 sl-text-stachelock-700 dark:sl-text-stachelock-400' \n : 'sl-text-gray-500 dark:sl-text-slate-400 hover:sl-text-gray-700 dark:hover:sl-text-slate-300',\n 'sl-rounded-md sl-px-3 sl-py-2 sl-text-sm sl-font-medium sl-cursor-pointer sl-transition-colors sl-duration-200 sl-flex sl-items-center sl-gap-2',\n tab.disabled ? 'sl-opacity-50 sl-cursor-not-allowed' : ''\n ]\"\n :aria-current=\"tab.current ? 'page' : undefined\"\n >\n {{ tab.name }}\n <span\n v-if=\"hasCount(tab)\"\n :class=\"[\n 'sl-rounded-full sl-py-0.5 sl-px-2 sl-text-xs sl-font-medium sl-tabular-nums',\n tab.current\n ? 'sl-bg-stachelock-100 dark:sl-bg-stachelock-800 sl-text-stachelock-600 dark:sl-text-stachelock-300'\n : 'sl-bg-gray-100 dark:sl-bg-slate-700 sl-text-gray-600 dark:sl-text-slate-300'\n ]\"\n >\n {{ tab.count }}\n </span>\n </a>\n </nav>\n </div>\n\n <!-- Default slot for general content -->\n <slot name=\"default\" />\n \n <!-- Named slots for each tab -->\n <template v-for=\"tab in localTabs\" :key=\"tab.name\">\n <div v-if=\"tab.current && slots[tab.name]\" class=\"sl-mt-4\">\n <slot :name=\"tab.name\" />\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SelectInput from '../inputs/SelectInput.vue';\nimport { useSimpleTabs } from '../../composables/useSimpleTabs';\nimport type { SimpleTabItem, TabBadgeTheme } from '../../types/tabs';\n\ninterface Props {\n tabs: SimpleTabItem[];\n label?: string;\n badgeTheme?: TabBadgeTheme;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n badgeTheme: 'primary'\n});\n\nconst emit = defineEmits<{\n 'tab-changed': [tabIndex: number];\n}>();\n\n// Use the shared composable for all tab logic\nconst {\n localTabs,\n selectInputItems,\n selectedTabItem,\n setActiveTab,\n handleSelectInputChange,\n hasCount,\n slots,\n selectId\n} = useSimpleTabs({\n getTabs: () => props.tabs,\n onTabChange: (index) => emit('tab-changed', index),\n includeCountInName: true,\n badgeTheme: props.badgeTheme\n});\n</script>\n"],"names":["props","__props","emit","__emit","localTabs","selectInputItems","selectedTabItem","setActiveTab","handleSelectInputChange","hasCount","slots","selectId","useSimpleTabs","index","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","SelectInput","_unref","_hoisted_3","_hoisted_4","_Fragment","_renderList","tab","_withModifiers","$event","_normalizeClass","_toDisplayString","_renderSlot","_ctx","_hoisted_6"],"mappings":";;;;;;;;;;;;;;;;;;AAsGA,UAAMA,IAAQC,GAIRC,IAAOC,GAKP;AAAA,MACJ,WAAAC;AAAA,MACA,kBAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,yBAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,UAAAC;AAAA,IAAA,IACEC,EAAc;AAAA,MAChB,SAAS,MAAMZ,EAAM;AAAA,MACrB,aAAa,CAACa,MAAUX,EAAK,eAAeW,CAAK;AAAA,MACjD,oBAAoB;AAAA,MACpB,YAAYb,EAAM;AAAA,IAAA,CACnB;sBA9FCc,EAAA,GAAAC,EAyDM,OAzDNC,GAyDM;AAAA,MAvDJC,EAWM,OAXNC,GAWM;AAAA,QAVJC,EASEC,GAAA;AAAA,UARC,MAAMC,EAAAV,CAAA;AAAA,UACN,OAAOV,EAAA;AAAA,UACP,OAAOoB,EAAAhB,CAAA;AAAA,UACP,eAAagB,EAAAf,CAAA;AAAA,UACd,YAAS;AAAA,UACT,aAAU;AAAA,UACV,aAAY;AAAA,UACX,uBAAoBe,EAAAb,CAAA;AAAA,QAAA;;MAKzBS,EA8BM,OA9BNK,GA8BM;AAAA,QA7BJL,EA4BM,OA5BNM,GA4BM;AAAA,WA3BJT,EAAA,EAAA,GAAAC,EA0BIS,GAAA,MAAAC,EAzBqBJ,EAAAjB,CAAA,GAAS,CAAxBsB,GAAKb,YADfE,EA0BI,KAAA;AAAA,YAxBD,KAAKW,EAAI;AAAA,YACT,MAAMA,EAAI,QAAI;AAAA,YACd,SAAKC,EAAA,CAAAC,MAAUP,EAAAd,CAAA,EAAaM,CAAK,GAAA,CAAA,SAAA,CAAA;AAAA,YACjC,OAAKgB,EAAA;AAAA,cAAgBH,EAAI;;cAA0ZA,EAAI,WAAQ,wCAAA;AAAA,YAAA;YAO/b,gBAAcA,EAAI,mBAAmB;AAAA,UAAA;gBAEnCA,EAAI,IAAI,IAAG,KACd,CAAA;AAAA,YACQL,EAAAZ,CAAA,EAASiB,CAAG,UADpBX,EAUO,QAAA;AAAA;cARJ,OAAKc,EAAA;AAAA;gBAA+GH,EAAI;;eAOtHI,EAAAJ,EAAI,KAAK,GAAA,CAAA;;;;MAOpBK,EAAuBC,EAAA,QAAA,SAAA;AAAA,cAGvBjB,EAIWS,GAAA,MAAAC,EAJaJ,EAAAjB,CAAA,GAAS,CAAhBsB;QAAwB,KAAAA,EAAI;AAAA,MAAA;QAChCA,EAAI,WAAWL,KAAMK,EAAI,IAAI,KAAxCZ,EAAA,GAAAC,EAEM,OAFNkB,GAEM;AAAA,UADJF,EAAyBC,EAAA,QAAZN,EAAI,IAAI;AAAA,QAAA;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js","sources":["../src/components/inputs/TagifyInput.vue"],"sourcesContent":["<template>\n <FormFieldWrapper\n :id=\"name\"\n :name=\"name\"\n :label=\"label\"\n :tertiary-label=\"tertiaryLabel\"\n :error-message=\"errorMessage\"\n :disabled=\"disabled\"\n :optional=\"optional\"\n >\n <template #tertiary-label-overlay>\n <slot name=\"tertiary-overlay\"></slot>\n </template>\n \n <div class=\"sl-flex sl-flex-wrap sl-items-center sl-gap-4 sl-rounded-md sl-bg-white sl-px-3 sm:sl-text-sm sm:sl-leading-6\"\n :class=\"inline ? null : 'sl-shadow-sm sl-border sl-border-gray-300 focus-within:sl-ring-2 focus-within:sl-ring-stachelock-600'\">\n <!-- Display selected tags as badges -->\n <UiBadge v-for=\"(tag, index) in selectedTags\" :key=\"index\" @click=\"editTag(index)\" theme=\"primary\" size=\"sm\">\n <span v-if=\"!tag.isEditing\">{{ tagDisplay(tag) }}</span>\n <input v-else ref=\"editInput\" v-model=\"tag[props.itemText]\" :placeholder=\"placeholder\"\n :disabled=\"disabled\" @keydown.enter.prevent=\"stopEditingTag(index)\"\n @blur=\"stopEditingTag(index)\"\n class=\"sl-bg-transparent sl-border-none sl-outline-none sl-text-stachelock-600 sl-text-sm placeholder:sl-text-stachelock-400/80 focus:sl-ring-0 focus:sl-ring-stachelock-600 focus:sl-rounded-lg -sl-mx-3 -sl-my-2\"\n :style=\"{ width: tag[props.itemText].length + 4 + 'ch' }\" />\n <button type=\"button\" class=\"sl-ml-2 sl-text-stachelock-600 hover:sl-text-stachelock-400 focus:sl-outline-none\"\n @click.stop=\"removeTag(index)\" :disabled=\"disabled\">\n <XMarkIcon class=\"sl-h-4 sl-w-4\" />\n </button>\n </UiBadge>\n <!-- Input for adding new tags -->\n <div class=\"sl-flex-1 sl-min-w-0 sl-relative\">\n <input ref=\"input\" v-model=\"query\" :placeholder=\"placeholder\" @input=\"filterItems\"\n :disabled=\"disabled\" @keydown.enter.prevent=\"addTag\"\n class=\"sl-w-full sl-border-none sl-outline-none sl-rounded-md focus:sl-ring-0 sl-text-sm sl-font-light -sl-mx-3 sl-pr-12\" />\n <!-- Overlay slot aligned to the far right -->\n <div class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-pointer-events-auto\">\n <slot name=\"input-overlay\" />\n </div>\n <!-- Suggestions Dropdown -->\n <div v-if=\"showDropdown && !disabled\"\n class=\"sl-absolute sl-z-50 sl-mt-1 sl-max-h-60 sl-w-full sl-overflow-auto sl-rounded-md sl-bg-white sl-py-1 sl-text-base sl-shadow-lg sl-ring-1 sl-ring-black sl-ring-opacity-5 focus:sl-outline-none sm:sl-text-sm\">\n <div v-for=\"item in filteredItems\" :key=\"item[itemKey]\"\n class=\"sl-cursor-pointer sl-select-none sl-py-2 sl-pl-3 sl-pr-9 hover:sl-bg-stachelock-600 hover:sl-text-white\"\n @click.prevent=\"selectSuggestion(item)\">\n <div class=\"sl-flex\">\n <span class=\"sl-truncate sl-font-semibold\">\n <span class=\"sl-block sl-truncate\">{{ itemDisplay(item) }}</span>\n </span>\n <span v-if=\"showSubext\" class=\"sl-ml-2 sl-truncate sl-text-gray-500\">\n {{ itemSecondaryDisplay(item) }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </FormFieldWrapper>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, watch, onMounted, nextTick } from 'vue';\nimport { XMarkIcon } from '@heroicons/vue/20/solid';\nimport UiBadge from '../UiBadge.vue';\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue';\nimport type { TagifyItem } from '../../types/inputs';\n\ntype Item = TagifyItem;\n\nconst props = defineProps({\n items: {\n type: Array as () => Item[],\n required: true,\n },\n value: {\n type: Array as () => Item[],\n default: () => [],\n },\n name: {\n type: String,\n required: true,\n },\n label: {\n type: String,\n required: false,\n },\n itemKey: {\n type: String,\n default: 'id',\n },\n itemText: {\n type: String,\n default: 'value',\n },\n itemSubtext: {\n type: String,\n default: 'name',\n },\n showSubext: {\n type: Boolean,\n default: true\n },\n tagDisplayKey: {\n type: String,\n default: 'name',\n },\n tertiaryLabel: {\n type: String,\n required: false,\n },\n pattern: {\n type: RegExp,\n default: null,\n },\n inline: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n default: 'Add a tag...',\n },\n disabled: {\n type: Boolean,\n default: false\n },\n optional: {\n type: Boolean,\n default: false\n },\n errorMessage: {\n type: String,\n default: ''\n },\n hasInputRing: {\n type: Boolean,\n default: false\n }\n});\n\nconst emits = defineEmits(['update:value', 'update:query', 'invalid-tag']);\n\nconst query = ref<string>('');\nconst filteredItems = ref<Item[]>([]);\nconst selectedTags = ref<Item[]>(JSON.parse(JSON.stringify(props.value)));\nconst showDropdown = ref(false);\n\nwatch(\n () => props.value,\n (newVal) => {\n if (JSON.stringify(newVal) !== JSON.stringify(selectedTags.value)) {\n selectedTags.value = JSON.parse(JSON.stringify(newVal));\n }\n },\n { deep: true }\n);\n\nconst itemDisplay = (item: Item) => item[props.itemSubtext] || item[props.itemText];\nconst itemSecondaryDisplay = (item: Item) => item[props.itemSubtext] ? item[props.itemText] : undefined;\nconst tagDisplay = (tag: Item) => tag[props.tagDisplayKey] || tag[props.itemText];\n\nconst filterItems = () => {\n if (query.value && query.value.length > 0) {\n emits('update:query', query.value);\n\n // Simple filtering logic\n const lowerQuery = query.value.toLowerCase();\n filteredItems.value = props.items.filter((item) => {\n return (\n item[props.itemText]?.toLowerCase().includes(lowerQuery) ||\n item[props.itemSubtext]?.toLowerCase().includes(lowerQuery)\n );\n });\n showDropdown.value = true;\n } else {\n filteredItems.value = [];\n showDropdown.value = false;\n }\n};\n\nconst addTag = () => {\n const trimmedQuery = query.value.trim();\n if (trimmedQuery === '') {\n return;\n }\n\n let tagToAdd: Item | null = null;\n\n const lowerQuery = trimmedQuery.toLowerCase();\n\n // Check if the query matches any item in the items list\n const matchedItem = props.items.find(\n (item) =>\n item[props.itemText]?.toLowerCase() === lowerQuery ||\n item[props.itemSubtext]?.toLowerCase() === lowerQuery\n );\n\n if (matchedItem) {\n tagToAdd = { ...matchedItem };\n } else if (props.pattern && props.pattern.test(trimmedQuery)) {\n // Create a new item if it doesn't exist and matches the pattern\n tagToAdd = { id: null, [props.itemText]: trimmedQuery };\n } else {\n // Do not emit invalid-tag here; let the user continue typing\n return;\n }\n\n // Avoid duplicates\n if (\n !selectedTags.value.some(\n (tag) => tag[props.itemText] === tagToAdd![props.itemText]\n )\n ) {\n selectedTags.value.push(tagToAdd!);\n emits('update:value', selectedTags.value);\n }\n\n query.value = '';\n filteredItems.value = [];\n showDropdown.value = false;\n};\n\nconst selectSuggestion = (item: Item) => {\n const valueToTest = item[props.itemText].trim();\n\n // Avoid duplicates\n if (\n !selectedTags.value.some(\n (tag) => tag[props.itemText] === valueToTest\n )\n ) {\n selectedTags.value.push({ ...item });\n emits('update:value', selectedTags.value);\n }\n query.value = '';\n filteredItems.value = [];\n showDropdown.value = false;\n};\n\nconst removeTag = (index: number) => {\n selectedTags.value.splice(index, 1);\n emits('update:value', selectedTags.value);\n};\n\nconst editTag = (index: number) => {\n selectedTags.value[index].isEditing = true;\n nextTick(() => {\n // Focus logic can be added here if needed\n });\n};\n\nconst stopEditingTag = (index: number) => {\n const tag = selectedTags.value[index];\n if (tag) {\n tag.isEditing = false;\n const valueToTest = tag[props.itemText].trim();\n\n // Validate tag if pattern is provided\n if (props.pattern && !props.pattern.test(valueToTest)) {\n emits('invalid-tag', valueToTest);\n removeTag(index);\n return;\n }\n\n // Update the tag value after trimming\n tag[props.itemText] = valueToTest;\n emits('update:value', selectedTags.value);\n }\n};\n\nonMounted(() => {\n // Initialize filteredItems\n filteredItems.value = [];\n});\n\ndefineExpose({\n selectedTags,\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","emits","__emit","query","ref","filteredItems","selectedTags","showDropdown","watch","newVal","itemDisplay","item","itemSecondaryDisplay","tagDisplay","tag","filterItems","lowerQuery","addTag","trimmedQuery","tagToAdd","matchedItem","selectSuggestion","valueToTest","removeTag","index","editTag","nextTick","stopEditingTag","onMounted","__expose","_createBlock","FormFieldWrapper","_renderSlot","_ctx","_createElementVNode","_normalizeClass","_openBlock","_createElementBlock","_Fragment","_renderList","UiBadge","$event","_withKeys","_withModifiers","_hoisted_1","_toDisplayString","_createVNode","_unref","XMarkIcon","_hoisted_4","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js","sources":["../src/components/inputs/TextAreaInput.vue"],"sourcesContent":["<!--\n @component TextAreaInput\n @description Multi-line text input with character count.\n \n A styled textarea component with validation, character limit display,\n and auto-resize capability.\n \n @props\n - name (string, required): Field name for form binding\n - label (string, optional): Display label\n - placeholder (string, optional): Placeholder text\n - disabled (boolean, optional): Disabled state\n - rules (Schema, optional): Validation rules\n - modelValue (string, optional): Text value via v-model\n - rows (number, optional): Number of visible rows\n - maxlength (number, optional): Maximum character limit\n - spellcheck (boolean, optional): Enable spellcheck\n \n @emits\n - update:modelValue: Emitted when text changes\n - update:validity: Emitted when validation state changes\n \n @example\n <TextAreaInput\n name=\"bio\"\n label=\"Biography\"\n v-model=\"form.bio\"\n :rows=\"4\"\n :maxlength=\"500\"\n placeholder=\"Tell us about yourself...\"\n />\n-->\n<template>\n <div class=\"sl-w-full\">\n <FormFieldWrapper\n :id=\"id\"\n :name=\"name\"\n :label=\"label\"\n :disabled=\"disabled\"\n :optional=\"!rules\"\n :tertiary-label=\"tertiaryLabel\"\n :box-shadow=\"boxShadow\"\n :error-message=\"errorMessage\"\n :success-message=\"successMessage\"\n :is-valid=\"meta.valid\"\n :is-touched=\"meta.touched\"\n >\n <div class=\"sl-relative\">\n <textarea\n :id=\"id\"\n ref=\"textareaRef\"\n v-model=\"value\"\n :name=\"name\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :class=\"[\n textareaClasses,\n inputClass\n ]\"\n :style=\"inputStyle\"\n :spellcheck=\"spellcheck\"\n :rows=\"rows\"\n :maxlength=\"maxlength\"\n v-bind=\"$attrs\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @input=\"onInput\"\n />\n \n <!-- Character count -->\n <div \n v-if=\"maxlength !== undefined\" \n class=\"sl-absolute sl-bottom-2 sl-right-2 sl-text-xs sl-text-slate-500 dark:sl-text-slate-200 sl-pointer-events-none\"\n >\n {{ value?.length || 0 }}/{{ maxlength }}\n </div>\n </div>\n \n <template #success-message>\n <span v-if=\"successMessage\">{{ successMessage }}</span>\n </template>\n </FormFieldWrapper>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type StyleValue } from 'vue'\nimport { useField } from 'vee-validate'\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue'\nimport type { ValidationRule } from '../../types/form'\nimport { generateId } from '../../utils/id'\n\ninterface Props {\n name: string\n label?: string\n placeholder?: string\n disabled?: boolean\n rules?: ValidationRule\n validateOnMount?: boolean\n successMessage?: string\n tertiaryLabel?: string\n spellcheck?: boolean\n rows?: number\n maxlength?: number\n inputClass?: string\n inputStyle?: StyleValue\n lazy?: boolean\n modelValue?: string\n boxShadow?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n spellcheck: true,\n rows: 4,\n lazy: false,\n boxShadow: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n blur: [event: FocusEvent]\n focus: [event: FocusEvent]\n}>()\n\nconst textareaRef = ref<HTMLTextAreaElement>()\nconst id = generateId(props.name)\n\n// Use vee-validate for form validation\nconst { value, errorMessage, handleBlur, handleChange, meta } = useField(\n () => props.name,\n props.rules,\n {\n validateOnMount: props.validateOnMount,\n initialValue: props.modelValue,\n syncVModel: true\n }\n)\n\n// Sync with v-model\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue !== value.value) {\n value.value = newValue || ''\n }\n }\n)\n\nwatch(\n value,\n (newValue) => {\n emit('update:modelValue', newValue)\n }\n)\n\nconst textareaClasses = computed(() => {\n const baseClasses = [\n 'sl-w-full',\n 'sl-px-3',\n 'sl-py-2',\n 'sl-text-sm',\n 'sl-border',\n 'sl-rounded-md',\n 'sl-bg-white',\n 'dark:sl-bg-slate-900',\n 'sl-text-gray-900',\n 'dark:sl-text-slate-100',\n 'placeholder:sl-text-gray-400',\n 'dark:placeholder:sl-text-slate-500',\n 'sl-transition-all',\n 'sl-duration-200',\n 'focus:sl-outline-none',\n 'focus:sl-ring-2',\n 'focus:sl-ring-stachelock-500',\n 'focus:sl-border-stachelock-500',\n 'sl-resize-y',\n 'sl-min-h-[80px]'\n ]\n\n if (props.disabled) {\n baseClasses.push(\n 'sl-bg-gray-50',\n 'dark:sl-bg-slate-800',\n 'sl-text-gray-500',\n 'dark:sl-text-slate-300',\n 'sl-cursor-not-allowed',\n 'sl-border-gray-200',\n 'dark:sl-border-slate-700'\n )\n } else if (errorMessage.value) {\n baseClasses.push(\n 'sl-border-red-300',\n 'dark:sl-border-red-500',\n 'focus:sl-ring-red-500',\n 'focus:sl-border-red-500'\n )\n } else if (meta.valid && meta.touched) {\n baseClasses.push(\n 'sl-border-green-300',\n 'dark:sl-border-green-500',\n 'focus:sl-ring-green-500',\n 'focus:sl-border-green-500'\n )\n } else {\n baseClasses.push(\n 'sl-border-gray-300',\n 'dark:sl-border-slate-600',\n 'hover:sl-border-gray-400',\n 'dark:hover:sl-border-slate-500'\n )\n }\n\n return baseClasses.join(' ')\n})\n\nconst onInput = (event: Event) => {\n const target = event.target as HTMLTextAreaElement\n if (!props.lazy) {\n handleChange(target.value)\n }\n}\n\nconst onBlur = (event: FocusEvent) => {\n if (props.lazy) {\n const target = event.target as HTMLTextAreaElement\n handleChange(target.value)\n }\n handleBlur(event)\n emit('blur', event)\n}\n\nconst onFocus = (event: FocusEvent) => {\n emit('focus', event)\n}\n\nconst focus = () => {\n textareaRef.value?.focus()\n}\n\nconst blur = () => {\n textareaRef.value?.blur()\n}\n\ndefineExpose({\n focus,\n blur,\n textareaRef\n})\n</script>\n\n\n"],"names":["props","__props","emit","__emit","textareaRef","ref","id","generateId","value","errorMessage","handleBlur","handleChange","meta","useField","watch","newValue","textareaClasses","computed","baseClasses","onInput","event","target","onBlur","onFocus","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","FormFieldWrapper","_unref","_createElementVNode","_hoisted_2","_withDirectives","_mergeProps","$event","$attrs","_hoisted_4","_toDisplayString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js","sources":["../src/components/UiAvatar.vue"],"sourcesContent":["<!--\n @component UiAvatar\n @description Avatar component displaying user image or initials fallback.\n \n Supports flexible data structures with configurable path resolution for\n images and names. Falls back to initials when no image is available.\n \n @props\n - data (object, optional): Flexible data object with image/name properties\n - name (string, optional): Direct name for initials\n - imageUrl (string, optional): Direct image URL\n - size (Size | number, optional): Avatar size - 'xs' through '2xl' or number\n - color (string, optional): Background color class for initials fallback\n - ring (string, optional): Ring/border class\n - rounded (string, optional): Border radius class\n - fallbackInitials (string, optional): Fallback when no name available\n - imagePath (string | string[], optional): Path to image in data object\n - namePath (string | string[], optional): Path to name in data object\n \n @example\n <UiAvatar name=\"John Doe\" size=\"lg\" />\n \n @example\n <UiAvatar :data=\"user\" image-path=\"profile.avatar.url\" name-path=\"profile.displayName\" />\n-->\n<template>\n <div class=\"sl-relative sl-inline-block\" :class=\"[sizeClass, ring, rounded]\">\n <div v-if=\"hasImage && !imageError\" class=\"sl-h-full sl-w-full\">\n <img\n :src=\"imageUrl\"\n :alt=\"displayName\"\n class=\"sl-h-full sl-w-full sl-object-cover\"\n :class=\"rounded\"\n @error=\"handleImageError\"\n />\n </div>\n <div v-if=\"!hasImage || imageError\" class=\"sl-h-full sl-w-full sl-flex sl-items-center sl-justify-center sl-font-semibold sl-text-white\"\n :class=\"[color, rounded]\">\n {{ initials }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * UiAvatar - User avatar component with image and initials fallback\n * \n * Displays a user avatar with automatic fallback to initials when no image\n * is available or when image fails to load. Supports flexible data structures\n * through configurable path resolution.\n * \n * ## Features\n * - Image display with error handling\n * - Automatic initials generation from name\n * - Flexible data object support with path resolution\n * - Multiple size options\n * - Customizable colors and styling\n * \n * @module components/UiAvatar\n * @see {@link AvatarType} for prop interface\n */\nimport { computed, ref } from 'vue';\n\n// Type for flexible avatar data object\ntype AvatarData = Record<string, unknown> & {\n name?: string;\n display_name?: string;\n full_name?: string;\n username?: string;\n title?: string;\n image?: { url?: string };\n profile_image?: { url?: string };\n avatar?: { url?: string };\n photo?: { url?: string };\n picture?: { url?: string };\n [key: string]: unknown;\n};\n\ninterface AvatarProps {\n // Flexible data object - can be any object with optional name and image properties\n data?: AvatarData;\n \n // Direct properties for simple use cases\n name?: string;\n imageUrl?: string;\n \n // Size options\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | number;\n \n // Styling options\n color?: string;\n ring?: string;\n rounded?: string;\n \n // Image fallback options\n fallbackInitials?: string;\n fallbackIcon?: string;\n \n // Custom image path keys for different data structures\n imagePath?: string | string[]; // e.g., 'profile_image.url' or ['profile_image', 'url']\n namePath?: string | string[]; // e.g., 'display_name' or ['user', 'profile', 'name']\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n size: 'md',\n color: 'sl-bg-primary-600 dark:sl-bg-primary-500',\n ring: 'sl-ring-white dark:sl-ring-slate-800',\n rounded: 'sl-rounded-full',\n fallbackInitials: '?',\n imagePath: 'image.url',\n namePath: 'name'\n});\n\nconst imageError = ref(false);\n\nconst handleImageError = () => {\n imageError.value = true;\n};\n\n// Size classes mapping\nconst sizeClasses: Record<string, string> = {\n xs: 'sl-h-6 sl-w-6',\n sm: 'sl-h-8 sl-w-8',\n md: 'sl-h-12 sl-w-12',\n lg: 'sl-h-16 sl-w-16',\n xl: 'sl-h-20 sl-w-20',\n '2xl': 'sl-h-24 sl-w-24',\n};\n\nconst sizeClass = computed(() => {\n if (typeof props.size === 'number') {\n return `sl-h-${props.size} sl-w-${props.size}`;\n }\n return sizeClasses[props.size] || sizeClasses.md;\n});\n\n// Helper function to get nested object values\nconst getNestedValue = (obj: AvatarData | undefined, path: string | string[]): string | undefined => {\n if (!obj) return undefined;\n \n const keys = Array.isArray(path) ? path : path.split('.');\n let current: unknown = obj;\n \n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n \n return typeof current === 'string' ? current : undefined;\n};\n\n// Get image URL from various sources\nconst imageUrl = computed(() => {\n // Direct imageUrl prop takes precedence\n if (props.imageUrl) return props.imageUrl;\n \n // Try to get from data object using imagePath\n if (props.data && props.imagePath) {\n const url = getNestedValue(props.data, props.imagePath);\n if (url) return url;\n }\n \n // Fallback to common image paths if no specific path provided\n if (props.data) {\n const commonPaths = [\n 'profile_image.url',\n 'image.url',\n 'avatar.url',\n 'photo.url',\n 'picture.url'\n ];\n \n for (const path of commonPaths) {\n const url = getNestedValue(props.data, path);\n if (url) return url;\n }\n }\n \n return null;\n});\n\n// Get display name from various sources\nconst displayName = computed(() => {\n // Direct name prop takes precedence\n if (props.name) return props.name;\n \n // Try to get from data object using namePath\n if (props.data && props.namePath) {\n const name = getNestedValue(props.data, props.namePath);\n if (name) return name;\n }\n \n // Fallback to common name paths if no specific path provided\n if (props.data) {\n const commonPaths = [\n 'name',\n 'display_name',\n 'full_name',\n 'username',\n 'title'\n ];\n \n for (const path of commonPaths) {\n const name = getNestedValue(props.data, path);\n if (name) return name;\n }\n }\n \n return '';\n});\n\nconst hasImage = computed(() => {\n return !!imageUrl.value;\n});\n\nconst initials = computed(() => {\n const name = displayName.value;\n \n if (!name || name.trim() === '') {\n return props.fallbackInitials;\n }\n\n const names = name.split(' ').filter(Boolean);\n if (names.length === 0) {\n return props.fallbackInitials;\n }\n\n if (names.length === 1) {\n return names[0][0].toUpperCase();\n } else {\n return (names[0][0] + names[names.length - 1][0]).toUpperCase();\n }\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","imageError","ref","handleImageError","sizeClasses","sizeClass","computed","getNestedValue","obj","path","keys","current","key","imageUrl","url","commonPaths","displayName","name","hasImage","initials","names","_createElementBlock","_openBlock","_hoisted_1","_createElementVNode","_normalizeClass"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js","sources":["../src/components/UiBadge.vue"],"sourcesContent":["<!--\n @component UiBadge\n @description Status indicators, labels, and notification counts.\n \n @props\n - color: Color variant (gray, red, yellow, green, blue, indigo, purple, pink)\n - size: Size variant (sm, md, lg)\n - dot: Show leading status dot\n - removable: Show remove button\n \n @emits\n - remove: Emitted when remove button is clicked\n \n @slots\n - default: Badge content\n-->\n<template>\n <span :class=\"badgeClasses\">\n <!-- Status Dot -->\n <span v-if=\"dot\" :class=\"dotClasses\" />\n \n <!-- Content -->\n <slot />\n \n <!-- Remove Button -->\n <button\n v-if=\"removable\"\n type=\"button\"\n @click=\"$emit('remove')\"\n :class=\"removeButtonClasses\"\n >\n <svg class=\"sl-h-3 sl-w-3\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n <path d=\"M4 4l6 6m0-6l-6 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\" />\n </svg>\n </button>\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\ntype BadgeColor = 'gray' | 'red' | 'yellow' | 'green' | 'blue' | 'indigo' | 'purple' | 'pink';\ntype BadgeSize = 'sm' | 'md' | 'lg';\n\ninterface BadgeProps {\n color?: BadgeColor;\n size?: BadgeSize;\n dot?: boolean;\n removable?: boolean;\n}\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n color: 'gray',\n size: 'md',\n dot: false,\n removable: false,\n});\n\ndefineEmits<{\n remove: [];\n}>();\n\n// Color classes for each variant\nconst colorClasses = computed(() => {\n const colors: Record<BadgeColor, string> = {\n gray: 'sl-bg-gray-100 dark:sl-bg-gray-800 sl-text-gray-700 dark:sl-text-gray-300 sl-ring-gray-500/20 dark:sl-ring-gray-500/30',\n red: 'sl-bg-red-50 dark:sl-bg-red-900/30 sl-text-red-700 dark:sl-text-red-400 sl-ring-red-600/20 dark:sl-ring-red-500/30',\n yellow: 'sl-bg-yellow-50 dark:sl-bg-yellow-900/30 sl-text-yellow-800 dark:sl-text-yellow-400 sl-ring-yellow-600/20 dark:sl-ring-yellow-500/30',\n green: 'sl-bg-green-50 dark:sl-bg-green-900/30 sl-text-green-700 dark:sl-text-green-400 sl-ring-green-600/20 dark:sl-ring-green-500/30',\n blue: 'sl-bg-blue-50 dark:sl-bg-blue-900/30 sl-text-blue-700 dark:sl-text-blue-400 sl-ring-blue-600/20 dark:sl-ring-blue-500/30',\n indigo: 'sl-bg-indigo-50 dark:sl-bg-indigo-900/30 sl-text-indigo-700 dark:sl-text-indigo-400 sl-ring-indigo-600/20 dark:sl-ring-indigo-500/30',\n purple: 'sl-bg-purple-50 dark:sl-bg-purple-900/30 sl-text-purple-700 dark:sl-text-purple-400 sl-ring-purple-600/20 dark:sl-ring-purple-500/30',\n pink: 'sl-bg-pink-50 dark:sl-bg-pink-900/30 sl-text-pink-700 dark:sl-text-pink-400 sl-ring-pink-600/20 dark:sl-ring-pink-500/30',\n };\n return colors[props.color];\n});\n\n// Size classes\nconst sizeClasses = computed(() => {\n const sizes: Record<BadgeSize, string> = {\n sm: 'sl-px-2 sl-py-0.5 sl-text-xs',\n md: 'sl-px-2.5 sl-py-0.5 sl-text-xs',\n lg: 'sl-px-3 sl-py-1 sl-text-sm',\n };\n return sizes[props.size];\n});\n\n// Dot color classes\nconst dotClasses = computed(() => {\n const dotColors: Record<BadgeColor, string> = {\n gray: 'sl-bg-gray-500',\n red: 'sl-bg-red-500',\n yellow: 'sl-bg-yellow-500',\n green: 'sl-bg-green-500',\n blue: 'sl-bg-blue-500',\n indigo: 'sl-bg-indigo-500',\n purple: 'sl-bg-purple-500',\n pink: 'sl-bg-pink-500',\n };\n return [\n 'sl-h-1.5 sl-w-1.5 sl-rounded-full sl-mr-1.5',\n dotColors[props.color]\n ];\n});\n\n// Remove button classes (hover matches badge color)\nconst removeButtonClasses = computed(() => {\n const hoverColors: Record<BadgeColor, string> = {\n gray: 'hover:sl-bg-gray-200 dark:hover:sl-bg-gray-700',\n red: 'hover:sl-bg-red-100 dark:hover:sl-bg-red-800/50',\n yellow: 'hover:sl-bg-yellow-100 dark:hover:sl-bg-yellow-800/50',\n green: 'hover:sl-bg-green-100 dark:hover:sl-bg-green-800/50',\n blue: 'hover:sl-bg-blue-100 dark:hover:sl-bg-blue-800/50',\n indigo: 'hover:sl-bg-indigo-100 dark:hover:sl-bg-indigo-800/50',\n purple: 'hover:sl-bg-purple-100 dark:hover:sl-bg-purple-800/50',\n pink: 'hover:sl-bg-pink-100 dark:hover:sl-bg-pink-800/50',\n };\n return [\n 'sl-ml-1 sl-rounded-sm sl-p-0.5 sl-transition-colors',\n hoverColors[props.color]\n ];\n});\n\n// Combined badge classes\nconst badgeClasses = computed(() => [\n 'sl-inline-flex sl-items-center sl-font-medium sl-rounded-full sl-ring-1 sl-ring-inset',\n colorClasses.value,\n sizeClasses.value,\n]);\n</script>\n"],"names":["props","__props","colorClasses","computed","sizeClasses","dotClasses","removeButtonClasses","badgeClasses","_createElementBlock","_renderSlot","_ctx","$emit","_createElementVNode"],"mappings":";;;;;;;;;;;AAmDA,UAAMA,IAAQC,GAYRC,IAAeC,EAAS,OACe;AAAA,MACzC,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA,GAEMH,EAAM,KAAK,CAC1B,GAGKI,IAAcD,EAAS,OACc;AAAA,MACvC,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAEOH,EAAM,IAAI,CACxB,GAGKK,IAAaF,EAAS,MAWnB;AAAA,MACL;AAAA,MAX4C;AAAA,QAC5C,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA,EAIIH,EAAM,KAAK;AAAA,IAAA,CAExB,GAGKM,IAAsBH,EAAS,MAW5B;AAAA,MACL;AAAA,MAX8C;AAAA,QAC9C,MAAM;AAAA,QACN,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA,EAIMH,EAAM,KAAK;AAAA,IAAA,CAE1B,GAGKO,IAAeJ,EAAS,MAAM;AAAA,MAClC;AAAA,MACAD,EAAa;AAAA,MACbE,EAAY;AAAA,IAAA,CACb;2BA/GCI,EAkBO,QAAA;AAAA,MAlBA,SAAOD,EAAA,KAAY;AAAA,IAAA;MAEZN,EAAA,YAAZO,EAAuC,QAAA;AAAA;QAArB,SAAOH,EAAA,KAAU;AAAA,MAAA;MAGnCI,EAAQC,EAAA,QAAA,SAAA;AAAA,MAIAT,EAAA,kBADRO,EASS,UAAA;AAAA;QAPP,MAAK;AAAA,QACJ,gCAAOG,EAAAA,MAAK,QAAA;AAAA,QACZ,SAAOL,EAAA,KAAmB;AAAA,MAAA;QAE3BM,EAEM,OAAA;AAAA,UAFD,OAAM;AAAA,UAAgB,SAAQ;AAAA,UAAY,MAAK;AAAA,QAAA;UAClDA,EAA0G,QAAA;AAAA,YAApG,GAAE;AAAA,YAAoB,QAAO;AAAA,YAAe,gBAAa;AAAA,YAAM,kBAAe;AAAA,YAAQ,MAAK;AAAA,UAAA;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js","sources":["../src/components/UiButtonGroup.vue"],"sourcesContent":["<!--\n @component ButtonGroup\n @description A group of buttons with connected styling and active state support.\n \n A flexible button group component that displays multiple buttons in a connected\n row with support for active states, icons, loading states, and various themes.\n \n @props\n - buttons (ButtonGroupItem[]): Array of button configurations\n - modelValue (string | number, optional): Currently active button value (v-model)\n - size ('xs' | 'sm' | 'md' | 'lg'): Button size\n - theme ('default' | 'primary' | 'secondary'): Color theme for active state\n - disabled (boolean): Disable all buttons\n - fullWidth (boolean): Make button group span full width\n \n @emits\n - update:modelValue: Emitted when a button is clicked with the button value\n - click: Emitted when any button is clicked with the button object\n \n @example\n <ButtonGroup\n v-model=\"selectedOption\"\n :buttons=\"[\n { value: 'list', label: 'List', icon: ListIcon },\n { value: 'grid', label: 'Grid', icon: GridIcon },\n ]\"\n />\n-->\n<template>\n <div \n class=\"sl-inline-flex sl-rounded-md sl-shadow-sm\" \n :class=\"{ 'sl-w-full': fullWidth }\"\n role=\"group\"\n >\n <button\n v-for=\"(button, index) in buttons\"\n :key=\"button.value ?? index\"\n type=\"button\"\n :disabled=\"button.disabled || button.loading || disabled\"\n :class=\"getButtonClasses(button, index)\"\n @click=\"handleClick(button)\"\n :aria-pressed=\"isActive(button)\"\n >\n <!-- Loading state -->\n <span \n v-if=\"button.loading\" \n class=\"sl-inline-flex sl-items-center\"\n >\n <svg \n class=\"sl-animate-spin sl-h-4 sl-w-4\" \n fill=\"none\" \n viewBox=\"0 0 24 24\"\n >\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 </span>\n \n <!-- Leading icon -->\n <component \n v-else-if=\"button.icon\" \n :is=\"button.icon\" \n :class=\"getIconClasses(button)\"\n />\n \n <!-- Label -->\n <span \n v-if=\"button.label && !button.loading\" \n :class=\"{ 'sl-ml-1.5': button.icon }\"\n >\n {{ button.label }}\n </span>\n </button>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * ButtonGroup - Connected button group component\n * \n * @module components/UiButtonGroup\n */\nimport { computed, type Component } from 'vue';\n\ntype Size = 'xs' | 'sm' | 'md' | 'lg';\ntype Theme = 'default' | 'primary' | 'secondary';\n\ninterface ButtonGroupItem {\n /** Unique value for the button */\n value: string | number;\n /** Display label */\n label?: string;\n /** Icon component */\n icon?: Component;\n /** Whether button is disabled */\n disabled?: boolean;\n /** Whether button is in loading state */\n loading?: boolean;\n /** Custom active class override */\n activeClass?: string;\n /** Custom icon class when active */\n activeIconClass?: string;\n}\n\ninterface Props {\n /** Array of button configurations */\n buttons: ButtonGroupItem[];\n /** Currently active button value */\n modelValue?: string | number | null;\n /** Button size */\n size?: Size;\n /** Color theme for active state */\n theme?: Theme;\n /** Disable all buttons */\n disabled?: boolean;\n /** Make button group span full width */\n fullWidth?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: null,\n size: 'md',\n theme: 'primary',\n disabled: false,\n fullWidth: false,\n});\n\nconst emit = defineEmits<{\n /** Emitted when a button is clicked */\n 'update:modelValue': [value: string | number];\n /** Emitted when any button is clicked */\n click: [button: ButtonGroupItem];\n}>();\n\n// Check if a button is active\nconst isActive = (button: ButtonGroupItem): boolean => {\n return props.modelValue === button.value;\n};\n\n// Size-based padding classes\nconst sizeClasses = computed(() => {\n const sizes: Record<Size, string> = {\n xs: 'sl-px-2 sl-py-1 sl-text-xs',\n sm: 'sl-px-2.5 sl-py-1.5 sl-text-sm',\n md: 'sl-px-3 sl-py-2 sl-text-sm',\n lg: 'sl-px-4 sl-py-2.5 sl-text-base',\n };\n return sizes[props.size];\n});\n\n// Theme-based active classes\nconst activeClasses = computed(() => {\n const themes: Record<Theme, string> = {\n default: 'sl-text-gray-900 sl-bg-gray-100 dark:sl-text-white dark:sl-bg-gray-700',\n primary: 'sl-text-stachelock-600 sl-bg-stachelock-50 dark:sl-text-stachelock-400 dark:sl-bg-stachelock-900/30',\n secondary: 'sl-text-gray-700 sl-bg-gray-50 dark:sl-text-gray-300 dark:sl-bg-gray-800',\n };\n return themes[props.theme];\n});\n\n// Get classes for a button\nconst getButtonClasses = (button: ButtonGroupItem, index: number): string[] => {\n const isFirst = index === 0;\n const isLast = index === props.buttons.length - 1;\n const active = isActive(button);\n const isDisabled = button.disabled || button.loading || props.disabled;\n\n const classes: string[] = [\n 'sl-inline-flex',\n 'sl-items-center',\n 'sl-font-medium',\n 'sl-border',\n 'sl-border-gray-300',\n 'dark:sl-border-gray-600',\n 'sl-transition-colors',\n 'focus:sl-z-10',\n 'focus:sl-outline-none',\n 'focus:sl-ring-2',\n 'focus:sl-ring-stachelock-500',\n 'focus:sl-ring-offset-1',\n sizeClasses.value,\n ];\n\n // Full width distribution\n if (props.fullWidth) {\n classes.push('sl-flex-1', 'sl-justify-center');\n }\n\n // Position-based rounding\n if (isFirst) {\n classes.push('sl-rounded-l-md');\n } else {\n classes.push('-sl-ml-px');\n }\n \n if (isLast) {\n classes.push('sl-rounded-r-md');\n }\n\n // Active state\n if (active) {\n classes.push(button.activeClass || activeClasses.value);\n } else {\n classes.push(\n 'sl-text-gray-700',\n 'dark:sl-text-gray-300',\n 'sl-bg-white',\n 'dark:sl-bg-gray-800',\n 'hover:sl-bg-gray-50',\n 'dark:hover:sl-bg-gray-700'\n );\n }\n\n // Disabled state\n if (isDisabled) {\n classes.push('sl-cursor-not-allowed', 'sl-opacity-50');\n } else {\n classes.push('sl-cursor-pointer');\n }\n\n return classes;\n};\n\n// Get icon classes\nconst getIconClasses = (button: ButtonGroupItem): string[] => {\n const active = isActive(button);\n const iconSizes: Record<Size, string> = {\n xs: 'sl-w-3.5 sl-h-3.5',\n sm: 'sl-w-4 sl-h-4',\n md: 'sl-w-5 sl-h-5',\n lg: 'sl-w-5 sl-h-5',\n };\n\n const classes: string[] = [iconSizes[props.size]];\n \n if (active && button.activeIconClass) {\n classes.push(button.activeIconClass);\n } else if (active) {\n classes.push('sl-text-stachelock-600', 'dark:sl-text-stachelock-400');\n } else {\n classes.push('sl-text-gray-500', 'dark:sl-text-gray-400');\n }\n \n return classes;\n};\n\n// Handle button click\nconst handleClick = (button: ButtonGroupItem): void => {\n if (!button.disabled && !button.loading && !props.disabled) {\n emit('update:modelValue', button.value);\n emit('click', button);\n }\n};\n</script>\n"],"names":["props","__props","emit","__emit","isActive","button","sizeClasses","computed","activeClasses","getButtonClasses","index","isFirst","isLast","active","isDisabled","classes","getIconClasses","handleClick","_createElementBlock","_normalizeClass","_openBlock","_Fragment","_renderList","$event","_hoisted_2","_cache","_createElementVNode","_createBlock","_resolveDynamicComponent","_toDisplayString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js","sources":["../src/components/UiCheckbox.vue"],"sourcesContent":["<!--\n @component UiCheckbox\n @description Simple checkbox for standalone use (tables, lists, etc.)\n \n For form checkboxes with validation, use CheckboxInput instead.\n \n @props\n - modelValue: Checked state (v-model)\n - indeterminate: Shows indeterminate state (for \"select all\" headers)\n - disabled: Disabled state\n - size: Checkbox size (sm, md, lg)\n - label: Optional label text\n - id: Optional id attribute\n \n @emits\n - update:modelValue: Emitted when checked state changes\n - change: Emitted with the new value\n-->\n<template>\n <label \n class=\"sl-inline-flex sl-items-center sl-gap-2 sl-cursor-pointer\"\n :class=\"{ 'sl-cursor-not-allowed sl-opacity-50': disabled }\"\n >\n <div class=\"sl-relative sl-flex sl-items-center sl-justify-center\">\n <input\n ref=\"checkboxRef\"\n type=\"checkbox\"\n :id=\"id\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :indeterminate=\"indeterminate\"\n class=\"sl-peer sl-appearance-none sl-rounded sl-border sl-border-slate-300 sl-bg-white sl-transition-all sl-duration-150\"\n :class=\"[\n sizeClasses,\n !disabled && 'hover:sl-border-slate-400 sl-cursor-pointer',\n 'checked:sl-bg-primary-600 checked:sl-border-primary-600',\n 'indeterminate:sl-bg-primary-600 indeterminate:sl-border-primary-600',\n 'focus:sl-ring-2 focus:sl-ring-primary-500 focus:sl-ring-offset-2 focus:sl-outline-none',\n 'disabled:sl-bg-slate-100 disabled:sl-border-slate-200 disabled:checked:sl-bg-slate-300 disabled:checked:sl-border-slate-300'\n ]\"\n @change=\"handleChange\"\n />\n <!-- Check icon -->\n <svg\n class=\"sl-absolute sl-pointer-events-none sl-text-white sl-transition-opacity sl-duration-150\"\n :class=\"[iconSizeClasses, modelValue && !indeterminate ? 'sl-opacity-100' : 'sl-opacity-0']\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M3 8L6 11L11 3.5\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <!-- Indeterminate icon -->\n <svg\n class=\"sl-absolute sl-pointer-events-none sl-text-white sl-transition-opacity sl-duration-150\"\n :class=\"[iconSizeClasses, indeterminate ? 'sl-opacity-100' : 'sl-opacity-0']\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n d=\"M3 7H11\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <span v-if=\"label\" class=\"sl-text-sm sl-text-slate-700 sl-select-none\">{{ label }}</span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted } from 'vue';\n\ntype CheckboxSize = 'sm' | 'md' | 'lg';\n\ninterface Props {\n modelValue?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n size?: CheckboxSize;\n label?: string;\n id?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: false,\n indeterminate: false,\n disabled: false,\n size: 'md',\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean];\n 'change': [value: boolean];\n}>();\n\nconst checkboxRef = ref<HTMLInputElement>();\n\n// Size classes\nconst sizeClasses = computed(() => {\n const sizes: Record<CheckboxSize, string> = {\n sm: 'sl-h-3.5 sl-w-3.5',\n md: 'sl-h-4 sl-w-4',\n lg: 'sl-h-5 sl-w-5',\n };\n return sizes[props.size];\n});\n\nconst iconSizeClasses = computed(() => {\n const sizes: Record<CheckboxSize, string> = {\n sm: 'sl-h-2.5 sl-w-2.5',\n md: 'sl-h-3 sl-w-3',\n lg: 'sl-h-3.5 sl-w-3.5',\n };\n return sizes[props.size];\n});\n\n// Handle indeterminate state (can't be set via attribute)\nwatch(\n () => props.indeterminate,\n (value) => {\n if (checkboxRef.value) {\n checkboxRef.value.indeterminate = value;\n }\n }\n);\n\nonMounted(() => {\n if (checkboxRef.value && props.indeterminate) {\n checkboxRef.value.indeterminate = true;\n }\n});\n\nconst handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n emit('update:modelValue', target.checked);\n emit('change', target.checked);\n};\n\n// Expose methods\nconst toggle = () => {\n if (!props.disabled) {\n emit('update:modelValue', !props.modelValue);\n emit('change', !props.modelValue);\n }\n};\n\nconst focus = () => checkboxRef.value?.focus();\nconst blur = () => checkboxRef.value?.blur();\n\ndefineExpose({ toggle, focus, blur, checkboxRef });\n</script>\n\n"],"names":["props","__props","emit","__emit","checkboxRef","ref","sizeClasses","computed","iconSizeClasses","watch","value","onMounted","handleChange","event","target","__expose","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_hoisted_3","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;AA2FA,UAAMA,IAAQC,GAORC,IAAOC,GAKPC,IAAcC,EAAA,GAGdC,IAAcC,EAAS,OACiB;AAAA,MAC1C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAEOP,EAAM,IAAI,CACxB,GAEKQ,IAAkBD,EAAS,OACa;AAAA,MAC1C,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAEOP,EAAM,IAAI,CACxB;AAGD,IAAAS;AAAA,MACE,MAAMT,EAAM;AAAA,MACZ,CAACU,MAAU;AACT,QAAIN,EAAY,UACdA,EAAY,MAAM,gBAAgBM;AAAA,MAEtC;AAAA,IAAA,GAGFC,EAAU,MAAM;AACd,MAAIP,EAAY,SAASJ,EAAM,kBAC7BI,EAAY,MAAM,gBAAgB;AAAA,IAEtC,CAAC;AAED,UAAMQ,IAAe,CAACC,MAAiB;AACrC,YAAMC,IAASD,EAAM;AACrB,MAAAX,EAAK,qBAAqBY,EAAO,OAAO,GACxCZ,EAAK,UAAUY,EAAO,OAAO;AAAA,IAC/B;AAaA,WAAAC,EAAa,EAAE,QAVA,MAAM;AACnB,MAAKf,EAAM,aACTE,EAAK,qBAAqB,CAACF,EAAM,UAAU,GAC3CE,EAAK,UAAU,CAACF,EAAM,UAAU;AAAA,IAEpC,GAKuB,OAHT,MAAMI,EAAY,OAAO,MAAA,GAGT,MAFjB,MAAMA,EAAY,OAAO,KAAA,GAEF,aAAAA,GAAa,mBA1I/CY,EAuDQ,SAAA;AAAA,MAtDN,OAAKC,EAAA,CAAC,6DAA2D,EAAA,uCAChBhB,EAAA,UAAQ,CAAA;AAAA,IAAA;MAEzDiB,EAiDM,OAjDNC,GAiDM;AAAA,QAhDJD,EAiBE,SAAA;AAAA,mBAhBI;AAAA,UAAJ,KAAId;AAAA,UACJ,MAAK;AAAA,UACJ,IAAIH,EAAA;AAAA,UACJ,SAASA,EAAA;AAAA,UACT,UAAUA,EAAA;AAAA,UACV,eAAeA,EAAA;AAAA,UAChB,UAAM,qHAAmH;AAAA,YACrGK,EAAA;AAAA,aAAwBL,EAAA,YAAQ;AAAA;;;;;UAQnD,UAAQW;AAAA,QAAA;cAGXI,EAaM,OAAA;AAAA,UAZJ,UAAM,0FAAwF,CACrFR,SAAiBP,EAAA,eAAeA,EAAA,gBAAa,mBAAA,cAAA,CAAA,CAAA;AAAA,UACtD,SAAQ;AAAA,UACR,MAAK;AAAA,QAAA;UAELiB,EAME,QAAA;AAAA,YALA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,UAAA;;cAIpBF,EAaM,OAAA;AAAA,UAZJ,OAAKC,EAAA,CAAC,0FAAwF,CACrFT,EAAA,OAAiBP,EAAA,gBAAa,mBAAA,cAAA,CAAA,CAAA;AAAA,UACvC,SAAQ;AAAA,UACR,MAAK;AAAA,QAAA;UAELiB,EAME,QAAA;AAAA,YALA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,UAAA;;;MAIVjB,EAAA,cAAZe,EAAyF,QAAzFI,GAAyFC,EAAfpB,EAAA,KAAK,GAAA,CAAA;;;;"}