@stachelock/ui 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js → CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js} +80 -79
  2. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js.map +1 -0
  3. package/dist/{ComboboxInput.vue_vue_type_script_setup_true_lang-1YGa9Fnd.js → ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js} +302 -291
  4. package/dist/{ComboboxInput.vue_vue_type_script_setup_true_lang-1YGa9Fnd.js.map → ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.js.map} +1 -1
  5. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js.map +1 -1
  6. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js.map +1 -1
  7. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js → EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js} +8 -8
  8. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js.map +1 -0
  9. package/dist/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js +110 -0
  10. package/dist/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js.map +1 -0
  11. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js +238 -0
  12. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js.map +1 -0
  13. package/dist/android-chrome-192x192.png +0 -0
  14. package/dist/android-chrome-512x512.png +0 -0
  15. package/dist/apple-touch-icon.png +0 -0
  16. package/dist/calendars/CalendarDashboard.js +11 -12
  17. package/dist/calendars/CalendarDashboard.js.map +1 -1
  18. package/dist/calendars/CalendarHeader.js +1 -1
  19. package/dist/components/CloudinaryImage.js +74 -52
  20. package/dist/components/CloudinaryImage.js.map +1 -1
  21. package/dist/empty-state/EmptyState.js +1 -1
  22. package/dist/empty-state/index.js +1 -1
  23. package/dist/favicon-16x16.png +0 -0
  24. package/dist/favicon-32x32.png +0 -0
  25. package/dist/favicon.ico +0 -0
  26. package/dist/index.js +88 -88
  27. package/dist/index.js.map +1 -1
  28. package/dist/inputs/ComboboxInput.js +1 -1
  29. package/dist/inputs/TextInput.js +1 -1
  30. package/dist/inputs/TextInput.js.map +1 -1
  31. package/dist/notifications/NotificationContainer.js +2 -36
  32. package/dist/notifications/NotificationContainer.js.map +1 -1
  33. package/dist/notifications/NotificationToast.js +1 -1
  34. package/dist/notifications/index.js +4 -4
  35. package/dist/site.webmanifest +19 -0
  36. package/dist/src/components/CloudinaryImage.d.ts +41 -1
  37. package/dist/src/components/LottieAnimation.d.ts +0 -1
  38. package/dist/src/components/ThemeDebugModal.d.ts +0 -1
  39. package/dist/src/components/UiAvatar.d.ts +0 -1
  40. package/dist/src/components/UiBadge.d.ts +0 -1
  41. package/dist/src/components/UiBanner.d.ts +0 -1
  42. package/dist/src/components/UiBreadcrumb.d.ts +0 -1
  43. package/dist/src/components/UiButton.d.ts +0 -1
  44. package/dist/src/components/UiButtonGroup.d.ts +0 -1
  45. package/dist/src/components/UiCheckbox.d.ts +0 -1
  46. package/dist/src/components/UiLoading.d.ts +0 -1
  47. package/dist/src/components/UiLoadingDots.d.ts +0 -1
  48. package/dist/src/components/UiMenu.d.ts +0 -1
  49. package/dist/src/components/UiModal.d.ts +0 -1
  50. package/dist/src/components/UiNavLink.d.ts +0 -1
  51. package/dist/src/components/UiProgressBar.d.ts +0 -1
  52. package/dist/src/components/UiRadialProgressBar.d.ts +0 -1
  53. package/dist/src/components/UiTable.d.ts +0 -1
  54. package/dist/src/components/UiTransition.d.ts +0 -1
  55. package/dist/src/components/calendars/CalendarDashboard.d.ts +0 -1
  56. package/dist/src/components/calendars/CalendarHeader.d.ts +0 -1
  57. package/dist/src/components/calendars/DayCalendar.d.ts +0 -1
  58. package/dist/src/components/calendars/EventCard.d.ts +0 -1
  59. package/dist/src/components/calendars/EventsList.d.ts +0 -1
  60. package/dist/src/components/calendars/MonthCalendar.d.ts +0 -1
  61. package/dist/src/components/calendars/WeekCalendar.d.ts +0 -1
  62. package/dist/src/components/calendars/YearCalendar.d.ts +0 -1
  63. package/dist/src/components/calendars/index.d.ts +0 -1
  64. package/dist/src/components/charts/BarChart.d.ts +0 -1
  65. package/dist/src/components/charts/FunnelChart.d.ts +0 -1
  66. package/dist/src/components/charts/LineChart.d.ts +0 -1
  67. package/dist/src/components/charts/PieChart.d.ts +0 -1
  68. package/dist/src/components/charts/SparklineChart.d.ts +0 -1
  69. package/dist/src/components/charts/StatCard.d.ts +0 -1
  70. package/dist/src/components/charts/chartTheme.d.ts +0 -1
  71. package/dist/src/components/charts/index.d.ts +0 -1
  72. package/dist/src/components/empty-state/ComingSoon.d.ts +0 -1
  73. package/dist/src/components/empty-state/EmptyState.d.ts +0 -1
  74. package/dist/src/components/empty-state/index.d.ts +0 -1
  75. package/dist/src/components/forms/DynamicForm.d.ts +2 -3
  76. package/dist/src/components/forms/DynamicFormField.d.ts +0 -1
  77. package/dist/src/components/forms/FormFieldWrapper.d.ts +0 -1
  78. package/dist/src/components/forms/index.d.ts +0 -1
  79. package/dist/src/components/index.d.ts +0 -1
  80. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts +0 -1
  81. package/dist/src/components/inputs/CheckboxInput.d.ts +0 -1
  82. package/dist/src/components/inputs/ComboboxInput.d.ts +0 -1
  83. package/dist/src/components/inputs/DatepickerInput.d.ts +0 -1
  84. package/dist/src/components/inputs/EmailInput.d.ts +0 -1
  85. package/dist/src/components/inputs/EmptyInput.d.ts +0 -1
  86. package/dist/src/components/inputs/FileDropzoneInput.d.ts +0 -1
  87. package/dist/src/components/inputs/HiddenInput.d.ts +0 -1
  88. package/dist/src/components/inputs/InputsShowcase.d.ts +0 -1
  89. package/dist/src/components/inputs/PhoneInput.d.ts +0 -1
  90. package/dist/src/components/inputs/RichTextInput.d.ts +0 -1
  91. package/dist/src/components/inputs/SelectInput.d.ts +0 -1
  92. package/dist/src/components/inputs/SelectTextInput.d.ts +0 -1
  93. package/dist/src/components/inputs/SwitchInput.d.ts +0 -1
  94. package/dist/src/components/inputs/SwitchInputGroup.d.ts +0 -1
  95. package/dist/src/components/inputs/TagifyInput.d.ts +0 -1
  96. package/dist/src/components/inputs/TextAreaInput.d.ts +0 -1
  97. package/dist/src/components/inputs/TextInput.d.ts +0 -1
  98. package/dist/src/components/inputs/index.d.ts +0 -1
  99. package/dist/src/components/layouts/CardLayout.d.ts +0 -1
  100. package/dist/src/components/layouts/DashboardLayout.d.ts +0 -1
  101. package/dist/src/components/layouts/DefaultLayout.d.ts +0 -1
  102. package/dist/src/components/layouts/HeaderLayout.d.ts +0 -1
  103. package/dist/src/components/layouts/InfoCard.d.ts +0 -1
  104. package/dist/src/components/layouts/NavigationGroup.d.ts +0 -1
  105. package/dist/src/components/layouts/NavigationItem.d.ts +0 -1
  106. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts +0 -1
  107. package/dist/src/components/layouts/ProjectLogo.d.ts +0 -1
  108. package/dist/src/components/layouts/PropsTable.d.ts +0 -1
  109. package/dist/src/components/layouts/ShowcaseCard.d.ts +0 -1
  110. package/dist/src/components/layouts/ShowcaseLayout.d.ts +0 -1
  111. package/dist/src/components/layouts/SidebarLayout.d.ts +0 -1
  112. package/dist/src/components/layouts/StateDisplay.d.ts +0 -1
  113. package/dist/src/components/layouts/index.d.ts +0 -1
  114. package/dist/src/components/loading/ContentSkeleton.d.ts +0 -1
  115. package/dist/src/components/loading/SmartLoadingIndicator.d.ts +0 -1
  116. package/dist/src/components/loading/index.d.ts +0 -1
  117. package/dist/src/components/maps/GoogleMap.d.ts +0 -1
  118. package/dist/src/components/maps/UiInfoWindow.d.ts +0 -1
  119. package/dist/src/components/maps/UiMap.d.ts +0 -1
  120. package/dist/src/components/maps/UiMapAll.d.ts +0 -1
  121. package/dist/src/components/maps/UiMapMarker.d.ts +0 -1
  122. package/dist/src/components/maps/index.d.ts +0 -1
  123. package/dist/src/components/modals/AlertModal.d.ts +0 -1
  124. package/dist/src/components/modals/BaseModal.d.ts +0 -1
  125. package/dist/src/components/modals/ImageCropperModal.d.ts +0 -1
  126. package/dist/src/components/modals/index.d.ts +0 -1
  127. package/dist/src/components/notifications/NotificationContainer.d.ts +0 -1
  128. package/dist/src/components/notifications/NotificationToast.d.ts +0 -1
  129. package/dist/src/components/notifications/index.d.ts +0 -1
  130. package/dist/src/components/stepper/StepperPanels.d.ts +0 -1
  131. package/dist/src/components/stepper/index.d.ts +0 -1
  132. package/dist/src/components/tabs/InlineTabs.d.ts +0 -1
  133. package/dist/src/components/tabs/TabGroup.d.ts +0 -1
  134. package/dist/src/components/tabs/TabGroupUnderline.d.ts +0 -1
  135. package/dist/src/components/tabs/TabsInPills.d.ts +0 -1
  136. package/dist/src/components/tabs/index.d.ts +0 -1
  137. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts +0 -1
  138. package/dist/src/components/wrappers/CardWrapper.d.ts +0 -1
  139. package/dist/src/components/wrappers/DisclosureWrapper.d.ts +0 -1
  140. package/dist/src/components/wrappers/FormErrorWrapper.d.ts +0 -1
  141. package/dist/src/components/wrappers/index.d.ts +0 -1
  142. package/dist/src/composables/index.d.ts +0 -1
  143. package/dist/src/composables/useCalendar.d.ts +0 -1
  144. package/dist/src/composables/useEventSegments.d.ts +0 -1
  145. package/dist/src/composables/useFormValidation.d.ts +0 -1
  146. package/dist/src/composables/useMap.d.ts +0 -1
  147. package/dist/src/composables/useModal.d.ts +0 -1
  148. package/dist/src/composables/useNotifications.d.ts +0 -1
  149. package/dist/src/composables/useSimpleTabs.d.ts +0 -1
  150. package/dist/src/composables/useStringTransform.d.ts +0 -1
  151. package/dist/src/composables/useTabs.d.ts +0 -1
  152. package/dist/src/composables/useTheme.d.ts +0 -1
  153. package/dist/src/config/css-variables.d.ts +0 -1
  154. package/dist/src/config/design-tokens.d.ts +0 -1
  155. package/dist/src/config/index.d.ts +0 -1
  156. package/dist/src/dev.d.ts +0 -1
  157. package/dist/src/index.d.ts +0 -1
  158. package/dist/src/plugin/configure.d.ts +0 -1
  159. package/dist/src/plugin/index.d.ts +0 -1
  160. package/dist/src/types/avatars.d.ts +0 -1
  161. package/dist/src/types/badges.d.ts +0 -1
  162. package/dist/src/types/calendars.d.ts +0 -1
  163. package/dist/src/types/core.d.ts +10 -1
  164. package/dist/src/types/form.d.ts +0 -1
  165. package/dist/src/types/forms.d.ts +0 -1
  166. package/dist/src/types/index.d.ts +0 -1
  167. package/dist/src/types/inputs.d.ts +0 -1
  168. package/dist/src/types/layouts.d.ts +0 -1
  169. package/dist/src/types/loading.d.ts +0 -1
  170. package/dist/src/types/maps.d.ts +0 -1
  171. package/dist/src/types/navigation.d.ts +0 -1
  172. package/dist/src/types/tables.d.ts +0 -1
  173. package/dist/src/types/tabs.d.ts +0 -1
  174. package/dist/src/types/transitions.d.ts +0 -1
  175. package/dist/src/types/ui.d.ts +0 -1
  176. package/dist/src/utils/calendar.d.ts +0 -1
  177. package/dist/src/utils/component-registry.d.ts +0 -1
  178. package/dist/src/utils/countryCodes.d.ts +0 -1
  179. package/dist/src/utils/id.d.ts +0 -1
  180. package/dist/src/utils/index.d.ts +0 -1
  181. package/dist/src/utils/mapThemes.d.ts +0 -1
  182. package/dist/src/utils/phone.d.ts +0 -1
  183. package/dist/src/utils/transitions.d.ts +0 -1
  184. package/dist/src/views/ButtonsShowcase.d.ts +0 -1
  185. package/dist/src/views/CalendarsShowcase.d.ts +0 -1
  186. package/dist/src/views/CardsShowcase.d.ts +0 -1
  187. package/dist/src/views/ChartsShowcase.d.ts +0 -1
  188. package/dist/src/views/EmptyStatesShowcase.d.ts +0 -1
  189. package/dist/src/views/InputsShowcase.d.ts +0 -1
  190. package/dist/src/views/KitchenSink.d.ts +0 -1
  191. package/dist/src/views/LayoutsShowcase.d.ts +0 -1
  192. package/dist/src/views/LoadingShowcase.d.ts +0 -1
  193. package/dist/src/views/MapsShowcase.d.ts +0 -1
  194. package/dist/src/views/ModalsShowcase.d.ts +0 -1
  195. package/dist/src/views/NotificationsShowcase.d.ts +0 -1
  196. package/dist/src/views/StepperShowcase.d.ts +0 -1
  197. package/dist/src/views/TabsShowcase.d.ts +0 -1
  198. package/dist/src/views/ValidationDemo.d.ts +0 -1
  199. package/dist/src/views/WrappersShowcase.d.ts +0 -1
  200. package/dist/src/views/components/AvatarPage.d.ts +0 -1
  201. package/dist/src/views/components/BadgePage.d.ts +0 -1
  202. package/dist/src/views/components/BannerPage.d.ts +0 -1
  203. package/dist/src/views/components/BreadcrumbPage.d.ts +0 -1
  204. package/dist/src/views/components/ButtonPage.d.ts +0 -1
  205. package/dist/src/views/components/CloudinaryImagePage.d.ts +0 -1
  206. package/dist/src/views/components/LoadingPage.d.ts +0 -1
  207. package/dist/src/views/components/LottiePage.d.ts +2 -0
  208. package/dist/src/views/components/MenuPage.d.ts +0 -1
  209. package/dist/src/views/components/ModalPage.d.ts +0 -1
  210. package/dist/src/views/components/ProgressPage.d.ts +0 -1
  211. package/dist/src/views/components/RichTextInputPage.d.ts +0 -1
  212. package/dist/src/views/components/TablePage.d.ts +0 -1
  213. package/dist/src/views/components/TextInputPage.d.ts +0 -1
  214. package/dist/src/views/components/TransitionPage.d.ts +0 -1
  215. package/dist/src/views/components/index.d.ts +1 -1
  216. package/dist/src/views/examples/CheckoutFormExample.d.ts +0 -1
  217. package/dist/src/views/examples/ContactFormExample.d.ts +0 -1
  218. package/dist/src/views/examples/RegistrationFormExample.d.ts +0 -1
  219. package/dist/src/views/examples/SettingsFormExample.d.ts +0 -1
  220. package/dist/src/views/examples/index.d.ts +0 -1
  221. package/dist/src/views/forms/ValidationPage.d.ts +0 -1
  222. package/dist/src/views/forms/index.d.ts +0 -1
  223. package/dist/src/views/index.d.ts +0 -1
  224. package/dist/src/views/inputs/CheckboxPage.d.ts +0 -1
  225. package/dist/src/views/inputs/ComboboxPage.d.ts +0 -1
  226. package/dist/src/views/inputs/DatepickerPage.d.ts +0 -1
  227. package/dist/src/views/inputs/EmailPage.d.ts +0 -1
  228. package/dist/src/views/inputs/FileDropzonePage.d.ts +0 -1
  229. package/dist/src/views/inputs/MiscInputsPage.d.ts +0 -1
  230. package/dist/src/views/inputs/PhonePage.d.ts +0 -1
  231. package/dist/src/views/inputs/SelectPage.d.ts +0 -1
  232. package/dist/src/views/inputs/SelectTextPage.d.ts +0 -1
  233. package/dist/src/views/inputs/SwitchGroupPage.d.ts +0 -1
  234. package/dist/src/views/inputs/SwitchPage.d.ts +0 -1
  235. package/dist/src/views/inputs/TextAreaPage.d.ts +0 -1
  236. package/dist/src/views/inputs/index.d.ts +0 -1
  237. package/dist/src/views/layouts/CardLayoutPage.d.ts +0 -1
  238. package/dist/src/views/layouts/DashboardLayoutPage.d.ts +0 -1
  239. package/dist/src/views/layouts/HeaderLayoutPage.d.ts +0 -1
  240. package/dist/src/views/layouts/SidebarLayoutPage.d.ts +0 -1
  241. package/dist/src/views/layouts/index.d.ts +0 -1
  242. package/dist/style.css +1 -1
  243. package/dist/ui.css +1 -1
  244. package/package.json +20 -16
  245. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js.map +0 -1
  246. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js.map +0 -1
  247. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js +0 -277
  248. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js.map +0 -1
  249. package/dist/src/components/CloudinaryImage.d.ts.map +0 -1
  250. package/dist/src/components/LottieAnimation.d.ts.map +0 -1
  251. package/dist/src/components/ThemeDebugModal.d.ts.map +0 -1
  252. package/dist/src/components/UiAvatar.d.ts.map +0 -1
  253. package/dist/src/components/UiBadge.d.ts.map +0 -1
  254. package/dist/src/components/UiBanner.d.ts.map +0 -1
  255. package/dist/src/components/UiBreadcrumb.d.ts.map +0 -1
  256. package/dist/src/components/UiButton.d.ts.map +0 -1
  257. package/dist/src/components/UiButtonGroup.d.ts.map +0 -1
  258. package/dist/src/components/UiCheckbox.d.ts.map +0 -1
  259. package/dist/src/components/UiLoading.d.ts.map +0 -1
  260. package/dist/src/components/UiLoadingDots.d.ts.map +0 -1
  261. package/dist/src/components/UiMenu.d.ts.map +0 -1
  262. package/dist/src/components/UiModal.d.ts.map +0 -1
  263. package/dist/src/components/UiNavLink.d.ts.map +0 -1
  264. package/dist/src/components/UiProgressBar.d.ts.map +0 -1
  265. package/dist/src/components/UiRadialProgressBar.d.ts.map +0 -1
  266. package/dist/src/components/UiTable.d.ts.map +0 -1
  267. package/dist/src/components/UiTransition.d.ts.map +0 -1
  268. package/dist/src/components/calendars/CalendarDashboard.d.ts.map +0 -1
  269. package/dist/src/components/calendars/CalendarHeader.d.ts.map +0 -1
  270. package/dist/src/components/calendars/DayCalendar.d.ts.map +0 -1
  271. package/dist/src/components/calendars/EventCard.d.ts.map +0 -1
  272. package/dist/src/components/calendars/EventsList.d.ts.map +0 -1
  273. package/dist/src/components/calendars/MonthCalendar.d.ts.map +0 -1
  274. package/dist/src/components/calendars/WeekCalendar.d.ts.map +0 -1
  275. package/dist/src/components/calendars/YearCalendar.d.ts.map +0 -1
  276. package/dist/src/components/calendars/index.d.ts.map +0 -1
  277. package/dist/src/components/charts/BarChart.d.ts.map +0 -1
  278. package/dist/src/components/charts/FunnelChart.d.ts.map +0 -1
  279. package/dist/src/components/charts/LineChart.d.ts.map +0 -1
  280. package/dist/src/components/charts/PieChart.d.ts.map +0 -1
  281. package/dist/src/components/charts/SparklineChart.d.ts.map +0 -1
  282. package/dist/src/components/charts/StatCard.d.ts.map +0 -1
  283. package/dist/src/components/charts/chartTheme.d.ts.map +0 -1
  284. package/dist/src/components/charts/index.d.ts.map +0 -1
  285. package/dist/src/components/empty-state/ComingSoon.d.ts.map +0 -1
  286. package/dist/src/components/empty-state/EmptyState.d.ts.map +0 -1
  287. package/dist/src/components/empty-state/index.d.ts.map +0 -1
  288. package/dist/src/components/forms/DynamicForm.d.ts.map +0 -1
  289. package/dist/src/components/forms/DynamicFormField.d.ts.map +0 -1
  290. package/dist/src/components/forms/FormFieldWrapper.d.ts.map +0 -1
  291. package/dist/src/components/forms/index.d.ts.map +0 -1
  292. package/dist/src/components/index.d.ts.map +0 -1
  293. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts.map +0 -1
  294. package/dist/src/components/inputs/CheckboxInput.d.ts.map +0 -1
  295. package/dist/src/components/inputs/ComboboxInput.d.ts.map +0 -1
  296. package/dist/src/components/inputs/DatepickerInput.d.ts.map +0 -1
  297. package/dist/src/components/inputs/EmailInput.d.ts.map +0 -1
  298. package/dist/src/components/inputs/EmptyInput.d.ts.map +0 -1
  299. package/dist/src/components/inputs/FileDropzoneInput.d.ts.map +0 -1
  300. package/dist/src/components/inputs/HiddenInput.d.ts.map +0 -1
  301. package/dist/src/components/inputs/InputsShowcase.d.ts.map +0 -1
  302. package/dist/src/components/inputs/PhoneInput.d.ts.map +0 -1
  303. package/dist/src/components/inputs/RichTextInput.d.ts.map +0 -1
  304. package/dist/src/components/inputs/SelectInput.d.ts.map +0 -1
  305. package/dist/src/components/inputs/SelectTextInput.d.ts.map +0 -1
  306. package/dist/src/components/inputs/SwitchInput.d.ts.map +0 -1
  307. package/dist/src/components/inputs/SwitchInputGroup.d.ts.map +0 -1
  308. package/dist/src/components/inputs/TagifyInput.d.ts.map +0 -1
  309. package/dist/src/components/inputs/TextAreaInput.d.ts.map +0 -1
  310. package/dist/src/components/inputs/TextInput.d.ts.map +0 -1
  311. package/dist/src/components/inputs/index.d.ts.map +0 -1
  312. package/dist/src/components/layouts/CardLayout.d.ts.map +0 -1
  313. package/dist/src/components/layouts/DashboardLayout.d.ts.map +0 -1
  314. package/dist/src/components/layouts/DefaultLayout.d.ts.map +0 -1
  315. package/dist/src/components/layouts/HeaderLayout.d.ts.map +0 -1
  316. package/dist/src/components/layouts/InfoCard.d.ts.map +0 -1
  317. package/dist/src/components/layouts/NavigationGroup.d.ts.map +0 -1
  318. package/dist/src/components/layouts/NavigationItem.d.ts.map +0 -1
  319. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts.map +0 -1
  320. package/dist/src/components/layouts/ProjectLogo.d.ts.map +0 -1
  321. package/dist/src/components/layouts/PropsTable.d.ts.map +0 -1
  322. package/dist/src/components/layouts/ShowcaseCard.d.ts.map +0 -1
  323. package/dist/src/components/layouts/ShowcaseLayout.d.ts.map +0 -1
  324. package/dist/src/components/layouts/SidebarLayout.d.ts.map +0 -1
  325. package/dist/src/components/layouts/StateDisplay.d.ts.map +0 -1
  326. package/dist/src/components/layouts/index.d.ts.map +0 -1
  327. package/dist/src/components/loading/ContentSkeleton.d.ts.map +0 -1
  328. package/dist/src/components/loading/SmartLoadingIndicator.d.ts.map +0 -1
  329. package/dist/src/components/loading/index.d.ts.map +0 -1
  330. package/dist/src/components/maps/GoogleMap.d.ts.map +0 -1
  331. package/dist/src/components/maps/UiInfoWindow.d.ts.map +0 -1
  332. package/dist/src/components/maps/UiMap.d.ts.map +0 -1
  333. package/dist/src/components/maps/UiMapAll.d.ts.map +0 -1
  334. package/dist/src/components/maps/UiMapMarker.d.ts.map +0 -1
  335. package/dist/src/components/maps/index.d.ts.map +0 -1
  336. package/dist/src/components/modals/AlertModal.d.ts.map +0 -1
  337. package/dist/src/components/modals/BaseModal.d.ts.map +0 -1
  338. package/dist/src/components/modals/ImageCropperModal.d.ts.map +0 -1
  339. package/dist/src/components/modals/index.d.ts.map +0 -1
  340. package/dist/src/components/notifications/NotificationContainer.d.ts.map +0 -1
  341. package/dist/src/components/notifications/NotificationToast.d.ts.map +0 -1
  342. package/dist/src/components/notifications/index.d.ts.map +0 -1
  343. package/dist/src/components/stepper/StepperPanels.d.ts.map +0 -1
  344. package/dist/src/components/stepper/index.d.ts.map +0 -1
  345. package/dist/src/components/tabs/InlineTabs.d.ts.map +0 -1
  346. package/dist/src/components/tabs/TabGroup.d.ts.map +0 -1
  347. package/dist/src/components/tabs/TabGroupUnderline.d.ts.map +0 -1
  348. package/dist/src/components/tabs/TabsInPills.d.ts.map +0 -1
  349. package/dist/src/components/tabs/index.d.ts.map +0 -1
  350. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts.map +0 -1
  351. package/dist/src/components/wrappers/CardWrapper.d.ts.map +0 -1
  352. package/dist/src/components/wrappers/DisclosureWrapper.d.ts.map +0 -1
  353. package/dist/src/components/wrappers/FormErrorWrapper.d.ts.map +0 -1
  354. package/dist/src/components/wrappers/index.d.ts.map +0 -1
  355. package/dist/src/composables/index.d.ts.map +0 -1
  356. package/dist/src/composables/useCalendar.d.ts.map +0 -1
  357. package/dist/src/composables/useEventSegments.d.ts.map +0 -1
  358. package/dist/src/composables/useFormValidation.d.ts.map +0 -1
  359. package/dist/src/composables/useMap.d.ts.map +0 -1
  360. package/dist/src/composables/useModal.d.ts.map +0 -1
  361. package/dist/src/composables/useNotifications.d.ts.map +0 -1
  362. package/dist/src/composables/useSimpleTabs.d.ts.map +0 -1
  363. package/dist/src/composables/useStringTransform.d.ts.map +0 -1
  364. package/dist/src/composables/useTabs.d.ts.map +0 -1
  365. package/dist/src/composables/useTheme.d.ts.map +0 -1
  366. package/dist/src/config/css-variables.d.ts.map +0 -1
  367. package/dist/src/config/design-tokens.d.ts.map +0 -1
  368. package/dist/src/config/index.d.ts.map +0 -1
  369. package/dist/src/dev.d.ts.map +0 -1
  370. package/dist/src/index.d.ts.map +0 -1
  371. package/dist/src/plugin/configure.d.ts.map +0 -1
  372. package/dist/src/plugin/index.d.ts.map +0 -1
  373. package/dist/src/types/avatars.d.ts.map +0 -1
  374. package/dist/src/types/badges.d.ts.map +0 -1
  375. package/dist/src/types/calendars.d.ts.map +0 -1
  376. package/dist/src/types/core.d.ts.map +0 -1
  377. package/dist/src/types/form.d.ts.map +0 -1
  378. package/dist/src/types/forms.d.ts.map +0 -1
  379. package/dist/src/types/index.d.ts.map +0 -1
  380. package/dist/src/types/inputs.d.ts.map +0 -1
  381. package/dist/src/types/layouts.d.ts.map +0 -1
  382. package/dist/src/types/loading.d.ts.map +0 -1
  383. package/dist/src/types/maps.d.ts.map +0 -1
  384. package/dist/src/types/navigation.d.ts.map +0 -1
  385. package/dist/src/types/tables.d.ts.map +0 -1
  386. package/dist/src/types/tabs.d.ts.map +0 -1
  387. package/dist/src/types/transitions.d.ts.map +0 -1
  388. package/dist/src/types/ui.d.ts.map +0 -1
  389. package/dist/src/utils/calendar.d.ts.map +0 -1
  390. package/dist/src/utils/component-registry.d.ts.map +0 -1
  391. package/dist/src/utils/countryCodes.d.ts.map +0 -1
  392. package/dist/src/utils/id.d.ts.map +0 -1
  393. package/dist/src/utils/index.d.ts.map +0 -1
  394. package/dist/src/utils/mapThemes.d.ts.map +0 -1
  395. package/dist/src/utils/phone.d.ts.map +0 -1
  396. package/dist/src/utils/transitions.d.ts.map +0 -1
  397. package/dist/src/views/ButtonsShowcase.d.ts.map +0 -1
  398. package/dist/src/views/CalendarsShowcase.d.ts.map +0 -1
  399. package/dist/src/views/CardsShowcase.d.ts.map +0 -1
  400. package/dist/src/views/ChartsShowcase.d.ts.map +0 -1
  401. package/dist/src/views/EmptyStatesShowcase.d.ts.map +0 -1
  402. package/dist/src/views/InputsShowcase.d.ts.map +0 -1
  403. package/dist/src/views/KitchenSink.d.ts.map +0 -1
  404. package/dist/src/views/LayoutsShowcase.d.ts.map +0 -1
  405. package/dist/src/views/LoadingShowcase.d.ts.map +0 -1
  406. package/dist/src/views/MapsShowcase.d.ts.map +0 -1
  407. package/dist/src/views/ModalsShowcase.d.ts.map +0 -1
  408. package/dist/src/views/NotificationsShowcase.d.ts.map +0 -1
  409. package/dist/src/views/StepperShowcase.d.ts.map +0 -1
  410. package/dist/src/views/TabsShowcase.d.ts.map +0 -1
  411. package/dist/src/views/ValidationDemo.d.ts.map +0 -1
  412. package/dist/src/views/WrappersShowcase.d.ts.map +0 -1
  413. package/dist/src/views/components/AvatarPage.d.ts.map +0 -1
  414. package/dist/src/views/components/BadgePage.d.ts.map +0 -1
  415. package/dist/src/views/components/BannerPage.d.ts.map +0 -1
  416. package/dist/src/views/components/BreadcrumbPage.d.ts.map +0 -1
  417. package/dist/src/views/components/ButtonPage.d.ts.map +0 -1
  418. package/dist/src/views/components/CloudinaryImagePage.d.ts.map +0 -1
  419. package/dist/src/views/components/LoadingPage.d.ts.map +0 -1
  420. package/dist/src/views/components/MenuPage.d.ts.map +0 -1
  421. package/dist/src/views/components/ModalPage.d.ts.map +0 -1
  422. package/dist/src/views/components/ProgressPage.d.ts.map +0 -1
  423. package/dist/src/views/components/RichTextInputPage.d.ts.map +0 -1
  424. package/dist/src/views/components/TablePage.d.ts.map +0 -1
  425. package/dist/src/views/components/TextInputPage.d.ts.map +0 -1
  426. package/dist/src/views/components/TransitionPage.d.ts.map +0 -1
  427. package/dist/src/views/components/index.d.ts.map +0 -1
  428. package/dist/src/views/examples/CheckoutFormExample.d.ts.map +0 -1
  429. package/dist/src/views/examples/ContactFormExample.d.ts.map +0 -1
  430. package/dist/src/views/examples/RegistrationFormExample.d.ts.map +0 -1
  431. package/dist/src/views/examples/SettingsFormExample.d.ts.map +0 -1
  432. package/dist/src/views/examples/index.d.ts.map +0 -1
  433. package/dist/src/views/forms/ValidationPage.d.ts.map +0 -1
  434. package/dist/src/views/forms/index.d.ts.map +0 -1
  435. package/dist/src/views/index.d.ts.map +0 -1
  436. package/dist/src/views/inputs/CheckboxPage.d.ts.map +0 -1
  437. package/dist/src/views/inputs/ComboboxPage.d.ts.map +0 -1
  438. package/dist/src/views/inputs/DatepickerPage.d.ts.map +0 -1
  439. package/dist/src/views/inputs/EmailPage.d.ts.map +0 -1
  440. package/dist/src/views/inputs/FileDropzonePage.d.ts.map +0 -1
  441. package/dist/src/views/inputs/MiscInputsPage.d.ts.map +0 -1
  442. package/dist/src/views/inputs/PhonePage.d.ts.map +0 -1
  443. package/dist/src/views/inputs/SelectPage.d.ts.map +0 -1
  444. package/dist/src/views/inputs/SelectTextPage.d.ts.map +0 -1
  445. package/dist/src/views/inputs/SwitchGroupPage.d.ts.map +0 -1
  446. package/dist/src/views/inputs/SwitchPage.d.ts.map +0 -1
  447. package/dist/src/views/inputs/TextAreaPage.d.ts.map +0 -1
  448. package/dist/src/views/inputs/index.d.ts.map +0 -1
  449. package/dist/src/views/layouts/CardLayoutPage.d.ts.map +0 -1
  450. package/dist/src/views/layouts/DashboardLayoutPage.d.ts.map +0 -1
  451. package/dist/src/views/layouts/HeaderLayoutPage.d.ts.map +0 -1
  452. package/dist/src/views/layouts/SidebarLayoutPage.d.ts.map +0 -1
  453. package/dist/src/views/layouts/index.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js","sources":["../src/components/notifications/NotificationToast.vue"],"sourcesContent":["<!--\n @component NotificationToast\n @description Individual notification toast with animations, theming, and dark mode support\n \n Displays a single notification with icon, title, message, actions, and close button.\n Supports multiple themes, variants, positions, and card stacking with smooth transitions.\n \n ## Features\n - Multiple themes with dark mode support\n - Three variants: default, compact, expanded\n - Action buttons with dismiss, link, and callback support\n - Card stacking mode for multiple notifications\n - Priority-based styling (low, normal, high, urgent)\n - Smooth enter/leave transitions\n \n @props\n - notification (NotificationState): The notification data object\n \n @emits\n - close: Emitted when the close button is clicked\n - action: Emitted when an action button is clicked\n \n @example\n <NotificationToast \n :notification=\"notification\" \n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n-->\n<template>\n <TransitionRoot \n appear \n :show=\"notification.isOpen\" \n as=\"template\" \n @after-leave=\"onAfterLeave\"\n >\n <TransitionChild \n as=\"template\" \n enter=\"sl-duration-300 sl-ease-out sl-transform\"\n :enter-from=\"enterFromClass\"\n enter-to=\"sl-translate-y-0 sl-opacity-100 sl-translate-x-0\" \n leave=\"sl-duration-200 sl-ease-in\"\n leave-from=\"sl-opacity-100\" \n leave-to=\"sl-opacity-0\"\n >\n <div \n v-if=\"notification.isOpen\" \n :class=\"[\n themeClass,\n variantClass,\n priorityClass,\n cardModeClass,\n 'sl-pointer-events-auto sl-overflow-hidden sl-rounded-lg sl-shadow-lg sl-ring-1 sl-ring-black/5 dark:sl-ring-white/10 sl-transition-all sl-duration-200 sl-relative'\n ]\"\n :style=\"toastStyle\"\n @click=\"handleCardClick\"\n role=\"alert\"\n :aria-live=\"notification.priority === 'urgent' ? 'assertive' : 'polite'\"\n >\n <div :class=\"paddingClass\">\n <div class=\"sl-flex sl-items-start\">\n <!-- Icon -->\n <component \n v-if=\"iconComponent\"\n :is=\"iconComponent\" \n :class=\"[iconSizeClass, iconColorClass, 'sl-flex-shrink-0']\"\n aria-hidden=\"true\" \n />\n \n <!-- Content -->\n <div :class=\"contentMarginClass\">\n <!-- Title -->\n <p :class=\"[titleClass, textColorClass]\">\n {{ notification.title }}\n </p>\n \n <!-- Message -->\n <p \n v-if=\"notification.message\" \n :class=\"[messageClass, textColorClass, 'sl-opacity-90']\"\n >\n {{ notification.message }}\n </p>\n \n <!-- Actions -->\n <div \n v-if=\"notification.actions && notification.actions.length > 0\"\n class=\"sl-mt-3 sl-flex sl-gap-2\"\n >\n <button\n v-for=\"(action, idx) in notification.actions\"\n :key=\"idx\"\n type=\"button\"\n :class=\"getActionButtonClass(action)\"\n @click.stop=\"handleAction(action)\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n \n <!-- Close Button -->\n <button \n v-if=\"notification.dismissible !== false\"\n type=\"button\" \n @click.stop=\"handleClose\"\n :class=\"[closeButtonClass, focusRingClass]\"\n >\n <span class=\"sl-sr-only\">Close</span>\n <XMarkIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n \n <!-- Priority indicator for urgent/high -->\n <div \n v-if=\"notification.priority === 'urgent' || notification.priority === 'high'\"\n :class=\"priorityIndicatorClass\"\n />\n </div>\n </TransitionChild>\n </TransitionRoot>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * NotificationToast - Individual notification display\n * \n * Renders a single notification with theming, icons, actions, and animations.\n * Used internally by NotificationContainer but can be used standalone.\n */\nimport { computed, type Component } from 'vue';\nimport { \n CheckCircleIcon, \n ExclamationTriangleIcon, \n ExclamationCircleIcon, \n InformationCircleIcon \n} from '@heroicons/vue/24/outline';\nimport { XMarkIcon } from '@heroicons/vue/20/solid';\nimport { TransitionRoot, TransitionChild } from '@headlessui/vue';\nimport type { NotificationState, NotificationAction } from '../../composables/useNotifications';\n\nconst props = defineProps<{ \n notification: NotificationState \n}>();\n\nconst emit = defineEmits<{\n close: [notification: NotificationState];\n action: [notification: NotificationState, action: NotificationAction];\n}>();\n\nconst handleClose = () => {\n emit('close', props.notification);\n};\n\nconst handleAction = (action: NotificationAction) => {\n emit('action', props.notification, action);\n};\n\nconst handleCardClick = () => {\n // Clicking on a card in card mode brings it to front\n if (props.notification.isCardMode && props.notification.cardStackIndex !== 0) {\n emit('action', props.notification, { label: 'bringToFront', action: 'callback' });\n }\n};\n\nconst onAfterLeave = () => {\n // Animation cleanup callback\n};\n\n// Theme classes with dark mode support\nconst themeClass = computed(() => {\n const themes: Record<string, string> = {\n primary: 'sl-bg-primary-600 dark:sl-bg-primary-700 sl-text-white',\n secondary: 'sl-bg-gray-600 dark:sl-bg-gray-700 sl-text-white',\n dark: 'sl-bg-gray-800 dark:sl-bg-gray-900 sl-text-white',\n light: 'sl-bg-white dark:sl-bg-gray-800 sl-text-gray-800 dark:sl-text-gray-100 sl-border sl-border-gray-200 dark:sl-border-gray-700',\n warning: 'sl-bg-amber-500 dark:sl-bg-amber-600 sl-text-white',\n danger: 'sl-bg-red-500 dark:sl-bg-red-600 sl-text-white',\n success: 'sl-bg-emerald-500 dark:sl-bg-emerald-600 sl-text-white',\n info: 'sl-bg-blue-500 dark:sl-bg-blue-600 sl-text-white',\n ghost: 'sl-bg-white dark:sl-bg-gray-800 sl-text-gray-800 dark:sl-text-gray-100 sl-border sl-border-gray-200 dark:sl-border-gray-700',\n };\n return themes[props.notification.theme] || themes.primary;\n});\n\n// Variant classes - width is controlled by container, just set max-width for variants\nconst variantClass = computed(() => {\n const variants: Record<string, string> = {\n default: '',\n compact: '',\n expanded: '',\n };\n return variants[props.notification.variant] || variants.default;\n});\n\n// Priority classes\nconst priorityClass = computed(() => {\n if (props.notification.priority === 'urgent') {\n return 'sl-animate-pulse';\n }\n return '';\n});\n\n// Priority indicator\nconst priorityIndicatorClass = computed(() => {\n const base = 'sl-absolute sl-top-0 sl-left-0 sl-right-0 sl-h-1';\n if (props.notification.priority === 'urgent') {\n return `${base} sl-bg-red-400 dark:sl-bg-red-500`;\n }\n if (props.notification.priority === 'high') {\n return `${base} sl-bg-amber-400 dark:sl-bg-amber-500`;\n }\n return '';\n});\n\n// Card mode classes\nconst cardModeClass = computed(() => {\n if (props.notification.isCardMode) {\n return 'sl-cursor-pointer hover:sl-scale-[1.02] sl-transition-transform';\n }\n return '';\n});\n\n// Toast style for card stacking and custom widths\nconst toastStyle = computed(() => {\n const styles: Record<string, string | number> = {};\n \n if (props.notification.maxWidth) {\n styles.maxWidth = `${props.notification.maxWidth}px`;\n }\n \n if (props.notification.isCardMode) {\n styles.transform = `translate(${props.notification.cardOffsetX || 0}px, ${props.notification.cardOffsetY || 0}px)`;\n styles.zIndex = props.notification.zIndex || 1;\n }\n \n return styles;\n});\n\n// Text color based on theme\nconst textColorClass = computed(() => {\n const theme = props.notification.theme;\n return ['light', 'ghost'].includes(theme) ? 'sl-text-gray-800 dark:sl-text-gray-100' : 'sl-text-white';\n});\n\n// Icon color\nconst iconColorClass = computed(() => {\n const theme = props.notification.theme;\n return ['light', 'ghost'].includes(theme) ? 'sl-text-gray-500 dark:sl-text-gray-400' : 'sl-text-white/90';\n});\n\n// Focus ring class\nconst focusRingClass = computed(() => {\n const rings: Record<string, string> = {\n primary: 'focus:sl-ring-primary-400 dark:focus:sl-ring-primary-500',\n secondary: 'focus:sl-ring-gray-400 dark:focus:sl-ring-gray-500',\n dark: 'focus:sl-ring-gray-400 dark:focus:sl-ring-gray-500',\n light: 'focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600',\n warning: 'focus:sl-ring-amber-300 dark:focus:sl-ring-amber-500',\n danger: 'focus:sl-ring-red-300 dark:focus:sl-ring-red-500',\n success: 'focus:sl-ring-emerald-300 dark:focus:sl-ring-emerald-500',\n info: 'focus:sl-ring-blue-300 dark:focus:sl-ring-blue-500',\n ghost: 'focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600',\n };\n return rings[props.notification.theme] || rings.primary;\n});\n\n// Close button class\nconst closeButtonClass = computed(() => {\n const theme = props.notification.theme;\n const baseClass = 'sl-ml-4 sl-inline-flex sl-rounded-md sl-opacity-70 hover:sl-opacity-100 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-2 sl-transition-opacity';\n const colorClass = ['light', 'ghost'].includes(theme) \n ? 'sl-text-gray-400 dark:sl-text-gray-500 hover:sl-text-gray-500 dark:hover:sl-text-gray-400' \n : 'sl-text-white/70 hover:sl-text-white';\n return `${baseClass} ${colorClass}`;\n});\n\n// Icon component based on theme or custom\nconst iconComponent = computed((): Component | undefined => {\n // Allow custom icon override\n if (props.notification.icon) {\n return props.notification.icon;\n }\n \n const theme = props.notification.theme;\n const icons: Record<string, Component> = {\n primary: InformationCircleIcon,\n secondary: InformationCircleIcon,\n dark: ExclamationCircleIcon,\n light: InformationCircleIcon,\n warning: ExclamationTriangleIcon,\n danger: ExclamationCircleIcon,\n success: CheckCircleIcon,\n info: InformationCircleIcon,\n ghost: InformationCircleIcon,\n };\n return icons[theme] || icons.primary;\n});\n\n// Variant-specific sizing\nconst iconSizeClass = computed(() => {\n const sizes: Record<string, string> = {\n compact: 'sl-h-5 sl-w-5',\n default: 'sl-h-6 sl-w-6',\n expanded: 'sl-h-7 sl-w-7',\n };\n return sizes[props.notification.variant] || sizes.default;\n});\n\nconst titleClass = computed(() => {\n const sizes: Record<string, string> = {\n compact: 'sl-text-xs sl-font-medium',\n default: 'sl-text-sm sl-font-medium',\n expanded: 'sl-text-base sl-font-semibold',\n };\n return sizes[props.notification.variant] || sizes.default;\n});\n\nconst messageClass = computed(() => {\n const sizes: Record<string, string> = {\n compact: 'sl-mt-0.5 sl-text-xs',\n default: 'sl-mt-1 sl-text-sm',\n expanded: 'sl-mt-2 sl-text-sm',\n };\n return sizes[props.notification.variant] || sizes.default;\n});\n\nconst paddingClass = computed(() => {\n const sizes: Record<string, string> = {\n compact: 'sl-p-3',\n default: 'sl-p-4',\n expanded: 'sl-p-5',\n };\n return sizes[props.notification.variant] || sizes.default;\n});\n\nconst contentMarginClass = computed(() => {\n const sizes: Record<string, string> = {\n compact: 'sl-ml-2 sl-w-0 sl-flex-1',\n default: 'sl-ml-3 sl-w-0 sl-flex-1 sl-pt-0.5',\n expanded: 'sl-ml-4 sl-w-0 sl-flex-1 sl-pt-0.5',\n };\n return sizes[props.notification.variant] || sizes.default;\n});\n\n// Action button styling\nconst getActionButtonClass = (action: NotificationAction): string => {\n const base = 'sl-rounded sl-px-2 sl-py-1 sl-text-xs sl-font-medium sl-transition-colors focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-1';\n const theme = props.notification.theme;\n const isLightTheme = ['light', 'ghost'].includes(theme);\n \n const themes: Record<string, { light: string; dark: string }> = {\n primary: {\n light: 'sl-bg-primary-100 sl-text-primary-700 hover:sl-bg-primary-200 dark:sl-bg-primary-800 dark:sl-text-primary-200 dark:hover:sl-bg-primary-700',\n dark: 'sl-bg-white/20 sl-text-white hover:sl-bg-white/30'\n },\n secondary: {\n light: 'sl-bg-gray-100 sl-text-gray-700 hover:sl-bg-gray-200 dark:sl-bg-gray-700 dark:sl-text-gray-200 dark:hover:sl-bg-gray-600',\n dark: 'sl-bg-white/20 sl-text-white hover:sl-bg-white/30'\n },\n danger: {\n light: 'sl-bg-red-100 sl-text-red-700 hover:sl-bg-red-200 dark:sl-bg-red-900 dark:sl-text-red-200 dark:hover:sl-bg-red-800',\n dark: 'sl-bg-white/20 sl-text-white hover:sl-bg-white/30'\n }\n };\n \n const actionTheme = action.theme || 'secondary';\n const themeStyle = themes[actionTheme] || themes.secondary;\n \n return `${base} ${isLightTheme ? themeStyle.light : themeStyle.dark}`;\n};\n\n// Entry animation direction based on position\nconst enterFromClass = computed(() => {\n const position = props.notification.position;\n const classes: Record<string, string> = {\n tr: 'sl-translate-x-full sl-opacity-0',\n tl: '-sl-translate-x-full sl-opacity-0',\n br: 'sl-translate-x-full sl-opacity-0',\n bl: '-sl-translate-x-full sl-opacity-0',\n tc: '-sl-translate-y-full sl-opacity-0',\n bc: 'sl-translate-y-full sl-opacity-0',\n };\n return classes[position] || classes.br;\n});\n</script>\n"],"names":["props","__props","emit","__emit","handleClose","handleAction","action","handleCardClick","onAfterLeave","themeClass","computed","themes","variantClass","variants","priorityClass","priorityIndicatorClass","base","cardModeClass","toastStyle","styles","textColorClass","theme","iconColorClass","focusRingClass","rings","closeButtonClass","baseClass","colorClass","iconComponent","icons","InformationCircleIcon","ExclamationCircleIcon","ExclamationTriangleIcon","CheckCircleIcon","iconSizeClass","sizes","titleClass","messageClass","paddingClass","contentMarginClass","getActionButtonClass","isLightTheme","actionTheme","themeStyle","enterFromClass","position","classes","_createBlock","_unref","TransitionRoot","_createVNode","TransitionChild","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_2","_openBlock","_resolveDynamicComponent","_toDisplayString","_hoisted_3","_Fragment","idx","_withModifiers","$event","_hoisted_4","_cache","XMarkIcon"],"mappings":"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"}
