@stachelock/ui 0.2.14 → 0.3.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 (737) hide show
  1. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js +128 -0
  2. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js.map +1 -0
  3. package/dist/AlertModal.vue_vue_type_script_setup_true_lang-CxwewAVy.js +194 -0
  4. package/dist/AlertModal.vue_vue_type_script_setup_true_lang-CxwewAVy.js.map +1 -0
  5. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-B570pdYL.js +34 -0
  6. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-B570pdYL.js.map +1 -0
  7. package/dist/BarChart.vue_vue_type_script_setup_true_lang-Dnuzd7vZ.js +67 -0
  8. package/dist/BarChart.vue_vue_type_script_setup_true_lang-Dnuzd7vZ.js.map +1 -0
  9. package/dist/Bars3Icon-BdOqcGcY.js +22 -0
  10. package/dist/Bars3Icon-BdOqcGcY.js.map +1 -0
  11. package/dist/BaseModal.vue_vue_type_script_setup_true_lang-Cr_GAD6Q.js +235 -0
  12. package/dist/BaseModal.vue_vue_type_script_setup_true_lang-Cr_GAD6Q.js.map +1 -0
  13. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-DRwe4rw8.js +328 -0
  14. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-DRwe4rw8.js.map +1 -0
  15. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js +13 -0
  16. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js.map +1 -0
  17. package/dist/CheckIcon-BGlsmVwT.js +20 -0
  18. package/dist/CheckIcon-BGlsmVwT.js.map +1 -0
  19. package/dist/{CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js → CheckboxInput.vue_vue_type_script_setup_true_lang-B8wJVkPP.js} +52 -51
  20. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-B8wJVkPP.js.map +1 -0
  21. package/dist/ChevronRightIcon-DkUqw988.js +20 -0
  22. package/dist/ChevronRightIcon-DkUqw988.js.map +1 -0
  23. package/dist/ChevronUpDownIcon-Bq_fsgrb.js +20 -0
  24. package/dist/ChevronUpDownIcon-Bq_fsgrb.js.map +1 -0
  25. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-ClGP5YU0.js +1315 -0
  26. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-ClGP5YU0.js.map +1 -0
  27. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-C5GU-yiK.js +60 -0
  28. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-C5GU-yiK.js.map +1 -0
  29. package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-Cg83utkU.js → DashboardLayout.vue_vue_type_script_setup_true_lang-DV-XVWqh.js} +23 -22
  30. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-DV-XVWqh.js.map +1 -0
  31. package/dist/DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js +688 -0
  32. package/dist/DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js.map +1 -0
  33. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-BV9vYYuX.js +238 -0
  34. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-BV9vYYuX.js.map +1 -0
  35. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-B-Mr_vdx.js +138 -0
  36. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-B-Mr_vdx.js.map +1 -0
  37. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-DRDP86Yc.js +253 -0
  38. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-DRDP86Yc.js.map +1 -0
  39. package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js → DynamicFormField.vue_vue_type_script_setup_true_lang-Ct8b80dM.js} +25 -41
  40. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-Ct8b80dM.js.map +1 -0
  41. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-Dhfgs2Jn.js +122 -0
  42. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-Dhfgs2Jn.js.map +1 -0
  43. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-BDxgc5Bs.js +32 -0
  44. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-BDxgc5Bs.js.map +1 -0
  45. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js +74 -0
  46. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js.map +1 -0
  47. package/dist/{EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js → EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js} +56 -77
  48. package/dist/EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js.map +1 -0
  49. package/dist/{EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js → EventsList.vue_vue_type_script_setup_true_lang-D3q9wJ4E.js} +9 -9
  50. package/dist/{EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js.map → EventsList.vue_vue_type_script_setup_true_lang-D3q9wJ4E.js.map} +1 -1
  51. package/dist/ExclamationCircleIcon-DjxYk45_.js +22 -0
  52. package/dist/ExclamationCircleIcon-DjxYk45_.js.map +1 -0
  53. package/dist/ExclamationCircleIcon-DmL8Wwjo.js +36 -0
  54. package/dist/ExclamationCircleIcon-DmL8Wwjo.js.map +1 -0
  55. package/dist/ExclamationTriangleIcon-BNKYmV_J.js +22 -0
  56. package/dist/ExclamationTriangleIcon-BNKYmV_J.js.map +1 -0
  57. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js +211 -0
  58. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js.map +1 -0
  59. package/dist/FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js +63 -0
  60. package/dist/FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js.map +1 -0
  61. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B8QYlJ-s.js +67 -0
  62. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B8QYlJ-s.js.map +1 -0
  63. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-DYdvWmVE.js +22 -0
  64. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-DYdvWmVE.js.map +1 -0
  65. package/dist/InformationCircleIcon-B322GNIt.js +40 -0
  66. package/dist/InformationCircleIcon-B322GNIt.js.map +1 -0
  67. package/dist/InlineTabs.vue_vue_type_script_setup_true_lang-DhkX5sWS.js +93 -0
  68. package/dist/InlineTabs.vue_vue_type_script_setup_true_lang-DhkX5sWS.js.map +1 -0
  69. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DszQ-a5L.js +66 -0
  70. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DszQ-a5L.js.map +1 -0
  71. package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-CwOOShcM.js +36 -0
  72. package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-CwOOShcM.js.map +1 -0
  73. package/dist/MapPinIcon-CSTDUZnD.js +27 -0
  74. package/dist/MapPinIcon-CSTDUZnD.js.map +1 -0
  75. package/dist/MonthCalendar.vue_vue_type_style_index_0_lang-CnX3Ih0W.js +193 -0
  76. package/dist/MonthCalendar.vue_vue_type_style_index_0_lang-CnX3Ih0W.js.map +1 -0
  77. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-Cm5RsC7C.js +162 -0
  78. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-Cm5RsC7C.js.map +1 -0
  79. package/dist/PieChart.vue_vue_type_script_setup_true_lang-DJRcsty7.js +69 -0
  80. package/dist/PieChart.vue_vue_type_script_setup_true_lang-DJRcsty7.js.map +1 -0
  81. package/dist/{XMarkIcon-C4wILUsz.js → PlusIcon-aDFVlB90.js} +5 -5
  82. package/dist/PlusIcon-aDFVlB90.js.map +1 -0
  83. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-Cri9BiBy.js +130 -0
  84. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-Cri9BiBy.js.map +1 -0
  85. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-CtroDq7L.js +108 -0
  86. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-CtroDq7L.js.map +1 -0
  87. package/dist/SelectInput.vue_vue_type_script_setup_true_lang--yUL7bcx.js +303 -0
  88. package/dist/SelectInput.vue_vue_type_script_setup_true_lang--yUL7bcx.js.map +1 -0
  89. package/dist/SelectTextInput.vue_vue_type_script_setup_true_lang-B2Gw_se2.js +339 -0
  90. package/dist/SelectTextInput.vue_vue_type_script_setup_true_lang-B2Gw_se2.js.map +1 -0
  91. package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-CzLbBcNS.js → SidebarLayout.vue_vue_type_script_setup_true_lang-BD2PF5xp.js} +25 -24
  92. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-BD2PF5xp.js.map +1 -0
  93. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-DDTcpEjy.js +78 -0
  94. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-DDTcpEjy.js.map +1 -0
  95. package/dist/StatCard.vue_vue_type_script_setup_true_lang-DTOT0-WB.js +111 -0
  96. package/dist/StatCard.vue_vue_type_script_setup_true_lang-DTOT0-WB.js.map +1 -0
  97. package/dist/StepperPanels.vue_vue_type_script_setup_true_lang-BtHrfqFI.js +119 -0
  98. package/dist/StepperPanels.vue_vue_type_script_setup_true_lang-BtHrfqFI.js.map +1 -0
  99. package/dist/{SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js → SwitchInput.vue_vue_type_script_setup_true_lang-D6M1qwP1.js} +63 -58
  100. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-D6M1qwP1.js.map +1 -0
  101. package/dist/SwitchInputGroup.vue_vue_type_script_setup_true_lang-BNKKEAMq.js +183 -0
  102. package/dist/SwitchInputGroup.vue_vue_type_script_setup_true_lang-BNKKEAMq.js.map +1 -0
  103. package/dist/TabGroup.vue_vue_type_script_setup_true_lang-DrhDwLL3.js +125 -0
  104. package/dist/TabGroup.vue_vue_type_script_setup_true_lang-DrhDwLL3.js.map +1 -0
  105. package/dist/TabGroupUnderline.vue_vue_type_script_setup_true_lang-Di33js6c.js +129 -0
  106. package/dist/TabGroupUnderline.vue_vue_type_script_setup_true_lang-Di33js6c.js.map +1 -0
  107. package/dist/TabsInPills.vue_vue_type_script_setup_true_lang-CMxaK0Kw.js +85 -0
  108. package/dist/TabsInPills.vue_vue_type_script_setup_true_lang-CMxaK0Kw.js.map +1 -0
  109. package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js → TagifyInput.vue_vue_type_script_setup_true_lang-CAK6ZIiz.js} +53 -63
  110. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-CAK6ZIiz.js.map +1 -0
  111. package/dist/{TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js → TextAreaInput.vue_vue_type_script_setup_true_lang-BMpc-5ln.js} +47 -35
  112. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-BMpc-5ln.js.map +1 -0
  113. package/dist/{UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js → UiAvatar.vue_vue_type_script_setup_true_lang-Ci7VLRZx.js} +34 -34
  114. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-Ci7VLRZx.js.map +1 -0
  115. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-CV8WVEXL.js +88 -0
  116. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-CV8WVEXL.js.map +1 -0
  117. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-BKyznfxi.js +108 -0
  118. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-BKyznfxi.js.map +1 -0
  119. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-B5fPB7PH.js +96 -0
  120. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-B5fPB7PH.js.map +1 -0
  121. package/dist/{UiLoading.vue_vue_type_script_setup_true_lang-KbLKA4SA.js → UiLoading.vue_vue_type_script_setup_true_lang-DldleD-3.js} +48 -43
  122. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-DldleD-3.js.map +1 -0
  123. package/dist/UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js +489 -0
  124. package/dist/UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js.map +1 -0
  125. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-aJddpshR.js +330 -0
  126. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-aJddpshR.js.map +1 -0
  127. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CFgLuifQ.js +214 -0
  128. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CFgLuifQ.js.map +1 -0
  129. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-C23h6Do0.js +83 -0
  130. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-C23h6Do0.js.map +1 -0
  131. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BioTMORv.js +69 -0
  132. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BioTMORv.js.map +1 -0
  133. package/dist/{UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js → UiTable.vue_vue_type_script_setup_true_lang-BuOCaPzi.js} +45 -44
  134. package/dist/UiTable.vue_vue_type_script_setup_true_lang-BuOCaPzi.js.map +1 -0
  135. package/dist/XMarkIcon-Cwy3T6p8.js +22 -0
  136. package/dist/XMarkIcon-Cwy3T6p8.js.map +1 -0
  137. package/dist/XMarkIcon-DNvCkiOy.js +16 -0
  138. package/dist/XMarkIcon-DNvCkiOy.js.map +1 -0
  139. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-C01PTLg8.js +89 -0
  140. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-C01PTLg8.js.map +1 -0
  141. package/dist/active-element-history-BTBNVIJN.js +17 -0
  142. package/dist/active-element-history-BTBNVIJN.js.map +1 -0
  143. package/dist/calculate-active-index-Dim3sT-5.js +55 -0
  144. package/dist/calculate-active-index-Dim3sT-5.js.map +1 -0
  145. package/dist/calendar-DyIP7WGv.js +575 -0
  146. package/dist/calendar-DyIP7WGv.js.map +1 -0
  147. package/dist/calendars/CalendarDashboard.js +7 -7
  148. package/dist/calendars/CalendarHeader.js +1 -1
  149. package/dist/calendars/DayCalendar.js +1 -1
  150. package/dist/calendars/EventCard.js +1 -1
  151. package/dist/calendars/EventsList.js +1 -1
  152. package/dist/calendars/MonthCalendar.js +1 -1
  153. package/dist/calendars/WeekCalendar.js +376 -2
  154. package/dist/calendars/WeekCalendar.js.map +1 -1
  155. package/dist/calendars/YearCalendar.js +1 -1
  156. package/dist/charts/BarChart.d.ts +3 -0
  157. package/dist/charts/BarChart.js +5 -0
  158. package/dist/charts/BarChart.js.map +1 -0
  159. package/dist/charts/BaseChart.d.ts +3 -0
  160. package/dist/charts/BaseChart.js +135 -0
  161. package/dist/charts/BaseChart.js.map +1 -0
  162. package/dist/charts/FunnelChart.d.ts +3 -0
  163. package/dist/charts/FunnelChart.js +5 -0
  164. package/dist/charts/FunnelChart.js.map +1 -0
  165. package/dist/charts/LineChart.d.ts +3 -0
  166. package/dist/charts/LineChart.js +5 -0
  167. package/dist/charts/LineChart.js.map +1 -0
  168. package/dist/charts/PieChart.d.ts +3 -0
  169. package/dist/charts/PieChart.js +5 -0
  170. package/dist/charts/PieChart.js.map +1 -0
  171. package/dist/charts/SparklineChart.d.ts +3 -0
  172. package/dist/charts/SparklineChart.js +5 -0
  173. package/dist/charts/SparklineChart.js.map +1 -0
  174. package/dist/charts/StatCard.d.ts +3 -0
  175. package/dist/charts/StatCard.js +5 -0
  176. package/dist/charts/StatCard.js.map +1 -0
  177. package/dist/charts/chartTheme.d.ts +3 -0
  178. package/dist/charts/chartTheme.js +254 -0
  179. package/dist/charts/chartTheme.js.map +1 -0
  180. package/dist/charts/index.d.ts +1 -0
  181. package/dist/charts/index.js +33 -0
  182. package/dist/charts/index.js.map +1 -0
  183. package/dist/components/Avatar.js +1 -1
  184. package/dist/components/Badge.js +2 -39
  185. package/dist/components/Badge.js.map +1 -1
  186. package/dist/components/Banner.d.ts +3 -0
  187. package/dist/components/Banner.js +476 -0
  188. package/dist/components/Banner.js.map +1 -0
  189. package/dist/components/Breadcrumb.js +269 -2
  190. package/dist/components/Breadcrumb.js.map +1 -1
  191. package/dist/components/Button.js +132 -105
  192. package/dist/components/Button.js.map +1 -1
  193. package/dist/components/ButtonGroup.d.ts +3 -0
  194. package/dist/components/ButtonGroup.js +5 -0
  195. package/dist/components/ButtonGroup.js.map +1 -0
  196. package/dist/components/Checkbox.d.ts +3 -0
  197. package/dist/components/Checkbox.js +5 -0
  198. package/dist/components/Checkbox.js.map +1 -0
  199. package/dist/components/CloudinaryImage.d.ts +3 -0
  200. package/dist/components/CloudinaryImage.js +175 -0
  201. package/dist/components/CloudinaryImage.js.map +1 -0
  202. package/dist/components/Loading.js +1 -1
  203. package/dist/components/LoadingDots.js +3 -3
  204. package/dist/components/LoadingDots.js.map +1 -1
  205. package/dist/components/LottieAnimation.d.ts +3 -0
  206. package/dist/components/LottieAnimation.js +5 -0
  207. package/dist/components/LottieAnimation.js.map +1 -0
  208. package/dist/components/Menu.d.ts +3 -0
  209. package/dist/components/Menu.js +5 -0
  210. package/dist/components/Menu.js.map +1 -0
  211. package/dist/components/Modal.js +1 -1
  212. package/dist/components/NavLink.js +1 -1
  213. package/dist/components/ProgressBar.js +1 -1
  214. package/dist/components/RadialProgressBar.js +1 -1
  215. package/dist/components/Table.js +1 -1
  216. package/dist/composables/index.d.ts +1 -0
  217. package/dist/composables/index.js +33 -0
  218. package/dist/composables/index.js.map +1 -0
  219. package/dist/composables/useCalendar.d.ts +3 -0
  220. package/dist/composables/useCalendar.js +32 -0
  221. package/dist/composables/useCalendar.js.map +1 -0
  222. package/dist/composables/useFormValidation.d.ts +3 -0
  223. package/dist/composables/useFormValidation.js +110 -0
  224. package/dist/composables/useFormValidation.js.map +1 -0
  225. package/dist/composables/useMap.d.ts +3 -0
  226. package/dist/composables/useMap.js +10 -0
  227. package/dist/composables/useMap.js.map +1 -0
  228. package/dist/composables/useModal.d.ts +3 -0
  229. package/dist/composables/useModal.js +75 -0
  230. package/dist/composables/useModal.js.map +1 -0
  231. package/dist/composables/useNotifications.d.ts +3 -0
  232. package/dist/composables/useNotifications.js +77 -0
  233. package/dist/composables/useNotifications.js.map +1 -0
  234. package/dist/composables/useTabs.d.ts +1 -0
  235. package/dist/composables/useTabs.js +259 -0
  236. package/dist/composables/useTabs.js.map +1 -0
  237. package/dist/composables/useTheme.d.ts +3 -0
  238. package/dist/composables/useTheme.js +119 -0
  239. package/dist/composables/useTheme.js.map +1 -0
  240. package/dist/{description-CBd3BJ9O.js → description-C7cRw0tq.js} +2 -2
  241. package/dist/{description-CBd3BJ9O.js.map → description-C7cRw0tq.js.map} +1 -1
  242. package/dist/{dialog-U1KNiPzc.js → dialog-B2WA4G25.js} +141 -135
  243. package/dist/dialog-B2WA4G25.js.map +1 -0
  244. package/dist/empty-state/ComingSoon.d.ts +3 -0
  245. package/dist/empty-state/ComingSoon.js +5 -0
  246. package/dist/empty-state/ComingSoon.js.map +1 -0
  247. package/dist/empty-state/EmptyState.d.ts +3 -0
  248. package/dist/empty-state/EmptyState.js +5 -0
  249. package/dist/empty-state/EmptyState.js.map +1 -0
  250. package/dist/empty-state/index.d.ts +1 -0
  251. package/dist/empty-state/index.js +7 -0
  252. package/dist/empty-state/index.js.map +1 -0
  253. package/dist/env-BZfPsfnF.js +29 -0
  254. package/dist/env-BZfPsfnF.js.map +1 -0
  255. package/dist/form-f8yP4kN-.js +35 -0
  256. package/dist/form-f8yP4kN-.js.map +1 -0
  257. package/dist/forms/DynamicForm.js +1 -1
  258. package/dist/forms/DynamicFormField.js +1 -1
  259. package/dist/forms/FormFieldWrapper.js +72 -92
  260. package/dist/forms/FormFieldWrapper.js.map +1 -1
  261. package/dist/hidden-BSRluD1y.js +15 -0
  262. package/dist/hidden-BSRluD1y.js.map +1 -0
  263. package/dist/index-Dca39bYA.js +2167 -0
  264. package/dist/index-Dca39bYA.js.map +1 -0
  265. package/dist/index.js +1257 -274
  266. package/dist/index.js.map +1 -1
  267. package/dist/inputs/AddDeleteButtonGroup.d.ts +3 -0
  268. package/dist/inputs/AddDeleteButtonGroup.js +5 -0
  269. package/dist/inputs/AddDeleteButtonGroup.js.map +1 -0
  270. package/dist/inputs/CheckboxInput.js +1 -1
  271. package/dist/inputs/ComboboxInput.js +1 -1
  272. package/dist/inputs/DatepickerInput.d.ts +3 -0
  273. package/dist/inputs/DatepickerInput.js +5 -0
  274. package/dist/inputs/DatepickerInput.js.map +1 -0
  275. package/dist/inputs/EmailInput.d.ts +3 -0
  276. package/dist/inputs/EmailInput.js +5 -0
  277. package/dist/inputs/EmailInput.js.map +1 -0
  278. package/dist/inputs/EmptyInput.d.ts +3 -0
  279. package/dist/inputs/EmptyInput.js +5 -0
  280. package/dist/inputs/EmptyInput.js.map +1 -0
  281. package/dist/inputs/FileDropzoneInput.d.ts +3 -0
  282. package/dist/inputs/FileDropzoneInput.js +5 -0
  283. package/dist/inputs/FileDropzoneInput.js.map +1 -0
  284. package/dist/inputs/HiddenInput.d.ts +3 -0
  285. package/dist/inputs/HiddenInput.js +5 -0
  286. package/dist/inputs/HiddenInput.js.map +1 -0
  287. package/dist/inputs/PhoneInput.d.ts +3 -0
  288. package/dist/inputs/PhoneInput.js +3783 -0
  289. package/dist/inputs/PhoneInput.js.map +1 -0
  290. package/dist/inputs/RichTextInput.d.ts +3 -0
  291. package/dist/inputs/RichTextInput.js +17492 -0
  292. package/dist/inputs/RichTextInput.js.map +1 -0
  293. package/dist/inputs/SelectInput.js +1 -1
  294. package/dist/inputs/SelectTextInput.d.ts +3 -0
  295. package/dist/inputs/SelectTextInput.js +5 -0
  296. package/dist/inputs/SelectTextInput.js.map +1 -0
  297. package/dist/inputs/SwitchInput.js +1 -1
  298. package/dist/inputs/SwitchInputGroup.d.ts +3 -0
  299. package/dist/inputs/SwitchInputGroup.js +5 -0
  300. package/dist/inputs/SwitchInputGroup.js.map +1 -0
  301. package/dist/inputs/TagifyInput.js +1 -1
  302. package/dist/inputs/TextAreaInput.js +1 -1
  303. package/dist/inputs/TextInput.d.ts +3 -0
  304. package/dist/{components → inputs}/TextInput.js +17 -17
  305. package/dist/inputs/TextInput.js.map +1 -0
  306. package/dist/keyboard-Dd_2-cFu.js +5 -0
  307. package/dist/keyboard-Dd_2-cFu.js.map +1 -0
  308. package/dist/layouts/DashboardLayout.js +1 -1
  309. package/dist/layouts/ProfileHeaderAvatar.d.ts +3 -0
  310. package/dist/layouts/ProfileHeaderAvatar.js +5 -0
  311. package/dist/layouts/ProfileHeaderAvatar.js.map +1 -0
  312. package/dist/layouts/ProjectLogo.d.ts +3 -0
  313. package/dist/layouts/ProjectLogo.js +5 -0
  314. package/dist/layouts/ProjectLogo.js.map +1 -0
  315. package/dist/layouts/SidebarLayout.js +1 -1
  316. package/dist/listbox-p2_4hUSD.js +257 -0
  317. package/dist/listbox-p2_4hUSD.js.map +1 -0
  318. package/dist/loading/ContentSkeleton.d.ts +3 -0
  319. package/dist/loading/ContentSkeleton.js +96 -0
  320. package/dist/loading/ContentSkeleton.js.map +1 -0
  321. package/dist/loading/SmartLoadingIndicator.d.ts +3 -0
  322. package/dist/loading/SmartLoadingIndicator.js +230 -0
  323. package/dist/loading/SmartLoadingIndicator.js.map +1 -0
  324. package/dist/loading/index.d.ts +1 -0
  325. package/dist/loading/index.js +7 -0
  326. package/dist/loading/index.js.map +1 -0
  327. package/dist/mapThemes-DFE9fZm3.js +675 -0
  328. package/dist/mapThemes-DFE9fZm3.js.map +1 -0
  329. package/dist/maps/GoogleMap.d.ts +3 -0
  330. package/dist/maps/GoogleMap.js +170 -0
  331. package/dist/maps/GoogleMap.js.map +1 -0
  332. package/dist/maps/UiInfoWindow.d.ts +3 -0
  333. package/dist/maps/UiInfoWindow.js +286 -0
  334. package/dist/maps/UiInfoWindow.js.map +1 -0
  335. package/dist/maps/UiMap.d.ts +3 -0
  336. package/dist/maps/UiMap.js +591 -0
  337. package/dist/maps/UiMap.js.map +1 -0
  338. package/dist/maps/UiMapAll.d.ts +3 -0
  339. package/dist/maps/UiMapAll.js +5 -0
  340. package/dist/maps/UiMapAll.js.map +1 -0
  341. package/dist/maps/UiMapMarker.d.ts +3 -0
  342. package/dist/maps/UiMapMarker.js +237 -0
  343. package/dist/maps/UiMapMarker.js.map +1 -0
  344. package/dist/maps/index.d.ts +1 -0
  345. package/dist/maps/index.js +13 -0
  346. package/dist/maps/index.js.map +1 -0
  347. package/dist/micro-task-D-oTY33s.js +9 -0
  348. package/dist/micro-task-D-oTY33s.js.map +1 -0
  349. package/dist/modals/AlertModal.d.ts +3 -0
  350. package/dist/modals/AlertModal.js +5 -0
  351. package/dist/modals/AlertModal.js.map +1 -0
  352. package/dist/modals/BaseModal.d.ts +3 -0
  353. package/dist/modals/BaseModal.js +5 -0
  354. package/dist/modals/BaseModal.js.map +1 -0
  355. package/dist/modals/ImageCropperModal.d.ts +3 -0
  356. package/dist/modals/ImageCropperModal.js +1804 -0
  357. package/dist/modals/ImageCropperModal.js.map +1 -0
  358. package/dist/notifications/NotificationContainer.d.ts +3 -0
  359. package/dist/notifications/NotificationContainer.js +25 -0
  360. package/dist/notifications/NotificationContainer.js.map +1 -0
  361. package/dist/notifications/NotificationToast.d.ts +3 -0
  362. package/dist/notifications/NotificationToast.js +5 -0
  363. package/dist/notifications/NotificationToast.js.map +1 -0
  364. package/dist/notifications/index.d.ts +1 -0
  365. package/dist/notifications/index.js +7 -0
  366. package/dist/notifications/index.js.map +1 -0
  367. package/dist/open-closed-JTEvYTg2.js +19 -0
  368. package/dist/open-closed-JTEvYTg2.js.map +1 -0
  369. package/dist/render-QUUPyNjX.js +101 -0
  370. package/dist/render-QUUPyNjX.js.map +1 -0
  371. package/dist/src/components/CloudinaryImage.d.ts +144 -0
  372. package/dist/src/components/CloudinaryImage.d.ts.map +1 -0
  373. package/dist/src/components/LottieAnimation.d.ts +65 -0
  374. package/dist/src/components/LottieAnimation.d.ts.map +1 -0
  375. package/dist/src/components/ThemeDebugModal.d.ts +20 -0
  376. package/dist/src/components/ThemeDebugModal.d.ts.map +1 -0
  377. package/dist/src/components/UiAvatar.d.ts.map +1 -1
  378. package/dist/src/components/UiBadge.d.ts +22 -12
  379. package/dist/src/components/UiBadge.d.ts.map +1 -1
  380. package/dist/src/components/UiBanner.d.ts +166 -0
  381. package/dist/src/components/UiBanner.d.ts.map +1 -0
  382. package/dist/src/components/UiBreadcrumb.d.ts +240 -1
  383. package/dist/src/components/UiBreadcrumb.d.ts.map +1 -1
  384. package/dist/src/components/UiButton.d.ts +5 -4
  385. package/dist/src/components/UiButton.d.ts.map +1 -1
  386. package/dist/src/components/UiButtonGroup.d.ts +78 -0
  387. package/dist/src/components/UiButtonGroup.d.ts.map +1 -0
  388. package/dist/src/components/UiCheckbox.d.ts +55 -0
  389. package/dist/src/components/UiCheckbox.d.ts.map +1 -0
  390. package/dist/src/components/UiLoading.d.ts +2 -2
  391. package/dist/src/components/UiLoading.d.ts.map +1 -1
  392. package/dist/src/components/UiMenu.d.ts +67 -0
  393. package/dist/src/components/UiMenu.d.ts.map +1 -0
  394. package/dist/src/components/UiModal.d.ts +1 -1
  395. package/dist/src/components/UiModal.d.ts.map +1 -1
  396. package/dist/src/components/UiNavLink.d.ts +1 -1
  397. package/dist/src/components/UiProgressBar.d.ts +43 -31
  398. package/dist/src/components/UiProgressBar.d.ts.map +1 -1
  399. package/dist/src/components/UiRadialProgressBar.d.ts +46 -39
  400. package/dist/src/components/UiRadialProgressBar.d.ts.map +1 -1
  401. package/dist/src/components/UiTable.d.ts.map +1 -1
  402. package/dist/src/components/UiTransition.d.ts +1 -1
  403. package/dist/src/components/calendars/CalendarHeader.d.ts +66 -19
  404. package/dist/src/components/calendars/CalendarHeader.d.ts.map +1 -1
  405. package/dist/src/components/calendars/DayCalendar.d.ts +11 -4
  406. package/dist/src/components/calendars/DayCalendar.d.ts.map +1 -1
  407. package/dist/src/components/calendars/MonthCalendar.d.ts +33 -22
  408. package/dist/src/components/calendars/MonthCalendar.d.ts.map +1 -1
  409. package/dist/src/components/calendars/WeekCalendar.d.ts.map +1 -1
  410. package/dist/src/components/calendars/YearCalendar.d.ts +41 -6
  411. package/dist/src/components/calendars/YearCalendar.d.ts.map +1 -1
  412. package/dist/src/components/charts/BarChart.d.ts +64 -0
  413. package/dist/src/components/charts/BarChart.d.ts.map +1 -0
  414. package/dist/src/components/charts/BaseChart.d.ts +81 -0
  415. package/dist/src/components/charts/BaseChart.d.ts.map +1 -0
  416. package/dist/src/components/charts/FunnelChart.d.ts +55 -0
  417. package/dist/src/components/charts/FunnelChart.d.ts.map +1 -0
  418. package/dist/src/components/charts/LineChart.d.ts +60 -0
  419. package/dist/src/components/charts/LineChart.d.ts.map +1 -0
  420. package/dist/src/components/charts/PieChart.d.ts +59 -0
  421. package/dist/src/components/charts/PieChart.d.ts.map +1 -0
  422. package/dist/src/components/charts/SparklineChart.d.ts +46 -0
  423. package/dist/src/components/charts/SparklineChart.d.ts.map +1 -0
  424. package/dist/src/components/charts/StatCard.d.ts +37 -0
  425. package/dist/src/components/charts/StatCard.d.ts.map +1 -0
  426. package/dist/src/components/charts/chartTheme.d.ts +166 -0
  427. package/dist/src/components/charts/chartTheme.d.ts.map +1 -0
  428. package/dist/src/components/charts/index.d.ts +9 -0
  429. package/dist/src/components/charts/index.d.ts.map +1 -0
  430. package/dist/src/components/empty-state/ComingSoon.d.ts +50 -0
  431. package/dist/src/components/empty-state/ComingSoon.d.ts.map +1 -0
  432. package/dist/src/components/empty-state/EmptyState.d.ts +49 -0
  433. package/dist/src/components/empty-state/EmptyState.d.ts.map +1 -0
  434. package/dist/src/components/empty-state/index.d.ts +3 -0
  435. package/dist/src/components/empty-state/index.d.ts.map +1 -0
  436. package/dist/src/components/forms/DynamicForm.d.ts +29 -2
  437. package/dist/src/components/forms/DynamicForm.d.ts.map +1 -1
  438. package/dist/src/components/forms/DynamicFormField.d.ts.map +1 -1
  439. package/dist/src/components/forms/FormFieldWrapper.d.ts +2 -2
  440. package/dist/src/components/forms/FormFieldWrapper.d.ts.map +1 -1
  441. package/dist/src/components/index.d.ts +16 -1
  442. package/dist/src/components/index.d.ts.map +1 -1
  443. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts +49 -0
  444. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts.map +1 -0
  445. package/dist/src/components/inputs/CheckboxInput.d.ts +1 -1
  446. package/dist/src/components/inputs/CheckboxInput.d.ts.map +1 -1
  447. package/dist/src/components/inputs/ComboboxInput.d.ts.map +1 -1
  448. package/dist/src/components/inputs/DatepickerInput.d.ts +852 -0
  449. package/dist/src/components/inputs/DatepickerInput.d.ts.map +1 -0
  450. package/dist/src/components/inputs/EmailInput.d.ts +99 -0
  451. package/dist/src/components/inputs/EmailInput.d.ts.map +1 -0
  452. package/dist/src/components/inputs/EmptyInput.d.ts +36 -0
  453. package/dist/src/components/inputs/EmptyInput.d.ts.map +1 -0
  454. package/dist/src/components/inputs/FileDropzoneInput.d.ts +91 -0
  455. package/dist/src/components/inputs/FileDropzoneInput.d.ts.map +1 -0
  456. package/dist/src/components/inputs/HiddenInput.d.ts +30 -0
  457. package/dist/src/components/inputs/HiddenInput.d.ts.map +1 -0
  458. package/dist/src/components/inputs/PhoneInput.d.ts +211 -0
  459. package/dist/src/components/inputs/PhoneInput.d.ts.map +1 -0
  460. package/dist/src/components/inputs/RichTextInput.d.ts +102 -0
  461. package/dist/src/components/inputs/RichTextInput.d.ts.map +1 -0
  462. package/dist/src/components/inputs/SelectInput.d.ts.map +1 -1
  463. package/dist/src/components/inputs/SelectTextInput.d.ts +222 -0
  464. package/dist/src/components/inputs/SelectTextInput.d.ts.map +1 -0
  465. package/dist/src/components/inputs/SwitchInput.d.ts +1 -1
  466. package/dist/src/components/inputs/SwitchInput.d.ts.map +1 -1
  467. package/dist/src/components/inputs/SwitchInputGroup.d.ts +93 -0
  468. package/dist/src/components/inputs/SwitchInputGroup.d.ts.map +1 -0
  469. package/dist/src/components/inputs/TagifyInput.d.ts +6 -6
  470. package/dist/src/components/inputs/TextAreaInput.d.ts.map +1 -1
  471. package/dist/src/components/{UiTextInput.d.ts → inputs/TextInput.d.ts} +7 -7
  472. package/dist/src/components/inputs/TextInput.d.ts.map +1 -0
  473. package/dist/src/components/inputs/index.d.ts +11 -0
  474. package/dist/src/components/inputs/index.d.ts.map +1 -1
  475. package/dist/src/components/layouts/CardLayout.d.ts +144 -0
  476. package/dist/src/components/layouts/CardLayout.d.ts.map +1 -0
  477. package/dist/src/components/layouts/DashboardLayout.d.ts.map +1 -1
  478. package/dist/src/components/layouts/InfoCard.d.ts +43 -0
  479. package/dist/src/components/layouts/InfoCard.d.ts.map +1 -0
  480. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts +85 -0
  481. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts.map +1 -0
  482. package/dist/src/components/layouts/ProjectLogo.d.ts +67 -0
  483. package/dist/src/components/layouts/ProjectLogo.d.ts.map +1 -0
  484. package/dist/src/components/layouts/PropsTable.d.ts +38 -0
  485. package/dist/src/components/layouts/PropsTable.d.ts.map +1 -0
  486. package/dist/src/components/layouts/ShowcaseCard.d.ts +53 -0
  487. package/dist/src/components/layouts/ShowcaseCard.d.ts.map +1 -0
  488. package/dist/src/components/layouts/ShowcaseLayout.d.ts +58 -0
  489. package/dist/src/components/layouts/ShowcaseLayout.d.ts.map +1 -0
  490. package/dist/src/components/layouts/SidebarLayout.d.ts.map +1 -1
  491. package/dist/src/components/layouts/StateDisplay.d.ts +32 -0
  492. package/dist/src/components/layouts/StateDisplay.d.ts.map +1 -0
  493. package/dist/src/components/layouts/index.d.ts +8 -0
  494. package/dist/src/components/layouts/index.d.ts.map +1 -1
  495. package/dist/src/components/loading/ContentSkeleton.d.ts +53 -0
  496. package/dist/src/components/loading/ContentSkeleton.d.ts.map +1 -0
  497. package/dist/src/components/loading/SmartLoadingIndicator.d.ts +88 -0
  498. package/dist/src/components/loading/SmartLoadingIndicator.d.ts.map +1 -0
  499. package/dist/src/components/loading/index.d.ts +3 -0
  500. package/dist/src/components/loading/index.d.ts.map +1 -0
  501. package/dist/src/components/maps/GoogleMap.d.ts +224 -0
  502. package/dist/src/components/maps/GoogleMap.d.ts.map +1 -0
  503. package/dist/src/components/maps/UiInfoWindow.d.ts +223 -0
  504. package/dist/src/components/maps/UiInfoWindow.d.ts.map +1 -0
  505. package/dist/src/components/maps/UiMap.d.ts +609 -0
  506. package/dist/src/components/maps/UiMap.d.ts.map +1 -0
  507. package/dist/src/components/maps/UiMapAll.d.ts +676 -0
  508. package/dist/src/components/maps/UiMapAll.d.ts.map +1 -0
  509. package/dist/src/components/maps/UiMapMarker.d.ts +223 -0
  510. package/dist/src/components/maps/UiMapMarker.d.ts.map +1 -0
  511. package/dist/src/components/maps/index.d.ts +6 -0
  512. package/dist/src/components/maps/index.d.ts.map +1 -0
  513. package/dist/src/components/modals/AlertModal.d.ts +156 -0
  514. package/dist/src/components/modals/AlertModal.d.ts.map +1 -0
  515. package/dist/src/components/modals/BaseModal.d.ts +127 -0
  516. package/dist/src/components/modals/BaseModal.d.ts.map +1 -0
  517. package/dist/src/components/modals/ImageCropperModal.d.ts +99 -0
  518. package/dist/src/components/modals/ImageCropperModal.d.ts.map +1 -0
  519. package/dist/src/components/modals/index.d.ts +4 -0
  520. package/dist/src/components/modals/index.d.ts.map +1 -0
  521. package/dist/src/components/notifications/NotificationContainer.d.ts +3 -0
  522. package/dist/src/components/notifications/NotificationContainer.d.ts.map +1 -0
  523. package/dist/src/components/notifications/NotificationToast.d.ts +22 -0
  524. package/dist/src/components/notifications/NotificationToast.d.ts.map +1 -0
  525. package/dist/src/components/notifications/index.d.ts +3 -0
  526. package/dist/src/components/notifications/index.d.ts.map +1 -0
  527. package/dist/src/components/stepper/StepperPanels.d.ts +22 -0
  528. package/dist/src/components/stepper/StepperPanels.d.ts.map +1 -0
  529. package/dist/src/components/stepper/index.d.ts +2 -0
  530. package/dist/src/components/stepper/index.d.ts.map +1 -0
  531. package/dist/src/components/tabs/InlineTabs.d.ts +48 -0
  532. package/dist/src/components/tabs/InlineTabs.d.ts.map +1 -0
  533. package/dist/src/components/tabs/TabGroup.d.ts +55 -0
  534. package/dist/src/components/tabs/TabGroup.d.ts.map +1 -0
  535. package/dist/src/components/tabs/TabGroupUnderline.d.ts +56 -0
  536. package/dist/src/components/tabs/TabGroupUnderline.d.ts.map +1 -0
  537. package/dist/src/components/tabs/TabsInPills.d.ts +44 -0
  538. package/dist/src/components/tabs/TabsInPills.d.ts.map +1 -0
  539. package/dist/src/components/tabs/index.d.ts +5 -0
  540. package/dist/src/components/tabs/index.d.ts.map +1 -0
  541. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts +64 -0
  542. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts.map +1 -0
  543. package/dist/src/components/wrappers/CardWrapper.d.ts +10 -0
  544. package/dist/src/components/wrappers/CardWrapper.d.ts.map +1 -0
  545. package/dist/src/components/wrappers/DisclosureWrapper.d.ts +37 -0
  546. package/dist/src/components/wrappers/DisclosureWrapper.d.ts.map +1 -0
  547. package/dist/src/components/wrappers/FormErrorWrapper.d.ts +40 -0
  548. package/dist/src/components/{UiTextInput.d.ts.map → wrappers/FormErrorWrapper.d.ts.map} +1 -1
  549. package/dist/src/components/wrappers/index.d.ts +5 -0
  550. package/dist/src/components/wrappers/index.d.ts.map +1 -0
  551. package/dist/src/composables/index.d.ts +7 -0
  552. package/dist/src/composables/index.d.ts.map +1 -1
  553. package/dist/src/composables/useCalendar.d.ts +76 -20
  554. package/dist/src/composables/useCalendar.d.ts.map +1 -1
  555. package/dist/src/composables/useEventSegments.d.ts +74 -0
  556. package/dist/src/composables/useEventSegments.d.ts.map +1 -0
  557. package/dist/src/composables/useFormValidation.d.ts +47 -0
  558. package/dist/src/composables/useFormValidation.d.ts.map +1 -1
  559. package/dist/src/composables/useMap.d.ts +93 -0
  560. package/dist/src/composables/useMap.d.ts.map +1 -0
  561. package/dist/src/composables/useModal.d.ts +42 -2
  562. package/dist/src/composables/useModal.d.ts.map +1 -1
  563. package/dist/src/composables/useNotifications.d.ts +142 -0
  564. package/dist/src/composables/useNotifications.d.ts.map +1 -0
  565. package/dist/src/composables/useSimpleTabs.d.ts +45 -0
  566. package/dist/src/composables/useSimpleTabs.d.ts.map +1 -0
  567. package/dist/src/composables/useStringTransform.d.ts +107 -0
  568. package/dist/src/composables/useStringTransform.d.ts.map +1 -0
  569. package/dist/src/composables/useTabs.d.ts +48 -0
  570. package/dist/src/composables/useTabs.d.ts.map +1 -0
  571. package/dist/src/composables/useTheme.d.ts +37 -0
  572. package/dist/src/composables/useTheme.d.ts.map +1 -0
  573. package/dist/src/dev.d.ts +3 -0
  574. package/dist/src/dev.d.ts.map +1 -1
  575. package/dist/src/index.d.ts +1 -0
  576. package/dist/src/index.d.ts.map +1 -1
  577. package/dist/src/plugin/configure.d.ts +110 -0
  578. package/dist/src/plugin/configure.d.ts.map +1 -1
  579. package/dist/src/types/calendars.d.ts +74 -0
  580. package/dist/src/types/calendars.d.ts.map +1 -1
  581. package/dist/src/types/core.d.ts +679 -0
  582. package/dist/src/types/core.d.ts.map +1 -0
  583. package/dist/src/types/index.d.ts +3 -0
  584. package/dist/src/types/index.d.ts.map +1 -1
  585. package/dist/src/types/inputs.d.ts +147 -0
  586. package/dist/src/types/inputs.d.ts.map +1 -1
  587. package/dist/src/types/layouts.d.ts +25 -0
  588. package/dist/src/types/layouts.d.ts.map +1 -1
  589. package/dist/src/types/maps.d.ts +432 -0
  590. package/dist/src/types/maps.d.ts.map +1 -0
  591. package/dist/src/types/tabs.d.ts +75 -0
  592. package/dist/src/types/tabs.d.ts.map +1 -0
  593. package/dist/src/types/ui.d.ts +2 -3
  594. package/dist/src/types/ui.d.ts.map +1 -1
  595. package/dist/src/utils/calendar.d.ts +97 -5
  596. package/dist/src/utils/calendar.d.ts.map +1 -1
  597. package/dist/src/utils/countryCodes.d.ts +27 -0
  598. package/dist/src/utils/countryCodes.d.ts.map +1 -0
  599. package/dist/src/utils/index.d.ts +4 -0
  600. package/dist/src/utils/index.d.ts.map +1 -1
  601. package/dist/src/utils/mapThemes.d.ts +90 -0
  602. package/dist/src/utils/mapThemes.d.ts.map +1 -0
  603. package/dist/src/utils/phone.d.ts +73 -0
  604. package/dist/src/utils/phone.d.ts.map +1 -0
  605. package/dist/src/utils/transitions.d.ts +55 -0
  606. package/dist/src/utils/transitions.d.ts.map +1 -0
  607. package/dist/src/views/components/index.d.ts +15 -0
  608. package/dist/src/views/components/index.d.ts.map +1 -0
  609. package/dist/src/views/examples/index.d.ts +5 -0
  610. package/dist/src/views/examples/index.d.ts.map +1 -0
  611. package/dist/src/views/forms/index.d.ts +3 -0
  612. package/dist/src/views/forms/index.d.ts.map +1 -0
  613. package/dist/src/views/index.d.ts +23 -0
  614. package/dist/src/views/index.d.ts.map +1 -0
  615. package/dist/src/views/inputs/index.d.ts +13 -0
  616. package/dist/src/views/inputs/index.d.ts.map +1 -0
  617. package/dist/src/views/layouts/index.d.ts +5 -0
  618. package/dist/src/views/layouts/index.d.ts.map +1 -0
  619. package/dist/stepper/StepperPanels.d.ts +3 -0
  620. package/dist/stepper/StepperPanels.js +5 -0
  621. package/dist/stepper/StepperPanels.js.map +1 -0
  622. package/dist/stepper/index.d.ts +1 -0
  623. package/dist/stepper/index.js +5 -0
  624. package/dist/stepper/index.js.map +1 -0
  625. package/dist/style.css +1 -1
  626. package/dist/tabs/InlineTabs.d.ts +3 -0
  627. package/dist/tabs/InlineTabs.js +5 -0
  628. package/dist/tabs/InlineTabs.js.map +1 -0
  629. package/dist/tabs/TabGroup.d.ts +3 -0
  630. package/dist/tabs/TabGroup.js +5 -0
  631. package/dist/tabs/TabGroup.js.map +1 -0
  632. package/dist/tabs/TabGroupUnderline.d.ts +3 -0
  633. package/dist/tabs/TabGroupUnderline.js +5 -0
  634. package/dist/tabs/TabGroupUnderline.js.map +1 -0
  635. package/dist/tabs/TabsInPills.d.ts +3 -0
  636. package/dist/tabs/TabsInPills.js +5 -0
  637. package/dist/tabs/TabsInPills.js.map +1 -0
  638. package/dist/tabs/index.d.ts +1 -0
  639. package/dist/tabs/index.js +11 -0
  640. package/dist/tabs/index.js.map +1 -0
  641. package/dist/tabs-Da32Mbhf.js +202 -0
  642. package/dist/tabs-Da32Mbhf.js.map +1 -0
  643. package/dist/transition-_rPfnoET.js +191 -0
  644. package/dist/transition-_rPfnoET.js.map +1 -0
  645. package/dist/use-outside-click-DNDV36Sc.js +151 -0
  646. package/dist/use-outside-click-DNDV36Sc.js.map +1 -0
  647. package/dist/use-resolve-button-type-h6n-lm9q.js +20 -0
  648. package/dist/use-resolve-button-type-h6n-lm9q.js.map +1 -0
  649. package/dist/use-text-value-DKnkjK00.js +44 -0
  650. package/dist/use-text-value-DKnkjK00.js.map +1 -0
  651. package/dist/use-tree-walker-BHCORE7u.js +16 -0
  652. package/dist/use-tree-walker-BHCORE7u.js.map +1 -0
  653. package/dist/useEventSegments-B-r_8zCW.js +97 -0
  654. package/dist/useEventSegments-B-r_8zCW.js.map +1 -0
  655. package/dist/useMap-BaZEIoWM.js +525 -0
  656. package/dist/useMap-BaZEIoWM.js.map +1 -0
  657. package/dist/useSimpleTabs-CSgkChEU.js +103 -0
  658. package/dist/useSimpleTabs-CSgkChEU.js.map +1 -0
  659. package/dist/useStringTransform-CSr7nZWg.js +140 -0
  660. package/dist/useStringTransform-CSr7nZWg.js.map +1 -0
  661. package/dist/vue-datepicker-CEn0-fJj.js +4871 -0
  662. package/dist/vue-datepicker-CEn0-fJj.js.map +1 -0
  663. package/dist/vue-router-BPbyZ7xA.js +145 -0
  664. package/dist/vue-router-BPbyZ7xA.js.map +1 -0
  665. package/dist/vue3-lottie.es-C_MDkNwR.js +7976 -0
  666. package/dist/vue3-lottie.es-C_MDkNwR.js.map +1 -0
  667. package/dist/wrappers/BackgroundGradientWrapper.d.ts +3 -0
  668. package/dist/wrappers/BackgroundGradientWrapper.js +5 -0
  669. package/dist/wrappers/BackgroundGradientWrapper.js.map +1 -0
  670. package/dist/wrappers/CardWrapper.d.ts +3 -0
  671. package/dist/wrappers/CardWrapper.js +5 -0
  672. package/dist/wrappers/CardWrapper.js.map +1 -0
  673. package/dist/wrappers/DisclosureWrapper.d.ts +3 -0
  674. package/dist/wrappers/DisclosureWrapper.js +5 -0
  675. package/dist/wrappers/DisclosureWrapper.js.map +1 -0
  676. package/dist/wrappers/FormErrorWrapper.d.ts +3 -0
  677. package/dist/wrappers/FormErrorWrapper.js +5 -0
  678. package/dist/wrappers/FormErrorWrapper.js.map +1 -0
  679. package/dist/wrappers/index.d.ts +1 -0
  680. package/dist/wrappers/index.js +11 -0
  681. package/dist/wrappers/index.js.map +1 -0
  682. package/package.json +38 -6
  683. package/scripts/build-css.cjs +1 -1
  684. package/scripts/generate-config.cjs +1 -0
  685. package/scripts/generateRecursiveIndex.cjs +4 -1
  686. package/tailwind.config.js +1 -1
  687. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js +0 -70
  688. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js.map +0 -1
  689. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js.map +0 -1
  690. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-LE2kDHpU.js +0 -1300
  691. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-LE2kDHpU.js.map +0 -1
  692. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-Cg83utkU.js.map +0 -1
  693. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js +0 -123
  694. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js.map +0 -1
  695. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js +0 -217
  696. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js.map +0 -1
  697. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js.map +0 -1
  698. package/dist/EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js.map +0 -1
  699. package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js +0 -66
  700. package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js.map +0 -1
  701. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js +0 -522
  702. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js.map +0 -1
  703. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-CzLbBcNS.js.map +0 -1
  704. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js.map +0 -1
  705. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js.map +0 -1
  706. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js.map +0 -1
  707. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js.map +0 -1
  708. package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js +0 -82
  709. package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js.map +0 -1
  710. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-KbLKA4SA.js.map +0 -1
  711. package/dist/UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js +0 -163
  712. package/dist/UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js.map +0 -1
  713. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js +0 -222
  714. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js.map +0 -1
  715. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-D4-B3A7K.js +0 -51
  716. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-D4-B3A7K.js.map +0 -1
  717. package/dist/UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js.map +0 -1
  718. package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js +0 -154
  719. package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js.map +0 -1
  720. package/dist/XMarkIcon-C4wILUsz.js.map +0 -1
  721. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js +0 -29
  722. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js.map +0 -1
  723. package/dist/calculate-active-index-CksdUwZY.js +0 -87
  724. package/dist/calculate-active-index-CksdUwZY.js.map +0 -1
  725. package/dist/calendar-905Ofszh.js +0 -77
  726. package/dist/calendar-905Ofszh.js.map +0 -1
  727. package/dist/components/TextInput.d.ts +0 -3
  728. package/dist/components/TextInput.js.map +0 -1
  729. package/dist/dialog-U1KNiPzc.js.map +0 -1
  730. package/dist/form-DQKuKVqJ.js +0 -51
  731. package/dist/form-DQKuKVqJ.js.map +0 -1
  732. package/dist/keyboard-DJD8TwH4.js +0 -113
  733. package/dist/keyboard-DJD8TwH4.js.map +0 -1
  734. package/dist/open-closed-DgcU-HDT.js +0 -179
  735. package/dist/open-closed-DgcU-HDT.js.map +0 -1
  736. package/dist/transition-CuxxW9dY.js +0 -209
  737. package/dist/transition-CuxxW9dY.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMap-BaZEIoWM.js","sources":["../src/types/maps.ts","../node_modules/@googlemaps/js-api-loader/dist/index.mjs","../src/composables/useMap.ts"],"sourcesContent":["/**\n * @fileoverview Map Component Types\n * \n * Comprehensive TypeScript definitions for map components in stachelock-ui.\n * Supports Google Maps integration with dark mode, clustering, and flexible configuration.\n * \n * @module types/maps\n */\n\n/// <reference types=\"@types/google.maps\" />\n\n/**\n * Geographic coordinates (latitude/longitude)\n */\nexport interface LatLngLiteral {\n lat: number;\n lng: number;\n}\n\n/**\n * Geographic bounds (rectangle)\n */\nexport interface LatLngBoundsLiteral {\n north: number;\n south: number;\n east: number;\n west: number;\n}\n\n/**\n * Map marker data structure\n */\nexport interface MapMarker<T = unknown> {\n /** Unique identifier for the marker */\n id: string | number;\n /** Geographic position */\n position: LatLngLiteral;\n /** Display title/tooltip */\n title?: string;\n /** Custom data associated with the marker */\n data?: T;\n /** Custom marker icon configuration */\n icon?: MapMarkerIcon;\n /** Z-index for stacking order */\n zIndex?: number;\n /** Whether the marker is draggable */\n draggable?: boolean;\n /** Whether the marker is visible */\n visible?: boolean;\n /** Custom label for the marker */\n label?: string | MapMarkerLabel;\n}\n\n/**\n * Marker icon configuration\n */\nexport interface MapMarkerIcon {\n /** URL to icon image or SVG path constant */\n url?: string;\n /** SVG path data (uses google.maps.SymbolPath or custom path) */\n path?: string | number;\n /** Scale factor for the icon */\n scale?: number;\n /** Fill color (hex or named color) */\n fillColor?: string;\n /** Fill opacity (0-1) */\n fillOpacity?: number;\n /** Stroke color */\n strokeColor?: string;\n /** Stroke weight in pixels */\n strokeWeight?: number;\n /** Anchor point for positioning */\n anchor?: { x: number; y: number };\n /** Origin point for sprite images */\n origin?: { x: number; y: number };\n /** Scaled size for the icon */\n scaledSize?: { width: number; height: number };\n}\n\n/**\n * Marker label configuration\n */\nexport interface MapMarkerLabel {\n text: string;\n color?: string;\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n className?: string;\n}\n\n/**\n * Marker cluster data structure\n */\nexport interface MapCluster<T = unknown> {\n /** Unique cluster identifier */\n id: string;\n /** Cluster center position */\n position: LatLngLiteral;\n /** Number of markers in the cluster */\n size: number;\n /** Markers contained in this cluster */\n markers: MapMarker<T>[];\n /** Bounding box of the cluster */\n bounds?: LatLngBoundsLiteral;\n}\n\n/**\n * Info window content configuration\n */\nexport interface InfoWindowContent {\n /** Title text */\n title?: string;\n /** Subtitle text */\n subtitle?: string;\n /** Main content (can be HTML string or component data) */\n content?: string;\n /** Image URL */\n imageUrl?: string;\n /** Additional details as key-value pairs */\n details?: Array<{\n label: string;\n value: string;\n type?: 'text' | 'email' | 'phone' | 'link' | 'address';\n }>;\n /** Action buttons */\n actions?: Array<{\n label: string;\n action: string;\n theme?: 'primary' | 'secondary' | 'danger';\n }>;\n}\n\n/**\n * Map theme preset names\n */\nexport type MapTheme = \n | 'default'\n | 'light'\n | 'dark'\n | 'ultraLight'\n | 'silver'\n | 'night'\n | 'retro'\n | 'aubergine'\n | 'custom';\n\n/**\n * Map type options\n */\nexport type MapTypeId = 'roadmap' | 'satellite' | 'hybrid' | 'terrain';\n\n/**\n * Map control positions\n */\nexport type ControlPosition = \n | 'TOP_CENTER'\n | 'TOP_LEFT'\n | 'TOP_RIGHT'\n | 'LEFT_TOP'\n | 'LEFT_CENTER'\n | 'LEFT_BOTTOM'\n | 'RIGHT_TOP'\n | 'RIGHT_CENTER'\n | 'RIGHT_BOTTOM'\n | 'BOTTOM_CENTER'\n | 'BOTTOM_LEFT'\n | 'BOTTOM_RIGHT';\n\n/**\n * Clustering configuration options\n */\nexport interface ClusteringOptions {\n /** Enable or disable clustering */\n enabled?: boolean;\n /** Minimum cluster size to display */\n minimumClusterSize?: number;\n /** Maximum zoom level for clustering */\n maxZoom?: number;\n /** Grid size for clustering algorithm */\n gridSize?: number;\n /** Radius in pixels for clustering */\n radius?: number;\n /** Custom cluster renderer function */\n renderer?: (cluster: MapCluster) => MapMarkerIcon;\n /** Enable virtual rendering for large datasets */\n virtualRendering?: boolean;\n /** Maximum markers to render without clustering */\n maxMarkersWithoutClustering?: number;\n}\n\n/**\n * Map controls configuration\n */\nexport interface MapControls {\n /** Show zoom controls */\n zoomControl?: boolean;\n /** Zoom control position */\n zoomControlPosition?: ControlPosition;\n /** Show map type control */\n mapTypeControl?: boolean;\n /** Show street view control */\n streetViewControl?: boolean;\n /** Show fullscreen control */\n fullscreenControl?: boolean;\n /** Show scale control */\n scaleControl?: boolean;\n /** Show rotate control */\n rotateControl?: boolean;\n /** Disable all default UI */\n disableDefaultUI?: boolean;\n}\n\n/**\n * Map gesture handling options\n */\nexport type GestureHandling = 'cooperative' | 'greedy' | 'none' | 'auto';\n\n/**\n * Comprehensive map configuration options\n */\nexport interface MapOptions {\n /** Map center coordinates */\n center?: LatLngLiteral;\n /** Initial zoom level (1-21) */\n zoom?: number;\n /** Minimum zoom level */\n minZoom?: number;\n /** Maximum zoom level */\n maxZoom?: number;\n /** Map type */\n mapTypeId?: MapTypeId;\n /** Map theme */\n theme?: MapTheme;\n /** Custom map styles (overrides theme) */\n styles?: google.maps.MapTypeStyle[];\n /** Map controls configuration */\n controls?: MapControls;\n /** Gesture handling mode */\n gestureHandling?: GestureHandling;\n /** Restrict map bounds */\n restriction?: {\n latLngBounds: LatLngBoundsLiteral;\n strictBounds?: boolean;\n };\n /** Clickable POI icons */\n clickableIcons?: boolean;\n /** Enable tilt and rotation */\n tilt?: number;\n heading?: number;\n /** Background color while loading */\n backgroundColor?: string;\n /** Keyboard shortcuts */\n keyboardShortcuts?: boolean;\n /** Scroll wheel zoom */\n scrollwheel?: boolean;\n /** Double click to zoom */\n disableDoubleClickZoom?: boolean;\n /** Draggable map */\n draggable?: boolean;\n}\n\n/**\n * Map event payloads\n */\nexport interface MapEvents {\n /** Map click event */\n click: { position: LatLngLiteral; placeId?: string };\n /** Map double click event */\n dblclick: { position: LatLngLiteral };\n /** Map right click event */\n rightclick: { position: LatLngLiteral };\n /** Map center changed event */\n centerChanged: { center: LatLngLiteral };\n /** Map zoom changed event */\n zoomChanged: { zoom: number };\n /** Map bounds changed event */\n boundsChanged: { bounds: LatLngBoundsLiteral };\n /** Map type changed event */\n mapTypeIdChanged: { mapTypeId: MapTypeId };\n /** Map idle event */\n idle: void;\n /** Map drag start event */\n dragstart: void;\n /** Map drag event */\n drag: { center: LatLngLiteral };\n /** Map drag end event */\n dragend: { center: LatLngLiteral };\n /** Map tilt changed event */\n tiltChanged: { tilt: number };\n /** Map heading changed event */\n headingChanged: { heading: number };\n /** Map ready event */\n ready: { map: google.maps.Map };\n /** Map error event */\n error: { message: string; error?: Error };\n}\n\n/**\n * Marker event payloads\n */\nexport interface MarkerEvents<T = unknown> {\n /** Marker click event */\n click: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker double click event */\n dblclick: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker right click event */\n rightclick: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker drag start event */\n dragstart: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker drag event */\n drag: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker drag end event */\n dragend: { marker: MapMarker<T>; position: LatLngLiteral };\n /** Marker mouse over event */\n mouseover: { marker: MapMarker<T> };\n /** Marker mouse out event */\n mouseout: { marker: MapMarker<T> };\n}\n\n/**\n * Cluster event payloads\n */\nexport interface ClusterEvents<T = unknown> {\n /** Cluster click event */\n click: { cluster: MapCluster<T>; position: LatLngLiteral };\n /** Cluster expanded event (when zooming into cluster) */\n expanded: { cluster: MapCluster<T>; markers: MapMarker<T>[] };\n}\n\n/**\n * Map loading state\n */\nexport interface MapLoadingState {\n /** Whether the Google Maps API is loading */\n apiLoading: boolean;\n /** Whether the Google Maps API is ready */\n apiReady: boolean;\n /** Whether there's an API error */\n apiError: string | null;\n /** Whether map data is loading */\n dataLoading: boolean;\n /** Whether map data is ready */\n dataReady: boolean;\n /** Data loading error */\n dataError: string | null;\n}\n\n/**\n * Map instance exposed methods\n */\nexport interface MapInstance {\n /** Get the native Google Map instance */\n getMap(): google.maps.Map | null;\n /** Pan to a position */\n panTo(position: LatLngLiteral): void;\n /** Pan by pixels */\n panBy(x: number, y: number): void;\n /** Set zoom level */\n setZoom(zoom: number): void;\n /** Get current zoom level */\n getZoom(): number | undefined;\n /** Set center */\n setCenter(position: LatLngLiteral): void;\n /** Get current center */\n getCenter(): LatLngLiteral | undefined;\n /** Get current bounds */\n getBounds(): LatLngBoundsLiteral | undefined;\n /** Fit map to show all markers */\n fitBounds(bounds: LatLngBoundsLiteral, padding?: number): void;\n /** Fit map to show specific markers */\n fitToMarkers(markers: MapMarker[], padding?: number): void;\n /** Reset map to initial state */\n reset(): void;\n /** Add a marker */\n addMarker(marker: MapMarker): void;\n /** Remove a marker by ID */\n removeMarker(id: string | number): void;\n /** Update a marker */\n updateMarker(id: string | number, updates: Partial<MapMarker>): void;\n /** Clear all markers */\n clearMarkers(): void;\n /** Get all markers */\n getMarkers(): MapMarker[];\n /** Get visible markers (within current bounds) */\n getVisibleMarkers(): MapMarker[];\n}\n\n/**\n * Hook for extracting coordinates from various data formats\n */\nexport type CoordinateExtractor<T> = (data: T) => LatLngLiteral | null;\n\n/**\n * Default coordinate extractor that handles common data formats\n */\nexport function defaultCoordinateExtractor<T extends Record<string, unknown>>(\n data: T\n): LatLngLiteral | null {\n // Try _geoloc (Algolia format)\n if (data._geoloc && typeof data._geoloc === 'object') {\n const geoloc = data._geoloc as { lat?: number; lng?: number };\n if (typeof geoloc.lat === 'number' && typeof geoloc.lng === 'number') {\n return { lat: geoloc.lat, lng: geoloc.lng };\n }\n }\n\n // Try latLng\n if (data.latLng && typeof data.latLng === 'object') {\n const latLng = data.latLng as { lat?: number; lng?: number };\n if (typeof latLng.lat === 'number' && typeof latLng.lng === 'number') {\n return { lat: latLng.lat, lng: latLng.lng };\n }\n }\n\n // Try location\n if (data.location && typeof data.location === 'object') {\n const location = data.location as { lat?: number; lng?: number };\n if (typeof location.lat === 'number' && typeof location.lng === 'number') {\n return { lat: location.lat, lng: location.lng };\n }\n }\n\n // Try coordinates\n if (data.coordinates && typeof data.coordinates === 'object') {\n const coords = data.coordinates as { lat?: number; lng?: number };\n if (typeof coords.lat === 'number' && typeof coords.lng === 'number') {\n return { lat: coords.lat, lng: coords.lng };\n }\n }\n\n // Try direct lat/lng properties\n if (typeof data.lat === 'number' && typeof data.lng === 'number') {\n return { lat: data.lat, lng: data.lng as number };\n }\n\n // Try latitude/longitude\n if (typeof data.latitude === 'number' && typeof data.longitude === 'number') {\n return { lat: data.latitude as number, lng: data.longitude as number };\n }\n\n // Try address.geocode\n if (data.address && typeof data.address === 'object') {\n const address = data.address as { geocode?: { lat?: number; lng?: number } };\n if (address.geocode && typeof address.geocode.lat === 'number' && typeof address.geocode.lng === 'number') {\n return { lat: address.geocode.lat, lng: address.geocode.lng };\n }\n }\n\n return null;\n}\n\n/**\n * Validates if coordinates are valid geographic coordinates\n */\nexport function isValidCoordinate(lat: number, lng: number): boolean {\n // Check valid ranges\n if (lat < -90 || lat > 90 || lng < -180 || lng > 180) {\n return false;\n }\n // Reject null island (0,0) and near-zero coordinates\n if (lat === 0 && lng === 0) {\n return false;\n }\n const threshold = 0.001;\n if (Math.abs(lat) < threshold && Math.abs(lng) < threshold) {\n return false;\n }\n return true;\n}\n\n/**\n * Default US center coordinates\n */\nexport const US_CENTER: LatLngLiteral = { lat: 39.8283, lng: -98.5795 };\n\n/**\n * Default world center coordinates\n */\nexport const WORLD_CENTER: LatLngLiteral = { lat: 0, lng: 0 };\n\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar fastDeepEqual;\nvar hasRequiredFastDeepEqual;\n\nfunction requireFastDeepEqual () {\n\tif (hasRequiredFastDeepEqual) return fastDeepEqual;\n\thasRequiredFastDeepEqual = 1;\n\n\t// do not edit .js files directly - edit src/index.jst\n\n\n\n\tfastDeepEqual = function equal(a, b) {\n\t if (a === b) return true;\n\n\t if (a && b && typeof a == 'object' && typeof b == 'object') {\n\t if (a.constructor !== b.constructor) return false;\n\n\t var length, i, keys;\n\t if (Array.isArray(a)) {\n\t length = a.length;\n\t if (length != b.length) return false;\n\t for (i = length; i-- !== 0;)\n\t if (!equal(a[i], b[i])) return false;\n\t return true;\n\t }\n\n\n\n\t if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n\t if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n\t if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n\t keys = Object.keys(a);\n\t length = keys.length;\n\t if (length !== Object.keys(b).length) return false;\n\n\t for (i = length; i-- !== 0;)\n\t if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n\t for (i = length; i-- !== 0;) {\n\t var key = keys[i];\n\n\t if (!equal(a[key], b[key])) return false;\n\t }\n\n\t return true;\n\t }\n\n\t // true if both NaN, false otherwise\n\t return a!==a && b!==b;\n\t};\n\treturn fastDeepEqual;\n}\n\nvar fastDeepEqualExports = requireFastDeepEqual();\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqualExports);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `&region=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.loading) {\n // do nothing but wait\n return;\n }\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader. \" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n this.loading = true;\n this.setScript();\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","/**\n * @fileoverview useMap Composable\n * \n * Provides reactive state management for Google Maps integration\n * including API loading, theme management, and marker handling.\n * \n * @module composables/useMap\n */\n\nimport { ref, computed, watch, inject, type Ref, type ComputedRef } from 'vue';\nimport { Loader, type Library } from '@googlemaps/js-api-loader';\nimport type { GoogleMapsOptions } from '../plugin/configure';\n/// <reference types=\"@types/google.maps\" />\n\nimport type {\n LatLngLiteral,\n LatLngBoundsLiteral,\n MapMarker,\n MapCluster,\n MapLoadingState,\n MapTheme,\n ClusteringOptions,\n CoordinateExtractor,\n} from '../types/maps';\nimport { isValidCoordinate } from '../types/maps';\nimport { getMapStyles, getThemeForMode, getClusterColor, type MapStyles } from '../utils/mapThemes';\nimport { useTheme } from './useTheme';\n\n/**\n * Shared Google Maps loader instance\n */\nlet globalLoader: Loader | null = null;\nlet globalApiPromise: Promise<typeof google> | null = null;\n\n/**\n * Configuration for useMap composable\n */\nexport interface UseMapOptions {\n /** Google Maps API key (optional if provided via plugin) */\n apiKey?: string;\n /** API version (default: 'weekly') */\n version?: string;\n /** Libraries to load */\n libraries?: ('places' | 'geometry' | 'drawing' | 'visualization' | 'maps' | 'marker')[];\n /** Initial map theme */\n theme?: MapTheme;\n /** Auto-switch theme based on dark mode */\n autoTheme?: boolean;\n /** Light mode theme when autoTheme is enabled */\n lightTheme?: MapTheme;\n /** Dark mode theme when autoTheme is enabled */\n darkTheme?: MapTheme;\n /** Custom styles (overrides theme) */\n customStyles?: MapStyles;\n /** Enable marker clustering */\n clustering?: ClusteringOptions;\n /** Default center */\n defaultCenter?: LatLngLiteral;\n /** Default zoom */\n defaultZoom?: number;\n}\n\n/**\n * Return type for useMap composable\n */\nexport interface UseMapReturn {\n // Loading state\n isApiLoading: Ref<boolean>;\n isApiReady: Ref<boolean>;\n apiError: Ref<string | null>;\n apiPromise: Ref<Promise<typeof google> | null>;\n loadingState: ComputedRef<MapLoadingState>;\n \n // Theme\n currentTheme: Ref<MapTheme>;\n mapStyles: ComputedRef<MapStyles | undefined>;\n setTheme: (theme: MapTheme) => void;\n \n // Map reference\n mapRef: Ref<google.maps.Map | null>;\n setMap: (map: google.maps.Map) => void;\n \n // Position\n center: Ref<LatLngLiteral>;\n zoom: Ref<number>;\n bounds: Ref<LatLngBoundsLiteral | null>;\n \n // Markers\n markers: Ref<MapMarker[]>;\n visibleMarkers: ComputedRef<MapMarker[]>;\n addMarker: (marker: MapMarker) => void;\n removeMarker: (id: string | number) => void;\n updateMarker: (id: string | number, updates: Partial<MapMarker>) => void;\n clearMarkers: () => void;\n setMarkers: (newMarkers: MapMarker[]) => void;\n \n // Clustering\n clusters: Ref<MapCluster[]>;\n shouldShowClusters: ComputedRef<boolean>;\n processMarkers: (zoom: number, bounds?: LatLngBoundsLiteral) => void;\n getClusterColor: (size: number) => string;\n \n // Utilities\n initializeApi: () => Promise<typeof google>;\n panTo: (position: LatLngLiteral) => void;\n setZoom: (level: number) => void;\n fitBounds: (bounds: LatLngBoundsLiteral, padding?: number) => void;\n fitToMarkers: (padding?: number) => void;\n \n // Coordinate extraction\n extractCoordinates: <T extends Record<string, unknown>>(data: T) => LatLngLiteral | null;\n markersFromData: <T extends Record<string, unknown>>(\n data: T[],\n extractor?: CoordinateExtractor<T>,\n idField?: keyof T\n ) => MapMarker<T>[];\n}\n\n/**\n * useMap composable for Google Maps integration\n * \n * @example\n * ```vue\n * <script setup>\n * import { useMap } from '@stachelock/ui';\n * \n * const {\n * isApiReady,\n * mapStyles,\n * markers,\n * initializeApi\n * } = useMap({\n * autoTheme: true,\n * clustering: { enabled: true }\n * });\n * \n * onMounted(() => initializeApi());\n * </script>\n * ```\n */\nexport function useMap(options: UseMapOptions = {}): UseMapReturn {\n // Get plugin configuration\n const pluginConfig = inject<GoogleMapsOptions>('googleMaps', {} as GoogleMapsOptions);\n const { isDark } = useTheme();\n \n // Merge options with defaults\n const config = {\n apiKey: options.apiKey || pluginConfig?.apiKey || '',\n version: options.version || pluginConfig?.version || 'weekly',\n libraries: options.libraries || pluginConfig?.libraries || ['places', 'maps', 'geometry', 'marker'] as const,\n theme: options.theme || 'ultraLight',\n autoTheme: options.autoTheme ?? true,\n lightTheme: options.lightTheme || 'ultraLight',\n darkTheme: options.darkTheme || 'dark',\n customStyles: options.customStyles,\n clustering: {\n enabled: options.clustering?.enabled ?? false,\n minimumClusterSize: options.clustering?.minimumClusterSize ?? 2,\n maxZoom: options.clustering?.maxZoom ?? 15,\n gridSize: options.clustering?.gridSize ?? 60,\n radius: options.clustering?.radius ?? 60,\n virtualRendering: options.clustering?.virtualRendering ?? true,\n maxMarkersWithoutClustering: options.clustering?.maxMarkersWithoutClustering ?? 100,\n },\n defaultCenter: options.defaultCenter || pluginConfig?.defaultCenter || { lat: 39.8283, lng: -98.5795 },\n defaultZoom: options.defaultZoom ?? pluginConfig?.defaultZoom ?? 4,\n };\n \n // Loading state\n const isApiLoading = ref(false);\n const isApiReady = ref(false);\n const apiError = ref<string | null>(null);\n const apiPromise = ref<Promise<typeof google> | null>(null);\n \n // Map state\n const mapRef = ref<google.maps.Map | null>(null);\n const currentTheme = ref<MapTheme>(config.theme);\n const center = ref<LatLngLiteral>(config.defaultCenter);\n const zoom = ref<number>(config.defaultZoom);\n const bounds = ref<LatLngBoundsLiteral | null>(null);\n \n // Markers state\n const markers = ref<MapMarker[]>([]);\n const clusters = ref<MapCluster[]>([]);\n \n // Computed loading state\n const loadingState = computed<MapLoadingState>(() => ({\n apiLoading: isApiLoading.value,\n apiReady: isApiReady.value,\n apiError: apiError.value,\n dataLoading: false, // Can be extended\n dataReady: markers.value.length > 0,\n dataError: null,\n }));\n \n // Computed map styles based on theme and dark mode\n const mapStyles = computed<MapStyles | undefined>(() => {\n if (config.customStyles) {\n return config.customStyles;\n }\n \n if (config.autoTheme) {\n return getThemeForMode(isDark.value, config.lightTheme, config.darkTheme);\n }\n \n return getMapStyles(currentTheme.value);\n });\n \n // Visible markers (within bounds)\n const visibleMarkers = computed<MapMarker[]>(() => {\n if (!bounds.value) {\n return markers.value;\n }\n \n return markers.value.filter(marker => {\n const { lat, lng } = marker.position;\n const b = bounds.value!;\n return lat >= b.south && lat <= b.north && lng >= b.west && lng <= b.east;\n });\n });\n \n // Should show clusters\n const shouldShowClusters = computed<boolean>(() => {\n if (!config.clustering.enabled) return false;\n if (zoom.value > config.clustering.maxZoom) return false;\n return markers.value.length > config.clustering.maxMarkersWithoutClustering;\n });\n \n /**\n * Initialize Google Maps API\n */\n async function initializeApi(): Promise<typeof google> {\n if (isApiReady.value && globalApiPromise) {\n return globalApiPromise;\n }\n \n if (!config.apiKey) {\n const error = 'Google Maps API key is required';\n apiError.value = error;\n throw new Error(error);\n }\n \n isApiLoading.value = true;\n apiError.value = null;\n \n try {\n // Reuse existing loader if available\n if (!globalLoader) {\n globalLoader = new Loader({\n apiKey: config.apiKey,\n version: config.version,\n id: '__googleMapsScriptId',\n libraries: config.libraries as Library[],\n });\n }\n \n // Reuse existing promise if available\n if (!globalApiPromise) {\n globalApiPromise = globalLoader.load();\n }\n \n apiPromise.value = globalApiPromise;\n await globalApiPromise;\n \n isApiReady.value = true;\n isApiLoading.value = false;\n \n console.log('[useMap] Google Maps API loaded successfully');\n return globalApiPromise;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to load Google Maps API';\n apiError.value = message;\n isApiLoading.value = false;\n console.error('[useMap] Google Maps API loading failed:', error);\n throw error;\n }\n }\n \n /**\n * Set the map reference\n */\n function setMap(map: google.maps.Map): void {\n mapRef.value = map;\n \n // Sync initial state\n const mapCenter = map.getCenter();\n if (mapCenter) {\n center.value = { lat: mapCenter.lat(), lng: mapCenter.lng() };\n }\n \n const mapZoom = map.getZoom();\n if (mapZoom !== undefined) {\n zoom.value = mapZoom;\n }\n \n // Update bounds\n updateBounds();\n }\n \n /**\n * Update bounds from map\n */\n function updateBounds(): void {\n if (!mapRef.value) return;\n \n const mapBounds = mapRef.value.getBounds();\n if (mapBounds) {\n const ne = mapBounds.getNorthEast();\n const sw = mapBounds.getSouthWest();\n bounds.value = {\n north: ne.lat(),\n south: sw.lat(),\n east: ne.lng(),\n west: sw.lng(),\n };\n }\n }\n \n /**\n * Set theme\n */\n function setTheme(theme: MapTheme): void {\n currentTheme.value = theme;\n \n if (mapRef.value && !config.autoTheme) {\n const styles = getMapStyles(theme);\n mapRef.value.setOptions({ styles });\n }\n }\n \n /**\n * Pan to position\n */\n function panTo(position: LatLngLiteral): void {\n if (mapRef.value) {\n mapRef.value.panTo(position);\n center.value = position;\n }\n }\n \n /**\n * Set zoom level\n */\n function setZoom(level: number): void {\n if (mapRef.value) {\n mapRef.value.setZoom(level);\n zoom.value = level;\n }\n }\n \n /**\n * Fit map to bounds\n */\n function fitBounds(newBounds: LatLngBoundsLiteral, padding?: number): void {\n if (!mapRef.value) return;\n \n const googleBounds = new google.maps.LatLngBounds(\n { lat: newBounds.south, lng: newBounds.west },\n { lat: newBounds.north, lng: newBounds.east }\n );\n \n mapRef.value.fitBounds(googleBounds, padding);\n updateBounds();\n }\n \n /**\n * Fit map to show all markers\n */\n function fitToMarkers(padding: number = 50): void {\n if (!mapRef.value || markers.value.length === 0) return;\n \n const googleBounds = new google.maps.LatLngBounds();\n markers.value.forEach(marker => {\n googleBounds.extend(marker.position);\n });\n \n mapRef.value.fitBounds(googleBounds, padding);\n updateBounds();\n }\n \n // Marker management\n function addMarker(marker: MapMarker): void {\n markers.value = [...markers.value, marker];\n }\n \n function removeMarker(id: string | number): void {\n markers.value = markers.value.filter(m => m.id !== id);\n }\n \n function updateMarker(id: string | number, updates: Partial<MapMarker>): void {\n markers.value = markers.value.map(m => \n m.id === id ? { ...m, ...updates } : m\n );\n }\n \n function clearMarkers(): void {\n markers.value = [];\n clusters.value = [];\n }\n \n function setMarkers(newMarkers: MapMarker[]): void {\n markers.value = newMarkers;\n }\n \n /**\n * Simple grid-based clustering algorithm\n */\n function processMarkers(currentZoom: number, currentBounds?: LatLngBoundsLiteral): void {\n if (!config.clustering.enabled || !shouldShowClusters.value) {\n clusters.value = [];\n return;\n }\n \n const gridSize = config.clustering.gridSize / Math.pow(2, currentZoom);\n const clusterMap = new Map<string, MapMarker[]>();\n \n const markersToProcess = currentBounds \n ? markers.value.filter(m => {\n const { lat, lng } = m.position;\n return lat >= currentBounds.south && lat <= currentBounds.north &&\n lng >= currentBounds.west && lng <= currentBounds.east;\n })\n : markers.value;\n \n // Grid-based clustering\n markersToProcess.forEach(marker => {\n const gridX = Math.floor(marker.position.lng / gridSize);\n const gridY = Math.floor(marker.position.lat / gridSize);\n const key = `${gridX}_${gridY}`;\n \n if (!clusterMap.has(key)) {\n clusterMap.set(key, []);\n }\n clusterMap.get(key)!.push(marker);\n });\n \n // Convert to cluster objects\n const newClusters: MapCluster[] = [];\n clusterMap.forEach((clusterMarkers, key) => {\n if (clusterMarkers.length >= config.clustering.minimumClusterSize) {\n // Calculate cluster center (average of all markers)\n const sumLat = clusterMarkers.reduce((sum, m) => sum + m.position.lat, 0);\n const sumLng = clusterMarkers.reduce((sum, m) => sum + m.position.lng, 0);\n \n newClusters.push({\n id: `cluster_${key}`,\n position: {\n lat: sumLat / clusterMarkers.length,\n lng: sumLng / clusterMarkers.length,\n },\n size: clusterMarkers.length,\n markers: clusterMarkers,\n });\n }\n });\n \n clusters.value = newClusters;\n }\n \n /**\n * Extract coordinates from data object\n */\n function extractCoordinates<T extends Record<string, unknown>>(data: T): LatLngLiteral | null {\n // Implementation matches defaultCoordinateExtractor from types\n const extractors = [\n // _geoloc (Algolia format)\n () => {\n const geoloc = data._geoloc as { lat?: number; lng?: number } | undefined;\n if (geoloc && typeof geoloc.lat === 'number' && typeof geoloc.lng === 'number') {\n return { lat: geoloc.lat, lng: geoloc.lng };\n }\n return null;\n },\n // latLng\n () => {\n const latLng = data.latLng as { lat?: number; lng?: number } | undefined;\n if (latLng && typeof latLng.lat === 'number' && typeof latLng.lng === 'number') {\n return { lat: latLng.lat, lng: latLng.lng };\n }\n return null;\n },\n // location\n () => {\n const location = data.location as { lat?: number; lng?: number } | undefined;\n if (location && typeof location.lat === 'number' && typeof location.lng === 'number') {\n return { lat: location.lat, lng: location.lng };\n }\n return null;\n },\n // coordinates\n () => {\n const coords = data.coordinates as { lat?: number; lng?: number } | undefined;\n if (coords && typeof coords.lat === 'number' && typeof coords.lng === 'number') {\n return { lat: coords.lat, lng: coords.lng };\n }\n return null;\n },\n // Direct lat/lng\n () => {\n if (typeof data.lat === 'number' && typeof data.lng === 'number') {\n return { lat: data.lat as number, lng: data.lng as number };\n }\n return null;\n },\n // latitude/longitude\n () => {\n if (typeof data.latitude === 'number' && typeof data.longitude === 'number') {\n return { lat: data.latitude as number, lng: data.longitude as number };\n }\n return null;\n },\n // address.geocode\n () => {\n const address = data.address as { geocode?: { lat?: number; lng?: number } } | undefined;\n if (address?.geocode && typeof address.geocode.lat === 'number' && typeof address.geocode.lng === 'number') {\n return { lat: address.geocode.lat, lng: address.geocode.lng };\n }\n return null;\n },\n ];\n \n for (const extractor of extractors) {\n const result = extractor();\n if (result && isValidCoordinate(result.lat, result.lng)) {\n return result;\n }\n }\n \n return null;\n }\n \n /**\n * Convert data array to markers\n */\n function markersFromData<T extends Record<string, unknown>>(\n data: T[],\n extractor?: CoordinateExtractor<T>,\n idField: keyof T = 'id' as keyof T\n ): MapMarker<T>[] {\n const extract = extractor || extractCoordinates;\n \n return data\n .map((item, index) => {\n const position = extract(item);\n if (!position) return null;\n \n const id = item[idField] as string | number || `marker_${index}`;\n const title = (item.name as string) || (item.title as string) || (item.displayName as string) || '';\n \n return {\n id,\n position,\n title,\n data: item,\n } as MapMarker<T>;\n })\n .filter((marker): marker is MapMarker<T> => marker !== null);\n }\n \n // Watch for theme changes in auto mode\n if (config.autoTheme) {\n watch(isDark, () => {\n if (mapRef.value) {\n const styles = getThemeForMode(isDark.value, config.lightTheme, config.darkTheme);\n mapRef.value.setOptions({ styles });\n }\n });\n }\n \n return {\n // Loading state\n isApiLoading,\n isApiReady,\n apiError,\n apiPromise,\n loadingState,\n \n // Theme\n currentTheme,\n mapStyles,\n setTheme,\n \n // Map reference\n mapRef,\n setMap,\n \n // Position\n center,\n zoom,\n bounds,\n \n // Markers\n markers,\n visibleMarkers,\n addMarker,\n removeMarker,\n updateMarker,\n clearMarkers,\n setMarkers,\n \n // Clustering\n clusters,\n shouldShowClusters,\n processMarkers,\n getClusterColor,\n \n // Utilities\n initializeApi,\n panTo,\n setZoom,\n fitBounds,\n fitToMarkers,\n \n // Coordinate extraction\n extractCoordinates,\n markersFromData,\n };\n}\n\n// Re-export isValidCoordinate for convenience\nexport { isValidCoordinate } from '../types/maps';\n\nexport default useMap;\n\n"],"names":["defaultCoordinateExtractor","data","geoloc","latLng","location","coords","address","isValidCoordinate","lat","lng","threshold","US_CENTER","WORLD_CENTER","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","getDefaultExportFromCjs","x","fastDeepEqual","hasRequiredFastDeepEqual","requireFastDeepEqual","equal","a","b","length","i","keys","key","fastDeepEqualExports","isEqual","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","language","libraries","mapIds","nonce","region","retries","url","version","script","err","name","fn","_a","_b","params","g","h","k","p","c","l","q","m","d","r","u","f","n","t","libraryPromises","library","error","event","delay","cb","globalLoader","globalApiPromise","useMap","options","pluginConfig","inject","isDark","useTheme","config","isApiLoading","ref","isApiReady","apiError","apiPromise","mapRef","currentTheme","center","zoom","bounds","markers","clusters","loadingState","computed","mapStyles","getThemeForMode","getMapStyles","visibleMarkers","marker","shouldShowClusters","initializeApi","message","setMap","map","mapCenter","mapZoom","updateBounds","mapBounds","ne","sw","setTheme","theme","styles","panTo","position","setZoom","level","fitBounds","newBounds","padding","googleBounds","fitToMarkers","addMarker","removeMarker","updateMarker","updates","clearMarkers","setMarkers","newMarkers","processMarkers","currentZoom","currentBounds","gridSize","clusterMap","gridX","gridY","newClusters","clusterMarkers","sumLat","sum","sumLng","extractCoordinates","extractors","extractor","markersFromData","idField","extract","item","index","title","watch","getClusterColor"],"mappings":"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","x_google_ignoreList":[1]}
