@stachelock/ui 0.4.0 → 0.5.0

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 (443) 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/calendars/CalendarDashboard.js +11 -12
  14. package/dist/calendars/CalendarDashboard.js.map +1 -1
  15. package/dist/calendars/CalendarHeader.js +1 -1
  16. package/dist/empty-state/EmptyState.js +1 -1
  17. package/dist/empty-state/index.js +1 -1
  18. package/dist/index.js +88 -88
  19. package/dist/index.js.map +1 -1
  20. package/dist/inputs/ComboboxInput.js +1 -1
  21. package/dist/inputs/TextInput.js +1 -1
  22. package/dist/inputs/TextInput.js.map +1 -1
  23. package/dist/notifications/NotificationContainer.js +2 -36
  24. package/dist/notifications/NotificationContainer.js.map +1 -1
  25. package/dist/notifications/NotificationToast.js +1 -1
  26. package/dist/notifications/index.js +4 -4
  27. package/dist/src/components/CloudinaryImage.d.ts +0 -1
  28. package/dist/src/components/LottieAnimation.d.ts +0 -1
  29. package/dist/src/components/ThemeDebugModal.d.ts +0 -1
  30. package/dist/src/components/UiAvatar.d.ts +0 -1
  31. package/dist/src/components/UiBadge.d.ts +0 -1
  32. package/dist/src/components/UiBanner.d.ts +0 -1
  33. package/dist/src/components/UiBreadcrumb.d.ts +0 -1
  34. package/dist/src/components/UiButton.d.ts +0 -1
  35. package/dist/src/components/UiButtonGroup.d.ts +0 -1
  36. package/dist/src/components/UiCheckbox.d.ts +0 -1
  37. package/dist/src/components/UiLoading.d.ts +0 -1
  38. package/dist/src/components/UiLoadingDots.d.ts +0 -1
  39. package/dist/src/components/UiMenu.d.ts +0 -1
  40. package/dist/src/components/UiModal.d.ts +0 -1
  41. package/dist/src/components/UiNavLink.d.ts +0 -1
  42. package/dist/src/components/UiProgressBar.d.ts +0 -1
  43. package/dist/src/components/UiRadialProgressBar.d.ts +0 -1
  44. package/dist/src/components/UiTable.d.ts +0 -1
  45. package/dist/src/components/UiTransition.d.ts +0 -1
  46. package/dist/src/components/calendars/CalendarDashboard.d.ts +0 -1
  47. package/dist/src/components/calendars/CalendarHeader.d.ts +0 -1
  48. package/dist/src/components/calendars/DayCalendar.d.ts +0 -1
  49. package/dist/src/components/calendars/EventCard.d.ts +0 -1
  50. package/dist/src/components/calendars/EventsList.d.ts +0 -1
  51. package/dist/src/components/calendars/MonthCalendar.d.ts +0 -1
  52. package/dist/src/components/calendars/WeekCalendar.d.ts +0 -1
  53. package/dist/src/components/calendars/YearCalendar.d.ts +0 -1
  54. package/dist/src/components/calendars/index.d.ts +0 -1
  55. package/dist/src/components/charts/BarChart.d.ts +0 -1
  56. package/dist/src/components/charts/FunnelChart.d.ts +0 -1
  57. package/dist/src/components/charts/LineChart.d.ts +0 -1
  58. package/dist/src/components/charts/PieChart.d.ts +0 -1
  59. package/dist/src/components/charts/SparklineChart.d.ts +0 -1
  60. package/dist/src/components/charts/StatCard.d.ts +0 -1
  61. package/dist/src/components/charts/chartTheme.d.ts +0 -1
  62. package/dist/src/components/charts/index.d.ts +0 -1
  63. package/dist/src/components/empty-state/ComingSoon.d.ts +0 -1
  64. package/dist/src/components/empty-state/EmptyState.d.ts +0 -1
  65. package/dist/src/components/empty-state/index.d.ts +0 -1
  66. package/dist/src/components/forms/DynamicForm.d.ts +2 -3
  67. package/dist/src/components/forms/DynamicFormField.d.ts +0 -1
  68. package/dist/src/components/forms/FormFieldWrapper.d.ts +0 -1
  69. package/dist/src/components/forms/index.d.ts +0 -1
  70. package/dist/src/components/index.d.ts +0 -1
  71. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts +0 -1
  72. package/dist/src/components/inputs/CheckboxInput.d.ts +0 -1
  73. package/dist/src/components/inputs/ComboboxInput.d.ts +0 -1
  74. package/dist/src/components/inputs/DatepickerInput.d.ts +0 -1
  75. package/dist/src/components/inputs/EmailInput.d.ts +0 -1
  76. package/dist/src/components/inputs/EmptyInput.d.ts +0 -1
  77. package/dist/src/components/inputs/FileDropzoneInput.d.ts +0 -1
  78. package/dist/src/components/inputs/HiddenInput.d.ts +0 -1
  79. package/dist/src/components/inputs/InputsShowcase.d.ts +0 -1
  80. package/dist/src/components/inputs/PhoneInput.d.ts +0 -1
  81. package/dist/src/components/inputs/RichTextInput.d.ts +0 -1
  82. package/dist/src/components/inputs/SelectInput.d.ts +0 -1
  83. package/dist/src/components/inputs/SelectTextInput.d.ts +0 -1
  84. package/dist/src/components/inputs/SwitchInput.d.ts +0 -1
  85. package/dist/src/components/inputs/SwitchInputGroup.d.ts +0 -1
  86. package/dist/src/components/inputs/TagifyInput.d.ts +0 -1
  87. package/dist/src/components/inputs/TextAreaInput.d.ts +0 -1
  88. package/dist/src/components/inputs/TextInput.d.ts +0 -1
  89. package/dist/src/components/inputs/index.d.ts +0 -1
  90. package/dist/src/components/layouts/CardLayout.d.ts +0 -1
  91. package/dist/src/components/layouts/DashboardLayout.d.ts +0 -1
  92. package/dist/src/components/layouts/DefaultLayout.d.ts +0 -1
  93. package/dist/src/components/layouts/HeaderLayout.d.ts +0 -1
  94. package/dist/src/components/layouts/InfoCard.d.ts +0 -1
  95. package/dist/src/components/layouts/NavigationGroup.d.ts +0 -1
  96. package/dist/src/components/layouts/NavigationItem.d.ts +0 -1
  97. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts +0 -1
  98. package/dist/src/components/layouts/ProjectLogo.d.ts +0 -1
  99. package/dist/src/components/layouts/PropsTable.d.ts +0 -1
  100. package/dist/src/components/layouts/ShowcaseCard.d.ts +0 -1
  101. package/dist/src/components/layouts/ShowcaseLayout.d.ts +0 -1
  102. package/dist/src/components/layouts/SidebarLayout.d.ts +0 -1
  103. package/dist/src/components/layouts/StateDisplay.d.ts +0 -1
  104. package/dist/src/components/layouts/index.d.ts +0 -1
  105. package/dist/src/components/loading/ContentSkeleton.d.ts +0 -1
  106. package/dist/src/components/loading/SmartLoadingIndicator.d.ts +0 -1
  107. package/dist/src/components/loading/index.d.ts +0 -1
  108. package/dist/src/components/maps/GoogleMap.d.ts +0 -1
  109. package/dist/src/components/maps/UiInfoWindow.d.ts +0 -1
  110. package/dist/src/components/maps/UiMap.d.ts +0 -1
  111. package/dist/src/components/maps/UiMapAll.d.ts +0 -1
  112. package/dist/src/components/maps/UiMapMarker.d.ts +0 -1
  113. package/dist/src/components/maps/index.d.ts +0 -1
  114. package/dist/src/components/modals/AlertModal.d.ts +0 -1
  115. package/dist/src/components/modals/BaseModal.d.ts +0 -1
  116. package/dist/src/components/modals/ImageCropperModal.d.ts +0 -1
  117. package/dist/src/components/modals/index.d.ts +0 -1
  118. package/dist/src/components/notifications/NotificationContainer.d.ts +0 -1
  119. package/dist/src/components/notifications/NotificationToast.d.ts +0 -1
  120. package/dist/src/components/notifications/index.d.ts +0 -1
  121. package/dist/src/components/stepper/StepperPanels.d.ts +0 -1
  122. package/dist/src/components/stepper/index.d.ts +0 -1
  123. package/dist/src/components/tabs/InlineTabs.d.ts +0 -1
  124. package/dist/src/components/tabs/TabGroup.d.ts +0 -1
  125. package/dist/src/components/tabs/TabGroupUnderline.d.ts +0 -1
  126. package/dist/src/components/tabs/TabsInPills.d.ts +0 -1
  127. package/dist/src/components/tabs/index.d.ts +0 -1
  128. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts +0 -1
  129. package/dist/src/components/wrappers/CardWrapper.d.ts +0 -1
  130. package/dist/src/components/wrappers/DisclosureWrapper.d.ts +0 -1
  131. package/dist/src/components/wrappers/FormErrorWrapper.d.ts +0 -1
  132. package/dist/src/components/wrappers/index.d.ts +0 -1
  133. package/dist/src/composables/index.d.ts +0 -1
  134. package/dist/src/composables/useCalendar.d.ts +0 -1
  135. package/dist/src/composables/useEventSegments.d.ts +0 -1
  136. package/dist/src/composables/useFormValidation.d.ts +0 -1
  137. package/dist/src/composables/useMap.d.ts +0 -1
  138. package/dist/src/composables/useModal.d.ts +0 -1
  139. package/dist/src/composables/useNotifications.d.ts +0 -1
  140. package/dist/src/composables/useSimpleTabs.d.ts +0 -1
  141. package/dist/src/composables/useStringTransform.d.ts +0 -1
  142. package/dist/src/composables/useTabs.d.ts +0 -1
  143. package/dist/src/composables/useTheme.d.ts +0 -1
  144. package/dist/src/config/css-variables.d.ts +0 -1
  145. package/dist/src/config/design-tokens.d.ts +0 -1
  146. package/dist/src/config/index.d.ts +0 -1
  147. package/dist/src/dev.d.ts +0 -1
  148. package/dist/src/index.d.ts +0 -1
  149. package/dist/src/plugin/configure.d.ts +0 -1
  150. package/dist/src/plugin/index.d.ts +0 -1
  151. package/dist/src/types/avatars.d.ts +0 -1
  152. package/dist/src/types/badges.d.ts +0 -1
  153. package/dist/src/types/calendars.d.ts +0 -1
  154. package/dist/src/types/core.d.ts +0 -1
  155. package/dist/src/types/form.d.ts +0 -1
  156. package/dist/src/types/forms.d.ts +0 -1
  157. package/dist/src/types/index.d.ts +0 -1
  158. package/dist/src/types/inputs.d.ts +0 -1
  159. package/dist/src/types/layouts.d.ts +0 -1
  160. package/dist/src/types/loading.d.ts +0 -1
  161. package/dist/src/types/maps.d.ts +0 -1
  162. package/dist/src/types/navigation.d.ts +0 -1
  163. package/dist/src/types/tables.d.ts +0 -1
  164. package/dist/src/types/tabs.d.ts +0 -1
  165. package/dist/src/types/transitions.d.ts +0 -1
  166. package/dist/src/types/ui.d.ts +0 -1
  167. package/dist/src/utils/calendar.d.ts +0 -1
  168. package/dist/src/utils/component-registry.d.ts +0 -1
  169. package/dist/src/utils/countryCodes.d.ts +0 -1
  170. package/dist/src/utils/id.d.ts +0 -1
  171. package/dist/src/utils/index.d.ts +0 -1
  172. package/dist/src/utils/mapThemes.d.ts +0 -1
  173. package/dist/src/utils/phone.d.ts +0 -1
  174. package/dist/src/utils/transitions.d.ts +0 -1
  175. package/dist/src/views/ButtonsShowcase.d.ts +0 -1
  176. package/dist/src/views/CalendarsShowcase.d.ts +0 -1
  177. package/dist/src/views/CardsShowcase.d.ts +0 -1
  178. package/dist/src/views/ChartsShowcase.d.ts +0 -1
  179. package/dist/src/views/EmptyStatesShowcase.d.ts +0 -1
  180. package/dist/src/views/InputsShowcase.d.ts +0 -1
  181. package/dist/src/views/KitchenSink.d.ts +0 -1
  182. package/dist/src/views/LayoutsShowcase.d.ts +0 -1
  183. package/dist/src/views/LoadingShowcase.d.ts +0 -1
  184. package/dist/src/views/MapsShowcase.d.ts +0 -1
  185. package/dist/src/views/ModalsShowcase.d.ts +0 -1
  186. package/dist/src/views/NotificationsShowcase.d.ts +0 -1
  187. package/dist/src/views/StepperShowcase.d.ts +0 -1
  188. package/dist/src/views/TabsShowcase.d.ts +0 -1
  189. package/dist/src/views/ValidationDemo.d.ts +0 -1
  190. package/dist/src/views/WrappersShowcase.d.ts +0 -1
  191. package/dist/src/views/components/AvatarPage.d.ts +0 -1
  192. package/dist/src/views/components/BadgePage.d.ts +0 -1
  193. package/dist/src/views/components/BannerPage.d.ts +0 -1
  194. package/dist/src/views/components/BreadcrumbPage.d.ts +0 -1
  195. package/dist/src/views/components/ButtonPage.d.ts +0 -1
  196. package/dist/src/views/components/CloudinaryImagePage.d.ts +0 -1
  197. package/dist/src/views/components/LoadingPage.d.ts +0 -1
  198. package/dist/src/views/components/MenuPage.d.ts +0 -1
  199. package/dist/src/views/components/ModalPage.d.ts +0 -1
  200. package/dist/src/views/components/ProgressPage.d.ts +0 -1
  201. package/dist/src/views/components/RichTextInputPage.d.ts +0 -1
  202. package/dist/src/views/components/TablePage.d.ts +0 -1
  203. package/dist/src/views/components/TextInputPage.d.ts +0 -1
  204. package/dist/src/views/components/TransitionPage.d.ts +0 -1
  205. package/dist/src/views/components/index.d.ts +0 -1
  206. package/dist/src/views/examples/CheckoutFormExample.d.ts +0 -1
  207. package/dist/src/views/examples/ContactFormExample.d.ts +0 -1
  208. package/dist/src/views/examples/RegistrationFormExample.d.ts +0 -1
  209. package/dist/src/views/examples/SettingsFormExample.d.ts +0 -1
  210. package/dist/src/views/examples/index.d.ts +0 -1
  211. package/dist/src/views/forms/ValidationPage.d.ts +0 -1
  212. package/dist/src/views/forms/index.d.ts +0 -1
  213. package/dist/src/views/index.d.ts +0 -1
  214. package/dist/src/views/inputs/CheckboxPage.d.ts +0 -1
  215. package/dist/src/views/inputs/ComboboxPage.d.ts +0 -1
  216. package/dist/src/views/inputs/DatepickerPage.d.ts +0 -1
  217. package/dist/src/views/inputs/EmailPage.d.ts +0 -1
  218. package/dist/src/views/inputs/FileDropzonePage.d.ts +0 -1
  219. package/dist/src/views/inputs/MiscInputsPage.d.ts +0 -1
  220. package/dist/src/views/inputs/PhonePage.d.ts +0 -1
  221. package/dist/src/views/inputs/SelectPage.d.ts +0 -1
  222. package/dist/src/views/inputs/SelectTextPage.d.ts +0 -1
  223. package/dist/src/views/inputs/SwitchGroupPage.d.ts +0 -1
  224. package/dist/src/views/inputs/SwitchPage.d.ts +0 -1
  225. package/dist/src/views/inputs/TextAreaPage.d.ts +0 -1
  226. package/dist/src/views/inputs/index.d.ts +0 -1
  227. package/dist/src/views/layouts/CardLayoutPage.d.ts +0 -1
  228. package/dist/src/views/layouts/DashboardLayoutPage.d.ts +0 -1
  229. package/dist/src/views/layouts/HeaderLayoutPage.d.ts +0 -1
  230. package/dist/src/views/layouts/SidebarLayoutPage.d.ts +0 -1
  231. package/dist/src/views/layouts/index.d.ts +0 -1
  232. package/dist/style.css +1 -1
  233. package/dist/ui.css +1 -1
  234. package/package.json +20 -16
  235. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js.map +0 -1
  236. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js.map +0 -1
  237. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js +0 -277
  238. package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js.map +0 -1
  239. package/dist/src/components/CloudinaryImage.d.ts.map +0 -1
  240. package/dist/src/components/LottieAnimation.d.ts.map +0 -1
  241. package/dist/src/components/ThemeDebugModal.d.ts.map +0 -1
  242. package/dist/src/components/UiAvatar.d.ts.map +0 -1
  243. package/dist/src/components/UiBadge.d.ts.map +0 -1
  244. package/dist/src/components/UiBanner.d.ts.map +0 -1
  245. package/dist/src/components/UiBreadcrumb.d.ts.map +0 -1
  246. package/dist/src/components/UiButton.d.ts.map +0 -1
  247. package/dist/src/components/UiButtonGroup.d.ts.map +0 -1
  248. package/dist/src/components/UiCheckbox.d.ts.map +0 -1
  249. package/dist/src/components/UiLoading.d.ts.map +0 -1
  250. package/dist/src/components/UiLoadingDots.d.ts.map +0 -1
  251. package/dist/src/components/UiMenu.d.ts.map +0 -1
  252. package/dist/src/components/UiModal.d.ts.map +0 -1
  253. package/dist/src/components/UiNavLink.d.ts.map +0 -1
  254. package/dist/src/components/UiProgressBar.d.ts.map +0 -1
  255. package/dist/src/components/UiRadialProgressBar.d.ts.map +0 -1
  256. package/dist/src/components/UiTable.d.ts.map +0 -1
  257. package/dist/src/components/UiTransition.d.ts.map +0 -1
  258. package/dist/src/components/calendars/CalendarDashboard.d.ts.map +0 -1
  259. package/dist/src/components/calendars/CalendarHeader.d.ts.map +0 -1
  260. package/dist/src/components/calendars/DayCalendar.d.ts.map +0 -1
  261. package/dist/src/components/calendars/EventCard.d.ts.map +0 -1
  262. package/dist/src/components/calendars/EventsList.d.ts.map +0 -1
  263. package/dist/src/components/calendars/MonthCalendar.d.ts.map +0 -1
  264. package/dist/src/components/calendars/WeekCalendar.d.ts.map +0 -1
  265. package/dist/src/components/calendars/YearCalendar.d.ts.map +0 -1
  266. package/dist/src/components/calendars/index.d.ts.map +0 -1
  267. package/dist/src/components/charts/BarChart.d.ts.map +0 -1
  268. package/dist/src/components/charts/FunnelChart.d.ts.map +0 -1
  269. package/dist/src/components/charts/LineChart.d.ts.map +0 -1
  270. package/dist/src/components/charts/PieChart.d.ts.map +0 -1
  271. package/dist/src/components/charts/SparklineChart.d.ts.map +0 -1
  272. package/dist/src/components/charts/StatCard.d.ts.map +0 -1
  273. package/dist/src/components/charts/chartTheme.d.ts.map +0 -1
  274. package/dist/src/components/charts/index.d.ts.map +0 -1
  275. package/dist/src/components/empty-state/ComingSoon.d.ts.map +0 -1
  276. package/dist/src/components/empty-state/EmptyState.d.ts.map +0 -1
  277. package/dist/src/components/empty-state/index.d.ts.map +0 -1
  278. package/dist/src/components/forms/DynamicForm.d.ts.map +0 -1
  279. package/dist/src/components/forms/DynamicFormField.d.ts.map +0 -1
  280. package/dist/src/components/forms/FormFieldWrapper.d.ts.map +0 -1
  281. package/dist/src/components/forms/index.d.ts.map +0 -1
  282. package/dist/src/components/index.d.ts.map +0 -1
  283. package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts.map +0 -1
  284. package/dist/src/components/inputs/CheckboxInput.d.ts.map +0 -1
  285. package/dist/src/components/inputs/ComboboxInput.d.ts.map +0 -1
  286. package/dist/src/components/inputs/DatepickerInput.d.ts.map +0 -1
  287. package/dist/src/components/inputs/EmailInput.d.ts.map +0 -1
  288. package/dist/src/components/inputs/EmptyInput.d.ts.map +0 -1
  289. package/dist/src/components/inputs/FileDropzoneInput.d.ts.map +0 -1
  290. package/dist/src/components/inputs/HiddenInput.d.ts.map +0 -1
  291. package/dist/src/components/inputs/InputsShowcase.d.ts.map +0 -1
  292. package/dist/src/components/inputs/PhoneInput.d.ts.map +0 -1
  293. package/dist/src/components/inputs/RichTextInput.d.ts.map +0 -1
  294. package/dist/src/components/inputs/SelectInput.d.ts.map +0 -1
  295. package/dist/src/components/inputs/SelectTextInput.d.ts.map +0 -1
  296. package/dist/src/components/inputs/SwitchInput.d.ts.map +0 -1
  297. package/dist/src/components/inputs/SwitchInputGroup.d.ts.map +0 -1
  298. package/dist/src/components/inputs/TagifyInput.d.ts.map +0 -1
  299. package/dist/src/components/inputs/TextAreaInput.d.ts.map +0 -1
  300. package/dist/src/components/inputs/TextInput.d.ts.map +0 -1
  301. package/dist/src/components/inputs/index.d.ts.map +0 -1
  302. package/dist/src/components/layouts/CardLayout.d.ts.map +0 -1
  303. package/dist/src/components/layouts/DashboardLayout.d.ts.map +0 -1
  304. package/dist/src/components/layouts/DefaultLayout.d.ts.map +0 -1
  305. package/dist/src/components/layouts/HeaderLayout.d.ts.map +0 -1
  306. package/dist/src/components/layouts/InfoCard.d.ts.map +0 -1
  307. package/dist/src/components/layouts/NavigationGroup.d.ts.map +0 -1
  308. package/dist/src/components/layouts/NavigationItem.d.ts.map +0 -1
  309. package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts.map +0 -1
  310. package/dist/src/components/layouts/ProjectLogo.d.ts.map +0 -1
  311. package/dist/src/components/layouts/PropsTable.d.ts.map +0 -1
  312. package/dist/src/components/layouts/ShowcaseCard.d.ts.map +0 -1
  313. package/dist/src/components/layouts/ShowcaseLayout.d.ts.map +0 -1
  314. package/dist/src/components/layouts/SidebarLayout.d.ts.map +0 -1
  315. package/dist/src/components/layouts/StateDisplay.d.ts.map +0 -1
  316. package/dist/src/components/layouts/index.d.ts.map +0 -1
  317. package/dist/src/components/loading/ContentSkeleton.d.ts.map +0 -1
  318. package/dist/src/components/loading/SmartLoadingIndicator.d.ts.map +0 -1
  319. package/dist/src/components/loading/index.d.ts.map +0 -1
  320. package/dist/src/components/maps/GoogleMap.d.ts.map +0 -1
  321. package/dist/src/components/maps/UiInfoWindow.d.ts.map +0 -1
  322. package/dist/src/components/maps/UiMap.d.ts.map +0 -1
  323. package/dist/src/components/maps/UiMapAll.d.ts.map +0 -1
  324. package/dist/src/components/maps/UiMapMarker.d.ts.map +0 -1
  325. package/dist/src/components/maps/index.d.ts.map +0 -1
  326. package/dist/src/components/modals/AlertModal.d.ts.map +0 -1
  327. package/dist/src/components/modals/BaseModal.d.ts.map +0 -1
  328. package/dist/src/components/modals/ImageCropperModal.d.ts.map +0 -1
  329. package/dist/src/components/modals/index.d.ts.map +0 -1
  330. package/dist/src/components/notifications/NotificationContainer.d.ts.map +0 -1
  331. package/dist/src/components/notifications/NotificationToast.d.ts.map +0 -1
  332. package/dist/src/components/notifications/index.d.ts.map +0 -1
  333. package/dist/src/components/stepper/StepperPanels.d.ts.map +0 -1
  334. package/dist/src/components/stepper/index.d.ts.map +0 -1
  335. package/dist/src/components/tabs/InlineTabs.d.ts.map +0 -1
  336. package/dist/src/components/tabs/TabGroup.d.ts.map +0 -1
  337. package/dist/src/components/tabs/TabGroupUnderline.d.ts.map +0 -1
  338. package/dist/src/components/tabs/TabsInPills.d.ts.map +0 -1
  339. package/dist/src/components/tabs/index.d.ts.map +0 -1
  340. package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts.map +0 -1
  341. package/dist/src/components/wrappers/CardWrapper.d.ts.map +0 -1
  342. package/dist/src/components/wrappers/DisclosureWrapper.d.ts.map +0 -1
  343. package/dist/src/components/wrappers/FormErrorWrapper.d.ts.map +0 -1
  344. package/dist/src/components/wrappers/index.d.ts.map +0 -1
  345. package/dist/src/composables/index.d.ts.map +0 -1
  346. package/dist/src/composables/useCalendar.d.ts.map +0 -1
  347. package/dist/src/composables/useEventSegments.d.ts.map +0 -1
  348. package/dist/src/composables/useFormValidation.d.ts.map +0 -1
  349. package/dist/src/composables/useMap.d.ts.map +0 -1
  350. package/dist/src/composables/useModal.d.ts.map +0 -1
  351. package/dist/src/composables/useNotifications.d.ts.map +0 -1
  352. package/dist/src/composables/useSimpleTabs.d.ts.map +0 -1
  353. package/dist/src/composables/useStringTransform.d.ts.map +0 -1
  354. package/dist/src/composables/useTabs.d.ts.map +0 -1
  355. package/dist/src/composables/useTheme.d.ts.map +0 -1
  356. package/dist/src/config/css-variables.d.ts.map +0 -1
  357. package/dist/src/config/design-tokens.d.ts.map +0 -1
  358. package/dist/src/config/index.d.ts.map +0 -1
  359. package/dist/src/dev.d.ts.map +0 -1
  360. package/dist/src/index.d.ts.map +0 -1
  361. package/dist/src/plugin/configure.d.ts.map +0 -1
  362. package/dist/src/plugin/index.d.ts.map +0 -1
  363. package/dist/src/types/avatars.d.ts.map +0 -1
  364. package/dist/src/types/badges.d.ts.map +0 -1
  365. package/dist/src/types/calendars.d.ts.map +0 -1
  366. package/dist/src/types/core.d.ts.map +0 -1
  367. package/dist/src/types/form.d.ts.map +0 -1
  368. package/dist/src/types/forms.d.ts.map +0 -1
  369. package/dist/src/types/index.d.ts.map +0 -1
  370. package/dist/src/types/inputs.d.ts.map +0 -1
  371. package/dist/src/types/layouts.d.ts.map +0 -1
  372. package/dist/src/types/loading.d.ts.map +0 -1
  373. package/dist/src/types/maps.d.ts.map +0 -1
  374. package/dist/src/types/navigation.d.ts.map +0 -1
  375. package/dist/src/types/tables.d.ts.map +0 -1
  376. package/dist/src/types/tabs.d.ts.map +0 -1
  377. package/dist/src/types/transitions.d.ts.map +0 -1
  378. package/dist/src/types/ui.d.ts.map +0 -1
  379. package/dist/src/utils/calendar.d.ts.map +0 -1
  380. package/dist/src/utils/component-registry.d.ts.map +0 -1
  381. package/dist/src/utils/countryCodes.d.ts.map +0 -1
  382. package/dist/src/utils/id.d.ts.map +0 -1
  383. package/dist/src/utils/index.d.ts.map +0 -1
  384. package/dist/src/utils/mapThemes.d.ts.map +0 -1
  385. package/dist/src/utils/phone.d.ts.map +0 -1
  386. package/dist/src/utils/transitions.d.ts.map +0 -1
  387. package/dist/src/views/ButtonsShowcase.d.ts.map +0 -1
  388. package/dist/src/views/CalendarsShowcase.d.ts.map +0 -1
  389. package/dist/src/views/CardsShowcase.d.ts.map +0 -1
  390. package/dist/src/views/ChartsShowcase.d.ts.map +0 -1
  391. package/dist/src/views/EmptyStatesShowcase.d.ts.map +0 -1
  392. package/dist/src/views/InputsShowcase.d.ts.map +0 -1
  393. package/dist/src/views/KitchenSink.d.ts.map +0 -1
  394. package/dist/src/views/LayoutsShowcase.d.ts.map +0 -1
  395. package/dist/src/views/LoadingShowcase.d.ts.map +0 -1
  396. package/dist/src/views/MapsShowcase.d.ts.map +0 -1
  397. package/dist/src/views/ModalsShowcase.d.ts.map +0 -1
  398. package/dist/src/views/NotificationsShowcase.d.ts.map +0 -1
  399. package/dist/src/views/StepperShowcase.d.ts.map +0 -1
  400. package/dist/src/views/TabsShowcase.d.ts.map +0 -1
  401. package/dist/src/views/ValidationDemo.d.ts.map +0 -1
  402. package/dist/src/views/WrappersShowcase.d.ts.map +0 -1
  403. package/dist/src/views/components/AvatarPage.d.ts.map +0 -1
  404. package/dist/src/views/components/BadgePage.d.ts.map +0 -1
  405. package/dist/src/views/components/BannerPage.d.ts.map +0 -1
  406. package/dist/src/views/components/BreadcrumbPage.d.ts.map +0 -1
  407. package/dist/src/views/components/ButtonPage.d.ts.map +0 -1
  408. package/dist/src/views/components/CloudinaryImagePage.d.ts.map +0 -1
  409. package/dist/src/views/components/LoadingPage.d.ts.map +0 -1
  410. package/dist/src/views/components/MenuPage.d.ts.map +0 -1
  411. package/dist/src/views/components/ModalPage.d.ts.map +0 -1
  412. package/dist/src/views/components/ProgressPage.d.ts.map +0 -1
  413. package/dist/src/views/components/RichTextInputPage.d.ts.map +0 -1
  414. package/dist/src/views/components/TablePage.d.ts.map +0 -1
  415. package/dist/src/views/components/TextInputPage.d.ts.map +0 -1
  416. package/dist/src/views/components/TransitionPage.d.ts.map +0 -1
  417. package/dist/src/views/components/index.d.ts.map +0 -1
  418. package/dist/src/views/examples/CheckoutFormExample.d.ts.map +0 -1
  419. package/dist/src/views/examples/ContactFormExample.d.ts.map +0 -1
  420. package/dist/src/views/examples/RegistrationFormExample.d.ts.map +0 -1
  421. package/dist/src/views/examples/SettingsFormExample.d.ts.map +0 -1
  422. package/dist/src/views/examples/index.d.ts.map +0 -1
  423. package/dist/src/views/forms/ValidationPage.d.ts.map +0 -1
  424. package/dist/src/views/forms/index.d.ts.map +0 -1
  425. package/dist/src/views/index.d.ts.map +0 -1
  426. package/dist/src/views/inputs/CheckboxPage.d.ts.map +0 -1
  427. package/dist/src/views/inputs/ComboboxPage.d.ts.map +0 -1
  428. package/dist/src/views/inputs/DatepickerPage.d.ts.map +0 -1
  429. package/dist/src/views/inputs/EmailPage.d.ts.map +0 -1
  430. package/dist/src/views/inputs/FileDropzonePage.d.ts.map +0 -1
  431. package/dist/src/views/inputs/MiscInputsPage.d.ts.map +0 -1
  432. package/dist/src/views/inputs/PhonePage.d.ts.map +0 -1
  433. package/dist/src/views/inputs/SelectPage.d.ts.map +0 -1
  434. package/dist/src/views/inputs/SelectTextPage.d.ts.map +0 -1
  435. package/dist/src/views/inputs/SwitchGroupPage.d.ts.map +0 -1
  436. package/dist/src/views/inputs/SwitchPage.d.ts.map +0 -1
  437. package/dist/src/views/inputs/TextAreaPage.d.ts.map +0 -1
  438. package/dist/src/views/inputs/index.d.ts.map +0 -1
  439. package/dist/src/views/layouts/CardLayoutPage.d.ts.map +0 -1
  440. package/dist/src/views/layouts/DashboardLayoutPage.d.ts.map +0 -1
  441. package/dist/src/views/layouts/HeaderLayoutPage.d.ts.map +0 -1
  442. package/dist/src/views/layouts/SidebarLayoutPage.d.ts.map +0 -1
  443. package/dist/src/views/layouts/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js","sources":["../src/components/forms/DynamicForm.vue"],"sourcesContent":["<!--\n @component DynamicForm\n @description Schema-driven form component with validation.\n \n Renders forms from a schema definition with sections, fields, conditional\n visibility, and integrated validation via vee-validate.\n \n @props\n - schema (DynamicFormSchema, required): Form schema with sections and fields\n - modelValue (object, optional): Form data via v-model\n - loading (boolean, optional): Loading state for submit button\n - showActions (boolean, optional): Show submit/cancel buttons\n - showCancelButton (boolean, optional): Show cancel button\n - submitButtonText (string, optional): Submit button text\n - cancelButtonText (string, optional): Cancel button text\n - actionsAlignment (string, optional): Button alignment - left/center/right\n - formError (string, optional): Form-level error message\n \n @emits\n - update:modelValue: Emitted when form data changes\n - submit: Emitted on form submit with data and error setter\n - cancel: Emitted when cancel is clicked\n - field-change: Emitted when any field value changes\n \n @exposes\n - validate(): Promise<boolean> - Validate form and return validity\n - reset(): void - Reset form to initial values\n - setFieldValue(name, value): void - Set a field value\n - getFieldValue(name): any - Get a field value\n - formData: Record<string, any> - Current form data\n \n @example\n <DynamicForm\n :schema=\"formSchema\"\n v-model=\"formData\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n-->\n<template>\n <form\n ref=\"formRef\"\n :class=\"formClasses\"\n @submit.prevent=\"handleSubmit\"\n >\n <!-- Form title and description -->\n <div v-if=\"schema.title || schema.description\" class=\"sl-mb-6\">\n <h2 v-if=\"schema.title\" class=\"sl-text-lg sl-font-semibold sl-text-gray-900 sl-mb-2\">\n {{ schema.title }}\n </h2>\n <p v-if=\"schema.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ schema.description }}\n </p>\n </div>\n\n <!-- Form sections -->\n <div v-for=\"(section, sectionIndex) in formSections\" :key=\"section.id || sectionIndex\">\n <!-- Section header -->\n <div v-if=\"section.title || section.description\" class=\"sl-mb-4\">\n <h3 v-if=\"section.title\" class=\"sl-text-md sl-font-medium sl-text-gray-900 sl-mb-1\">\n {{ section.title }}\n </h3>\n <p v-if=\"section.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ section.description }}\n </p>\n </div>\n\n <!-- Section fields -->\n <div :class=\"sectionClasses(section)\">\n <div\n v-for=\"field in section.fields\"\n :key=\"field.name\"\n :class=\"fieldClasses(field)\"\n >\n <!-- Conditional rendering -->\n <SlDynamicFormField\n v-if=\"shouldShowField(field)\"\n :field=\"field\"\n v-model=\"formData[field.name]\"\n :form-data=\"formData\"\n @field-change=\"handleFieldChange\"\n />\n </div>\n </div>\n </div>\n\n <!-- Form actions -->\n <div\n v-if=\"showActions\"\n :class=\"[\n 'sl-flex sl-gap-3',\n actionsAlignment === 'center' ? 'sl-justify-center' :\n actionsAlignment === 'right' ? 'sl-justify-end' :\n 'sl-justify-start'\n ]\"\n >\n <SlButton\n v-if=\"showCancelButton\"\n variant=\"outline\"\n :disabled=\"loading\"\n type=\"button\"\n @click=\"handleCancel\"\n >\n {{ cancelButtonText || 'Cancel' }}\n </SlButton>\n \n <SlButton\n :variant=\"submitButtonVariant\"\n :loading=\"loading\"\n :disabled=\"!isFormValid || loading\"\n type=\"submit\"\n >\n {{ submitButtonText || 'Submit' }}\n </SlButton>\n </div>\n \n <!-- Form-level errors -->\n <div v-if=\"formError\" class=\"sl-mt-4\">\n <div class=\"sl-bg-red-50 sl-border sl-border-red-200 sl-rounded-md sl-p-4\">\n <div class=\"sl-flex\">\n <ExclamationCircleIcon class=\"sl-h-5 sl-w-5 sl-text-red-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-red-800\">\n Form Error\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-red-700\">\n <p>{{ formError }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </form>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * DynamicForm - Schema-driven form component\n * \n * Renders forms dynamically from a schema definition. Supports sections,\n * conditional fields, validation, and form-level error handling.\n * \n * ## Features\n * - Schema-driven form generation\n * - Multi-section support with columns\n * - Conditional field visibility\n * - vee-validate integration\n * - Field change callbacks\n * - Form-level error display\n * \n * ## Schema Structure\n * ```typescript\n * {\n * title?: string,\n * description?: string,\n * sections: [\n * {\n * title?: string,\n * columns?: 1 | 2 | 3,\n * fields: [\n * { name: 'email', type: 'text', label: 'Email', rules: schema }\n * ]\n * }\n * ]\n * }\n * ```\n * \n * @module components/forms/DynamicForm\n * @see {@link DynamicFormSchema} for schema interface\n * @see {@link DynamicFormField} for field configuration\n */\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useForm } from 'vee-validate'\nimport { ExclamationCircleIcon } from '@heroicons/vue/24/outline'\nimport SlButton from '../UiButton.vue'\nimport SlDynamicFormField from './DynamicFormField.vue'\nimport type { \n DynamicFormSchema, \n DynamicFormSection,\n DynamicFormField,\n ButtonVariant \n} from '../../types/form'\n\nimport type { FormData } from '../../types/form'\n\ninterface Props {\n schema: DynamicFormSchema\n modelValue?: FormData\n loading?: boolean\n showActions?: boolean\n showCancelButton?: boolean\n submitButtonText?: string\n cancelButtonText?: string\n submitButtonVariant?: ButtonVariant\n actionsAlignment?: 'left' | 'center' | 'right'\n formError?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n showActions: true,\n showCancelButton: false,\n submitButtonVariant: 'primary',\n actionsAlignment: 'right'\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: FormData): void\n (e: 'submit', data: FormData, ctx: { setErrors: (errors: Record<string, string>) => void }): void\n (e: 'cancel'): void\n (e: 'field-change', field: DynamicFormField, value: FormValue, formData: FormData): void\n}>()\n\nconst formRef = ref<HTMLFormElement>()\nconst formData = reactive<FormData>({})\n\n// Initialize form with vee-validate\nconst { handleSubmit: veeHandleSubmit, setErrors, errors, meta, validate: veeValidate, resetForm: veeResetForm, setFieldTouched } = useForm({\n keepValuesOnUnmount: true\n})\n\n// Get default value based on field type\nconst getDefaultValue = (type: string) => {\n switch (type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return null\n case 'number':\n return 0\n default:\n return ''\n }\n}\n\n// Initialize form data\nconst initializeFormData = () => {\n const initialData = { ...props.modelValue } || {}\n \n // Set default values from schema\n props.schema.sections.forEach(section => {\n section.fields.forEach(field => {\n if (!(field.name in initialData)) {\n initialData[field.name] = field.defaultValue ?? getDefaultValue(field.type)\n }\n })\n })\n \n Object.assign(formData, initialData)\n}\n\n// Watch for external changes to modelValue\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n Object.assign(formData, newValue)\n }\n },\n { deep: true }\n)\n\n// Watch form data changes and emit updates\nwatch(\n formData,\n (newData) => {\n emit('update:modelValue', { ...newData })\n },\n { deep: true }\n)\n\n// Initialize form data on mount\ninitializeFormData()\n\nconst formSections = computed(() => {\n return props.schema.sections.filter(section => \n section.condition ? section.condition(formData) : true\n )\n})\n\nconst formClasses = computed(() => {\n const baseClasses = ['sl-space-y-6']\n \n if (props.schema.className) {\n baseClasses.push(props.schema.className)\n }\n \n return baseClasses.join(' ')\n})\n\nconst sectionClasses = (section: DynamicFormSection) => {\n const baseClasses = [\n 'sl-grid',\n 'sl-gap-4'\n ]\n \n // Grid columns based on section layout\n const columns = section.columns || 1\n baseClasses.push(`sl-grid-cols-1`)\n \n if (columns > 1) {\n baseClasses.push(`md:sl-grid-cols-${Math.min(columns, 3)}`)\n }\n \n if (section.className) {\n baseClasses.push(section.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst fieldClasses = (field: DynamicFormField) => {\n const baseClasses: string[] = []\n \n // Field span\n if (field.colSpan && field.colSpan > 1) {\n baseClasses.push(`sl-col-span-${Math.min(field.colSpan, 3)}`)\n }\n \n if (field.className) {\n baseClasses.push(field.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst shouldShowField = (field: DynamicFormField): boolean => {\n if (field.condition) {\n return field.condition(formData, field)\n }\n return true\n}\n\nconst isFormValid = computed(() => {\n return meta.value.valid\n})\n\nconst handleSubmit = veeHandleSubmit((values) => {\n emit('submit', values, { setErrors })\n})\n\nconst handleCancel = () => {\n emit('cancel')\n}\n\nconst handleFieldChange = (field: DynamicFormField, value: FormValue) => {\n emit('field-change', field, value, formData)\n \n // Handle field dependencies\n if (field.onFieldChange) {\n field.onFieldChange(value, field, formData)\n }\n}\n\n// Expose form methods matching DynamicFormRef interface\n\n/** Submit the form */\nconst submitForm = async (): Promise<void> => {\n await handleSubmit()\n}\n\n/** Reset form to initial values */\nconst resetForm = (): void => {\n veeResetForm()\n Object.keys(formData).forEach(key => {\n delete formData[key]\n })\n initializeFormData()\n}\n\n/** Build FormValidationResult from current state */\nconst buildValidationResult = (): { valid: boolean; errors: Record<string, string>; values: FormData } => {\n // Filter out undefined values from errors\n const filteredErrors: Record<string, string> = {}\n for (const [key, value] of Object.entries(errors.value)) {\n if (value !== undefined) {\n filteredErrors[key] = value\n }\n }\n return {\n valid: meta.value.valid,\n errors: filteredErrors,\n values: { ...formData }\n }\n}\n\n/** Validate form and return result */\nconst validateForm = async (): Promise<{ valid: boolean; errors: Record<string, string>; values: FormData }> => {\n await veeValidate()\n return buildValidationResult()\n}\n\n/** Validate including nested forms */\nconst validateWithChildren = async (): Promise<{ valid: boolean; errors: Record<string, string>; values: FormData }> => {\n // For now, same as validateForm since we don't have nested form support yet\n await veeValidate()\n return buildValidationResult()\n}\n\n/** Trigger pseudo-submit (validate without actual submit) */\nconst handlePseudoSubmit = async (): Promise<void> => {\n await veeValidate()\n}\n\n/** Get current form metadata */\nconst getFormMeta = () => {\n return {\n valid: meta.value.valid,\n dirty: meta.value.dirty,\n touched: meta.value.touched,\n pending: meta.value.pending\n }\n}\n\n/** Set touched state for all fields */\nconst setTouched = (value: boolean): void => {\n props.schema.sections.forEach(section => {\n section.fields.forEach(field => {\n setFieldTouched(field.name, value)\n })\n })\n}\n\n/** Highlight a field with an error */\nconst highlightFieldWithError = (fieldName: string, message?: string): void => {\n if (message) {\n setErrors({ [fieldName]: message })\n }\n setFieldTouched(fieldName, true)\n}\n\n/** Clear field errors */\nconst clearFieldErrors = (fieldName?: string): void => {\n if (fieldName) {\n setErrors({ [fieldName]: '' })\n } else {\n const clearedErrors: Record<string, string> = {}\n Object.keys(errors.value).forEach(key => {\n clearedErrors[key] = ''\n })\n setErrors(clearedErrors)\n }\n}\n\n/** Get current validation errors */\nconst getCurrentErrors = (): Record<string, string> => {\n // Filter out undefined values from errors\n const filteredErrors: Record<string, string> = {}\n for (const [key, value] of Object.entries(errors.value)) {\n if (value !== undefined) {\n filteredErrors[key] = value\n }\n }\n return filteredErrors\n}\n\n// Legacy methods for backwards compatibility\nconst setFieldValue = (fieldName: string, value: any) => {\n formData[fieldName] = value\n}\n\nconst getFieldValue = (fieldName: string) => {\n return formData[fieldName]\n}\n\ndefineExpose({\n // DynamicFormRef interface methods\n submitForm,\n resetForm,\n validateForm,\n validateWithChildren,\n handlePseudoSubmit,\n getFormMeta,\n setTouched,\n highlightFieldWithError,\n clearFieldErrors,\n getCurrentErrors,\n // Legacy/additional methods\n validate: validateForm,\n reset: resetForm,\n setFieldValue,\n getFieldValue,\n formData,\n formRef\n})\n</script>\n"],"names":["props","__props","emit","__emit","formRef","ref","formData","reactive","veeHandleSubmit","setErrors","errors","meta","veeValidate","veeResetForm","setFieldTouched","useForm","getDefaultValue","type","initializeFormData","initialData","section","field","watch","newValue","newData","formSections","computed","formClasses","baseClasses","sectionClasses","columns","fieldClasses","shouldShowField","isFormValid","handleSubmit","values","handleCancel","handleFieldChange","value","submitForm","resetForm","key","buildValidationResult","filteredErrors","validateForm","__expose","fieldName","message","clearedErrors","_createElementBlock","_cache","_withModifiers","_unref","args","_openBlock","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","_Fragment","_renderList","sectionIndex","_hoisted_4","_hoisted_5","_hoisted_6","_createElementVNode","_normalizeClass","_createBlock","SlDynamicFormField","$event","SlButton","_createVNode","_hoisted_7","_hoisted_8","_hoisted_9","ExclamationCircleIcon","_hoisted_10","_hoisted_11"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js","sources":["../src/components/forms/DynamicForm.vue"],"sourcesContent":["<!--\n @component DynamicForm\n @description Schema-driven form component with validation.\n \n Renders forms from a schema definition with sections, fields, conditional\n visibility, and integrated validation via vee-validate.\n \n @props\n - schema (DynamicFormSchema, required): Form schema with sections and fields\n - modelValue (object, optional): Form data via v-model\n - loading (boolean, optional): Loading state for submit button\n - showActions (boolean, optional): Show submit/cancel buttons\n - showCancelButton (boolean, optional): Show cancel button\n - submitButtonText (string, optional): Submit button text\n - cancelButtonText (string, optional): Cancel button text\n - actionsAlignment (string, optional): Button alignment - left/center/right\n - formError (string, optional): Form-level error message\n \n @emits\n - update:modelValue: Emitted when form data changes\n - submit: Emitted on form submit with data and error setter\n - cancel: Emitted when cancel is clicked\n - field-change: Emitted when any field value changes\n \n @exposes\n - validate(): Promise<boolean> - Validate form and return validity\n - reset(): void - Reset form to initial values\n - setFieldValue(name, value): void - Set a field value\n - getFieldValue(name): any - Get a field value\n - formData: Record<string, any> - Current form data\n \n @example\n <DynamicForm\n :schema=\"formSchema\"\n v-model=\"formData\"\n @submit=\"handleSubmit\"\n @cancel=\"handleCancel\"\n />\n-->\n<template>\n <form\n ref=\"formRef\"\n :class=\"formClasses\"\n @submit.prevent=\"handleSubmit\"\n >\n <!-- Form title and description -->\n <div v-if=\"schema.title || schema.description\" class=\"sl-mb-6\">\n <h2 v-if=\"schema.title\" class=\"sl-text-lg sl-font-semibold sl-text-gray-900 sl-mb-2\">\n {{ schema.title }}\n </h2>\n <p v-if=\"schema.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ schema.description }}\n </p>\n </div>\n\n <!-- Form sections -->\n <div v-for=\"(section, sectionIndex) in formSections\" :key=\"section.id || sectionIndex\">\n <!-- Section header -->\n <div v-if=\"section.title || section.description\" class=\"sl-mb-4\">\n <h3 v-if=\"section.title\" class=\"sl-text-md sl-font-medium sl-text-gray-900 sl-mb-1\">\n {{ section.title }}\n </h3>\n <p v-if=\"section.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ section.description }}\n </p>\n </div>\n\n <!-- Section fields -->\n <div :class=\"sectionClasses(section)\">\n <div\n v-for=\"field in section.fields\"\n :key=\"field.name\"\n :class=\"fieldClasses(field)\"\n >\n <!-- Conditional rendering -->\n <SlDynamicFormField\n v-if=\"shouldShowField(field)\"\n :field=\"field\"\n v-model=\"formData[field.name]\"\n :form-data=\"formData\"\n @field-change=\"handleFieldChange\"\n />\n </div>\n </div>\n </div>\n\n <!-- Form actions -->\n <div\n v-if=\"showActions\"\n :class=\"[\n 'sl-flex sl-gap-3',\n actionsAlignment === 'center' ? 'sl-justify-center' :\n actionsAlignment === 'right' ? 'sl-justify-end' :\n 'sl-justify-start'\n ]\"\n >\n <SlButton\n v-if=\"showCancelButton\"\n variant=\"outline\"\n :disabled=\"loading\"\n type=\"button\"\n @click=\"handleCancel\"\n >\n {{ cancelButtonText || 'Cancel' }}\n </SlButton>\n \n <SlButton\n :variant=\"submitButtonVariant\"\n :loading=\"loading\"\n :disabled=\"!isFormValid || loading\"\n type=\"submit\"\n >\n {{ submitButtonText || 'Submit' }}\n </SlButton>\n </div>\n \n <!-- Form-level errors -->\n <div v-if=\"formError\" class=\"sl-mt-4\">\n <div class=\"sl-bg-red-50 sl-border sl-border-red-200 sl-rounded-md sl-p-4\">\n <div class=\"sl-flex\">\n <ExclamationCircleIcon class=\"sl-h-5 sl-w-5 sl-text-red-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-red-800\">\n Form Error\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-red-700\">\n <p>{{ formError }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </form>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * DynamicForm - Schema-driven form component\n * \n * Renders forms dynamically from a schema definition. Supports sections,\n * conditional fields, validation, and form-level error handling.\n * \n * ## Features\n * - Schema-driven form generation\n * - Multi-section support with columns\n * - Conditional field visibility\n * - vee-validate integration\n * - Field change callbacks\n * - Form-level error display\n * \n * ## Schema Structure\n * ```typescript\n * {\n * title?: string,\n * description?: string,\n * sections: [\n * {\n * title?: string,\n * columns?: 1 | 2 | 3,\n * fields: [\n * { name: 'email', type: 'text', label: 'Email', rules: schema }\n * ]\n * }\n * ]\n * }\n * ```\n * \n * @module components/forms/DynamicForm\n * @see {@link DynamicFormSchema} for schema interface\n * @see {@link DynamicFormField} for field configuration\n */\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useForm } from 'vee-validate'\nimport { ExclamationCircleIcon } from '@heroicons/vue/24/outline'\nimport SlButton from '../UiButton.vue'\nimport SlDynamicFormField from './DynamicFormField.vue'\nimport type { \n DynamicFormSchema, \n DynamicFormSection,\n DynamicFormField,\n ButtonVariant \n} from '../../types/form'\n\nimport type { FormData, FormValue } from '../../types/form'\n\ninterface Props {\n schema: DynamicFormSchema\n modelValue?: FormData\n loading?: boolean\n showActions?: boolean\n showCancelButton?: boolean\n submitButtonText?: string\n cancelButtonText?: string\n submitButtonVariant?: ButtonVariant\n actionsAlignment?: 'left' | 'center' | 'right'\n formError?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n showActions: true,\n showCancelButton: false,\n submitButtonVariant: 'primary',\n actionsAlignment: 'right'\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: FormData): void\n (e: 'submit', data: FormData, ctx: { setErrors: (errors: Record<string, string>) => void }): void\n (e: 'cancel'): void\n (e: 'field-change', field: DynamicFormField, value: FormValue, formData: FormData): void\n}>()\n\nconst formRef = ref<HTMLFormElement>()\nconst formData = reactive<FormData>({})\n\n// Initialize form with vee-validate\nconst { handleSubmit: veeHandleSubmit, setErrors, errors, meta, validate: veeValidate, resetForm: veeResetForm, setFieldTouched } = useForm({\n keepValuesOnUnmount: true\n})\n\n// Get default value based on field type\nconst getDefaultValue = (type: string) => {\n switch (type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return null\n case 'number':\n return 0\n default:\n return ''\n }\n}\n\n// Initialize form data\nconst initializeFormData = () => {\n const initialData = { ...props.modelValue } || {}\n \n // Set default values from schema\n props.schema.sections.forEach(section => {\n section.fields.forEach(field => {\n if (!(field.name in initialData)) {\n initialData[field.name] = field.defaultValue ?? getDefaultValue(field.type)\n }\n })\n })\n \n Object.assign(formData, initialData)\n}\n\n// Watch for external changes to modelValue\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n Object.assign(formData, newValue)\n }\n },\n { deep: true }\n)\n\n// Watch form data changes and emit updates\nwatch(\n formData,\n (newData) => {\n emit('update:modelValue', { ...newData })\n },\n { deep: true }\n)\n\n// Initialize form data on mount\ninitializeFormData()\n\nconst formSections = computed(() => {\n return props.schema.sections.filter(section => \n section.condition ? section.condition(formData) : true\n )\n})\n\nconst formClasses = computed(() => {\n const baseClasses = ['sl-space-y-6']\n \n if (props.schema.className) {\n baseClasses.push(props.schema.className)\n }\n \n return baseClasses.join(' ')\n})\n\nconst sectionClasses = (section: DynamicFormSection) => {\n const baseClasses = [\n 'sl-grid',\n 'sl-gap-4'\n ]\n \n // Grid columns based on section layout\n const columns = section.columns || 1\n baseClasses.push(`sl-grid-cols-1`)\n \n if (columns > 1) {\n baseClasses.push(`md:sl-grid-cols-${Math.min(columns, 3)}`)\n }\n \n if (section.className) {\n baseClasses.push(section.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst fieldClasses = (field: DynamicFormField) => {\n const baseClasses: string[] = []\n \n // Field span\n if (field.colSpan && field.colSpan > 1) {\n baseClasses.push(`sl-col-span-${Math.min(field.colSpan, 3)}`)\n }\n \n if (field.className) {\n baseClasses.push(field.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst shouldShowField = (field: DynamicFormField): boolean => {\n if (field.condition) {\n return field.condition(formData, field)\n }\n return true\n}\n\nconst isFormValid = computed(() => {\n return meta.value.valid\n})\n\nconst handleSubmit = veeHandleSubmit((values) => {\n emit('submit', values, { setErrors })\n})\n\nconst handleCancel = () => {\n emit('cancel')\n}\n\nconst handleFieldChange = (field: DynamicFormField, value: FormValue) => {\n emit('field-change', field, value, formData)\n \n // Handle field dependencies\n if (field.onFieldChange) {\n field.onFieldChange(value, field, formData)\n }\n}\n\n// Expose form methods matching DynamicFormRef interface\n\n/** Submit the form */\nconst submitForm = async (): Promise<void> => {\n await handleSubmit()\n}\n\n/** Reset form to initial values */\nconst resetForm = (): void => {\n veeResetForm()\n Object.keys(formData).forEach(key => {\n delete formData[key]\n })\n initializeFormData()\n}\n\n/** Build FormValidationResult from current state */\nconst buildValidationResult = (): { valid: boolean; errors: Record<string, string>; values: FormData } => {\n // Filter out undefined values from errors\n const filteredErrors: Record<string, string> = {}\n for (const [key, value] of Object.entries(errors.value)) {\n if (value !== undefined) {\n filteredErrors[key] = value\n }\n }\n return {\n valid: meta.value.valid,\n errors: filteredErrors,\n values: { ...formData }\n }\n}\n\n/** Validate form and return result */\nconst validateForm = async (): Promise<{ valid: boolean; errors: Record<string, string>; values: FormData }> => {\n await veeValidate()\n return buildValidationResult()\n}\n\n/** Validate including nested forms */\nconst validateWithChildren = async (): Promise<{ valid: boolean; errors: Record<string, string>; values: FormData }> => {\n // For now, same as validateForm since we don't have nested form support yet\n await veeValidate()\n return buildValidationResult()\n}\n\n/** Trigger pseudo-submit (validate without actual submit) */\nconst handlePseudoSubmit = async (): Promise<void> => {\n await veeValidate()\n}\n\n/** Get current form metadata */\nconst getFormMeta = () => {\n return {\n valid: meta.value.valid,\n dirty: meta.value.dirty,\n touched: meta.value.touched,\n pending: meta.value.pending\n }\n}\n\n/** Set touched state for all fields */\nconst setTouched = (value: boolean): void => {\n props.schema.sections.forEach(section => {\n section.fields.forEach(field => {\n setFieldTouched(field.name, value)\n })\n })\n}\n\n/** Highlight a field with an error */\nconst highlightFieldWithError = (fieldName: string, message?: string): void => {\n if (message) {\n setErrors({ [fieldName]: message })\n }\n setFieldTouched(fieldName, true)\n}\n\n/** Clear field errors */\nconst clearFieldErrors = (fieldName?: string): void => {\n if (fieldName) {\n setErrors({ [fieldName]: '' })\n } else {\n const clearedErrors: Record<string, string> = {}\n Object.keys(errors.value).forEach(key => {\n clearedErrors[key] = ''\n })\n setErrors(clearedErrors)\n }\n}\n\n/** Get current validation errors */\nconst getCurrentErrors = (): Record<string, string> => {\n // Filter out undefined values from errors\n const filteredErrors: Record<string, string> = {}\n for (const [key, value] of Object.entries(errors.value)) {\n if (value !== undefined) {\n filteredErrors[key] = value\n }\n }\n return filteredErrors\n}\n\n// Legacy methods for backwards compatibility\nconst setFieldValue = (fieldName: string, value: any) => {\n formData[fieldName] = value\n}\n\nconst getFieldValue = (fieldName: string) => {\n return formData[fieldName]\n}\n\ndefineExpose({\n // DynamicFormRef interface methods\n submitForm,\n resetForm,\n validateForm,\n validateWithChildren,\n handlePseudoSubmit,\n getFormMeta,\n setTouched,\n highlightFieldWithError,\n clearFieldErrors,\n getCurrentErrors,\n // Legacy/additional methods\n validate: validateForm,\n reset: resetForm,\n setFieldValue,\n getFieldValue,\n formData,\n formRef\n})\n</script>\n"],"names":["props","__props","emit","__emit","formRef","ref","formData","reactive","veeHandleSubmit","setErrors","errors","meta","veeValidate","veeResetForm","setFieldTouched","useForm","getDefaultValue","type","initializeFormData","initialData","section","field","watch","newValue","newData","formSections","computed","formClasses","baseClasses","sectionClasses","columns","fieldClasses","shouldShowField","isFormValid","handleSubmit","values","handleCancel","handleFieldChange","value","submitForm","resetForm","key","buildValidationResult","filteredErrors","validateForm","__expose","fieldName","message","clearedErrors","_createElementBlock","_cache","_withModifiers","_unref","args","_openBlock","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","_Fragment","_renderList","sectionIndex","_hoisted_4","_hoisted_5","_hoisted_6","_createElementVNode","_normalizeClass","_createBlock","SlDynamicFormField","$event","SlButton","_createVNode","_hoisted_7","_hoisted_8","_hoisted_9","ExclamationCircleIcon","_hoisted_10","_hoisted_11"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js","sources":["../src/components/forms/DynamicFormField.vue"],"sourcesContent":["<!--\n @component DynamicFormField\n @description Renders a single field based on field configuration.\n \n Used by DynamicForm to render individual fields. Maps field type to\n appropriate input component and passes configuration props.\n \n @props\n - field (DynamicFormField, required): Field configuration object\n - modelValue (any, optional): Field value via v-model\n - formData (object, optional): Complete form data for conditional logic\n \n @emits\n - update:modelValue: Emitted when field value changes\n - field-change: Emitted with field and value on change\n \n @example\n <DynamicFormField\n :field=\"{ name: 'email', type: 'email', label: 'Email' }\"\n v-model=\"formData.email\"\n />\n-->\n<template>\n <component\n :is=\"fieldComponent\"\n v-if=\"fieldComponent\"\n v-bind=\"componentProps\"\n v-on=\"componentEvents\"\n :model-value=\"fieldValue\"\n @update:model-value=\"handleFieldChange\"\n />\n \n <!-- Fallback for unknown field types -->\n <div \n v-else\n class=\"sl-p-4 sl-bg-yellow-50 sl-border sl-border-yellow-200 sl-rounded-md\"\n >\n <div class=\"sl-flex\">\n <ExclamationTriangleIcon class=\"sl-h-5 sl-w-5 sl-text-yellow-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-yellow-800\">\n Unknown field type\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-yellow-700\">\n <p>Field type \"{{ field.type }}\" is not supported.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * DynamicFormField - Field renderer for DynamicForm\n * \n * Dynamically loads and renders the appropriate input component based on\n * the field type configuration. Handles prop mapping and event forwarding.\n * \n * ## Supported Field Types\n * - text, email, password, number, tel, url → UiTextInput\n * - textarea → TextAreaInput\n * - select → SelectInput\n * - combobox → ComboboxInput\n * - checkbox → CheckboxInput\n * - switch → SwitchInput\n * \n * @module components/forms/DynamicFormField\n * @see {@link DynamicFormField} for field configuration\n */\nimport { computed, defineAsyncComponent } from 'vue'\nimport UiTextInput from '../inputs/TextInput.vue'\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline'\nimport type { DynamicFormField, FormData, FormValue } from '../../types/form'\n\ninterface Props {\n field: DynamicFormField\n modelValue?: FormValue\n formData?: FormData\n}\n\nconst props = defineProps<Props>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: FormValue]\n 'field-change': [field: DynamicFormField, value: FormValue]\n}>()\n\n// Component mapping for dynamic loading\nconst componentMap: Record<string, () => Promise<unknown>> = {\n text: () => Promise.resolve(UiTextInput),\n email: () => Promise.resolve(UiTextInput), \n password: () => Promise.resolve(UiTextInput),\n number: () => Promise.resolve(UiTextInput),\n tel: () => Promise.resolve(UiTextInput),\n url: () => Promise.resolve(UiTextInput),\n textarea: () => import('../inputs/TextAreaInput.vue'),\n select: () => import('../inputs/SelectInput.vue'),\n combobox: () => import('../inputs/ComboboxInput.vue'),\n checkbox: () => import('../inputs/CheckboxInput.vue'),\n switch: () => import('../inputs/SwitchInput.vue'),\n}\n\nconst fieldComponent = computed(() => {\n const componentLoader = componentMap[props.field.type]\n if (componentLoader) {\n return defineAsyncComponent({\n loader: componentLoader,\n errorComponent: () => null,\n delay: 0\n })\n }\n return null\n})\n\nconst fieldValue = computed({\n get: () => props.modelValue ?? props.field.defaultValue ?? getDefaultValue(),\n set: (value) => {\n emit('update:modelValue', value)\n emit('field-change', props.field, value)\n }\n})\n\nconst componentProps = computed(() => {\n const baseProps: Record<string, unknown> = {\n name: props.field.name,\n label: props.field.label,\n placeholder: props.field.placeholder,\n disabled: props.field.disabled,\n rules: props.field.validation,\n validateOnMount: props.field.validateOnMount,\n tertiaryLabel: props.field.tertiaryLabel,\n successMessage: props.field.successMessage\n }\n\n // Type-specific props\n switch (props.field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'number':\n case 'tel':\n case 'url':\n return {\n ...baseProps,\n type: props.field.inputType || props.field.type,\n maxlength: props.field.maxLength,\n minlength: props.field.minLength,\n min: props.field.min,\n max: props.field.max,\n step: props.field.step,\n spellcheck: props.field.spellcheck,\n autocomplete: props.field.autocomplete\n }\n \n case 'textarea':\n return {\n ...baseProps,\n rows: props.field.rows,\n maxlength: props.field.maxLength,\n spellcheck: props.field.spellcheck\n }\n \n case 'select':\n return {\n ...baseProps,\n items: props.field.options || [],\n multiple: props.field.multiple,\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n showAll: props.field.showSelectAll\n }\n \n case 'combobox':\n return {\n ...baseProps,\n items: props.field.options || [],\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n customQuery: props.field.customQuery,\n loading: props.field.loading\n }\n \n case 'checkbox':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n isDescriptionHtml: props.field.isDescriptionHtml\n }\n \n case 'switch':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n boxShadow: props.field.boxShadow,\n hideMainLabel: props.field.hideMainLabel,\n textTrue: props.field.textTrue,\n textFalse: props.field.textFalse\n }\n \n default:\n return baseProps\n }\n})\n\nconst componentEvents = computed(() => {\n const baseEvents: Record<string, Function> = {}\n \n // Add event handlers based on field configuration\n if (props.field.onBlur) {\n baseEvents.blur = props.field.onBlur\n }\n \n if (props.field.onFocus) {\n baseEvents.focus = props.field.onFocus\n }\n \n if (props.field.onChange) {\n baseEvents['update:modelValue'] = (value: any) => {\n fieldValue.value = value\n props.field.onChange?.(value, props.field, props.formData ?? {})\n }\n }\n \n return baseEvents\n})\n\nconst getDefaultValue = () => {\n switch (props.field.type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return props.field.multiple ? [] : null\n case 'number':\n return props.field.min || 0\n default:\n return ''\n }\n}\n\nconst handleFieldChange = (value: any) => {\n fieldValue.value = value\n}\n</script>\n"],"names":["props","__props","emit","__emit","componentMap","UiTextInput","fieldComponent","computed","componentLoader","defineAsyncComponent","fieldValue","getDefaultValue","value","componentProps","baseProps","componentEvents","baseEvents","handleFieldChange","_createBlock","_resolveDynamicComponent","_mergeProps","_toHandlers","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_unref","ExclamationTriangleIcon","_hoisted_3","_cache","_hoisted_4","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js","sources":["../src/components/forms/DynamicFormField.vue"],"sourcesContent":["<!--\n @component DynamicFormField\n @description Renders a single field based on field configuration.\n \n Used by DynamicForm to render individual fields. Maps field type to\n appropriate input component and passes configuration props.\n \n @props\n - field (DynamicFormField, required): Field configuration object\n - modelValue (any, optional): Field value via v-model\n - formData (object, optional): Complete form data for conditional logic\n \n @emits\n - update:modelValue: Emitted when field value changes\n - field-change: Emitted with field and value on change\n \n @example\n <DynamicFormField\n :field=\"{ name: 'email', type: 'email', label: 'Email' }\"\n v-model=\"formData.email\"\n />\n-->\n<template>\n <component\n :is=\"fieldComponent\"\n v-if=\"fieldComponent\"\n v-bind=\"componentProps\"\n v-on=\"componentEvents\"\n :model-value=\"fieldValue\"\n @update:model-value=\"handleFieldChange\"\n />\n \n <!-- Fallback for unknown field types -->\n <div \n v-else\n class=\"sl-p-4 sl-bg-yellow-50 sl-border sl-border-yellow-200 sl-rounded-md\"\n >\n <div class=\"sl-flex\">\n <ExclamationTriangleIcon class=\"sl-h-5 sl-w-5 sl-text-yellow-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-yellow-800\">\n Unknown field type\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-yellow-700\">\n <p>Field type \"{{ field.type }}\" is not supported.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * DynamicFormField - Field renderer for DynamicForm\n * \n * Dynamically loads and renders the appropriate input component based on\n * the field type configuration. Handles prop mapping and event forwarding.\n * \n * ## Supported Field Types\n * - text, email, password, number, tel, url → UiTextInput\n * - textarea → TextAreaInput\n * - select → SelectInput\n * - combobox → ComboboxInput\n * - checkbox → CheckboxInput\n * - switch → SwitchInput\n * \n * @module components/forms/DynamicFormField\n * @see {@link DynamicFormField} for field configuration\n */\nimport { computed, defineAsyncComponent } from 'vue'\nimport UiTextInput from '../inputs/TextInput.vue'\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline'\nimport type { DynamicFormField, FormData, FormValue } from '../../types/form'\n\ninterface Props {\n field: DynamicFormField\n modelValue?: FormValue\n formData?: FormData\n}\n\nconst props = defineProps<Props>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: FormValue]\n 'field-change': [field: DynamicFormField, value: FormValue]\n}>()\n\nimport type { Component } from 'vue';\n\n// Component mapping for dynamic loading\nconst componentMap: Record<string, () => Promise<Component>> = {\n text: () => Promise.resolve(UiTextInput as Component),\n email: () => Promise.resolve(UiTextInput as Component), \n password: () => Promise.resolve(UiTextInput as Component),\n number: () => Promise.resolve(UiTextInput as Component),\n tel: () => Promise.resolve(UiTextInput as Component),\n url: () => Promise.resolve(UiTextInput as Component),\n textarea: () => import('../inputs/TextAreaInput.vue') as Promise<Component>,\n select: () => import('../inputs/SelectInput.vue') as Promise<Component>,\n combobox: () => import('../inputs/ComboboxInput.vue') as Promise<Component>,\n checkbox: () => import('../inputs/CheckboxInput.vue') as Promise<Component>,\n switch: () => import('../inputs/SwitchInput.vue') as Promise<Component>,\n}\n\nconst fieldComponent = computed(() => {\n const componentLoader = componentMap[props.field.type]\n if (componentLoader) {\n return defineAsyncComponent({\n loader: componentLoader,\n errorComponent: () => null,\n delay: 0\n })\n }\n return null\n})\n\nconst fieldValue = computed({\n get: () => props.modelValue ?? props.field.defaultValue ?? getDefaultValue(),\n set: (value) => {\n emit('update:modelValue', value)\n emit('field-change', props.field, value)\n }\n})\n\nconst componentProps = computed(() => {\n const baseProps: Record<string, unknown> = {\n name: props.field.name,\n label: props.field.label,\n placeholder: props.field.placeholder,\n disabled: props.field.disabled,\n rules: props.field.validation,\n validateOnMount: props.field.validateOnMount,\n tertiaryLabel: props.field.tertiaryLabel,\n successMessage: props.field.successMessage\n }\n\n // Type-specific props\n switch (props.field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'number':\n case 'tel':\n case 'url':\n return {\n ...baseProps,\n type: props.field.inputType || props.field.type,\n maxlength: props.field.maxLength,\n minlength: props.field.minLength,\n min: props.field.min,\n max: props.field.max,\n step: props.field.step,\n spellcheck: props.field.spellcheck,\n autocomplete: props.field.autocomplete\n }\n \n case 'textarea':\n return {\n ...baseProps,\n rows: props.field.rows,\n maxlength: props.field.maxLength,\n spellcheck: props.field.spellcheck\n }\n \n case 'select':\n return {\n ...baseProps,\n items: props.field.options || [],\n multiple: props.field.multiple,\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n showAll: props.field.showSelectAll\n }\n \n case 'combobox':\n return {\n ...baseProps,\n items: props.field.options || [],\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n customQuery: props.field.customQuery,\n loading: props.field.loading\n }\n \n case 'checkbox':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n isDescriptionHtml: props.field.isDescriptionHtml\n }\n \n case 'switch':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n boxShadow: props.field.boxShadow,\n hideMainLabel: props.field.hideMainLabel,\n textTrue: props.field.textTrue,\n textFalse: props.field.textFalse\n }\n \n default:\n return baseProps\n }\n})\n\nconst componentEvents = computed(() => {\n const baseEvents: Record<string, Function> = {}\n \n // Add event handlers based on field configuration\n if (props.field.onBlur) {\n baseEvents.blur = props.field.onBlur\n }\n \n if (props.field.onFocus) {\n baseEvents.focus = props.field.onFocus\n }\n \n if (props.field.onChange) {\n baseEvents['update:modelValue'] = (value: any) => {\n fieldValue.value = value\n props.field.onChange?.(value, props.field, props.formData ?? {})\n }\n }\n \n return baseEvents\n})\n\nconst getDefaultValue = () => {\n switch (props.field.type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return props.field.multiple ? [] : null\n case 'number':\n return props.field.min || 0\n default:\n return ''\n }\n}\n\nconst handleFieldChange = (value: any) => {\n fieldValue.value = value\n}\n</script>\n"],"names":["props","__props","emit","__emit","componentMap","UiTextInput","fieldComponent","computed","componentLoader","defineAsyncComponent","fieldValue","getDefaultValue","value","componentProps","baseProps","componentEvents","baseEvents","handleFieldChange","_createBlock","_resolveDynamicComponent","_mergeProps","_toHandlers","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_unref","ExclamationTriangleIcon","_hoisted_3","_cache","_hoisted_4","_toDisplayString"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { defineComponent as u, createElementBlock as l, openBlock as s, normalizeClass as o, createCommentVNode as n, createElementVNode as a, renderSlot as i, createBlock as f, resolveDynamicComponent as h, toDisplayString as c } from "vue";
1
+ import { defineComponent as f, createElementBlock as l, openBlock as s, normalizeClass as o, createCommentVNode as n, createElementVNode as a, renderSlot as i, createBlock as u, resolveDynamicComponent as h, toDisplayString as c } from "vue";
2
2
  const k = {
3
3
  key: 0,
4
- class: "sl-mx-auto sl-mb-4"
5
- }, x = ["href"], b = /* @__PURE__ */ u({
4
+ class: "sl-flex sl-justify-center sl-mb-4"
5
+ }, y = ["href"], b = /* @__PURE__ */ f({
6
6
  __name: "EmptyState",
7
7
  props: {
8
8
  title: {},
@@ -17,14 +17,14 @@ const k = {
17
17
  const r = m, d = () => {
18
18
  r("action");
19
19
  };
20
- return (e, y) => (s(), l("div", {
20
+ return (e, x) => (s(), l("div", {
21
21
  class: o(["sl-text-center", t.compact ? "sl-py-6" : "sl-py-12"])
22
22
  }, [
23
23
  t.icon || e.$slots.icon ? (s(), l("div", k, [
24
24
  i(e.$slots, "icon", {}, () => [
25
- (s(), f(h(t.icon), {
25
+ (s(), u(h(t.icon), {
26
26
  class: o([
27
- "sl-mx-auto sl-text-gray-400 dark:sl-text-slate-500",
27
+ "sl-text-gray-400 dark:sl-text-slate-500",
28
28
  t.compact ? "sl-h-10 sl-w-10" : "sl-h-12 sl-w-12"
29
29
  ]),
30
30
  "aria-hidden": "true"
@@ -57,7 +57,7 @@ const k = {
57
57
  key: 0,
58
58
  href: t.actionHref,
59
59
  class: "sl-inline-flex sl-items-center sl-rounded-md sl-bg-stachelock-600 sl-px-4 sl-py-2 sl-text-sm sl-font-medium sl-text-white sl-shadow-sm hover:sl-bg-stachelock-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-stachelock-500 focus:sl-ring-offset-2 sl-transition-colors"
60
- }, c(t.actionLabel), 9, x)) : (s(), l("button", {
60
+ }, c(t.actionLabel), 9, y)) : (s(), l("button", {
61
61
  key: 1,
62
62
  type: "button",
63
63
  onClick: d,
@@ -71,4 +71,4 @@ const k = {
71
71
  export {
72
72
  b as _
73
73
  };
74
- //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js.map
74
+ //# sourceMappingURL=EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js","sources":["../src/components/empty-state/EmptyState.vue"],"sourcesContent":["<!--\n @component EmptyState\n @description Generic empty state display with customizable content.\n \n A flexible empty state component with icon, title, description,\n and action button support.\n \n @props\n - title (string, required): Main heading text\n - description (string, optional): Description text\n - icon (Component, optional): Icon component to display\n - actionLabel (string, optional): Action button label\n - actionHref (string, optional): Action button link\n - compact (boolean, optional): Use compact layout\n \n @emits\n - action: Emitted when action button is clicked\n \n @slots\n - icon: Custom icon slot\n - description: Custom description content\n - action: Custom action content\n \n @example\n <EmptyState\n title=\"No items found\"\n description=\"Get started by creating a new item.\"\n action-label=\"Create Item\"\n @action=\"handleCreate\"\n >\n <template #icon>\n <PlusIcon class=\"sl-h-12 sl-w-12\" />\n </template>\n </EmptyState>\n-->\n<template>\n <div \n class=\"sl-text-center\"\n :class=\"compact ? 'sl-py-6' : 'sl-py-12'\"\n >\n <!-- Icon -->\n <div v-if=\"icon || $slots.icon\" class=\"sl-flex sl-justify-center sl-mb-4\">\n <slot name=\"icon\">\n <component \n :is=\"icon\" \n :class=\"[\n 'sl-text-gray-400 dark:sl-text-slate-500',\n compact ? 'sl-h-10 sl-w-10' : 'sl-h-12 sl-w-12'\n ]\"\n aria-hidden=\"true\" \n />\n </slot>\n </div>\n\n <!-- Title -->\n <h3 \n :class=\"[\n 'sl-font-medium sl-text-gray-900 dark:sl-text-white',\n compact ? 'sl-text-sm' : 'sl-text-lg'\n ]\"\n >\n {{ title }}\n </h3>\n\n <!-- Description -->\n <div \n v-if=\"description || $slots.description\" \n :class=\"[\n 'sl-text-gray-500 dark:sl-text-slate-400',\n compact ? 'sl-mt-1 sl-text-sm' : 'sl-mt-2 sl-text-base'\n ]\"\n >\n <slot name=\"description\">\n <p>{{ description }}</p>\n </slot>\n </div>\n\n <!-- Action -->\n <div \n v-if=\"actionLabel || $slots.action\" \n :class=\"compact ? 'sl-mt-4' : 'sl-mt-6'\"\n >\n <slot name=\"action\">\n <a\n v-if=\"actionHref\"\n :href=\"actionHref\"\n class=\"sl-inline-flex sl-items-center sl-rounded-md sl-bg-stachelock-600 sl-px-4 sl-py-2 sl-text-sm sl-font-medium sl-text-white sl-shadow-sm hover:sl-bg-stachelock-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-stachelock-500 focus:sl-ring-offset-2 sl-transition-colors\"\n >\n {{ actionLabel }}\n </a>\n <button\n v-else\n type=\"button\"\n @click=\"handleAction\"\n class=\"sl-inline-flex sl-items-center sl-rounded-md sl-bg-stachelock-600 sl-px-4 sl-py-2 sl-text-sm sl-font-medium sl-text-white sl-shadow-sm hover:sl-bg-stachelock-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-stachelock-500 focus:sl-ring-offset-2 sl-transition-colors\"\n >\n {{ actionLabel }}\n </button>\n </slot>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Component } from 'vue';\n\ninterface Props {\n title: string;\n description?: string;\n icon?: Component;\n actionLabel?: string;\n actionHref?: string;\n compact?: boolean;\n}\n\nwithDefaults(defineProps<Props>(), {\n compact: false,\n});\n\nconst emit = defineEmits<{\n action: [];\n}>();\n\nconst handleAction = (): void => {\n emit('action');\n};\n</script>\n\n"],"names":["emit","__emit","handleAction","_createElementBlock","_normalizeClass","__props","$slots","_openBlock","_hoisted_1","_renderSlot","_ctx","_createBlock","_resolveDynamicComponent","_createElementVNode","_hoisted_2"],"mappings":";;;;;;;;;;;;;;;;AAuHA,UAAMA,IAAOC,GAIPC,IAAe,MAAY;AAC/B,MAAAF,EAAK,QAAQ;AAAA,IACf;2BAzFEG,EAgEM,OAAA;AAAA,MA/DJ,OAAKC,EAAA,CAAC,kBACEC,EAAA,UAAO,YAAA,UAAA,CAAA;AAAA,IAAA;MAGJA,EAAA,QAAQC,EAAAA,OAAO,QAA1BC,KAAAJ,EAWM,OAXNK,GAWM;AAAA,QAVJC,EASOC,sBATP,MASO;AAAA,WARLH,KAAAI,EAOEC,EANKP,EAAA,IAAI,GAAA;AAAA,YACR,OAAKD,EAAA;AAAA;cAAuEC,EAAA,UAAO,oBAAA;AAAA,YAAA;YAIpF,eAAY;AAAA,UAAA;;;MAMlBQ,EAOK,MAAA;AAAA,QANF,OAAKT,EAAA;AAAA;UAA0EC,EAAA,UAAO,eAAA;AAAA,QAAA;WAKpFA,EAAA,KAAK,GAAA,CAAA;AAAA,MAKFA,EAAA,eAAeC,EAAAA,OAAO,oBAD9BH,EAUM,OAAA;AAAA;QARH,OAAKC,EAAA;AAAA;UAA+DC,EAAA,UAAO,uBAAA;AAAA,QAAA;;QAK5EI,EAEOC,6BAFP,MAEO;AAAA,UADLG,EAAwB,aAAlBR,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;MAMbA,EAAA,eAAeC,EAAAA,OAAO,eAD9BH,EAqBM,OAAA;AAAA;QAnBH,SAAOE,EAAA,UAAO,YAAA,SAAA;AAAA,MAAA;QAEfI,EAgBOC,wBAhBP,MAgBO;AAAA,UAdGL,EAAA,mBADRF,EAMI,KAAA;AAAA;YAJD,MAAME,EAAA;AAAA,YACP,OAAM;AAAA,UAAA,KAEHA,EAAA,WAAW,GAAA,GAAAS,CAAA,WAEhBX,EAOS,UAAA;AAAA;YALP,MAAK;AAAA,YACJ,SAAOD;AAAA,YACR,OAAM;AAAA,UAAA,KAEHG,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;;;;"}
@@ -0,0 +1,110 @@
1
+ import { defineComponent as h, computed as m, createBlock as l, openBlock as o, Teleport as k, createElementBlock as i, createCommentVNode as u, Fragment as a, renderList as d } from "vue";
2
+ import { useNotifications as y } from "./composables/useNotifications.js";
3
+ import { _ as f } from "./NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js";
4
+ const g = {
5
+ key: 0,
6
+ class: "sl-notifications-position sl-notifications-tl"
7
+ }, C = {
8
+ key: 1,
9
+ class: "sl-notifications-position sl-notifications-tc"
10
+ }, A = {
11
+ key: 2,
12
+ class: "sl-notifications-position sl-notifications-tr"
13
+ }, N = {
14
+ key: 3,
15
+ class: "sl-notifications-position sl-notifications-bl"
16
+ }, B = {
17
+ key: 4,
18
+ class: "sl-notifications-position sl-notifications-bc"
19
+ }, T = {
20
+ key: 5,
21
+ class: "sl-notifications-position sl-notifications-br"
22
+ }, P = /* @__PURE__ */ h({
23
+ __name: "NotificationContainer",
24
+ setup(x) {
25
+ const {
26
+ activeNotifications: p,
27
+ hideNotification: _,
28
+ executeAction: v,
29
+ bringToFront: b
30
+ } = y(), n = m(() => {
31
+ const e = {
32
+ tl: [],
33
+ tc: [],
34
+ tr: [],
35
+ bl: [],
36
+ bc: [],
37
+ br: []
38
+ };
39
+ for (const s of p.value) {
40
+ const t = s.position || "br";
41
+ e[t].push(s);
42
+ }
43
+ return e;
44
+ }), c = (e) => {
45
+ _(e);
46
+ }, r = (e, s) => {
47
+ if (s.label === "bringToFront") {
48
+ b(e.id);
49
+ return;
50
+ }
51
+ v(e.id, s), s.action !== "dismiss" && !e.sticky && setTimeout(() => {
52
+ _(e);
53
+ }, 100);
54
+ };
55
+ return (e, s) => (o(), l(k, { to: "body" }, [
56
+ n.value.tl.length > 0 ? (o(), i("div", g, [
57
+ (o(!0), i(a, null, d(n.value.tl, (t) => (o(), l(f, {
58
+ key: t.id,
59
+ notification: t,
60
+ onClose: c,
61
+ onAction: r
62
+ }, null, 8, ["notification"]))), 128))
63
+ ])) : u("", !0),
64
+ n.value.tc.length > 0 ? (o(), i("div", C, [
65
+ (o(!0), i(a, null, d(n.value.tc, (t) => (o(), l(f, {
66
+ key: t.id,
67
+ notification: t,
68
+ onClose: c,
69
+ onAction: r
70
+ }, null, 8, ["notification"]))), 128))
71
+ ])) : u("", !0),
72
+ n.value.tr.length > 0 ? (o(), i("div", A, [
73
+ (o(!0), i(a, null, d(n.value.tr, (t) => (o(), l(f, {
74
+ key: t.id,
75
+ notification: t,
76
+ onClose: c,
77
+ onAction: r
78
+ }, null, 8, ["notification"]))), 128))
79
+ ])) : u("", !0),
80
+ n.value.bl.length > 0 ? (o(), i("div", N, [
81
+ (o(!0), i(a, null, d(n.value.bl, (t) => (o(), l(f, {
82
+ key: t.id,
83
+ notification: t,
84
+ onClose: c,
85
+ onAction: r
86
+ }, null, 8, ["notification"]))), 128))
87
+ ])) : u("", !0),
88
+ n.value.bc.length > 0 ? (o(), i("div", B, [
89
+ (o(!0), i(a, null, d(n.value.bc, (t) => (o(), l(f, {
90
+ key: t.id,
91
+ notification: t,
92
+ onClose: c,
93
+ onAction: r
94
+ }, null, 8, ["notification"]))), 128))
95
+ ])) : u("", !0),
96
+ n.value.br.length > 0 ? (o(), i("div", T, [
97
+ (o(!0), i(a, null, d(n.value.br, (t) => (o(), l(f, {
98
+ key: t.id,
99
+ notification: t,
100
+ onClose: c,
101
+ onAction: r
102
+ }, null, 8, ["notification"]))), 128))
103
+ ])) : u("", !0)
104
+ ]));
105
+ }
106
+ });
107
+ export {
108
+ P as _
109
+ };
110
+ //# sourceMappingURL=NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js","sources":["../src/components/notifications/NotificationContainer.vue"],"sourcesContent":["<!--\n @component NotificationContainer\n @description Container for rendering all active notifications with proper positioning\n \n Place this component once at the root of your app to enable the notification\n system. It automatically renders all active notifications from the useNotifications\n composable with support for stacking, positioning, and actions.\n \n ## Features\n - Automatic notification stacking with offset calculation\n - Position-aware containers (6 positions: tr, tl, tc, br, bl, bc)\n - Card stacking mode for many notifications\n - Action button handling (dismiss, link, callback)\n - Pause/resume support\n - Works with importing packages (teleports to body)\n \n @example\n // In App.vue or main layout\n <template>\n <div id=\"app\">\n <RouterView />\n <NotificationContainer />\n </div>\n </template>\n \n @example\n // Using notifications in any component\n <script setup>\n import { useNotifications } from '@stachelock/ui'\n \n const { success, error, showNotification } = useNotifications()\n \n // Simple notifications\n success('Saved!', 'Your changes were saved successfully.')\n error('Error', 'Something went wrong.')\n \n // With actions\n showNotification({\n title: 'Confirm Delete',\n message: 'Are you sure you want to delete this item?',\n theme: 'warning',\n autoClose: false,\n actions: [\n { label: 'Delete', action: 'callback', callback: () => deleteItem(), theme: 'danger' },\n { label: 'Cancel', action: 'dismiss' }\n ]\n })\n </script>\n-->\n<template>\n <Teleport to=\"body\">\n <!-- Top Left -->\n <div \n v-if=\"notificationsByPosition.tl.length > 0\"\n class=\"sl-notifications-position sl-notifications-tl\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.tl\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n\n <!-- Top Center -->\n <div \n v-if=\"notificationsByPosition.tc.length > 0\"\n class=\"sl-notifications-position sl-notifications-tc\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.tc\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n\n <!-- Top Right -->\n <div \n v-if=\"notificationsByPosition.tr.length > 0\"\n class=\"sl-notifications-position sl-notifications-tr\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.tr\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n\n <!-- Bottom Left -->\n <div \n v-if=\"notificationsByPosition.bl.length > 0\"\n class=\"sl-notifications-position sl-notifications-bl\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.bl\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n\n <!-- Bottom Center -->\n <div \n v-if=\"notificationsByPosition.bc.length > 0\"\n class=\"sl-notifications-position sl-notifications-bc\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.bc\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n\n <!-- Bottom Right (Default) -->\n <div \n v-if=\"notificationsByPosition.br.length > 0\"\n class=\"sl-notifications-position sl-notifications-br\"\n >\n <NotificationToast\n v-for=\"notification in notificationsByPosition.br\"\n :key=\"notification.id\"\n :notification=\"notification\"\n @close=\"handleClose\"\n @action=\"handleAction\"\n />\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * NotificationContainer - Global notification renderer with position-aware containers\n * \n * Renders all active notifications from the notification system, grouped by position.\n * Uses Teleport to render notifications at the body level for proper z-index.\n * \n * ## Setup\n * Add this component once in your app root:\n * ```vue\n * <template>\n * <div id=\"app\">\n * <YourContent />\n * <NotificationContainer />\n * </div>\n * </template>\n * ```\n * \n * ## Usage\n * Then use the composable anywhere:\n * ```typescript\n * import { useNotifications } from '@stachelock/ui'\n * \n * const { success, error, warning, info, showNotification } = useNotifications()\n * \n * // Simple notifications (defaults to bottom-right)\n * success('Saved!', 'Your changes were saved successfully.')\n * error('Error', 'Something went wrong.')\n * \n * // Position-specific notifications\n * showNotification({\n * title: 'Top Right',\n * message: 'This appears in the top right.',\n * position: 'tr'\n * })\n * \n * // Advanced notification with actions\n * showNotification({\n * title: 'Session Expiring',\n * message: 'Your session will expire in 5 minutes.',\n * theme: 'warning',\n * position: 'br',\n * priority: 'high',\n * autoClose: false,\n * actions: [\n * { label: 'Extend Session', action: 'callback', callback: extendSession, theme: 'primary' },\n * { label: 'Logout', action: 'callback', callback: logout, theme: 'secondary' }\n * ]\n * })\n * ```\n */\nimport { computed } from 'vue';\nimport { \n useNotifications, \n type NotificationState, \n type NotificationAction,\n type NotificationPosition\n} from '../../composables/useNotifications';\nimport NotificationToast from './NotificationToast.vue';\n\nconst { \n activeNotifications, \n hideNotification, \n executeAction, \n bringToFront \n} = useNotifications();\n\n// Group notifications by position\nconst notificationsByPosition = computed(() => {\n const groups: Record<NotificationPosition, NotificationState[]> = {\n tl: [],\n tc: [],\n tr: [],\n bl: [],\n bc: [],\n br: []\n };\n \n for (const notification of activeNotifications.value) {\n const pos = notification.position || 'br';\n groups[pos].push(notification);\n }\n \n return groups;\n});\n\nconst handleClose = (notification: NotificationState) => {\n hideNotification(notification);\n};\n\nconst handleAction = (notification: NotificationState, action: NotificationAction) => {\n // Handle special \"bring to front\" action for card stacking\n if (action.label === 'bringToFront') {\n bringToFront(notification.id);\n return;\n }\n \n // Execute the action\n executeAction(notification.id, action);\n \n // Auto-dismiss after callback/link actions unless sticky\n if (action.action !== 'dismiss' && !notification.sticky) {\n // Small delay to let any callback complete\n setTimeout(() => {\n hideNotification(notification);\n }, 100);\n }\n};\n</script>\n\n<style>\n/* Position containers - these are fixed positioned containers for each corner/edge */\n.sl-notifications-position {\n position: fixed;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 24px;\n pointer-events: none;\n max-height: calc(100vh - 48px);\n overflow: visible;\n}\n\n/* Allow pointer events on individual notifications and set proper width */\n.sl-notifications-position > * {\n pointer-events: auto;\n width: 384px; /* max-w-sm equivalent */\n max-width: calc(100vw - 48px);\n}\n\n/* Top positions */\n.sl-notifications-tl {\n top: 0;\n left: 0;\n align-items: flex-start;\n}\n\n.sl-notifications-tc {\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n.sl-notifications-tr {\n top: 0;\n right: 0;\n align-items: flex-end;\n}\n\n/* Bottom positions - flex-direction reversed so new items appear at bottom */\n.sl-notifications-bl {\n bottom: 0;\n left: 0;\n align-items: flex-start;\n flex-direction: column-reverse;\n}\n\n.sl-notifications-bc {\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n flex-direction: column-reverse;\n}\n\n.sl-notifications-br {\n bottom: 0;\n right: 0;\n align-items: flex-end;\n flex-direction: column-reverse;\n}\n\n/* Mobile adjustments */\n@media (max-width: 640px) {\n .sl-notifications-position {\n padding: 16px;\n left: 0;\n right: 0;\n }\n \n .sl-notifications-position > * {\n width: 100%;\n max-width: 100%;\n }\n \n .sl-notifications-tl,\n .sl-notifications-tc,\n .sl-notifications-tr {\n top: 0;\n align-items: stretch;\n }\n \n .sl-notifications-bl,\n .sl-notifications-bc,\n .sl-notifications-br {\n bottom: 0;\n align-items: stretch;\n }\n \n /* On mobile, center positions take full width */\n .sl-notifications-tc,\n .sl-notifications-bc {\n transform: none;\n }\n}\n</style>\n"],"names":["activeNotifications","hideNotification","executeAction","bringToFront","useNotifications","notificationsByPosition","computed","groups","notification","pos","handleClose","handleAction","action","_createBlock","_Teleport","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","NotificationToast","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6"],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ import { defineComponent as J, computed as e, createBlock as k, openBlock as r, unref as h, withCtx as v, createVNode as w, createElementBlock as o, createCommentVNode as c, normalizeStyle as K, normalizeClass as i, createElementVNode as d, resolveDynamicComponent as P, toDisplayString as y, Fragment as Q, renderList as U, withModifiers as C } from "vue";
2
+ import { r as g, a as Z } from "./InformationCircleIcon-B322GNIt.js";
3
+ import { r as $ } from "./ExclamationCircleIcon-DjxYk45_.js";
4
+ import { r as _ } from "./ExclamationTriangleIcon-BNKYmV_J.js";
5
+ import { r as tt } from "./XMarkIcon-DNvCkiOy.js";
6
+ import { S as st, h as et } from "./transition-_rPfnoET.js";
7
+ const lt = ["aria-live"], at = { class: "sl-flex sl-items-start" }, rt = {
8
+ key: 1,
9
+ class: "sl-mt-3 sl-flex sl-gap-2"
10
+ }, it = ["onClick"], ft = /* @__PURE__ */ J({
11
+ __name: "NotificationToast",
12
+ props: {
13
+ notification: {}
14
+ },
15
+ emits: ["close", "action"],
16
+ setup(l, { emit: z }) {
17
+ const s = l, u = z, S = () => {
18
+ u("close", s.notification);
19
+ }, M = (t) => {
20
+ u("action", s.notification, t);
21
+ }, B = () => {
22
+ s.notification.isCardMode && s.notification.cardStackIndex !== 0 && u("action", s.notification, { label: "bringToFront", action: "callback" });
23
+ }, I = () => {
24
+ }, N = e(() => {
25
+ const t = {
26
+ primary: "sl-bg-primary-600 dark:sl-bg-primary-700 sl-text-white",
27
+ secondary: "sl-bg-gray-600 dark:sl-bg-gray-700 sl-text-white",
28
+ dark: "sl-bg-gray-800 dark:sl-bg-gray-900 sl-text-white",
29
+ 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",
30
+ warning: "sl-bg-amber-500 dark:sl-bg-amber-600 sl-text-white",
31
+ danger: "sl-bg-red-500 dark:sl-bg-red-600 sl-text-white",
32
+ success: "sl-bg-emerald-500 dark:sl-bg-emerald-600 sl-text-white",
33
+ info: "sl-bg-blue-500 dark:sl-bg-blue-600 sl-text-white",
34
+ 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"
35
+ };
36
+ return t[s.notification.theme] || t.primary;
37
+ }), O = e(() => {
38
+ const t = {
39
+ default: "",
40
+ compact: "",
41
+ expanded: ""
42
+ };
43
+ return t[s.notification.variant] || t.default;
44
+ }), T = e(() => s.notification.priority === "urgent" ? "sl-animate-pulse" : ""), A = e(() => {
45
+ const t = "sl-absolute sl-top-0 sl-left-0 sl-right-0 sl-h-1";
46
+ return s.notification.priority === "urgent" ? `${t} sl-bg-red-400 dark:sl-bg-red-500` : s.notification.priority === "high" ? `${t} sl-bg-amber-400 dark:sl-bg-amber-500` : "";
47
+ }), F = e(() => s.notification.isCardMode ? "sl-cursor-pointer hover:sl-scale-[1.02] sl-transition-transform" : ""), L = e(() => {
48
+ const t = {};
49
+ return s.notification.maxWidth && (t.maxWidth = `${s.notification.maxWidth}px`), s.notification.isCardMode && (t.transform = `translate(${s.notification.cardOffsetX || 0}px, ${s.notification.cardOffsetY || 0}px)`, t.zIndex = s.notification.zIndex || 1), t;
50
+ }), b = e(() => {
51
+ const t = s.notification.theme;
52
+ return ["light", "ghost"].includes(t) ? "sl-text-gray-800 dark:sl-text-gray-100" : "sl-text-white";
53
+ }), V = e(() => {
54
+ const t = s.notification.theme;
55
+ return ["light", "ghost"].includes(t) ? "sl-text-gray-500 dark:sl-text-gray-400" : "sl-text-white/90";
56
+ }), W = e(() => {
57
+ const t = {
58
+ primary: "focus:sl-ring-primary-400 dark:focus:sl-ring-primary-500",
59
+ secondary: "focus:sl-ring-gray-400 dark:focus:sl-ring-gray-500",
60
+ dark: "focus:sl-ring-gray-400 dark:focus:sl-ring-gray-500",
61
+ light: "focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600",
62
+ warning: "focus:sl-ring-amber-300 dark:focus:sl-ring-amber-500",
63
+ danger: "focus:sl-ring-red-300 dark:focus:sl-ring-red-500",
64
+ success: "focus:sl-ring-emerald-300 dark:focus:sl-ring-emerald-500",
65
+ info: "focus:sl-ring-blue-300 dark:focus:sl-ring-blue-500",
66
+ ghost: "focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600"
67
+ };
68
+ return t[s.notification.theme] || t.primary;
69
+ }), D = e(() => {
70
+ const t = s.notification.theme, a = "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 = ["light", "ghost"].includes(t) ? "sl-text-gray-400 dark:sl-text-gray-500 hover:sl-text-gray-500 dark:hover:sl-text-gray-400" : "sl-text-white/70 hover:sl-text-white";
71
+ return `${a} ${n}`;
72
+ }), p = e(() => {
73
+ if (s.notification.icon)
74
+ return s.notification.icon;
75
+ const t = s.notification.theme, a = {
76
+ primary: g,
77
+ secondary: g,
78
+ dark: $,
79
+ light: g,
80
+ warning: _,
81
+ danger: $,
82
+ success: Z,
83
+ info: g,
84
+ ghost: g
85
+ };
86
+ return a[t] || a.primary;
87
+ }), E = e(() => {
88
+ const t = {
89
+ compact: "sl-h-5 sl-w-5",
90
+ default: "sl-h-6 sl-w-6",
91
+ expanded: "sl-h-7 sl-w-7"
92
+ };
93
+ return t[s.notification.variant] || t.default;
94
+ }), R = e(() => {
95
+ const t = {
96
+ compact: "sl-text-xs sl-font-medium",
97
+ default: "sl-text-sm sl-font-medium",
98
+ expanded: "sl-text-base sl-font-semibold"
99
+ };
100
+ return t[s.notification.variant] || t.default;
101
+ }), X = e(() => {
102
+ const t = {
103
+ compact: "sl-mt-0.5 sl-text-xs",
104
+ default: "sl-mt-1 sl-text-sm",
105
+ expanded: "sl-mt-2 sl-text-sm"
106
+ };
107
+ return t[s.notification.variant] || t.default;
108
+ }), Y = e(() => {
109
+ const t = {
110
+ compact: "sl-p-3",
111
+ default: "sl-p-4",
112
+ expanded: "sl-p-5"
113
+ };
114
+ return t[s.notification.variant] || t.default;
115
+ }), j = e(() => {
116
+ const t = {
117
+ compact: "sl-ml-2 sl-w-0 sl-flex-1",
118
+ default: "sl-ml-3 sl-w-0 sl-flex-1 sl-pt-0.5",
119
+ expanded: "sl-ml-4 sl-w-0 sl-flex-1 sl-pt-0.5"
120
+ };
121
+ return t[s.notification.variant] || t.default;
122
+ }), q = (t) => {
123
+ const a = "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 = s.notification.theme, f = ["light", "ghost"].includes(n), m = {
124
+ primary: {
125
+ 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",
126
+ dark: "sl-bg-white/20 sl-text-white hover:sl-bg-white/30"
127
+ },
128
+ secondary: {
129
+ 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",
130
+ dark: "sl-bg-white/20 sl-text-white hover:sl-bg-white/30"
131
+ },
132
+ danger: {
133
+ 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",
134
+ dark: "sl-bg-white/20 sl-text-white hover:sl-bg-white/30"
135
+ }
136
+ }, H = t.theme || "secondary", x = m[H] || m.secondary;
137
+ return `${a} ${f ? x.light : x.dark}`;
138
+ }, G = e(() => {
139
+ const t = s.notification.position, a = {
140
+ tr: "sl-translate-x-full sl-opacity-0",
141
+ tl: "-sl-translate-x-full sl-opacity-0",
142
+ br: "sl-translate-x-full sl-opacity-0",
143
+ bl: "-sl-translate-x-full sl-opacity-0",
144
+ tc: "-sl-translate-y-full sl-opacity-0",
145
+ bc: "sl-translate-y-full sl-opacity-0"
146
+ };
147
+ return a[t] || a.br;
148
+ });
149
+ return (t, a) => (r(), k(h(st), {
150
+ appear: "",
151
+ show: l.notification.isOpen,
152
+ as: "template",
153
+ onAfterLeave: I
154
+ }, {
155
+ default: v(() => [
156
+ w(h(et), {
157
+ as: "template",
158
+ enter: "sl-duration-300 sl-ease-out sl-transform",
159
+ "enter-from": G.value,
160
+ "enter-to": "sl-translate-y-0 sl-opacity-100 sl-translate-x-0",
161
+ leave: "sl-duration-200 sl-ease-in",
162
+ "leave-from": "sl-opacity-100",
163
+ "leave-to": "sl-opacity-0"
164
+ }, {
165
+ default: v(() => [
166
+ l.notification.isOpen ? (r(), o("div", {
167
+ key: 0,
168
+ class: i([
169
+ N.value,
170
+ O.value,
171
+ T.value,
172
+ F.value,
173
+ "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"
174
+ ]),
175
+ style: K(L.value),
176
+ onClick: B,
177
+ role: "alert",
178
+ "aria-live": l.notification.priority === "urgent" ? "assertive" : "polite"
179
+ }, [
180
+ d("div", {
181
+ class: i(Y.value)
182
+ }, [
183
+ d("div", at, [
184
+ p.value ? (r(), k(P(p.value), {
185
+ key: 0,
186
+ class: i([E.value, V.value, "sl-flex-shrink-0"]),
187
+ "aria-hidden": "true"
188
+ }, null, 8, ["class"])) : c("", !0),
189
+ d("div", {
190
+ class: i(j.value)
191
+ }, [
192
+ d("p", {
193
+ class: i([R.value, b.value])
194
+ }, y(l.notification.title), 3),
195
+ l.notification.message ? (r(), o("p", {
196
+ key: 0,
197
+ class: i([X.value, b.value, "sl-opacity-90"])
198
+ }, y(l.notification.message), 3)) : c("", !0),
199
+ l.notification.actions && l.notification.actions.length > 0 ? (r(), o("div", rt, [
200
+ (r(!0), o(Q, null, U(l.notification.actions, (n, f) => (r(), o("button", {
201
+ key: f,
202
+ type: "button",
203
+ class: i(q(n)),
204
+ onClick: C((m) => M(n), ["stop"])
205
+ }, y(n.label), 11, it))), 128))
206
+ ])) : c("", !0)
207
+ ], 2),
208
+ l.notification.dismissible !== !1 ? (r(), o("button", {
209
+ key: 1,
210
+ type: "button",
211
+ onClick: C(S, ["stop"]),
212
+ class: i([D.value, W.value])
213
+ }, [
214
+ a[0] || (a[0] = d("span", { class: "sl-sr-only" }, "Close", -1)),
215
+ w(h(tt), {
216
+ class: "sl-h-5 sl-w-5",
217
+ "aria-hidden": "true"
218
+ })
219
+ ], 2)) : c("", !0)
220
+ ])
221
+ ], 2),
222
+ l.notification.priority === "urgent" || l.notification.priority === "high" ? (r(), o("div", {
223
+ key: 0,
224
+ class: i(A.value)
225
+ }, null, 2)) : c("", !0)
226
+ ], 14, lt)) : c("", !0)
227
+ ]),
228
+ _: 1
229
+ }, 8, ["enter-from"])
230
+ ]),
231
+ _: 1
232
+ }, 8, ["show"]));
233
+ }
234
+ });
235
+ export {
236
+ ft as _
237
+ };
238
+ //# sourceMappingURL=NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js.map