@stachelock/ui 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-CkSUiLOH.js} +109 -108
- package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-CkSUiLOH.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-kEj-NYqm.js +1362 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-kEj-NYqm.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-7mcKkOWP.js +74 -0
- package/dist/EmptyState.vue_vue_type_script_setup_true_lang-7mcKkOWP.js.map +1 -0
- 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/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js +110 -0
- package/dist/NotificationContainer.vue_vue_type_style_index_0_lang-DSfNw4Ge.js.map +1 -0
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.js +238 -0
- package/dist/NotificationToast.vue_vue_type_script_setup_true_lang-CU__ORw8.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 +34 -36
- 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 +559 -565
- 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 +2 -22
- 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 +4 -4
- package/dist/src/components/CloudinaryImage.d.ts +7 -9
- package/dist/src/components/LottieAnimation.d.ts +6 -38
- package/dist/src/components/ThemeDebugModal.d.ts +6 -17
- package/dist/src/components/UiAvatar.d.ts +26 -37
- package/dist/src/components/UiBadge.d.ts +6 -34
- package/dist/src/components/UiBanner.d.ts +34 -108
- package/dist/src/components/UiBreadcrumb.d.ts +10 -12
- package/dist/src/components/UiButton.d.ts +13 -67
- package/dist/src/components/UiButtonGroup.d.ts +7 -38
- package/dist/src/components/UiCheckbox.d.ts +8 -34
- package/dist/src/components/UiLoading.d.ts +2 -29
- package/dist/src/components/UiLoadingDots.d.ts +1 -2
- package/dist/src/components/UiMenu.d.ts +4 -33
- package/dist/src/components/UiModal.d.ts +3 -3
- package/dist/src/components/UiNavLink.d.ts +6 -41
- package/dist/src/components/UiProgressBar.d.ts +3 -33
- package/dist/src/components/UiRadialProgressBar.d.ts +3 -35
- package/dist/src/components/UiTable.d.ts +25 -68
- package/dist/src/components/UiTransition.d.ts +3 -27
- package/dist/src/components/calendars/CalendarDashboard.d.ts +5 -18
- package/dist/src/components/calendars/CalendarHeader.d.ts +8 -8
- package/dist/src/components/calendars/DayCalendar.d.ts +11 -18
- package/dist/src/components/calendars/EventCard.d.ts +1 -3
- package/dist/src/components/calendars/EventsList.d.ts +6 -19
- package/dist/src/components/calendars/MonthCalendar.d.ts +6 -31
- package/dist/src/components/calendars/WeekCalendar.d.ts +10 -17
- package/dist/src/components/calendars/YearCalendar.d.ts +5 -30
- package/dist/src/components/calendars/index.d.ts +0 -1
- package/dist/src/components/charts/BarChart.d.ts +6 -40
- package/dist/src/components/charts/FunnelChart.d.ts +5 -35
- package/dist/src/components/charts/LineChart.d.ts +6 -38
- package/dist/src/components/charts/PieChart.d.ts +6 -38
- package/dist/src/components/charts/SparklineChart.d.ts +3 -33
- package/dist/src/components/charts/StatCard.d.ts +2 -25
- package/dist/src/components/charts/chartTheme.d.ts +0 -2
- package/dist/src/components/charts/index.d.ts +0 -1
- package/dist/src/components/empty-state/ComingSoon.d.ts +2 -30
- package/dist/src/components/empty-state/EmptyState.d.ts +4 -27
- package/dist/src/components/empty-state/index.d.ts +0 -1
- package/dist/src/components/forms/DynamicForm.d.ts +21 -48
- package/dist/src/components/forms/DynamicFormField.d.ts +8 -19
- package/dist/src/components/forms/FormFieldWrapper.d.ts +14 -59
- package/dist/src/components/forms/index.d.ts +0 -1
- package/dist/src/components/index.d.ts +0 -1
- package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts +3 -5
- package/dist/src/components/inputs/CheckboxInput.d.ts +10 -38
- package/dist/src/components/inputs/ComboboxInput.d.ts +13 -49
- package/dist/src/components/inputs/DatepickerInput.d.ts +1045 -43
- package/dist/src/components/inputs/EmailInput.d.ts +10 -55
- package/dist/src/components/inputs/EmptyInput.d.ts +2 -27
- package/dist/src/components/inputs/FileDropzoneInput.d.ts +8 -8
- package/dist/src/components/inputs/HiddenInput.d.ts +2 -24
- package/dist/src/components/inputs/InputsShowcase.d.ts +1 -2
- package/dist/src/components/inputs/PhoneInput.d.ts +79 -17
- package/dist/src/components/inputs/RichTextInput.d.ts +22 -81
- package/dist/src/components/inputs/SelectInput.d.ts +49 -43
- package/dist/src/components/inputs/SelectTextInput.d.ts +52 -13
- package/dist/src/components/inputs/SwitchInput.d.ts +115 -43
- package/dist/src/components/inputs/SwitchInputGroup.d.ts +2 -4
- package/dist/src/components/inputs/TagifyInput.d.ts +30 -21
- package/dist/src/components/inputs/TextAreaInput.d.ts +9 -36
- package/dist/src/components/inputs/TextInput.d.ts +13 -74
- package/dist/src/components/inputs/index.d.ts +0 -1
- package/dist/src/components/layouts/CardLayout.d.ts +20 -67
- package/dist/src/components/layouts/DashboardLayout.d.ts +8 -6
- package/dist/src/components/layouts/DefaultLayout.d.ts +1 -2
- package/dist/src/components/layouts/HeaderLayout.d.ts +4 -5
- package/dist/src/components/layouts/InfoCard.d.ts +2 -26
- package/dist/src/components/layouts/NavigationGroup.d.ts +5 -17
- package/dist/src/components/layouts/NavigationItem.d.ts +7 -25
- package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts +10 -41
- package/dist/src/components/layouts/ProjectLogo.d.ts +2 -34
- package/dist/src/components/layouts/PropsTable.d.ts +2 -24
- package/dist/src/components/layouts/ShowcaseCard.d.ts +2 -30
- package/dist/src/components/layouts/ShowcaseLayout.d.ts +5 -29
- package/dist/src/components/layouts/SidebarLayout.d.ts +7 -5
- package/dist/src/components/layouts/StateDisplay.d.ts +2 -24
- package/dist/src/components/layouts/index.d.ts +0 -1
- package/dist/src/components/loading/ContentSkeleton.d.ts +2 -32
- package/dist/src/components/loading/SmartLoadingIndicator.d.ts +6 -48
- package/dist/src/components/loading/index.d.ts +0 -1
- package/dist/src/components/maps/GoogleMap.d.ts +7 -9
- package/dist/src/components/maps/UiInfoWindow.d.ts +229 -15
- package/dist/src/components/maps/UiMap.d.ts +5091 -102
- package/dist/src/components/maps/UiMapAll.d.ts +1130 -21
- package/dist/src/components/maps/UiMapMarker.d.ts +16 -18
- package/dist/src/components/maps/index.d.ts +0 -1
- package/dist/src/components/modals/AlertModal.d.ts +9 -11
- package/dist/src/components/modals/BaseModal.d.ts +6 -8
- package/dist/src/components/modals/ImageCropperModal.d.ts +379 -76
- package/dist/src/components/modals/index.d.ts +0 -1
- package/dist/src/components/notifications/NotificationContainer.d.ts +0 -1
- package/dist/src/components/notifications/NotificationToast.d.ts +9 -19
- package/dist/src/components/notifications/index.d.ts +0 -1
- package/dist/src/components/stepper/StepperPanels.d.ts +4 -15
- package/dist/src/components/stepper/index.d.ts +0 -1
- package/dist/src/components/tabs/InlineTabs.d.ts +4 -29
- package/dist/src/components/tabs/TabGroup.d.ts +6 -33
- package/dist/src/components/tabs/TabGroupUnderline.d.ts +6 -33
- package/dist/src/components/tabs/TabsInPills.d.ts +4 -27
- package/dist/src/components/tabs/index.d.ts +0 -1
- package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts +2 -38
- package/dist/src/components/wrappers/CardWrapper.d.ts +1 -2
- package/dist/src/components/wrappers/DisclosureWrapper.d.ts +2 -24
- package/dist/src/components/wrappers/FormErrorWrapper.d.ts +2 -26
- package/dist/src/components/wrappers/index.d.ts +0 -1
- package/dist/src/composables/index.d.ts +0 -1
- package/dist/src/composables/useCalendar.d.ts +4 -6
- package/dist/src/composables/useEventSegments.d.ts +0 -1
- package/dist/src/composables/useFormValidation.d.ts +0 -2
- package/dist/src/composables/useMap.d.ts +0 -2
- package/dist/src/composables/useModal.d.ts +0 -1
- package/dist/src/composables/useNotifications.d.ts +1308 -31
- package/dist/src/composables/useSimpleTabs.d.ts +0 -2
- package/dist/src/composables/useStringTransform.d.ts +0 -2
- package/dist/src/composables/useTabs.d.ts +0 -2
- package/dist/src/composables/useTheme.d.ts +0 -1
- package/dist/src/config/css-variables.d.ts +0 -2
- package/dist/src/config/design-tokens.d.ts +1 -2
- package/dist/src/config/index.d.ts +0 -1
- package/dist/src/dev.d.ts +0 -2
- package/dist/src/index.d.ts +0 -1
- package/dist/src/plugin/configure.d.ts +0 -2
- package/dist/src/plugin/index.d.ts +0 -1
- package/dist/src/types/avatars.d.ts +0 -1
- package/dist/src/types/badges.d.ts +0 -1
- package/dist/src/types/calendars.d.ts +12 -12
- package/dist/src/types/core.d.ts +3 -5
- package/dist/src/types/form.d.ts +15 -14
- package/dist/src/types/forms.d.ts +2 -2
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/inputs.d.ts +14 -10
- package/dist/src/types/layouts.d.ts +0 -2
- package/dist/src/types/loading.d.ts +0 -1
- package/dist/src/types/maps.d.ts +0 -1
- package/dist/src/types/navigation.d.ts +2 -2
- package/dist/src/types/tables.d.ts +8 -7
- package/dist/src/types/tabs.d.ts +0 -1
- package/dist/src/types/transitions.d.ts +0 -1
- package/dist/src/types/ui.d.ts +1 -3
- package/dist/src/utils/calendar.d.ts +1 -2
- package/dist/src/utils/component-registry.d.ts +0 -2
- package/dist/src/utils/countryCodes.d.ts +0 -1
- package/dist/src/utils/id.d.ts +0 -1
- package/dist/src/utils/index.d.ts +0 -1
- package/dist/src/utils/mapThemes.d.ts +0 -2
- package/dist/src/utils/phone.d.ts +0 -2
- package/dist/src/utils/transitions.d.ts +0 -1
- package/dist/src/views/ButtonsShowcase.d.ts +2 -0
- package/dist/src/views/CalendarsShowcase.d.ts +2 -0
- package/dist/src/views/CardsShowcase.d.ts +2 -0
- package/dist/src/views/ChartsShowcase.d.ts +2 -0
- package/dist/src/views/EmptyStatesShowcase.d.ts +2 -0
- package/dist/src/views/InputsShowcase.d.ts +2 -0
- package/dist/src/views/KitchenSink.d.ts +2 -0
- package/dist/src/views/LayoutsShowcase.d.ts +2 -0
- package/dist/src/views/LoadingShowcase.d.ts +2 -0
- package/dist/src/views/MapsShowcase.d.ts +2 -0
- package/dist/src/views/ModalsShowcase.d.ts +2 -0
- package/dist/src/views/NotificationsShowcase.d.ts +2 -0
- package/dist/src/views/StepperShowcase.d.ts +2 -0
- package/dist/src/views/TabsShowcase.d.ts +2 -0
- package/dist/src/views/ValidationDemo.d.ts +2 -0
- package/dist/src/views/WrappersShowcase.d.ts +2 -0
- package/dist/src/views/components/AvatarPage.d.ts +2 -0
- package/dist/src/views/components/BadgePage.d.ts +2 -0
- package/dist/src/views/components/BannerPage.d.ts +2 -0
- package/dist/src/views/components/BreadcrumbPage.d.ts +2 -0
- package/dist/src/views/components/ButtonPage.d.ts +2 -0
- package/dist/src/views/components/CloudinaryImagePage.d.ts +2 -0
- package/dist/src/views/components/LoadingPage.d.ts +2 -0
- package/dist/src/views/components/MenuPage.d.ts +2 -0
- package/dist/src/views/components/ModalPage.d.ts +2 -0
- package/dist/src/views/components/ProgressPage.d.ts +2 -0
- package/dist/src/views/components/RichTextInputPage.d.ts +2 -0
- package/dist/src/views/components/TablePage.d.ts +2 -0
- package/dist/src/views/components/TextInputPage.d.ts +2 -0
- package/dist/src/views/components/TransitionPage.d.ts +2 -0
- package/dist/src/views/components/index.d.ts +0 -1
- package/dist/src/views/examples/CheckoutFormExample.d.ts +2 -0
- package/dist/src/views/examples/ContactFormExample.d.ts +2 -0
- package/dist/src/views/examples/RegistrationFormExample.d.ts +2 -0
- package/dist/src/views/examples/SettingsFormExample.d.ts +2 -0
- package/dist/src/views/examples/index.d.ts +0 -1
- package/dist/src/views/forms/ValidationPage.d.ts +2 -0
- package/dist/src/views/forms/index.d.ts +0 -1
- package/dist/src/views/index.d.ts +0 -1
- package/dist/src/views/inputs/CheckboxPage.d.ts +2 -0
- package/dist/src/views/inputs/ComboboxPage.d.ts +2 -0
- package/dist/src/views/inputs/DatepickerPage.d.ts +2 -0
- package/dist/src/views/inputs/EmailPage.d.ts +2 -0
- package/dist/src/views/inputs/FileDropzonePage.d.ts +2 -0
- package/dist/src/views/inputs/MiscInputsPage.d.ts +2 -0
- package/dist/src/views/inputs/PhonePage.d.ts +2 -0
- package/dist/src/views/inputs/SelectPage.d.ts +2 -0
- package/dist/src/views/inputs/SelectTextPage.d.ts +2 -0
- package/dist/src/views/inputs/SwitchGroupPage.d.ts +2 -0
- package/dist/src/views/inputs/SwitchPage.d.ts +2 -0
- package/dist/src/views/inputs/TextAreaPage.d.ts +2 -0
- package/dist/src/views/inputs/index.d.ts +0 -1
- package/dist/src/views/layouts/CardLayoutPage.d.ts +2 -0
- package/dist/src/views/layouts/DashboardLayoutPage.d.ts +2 -0
- package/dist/src/views/layouts/HeaderLayoutPage.d.ts +2 -0
- package/dist/src/views/layouts/SidebarLayoutPage.d.ts +2 -0
- package/dist/src/views/layouts/index.d.ts +0 -1
- 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 +13 -1
- 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/EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js +0 -74
- package/dist/EmptyState.vue_vue_type_script_setup_true_lang-B_XAq5Sr.js.map +0 -1
- 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/CloudinaryImage.d.ts.map +0 -1
- package/dist/src/components/LottieAnimation.d.ts.map +0 -1
- package/dist/src/components/ThemeDebugModal.d.ts.map +0 -1
- package/dist/src/components/UiAvatar.d.ts.map +0 -1
- package/dist/src/components/UiBadge.d.ts.map +0 -1
- package/dist/src/components/UiBanner.d.ts.map +0 -1
- package/dist/src/components/UiBreadcrumb.d.ts.map +0 -1
- package/dist/src/components/UiButton.d.ts.map +0 -1
- package/dist/src/components/UiButtonGroup.d.ts.map +0 -1
- package/dist/src/components/UiCheckbox.d.ts.map +0 -1
- package/dist/src/components/UiLoading.d.ts.map +0 -1
- package/dist/src/components/UiLoadingDots.d.ts.map +0 -1
- package/dist/src/components/UiMenu.d.ts.map +0 -1
- package/dist/src/components/UiModal.d.ts.map +0 -1
- package/dist/src/components/UiNavLink.d.ts.map +0 -1
- package/dist/src/components/UiProgressBar.d.ts.map +0 -1
- package/dist/src/components/UiRadialProgressBar.d.ts.map +0 -1
- package/dist/src/components/UiTable.d.ts.map +0 -1
- package/dist/src/components/UiTransition.d.ts.map +0 -1
- package/dist/src/components/calendars/CalendarDashboard.d.ts.map +0 -1
- package/dist/src/components/calendars/CalendarHeader.d.ts.map +0 -1
- package/dist/src/components/calendars/DayCalendar.d.ts.map +0 -1
- package/dist/src/components/calendars/EventCard.d.ts.map +0 -1
- package/dist/src/components/calendars/EventsList.d.ts.map +0 -1
- package/dist/src/components/calendars/MonthCalendar.d.ts.map +0 -1
- package/dist/src/components/calendars/WeekCalendar.d.ts.map +0 -1
- package/dist/src/components/calendars/YearCalendar.d.ts.map +0 -1
- package/dist/src/components/calendars/index.d.ts.map +0 -1
- package/dist/src/components/charts/BarChart.d.ts.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/src/components/charts/FunnelChart.d.ts.map +0 -1
- package/dist/src/components/charts/LineChart.d.ts.map +0 -1
- package/dist/src/components/charts/PieChart.d.ts.map +0 -1
- package/dist/src/components/charts/SparklineChart.d.ts.map +0 -1
- package/dist/src/components/charts/StatCard.d.ts.map +0 -1
- package/dist/src/components/charts/chartTheme.d.ts.map +0 -1
- package/dist/src/components/charts/index.d.ts.map +0 -1
- package/dist/src/components/empty-state/ComingSoon.d.ts.map +0 -1
- package/dist/src/components/empty-state/EmptyState.d.ts.map +0 -1
- package/dist/src/components/empty-state/index.d.ts.map +0 -1
- package/dist/src/components/forms/DynamicForm.d.ts.map +0 -1
- package/dist/src/components/forms/DynamicFormField.d.ts.map +0 -1
- package/dist/src/components/forms/FormFieldWrapper.d.ts.map +0 -1
- package/dist/src/components/forms/index.d.ts.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/inputs/AddDeleteButtonGroup.d.ts.map +0 -1
- package/dist/src/components/inputs/CheckboxInput.d.ts.map +0 -1
- package/dist/src/components/inputs/ComboboxInput.d.ts.map +0 -1
- package/dist/src/components/inputs/DatepickerInput.d.ts.map +0 -1
- package/dist/src/components/inputs/EmailInput.d.ts.map +0 -1
- package/dist/src/components/inputs/EmptyInput.d.ts.map +0 -1
- package/dist/src/components/inputs/FileDropzoneInput.d.ts.map +0 -1
- package/dist/src/components/inputs/HiddenInput.d.ts.map +0 -1
- package/dist/src/components/inputs/InputsShowcase.d.ts.map +0 -1
- package/dist/src/components/inputs/PhoneInput.d.ts.map +0 -1
- package/dist/src/components/inputs/RichTextInput.d.ts.map +0 -1
- package/dist/src/components/inputs/SelectInput.d.ts.map +0 -1
- package/dist/src/components/inputs/SelectTextInput.d.ts.map +0 -1
- package/dist/src/components/inputs/SwitchInput.d.ts.map +0 -1
- package/dist/src/components/inputs/SwitchInputGroup.d.ts.map +0 -1
- package/dist/src/components/inputs/TagifyInput.d.ts.map +0 -1
- package/dist/src/components/inputs/TextAreaInput.d.ts.map +0 -1
- package/dist/src/components/inputs/TextInput.d.ts.map +0 -1
- package/dist/src/components/inputs/index.d.ts.map +0 -1
- package/dist/src/components/layouts/CardLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/DashboardLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/DefaultLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/HeaderLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/InfoCard.d.ts.map +0 -1
- package/dist/src/components/layouts/NavigationGroup.d.ts.map +0 -1
- package/dist/src/components/layouts/NavigationItem.d.ts.map +0 -1
- package/dist/src/components/layouts/ProfileHeaderAvatar.d.ts.map +0 -1
- package/dist/src/components/layouts/ProjectLogo.d.ts.map +0 -1
- package/dist/src/components/layouts/PropsTable.d.ts.map +0 -1
- package/dist/src/components/layouts/ShowcaseCard.d.ts.map +0 -1
- package/dist/src/components/layouts/ShowcaseLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/SidebarLayout.d.ts.map +0 -1
- package/dist/src/components/layouts/StateDisplay.d.ts.map +0 -1
- package/dist/src/components/layouts/index.d.ts.map +0 -1
- package/dist/src/components/loading/ContentSkeleton.d.ts.map +0 -1
- package/dist/src/components/loading/SmartLoadingIndicator.d.ts.map +0 -1
- package/dist/src/components/loading/index.d.ts.map +0 -1
- package/dist/src/components/maps/GoogleMap.d.ts.map +0 -1
- package/dist/src/components/maps/UiInfoWindow.d.ts.map +0 -1
- package/dist/src/components/maps/UiMap.d.ts.map +0 -1
- package/dist/src/components/maps/UiMapAll.d.ts.map +0 -1
- package/dist/src/components/maps/UiMapMarker.d.ts.map +0 -1
- package/dist/src/components/maps/index.d.ts.map +0 -1
- package/dist/src/components/modals/AlertModal.d.ts.map +0 -1
- package/dist/src/components/modals/BaseModal.d.ts.map +0 -1
- package/dist/src/components/modals/ImageCropperModal.d.ts.map +0 -1
- package/dist/src/components/modals/index.d.ts.map +0 -1
- package/dist/src/components/notifications/NotificationContainer.d.ts.map +0 -1
- package/dist/src/components/notifications/NotificationToast.d.ts.map +0 -1
- package/dist/src/components/notifications/index.d.ts.map +0 -1
- package/dist/src/components/stepper/StepperPanels.d.ts.map +0 -1
- package/dist/src/components/stepper/index.d.ts.map +0 -1
- package/dist/src/components/tabs/InlineTabs.d.ts.map +0 -1
- package/dist/src/components/tabs/TabGroup.d.ts.map +0 -1
- package/dist/src/components/tabs/TabGroupUnderline.d.ts.map +0 -1
- package/dist/src/components/tabs/TabsInPills.d.ts.map +0 -1
- package/dist/src/components/tabs/index.d.ts.map +0 -1
- package/dist/src/components/wrappers/BackgroundGradientWrapper.d.ts.map +0 -1
- package/dist/src/components/wrappers/CardWrapper.d.ts.map +0 -1
- package/dist/src/components/wrappers/DisclosureWrapper.d.ts.map +0 -1
- package/dist/src/components/wrappers/FormErrorWrapper.d.ts.map +0 -1
- package/dist/src/components/wrappers/index.d.ts.map +0 -1
- package/dist/src/composables/index.d.ts.map +0 -1
- package/dist/src/composables/useCalendar.d.ts.map +0 -1
- package/dist/src/composables/useEventSegments.d.ts.map +0 -1
- package/dist/src/composables/useFormValidation.d.ts.map +0 -1
- package/dist/src/composables/useMap.d.ts.map +0 -1
- package/dist/src/composables/useModal.d.ts.map +0 -1
- package/dist/src/composables/useNotifications.d.ts.map +0 -1
- package/dist/src/composables/useSimpleTabs.d.ts.map +0 -1
- package/dist/src/composables/useStringTransform.d.ts.map +0 -1
- package/dist/src/composables/useTabs.d.ts.map +0 -1
- package/dist/src/composables/useTheme.d.ts.map +0 -1
- package/dist/src/config/css-variables.d.ts.map +0 -1
- package/dist/src/config/design-tokens.d.ts.map +0 -1
- package/dist/src/config/index.d.ts.map +0 -1
- package/dist/src/dev.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/plugin/configure.d.ts.map +0 -1
- package/dist/src/plugin/index.d.ts.map +0 -1
- package/dist/src/types/avatars.d.ts.map +0 -1
- package/dist/src/types/badges.d.ts.map +0 -1
- package/dist/src/types/calendars.d.ts.map +0 -1
- package/dist/src/types/core.d.ts.map +0 -1
- package/dist/src/types/form.d.ts.map +0 -1
- package/dist/src/types/forms.d.ts.map +0 -1
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/inputs.d.ts.map +0 -1
- package/dist/src/types/layouts.d.ts.map +0 -1
- package/dist/src/types/loading.d.ts.map +0 -1
- package/dist/src/types/maps.d.ts.map +0 -1
- package/dist/src/types/navigation.d.ts.map +0 -1
- package/dist/src/types/tables.d.ts.map +0 -1
- package/dist/src/types/tabs.d.ts.map +0 -1
- package/dist/src/types/transitions.d.ts.map +0 -1
- package/dist/src/types/ui.d.ts.map +0 -1
- package/dist/src/utils/calendar.d.ts.map +0 -1
- package/dist/src/utils/component-registry.d.ts.map +0 -1
- package/dist/src/utils/countryCodes.d.ts.map +0 -1
- package/dist/src/utils/id.d.ts.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/mapThemes.d.ts.map +0 -1
- package/dist/src/utils/phone.d.ts.map +0 -1
- package/dist/src/utils/transitions.d.ts.map +0 -1
- package/dist/src/views/components/index.d.ts.map +0 -1
- package/dist/src/views/examples/index.d.ts.map +0 -1
- package/dist/src/views/forms/index.d.ts.map +0 -1
- package/dist/src/views/index.d.ts.map +0 -1
- package/dist/src/views/inputs/index.d.ts.map +0 -1
- package/dist/src/views/layouts/index.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectInput.vue_vue_type_script_setup_true_lang-DHiZ-7K2.js","sources":["../src/components/inputs/SelectInput.vue"],"sourcesContent":["<!--\n @component SelectInput\n @description Dropdown select input with Headless UI integration.\n \n A select/dropdown component built on Headless UI's Listbox with support\n for single and multiple selection, icons, and validation.\n \n @props\n - name (string, required): Field name for form binding\n - items (SelectItem[], required): Options array with id/name or custom keys\n - label (string, optional): Display label\n - placeholder (string, optional): Placeholder text\n - disabled (boolean, optional): Disabled state\n - multiple (boolean, optional): Enable multiple selection\n - showAll (boolean, optional): Show \"Select All\" option for multiple\n - itemKey (string, optional): Property for item key (default: 'id')\n - itemText (string, optional): Property for item text (default: 'name')\n - rules (Schema, optional): Validation rules\n - modelValue (any, optional): Selected value(s) via v-model\n \n @emits\n - update:modelValue: Emitted when selection changes\n \n @example\n <SelectInput\n name=\"country\"\n label=\"Country\"\n :items=\"countries\"\n v-model=\"form.country\"\n placeholder=\"Select a country\"\n />\n \n @example Multiple selection with Select All\n <SelectInput\n name=\"languages\"\n label=\"Languages\"\n :items=\"languages\"\n v-model=\"form.languages\"\n multiple\n show-all\n />\n-->\n<template>\n <div class=\"sl-w-full\">\n <FormFieldWrapper\n :id=\"id\"\n :name=\"name\"\n :label=\"label\"\n :disabled=\"disabled\"\n :optional=\"!rules\"\n :tertiary-label=\"tertiaryLabel\"\n :box-shadow=\"boxShadow\"\n :error-message=\"errorMessage\"\n :success-message=\"successMessage\"\n :is-valid=\"meta.valid\"\n :is-touched=\"meta.touched\"\n >\n <Listbox\n v-model=\"selectedValue\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n @update:model-value=\"handleChange\"\n v-slot=\"{ open }\"\n >\n <div class=\"sl-relative\">\n <!-- Track open state changes to sync position updates -->\n <DropdownPositionTracker :open=\"open\" :update-fn=\"updateDropdownPosition\" />\n <ListboxButton\n ref=\"listboxButtonRef\"\n :id=\"id\"\n :class=\"[\n selectClasses,\n buttonClass\n ]\"\n @click=\"updateDropdownPosition\"\n >\n <span class=\"sl-flex sl-items-center sl-gap-2\">\n <!-- Selected item icon -->\n <component\n v-if=\"selectedIcon\"\n :is=\"selectedIcon\"\n class=\"sl-h-4 sl-w-4 sl-flex-shrink-0\"\n aria-hidden=\"true\"\n />\n \n <!-- Selected value display -->\n <span\n v-if=\"displayValue\"\n class=\"sl-block sl-truncate sl-text-left\"\n >\n {{ displayValue }}\n </span>\n <span\n v-else\n class=\"sl-block sl-truncate sl-text-left sl-text-gray-500 dark:sl-text-slate-300\"\n >\n {{ placeholder || 'Select an option' }}\n </span>\n </span>\n \n <span class=\"sl-pointer-events-none sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-2\">\n <ChevronUpDownIcon\n class=\"sl-h-5 sl-w-5 sl-text-gray-400 dark:sl-text-slate-300\"\n aria-hidden=\"true\"\n />\n </span>\n </ListboxButton>\n\n <Teleport to=\"body\">\n <transition\n leave-active-class=\"sl-transition sl-duration-100 sl-ease-in\"\n leave-from-class=\"sl-opacity-100\"\n leave-to-class=\"sl-opacity-0\"\n >\n <ListboxOptions\n class=\"sl-fixed sl-z-[9999] sl-overflow-auto sl-rounded-md sl-bg-white dark:sl-bg-slate-800 sl-py-1 sl-text-base sl-shadow-lg dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black sl-ring-opacity-5 dark:sl-ring-slate-700 focus:sl-outline-none sm:sl-text-sm\"\n :style=\"dropdownStyle\"\n >\n <!-- Show All option for multiple select -->\n <li\n v-if=\"multiple && showAll\"\n role=\"button\"\n tabindex=\"0\"\n @mousedown.prevent\n @click.prevent.stop=\"toggleSelectAll\"\n :class=\"[\n 'sl-relative sl-cursor-pointer sl-select-none sl-py-2 sl-pl-3 sl-pr-9 sl-text-gray-900 dark:sl-text-slate-200',\n 'hover:sl-bg-stachelock-600 hover:sl-text-white',\n ]\"\n >\n <span class=\"sl-block sl-truncate sl-font-medium\">\n {{ isAllSelected ? 'Unselect All' : 'Select All' }}\n </span>\n </li>\n\n <!-- Regular options -->\n <ListboxOption\n v-for=\"item in items\"\n :key=\"getItemKey(item)\"\n :value=\"item\"\n as=\"template\"\n :disabled=\"item.disabled\"\n v-slot=\"{ active, selected }\"\n >\n <li\n :class=\"[\n 'sl-relative sl-cursor-default sl-select-none sl-py-2 sl-pl-3 sl-pr-9',\n active ? 'sl-bg-stachelock-600 sl-text-white' : 'sl-text-gray-900 dark:sl-text-slate-200',\n item.disabled ? 'sl-opacity-50 sl-cursor-not-allowed' : ''\n ]\"\n >\n <div class=\"sl-flex sl-items-center sl-gap-2\">\n <!-- Item icon -->\n <component\n v-if=\"item.icon\"\n :is=\"item.icon\"\n class=\"sl-h-4 sl-w-4 sl-flex-shrink-0\"\n :class=\"active ? 'sl-text-white' : 'sl-text-gray-400 dark:sl-text-slate-300'\"\n aria-hidden=\"true\"\n />\n \n <span\n :class=\"[\n 'sl-block sl-truncate',\n selected ? 'sl-font-medium' : 'sl-font-normal'\n ]\"\n >\n {{ getItemText(item) }}\n </span>\n </div>\n\n <span\n v-if=\"selected\"\n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-4\"\n >\n <CheckIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </span>\n </li>\n </ListboxOption>\n </ListboxOptions>\n </transition>\n </Teleport>\n </div>\n </Listbox>\n \n <template #success-message>\n <span v-if=\"successMessage\">{{ successMessage }}</span>\n </template>\n </FormFieldWrapper>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * SelectInput - Dropdown select with Headless UI\n * \n * Provides a styled select/dropdown component with single and multiple\n * selection modes. Uses Headless UI's Listbox for accessibility.\n * \n * ## Features\n * - Single and multiple selection modes\n * - \"Select All\" option for multiple mode\n * - Item icons support\n * - vee-validate integration\n * - Accessible keyboard navigation\n * - Customizable item key/text properties\n * - Teleported dropdown to avoid z-index/overflow issues\n * \n * @module components/inputs/SelectInput\n * @see {@link SelectItem} for item interface\n */\nimport { computed, ref, watch, onBeforeUnmount, defineComponent } from 'vue'\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/vue'\nimport { CheckIcon, ChevronUpDownIcon } from '@heroicons/vue/20/solid'\nimport { useField } from 'vee-validate'\nimport FormFieldWrapper from '../forms/FormFieldWrapper.vue'\nimport type { ValidationRule } from '../../types/form'\nimport { generateId } from '../../utils/id'\n\n/**\n * DropdownPositionTracker - Renderless component that watches HeadlessUI open state\n * and triggers position updates when dropdown opens or scroll/resize occurs\n */\nconst DropdownPositionTracker = defineComponent({\n props: {\n open: { type: Boolean, required: true },\n updateFn: { type: Function, required: true }\n },\n setup(props) {\n // Define handleScroll in setup scope so it's a stable reference\n const handleScroll = () => {\n if (props.open) {\n props.updateFn()\n }\n }\n \n // Watch the open prop and trigger position update + attach scroll listeners\n watch(() => props.open, (isOpen) => {\n if (isOpen) {\n // Update position immediately when opening\n props.updateFn()\n // Add scroll/resize listeners - use capture to catch scroll events from any container\n window.addEventListener('scroll', handleScroll, true)\n window.addEventListener('resize', handleScroll)\n } else {\n // Remove listeners when closed\n window.removeEventListener('scroll', handleScroll, true)\n window.removeEventListener('resize', handleScroll)\n }\n }, { immediate: true })\n \n // Cleanup on unmount\n onBeforeUnmount(() => {\n window.removeEventListener('scroll', handleScroll, true)\n window.removeEventListener('resize', handleScroll)\n })\n \n // Render nothing\n return () => null\n }\n})\n\n// Refs for floating dropdown positioning\nconst listboxButtonRef = ref<InstanceType<typeof ListboxButton> | null>(null)\nconst dropdownStyle = ref<Record<string, string>>({\n top: '0px',\n left: '0px',\n width: '200px'\n})\n\n// Estimated dropdown height for flip calculation (max-h-56 = 14rem = 224px)\nconst DROPDOWN_MAX_HEIGHT = 224\nconst DROPDOWN_GAP = 4\n\nfunction updateDropdownPosition() {\n // Get the actual DOM element from the Headless UI component\n const el = listboxButtonRef.value?.$el as HTMLElement | undefined\n if (!el) return\n \n const rect = el.getBoundingClientRect()\n const viewportHeight = window.innerHeight\n \n // Calculate available space below and above the button\n const spaceBelow = viewportHeight - rect.bottom - DROPDOWN_GAP\n const spaceAbove = rect.top - DROPDOWN_GAP\n \n // Determine if we should flip to show above\n const shouldFlipAbove = spaceBelow < DROPDOWN_MAX_HEIGHT && spaceAbove > spaceBelow\n \n if (shouldFlipAbove) {\n // Position above the button\n dropdownStyle.value = {\n bottom: `${viewportHeight - rect.top + DROPDOWN_GAP}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${Math.min(spaceAbove, DROPDOWN_MAX_HEIGHT)}px`\n }\n } else {\n // Position below the button (default)\n dropdownStyle.value = {\n top: `${rect.bottom + DROPDOWN_GAP}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${Math.min(spaceBelow, DROPDOWN_MAX_HEIGHT)}px`\n }\n }\n}\n\nimport type { SelectItem, SelectItemValue } from '../../types/inputs'\n\ninterface Props {\n name: string\n items: SelectItem[]\n label?: string\n placeholder?: string\n disabled?: boolean\n rules?: ValidationRule\n validateOnMount?: boolean\n successMessage?: string\n tertiaryLabel?: string\n buttonClass?: string\n multiple?: boolean\n showAll?: boolean\n itemKey?: string\n itemText?: string\n modelValue?: SelectItemValue | SelectItem | SelectItem[]\n boxShadow?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n itemKey: 'id',\n itemText: 'name',\n multiple: false,\n showAll: false,\n boxShadow: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: SelectItemValue | SelectItem | SelectItem[]]\n}>()\n\nconst id = generateId(props.name)\n\n// Use vee-validate for form validation\nconst { value, errorMessage, handleChange: handleValidation, meta, setTouched } = useField(\n () => props.name,\n props.rules,\n {\n validateOnMount: props.validateOnMount,\n initialValue: props.modelValue\n }\n)\n\nconst selectedValue = ref<any>(\n props.multiple\n ? (Array.isArray(props.modelValue) ? props.modelValue : [])\n : props.modelValue\n)\n\n// Watch for external changes\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (props.multiple) {\n const coerced = Array.isArray(newValue) ? newValue : []\n if (coerced !== selectedValue.value) {\n selectedValue.value = coerced\n value.value = coerced\n }\n } else {\n if (newValue !== selectedValue.value) {\n selectedValue.value = newValue\n value.value = newValue\n }\n }\n },\n { immediate: true }\n)\n\nwatch(\n selectedValue,\n (newValue) => {\n emit('update:modelValue', newValue)\n }\n)\n\nconst selectClasses = computed(() => {\n const baseClasses = [\n 'sl-relative',\n 'sl-w-full',\n 'sl-cursor-default',\n 'sl-rounded-md',\n 'sl-bg-white',\n 'dark:sl-bg-slate-900',\n 'sl-text-gray-900',\n 'dark:sl-text-slate-100',\n 'sl-py-2',\n 'sl-pl-3',\n 'sl-pr-10',\n 'sl-text-left',\n 'sl-border',\n 'sl-text-sm',\n 'focus:sl-outline-none',\n 'focus:sl-ring-2',\n 'focus:sl-ring-stachelock-500',\n 'focus:sl-border-stachelock-500',\n 'sl-transition-all',\n 'sl-duration-200'\n ]\n\n if (props.disabled) {\n baseClasses.push(\n 'sl-bg-gray-50',\n 'dark:sl-bg-slate-800',\n 'sl-text-gray-500',\n 'dark:sl-text-slate-300',\n 'sl-cursor-not-allowed',\n 'sl-border-gray-200',\n 'dark:sl-border-slate-700'\n )\n } else if (errorMessage.value) {\n baseClasses.push(\n 'sl-border-red-300',\n 'dark:sl-border-red-500',\n 'focus:sl-ring-red-500',\n 'focus:sl-border-red-500'\n )\n } else if (meta.valid && meta.touched) {\n baseClasses.push(\n 'sl-border-green-300',\n 'dark:sl-border-green-500',\n 'focus:sl-ring-green-500',\n 'focus:sl-border-green-500'\n )\n } else {\n baseClasses.push(\n 'sl-border-gray-300',\n 'dark:sl-border-slate-600',\n 'hover:sl-border-gray-400',\n 'dark:hover:sl-border-slate-500'\n )\n }\n\n return baseClasses.join(' ')\n})\n\nconst getItemKey = (item: SelectItem): SelectItemValue => {\n return item[props.itemKey] as SelectItemValue\n}\n\nconst getItemText = (item: SelectItem): string => {\n return item[props.itemText] || item.toString()\n}\n\nconst displayValue = computed(() => {\n if (!selectedValue.value) return ''\n \n if (props.multiple && Array.isArray(selectedValue.value)) {\n if (selectedValue.value.length === 0) return ''\n if (selectedValue.value.length === 1) {\n return getItemText(selectedValue.value[0])\n }\n return `${selectedValue.value.length} items selected`\n }\n \n return getItemText(selectedValue.value)\n})\n\nconst selectedIcon = computed(() => {\n if (!selectedValue.value) return null\n \n if (props.multiple && Array.isArray(selectedValue.value)) {\n return selectedValue.value.length === 1 ? selectedValue.value[0].icon : null\n }\n \n return selectedValue.value.icon\n})\n\nconst allItems = computed(() => {\n return props.items.filter(item => !item.disabled)\n})\n\nconst handleChange = (value: SelectItemValue | SelectItem | SelectItem[]) => {\n selectedValue.value = value\n setTouched(true)\n handleValidation(value)\n}\n\nconst isAllSelected = computed(() => {\n if (!props.multiple || !Array.isArray(selectedValue.value)) return false\n const selectable = allItems.value\n if (selectable.length === 0) return false\n // Compare by item key instead of reference for reliable equality check\n const selectedKeys = new Set((selectedValue.value as SelectItem[]).map(item => getItemKey(item)))\n return selectable.every(item => selectedKeys.has(getItemKey(item)))\n})\n\nconst toggleSelectAll = () => {\n if (!props.multiple) return\n if (isAllSelected.value) {\n selectedValue.value = []\n } else {\n selectedValue.value = [...allItems.value]\n }\n handleValidation(selectedValue.value)\n}\n</script>\n\n\n"],"names":["DROPDOWN_MAX_HEIGHT","DROPDOWN_GAP","DropdownPositionTracker","defineComponent","props","handleScroll","watch","isOpen","onBeforeUnmount","listboxButtonRef","ref","dropdownStyle","updateDropdownPosition","el","rect","viewportHeight","spaceBelow","spaceAbove","__props","emit","__emit","id","generateId","value","errorMessage","handleValidation","meta","setTouched","useField","selectedValue","newValue","coerced","selectClasses","computed","baseClasses","getItemKey","item","getItemText","displayValue","selectedIcon","allItems","handleChange","isAllSelected","selectable","selectedKeys","toggleSelectAll","_openBlock","_createElementBlock","_hoisted_1","_createVNode","FormFieldWrapper","_unref","Listbox","$event","_withCtx","open","_createElementVNode","_hoisted_2","ListboxButton","_normalizeClass","_hoisted_3","_createBlock","_resolveDynamicComponent","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","ChevronUpDownIcon","_Teleport","_Transition","ListboxOptions","_hoisted_7","_Fragment","_renderList","ListboxOption","active","selected","_hoisted_8","_hoisted_9","CheckIcon"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { defineComponent as X, ref as B, onMounted as P, onBeforeUnmount as Z, r
|
|
|
2
2
|
import { r as ie, a as oe } from "./ExclamationCircleIcon-DmL8Wwjo.js";
|
|
3
3
|
import { r as de } from "./ChevronUpDownIcon-Bq_fsgrb.js";
|
|
4
4
|
import { r as ce } from "./CheckIcon-BGlsmVwT.js";
|
|
5
|
-
import { I as ue, j as fe, A as ve, F as ye } from "./listbox-
|
|
5
|
+
import { I as ue, j as fe, A as ve, F as ye } from "./listbox-YaWWZiiG.js";
|
|
6
6
|
const xe = {
|
|
7
7
|
class: "sl-space-y-1",
|
|
8
8
|
"data-testid": "select-text-input"
|
|
@@ -336,4 +336,4 @@ const xe = {
|
|
|
336
336
|
export {
|
|
337
337
|
Ne as _
|
|
338
338
|
};
|
|
339
|
-
//# sourceMappingURL=SelectTextInput.vue_vue_type_script_setup_true_lang-
|
|
339
|
+
//# sourceMappingURL=SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTextInput.vue_vue_type_script_setup_true_lang-B2Gw_se2.js","sources":["../src/components/inputs/SelectTextInput.vue"],"sourcesContent":["<!--\n @component SelectTextInput\n @description Combined select dropdown and text input field.\n \n A composite input that combines a select dropdown with a text input,\n useful for inputs like \"Fall 2023\" where the user selects a term\n and enters a year. Uses Headless UI Listbox for accessible select.\n \n @props\n - name (string, required): Field name for form binding\n - label (string, optional): Main label text\n - value (CompositeValue | string, optional): Combined value object or string\n - select (object, optional): Select configuration { options, placeholder, label }\n - text (object, optional): Text input config { placeholder, inputMode, maxLength, label }\n - delimiter (string, optional): Character between select and text in display\n - showErrors (boolean, optional): Force show validation errors\n - hasError (boolean, optional): External error state\n - disabled (boolean, optional): Disabled state\n - colorfulValidation (boolean, optional): Color-coded validation states\n - showValidCheck (boolean, optional): Show success icon when valid\n \n @emits\n - update:value: Emitted when composite value changes\n - update:validity: Emitted when validation state changes\n \n @example\n <SelectTextInput\n name=\"graduation\"\n label=\"Expected Graduation\"\n :value=\"{ select: 'Fall', text: '2024' }\"\n :select=\"{ options: [{ label: 'Fall', value: 'Fall' }, { label: 'Spring', value: 'Spring' }] }\"\n :text=\"{ placeholder: 'Year', inputMode: 'numeric', maxLength: 4 }\"\n @update:value=\"handleUpdate\"\n />\n-->\n<template>\n <div class=\"sl-space-y-1\" data-testid=\"select-text-input\">\n <!-- Main label row -->\n <div \n v-if=\"label || secondaryLabel || tertiaryLabel || (disabled && disabledMessage)\" \n class=\"sl-grid sl-grid-cols-3 sl-items-center\"\n >\n <div class=\"sl-col-span-2 sl-flex sl-items-center\">\n <component \n v-if=\"labelIconLeft\" \n :is=\"labelIconLeft\" \n class=\"sl-mr-2 sl-h-4 sl-w-4 sl-text-yellow-300\" \n />\n <label v-if=\"label\" class=\"sl-text-sm sl-font-medium\" :style=\"{ color: 'var(--sl-text-primary)' }\">\n {{ label }}\n </label>\n </div>\n <div class=\"sl-justify-self-end sl-col-start-3 sl-text-right sl-space-y-0.5\">\n <p \n v-if=\"disabled && disabledMessage\" \n class=\"sl-text-xs\" :style=\"{ color: 'var(--sl-text-muted)' }\"\n >\n {{ disabledMessage }}\n </p>\n <span \n v-if=\"secondaryLabel\" \n class=\"sl-text-2xs sl-uppercase sl-truncate sl-font-semibold sl-block\" :style=\"{ color: 'var(--sl-text-secondary)' }\"\n >\n {{ secondaryLabel }}\n </span>\n <span \n v-if=\"tertiaryLabel\" \n class=\"sl-text-xs sl-uppercase sl-truncate sl-font-semibold sl-block\" :style=\"{ color: 'var(--sl-text-secondary)' }\"\n >\n {{ tertiaryLabel }}\n </span>\n </div>\n </div>\n\n <!-- Input container -->\n <div class=\"sl-relative sl-mt-1\">\n <!-- Error icon -->\n <div \n v-if=\"showError\" \n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-z-20 sl-pointer-events-none\"\n >\n <ExclamationCircleIcon class=\"sl-h-5 sl-w-5 sl-text-red-500\" aria-hidden=\"true\" />\n </div>\n <!-- Success icon -->\n <div \n v-else-if=\"showSuccess\" \n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-z-20 sl-pointer-events-none\"\n >\n <CheckCircleIcon class=\"sl-h-5 sl-w-5 sl-text-green-500\" aria-hidden=\"true\" />\n </div>\n\n <div \n class=\"sl-flex sl-rounded-md sl-shadow-sm sl-ring-1 sl-ring-inset focus-within:sl-ring-2 focus-within:sl-ring-inset\"\n :class=\"containerRingClass\"\n >\n <!-- Select dropdown using Headless UI Listbox -->\n <Listbox\n :model-value=\"selectedOption\"\n @update:model-value=\"onSelectChange\"\n :disabled=\"disabled\"\n >\n <div class=\"sl-relative\">\n <ListboxButton\n ref=\"listboxButtonRef\"\n :class=\"[\n 'sl-relative sl-cursor-default sl-rounded-l-md sl-border-0 sl-py-2 sl-pl-3 sl-pr-10 sl-text-left sl-text-sm',\n 'sl-bg-white dark:sl-bg-slate-900 sl-text-gray-900 dark:sl-text-slate-100',\n 'focus:sl-outline-none focus:sl-ring-0',\n disabled ? 'sl-cursor-not-allowed sl-bg-gray-50 dark:sl-bg-slate-800 sl-text-gray-500 dark:sl-text-slate-400' : ''\n ]\"\n data-testid=\"select-dropdown\"\n @click=\"onDropdownClick\"\n >\n <span \n class=\"sl-block sl-truncate sl-min-w-[80px]\"\n :class=\"selectedOption ? '' : 'sl-text-gray-500 dark:sl-text-slate-400'\"\n >\n {{ selectedOption?.label || select?.placeholder || 'Select…' }}\n </span>\n <span class=\"sl-pointer-events-none sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-2\">\n <ChevronUpDownIcon class=\"sl-h-5 sl-w-5 sl-text-gray-400 dark:sl-text-slate-300\" aria-hidden=\"true\" />\n </span>\n </ListboxButton>\n \n <Teleport to=\"body\">\n <transition\n leave-active-class=\"sl-transition sl-duration-100 sl-ease-in\"\n leave-from-class=\"sl-opacity-100\"\n leave-to-class=\"sl-opacity-0\"\n >\n <ListboxOptions\n class=\"sl-fixed sl-z-[9999] sl-max-h-56 sl-overflow-auto sl-rounded-md sl-bg-white dark:sl-bg-slate-800 sl-py-1 sl-text-base sl-shadow-lg dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black sl-ring-opacity-5 dark:sl-ring-slate-700 focus:sl-outline-none sm:sl-text-sm\"\n :style=\"dropdownStyle\"\n >\n <ListboxOption\n v-for=\"opt in selectOptions\"\n :key=\"opt.value\"\n :value=\"opt\"\n as=\"template\"\n v-slot=\"{ active, selected }\"\n >\n <li\n :class=\"[\n 'sl-relative sl-cursor-default sl-select-none sl-py-2 sl-pl-3 sl-pr-9',\n active ? 'sl-bg-stachelock-600 sl-text-white' : 'sl-text-gray-900 dark:sl-text-slate-200'\n ]\"\n >\n <span :class=\"['sl-block sl-truncate', selected ? 'sl-font-medium' : 'sl-font-normal']\">\n {{ opt.label }}\n </span>\n <span\n v-if=\"selected\"\n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-4\"\n >\n <CheckIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </span>\n </li>\n </ListboxOption>\n </ListboxOptions>\n </transition>\n </Teleport>\n </div>\n </Listbox>\n\n <!-- Vertical divider -->\n <div class=\"sl-w-px sl-bg-gray-200 dark:sl-bg-slate-700 sl-self-stretch\" />\n\n <!-- Text input -->\n <div class=\"sl-flex-1 sl-relative\">\n <input\n :class=\"[\n 'sl-block sl-w-full sl-text-sm focus:sl-outline-none focus:sl-ring-0 sl-border-0 sl-py-2 sl-pl-3 sl-pr-10 sl-rounded-r-md',\n 'sl-placeholder:text-gray-400 dark:sl-placeholder:text-slate-500',\n disabled \n ? 'sl-bg-gray-50 dark:sl-bg-slate-800 sl-text-gray-500 dark:sl-text-slate-400 sl-cursor-not-allowed' \n : 'sl-bg-white dark:sl-bg-slate-900 sl-text-gray-900 dark:sl-text-slate-100'\n ]\"\n :aria-invalid=\"showError || undefined\"\n :name=\"`${name}__text`\"\n :placeholder=\"text?.placeholder || ''\"\n :inputmode=\"text?.inputMode ?? 'text'\"\n :maxlength=\"text?.maxLength || undefined\"\n :value=\"localValue.text || ''\"\n @input=\"onTextChange(($event.target as HTMLInputElement).value)\"\n :disabled=\"disabled\"\n data-testid=\"text-input\"\n />\n </div>\n </div>\n </div>\n\n <!-- Error message -->\n <Transition\n enter-active-class=\"sl-transition sl-ease-out sl-duration-300\"\n enter-from-class=\"sl-opacity-0 sl-transform sl-scale-95\"\n enter-to-class=\"sl-opacity-100 sl-transform sl-scale-100\"\n leave-active-class=\"sl-transition sl-ease-in sl-duration-200\"\n leave-from-class=\"sl-opacity-100 sl-transform sl-scale-100\"\n leave-to-class=\"sl-opacity-0 sl-transform sl-scale-95\"\n >\n <p \n v-if=\"showError\"\n class=\"sl-mt-2 sl-text-sm sl-text-red-600 dark:sl-text-red-400 sl-bg-red-50 dark:sl-bg-red-900/20 sl-ring-1 sl-ring-red-100 dark:sl-ring-red-800 sl-rounded-md sl-p-2\"\n >\n {{ friendlyErrorMessage }}\n </p>\n </Transition>\n\n <!-- Display value hint -->\n <p \n v-if=\"!showError && computedDisplay\" \n class=\"sl-text-xs sl-text-gray-500 dark:sl-text-slate-400\"\n >\n {{ computedDisplay }}\n </p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, toRefs, watch, onMounted, ref, onBeforeUnmount, type PropType, type Component } from 'vue'\nimport { CheckCircleIcon, ExclamationCircleIcon } from '@heroicons/vue/20/solid'\nimport { CheckIcon, ChevronUpDownIcon } from '@heroicons/vue/20/solid'\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/vue'\n\n// Refs for floating dropdown positioning\nconst listboxButtonRef = ref<InstanceType<typeof ListboxButton> | null>(null)\nconst dropdownStyle = ref<{ top: string; left: string; width: string }>({\n top: '0px',\n left: '0px',\n width: '120px'\n})\nconst dropdownOpen = ref(false)\n\nfunction updateDropdownPosition() {\n // Get the actual DOM element from the Headless UI component\n const el = listboxButtonRef.value?.$el as HTMLElement | undefined\n if (!el) return\n const rect = el.getBoundingClientRect()\n dropdownStyle.value = {\n top: `${rect.bottom + 4}px`,\n left: `${rect.left}px`,\n width: `${Math.max(rect.width, 120)}px`\n }\n}\n\nfunction onDropdownClick() {\n dropdownOpen.value = !dropdownOpen.value\n if (dropdownOpen.value) {\n updateDropdownPosition()\n }\n}\n\n// Update position on scroll/resize when dropdown is open\nfunction handleScrollOrResize() {\n if (dropdownOpen.value) {\n updateDropdownPosition()\n }\n}\n\nonMounted(() => {\n window.addEventListener('scroll', handleScrollOrResize, true)\n window.addEventListener('resize', handleScrollOrResize)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('scroll', handleScrollOrResize, true)\n window.removeEventListener('resize', handleScrollOrResize)\n})\n\ntype SelectOption = { label: string; value: string }\n\ntype CompositeValue = {\n select?: string\n text?: string\n display?: string\n}\n\ntype CompositePropValue = CompositeValue | string | number | Record<string, unknown> | null | undefined\n\nconst YEAR_PATTERN = /\\b(19|20)\\d{2}\\b$/\n\nfunction coerceString(input: unknown): string | undefined {\n if (typeof input === 'string') {\n const trimmed = input.trim()\n return trimmed.length ? trimmed : undefined\n }\n if (typeof input === 'number') {\n const str = String(input)\n return str.length ? str : undefined\n }\n return undefined\n}\n\nfunction isCompositeLike(value: unknown): value is CompositeValue {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('select' in (value as Record<string, unknown>) ||\n 'text' in (value as Record<string, unknown>) ||\n 'display' in (value as Record<string, unknown>))\n )\n}\n\nfunction hasMeaningfulComposite(value: CompositeValue): boolean {\n return !!(value.select || value.text || value.display)\n}\n\nfunction buildDisplay(select?: string, text?: string, fallback?: string): string | undefined {\n if (fallback) return fallback\n if (select && text) return `${select} ${text}`.trim()\n return select || text || undefined\n}\n\nfunction normalizeCompositeValue(rawValue: CompositePropValue): CompositeValue {\n const result: CompositeValue = {}\n\n if (rawValue === null || rawValue === undefined) return result\n\n if (typeof rawValue === 'string' || typeof rawValue === 'number') {\n const str = coerceString(rawValue)\n if (!str) return result\n\n const yearMatch = str.match(YEAR_PATTERN)\n if (yearMatch) {\n const year = yearMatch[0]\n const prefix = str.slice(0, str.length - year.length).trim()\n if (prefix) result.select = prefix\n result.text = year\n result.display = buildDisplay(result.select, result.text)\n } else {\n result.text = str\n result.display = str\n }\n return result\n }\n\n if (isCompositeLike(rawValue)) {\n const composite = rawValue as CompositeValue\n const select = coerceString(composite.select)\n const text = coerceString(composite.text)\n const display = coerceString(composite.display)\n\n if (select) result.select = select\n if (text) result.text = text\n result.display = buildDisplay(result.select, result.text, display)\n return result\n }\n\n if (typeof rawValue === 'object' && !Array.isArray(rawValue)) {\n const obj = rawValue as Record<string, unknown>\n const select =\n coerceString(obj.select) ?? coerceString(obj.term) ?? coerceString(obj.semester)\n const text =\n coerceString(obj.text) ?? coerceString(obj.year) ?? coerceString(obj.value)\n const display = coerceString(obj.display) ?? coerceString(obj.label)\n\n if (select) result.select = select\n if (text) result.text = text\n result.display = buildDisplay(result.select, result.text, display)\n return result\n }\n\n return result\n}\n\nconst props = defineProps({\n name: { type: String, required: true },\n label: { type: String, default: '' },\n tertiaryLabel: { type: String, default: '' },\n secondaryLabel: { type: String, default: '' },\n labelIconLeft: { type: [Object, Function] as PropType<Component>, default: undefined },\n value: {\n type: [Object, String, Number] as PropType<CompositePropValue>,\n default: undefined\n },\n select: {\n type: Object as PropType<{ label?: string; options: SelectOption[]; placeholder?: string }>,\n default: () => ({ options: [] })\n },\n text: {\n type: Object as PropType<{\n label?: string\n placeholder?: string\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'\n maxLength?: number\n }>,\n default: () => ({})\n },\n delimiter: { type: String, default: ' ' },\n formatter: { type: Function as PropType<(v: CompositeValue) => string | undefined> },\n showErrors: { type: Boolean, default: false },\n hasError: { type: Boolean, default: false },\n validateOnMount: { type: Boolean, default: false },\n textValidationRegex: { type: [RegExp, Object] as PropType<RegExp>, default: undefined },\n requiredText: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n disabledMessage: { type: String, default: '' },\n colorfulValidation: { type: Boolean, default: true },\n showValidCheck: { type: Boolean, default: true }\n})\n\nconst emit = defineEmits<{\n 'update:value': [value: CompositeValue]\n 'update:validity': [isValid: boolean]\n}>()\n\nconst initialNormalizedValue = normalizeCompositeValue(props.value)\n\nconst state = reactive({\n localValue: initialNormalizedValue\n})\n\nconst { localValue } = toRefs(state)\n\nconst shouldEmitNormalizedInitialValue = computed(\n () => hasMeaningfulComposite(initialNormalizedValue) && !isCompositeLike(props.value)\n)\n\nconst selectOptions = computed<SelectOption[]>(() => props.select?.options || [])\n\n// Find the selected option object based on localValue.select\nconst selectedOption = computed<SelectOption | null>(() => {\n if (!localValue.value.select) return null\n return selectOptions.value.find(opt => opt.value === localValue.value.select) || null\n})\n\nconst isTextInvalid = computed(() => {\n const t = localValue.value.text\n if (!props.textValidationRegex) {\n return false\n }\n if (!t || String(t).trim() === '') {\n return props.requiredText === true\n }\n return !props.textValidationRegex.test(String(t))\n})\n\nconst showError = computed(() => props.showErrors && (props.hasError || isTextInvalid.value))\nconst showSuccess = computed(\n () => props.showValidCheck && !showError.value && !!computedDisplay.value\n)\n\nconst containerRingClass = computed(() => {\n if (props.disabled) return 'sl-ring-gray-200 dark:sl-ring-slate-700'\n if (!props.colorfulValidation) return 'sl-ring-gray-300 dark:sl-ring-slate-600 focus-within:sl-ring-stachelock-600'\n if (showError.value) return 'sl-ring-red-300 dark:sl-ring-red-500 focus-within:sl-ring-stachelock-600'\n if (showSuccess.value) return 'sl-ring-green-300 dark:sl-ring-green-500 focus-within:sl-ring-stachelock-600'\n return 'sl-ring-gray-300 dark:sl-ring-slate-600 focus-within:sl-ring-stachelock-600'\n})\n\nconst computedDisplay = computed(() => {\n const raw = { select: localValue.value.select, text: localValue.value.text } as CompositeValue\n const custom = props.formatter ? props.formatter(raw) : undefined\n if (custom !== undefined) return custom\n const parts = [raw.select, raw.text].filter(Boolean)\n return parts.join(props.delimiter).trim()\n})\n\nconst friendlyErrorMessage = computed(() => {\n if (!showError.value) return ''\n const hasSelect = !!localValue.value.select\n const hasText = !!localValue.value.text && String(localValue.value.text).trim() !== ''\n const yearOk = !!localValue.value.text && /^\\d{4}$/.test(String(localValue.value.text))\n if (!hasSelect && !hasText) return 'Please select an option and enter a value.'\n if (!hasSelect) return 'Please select an option.'\n if (!hasText) return 'Please enter a value.'\n if (!yearOk && props.textValidationRegex) return 'Please enter a valid value.'\n return 'Please complete both fields.'\n})\n\nfunction emitValueAndValidity() {\n const display = computedDisplay.value || undefined\n const payload: CompositeValue = {\n select: localValue.value.select,\n text: localValue.value.text,\n display\n }\n emit('update:value', payload)\n const isValid = !!(payload.select && payload.text && String(payload.text).length > 0)\n emit('update:validity', isValid)\n}\n\nfunction onSelectChange(opt: SelectOption | null) {\n localValue.value.select = opt?.value || undefined\n dropdownOpen.value = false\n emitValueAndValidity()\n}\n\nfunction onTextChange(val: string) {\n localValue.value.text = val || undefined\n emitValueAndValidity()\n}\n\n// Sync down-prop changes\nwatch(\n () => props.value,\n (v) => {\n state.localValue = normalizeCompositeValue(v)\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (shouldEmitNormalizedInitialValue.value) {\n emitValueAndValidity()\n }\n})\n\n// Validate on mount if requested\nif (props.validateOnMount) {\n emitValueAndValidity()\n}\n</script>\n\n"],"names":["listboxButtonRef","ref","dropdownStyle","dropdownOpen","updateDropdownPosition","el","rect","onDropdownClick","handleScrollOrResize","onMounted","onBeforeUnmount","YEAR_PATTERN","coerceString","input","trimmed","str","isCompositeLike","value","hasMeaningfulComposite","buildDisplay","select","text","fallback","normalizeCompositeValue","rawValue","result","yearMatch","year","prefix","composite","display","obj","props","__props","emit","__emit","initialNormalizedValue","state","reactive","localValue","toRefs","shouldEmitNormalizedInitialValue","computed","selectOptions","selectedOption","opt","isTextInvalid","t","showError","showSuccess","computedDisplay","containerRingClass","raw","custom","friendlyErrorMessage","hasSelect","hasText","yearOk","emitValueAndValidity","payload","isValid","onSelectChange","onTextChange","val","watch","v","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_createBlock","_resolveDynamicComponent","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_createVNode","_unref","ExclamationCircleIcon","_hoisted_11","CheckCircleIcon","_normalizeClass","Listbox","_hoisted_12","ListboxButton","_hoisted_13","ChevronUpDownIcon","_Teleport","_Transition","ListboxOptions","_Fragment","_renderList","ListboxOption","active","selected","_hoisted_14","CheckIcon","_hoisted_15","$event","_hoisted_17","_hoisted_18"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectTextInput.vue_vue_type_script_setup_true_lang-DYrXW14A.js","sources":["../src/components/inputs/SelectTextInput.vue"],"sourcesContent":["<!--\n @component SelectTextInput\n @description Combined select dropdown and text input field.\n \n A composite input that combines a select dropdown with a text input,\n useful for inputs like \"Fall 2023\" where the user selects a term\n and enters a year. Uses Headless UI Listbox for accessible select.\n \n @props\n - name (string, required): Field name for form binding\n - label (string, optional): Main label text\n - value (CompositeValue | string, optional): Combined value object or string\n - select (object, optional): Select configuration { options, placeholder, label }\n - text (object, optional): Text input config { placeholder, inputMode, maxLength, label }\n - delimiter (string, optional): Character between select and text in display\n - showErrors (boolean, optional): Force show validation errors\n - hasError (boolean, optional): External error state\n - disabled (boolean, optional): Disabled state\n - colorfulValidation (boolean, optional): Color-coded validation states\n - showValidCheck (boolean, optional): Show success icon when valid\n \n @emits\n - update:value: Emitted when composite value changes\n - update:validity: Emitted when validation state changes\n \n @example\n <SelectTextInput\n name=\"graduation\"\n label=\"Expected Graduation\"\n :value=\"{ select: 'Fall', text: '2024' }\"\n :select=\"{ options: [{ label: 'Fall', value: 'Fall' }, { label: 'Spring', value: 'Spring' }] }\"\n :text=\"{ placeholder: 'Year', inputMode: 'numeric', maxLength: 4 }\"\n @update:value=\"handleUpdate\"\n />\n-->\n<template>\n <div class=\"sl-space-y-1\" data-testid=\"select-text-input\">\n <!-- Main label row -->\n <div \n v-if=\"label || secondaryLabel || tertiaryLabel || (disabled && disabledMessage)\" \n class=\"sl-grid sl-grid-cols-3 sl-items-center\"\n >\n <div class=\"sl-col-span-2 sl-flex sl-items-center\">\n <component \n v-if=\"labelIconLeft\" \n :is=\"labelIconLeft\" \n class=\"sl-mr-2 sl-h-4 sl-w-4 sl-text-yellow-300\" \n />\n <label v-if=\"label\" class=\"sl-text-sm sl-font-medium\" :style=\"{ color: 'var(--sl-text-primary)' }\">\n {{ label }}\n </label>\n </div>\n <div class=\"sl-justify-self-end sl-col-start-3 sl-text-right sl-space-y-0.5\">\n <p \n v-if=\"disabled && disabledMessage\" \n class=\"sl-text-xs\" :style=\"{ color: 'var(--sl-text-muted)' }\"\n >\n {{ disabledMessage }}\n </p>\n <span \n v-if=\"secondaryLabel\" \n class=\"sl-text-2xs sl-uppercase sl-truncate sl-font-semibold sl-block\" :style=\"{ color: 'var(--sl-text-secondary)' }\"\n >\n {{ secondaryLabel }}\n </span>\n <span \n v-if=\"tertiaryLabel\" \n class=\"sl-text-xs sl-uppercase sl-truncate sl-font-semibold sl-block\" :style=\"{ color: 'var(--sl-text-secondary)' }\"\n >\n {{ tertiaryLabel }}\n </span>\n </div>\n </div>\n\n <!-- Input container -->\n <div class=\"sl-relative sl-mt-1\">\n <!-- Error icon -->\n <div \n v-if=\"showError\" \n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-z-20 sl-pointer-events-none\"\n >\n <ExclamationCircleIcon class=\"sl-h-5 sl-w-5 sl-text-red-500\" aria-hidden=\"true\" />\n </div>\n <!-- Success icon -->\n <div \n v-else-if=\"showSuccess\" \n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-3 sl-z-20 sl-pointer-events-none\"\n >\n <CheckCircleIcon class=\"sl-h-5 sl-w-5 sl-text-green-500\" aria-hidden=\"true\" />\n </div>\n\n <div \n class=\"sl-flex sl-rounded-md sl-shadow-sm sl-ring-1 sl-ring-inset focus-within:sl-ring-2 focus-within:sl-ring-inset\"\n :class=\"containerRingClass\"\n >\n <!-- Select dropdown using Headless UI Listbox -->\n <Listbox\n :model-value=\"selectedOption\"\n @update:model-value=\"onSelectChange\"\n :disabled=\"disabled\"\n >\n <div class=\"sl-relative\">\n <ListboxButton\n ref=\"listboxButtonRef\"\n :class=\"[\n 'sl-relative sl-cursor-default sl-rounded-l-md sl-border-0 sl-py-2 sl-pl-3 sl-pr-10 sl-text-left sl-text-sm',\n 'sl-bg-white dark:sl-bg-slate-900 sl-text-gray-900 dark:sl-text-slate-100',\n 'focus:sl-outline-none focus:sl-ring-0',\n disabled ? 'sl-cursor-not-allowed sl-bg-gray-50 dark:sl-bg-slate-800 sl-text-gray-500 dark:sl-text-slate-400' : ''\n ]\"\n data-testid=\"select-dropdown\"\n @click=\"onDropdownClick\"\n >\n <span \n class=\"sl-block sl-truncate sl-min-w-[80px]\"\n :class=\"selectedOption ? '' : 'sl-text-gray-500 dark:sl-text-slate-400'\"\n >\n {{ selectedOption?.label || select?.placeholder || 'Select…' }}\n </span>\n <span class=\"sl-pointer-events-none sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-2\">\n <ChevronUpDownIcon class=\"sl-h-5 sl-w-5 sl-text-gray-400 dark:sl-text-slate-300\" aria-hidden=\"true\" />\n </span>\n </ListboxButton>\n \n <Teleport to=\"body\">\n <transition\n leave-active-class=\"sl-transition sl-duration-100 sl-ease-in\"\n leave-from-class=\"sl-opacity-100\"\n leave-to-class=\"sl-opacity-0\"\n >\n <ListboxOptions\n class=\"sl-fixed sl-z-[9999] sl-max-h-56 sl-overflow-auto sl-rounded-md sl-bg-white dark:sl-bg-slate-800 sl-py-1 sl-text-base sl-shadow-lg dark:sl-shadow-slate-900/50 sl-ring-1 sl-ring-black sl-ring-opacity-5 dark:sl-ring-slate-700 focus:sl-outline-none sm:sl-text-sm\"\n :style=\"dropdownStyle\"\n >\n <ListboxOption\n v-for=\"opt in selectOptions\"\n :key=\"opt.value\"\n :value=\"opt\"\n as=\"template\"\n v-slot=\"{ active, selected }\"\n >\n <li\n :class=\"[\n 'sl-relative sl-cursor-default sl-select-none sl-py-2 sl-pl-3 sl-pr-9',\n active ? 'sl-bg-stachelock-600 sl-text-white' : 'sl-text-gray-900 dark:sl-text-slate-200'\n ]\"\n >\n <span :class=\"['sl-block sl-truncate', selected ? 'sl-font-medium' : 'sl-font-normal']\">\n {{ opt.label }}\n </span>\n <span\n v-if=\"selected\"\n class=\"sl-absolute sl-inset-y-0 sl-right-0 sl-flex sl-items-center sl-pr-4\"\n >\n <CheckIcon class=\"sl-h-5 sl-w-5\" aria-hidden=\"true\" />\n </span>\n </li>\n </ListboxOption>\n </ListboxOptions>\n </transition>\n </Teleport>\n </div>\n </Listbox>\n\n <!-- Vertical divider -->\n <div class=\"sl-w-px sl-bg-gray-200 dark:sl-bg-slate-700 sl-self-stretch\" />\n\n <!-- Text input -->\n <div class=\"sl-flex-1 sl-relative\">\n <input\n :class=\"[\n 'sl-block sl-w-full sl-text-sm focus:sl-outline-none focus:sl-ring-0 sl-border-0 sl-py-2 sl-pl-3 sl-pr-10 sl-rounded-r-md',\n 'sl-placeholder:text-gray-400 dark:sl-placeholder:text-slate-500',\n disabled \n ? 'sl-bg-gray-50 dark:sl-bg-slate-800 sl-text-gray-500 dark:sl-text-slate-400 sl-cursor-not-allowed' \n : 'sl-bg-white dark:sl-bg-slate-900 sl-text-gray-900 dark:sl-text-slate-100'\n ]\"\n :aria-invalid=\"showError || undefined\"\n :name=\"`${name}__text`\"\n :placeholder=\"text?.placeholder || ''\"\n :inputmode=\"text?.inputMode ?? 'text'\"\n :maxlength=\"text?.maxLength || undefined\"\n :value=\"localValue.text || ''\"\n @input=\"onTextChange(($event.target as HTMLInputElement).value)\"\n :disabled=\"disabled\"\n data-testid=\"text-input\"\n />\n </div>\n </div>\n </div>\n\n <!-- Error message -->\n <Transition\n enter-active-class=\"sl-transition sl-ease-out sl-duration-300\"\n enter-from-class=\"sl-opacity-0 sl-transform sl-scale-95\"\n enter-to-class=\"sl-opacity-100 sl-transform sl-scale-100\"\n leave-active-class=\"sl-transition sl-ease-in sl-duration-200\"\n leave-from-class=\"sl-opacity-100 sl-transform sl-scale-100\"\n leave-to-class=\"sl-opacity-0 sl-transform sl-scale-95\"\n >\n <p \n v-if=\"showError\"\n class=\"sl-mt-2 sl-text-sm sl-text-red-600 dark:sl-text-red-400 sl-bg-red-50 dark:sl-bg-red-900/20 sl-ring-1 sl-ring-red-100 dark:sl-ring-red-800 sl-rounded-md sl-p-2\"\n >\n {{ friendlyErrorMessage }}\n </p>\n </Transition>\n\n <!-- Display value hint -->\n <p \n v-if=\"!showError && computedDisplay\" \n class=\"sl-text-xs sl-text-gray-500 dark:sl-text-slate-400\"\n >\n {{ computedDisplay }}\n </p>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, toRefs, watch, onMounted, ref, onBeforeUnmount, type PropType, type Component } from 'vue'\nimport { CheckCircleIcon, ExclamationCircleIcon } from '@heroicons/vue/20/solid'\nimport { CheckIcon, ChevronUpDownIcon } from '@heroicons/vue/20/solid'\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/vue'\n\n// Refs for floating dropdown positioning\nconst listboxButtonRef = ref<InstanceType<typeof ListboxButton> | null>(null)\nconst dropdownStyle = ref<{ top: string; left: string; width: string }>({\n top: '0px',\n left: '0px',\n width: '120px'\n})\nconst dropdownOpen = ref(false)\n\nfunction updateDropdownPosition() {\n // Get the actual DOM element from the Headless UI component\n const el = listboxButtonRef.value?.$el as HTMLElement | undefined\n if (!el) return\n const rect = el.getBoundingClientRect()\n dropdownStyle.value = {\n top: `${rect.bottom + 4}px`,\n left: `${rect.left}px`,\n width: `${Math.max(rect.width, 120)}px`\n }\n}\n\nfunction onDropdownClick() {\n dropdownOpen.value = !dropdownOpen.value\n if (dropdownOpen.value) {\n updateDropdownPosition()\n }\n}\n\n// Update position on scroll/resize when dropdown is open\nfunction handleScrollOrResize() {\n if (dropdownOpen.value) {\n updateDropdownPosition()\n }\n}\n\nonMounted(() => {\n window.addEventListener('scroll', handleScrollOrResize, true)\n window.addEventListener('resize', handleScrollOrResize)\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('scroll', handleScrollOrResize, true)\n window.removeEventListener('resize', handleScrollOrResize)\n})\n\ntype SelectOption = { label: string; value: string }\n\ntype CompositeValue = {\n select?: string\n text?: string\n display?: string\n}\n\ntype CompositePropValue = CompositeValue | string | number | Record<string, unknown> | null | undefined\n\nconst YEAR_PATTERN = /\\b(19|20)\\d{2}\\b$/\n\nfunction coerceString(input: unknown): string | undefined {\n if (typeof input === 'string') {\n const trimmed = input.trim()\n return trimmed.length ? trimmed : undefined\n }\n if (typeof input === 'number') {\n const str = String(input)\n return str.length ? str : undefined\n }\n return undefined\n}\n\nfunction isCompositeLike(value: unknown): value is CompositeValue {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('select' in (value as Record<string, unknown>) ||\n 'text' in (value as Record<string, unknown>) ||\n 'display' in (value as Record<string, unknown>))\n )\n}\n\nfunction hasMeaningfulComposite(value: CompositeValue): boolean {\n return !!(value.select || value.text || value.display)\n}\n\nfunction buildDisplay(select?: string, text?: string, fallback?: string): string | undefined {\n if (fallback) return fallback\n if (select && text) return `${select} ${text}`.trim()\n return select || text || undefined\n}\n\nfunction normalizeCompositeValue(rawValue: CompositePropValue): CompositeValue {\n const result: CompositeValue = {}\n\n if (rawValue === null || rawValue === undefined) return result\n\n if (typeof rawValue === 'string' || typeof rawValue === 'number') {\n const str = coerceString(rawValue)\n if (!str) return result\n\n const yearMatch = str.match(YEAR_PATTERN)\n if (yearMatch) {\n const year = yearMatch[0]\n const prefix = str.slice(0, str.length - year.length).trim()\n if (prefix) result.select = prefix\n result.text = year\n result.display = buildDisplay(result.select, result.text)\n } else {\n result.text = str\n result.display = str\n }\n return result\n }\n\n if (isCompositeLike(rawValue)) {\n const composite = rawValue as CompositeValue\n const select = coerceString(composite.select)\n const text = coerceString(composite.text)\n const display = coerceString(composite.display)\n\n if (select) result.select = select\n if (text) result.text = text\n result.display = buildDisplay(result.select, result.text, display)\n return result\n }\n\n if (typeof rawValue === 'object' && !Array.isArray(rawValue)) {\n const obj = rawValue as Record<string, unknown>\n const select =\n coerceString(obj.select) ?? coerceString(obj.term) ?? coerceString(obj.semester)\n const text =\n coerceString(obj.text) ?? coerceString(obj.year) ?? coerceString(obj.value)\n const display = coerceString(obj.display) ?? coerceString(obj.label)\n\n if (select) result.select = select\n if (text) result.text = text\n result.display = buildDisplay(result.select, result.text, display)\n return result\n }\n\n return result\n}\n\nconst props = defineProps({\n name: { type: String, required: true },\n label: { type: String, default: '' },\n tertiaryLabel: { type: String, default: '' },\n secondaryLabel: { type: String, default: '' },\n labelIconLeft: { type: [Object, Function] as PropType<Component>, default: undefined },\n value: {\n type: [Object, String, Number] as PropType<CompositePropValue>,\n default: undefined\n },\n select: {\n type: Object as PropType<{ label?: string; options: SelectOption[]; placeholder?: string }>,\n default: () => ({ options: [] })\n },\n text: {\n type: Object as PropType<{\n label?: string\n placeholder?: string\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'\n maxLength?: number\n }>,\n default: () => ({})\n },\n delimiter: { type: String, default: ' ' },\n formatter: { type: Function as PropType<(v: CompositeValue) => string | undefined> },\n showErrors: { type: Boolean, default: false },\n hasError: { type: Boolean, default: false },\n validateOnMount: { type: Boolean, default: false },\n textValidationRegex: { type: [RegExp, Object] as PropType<RegExp>, default: undefined },\n requiredText: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n disabledMessage: { type: String, default: '' },\n colorfulValidation: { type: Boolean, default: true },\n showValidCheck: { type: Boolean, default: true }\n})\n\nconst emit = defineEmits<{\n 'update:value': [value: CompositeValue]\n 'update:validity': [isValid: boolean]\n}>()\n\nconst initialNormalizedValue = normalizeCompositeValue(props.value)\n\nconst state = reactive({\n localValue: initialNormalizedValue\n})\n\nconst { localValue } = toRefs(state)\n\nconst shouldEmitNormalizedInitialValue = computed(\n () => hasMeaningfulComposite(initialNormalizedValue) && !isCompositeLike(props.value)\n)\n\nconst selectOptions = computed<SelectOption[]>(() => props.select?.options || [])\n\n// Find the selected option object based on localValue.select\nconst selectedOption = computed<SelectOption | null>(() => {\n if (!localValue.value.select) return null\n return selectOptions.value.find(opt => opt.value === localValue.value.select) || null\n})\n\nconst isTextInvalid = computed(() => {\n const t = localValue.value.text\n if (!props.textValidationRegex) {\n return false\n }\n if (!t || String(t).trim() === '') {\n return props.requiredText === true\n }\n return !props.textValidationRegex.test(String(t))\n})\n\nconst showError = computed(() => props.showErrors && (props.hasError || isTextInvalid.value))\nconst showSuccess = computed(\n () => props.showValidCheck && !showError.value && !!computedDisplay.value\n)\n\nconst containerRingClass = computed(() => {\n if (props.disabled) return 'sl-ring-gray-200 dark:sl-ring-slate-700'\n if (!props.colorfulValidation) return 'sl-ring-gray-300 dark:sl-ring-slate-600 focus-within:sl-ring-stachelock-600'\n if (showError.value) return 'sl-ring-red-300 dark:sl-ring-red-500 focus-within:sl-ring-stachelock-600'\n if (showSuccess.value) return 'sl-ring-green-300 dark:sl-ring-green-500 focus-within:sl-ring-stachelock-600'\n return 'sl-ring-gray-300 dark:sl-ring-slate-600 focus-within:sl-ring-stachelock-600'\n})\n\nconst computedDisplay = computed(() => {\n const raw = { select: localValue.value.select, text: localValue.value.text } as CompositeValue\n const custom = props.formatter ? props.formatter(raw) : undefined\n if (custom !== undefined) return custom\n const parts = [raw.select, raw.text].filter(Boolean)\n return parts.join(props.delimiter).trim()\n})\n\nconst friendlyErrorMessage = computed(() => {\n if (!showError.value) return ''\n const hasSelect = !!localValue.value.select\n const hasText = !!localValue.value.text && String(localValue.value.text).trim() !== ''\n const yearOk = !!localValue.value.text && /^\\d{4}$/.test(String(localValue.value.text))\n if (!hasSelect && !hasText) return 'Please select an option and enter a value.'\n if (!hasSelect) return 'Please select an option.'\n if (!hasText) return 'Please enter a value.'\n if (!yearOk && props.textValidationRegex) return 'Please enter a valid value.'\n return 'Please complete both fields.'\n})\n\nfunction emitValueAndValidity() {\n const display = computedDisplay.value || undefined\n const payload: CompositeValue = {\n select: localValue.value.select,\n text: localValue.value.text,\n display\n }\n emit('update:value', payload)\n const isValid = !!(payload.select && payload.text && String(payload.text).length > 0)\n emit('update:validity', isValid)\n}\n\nfunction onSelectChange(opt: SelectOption | null) {\n localValue.value.select = opt?.value || undefined\n dropdownOpen.value = false\n emitValueAndValidity()\n}\n\nfunction onTextChange(val: string) {\n localValue.value.text = val || undefined\n emitValueAndValidity()\n}\n\n// Sync down-prop changes\nwatch(\n () => props.value,\n (v) => {\n state.localValue = normalizeCompositeValue(v)\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (shouldEmitNormalizedInitialValue.value) {\n emitValueAndValidity()\n }\n})\n\n// Validate on mount if requested\nif (props.validateOnMount) {\n emitValueAndValidity()\n}\n</script>\n\n"],"names":["listboxButtonRef","ref","dropdownStyle","dropdownOpen","updateDropdownPosition","el","rect","onDropdownClick","handleScrollOrResize","onMounted","onBeforeUnmount","YEAR_PATTERN","coerceString","input","trimmed","str","isCompositeLike","value","hasMeaningfulComposite","buildDisplay","select","text","fallback","normalizeCompositeValue","rawValue","result","yearMatch","year","prefix","composite","display","obj","props","__props","emit","__emit","initialNormalizedValue","state","reactive","localValue","toRefs","shouldEmitNormalizedInitialValue","computed","selectOptions","selectedOption","opt","isTextInvalid","t","showError","showSuccess","computedDisplay","containerRingClass","raw","custom","friendlyErrorMessage","hasSelect","hasText","yearOk","emitValueAndValidity","payload","isValid","onSelectChange","onTextChange","val","watch","v","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_hoisted_3","_createBlock","_resolveDynamicComponent","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_createVNode","_unref","ExclamationCircleIcon","_hoisted_11","CheckCircleIcon","_normalizeClass","Listbox","_hoisted_12","ListboxButton","_hoisted_13","ChevronUpDownIcon","_Teleport","_Transition","ListboxOptions","_Fragment","_renderList","ListboxOption","active","selected","_hoisted_14","CheckIcon","_hoisted_15","$event","_hoisted_17","_hoisted_18"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { defineComponent as x, ref as g, createElementBlock as u, openBlock as v
|
|
|
2
2
|
import { r as b } from "./XMarkIcon-Cwy3T6p8.js";
|
|
3
3
|
import { r as y } from "./Bars3Icon-BdOqcGcY.js";
|
|
4
4
|
import { S as h, h as f } from "./transition-_rPfnoET.js";
|
|
5
|
-
import { Y as
|
|
6
|
-
const
|
|
5
|
+
import { Y as k, G as w } from "./dialog-BJ2Ld8l3.js";
|
|
6
|
+
const _ = { class: "sl-relative" }, $ = { class: "sl-fixed sl-inset-0 sl-flex" }, S = { class: "sl-absolute sl-left-full sl-top-0 sl-flex sl-w-16 sl-justify-center sl-pt-5" }, C = {
|
|
7
7
|
class: "sl-flex sl-grow sl-flex-col sl-gap-y-5 sl-px-6 sl-pb-2 sl-ring-1 sl-ring-white/10",
|
|
8
8
|
style: { "background-color": "#dc2626" }
|
|
9
9
|
}, z = { class: "sl-flex sl-h-16 sl-shrink-0 sl-items-center" }, W = { class: "sl-flex sl-flex-1 sl-flex-col" }, B = {
|
|
@@ -23,13 +23,13 @@ const w = { class: "sl-relative" }, $ = { class: "sl-fixed sl-inset-0 sl-flex" }
|
|
|
23
23
|
}, c = () => {
|
|
24
24
|
n.value = !0;
|
|
25
25
|
};
|
|
26
|
-
return (e, l) => (v(), u("div",
|
|
26
|
+
return (e, l) => (v(), u("div", _, [
|
|
27
27
|
o(a(h), {
|
|
28
28
|
as: "template",
|
|
29
29
|
show: n.value
|
|
30
30
|
}, {
|
|
31
31
|
default: i(() => [
|
|
32
|
-
o(a(
|
|
32
|
+
o(a(k), {
|
|
33
33
|
as: "div",
|
|
34
34
|
class: "sl-relative sl-z-50 lg:sl-hidden",
|
|
35
35
|
onClose: p
|
|
@@ -44,11 +44,10 @@ const w = { class: "sl-relative" }, $ = { class: "sl-fixed sl-inset-0 sl-flex" }
|
|
|
44
44
|
"leave-from": "sl-opacity-100",
|
|
45
45
|
"leave-to": "sl-opacity-0"
|
|
46
46
|
}, {
|
|
47
|
-
default: i(() => l[2] || (l[2] = [
|
|
47
|
+
default: i(() => [...l[2] || (l[2] = [
|
|
48
48
|
s("div", { class: "sl-fixed sl-inset-0 sl-bg-gray-900/80" }, null, -1)
|
|
49
|
-
])),
|
|
50
|
-
_: 1
|
|
51
|
-
__: [2]
|
|
49
|
+
])]),
|
|
50
|
+
_: 1
|
|
52
51
|
}),
|
|
53
52
|
s("div", $, [
|
|
54
53
|
o(a(f), {
|
|
@@ -61,7 +60,7 @@ const w = { class: "sl-relative" }, $ = { class: "sl-fixed sl-inset-0 sl-flex" }
|
|
|
61
60
|
"leave-to": "-sl-translate-x-full"
|
|
62
61
|
}, {
|
|
63
62
|
default: i(() => [
|
|
64
|
-
o(a(
|
|
63
|
+
o(a(w), { class: "sl-relative sl-mr-16 sl-flex sl-w-full sl-max-w-xs sl-flex-1" }, {
|
|
65
64
|
default: i(() => [
|
|
66
65
|
o(a(f), {
|
|
67
66
|
as: "template",
|
|
@@ -182,4 +181,4 @@ const w = { class: "sl-relative" }, $ = { class: "sl-fixed sl-inset-0 sl-flex" }
|
|
|
182
181
|
export {
|
|
183
182
|
J as _
|
|
184
183
|
};
|
|
185
|
-
//# sourceMappingURL=SidebarLayout.vue_vue_type_script_setup_true_lang-
|
|
184
|
+
//# sourceMappingURL=SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarLayout.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"SidebarLayout.vue_vue_type_script_setup_true_lang-BJ5jadgZ.js","sources":["../src/components/layouts/SidebarLayout.vue"],"sourcesContent":["<template>\n <div class=\"sl-relative\">\n <!-- Mobile sidebar overlay -->\n <TransitionRoot as=\"template\" :show=\"sidebarOpen\">\n <Dialog as=\"div\" class=\"sl-relative sl-z-50 lg:sl-hidden\" @close=\"closeSidebar\">\n <TransitionChild as=\"template\" enter=\"sl-transition-opacity sl-ease-linear sl-duration-300\"\n enter-from=\"sl-opacity-0\" enter-to=\"sl-opacity-100\"\n leave=\"sl-transition-opacity sl-ease-linear sl-duration-300\" leave-from=\"sl-opacity-100\"\n leave-to=\"sl-opacity-0\">\n <div class=\"sl-fixed sl-inset-0 sl-bg-gray-900/80\" />\n </TransitionChild>\n\n <div class=\"sl-fixed sl-inset-0 sl-flex\">\n <TransitionChild as=\"template\" enter=\"sl-transition sl-ease-in-out sl-duration-300 sl-transform\"\n enter-from=\"-sl-translate-x-full\" enter-to=\"sl-translate-x-0\"\n leave=\"sl-transition sl-ease-in-out sl-duration-300 sl-transform\" leave-from=\"sl-translate-x-0\"\n leave-to=\"-sl-translate-x-full\">\n <DialogPanel class=\"sl-relative sl-mr-16 sl-flex sl-w-full sl-max-w-xs sl-flex-1\">\n <TransitionChild as=\"template\" enter=\"sl-ease-in-out sl-duration-300\" enter-from=\"sl-opacity-0\"\n enter-to=\"sl-opacity-100\" leave=\"sl-ease-in-out sl-duration-300\" leave-from=\"sl-opacity-100\"\n leave-to=\"sl-opacity-0\">\n <div class=\"sl-absolute sl-left-full sl-top-0 sl-flex sl-w-16 sl-justify-center sl-pt-5\">\n <button type=\"button\" class=\"-sl-m-2.5 sl-p-2.5\" @click=\"closeSidebar()\">\n <span class=\"sl-sr-only\">Close sidebar</span>\n <XMarkIcon class=\"sl-h-6 sl-w-6 sl-text-stachelock-050\" aria-hidden=\"true\" />\n </button>\n </div>\n </TransitionChild>\n\n <div\n class=\"sl-flex sl-grow sl-flex-col sl-gap-y-5 sl-px-6 sl-pb-2 sl-ring-1 sl-ring-white/10\"\n style=\"background-color: #dc2626;\">\n <div class=\"sl-flex sl-h-16 sl-shrink-0 sl-items-center\">\n <slot name=\"logo\">\n <div class=\"sl-font-semibold sl-text-lg\" style=\"color: #fef2f2;\">Logo</div>\n </slot>\n </div>\n <nav class=\"sl-flex sl-flex-1 sl-flex-col\">\n <ul role=\"list\" class=\"-sl-mx-2 sl-flex-1 sl-space-y-1\">\n <slot name=\"navigation\">\n <!-- Default navigation slot -->\n </slot>\n </ul>\n </nav>\n <div class=\"sl-mt-auto\">\n <slot name=\"sidebar-footer\">\n <!-- Sidebar footer content -->\n </slot>\n </div>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </TransitionRoot>\n\n <!-- Desktop sidebar -->\n <div\n class=\"sl-hidden lg:sl-fixed lg:sl-inset-y-0 lg:sl-left-0 lg:sl-z-50 lg:sl-block lg:sl-pb-4 sl-pt-4\"\n style=\"background-color: #dc2626;\"\n :class=\"isWideSidebar ? 'lg:sl-w-72' : 'lg:sl-w-20'\">\n <div class=\"sl-flex sl-h-16 sl-shrink-0 sl-items-center sl-px-6\">\n <slot name=\"logo\">\n <div class=\"sl-font-semibold sl-text-lg\" style=\"color: #fef2f2;\">Logo</div>\n </slot>\n </div>\n <nav class=\"sl-mt-8 sl-flex sl-flex-col sl-justify-between sl-h-full\">\n <ul role=\"list\"\n :class=\"isWideSidebar ? 'sl-flex sl-flex-col sl-items-start sl-mx-4 sl-space-y-1' : 'sl-flex sl-flex-col sl-items-center sl-space-y-1'\">\n <slot name=\"navigation\">\n <!-- Default navigation slot -->\n </slot>\n </ul>\n <div class=\"sl-absolute sl-bottom-4 sl-left-0 sl-right-0 sl-px-6\">\n <slot name=\"sidebar-footer\">\n <!-- Sidebar footer content -->\n </slot>\n </div>\n </nav>\n </div>\n\n <!-- Main content area -->\n <div :class=\"['lg:sl-pl-20', isWideSidebar ? 'lg:sl-pl-72' : 'lg:sl-pl-20']\">\n <!-- Header -->\n <div\n class=\"sl-sticky sl-top-0 sl-z-40 sl-flex sl-h-16 sl-shrink-0 sl-items-center sl-gap-x-4 sl-border-b sl-border-gray-200 dark:sl-border-slate-700 sl-bg-white dark:sl-bg-slate-800 sl-px-4 sl-shadow-sm sm:sl-gap-x-6 sm:sl-px-6 lg:sl-px-8\">\n <button type=\"button\" class=\"-sl-m-2.5 sl-p-2.5 sl-text-gray-700 dark:sl-text-slate-300 lg:sl-hidden\" @click=\"openSidebar()\">\n <span class=\"sl-sr-only\">Open sidebar</span>\n <Bars3Icon class=\"sl-h-6 sl-w-6\" aria-hidden=\"true\" />\n </button>\n\n <!-- Separator -->\n <div class=\"sl-h-6 sl-w-px sl-bg-gray-900/10 dark:sl-bg-slate-700 lg:sl-hidden\" aria-hidden=\"true\" />\n\n <div class=\"sl-flex sl-flex-1 sl-gap-x-4 sm:sl-self-stretch lg:sl-gap-x-6\">\n <div class=\"sl-relative sl-flex sl-flex-1\">\n <slot name=\"header-content\">\n <!-- Header content -->\n </slot>\n </div>\n <div class=\"sl-flex sl-items-center sl-gap-x-4 lg:sl-gap-x-6\">\n <slot name=\"header-right\">\n <!-- Header right content (notifications, profile, etc.) -->\n </slot>\n </div>\n </div>\n </div>\n\n <!-- Main content -->\n <main class=\"sl-px-4 sm:sl-px-6 lg:sl-px-8 sl-py-6\">\n <slot name=\"main\">\n <!-- Main content slot -->\n </slot>\n </main>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Dialog, DialogPanel, TransitionChild, TransitionRoot } from '@headlessui/vue';\nimport { Bars3Icon, XMarkIcon } from '@heroicons/vue/24/outline';\n\ndefineProps({\n isWideSidebar: {\n type: Boolean,\n default: false\n }\n});\n\nconst sidebarOpen = ref(false);\n\nconst closeSidebar = () => {\n sidebarOpen.value = false;\n};\n\nconst openSidebar = () => {\n sidebarOpen.value = true;\n};\n</script>\n\n<style scoped></style>\n"],"names":["sidebarOpen","ref","closeSidebar","openSidebar","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TransitionRoot","Dialog","TransitionChild","_cache","_createElementVNode","_hoisted_2","DialogPanel","_hoisted_3","XMarkIcon","_hoisted_4","_hoisted_5","_renderSlot","_ctx","_hoisted_6","_hoisted_7","_hoisted_8","_normalizeClass","__props","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","Bars3Icon","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkIA,UAAMA,IAAcC,EAAI,EAAK,GAEvBC,IAAe,MAAM;AACzB,MAAAF,EAAY,QAAQ;AAAA,IACtB,GAEMG,IAAc,MAAM;AACxB,MAAAH,EAAY,QAAQ;AAAA,IACtB;sBAzIEI,EAAA,GAAAC,EAkHM,OAlHNC,GAkHM;AAAA,MAhHJC,EAmDiBC,EAAAC,CAAA,GAAA;AAAA,QAnDD,IAAG;AAAA,QAAY,MAAMT,EAAA;AAAA,MAAA;mBACnC,MAiDS;AAAA,UAjDTO,EAiDSC,EAAAE,CAAA,GAAA;AAAA,YAjDD,IAAG;AAAA,YAAM,OAAM;AAAA,YAAoC,SAAOR;AAAA,UAAA;uBAChE,MAKkB;AAAA,cALlBK,EAKkBC,EAAAG,CAAA,GAAA;AAAA,gBALD,IAAG;AAAA,gBAAW,OAAM;AAAA,gBACnC,cAAW;AAAA,gBAAe,YAAS;AAAA,gBACnC,OAAM;AAAA,gBAAuD,cAAW;AAAA,gBACxE,YAAS;AAAA,cAAA;2BACT,MAAqD,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAArDC,EAAqD,OAAA,EAAhD,OAAM,wCAAA,GAAuC,MAAA,EAAA;AAAA,gBAAA;;;cAGpDA,EAwCM,OAxCNC,GAwCM;AAAA,gBAvCJP,EAsCkBC,EAAAG,CAAA,GAAA;AAAA,kBAtCD,IAAG;AAAA,kBAAW,OAAM;AAAA,kBACnC,cAAW;AAAA,kBAAuB,YAAS;AAAA,kBAC3C,OAAM;AAAA,kBAA4D,cAAW;AAAA,kBAC7E,YAAS;AAAA,gBAAA;6BACT,MAiCc;AAAA,oBAjCdJ,EAiCcC,EAAAO,CAAA,GAAA,EAjCD,OAAM,kEAA8D;AAAA,iCAC/E,MASkB;AAAA,wBATlBR,EASkBC,EAAAG,CAAA,GAAA;AAAA,0BATD,IAAG;AAAA,0BAAW,OAAM;AAAA,0BAAiC,cAAW;AAAA,0BAC/E,YAAS;AAAA,0BAAiB,OAAM;AAAA,0BAAiC,cAAW;AAAA,0BAC5E,YAAS;AAAA,wBAAA;qCACT,MAKM;AAAA,4BALNE,EAKM,OALNG,GAKM;AAAA,8BAJJH,EAGS,UAAA;AAAA,gCAHD,MAAK;AAAA,gCAAS,OAAM;AAAA,gCAAsB,gCAAOX,EAAA;AAAA,8BAAY;gCACnEU,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA6C,QAAA,EAAvC,OAAM,aAAA,GAAa,iBAAa,EAAA;AAAA,gCACtCN,EAA6EC,EAAAS,CAAA,GAAA;AAAA,kCAAlE,OAAM;AAAA,kCAAuC,eAAY;AAAA,gCAAA;;;;;;wBAK1EJ,EAoBM,OApBNK,GAoBM;AAAA,0BAjBJL,EAIM,OAJNM,GAIM;AAAA,4BAHJC,EAEOC,sBAFP,MAEO;AAAA,8CADLR,EAA2E,OAAA;AAAA,gCAAtE,OAAM;AAAA,gCAA8B,OAAA,EAAA,OAAA,UAAA;AAAA,8BAAA,GAAwB,QAAI,EAAA;AAAA,4BAAA;;0BAGzEA,EAMM,OANNS,GAMM;AAAA,4BALJT,EAIK,MAJLU,GAIK;AAAA,8BAHHH,EAEOC,EAAA,QAAA,YAAA;AAAA,4BAAA;;0BAGXR,EAIM,OAJNW,GAIM;AAAA,4BAHJJ,EAEOC,EAAA,QAAA,gBAAA;AAAA,0BAAA;;;;;;;;;;;;;;;MAUrBR,EAsBM,OAAA;AAAA,QArBJ,OAAKY,EAAA,CAAC,gGAEEC,EAAA,gBAAa,eAAA,YAAA,CAAA;AAAA,QADrB,OAAA,EAAA,oBAAA,UAAA;AAAA,MAAA;QAEAb,EAIM,OAJNc,GAIM;AAAA,UAHJP,EAEOC,sBAFP,MAEO;AAAA,4BADLR,EAA2E,OAAA;AAAA,cAAtE,OAAM;AAAA,cAA8B,OAAA,EAAA,OAAA,UAAA;AAAA,YAAA,GAAwB,QAAI,EAAA;AAAA,UAAA;;QAGzEA,EAYM,OAZNe,GAYM;AAAA,UAXJf,EAKK,MAAA;AAAA,YALD,MAAK;AAAA,YACN,SAAOa,EAAA,gBAAa,4DAAA,kDAAA;AAAA,UAAA;YACrBN,EAEOC,EAAA,QAAA,YAAA;AAAA,UAAA;UAETR,EAIM,OAJNgB,GAIM;AAAA,YAHJT,EAEOC,EAAA,QAAA,gBAAA;AAAA,UAAA;;;MAMbR,EAgCM,OAAA;AAAA,QAhCA,yBAAuBa,EAAA,gBAAa,gBAAA,aAAA,CAAA;AAAA,MAAA;QAExCb,EAsBM,OAtBNiB,GAsBM;AAAA,UApBJjB,EAGS,UAAA;AAAA,YAHD,MAAK;AAAA,YAAS,OAAM;AAAA,YAA2E,gCAAOV,EAAA;AAAA,UAAW;YACvHS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA4C,QAAA,EAAtC,OAAM,aAAA,GAAa,gBAAY,EAAA;AAAA,YACrCN,EAAsDC,EAAAuB,CAAA,GAAA;AAAA,cAA3C,OAAM;AAAA,cAAgB,eAAY;AAAA,YAAA;;0BAI/ClB,EAAqG,OAAA;AAAA,YAAhG,OAAM;AAAA,YAAqE,eAAY;AAAA,UAAA;UAE5FA,EAWM,OAXNmB,GAWM;AAAA,YAVJnB,EAIM,OAJNoB,GAIM;AAAA,cAHJb,EAEOC,EAAA,QAAA,gBAAA;AAAA,YAAA;YAETR,EAIM,OAJNqB,GAIM;AAAA,cAHJd,EAEOC,EAAA,QAAA,cAAA;AAAA,YAAA;;;QAMbR,EAIO,QAJPsB,GAIO;AAAA,UAHLf,EAEOC,EAAA,QAAA,MAAA;AAAA,QAAA;;;;;"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as d, computed as a, createElementBlock as m, openBlock as i, normalizeStyle as s, createBlock as c, createCommentVNode as h, unref as y } from "vue";
|
|
2
2
|
import f from "vue-echarts";
|
|
3
3
|
import { use as u } from "echarts/core";
|
|
4
4
|
import { CanvasRenderer as w } from "echarts/renderers";
|
|
5
|
-
import { LineChart as
|
|
6
|
-
import { GridComponent as
|
|
7
|
-
import { chartColors as
|
|
8
|
-
const M = /* @__PURE__ */
|
|
5
|
+
import { LineChart as x, BarChart as C } from "echarts/charts";
|
|
6
|
+
import { GridComponent as b } from "echarts/components";
|
|
7
|
+
import { chartColors as g, getAreaGradient as S } from "./charts/chartTheme.js";
|
|
8
|
+
const M = /* @__PURE__ */ d({
|
|
9
9
|
__name: "SparklineChart",
|
|
10
10
|
props: {
|
|
11
11
|
data: {},
|
|
12
12
|
type: { default: "line" },
|
|
13
13
|
height: { default: 40 },
|
|
14
14
|
width: { default: "100%" },
|
|
15
|
-
color: { default:
|
|
15
|
+
color: { default: g.primary[0] },
|
|
16
16
|
showEndpoint: { type: Boolean, default: !1 }
|
|
17
17
|
},
|
|
18
|
-
setup(
|
|
19
|
-
u([w, C, b
|
|
20
|
-
const t =
|
|
18
|
+
setup(o) {
|
|
19
|
+
u([w, x, C, b]);
|
|
20
|
+
const t = o, n = a(() => ({
|
|
21
21
|
height: `${t.height}px`,
|
|
22
22
|
width: typeof t.width == "number" ? `${t.width}px` : t.width
|
|
23
|
-
})), l =
|
|
24
|
-
const
|
|
23
|
+
})), l = a(() => {
|
|
24
|
+
const r = t.type === "area", e = t.type === "bar";
|
|
25
25
|
return {
|
|
26
26
|
grid: {
|
|
27
27
|
left: 0,
|
|
@@ -51,7 +51,7 @@ const M = /* @__PURE__ */ s({
|
|
|
51
51
|
width: 2,
|
|
52
52
|
color: t.color
|
|
53
53
|
},
|
|
54
|
-
areaStyle:
|
|
54
|
+
areaStyle: r ? {
|
|
55
55
|
color: S(t.color)
|
|
56
56
|
} : void 0,
|
|
57
57
|
itemStyle: {
|
|
@@ -61,18 +61,18 @@ const M = /* @__PURE__ */ s({
|
|
|
61
61
|
}]
|
|
62
62
|
};
|
|
63
63
|
});
|
|
64
|
-
return (
|
|
65
|
-
style:
|
|
64
|
+
return (r, e) => (i(), m("div", {
|
|
65
|
+
style: s(n.value)
|
|
66
66
|
}, [
|
|
67
|
-
o.data.length > 0 ? (
|
|
67
|
+
o.data.length > 0 ? (i(), c(y(f), {
|
|
68
68
|
key: 0,
|
|
69
69
|
option: l.value,
|
|
70
70
|
autoresize: !0
|
|
71
|
-
}, null, 8, ["option"])) :
|
|
71
|
+
}, null, 8, ["option"])) : h("", !0)
|
|
72
72
|
], 4));
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
75
|
export {
|
|
76
76
|
M as _
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=SparklineChart.vue_vue_type_script_setup_true_lang-
|
|
78
|
+
//# sourceMappingURL=SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparklineChart.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js","sources":["../src/components/charts/SparklineChart.vue"],"sourcesContent":["<!--\n @component SparklineChart\n @description Mini inline sparkline chart.\n \n A compact chart for displaying trends in small spaces,\n like table cells or stat cards.\n \n @props\n - data (array, required): Array of numeric values\n - type (string, optional): Chart type - 'line' | 'bar' | 'area'\n - height (number, optional): Chart height in pixels\n - width (number|string, optional): Chart width\n - color (string, optional): Primary chart color\n - showEndpoint (boolean, optional): Show endpoint marker\n \n @example\n <SparklineChart\n :data=\"[10, 25, 15, 30, 20, 35]\"\n type=\"area\"\n :height=\"40\"\n color=\"#10b981\"\n />\n-->\n<template>\n <div :style=\"containerStyle\">\n <VChart\n v-if=\"data.length > 0\"\n :option=\"chartOption\"\n :autoresize=\"true\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport VChart from 'vue-echarts';\nimport { use } from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChart, BarChart } from 'echarts/charts';\nimport { GridComponent } from 'echarts/components';\nimport { chartColors, getAreaGradient } from './chartTheme';\nimport type { EChartsOption } from 'echarts';\n\nuse([CanvasRenderer, LineChart, BarChart, GridComponent]);\n\ninterface Props {\n data: number[];\n type?: 'line' | 'bar' | 'area';\n height?: number;\n width?: number | string;\n color?: string;\n showEndpoint?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n type: 'line',\n height: 40,\n width: '100%',\n color: chartColors.primary[0],\n showEndpoint: false,\n});\n\nconst containerStyle = computed(() => ({\n height: `${props.height}px`,\n width: typeof props.width === 'number' ? `${props.width}px` : props.width,\n}));\n\nconst chartOption = computed<EChartsOption>(() => {\n const isArea = props.type === 'area';\n const isBar = props.type === 'bar';\n\n return {\n grid: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n xAxis: {\n type: 'category',\n show: false,\n data: props.data.map((_, i) => i),\n },\n yAxis: {\n type: 'value',\n show: false,\n min: 'dataMin',\n max: 'dataMax',\n },\n series: [{\n type: isBar ? 'bar' : 'line',\n data: props.data,\n smooth: !isBar,\n symbol: props.showEndpoint ? 'circle' : 'none',\n symbolSize: props.showEndpoint ? 6 : 0,\n showSymbol: props.showEndpoint,\n lineStyle: isBar ? undefined : {\n width: 2,\n color: props.color,\n },\n areaStyle: isArea ? {\n color: getAreaGradient(props.color),\n } : undefined,\n itemStyle: {\n color: props.color,\n },\n barWidth: '60%',\n }],\n };\n});\n</script>\n\n"],"names":["use","CanvasRenderer","LineChart","BarChart","GridComponent","props","__props","containerStyle","computed","chartOption","isArea","isBar","_","i","getAreaGradient","_createElementBlock","_createBlock","_unref","VChart"],"mappings":";;;;;;;;;;;;;;;;;;AA2CA,IAAAA,EAAI,CAACC,GAAgBC,GAAWC,GAAUC,CAAa,CAAC;AAWxD,UAAMC,IAAQC,GAQRC,IAAiBC,EAAS,OAAO;AAAA,MACrC,QAAQ,GAAGH,EAAM,MAAM;AAAA,MACvB,OAAO,OAAOA,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM;AAAA,IAAA,EACpE,GAEII,IAAcD,EAAwB,MAAM;AAChD,YAAME,IAASL,EAAM,SAAS,QACxBM,IAAQN,EAAM,SAAS;AAE7B,aAAO;AAAA,QACL,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,UACL,QAAQ;AAAA,QAAA;AAAA,QAEV,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAMA,EAAM,KAAK,IAAI,CAACO,GAAGC,MAAMA,CAAC;AAAA,QAAA;AAAA,QAElC,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,QAAA;AAAA,QAEP,QAAQ,CAAC;AAAA,UACP,MAAMF,IAAQ,QAAQ;AAAA,UACtB,MAAMN,EAAM;AAAA,UACZ,QAAQ,CAACM;AAAA,UACT,QAAQN,EAAM,eAAe,WAAW;AAAA,UACxC,YAAYA,EAAM,eAAe,IAAI;AAAA,UACrC,YAAYA,EAAM;AAAA,UAClB,WAAWM,IAAQ,SAAY;AAAA,YAC7B,OAAO;AAAA,YACP,OAAON,EAAM;AAAA,UAAA;AAAA,UAEf,WAAWK,IAAS;AAAA,YAClB,OAAOI,EAAgBT,EAAM,KAAK;AAAA,UAAA,IAChC;AAAA,UACJ,WAAW;AAAA,YACT,OAAOA,EAAM;AAAA,UAAA;AAAA,UAEf,UAAU;AAAA,QAAA,CACX;AAAA,MAAA;AAAA,IAEL,CAAC;2BArFCU,EAMM,OAAA;AAAA,MANA,SAAOR,EAAA,KAAc;AAAA,IAAA;MAEjBD,EAAA,KAAK,SAAM,UADnBU,EAIEC,EAAAC,CAAA,GAAA;AAAA;QAFC,QAAQT,EAAA;AAAA,QACR,YAAY;AAAA,MAAA;;;;"}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import { createElementBlock as l, openBlock as
|
|
2
|
-
import { _ } from "./SparklineChart.vue_vue_type_script_setup_true_lang-
|
|
3
|
-
import { chartColors as
|
|
4
|
-
function
|
|
5
|
-
return
|
|
1
|
+
import { createElementBlock as l, openBlock as t, createElementVNode as s, defineComponent as x, computed as n, createCommentVNode as r, createBlock as u, resolveDynamicComponent as h, toDisplayString as c, normalizeClass as f, createVNode as k } from "vue";
|
|
2
|
+
import { _ as w } from "./SparklineChart.vue_vue_type_script_setup_true_lang-BlNk5ZqM.js";
|
|
3
|
+
import { chartColors as d } from "./charts/chartTheme.js";
|
|
4
|
+
function y(e, a) {
|
|
5
|
+
return t(), l("svg", {
|
|
6
6
|
xmlns: "http://www.w3.org/2000/svg",
|
|
7
7
|
viewBox: "0 0 20 20",
|
|
8
8
|
fill: "currentColor",
|
|
9
9
|
"aria-hidden": "true",
|
|
10
10
|
"data-slot": "icon"
|
|
11
11
|
}, [
|
|
12
|
-
|
|
12
|
+
s("path", {
|
|
13
13
|
"fill-rule": "evenodd",
|
|
14
14
|
d: "M10 3a.75.75 0 0 1 .75.75v10.638l3.96-4.158a.75.75 0 1 1 1.08 1.04l-5.25 5.5a.75.75 0 0 1-1.08 0l-5.25-5.5a.75.75 0 1 1 1.08-1.04l3.96 4.158V3.75A.75.75 0 0 1 10 3Z",
|
|
15
15
|
"clip-rule": "evenodd"
|
|
16
16
|
})
|
|
17
17
|
]);
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
19
|
+
function p(e, a) {
|
|
20
|
+
return t(), l("svg", {
|
|
21
21
|
xmlns: "http://www.w3.org/2000/svg",
|
|
22
22
|
viewBox: "0 0 20 20",
|
|
23
23
|
fill: "currentColor",
|
|
24
24
|
"aria-hidden": "true",
|
|
25
25
|
"data-slot": "icon"
|
|
26
26
|
}, [
|
|
27
|
-
|
|
27
|
+
s("path", {
|
|
28
28
|
"fill-rule": "evenodd",
|
|
29
29
|
d: "M10 17a.75.75 0 0 1-.75-.75V5.612L5.29 9.77a.75.75 0 0 1-1.08-1.04l5.25-5.5a.75.75 0 0 1 1.08 0l5.25 5.5a.75.75 0 1 1-1.08 1.04l-3.96-4.158V16.25A.75.75 0 0 1 10 17Z",
|
|
30
30
|
"clip-rule": "evenodd"
|
|
31
31
|
})
|
|
32
32
|
]);
|
|
33
33
|
}
|
|
34
|
-
function b(
|
|
35
|
-
return
|
|
34
|
+
function b(e, a) {
|
|
35
|
+
return t(), l("svg", {
|
|
36
36
|
xmlns: "http://www.w3.org/2000/svg",
|
|
37
37
|
viewBox: "0 0 20 20",
|
|
38
38
|
fill: "currentColor",
|
|
39
39
|
"aria-hidden": "true",
|
|
40
40
|
"data-slot": "icon"
|
|
41
41
|
}, [
|
|
42
|
-
|
|
42
|
+
s("path", {
|
|
43
43
|
"fill-rule": "evenodd",
|
|
44
44
|
d: "M4 10a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H4.75A.75.75 0 0 1 4 10Z",
|
|
45
45
|
"clip-rule": "evenodd"
|
|
46
46
|
})
|
|
47
47
|
]);
|
|
48
48
|
}
|
|
49
|
-
const
|
|
49
|
+
const _ = { class: "sl-bg-white dark:sl-bg-slate-800 sl-rounded-xl sl-shadow-sm sl-ring-1 sl-ring-gray-900/5 dark:sl-ring-slate-700 sl-p-6" }, C = { class: "sl-flex sl-items-center sl-justify-between" }, B = { class: "sl-flex sl-items-center sl-gap-3" }, D = {
|
|
50
50
|
key: 0,
|
|
51
51
|
class: "sl-flex sl-items-center sl-justify-center sl-w-10 sl-h-10 sl-rounded-lg sl-bg-stachelock-50 dark:sl-bg-stachelock-900/30"
|
|
52
|
-
},
|
|
52
|
+
}, V = { class: "sl-text-sm sl-font-medium sl-text-gray-500 dark:sl-text-slate-400" }, L = { class: "sl-mt-4" }, M = {
|
|
53
53
|
key: 0,
|
|
54
54
|
class: "sl-text-3xl sl-font-semibold sl-text-gray-900 dark:sl-text-white sl-tabular-nums"
|
|
55
|
-
},
|
|
55
|
+
}, N = {
|
|
56
56
|
key: 1,
|
|
57
57
|
class: "sl-h-9 sl-w-24 sl-bg-gray-200 dark:sl-bg-slate-700 sl-rounded sl-animate-pulse"
|
|
58
|
-
},
|
|
58
|
+
}, A = {
|
|
59
59
|
key: 0,
|
|
60
60
|
class: "sl-mt-4"
|
|
61
|
-
},
|
|
61
|
+
}, Z = {
|
|
62
62
|
key: 1,
|
|
63
63
|
class: "sl-mt-2 sl-text-xs sl-text-gray-500 dark:sl-text-slate-400"
|
|
64
|
-
}, H = /* @__PURE__ */
|
|
64
|
+
}, H = /* @__PURE__ */ x({
|
|
65
65
|
__name: "StatCard",
|
|
66
66
|
props: {
|
|
67
67
|
title: {},
|
|
@@ -72,40 +72,40 @@ const C = { class: "sl-bg-white dark:sl-bg-slate-800 sl-rounded-xl sl-shadow-sm
|
|
|
72
72
|
icon: {},
|
|
73
73
|
loading: { type: Boolean, default: !1 }
|
|
74
74
|
},
|
|
75
|
-
setup(
|
|
76
|
-
const a =
|
|
77
|
-
return (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
e.icon ? (
|
|
81
|
-
(
|
|
82
|
-
])) :
|
|
83
|
-
|
|
75
|
+
setup(e) {
|
|
76
|
+
const a = e, o = n(() => a.change !== void 0 && a.change > 0), i = n(() => a.change !== void 0 && a.change < 0), g = n(() => o.value ? "sl-text-green-600 dark:sl-text-green-400" : i.value ? "sl-text-red-600 dark:sl-text-red-400" : "sl-text-gray-500 dark:sl-text-slate-400"), v = n(() => o.value ? p : i.value ? y : b), m = n(() => o.value ? d.success : i.value ? d.danger : d.primary[0]);
|
|
77
|
+
return ($, j) => (t(), l("div", _, [
|
|
78
|
+
s("div", C, [
|
|
79
|
+
s("div", B, [
|
|
80
|
+
e.icon ? (t(), l("div", D, [
|
|
81
|
+
(t(), u(h(e.icon), { class: "sl-h-5 sl-w-5 sl-text-stachelock-600 dark:sl-text-stachelock-400" }))
|
|
82
|
+
])) : r("", !0),
|
|
83
|
+
s("p", V, c(e.title), 1)
|
|
84
84
|
]),
|
|
85
|
-
e.change !== void 0 ? (
|
|
85
|
+
e.change !== void 0 ? (t(), l("div", {
|
|
86
86
|
key: 0,
|
|
87
|
-
class:
|
|
87
|
+
class: f(["sl-flex sl-items-center sl-gap-1 sl-text-sm sl-font-medium", g.value])
|
|
88
88
|
}, [
|
|
89
|
-
(
|
|
90
|
-
|
|
91
|
-
], 2)) :
|
|
89
|
+
(t(), u(h(v.value), { class: "sl-h-4 sl-w-4" })),
|
|
90
|
+
s("span", null, c(Math.abs(e.change)) + "%", 1)
|
|
91
|
+
], 2)) : r("", !0)
|
|
92
92
|
]),
|
|
93
|
-
|
|
94
|
-
e.loading ? (
|
|
93
|
+
s("div", L, [
|
|
94
|
+
e.loading ? (t(), l("div", N)) : (t(), l("p", M, c(e.value), 1))
|
|
95
95
|
]),
|
|
96
|
-
e.sparklineData && e.sparklineData.length > 0 ? (
|
|
97
|
-
|
|
96
|
+
e.sparklineData && e.sparklineData.length > 0 ? (t(), l("div", A, [
|
|
97
|
+
k(w, {
|
|
98
98
|
data: e.sparklineData,
|
|
99
99
|
type: "area",
|
|
100
100
|
height: 40,
|
|
101
|
-
color:
|
|
101
|
+
color: m.value
|
|
102
102
|
}, null, 8, ["data", "color"])
|
|
103
|
-
])) :
|
|
104
|
-
e.changeLabel ? (
|
|
103
|
+
])) : r("", !0),
|
|
104
|
+
e.changeLabel ? (t(), l("p", Z, c(e.changeLabel), 1)) : r("", !0)
|
|
105
105
|
]));
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
108
|
export {
|
|
109
109
|
H as _
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=StatCard.vue_vue_type_script_setup_true_lang-
|
|
111
|
+
//# sourceMappingURL=StatCard.vue_vue_type_script_setup_true_lang-BfFupfmC.js.map
|