@@ -0,0 +1,103 @@
1
+ import { useSlots as k, ref as $, watch as j, computed as u } from "vue";
2
+ function E(t) {
3
+ const o = {
4
+ primary: {
5
+ ringColor: "sl-ring-stachelock-600",
6
+ bgColor: "sl-bg-stachelock-50",
7
+ textColor: "sl-text-stachelock-600"
8
+ },
9
+ warning: {
10
+ ringColor: "sl-ring-yellow-300",
11
+ bgColor: "sl-bg-yellow-100",
12
+ textColor: "sl-text-yellow-800"
13
+ },
14
+ success: {
15
+ ringColor: "sl-ring-green-300",
16
+ bgColor: "sl-bg-green-100",
17
+ textColor: "sl-text-green-800"
18
+ },
19
+ danger: {
20
+ ringColor: "sl-ring-red-300",
21
+ bgColor: "sl-bg-red-100",
22
+ textColor: "sl-text-red-800"
23
+ }
24
+ };
25
+ return o[t] || o.primary;
26
+ }
27
+ function f(t) {
28
+ return {
29
+ name: t.name,
30
+ current: t.current,
31
+ href: t.href,
32
+ count: t.count,
33
+ disabled: t.disabled
34
+ };
35
+ }
36
+ function B(t) {
37
+ const {
38
+ getTabs: o,
39
+ onTabChange: v,
40
+ includeCountInName: b = !1,
41
+ badgeTheme: h = "primary"
42
+ } = t, C = k(), T = `tabs-${Math.random().toString(36).substr(2, 9)}`, p = o(), n = $(p.map(f));
43
+ n.value.length > 0 && !n.value.some((e) => e.current) && (n.value[0].current = !0);
44
+ let c = n.value.map((e) => e.name).join("|");
45
+ function i() {
46
+ const e = o(), r = e.map((l) => l.name).join("|");
47
+ if (r !== c) {
48
+ const l = n.value.findIndex((s) => s.current);
49
+ n.value = e.map(f), l >= 0 && l < n.value.length ? n.value.forEach((s, S) => {
50
+ s.current = S === l;
51
+ }) : n.value.length > 0 && (n.value[0].current = !0), c = r;
52
+ }
53
+ }
54
+ j(
55
+ () => o().length,
56
+ () => i()
57
+ );
58
+ const a = u(() => {
59
+ const e = n.value.findIndex((r) => r.current);
60
+ return e >= 0 ? e : 0;
61
+ }), x = u(() => n.value[a.value]), g = u(
62
+ () => n.value.map((e, r) => ({
63
+ index: r,
64
+ name: b && d(e) ? `${e.name} (${e.count})` : e.name,
65
+ count: e.count,
66
+ disabled: e.disabled
67
+ }))
68
+ ), I = u(
69
+ () => g.value[a.value] || null
70
+ ), w = u(
71
+ () => E(h)
72
+ );
73
+ function d(e) {
74
+ return e.count !== void 0 && e.count !== null;
75
+ }
76
+ function m(e) {
77
+ e < 0 || e >= n.value.length || n.value[e].disabled || n.value[e].current || (n.value.forEach((r, l) => {
78
+ r.current = l === e;
79
+ }), v?.(e));
80
+ }
81
+ function y(e) {
82
+ e && m(e.index);
83
+ }
84
+ return {
85
+ localTabs: n,
86
+ currentTabIndex: a,
87
+ currentTab: x,
88
+ selectInputItems: g,
89
+ selectedTabItem: I,
90
+ setActiveTab: m,
91
+ handleSelectInputChange: y,
92
+ badgeClasses: w,
93
+ hasCount: d,
94
+ slots: C,
95
+ selectId: T,
96
+ syncTabs: i
97
+ };
98
+ }
99
+ export {
100
+ E as g,
101
+ B as u
102
+ };
103
+ //# sourceMappingURL=useSimpleTabs-CSgkChEU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSimpleTabs-CSgkChEU.js","sources":["../src/types/tabs.ts","../src/composables/useSimpleTabs.ts"],"sourcesContent":["/**\n * Shared tab types for @stachelock-ui tab components\n * \n * Two patterns are supported:\n * 1. Simple/Slot-based tabs (InlineTabs, TabsInPills) - use SimpleTabItem\n * 2. Component-based tabs (TabGroup, TabGroupUnderline) - use TabsItemType from layouts.ts\n */\n\n// Component type is re-exported from layouts, not used directly here\n\n// ============================================\n// Simple/Slot-based Tab Types\n// ============================================\n\n/**\n * Simple tab item for slot-based tab components\n * Used by InlineTabs and TabsInPills\n */\nexport interface SimpleTabItem {\n /** Display name of the tab (also used as slot name) */\n name: string;\n /** Whether this tab is currently active */\n current: boolean;\n /** Optional href for anchor tags */\n href?: string;\n /** Optional count badge to display */\n count?: number | null;\n /** Optional disabled state */\n disabled?: boolean;\n}\n\n/**\n * Item format for SelectInput dropdown (mobile view)\n */\nexport interface TabSelectInputItem {\n /** Index of the tab in the array */\n index: number;\n /** Display name */\n name: string;\n /** Optional count */\n count?: number | null;\n /** Optional disabled state */\n disabled?: boolean;\n}\n\n// ============================================\n// Badge/Count Theme Types\n// ============================================\n\n/**\n * Theme options for tab count badges\n */\nexport type TabBadgeTheme = 'primary' | 'warning' | 'success' | 'danger';\n\n/**\n * CSS classes for badge theming\n */\nexport interface TabBadgeClasses {\n /** Ring color class (e.g., 'sl-ring-stachelock-600') */\n ringColor: string;\n /** Background color class (e.g., 'sl-bg-stachelock-50') */\n bgColor: string;\n /** Text color class (e.g., 'sl-text-stachelock-600') */\n textColor?: string;\n}\n\n/**\n * Get theme classes for count badges\n */\nexport function getTabBadgeClasses(theme: TabBadgeTheme): TabBadgeClasses {\n const themes: Record<TabBadgeTheme, TabBadgeClasses> = {\n primary: {\n ringColor: 'sl-ring-stachelock-600',\n bgColor: 'sl-bg-stachelock-50',\n textColor: 'sl-text-stachelock-600',\n },\n warning: {\n ringColor: 'sl-ring-yellow-300',\n bgColor: 'sl-bg-yellow-100',\n textColor: 'sl-text-yellow-800',\n },\n success: {\n ringColor: 'sl-ring-green-300',\n bgColor: 'sl-bg-green-100',\n textColor: 'sl-text-green-800',\n },\n danger: {\n ringColor: 'sl-ring-red-300',\n bgColor: 'sl-bg-red-100',\n textColor: 'sl-text-red-800',\n },\n };\n return themes[theme] || themes.primary;\n}\n\n// ============================================\n// Utility Types\n// ============================================\n\n/**\n * Common props shared across simple tab components\n */\nexport interface SimpleTabsCommonProps {\n /** Array of tab items */\n tabs: SimpleTabItem[];\n /** Show dropdown on mobile (default: true) */\n dropdownOnMobile?: boolean;\n /** Badge theme for count badges */\n badgeTheme?: TabBadgeTheme;\n}\n\n/**\n * Emit types for simple tab components\n */\nexport interface SimpleTabsEmits {\n /** Emitted when active tab changes */\n 'tab-changed': [tabIndex: number];\n}\n\n// ============================================\n// Re-export Component-based types from layouts\n// ============================================\n\n// These are re-exported for convenience but defined in layouts.ts\n// to maintain backward compatibility\nexport type { TabsItemType, TabItemForDropdown } from './layouts';\n\n","/**\n * useSimpleTabs Composable\n * \n * A lightweight composable for simple slot-based tab components.\n * Used by InlineTabs and TabsInPills for shared tab management logic.\n * \n * Features:\n * - Local reactive tab state management\n * - Mobile dropdown item generation\n * - Tab selection and navigation\n * - External tab sync via getter function\n * \n * @example\n * ```ts\n * const { localTabs, currentTabIndex, setActiveTab, selectInputItems } = useSimpleTabs({\n * getTabs: () => props.tabs,\n * emit: (index) => emit('tab-changed', index),\n * includeCountInName: true\n * });\n * ```\n */\n\nimport { ref, computed, watch, useSlots, type Ref } from 'vue';\nimport type { SimpleTabItem, TabSelectInputItem, TabBadgeTheme, TabBadgeClasses } from '../types/tabs';\nimport { getTabBadgeClasses } from '../types/tabs';\n\nexport interface UseSimpleTabsOptions {\n /** Getter function that returns the tabs array (use () => props.tabs) */\n getTabs: () => SimpleTabItem[];\n /** Callback when tab changes */\n onTabChange?: (index: number) => void;\n /** Include count in dropdown display name */\n includeCountInName?: boolean;\n /** Badge theme for count styling */\n badgeTheme?: TabBadgeTheme;\n}\n\nexport interface UseSimpleTabsReturn {\n /** Local reactive copy of tabs */\n localTabs: Ref<SimpleTabItem[]>;\n /** Current active tab index */\n currentTabIndex: Ref<number>;\n /** Currently active tab object */\n currentTab: Ref<SimpleTabItem | undefined>;\n /** Items formatted for SelectInput dropdown */\n selectInputItems: Ref<TabSelectInputItem[]>;\n /** Currently selected item for SelectInput */\n selectedTabItem: Ref<TabSelectInputItem | null>;\n /** Set active tab by index */\n setActiveTab: (index: number) => void;\n /** Handle SelectInput change */\n handleSelectInputChange: (item: TabSelectInputItem | null) => void;\n /** Badge theme classes */\n badgeClasses: Ref<TabBadgeClasses>;\n /** Check if a tab has a count badge */\n hasCount: (tab: SimpleTabItem) => boolean;\n /** Vue slots reference */\n slots: ReturnType<typeof useSlots>;\n /** Generate unique ID for select elements */\n selectId: string;\n /** Manually sync tabs from props (call when tabs structure changes) */\n syncTabs: () => void;\n}\n\n/**\n * Deep clone a tab item to break reactivity\n */\nfunction cloneTab(tab: SimpleTabItem): SimpleTabItem {\n return {\n name: tab.name,\n current: tab.current,\n href: tab.href,\n count: tab.count,\n disabled: tab.disabled\n };\n}\n\n/**\n * Composable for managing simple slot-based tabs\n */\nexport function useSimpleTabs(options: UseSimpleTabsOptions): UseSimpleTabsReturn {\n const { \n getTabs, \n onTabChange, \n includeCountInName = false,\n badgeTheme = 'primary'\n } = options;\n\n const slots = useSlots();\n\n // Generate unique ID for select elements\n const selectId = `tabs-${Math.random().toString(36).substr(2, 9)}`;\n\n // Create a local reactive copy of tabs (fully cloned to break reactivity)\n const initialTabs = getTabs();\n const localTabs = ref<SimpleTabItem[]>(initialTabs.map(cloneTab));\n\n // Initialize first tab if none is current\n if (localTabs.value.length > 0 && !localTabs.value.some(t => t.current)) {\n localTabs.value[0].current = true;\n }\n\n // Track the last known tab names for structural change detection\n let lastTabSignature = localTabs.value.map(t => t.name).join('|');\n\n /**\n * Sync tabs from props - only syncs structural changes\n * (tab additions/removals/name changes), preserves current selection\n */\n function syncTabs(): void {\n const newTabs = getTabs();\n const newSignature = newTabs.map(t => t.name).join('|');\n \n // Only sync if structure actually changed\n if (newSignature !== lastTabSignature) {\n const currentIndex = localTabs.value.findIndex(t => t.current);\n localTabs.value = newTabs.map(cloneTab);\n \n // Try to preserve selection, or reset to first tab\n if (currentIndex >= 0 && currentIndex < localTabs.value.length) {\n localTabs.value.forEach((tab, idx) => {\n tab.current = idx === currentIndex;\n });\n } else if (localTabs.value.length > 0) {\n localTabs.value[0].current = true;\n }\n \n lastTabSignature = newSignature;\n }\n }\n\n // Watch for structural changes in tabs (length changes only - very shallow)\n watch(\n () => getTabs().length,\n () => syncTabs()\n );\n\n // Computed: current tab index\n const currentTabIndex = computed<number>(() => {\n const index = localTabs.value.findIndex(t => t.current);\n return index >= 0 ? index : 0;\n });\n\n // Computed: current tab object\n const currentTab = computed<SimpleTabItem | undefined>(() => {\n return localTabs.value[currentTabIndex.value];\n });\n\n // Computed: items for SelectInput dropdown\n const selectInputItems = computed<TabSelectInputItem[]>(() =>\n localTabs.value.map((tab, index) => ({\n index,\n name: includeCountInName && hasCount(tab)\n ? `${tab.name} (${tab.count})`\n : tab.name,\n count: tab.count,\n disabled: tab.disabled\n }))\n );\n\n // Computed: currently selected item for SelectInput\n const selectedTabItem = computed<TabSelectInputItem | null>(() =>\n selectInputItems.value[currentTabIndex.value] || null\n );\n\n // Computed: badge theme classes\n const badgeClasses = computed<TabBadgeClasses>(() => \n getTabBadgeClasses(badgeTheme)\n );\n\n /**\n * Check if a tab has a count badge to display\n */\n function hasCount(tab: SimpleTabItem): boolean {\n return tab.count !== undefined && tab.count !== null;\n }\n\n /**\n * Set the active tab by index\n */\n function setActiveTab(index: number): void {\n if (index < 0 || index >= localTabs.value.length) return;\n if (localTabs.value[index].disabled) return;\n\n // Only update if actually changing\n if (localTabs.value[index].current) return;\n\n // Update the 'current' property of all tabs\n localTabs.value.forEach((tab, idx) => {\n tab.current = idx === index;\n });\n\n onTabChange?.(index);\n }\n\n /**\n * Handler for SelectInput changes\n */\n function handleSelectInputChange(item: TabSelectInputItem | null): void {\n if (!item) return;\n setActiveTab(item.index);\n }\n\n return {\n localTabs,\n currentTabIndex,\n currentTab,\n selectInputItems,\n selectedTabItem,\n setActiveTab,\n handleSelectInputChange,\n badgeClasses,\n hasCount,\n slots,\n selectId,\n syncTabs\n };\n}\n\nexport default useSimpleTabs;\n"],"names":["getTabBadgeClasses","theme","themes","cloneTab","tab","useSimpleTabs","options","getTabs","onTabChange","includeCountInName","badgeTheme","slots","useSlots","selectId","initialTabs","localTabs","ref","t","lastTabSignature","syncTabs","newTabs","newSignature","currentIndex","idx","watch","currentTabIndex","computed","index","currentTab","selectInputItems","hasCount","selectedTabItem","badgeClasses","setActiveTab","handleSelectInputChange","item"],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { computed as C, unref as $ } from "vue";
2
+ const A = {
3
+ // UUID v4: 8-4-4-4-12 hex chars
4
+ uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
5
+ // Short UUID (without dashes): 32 hex chars
6
+ shortUuid: /^[0-9a-f]{32}$/i,
7
+ // Firebase-style ID: 20+ alphanumeric chars
8
+ firebaseId: /^[a-zA-Z0-9]{20,}$/,
9
+ // MongoDB ObjectId: 24 hex chars
10
+ mongoId: /^[0-9a-f]{24}$/i,
11
+ // Generic hex hash: 8+ hex chars that aren't words
12
+ hexHash: /^[0-9a-f]{8,}$/i,
13
+ // Nanoid-style: 21 alphanumeric chars with _ and -
14
+ nanoid: /^[a-zA-Z0-9_-]{21}$/
15
+ };
16
+ function f(e) {
17
+ if (!e || e.length < 8) return !1;
18
+ for (const t of Object.values(A))
19
+ if (t.test(e)) return !0;
20
+ return !!(e.length >= 16 && (e.match(/[aeiou]/gi) || []).length / e.length < 0.15 && /^[a-z0-9-_]+$/i.test(e));
21
+ }
22
+ function m(e) {
23
+ return e ? e.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[-_]+/g, " ").split(/\s+/).filter(Boolean).map((n) => n.charAt(0).toUpperCase() + n.slice(1).toLowerCase()).join(" ") : "";
24
+ }
25
+ function d(e) {
26
+ if (!e) return "";
27
+ const t = e.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[-_]+/g, " ").toLowerCase().trim();
28
+ return t.charAt(0).toUpperCase() + t.slice(1);
29
+ }
30
+ function T(e, t = "title") {
31
+ if (!e) return "";
32
+ const n = e.replace(/[-_]+/g, " ").trim();
33
+ return t === "title" ? m(n) : d(n);
34
+ }
35
+ function w(e, t, n = "...") {
36
+ return !e || e.length <= t ? { result: e, truncated: !1 } : {
37
+ result: e.slice(0, t - n.length) + n,
38
+ truncated: !0
39
+ };
40
+ }
41
+ function U(e, t = "short", n = 4, l) {
42
+ if (!e) return "";
43
+ switch (t) {
44
+ case "short":
45
+ return e.length > n * 2 ? e.slice(0, n) + "..." : e;
46
+ case "ellipsis":
47
+ return e.length > n * 2 + 3 ? `${e.slice(0, n)}...${e.slice(-n)}` : e;
48
+ case "hidden":
49
+ return "•••";
50
+ case "custom":
51
+ return l ? l(e) : e;
52
+ default:
53
+ return e;
54
+ }
55
+ }
56
+ function u(e, t = {}) {
57
+ const {
58
+ maxLength: n = 20,
59
+ detectUids: l = !0,
60
+ caseTransform: p = "title",
61
+ uidFormat: o = "short",
62
+ uidChars: s = 4,
63
+ uidFormatter: a
64
+ } = t, i = e;
65
+ let r = e, c = !1;
66
+ const g = l && f(e);
67
+ if (g)
68
+ r = U(e, o, s, a), c = r !== e;
69
+ else {
70
+ switch (p) {
71
+ case "title":
72
+ r = m(e);
73
+ break;
74
+ case "sentence":
75
+ r = d(e);
76
+ break;
77
+ case "upper":
78
+ r = e.toUpperCase();
79
+ break;
80
+ case "lower":
81
+ r = e.toLowerCase();
82
+ break;
83
+ case "none":
84
+ default:
85
+ r = e;
86
+ }
87
+ if (r.length > n) {
88
+ const h = w(r, n);
89
+ r = h.result, c = h.truncated;
90
+ }
91
+ }
92
+ return {
93
+ display: r,
94
+ original: i,
95
+ truncated: c,
96
+ isUid: g,
97
+ loading: !1
98
+ };
99
+ }
100
+ function k(e = {}) {
101
+ const t = (o, s = {}) => {
102
+ const a = $(o);
103
+ return u(a, { ...e, ...s });
104
+ };
105
+ return {
106
+ transform: t,
107
+ transformAsync: async (o, s = {}) => {
108
+ const a = $(o), i = { ...e, ...s };
109
+ if (f(a) && i.lookupFn)
110
+ try {
111
+ const c = await i.lookupFn(a);
112
+ if (c)
113
+ return u(c, { ...i, detectUids: !1 });
114
+ } catch (c) {
115
+ console.warn(`[useStringTransform] Lookup failed for "${a}":`, c);
116
+ }
117
+ return u(a, i);
118
+ },
119
+ computedTransform: (o, s = {}) => C(() => t(o, s)),
120
+ transformBatch: (o, s = {}) => o.map((a) => t(a, s)),
121
+ // Export utility functions
122
+ isUidLike: f,
123
+ toTitleCase: m,
124
+ toSentenceCase: d,
125
+ slugToReadable: T,
126
+ truncateString: w,
127
+ formatUid: U
128
+ };
129
+ }
130
+ export {
131
+ d as a,
132
+ w as b,
133
+ u as c,
134
+ U as f,
135
+ f as i,
136
+ T as s,
137
+ m as t,
138
+ k as u
139
+ };
140
+ //# sourceMappingURL=useStringTransform-CSr7nZWg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStringTransform-CSr7nZWg.js","sources":["../src/composables/useStringTransform.ts"],"sourcesContent":["/**\n * @module useStringTransform\n * @description Composable for string transformations commonly used in UI components.\n * Provides utilities for truncating, formatting, and transforming strings including\n * special handling for UIDs, slugs, and other programmatic identifiers.\n */\n\nimport { computed, type ComputedRef, type MaybeRef, unref } from 'vue';\n\n/**\n * Configuration options for string transformations\n */\nexport interface StringTransformOptions {\n /** Maximum character length before truncation (default: 20) */\n maxLength?: number;\n /** Whether to detect and format UIDs differently (default: true) */\n detectUids?: boolean;\n /** Case transformation to apply: 'title', 'sentence', 'upper', 'lower', 'none' (default: 'title') */\n caseTransform?: 'title' | 'sentence' | 'upper' | 'lower' | 'none';\n /** Separator to use when splitting words (default: auto-detect) */\n wordSeparator?: string;\n /** Custom UID display format: 'short', 'ellipsis', 'hidden', 'custom' (default: 'short') */\n uidFormat?: 'short' | 'ellipsis' | 'hidden' | 'custom';\n /** Number of characters to show at start/end of UID (default: 4) */\n uidChars?: number;\n /** Custom formatter function for UIDs */\n uidFormatter?: (uid: string) => string;\n /** External lookup function to resolve IDs to display names */\n lookupFn?: (id: string) => Promise<string | null> | string | null;\n /** Placeholder while lookup is in progress */\n lookupPlaceholder?: string;\n}\n\n/**\n * Result of string transformation\n */\nexport interface TransformResult {\n /** The transformed display string */\n display: string;\n /** The original string */\n original: string;\n /** Whether the string was truncated */\n truncated: boolean;\n /** Whether the string was detected as a UID */\n isUid: boolean;\n /** Whether the string is currently being looked up */\n loading: boolean;\n}\n\n// Common UID patterns\nconst UID_PATTERNS = {\n // UUID v4: 8-4-4-4-12 hex chars\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n // Short UUID (without dashes): 32 hex chars\n shortUuid: /^[0-9a-f]{32}$/i,\n // Firebase-style ID: 20+ alphanumeric chars\n firebaseId: /^[a-zA-Z0-9]{20,}$/,\n // MongoDB ObjectId: 24 hex chars\n mongoId: /^[0-9a-f]{24}$/i,\n // Generic hex hash: 8+ hex chars that aren't words\n hexHash: /^[0-9a-f]{8,}$/i,\n // Nanoid-style: 21 alphanumeric chars with _ and -\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n};\n\n/**\n * Detect if a string looks like a programmatic UID/ID\n */\nexport function isUidLike(str: string): boolean {\n if (!str || str.length < 8) return false;\n \n // Check against known patterns\n for (const pattern of Object.values(UID_PATTERNS)) {\n if (pattern.test(str)) return true;\n }\n \n // Heuristic: mostly hex with few vowels, long-ish string\n if (str.length >= 16) {\n const vowelCount = (str.match(/[aeiou]/gi) || []).length;\n const vowelRatio = vowelCount / str.length;\n // UIDs typically have low vowel ratios (< 20%) unless they happen to spell words\n if (vowelRatio < 0.15 && /^[a-z0-9-_]+$/i.test(str)) {\n return true;\n }\n }\n \n return false;\n}\n\n/**\n * Convert string to Title Case\n * \"hello-world\" -> \"Hello World\"\n * \"helloWorld\" -> \"Hello World\"\n */\nexport function toTitleCase(str: string): string {\n if (!str) return '';\n \n // Split on common separators and camelCase boundaries\n const words = str\n // Insert space before uppercase letters in camelCase\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Replace common separators with spaces\n .replace(/[-_]+/g, ' ')\n // Split into words\n .split(/\\s+/)\n .filter(Boolean);\n \n return words\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n\n/**\n * Convert string to Sentence case\n * \"hello-world\" -> \"Hello world\"\n */\nexport function toSentenceCase(str: string): string {\n if (!str) return '';\n \n const normalized = str\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[-_]+/g, ' ')\n .toLowerCase()\n .trim();\n \n return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n}\n\n/**\n * Convert kebab-case or snake_case to readable format\n * \"user-management\" -> \"User Management\"\n * \"user_settings\" -> \"User Settings\"\n */\nexport function slugToReadable(str: string, caseType: 'title' | 'sentence' = 'title'): string {\n if (!str) return '';\n \n const normalized = str.replace(/[-_]+/g, ' ').trim();\n return caseType === 'title' ? toTitleCase(normalized) : toSentenceCase(normalized);\n}\n\n/**\n * Truncate string with ellipsis\n */\nexport function truncateString(str: string, maxLength: number, ellipsis = '...'): { result: string; truncated: boolean } {\n if (!str || str.length <= maxLength) {\n return { result: str, truncated: false };\n }\n \n return {\n result: str.slice(0, maxLength - ellipsis.length) + ellipsis,\n truncated: true,\n };\n}\n\n/**\n * Format a UID for display\n */\nexport function formatUid(uid: string, format: 'short' | 'ellipsis' | 'hidden' | 'custom' = 'short', chars = 4, customFormatter?: (uid: string) => string): string {\n if (!uid) return '';\n \n switch (format) {\n case 'short':\n // Show first N chars\n return uid.length > chars * 2 ? uid.slice(0, chars) + '...' : uid;\n case 'ellipsis':\n // Show first N and last N chars\n return uid.length > chars * 2 + 3 \n ? `${uid.slice(0, chars)}...${uid.slice(-chars)}`\n : uid;\n case 'hidden':\n return '•••';\n case 'custom':\n return customFormatter ? customFormatter(uid) : uid;\n default:\n return uid;\n }\n}\n\n/**\n * Transform a string for display\n */\nexport function transformString(str: string, options: StringTransformOptions = {}): TransformResult {\n const {\n maxLength = 20,\n detectUids = true,\n caseTransform = 'title',\n uidFormat = 'short',\n uidChars = 4,\n uidFormatter,\n } = options;\n\n const original = str;\n let display = str;\n let truncated = false;\n const isUid = detectUids && isUidLike(str);\n\n // Handle UIDs differently\n if (isUid) {\n display = formatUid(str, uidFormat, uidChars, uidFormatter);\n truncated = display !== str;\n } else {\n // Apply case transformation first\n switch (caseTransform) {\n case 'title':\n display = toTitleCase(str);\n break;\n case 'sentence':\n display = toSentenceCase(str);\n break;\n case 'upper':\n display = str.toUpperCase();\n break;\n case 'lower':\n display = str.toLowerCase();\n break;\n case 'none':\n default:\n display = str;\n }\n\n // Then truncate if needed\n if (display.length > maxLength) {\n const truncResult = truncateString(display, maxLength);\n display = truncResult.result;\n truncated = truncResult.truncated;\n }\n }\n\n return {\n display,\n original,\n truncated,\n isUid,\n loading: false,\n };\n}\n\n/**\n * Composable for reactive string transformations\n * \n * @example\n * ```ts\n * const { transform, transformAsync } = useStringTransform({\n * maxLength: 15,\n * caseTransform: 'title',\n * uidFormat: 'ellipsis'\n * });\n * \n * const result = transform('user-management'); // \"User Management\"\n * const uidResult = transform('550e8400-e29b-41d4-a716-446655440000'); // \"550e...0000\"\n * ```\n */\nexport function useStringTransform(defaultOptions: StringTransformOptions = {}) {\n /**\n * Transform a string synchronously\n */\n const transform = (str: MaybeRef<string>, options: StringTransformOptions = {}): TransformResult => {\n const value = unref(str);\n return transformString(value, { ...defaultOptions, ...options });\n };\n\n /**\n * Transform a string with optional async lookup\n */\n const transformAsync = async (\n str: MaybeRef<string>,\n options: StringTransformOptions & { lookupFn?: (id: string) => Promise<string | null> | string | null } = {}\n ): Promise<TransformResult> => {\n const value = unref(str);\n const mergedOptions = { ...defaultOptions, ...options };\n const isUid = isUidLike(value);\n\n // If it's a UID and we have a lookup function, try to resolve it\n if (isUid && mergedOptions.lookupFn) {\n try {\n const resolved = await mergedOptions.lookupFn(value);\n if (resolved) {\n // Return the resolved name with case transformation\n return transformString(resolved, { ...mergedOptions, detectUids: false });\n }\n } catch (e) {\n // Lookup failed, fall back to default transform\n console.warn(`[useStringTransform] Lookup failed for \"${value}\":`, e);\n }\n }\n\n return transformString(value, mergedOptions);\n };\n\n /**\n * Create a computed transformed string\n */\n const computedTransform = (\n str: MaybeRef<string>,\n options: StringTransformOptions = {}\n ): ComputedRef<TransformResult> => {\n return computed(() => transform(str, options));\n };\n\n /**\n * Batch transform multiple strings\n */\n const transformBatch = (\n strings: MaybeRef<string>[],\n options: StringTransformOptions = {}\n ): TransformResult[] => {\n return strings.map(s => transform(s, options));\n };\n\n return {\n transform,\n transformAsync,\n computedTransform,\n transformBatch,\n // Export utility functions\n isUidLike,\n toTitleCase,\n toSentenceCase,\n slugToReadable,\n truncateString,\n formatUid,\n };\n}\n\n// Default export for convenience\nexport default useStringTransform;\n\n"],"names":["UID_PATTERNS","isUidLike","str","pattern","toTitleCase","word","toSentenceCase","normalized","slugToReadable","caseType","truncateString","maxLength","ellipsis","formatUid","uid","format","chars","customFormatter","transformString","options","detectUids","caseTransform","uidFormat","uidChars","uidFormatter","original","display","truncated","isUid","truncResult","useStringTransform","defaultOptions","transform","value","unref","mergedOptions","resolved","e","computed","strings","s"],"mappings":"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"}