Binary file
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { defineComponent as _, ref as w, computed as r, createElementBlock as y, openBlock as D, createElementVNode as d, createVNode as s, withCtx as b, createTextVNode as x } from "vue";
2
- import { _ as C } from "../CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js";
1
+ import { defineComponent as _, ref as w, computed as d, createElementBlock as y, openBlock as D, createElementVNode as r, createVNode as s, withCtx as b, createTextVNode as x } from "vue";
2
+ import { _ as C } from "../CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js";
3
3
  import { _ as S } from "../MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js";
4
4
  import { _ as E } from "../EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js";
5
5
  import V from "../components/Button.js";
@@ -12,27 +12,26 @@ const k = { class: "lg:sl-grid lg:sl-grid-cols-12 lg:sl-gap-x-8" }, B = { class:
12
12
  },
13
13
  emits: ["selectDay", "doubleSelectDay", "newEvent", "monthChange", "showAll"],
14
14
  setup(l, { emit: i }) {
15
- const o = l, t = i, n = w(null), h = r(
15
+ const o = l, t = i, n = w(null), u = d(
16
16
  () => o.events.length !== c.value.length
17
- ), c = r(() => n.value ? o.events.filter((e) => new Date(e.datetime).toISOString().split("T")[0] === n.value?.date) : o.events), m = (e) => {
17
+ ), c = d(() => n.value ? o.events.filter((e) => new Date(e.datetime).toISOString().split("T")[0] === n.value?.date) : o.events), m = (e) => {
18
18
  n.value = e, t("selectDay", e);
19
19
  }, g = (e) => {
20
20
  t("doubleSelectDay", e);
21
- }, u = (e) => {
21
+ }, h = (e) => {
22
22
  console.log("View changed to:", e);
23
- }, v = (e) => {
24
- e === "prev" ? t("monthChange", "prev") : e === "next" && t("monthChange", "next");
23
+ }, v = () => {
25
24
  }, f = () => {
26
25
  t("newEvent");
27
26
  }, p = () => {
28
27
  n.value = null, t("showAll");
29
28
  };
30
29
  return (e, a) => (D(), y("div", k, [
31
- d("div", B, [
30
+ r("div", B, [
32
31
  s(C, {
33
32
  view: "month",
34
33
  selectedRange: l.days,
35
- onChangeView: u,
34
+ onChangeView: h,
36
35
  onChangeRange: v
37
36
  }, null, 8, ["selectedRange"]),
38
37
  s(S, {
@@ -41,7 +40,7 @@ const k = { class: "lg:sl-grid lg:sl-grid-cols-12 lg:sl-gap-x-8" }, B = { class:
41
40
  onSelectDay: m,
42
41
  onDoubleSelectDay: g
43
42
  }, null, 8, ["days", "events"]),
44
- d("div", N, [
43
+ r("div", N, [
45
44
  s(V, {
46
45
  "center-label": "",
47
46
  type: "button",
@@ -59,12 +58,12 @@ const k = { class: "lg:sl-grid lg:sl-grid-cols-12 lg:sl-gap-x-8" }, B = { class:
59
58
  s(E, {
60
59
  class: "lg:sl-col-span-7 xl:sl-col-span-8 sl-py-6",
61
60
  events: c.value,
62
- "show-all-button": h.value,
61
+ "show-all-button": u.value,
63
62
  "onShow:all": p
64
63
  }, null, 8, ["events", "show-all-button"])
65
64
  ]));
66
65
  }
67
- }), j = /* @__PURE__ */ A(R, [["__scopeId", "data-v-d92b7279"]]);
66
+ }), j = /* @__PURE__ */ A(R, [["__scopeId", "data-v-c9d5dc08"]]);
68
67
  export {
69
68
  j as default
70
69
  };
@@ -1 +1 @@
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 = (direction: string) => {\n if (direction === 'prev') {\n emit('monthChange', 'prev');\n } else if (direction === 'next') {\n emit('monthChange', 'next');\n }\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","direction","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,CAACC,MAAsB;AAC/C,MAAIA,MAAc,SAChBd,EAAK,eAAe,MAAM,IACjBc,MAAc,UACvBd,EAAK,eAAe,MAAM;AAAA,IAE9B,GAEMe,IAAsB,MAAM;AAChC,MAAAf,EAAK,UAAU;AAAA,IACjB,GAEMgB,IAAgB,MAAM;AAC1B,MAAAd,EAAY,QAAQ,MACpBF,EAAK,SAAS;AAAA,IAChB;sBApFEiB,EAAA,GAAAC,EAsBM,OAtBNC,GAsBM;AAAA,MApBJC,EAYM,OAZNC,GAYM;AAAA,QAXJC,EAAwHC,GAAA;AAAA,UAAvG,MAAM;AAAA,UAAU,eAAexB,EAAA;AAAA,UAAO,cAAYY;AAAA,UAAmB,eAAaE;AAAA,QAAA;QACnGS,EAI6CE,GAAA;AAAA,UAH1C,MAAMzB,EAAA;AAAA,UACN,QAAQA,EAAA;AAAA,UACR,aAAWS;AAAA,UACX,mBAAiBE;AAAA,QAAA;QACpBU,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,QAAQtB,EAAA;AAAA,QACR,mBAAiBF,EAAA;AAAA,QACjB,cAAUY;AAAA,MAAA;;;;"}
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,4 +1,4 @@
1
- import { _ as f } from "../CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js";
1
+ import { _ as f } from "../CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.js";
2
2
  export {
3
3
  f as default
4
4
  };
@@ -1,6 +1,7 @@
1
- import { createElementBlock as d, openBlock as u, createElementVNode as o, defineComponent as L, inject as M, ref as h, computed as l, watch as P, onMounted as Z, onUnmounted as E, normalizeClass as n, normalizeStyle as C, withDirectives as p, createCommentVNode as D, createBlock as x, resolveDynamicComponent as S, vShow as v } from "vue";
2
- import { _ as U } from "../_plugin-vue_export-helper-CHgC5LLL.js";
3
- function z(i, f) {
1
+ import { createElementBlock as d, openBlock as u, createElementVNode as r, defineComponent as U, inject as D, ref as v, computed as l, watch as F, onMounted as W, onUnmounted as z, normalizeClass as n, normalizeStyle as C, withDirectives as g, createCommentVNode as O, createBlock as x, resolveDynamicComponent as k, vShow as y } from "vue";
2
+ import P from "https://res.cloudinary.com/demo/image/upload/sample.jpg?vue&type=CloudinaryImage&index=0&src=true&alt=Sample%20image&lang.CloudinaryImage";
3
+ import { _ as V } from "../_plugin-vue_export-helper-CHgC5LLL.js";
4
+ function H(i, f) {
4
5
  return u(), d("svg", {
5
6
  xmlns: "http://www.w3.org/2000/svg",
6
7
  viewBox: "0 0 20 20",
@@ -8,14 +9,14 @@ function z(i, f) {
8
9
  "aria-hidden": "true",
9
10
  "data-slot": "icon"
10
11
  }, [
11
- o("path", {
12
+ r("path", {
12
13
  "fill-rule": "evenodd",
13
14
  d: "M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z",
14
15
  "clip-rule": "evenodd"
15
16
  })
16
17
  ]);
17
18
  }
18
- function F(i, f) {
19
+ function G(i, f) {
19
20
  return u(), d("svg", {
20
21
  xmlns: "http://www.w3.org/2000/svg",
21
22
  viewBox: "0 0 20 20",
@@ -23,24 +24,37 @@ function F(i, f) {
23
24
  "aria-hidden": "true",
24
25
  "data-slot": "icon"
25
26
  }, [
26
- o("path", {
27
+ r("path", {
27
28
  "fill-rule": "evenodd",
28
29
  d: "M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-5.5-2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM10 12a5.99 5.99 0 0 0-4.793 2.39A6.483 6.483 0 0 0 10 16.5a6.483 6.483 0 0 0 4.793-2.11A5.99 5.99 0 0 0 10 12Z",
29
30
  "clip-rule": "evenodd"
30
31
  })
31
32
  ]);
32
33
  }
33
- const O = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center" }, V = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center" }, H = {
34
+ const J = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center" }, K = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center" }, Q = {
34
35
  key: 0,
35
36
  class: "sl-h-full sl-w-full"
36
- }, G = ["src", "alt"], J = /* @__PURE__ */ L({
37
+ }, T = ["src", "alt"], $ = /* @__PURE__ */ U({
37
38
  __name: "CloudinaryImage",
38
39
  props: {
40
+ /** Direct image URL - bypasses Cloudinary URL generation */
41
+ src: {
42
+ type: String,
43
+ required: !1,
44
+ default: null
45
+ },
46
+ /** Cloudinary public ID */
39
47
  publicId: {
40
48
  type: String,
41
49
  required: !1,
42
50
  default: null
43
51
  },
52
+ /** Alias for publicId (for compatibility with different naming conventions) */
53
+ imagePublicId: {
54
+ type: String,
55
+ required: !1,
56
+ default: null
57
+ },
44
58
  asset: {
45
59
  type: Object,
46
60
  default: null,
@@ -51,6 +65,12 @@ const O = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-cente
51
65
  required: !1,
52
66
  default: null
53
67
  },
68
+ /** Fallback URL to use if primary image fails */
69
+ fallbackSrc: {
70
+ type: String,
71
+ required: !1,
72
+ default: null
73
+ },
54
74
  transformations: {
55
75
  type: Array,
56
76
  default: () => []
@@ -94,82 +114,84 @@ const O = { class: "sl-flex sl-h-full sl-w-full sl-items-center sl-justify-cente
94
114
  },
95
115
  emits: ["update:imageLoaded", "error"],
96
116
  setup(i, { emit: f }) {
97
- const g = M("cloudinary", {}), s = h(!1), r = h(!1), c = h(!0), y = f, e = i, m = l(() => e.asset?.public_id ? e.asset.public_id : e.publicId || e.fallbackPublicId || null), w = l(() => {
98
- if (!m.value) return null;
99
- const t = g?.cloudName || "demo", b = g?.baseUrl || `https://res.cloudinary.com/${t}/image/upload`, a = [];
117
+ const b = D("cloudinary", {}), s = v(!1), o = v(!1), c = v(!0), w = f, e = i, m = (t) => t ? t.startsWith("http://") || t.startsWith("https://") || t.startsWith("//") : !1, p = l(() => e.src && m(e.src) ? e.src : e.asset?.secure_url ? e.asset.secure_url : e.asset?.url ? e.asset.url : e.publicId && m(e.publicId) ? e.publicId : e.imagePublicId && m(e.imagePublicId) ? e.imagePublicId : null), _ = l(() => p.value ? null : e.asset?.public_id ? e.asset.public_id : e.imagePublicId || e.publicId || e.fallbackPublicId || null), q = l(() => {
118
+ if (!_.value) return null;
119
+ const t = b?.cloudName || "demo", S = b?.baseUrl || `https://res.cloudinary.com/${t}/image/upload`, a = [];
100
120
  e.width && e.width !== "auto" && a.push(`w_${e.width}`), e.height && e.height !== "auto" && a.push(`h_${e.height}`), e.quality && a.push(`q_${e.quality}`), e.devicePixelRatio && a.push(`dpr_${e.devicePixelRatio}`), a.push("f_auto"), a.push("c_fill");
101
- const B = a.join(",");
102
- return `${b}/${B}/${m.value}`;
103
- }), _ = l(() => e.skeleton === "user" ? F : z), k = l(() => {
121
+ const E = a.join(",");
122
+ return `${S}/${E}/${_.value}`;
123
+ }), h = l(() => p.value ? p.value : q.value), I = l(() => e.skeleton === "user" ? G : H), j = l(() => {
104
124
  const t = {};
105
125
  return e.width && e.width !== "auto" && (t.width = typeof e.width == "number" ? `${e.width}px` : e.width), e.height && e.height !== "auto" && (t.height = typeof e.height == "number" ? `${e.height}px` : e.height), e.aspectRatio && (t.aspectRatio = String(e.aspectRatio)), t;
106
- }), I = l(() => ({
126
+ }), N = l(() => ({
107
127
  "sl-relative sl-overflow-hidden": !0,
108
128
  ...e.customClasses?.div
109
- })), $ = l(() => ({
129
+ })), A = l(() => ({
110
130
  "sl-h-full sl-w-full sl-text-gray-200": !0,
111
131
  ...e.customClasses?.skeleton
112
- })), j = l(() => ({
132
+ })), R = l(() => ({
113
133
  "sl-h-full sl-w-full sl-text-gray-300": !0,
114
134
  ...e.customClasses?.fallback
115
- })), N = l(() => ({
135
+ })), B = l(() => ({
116
136
  "sl-h-full sl-w-full sl-object-cover": !0,
117
137
  ...e.customClasses?.image
118
- })), q = l(() => ({
138
+ })), L = l(() => ({
119
139
  objectFit: "cover"
120
- })), A = () => {
121
- s.value = !0, r.value = !1, y("update:imageLoaded", !0);
122
- }, R = (t) => {
123
- c.value && (r.value = !0, s.value = !1, y("error", t));
140
+ })), M = () => {
141
+ s.value = !0, o.value = !1, w("update:imageLoaded", !0);
142
+ }, Z = (t) => {
143
+ c.value && (o.value = !0, s.value = !1, w("error", t));
124
144
  };
125
- return P(
126
- () => m.value,
145
+ return F(
146
+ () => h.value,
127
147
  () => {
128
- s.value = !1, r.value = !1;
148
+ s.value = !1, o.value = !1;
129
149
  }
130
- ), Z(() => {
150
+ ), W(() => {
131
151
  c.value = !0;
132
- }), E(() => {
152
+ }), z(() => {
133
153
  c.value = !1;
134
- }), (t, b) => (u(), d("div", {
135
- style: C(k.value),
136
- class: n(I.value)
154
+ }), (t, S) => (u(), d("div", {
155
+ style: C(j.value),
156
+ class: n(N.value)
137
157
  }, [
138
- p(o("div", O, [
139
- o("div", {
158
+ g(r("div", J, [
159
+ r("div", {
140
160
  role: "status",
141
161
  class: n([{ "sl-animate-pulse": i.pulse }])
142
162
  }, [
143
- (u(), x(S(_.value), {
144
- class: n($.value)
163
+ (u(), x(k(I.value), {
164
+ class: n(A.value)
145
165
  }, null, 8, ["class"]))
146
166
  ], 2)
147
167
  ], 512), [
148
- [v, !s.value && !r.value]
168
+ [y, !s.value && !o.value]
149
169
  ]),
150
- p(o("div", V, [
151
- (u(), x(S(_.value), {
152
- class: n(j.value)
170
+ g(r("div", K, [
171
+ (u(), x(k(I.value), {
172
+ class: n(R.value)
153
173
  }, null, 8, ["class"]))
154
174
  ], 512), [
155
- [v, r.value && !s.value]
175
+ [y, o.value && !s.value]
156
176
  ]),
157
- w.value && c.value ? p((u(), d("div", H, [
158
- o("img", {
159
- src: w.value,
177
+ h.value && c.value ? g((u(), d("div", Q, [
178
+ r("img", {
179
+ src: h.value,
160
180
  alt: i.alt,
161
- onLoad: A,
162
- onError: R,
163
- class: n(N.value),
164
- style: C(q.value)
165
- }, null, 46, G)
181
+ onLoad: M,
182
+ onError: Z,
183
+ class: n(B.value),
184
+ style: C(L.value)
185
+ }, null, 46, T)
166
186
  ], 512)), [
167
- [v, s.value]
168
- ]) : D("", !0)
187
+ [y, s.value]
188
+ ]) : O("", !0)
169
189
  ], 6));
170
190
  }
171
- }), T = /* @__PURE__ */ U(J, [["__scopeId", "data-v-b8d07cc6"]]);
191
+ });
192
+ typeof P == "function" && P($);
193
+ const te = /* @__PURE__ */ V($, [["__scopeId", "data-v-18ba2d71"]]);
172
194
  export {
173
- T as default
195
+ te as default
174
196
  };
175
197
  //# sourceMappingURL=CloudinaryImage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CloudinaryImage.js","sources":["../../node_modules/@heroicons/vue/20/solid/esm/PhotoIcon.js","../../node_modules/@heroicons/vue/20/solid/esm/UserCircleIcon.js","../../src/components/CloudinaryImage.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\",\n \"clip-rule\": \"evenodd\"\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 viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-5.5-2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM10 12a5.99 5.99 0 0 0-4.793 2.39A6.483 6.483 0 0 0 10 16.5a6.483 6.483 0 0 0 4.793-2.11A5.99 5.99 0 0 0 10 12Z\",\n \"clip-rule\": \"evenodd\"\n })\n ]))\n}","<!--\n @component CloudinaryImage\n @description Cloudinary image component with loading states and fallbacks.\n \n Displays images from Cloudinary with automatic transformations, loading\n skeleton, error fallback, and flexible sizing options.\n \n @props\n - publicId (string, optional): Cloudinary public ID\n - asset (CloudinaryAsset, optional): Full asset object with transformations\n - fallbackPublicId (string, optional): Fallback image public ID\n - transformations (array, optional): Additional Cloudinary transformations\n - alt (string, optional): Alt text for accessibility\n - aspectRatio (string|number, optional): Aspect ratio (e.g., '16/9')\n - width (string|number, optional): Width in pixels or 'auto'\n - height (string|number, optional): Height in pixels or 'auto'\n - quality (string|number, optional): Image quality (1-100 or 'auto')\n - skeleton (string, optional): Skeleton type - 'user' or 'photo'\n - pulse (boolean, optional): Animate skeleton\n \n @emits\n - update:imageLoaded: Emitted when image load state changes\n - error: Emitted on image load error\n \n @example\n <CloudinaryImage\n public-id=\"avatars/user123\"\n :width=\"200\"\n :height=\"200\"\n alt=\"User avatar\"\n skeleton=\"user\"\n />\n-->\n<template>\n <div :style=\"computedDivStyle\" :class=\"computedDivClass\">\n <!-- Loading skeleton -->\n <div v-show=\"!imageLoaded && !imageError\" class=\"sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center\">\n <div role=\"status\" :class=\"[{ 'sl-animate-pulse': pulse }]\">\n <component :is=\"skeletonComponent\" :class=\"computedSkeletonClass\" />\n </div>\n </div>\n\n <!-- Error fallback -->\n <div v-show=\"imageError && !imageLoaded\" class=\"sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center\">\n <component :is=\"skeletonComponent\" :class=\"computedFallbackClass\" />\n </div>\n\n <!-- Image -->\n <div v-if=\"computedImg && isMounted\" v-show=\"imageLoaded\" class=\"sl-h-full sl-w-full\">\n <img\n :src=\"computedImg\"\n :alt=\"alt\"\n @load=\"onImageLoad\"\n @error=\"onImageError\"\n :class=\"computedImageClass\"\n :style=\"computedImageStyle\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * CloudinaryImage - Image component with Cloudinary CDN support\n * \n * Provides a comprehensive image component with loading states, error handling,\n * and Cloudinary transformations. Uses plugin configuration for Cloudinary setup.\n * \n * ## Features\n * - Automatic loading skeleton\n * - Error fallback display\n * - Cloudinary URL generation\n * - Responsive sizing\n * - Aspect ratio control\n * - Quality optimization\n * \n * ## Plugin Configuration\n * Configure Cloudinary in your app setup:\n * ```typescript\n * app.use(StachelockUI, {\n * cloudinary: {\n * cloudName: 'your-cloud-name',\n * defaultTransformations: [...]\n * }\n * })\n * ```\n * \n * @module components/CloudinaryImage\n * @see {@link CloudinaryImageProps} for prop interface\n */\nimport { UserCircleIcon, PhotoIcon } from '@heroicons/vue/20/solid';\nimport { computed, inject, onMounted, onUnmounted, ref, watch } from 'vue';\nimport type { PropType } from 'vue';\nimport type { CloudinaryAsset, CloudinaryTransformationStep } from '../types/core';\n\n// Plugin configuration injection\nconst cloudinaryConfig = inject<{\n cloudName?: string;\n baseUrl?: string;\n defaultTransformations?: CloudinaryTransformationStep[];\n}>('cloudinary', {});\n\ninterface CustomClasses {\n div?: Record<string, boolean>;\n skeleton?: Record<string, boolean>;\n image?: Record<string, boolean>;\n fallback?: Record<string, boolean>;\n}\n\n// State\nconst imageLoaded = ref(false);\nconst imageError = ref(false);\nconst isMounted = ref(true);\n\nconst emit = defineEmits<{\n 'update:imageLoaded': [value: boolean];\n 'error': [error: unknown];\n}>();\n\nconst props = defineProps({\n publicId: {\n type: String,\n required: false,\n default: null\n },\n asset: {\n type: Object as PropType<CloudinaryAsset | null>,\n default: null,\n required: false\n },\n fallbackPublicId: {\n type: String,\n required: false,\n default: null\n },\n transformations: {\n type: Array as PropType<Array<(image: unknown) => void>>,\n default: () => []\n },\n alt: {\n type: String,\n default: ''\n },\n aspectRatio: {\n type: [String, Number] as PropType<string | number>,\n default: null\n },\n width: {\n type: [String, Number] as PropType<string | number>,\n default: 64\n },\n height: {\n type: [String, Number] as PropType<string | number>,\n default: 64\n },\n quality: {\n type: [String, Number],\n default: '90'\n },\n devicePixelRatio: {\n type: String,\n default: '2.0'\n },\n skeleton: {\n type: String as PropType<'user' | 'photo'>,\n default: 'photo'\n },\n pulse: {\n type: Boolean,\n default: true\n },\n customClasses: {\n type: Object as PropType<CustomClasses>,\n default: () => ({})\n }\n});\n\n// Computed: Effective public ID\nconst effectivePublicId = computed(() => {\n if (props.asset?.public_id) {\n return props.asset.public_id;\n }\n return props.publicId || props.fallbackPublicId || null;\n});\n\n// Computed: Generate Cloudinary URL\nconst computedImg = computed(() => {\n if (!effectivePublicId.value) return null;\n \n const cloudName = cloudinaryConfig?.cloudName || 'demo';\n const baseUrl = cloudinaryConfig?.baseUrl || `https://res.cloudinary.com/${cloudName}/image/upload`;\n \n // Build transformation string\n const transformations: string[] = [];\n \n // Add width/height\n if (props.width && props.width !== 'auto') {\n transformations.push(`w_${props.width}`);\n }\n if (props.height && props.height !== 'auto') {\n transformations.push(`h_${props.height}`);\n }\n \n // Add quality\n if (props.quality) {\n transformations.push(`q_${props.quality}`);\n }\n \n // Add DPR\n if (props.devicePixelRatio) {\n transformations.push(`dpr_${props.devicePixelRatio}`);\n }\n \n // Auto format\n transformations.push('f_auto');\n \n // Crop mode\n transformations.push('c_fill');\n \n const transformString = transformations.join(',');\n \n return `${baseUrl}/${transformString}/${effectivePublicId.value}`;\n});\n\n// Skeleton component based on type\nconst skeletonComponent = computed(() => {\n return props.skeleton === 'user' ? UserCircleIcon : PhotoIcon;\n});\n\n// Style computations\nconst computedDivStyle = computed(() => {\n const style: Record<string, string> = {};\n \n if (props.width && props.width !== 'auto') {\n style.width = typeof props.width === 'number' ? `${props.width}px` : props.width;\n }\n if (props.height && props.height !== 'auto') {\n style.height = typeof props.height === 'number' ? `${props.height}px` : props.height;\n }\n if (props.aspectRatio) {\n style.aspectRatio = String(props.aspectRatio);\n }\n \n return style;\n});\n\nconst computedDivClass = computed(() => ({\n 'sl-relative sl-overflow-hidden': true,\n ...props.customClasses?.div\n}));\n\nconst computedSkeletonClass = computed(() => ({\n 'sl-h-full sl-w-full sl-text-gray-200': true,\n ...props.customClasses?.skeleton\n}));\n\nconst computedFallbackClass = computed(() => ({\n 'sl-h-full sl-w-full sl-text-gray-300': true,\n ...props.customClasses?.fallback\n}));\n\nconst computedImageClass = computed(() => ({\n 'sl-h-full sl-w-full sl-object-cover': true,\n ...props.customClasses?.image\n}));\n\nconst computedImageStyle = computed(() => ({\n objectFit: 'cover' as const,\n}));\n\n// Event handlers\nconst onImageLoad = () => {\n imageLoaded.value = true;\n imageError.value = false;\n emit('update:imageLoaded', true);\n};\n\nconst onImageError = (error: Event) => {\n if (!isMounted.value) return;\n \n imageError.value = true;\n imageLoaded.value = false;\n emit('error', error);\n};\n\n// Reset state when publicId changes\nwatch(\n () => effectivePublicId.value,\n () => {\n imageLoaded.value = false;\n imageError.value = false;\n }\n);\n\n// Lifecycle\nonMounted(() => {\n isMounted.value = true;\n});\n\nonUnmounted(() => {\n isMounted.value = false;\n});\n</script>\n\n<style scoped>\n/* Prevent layout shift */\n[data-loading=\"true\"] {\n min-height: 20px;\n}\n</style>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","cloudinaryConfig","inject","imageLoaded","ref","imageError","isMounted","emit","__emit","props","__props","effectivePublicId","computed","computedImg","cloudName","baseUrl","transformations","transformString","skeletonComponent","UserCircleIcon","PhotoIcon","computedDivStyle","style","computedDivClass","computedSkeletonClass","computedFallbackClass","computedImageClass","computedImageStyle","onImageLoad","onImageError","error","watch","onMounted","onUnmounted","_withDirectives","_hoisted_1","_createBlock","_resolveDynamicComponent","_vShow","_hoisted_2","_hoisted_3"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"CloudinaryImage.js","sources":["../../node_modules/@heroicons/vue/20/solid/esm/PhotoIcon.js","../../node_modules/@heroicons/vue/20/solid/esm/UserCircleIcon.js","../../src/components/CloudinaryImage.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M1 5.25A2.25 2.25 0 0 1 3.25 3h13.5A2.25 2.25 0 0 1 19 5.25v9.5A2.25 2.25 0 0 1 16.75 17H3.25A2.25 2.25 0 0 1 1 14.75v-9.5Zm1.5 5.81v3.69c0 .414.336.75.75.75h13.5a.75.75 0 0 0 .75-.75v-2.69l-2.22-2.219a.75.75 0 0 0-1.06 0l-1.91 1.909.47.47a.75.75 0 1 1-1.06 1.06L6.53 8.091a.75.75 0 0 0-1.06 0l-2.97 2.97ZM12 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\",\n \"clip-rule\": \"evenodd\"\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 viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n d: \"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-5.5-2.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM10 12a5.99 5.99 0 0 0-4.793 2.39A6.483 6.483 0 0 0 10 16.5a6.483 6.483 0 0 0 4.793-2.11A5.99 5.99 0 0 0 10 12Z\",\n \"clip-rule\": \"evenodd\"\n })\n ]))\n}","<!--\n @component CloudinaryImage\n @description Cloudinary image component with loading states and fallbacks.\n \n Displays images from Cloudinary with automatic transformations, loading\n skeleton, error fallback, and flexible sizing options.\n \n @props\n - src (string, optional): Direct image URL (bypasses Cloudinary URL generation)\n - publicId (string, optional): Cloudinary public ID\n - imagePublicId (string, optional): Alias for publicId (for compatibility)\n - asset (CloudinaryAsset, optional): Full asset object with transformations\n - fallbackPublicId (string, optional): Fallback image public ID\n - transformations (array, optional): Additional Cloudinary transformations\n - alt (string, optional): Alt text for accessibility\n - aspectRatio (string|number, optional): Aspect ratio (e.g., '16/9')\n - width (string|number, optional): Width in pixels or 'auto'\n - height (string|number, optional): Height in pixels or 'auto'\n - quality (string|number, optional): Image quality (1-100 or 'auto')\n - skeleton (string, optional): Skeleton type - 'user' or 'photo'\n - pulse (boolean, optional): Animate skeleton\n \n @emits\n - update:imageLoaded: Emitted when image load state changes\n - error: Emitted on image load error\n \n @example\n <!-- Using direct URL -->\n <CloudinaryImage\n src=\"https://res.cloudinary.com/demo/image/upload/sample.jpg\"\n :width=\"200\"\n :height=\"200\"\n alt=\"Sample image\"\n />\n \n @example\n <!-- Using public ID with auto-generated URL -->\n <CloudinaryImage\n public-id=\"avatars/user123\"\n :width=\"200\"\n :height=\"200\"\n alt=\"User avatar\"\n skeleton=\"user\"\n />\n-->\n<template>\n <div :style=\"computedDivStyle\" :class=\"computedDivClass\">\n <!-- Loading skeleton -->\n <div v-show=\"!imageLoaded && !imageError\" class=\"sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center\">\n <div role=\"status\" :class=\"[{ 'sl-animate-pulse': pulse }]\">\n <component :is=\"skeletonComponent\" :class=\"computedSkeletonClass\" />\n </div>\n </div>\n\n <!-- Error fallback -->\n <div v-show=\"imageError && !imageLoaded\" class=\"sl-flex sl-h-full sl-w-full sl-items-center sl-justify-center\">\n <component :is=\"skeletonComponent\" :class=\"computedFallbackClass\" />\n </div>\n\n <!-- Image -->\n <div v-if=\"computedImg && isMounted\" v-show=\"imageLoaded\" class=\"sl-h-full sl-w-full\">\n <img\n :src=\"computedImg\"\n :alt=\"alt\"\n @load=\"onImageLoad\"\n @error=\"onImageError\"\n :class=\"computedImageClass\"\n :style=\"computedImageStyle\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * CloudinaryImage - Image component with Cloudinary CDN support\n * \n * Provides a comprehensive image component with loading states, error handling,\n * and Cloudinary transformations. Uses plugin configuration for Cloudinary setup.\n * \n * ## Features\n * - Automatic loading skeleton\n * - Error fallback display\n * - Cloudinary URL generation\n * - Responsive sizing\n * - Aspect ratio control\n * - Quality optimization\n * \n * ## Plugin Configuration\n * Configure Cloudinary in your app setup:\n * ```typescript\n * app.use(StachelockUI, {\n * cloudinary: {\n * cloudName: 'your-cloud-name',\n * defaultTransformations: [...]\n * }\n * })\n * ```\n * \n * @module components/CloudinaryImage\n * @see {@link CloudinaryImageProps} for prop interface\n */\nimport { UserCircleIcon, PhotoIcon } from '@heroicons/vue/20/solid';\nimport { computed, inject, onMounted, onUnmounted, ref, watch } from 'vue';\nimport type { PropType } from 'vue';\nimport type { CloudinaryAsset, CloudinaryTransformationStep } from '../types/core';\n\n// Plugin configuration injection\nconst cloudinaryConfig = inject<{\n cloudName?: string;\n baseUrl?: string;\n defaultTransformations?: CloudinaryTransformationStep[];\n}>('cloudinary', {});\n\ninterface CustomClasses {\n div?: Record<string, boolean>;\n skeleton?: Record<string, boolean>;\n image?: Record<string, boolean>;\n fallback?: Record<string, boolean>;\n}\n\n// State\nconst imageLoaded = ref(false);\nconst imageError = ref(false);\nconst isMounted = ref(true);\n\nconst emit = defineEmits<{\n 'update:imageLoaded': [value: boolean];\n 'error': [error: unknown];\n}>();\n\nconst props = defineProps({\n /** Direct image URL - bypasses Cloudinary URL generation */\n src: {\n type: String,\n required: false,\n default: null\n },\n /** Cloudinary public ID */\n publicId: {\n type: String,\n required: false,\n default: null\n },\n /** Alias for publicId (for compatibility with different naming conventions) */\n imagePublicId: {\n type: String,\n required: false,\n default: null\n },\n asset: {\n type: Object as PropType<CloudinaryAsset | null>,\n default: null,\n required: false\n },\n fallbackPublicId: {\n type: String,\n required: false,\n default: null\n },\n /** Fallback URL to use if primary image fails */\n fallbackSrc: {\n type: String,\n required: false,\n default: null\n },\n transformations: {\n type: Array as PropType<Array<(image: unknown) => void>>,\n default: () => []\n },\n alt: {\n type: String,\n default: ''\n },\n aspectRatio: {\n type: [String, Number] as PropType<string | number>,\n default: null\n },\n width: {\n type: [String, Number] as PropType<string | number>,\n default: 64\n },\n height: {\n type: [String, Number] as PropType<string | number>,\n default: 64\n },\n quality: {\n type: [String, Number],\n default: '90'\n },\n devicePixelRatio: {\n type: String,\n default: '2.0'\n },\n skeleton: {\n type: String as PropType<'user' | 'photo'>,\n default: 'photo'\n },\n pulse: {\n type: Boolean,\n default: true\n },\n customClasses: {\n type: Object as PropType<CustomClasses>,\n default: () => ({})\n }\n});\n\n/**\n * Helper to check if a string is a full URL\n */\nconst isFullUrl = (value: string | null | undefined): boolean => {\n if (!value) return false;\n return value.startsWith('http://') || value.startsWith('https://') || value.startsWith('//');\n};\n\n// Computed: Direct URL source (if provided)\nconst directSrc = computed(() => {\n // Check src prop first\n if (props.src && isFullUrl(props.src)) {\n return props.src;\n }\n \n // Check if asset has secure_url or url\n if (props.asset?.secure_url) {\n return props.asset.secure_url;\n }\n if ((props.asset as any)?.url) {\n return (props.asset as any).url;\n }\n \n // Check if publicId or imagePublicId is actually a full URL\n if (props.publicId && isFullUrl(props.publicId)) {\n return props.publicId;\n }\n if (props.imagePublicId && isFullUrl(props.imagePublicId)) {\n return props.imagePublicId;\n }\n \n return null;\n});\n\n// Computed: Effective public ID (when not using direct URL)\nconst effectivePublicId = computed(() => {\n // If we have a direct URL, we don't need a public ID\n if (directSrc.value) return null;\n \n if (props.asset?.public_id) {\n return props.asset.public_id;\n }\n return props.imagePublicId || props.publicId || props.fallbackPublicId || null;\n});\n\n// Computed: Generate Cloudinary URL from public ID\nconst generatedCloudinaryUrl = computed(() => {\n if (!effectivePublicId.value) return null;\n \n const cloudName = cloudinaryConfig?.cloudName || 'demo';\n const baseUrl = cloudinaryConfig?.baseUrl || `https://res.cloudinary.com/${cloudName}/image/upload`;\n \n // Build transformation string\n const transformations: string[] = [];\n \n // Add width/height\n if (props.width && props.width !== 'auto') {\n transformations.push(`w_${props.width}`);\n }\n if (props.height && props.height !== 'auto') {\n transformations.push(`h_${props.height}`);\n }\n \n // Add quality\n if (props.quality) {\n transformations.push(`q_${props.quality}`);\n }\n \n // Add DPR\n if (props.devicePixelRatio) {\n transformations.push(`dpr_${props.devicePixelRatio}`);\n }\n \n // Auto format\n transformations.push('f_auto');\n \n // Crop mode\n transformations.push('c_fill');\n \n const transformString = transformations.join(',');\n \n return `${baseUrl}/${transformString}/${effectivePublicId.value}`;\n});\n\n// Computed: Final image URL (prefers direct URL over generated)\nconst computedImg = computed(() => {\n // Use direct URL if available\n if (directSrc.value) {\n return directSrc.value;\n }\n \n // Otherwise use generated Cloudinary URL\n return generatedCloudinaryUrl.value;\n});\n\n// Skeleton component based on type\nconst skeletonComponent = computed(() => {\n return props.skeleton === 'user' ? UserCircleIcon : PhotoIcon;\n});\n\n// Style computations\nconst computedDivStyle = computed(() => {\n const style: Record<string, string> = {};\n \n if (props.width && props.width !== 'auto') {\n style.width = typeof props.width === 'number' ? `${props.width}px` : props.width;\n }\n if (props.height && props.height !== 'auto') {\n style.height = typeof props.height === 'number' ? `${props.height}px` : props.height;\n }\n if (props.aspectRatio) {\n style.aspectRatio = String(props.aspectRatio);\n }\n \n return style;\n});\n\nconst computedDivClass = computed(() => ({\n 'sl-relative sl-overflow-hidden': true,\n ...props.customClasses?.div\n}));\n\nconst computedSkeletonClass = computed(() => ({\n 'sl-h-full sl-w-full sl-text-gray-200': true,\n ...props.customClasses?.skeleton\n}));\n\nconst computedFallbackClass = computed(() => ({\n 'sl-h-full sl-w-full sl-text-gray-300': true,\n ...props.customClasses?.fallback\n}));\n\nconst computedImageClass = computed(() => ({\n 'sl-h-full sl-w-full sl-object-cover': true,\n ...props.customClasses?.image\n}));\n\nconst computedImageStyle = computed(() => ({\n objectFit: 'cover' as const,\n}));\n\n// Event handlers\nconst onImageLoad = () => {\n imageLoaded.value = true;\n imageError.value = false;\n emit('update:imageLoaded', true);\n};\n\nconst onImageError = (error: Event) => {\n if (!isMounted.value) return;\n \n imageError.value = true;\n imageLoaded.value = false;\n emit('error', error);\n};\n\n// Reset state when source changes\nwatch(\n () => computedImg.value,\n () => {\n imageLoaded.value = false;\n imageError.value = false;\n }\n);\n\n// Lifecycle\nonMounted(() => {\n isMounted.value = true;\n});\n\nonUnmounted(() => {\n isMounted.value = false;\n});\n</script>\n\n<style scoped>\n/* Prevent layout shift */\n[data-loading=\"true\"] {\n min-height: 20px;\n}\n</style>\n\n"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","cloudinaryConfig","inject","imageLoaded","ref","imageError","isMounted","emit","__emit","props","__props","isFullUrl","value","directSrc","computed","effectivePublicId","generatedCloudinaryUrl","cloudName","baseUrl","transformations","transformString","computedImg","skeletonComponent","UserCircleIcon","PhotoIcon","computedDivStyle","style","computedDivClass","computedSkeletonClass","computedFallbackClass","computedImageClass","computedImageStyle","onImageLoad","onImageError","error","watch","onMounted","onUnmounted","_withDirectives","_hoisted_1","_createBlock","_resolveDynamicComponent","_vShow","_hoisted_2","_hoisted_3"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,4 +1,4 @@
1
- import { _ as f } from "../EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js";
1
+ import { _ as f } from "../EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js";
2
2
  export {
3
3
  f as default
4
4
  };
@@ -1,5 +1,5 @@
1
1
  import { _ as m } from "../ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js";
2
- import { _ as a } from "../EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js";
2
+ import { _ as a } from "../EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js";
3
3
  export {
4
4
  m as ComingSoon,
5
5
  a as EmptyState
Binary file
Binary file
Binary file