@stachelock/ui 0.3.1 → 0.4.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.
- package/dist/{AlertModal.vue_vue_type_script_setup_true_lang-CxwewAVy.js → AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js} +2 -2
- package/dist/{AlertModal.vue_vue_type_script_setup_true_lang-CxwewAVy.js.map → AlertModal.vue_vue_type_script_setup_true_lang-C6q8Mpl4.js.map} +1 -1
- package/dist/{BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-B570pdYL.js → BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js} +6 -6
- package/dist/{BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-B570pdYL.js.map → BackgroundGradientWrapper.vue_vue_type_script_setup_true_lang-C8msTrTn.js.map} +1 -1
- package/dist/{BarChart.vue_vue_type_script_setup_true_lang-Dnuzd7vZ.js → BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js} +19 -19
- package/dist/{BarChart.vue_vue_type_script_setup_true_lang-Dnuzd7vZ.js.map → BarChart.vue_vue_type_script_setup_true_lang-xCb0DCbf.js.map} +1 -1
- package/dist/{BaseModal.vue_vue_type_script_setup_true_lang-Cr_GAD6Q.js → BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js} +5 -6
- package/dist/{BaseModal.vue_vue_type_script_setup_true_lang-Cr_GAD6Q.js.map → BaseModal.vue_vue_type_script_setup_true_lang-B67Pt3tW.js.map} +1 -1
- package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-DRwe4rw8.js → CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js} +111 -111
- package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-P5ypRyGV.js.map +1 -0
- package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js +187 -0
- package/dist/{CheckboxInput.vue_vue_type_script_setup_true_lang-B8wJVkPP.js.map → CheckboxInput.vue_vue_type_script_setup_true_lang-BikR9rgi.js.map} +1 -1
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-1YGa9Fnd.js +1351 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-1YGa9Fnd.js.map +1 -0
- package/dist/{ComingSoon.vue_vue_type_script_setup_true_lang-C5GU-yiK.js → ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js} +19 -19
- package/dist/{ComingSoon.vue_vue_type_script_setup_true_lang-C5GU-yiK.js.map → ComingSoon.vue_vue_type_script_setup_true_lang-CJ8FXE42.js.map} +1 -1
- package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-DV-XVWqh.js → DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js} +7 -8
- package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-DV-XVWqh.js.map → DashboardLayout.vue_vue_type_script_setup_true_lang-B0M6-9os.js.map} +1 -1
- package/dist/DatepickerInput.vue_vue_type_style_index_0_lang-BdkGLw0H.js.map +1 -1
- package/dist/{DayCalendar.vue_vue_type_script_setup_true_lang-BV9vYYuX.js → DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js} +47 -47
- package/dist/{DayCalendar.vue_vue_type_script_setup_true_lang-BV9vYYuX.js.map → DayCalendar.vue_vue_type_script_setup_true_lang-8al4Fotu.js.map} +1 -1
- package/dist/{DisclosureWrapper.vue_vue_type_script_setup_true_lang-B-Mr_vdx.js → DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js} +38 -38
- package/dist/{DisclosureWrapper.vue_vue_type_script_setup_true_lang-B-Mr_vdx.js.map → DisclosureWrapper.vue_vue_type_script_setup_true_lang-C7y2bNhW.js.map} +1 -1
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js +253 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-CxSaO5Cl.js.map +1 -0
- package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-Ct8b80dM.js → DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js} +16 -16
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-CSLSRFM7.js.map +1 -0
- package/dist/EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js +122 -0
- package/dist/{EmailInput.vue_vue_type_script_setup_true_lang-Dhfgs2Jn.js.map → EmailInput.vue_vue_type_script_setup_true_lang-BicPMIop.js.map} +1 -1
- package/dist/{EmptyInput.vue_vue_type_script_setup_true_lang-BDxgc5Bs.js → EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js} +9 -9
- package/dist/{EmptyInput.vue_vue_type_script_setup_true_lang-BDxgc5Bs.js.map → EmptyInput.vue_vue_type_script_setup_true_lang-FWDCFF2c.js.map} +1 -1
- package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js → EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js} +29 -29
- package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js.map → EmptyState.vue_vue_type_script_setup_true_lang-Dxy-cLPT.js.map} +1 -1
- package/dist/{EventsList.vue_vue_type_script_setup_true_lang-D3q9wJ4E.js → EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js} +30 -31
- package/dist/{EventsList.vue_vue_type_script_setup_true_lang-D3q9wJ4E.js.map → EventsList.vue_vue_type_script_setup_true_lang-MhuVi5u8.js.map} +1 -1
- package/dist/{FunnelChart.vue_vue_type_script_setup_true_lang-B8QYlJ-s.js → FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js} +12 -12
- package/dist/{FunnelChart.vue_vue_type_script_setup_true_lang-B8QYlJ-s.js.map → FunnelChart.vue_vue_type_script_setup_true_lang-B4pH6xCV.js.map} +1 -1
- package/dist/{HiddenInput.vue_vue_type_script_setup_true_lang-DYdvWmVE.js → HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js} +10 -10
- package/dist/{HiddenInput.vue_vue_type_script_setup_true_lang-DYdvWmVE.js.map → HiddenInput.vue_vue_type_script_setup_true_lang-PtGZ4eLW.js.map} +1 -1
- package/dist/{InlineTabs.vue_vue_type_script_setup_true_lang-DhkX5sWS.js → InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js} +29 -29
- package/dist/{InlineTabs.vue_vue_type_script_setup_true_lang-DhkX5sWS.js.map → InlineTabs.vue_vue_type_script_setup_true_lang-CD0lnkUm.js.map} +1 -1
- package/dist/{LineChart.vue_vue_type_script_setup_true_lang-DszQ-a5L.js → LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js} +17 -17
- package/dist/{LineChart.vue_vue_type_script_setup_true_lang-DszQ-a5L.js.map → LineChart.vue_vue_type_script_setup_true_lang-DJo0edLJ.js.map} +1 -1
- package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js +36 -0
- package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-CwOOShcM.js.map → LottieAnimation.vue_vue_type_script_setup_true_lang-swmHdR0_.js.map} +1 -1
- package/dist/{MonthCalendar.vue_vue_type_style_index_0_lang-CnX3Ih0W.js → MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js} +2 -2
- package/dist/{MonthCalendar.vue_vue_type_style_index_0_lang-CnX3Ih0W.js.map → MonthCalendar.vue_vue_type_style_index_0_lang-Cyzq7A9j.js.map} +1 -1
- package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js +30 -0
- package/dist/{NavigationGroup.vue_vue_type_script_setup_true_lang-2tAB9Hbx.js.map → NavigationGroup.vue_vue_type_script_setup_true_lang-BWq5fpEm.js.map} +1 -1
- package/dist/{NavigationItem.vue_vue_type_script_setup_true_lang-CEsuYl3S.js → NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js} +18 -18
- package/dist/{NavigationItem.vue_vue_type_script_setup_true_lang-CEsuYl3S.js.map → NavigationItem.vue_vue_type_script_setup_true_lang-C8aX-84Q.js.map} +1 -1
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js +277 -0
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-DZxcEZkP.js.map +1 -0
- package/dist/{PieChart.vue_vue_type_script_setup_true_lang-DJRcsty7.js → PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js} +12 -12
- package/dist/{PieChart.vue_vue_type_script_setup_true_lang-DJRcsty7.js.map → PieChart.vue_vue_type_script_setup_true_lang-e3wsA9O4.js.map} +1 -1
- package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-DkABeWJt.js +130 -0
- package/dist/{ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-Cri9BiBy.js.map → ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-DkABeWJt.js.map} +1 -1
- package/dist/{ProjectLogo.vue_vue_type_script_setup_true_lang-CtroDq7L.js → ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js} +24 -24
- package/dist/{ProjectLogo.vue_vue_type_script_setup_true_lang-CtroDq7L.js.map → ProjectLogo.vue_vue_type_script_setup_true_lang-DYjp-RNh.js.map} +1 -1
- package/dist/{SelectInput.vue_vue_type_script_setup_true_lang--yUL7bcx.js → SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js} +111 -111
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js.map +1 -0
- package/dist/{SelectTextInput.vue_vue_type_script_setup_true_lang-B2Gw_se2.js → SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js} +2 -2
- package/dist/{SelectTextInput.vue_vue_type_script_setup_true_lang-B2Gw_se2.js.map → SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js.map} +1 -1
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-BD2PF5xp.js → SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js} +9 -10
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-BD2PF5xp.js.map → SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js.map} +1 -1
- package/dist/{SparklineChart.vue_vue_type_script_setup_true_lang-DDTcpEjy.js → SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js} +17 -17
- package/dist/{SparklineChart.vue_vue_type_script_setup_true_lang-DDTcpEjy.js.map → SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js.map} +1 -1
- package/dist/{StatCard.vue_vue_type_script_setup_true_lang-DTOT0-WB.js → StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js} +40 -40
- package/dist/{StatCard.vue_vue_type_script_setup_true_lang-DTOT0-WB.js.map → StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js.map} +1 -1
- package/dist/{StepperPanels.vue_vue_type_script_setup_true_lang-BtHrfqFI.js → StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js} +38 -38
- package/dist/{StepperPanels.vue_vue_type_script_setup_true_lang-BtHrfqFI.js.map → StepperPanels.vue_vue_type_script_setup_true_lang-D6Fv7iz3.js.map} +1 -1
- package/dist/{SwitchInput.vue_vue_type_script_setup_true_lang-D6M1qwP1.js → SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js} +110 -108
- package/dist/{SwitchInput.vue_vue_type_script_setup_true_lang-D6M1qwP1.js.map → SwitchInput.vue_vue_type_script_setup_true_lang-C88FcxuK.js.map} +1 -1
- package/dist/{SwitchInputGroup.vue_vue_type_script_setup_true_lang-BNKKEAMq.js → SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js} +2 -2
- package/dist/{SwitchInputGroup.vue_vue_type_script_setup_true_lang-BNKKEAMq.js.map → SwitchInputGroup.vue_vue_type_script_setup_true_lang-CK9JWl4F.js.map} +1 -1
- package/dist/{TabGroup.vue_vue_type_script_setup_true_lang-DrhDwLL3.js → TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js} +3 -3
- package/dist/{TabGroup.vue_vue_type_script_setup_true_lang-DrhDwLL3.js.map → TabGroup.vue_vue_type_script_setup_true_lang-DVVeOgWH.js.map} +1 -1
- package/dist/{TabGroupUnderline.vue_vue_type_script_setup_true_lang-Di33js6c.js → TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js} +32 -32
- package/dist/{TabGroupUnderline.vue_vue_type_script_setup_true_lang-Di33js6c.js.map → TabGroupUnderline.vue_vue_type_script_setup_true_lang-_3XtOn3w.js.map} +1 -1
- package/dist/{TabsInPills.vue_vue_type_script_setup_true_lang-CMxaK0Kw.js → TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js} +21 -21
- package/dist/{TabsInPills.vue_vue_type_script_setup_true_lang-CMxaK0Kw.js.map → TabsInPills.vue_vue_type_script_setup_true_lang-DY1NkXCQ.js.map} +1 -1
- package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-CAK6ZIiz.js → TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js} +2 -2
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-Da6-pRJ2.js.map +1 -0
- package/dist/{TextAreaInput.vue_vue_type_script_setup_true_lang-BMpc-5ln.js → TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js} +47 -47
- package/dist/{TextAreaInput.vue_vue_type_script_setup_true_lang-BMpc-5ln.js.map → TextAreaInput.vue_vue_type_script_setup_true_lang-Cf0MJobG.js.map} +1 -1
- package/dist/{UiAvatar.vue_vue_type_script_setup_true_lang-Ci7VLRZx.js → UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js} +36 -36
- package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-WVY6JbUL.js.map +1 -0
- package/dist/{UiBadge.vue_vue_type_script_setup_true_lang-CV8WVEXL.js → UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js} +19 -19
- package/dist/{UiBadge.vue_vue_type_script_setup_true_lang-CV8WVEXL.js.map → UiBadge.vue_vue_type_script_setup_true_lang-DOtbLb9x.js.map} +1 -1
- package/dist/{UiButtonGroup.vue_vue_type_script_setup_true_lang-BKyznfxi.js → UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js} +28 -28
- package/dist/{UiButtonGroup.vue_vue_type_script_setup_true_lang-BKyznfxi.js.map → UiButtonGroup.vue_vue_type_script_setup_true_lang-CVwXB-cb.js.map} +1 -1
- package/dist/{UiCheckbox.vue_vue_type_script_setup_true_lang-B5fPB7PH.js → UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js} +37 -37
- package/dist/{UiCheckbox.vue_vue_type_script_setup_true_lang-B5fPB7PH.js.map → UiCheckbox.vue_vue_type_script_setup_true_lang-BxyM_F-V.js.map} +1 -1
- package/dist/{UiLoading.vue_vue_type_script_setup_true_lang-DldleD-3.js → UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js} +42 -42
- package/dist/{UiLoading.vue_vue_type_script_setup_true_lang-DldleD-3.js.map → UiLoading.vue_vue_type_script_setup_true_lang-rNvtzKbq.js.map} +1 -1
- package/dist/{UiMenu.vue_vue_type_script_setup_true_lang-aJddpshR.js → UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js} +74 -74
- package/dist/{UiMenu.vue_vue_type_script_setup_true_lang-aJddpshR.js.map → UiMenu.vue_vue_type_script_setup_true_lang-bQdfCzk6.js.map} +1 -1
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CFgLuifQ.js → UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js} +9 -10
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CFgLuifQ.js.map → UiModal.vue_vue_type_script_setup_true_lang-CpwFUDVU.js.map} +1 -1
- package/dist/{UiNavLink.vue_vue_type_script_setup_true_lang-C23h6Do0.js → UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js} +2 -2
- package/dist/{UiNavLink.vue_vue_type_script_setup_true_lang-C23h6Do0.js.map → UiNavLink.vue_vue_type_script_setup_true_lang-DnWMn40M.js.map} +1 -1
- package/dist/{UiProgressBar.vue_vue_type_script_setup_true_lang-BioTMORv.js → UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js} +24 -24
- package/dist/{UiProgressBar.vue_vue_type_script_setup_true_lang-BioTMORv.js.map → UiProgressBar.vue_vue_type_script_setup_true_lang-BCh4orZW.js.map} +1 -1
- package/dist/{UiTable.vue_vue_type_script_setup_true_lang-BuOCaPzi.js → UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js} +80 -83
- package/dist/UiTable.vue_vue_type_script_setup_true_lang-xGAiJ9rS.js.map +1 -0
- package/dist/{UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js → UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js} +15 -15
- package/dist/{UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js.map → UiTransition.vue_vue_type_script_setup_true_lang-C4jb9I-3.js.map} +1 -1
- package/dist/{YearCalendar.vue_vue_type_script_setup_true_lang-C01PTLg8.js → YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js} +15 -15
- package/dist/{YearCalendar.vue_vue_type_script_setup_true_lang-C01PTLg8.js.map → YearCalendar.vue_vue_type_script_setup_true_lang-CfKSpLLN.js.map} +1 -1
- package/dist/{calendar-DyIP7WGv.js → calendar-BlSSD4nO.js} +2 -2
- package/dist/calendar-BlSSD4nO.js.map +1 -0
- package/dist/calendars/CalendarDashboard.d.ts +1 -3
- package/dist/calendars/CalendarDashboard.js +32 -33
- package/dist/calendars/CalendarDashboard.js.map +1 -1
- package/dist/calendars/CalendarHeader.d.ts +1 -3
- package/dist/calendars/CalendarHeader.js +1 -1
- package/dist/calendars/DayCalendar.d.ts +1 -3
- package/dist/calendars/DayCalendar.js +1 -1
- package/dist/calendars/EventCard.d.ts +1 -3
- package/dist/calendars/EventsList.d.ts +1 -3
- package/dist/calendars/EventsList.js +1 -1
- package/dist/calendars/MonthCalendar.d.ts +1 -3
- package/dist/calendars/MonthCalendar.js +1 -1
- package/dist/calendars/WeekCalendar.d.ts +1 -3
- package/dist/calendars/WeekCalendar.js +118 -118
- package/dist/calendars/WeekCalendar.js.map +1 -1
- package/dist/calendars/YearCalendar.d.ts +1 -3
- package/dist/calendars/YearCalendar.js +1 -1
- package/dist/charts/BarChart.d.ts +1 -3
- package/dist/charts/BarChart.js +1 -1
- package/dist/charts/BaseChart.d.ts +1 -3
- package/dist/charts/BaseChart.js +54 -54
- package/dist/charts/BaseChart.js.map +1 -1
- package/dist/charts/FunnelChart.d.ts +1 -3
- package/dist/charts/FunnelChart.js +1 -1
- package/dist/charts/LineChart.d.ts +1 -3
- package/dist/charts/LineChart.js +1 -1
- package/dist/charts/PieChart.d.ts +1 -3
- package/dist/charts/PieChart.js +1 -1
- package/dist/charts/SparklineChart.d.ts +1 -3
- package/dist/charts/SparklineChart.js +1 -1
- package/dist/charts/StatCard.d.ts +1 -3
- package/dist/charts/StatCard.js +1 -1
- package/dist/charts/chartTheme.d.ts +3 -0
- package/dist/charts/index.d.ts +1 -0
- package/dist/charts/index.js +6 -6
- package/dist/components/Avatar.d.ts +1 -3
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Badge.d.ts +1 -3
- package/dist/components/Badge.js +1 -1
- package/dist/components/Banner.d.ts +1 -3
- package/dist/components/Banner.js +69 -69
- package/dist/components/Banner.js.map +1 -1
- package/dist/components/Breadcrumb.d.ts +1 -3
- package/dist/components/Breadcrumb.js +5 -5
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Button.d.ts +1 -3
- package/dist/components/Button.js +29 -29
- package/dist/components/Button.js.map +1 -1
- package/dist/components/ButtonGroup.d.ts +1 -3
- package/dist/components/ButtonGroup.js +1 -1
- package/dist/components/Checkbox.d.ts +1 -3
- package/dist/components/Checkbox.js +1 -1
- package/dist/components/CloudinaryImage.d.ts +1 -3
- package/dist/components/Loading.d.ts +1 -3
- package/dist/components/Loading.js +1 -1
- package/dist/components/LoadingDots.d.ts +1 -3
- package/dist/components/LottieAnimation.d.ts +1 -3
- package/dist/components/LottieAnimation.js +1 -1
- package/dist/components/Menu.d.ts +1 -3
- package/dist/components/Menu.js +1 -1
- package/dist/components/Modal.d.ts +1 -3
- package/dist/components/Modal.js +1 -1
- package/dist/components/NavLink.d.ts +1 -3
- package/dist/components/NavLink.js +1 -1
- package/dist/components/ProgressBar.d.ts +1 -3
- package/dist/components/ProgressBar.js +1 -1
- package/dist/components/RadialProgressBar.d.ts +1 -3
- package/dist/components/RadialProgressBar.js +1 -1
- package/dist/components/Table.d.ts +1 -3
- package/dist/components/Table.js +1 -1
- package/dist/components/Transition.d.ts +1 -3
- package/dist/components/Transition.js +1 -1
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/useCalendar.d.ts +3 -0
- package/dist/composables/useCalendar.js +1 -1
- package/dist/composables/useFormValidation.d.ts +3 -0
- package/dist/composables/useMap.d.ts +3 -0
- package/dist/composables/useModal.d.ts +3 -0
- package/dist/composables/useNotifications.d.ts +3 -0
- package/dist/composables/useNotifications.js +221 -58
- package/dist/composables/useNotifications.js.map +1 -1
- package/dist/composables/useTabs.d.ts +1 -0
- package/dist/composables/useTheme.d.ts +3 -0
- package/dist/{dialog-B2WA4G25.js → dialog-BJ2Ld8l3.js} +2 -2
- package/dist/{dialog-B2WA4G25.js.map → dialog-BJ2Ld8l3.js.map} +1 -1
- package/dist/empty-state/ComingSoon.d.ts +1 -3
- package/dist/empty-state/ComingSoon.js +1 -1
- package/dist/empty-state/EmptyState.d.ts +1 -3
- package/dist/empty-state/EmptyState.js +1 -1
- package/dist/empty-state/index.d.ts +1 -0
- package/dist/empty-state/index.js +2 -2
- package/dist/forms/DynamicForm.d.ts +1 -3
- package/dist/forms/DynamicForm.js +1 -1
- package/dist/forms/DynamicFormField.d.ts +1 -3
- package/dist/forms/DynamicFormField.js +1 -1
- package/dist/forms/FormFieldWrapper.d.ts +1 -3
- package/dist/forms/FormFieldWrapper.js +56 -56
- package/dist/forms/FormFieldWrapper.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +505 -511
- package/dist/index.js.map +1 -1
- package/dist/inputs/AddDeleteButtonGroup.d.ts +1 -3
- package/dist/inputs/CheckboxInput.d.ts +1 -3
- package/dist/inputs/CheckboxInput.js +1 -1
- package/dist/inputs/ComboboxInput.d.ts +1 -3
- package/dist/inputs/ComboboxInput.js +1 -1
- package/dist/inputs/DatepickerInput.d.ts +1 -3
- package/dist/inputs/EmailInput.d.ts +1 -3
- package/dist/inputs/EmailInput.js +1 -1
- package/dist/inputs/EmptyInput.d.ts +1 -3
- package/dist/inputs/EmptyInput.js +1 -1
- package/dist/inputs/FileDropzoneInput.d.ts +1 -3
- package/dist/inputs/HiddenInput.d.ts +1 -3
- package/dist/inputs/HiddenInput.js +1 -1
- package/dist/inputs/PhoneInput.d.ts +1 -3
- package/dist/inputs/PhoneInput.js +33 -23
- package/dist/inputs/PhoneInput.js.map +1 -1
- package/dist/inputs/RichTextInput.d.ts +1 -3
- package/dist/inputs/RichTextInput.js +693 -693
- package/dist/inputs/RichTextInput.js.map +1 -1
- package/dist/inputs/SelectInput.d.ts +1 -3
- package/dist/inputs/SelectInput.js +1 -1
- package/dist/inputs/SelectTextInput.d.ts +1 -3
- package/dist/inputs/SelectTextInput.js +1 -1
- package/dist/inputs/SwitchInput.d.ts +1 -3
- package/dist/inputs/SwitchInput.js +1 -1
- package/dist/inputs/SwitchInputGroup.d.ts +1 -3
- package/dist/inputs/SwitchInputGroup.js +1 -1
- package/dist/inputs/TagifyInput.d.ts +1 -3
- package/dist/inputs/TagifyInput.js +1 -1
- package/dist/inputs/TextAreaInput.d.ts +1 -3
- package/dist/inputs/TextAreaInput.js +1 -1
- package/dist/inputs/TextInput.d.ts +1 -3
- package/dist/inputs/TextInput.js +43 -43
- package/dist/inputs/TextInput.js.map +1 -1
- package/dist/layouts/DashboardLayout.d.ts +1 -3
- package/dist/layouts/DashboardLayout.js +1 -1
- package/dist/layouts/DefaultLayout.d.ts +1 -3
- package/dist/layouts/HeaderLayout.d.ts +1 -3
- package/dist/layouts/NavigationGroup.d.ts +1 -3
- package/dist/layouts/NavigationGroup.js +1 -1
- package/dist/layouts/NavigationItem.d.ts +1 -3
- package/dist/layouts/NavigationItem.js +1 -1
- package/dist/layouts/ProfileHeaderAvatar.d.ts +1 -3
- package/dist/layouts/ProfileHeaderAvatar.js +1 -1
- package/dist/layouts/ProjectLogo.d.ts +1 -3
- package/dist/layouts/ProjectLogo.js +1 -1
- package/dist/layouts/SidebarLayout.d.ts +1 -3
- package/dist/layouts/SidebarLayout.js +1 -1
- package/dist/{listbox-p2_4hUSD.js → listbox-YaWWZiiG.js} +2 -2
- package/dist/{listbox-p2_4hUSD.js.map → listbox-YaWWZiiG.js.map} +1 -1
- package/dist/loading/ContentSkeleton.d.ts +1 -3
- package/dist/loading/ContentSkeleton.js +32 -32
- package/dist/loading/ContentSkeleton.js.map +1 -1
- package/dist/loading/SmartLoadingIndicator.d.ts +1 -3
- package/dist/loading/SmartLoadingIndicator.js +92 -92
- package/dist/loading/SmartLoadingIndicator.js.map +1 -1
- package/dist/loading/index.d.ts +1 -0
- package/dist/maps/GoogleMap.d.ts +1 -3
- package/dist/maps/GoogleMap.js +2 -2
- package/dist/maps/GoogleMap.js.map +1 -1
- package/dist/maps/UiInfoWindow.d.ts +1 -3
- package/dist/maps/UiMap.d.ts +1 -3
- package/dist/maps/UiMap.js +18 -15
- package/dist/maps/UiMap.js.map +1 -1
- package/dist/maps/UiMapAll.d.ts +1 -3
- package/dist/maps/UiMapMarker.d.ts +1 -3
- package/dist/maps/index.d.ts +1 -0
- package/dist/modals/AlertModal.d.ts +1 -3
- package/dist/modals/AlertModal.js +1 -1
- package/dist/modals/BaseModal.d.ts +1 -3
- package/dist/modals/BaseModal.js +1 -1
- package/dist/modals/ImageCropperModal.d.ts +1 -3
- package/dist/modals/ImageCropperModal.js +182 -185
- package/dist/modals/ImageCropperModal.js.map +1 -1
- package/dist/notifications/NotificationContainer.d.ts +1 -3
- package/dist/notifications/NotificationContainer.js +30 -16
- package/dist/notifications/NotificationContainer.js.map +1 -1
- package/dist/notifications/NotificationToast.d.ts +1 -3
- package/dist/notifications/NotificationToast.js +1 -1
- package/dist/notifications/index.d.ts +1 -0
- package/dist/notifications/index.js +1 -1
- package/dist/src/components/CloudinaryImage.d.ts +7 -8
- package/dist/src/components/CloudinaryImage.d.ts.map +1 -1
- package/dist/src/components/LottieAnimation.d.ts +6 -37
- package/dist/src/components/LottieAnimation.d.ts.map +1 -1
- package/dist/src/components/ThemeDebugModal.d.ts +6 -16
- package/dist/src/components/ThemeDebugModal.d.ts.map +1 -1
- package/dist/src/components/UiAvatar.d.ts +26 -36
- package/dist/src/components/UiAvatar.d.ts.map +1 -1
- package/dist/src/components/UiBadge.d.ts +6 -33
- package/dist/src/components/UiBadge.d.ts.map +1 -1
- package/dist/src/components/UiBanner.d.ts +34 -107
- package/dist/src/components/UiBanner.d.ts.map +1 -1
- package/dist/src/components/UiBreadcrumb.d.ts +10 -11
- package/dist/src/components/UiBreadcrumb.d.ts.map +1 -1
- package/dist/src/components/UiButton.d.ts +13 -66
- package/dist/src/components/UiButton.d.ts.map +1 -1
- package/dist/src/components/UiButtonGroup.d.ts +7 -37
- package/dist/src/components/UiButtonGroup.d.ts.map +1 -1
- package/dist/src/components/UiCheckbox.d.ts +8 -33
- package/dist/src/components/UiCheckbox.d.ts.map +1 -1
- package/dist/src/components/UiLoading.d.ts +2 -28
- package/dist/src/components/UiLoading.d.ts.map +1 -1
- package/dist/src/components/UiLoadingDots.d.ts +1 -1
- package/dist/src/components/UiLoadingDots.d.ts.map +1 -1
- package/dist/src/components/UiMenu.d.ts +4 -32
- package/dist/src/components/UiMenu.d.ts.map +1 -1
- package/dist/src/components/UiModal.d.ts +3 -2
- package/dist/src/components/UiModal.d.ts.map +1 -1
- package/dist/src/components/UiNavLink.d.ts +6 -40
- package/dist/src/components/UiNavLink.d.ts.map +1 -1
- package/dist/src/components/UiProgressBar.d.ts +3 -32
- package/dist/src/components/UiProgressBar.d.ts.map +1 -1
- package/dist/src/components/UiRadialProgressBar.d.ts +3 -34
- package/dist/src/components/UiRadialProgressBar.d.ts.map +1 -1
- package/dist/src/components/UiTable.d.ts +25 -67
- package/dist/src/components/UiTable.d.ts.map +1 -1
- package/dist/src/components/UiTransition.d.ts +3 -26
- package/dist/src/components/UiTransition.d.ts.map +1 -1
- package/dist/src/components/calendars/CalendarDashboard.d.ts +5 -17
- package/dist/src/components/calendars/CalendarDashboard.d.ts.map +1 -1
- package/dist/src/components/calendars/CalendarHeader.d.ts +8 -7
- package/dist/src/components/calendars/CalendarHeader.d.ts.map +1 -1
- package/dist/src/components/calendars/DayCalendar.d.ts +11 -17
- package/dist/src/components/calendars/DayCalendar.d.ts.map +1 -1
- package/dist/src/components/calendars/EventCard.d.ts +1 -2
- package/dist/src/components/calendars/EventCard.d.ts.map +1 -1
- package/dist/src/components/calendars/EventsList.d.ts +6 -18
- package/dist/src/components/calendars/EventsList.d.ts.map +1 -1
- package/dist/src/components/calendars/MonthCalendar.d.ts +6 -30
- package/dist/src/components/calendars/MonthCalendar.d.ts.map +1 -1
- package/dist/src/components/calendars/WeekCalendar.d.ts +10 -16
- package/dist/src/components/calendars/WeekCalendar.d.ts.map +1 -1
- package/dist/src/components/calendars/YearCalendar.d.ts +5 -29
- package/dist/src/components/calendars/YearCalendar.d.ts.map +1 -1
- package/dist/src/components/charts/BarChart.d.ts +6 -39
- package/dist/src/components/charts/BarChart.d.ts.map +1 -1
- package/dist/src/components/charts/FunnelChart.d.ts +5 -34
- package/dist/src/components/charts/FunnelChart.d.ts.map +1 -1
- package/dist/src/components/charts/LineChart.d.ts +6 -37
- package/dist/src/components/charts/LineChart.d.ts.map +1 -1
- package/dist/src/components/charts/PieChart.d.ts +6 -37
- package/dist/src/components/charts/PieChart.d.ts.map +1 -1
- package/dist/src/components/charts/SparklineChart.d.ts +3 -32
- package/dist/src/components/charts/SparklineChart.d.ts.map +1 -1
- package/dist/src/components/charts/StatCard.d.ts +2 -24
- package/dist/src/components/charts/StatCard.d.ts.map +1 -1
- package/dist/src/components/charts/chartTheme.d.ts +0 -1
- package/dist/src/components/empty-state/ComingSoon.d.ts +2 -29
- package/dist/src/components/empty-state/ComingSoon.d.ts.map +1 -1
- package/dist/src/components/empty-state/EmptyState.d.ts +4 -26
- package/dist/src/components/empty-state/EmptyState.d.ts.map +1 -1
- package/dist/src/components/forms/DynamicForm.d.ts +21 -47
- package/dist/src/components/forms/DynamicForm.d.ts.map +1 -1
- package/dist/src/components/forms/DynamicFormField.d.ts +8 -18
- package/dist/src/components/forms/DynamicFormField.d.ts.map +1 -1
- package/dist/src/components/forms/FormFieldWrapper.d.ts +14 -58
- package/dist/src/components/forms/FormFieldWrapper.d.ts.map +1 -1
- package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts +3 -4
- package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts.map +1 -1
- package/dist/src/components/inputs/CheckboxInput.d.ts +10 -37
- package/dist/src/components/inputs/CheckboxInput.d.ts.map +1 -1
- package/dist/src/components/inputs/ComboboxInput.d.ts +13 -48
- package/dist/src/components/inputs/ComboboxInput.d.ts.map +1 -1
- package/dist/src/components/inputs/DatepickerInput.d.ts +1045 -42
- package/dist/src/components/inputs/DatepickerInput.d.ts.map +1 -1
- package/dist/src/components/inputs/EmailInput.d.ts +10 -54
- package/dist/src/components/inputs/EmailInput.d.ts.map +1 -1
- package/dist/src/components/inputs/EmptyInput.d.ts +2 -26
- package/dist/src/components/inputs/EmptyInput.d.ts.map +1 -1
- package/dist/src/components/inputs/FileDropzoneInput.d.ts +8 -7
- package/dist/src/components/inputs/FileDropzoneInput.d.ts.map +1 -1
- package/dist/src/components/inputs/HiddenInput.d.ts +2 -23
- package/dist/src/components/inputs/HiddenInput.d.ts.map +1 -1
- package/dist/src/components/inputs/InputsShowcase.d.ts +1 -1
- package/dist/src/components/inputs/InputsShowcase.d.ts.map +1 -1
- package/dist/src/components/inputs/PhoneInput.d.ts +79 -16
- package/dist/src/components/inputs/PhoneInput.d.ts.map +1 -1
- package/dist/src/components/inputs/RichTextInput.d.ts +22 -80
- package/dist/src/components/inputs/RichTextInput.d.ts.map +1 -1
- package/dist/src/components/inputs/SelectInput.d.ts +49 -42
- package/dist/src/components/inputs/SelectInput.d.ts.map +1 -1
- package/dist/src/components/inputs/SelectTextInput.d.ts +52 -12
- package/dist/src/components/inputs/SelectTextInput.d.ts.map +1 -1
- package/dist/src/components/inputs/SwitchInput.d.ts +115 -42
- package/dist/src/components/inputs/SwitchInput.d.ts.map +1 -1
- package/dist/src/components/inputs/SwitchInputGroup.d.ts +2 -3
- package/dist/src/components/inputs/SwitchInputGroup.d.ts.map +1 -1
- package/dist/src/components/inputs/TagifyInput.d.ts +30 -20
- package/dist/src/components/inputs/TagifyInput.d.ts.map +1 -1
- package/dist/src/components/inputs/TextAreaInput.d.ts +9 -35
- package/dist/src/components/inputs/TextAreaInput.d.ts.map +1 -1
- package/dist/src/components/inputs/TextInput.d.ts +13 -73
- package/dist/src/components/inputs/TextInput.d.ts.map +1 -1
- package/dist/src/components/layouts/CardLayout.d.ts +20 -66
- package/dist/src/components/layouts/CardLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/DashboardLayout.d.ts +8 -5
- package/dist/src/components/layouts/DashboardLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/DefaultLayout.d.ts +1 -1
- package/dist/src/components/layouts/DefaultLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/HeaderLayout.d.ts +4 -4
- package/dist/src/components/layouts/HeaderLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/InfoCard.d.ts +2 -25
- package/dist/src/components/layouts/InfoCard.d.ts.map +1 -1
- package/dist/src/components/layouts/NavigationGroup.d.ts +5 -16
- package/dist/src/components/layouts/NavigationGroup.d.ts.map +1 -1
- package/dist/src/components/layouts/NavigationItem.d.ts +7 -24
- package/dist/src/components/layouts/NavigationItem.d.ts.map +1 -1
- package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts +10 -40
- package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts.map +1 -1
- package/dist/src/components/layouts/ProjectLogo.d.ts +2 -33
- package/dist/src/components/layouts/ProjectLogo.d.ts.map +1 -1
- package/dist/src/components/layouts/PropsTable.d.ts +2 -23
- package/dist/src/components/layouts/PropsTable.d.ts.map +1 -1
- package/dist/src/components/layouts/ShowcaseCard.d.ts +2 -29
- package/dist/src/components/layouts/ShowcaseCard.d.ts.map +1 -1
- package/dist/src/components/layouts/ShowcaseLayout.d.ts +5 -28
- package/dist/src/components/layouts/ShowcaseLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/SidebarLayout.d.ts +7 -4
- package/dist/src/components/layouts/SidebarLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/StateDisplay.d.ts +2 -23
- package/dist/src/components/layouts/StateDisplay.d.ts.map +1 -1
- package/dist/src/components/loading/ContentSkeleton.d.ts +2 -31
- package/dist/src/components/loading/ContentSkeleton.d.ts.map +1 -1
- package/dist/src/components/loading/SmartLoadingIndicator.d.ts +6 -47
- package/dist/src/components/loading/SmartLoadingIndicator.d.ts.map +1 -1
- package/dist/src/components/maps/GoogleMap.d.ts +7 -8
- package/dist/src/components/maps/GoogleMap.d.ts.map +1 -1
- package/dist/src/components/maps/UiInfoWindow.d.ts +229 -14
- package/dist/src/components/maps/UiInfoWindow.d.ts.map +1 -1
- package/dist/src/components/maps/UiMap.d.ts +5091 -101
- package/dist/src/components/maps/UiMap.d.ts.map +1 -1
- package/dist/src/components/maps/UiMapAll.d.ts +1130 -20
- package/dist/src/components/maps/UiMapAll.d.ts.map +1 -1
- package/dist/src/components/maps/UiMapMarker.d.ts +16 -17
- package/dist/src/components/maps/UiMapMarker.d.ts.map +1 -1
- package/dist/src/components/modals/AlertModal.d.ts +9 -10
- package/dist/src/components/modals/AlertModal.d.ts.map +1 -1
- package/dist/src/components/modals/BaseModal.d.ts +6 -7
- package/dist/src/components/modals/BaseModal.d.ts.map +1 -1
- package/dist/src/components/modals/ImageCropperModal.d.ts +379 -75
- package/dist/src/components/modals/ImageCropperModal.d.ts.map +1 -1
- package/dist/src/components/notifications/NotificationContainer.d.ts.map +1 -1
- package/dist/src/components/notifications/NotificationToast.d.ts +9 -18
- package/dist/src/components/notifications/NotificationToast.d.ts.map +1 -1
- package/dist/src/components/stepper/StepperPanels.d.ts +4 -14
- package/dist/src/components/stepper/StepperPanels.d.ts.map +1 -1
- package/dist/src/components/tabs/InlineTabs.d.ts +4 -28
- package/dist/src/components/tabs/InlineTabs.d.ts.map +1 -1
- package/dist/src/components/tabs/TabGroup.d.ts +6 -32
- package/dist/src/components/tabs/TabGroup.d.ts.map +1 -1
- package/dist/src/components/tabs/TabGroupUnderline.d.ts +6 -32
- package/dist/src/components/tabs/TabGroupUnderline.d.ts.map +1 -1
- package/dist/src/components/tabs/TabsInPills.d.ts +4 -26
- package/dist/src/components/tabs/TabsInPills.d.ts.map +1 -1
- package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts +2 -37
- package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts.map +1 -1
- package/dist/src/components/wrappers/CardWrapper.d.ts +1 -1
- package/dist/src/components/wrappers/CardWrapper.d.ts.map +1 -1
- package/dist/src/components/wrappers/DisclosureWrapper.d.ts +2 -23
- package/dist/src/components/wrappers/DisclosureWrapper.d.ts.map +1 -1
- package/dist/src/components/wrappers/FormErrorWrapper.d.ts +2 -25
- package/dist/src/components/wrappers/FormErrorWrapper.d.ts.map +1 -1
- package/dist/src/composables/useCalendar.d.ts +4 -5
- package/dist/src/composables/useFormValidation.d.ts +0 -1
- package/dist/src/composables/useMap.d.ts +0 -1
- package/dist/src/composables/useNotifications.d.ts +1308 -30
- package/dist/src/composables/useNotifications.d.ts.map +1 -1
- package/dist/src/composables/useSimpleTabs.d.ts +0 -1
- package/dist/src/composables/useStringTransform.d.ts +0 -1
- package/dist/src/composables/useTabs.d.ts +0 -1
- package/dist/src/config/css-variables.d.ts +0 -1
- package/dist/src/config/design-tokens.d.ts +1 -1
- package/dist/src/config/design-tokens.d.ts.map +1 -1
- package/dist/src/dev.d.ts +0 -1
- package/dist/src/plugin/configure.d.ts +0 -1
- package/dist/src/types/calendars.d.ts +12 -11
- package/dist/src/types/calendars.d.ts.map +1 -1
- package/dist/src/types/core.d.ts +3 -4
- package/dist/src/types/core.d.ts.map +1 -1
- package/dist/src/types/form.d.ts +15 -13
- package/dist/src/types/form.d.ts.map +1 -1
- package/dist/src/types/forms.d.ts +2 -1
- package/dist/src/types/forms.d.ts.map +1 -1
- package/dist/src/types/inputs.d.ts +14 -9
- package/dist/src/types/inputs.d.ts.map +1 -1
- package/dist/src/types/layouts.d.ts +0 -1
- package/dist/src/types/navigation.d.ts +2 -1
- package/dist/src/types/navigation.d.ts.map +1 -1
- package/dist/src/types/tables.d.ts +8 -6
- package/dist/src/types/tables.d.ts.map +1 -1
- package/dist/src/types/ui.d.ts +1 -2
- package/dist/src/types/ui.d.ts.map +1 -1
- package/dist/src/utils/calendar.d.ts +1 -1
- package/dist/src/utils/calendar.d.ts.map +1 -1
- package/dist/src/utils/component-registry.d.ts +0 -1
- package/dist/src/utils/mapThemes.d.ts +0 -1
- package/dist/src/utils/phone.d.ts +0 -1
- package/dist/src/views/ButtonsShowcase.d.ts +3 -0
- package/dist/src/views/ButtonsShowcase.d.ts.map +1 -0
- package/dist/src/views/CalendarsShowcase.d.ts +3 -0
- package/dist/src/views/CalendarsShowcase.d.ts.map +1 -0
- package/dist/src/views/CardsShowcase.d.ts +3 -0
- package/dist/src/views/CardsShowcase.d.ts.map +1 -0
- package/dist/src/views/ChartsShowcase.d.ts +3 -0
- package/dist/src/views/ChartsShowcase.d.ts.map +1 -0
- package/dist/src/views/EmptyStatesShowcase.d.ts +3 -0
- package/dist/src/views/EmptyStatesShowcase.d.ts.map +1 -0
- package/dist/src/views/InputsShowcase.d.ts +3 -0
- package/dist/src/views/InputsShowcase.d.ts.map +1 -0
- package/dist/src/views/KitchenSink.d.ts +3 -0
- package/dist/src/views/KitchenSink.d.ts.map +1 -0
- package/dist/src/views/LayoutsShowcase.d.ts +3 -0
- package/dist/src/views/LayoutsShowcase.d.ts.map +1 -0
- package/dist/src/views/LoadingShowcase.d.ts +3 -0
- package/dist/src/views/LoadingShowcase.d.ts.map +1 -0
- package/dist/src/views/MapsShowcase.d.ts +3 -0
- package/dist/src/views/MapsShowcase.d.ts.map +1 -0
- package/dist/src/views/ModalsShowcase.d.ts +3 -0
- package/dist/src/views/ModalsShowcase.d.ts.map +1 -0
- package/dist/src/views/NotificationsShowcase.d.ts +3 -0
- package/dist/src/views/NotificationsShowcase.d.ts.map +1 -0
- package/dist/src/views/StepperShowcase.d.ts +3 -0
- package/dist/src/views/StepperShowcase.d.ts.map +1 -0
- package/dist/src/views/TabsShowcase.d.ts +3 -0
- package/dist/src/views/TabsShowcase.d.ts.map +1 -0
- package/dist/src/views/ValidationDemo.d.ts +3 -0
- package/dist/src/views/ValidationDemo.d.ts.map +1 -0
- package/dist/src/views/WrappersShowcase.d.ts +3 -0
- package/dist/src/views/WrappersShowcase.d.ts.map +1 -0
- package/dist/src/views/components/AvatarPage.d.ts +3 -0
- package/dist/src/views/components/AvatarPage.d.ts.map +1 -0
- package/dist/src/views/components/BadgePage.d.ts +3 -0
- package/dist/src/views/components/BadgePage.d.ts.map +1 -0
- package/dist/src/views/components/BannerPage.d.ts +3 -0
- package/dist/src/views/components/BannerPage.d.ts.map +1 -0
- package/dist/src/views/components/BreadcrumbPage.d.ts +3 -0
- package/dist/src/views/components/BreadcrumbPage.d.ts.map +1 -0
- package/dist/src/views/components/ButtonPage.d.ts +3 -0
- package/dist/src/views/components/ButtonPage.d.ts.map +1 -0
- package/dist/src/views/components/CloudinaryImagePage.d.ts +3 -0
- package/dist/src/views/components/CloudinaryImagePage.d.ts.map +1 -0
- package/dist/src/views/components/LoadingPage.d.ts +3 -0
- package/dist/src/views/components/LoadingPage.d.ts.map +1 -0
- package/dist/src/views/components/MenuPage.d.ts +3 -0
- package/dist/src/views/components/MenuPage.d.ts.map +1 -0
- package/dist/src/views/components/ModalPage.d.ts +3 -0
- package/dist/src/views/components/ModalPage.d.ts.map +1 -0
- package/dist/src/views/components/ProgressPage.d.ts +3 -0
- package/dist/src/views/components/ProgressPage.d.ts.map +1 -0
- package/dist/src/views/components/RichTextInputPage.d.ts +3 -0
- package/dist/src/views/components/RichTextInputPage.d.ts.map +1 -0
- package/dist/src/views/components/TablePage.d.ts +3 -0
- package/dist/src/views/components/TablePage.d.ts.map +1 -0
- package/dist/src/views/components/TextInputPage.d.ts +3 -0
- package/dist/src/views/components/TextInputPage.d.ts.map +1 -0
- package/dist/src/views/components/TransitionPage.d.ts +3 -0
- package/dist/src/views/components/TransitionPage.d.ts.map +1 -0
- package/dist/src/views/examples/CheckoutFormExample.d.ts +3 -0
- package/dist/src/views/examples/CheckoutFormExample.d.ts.map +1 -0
- package/dist/src/views/examples/ContactFormExample.d.ts +3 -0
- package/dist/src/views/examples/ContactFormExample.d.ts.map +1 -0
- package/dist/src/views/examples/RegistrationFormExample.d.ts +3 -0
- package/dist/src/views/examples/RegistrationFormExample.d.ts.map +1 -0
- package/dist/src/views/examples/SettingsFormExample.d.ts +3 -0
- package/dist/src/views/examples/SettingsFormExample.d.ts.map +1 -0
- package/dist/src/views/forms/ValidationPage.d.ts +3 -0
- package/dist/src/views/forms/ValidationPage.d.ts.map +1 -0
- package/dist/src/views/inputs/CheckboxPage.d.ts +3 -0
- package/dist/src/views/inputs/CheckboxPage.d.ts.map +1 -0
- package/dist/src/views/inputs/ComboboxPage.d.ts +3 -0
- package/dist/src/views/inputs/ComboboxPage.d.ts.map +1 -0
- package/dist/src/views/inputs/DatepickerPage.d.ts +3 -0
- package/dist/src/views/inputs/DatepickerPage.d.ts.map +1 -0
- package/dist/src/views/inputs/EmailPage.d.ts +3 -0
- package/dist/src/views/inputs/EmailPage.d.ts.map +1 -0
- package/dist/src/views/inputs/FileDropzonePage.d.ts +3 -0
- package/dist/src/views/inputs/FileDropzonePage.d.ts.map +1 -0
- package/dist/src/views/inputs/MiscInputsPage.d.ts +3 -0
- package/dist/src/views/inputs/MiscInputsPage.d.ts.map +1 -0
- package/dist/src/views/inputs/PhonePage.d.ts +3 -0
- package/dist/src/views/inputs/PhonePage.d.ts.map +1 -0
- package/dist/src/views/inputs/SelectPage.d.ts +3 -0
- package/dist/src/views/inputs/SelectPage.d.ts.map +1 -0
- package/dist/src/views/inputs/SelectTextPage.d.ts +3 -0
- package/dist/src/views/inputs/SelectTextPage.d.ts.map +1 -0
- package/dist/src/views/inputs/SwitchGroupPage.d.ts +3 -0
- package/dist/src/views/inputs/SwitchGroupPage.d.ts.map +1 -0
- package/dist/src/views/inputs/SwitchPage.d.ts +3 -0
- package/dist/src/views/inputs/SwitchPage.d.ts.map +1 -0
- package/dist/src/views/inputs/TextAreaPage.d.ts +3 -0
- package/dist/src/views/inputs/TextAreaPage.d.ts.map +1 -0
- package/dist/src/views/layouts/CardLayoutPage.d.ts +3 -0
- package/dist/src/views/layouts/CardLayoutPage.d.ts.map +1 -0
- package/dist/src/views/layouts/DashboardLayoutPage.d.ts +3 -0
- package/dist/src/views/layouts/DashboardLayoutPage.d.ts.map +1 -0
- package/dist/src/views/layouts/HeaderLayoutPage.d.ts +3 -0
- package/dist/src/views/layouts/HeaderLayoutPage.d.ts.map +1 -0
- package/dist/src/views/layouts/SidebarLayoutPage.d.ts +3 -0
- package/dist/src/views/layouts/SidebarLayoutPage.d.ts.map +1 -0
- package/dist/stepper/StepperPanels.d.ts +1 -3
- package/dist/stepper/StepperPanels.js +1 -1
- package/dist/stepper/index.d.ts +1 -0
- package/dist/stepper/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/tabs/InlineTabs.d.ts +1 -3
- package/dist/tabs/InlineTabs.js +1 -1
- package/dist/tabs/TabGroup.d.ts +1 -3
- package/dist/tabs/TabGroup.js +1 -1
- package/dist/tabs/TabGroupUnderline.d.ts +1 -3
- package/dist/tabs/TabGroupUnderline.js +1 -1
- package/dist/tabs/TabsInPills.d.ts +1 -3
- package/dist/tabs/TabsInPills.js +1 -1
- package/dist/tabs/index.d.ts +1 -0
- package/dist/tabs/index.js +4 -4
- package/dist/{tabs-Da32Mbhf.js → tabs-J5phClGv.js} +2 -2
- package/dist/{tabs-Da32Mbhf.js.map → tabs-J5phClGv.js.map} +1 -1
- package/dist/ui.css +1 -0
- package/dist/{use-outside-click-DNDV36Sc.js → use-outside-click-14T0Zn98.js} +3 -3
- package/dist/{use-outside-click-DNDV36Sc.js.map → use-outside-click-14T0Zn98.js.map} +1 -1
- package/dist/{use-tree-walker-BHCORE7u.js → use-tree-walker-Bo9gIb_K.js} +2 -2
- package/dist/{use-tree-walker-BHCORE7u.js.map → use-tree-walker-Bo9gIb_K.js.map} +1 -1
- package/dist/vue-router-B3K2xmg_.js +120 -0
- package/dist/vue-router-B3K2xmg_.js.map +1 -0
- package/dist/vue3-lottie.es-DT4qZE-F.js +7981 -0
- package/dist/{vue3-lottie.es-C_MDkNwR.js.map → vue3-lottie.es-DT4qZE-F.js.map} +1 -1
- package/dist/wrappers/BackgroundGradientWrapper.d.ts +1 -3
- package/dist/wrappers/BackgroundGradientWrapper.js +1 -1
- package/dist/wrappers/CardWrapper.d.ts +1 -3
- package/dist/wrappers/DisclosureWrapper.d.ts +1 -3
- package/dist/wrappers/DisclosureWrapper.js +1 -1
- package/dist/wrappers/FormErrorWrapper.d.ts +1 -3
- package/dist/wrappers/index.d.ts +1 -0
- package/dist/wrappers/index.js +2 -2
- package/package.json +24 -16
- package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-DRwe4rw8.js.map +0 -1
- package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-B8wJVkPP.js +0 -187
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-ClGP5YU0.js +0 -1315
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-ClGP5YU0.js.map +0 -1
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-DRDP86Yc.js +0 -253
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-DRDP86Yc.js.map +0 -1
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-Ct8b80dM.js.map +0 -1
- package/dist/EmailInput.vue_vue_type_script_setup_true_lang-Dhfgs2Jn.js +0 -122
- package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-CwOOShcM.js +0 -36
- package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-2tAB9Hbx.js +0 -30
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-Cm5RsC7C.js +0 -162
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-Cm5RsC7C.js.map +0 -1
- package/dist/ProfileHeaderAvatar.vue_vue_type_script_setup_true_lang-Cri9BiBy.js +0 -130
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang--yUL7bcx.js.map +0 -1
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-CAK6ZIiz.js.map +0 -1
- package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-Ci7VLRZx.js.map +0 -1
- package/dist/UiTable.vue_vue_type_script_setup_true_lang-BuOCaPzi.js.map +0 -1
- package/dist/calendar-DyIP7WGv.js.map +0 -1
- package/dist/src/components/charts/BaseChart.d.ts +0 -81
- package/dist/src/components/charts/BaseChart.d.ts.map +0 -1
- package/dist/vue-router-BPbyZ7xA.js +0 -145
- package/dist/vue-router-BPbyZ7xA.js.map +0 -1
- package/dist/vue3-lottie.es-C_MDkNwR.js +0 -7976
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","sources":["../../src/components/UiBreadcrumb.vue"],"sourcesContent":["<template>\n <nav class=\"sl-hidden sm:sl-flex\" aria-label=\"Breadcrumb\">\n <ol role=\"list\" class=\"sl-flex sl-items-center sl-gap-1\">\n <li \n v-for=\"(breadcrumb, index) in displayBreadcrumbs\" \n :key=\"breadcrumb.fullPath\"\n class=\"sl-flex sl-items-center\"\n >\n <!-- Separator -->\n <ChevronRightIcon \n v-if=\"index !== 0\" \n class=\"sl-h-4 sl-w-4 sl-flex-shrink-0 sl-mx-1\" \n :style=\"{ color: separatorColor }\"\n aria-hidden=\"true\" \n />\n \n <!-- Breadcrumb Item -->\n <component\n :is=\"isLastItem(index) || !isNavigable(breadcrumb) ? 'span' : 'a'\"\n :href=\"!isLastItem(index) && isNavigable(breadcrumb) ? breadcrumb.fullPath : undefined\"\n :title=\"breadcrumb.original\"\n :aria-current=\"isLastItem(index) ? 'page' : undefined\"\n class=\"sl-text-sm sl-font-medium sl-transition-colors sl-duration-150 sl-px-2 sl-py-1 sl-rounded-md\"\n :class=\"getBreadcrumbClasses(index, breadcrumb)\"\n :style=\"getBreadcrumbStyle(index)\"\n @click=\"(e: MouseEvent) => handleClick(breadcrumb, index, e)\"\n >\n <!-- UID indicator badge -->\n <span \n v-if=\"breadcrumb.isUid && showUidIndicator\" \n class=\"sl-inline-flex sl-items-center sl-mr-1.5\"\n >\n <span \n class=\"sl-w-1.5 sl-h-1.5 sl-rounded-full sl-bg-amber-400 dark:sl-bg-amber-500\"\n title=\"This is an ID\"\n />\n </span>\n \n <!-- Display text -->\n <span \n class=\"sl-truncate\"\n :class=\"{ 'sl-font-mono sl-text-xs': breadcrumb.isUid && preserveUidFont }\"\n >\n {{ breadcrumb.display }}\n </span>\n \n <!-- Loading indicator for async lookups -->\n <span \n v-if=\"breadcrumb.loading\" \n class=\"sl-ml-1.5 sl-inline-block sl-animate-pulse\"\n >\n <span class=\"sl-w-2 sl-h-2 sl-rounded-full sl-bg-current sl-opacity-50\" />\n </span>\n </component>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed, type PropType } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { ChevronRightIcon } from '@heroicons/vue/20/solid';\nimport { useStringTransform, type StringTransformOptions } from '../composables/useStringTransform';\nimport { useTheme } from '../composables/useTheme';\n\ninterface BreadcrumbItem {\n /** Display text (transformed) */\n display: string;\n /** Original segment text */\n original: string;\n /** Full path for navigation */\n fullPath: string;\n /** Whether this was detected as a UID */\n isUid: boolean;\n /** Whether truncation was applied */\n truncated: boolean;\n /** Whether async lookup is in progress */\n loading: boolean;\n}\n\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\nconst props = defineProps({\n /**\n * Maximum length for breadcrumb text before truncation\n * @default 20\n */\n maxLength: {\n type: Number,\n default: 20,\n },\n /**\n * Case transformation to apply\n * @default 'title'\n */\n caseTransform: {\n type: String as PropType<StringTransformOptions['caseTransform']>,\n default: 'title',\n },\n /**\n * Whether to detect and specially format UIDs\n * @default true\n */\n detectUids: {\n type: Boolean,\n default: true,\n },\n /**\n * How to format detected UIDs\n * @default 'ellipsis'\n */\n uidFormat: {\n type: String as PropType<StringTransformOptions['uidFormat']>,\n default: 'ellipsis',\n },\n /**\n * Number of characters to show for UIDs\n * @default 4\n */\n uidChars: {\n type: Number,\n default: 4,\n },\n /**\n * Show visual indicator for UID segments\n * @default false\n */\n showUidIndicator: {\n type: Boolean,\n default: false,\n },\n /**\n * Use monospace font for UID segments\n * @default true\n */\n preserveUidFont: {\n type: Boolean,\n default: true,\n },\n /**\n * Custom async lookup function to resolve IDs to display names\n * Called for segments detected as UIDs\n */\n lookupFn: {\n type: Function as PropType<(id: string) => Promise<string | null> | string | null>,\n default: undefined,\n },\n /**\n * Custom segment transform function\n * Overrides default transformation for each segment\n */\n segmentTransform: {\n type: Function as PropType<(segment: string, index: number, fullPath: string) => string | null>,\n default: undefined,\n },\n /**\n * Segments to exclude from breadcrumbs (by name)\n */\n excludeSegments: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n /**\n * Mapping of segment names to display names\n */\n segmentLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n /**\n * Home segment configuration\n */\n homeSegment: {\n type: Object as PropType<{ label?: string; path?: string; show?: boolean }>,\n default: () => ({ show: false }),\n },\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', path: string, event: MouseEvent): void;\n (e: 'click', breadcrumb: BreadcrumbItem, event: MouseEvent): void;\n}>();\n\nconst route = useRoute();\nconst router = useRouter();\nconst { isDark } = useTheme();\n\nconst { transform, transformAsync, isUidLike } = useStringTransform({\n maxLength: props.maxLength,\n caseTransform: props.caseTransform,\n detectUids: props.detectUids,\n uidFormat: props.uidFormat,\n uidChars: props.uidChars,\n});\n\nconst breadcrumbs = ref<BreadcrumbItem[]>([]);\nconst currentPath = ref<string>('');\n\n// Color configurations\nconst separatorColor = computed(() => \n isDark.value ? 'rgb(100, 116, 139)' : 'rgb(156, 163, 175)'\n);\n\nconst displayBreadcrumbs = computed(() => breadcrumbs.value);\n\nconst isLastItem = (index: number) => index === breadcrumbs.value.length - 1;\n\nconst isNavigable = (breadcrumb: BreadcrumbItem) => {\n const resolved = router.resolve(breadcrumb.fullPath);\n const isErrorPage = resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n return resolved && resolved.matched.length > 0 && !isErrorPage;\n};\n\nconst getBreadcrumbClasses = (index: number, breadcrumb: BreadcrumbItem) => {\n const isLast = isLastItem(index);\n const navigable = isNavigable(breadcrumb);\n \n return [\n // Hover state for clickable items\n !isLast && navigable && 'hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700/50',\n // Cursor\n isLast ? 'sl-cursor-default' : navigable ? 'sl-cursor-pointer' : 'sl-cursor-not-allowed',\n // Focus ring\n !isLast && 'focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-1 focus:sl-ring-blue-500 dark:focus:sl-ring-offset-slate-900',\n ].filter(Boolean);\n};\n\nconst getBreadcrumbStyle = (index: number) => {\n const isLast = isLastItem(index);\n \n if (isLast) {\n // Current page - more prominent\n return {\n color: isDark.value ? 'rgb(241, 245, 249)' : 'rgb(15, 23, 42)', // slate-100 / slate-900\n fontWeight: '600',\n };\n }\n \n // Parent segments - muted\n return {\n color: isDark.value ? 'rgb(148, 163, 184)' : 'rgb(100, 116, 139)', // slate-400 / slate-500\n };\n};\n\nconst processSegments = async () => {\n const path = route.path;\n currentPath.value = path;\n const pathSegments = path.split('/').filter(Boolean);\n const tempBreadcrumbs: BreadcrumbItem[] = [];\n\n // Add home segment if configured\n if (props.homeSegment.show) {\n tempBreadcrumbs.push({\n display: props.homeSegment.label || 'Home',\n original: 'home',\n fullPath: props.homeSegment.path || '/',\n isUid: false,\n truncated: false,\n loading: false,\n });\n }\n\n // Process each segment\n for (const [index, segment] of pathSegments.entries()) {\n // Skip excluded segments\n if (props.excludeSegments.includes(segment)) continue;\n\n const fullPath = '/' + pathSegments.slice(0, index + 1).join('/');\n \n // Check for custom label mapping first\n if (props.segmentLabels[segment]) {\n tempBreadcrumbs.push({\n display: props.segmentLabels[segment],\n original: segment,\n fullPath,\n isUid: false,\n truncated: false,\n loading: false,\n });\n continue;\n }\n\n // Check for custom segment transform\n if (props.segmentTransform) {\n const customResult = props.segmentTransform(segment, index, fullPath);\n if (customResult !== null) {\n tempBreadcrumbs.push({\n display: customResult,\n original: segment,\n fullPath,\n isUid: isUidLike(segment),\n truncated: customResult.length < segment.length,\n loading: false,\n });\n continue;\n }\n }\n\n // Use string transform composable\n const result = transform(segment);\n \n tempBreadcrumbs.push({\n display: result.display,\n original: segment,\n fullPath,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n });\n }\n\n breadcrumbs.value = tempBreadcrumbs;\n\n // Handle async lookups for UIDs\n if (props.lookupFn) {\n for (let i = 0; i < breadcrumbs.value.length; i++) {\n const bc = breadcrumbs.value[i];\n if (bc.isUid) {\n // Set loading state\n breadcrumbs.value[i] = { ...bc, loading: true };\n \n try {\n const result = await transformAsync(bc.original, {\n lookupFn: props.lookupFn,\n });\n \n breadcrumbs.value[i] = {\n ...breadcrumbs.value[i],\n display: result.display,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n };\n } catch {\n breadcrumbs.value[i] = { ...breadcrumbs.value[i], loading: false };\n }\n }\n }\n }\n};\n\nconst handleClick = (breadcrumb: BreadcrumbItem, index: number, event: MouseEvent) => {\n emit('click', breadcrumb, event);\n \n if (event.defaultPrevented) return;\n if (isLastItem(index)) return;\n if (!isNavigable(breadcrumb)) {\n event.preventDefault();\n return;\n }\n \n emit('navigate', breadcrumb.fullPath, event);\n \n if (!event.defaultPrevented) {\n event.preventDefault();\n router.push(breadcrumb.fullPath);\n }\n};\n\nwatchEffect(() => {\n processSegments();\n});\n</script>\n\n<style scoped>\n/* Smooth transitions for breadcrumb items */\na, span {\n transition: color 0.15s ease, background-color 0.15s ease;\n}\n</style>\n"],"names":["props","__props","emit","__emit","route","useRoute","router","useRouter","isDark","useTheme","transform","transformAsync","isUidLike","useStringTransform","breadcrumbs","ref","currentPath","separatorColor","computed","displayBreadcrumbs","isLastItem","index","isNavigable","breadcrumb","resolved","isErrorPage","getBreadcrumbClasses","isLast","navigable","getBreadcrumbStyle","processSegments","path","pathSegments","tempBreadcrumbs","segment","fullPath","customResult","result","i","bc","handleClick","event","watchEffect","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_createBlock","_unref","ChevronRightIcon","_resolveDynamicComponent","_normalizeStyle","e","_hoisted_3","_cache","_toDisplayString","_hoisted_4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFA,UAAMA,IAAQC,GAgGRC,IAAOC,GAKPC,IAAQC,EAAA,GACRC,IAASC,EAAA,GACT,EAAE,QAAAC,EAAA,IAAWC,EAAA,GAEb,EAAE,WAAAC,GAAW,gBAAAC,GAAgB,WAAAC,EAAA,IAAcC,EAAmB;AAAA,MAClE,WAAWb,EAAM;AAAA,MACjB,eAAeA,EAAM;AAAA,MACrB,YAAYA,EAAM;AAAA,MAClB,WAAWA,EAAM;AAAA,MACjB,UAAUA,EAAM;AAAA,IAAA,CACjB,GAEKc,IAAcC,EAAsB,EAAE,GACtCC,IAAcD,EAAY,EAAE,GAG5BE,IAAiBC;AAAA,MAAS,MAC9BV,EAAO,QAAQ,uBAAuB;AAAA,IAAA,GAGlCW,IAAqBD,EAAS,MAAMJ,EAAY,KAAK,GAErDM,IAAa,CAACC,MAAkBA,MAAUP,EAAY,MAAM,SAAS,GAErEQ,IAAc,CAACC,MAA+B;AAClD,YAAMC,IAAWlB,EAAO,QAAQiB,EAAW,QAAQ,GAC7CE,IAAcD,EAAS,QAAQ,KAAK,CAACpB,MAAgCA,EAAM,MAAM,WAAW;AAClG,aAAOoB,KAAYA,EAAS,QAAQ,SAAS,KAAK,CAACC;AAAA,IACrD,GAEMC,IAAuB,CAACL,GAAeE,MAA+B;AAC1E,YAAMI,IAASP,EAAWC,CAAK,GACzBO,IAAYN,EAAYC,CAAU;AAExC,aAAO;AAAA;AAAA,QAEL,CAACI,KAAUC,KAAa;AAAA;AAAA,QAExBD,IAAS,sBAAsBC,IAAY,sBAAsB;AAAA;AAAA,QAEjE,CAACD,KAAU;AAAA,MAAA,EACX,OAAO,OAAO;AAAA,IAClB,GAEME,IAAqB,CAACR,MACXD,EAAWC,CAAK,IAItB;AAAA,MACL,OAAOb,EAAO,QAAQ,uBAAuB;AAAA;AAAA,MAC7C,YAAY;AAAA,IAAA,IAKT;AAAA,MACL,OAAOA,EAAO,QAAQ,uBAAuB;AAAA;AAAA,IAAA,GAI3CsB,IAAkB,YAAY;AAClC,YAAMC,IAAO3B,EAAM;AACnB,MAAAY,EAAY,QAAQe;AACpB,YAAMC,IAAeD,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,GAC7CE,IAAoC,CAAA;AAG1C,MAAIjC,EAAM,YAAY,QACpBiC,EAAgB,KAAK;AAAA,QACnB,SAASjC,EAAM,YAAY,SAAS;AAAA,QACpC,UAAU;AAAA,QACV,UAAUA,EAAM,YAAY,QAAQ;AAAA,QACpC,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,MAAA,CACV;AAIH,iBAAW,CAACqB,GAAOa,CAAO,KAAKF,EAAa,WAAW;AAErD,YAAIhC,EAAM,gBAAgB,SAASkC,CAAO,EAAG;AAE7C,cAAMC,IAAW,MAAMH,EAAa,MAAM,GAAGX,IAAQ,CAAC,EAAE,KAAK,GAAG;AAGhE,YAAIrB,EAAM,cAAckC,CAAO,GAAG;AAChC,UAAAD,EAAgB,KAAK;AAAA,YACnB,SAASjC,EAAM,cAAckC,CAAO;AAAA,YACpC,UAAUA;AAAA,YACV,UAAAC;AAAA,YACA,OAAO;AAAA,YACP,WAAW;AAAA,YACX,SAAS;AAAA,UAAA,CACV;AACD;AAAA,QACF;AAGA,YAAInC,EAAM,kBAAkB;AAC1B,gBAAMoC,IAAepC,EAAM,iBAAiBkC,GAASb,GAAOc,CAAQ;AACpE,cAAIC,MAAiB,MAAM;AACzB,YAAAH,EAAgB,KAAK;AAAA,cACnB,SAASG;AAAA,cACT,UAAUF;AAAA,cACV,UAAAC;AAAA,cACA,OAAOvB,EAAUsB,CAAO;AAAA,cACxB,WAAWE,EAAa,SAASF,EAAQ;AAAA,cACzC,SAAS;AAAA,YAAA,CACV;AACD;AAAA,UACF;AAAA,QACF;AAGA,cAAMG,IAAS3B,EAAUwB,CAAO;AAEhC,QAAAD,EAAgB,KAAK;AAAA,UACnB,SAASI,EAAO;AAAA,UAChB,UAAUH;AAAA,UACV,UAAAC;AAAA,UACA,OAAOE,EAAO;AAAA,UACd,WAAWA,EAAO;AAAA,UAClB,SAAS;AAAA,QAAA,CACV;AAAA,MACH;AAKA,UAHAvB,EAAY,QAAQmB,GAGhBjC,EAAM;AACR,iBAASsC,IAAI,GAAGA,IAAIxB,EAAY,MAAM,QAAQwB,KAAK;AACjD,gBAAMC,IAAKzB,EAAY,MAAMwB,CAAC;AAC9B,cAAIC,EAAG,OAAO;AAEZ,YAAAzB,EAAY,MAAMwB,CAAC,IAAI,EAAE,GAAGC,GAAI,SAAS,GAAA;AAEzC,gBAAI;AACF,oBAAMF,IAAS,MAAM1B,EAAe4B,EAAG,UAAU;AAAA,gBAC/C,UAAUvC,EAAM;AAAA,cAAA,CACjB;AAED,cAAAc,EAAY,MAAMwB,CAAC,IAAI;AAAA,gBACrB,GAAGxB,EAAY,MAAMwB,CAAC;AAAA,gBACtB,SAASD,EAAO;AAAA,gBAChB,OAAOA,EAAO;AAAA,gBACd,WAAWA,EAAO;AAAA,gBAClB,SAAS;AAAA,cAAA;AAAA,YAEb,QAAQ;AACN,cAAAvB,EAAY,MAAMwB,CAAC,IAAI,EAAE,GAAGxB,EAAY,MAAMwB,CAAC,GAAG,SAAS,GAAA;AAAA,YAC7D;AAAA,UACF;AAAA,QACF;AAAA,IAEJ,GAEME,IAAc,CAACjB,GAA4BF,GAAeoB,MAAsB;AAGpF,UAFAvC,EAAK,SAASqB,GAAYkB,CAAK,GAE3B,CAAAA,EAAM,oBACN,CAAArB,EAAWC,CAAK,GACpB;AAAA,YAAI,CAACC,EAAYC,CAAU,GAAG;AAC5B,UAAAkB,EAAM,eAAA;AACN;AAAA,QACF;AAEA,QAAAvC,EAAK,YAAYqB,EAAW,UAAUkB,CAAK,GAEtCA,EAAM,qBACTA,EAAM,eAAA,GACNnC,EAAO,KAAKiB,EAAW,QAAQ;AAAA;AAAA,IAEnC;AAEA,WAAAmB,EAAY,MAAM;AAChB,MAAAZ,EAAA;AAAA,IACF,CAAC,cA3WCa,EAAA,GAAAC,EAuDM,OAvDNC,GAuDM;AAAA,MAtDJC,EAqDK,MArDLC,GAqDK;AAAA,SApDHJ,EAAA,EAAA,GAAAC,EAmDKI,GAAA,MAAAC,EAlD2B9B,EAAA,OAAkB,CAAxCI,GAAYF,YADtBuB,EAmDK,MAAA;AAAA,UAjDF,KAAKrB,EAAW;AAAA,UACjB,OAAM;AAAA,QAAA;UAIEF,MAAK,UADb6B,EAKEC,EAAAC,CAAA,GAAA;AAAA;YAHA,OAAM;AAAA,YACL,kBAAgBnC,EAAA,OAAc;AAAA,YAC/B,eAAY;AAAA,UAAA;WAId0B,KAAAO,EAoCYG,EAnCLjC,EAAWC,CAAK,KAAA,CAAMC,EAAYC,CAAU,IAAA,SAAA,GAAA,GAAA;AAAA,YAChD,MAAI,CAAGH,EAAWC,CAAK,KAAKC,EAAYC,CAAU,IAAIA,EAAW,WAAW;AAAA,YAC5E,OAAOA,EAAW;AAAA,YAClB,gBAAcH,EAAWC,CAAK,aAAa;AAAA,YAC5C,UAAM,gGACEK,EAAqBL,GAAOE,CAAU,CAAA,CAAA;AAAA,YAC7C,OAAK+B,EAAEzB,EAAmBR,CAAK,CAAA;AAAA,YAC/B,SAAK,CAAGkC,MAAkBf,EAAYjB,GAAYF,GAAOkC,CAAC;AAAA,UAAA;uBAG3D,MAQO;AAAA,cAPChC,EAAW,SAAStB,EAAA,oBAD5B0C,KAAAC,EAQO,QARPY,GAQOC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAJLX,EAGE,QAAA;AAAA,kBAFA,OAAM;AAAA,kBACN,OAAM;AAAA,gBAAA;;cAKVA,EAKO,QAAA;AAAA,gBAJL,UAAM,eAAa,EAAA,2BACkBvB,EAAW,SAAStB,EAAA,iBAAe,CAAA;AAAA,cAAA,GAErEyD,EAAAnC,EAAW,OAAO,GAAA,CAAA;AAAA,cAKfA,EAAW,WADnBoB,EAAA,GAAAC,EAKO,QALPe,IAKOF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBADLX,EAA0E,QAAA,EAApE,OAAM,4DAAA,GAA2D,MAAA,EAAA;AAAA,cAAA;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","sources":["../../src/components/UiBreadcrumb.vue"],"sourcesContent":["<template>\n <nav class=\"sl-hidden sm:sl-flex\" aria-label=\"Breadcrumb\">\n <ol role=\"list\" class=\"sl-flex sl-items-center sl-gap-1\">\n <li \n v-for=\"(breadcrumb, index) in displayBreadcrumbs\" \n :key=\"breadcrumb.fullPath\"\n class=\"sl-flex sl-items-center\"\n >\n <!-- Separator -->\n <ChevronRightIcon \n v-if=\"index !== 0\" \n class=\"sl-h-4 sl-w-4 sl-flex-shrink-0 sl-mx-1\" \n :style=\"{ color: separatorColor }\"\n aria-hidden=\"true\" \n />\n \n <!-- Breadcrumb Item -->\n <component\n :is=\"isLastItem(index) || !isNavigable(breadcrumb) ? 'span' : 'a'\"\n :href=\"!isLastItem(index) && isNavigable(breadcrumb) ? breadcrumb.fullPath : undefined\"\n :title=\"breadcrumb.original\"\n :aria-current=\"isLastItem(index) ? 'page' : undefined\"\n class=\"sl-text-sm sl-font-medium sl-transition-colors sl-duration-150 sl-px-2 sl-py-1 sl-rounded-md\"\n :class=\"getBreadcrumbClasses(index, breadcrumb)\"\n :style=\"getBreadcrumbStyle(index)\"\n @click=\"(e: MouseEvent) => handleClick(breadcrumb, index, e)\"\n >\n <!-- UID indicator badge -->\n <span \n v-if=\"breadcrumb.isUid && showUidIndicator\" \n class=\"sl-inline-flex sl-items-center sl-mr-1.5\"\n >\n <span \n class=\"sl-w-1.5 sl-h-1.5 sl-rounded-full sl-bg-amber-400 dark:sl-bg-amber-500\"\n title=\"This is an ID\"\n />\n </span>\n \n <!-- Display text -->\n <span \n class=\"sl-truncate\"\n :class=\"{ 'sl-font-mono sl-text-xs': breadcrumb.isUid && preserveUidFont }\"\n >\n {{ breadcrumb.display }}\n </span>\n \n <!-- Loading indicator for async lookups -->\n <span \n v-if=\"breadcrumb.loading\" \n class=\"sl-ml-1.5 sl-inline-block sl-animate-pulse\"\n >\n <span class=\"sl-w-2 sl-h-2 sl-rounded-full sl-bg-current sl-opacity-50\" />\n </span>\n </component>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed, type PropType } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { ChevronRightIcon } from '@heroicons/vue/20/solid';\nimport { useStringTransform, type StringTransformOptions } from '../composables/useStringTransform';\nimport { useTheme } from '../composables/useTheme';\n\ninterface BreadcrumbItem {\n /** Display text (transformed) */\n display: string;\n /** Original segment text */\n original: string;\n /** Full path for navigation */\n fullPath: string;\n /** Whether this was detected as a UID */\n isUid: boolean;\n /** Whether truncation was applied */\n truncated: boolean;\n /** Whether async lookup is in progress */\n loading: boolean;\n}\n\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\nconst props = defineProps({\n /**\n * Maximum length for breadcrumb text before truncation\n * @default 20\n */\n maxLength: {\n type: Number,\n default: 20,\n },\n /**\n * Case transformation to apply\n * @default 'title'\n */\n caseTransform: {\n type: String as PropType<StringTransformOptions['caseTransform']>,\n default: 'title',\n },\n /**\n * Whether to detect and specially format UIDs\n * @default true\n */\n detectUids: {\n type: Boolean,\n default: true,\n },\n /**\n * How to format detected UIDs\n * @default 'ellipsis'\n */\n uidFormat: {\n type: String as PropType<StringTransformOptions['uidFormat']>,\n default: 'ellipsis',\n },\n /**\n * Number of characters to show for UIDs\n * @default 4\n */\n uidChars: {\n type: Number,\n default: 4,\n },\n /**\n * Show visual indicator for UID segments\n * @default false\n */\n showUidIndicator: {\n type: Boolean,\n default: false,\n },\n /**\n * Use monospace font for UID segments\n * @default true\n */\n preserveUidFont: {\n type: Boolean,\n default: true,\n },\n /**\n * Custom async lookup function to resolve IDs to display names\n * Called for segments detected as UIDs\n */\n lookupFn: {\n type: Function as PropType<(id: string) => Promise<string | null> | string | null>,\n default: undefined,\n },\n /**\n * Custom segment transform function\n * Overrides default transformation for each segment\n */\n segmentTransform: {\n type: Function as PropType<(segment: string, index: number, fullPath: string) => string | null>,\n default: undefined,\n },\n /**\n * Segments to exclude from breadcrumbs (by name)\n */\n excludeSegments: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n /**\n * Mapping of segment names to display names\n */\n segmentLabels: {\n type: Object as PropType<Record<string, string>>,\n default: () => ({}),\n },\n /**\n * Home segment configuration\n */\n homeSegment: {\n type: Object as PropType<{ label?: string; path?: string; show?: boolean }>,\n default: () => ({ show: false }),\n },\n});\n\nconst emit = defineEmits<{\n (e: 'navigate', path: string, event: MouseEvent): void;\n (e: 'click', breadcrumb: BreadcrumbItem, event: MouseEvent): void;\n}>();\n\nconst route = useRoute();\nconst router = useRouter();\nconst { isDark } = useTheme();\n\nconst { transform, transformAsync, isUidLike } = useStringTransform({\n maxLength: props.maxLength,\n caseTransform: props.caseTransform,\n detectUids: props.detectUids,\n uidFormat: props.uidFormat,\n uidChars: props.uidChars,\n});\n\nconst breadcrumbs = ref<BreadcrumbItem[]>([]);\nconst currentPath = ref<string>('');\n\n// Color configurations\nconst separatorColor = computed(() => \n isDark.value ? 'rgb(100, 116, 139)' : 'rgb(156, 163, 175)'\n);\n\nconst displayBreadcrumbs = computed(() => breadcrumbs.value);\n\nconst isLastItem = (index: number) => index === breadcrumbs.value.length - 1;\n\nconst isNavigable = (breadcrumb: BreadcrumbItem) => {\n const resolved = router.resolve(breadcrumb.fullPath);\n const isErrorPage = resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n return resolved && resolved.matched.length > 0 && !isErrorPage;\n};\n\nconst getBreadcrumbClasses = (index: number, breadcrumb: BreadcrumbItem) => {\n const isLast = isLastItem(index);\n const navigable = isNavigable(breadcrumb);\n \n return [\n // Hover state for clickable items\n !isLast && navigable && 'hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700/50',\n // Cursor\n isLast ? 'sl-cursor-default' : navigable ? 'sl-cursor-pointer' : 'sl-cursor-not-allowed',\n // Focus ring\n !isLast && 'focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-1 focus:sl-ring-blue-500 dark:focus:sl-ring-offset-slate-900',\n ].filter(Boolean);\n};\n\nconst getBreadcrumbStyle = (index: number) => {\n const isLast = isLastItem(index);\n \n if (isLast) {\n // Current page - more prominent\n return {\n color: isDark.value ? 'rgb(241, 245, 249)' : 'rgb(15, 23, 42)', // slate-100 / slate-900\n fontWeight: '600',\n };\n }\n \n // Parent segments - muted\n return {\n color: isDark.value ? 'rgb(148, 163, 184)' : 'rgb(100, 116, 139)', // slate-400 / slate-500\n };\n};\n\nconst processSegments = async () => {\n const path = route.path;\n currentPath.value = path;\n const pathSegments = path.split('/').filter(Boolean);\n const tempBreadcrumbs: BreadcrumbItem[] = [];\n\n // Add home segment if configured\n if (props.homeSegment.show) {\n tempBreadcrumbs.push({\n display: props.homeSegment.label || 'Home',\n original: 'home',\n fullPath: props.homeSegment.path || '/',\n isUid: false,\n truncated: false,\n loading: false,\n });\n }\n\n // Process each segment\n for (const [index, segment] of pathSegments.entries()) {\n // Skip excluded segments\n if (props.excludeSegments.includes(segment)) continue;\n\n const fullPath = '/' + pathSegments.slice(0, index + 1).join('/');\n \n // Check for custom label mapping first\n if (props.segmentLabels[segment]) {\n tempBreadcrumbs.push({\n display: props.segmentLabels[segment],\n original: segment,\n fullPath,\n isUid: false,\n truncated: false,\n loading: false,\n });\n continue;\n }\n\n // Check for custom segment transform\n if (props.segmentTransform) {\n const customResult = props.segmentTransform(segment, index, fullPath);\n if (customResult !== null) {\n tempBreadcrumbs.push({\n display: customResult,\n original: segment,\n fullPath,\n isUid: isUidLike(segment),\n truncated: customResult.length < segment.length,\n loading: false,\n });\n continue;\n }\n }\n\n // Use string transform composable\n const result = transform(segment);\n \n tempBreadcrumbs.push({\n display: result.display,\n original: segment,\n fullPath,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n });\n }\n\n breadcrumbs.value = tempBreadcrumbs;\n\n // Handle async lookups for UIDs\n if (props.lookupFn) {\n for (let i = 0; i < breadcrumbs.value.length; i++) {\n const bc = breadcrumbs.value[i];\n if (bc.isUid) {\n // Set loading state\n breadcrumbs.value[i] = { ...bc, loading: true };\n \n try {\n const result = await transformAsync(bc.original, {\n lookupFn: props.lookupFn,\n });\n \n breadcrumbs.value[i] = {\n ...breadcrumbs.value[i],\n display: result.display,\n isUid: result.isUid,\n truncated: result.truncated,\n loading: false,\n };\n } catch {\n breadcrumbs.value[i] = { ...breadcrumbs.value[i], loading: false };\n }\n }\n }\n }\n};\n\nconst handleClick = (breadcrumb: BreadcrumbItem, index: number, event: MouseEvent) => {\n emit('click', breadcrumb, event);\n \n if (event.defaultPrevented) return;\n if (isLastItem(index)) return;\n if (!isNavigable(breadcrumb)) {\n event.preventDefault();\n return;\n }\n \n emit('navigate', breadcrumb.fullPath, event);\n \n if (!event.defaultPrevented) {\n event.preventDefault();\n router.push(breadcrumb.fullPath);\n }\n};\n\nwatchEffect(() => {\n processSegments();\n});\n</script>\n\n<style scoped>\n/* Smooth transitions for breadcrumb items */\na, span {\n transition: color 0.15s ease, background-color 0.15s ease;\n}\n</style>\n"],"names":["props","__props","emit","__emit","route","useRoute","router","useRouter","isDark","useTheme","transform","transformAsync","isUidLike","useStringTransform","breadcrumbs","ref","currentPath","separatorColor","computed","displayBreadcrumbs","isLastItem","index","isNavigable","breadcrumb","resolved","isErrorPage","getBreadcrumbClasses","isLast","navigable","getBreadcrumbStyle","processSegments","path","pathSegments","tempBreadcrumbs","segment","fullPath","customResult","result","i","bc","handleClick","event","watchEffect","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_createBlock","_unref","ChevronRightIcon","_resolveDynamicComponent","_normalizeStyle","e","_hoisted_3","_cache","_toDisplayString","_hoisted_4"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { defineComponent as G, defineAsyncComponent as H, computed as l, ref as
|
|
1
|
+
import { defineComponent as G, defineAsyncComponent as H, computed as l, ref as L, onMounted as J, nextTick as I, watch as K, createElementBlock as t, openBlock as o, normalizeStyle as Q, normalizeClass as n, createCommentVNode as d, createElementVNode as X, renderSlot as u, Fragment as Y, createVNode as m, unref as c, toDisplayString as Z } from "vue";
|
|
2
2
|
import { _ as ee } from "../_plugin-vue_export-helper-CHgC5LLL.js";
|
|
3
3
|
const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolute sl-top-0 sl-right-0 sl-transform sl-translate-x-1/2 -sl-translate-y-1/2" }, re = {
|
|
4
4
|
key: 0,
|
|
5
5
|
class: "sl-ml-2"
|
|
6
|
-
},
|
|
6
|
+
}, te = "sl-flex sl-items-center sl-flex-shrink-0", z = "sl-absolute sl-right-2 sl-top-1/2 -sl-translate-y-1/2 sl-flex sl-items-center sl-flex-shrink-0", oe = /* @__PURE__ */ G({
|
|
7
7
|
__name: "UiButton",
|
|
8
8
|
props: {
|
|
9
9
|
replaceLeadingIconWithLoading: { type: Boolean, default: !1 },
|
|
@@ -30,8 +30,8 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
30
30
|
inlineFlex: { type: Boolean, default: !1 }
|
|
31
31
|
},
|
|
32
32
|
emits: ["button-click", "hover-enter", "hover-leave"],
|
|
33
|
-
setup(
|
|
34
|
-
const b = H(() => import("./Loading.js")), e =
|
|
33
|
+
setup(p, { emit: S }) {
|
|
34
|
+
const b = H(() => import("./Loading.js")), e = p, h = S, g = l(() => !!e.loading), y = l(() => e.replaceLeadingIconWithLoading || !1), x = L(null), f = L(e.theme ?? "primary"), _ = (s) => {
|
|
35
35
|
for (; s && s !== document.documentElement; ) {
|
|
36
36
|
const r = window.getComputedStyle(s).backgroundColor;
|
|
37
37
|
if (r && r !== "rgba(0, 0, 0, 0)" && r !== "transparent")
|
|
@@ -39,24 +39,24 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
39
39
|
s = s.parentElement;
|
|
40
40
|
}
|
|
41
41
|
return null;
|
|
42
|
-
},
|
|
42
|
+
}, w = () => {
|
|
43
43
|
if (!e.autoContrast) return;
|
|
44
|
-
const s =
|
|
44
|
+
const s = x.value;
|
|
45
45
|
if (!s) return;
|
|
46
|
-
const r =
|
|
46
|
+
const r = _(s.parentElement);
|
|
47
47
|
if (!r) return;
|
|
48
48
|
window.getComputedStyle(s).backgroundColor === r && (f.value = f.value === "light" ? "primary" : "light");
|
|
49
49
|
};
|
|
50
50
|
J(() => {
|
|
51
|
-
|
|
51
|
+
I(w);
|
|
52
52
|
}), K(
|
|
53
53
|
() => e.theme,
|
|
54
54
|
(s) => {
|
|
55
|
-
f.value = s || "primary",
|
|
55
|
+
f.value = s || "primary", I(w);
|
|
56
56
|
},
|
|
57
57
|
{ immediate: !1 }
|
|
58
58
|
);
|
|
59
|
-
const i = l(() => f.value),
|
|
59
|
+
const i = l(() => f.value), C = l(() => e.loadingSize || e.size || "md"), v = l(() => {
|
|
60
60
|
const s = ["primary", "dark", "danger", "success", "warning"];
|
|
61
61
|
return !e.outlined && s.includes(i.value) ? "light" : i.value;
|
|
62
62
|
}), M = l(() => {
|
|
@@ -122,7 +122,7 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
122
122
|
// Consistent spacing between icon and text
|
|
123
123
|
]];
|
|
124
124
|
if (!a.value && (e.leadingIcon || e.trailingIcon)) {
|
|
125
|
-
const
|
|
125
|
+
const B = {
|
|
126
126
|
xs: "!sl-p-1.5",
|
|
127
127
|
sm: "!sl-p-2",
|
|
128
128
|
md: "!sl-p-2.5",
|
|
@@ -130,7 +130,7 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
130
130
|
xl: "!sl-p-3.5",
|
|
131
131
|
"2xl": "!sl-p-4"
|
|
132
132
|
};
|
|
133
|
-
r.push(
|
|
133
|
+
r.push(B[e.size || "md"] || "!sl-p-2.5");
|
|
134
134
|
}
|
|
135
135
|
return e.centerLeadingIcon && !a.value ? r.push("sl-w-full", "sl-h-full") : (e.leadingIcon || e.inlineFlex || e.trailingIcon) && r.push("sl-inline-flex"), r.filter(Boolean);
|
|
136
136
|
}), V = l(() => e.theme === "primary" ? e.outlined ? {
|
|
@@ -140,16 +140,16 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
140
140
|
} : {
|
|
141
141
|
backgroundColor: "var(--sl-color-primary-600, #3e4b9a)",
|
|
142
142
|
"--tw-ring-color": "var(--sl-color-primary-500, #4d5ec0)"
|
|
143
|
-
} : {}), W = l(() => e.trailingOverlay ?
|
|
143
|
+
} : {}), W = l(() => e.trailingOverlay ? z : te), A = l(() => e.trailingOverlay ? `${z}` : "sl-flex sl-items-center sl-flex-shrink-0"), k = l(() => e.centerLeadingIcon && !a.value ? "sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-w-full sl-h-full" : e.centerLeadingIcon ? "sl-h-full sl-flex sl-items-center sl-justify-center" : a.value ? "sl-flex sl-items-center sl-justify-center sl-flex-shrink-0" : "sl-flex sl-items-center sl-justify-center"), R = () => {
|
|
144
144
|
h("button-click");
|
|
145
145
|
}, U = () => {
|
|
146
146
|
h("hover-enter");
|
|
147
147
|
}, q = () => {
|
|
148
148
|
h("hover-leave");
|
|
149
149
|
}, D = e.showLoadingTitle || !1;
|
|
150
|
-
return (s, r) => (
|
|
150
|
+
return (s, r) => (o(), t("button", {
|
|
151
151
|
ref_key: "buttonRef",
|
|
152
|
-
ref:
|
|
152
|
+
ref: x,
|
|
153
153
|
type: "button",
|
|
154
154
|
disabled: e.disabled,
|
|
155
155
|
class: n(P.value),
|
|
@@ -160,40 +160,40 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
160
160
|
onMouseenter: U,
|
|
161
161
|
onMouseleave: q
|
|
162
162
|
}, [
|
|
163
|
-
e.centerLeadingIcon && !a.value ? (
|
|
163
|
+
e.centerLeadingIcon && !a.value ? (o(), t("div", {
|
|
164
164
|
key: 0,
|
|
165
165
|
class: n(k.value)
|
|
166
166
|
}, [
|
|
167
167
|
u(s.$slots, "leading-icon", {}, void 0, !0)
|
|
168
|
-
], 2)) : (
|
|
169
|
-
y.value && g.value ? (
|
|
168
|
+
], 2)) : (o(), t(Y, { key: 1 }, [
|
|
169
|
+
y.value && g.value ? (o(), t("div", {
|
|
170
170
|
key: 0,
|
|
171
171
|
class: n(["sl-flex sl-items-center sl-justify-center", [k.value, a.value ? "" : "sl-h-full sl-w-full"]])
|
|
172
172
|
}, [
|
|
173
173
|
m(c(b), {
|
|
174
174
|
theme: v.value,
|
|
175
|
-
size:
|
|
175
|
+
size: C.value
|
|
176
176
|
}, null, 8, ["theme", "size"])
|
|
177
|
-
], 2)) : e.leadingIcon ? (
|
|
177
|
+
], 2)) : e.leadingIcon ? (o(), t("div", {
|
|
178
178
|
key: 1,
|
|
179
179
|
class: n(k.value)
|
|
180
180
|
}, [
|
|
181
181
|
u(s.$slots, "leading-icon", {}, void 0, !0)
|
|
182
182
|
], 2)) : d("", !0)
|
|
183
183
|
], 64)),
|
|
184
|
-
a.value ? (
|
|
184
|
+
a.value ? (o(), t("span", {
|
|
185
185
|
key: 2,
|
|
186
186
|
class: n(["sl-flex-1 sl-text-center", [
|
|
187
|
-
{ "sl-truncate sl-max-w-[150px]":
|
|
187
|
+
{ "sl-truncate sl-max-w-[150px]": p.truncateLabel },
|
|
188
188
|
{ "sl-mx-auto": !e.leadingIcon && !e.trailingIcon }
|
|
189
189
|
]])
|
|
190
|
-
}, Z(e.label), 3)) : !N.value && (!y.value || !g.value) && !e.centerLeadingIcon ? (
|
|
190
|
+
}, Z(e.label), 3)) : !N.value && (!y.value || !g.value) && !e.centerLeadingIcon ? (o(), t("span", {
|
|
191
191
|
key: 3,
|
|
192
192
|
class: n(["sl-flex", e.centerLabel || !e.leadingIcon && !e.trailingIcon ? "sl-justify-center sl-items-center sl-flex-1" : "sl-flex-1"])
|
|
193
193
|
}, [
|
|
194
194
|
u(s.$slots, "default", {}, void 0, !0)
|
|
195
195
|
], 2)) : d("", !0),
|
|
196
|
-
e.trailingLoading && g.value ? (
|
|
196
|
+
e.trailingLoading && g.value ? (o(), t("div", {
|
|
197
197
|
key: 4,
|
|
198
198
|
class: n(W.value)
|
|
199
199
|
}, [
|
|
@@ -201,7 +201,7 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
201
201
|
theme: v.value,
|
|
202
202
|
size: e.trailingLoadingSize || "sm"
|
|
203
203
|
}, null, 8, ["theme", "size"])
|
|
204
|
-
], 2)) : e.trailingIcon ? (
|
|
204
|
+
], 2)) : e.trailingIcon ? (o(), t("div", {
|
|
205
205
|
key: 5,
|
|
206
206
|
class: n(A.value)
|
|
207
207
|
}, [
|
|
@@ -210,19 +210,19 @@ const se = ["disabled", "data-theme", "data-outlined"], le = { class: "sl-absolu
|
|
|
210
210
|
X("div", le, [
|
|
211
211
|
u(s.$slots, "badge", {}, void 0, !0)
|
|
212
212
|
]),
|
|
213
|
-
g.value && !y.value && !e.trailingLoading ? (
|
|
213
|
+
g.value && !y.value && !e.trailingLoading ? (o(), t("div", {
|
|
214
214
|
key: 6,
|
|
215
215
|
class: n(["sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-rounded sl-z-10", M.value])
|
|
216
216
|
}, [
|
|
217
217
|
m(c(b), {
|
|
218
218
|
theme: v.value,
|
|
219
|
-
size:
|
|
219
|
+
size: C.value
|
|
220
220
|
}, null, 8, ["theme", "size"]),
|
|
221
|
-
c(D) ? (
|
|
221
|
+
c(D) ? (o(), t("p", re, "Loading...")) : d("", !0)
|
|
222
222
|
], 2)) : d("", !0)
|
|
223
223
|
], 46, se));
|
|
224
224
|
}
|
|
225
|
-
}), ie = /* @__PURE__ */ ee(
|
|
225
|
+
}), ie = /* @__PURE__ */ ee(oe, [["__scopeId", "data-v-13d7b5df"]]);
|
|
226
226
|
export {
|
|
227
227
|
ie as default
|
|
228
228
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../src/components/UiButton.vue"],"sourcesContent":["<!--\n @component UiButton\n @description Versatile button component with theme, size, and loading support.\n \n @props\n - theme (Theme, optional): Color theme variant - 'primary', 'secondary', 'success', 'warning', 'danger', 'dark', 'light', 'ghost'\n - size (Size, optional): Button size - 'xs', 'sm', 'md', 'lg', 'xl', '2xl'\n - label (string, optional): Text label (alternative to default slot)\n - disabled (boolean, optional): Disabled state\n - expanded (boolean, optional): Full width mode\n - outlined (boolean, optional): Outlined variant\n - loading (boolean, optional): Loading state with spinner\n - leadingIcon (boolean, optional): Enable leading icon slot\n - trailingIcon (boolean, optional): Enable trailing icon slot\n - rounded (RoundedType, optional): Border radius style\n \n @emits\n - button-click: Emitted when button is clicked\n - hover-enter: Emitted on mouse enter\n - hover-leave: Emitted on mouse leave\n \n @slots\n - default: Button content/text\n - leading-icon: Icon displayed before content\n - trailing-icon: Icon displayed after content\n - badge: Badge overlay positioned top-right\n \n @example\n <UiButton theme=\"primary\" @button-click=\"handleClick\">\n Click Me\n </UiButton>\n \n @example\n <UiButton leading-icon theme=\"success\">\n <template #leading-icon><PlusIcon class=\"h-5 w-5\" /></template>\n Add Item\n </UiButton>\n-->\n<template>\n <button\n ref=\"buttonRef\"\n type=\"button\"\n :disabled=\"props.disabled\"\n :class=\"buttonClasses\"\n :style=\"buttonStyles\"\n :data-theme=\"props.theme\"\n :data-outlined=\"props.outlined || undefined\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <!-- Leading Icon Area (or Loading Replacement) -->\n <template v-if=\"props.centerLeadingIcon && !isLabelPresent\">\n <div :class=\"leadingIconClasses\">\n <slot name=\"leading-icon\" />\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"replaceLeadingIconWithLoading && loading\"\n class=\"sl-flex sl-items-center sl-justify-center\"\n :class=\"[leadingIconClasses, !isLabelPresent ? 'sl-h-full sl-w-full' : '']\"\n >\n <Loading :theme=\"loadingTheme\" :size=\"loadingSize\" />\n </div>\n <div v-else-if=\"props.leadingIcon\" :class=\"leadingIconClasses\">\n <slot name=\"leading-icon\" />\n </div>\n </template>\n\n <!-- Button Content (skip for icon-only buttons) -->\n <span\n v-if=\"isLabelPresent\"\n class=\"sl-flex-1 sl-text-center\"\n :class=\"[\n { 'sl-truncate sl-max-w-[150px]': truncateLabel },\n { 'sl-mx-auto': !props.leadingIcon && !props.trailingIcon }\n ]\"\n >\n {{ props.label }}\n </span>\n <span\n v-else-if=\"!isIconOnly && (!replaceLeadingIconWithLoading || !loading) && !props.centerLeadingIcon\"\n class=\"sl-flex\"\n :class=\"props.centerLabel || (!props.leadingIcon && !props.trailingIcon) ? 'sl-justify-center sl-items-center sl-flex-1' : 'sl-flex-1'\"\n >\n <slot />\n </span>\n\n <!-- Trailing Icon or Loading -->\n <div v-if=\"props.trailingLoading && loading\" :class=\"trailingLoadingClasses\">\n <Loading :theme=\"loadingTheme\" :size=\"props.trailingLoadingSize || 'sm'\" />\n </div>\n <div v-else-if=\"props.trailingIcon\" :class=\"trailingIconClasses\">\n <slot name=\"trailing-icon\" />\n </div>\n\n <!-- Badge Slot -->\n <div class=\"sl-absolute sl-top-0 sl-right-0 sl-transform sl-translate-x-1/2 -sl-translate-y-1/2\">\n <slot name=\"badge\" />\n </div>\n\n <!-- Overlay Loading (if not replacing the leading icon and not using trailing loading) -->\n <div\n v-if=\"loading && !replaceLeadingIconWithLoading && !props.trailingLoading\"\n class=\"sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-rounded sl-z-10\"\n :class=\"loadingOverlayClasses\"\n >\n <Loading :theme=\"loadingTheme\" :size=\"loadingSize\" />\n <p v-if=\"showLoadingTitle\" class=\"sl-ml-2\">Loading...</p>\n </div>\n </button>\n</template>\n\n<script lang=\"ts\" setup>\n/**\n * UiButton - Versatile button component with theme, size, and loading support\n * \n * A comprehensive button component supporting multiple themes, sizes, loading states,\n * and icon integration. Uses CSS variables for theming to allow brand customization.\n * \n * ## Features\n * - Multiple theme variants (primary, secondary, success, warning, danger, etc.)\n * - Size options from xs to 2xl\n * - Outlined variant for secondary actions\n * - Loading states with overlay, trailing, or leading replacement options\n * - Leading and trailing icon slots\n * - Badge slot for notifications\n * - Auto-contrast for background adaptation\n * \n * ## Usage\n * ```vue\n * <UiButton theme=\"primary\" size=\"md\" @button-click=\"handleClick\">\n * Click Me\n * </UiButton>\n * \n * <UiButton leading-icon :loading=\"isLoading\">\n * <template #leading-icon><PlusIcon /></template>\n * Add Item\n * </UiButton>\n * ```\n * \n * ## Props\n * | Prop | Type | Default | Description |\n * |------|------|---------|-------------|\n * | theme | Theme | 'primary' | Color theme variant |\n * | size | Size | 'md' | Button size |\n * | label | string | - | Text label (alternative to slot) |\n * | disabled | boolean | false | Disabled state |\n * | loading | boolean | false | Loading state |\n * | outlined | boolean | false | Outlined variant |\n * | expanded | boolean | false | Full width |\n * \n * ## Events\n * | Event | Payload | Description |\n * |-------|---------|-------------|\n * | button-click | void | Emitted on button click |\n * | hover-enter | void | Emitted on mouse enter |\n * | hover-leave | void | Emitted on mouse leave |\n * \n * ## Slots\n * | Slot | Description |\n * |------|-------------|\n * | default | Button content |\n * | leading-icon | Icon before content |\n * | trailing-icon | Icon after content |\n * | badge | Badge overlay (positioned top-right) |\n * \n * @module components/UiButton\n * @see {@link ButtonType} for prop interface\n */\nimport { computed, defineAsyncComponent, ref, onMounted, watch, nextTick } from 'vue';\nimport type { ButtonType } from '../types/ui';\nimport type { RoundedType, Theme } from '../types/core';\n\n// Asynchronously load the Loading component\nconst Loading = defineAsyncComponent(() => import('./UiLoading.vue'));\n\n// Define props using the ButtonType interface\ninterface ButtonProps extends ButtonType {\n replaceLeadingIconWithLoading?: boolean;\n centerLeadingIcon?: boolean;\n /**\n * When enabled, shows loading indicator in trailing position instead of overlay\n */\n trailingLoading?: boolean;\n /**\n * Size of the loading indicator when using trailingLoading\n */\n trailingLoadingSize?: import('../types/core').Size;\n /**\n * Positions trailing loading/icon absolutely at the far right, centered vertically.\n */\n trailingOverlay?: boolean;\n /**\n * When enabled the button will attempt to automatically choose a contrasting\n * colour theme if its background matches that of its closest non-transparent\n * ancestor.\n */\n autoContrast?: boolean;\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n theme: 'primary',\n size: 'md',\n rounded: 'rounded-md',\n disabled: false,\n expanded: false,\n outlined: false,\n loading: false,\n leadingIcon: false,\n trailingIcon: false,\n showLoadingTitle: false,\n truncateLabel: false,\n centerLabel: false,\n inlineFlex: false,\n replaceLeadingIconWithLoading: false,\n centerLeadingIcon: false,\n trailingLoading: false,\n trailingOverlay: false,\n autoContrast: false,\n});\n\n// Define the emits\nconst emit = defineEmits<{\n 'button-click': []\n 'hover-enter': []\n 'hover-leave': []\n}>();\n\n// Reactive computed properties\nconst loading = computed(() => Boolean(props.loading));\nconst replaceLeadingIconWithLoading = computed(() => props.replaceLeadingIconWithLoading || false);\n\n// Reference to the underlying button element\nconst buttonRef = ref<HTMLElement | null>(null);\n\n// Internal reactive theme value that may be overridden for auto-contrast\nconst resolvedTheme = ref<Theme>(props.theme ?? 'primary');\n\nconst findParentBackground = (node: HTMLElement | null): string | null => {\n while (node && node !== document.documentElement) {\n const bg = window.getComputedStyle(node).backgroundColor;\n if (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') {\n return bg;\n }\n node = node.parentElement as HTMLElement | null;\n }\n return null;\n};\n\nconst adjustThemeBasedOnBackground = (): void => {\n if (!props.autoContrast) return;\n const el = buttonRef.value;\n if (!el) return;\n\n const parentBg = findParentBackground(el.parentElement as HTMLElement | null);\n if (!parentBg) return;\n\n const buttonBg = window.getComputedStyle(el).backgroundColor;\n\n if (buttonBg === parentBg) {\n resolvedTheme.value = resolvedTheme.value === 'light' ? 'primary' : 'light';\n }\n};\n\nonMounted(() => {\n nextTick(adjustThemeBasedOnBackground);\n});\n\nwatch(\n () => props.theme,\n (newTheme) => {\n resolvedTheme.value = newTheme || 'primary';\n nextTick(adjustThemeBasedOnBackground);\n },\n { immediate: false }\n);\n\n// Public computed theme\nconst theme = computed(() => resolvedTheme.value);\n\n// Compute loading size with fallback\nconst loadingSize = computed(() => props.loadingSize || props.size || 'md');\n\n// Determine loading theme based on button theme for proper contrast\nconst loadingTheme = computed(() => {\n // For filled buttons with dark backgrounds, use light/white spinner\n const darkBgThemes = ['primary', 'dark', 'danger', 'success', 'warning'];\n if (!props.outlined && darkBgThemes.includes(theme.value)) {\n return 'light'; // Light spinner on dark background\n }\n // For outlined or light buttons, use the button's theme color\n return theme.value;\n});\n\n// Loading overlay classes based on button theme\nconst loadingOverlayClasses = computed(() => {\n // For filled dark buttons, use semi-transparent dark overlay\n const darkBgThemes = ['primary', 'dark', 'danger', 'success', 'warning'];\n if (!props.outlined && darkBgThemes.includes(theme.value)) {\n return 'sl-bg-black/20';\n }\n // For light/outlined buttons, use semi-transparent white/dark overlay\n return 'sl-bg-white/75 dark:sl-bg-slate-900/75';\n});\n\n// Styling computed properties\nconst colorClass = computed(() => {\n const outlineBaseClasses: Record<string, string> = {\n primary: 'sl-text-stachelock-600 dark:sl-text-stachelock-400 sl-border sl-border-stachelock-600 dark:sl-border-stachelock-500 hover:sl-bg-stachelock-50 dark:hover:sl-bg-stachelock-900/30 hover:sl-border-stachelock-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-stachelock-300 dark:focus:sl-ring-stachelock-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n dark: 'sl-text-gray-700 dark:sl-text-gray-300 sl-border sl-border-gray-700 dark:sl-border-gray-500 hover:sl-bg-gray-50 dark:hover:sl-bg-gray-800 hover:sl-border-gray-800 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n secondary: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-gray-300 dark:sl-border-slate-600 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n light: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-gray-300 dark:sl-border-slate-600 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n warning: 'sl-text-yellow-500 dark:sl-text-yellow-400 sl-border sl-border-yellow-500 dark:sl-border-yellow-500 hover:sl-bg-yellow-50 dark:hover:sl-bg-yellow-900/20 hover:sl-border-yellow-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-yellow-300 dark:focus:sl-ring-yellow-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n danger: 'sl-text-red-500 dark:sl-text-red-400 sl-border sl-border-red-500 dark:sl-border-red-500 hover:sl-bg-red-50 dark:hover:sl-bg-red-900/20 hover:sl-border-red-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-red-300 dark:focus:sl-ring-red-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n success: 'sl-text-green-500 dark:sl-text-green-400 sl-border sl-border-green-500 dark:sl-border-green-500 hover:sl-bg-green-50 dark:hover:sl-bg-green-900/20 hover:sl-border-green-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-green-300 dark:focus:sl-ring-green-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n ghost: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-transparent sl-bg-transparent hover:sl-text-gray-700 dark:hover:sl-text-white hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none',\n };\n\n const filledBaseClasses: Record<string, string> = {\n primary: 'sl-border sl-border-transparent sl-text-white sl-shadow-sm focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n dark: 'sl-border sl-border-transparent sl-bg-gray-700 dark:sl-bg-gray-600 sl-text-white sl-shadow-sm hover:sl-bg-gray-800 dark:hover:sl-bg-gray-500 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n secondary: 'sl-text-gray-800 dark:sl-text-gray-200 sl-bg-gray-200 dark:sl-bg-slate-700 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900 sl-border sl-border-gray-300 dark:sl-border-slate-600',\n light: 'sl-text-gray-800 dark:sl-text-gray-200 sl-bg-gray-200 dark:sl-bg-slate-700 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900 sl-border sl-border-gray-300 dark:sl-border-slate-600',\n warning: 'sl-border sl-border-transparent sl-bg-yellow-400 dark:sl-bg-yellow-500 sl-text-white sl-shadow-sm hover:sl-bg-yellow-600 dark:hover:sl-bg-yellow-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-yellow-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n danger: 'sl-border sl-border-transparent sl-bg-red-500 dark:sl-bg-red-600 sl-text-white sl-shadow-sm hover:sl-bg-red-600 dark:hover:sl-bg-red-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-red-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n success: 'sl-border sl-border-transparent sl-bg-green-500 dark:sl-bg-green-600 sl-text-white sl-shadow-sm hover:sl-bg-green-600 dark:hover:sl-bg-green-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-green-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n ghost: 'sl-border sl-border-transparent sl-text-gray-800 dark:sl-text-gray-200 sl-bg-transparent hover:sl-text-gray-700 dark:hover:sl-text-white hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none',\n };\n\n if (props.outlined) {\n return `${outlineBaseClasses[theme.value] || ''} sl-bg-transparent dark:sl-bg-transparent`;\n } else {\n return filledBaseClasses[theme.value] || '';\n }\n});\n\nconst roundedClassMap: Record<RoundedType, string> = {\n square: '',\n rounded: 'sl-rounded',\n 'rounded-md': 'sl-rounded-md',\n 'rounded-lg': 'sl-rounded-lg',\n 'rounded-full': 'sl-rounded-full',\n};\n\nconst roundedClass = computed(() => roundedClassMap[props.rounded || 'rounded-md']);\n\n// Separate horizontal and vertical padding for better control\nconst sizeClass = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-px-2 sl-py-1',\n sm: 'sl-px-2.5 sl-py-1.5',\n md: 'sl-px-3 sl-py-1.5',\n lg: 'sl-px-4 sl-py-2',\n xl: 'sl-px-5 sl-py-2.5',\n '2xl': 'sl-px-6 sl-py-3',\n };\n return sizeMapping[props.size || 'md'];\n});\n\nconst textClass = computed(() => {\n const textMapping: Record<string, string> = {\n xs: 'sl-text-xs sl-font-regular',\n sm: 'sl-text-sm sl-font-regular',\n md: 'sl-text-base sl-font-medium',\n lg: 'sl-text-lg sl-font-medium',\n xl: 'sl-text-xl sl-font-medium',\n '2xl': 'sl-text-2xl sl-font-medium',\n };\n return textMapping[props.size || 'sm'];\n});\n\nconst expandedClass = computed(() => (props.expanded ? 'sl-w-full' : ''));\n\nconst isLabelPresent = computed(() => !!props.label && props.label.length > 0);\n\n// Determine if this is an icon-only button (leading/trailing icon with no label)\nconst isIconOnly = computed(() => {\n return !isLabelPresent.value && (props.leadingIcon || props.trailingIcon);\n});\n\nconst buttonClasses = computed(() => {\n if (props.customClass) {\n return props.customClass;\n }\n\n const coreClasses = [\n roundedClass.value,\n sizeClass.value,\n textClass.value,\n expandedClass.value,\n colorClass.value,\n props.disabled ? 'sl-cursor-not-allowed' : 'sl-cursor-pointer',\n 'focus:sl-ring-0',\n 'sl-relative',\n 'sl-flex',\n 'sl-items-center',\n 'sl-justify-center',\n 'sl-gap-2', // Consistent spacing between icon and text\n ];\n\n const finalClasses = [...coreClasses];\n\n // For icon-only buttons (no label/text), use equal padding for square proportions\n if (!isLabelPresent.value && (props.leadingIcon || props.trailingIcon)) {\n // Size-aware square padding for icon-only buttons\n const iconOnlyPadding: Record<string, string> = {\n xs: '!sl-p-1.5',\n sm: '!sl-p-2',\n md: '!sl-p-2.5',\n lg: '!sl-p-3',\n xl: '!sl-p-3.5',\n '2xl': '!sl-p-4',\n };\n finalClasses.push(iconOnlyPadding[props.size || 'md'] || '!sl-p-2.5');\n }\n\n if (props.centerLeadingIcon && !isLabelPresent.value) {\n finalClasses.push('sl-w-full', 'sl-h-full');\n } else {\n if (props.leadingIcon || props.inlineFlex || props.trailingIcon) {\n finalClasses.push('sl-inline-flex');\n }\n }\n\n return finalClasses.filter(Boolean);\n});\n\nconst buttonStyles = computed(() => {\n if (props.theme === 'primary') {\n // Only apply background color for filled primary buttons, not outlined\n if (props.outlined) {\n return {\n color: 'var(--sl-color-primary-600, #3e4b9a)',\n borderColor: 'var(--sl-color-primary-600, #3e4b9a)',\n '--tw-ring-color': 'var(--sl-color-primary-500, #4d5ec0)',\n };\n }\n return {\n backgroundColor: 'var(--sl-color-primary-600, #3e4b9a)',\n '--tw-ring-color': 'var(--sl-color-primary-500, #4d5ec0)',\n };\n }\n return {};\n});\n\n// Gap on parent handles spacing, no margins needed\nconst trailingBaseClasses = 'sl-flex sl-items-center sl-flex-shrink-0';\nconst trailingAbsoluteClasses = 'sl-absolute sl-right-2 sl-top-1/2 -sl-translate-y-1/2 sl-flex sl-items-center sl-flex-shrink-0';\nconst trailingLoadingClasses = computed(() => props.trailingOverlay ? trailingAbsoluteClasses : trailingBaseClasses);\nconst trailingIconClasses = computed(() => props.trailingOverlay ? `${trailingAbsoluteClasses}` : 'sl-flex sl-items-center sl-flex-shrink-0');\n\nconst leadingIconClasses = computed(() => {\n if (props.centerLeadingIcon && !isLabelPresent.value) {\n return 'sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-w-full sl-h-full';\n }\n if (props.centerLeadingIcon) {\n return 'sl-h-full sl-flex sl-items-center sl-justify-center';\n }\n if (!isLabelPresent.value) {\n return 'sl-flex sl-items-center sl-justify-center';\n }\n // Gap on parent handles spacing\n return 'sl-flex sl-items-center sl-justify-center sl-flex-shrink-0';\n});\n\nconst onClick = (): void => {\n emit('button-click');\n};\n\nconst onMouseEnter = (): void => {\n emit('hover-enter');\n};\n\nconst onMouseLeave = (): void => {\n emit('hover-leave');\n};\n\nconst showLoadingTitle = props.showLoadingTitle || false;\n</script>\n\n<style scoped>\n/* Filled primary button hover */\nbutton[data-theme=\"primary\"]:not([data-outlined]):hover {\n background-color: var(--sl-color-primary-700, #2e3873) !important;\n}\n\n/* Outlined primary button hover - subtle background */\nbutton[data-theme=\"primary\"][data-outlined]:hover {\n background-color: rgb(var(--sl-color-primary-50-rgb, 237 239 249) / 0.5) !important;\n}\n\n/* Dark mode: Outlined primary button hover */\n:global(.dark) button[data-theme=\"primary\"][data-outlined]:hover {\n background-color: rgb(var(--sl-color-primary-900-rgb, 15 19 38) / 0.3) !important;\n}\n</style>\n\n\n"],"names":["trailingBaseClasses","trailingAbsoluteClasses","Loading","defineAsyncComponent","props","__props","emit","__emit","loading","computed","replaceLeadingIconWithLoading","buttonRef","ref","resolvedTheme","findParentBackground","node","bg","adjustThemeBasedOnBackground","el","parentBg","onMounted","nextTick","watch","newTheme","theme","loadingSize","loadingTheme","darkBgThemes","loadingOverlayClasses","colorClass","outlineBaseClasses","filledBaseClasses","roundedClassMap","roundedClass","sizeClass","textClass","expandedClass","isLabelPresent","isIconOnly","buttonClasses","finalClasses","iconOnlyPadding","buttonStyles","trailingLoadingClasses","trailingIconClasses","leadingIconClasses","onClick","onMouseEnter","onMouseLeave","showLoadingTitle","_createElementBlock","_renderSlot","_ctx","_Fragment","_normalizeClass","_createVNode","_unref","truncateLabel","_toDisplayString","_createElementVNode","_hoisted_2","_hoisted_3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../src/components/UiButton.vue"],"sourcesContent":["<!--\n @component UiButton\n @description Versatile button component with theme, size, and loading support.\n \n @props\n - theme (Theme, optional): Color theme variant - 'primary', 'secondary', 'success', 'warning', 'danger', 'dark', 'light', 'ghost'\n - size (Size, optional): Button size - 'xs', 'sm', 'md', 'lg', 'xl', '2xl'\n - label (string, optional): Text label (alternative to default slot)\n - disabled (boolean, optional): Disabled state\n - expanded (boolean, optional): Full width mode\n - outlined (boolean, optional): Outlined variant\n - loading (boolean, optional): Loading state with spinner\n - leadingIcon (boolean, optional): Enable leading icon slot\n - trailingIcon (boolean, optional): Enable trailing icon slot\n - rounded (RoundedType, optional): Border radius style\n \n @emits\n - button-click: Emitted when button is clicked\n - hover-enter: Emitted on mouse enter\n - hover-leave: Emitted on mouse leave\n \n @slots\n - default: Button content/text\n - leading-icon: Icon displayed before content\n - trailing-icon: Icon displayed after content\n - badge: Badge overlay positioned top-right\n \n @example\n <UiButton theme=\"primary\" @button-click=\"handleClick\">\n Click Me\n </UiButton>\n \n @example\n <UiButton leading-icon theme=\"success\">\n <template #leading-icon><PlusIcon class=\"h-5 w-5\" /></template>\n Add Item\n </UiButton>\n-->\n<template>\n <button\n ref=\"buttonRef\"\n type=\"button\"\n :disabled=\"props.disabled\"\n :class=\"buttonClasses\"\n :style=\"buttonStyles\"\n :data-theme=\"props.theme\"\n :data-outlined=\"props.outlined || undefined\"\n @click=\"onClick\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <!-- Leading Icon Area (or Loading Replacement) -->\n <template v-if=\"props.centerLeadingIcon && !isLabelPresent\">\n <div :class=\"leadingIconClasses\">\n <slot name=\"leading-icon\" />\n </div>\n </template>\n <template v-else>\n <div\n v-if=\"replaceLeadingIconWithLoading && loading\"\n class=\"sl-flex sl-items-center sl-justify-center\"\n :class=\"[leadingIconClasses, !isLabelPresent ? 'sl-h-full sl-w-full' : '']\"\n >\n <Loading :theme=\"loadingTheme\" :size=\"loadingSize\" />\n </div>\n <div v-else-if=\"props.leadingIcon\" :class=\"leadingIconClasses\">\n <slot name=\"leading-icon\" />\n </div>\n </template>\n\n <!-- Button Content (skip for icon-only buttons) -->\n <span\n v-if=\"isLabelPresent\"\n class=\"sl-flex-1 sl-text-center\"\n :class=\"[\n { 'sl-truncate sl-max-w-[150px]': truncateLabel },\n { 'sl-mx-auto': !props.leadingIcon && !props.trailingIcon }\n ]\"\n >\n {{ props.label }}\n </span>\n <span\n v-else-if=\"!isIconOnly && (!replaceLeadingIconWithLoading || !loading) && !props.centerLeadingIcon\"\n class=\"sl-flex\"\n :class=\"props.centerLabel || (!props.leadingIcon && !props.trailingIcon) ? 'sl-justify-center sl-items-center sl-flex-1' : 'sl-flex-1'\"\n >\n <slot />\n </span>\n\n <!-- Trailing Icon or Loading -->\n <div v-if=\"props.trailingLoading && loading\" :class=\"trailingLoadingClasses\">\n <Loading :theme=\"loadingTheme\" :size=\"props.trailingLoadingSize || 'sm'\" />\n </div>\n <div v-else-if=\"props.trailingIcon\" :class=\"trailingIconClasses\">\n <slot name=\"trailing-icon\" />\n </div>\n\n <!-- Badge Slot -->\n <div class=\"sl-absolute sl-top-0 sl-right-0 sl-transform sl-translate-x-1/2 -sl-translate-y-1/2\">\n <slot name=\"badge\" />\n </div>\n\n <!-- Overlay Loading (if not replacing the leading icon and not using trailing loading) -->\n <div\n v-if=\"loading && !replaceLeadingIconWithLoading && !props.trailingLoading\"\n class=\"sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-rounded sl-z-10\"\n :class=\"loadingOverlayClasses\"\n >\n <Loading :theme=\"loadingTheme\" :size=\"loadingSize\" />\n <p v-if=\"showLoadingTitle\" class=\"sl-ml-2\">Loading...</p>\n </div>\n </button>\n</template>\n\n<script lang=\"ts\" setup>\n/**\n * UiButton - Versatile button component with theme, size, and loading support\n * \n * A comprehensive button component supporting multiple themes, sizes, loading states,\n * and icon integration. Uses CSS variables for theming to allow brand customization.\n * \n * ## Features\n * - Multiple theme variants (primary, secondary, success, warning, danger, etc.)\n * - Size options from xs to 2xl\n * - Outlined variant for secondary actions\n * - Loading states with overlay, trailing, or leading replacement options\n * - Leading and trailing icon slots\n * - Badge slot for notifications\n * - Auto-contrast for background adaptation\n * \n * ## Usage\n * ```vue\n * <UiButton theme=\"primary\" size=\"md\" @button-click=\"handleClick\">\n * Click Me\n * </UiButton>\n * \n * <UiButton leading-icon :loading=\"isLoading\">\n * <template #leading-icon><PlusIcon /></template>\n * Add Item\n * </UiButton>\n * ```\n * \n * ## Props\n * | Prop | Type | Default | Description |\n * |------|------|---------|-------------|\n * | theme | Theme | 'primary' | Color theme variant |\n * | size | Size | 'md' | Button size |\n * | label | string | - | Text label (alternative to slot) |\n * | disabled | boolean | false | Disabled state |\n * | loading | boolean | false | Loading state |\n * | outlined | boolean | false | Outlined variant |\n * | expanded | boolean | false | Full width |\n * \n * ## Events\n * | Event | Payload | Description |\n * |-------|---------|-------------|\n * | button-click | void | Emitted on button click |\n * | hover-enter | void | Emitted on mouse enter |\n * | hover-leave | void | Emitted on mouse leave |\n * \n * ## Slots\n * | Slot | Description |\n * |------|-------------|\n * | default | Button content |\n * | leading-icon | Icon before content |\n * | trailing-icon | Icon after content |\n * | badge | Badge overlay (positioned top-right) |\n * \n * @module components/UiButton\n * @see {@link ButtonType} for prop interface\n */\nimport { computed, defineAsyncComponent, ref, onMounted, watch, nextTick } from 'vue';\nimport type { ButtonType } from '../types/ui';\nimport type { RoundedType, Theme } from '../types/core';\n\n// Asynchronously load the Loading component\nconst Loading = defineAsyncComponent(() => import('./UiLoading.vue'));\n\n// Define props using the ButtonType interface\ninterface ButtonProps extends ButtonType {\n replaceLeadingIconWithLoading?: boolean;\n centerLeadingIcon?: boolean;\n /**\n * When enabled, shows loading indicator in trailing position instead of overlay\n */\n trailingLoading?: boolean;\n /**\n * Size of the loading indicator when using trailingLoading\n */\n trailingLoadingSize?: import('../types/core').Size;\n /**\n * Positions trailing loading/icon absolutely at the far right, centered vertically.\n */\n trailingOverlay?: boolean;\n /**\n * When enabled the button will attempt to automatically choose a contrasting\n * colour theme if its background matches that of its closest non-transparent\n * ancestor.\n */\n autoContrast?: boolean;\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n theme: 'primary',\n size: 'md',\n rounded: 'rounded-md',\n disabled: false,\n expanded: false,\n outlined: false,\n loading: false,\n leadingIcon: false,\n trailingIcon: false,\n showLoadingTitle: false,\n truncateLabel: false,\n centerLabel: false,\n inlineFlex: false,\n replaceLeadingIconWithLoading: false,\n centerLeadingIcon: false,\n trailingLoading: false,\n trailingOverlay: false,\n autoContrast: false,\n});\n\n// Define the emits\nconst emit = defineEmits<{\n 'button-click': []\n 'hover-enter': []\n 'hover-leave': []\n}>();\n\n// Reactive computed properties\nconst loading = computed(() => Boolean(props.loading));\nconst replaceLeadingIconWithLoading = computed(() => props.replaceLeadingIconWithLoading || false);\n\n// Reference to the underlying button element\nconst buttonRef = ref<HTMLElement | null>(null);\n\n// Internal reactive theme value that may be overridden for auto-contrast\nconst resolvedTheme = ref<Theme>(props.theme ?? 'primary');\n\nconst findParentBackground = (node: HTMLElement | null): string | null => {\n while (node && node !== document.documentElement) {\n const bg = window.getComputedStyle(node).backgroundColor;\n if (bg && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'transparent') {\n return bg;\n }\n node = node.parentElement as HTMLElement | null;\n }\n return null;\n};\n\nconst adjustThemeBasedOnBackground = (): void => {\n if (!props.autoContrast) return;\n const el = buttonRef.value;\n if (!el) return;\n\n const parentBg = findParentBackground(el.parentElement as HTMLElement | null);\n if (!parentBg) return;\n\n const buttonBg = window.getComputedStyle(el).backgroundColor;\n\n if (buttonBg === parentBg) {\n resolvedTheme.value = resolvedTheme.value === 'light' ? 'primary' : 'light';\n }\n};\n\nonMounted(() => {\n nextTick(adjustThemeBasedOnBackground);\n});\n\nwatch(\n () => props.theme,\n (newTheme) => {\n resolvedTheme.value = newTheme || 'primary';\n nextTick(adjustThemeBasedOnBackground);\n },\n { immediate: false }\n);\n\n// Public computed theme\nconst theme = computed(() => resolvedTheme.value);\n\n// Compute loading size with fallback\nconst loadingSize = computed(() => props.loadingSize || props.size || 'md');\n\n// Determine loading theme based on button theme for proper contrast\nconst loadingTheme = computed(() => {\n // For filled buttons with dark backgrounds, use light/white spinner\n const darkBgThemes = ['primary', 'dark', 'danger', 'success', 'warning'];\n if (!props.outlined && darkBgThemes.includes(theme.value)) {\n return 'light'; // Light spinner on dark background\n }\n // For outlined or light buttons, use the button's theme color\n return theme.value;\n});\n\n// Loading overlay classes based on button theme\nconst loadingOverlayClasses = computed(() => {\n // For filled dark buttons, use semi-transparent dark overlay\n const darkBgThemes = ['primary', 'dark', 'danger', 'success', 'warning'];\n if (!props.outlined && darkBgThemes.includes(theme.value)) {\n return 'sl-bg-black/20';\n }\n // For light/outlined buttons, use semi-transparent white/dark overlay\n return 'sl-bg-white/75 dark:sl-bg-slate-900/75';\n});\n\n// Styling computed properties\nconst colorClass = computed(() => {\n const outlineBaseClasses: Record<string, string> = {\n primary: 'sl-text-stachelock-600 dark:sl-text-stachelock-400 sl-border sl-border-stachelock-600 dark:sl-border-stachelock-500 hover:sl-bg-stachelock-50 dark:hover:sl-bg-stachelock-900/30 hover:sl-border-stachelock-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-stachelock-300 dark:focus:sl-ring-stachelock-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n dark: 'sl-text-gray-700 dark:sl-text-gray-300 sl-border sl-border-gray-700 dark:sl-border-gray-500 hover:sl-bg-gray-50 dark:hover:sl-bg-gray-800 hover:sl-border-gray-800 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-gray-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n secondary: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-gray-300 dark:sl-border-slate-600 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n light: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-gray-300 dark:sl-border-slate-600 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n warning: 'sl-text-yellow-500 dark:sl-text-yellow-400 sl-border sl-border-yellow-500 dark:sl-border-yellow-500 hover:sl-bg-yellow-50 dark:hover:sl-bg-yellow-900/20 hover:sl-border-yellow-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-yellow-300 dark:focus:sl-ring-yellow-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n danger: 'sl-text-red-500 dark:sl-text-red-400 sl-border sl-border-red-500 dark:sl-border-red-500 hover:sl-bg-red-50 dark:hover:sl-bg-red-900/20 hover:sl-border-red-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-red-300 dark:focus:sl-ring-red-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n success: 'sl-text-green-500 dark:sl-text-green-400 sl-border sl-border-green-500 dark:sl-border-green-500 hover:sl-bg-green-50 dark:hover:sl-bg-green-900/20 hover:sl-border-green-400 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-green-300 dark:focus:sl-ring-green-600 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n ghost: 'sl-text-gray-800 dark:sl-text-gray-200 sl-border sl-border-transparent sl-bg-transparent hover:sl-text-gray-700 dark:hover:sl-text-white hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none',\n };\n\n const filledBaseClasses: Record<string, string> = {\n primary: 'sl-border sl-border-transparent sl-text-white sl-shadow-sm focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n dark: 'sl-border sl-border-transparent sl-bg-gray-700 dark:sl-bg-gray-600 sl-text-white sl-shadow-sm hover:sl-bg-gray-800 dark:hover:sl-bg-gray-500 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n secondary: 'sl-text-gray-800 dark:sl-text-gray-200 sl-bg-gray-200 dark:sl-bg-slate-700 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900 sl-border sl-border-gray-300 dark:sl-border-slate-600',\n light: 'sl-text-gray-800 dark:sl-text-gray-200 sl-bg-gray-200 dark:sl-bg-slate-700 hover:sl-bg-gray-100 dark:hover:sl-bg-slate-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-gray-300 dark:focus:sl-ring-slate-500 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900 sl-border sl-border-gray-300 dark:sl-border-slate-600',\n warning: 'sl-border sl-border-transparent sl-bg-yellow-400 dark:sl-bg-yellow-500 sl-text-white sl-shadow-sm hover:sl-bg-yellow-600 dark:hover:sl-bg-yellow-600 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-yellow-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n danger: 'sl-border sl-border-transparent sl-bg-red-500 dark:sl-bg-red-600 sl-text-white sl-shadow-sm hover:sl-bg-red-600 dark:hover:sl-bg-red-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-red-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n success: 'sl-border sl-border-transparent sl-bg-green-500 dark:sl-bg-green-600 sl-text-white sl-shadow-sm hover:sl-bg-green-600 dark:hover:sl-bg-green-700 focus:sl-outline-none focus:sl-ring-2 focus:sl-ring-green-400 focus:sl-ring-offset-2 focus:sl-ring-offset-white dark:focus:sl-ring-offset-slate-900',\n ghost: 'sl-border sl-border-transparent sl-text-gray-800 dark:sl-text-gray-200 sl-bg-transparent hover:sl-text-gray-700 dark:hover:sl-text-white hover:sl-bg-gray-100 dark:hover:sl-bg-slate-700 focus:sl-outline-none',\n };\n\n if (props.outlined) {\n return `${outlineBaseClasses[theme.value] || ''} sl-bg-transparent dark:sl-bg-transparent`;\n } else {\n return filledBaseClasses[theme.value] || '';\n }\n});\n\nconst roundedClassMap: Record<RoundedType, string> = {\n square: '',\n rounded: 'sl-rounded',\n 'rounded-md': 'sl-rounded-md',\n 'rounded-lg': 'sl-rounded-lg',\n 'rounded-full': 'sl-rounded-full',\n};\n\nconst roundedClass = computed(() => roundedClassMap[props.rounded || 'rounded-md']);\n\n// Separate horizontal and vertical padding for better control\nconst sizeClass = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-px-2 sl-py-1',\n sm: 'sl-px-2.5 sl-py-1.5',\n md: 'sl-px-3 sl-py-1.5',\n lg: 'sl-px-4 sl-py-2',\n xl: 'sl-px-5 sl-py-2.5',\n '2xl': 'sl-px-6 sl-py-3',\n };\n return sizeMapping[props.size || 'md'];\n});\n\nconst textClass = computed(() => {\n const textMapping: Record<string, string> = {\n xs: 'sl-text-xs sl-font-regular',\n sm: 'sl-text-sm sl-font-regular',\n md: 'sl-text-base sl-font-medium',\n lg: 'sl-text-lg sl-font-medium',\n xl: 'sl-text-xl sl-font-medium',\n '2xl': 'sl-text-2xl sl-font-medium',\n };\n return textMapping[props.size || 'sm'];\n});\n\nconst expandedClass = computed(() => (props.expanded ? 'sl-w-full' : ''));\n\nconst isLabelPresent = computed(() => !!props.label && props.label.length > 0);\n\n// Determine if this is an icon-only button (leading/trailing icon with no label)\nconst isIconOnly = computed(() => {\n return !isLabelPresent.value && (props.leadingIcon || props.trailingIcon);\n});\n\nconst buttonClasses = computed(() => {\n if (props.customClass) {\n return props.customClass;\n }\n\n const coreClasses = [\n roundedClass.value,\n sizeClass.value,\n textClass.value,\n expandedClass.value,\n colorClass.value,\n props.disabled ? 'sl-cursor-not-allowed' : 'sl-cursor-pointer',\n 'focus:sl-ring-0',\n 'sl-relative',\n 'sl-flex',\n 'sl-items-center',\n 'sl-justify-center',\n 'sl-gap-2', // Consistent spacing between icon and text\n ];\n\n const finalClasses = [...coreClasses];\n\n // For icon-only buttons (no label/text), use equal padding for square proportions\n if (!isLabelPresent.value && (props.leadingIcon || props.trailingIcon)) {\n // Size-aware square padding for icon-only buttons\n const iconOnlyPadding: Record<string, string> = {\n xs: '!sl-p-1.5',\n sm: '!sl-p-2',\n md: '!sl-p-2.5',\n lg: '!sl-p-3',\n xl: '!sl-p-3.5',\n '2xl': '!sl-p-4',\n };\n finalClasses.push(iconOnlyPadding[props.size || 'md'] || '!sl-p-2.5');\n }\n\n if (props.centerLeadingIcon && !isLabelPresent.value) {\n finalClasses.push('sl-w-full', 'sl-h-full');\n } else {\n if (props.leadingIcon || props.inlineFlex || props.trailingIcon) {\n finalClasses.push('sl-inline-flex');\n }\n }\n\n return finalClasses.filter(Boolean);\n});\n\nconst buttonStyles = computed(() => {\n if (props.theme === 'primary') {\n // Only apply background color for filled primary buttons, not outlined\n if (props.outlined) {\n return {\n color: 'var(--sl-color-primary-600, #3e4b9a)',\n borderColor: 'var(--sl-color-primary-600, #3e4b9a)',\n '--tw-ring-color': 'var(--sl-color-primary-500, #4d5ec0)',\n };\n }\n return {\n backgroundColor: 'var(--sl-color-primary-600, #3e4b9a)',\n '--tw-ring-color': 'var(--sl-color-primary-500, #4d5ec0)',\n };\n }\n return {};\n});\n\n// Gap on parent handles spacing, no margins needed\nconst trailingBaseClasses = 'sl-flex sl-items-center sl-flex-shrink-0';\nconst trailingAbsoluteClasses = 'sl-absolute sl-right-2 sl-top-1/2 -sl-translate-y-1/2 sl-flex sl-items-center sl-flex-shrink-0';\nconst trailingLoadingClasses = computed(() => props.trailingOverlay ? trailingAbsoluteClasses : trailingBaseClasses);\nconst trailingIconClasses = computed(() => props.trailingOverlay ? `${trailingAbsoluteClasses}` : 'sl-flex sl-items-center sl-flex-shrink-0');\n\nconst leadingIconClasses = computed(() => {\n if (props.centerLeadingIcon && !isLabelPresent.value) {\n return 'sl-absolute sl-inset-0 sl-flex sl-items-center sl-justify-center sl-w-full sl-h-full';\n }\n if (props.centerLeadingIcon) {\n return 'sl-h-full sl-flex sl-items-center sl-justify-center';\n }\n if (!isLabelPresent.value) {\n return 'sl-flex sl-items-center sl-justify-center';\n }\n // Gap on parent handles spacing\n return 'sl-flex sl-items-center sl-justify-center sl-flex-shrink-0';\n});\n\nconst onClick = (): void => {\n emit('button-click');\n};\n\nconst onMouseEnter = (): void => {\n emit('hover-enter');\n};\n\nconst onMouseLeave = (): void => {\n emit('hover-leave');\n};\n\nconst showLoadingTitle = props.showLoadingTitle || false;\n</script>\n\n<style scoped>\n/* Filled primary button hover */\nbutton[data-theme=\"primary\"]:not([data-outlined]):hover {\n background-color: var(--sl-color-primary-700, #2e3873) !important;\n}\n\n/* Outlined primary button hover - subtle background */\nbutton[data-theme=\"primary\"][data-outlined]:hover {\n background-color: rgb(var(--sl-color-primary-50-rgb, 237 239 249) / 0.5) !important;\n}\n\n/* Dark mode: Outlined primary button hover */\n:global(.dark) button[data-theme=\"primary\"][data-outlined]:hover {\n background-color: rgb(var(--sl-color-primary-900-rgb, 15 19 38) / 0.3) !important;\n}\n</style>\n\n\n"],"names":["trailingBaseClasses","trailingAbsoluteClasses","Loading","defineAsyncComponent","props","__props","emit","__emit","loading","computed","replaceLeadingIconWithLoading","buttonRef","ref","resolvedTheme","findParentBackground","node","bg","adjustThemeBasedOnBackground","el","parentBg","onMounted","nextTick","watch","newTheme","theme","loadingSize","loadingTheme","darkBgThemes","loadingOverlayClasses","colorClass","outlineBaseClasses","filledBaseClasses","roundedClassMap","roundedClass","sizeClass","textClass","expandedClass","isLabelPresent","isIconOnly","buttonClasses","finalClasses","iconOnlyPadding","buttonStyles","trailingLoadingClasses","trailingIconClasses","leadingIconClasses","onClick","onMouseEnter","onMouseLeave","showLoadingTitle","_createElementBlock","_renderSlot","_ctx","_Fragment","_normalizeClass","_createVNode","_unref","_toDisplayString","_createElementVNode","_hoisted_2","_hoisted_3"],"mappings":"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"}
|
package/dist/components/Menu.js
CHANGED
package/dist/components/Modal.js
CHANGED
package/dist/components/Table.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as u, watch as o } from "vue";
|
|
2
|
-
import { g as r, a as s, b as f } from "../calendar-
|
|
2
|
+
import { g as r, a as s, b as f } from "../calendar-BlSSD4nO.js";
|
|
3
3
|
function D(v = "month") {
|
|
4
4
|
const a = u(v), t = u(/* @__PURE__ */ new Date()), l = u([]), n = u([]);
|
|
5
5
|
return o([a, t], () => {
|