@stachelock/ui 0.5.5 → 0.6.2

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 (481) hide show
  1. package/README.md +118 -5
  2. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-6taLcPq0.js +77 -0
  3. package/dist/{AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js → AlertModal.vue_vue_type_script_setup_true_lang-DzhVQdx4.js} +45 -65
  4. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js +0 -1
  5. package/dist/BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js +0 -1
  6. package/dist/{BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js → BaseModal.vue_vue_type_script_setup_true_lang--iGzFCnC.js} +42 -44
  7. package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js → CalendarHeader.vue_vue_type_script_setup_true_lang-hGa2MLyo.js} +114 -141
  8. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js +0 -1
  9. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js +0 -1
  10. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-BigvbBAU.js +331 -0
  11. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js +0 -1
  12. package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js → DashboardLayout.vue_vue_type_script_setup_true_lang-BAx4gKqh.js} +44 -47
  13. package/dist/{DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js → DatepickerInput.vue_vue_type_style_index_0_lang-DbI3619T.js} +23 -24
  14. package/dist/{DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js → DayCalendar.vue_vue_type_script_setup_true_lang-D-4jcUvI.js} +1 -2
  15. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js +0 -1
  16. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-CgHPOC-w.js +35 -0
  17. package/dist/{DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js → DynamicForm.vue_vue_type_script_setup_true_lang-BR8Pq7Kw.js} +52 -53
  18. package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js → DynamicFormField.vue_vue_type_script_setup_true_lang-BCVmqg_n.js} +7 -8
  19. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js +0 -1
  20. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js +0 -1
  21. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js +0 -1
  22. package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +74 -0
  23. package/dist/EventsList.vue_vue_type_script_setup_true_lang-BTIoGr_e.js +87 -0
  24. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-BJR-_ngq.js +176 -0
  25. package/dist/{FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js → FormErrorWrapper.vue_vue_type_script_setup_true_lang-D7ZAgfPs.js} +12 -13
  26. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js +0 -1
  27. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js +0 -1
  28. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js +0 -1
  29. package/dist/{InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js → InlineTabs.vue_vue_type_script_setup_true_lang-B5w4yzcZ.js} +1 -2
  30. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js +0 -1
  31. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js → LottieAnimation.vue_vue_type_script_setup_true_lang-C0R4ADBb.js} +1 -2
  32. package/dist/{MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js → MonthCalendar.vue_vue_type_style_index_0_lang-lnKkvJ9u.js} +1 -2
  33. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js +0 -1
  34. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js +0 -1
  35. package/dist/{NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js → NotificationContainer.vue_vue_type_style_index_0_lang-CvJRwezr.js} +1 -2
  36. package/dist/{NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js → NotificationToast.vue_vue_type_script_setup_true_lang-BBWpW4km.js} +61 -64
  37. package/dist/PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js +0 -1
  38. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-CKCoHD1o.js +0 -1
  39. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js +0 -1
  40. package/dist/{SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js → SelectInput.vue_vue_type_script_setup_true_lang-D4GNv0MY.js} +56 -58
  41. package/dist/{SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js → SelectTextInput.vue_vue_type_script_setup_true_lang-BVaViHPl.js} +66 -69
  42. package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js → SidebarLayout.vue_vue_type_script_setup_true_lang-CZ21EVcZ.js} +36 -39
  43. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js +0 -1
  44. package/dist/StatCard.vue_vue_type_script_setup_true_lang-B5SuaSXL.js +66 -0
  45. package/dist/{StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js → StepperPanels.vue_vue_type_script_setup_true_lang-DPLQ9mQn.js} +34 -49
  46. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-D5Es9AjF.js +200 -0
  47. package/dist/{SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js → SwitchInputGroup.vue_vue_type_script_setup_true_lang-DigNYqVZ.js} +1 -2
  48. package/dist/{TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js → TabGroup.vue_vue_type_script_setup_true_lang-BsbiEA4E.js} +19 -20
  49. package/dist/{TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js → TabGroupUnderline.vue_vue_type_script_setup_true_lang-CPcp1-Za.js} +21 -22
  50. package/dist/{TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js → TabsInPills.vue_vue_type_script_setup_true_lang-U5CdRL7s.js} +1 -2
  51. package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js → TagifyInput.vue_vue_type_script_setup_true_lang-BF2mK8JC.js} +14 -15
  52. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js +0 -1
  53. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js +0 -1
  54. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js +0 -1
  55. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js +0 -1
  56. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js +0 -1
  57. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js +0 -1
  58. package/dist/{UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js → UiMapAll.vue_vue_type_script_setup_true_lang-11yT7mTH.js} +93 -111
  59. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-gnoIJm6x.js +127 -0
  60. package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js → UiModal.vue_vue_type_script_setup_true_lang-BZC7aN7K.js} +41 -43
  61. package/dist/{UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js → UiNavLink.vue_vue_type_script_setup_true_lang-C5Gicm8o.js} +4 -5
  62. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js +0 -1
  63. package/dist/UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js +0 -1
  64. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js +0 -1
  65. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js +0 -1
  66. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -1
  67. package/dist/calendar-DLry-Vik.js +147 -0
  68. package/dist/calendars/CalendarDashboard.js +3 -4
  69. package/dist/calendars/CalendarHeader.js +1 -2
  70. package/dist/calendars/DayCalendar.js +1 -2
  71. package/dist/calendars/EventCard.js +1 -2
  72. package/dist/calendars/EventsList.js +1 -2
  73. package/dist/calendars/MonthCalendar.js +1 -2
  74. package/dist/calendars/WeekCalendar.js +1 -2
  75. package/dist/calendars/YearCalendar.js +0 -1
  76. package/dist/charts/BarChart.js +0 -1
  77. package/dist/charts/BaseChart.js +42 -59
  78. package/dist/charts/FunnelChart.js +0 -1
  79. package/dist/charts/LineChart.js +0 -1
  80. package/dist/charts/PieChart.js +0 -1
  81. package/dist/charts/SparklineChart.js +0 -1
  82. package/dist/charts/StatCard.js +1 -2
  83. package/dist/charts/chartTheme.js +0 -1
  84. package/dist/charts/index.js +1 -2
  85. package/dist/components/Avatar.js +0 -1
  86. package/dist/components/Badge.js +0 -1
  87. package/dist/components/Banner.js +178 -351
  88. package/dist/components/Breadcrumb.js +41 -42
  89. package/dist/components/Button.js +0 -1
  90. package/dist/components/ButtonGroup.js +0 -1
  91. package/dist/components/Checkbox.js +0 -1
  92. package/dist/components/CloudinaryImage.js +51 -81
  93. package/dist/components/Loading.js +0 -1
  94. package/dist/components/LoadingDots.js +0 -1
  95. package/dist/components/LottieAnimation.js +1 -2
  96. package/dist/components/Menu.js +1 -2
  97. package/dist/components/Modal.js +1 -2
  98. package/dist/components/NavLink.js +1 -2
  99. package/dist/components/ProgressBar.js +0 -1
  100. package/dist/components/RadialProgressBar.js +0 -1
  101. package/dist/components/Table.js +0 -1
  102. package/dist/components/Transition.js +0 -1
  103. package/dist/composables/index.js +33 -31
  104. package/dist/composables/useCalendar.js +1 -2
  105. package/dist/composables/useFormValidation.js +0 -1
  106. package/dist/composables/useMap.js +3 -3
  107. package/dist/composables/useModal.js +0 -1
  108. package/dist/composables/useNotifications.js +0 -1
  109. package/dist/composables/useTabs.js +87 -193
  110. package/dist/composables/useTheme.js +0 -1
  111. package/dist/empty-state/ComingSoon.js +0 -1
  112. package/dist/empty-state/EmptyState.js +0 -1
  113. package/dist/empty-state/index.js +0 -1
  114. package/dist/forms/DynamicForm.js +1 -2
  115. package/dist/forms/DynamicFormField.js +1 -2
  116. package/dist/forms/FormFieldWrapper.js +7 -8
  117. package/dist/id-DafBB_QF.js +0 -1
  118. package/dist/index.js +2652 -790
  119. package/dist/inputs/AddDeleteButtonGroup.js +1 -2
  120. package/dist/inputs/CheckboxInput.js +0 -1
  121. package/dist/inputs/ComboboxInput.js +1 -2
  122. package/dist/inputs/DatepickerInput.js +1 -2
  123. package/dist/inputs/EmailInput.js +0 -1
  124. package/dist/inputs/EmptyInput.js +0 -1
  125. package/dist/inputs/FileDropzoneInput.js +1 -2
  126. package/dist/inputs/HiddenInput.js +0 -1
  127. package/dist/inputs/PhoneInput.js +371 -3539
  128. package/dist/inputs/RichTextInput.js +235 -17298
  129. package/dist/inputs/SelectInput.js +1 -2
  130. package/dist/inputs/SelectTextInput.js +1 -2
  131. package/dist/inputs/SwitchInput.js +1 -2
  132. package/dist/inputs/SwitchInputGroup.js +1 -2
  133. package/dist/inputs/TagifyInput.js +1 -2
  134. package/dist/inputs/TextAreaInput.js +0 -1
  135. package/dist/inputs/TextInput.js +7 -8
  136. package/dist/layouts/DashboardLayout.js +1 -2
  137. package/dist/layouts/DefaultLayout.js +0 -1
  138. package/dist/layouts/HeaderLayout.js +0 -1
  139. package/dist/layouts/NavigationGroup.js +0 -1
  140. package/dist/layouts/NavigationItem.js +0 -1
  141. package/dist/layouts/ProfileHeaderAvatar.js +0 -1
  142. package/dist/layouts/ProjectLogo.js +0 -1
  143. package/dist/layouts/SidebarLayout.js +1 -2
  144. package/dist/loading/ContentSkeleton.js +0 -1
  145. package/dist/loading/SmartLoadingIndicator.js +0 -1
  146. package/dist/loading/index.js +0 -1
  147. package/dist/mapThemes-DFE9fZm3.js +0 -1
  148. package/dist/maps/GoogleMap.js +13 -14
  149. package/dist/maps/UiInfoWindow.js +41 -43
  150. package/dist/maps/UiMap.js +28 -31
  151. package/dist/maps/UiMapAll.js +1 -2
  152. package/dist/maps/UiMapMarker.js +1 -2
  153. package/dist/maps/index.js +1 -2
  154. package/dist/modals/AlertModal.js +1 -2
  155. package/dist/modals/BaseModal.js +1 -2
  156. package/dist/modals/ImageCropperModal.js +130 -1666
  157. package/dist/notifications/NotificationContainer.js +1 -2
  158. package/dist/notifications/NotificationToast.js +1 -2
  159. package/dist/notifications/index.js +2 -3
  160. package/dist/src/components/UiBanner.d.ts +1 -1
  161. package/dist/src/components/UiLoadingDots.d.ts +1 -1
  162. package/dist/src/components/UiMenu.d.ts +1 -1
  163. package/dist/src/components/UiModal.d.ts +1 -1
  164. package/dist/src/components/collection-editor/CollectionItemList.d.ts +42 -0
  165. package/dist/src/components/collection-editor/OrganizationsEditor.d.ts +29 -0
  166. package/dist/src/components/collection-editor/RelatedNamesEditor.d.ts +26 -0
  167. package/dist/src/components/collection-editor/SocialLinksEditor.d.ts +26 -0
  168. package/dist/src/components/collection-editor/index.d.ts +5 -0
  169. package/dist/src/components/forms/FormFieldWrapper.d.ts +1 -1
  170. package/dist/src/components/index.d.ts +2 -0
  171. package/dist/src/components/inputs/AddressInput.d.ts +40 -0
  172. package/dist/src/components/inputs/ComboboxInput.d.ts +2 -2
  173. package/dist/src/components/inputs/DatepickerInput.d.ts +19 -19
  174. package/dist/src/components/inputs/EmailInput.d.ts +2 -2
  175. package/dist/src/components/inputs/PhoneInput.d.ts +2 -2
  176. package/dist/src/components/inputs/RichTextInput.d.ts +2 -2
  177. package/dist/src/components/inputs/SelectInput.d.ts +2 -2
  178. package/dist/src/components/inputs/SelectTextInput.d.ts +4 -4
  179. package/dist/src/components/inputs/TagifyInput.d.ts +2 -2
  180. package/dist/src/components/inputs/TextInput.d.ts +3 -3
  181. package/dist/src/components/inputs/index.d.ts +1 -0
  182. package/dist/src/components/layouts/CardLayout.d.ts +1 -1
  183. package/dist/src/components/maps/UiInfoWindow.d.ts +2 -2
  184. package/dist/src/components/maps/UiMap.d.ts +2 -2
  185. package/dist/src/components/maps/UiMapAll.d.ts +10 -10
  186. package/dist/src/components/maps/UiMapMarker.d.ts +2 -2
  187. package/dist/src/components/modals/BaseModal.d.ts +1 -1
  188. package/dist/src/components/profiles/BentoProfileLayout.d.ts +9 -0
  189. package/dist/src/components/profiles/ProfileCard.d.ts +30 -0
  190. package/dist/src/components/profiles/ProfileContactCard.d.ts +12 -0
  191. package/dist/src/components/profiles/ProfileHeaderCard.d.ts +20 -0
  192. package/dist/src/components/profiles/ProfileLocationCard.d.ts +17 -0
  193. package/dist/src/components/profiles/ProfileOrganizationsCard.d.ts +11 -0
  194. package/dist/src/components/profiles/ProfilePersonalCard.d.ts +10 -0
  195. package/dist/src/components/profiles/ProfileProfessionalCard.d.ts +11 -0
  196. package/dist/src/components/profiles/ProfileRelatedNamesCard.d.ts +11 -0
  197. package/dist/src/components/profiles/index.d.ts +9 -0
  198. package/dist/src/composables/index.d.ts +1 -0
  199. package/dist/src/composables/useCollectionEditor.d.ts +64 -0
  200. package/dist/src/composables/useNotifications.d.ts +4 -4
  201. package/dist/src/plugin/configure.d.ts +3 -1
  202. package/dist/src/services/geocoding.service.d.ts +68 -0
  203. package/dist/src/services/index.d.ts +1 -0
  204. package/dist/src/types/address.d.ts +164 -0
  205. package/dist/src/types/collection-editor.d.ts +134 -0
  206. package/dist/src/types/index.d.ts +3 -0
  207. package/dist/src/types/profiles.d.ts +149 -0
  208. package/dist/src/views/inputs/index.d.ts +1 -0
  209. package/dist/stepper/StepperPanels.js +1 -2
  210. package/dist/stepper/index.js +1 -2
  211. package/dist/style.css +1 -1
  212. package/dist/tabs/InlineTabs.js +1 -2
  213. package/dist/tabs/TabGroup.js +1 -2
  214. package/dist/tabs/TabGroupUnderline.js +1 -2
  215. package/dist/tabs/TabsInPills.js +1 -2
  216. package/dist/tabs/index.js +4 -5
  217. package/dist/ui.css +1 -1
  218. package/dist/useCollectionEditor-BYyoAT0U.js +121 -0
  219. package/dist/useEventSegments-B-r_8zCW.js +0 -1
  220. package/dist/useMap-BGg0H582.js +297 -0
  221. package/dist/useSimpleTabs-CSgkChEU.js +0 -1
  222. package/dist/useStringTransform-CSr7nZWg.js +0 -1
  223. package/dist/wrappers/BackgroundGradientWrapper.js +0 -1
  224. package/dist/wrappers/CardWrapper.js +0 -1
  225. package/dist/wrappers/DisclosureWrapper.js +1 -2
  226. package/dist/wrappers/FormErrorWrapper.js +1 -2
  227. package/dist/wrappers/index.js +2 -3
  228. package/package.json +9 -1
  229. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js +0 -128
  230. package/dist/AddDeleteButtonGroup.vue_vue_type_script_setup_true_lang-CFS3lVF-.js.map +0 -1
  231. package/dist/AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js.map +0 -1
  232. package/dist/BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js.map +0 -1
  233. package/dist/BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js.map +0 -1
  234. package/dist/Bars3Icon-BdOqcGcY.js +0 -22
  235. package/dist/Bars3Icon-BdOqcGcY.js.map +0 -1
  236. package/dist/BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js.map +0 -1
  237. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js.map +0 -1
  238. package/dist/CardWrapper.vue_vue_type_script_setup_true_lang-D59QBAi9.js.map +0 -1
  239. package/dist/CheckIcon-BGlsmVwT.js +0 -20
  240. package/dist/CheckIcon-BGlsmVwT.js.map +0 -1
  241. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js.map +0 -1
  242. package/dist/ChevronRightIcon-DkUqw988.js +0 -20
  243. package/dist/ChevronRightIcon-DkUqw988.js.map +0 -1
  244. package/dist/ChevronUpDownIcon-Bq_fsgrb.js +0 -20
  245. package/dist/ChevronUpDownIcon-Bq_fsgrb.js.map +0 -1
  246. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js +0 -1362
  247. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js.map +0 -1
  248. package/dist/ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js.map +0 -1
  249. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js.map +0 -1
  250. package/dist/DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js.map +0 -1
  251. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js.map +0 -1
  252. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js.map +0 -1
  253. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js +0 -138
  254. package/dist/DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js.map +0 -1
  255. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js.map +0 -1
  256. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js.map +0 -1
  257. package/dist/EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js.map +0 -1
  258. package/dist/EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js.map +0 -1
  259. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js.map +0 -1
  260. package/dist/EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js +0 -136
  261. package/dist/EventCard.vue_vue_type_script_setup_true_lang-j1mtKShZ.js.map +0 -1
  262. package/dist/EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js +0 -102
  263. package/dist/EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js.map +0 -1
  264. package/dist/ExclamationCircleIcon-DjxYk45_.js +0 -22
  265. package/dist/ExclamationCircleIcon-DjxYk45_.js.map +0 -1
  266. package/dist/ExclamationCircleIcon-DmL8Wwjo.js +0 -36
  267. package/dist/ExclamationCircleIcon-DmL8Wwjo.js.map +0 -1
  268. package/dist/ExclamationTriangleIcon-BNKYmV_J.js +0 -22
  269. package/dist/ExclamationTriangleIcon-BNKYmV_J.js.map +0 -1
  270. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js +0 -211
  271. package/dist/FileDropzoneInput.vue_vue_type_script_setup_true_lang-CclXceTb.js.map +0 -1
  272. package/dist/FormErrorWrapper.vue_vue_type_script_setup_true_lang-BQOlG_ab.js.map +0 -1
  273. package/dist/FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js.map +0 -1
  274. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js.map +0 -1
  275. package/dist/HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js.map +0 -1
  276. package/dist/InformationCircleIcon-B322GNIt.js +0 -40
  277. package/dist/InformationCircleIcon-B322GNIt.js.map +0 -1
  278. package/dist/InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js.map +0 -1
  279. package/dist/LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js.map +0 -1
  280. package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js.map +0 -1
  281. package/dist/MapPinIcon-CSTDUZnD.js +0 -27
  282. package/dist/MapPinIcon-CSTDUZnD.js.map +0 -1
  283. package/dist/MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js.map +0 -1
  284. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js.map +0 -1
  285. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js.map +0 -1
  286. package/dist/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js.map +0 -1
  287. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js.map +0 -1
  288. package/dist/PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js.map +0 -1
  289. package/dist/PlusIcon-aDFVlB90.js +0 -40
  290. package/dist/PlusIcon-aDFVlB90.js.map +0 -1
  291. package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-CKCoHD1o.js.map +0 -1
  292. package/dist/ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js.map +0 -1
  293. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js.map +0 -1
  294. package/dist/SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js.map +0 -1
  295. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js.map +0 -1
  296. package/dist/SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js.map +0 -1
  297. package/dist/StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js +0 -111
  298. package/dist/StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js.map +0 -1
  299. package/dist/StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js.map +0 -1
  300. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js +0 -280
  301. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js.map +0 -1
  302. package/dist/SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js.map +0 -1
  303. package/dist/TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js.map +0 -1
  304. package/dist/TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js.map +0 -1
  305. package/dist/TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js.map +0 -1
  306. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js.map +0 -1
  307. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js.map +0 -1
  308. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js.map +0 -1
  309. package/dist/UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js.map +0 -1
  310. package/dist/UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js.map +0 -1
  311. package/dist/UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js.map +0 -1
  312. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js.map +0 -1
  313. package/dist/UiMapAll.vue_vue_type_script_setup_true_lang-CMAyvJMk.js.map +0 -1
  314. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js +0 -330
  315. package/dist/UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js.map +0 -1
  316. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js.map +0 -1
  317. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js.map +0 -1
  318. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js.map +0 -1
  319. package/dist/UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js.map +0 -1
  320. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js.map +0 -1
  321. package/dist/XMarkIcon-Cwy3T6p8.js +0 -22
  322. package/dist/XMarkIcon-Cwy3T6p8.js.map +0 -1
  323. package/dist/XMarkIcon-DNvCkiOy.js +0 -16
  324. package/dist/XMarkIcon-DNvCkiOy.js.map +0 -1
  325. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js.map +0 -1
  326. package/dist/_plugin-vue_export-helper-CHgC5LLL.js.map +0 -1
  327. package/dist/active-element-history-BTBNVIJN.js +0 -17
  328. package/dist/active-element-history-BTBNVIJN.js.map +0 -1
  329. package/dist/calculate-active-index-Dim3sT-5.js +0 -55
  330. package/dist/calculate-active-index-Dim3sT-5.js.map +0 -1
  331. package/dist/calendar-BlSSD4nO.js +0 -575
  332. package/dist/calendar-BlSSD4nO.js.map +0 -1
  333. package/dist/calendars/CalendarDashboard.js.map +0 -1
  334. package/dist/calendars/CalendarHeader.js.map +0 -1
  335. package/dist/calendars/DayCalendar.js.map +0 -1
  336. package/dist/calendars/EventCard.js.map +0 -1
  337. package/dist/calendars/EventsList.js.map +0 -1
  338. package/dist/calendars/MonthCalendar.js.map +0 -1
  339. package/dist/calendars/WeekCalendar.js.map +0 -1
  340. package/dist/calendars/YearCalendar.js.map +0 -1
  341. package/dist/charts/BarChart.js.map +0 -1
  342. package/dist/charts/BaseChart.js.map +0 -1
  343. package/dist/charts/FunnelChart.js.map +0 -1
  344. package/dist/charts/LineChart.js.map +0 -1
  345. package/dist/charts/PieChart.js.map +0 -1
  346. package/dist/charts/SparklineChart.js.map +0 -1
  347. package/dist/charts/StatCard.js.map +0 -1
  348. package/dist/charts/chartTheme.js.map +0 -1
  349. package/dist/charts/index.js.map +0 -1
  350. package/dist/components/Avatar.js.map +0 -1
  351. package/dist/components/Badge.js.map +0 -1
  352. package/dist/components/Banner.js.map +0 -1
  353. package/dist/components/Breadcrumb.js.map +0 -1
  354. package/dist/components/Button.js.map +0 -1
  355. package/dist/components/ButtonGroup.js.map +0 -1
  356. package/dist/components/Checkbox.js.map +0 -1
  357. package/dist/components/CloudinaryImage.js.map +0 -1
  358. package/dist/components/Loading.js.map +0 -1
  359. package/dist/components/LoadingDots.js.map +0 -1
  360. package/dist/components/LottieAnimation.js.map +0 -1
  361. package/dist/components/Menu.js.map +0 -1
  362. package/dist/components/Modal.js.map +0 -1
  363. package/dist/components/NavLink.js.map +0 -1
  364. package/dist/components/ProgressBar.js.map +0 -1
  365. package/dist/components/RadialProgressBar.js.map +0 -1
  366. package/dist/components/Table.js.map +0 -1
  367. package/dist/components/Transition.js.map +0 -1
  368. package/dist/composables/index.js.map +0 -1
  369. package/dist/composables/useCalendar.js.map +0 -1
  370. package/dist/composables/useFormValidation.js.map +0 -1
  371. package/dist/composables/useMap.js.map +0 -1
  372. package/dist/composables/useModal.js.map +0 -1
  373. package/dist/composables/useNotifications.js.map +0 -1
  374. package/dist/composables/useTabs.js.map +0 -1
  375. package/dist/composables/useTheme.js.map +0 -1
  376. package/dist/description-C7cRw0tq.js +0 -30
  377. package/dist/description-C7cRw0tq.js.map +0 -1
  378. package/dist/dialog-BJ2Ld8l3.js +0 -499
  379. package/dist/dialog-BJ2Ld8l3.js.map +0 -1
  380. package/dist/empty-state/ComingSoon.js.map +0 -1
  381. package/dist/empty-state/EmptyState.js.map +0 -1
  382. package/dist/empty-state/index.js.map +0 -1
  383. package/dist/env-BZfPsfnF.js +0 -29
  384. package/dist/env-BZfPsfnF.js.map +0 -1
  385. package/dist/form-f8yP4kN-.js +0 -35
  386. package/dist/form-f8yP4kN-.js.map +0 -1
  387. package/dist/forms/DynamicForm.js.map +0 -1
  388. package/dist/forms/DynamicFormField.js.map +0 -1
  389. package/dist/forms/FormFieldWrapper.js.map +0 -1
  390. package/dist/hidden-BSRluD1y.js +0 -15
  391. package/dist/hidden-BSRluD1y.js.map +0 -1
  392. package/dist/id-DafBB_QF.js.map +0 -1
  393. package/dist/index-Dca39bYA.js +0 -2167
  394. package/dist/index-Dca39bYA.js.map +0 -1
  395. package/dist/index.js.map +0 -1
  396. package/dist/inputs/AddDeleteButtonGroup.js.map +0 -1
  397. package/dist/inputs/CheckboxInput.js.map +0 -1
  398. package/dist/inputs/ComboboxInput.js.map +0 -1
  399. package/dist/inputs/DatepickerInput.js.map +0 -1
  400. package/dist/inputs/EmailInput.js.map +0 -1
  401. package/dist/inputs/EmptyInput.js.map +0 -1
  402. package/dist/inputs/FileDropzoneInput.js.map +0 -1
  403. package/dist/inputs/HiddenInput.js.map +0 -1
  404. package/dist/inputs/PhoneInput.js.map +0 -1
  405. package/dist/inputs/RichTextInput.js.map +0 -1
  406. package/dist/inputs/SelectInput.js.map +0 -1
  407. package/dist/inputs/SelectTextInput.js.map +0 -1
  408. package/dist/inputs/SwitchInput.js.map +0 -1
  409. package/dist/inputs/SwitchInputGroup.js.map +0 -1
  410. package/dist/inputs/TagifyInput.js.map +0 -1
  411. package/dist/inputs/TextAreaInput.js.map +0 -1
  412. package/dist/inputs/TextInput.js.map +0 -1
  413. package/dist/keyboard-Dd_2-cFu.js +0 -5
  414. package/dist/keyboard-Dd_2-cFu.js.map +0 -1
  415. package/dist/layouts/DashboardLayout.js.map +0 -1
  416. package/dist/layouts/DefaultLayout.js.map +0 -1
  417. package/dist/layouts/HeaderLayout.js.map +0 -1
  418. package/dist/layouts/NavigationGroup.js.map +0 -1
  419. package/dist/layouts/NavigationItem.js.map +0 -1
  420. package/dist/layouts/ProfileHeaderAvatar.js.map +0 -1
  421. package/dist/layouts/ProjectLogo.js.map +0 -1
  422. package/dist/layouts/SidebarLayout.js.map +0 -1
  423. package/dist/listbox-YaWWZiiG.js +0 -257
  424. package/dist/listbox-YaWWZiiG.js.map +0 -1
  425. package/dist/loading/ContentSkeleton.js.map +0 -1
  426. package/dist/loading/SmartLoadingIndicator.js.map +0 -1
  427. package/dist/loading/index.js.map +0 -1
  428. package/dist/mapThemes-DFE9fZm3.js.map +0 -1
  429. package/dist/maps/GoogleMap.js.map +0 -1
  430. package/dist/maps/UiInfoWindow.js.map +0 -1
  431. package/dist/maps/UiMap.js.map +0 -1
  432. package/dist/maps/UiMapAll.js.map +0 -1
  433. package/dist/maps/UiMapMarker.js.map +0 -1
  434. package/dist/maps/index.js.map +0 -1
  435. package/dist/micro-task-D-oTY33s.js +0 -9
  436. package/dist/micro-task-D-oTY33s.js.map +0 -1
  437. package/dist/modals/AlertModal.js.map +0 -1
  438. package/dist/modals/BaseModal.js.map +0 -1
  439. package/dist/modals/ImageCropperModal.js.map +0 -1
  440. package/dist/notifications/NotificationContainer.js.map +0 -1
  441. package/dist/notifications/NotificationToast.js.map +0 -1
  442. package/dist/notifications/index.js.map +0 -1
  443. package/dist/open-closed-JTEvYTg2.js +0 -19
  444. package/dist/open-closed-JTEvYTg2.js.map +0 -1
  445. package/dist/render-QUUPyNjX.js +0 -101
  446. package/dist/render-QUUPyNjX.js.map +0 -1
  447. package/dist/stepper/StepperPanels.js.map +0 -1
  448. package/dist/stepper/index.js.map +0 -1
  449. package/dist/tabs/InlineTabs.js.map +0 -1
  450. package/dist/tabs/TabGroup.js.map +0 -1
  451. package/dist/tabs/TabGroupUnderline.js.map +0 -1
  452. package/dist/tabs/TabsInPills.js.map +0 -1
  453. package/dist/tabs/index.js.map +0 -1
  454. package/dist/tabs-J5phClGv.js +0 -202
  455. package/dist/tabs-J5phClGv.js.map +0 -1
  456. package/dist/transition-_rPfnoET.js +0 -191
  457. package/dist/transition-_rPfnoET.js.map +0 -1
  458. package/dist/use-outside-click-14T0Zn98.js +0 -151
  459. package/dist/use-outside-click-14T0Zn98.js.map +0 -1
  460. package/dist/use-resolve-button-type-h6n-lm9q.js +0 -20
  461. package/dist/use-resolve-button-type-h6n-lm9q.js.map +0 -1
  462. package/dist/use-text-value-DKnkjK00.js +0 -44
  463. package/dist/use-text-value-DKnkjK00.js.map +0 -1
  464. package/dist/use-tree-walker-Bo9gIb_K.js +0 -16
  465. package/dist/use-tree-walker-Bo9gIb_K.js.map +0 -1
  466. package/dist/useEventSegments-B-r_8zCW.js.map +0 -1
  467. package/dist/useMap-BaZEIoWM.js +0 -525
  468. package/dist/useMap-BaZEIoWM.js.map +0 -1
  469. package/dist/useSimpleTabs-CSgkChEU.js.map +0 -1
  470. package/dist/useStringTransform-CSr7nZWg.js.map +0 -1
  471. package/dist/vue-datepicker-CEn0-fJj.js +0 -4871
  472. package/dist/vue-datepicker-CEn0-fJj.js.map +0 -1
  473. package/dist/vue-router-B3K2xmg_.js +0 -120
  474. package/dist/vue-router-B3K2xmg_.js.map +0 -1
  475. package/dist/vue3-lottie.es-DT4qZE-F.js +0 -7981
  476. package/dist/vue3-lottie.es-DT4qZE-F.js.map +0 -1
  477. package/dist/wrappers/BackgroundGradientWrapper.js.map +0 -1
  478. package/dist/wrappers/CardWrapper.js.map +0 -1
  479. package/dist/wrappers/DisclosureWrapper.js.map +0 -1
  480. package/dist/wrappers/FormErrorWrapper.js.map +0 -1
  481. package/dist/wrappers/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"calendar-BlSSD4nO.js","sources":["../node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs","../node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs","../node_modules/date-fns/locale/_lib/buildMatchFn.mjs","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs","../node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs","../node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs","../node_modules/date-fns/locale/en-US/_lib/localize.mjs","../node_modules/date-fns/locale/en-US/_lib/match.mjs","../node_modules/date-fns/locale/en-US/_lib/formatLong.mjs","../node_modules/date-fns/locale/en-US.mjs","../src/utils/calendar.ts"],"sourcesContent":["export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, addDays, isSameMonth, isToday } from 'date-fns';\nimport { enUS } from 'date-fns/locale';\n\n/**\n * Event structure for calendar display\n */\nexport type ListEvent = {\n id: string | number;\n name: string;\n date: string;\n time: string;\n datetime: string;\n location?: string;\n href?: string;\n startTime?: { dateTime: string; timeZone?: string; shortTimeZone?: string };\n endTime?: { dateTime: string; timeZone?: string; shortTimeZone?: string };\n geocodeResult?: {\n thumbnailUrl?: string;\n [key: string]: unknown;\n };\n /** Optional rate plan metadata for styling/filtering */\n ratePlanCode?: string;\n ratePlanColor?: string;\n ratePlanName?: string;\n /** Whether this is an all-day event (no specific time) */\n isAllDay?: boolean;\n};\n\nexport type CalendarDay = {\n id?: string | number;\n date: string;\n isCurrentMonth: boolean;\n isToday?: boolean;\n isSelected?: boolean;\n events?: ListEvent[];\n shortDay?: string;\n longDay?: string;\n day?: number;\n};\n\nexport interface Month {\n name: string;\n days: Array<CalendarDay>;\n}\n\nexport function generateDays(monthDate: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): CalendarDay[] {\n const start = startOfMonth(monthDate);\n const end = endOfMonth(monthDate);\n const calendarStart = startOfWeek(start, { weekStartsOn });\n const calendarEnd = endOfWeek(end, { weekStartsOn });\n const days: CalendarDay[] = [];\n let currentDay = calendarStart;\n while (currentDay <= calendarEnd) {\n const isCurrent = isSameMonth(currentDay, monthDate);\n const dayObj: CalendarDay = {\n date: format(currentDay, 'yyyy-MM-dd'),\n isCurrentMonth: isCurrent,\n isToday: isToday(currentDay),\n isSelected: false,\n shortDay: format(currentDay, 'EEE', { locale: enUS }),\n longDay: format(currentDay, 'EEEE', { locale: enUS }),\n day: Number(format(currentDay, 'd')),\n };\n days.push(dayObj);\n currentDay = addDays(currentDay, 1);\n }\n days.forEach(d => { if (d.isToday && d.isCurrentMonth) d.isSelected = true });\n return days;\n}\n\nexport const generateMonthDays = generateDays;\n\nexport function generateWeekDays(weekDate: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): CalendarDay[] {\n const start = startOfWeek(weekDate, { weekStartsOn });\n const end = endOfWeek(weekDate, { weekStartsOn });\n const days: CalendarDay[] = [];\n let currentDay = start;\n while (currentDay <= end) {\n const dayObj: CalendarDay = {\n date: format(currentDay, 'yyyy-MM-dd'),\n isCurrentMonth: true,\n isToday: isToday(currentDay),\n isSelected: false,\n shortDay: format(currentDay, 'EEE', { locale: enUS }),\n longDay: format(currentDay, 'EEEE', { locale: enUS }),\n day: Number(format(currentDay, 'd')),\n };\n days.push(dayObj);\n currentDay = addDays(currentDay, 1);\n }\n return days;\n}\n\nexport function generateYearDays(yearDate: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Month[] {\n const months: Month[] = [];\n const year = yearDate.getFullYear();\n for (let monthIndex = 0; monthIndex < 12; monthIndex++) {\n const thisMonth = new Date(year, monthIndex, 1);\n const days = generateDays(thisMonth, weekStartsOn);\n months.push({ name: format(thisMonth, 'MMMM'), days });\n }\n return months;\n}\n\nexport function formatEventDate(dateStr: string): string {\n const date = new Date(dateStr);\n return format(date, 'yyyy-MM-dd');\n}\n\nexport function calculateGridRow(datetime: string) {\n const d = new Date(datetime);\n const hours = d.getHours();\n const minutes = d.getMinutes();\n const totalMinutes = hours * 60 + minutes;\n return Math.round(totalMinutes / 5 + 2);\n}\n\nexport const calculateGridSpan = (startDateTime?: string, endDateTime?: string) => {\n if (!startDateTime || !endDateTime) return 1;\n const start = new Date(startDateTime);\n const end = new Date(endDateTime);\n const diffInMinutes = (end.getTime() - start.getTime()) / (1000 * 60);\n const spanPerMinute = 1 / 5;\n return Math.round(diffInMinutes * spanPerMinute);\n};\n\nexport const formatTime = (datetime: string) => {\n const date = new Date(datetime);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const period = hours >= 12 ? 'PM' : 'AM';\n const formattedHours = hours % 12 || 12;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n return `${formattedHours}:${formattedMinutes} ${period}`;\n};\n\nexport type CalendarView = 'month' | 'week';\n\nexport const calculateColStart = (day: string, view: CalendarView = 'month'): number => {\n let column: number;\n if (view === 'month') {\n switch (day) {\n case 'Monday': column = 1; break;\n case 'Tuesday': column = 2; break;\n case 'Wednesday': column = 3; break;\n case 'Thursday': column = 4; break;\n case 'Friday': column = 5; break;\n case 'Saturday': column = 6; break;\n case 'Sunday': column = 7; break;\n default: column = 1;\n }\n } else if (view === 'week') {\n switch (day) {\n case 'Sunday': column = 1; break;\n case 'Monday': column = 2; break;\n case 'Tuesday': column = 3; break;\n case 'Wednesday': column = 4; break;\n case 'Thursday': column = 5; break;\n case 'Friday': column = 6; break;\n case 'Saturday': column = 7; break;\n default: column = 1;\n }\n } else {\n column = 1;\n }\n return column;\n};\n\nexport function updateSelectedDay(days: CalendarDay[], selectedDay: CalendarDay): CalendarDay[] {\n return days.map(day => ({ ...day, isSelected: day.date === selectedDay.date }));\n}\n\n/**\n * Group overlapping events for placement in time-based views\n * Events are grouped when their time ranges overlap\n */\nexport function groupOverlappingEvents(events: ListEvent[]): ListEvent[][] {\n // Parse and normalize the start and end times\n const normalized = events.map(event => {\n const startIso = event.startTime?.dateTime || event.datetime;\n const endIso = event.endTime?.dateTime || event.datetime;\n return {\n ...event,\n _start: startIso ? new Date(startIso).getTime() : 0,\n _end: endIso ? new Date(endIso).getTime() : 0,\n };\n });\n\n // Sort events by start time\n normalized.sort((a, b) => a._start - b._start);\n\n const groupedEvents: ListEvent[][] = [];\n\n normalized.forEach(event => {\n let added = false;\n for (const group of groupedEvents) {\n const lastEventInGroup = group[group.length - 1] as (ListEvent & { _end: number });\n if (lastEventInGroup && event._start <= lastEventInGroup._end) {\n group.push(event);\n added = true;\n break;\n }\n }\n if (!added) {\n groupedEvents.push([event]);\n }\n });\n\n return groupedEvents;\n}\n\n/**\n * Attach events to their corresponding days, handling multi-day events\n * Multi-day events will appear on all days they span\n */\nexport function attachEventsToDays(days: CalendarDay[], events: ListEvent[]): CalendarDay[] {\n return days.map(day => {\n // Build local day start/end to avoid TZ drift\n const [y, m, d] = day.date.split('-').map(Number);\n const dayStart = new Date(y, m - 1, d, 0, 0, 0, 0);\n const dayEnd = new Date(y, m - 1, d, 23, 59, 59, 999);\n\n const eventsForDay = (events || []).filter(event => {\n // Prefer explicit start/end; fall back to single datetime\n const startIso = event.startTime?.dateTime || event.datetime;\n const endIso = event.endTime?.dateTime || event.datetime;\n if (!startIso) return false;\n\n const start = new Date(startIso);\n const end = new Date(endIso);\n\n // If no end provided, treat as instantaneous/short event\n const effectiveEnd = Number.isNaN(end.getTime()) ? start : end;\n\n // Event intersects this day when it starts before day's end\n // and ends after day's start (inclusive)\n return start.getTime() <= dayEnd.getTime() && effectiveEnd.getTime() >= dayStart.getTime();\n });\n\n return { ...day, events: eventsForDay };\n });\n}\n\n/**\n * Move Sunday to the end of the array of days (e.g., ['Monday', 'Tuesday', ... 'Sunday'])\n */\nexport function moveSundayToEnd(days: string[]): string[] {\n const index = days.indexOf('Sunday');\n if (index !== -1) {\n const sunday = days.splice(index, 1);\n return [...days, ...sunday];\n }\n return days;\n}\n\n/**\n * Parse a date string in YYYY-MM-DD format to a local Date\n */\nexport function parseLocalDate(dateString: string): Date {\n const [year, month, day] = dateString.split('-').map(Number);\n return new Date(year, month - 1, day);\n}\n\n/**\n * Convert a Date to a YYYY-MM-DD key using LOCAL time (not UTC)\n */\nexport function toLocalDateKey(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Check if two dates are the same day (in local time)\n */\nexport function isSameDay(date1: Date, date2: Date): boolean {\n return toLocalDateKey(date1) === toLocalDateKey(date2);\n}\n\n/**\n * Get the number of days between two dates\n */\nexport function daysBetween(start: Date, end: Date): number {\n const startMs = new Date(start.getFullYear(), start.getMonth(), start.getDate()).getTime();\n const endMs = new Date(end.getFullYear(), end.getMonth(), end.getDate()).getTime();\n return Math.round((endMs - startMs) / (1000 * 60 * 60 * 24));\n}\n\n/**\n * Format a date for display as a short date string\n */\nexport function formatShortDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n}\n\n/**\n * Format a date for display as a long date string\n */\nexport function formatLongDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' });\n}\n\n/**\n * Get the month name from a date\n */\nexport function getMonthName(date: Date, long = true): string {\n return date.toLocaleDateString('en-US', { month: long ? 'long' : 'short' });\n}\n\n/**\n * Day names for calendar headers\n */\nexport const dayNamesShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nexport const dayNamesLong = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nexport const dayNamesMicro = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\n/**\n * Month names for calendar headers \n */\nexport const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\n/**\n * Check if an event is an all-day event\n * An event is all-day if:\n * - It's explicitly marked as isAllDay: true\n * - It spans from 00:00 to 23:59 or later\n * - It has no time component (midnight to midnight)\n */\nexport function isAllDayEvent(event: ListEvent): boolean {\n if (event.isAllDay) return true;\n \n const startIso = event.startTime?.dateTime || event.datetime;\n const endIso = event.endTime?.dateTime;\n \n if (!startIso || !endIso) return false;\n \n const start = new Date(startIso);\n const end = new Date(endIso);\n \n // Check if spans full day(s) - starts at midnight and ends at or after 23:00\n const startsAtMidnight = start.getHours() === 0 && start.getMinutes() === 0;\n const endsAtEndOfDay = end.getHours() === 23 && end.getMinutes() >= 59;\n \n // Also check for multi-day events that span different dates\n const daysDiff = daysBetween(start, end);\n \n return startsAtMidnight && (endsAtEndOfDay || daysDiff > 0);\n}\n\n/**\n * Separate events into all-day and timed events\n */\nexport function separateAllDayEvents(events: ListEvent[]): { allDay: ListEvent[]; timed: ListEvent[] } {\n const allDay: ListEvent[] = [];\n const timed: ListEvent[] = [];\n \n events.forEach(event => {\n if (isAllDayEvent(event)) {\n allDay.push(event);\n } else {\n timed.push(event);\n }\n });\n \n return { allDay, timed };\n}\n\n/**\n * Calculate event placement for overlapping events in day/week views\n * Returns events with column and total columns info for layout\n */\nexport type PlacedEvent = ListEvent & {\n column: number;\n totalColumns: number;\n clampedStart: Date;\n clampedEnd: Date;\n isStartDay: boolean;\n isEndDay: boolean;\n};\n\nexport function calculateEventPlacement(\n dayKey: string,\n events: ListEvent[],\n maxColumns: number = 4\n): { placed: PlacedEvent[]; overflow: number } {\n // Parse day boundaries\n const [y, m, d] = dayKey.split('-').map(Number);\n const dayStart = new Date(y, m - 1, d, 0, 0, 0, 0);\n const dayEnd = new Date(y, m - 1, d, 23, 59, 59, 999);\n \n // Filter and normalize events for this day\n const normalized = events\n .filter(event => !isAllDayEvent(event))\n .map(event => {\n const startIso = event.startTime?.dateTime || event.datetime;\n const endIso = event.endTime?.dateTime || event.datetime;\n const start = new Date(startIso);\n const end = endIso ? new Date(endIso) : new Date(start.getTime() + 30 * 60 * 1000);\n \n // Clamp to day boundaries\n const clampedStart = new Date(Math.max(dayStart.getTime(), start.getTime()));\n const clampedEnd = new Date(Math.min(dayEnd.getTime(), end.getTime()));\n \n return {\n ...event,\n _start: clampedStart.getTime(),\n _end: clampedEnd.getTime(),\n clampedStart,\n clampedEnd,\n isStartDay: start.getTime() === clampedStart.getTime(),\n isEndDay: end.getTime() === clampedEnd.getTime(),\n };\n })\n .sort((a, b) => a._start - b._start);\n \n // Assign columns using a greedy algorithm\n const placed: PlacedEvent[] = [];\n const activeColumns: { end: number; event: PlacedEvent }[] = [];\n \n normalized.forEach(event => {\n // Free up columns that have ended\n for (let i = activeColumns.length - 1; i >= 0; i--) {\n if (activeColumns[i].end <= event._start) {\n activeColumns.splice(i, 1);\n }\n }\n \n // Find first available column\n let column = 0;\n const usedColumns = new Set(activeColumns.map(c => c.event.column));\n while (usedColumns.has(column) && column < maxColumns) {\n column++;\n }\n \n if (column >= maxColumns) {\n // Event goes to overflow\n return;\n }\n \n const placedEvent: PlacedEvent = {\n ...event,\n column,\n totalColumns: 1, // Will be updated after all events are placed\n };\n \n activeColumns.push({ end: event._end, event: placedEvent });\n placed.push(placedEvent);\n });\n \n // Calculate total columns for each time cluster\n // Group overlapping events and set their totalColumns\n const clusters: PlacedEvent[][] = [];\n placed.forEach(event => {\n let addedToCluster = false;\n for (const cluster of clusters) {\n const overlaps = cluster.some(e => \n event._start < e._end && event._end > e._start\n );\n if (overlaps) {\n cluster.push(event);\n addedToCluster = true;\n break;\n }\n }\n if (!addedToCluster) {\n clusters.push([event]);\n }\n });\n \n clusters.forEach(cluster => {\n const maxCol = Math.max(...cluster.map(e => e.column)) + 1;\n cluster.forEach(e => {\n e.totalColumns = Math.min(maxCol, maxColumns);\n });\n });\n \n const overflow = normalized.length - placed.length;\n \n return { placed, overflow };\n}\n\n\n"],"names":["buildFormatLongFn","args","options","width","buildLocalizeFn","value","context","valuesArray","defaultWidth","index","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","key","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","formatDistanceLocale","formatDistance","token","count","result","tokenValue","formatRelativeLocale","formatRelative","_date","_baseDate","_options","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","number","rem100","localize","quarter","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","dateFormats","timeFormats","dateTimeFormats","formatLong","enUS","generateDays","monthDate","weekStartsOn","start","startOfMonth","end","endOfMonth","calendarStart","startOfWeek","calendarEnd","endOfWeek","days","currentDay","isCurrent","isSameMonth","dayObj","format","isToday","addDays","d","generateMonthDays","generateWeekDays","weekDate","generateYearDays","yearDate","months","year","monthIndex","thisMonth","calculateGridRow","datetime","hours","minutes","totalMinutes","calculateGridSpan","startDateTime","endDateTime","diffInMinutes","spanPerMinute","formatTime","date","period","formattedHours","formattedMinutes","parseLocalDate","dateString","month","day","toLocalDateKey","y","m","daysBetween","startMs","endMs","isAllDayEvent","event","startIso","endIso","startsAtMidnight","endsAtEndOfDay","daysDiff","separateAllDayEvents","events","allDay","timed","calculateEventPlacement","dayKey","maxColumns","dayStart","dayEnd","normalized","clampedStart","clampedEnd","a","b","placed","activeColumns","i","column","usedColumns","c","placedEvent","clusters","addedToCluster","cluster","e","maxCol","overflow"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalendarDashboard.js","sources":["../../src/components/calendars/CalendarDashboard.vue"],"sourcesContent":["<template>\n <div class=\"lg:sl-grid lg:sl-grid-cols-12 lg:sl-gap-x-8\">\n <!-- Calendar Column -->\n <div class=\"sl-mt-10 sl-text-center lg:sl-col-start-8 lg:sl-col-end-13 lg:sl-row-start-1 lg:sl-mt-9 xl:sl-col-start-9 xl:sl-col-end-13 sl-h-auto lg:sl-border-l lg:sl-border-gray-100 lg:sl-pl-8 lg:sl-h-full\">\n <CalendarHeader :view=\"'month'\" :selectedRange=\"days\" @changeView=\"handleViewChange\" @changeRange=\"handleRangeChange\" />\n <MonthCalendar \n :days=\"days\" \n :events=\"events\"\n @selectDay=\"handleDaySelect\"\n @doubleSelectDay=\"handleDoubleSelectDay\" />\n <div class=\"sl-mt-4\">\n <UiButton center-label type=\"button\" @click=\"handleNewEventClick\" size=\"sm\" expanded>\n Add event\n </UiButton>\n </div>\n </div>\n\n <!-- Events List Column -->\n <EventsList \n class=\"lg:sl-col-span-7 xl:sl-col-span-8 sl-py-6\" \n :events=\"filteredEvents\"\n :show-all-button=\"showAllButton\" \n @show:all=\"handleShowAll\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport type { CalendarDay, ListEvent } from '@/utils/calendar';\nimport CalendarHeader from './CalendarHeader.vue';\nimport MonthCalendar from './MonthCalendar.vue';\nimport EventsList from './EventsList.vue';\nimport UiButton from '@/components/UiButton.vue';\n\nconst props = defineProps<{\n days: CalendarDay[];\n events: ListEvent[];\n}>();\n\nconst emit = defineEmits(['selectDay', 'doubleSelectDay', 'newEvent', 'monthChange', 'showAll']);\n\nconst selectedDay = ref<CalendarDay | null>(null);\n\nconst showAllButton = computed(() => \n props.events.length !== filteredEvents.value.length\n);\n\nconst filteredEvents = computed(() => {\n if (!selectedDay.value) return props.events;\n \n return props.events.filter(event => {\n const eventDate = new Date(event.datetime).toISOString().split('T')[0];\n return eventDate === selectedDay.value?.date;\n });\n});\n\nconst handleDaySelect = (day: CalendarDay) => {\n selectedDay.value = day;\n emit('selectDay', day);\n};\n\nconst handleDoubleSelectDay = (day: CalendarDay) => {\n emit('doubleSelectDay', day);\n};\n\nconst handleViewChange = (view: string) => {\n // Handle view change if needed\n console.log('View changed to:', view);\n};\n\nconst handleRangeChange = () => {\n // Range change is handled internally by CalendarHeader\n // This handler is required by the component interface but not used here\n};\n\nconst handleNewEventClick = () => {\n emit('newEvent');\n};\n\nconst handleShowAll = () => {\n selectedDay.value = null;\n emit('showAll');\n};\n</script>\n\n<style scoped>\n@media (max-width: 1024px) {\n .lg\\:sl-col-start-7 {\n grid-column-start: 1;\n }\n\n .lg\\:sl-col-end-13 {\n grid-column-end: 13;\n }\n\n .lg\\:sl-col-span-6 {\n grid-column: span 12 / span 12;\n }\n\n .xl\\:sl-col-start-8 {\n grid-column-start: 1;\n }\n\n .xl\\:sl-col-end-13 {\n grid-column-end: 13;\n }\n\n .xl\\:sl-col-span-6 {\n grid-column: span 12 / span 12;\n }\n}\n</style>\n"],"names":["props","__props","emit","__emit","selectedDay","ref","showAllButton","computed","filteredEvents","event","handleDaySelect","day","handleDoubleSelectDay","handleViewChange","view","handleRangeChange","handleNewEventClick","handleShowAll","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","CalendarHeader","MonthCalendar","_hoisted_3","UiButton","_cache","EventsList"],"mappings":";;;;;;;;;;;;;;AAkCA,UAAMA,IAAQC,GAKRC,IAAOC,GAEPC,IAAcC,EAAwB,IAAI,GAE1CC,IAAgBC;AAAA,MAAS,MAC7BP,EAAM,OAAO,WAAWQ,EAAe,MAAM;AAAA,IAAA,GAGzCA,IAAiBD,EAAS,MACzBH,EAAY,QAEVJ,EAAM,OAAO,OAAO,CAAAS,MACP,IAAI,KAAKA,EAAM,QAAQ,EAAE,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC,MAChDL,EAAY,OAAO,IACzC,IAL8BJ,EAAM,MAMtC,GAEKU,IAAkB,CAACC,MAAqB;AAC5C,MAAAP,EAAY,QAAQO,GACpBT,EAAK,aAAaS,CAAG;AAAA,IACvB,GAEMC,IAAwB,CAACD,MAAqB;AAClD,MAAAT,EAAK,mBAAmBS,CAAG;AAAA,IAC7B,GAEME,IAAmB,CAACC,MAAiB;AAEzC,cAAQ,IAAI,oBAAoBA,CAAI;AAAA,IACtC,GAEMC,IAAoB,MAAM;AAAA,IAGhC,GAEMC,IAAsB,MAAM;AAChC,MAAAd,EAAK,UAAU;AAAA,IACjB,GAEMe,IAAgB,MAAM;AAC1B,MAAAb,EAAY,QAAQ,MACpBF,EAAK,SAAS;AAAA,IAChB;sBAjFEgB,EAAA,GAAAC,EAsBM,OAtBNC,GAsBM;AAAA,MApBJC,EAYM,OAZNC,GAYM;AAAA,QAXJC,EAAwHC,GAAA;AAAA,UAAvG,MAAM;AAAA,UAAU,eAAevB,EAAA;AAAA,UAAO,cAAYY;AAAA,UAAmB,eAAaE;AAAA,QAAA;QACnGQ,EAI6CE,GAAA;AAAA,UAH1C,MAAMxB,EAAA;AAAA,UACN,QAAQA,EAAA;AAAA,UACR,aAAWS;AAAA,UACX,mBAAiBE;AAAA,QAAA;QACpBS,EAIM,OAJNK,GAIM;AAAA,UAHJH,EAEWI,GAAA;AAAA,YAFD,gBAAA;AAAA,YAAa,MAAK;AAAA,YAAU,SAAOX;AAAA,YAAqB,MAAK;AAAA,YAAK,UAAA;AAAA,UAAA;uBAAS,MAErF,CAAA,GAAAY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAFqF,eAErF,EAAA;AAAA,YAAA;;;;;MAKJL,EAI8BM,GAAA;AAAA,QAH5B,OAAM;AAAA,QACL,QAAQrB,EAAA;AAAA,QACR,mBAAiBF,EAAA;AAAA,QACjB,cAAUW;AAAA,MAAA;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CalendarHeader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DayCalendar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventCard.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventsList.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MonthCalendar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WeekCalendar.js","sources":["../../src/components/calendars/WeekCalendar.vue"],"sourcesContent":["<!--\n @component WeekCalendar\n @description Week view calendar with time-based event grid.\n \n Features:\n - 7-day grid with hourly time slots\n - Current time indicator (red line)\n - Overlapping event handling with column layout\n - Auto-scroll to current time on mount\n - Responsive mobile view (single day)\n - Multi-day event support\n - Event click handling\n \n @example\n <WeekCalendar\n :days=\"weekDays\"\n @selectDay=\"handleDaySelect\"\n @select:event=\"handleEventSelect\"\n />\n-->\n<template>\n <div class=\"sl-isolate sl-flex sl-h-full sl-min-h-0 sl-flex-col sl-bg-white dark:sl-bg-slate-900\">\n <!-- Horizontal scroll wrapper -->\n <div class=\"sl-flex sl-max-w-full sl-flex-1 sl-min-h-0 sl-flex-col sl-overflow-x-auto\">\n <div style=\"width: 165%\" class=\"sl-flex sl-flex-1 sl-min-h-0 sl-flex-col sm:sl-max-w-none md:sl-max-w-full\">\n <!-- Weekday header -->\n <div ref=\"containerNav\" class=\"sl-sticky sl-top-0 sl-z-30 sl-flex-none sl-bg-white dark:sl-bg-slate-900 sl-shadow sl-ring-1 sl-ring-black dark:sl-ring-slate-700 sl-ring-opacity-5 sm:sl-pr-8\">\n <!-- Mobile: compact day chips -->\n <div class=\"sl-grid sl-grid-cols-7 sl-text-sm sl-leading-6 sl-text-gray-500 dark:sl-text-slate-400 xl:sl-hidden\">\n <button \n v-for=\"day in days\" \n :key=\"day.date\" \n type=\"button\"\n class=\"sl-flex sl-flex-col sl-items-center sl-pb-3 sl-pt-2\" \n @click=\"setActiveDay(day)\"\n >\n {{ day.shortDay }}\n <span \n class=\"sl-mt-1 sl-flex sl-h-8 sl-w-8 sl-items-center sl-justify-center sl-font-semibold sl-text-gray-800 dark:sl-text-slate-200\"\n :class=\"[\n isActiveDay(day) ? 'sl-rounded-full sl-bg-stachelock-600 sl-font-semibold sl-text-white' : '',\n isDayToday(day) && !isActiveDay(day) ? 'sl-rounded-full sl-bg-stachelock-100 dark:sl-bg-stachelock-900 sl-text-stachelock-700 dark:sl-text-stachelock-300' : ''\n ]\"\n >\n {{ day.day }}\n </span>\n </button>\n </div>\n \n <!-- Desktop: full day names -->\n <div class=\"sl--mr-px sl-hidden sl-grid-cols-7 sl-divide-x sl-divide-gray-100 dark:sl-divide-slate-700 sl-border-r sl-border-gray-100 dark:sl-border-slate-700 sl-text-sm sl-leading-6 sl-text-gray-500 dark:sl-text-slate-400 xl:sl-grid\">\n <div class=\"sl-col-end-1 sl-w-14\" />\n <div \n v-for=\"day in days\" \n :key=\"day.date\"\n class=\"sl-flex sl-items-center sl-justify-center sl-py-3\"\n :class=\"isDayToday(day) ? 'sl-bg-stachelock-50 dark:sl-bg-stachelock-950' : ''\"\n >\n <span :class=\"isDayToday(day) ? 'sl-text-stachelock-700 dark:sl-text-stachelock-400 sl-font-semibold' : ''\">\n {{ day.longDay }}\n <span \n class=\"sl-items-center sl-justify-center sl-font-semibold\"\n :class=\"isDayToday(day) ? 'sl-text-stachelock-700 dark:sl-text-stachelock-400' : 'sl-text-gray-800 dark:sl-text-slate-200'\"\n >\n {{ day.day }}\n </span>\n </span>\n </div>\n </div>\n \n <!-- All-Day Events Section -->\n <div v-if=\"hasAllDayEvents\" class=\"sl-hidden sl-border-b sl-border-gray-200 dark:sl-border-slate-700 xl:sl-grid xl:sl-grid-cols-7\">\n <div class=\"sl-col-end-1 sl-w-14 sl-flex sl-items-center sl-justify-end sl-pr-2 sl-text-xs sl-text-gray-400 dark:sl-text-slate-500 sl-bg-white dark:sl-bg-slate-900\">\n All day\n </div>\n <div \n v-for=\"day in days\" \n :key=\"'allday-' + day.date\"\n class=\"sl-relative sl-min-h-[2.5rem] sl-border-r sl-border-gray-100 dark:sl-border-slate-700 sl-py-1 sl-px-0.5\"\n :class=\"isDayToday(day) ? 'sl-bg-stachelock-50/50 dark:sl-bg-stachelock-950/50' : 'sl-bg-white dark:sl-bg-slate-900'\"\n >\n <template v-for=\"lane in Array.from({ length: allDayLanes }, (_, i) => i)\" :key=\"'lane-' + lane\">\n <button \n v-for=\"event in getAllDayEventsForDayAndLane(day.date, lane)\" \n :key=\"'allday-' + event.id\"\n class=\"sl-w-full sl-mb-0.5\"\n @click=\"handleSelectEvent(event.id)\"\n >\n <div \n :class=\"getAllDayBarClass(day.date, event)\" \n :style=\"{ backgroundColor: event.ratePlanColor || '#dbeafe', color: event.ratePlanColor ? '#fff' : '#1e40af' }\"\n :title=\"event.name\"\n >\n <span v-if=\"shouldShowAllDayLabel(day.date, event)\" class=\"sl-truncate sl-text-xs sl-font-medium\">\n {{ event.name }}\n </span>\n </div>\n </button>\n </template>\n </div>\n </div>\n </div>\n\n <!-- Grid body -->\n <div ref=\"container\" class=\"sl-flex-1 sl-min-h-0 sl-overflow-y-auto\">\n <div class=\"sl-flex sl-flex-auto\">\n <!-- Time gutter -->\n <div class=\"sl-sticky sl-left-0 sl-z-10 sl-w-14 sl-flex-none sl-bg-white dark:sl-bg-slate-900 sl-ring-1 sl-ring-gray-100 dark:sl-ring-slate-700\" />\n \n <div class=\"sl-grid sl-flex-auto sl-grid-cols-1 sl-grid-rows-1 sl-relative\">\n <!-- Horizontal hour lines -->\n <div \n class=\"sl-col-start-1 sl-col-end-2 sl-row-start-1 sl-grid sl-divide-y sl-divide-gray-100 dark:sl-divide-slate-800\"\n style=\"grid-template-rows: repeat(48, minmax(3.5rem, 1fr))\"\n >\n <div ref=\"containerOffset\" class=\"sl-row-end-1 sl-h-7\" />\n <template v-for=\"hour in hours\" :key=\"hour\">\n <div class=\"sl-relative\">\n <div class=\"sl-sticky sl-left-0 sl-z-20 sl--ml-14 sl--mt-2.5 sl-w-14 sl-pr-2 sl-text-right sl-text-xs sl-leading-5 sl-text-gray-400 dark:sl-text-slate-500\">\n {{ hour }}\n </div>\n </div>\n <div />\n </template>\n </div>\n\n <!-- Vertical day separators -->\n <div class=\"sl-col-start-1 sl-col-end-2 sl-row-start-1 sl-hidden sl-grid-cols-7 sl-grid-rows-1 sl-divide-x sl-divide-gray-100 dark:sl-divide-slate-800 sm:sl-grid sm:sl-grid-cols-7\">\n <div v-for=\"day in days\" :key=\"day.date\" class=\"sl-col-start-1 sl-row-span-full\" />\n </div>\n \n <!-- Current Time Indicator -->\n <div \n v-if=\"showCurrentTimeIndicator\" \n ref=\"currentTimeIndicator\"\n class=\"sl-absolute sl-left-0 sl-right-0 sl-pointer-events-none sl-z-40\"\n :style=\"currentTimeIndicatorStyle\"\n >\n <div class=\"sl-relative sl-flex sl-items-center\">\n <!-- Time bubble -->\n <div class=\"sl-absolute sl--left-14 sl--top-2.5 sl-flex sl-items-center sl-justify-end sl-w-14 sl-pr-1\">\n <span class=\"sl-bg-red-500 sl-text-white sl-text-[10px] sl-font-medium sl-px-1.5 sl-py-0.5 sl-rounded-full sl-shadow-sm\">\n {{ currentTimeDisplay }}\n </span>\n </div>\n <!-- Red dot -->\n <div class=\"sl-w-2.5 sl-h-2.5 sl-bg-red-500 sl-rounded-full sl--ml-1 sl-shadow-sm\" />\n <!-- Red line -->\n <div class=\"sl-flex-1 sl-h-0.5 sl-bg-red-500 sl-shadow-sm\" />\n </div>\n </div>\n\n <!-- Events layer -->\n <ol \n class=\"sl-col-end-2 sl-row-start-1 sl-grid sl-grid-cols-1 sm:sl-grid-cols-7 sm:sl-pr-8 sl-overflow-hidden\"\n style=\"grid-template-rows: 1.75rem repeat(288, minmax(0, 1fr)) auto\"\n >\n <template v-for=\"(day, dayIndex) in filteredDays\" :key=\"day.date\">\n <template v-if=\"day.events && day.events.length && day.longDay\">\n <!-- Visible events -->\n <li \n v-for=\"placed in visiblePlaced(day.date, day.events)\" \n :key=\"placed.event.id + '-' + (placed.startIso || day.date)\"\n class=\"sl-relative sl-mt-px sl-flex\"\n :class=\"getColumnClass(dayIndex)\"\n :style=\"`grid-row: ${calculateGridRow(placed.startIso)} / span ${calculateGridSpan(placed.startIso, placed.endIso)}`\"\n >\n <button \n @click=\"handleSelectEvent(placed.event.id)\"\n class=\"sl-group sl-absolute sl-inset-y-1 sl-flex sl-flex-col sl-overflow-hidden sl-rounded-lg sl-bg-blue-50 dark:sl-bg-blue-950 sl-p-2 sl-text-xs sl-leading-5 hover:sl-bg-blue-100 dark:hover:sl-bg-blue-900\"\n :style=\"`left: ${placed.leftPercent}%; right: auto; width: ${placed.widthPercent}%;`\"\n :title=\"placed.event.ratePlanCode ? `Rate plan: ${placed.event.ratePlanCode}${placed.event.ratePlanName ? ' • ' + placed.event.ratePlanName : ''}` : ''\"\n >\n <div class=\"sl-relative sl-pt-2\">\n <p class=\"sl-order-1 sl-font-semibold sl-text-blue-700 dark:sl-text-blue-300 sl-pr-4\">{{ placed.event.name }}</p>\n <template v-if=\"!isCompact(placed.startIso, placed.endIso)\">\n <template v-if=\"placed.isStart && placed.isEnd\">\n <p class=\"sl-text-blue-500 dark:sl-text-blue-400 group-hover:sl-text-blue-700 dark:group-hover:sl-text-blue-300\">\n <time :datetime=\"placed.startIso\">{{ formatTime(placed.startIso) }}</time>\n –\n <time :datetime=\"placed.endIso\">{{ formatTime(placed.endIso as string) }}</time>\n <span>{{ placed.event.startTime?.shortTimeZone || placed.event.endTime?.shortTimeZone }}</span>\n </p>\n </template>\n <template v-else-if=\"placed.isStart\">\n <p class=\"sl-text-blue-500 dark:sl-text-blue-400 group-hover:sl-text-blue-700 dark:group-hover:sl-text-blue-300\">\n Start <time :datetime=\"placed.startIso\">{{ formatTime(placed.startIso) }}</time>\n <span>{{ placed.event.startTime?.shortTimeZone }}</span>\n </p>\n </template>\n <template v-else-if=\"placed.isEnd\">\n <p class=\"sl-text-blue-500 dark:sl-text-blue-400 group-hover:sl-text-blue-700 dark:group-hover:sl-text-blue-300\">\n End <time :datetime=\"placed.endIso\">{{ formatTime(placed.endIso as string) }}</time>\n <span>{{ placed.event.endTime?.shortTimeZone }}</span>\n </p>\n </template>\n </template>\n <span \n v-if=\"placed.event.ratePlanColor\" \n class=\"sl-absolute sl--top-1 sl--right-1 sl-inline-block sl-h-2.5 sl-w-2.5 sl-rounded-full sl-ring-1 sl-ring-white dark:sl-ring-slate-800\" \n :style=\"{ backgroundColor: placed.event.ratePlanColor }\"\n />\n </div>\n </button>\n </li>\n\n <!-- Overflow indicator -->\n <li \n v-if=\"overflowCount(day.date, day.events) > 0\" \n :class=\"getColumnClass(dayIndex)\"\n class=\"sl-relative\"\n style=\"grid-row: 2 / span 1\"\n >\n <button \n class=\"sl-absolute sl-right-1 sl-top-1 sl-text-[11px] sl-font-medium sl-text-stachelock-700 dark:sl-text-stachelock-400 hover:sl-text-stachelock-900 dark:hover:sl-text-stachelock-300 sl-underline sl-bg-white/70 dark:sl-bg-slate-800/70 sl-rounded sl-px-1\"\n :title=\"hiddenTooltip(day.date, day.events)\"\n @click=\"goToDay(day)\"\n >\n +{{ overflowCount(day.date, day.events) }} more\n </button>\n </li>\n </template>\n </template>\n </ol>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted, watch, nextTick } from 'vue';\nimport type { CalendarDay, ListEvent } from '@/utils/calendar';\nimport { calculateGridRow, calculateGridSpan, formatTime, separateAllDayEvents } from '@/utils/calendar';\nimport { useEventSegments, calculateEventLanes } from '@/composables/useEventSegments';\n\nconst props = defineProps<{ days: Array<CalendarDay> }>();\n\nconst container = ref<HTMLElement | null>(null);\nconst containerNav = ref<HTMLElement | null>(null);\nconst containerOffset = ref<HTMLElement | null>(null);\nconst currentTimeIndicator = ref<HTMLElement | null>(null);\nconst activeDay = ref<CalendarDay | null>(null);\n\n// Current time tracking\nconst currentTime = ref(new Date());\nlet timeUpdateInterval: ReturnType<typeof setInterval> | null = null;\n\n// Hours array for time labels\nconst hours = [\n '12AM','1AM','2AM','3AM','4AM','5AM','6AM','7AM','8AM','9AM','10AM','11AM',\n '12PM','1PM','2PM','3PM','4PM','5PM','6PM','7PM','8PM','9PM','10PM','11PM'\n];\n\nconst emit = defineEmits(['selectDay', 'select:event']);\n\n// Event segments composable for all-day event bars\nconst { getSegment } = useEventSegments();\n\n// Collect all events across days\nconst allEvents = computed(() => {\n const events: ListEvent[] = [];\n const seen = new Set<string | number>();\n props.days.forEach(day => {\n day.events?.forEach(event => {\n const eventId = event.id || String(event.name);\n if (!seen.has(eventId)) {\n events.push(event);\n seen.add(eventId);\n }\n });\n });\n return events;\n});\n\n// Separate all-day from timed events\nconst separatedEvents = computed(() => separateAllDayEvents(allEvents.value));\nconst allDayEvents = computed(() => separatedEvents.value.allDay);\n\n// Check if there are any all-day events\nconst hasAllDayEvents = computed(() => allDayEvents.value.length > 0);\n\n// Day keys for all-day event lane calculation\nconst dayKeys = computed(() => props.days.map(d => d.date));\n\n// Calculate lanes for all-day events\nconst allDayEventLanes = computed(() => calculateEventLanes(dayKeys.value, allDayEvents.value));\n\n// Maximum lanes for all-day events\nconst allDayLanes = computed(() => {\n if (allDayEventLanes.value.size === 0) return 0;\n return Math.max(...Array.from(allDayEventLanes.value.values())) + 1;\n});\n\n// Get all-day events for a specific day and lane\nconst getAllDayEventsForDayAndLane = (dayKey: string, lane: number): ListEvent[] => {\n const dayAllDayEvents = allDayEvents.value.filter(event => {\n const segment = getSegment(dayKey, event);\n return segment !== 'none';\n });\n \n return dayAllDayEvents.filter(event => {\n const eventId = event.id || String(event.name);\n return allDayEventLanes.value.get(eventId) === lane;\n });\n};\n\n// Get CSS classes for all-day event bar\nconst getAllDayBarClass = (dayKey: string, event: ListEvent): string => {\n const segment = getSegment(dayKey, event);\n if (segment === 'none') return '';\n \n const base = 'sl-relative sl-h-5 sl-flex sl-items-center sl-px-1';\n \n switch (segment) {\n case 'single':\n return `${base} sl-rounded sl-mx-0.5`;\n case 'start':\n return `${base} sl-rounded-l sl-ml-0.5 sl-mr-0`;\n case 'middle':\n return `${base} sl-rounded-none sl-mx-0`;\n case 'end':\n return `${base} sl-rounded-r sl-ml-0 sl-mr-0.5`;\n default:\n return '';\n }\n};\n\n// Should show label for all-day event\nconst shouldShowAllDayLabel = (dayKey: string, event: ListEvent): boolean => {\n const segment = getSegment(dayKey, event);\n return segment === 'start' || segment === 'single';\n};\n\n// Check if a day is today\nconst isDayToday = (day: CalendarDay): boolean => {\n const today = new Date();\n const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\n return day.date === todayStr;\n};\n\n// Check if a day is the active day\nconst isActiveDay = (day: CalendarDay): boolean => {\n return activeDay.value === day;\n};\n\n// Check if current week includes today\nconst currentWeekIncludesToday = computed(() => {\n return props.days.some(day => isDayToday(day));\n});\n\n// Show current time indicator only if viewing current week\nconst showCurrentTimeIndicator = computed(() => {\n return currentWeekIncludesToday.value;\n});\n\n// Current time display (e.g., \"2:45\")\nconst currentTimeDisplay = computed(() => {\n const hours = currentTime.value.getHours();\n const minutes = currentTime.value.getMinutes();\n const displayHours = hours % 12 || 12;\n return `${displayHours}:${String(minutes).padStart(2, '0')}`;\n});\n\n// Calculate position of current time indicator\nconst currentTimeIndicatorStyle = computed(() => {\n const now = currentTime.value;\n const totalMinutes = now.getHours() * 60 + now.getMinutes();\n \n const offsetPx = 28; // h-7 = 1.75rem = 28px\n const rowHeightRem = 3.5;\n const totalRows = 48;\n \n const percentOfDay = totalMinutes / 1440;\n \n return {\n top: `calc(${offsetPx}px + ${percentOfDay} * ${totalRows} * ${rowHeightRem}rem)`\n };\n});\n\n// Mobile detection\nconst isMobile = ref(typeof window !== 'undefined' ? window.innerWidth < 768 : false);\nconst updateIsMobile = () => { isMobile.value = window.innerWidth < 768; };\n\n// Filtered days based on mobile/desktop\nconst filteredDays = computed(() => {\n if (isMobile.value && activeDay.value) {\n return [activeDay.value];\n }\n return props.days || [];\n});\n\n// Set active day\nconst setActiveDay = (day: CalendarDay) => {\n activeDay.value = day;\n};\n\n// Event placement types\ntype Placed = { \n event: ListEvent; \n leftPercent: number; \n widthPercent: number; \n startIso: string; \n endIso?: string; \n isStart: boolean; \n isEnd: boolean;\n};\n\n// Responsive cap for side-by-side columns\nconst getMaxVisibleColumns = (): number => {\n if (typeof window === 'undefined') return 3;\n const w = window.innerWidth;\n if (w >= 1280) return 3;\n if (w >= 1024) return 2;\n return 1;\n};\n\nconst MAX_VISIBLE_COLUMNS = ref(getMaxVisibleColumns());\nconst handleResize = () => MAX_VISIBLE_COLUMNS.value = getMaxVisibleColumns();\n\n// Convert ISO to minutes since midnight\nconst toMinutes = (iso?: string): number => {\n if (!iso) return 0;\n const d = new Date(iso);\n return d.getHours() * 60 + d.getMinutes();\n};\n\n// Clamp an event to a specific day\nconst clampEventToDay = (dayKey: string, event: ListEvent): { startIso: string; endIso?: string; isStart: boolean; isEnd: boolean } => {\n const start = event.startTime?.dateTime || event.datetime;\n const end = event.endTime?.dateTime || event.datetime;\n const startDate = new Date(start);\n const endDate = end ? new Date(end) : undefined;\n\n const [y, m, d] = dayKey.split('-').map((n: string) => Number(n));\n const dayStart = new Date(y, (m - 1), d, 0, 0, 0, 0);\n const dayEnd = new Date(y, (m - 1), d, 23, 59, 59, 999);\n\n const clampedStart = new Date(Math.max(dayStart.getTime(), startDate.getTime()));\n const clampedEnd = endDate\n ? new Date(Math.min(dayEnd.getTime(), endDate.getTime()))\n : new Date(Math.min(dayEnd.getTime(), clampedStart.getTime() + 30 * 60 * 1000));\n\n const isStart = clampedStart.getTime() === startDate.getTime();\n const isEnd = endDate ? clampedEnd.getTime() === endDate.getTime() : false;\n\n return { startIso: clampedStart.toISOString(), endIso: clampedEnd?.toISOString(), isStart, isEnd };\n};\n\ntype Internal = { event: ListEvent; start: number; end: number; col: number; cluster: number; isStart: boolean; isEnd: boolean; _startIso: string; _endIso?: string };\n\n// Build event placement for a day\nconst buildPlacement = (dayKey: string, events?: ListEvent[]): { placed: Placed[]; overflow: number; hidden: Internal[] } => {\n const list: Internal[] = (events || []).map(e => {\n const { startIso, endIso, isStart, isEnd } = clampEventToDay(dayKey, e);\n return {\n event: e,\n start: toMinutes(startIso),\n end: toMinutes(endIso) || toMinutes(startIso) + 30,\n col: 0,\n cluster: 0,\n _startIso: startIso,\n _endIso: endIso,\n isStart,\n isEnd,\n };\n }).sort((a, b) => a.start - b.start);\n\n const placed: Placed[] = [];\n let active: Internal[] = [];\n let clusterIndex = -1;\n const clusterMaxCol: number[] = [];\n\n list.forEach(item => {\n active = active.filter(a => a.end > item.start);\n if (active.length === 0) {\n clusterIndex += 1;\n clusterMaxCol[clusterIndex] = 0;\n }\n const usedCols = new Set(active.map(a => a.col));\n let col = 0;\n while (usedCols.has(col)) col += 1;\n item.col = col;\n item.cluster = clusterIndex;\n clusterMaxCol[clusterIndex] = Math.max(clusterMaxCol[clusterIndex], col + 1);\n active.push(item);\n });\n\n let overflow = 0;\n const hidden: Internal[] = [];\n \n list.forEach(item => {\n const total = clusterMaxCol[item.cluster] || 1;\n const visibleCols = Math.min(total, MAX_VISIBLE_COLUMNS.value);\n const GUTTER = 1.5;\n const EDGE_PADDING = 1.5;\n const width = (100 - 2 * EDGE_PADDING - GUTTER * Math.max(0, visibleCols - 1)) / visibleCols;\n \n if (item.col >= MAX_VISIBLE_COLUMNS.value) {\n overflow += 1;\n hidden.push(item);\n return;\n }\n \n const left = EDGE_PADDING + item.col * (width + GUTTER);\n placed.push({\n event: item.event,\n leftPercent: left,\n widthPercent: width,\n startIso: item._startIso,\n endIso: item._endIso,\n isStart: item.isStart,\n isEnd: item.isEnd,\n });\n });\n\n return { placed, overflow, hidden };\n};\n\nconst visiblePlaced = (dayKey: string, events?: ListEvent[]): Placed[] => buildPlacement(dayKey, events).placed;\nconst overflowCount = (dayKey: string, events?: ListEvent[]): number => buildPlacement(dayKey, events).overflow;\nconst hiddenTooltip = (dayKey: string, events?: ListEvent[]): string => \n buildPlacement(dayKey, events).hidden.map(h => String(h.event?.name || '')).filter(Boolean).join(', ');\n\n// Check if event is compact (short duration)\nconst isCompact = (startIso: string, endIso?: string): boolean => {\n const span = calculateGridSpan(startIso, endIso);\n return span <= 8; // <= 40 minutes\n};\n\n// Column class helper\nconst columnClasses = ['sl-col-start-1', 'sl-col-start-2', 'sl-col-start-3', 'sl-col-start-4', 'sl-col-start-5', 'sl-col-start-6', 'sl-col-start-7'];\nconst getColumnClass = (dayIndex: number): string => {\n return columnClasses[dayIndex] || 'sl-col-start-1';\n};\n\n// Navigate to day view\nconst goToDay = (day: CalendarDay): void => {\n setActiveDay(day);\n emit('selectDay', day);\n};\n\nconst handleSelectEvent = (eventId: string | number) => {\n emit('select:event', eventId);\n};\n\n// Scroll to current time\nconst scrollToCurrentTime = () => {\n const containerElement = container.value;\n const containerNavElement = containerNav.value;\n \n if (!containerElement || !containerNavElement) return;\n \n const now = new Date();\n const currentMinute = now.getHours() * 60 + now.getMinutes();\n \n const scrollableHeight = containerElement.scrollHeight - containerNavElement.offsetHeight;\n const targetPosition = (scrollableHeight * currentMinute) / 1440;\n const offsetForVisibility = containerElement.clientHeight / 3;\n \n containerElement.scrollTo({\n top: Math.max(0, targetPosition - offsetForVisibility),\n behavior: 'smooth'\n });\n};\n\n// Start time updates\nconst startTimeUpdates = () => {\n timeUpdateInterval = setInterval(() => {\n currentTime.value = new Date();\n }, 60000);\n \n const now = new Date();\n const msUntilNextMinute = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();\n setTimeout(() => {\n currentTime.value = new Date();\n if (timeUpdateInterval) {\n clearInterval(timeUpdateInterval);\n }\n timeUpdateInterval = setInterval(() => {\n currentTime.value = new Date();\n }, 60000);\n }, msUntilNextMinute);\n};\n\nonMounted(async () => {\n startTimeUpdates();\n window.addEventListener('resize', updateIsMobile);\n window.addEventListener('resize', handleResize);\n \n await nextTick();\n setTimeout(() => {\n scrollToCurrentTime();\n }, 100);\n \n watch(isMobile, (newVal) => {\n if (!newVal) {\n const firstWithEvents = filteredDays.value.find((d: CalendarDay) => (d.events?.length || 0) > 0);\n if (firstWithEvents) setActiveDay(firstWithEvents);\n }\n });\n});\n\nonUnmounted(() => {\n window.removeEventListener('resize', updateIsMobile);\n window.removeEventListener('resize', handleResize);\n if (timeUpdateInterval) {\n clearInterval(timeUpdateInterval);\n timeUpdateInterval = null;\n }\n});\n</script>\n\n<style scoped>\n/* Column start classes for PurgeCSS */\n.sl-col-start-1 { grid-column-start: 1; }\n.sl-col-start-2 { grid-column-start: 2; }\n.sl-col-start-3 { grid-column-start: 3; }\n.sl-col-start-4 { grid-column-start: 4; }\n.sl-col-start-5 { grid-column-start: 5; }\n.sl-col-start-6 { grid-column-start: 6; }\n.sl-col-start-7 { grid-column-start: 7; }\n</style>\n"],"names":["props","__props","container","ref","containerNav","containerOffset","currentTimeIndicator","activeDay","currentTime","timeUpdateInterval","hours","emit","__emit","getSegment","useEventSegments","allEvents","computed","events","seen","day","event","eventId","separatedEvents","separateAllDayEvents","allDayEvents","hasAllDayEvents","dayKeys","d","allDayEventLanes","calculateEventLanes","allDayLanes","getAllDayEventsForDayAndLane","dayKey","lane","getAllDayBarClass","segment","base","shouldShowAllDayLabel","isDayToday","today","todayStr","isActiveDay","currentWeekIncludesToday","showCurrentTimeIndicator","currentTimeDisplay","minutes","currentTimeIndicatorStyle","now","totalMinutes","offsetPx","rowHeightRem","totalRows","percentOfDay","isMobile","updateIsMobile","filteredDays","setActiveDay","getMaxVisibleColumns","w","MAX_VISIBLE_COLUMNS","handleResize","toMinutes","iso","clampEventToDay","start","end","startDate","endDate","y","m","n","dayStart","dayEnd","clampedStart","clampedEnd","isStart","isEnd","buildPlacement","list","e","startIso","endIso","a","b","placed","active","clusterIndex","clusterMaxCol","item","usedCols","col","overflow","hidden","total","visibleCols","GUTTER","EDGE_PADDING","width","left","visiblePlaced","overflowCount","hiddenTooltip","h","isCompact","calculateGridSpan","columnClasses","getColumnClass","dayIndex","goToDay","handleSelectEvent","scrollToCurrentTime","containerElement","containerNavElement","currentMinute","targetPosition","offsetForVisibility","startTimeUpdates","msUntilNextMinute","onMounted","nextTick","watch","newVal","firstWithEvents","onUnmounted","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_Fragment","_renderList","$event","_toDisplayString","_hoisted_6","_normalizeClass","_hoisted_7","_cache","_","i","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","hour","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_normalizeStyle","_unref","calculateGridRow","_hoisted_22","_hoisted_23","_hoisted_24","formatTime","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"YearCalendar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BarChart.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseChart.js","sources":["../../node_modules/@heroicons/vue/24/outline/esm/ChartBarIcon.js","../../src/components/charts/BaseChart.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\"\n })\n ]))\n}","<!--\n @component BaseChart\n @description Base wrapper component for ECharts.\n \n Provides a consistent wrapper for all chart types with loading states,\n empty states, and theme integration.\n \n @props\n - option (EChartsOption, required): ECharts configuration object\n - height (string|number, optional): Chart height\n - width (string|number, optional): Chart width\n - autoresize (boolean, optional): Auto-resize on container change\n - loading (boolean, optional): Show loading state\n - loadingOptions (object, optional): Loading indicator options\n - containerClass (string, optional): Additional container classes\n - theme (string, optional): Theme variant - 'light' | 'dark'\n - emptyTitle (string, optional): Empty state title\n - emptyDescription (string, optional): Empty state description\n - emptyIcon (Component, optional): Empty state icon\n \n @emits\n - click: Emitted when chart element is clicked\n - legendselectchanged: Emitted when legend selection changes\n - ready: Emitted when chart is ready, payload is chart instance\n \n @example\n <BaseChart\n :option=\"chartOption\"\n :height=\"400\"\n @click=\"handleChartClick\"\n />\n-->\n<template>\n <div ref=\"chartContainer\" :class=\"containerClass\" :style=\"containerStyle\">\n <VChart\n v-if=\"hasData\"\n ref=\"chartRef\"\n :option=\"mergedOptions\"\n :autoresize=\"autoresize\"\n :loading=\"loading\"\n :loading-options=\"computedLoadingOptions\"\n @click=\"handleClick\"\n @legendselectchanged=\"handleLegendChange\"\n />\n <!-- Empty State -->\n <div v-else class=\"sl-flex sl-items-center sl-justify-center sl-h-full\">\n <div class=\"sl-text-center\">\n <component \n :is=\"emptyIcon\" \n class=\"sl-mx-auto sl-h-12 sl-w-12 sl-text-gray-300 dark:sl-text-slate-600\" \n />\n <h3 class=\"sl-mt-2 sl-text-sm sl-font-medium sl-text-gray-900 dark:sl-text-white\">\n {{ emptyTitle }}\n </h3>\n <p class=\"sl-mt-1 sl-text-sm sl-text-gray-500 dark:sl-text-slate-400\">\n {{ emptyDescription }}\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, provide, type Component } from 'vue';\nimport VChart from 'vue-echarts';\nimport { use } from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport {\n LineChart,\n BarChart,\n PieChart,\n FunnelChart,\n ScatterChart,\n} from 'echarts/charts';\nimport {\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GridComponent,\n DataZoomComponent,\n} from 'echarts/components';\nimport type { EChartsOption } from 'echarts';\nimport { baseTheme, chartColors } from './chartTheme';\nimport { ChartBarIcon } from '@heroicons/vue/24/outline';\n\n// Register ECharts components\nuse([\n CanvasRenderer,\n LineChart,\n BarChart,\n PieChart,\n FunnelChart,\n ScatterChart,\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GridComponent,\n DataZoomComponent,\n]);\n\ninterface Props {\n option: EChartsOption;\n height?: string | number;\n width?: string | number;\n autoresize?: boolean;\n loading?: boolean;\n loadingOptions?: Record<string, unknown>;\n containerClass?: string;\n theme?: 'light' | 'dark';\n emptyTitle?: string;\n emptyDescription?: string;\n emptyIcon?: Component;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n height: 300,\n width: '100%',\n autoresize: true,\n loading: false,\n loadingOptions: () => ({}),\n containerClass: '',\n theme: 'light',\n emptyTitle: 'No data available',\n emptyDescription: 'Data will appear here once available.',\n emptyIcon: () => ChartBarIcon,\n});\n\nconst emit = defineEmits<{\n click: [params: unknown];\n legendselectchanged: [params: unknown];\n ready: [chart: unknown];\n}>();\n\nconst chartContainer = ref<HTMLElement | null>(null);\nconst chartRef = ref<InstanceType<typeof VChart> | null>(null);\n\nconst containerStyle = computed(() => ({\n height: typeof props.height === 'number' ? `${props.height}px` : props.height,\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n}));\n\nconst computedLoadingOptions = computed(() => ({\n text: 'Loading...',\n color: chartColors.primary[0],\n textColor: '#6b7280',\n maskColor: 'rgba(255, 255, 255, 0.8)',\n ...props.loadingOptions,\n}));\n\nconst hasData = computed(() => {\n const option = props.option;\n if (!option) return false;\n \n const series = option.series;\n if (!series) return false;\n \n if (Array.isArray(series)) {\n return series.some(s => {\n const data = (s as Record<string, unknown>).data;\n return Array.isArray(data) && data.length > 0;\n });\n }\n \n const data = (series as Record<string, unknown>).data;\n return Array.isArray(data) && data.length > 0;\n});\n\nconst mergedOptions = computed<EChartsOption>(() => {\n return {\n ...baseTheme,\n ...props.option,\n textStyle: {\n ...(baseTheme.textStyle || {}),\n ...((props.option as Record<string, unknown>)?.textStyle as Record<string, unknown> || {}),\n },\n tooltip: {\n ...(baseTheme.tooltip || {}),\n ...((props.option as Record<string, unknown>)?.tooltip as Record<string, unknown> || {}),\n },\n grid: {\n ...(baseTheme.grid || {}),\n ...((props.option as Record<string, unknown>)?.grid as Record<string, unknown> || {}),\n },\n };\n});\n\nconst handleClick = (params: unknown): void => {\n emit('click', params);\n};\n\nconst handleLegendChange = (params: unknown): void => {\n emit('legendselectchanged', params);\n};\n\ndefineExpose({\n getChart: () => chartRef.value?.chart,\n resize: () => chartRef.value?.resize(),\n setOption: (option: EChartsOption) => chartRef.value?.setOption(option),\n});\n\nonMounted(() => {\n if (chartRef.value?.chart) {\n emit('ready', chartRef.value.chart);\n }\n});\n\nprovide('chartTheme', props.theme);\n</script>\n\n<style scoped>\n:deep(.echarts) {\n width: 100% !important;\n height: 100% !important;\n}\n</style>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","use","CanvasRenderer","LineChart","BarChart","PieChart","FunnelChart","ScatterChart","TitleComponent","TooltipComponent","LegendComponent","GridComponent","DataZoomComponent","props","__props","emit","__emit","chartContainer","ref","chartRef","containerStyle","computed","computedLoadingOptions","chartColors","hasData","option","series","s","data","mergedOptions","baseTheme","handleClick","params","handleLegendChange","__expose","onMounted","provide","_createBlock","_unref","VChart","_hoisted_1","_hoisted_2","_resolveDynamicComponent","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FunnelChart.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LineChart.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PieChart.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SparklineChart.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatCard.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chartTheme.js","sources":["../../src/components/charts/chartTheme.ts"],"sourcesContent":["/**\n * ECharts Theme Configuration\n * \n * Tailwind-compatible theme for ECharts that matches the stachelock design system.\n */\n\nimport type { EChartsOption } from 'echarts';\n\n// Color Palette (matches stachelock colors)\nexport const stachelockColors = {\n 900: '#0f1326',\n 800: '#1f264d',\n 700: '#2e3873',\n 600: '#3e4b9a', // Primary\n 500: '#4d5ec0',\n 400: '#717ecd',\n 300: '#949ed9',\n 200: '#b8bfe6',\n 100: '#dbdff2',\n '050': '#edeff9',\n};\n\n// Chart-specific color palette for data visualization\nexport const chartColors = {\n primary: [\n '#3e4b9a', // stachelock-600\n '#6366f1', // indigo-500\n '#8b5cf6', // violet-500\n '#a855f7', // purple-500\n '#ec4899', // pink-500\n '#f43f5e', // rose-500\n ],\n success: '#10b981', // emerald-500\n warning: '#f59e0b', // amber-500\n danger: '#ef4444', // red-500\n info: '#3b82f6', // blue-500\n neutral: '#6b7280', // gray-500\n \n // Gradient colors for area charts\n gradientStart: 'rgba(62, 75, 154, 0.4)',\n gradientEnd: 'rgba(62, 75, 154, 0.05)',\n};\n\n// Typography\nexport const chartTypography = {\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n title: {\n fontSize: 16,\n fontWeight: 600,\n color: '#111827', // gray-900\n },\n subtitle: {\n fontSize: 14,\n fontWeight: 400,\n color: '#6b7280', // gray-500\n },\n label: {\n fontSize: 12,\n fontWeight: 400,\n color: '#374151', // gray-700\n },\n axis: {\n fontSize: 11,\n fontWeight: 400,\n color: '#9ca3af', // gray-400\n },\n};\n\n// Base Theme Configuration\nexport const baseTheme: Partial<EChartsOption> = {\n color: chartColors.primary,\n backgroundColor: 'transparent',\n textStyle: {\n fontFamily: chartTypography.fontFamily,\n color: chartTypography.label.color,\n },\n title: {\n textStyle: {\n color: chartTypography.title.color,\n fontSize: chartTypography.title.fontSize,\n fontWeight: chartTypography.title.fontWeight as 'normal' | 'bold' | 'bolder' | 'lighter' | number,\n fontFamily: chartTypography.fontFamily,\n },\n subtextStyle: {\n color: chartTypography.subtitle.color,\n fontSize: chartTypography.subtitle.fontSize,\n fontFamily: chartTypography.fontFamily,\n },\n left: 0,\n top: 0,\n },\n grid: {\n left: 12,\n right: 12,\n top: 40,\n bottom: 12,\n containLabel: true,\n },\n xAxis: {\n axisLine: {\n show: true,\n lineStyle: {\n color: '#e5e7eb', // gray-200\n },\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: chartTypography.axis.color,\n fontSize: chartTypography.axis.fontSize,\n fontFamily: chartTypography.fontFamily,\n },\n splitLine: {\n show: false,\n },\n },\n yAxis: {\n axisLine: {\n show: false,\n },\n axisTick: {\n show: false,\n },\n axisLabel: {\n color: chartTypography.axis.color,\n fontSize: chartTypography.axis.fontSize,\n fontFamily: chartTypography.fontFamily,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: '#f3f4f6', // gray-100\n type: 'dashed',\n },\n },\n },\n legend: {\n icon: 'circle',\n itemWidth: 8,\n itemHeight: 8,\n itemGap: 16,\n textStyle: {\n color: chartTypography.label.color,\n fontSize: chartTypography.label.fontSize,\n fontFamily: chartTypography.fontFamily,\n },\n top: 0,\n right: 0,\n },\n tooltip: {\n trigger: 'axis',\n backgroundColor: '#ffffff',\n borderColor: '#e5e7eb',\n borderWidth: 1,\n borderRadius: 8,\n padding: [12, 16],\n textStyle: {\n color: chartTypography.label.color,\n fontSize: chartTypography.label.fontSize,\n fontFamily: chartTypography.fontFamily,\n },\n axisPointer: {\n type: 'line',\n lineStyle: {\n color: '#d1d5db', // gray-300\n type: 'dashed',\n },\n },\n extraCssText: 'box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);',\n },\n};\n\n// Chart-Specific Configurations\nexport const lineChartConfig: Partial<EChartsOption> = {\n ...baseTheme,\n};\n\nexport const areaChartConfig: Partial<EChartsOption> = {\n ...baseTheme,\n};\n\nexport const barChartConfig: Partial<EChartsOption> = {\n ...baseTheme,\n};\n\nexport const pieChartConfig: Partial<EChartsOption> = {\n ...baseTheme,\n};\n\nexport const funnelChartConfig: Partial<EChartsOption> = {\n ...baseTheme,\n};\n\n// Utility Functions\n\n/**\n * Convert hex color to RGB values\n */\nexport const hexToRgb = (hex: string): { r: number; g: number; b: number } | null => {\n const cleanHex = hex.replace('#', '');\n \n let fullHex = cleanHex;\n if (cleanHex.length === 3) {\n fullHex = cleanHex.split('').map(c => c + c).join('');\n }\n \n const result = /^([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(fullHex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : null;\n};\n\n/**\n * Convert any color (hex or rgb) to rgba string\n */\nexport const toRgba = (color: string, alpha: number): string => {\n if (color.startsWith('rgb')) {\n const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (match) {\n return `rgba(${match[1]}, ${match[2]}, ${match[3]}, ${alpha})`;\n }\n }\n \n const rgb = hexToRgb(color);\n if (rgb) {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n }\n \n return `rgba(0, 0, 0, ${alpha})`;\n};\n\n/**\n * Get gradient color for area charts\n */\nexport const getAreaGradient = (color: string = chartColors.primary[0]) => ({\n type: 'linear' as const,\n x: 0,\n y: 0,\n x2: 0,\n y2: 1,\n colorStops: [\n { offset: 0, color: toRgba(color, 0.4) },\n { offset: 1, color: toRgba(color, 0.05) },\n ],\n});\n\n/**\n * Format number with abbreviation (K, M, B)\n */\nexport const formatNumber = (value: number): string => {\n if (value >= 1000000000) {\n return (value / 1000000000).toFixed(1) + 'B';\n }\n if (value >= 1000000) {\n return (value / 1000000).toFixed(1) + 'M';\n }\n if (value >= 1000) {\n return (value / 1000).toFixed(1) + 'K';\n }\n return value.toString();\n};\n\n/**\n * Format percentage\n */\nexport const formatPercentage = (value: number, decimals: number = 1): string => {\n return (value * 100).toFixed(decimals) + '%';\n};\n\n/**\n * Format duration in seconds to human readable\n */\nexport const formatDuration = (seconds: number): string => {\n if (seconds < 60) {\n return `${Math.round(seconds)}s`;\n }\n if (seconds < 3600) {\n const mins = Math.floor(seconds / 60);\n const secs = Math.round(seconds % 60);\n return secs > 0 ? `${mins}m ${secs}s` : `${mins}m`;\n }\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;\n};\n\nexport default {\n stachelockColors,\n chartColors,\n chartTypography,\n baseTheme,\n lineChartConfig,\n areaChartConfig,\n barChartConfig,\n pieChartConfig,\n funnelChartConfig,\n hexToRgb,\n toRgba,\n getAreaGradient,\n formatNumber,\n formatPercentage,\n formatDuration,\n};\n\n"],"names":["stachelockColors","chartColors","chartTypography","baseTheme","lineChartConfig","areaChartConfig","barChartConfig","pieChartConfig","funnelChartConfig","hexToRgb","hex","cleanHex","fullHex","c","result","toRgba","color","alpha","match","rgb","getAreaGradient","formatNumber","value","formatPercentage","decimals","formatDuration","seconds","mins","secs","hours","chartTheme"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Avatar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Badge.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Banner.js","sources":["../../node_modules/@heroicons/vue/24/outline/esm/BellIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/FireIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/GiftIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/HeartIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/LightBulbIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/MegaphoneIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/RocketLaunchIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/ShieldCheckIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/SparklesIcon.js","../../node_modules/@heroicons/vue/24/outline/esm/StarIcon.js","../../src/components/UiBanner.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M15.362 5.214A8.252 8.252 0 0 1 12 21 8.25 8.25 0 0 1 6.038 7.047 8.287 8.287 0 0 0 9 9.601a8.983 8.983 0 0 1 3.361-6.867 8.21 8.21 0 0 0 3 2.48Z\"\n }),\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M12 18a3.75 3.75 0 0 0 .495-7.468 5.99 5.99 0 0 0-1.925 3.547 5.975 5.975 0 0 1-2.133-1.001A3.75 3.75 0 0 0 12 18Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M21 11.25v8.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 1 0 9.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1 1 14.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M12 18v-5.25m0 0a6.01 6.01 0 0 0 1.5-.189m-1.5.189a6.01 6.01 0 0 1-1.5-.189m3.75 7.478a12.06 12.06 0 0 1-4.5 0m3.75 2.383a14.406 14.406 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 0 8.835-2.535m0 0A23.74 23.74 0 0 0 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M15.59 14.37a6 6 0 0 1-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.926 14.926 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 0 0-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 0 1-2.448-2.448 14.9 14.9 0 0 1 .06-.312m-2.24 2.39a4.493 4.493 0 0 0-1.757 4.306 4.493 4.493 0 0 0 4.306-1.758M16.5 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z\"\n })\n ]))\n}","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.563.563 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.562.562 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.562.562 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.563.563 0 0 0 .475-.345L11.48 3.5Z\"\n })\n ]))\n}","<!--\n @component UiBanner\n @description A flexible banner component for announcements, alerts, and notifications.\n \n Designed with extensive slot support for maximum customization. Can be used\n for app-wide announcements, inline alerts, or dismissible notifications.\n \n @props\n - theme (BannerTheme, optional): Visual theme - 'info', 'success', 'warning', 'error', 'primary', 'secondary'\n - position (string, optional): Position mode - 'inline', 'top', 'bottom'\n - sticky (boolean, optional): Whether banner sticks to viewport\n - dismissible (boolean, optional): Show dismiss button\n - icon (string, optional): Icon name from presets or custom via slot\n - showIcon (boolean, optional): Whether to show the icon\n - modelValue (boolean, optional): Control visibility via v-model\n - actions (BannerAction[], optional): Action buttons configuration\n - content (string, optional): Banner text content (alternative to default slot)\n - animated (boolean, optional): Enable enter/leave animations\n \n @slots\n - default: Main content area\n - icon: Custom icon component\n - leading: Content before main text\n - trailing: Content after main text (before actions)\n - actions: Custom action buttons\n - dismiss: Custom dismiss button\n \n @emits\n - update:modelValue: When visibility changes\n - dismiss: When banner is dismissed\n - action: When an action button is clicked\n \n @example Basic usage\n <UiBanner theme=\"info\">\n Welcome to our platform! Check out the new features.\n </UiBanner>\n \n @example With actions\n <UiBanner \n theme=\"warning\" \n dismissible\n :actions=\"[{ label: 'Learn More', action: 'link', href: '/docs' }]\"\n >\n Your session will expire in 5 minutes.\n </UiBanner>\n \n @example Fully slotted\n <UiBanner theme=\"primary\" v-model=\"showBanner\">\n <template #icon>\n <RocketIcon class=\"h-5 w-5\" />\n </template>\n <template #default>\n <strong>New Feature!</strong> Try our improved dashboard.\n </template>\n <template #actions>\n <button @click=\"explore\">Explore Now</button>\n </template>\n </UiBanner>\n-->\n<template>\n <Transition\n v-if=\"animated\"\n :enter-active-class=\"transitionClasses.enterActive\"\n :enter-from-class=\"transitionClasses.enterFrom\"\n :enter-to-class=\"transitionClasses.enterTo\"\n :leave-active-class=\"transitionClasses.leaveActive\"\n :leave-from-class=\"transitionClasses.leaveFrom\"\n :leave-to-class=\"transitionClasses.leaveTo\"\n >\n <div v-if=\"isVisible\" :class=\"containerClasses\" :style=\"containerStyles\">\n <div :class=\"innerClasses\">\n <!-- Icon Section -->\n <div v-if=\"showIcon || $slots.icon\" class=\"sl-flex-shrink-0\">\n <slot name=\"icon\">\n <component \n v-if=\"iconComponent\" \n :is=\"iconComponent\" \n :class=\"iconClasses\" \n aria-hidden=\"true\" \n />\n </slot>\n </div>\n\n <!-- Leading Slot -->\n <slot name=\"leading\" />\n\n <!-- Main Content -->\n <div class=\"sl-flex-1 sl-min-w-0\">\n <div :class=\"contentClasses\">\n <slot>{{ content }}</slot>\n </div>\n </div>\n\n <!-- Trailing Slot -->\n <slot name=\"trailing\" />\n\n <!-- Actions Section -->\n <div v-if=\"hasActions\" class=\"sl-flex sl-items-center sl-gap-2 sl-flex-shrink-0\">\n <slot name=\"actions\">\n <template v-for=\"action in actions\" :key=\"action.label\">\n <button\n type=\"button\"\n :class=\"getActionButtonClasses(action)\"\n @click=\"handleAction(action)\"\n >\n {{ action.label }}\n </button>\n </template>\n </slot>\n </div>\n\n <!-- Dismiss Button -->\n <div v-if=\"dismissible\" class=\"sl-flex-shrink-0 sl-ml-2\">\n <slot name=\"dismiss\">\n <button\n type=\"button\"\n :class=\"dismissButtonClasses\"\n @click=\"handleDismiss\"\n >\n <span class=\"sl-sr-only\">Dismiss</span>\n <XMarkIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </button>\n </slot>\n </div>\n </div>\n </div>\n </Transition>\n\n <!-- Non-animated version -->\n <div v-else-if=\"isVisible\" :class=\"containerClasses\" :style=\"containerStyles\">\n <div :class=\"innerClasses\">\n <!-- Icon Section -->\n <div v-if=\"showIcon || $slots.icon\" class=\"sl-flex-shrink-0\">\n <slot name=\"icon\">\n <component \n v-if=\"iconComponent\" \n :is=\"iconComponent\" \n :class=\"iconClasses\" \n aria-hidden=\"true\" \n />\n </slot>\n </div>\n\n <!-- Leading Slot -->\n <slot name=\"leading\" />\n\n <!-- Main Content -->\n <div class=\"sl-flex-1 sl-min-w-0\">\n <div :class=\"contentClasses\">\n <slot>{{ content }}</slot>\n </div>\n </div>\n\n <!-- Trailing Slot -->\n <slot name=\"trailing\" />\n\n <!-- Actions Section -->\n <div v-if=\"hasActions\" class=\"sl-flex sl-items-center sl-gap-2 sl-flex-shrink-0\">\n <slot name=\"actions\">\n <template v-for=\"action in actions\" :key=\"action.label\">\n <button\n type=\"button\"\n :class=\"getActionButtonClasses(action)\"\n @click=\"handleAction(action)\"\n >\n {{ action.label }}\n </button>\n </template>\n </slot>\n </div>\n\n <!-- Dismiss Button -->\n <div v-if=\"dismissible\" class=\"sl-flex-shrink-0 sl-ml-2\">\n <slot name=\"dismiss\">\n <button\n type=\"button\"\n :class=\"dismissButtonClasses\"\n @click=\"handleDismiss\"\n >\n <span class=\"sl-sr-only\">Dismiss</span>\n <XMarkIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </button>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * UiBanner - Flexible banner/alert component\n * \n * Provides a highly customizable banner system with:\n * - Multiple theme variants\n * - Position modes (inline, fixed top/bottom)\n * - Extensive slot support for customization\n * - Action buttons with callbacks\n * - Animated transitions\n * \n * @module components/UiBanner\n */\nimport { computed, ref, watch, useSlots, type Component } from 'vue';\nimport { XMarkIcon } from '@heroicons/vue/20/solid';\nimport {\n InformationCircleIcon,\n CheckCircleIcon,\n ExclamationTriangleIcon,\n ExclamationCircleIcon,\n SparklesIcon,\n RocketLaunchIcon,\n MegaphoneIcon,\n BellIcon,\n StarIcon,\n HeartIcon,\n LightBulbIcon,\n ShieldCheckIcon,\n FireIcon,\n GiftIcon,\n} from '@heroicons/vue/24/outline';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type BannerTheme = 'info' | 'success' | 'warning' | 'error' | 'primary' | 'secondary' | 'dark';\nexport type BannerPosition = 'inline' | 'top' | 'bottom';\n\nexport interface BannerAction {\n /** Button label */\n label: string;\n /** Action type */\n action: 'dismiss' | 'link' | 'callback';\n /** URL for link actions */\n href?: string;\n /** Target for link actions */\n target?: '_blank' | '_self';\n /** Callback function */\n callback?: () => void;\n /** Button theme */\n theme?: 'primary' | 'secondary' | 'white' | 'danger';\n}\n\n// =============================================================================\n// Props\n// =============================================================================\n\nconst props = withDefaults(defineProps<{\n /** Visual theme variant */\n theme?: BannerTheme;\n /** Position mode */\n position?: BannerPosition;\n /** Sticky positioning */\n sticky?: boolean;\n /** Show dismiss button */\n dismissible?: boolean;\n /** Icon name or false to hide */\n icon?: string | false;\n /** Show icon (auto-detected if icon prop set) */\n showIcon?: boolean;\n /** v-model visibility control */\n modelValue?: boolean;\n /** Action buttons */\n actions?: BannerAction[];\n /** Text content (alternative to slot) */\n content?: string;\n /** Enable animations */\n animated?: boolean;\n /** Full width mode */\n fullWidth?: boolean;\n /** Rounded corners */\n rounded?: boolean;\n /** Custom z-index */\n zIndex?: number;\n /** Compact mode with less padding */\n compact?: boolean;\n /** Centered content */\n centered?: boolean;\n}>(), {\n theme: 'info',\n position: 'inline',\n sticky: false,\n dismissible: false,\n icon: undefined,\n showIcon: true,\n modelValue: true,\n actions: () => [],\n content: '',\n animated: true,\n fullWidth: true,\n rounded: false,\n zIndex: 50,\n compact: false,\n centered: false,\n});\n\n// =============================================================================\n// Emits\n// =============================================================================\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n (e: 'dismiss'): void;\n (e: 'action', action: BannerAction): void;\n}>();\n\n// =============================================================================\n// State\n// =============================================================================\n\nconst slots = useSlots();\nconst internalVisible = ref(props.modelValue);\n\n// Sync with v-model\nwatch(() => props.modelValue, (val) => {\n internalVisible.value = val;\n});\n\nconst isVisible = computed({\n get: () => internalVisible.value,\n set: (val) => {\n internalVisible.value = val;\n emit('update:modelValue', val);\n }\n});\n\n// =============================================================================\n// Icon Configuration\n// =============================================================================\n\nconst iconMap: Record<string, Component> = {\n 'info': InformationCircleIcon,\n 'information': InformationCircleIcon,\n 'success': CheckCircleIcon,\n 'check': CheckCircleIcon,\n 'warning': ExclamationTriangleIcon,\n 'error': ExclamationCircleIcon,\n 'danger': ExclamationCircleIcon,\n 'sparkles': SparklesIcon,\n 'rocket': RocketLaunchIcon,\n 'megaphone': MegaphoneIcon,\n 'bell': BellIcon,\n 'star': StarIcon,\n 'heart': HeartIcon,\n 'lightbulb': LightBulbIcon,\n 'shield': ShieldCheckIcon,\n 'fire': FireIcon,\n 'gift': GiftIcon,\n};\n\nconst defaultIconForTheme: Record<BannerTheme, string> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n error: 'error',\n primary: 'megaphone',\n secondary: 'info',\n dark: 'info',\n};\n\nconst iconComponent = computed(() => {\n if (props.icon === false) return null;\n const iconName = props.icon || defaultIconForTheme[props.theme];\n return iconMap[iconName] || null;\n});\n\n// =============================================================================\n// Theme Styles\n// =============================================================================\n\nconst themeStyles: Record<BannerTheme, {\n bg: string;\n text: string;\n icon: string;\n border?: string;\n dismissHover: string;\n}> = {\n info: {\n bg: 'sl-bg-blue-600',\n text: 'sl-text-white',\n icon: 'sl-text-blue-200',\n dismissHover: 'hover:sl-bg-blue-500',\n },\n success: {\n bg: 'sl-bg-green-600',\n text: 'sl-text-white',\n icon: 'sl-text-green-200',\n dismissHover: 'hover:sl-bg-green-500',\n },\n warning: {\n bg: 'sl-bg-yellow-500',\n text: 'sl-text-yellow-900',\n icon: 'sl-text-yellow-800',\n dismissHover: 'hover:sl-bg-yellow-400',\n },\n error: {\n bg: 'sl-bg-red-600',\n text: 'sl-text-white',\n icon: 'sl-text-red-200',\n dismissHover: 'hover:sl-bg-red-500',\n },\n primary: {\n bg: 'sl-bg-stachelock-600',\n text: 'sl-text-white',\n icon: 'sl-text-white/80',\n dismissHover: 'hover:sl-bg-stachelock-500',\n },\n secondary: {\n bg: 'sl-bg-gray-600',\n text: 'sl-text-white',\n icon: 'sl-text-gray-300',\n dismissHover: 'hover:sl-bg-gray-500',\n },\n dark: {\n bg: 'sl-bg-gray-900 dark:sl-bg-gray-800',\n text: 'sl-text-white',\n icon: 'sl-text-gray-400',\n dismissHover: 'hover:sl-bg-gray-800 dark:hover:sl-bg-gray-700',\n },\n};\n\n// =============================================================================\n// Computed Classes\n// =============================================================================\n\nconst containerClasses = computed(() => {\n const theme = themeStyles[props.theme];\n const classes = [\n theme.bg,\n theme.text,\n ];\n\n // Position classes\n if (props.position === 'top') {\n classes.push('sl-fixed sl-top-0 sl-left-0 sl-right-0');\n } else if (props.position === 'bottom') {\n classes.push('sl-fixed sl-bottom-0 sl-left-0 sl-right-0');\n }\n\n // Sticky\n if (props.sticky && props.position === 'inline') {\n classes.push('sl-sticky sl-top-0');\n }\n\n // Width\n if (props.fullWidth) {\n classes.push('sl-w-full');\n }\n\n // Rounded\n if (props.rounded && props.position === 'inline') {\n classes.push('sl-rounded-lg');\n }\n\n // Z-index handled via style\n\n return classes.join(' ');\n});\n\nconst containerStyles = computed(() => ({\n zIndex: props.zIndex,\n}));\n\nconst innerClasses = computed(() => {\n const classes = [\n 'sl-flex',\n 'sl-items-center',\n 'sl-gap-x-4',\n ];\n\n // Padding\n if (props.compact) {\n classes.push('sl-px-4 sl-py-2');\n } else {\n classes.push('sl-px-6 sl-py-3 sm:sl-px-4');\n }\n\n // Centered\n if (props.centered) {\n classes.push('sl-justify-center');\n }\n\n return classes.join(' ');\n});\n\nconst iconClasses = computed(() => {\n const theme = themeStyles[props.theme];\n return `sl-h-5 sl-w-5 ${theme.icon}`;\n});\n\nconst contentClasses = computed(() => {\n return 'sl-text-sm sl-leading-6';\n});\n\nconst dismissButtonClasses = computed(() => {\n const theme = themeStyles[props.theme];\n return [\n 'sl--m-1.5 sl-p-1.5',\n 'sl-rounded-md',\n 'sl-transition-colors',\n 'focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-white/50',\n theme.dismissHover,\n ].join(' ');\n});\n\n// =============================================================================\n// Transition Classes\n// =============================================================================\n\nconst transitionClasses = computed(() => {\n const vertical = props.position === 'bottom' ? 'sl-translate-y-full' : 'sl--translate-y-full';\n \n return {\n enterActive: 'sl-transform sl-transition sl-duration-300 sl-ease-out',\n enterFrom: `sl-opacity-0 ${vertical}`,\n enterTo: 'sl-opacity-100 sl-translate-y-0',\n leaveActive: 'sl-transform sl-transition sl-duration-200 sl-ease-in',\n leaveFrom: 'sl-opacity-100 sl-translate-y-0',\n leaveTo: `sl-opacity-0 ${vertical}`,\n };\n});\n\n// =============================================================================\n// Action Helpers\n// =============================================================================\n\nconst hasActions = computed(() => {\n return (props.actions && props.actions.length > 0) || slots.actions;\n});\n\nfunction getActionButtonClasses(action: BannerAction): string {\n const base = 'sl-text-xs sl-font-semibold sl-rounded-md sl-px-3 sl-py-1.5 sl-transition-colors';\n \n const themeClasses: Record<string, string> = {\n primary: 'sl-bg-white sl-text-gray-900 hover:sl-bg-gray-100',\n secondary: 'sl-bg-white/20 sl-text-white hover:sl-bg-white/30',\n white: 'sl-bg-white sl-text-gray-900 hover:sl-bg-gray-100',\n danger: 'sl-bg-red-500 sl-text-white hover:sl-bg-red-600',\n };\n\n return `${base} ${themeClasses[action.theme || 'primary']}`;\n}\n\n// =============================================================================\n// Event Handlers\n// =============================================================================\n\nfunction handleDismiss() {\n isVisible.value = false;\n emit('dismiss');\n}\n\nfunction handleAction(action: BannerAction) {\n emit('action', action);\n \n if (action.action === 'dismiss') {\n handleDismiss();\n } else if (action.action === 'link' && action.href) {\n if (action.target === '_blank') {\n window.open(action.href, '_blank');\n } else {\n window.location.href = action.href;\n }\n } else if (action.action === 'callback' && action.callback) {\n action.callback();\n }\n}\n</script>\n\n<style scoped>\n/* Ensure fixed banners don't affect document flow */\n[class*=\"sl-fixed\"] {\n pointer-events: auto;\n}\n</style>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","props","__props","emit","__emit","slots","useSlots","internalVisible","ref","watch","val","isVisible","computed","iconMap","InformationCircleIcon","CheckCircleIcon","ExclamationTriangleIcon","ExclamationCircleIcon","SparklesIcon","RocketLaunchIcon","MegaphoneIcon","BellIcon","StarIcon","HeartIcon","LightBulbIcon","ShieldCheckIcon","FireIcon","GiftIcon","defaultIconForTheme","iconComponent","iconName","themeStyles","containerClasses","theme","classes","containerStyles","innerClasses","iconClasses","contentClasses","dismissButtonClasses","transitionClasses","vertical","hasActions","getActionButtonClasses","action","handleDismiss","handleAction","_createBlock","_Transition","$slots","_hoisted_1","_renderSlot","_resolveDynamicComponent","_hoisted_2","_hoisted_3","_Fragment","_renderList","_normalizeClass","$event","_toDisplayString","_hoisted_4","_hoisted_5","_createVNode","_unref","XMarkIcon","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10"],"mappings":";;;;;;AAEe,SAASA,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,IACDA,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;ACrBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;AChBe,SAASL,GAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoOA,UAAMC,IAAQC,GAqDRC,IAAOC,GAUPC,IAAQC,EAAA,GACRC,IAAkBC,EAAIP,EAAM,UAAU;AAG5C,IAAAQ,EAAM,MAAMR,EAAM,YAAY,CAACS,MAAQ;AACrC,MAAAH,EAAgB,QAAQG;AAAA,IAC1B,CAAC;AAED,UAAMC,IAAYC,EAAS;AAAA,MACzB,KAAK,MAAML,EAAgB;AAAA,MAC3B,KAAK,CAACG,MAAQ;AACZ,QAAAH,EAAgB,QAAQG,GACxBP,EAAK,qBAAqBO,CAAG;AAAA,MAC/B;AAAA,IAAA,CACD,GAMKG,IAAqC;AAAA,MACzC,MAAQC;AAAAA,MACR,aAAeA;AAAAA,MACf,SAAWC;AAAAA,MACX,OAASA;AAAAA,MACT,SAAWC;AAAAA,MACX,OAASC;AAAAA,MACT,QAAUA;AAAAA,MACV,UAAYC;AAAAA,MACZ,QAAUC;AAAAA,MACV,WAAaC;AAAAA,MACb,MAAQC;AAAAA,MACR,MAAQC;AAAAA,MACR,OAASC;AAAAA,MACT,WAAaC;AAAAA,MACb,QAAUC;AAAAA,MACV,MAAQC;AAAAA,MACR,MAAQC;AAAAA,IAAA,GAGJC,IAAmD;AAAA,MACvD,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AAAA,IAAA,GAGFC,IAAgBjB,EAAS,MAAM;AACnC,UAAIX,EAAM,SAAS,GAAO,QAAO;AACjC,YAAM6B,IAAW7B,EAAM,QAAQ2B,EAAoB3B,EAAM,KAAK;AAC9D,aAAOY,EAAQiB,CAAQ,KAAK;AAAA,IAC9B,CAAC,GAMKC,IAMD;AAAA,MACH,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,SAAS;AAAA,QACP,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,WAAW;AAAA,QACT,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,MAEhB,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,cAAc;AAAA,MAAA;AAAA,IAChB,GAOIC,IAAmBpB,EAAS,MAAM;AACtC,YAAMqB,IAAQF,EAAY9B,EAAM,KAAK,GAC/BiC,IAAU;AAAA,QACdD,EAAM;AAAA,QACNA,EAAM;AAAA,MAAA;AAIR,aAAIhC,EAAM,aAAa,QACrBiC,EAAQ,KAAK,wCAAwC,IAC5CjC,EAAM,aAAa,YAC5BiC,EAAQ,KAAK,2CAA2C,GAItDjC,EAAM,UAAUA,EAAM,aAAa,YACrCiC,EAAQ,KAAK,oBAAoB,GAI/BjC,EAAM,aACRiC,EAAQ,KAAK,WAAW,GAItBjC,EAAM,WAAWA,EAAM,aAAa,YACtCiC,EAAQ,KAAK,eAAe,GAKvBA,EAAQ,KAAK,GAAG;AAAA,IACzB,CAAC,GAEKC,IAAkBvB,EAAS,OAAO;AAAA,MACtC,QAAQX,EAAM;AAAA,IAAA,EACd,GAEImC,IAAexB,EAAS,MAAM;AAClC,YAAMsB,IAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAIF,aAAIjC,EAAM,UACRiC,EAAQ,KAAK,iBAAiB,IAE9BA,EAAQ,KAAK,4BAA4B,GAIvCjC,EAAM,YACRiC,EAAQ,KAAK,mBAAmB,GAG3BA,EAAQ,KAAK,GAAG;AAAA,IACzB,CAAC,GAEKG,IAAczB,EAAS,MAEpB,iBADOmB,EAAY9B,EAAM,KAAK,EACP,IAAI,EACnC,GAEKqC,IAAiB1B,EAAS,MACvB,yBACR,GAEK2B,IAAuB3B,EAAS,MAE7B;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MALYmB,EAAY9B,EAAM,KAAK,EAM7B;AAAA,IAAA,EACN,KAAK,GAAG,CACX,GAMKuC,IAAoB5B,EAAS,MAAM;AACvC,YAAM6B,IAAWxC,EAAM,aAAa,WAAW,wBAAwB;AAEvE,aAAO;AAAA,QACL,aAAa;AAAA,QACb,WAAW,gBAAgBwC,CAAQ;AAAA,QACnC,SAAS;AAAA,QACT,aAAa;AAAA,QACb,WAAW;AAAA,QACX,SAAS,gBAAgBA,CAAQ;AAAA,MAAA;AAAA,IAErC,CAAC,GAMKC,IAAa9B,EAAS,MAClBX,EAAM,WAAWA,EAAM,QAAQ,SAAS,KAAMI,EAAM,OAC7D;AAED,aAASsC,EAAuBC,GAA8B;AAU5D,aAAO,oFAPsC;AAAA,QAC3C,SAAS;AAAA,QACT,WAAW;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA,EAGqBA,EAAO,SAAS,SAAS,CAAC;AAAA,IAC3D;AAMA,aAASC,IAAgB;AACvB,MAAAlC,EAAU,QAAQ,IAClBR,EAAK,SAAS;AAAA,IAChB;AAEA,aAAS2C,EAAaF,GAAsB;AAC1C,MAAAzC,EAAK,UAAUyC,CAAM,GAEjBA,EAAO,WAAW,YACpBC,EAAA,IACSD,EAAO,WAAW,UAAUA,EAAO,OACxCA,EAAO,WAAW,WACpB,OAAO,KAAKA,EAAO,MAAM,QAAQ,IAEjC,OAAO,SAAS,OAAOA,EAAO,OAEvBA,EAAO,WAAW,cAAcA,EAAO,YAChDA,EAAO,SAAA;AAAA,IAEX;qBAxfU1C,EAAA,iBADR6C,EAkEaC,GAAA;AAAA;MAhEV,sBAAoBR,EAAA,MAAkB;AAAA,MACtC,oBAAkBA,EAAA,MAAkB;AAAA,MACpC,kBAAgBA,EAAA,MAAkB;AAAA,MAClC,sBAAoBA,EAAA,MAAkB;AAAA,MACtC,oBAAkBA,EAAA,MAAkB;AAAA,MACpC,kBAAgBA,EAAA,MAAkB;AAAA,IAAA;iBAEnC,MAwDM;AAAA,QAxDK7B,EAAA,cAAXZ,EAwDM,OAAA;AAAA;UAxDiB,SAAOiC,EAAA,KAAgB;AAAA,UAAG,SAAOG,EAAA,KAAe;AAAA,QAAA;UACrEnC,EAsDM,OAAA;AAAA,YAtDA,SAAOoC,EAAA,KAAY;AAAA,UAAA;YAEZlC,EAAA,YAAY+C,EAAAA,OAAO,QAA9BnD,KAAAC,EASM,OATNmD,IASM;AAAA,cARJC,EAOOvD,sBAPP,MAOO;AAAA,gBALGiC,EAAA,SADR/B,EAAA,GAAAiD,EAKEK,EAHKvB,EAAA,KAAa,GAAA;AAAA;kBACjB,SAAOQ,EAAA,KAAW;AAAA,kBACnB,eAAY;AAAA,gBAAA;;;YAMlBc,EAAuBvD,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAGvBI,EAIM,OAJNqD,IAIM;AAAA,cAHJrD,EAEM,OAAA;AAAA,gBAFA,SAAOsC,EAAA,KAAc;AAAA,cAAA;gBACzBa,EAA0BvD,yBAA1B,MAA0B;AAAA,sBAAjBM,EAAA,OAAO,GAAA,CAAA;AAAA,gBAAA;;;YAKpBiD,EAAwBvD,EAAA,QAAA,YAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAGb8C,EAAA,SAAX5C,EAAA,GAAAC,EAYM,OAZNuD,IAYM;AAAA,cAXJH,EAUOvD,yBAVP,MAUO;AAAA,wBATLG,EAQWwD,GAAA,MAAAC,EARgBtD,EAAA,SAAO,CAAjB0C,YACf7C,EAMS,UAAA;AAAA,kBAP+B,KAAA6C,EAAO;AAAA,kBAE7C,MAAK;AAAA,kBACJ,OAAKa,EAAEd,EAAuBC,CAAM,CAAA;AAAA,kBACpC,SAAK,CAAAc,MAAEZ,EAAaF,CAAM;AAAA,gBAAA,GAExBe,EAAAf,EAAO,KAAK,GAAA,IAAAgB,EAAA;;;YAOZ1D,EAAA,eAAXJ,EAAA,GAAAC,EAWM,OAXN8D,IAWM;AAAA,cAVJV,EASOvD,yBATP,MASO;AAAA,gBARLI,EAOS,UAAA;AAAA,kBANP,MAAK;AAAA,kBACJ,SAAOuC,EAAA,KAAoB;AAAA,kBAC3B,SAAOM;AAAA,gBAAA;kBAERhD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAG,EAAuC,QAAA,EAAjC,OAAM,aAAA,GAAa,WAAO,EAAA;AAAA,kBAChC8D,EAAsDC,EAAAC,CAAA,GAAA;AAAA,oBAA3C,OAAM;AAAA,oBAAgB,eAAY;AAAA,kBAAA;;;;;;;;uIASzCrD,EAAA,cAAhBZ,EAwDM,OAAA;AAAA;MAxDsB,SAAOiC,EAAA,KAAgB;AAAA,MAAG,SAAOG,EAAA,KAAe;AAAA,IAAA;MAC1EnC,EAsDM,OAAA;AAAA,QAtDA,SAAOoC,EAAA,KAAY;AAAA,MAAA;QAEZlC,EAAA,YAAY+C,EAAAA,OAAO,QAA9BnD,KAAAC,EASM,OATNkE,IASM;AAAA,UARJd,EAOOvD,sBAPP,MAOO;AAAA,YALGiC,EAAA,SADR/B,EAAA,GAAAiD,EAKEK,EAHKvB,EAAA,KAAa,GAAA;AAAA;cACjB,SAAOQ,EAAA,KAAW;AAAA,cACnB,eAAY;AAAA,YAAA;;;QAMlBc,EAAuBvD,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAGvBI,EAIM,OAJNkE,IAIM;AAAA,UAHJlE,EAEM,OAAA;AAAA,YAFA,SAAOsC,EAAA,KAAc;AAAA,UAAA;YACzBa,EAA0BvD,yBAA1B,MAA0B;AAAA,kBAAjBM,EAAA,OAAO,GAAA,CAAA;AAAA,YAAA;;;QAKpBiD,EAAwBvD,EAAA,QAAA,YAAA,CAAA,GAAA,QAAA,EAAA;AAAA,QAGb8C,EAAA,SAAX5C,EAAA,GAAAC,EAYM,OAZNoE,IAYM;AAAA,UAXJhB,EAUOvD,yBAVP,MAUO;AAAA,oBATLG,EAQWwD,GAAA,MAAAC,EARgBtD,EAAA,SAAO,CAAjB0C,YACf7C,EAMS,UAAA;AAAA,cAP+B,KAAA6C,EAAO;AAAA,cAE7C,MAAK;AAAA,cACJ,OAAKa,EAAEd,EAAuBC,CAAM,CAAA;AAAA,cACpC,SAAK,CAAAc,MAAEZ,EAAaF,CAAM;AAAA,YAAA,GAExBe,EAAAf,EAAO,KAAK,GAAA,IAAAwB,EAAA;;;QAOZlE,EAAA,eAAXJ,EAAA,GAAAC,EAWM,OAXNsE,IAWM;AAAA,UAVJlB,EASOvD,yBATP,MASO;AAAA,YARLI,EAOS,UAAA;AAAA,cANP,MAAK;AAAA,cACJ,SAAOuC,EAAA,KAAoB;AAAA,cAC3B,SAAOM;AAAA,YAAA;cAERhD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAG,EAAuC,QAAA,EAAjC,OAAM,aAAA,GAAa,WAAO,EAAA;AAAA,cAChC8D,EAAsDC,EAAAC,CAAA,GAAA;AAAA,gBAA3C,OAAM;AAAA,gBAAgB,eAAY;AAAA,cAAA;;;;;;;;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Breadcrumb.js","sources":["../../src/components/UiBreadcrumb.vue"],"sourcesContent":["<template>\n <nav class=\"sl-hidden sm:sl-flex\" aria-label=\"Breadcrumb\">\n <ol role=\"list\" class=\"sl-flex sl-items-center sl-gap-1\">\n <li \n v-for=\"(breadcrumb, index) in displayBreadcrumbs\" \n :key=\"breadcrumb.fullPath\"\n class=\"sl-flex sl-items-center\"\n >\n <!-- Separator -->\n <ChevronRightIcon \n v-if=\"index !== 0\" \n class=\"sl-h-4 sl-w-4 sl-flex-shrink-0 sl-mx-1\" \n :style=\"{ color: separatorColor }\"\n aria-hidden=\"true\" \n />\n \n <!-- Breadcrumb Item -->\n <component\n :is=\"isLastItem(index) || !isNavigable(breadcrumb) ? 'span' : 'a'\"\n :href=\"!isLastItem(index) && isNavigable(breadcrumb) ? breadcrumb.fullPath : undefined\"\n :title=\"breadcrumb.original\"\n :aria-current=\"isLastItem(index) ? 'page' : undefined\"\n class=\"sl-text-sm sl-font-medium sl-transition-colors sl-duration-150 sl-px-2 sl-py-1 sl-rounded-md\"\n :class=\"getBreadcrumbClasses(index, breadcrumb)\"\n :style=\"getBreadcrumbStyle(index)\"\n @click=\"(e: MouseEvent) => handleClick(breadcrumb, index, e)\"\n >\n <!-- UID indicator badge -->\n <span \n v-if=\"breadcrumb.isUid && showUidIndicator\" \n class=\"sl-inline-flex sl-items-center sl-mr-1.5\"\n >\n <span \n class=\"sl-w-1.5 sl-h-1.5 sl-rounded-full sl-bg-amber-400 dark:sl-bg-amber-500\"\n title=\"This is an ID\"\n />\n </span>\n \n <!-- Display text -->\n <span \n class=\"sl-truncate\"\n :class=\"{ 'sl-font-mono sl-text-xs': breadcrumb.isUid && preserveUidFont }\"\n >\n {{ breadcrumb.display }}\n </span>\n \n <!-- Loading indicator for async lookups -->\n <span \n v-if=\"breadcrumb.loading\" \n class=\"sl-ml-1.5 sl-inline-block sl-animate-pulse\"\n >\n <span class=\"sl-w-2 sl-h-2 sl-rounded-full sl-bg-current sl-opacity-50\" />\n </span>\n </component>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed, type PropType } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { ChevronRightIcon } from '@heroicons/vue/20/solid';\nimport { useStringTransform, type StringTransformOptions } from '../composables/useStringTransform';\nimport { useTheme } from '../composables/useTheme';\n\ninterface BreadcrumbItem {\n /** Display text (transformed) */\n display: string;\n /** Original segment text */\n original: string;\n /** Full path for navigation */\n fullPath: string;\n /** Whether this was detected as a UID */\n isUid: boolean;\n /** Whether truncation was applied */\n truncated: boolean;\n /** Whether async lookup is in progress */\n loading: boolean;\n}\n\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\nconst props = defineProps({\n /**\n * Maximum length for breadcrumb text before truncation\n * @default 20\n */\n maxLength: {\n type: Number,\n default: 20,\n },\n /**\n * Case transformation to apply\n * @default 'title'\n */\n caseTransform: {\n type: String as PropType<StringTransformOptions['caseTransform']>,\n default: 'title',\n },\n /**\n * Whether to detect and specially format UIDs\n * @default true\n */\n detectUids: {\n type: Boolean,\n default: true,\n },\n /**\n * How to format detected UIDs\n * @default 'ellipsis'\n */\n uidFormat: {\n type: String as PropType<StringTransformOptions['uidFormat']>,\n default: 'ellipsis',\n },\n /**\n * Number of characters to show for UIDs\n * @default 4\n */\n uidChars: {\n type: Number,\n default: 4,\n },\n /**\n * Show visual indicator for UID segments\n * @default false\n */\n showUidIndicator: {\n type: Boolean,\n default: false,\n },\n /**\n * Use monospace font for UID segments\n * @default true\n */\n preserveUidFont: {\n type: Boolean,\n default: true,\n },\n /**\n * Custom async lookup function to resolve IDs to display names\n * Called for segments detected as UIDs\n */\n lookupFn: {\n type: Function as PropType<(id: string) => Promise<string | null> | string | null>,\n default: undefined,\n },\n /**\n * Custom segment transform function\n * Overrides default transformation for each segment\n */\n segmentTransform: {\n type: Function as PropType<(segment: string, index: number, fullPath: string) => string | null>,\n default: undefined,\n },\n /**\n * Segments to exclude from breadcrumbs (by name)\n */\n excludeSegments: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n /**\n * Mapping of segment names to display names\n */\n segmentLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n /**\n * Home segment configuration\n */\n homeSegment: {\n type: Object as PropType<{ label?: string; path?: string; show?: boolean }>,\n default: () => ({ show: false }),\n },\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', path: string, event: MouseEvent): void;\n (e: 'click', breadcrumb: BreadcrumbItem, event: MouseEvent): void;\n}>();\n\nconst route = useRoute();\nconst router = useRouter();\nconst { isDark } = useTheme();\n\nconst { transform, transformAsync, isUidLike } = useStringTransform({\n maxLength: props.maxLength,\n caseTransform: props.caseTransform,\n detectUids: props.detectUids,\n uidFormat: props.uidFormat,\n uidChars: props.uidChars,\n});\n\nconst breadcrumbs = ref<BreadcrumbItem[]>([]);\nconst currentPath = ref<string>('');\n\n// Color configurations\nconst separatorColor = computed(() => \n isDark.value ? 'rgb(100, 116, 139)' : 'rgb(156, 163, 175)'\n);\n\nconst displayBreadcrumbs = computed(() => breadcrumbs.value);\n\nconst isLastItem = (index: number) => index === breadcrumbs.value.length - 1;\n\nconst isNavigable = (breadcrumb: BreadcrumbItem) => {\n const resolved = router.resolve(breadcrumb.fullPath);\n const isErrorPage = resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n return resolved && resolved.matched.length > 0 && !isErrorPage;\n};\n\nconst getBreadcrumbClasses = (index: number, breadcrumb: BreadcrumbItem) => {\n const isLast = isLastItem(index);\n const navigable = isNavigable(breadcrumb);\n \n return [\n // Hover state for clickable items\n !isLast && navigable && 'hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700/50',\n // Cursor\n isLast ? 'sl-cursor-default' : navigable ? 'sl-cursor-pointer' : 'sl-cursor-not-allowed',\n // Focus ring\n !isLast && 'focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-1 focus:sl-ring-blue-500 dark:focus:sl-ring-offset-slate-900',\n ].filter(Boolean);\n};\n\nconst getBreadcrumbStyle = (index: number) => {\n const isLast = isLastItem(index);\n \n if (isLast) {\n // Current page - more prominent\n return {\n color: isDark.value ? 'rgb(241, 245, 249)' : 'rgb(15, 23, 42)', // slate-100 / slate-900\n fontWeight: '600',\n };\n }\n \n // Parent segments - muted\n return {\n color: isDark.value ? 'rgb(148, 163, 184)' : 'rgb(100, 116, 139)', // slate-400 / slate-500\n };\n};\n\nconst processSegments = async () => {\n const path = route.path;\n currentPath.value = path;\n const pathSegments = path.split('/').filter(Boolean);\n const tempBreadcrumbs: BreadcrumbItem[] = [];\n\n // Add home segment if configured\n if (props.homeSegment.show) {\n tempBreadcrumbs.push({\n display: props.homeSegment.label || 'Home',\n original: 'home',\n fullPath: props.homeSegment.path || '/',\n isUid: false,\n truncated: false,\n loading: false,\n });\n }\n\n // Process each segment\n for (const [index, segment] of pathSegments.entries()) {\n // Skip excluded segments\n if (props.excludeSegments.includes(segment)) continue;\n\n const fullPath = '/' + pathSegments.slice(0, index + 1).join('/');\n \n // Check for custom label mapping first\n if (props.segmentLabels[segment]) {\n tempBreadcrumbs.push({\n display: props.segmentLabels[segment],\n original: segment,\n fullPath,\n isUid: false,\n truncated: false,\n loading: false,\n });\n continue;\n }\n\n // Check for custom segment transform\n if (props.segmentTransform) {\n const customResult = props.segmentTransform(segment, index, fullPath);\n if (customResult !== null) {\n tempBreadcrumbs.push({\n display: customResult,\n original: segment,\n fullPath,\n isUid: isUidLike(segment),\n truncated: customResult.length < segment.length,\n loading: false,\n });\n continue;\n }\n }\n\n // Use string transform composable\n const result = transform(segment);\n \n tempBreadcrumbs.push({\n display: result.display,\n original: segment,\n fullPath,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n });\n }\n\n breadcrumbs.value = tempBreadcrumbs;\n\n // Handle async lookups for UIDs\n if (props.lookupFn) {\n for (let i = 0; i < breadcrumbs.value.length; i++) {\n const bc = breadcrumbs.value[i];\n if (bc.isUid) {\n // Set loading state\n breadcrumbs.value[i] = { ...bc, loading: true };\n \n try {\n const result = await transformAsync(bc.original, {\n lookupFn: props.lookupFn,\n });\n \n breadcrumbs.value[i] = {\n ...breadcrumbs.value[i],\n display: result.display,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n };\n } catch {\n breadcrumbs.value[i] = { ...breadcrumbs.value[i], loading: false };\n }\n }\n }\n }\n};\n\nconst handleClick = (breadcrumb: BreadcrumbItem, index: number, event: MouseEvent) => {\n emit('click', breadcrumb, event);\n \n if (event.defaultPrevented) return;\n if (isLastItem(index)) return;\n if (!isNavigable(breadcrumb)) {\n event.preventDefault();\n return;\n }\n \n emit('navigate', breadcrumb.fullPath, event);\n \n if (!event.defaultPrevented) {\n event.preventDefault();\n router.push(breadcrumb.fullPath);\n }\n};\n\nwatchEffect(() => {\n processSegments();\n});\n</script>\n\n<style scoped>\n/* Smooth transitions for breadcrumb items */\na, span {\n transition: color 0.15s ease, background-color 0.15s ease;\n}\n</style>\n"],"names":["props","__props","emit","__emit","route","useRoute","router","useRouter","isDark","useTheme","transform","transformAsync","isUidLike","useStringTransform","breadcrumbs","ref","currentPath","separatorColor","computed","displayBreadcrumbs","isLastItem","index","isNavigable","breadcrumb","resolved","isErrorPage","getBreadcrumbClasses","isLast","navigable","getBreadcrumbStyle","processSegments","path","pathSegments","tempBreadcrumbs","segment","fullPath","customResult","result","i","bc","handleClick","event","watchEffect","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_createBlock","_unref","ChevronRightIcon","_resolveDynamicComponent","_normalizeStyle","e","_hoisted_3","_cache","_toDisplayString","_hoisted_4"],"mappings":"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"}