vectis-ui 0.1.0 → 0.8.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/README.md +40 -6
- package/dist/components/VAccordion/VAccordion.css +1 -1
- package/dist/components/VAccordion/VAccordion.d.ts +9 -16
- package/dist/components/VAccordion/VAccordion.js.map +1 -1
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.css +1 -1
- package/dist/components/VAccordion/VAccordionItem.d.ts +33 -19
- package/dist/components/VAccordion/VAccordionItem.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js +50 -38
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAccordion/context.d.ts +1 -8
- package/dist/components/VAccordion/context.js.map +1 -1
- package/dist/components/VAvatar/VAvatar.css +1 -1
- package/dist/components/VAvatar/VAvatar.d.ts +44 -29
- package/dist/components/VAvatar/VAvatar.js.map +1 -1
- package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js +38 -35
- package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAvatar/VAvatarGroup.d.ts +5 -16
- package/dist/components/VAvatar/VAvatarGroup.js.map +1 -1
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAvatar/context.d.ts +6 -10
- package/dist/components/VAvatar/context.js.map +1 -1
- package/dist/components/VBadge/VBadge.css +1 -1
- package/dist/components/VBadge/VBadge.d.ts +31 -10
- package/dist/components/VBadge/VBadge.js.map +1 -1
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js +39 -24
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VBreadcrumb/VBreadcrumb.css +1 -1
- package/dist/components/VBreadcrumb/VBreadcrumb.d.ts +4 -17
- package/dist/components/VBreadcrumb/VBreadcrumb.js.map +1 -1
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js +23 -25
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/VButton.css +1 -1
- package/dist/components/VButton/VButton.d.ts +30 -10
- package/dist/components/VButton/VButton.js.map +1 -1
- package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js +39 -30
- package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/VButtonGroup.css +1 -1
- package/dist/components/VButton/VButtonGroup.d.ts +76 -13
- package/dist/components/VButton/VButtonGroup.js.map +1 -1
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js +74 -8
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/context.d.ts +30 -0
- package/dist/components/VButton/context.js +6 -0
- package/dist/components/VButton/context.js.map +1 -0
- package/dist/components/VCalendar/VCalendar.css +1 -1
- package/dist/components/VCalendar/VCalendar.d.ts +50 -36
- package/dist/components/VCalendar/VCalendar.js.map +1 -1
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js +99 -85
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.css +1 -1
- package/dist/components/VCalendar/VCalendarEvent.d.ts +5 -11
- package/dist/components/VCalendar/VCalendarEvent.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.css +1 -1
- package/dist/components/VCalendar/VCalendarMonth.d.ts +10 -13
- package/dist/components/VCalendar/VCalendarMonth.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js +183 -244
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.css +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.d.ts +15 -20
- package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js +385 -448
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.css +1 -1
- package/dist/components/VCalendar/VCalendarYear.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js +53 -49
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/gesture.d.ts +158 -0
- package/dist/components/VCalendar/gesture.js +170 -0
- package/dist/components/VCalendar/gesture.js.map +1 -0
- package/dist/components/VCalendar/keyboard.d.ts +9 -3
- package/dist/components/VCalendar/keyboard.js +2 -6
- package/dist/components/VCalendar/keyboard.js.map +1 -1
- package/dist/components/VCalendar/layout.d.ts +67 -54
- package/dist/components/VCalendar/layout.js +77 -69
- package/dist/components/VCalendar/layout.js.map +1 -1
- package/dist/components/VCalendar/timeGrid.d.ts +55 -0
- package/dist/components/VCalendar/timeGrid.js +71 -0
- package/dist/components/VCalendar/timeGrid.js.map +1 -0
- package/dist/components/VCalendar/types.d.ts +41 -16
- package/dist/components/VCarousel/VCarousel.css +1 -1
- package/dist/components/VCarousel/VCarousel.d.ts +21 -41
- package/dist/components/VCarousel/VCarousel.js.map +1 -1
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js +157 -129
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCarousel/VCarouselItem.d.ts +0 -17
- package/dist/components/VCarousel/VCarouselItem.js.map +1 -1
- package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCarousel/context.d.ts +0 -12
- package/dist/components/VCarousel/context.js.map +1 -1
- package/dist/components/VCheckbox/VCheckbox.css +1 -1
- package/dist/components/VCheckbox/VCheckbox.d.ts +31 -16
- package/dist/components/VCheckbox/VCheckbox.js.map +1 -1
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js +62 -29
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VChip/VChip.css +1 -1
- package/dist/components/VChip/VChip.d.ts +36 -26
- package/dist/components/VChip/VChip.js.map +1 -1
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js +57 -48
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCombobox/VCombobox.css +1 -1
- package/dist/components/VCombobox/VCombobox.d.ts +127 -31
- package/dist/components/VCombobox/VCombobox.js.map +1 -1
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +336 -247
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCombobox/VComboboxGroup.css +1 -1
- package/dist/components/VCombobox/VComboboxGroup.d.ts +0 -9
- package/dist/components/VCombobox/VComboboxGroup.js.map +1 -1
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCombobox/VComboboxOption.css +1 -1
- package/dist/components/VCombobox/VComboboxOption.d.ts +0 -15
- package/dist/components/VCombobox/VComboboxOption.js.map +1 -1
- package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCombobox/VComboboxSeparator.js.map +1 -1
- package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCombobox/infiniteScroll.js.map +1 -1
- package/dist/components/VDataTable/VDataTable.css +1 -1
- package/dist/components/VDataTable/VDataTable.d.ts +50 -28
- package/dist/components/VDataTable/VDataTable.js.map +1 -1
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +183 -194
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.css +1 -1
- package/dist/components/VDateInput/VDateInput.d.ts +90 -42
- package/dist/components/VDateInput/VDateInput.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +159 -191
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.css +1 -1
- package/dist/components/VDatePicker/VDatePicker.d.ts +61 -30
- package/dist/components/VDatePicker/VDatePicker.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +243 -221
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDialog/VDialog.css +1 -1
- package/dist/components/VDialog/VDialog.d.ts +45 -33
- package/dist/components/VDialog/VDialog.js.map +1 -1
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js +65 -64
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDialog/VDialogAlert.d.ts +24 -20
- package/dist/components/VDialog/VDialogAlert.js.map +1 -1
- package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js +36 -25
- package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFileInput/VFileInput.css +1 -1
- package/dist/components/VFileInput/VFileInput.d.ts +78 -26
- package/dist/components/VFileInput/VFileInput.js.map +1 -1
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +144 -132
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFilePicker/VFilePicker.css +1 -1
- package/dist/components/VFilePicker/VFilePicker.d.ts +47 -30
- package/dist/components/VFilePicker/VFilePicker.js.map +1 -1
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js +166 -163
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFilePicker/fileKind.d.ts +2 -27
- package/dist/components/VFilePicker/fileKind.js +9 -8
- package/dist/components/VFilePicker/fileKind.js.map +1 -1
- package/dist/components/VHotkeys/VHotkeys.css +1 -1
- package/dist/components/VHotkeys/VHotkeys.d.ts +8 -30
- package/dist/components/VHotkeys/VHotkeys.js.map +1 -1
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VHotkeys/platform.js.map +1 -1
- package/dist/components/VIcon/VIcon.css +1 -1
- package/dist/components/VIcon/VIcon.d.ts +15 -6
- package/dist/components/VIcon/VIcon.js.map +1 -1
- package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js +45 -37
- package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VIcon/iconProps.js.map +1 -1
- package/dist/components/VIcon/icons/index.d.ts +1 -1
- package/dist/components/VIcon/icons/index.js.map +1 -1
- package/dist/components/VIcon/icons/names.d.ts +1 -1
- package/dist/components/VIcon/icons/names.js.map +1 -1
- package/dist/components/VIcon/resolver.d.ts +3 -3
- package/dist/components/VIcon/resolver.js.map +1 -1
- package/dist/components/VIcon/types.d.ts +12 -12
- package/dist/components/VIconButton/VIconButton.css +1 -1
- package/dist/components/VIconButton/VIconButton.d.ts +28 -11
- package/dist/components/VIconButton/VIconButton.js.map +1 -1
- package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js +26 -20
- package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/VInput.css +1 -1
- package/dist/components/VInput/VInput.d.ts +26 -7
- package/dist/components/VInput/VInput.js.map +1 -1
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +86 -75
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/VInputGroup.css +2 -0
- package/dist/components/VInput/VInputGroup.d.ts +47 -0
- package/dist/components/VInput/VInputGroup.js +9 -0
- package/dist/components/VInput/VInputGroup.js.map +1 -0
- package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js +80 -0
- package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VInput/context.d.ts +11 -0
- package/dist/components/VInput/context.js +6 -0
- package/dist/components/VInput/context.js.map +1 -0
- package/dist/components/VInputOTP/VInputOTP.css +1 -1
- package/dist/components/VInputOTP/VInputOTP.d.ts +37 -22
- package/dist/components/VInputOTP/VInputOTP.js.map +1 -1
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +98 -61
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenu.d.ts +23 -30
- package/dist/components/VMenu/VMenu.js.map +1 -1
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js +31 -27
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuGroup.css +1 -1
- package/dist/components/VMenu/VMenuGroup.d.ts +12 -8
- package/dist/components/VMenu/VMenuGroup.js.map +1 -1
- package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuItem.css +1 -1
- package/dist/components/VMenu/VMenuItem.d.ts +11 -19
- package/dist/components/VMenu/VMenuItem.js.map +1 -1
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +65 -57
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuPanel.d.ts +14 -30
- package/dist/components/VMenu/VMenuPanel.js.map +1 -1
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +43 -44
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/context.d.ts +2 -6
- package/dist/components/VMenu/context.js.map +1 -1
- package/dist/components/VPagination/VPagination.css +1 -1
- package/dist/components/VPagination/VPagination.d.ts +60 -22
- package/dist/components/VPagination/VPagination.js.map +1 -1
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +113 -161
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VPopover/VPopover.css +1 -1
- package/dist/components/VPopover/VPopover.d.ts +26 -7
- package/dist/components/VPopover/VPopover.js.map +1 -1
- package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js +43 -37
- package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VProgressCircular/VProgressCircular.css +1 -1
- package/dist/components/VProgressCircular/VProgressCircular.d.ts +15 -4
- package/dist/components/VProgressCircular/VProgressCircular.js.map +1 -1
- package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js +32 -30
- package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.css +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.d.ts +23 -8
- package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js +34 -32
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VRadio/VRadio.css +1 -1
- package/dist/components/VRadio/VRadio.d.ts +36 -18
- package/dist/components/VRadio/VRadio.js.map +1 -1
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js +55 -26
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSeparator/VSeparator.d.ts +4 -2
- package/dist/components/VSeparator/VSeparator.js.map +1 -1
- package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.css +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.d.ts +5 -19
- package/dist/components/VSideNavigation/VSideNavigation.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationGroup.css +1 -1
- package/dist/components/VSideNavigation/VSideNavigationGroup.d.ts +9 -17
- package/dist/components/VSideNavigation/VSideNavigationGroup.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.css +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.d.ts +22 -30
- package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +77 -87
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/context.d.ts +0 -14
- package/dist/components/VSideNavigation/context.js.map +1 -1
- package/dist/components/VSkeletonLoader/VSkeletonLoader.css +1 -1
- package/dist/components/VSkeletonLoader/VSkeletonLoader.d.ts +9 -9
- package/dist/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSlider/VSlider.css +1 -1
- package/dist/components/VSlider/VSlider.d.ts +52 -27
- package/dist/components/VSlider/VSlider.js.map +1 -1
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +202 -118
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSnackbar/VSnackbar.css +1 -1
- package/dist/components/VSnackbar/VSnackbar.d.ts +0 -23
- package/dist/components/VSnackbar/VSnackbar.js.map +1 -1
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js +38 -38
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSnackbar/state.d.ts +0 -27
- package/dist/components/VSnackbar/state.js.map +1 -1
- package/dist/components/VSpinner/VSpinner.css +1 -1
- package/dist/components/VSpinner/VSpinner.d.ts +6 -6
- package/dist/components/VSpinner/VSpinner.js.map +1 -1
- package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js +10 -9
- package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSwitch/VSwitch.css +1 -1
- package/dist/components/VSwitch/VSwitch.d.ts +35 -13
- package/dist/components/VSwitch/VSwitch.js.map +1 -1
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js +62 -21
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTab.css +1 -1
- package/dist/components/VTabs/VTab.d.ts +12 -12
- package/dist/components/VTabs/VTab.js.map +1 -1
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js +36 -24
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTabPanel.d.ts +2 -10
- package/dist/components/VTabs/VTabPanel.js.map +1 -1
- package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTabs.css +1 -1
- package/dist/components/VTabs/VTabs.d.ts +27 -18
- package/dist/components/VTabs/VTabs.js.map +1 -1
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js +92 -81
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/context.d.ts +9 -19
- package/dist/components/VTabs/context.js +1 -1
- package/dist/components/VTabs/context.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.css +1 -1
- package/dist/components/VTextarea/VTextarea.d.ts +34 -6
- package/dist/components/VTextarea/VTextarea.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js +91 -74
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.css +1 -1
- package/dist/components/VTimeInput/VTimeInput.d.ts +123 -33
- package/dist/components/VTimeInput/VTimeInput.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +294 -291
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeInput/search.d.ts +24 -0
- package/dist/components/VTimeInput/search.js +22 -0
- package/dist/components/VTimeInput/search.js.map +1 -0
- package/dist/components/VTimePicker/VTimePicker.css +1 -1
- package/dist/components/VTimePicker/VTimePicker.d.ts +51 -30
- package/dist/components/VTimePicker/VTimePicker.js.map +1 -1
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +216 -151
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimePicker/limits.d.ts +88 -0
- package/dist/components/VTimePicker/limits.js +70 -0
- package/dist/components/VTimePicker/limits.js.map +1 -0
- package/dist/components/VToast/VToast.css +1 -1
- package/dist/components/VToast/VToast.d.ts +0 -10
- package/dist/components/VToast/VToast.js.map +1 -1
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToast/VToaster.css +1 -1
- package/dist/components/VToast/VToaster.d.ts +0 -17
- package/dist/components/VToast/VToaster.js.map +1 -1
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +29 -28
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToast/state.d.ts +10 -19
- package/dist/components/VToast/state.js +1 -1
- package/dist/components/VToast/state.js.map +1 -1
- package/dist/components/VToggle/VToggle.css +1 -1
- package/dist/components/VToggle/VToggle.d.ts +56 -11
- package/dist/components/VToggle/VToggle.js.map +1 -1
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js +80 -46
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToggle/VToggleItem.d.ts +16 -2
- package/dist/components/VToggle/VToggleItem.js +0 -2
- package/dist/components/VToggle/VToggleItem.js.map +1 -1
- package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js +23 -15
- package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToggle/context.d.ts +4 -24
- package/dist/components/VToggle/context.js.map +1 -1
- package/dist/components/VTooltip/VTooltip.css +1 -1
- package/dist/components/VTooltip/VTooltip.d.ts +9 -33
- package/dist/components/VTooltip/VTooltip.js.map +1 -1
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js +28 -24
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTypography/VTypography.js.map +1 -1
- package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/useAriaLabel.d.ts +0 -17
- package/dist/composables/useAriaLabel.js.map +1 -1
- package/dist/composables/useClearable.d.ts +42 -0
- package/dist/composables/useClearable.js +19 -0
- package/dist/composables/useClearable.js.map +1 -0
- package/dist/composables/useControlShape.d.ts +22 -0
- package/dist/composables/useControlShape.js +13 -0
- package/dist/composables/useControlShape.js.map +1 -0
- package/dist/composables/useDetailsOpen.d.ts +22 -0
- package/dist/composables/useDetailsOpen.js +21 -0
- package/dist/composables/useDetailsOpen.js.map +1 -0
- package/dist/composables/useFieldIds.d.ts +0 -15
- package/dist/composables/useFieldIds.js +8 -7
- package/dist/composables/useFieldIds.js.map +1 -1
- package/dist/composables/useFieldPanel.d.ts +21 -18
- package/dist/composables/useFieldPanel.js +43 -23
- package/dist/composables/useFieldPanel.js.map +1 -1
- package/dist/composables/useFileDrop.d.ts +0 -22
- package/dist/composables/useFileDrop.js.map +1 -1
- package/dist/composables/useFileField.d.ts +45 -17
- package/dist/composables/useFileField.js +40 -20
- package/dist/composables/useFileField.js.map +1 -1
- package/dist/composables/useFocusoutDismiss.d.ts +0 -15
- package/dist/composables/useFocusoutDismiss.js.map +1 -1
- package/dist/composables/useIconClickHandlers.d.ts +29 -14
- package/dist/composables/useIconClickHandlers.js +15 -5
- package/dist/composables/useIconClickHandlers.js.map +1 -1
- package/dist/composables/useInertLink.d.ts +20 -0
- package/dist/composables/useInertLink.js +23 -0
- package/dist/composables/useInertLink.js.map +1 -0
- package/dist/composables/useMaskedField.d.ts +33 -10
- package/dist/composables/useMaskedField.js +45 -1
- package/dist/composables/useMaskedField.js.map +1 -1
- package/dist/composables/usePopover.d.ts +15 -1
- package/dist/composables/usePopover.js +23 -8
- package/dist/composables/usePopover.js.map +1 -1
- package/dist/composables/useProgressValue.d.ts +5 -8
- package/dist/composables/useProgressValue.js +6 -3
- package/dist/composables/useProgressValue.js.map +1 -1
- package/dist/composables/useRootAttrs.d.ts +12 -19
- package/dist/composables/useRootAttrs.js.map +1 -1
- package/dist/composables/useTimer.d.ts +8 -10
- package/dist/composables/useTimer.js.map +1 -1
- package/dist/i18n/en.d.ts +2 -10
- package/dist/i18n/en.js +18 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.d.ts +2 -18
- package/dist/i18n/fr.js +18 -19
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/state.d.ts +44 -47
- package/dist/i18n/state.js +20 -17
- package/dist/i18n/state.js.map +1 -1
- package/dist/i18n/types.d.ts +53 -44
- package/dist/icons.d.ts +3 -3
- package/dist/index.d.ts +43 -17
- package/dist/index.js +45 -44
- package/dist/styles.css +1 -1
- package/dist/tokens/css.js.map +1 -1
- package/dist/tokens/index.d.ts +5 -1
- package/dist/tokens/primitives.js.map +1 -1
- package/dist/tokens/semantic.d.ts +5 -1
- package/dist/tokens/semantic.js +6 -2
- package/dist/tokens/semantic.js.map +1 -1
- package/dist/tokens/themes/dark.js.map +1 -1
- package/dist/tokens/types.d.ts +7 -15
- package/dist/tokens/types.js.map +1 -1
- package/dist/tokens.json +25 -5
- package/dist/types.d.ts +24 -0
- package/dist/utils/array.d.ts +3 -6
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/arrowNav.d.ts +17 -17
- package/dist/utils/arrowNav.js +5 -3
- package/dist/utils/arrowNav.js.map +1 -1
- package/dist/utils/chip.d.ts +11 -15
- package/dist/utils/chip.js.map +1 -1
- package/dist/utils/css.d.ts +22 -11
- package/dist/utils/css.js +5 -2
- package/dist/utils/css.js.map +1 -1
- package/dist/utils/date.d.ts +42 -19
- package/dist/utils/date.js +97 -98
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/direction.d.ts +6 -12
- package/dist/utils/direction.js.map +1 -1
- package/dist/utils/env.d.ts +5 -6
- package/dist/utils/file.d.ts +46 -58
- package/dist/utils/file.js +43 -36
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/focus.d.ts +8 -17
- package/dist/utils/focus.js.map +1 -1
- package/dist/utils/hostWarns.d.ts +12 -0
- package/dist/utils/hostWarns.js +6 -0
- package/dist/utils/hostWarns.js.map +1 -0
- package/dist/utils/ids.d.ts +10 -0
- package/dist/utils/ids.js +8 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/matcher.d.ts +5 -9
- package/dist/utils/matcher.js.map +1 -1
- package/dist/utils/memo.d.ts +12 -0
- package/dist/utils/memo.js +9 -0
- package/dist/utils/memo.js.map +1 -0
- package/dist/utils/number.d.ts +3 -4
- package/dist/utils/number.js.map +1 -1
- package/dist/utils/text.d.ts +20 -9
- package/dist/utils/text.js +17 -3
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/time.d.ts +53 -61
- package/dist/utils/time.js +49 -45
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/vnode.d.ts +8 -15
- package/dist/utils/vnode.js.map +1 -1
- package/package.json +6 -6
- package/dist/components/VToggle/VToggleItem.css +0 -2
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { useMessages as e } from "../../i18n/state.js";
|
|
2
|
-
import t from "../VIcon/
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import { iconName as t, iconProps as n } from "../VIcon/iconProps.js";
|
|
3
|
+
import r from "../VIcon/VIcon.js";
|
|
4
|
+
import i from "../VTypography/VTypography.js";
|
|
5
5
|
import a from "../VSpinner/VSpinner.js";
|
|
6
6
|
import { useRootAttrs as o } from "../../composables/useRootAttrs.js";
|
|
7
7
|
import { close as s } from "../VIcon/icons/close.js";
|
|
8
8
|
import { useFieldIds as c } from "../../composables/useFieldIds.js";
|
|
9
|
-
import { useIconClickHandlers as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { useIconClickHandlers as ee } from "../../composables/useIconClickHandlers.js";
|
|
10
|
+
import { useClearable as te } from "../../composables/useClearable.js";
|
|
11
|
+
import { useTextLimit as l } from "../../composables/useTextLimit.js";
|
|
12
|
+
import { computed as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createTextVNode as h, createVNode as g, defineComponent as _, guardReactiveProps as v, mergeModels as y, mergeProps as b, normalizeClass as x, normalizeProps as S, normalizeStyle as C, openBlock as w, ref as T, renderSlot as E, toDisplayString as D, unref as O, useModel as ne, vModelText as re, withCtx as k, withDirectives as A } from "vue";
|
|
12
13
|
//#region src/components/VTextarea/VTextarea.vue?vue&type=script&setup=true&lang.ts
|
|
13
|
-
var
|
|
14
|
+
var j = [
|
|
14
15
|
"data-size",
|
|
15
16
|
"data-compact",
|
|
16
17
|
"data-disabled",
|
|
17
18
|
"data-readonly"
|
|
18
|
-
],
|
|
19
|
+
], M = ["data-auto-grow"], N = ["aria-label", "disabled"], P = [
|
|
19
20
|
"id",
|
|
20
21
|
"rows",
|
|
21
22
|
"maxlength",
|
|
@@ -23,13 +24,13 @@ var M = [
|
|
|
23
24
|
"readonly",
|
|
24
25
|
"aria-invalid",
|
|
25
26
|
"aria-describedby"
|
|
26
|
-
],
|
|
27
|
+
], F = ["aria-label"], I = ["aria-label", "disabled"], L = {
|
|
27
28
|
key: 1,
|
|
28
|
-
class: "v-textarea-meta"
|
|
29
|
-
},
|
|
29
|
+
class: "v-textarea-meta v-field-meta"
|
|
30
|
+
}, R = ["data-over"], z = /*@__PURE__*/ _({
|
|
30
31
|
inheritAttrs: !1,
|
|
31
32
|
__name: "VTextarea",
|
|
32
|
-
props: /*@__PURE__*/
|
|
33
|
+
props: /*@__PURE__*/ y({
|
|
33
34
|
size: { default: "md" },
|
|
34
35
|
compact: {
|
|
35
36
|
type: Boolean,
|
|
@@ -67,6 +68,10 @@ var M = [
|
|
|
67
68
|
type: Boolean,
|
|
68
69
|
default: !1
|
|
69
70
|
},
|
|
71
|
+
clearVisible: {
|
|
72
|
+
type: Boolean,
|
|
73
|
+
default: void 0
|
|
74
|
+
},
|
|
70
75
|
clearLabel: { default: void 0 },
|
|
71
76
|
maxlength: { default: void 0 },
|
|
72
77
|
softLimit: {
|
|
@@ -81,107 +86,119 @@ var M = [
|
|
|
81
86
|
modelValue: { default: "" },
|
|
82
87
|
modelModifiers: {}
|
|
83
88
|
}),
|
|
84
|
-
emits: /*@__PURE__*/
|
|
89
|
+
emits: /*@__PURE__*/ y([
|
|
85
90
|
"click:icon-start",
|
|
86
91
|
"click:icon-end",
|
|
87
92
|
"clear"
|
|
88
93
|
], ["update:modelValue"]),
|
|
89
|
-
setup(
|
|
90
|
-
let B =
|
|
94
|
+
setup(_, { expose: y, emit: z }) {
|
|
95
|
+
let B = _, V = z, H = ne(_, "modelValue"), U = u(() => Math.max(1, Math.round(B.rows))), { attrs: W, rootClass: G, rootStyle: K, forwardedAttrs: q } = o(), J = e(), Y = u(() => B.clearLabel ?? J.value.common.clear), { fieldId: X, hintId: ie, describedBy: ae } = c(W, () => !!B.hint), { hasIconStartHandler: oe, hasIconEndHandler: se } = ee({
|
|
91
96
|
name: "VTextarea",
|
|
92
97
|
iconStartLabel: B.iconStartLabel,
|
|
93
98
|
iconEndLabel: B.iconEndLabel
|
|
94
|
-
}),
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
}), Z = T(null), { showClear: Q, onClear: $ } = te({
|
|
100
|
+
clearable: () => B.clearable,
|
|
101
|
+
clearVisible: () => B.clearVisible,
|
|
102
|
+
disabled: () => B.disabled,
|
|
103
|
+
readonly: () => B.readonly,
|
|
104
|
+
text: () => H.value,
|
|
105
|
+
controlEl: Z,
|
|
106
|
+
onCleared: () => {
|
|
107
|
+
H.value = "", V("clear");
|
|
108
|
+
}
|
|
109
|
+
}), { counterText: ce, over: le } = l({
|
|
110
|
+
el: Z,
|
|
100
111
|
text: () => H.value,
|
|
101
112
|
maxlength: () => B.maxlength,
|
|
102
113
|
softLimit: () => B.softLimit
|
|
103
114
|
});
|
|
104
|
-
return (
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
"
|
|
110
|
-
|
|
115
|
+
return y({
|
|
116
|
+
focus: (e) => Z.value?.focus(e),
|
|
117
|
+
select: () => Z.value?.select(),
|
|
118
|
+
el: Z
|
|
119
|
+
}), (e, o) => (w(), p("div", {
|
|
120
|
+
class: x(["v-textarea v-control", O(G)]),
|
|
121
|
+
style: C(O(K)),
|
|
122
|
+
"data-size": _.size,
|
|
123
|
+
"data-compact": _.compact ? "" : void 0,
|
|
124
|
+
"data-disabled": _.disabled ? "" : void 0,
|
|
125
|
+
"data-readonly": _.readonly ? "" : void 0
|
|
111
126
|
}, [
|
|
112
|
-
|
|
127
|
+
_.label ? (w(), d(i, {
|
|
113
128
|
key: 0,
|
|
114
129
|
as: "label",
|
|
115
130
|
variant: "label",
|
|
116
131
|
class: "v-textarea-label",
|
|
117
|
-
for:
|
|
132
|
+
for: O(X)
|
|
118
133
|
}, {
|
|
119
|
-
default:
|
|
134
|
+
default: k(() => [h(D(_.label), 1)]),
|
|
120
135
|
_: 1
|
|
121
|
-
}, 8, ["for"])) :
|
|
122
|
-
|
|
136
|
+
}, 8, ["for"])) : f("", !0),
|
|
137
|
+
m("div", {
|
|
123
138
|
class: "v-textarea-field",
|
|
124
|
-
style:
|
|
125
|
-
"data-auto-grow":
|
|
139
|
+
style: C({ "--textarea-rows": U.value }),
|
|
140
|
+
"data-auto-grow": _.autoGrow ? "" : void 0
|
|
126
141
|
}, [
|
|
127
|
-
|
|
142
|
+
_.iconStart && O(oe) ? (w(), p("button", {
|
|
128
143
|
key: 0,
|
|
129
144
|
type: "button",
|
|
130
|
-
class: "v-textarea-action",
|
|
131
|
-
"aria-label":
|
|
132
|
-
disabled:
|
|
145
|
+
class: "v-textarea-action v-field-action",
|
|
146
|
+
"aria-label": _.iconStartLabel ?? O(t)(_.iconStart),
|
|
147
|
+
disabled: _.disabled,
|
|
133
148
|
onClick: o[0] ||= (e) => V("click:icon-start", e)
|
|
134
|
-
}, [
|
|
135
|
-
|
|
136
|
-
|
|
149
|
+
}, [g(r, S(v(O(n)(_.iconStart))), null, 16)], 8, N)) : _.iconStart ? (w(), d(r, S(b({ key: 1 }, O(n)(_.iconStart))), null, 16)) : f("", !0),
|
|
150
|
+
E(e.$slots, "start"),
|
|
151
|
+
A(m("textarea", b(O(q), {
|
|
152
|
+
id: O(X),
|
|
137
153
|
ref_key: "controlEl",
|
|
138
|
-
ref:
|
|
154
|
+
ref: Z,
|
|
139
155
|
"onUpdate:modelValue": o[1] ||= (e) => H.value = e,
|
|
140
156
|
class: "v-textarea-control",
|
|
141
157
|
rows: U.value,
|
|
142
|
-
maxlength:
|
|
143
|
-
disabled:
|
|
144
|
-
readonly:
|
|
145
|
-
"aria-invalid":
|
|
146
|
-
"aria-describedby":
|
|
147
|
-
}), null, 16,
|
|
148
|
-
|
|
149
|
-
|
|
158
|
+
maxlength: _.softLimit ? void 0 : _.maxlength,
|
|
159
|
+
disabled: _.disabled,
|
|
160
|
+
readonly: _.readonly || void 0,
|
|
161
|
+
"aria-invalid": _.invalid || void 0,
|
|
162
|
+
"aria-describedby": O(ae)
|
|
163
|
+
}), null, 16, P), [[re, H.value]]),
|
|
164
|
+
E(e.$slots, "value-end"),
|
|
165
|
+
O(Q) ? (w(), p("button", {
|
|
166
|
+
key: 2,
|
|
150
167
|
type: "button",
|
|
151
|
-
class: "v-textarea-action v-textarea-clear",
|
|
152
|
-
"aria-label":
|
|
153
|
-
onClick:
|
|
154
|
-
}, [
|
|
155
|
-
|
|
156
|
-
key:
|
|
157
|
-
label:
|
|
158
|
-
}, null, 8, ["label"])) :
|
|
168
|
+
class: "v-textarea-action v-field-action v-textarea-clear",
|
|
169
|
+
"aria-label": Y.value,
|
|
170
|
+
onClick: o[2] ||= (...e) => O($) && O($)(...e)
|
|
171
|
+
}, [g(r, { name: O(s) }, null, 8, ["name"])], 8, F)) : f("", !0),
|
|
172
|
+
_.loading ? (w(), d(a, {
|
|
173
|
+
key: 3,
|
|
174
|
+
label: _.loadingLabel
|
|
175
|
+
}, null, 8, ["label"])) : E(e.$slots, "end", {}, () => [_.iconEnd && O(se) ? (w(), p("button", {
|
|
159
176
|
key: 0,
|
|
160
177
|
type: "button",
|
|
161
|
-
class: "v-textarea-action",
|
|
162
|
-
"aria-label":
|
|
163
|
-
disabled:
|
|
164
|
-
onClick: o[
|
|
165
|
-
}, [
|
|
166
|
-
], 12,
|
|
167
|
-
|
|
178
|
+
class: "v-textarea-action v-field-action",
|
|
179
|
+
"aria-label": _.iconEndLabel ?? O(t)(_.iconEnd),
|
|
180
|
+
disabled: _.disabled,
|
|
181
|
+
onClick: o[3] ||= (e) => V("click:icon-end", e)
|
|
182
|
+
}, [g(r, S(v(O(n)(_.iconEnd))), null, 16)], 8, I)) : _.iconEnd ? (w(), d(r, S(b({ key: 1 }, O(n)(_.iconEnd))), null, 16)) : f("", !0)], void 0, 4)
|
|
183
|
+
], 12, M),
|
|
184
|
+
_.hint || _.counter ? (w(), p("div", L, [_.hint ? (w(), d(i, {
|
|
168
185
|
key: 0,
|
|
169
|
-
id:
|
|
186
|
+
id: O(ie),
|
|
170
187
|
variant: "caption",
|
|
171
188
|
tone: "muted",
|
|
172
189
|
class: "v-textarea-hint"
|
|
173
190
|
}, {
|
|
174
|
-
default:
|
|
191
|
+
default: k(() => [h(D(_.hint), 1)]),
|
|
175
192
|
_: 1
|
|
176
|
-
}, 8, ["id"])) :
|
|
193
|
+
}, 8, ["id"])) : f("", !0), _.counter ? (w(), p("span", {
|
|
177
194
|
key: 1,
|
|
178
|
-
class: "v-textarea-counter",
|
|
179
|
-
"data-over":
|
|
180
|
-
}, O(
|
|
181
|
-
], 14,
|
|
195
|
+
class: "v-textarea-counter v-field-counter",
|
|
196
|
+
"data-over": O(le) ? "" : void 0
|
|
197
|
+
}, D(O(ce)), 9, R)) : f("", !0)])) : f("", !0)
|
|
198
|
+
], 14, j));
|
|
182
199
|
}
|
|
183
200
|
});
|
|
184
201
|
//#endregion
|
|
185
|
-
export {
|
|
202
|
+
export { z as default };
|
|
186
203
|
|
|
187
204
|
//# sourceMappingURL=VTextarea.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTextarea.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VTextarea/VTextarea.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core\n/**\n * A field for text running over several lines, with the same label, hint, icons,\n * counter, loading state and clear button as VInput, arranged around a real\n * `<textarea>`.\n *\n * Two things differ from its single-line counterpart. The field can grow with what\n * is typed into it, and that is pure CSS — a browser without `field-sizing` simply\n * keeps a fixed height with its usual scrollbar. And the counter is placed UNDER the\n * field rather than inside it, where several lines of text would run into it.\n *\n * As in VInput, the attributes it is given are split — `class` and `style` stay\n * outside, the rest goes to the textarea — validation stays the browser's, and the\n * only behavioural JavaScript is the v-model and the clear button, which has to hand\n * focus back to the field it just emptied.\n */\nimport { computed, ref } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconName, iconProps } from '../VIcon/iconProps'\nimport { close as closeIcon } from '../VIcon/icons/close'\nimport type { IconSource } from '../VIcon/types'\nimport VSpinner from '../VSpinner/VSpinner.vue'\nimport VTypography from '../VTypography/VTypography.vue'\n\nimport { useFieldIds } from '../../composables/useFieldIds'\nimport { useIconClickHandlers } from '../../composables/useIconClickHandlers'\nimport { useRootAttrs } from '../../composables/useRootAttrs'\nimport { useTextLimit } from '../../composables/useTextLimit'\nimport { useMessages } from '../../i18n/state'\n\ninterface TextareaProps {\n /** The size of the field, which sets its padding, its type scale and its icons. */\n size?: 'sm' | 'md' | 'lg'\n /**\n * Takes 4px off the field by tightening its padding, leaving the number of lines,\n * the type and the icons alone.\n */\n compact?: boolean\n /**\n * How many lines of text the field shows — the native `rows` attribute, which is\n * what gives the field its height. Anything under 1 is raised to 1, and at 1 the\n * field is exactly as tall as a VInput of the same size.\n */\n rows?: number\n /**\n * Lets the field grow as the text is typed, instead of scrolling inside the height\n * `rows` gives it — which stays its starting height. It is pure CSS; where the\n * browser does not support it, the field simply behaves like an ordinary textarea.\n */\n autoGrow?: boolean\n /**\n * Marks the field as invalid whatever the browser thinks — the route for a rule\n * only the server can check.\n */\n invalid?: boolean\n /** Makes the field unusable, greyed out through the colour tokens. */\n disabled?: boolean\n /**\n * Shows the text without allowing it to be changed. The field can still be focused\n * and copied from, and the clear button is hidden.\n */\n readonly?: boolean\n /** The label above the field, tied to it so that clicking it focuses the field. */\n label?: string\n /**\n * A line of help under the field, tied to the textarea for assistive technology so\n * that it is read out along with the label.\n */\n hint?: string\n /**\n * An icon inside the field, at the start. It is decorative by default and becomes a\n * real button as soon as a `@click:icon-start` listener is attached — in which case\n * it needs `iconStartLabel`. The `#start` slot replaces it.\n */\n iconStart?: IconSource\n /**\n * The same at the end of the field. The `#end` slot replaces it, and the loading\n * spinner takes its place while it turns.\n */\n iconEnd?: IconSource\n /** What the start icon does, in words, once it is clickable. */\n iconStartLabel?: string\n /** What the end icon does, in words, once it is clickable. */\n iconEndLabel?: string\n /** Shows a spinner at the end of the field, in place of the end icon or slot. */\n loading?: boolean\n /**\n * What screen readers announce while the spinner turns. It falls back to the design\n * system dictionary.\n */\n loadingLabel?: string\n /**\n * Offers a cross that empties the field. It appears when there is something to\n * clear and the field can be edited.\n */\n clearable?: boolean\n /** What the clear button does, in words. It falls back to the design system dictionary. */\n clearLabel?: string\n /**\n * The maximum number of characters. By default this is the browser's own limit,\n * which simply refuses anything beyond it.\n */\n maxlength?: number\n /**\n * Turns that limit into a soft one: the reader may type past it, and the field goes\n * into error instead of silently refusing the keystrokes. It is reported through\n * the native validity, so a form cannot be submitted over the limit.\n */\n softLimit?: boolean\n /**\n * Shows how much has been typed, under the field: \"12/80\" against a limit, or just\n * \"12\" without one.\n */\n counter?: boolean\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n size: 'md',\n compact: false,\n rows: 5,\n autoGrow: false,\n invalid: false,\n disabled: false,\n readonly: false,\n label: undefined,\n hint: undefined,\n iconStart: undefined,\n iconEnd: undefined,\n iconStartLabel: undefined,\n iconEndLabel: undefined,\n loading: false,\n loadingLabel: undefined,\n clearable: false,\n clearLabel: undefined,\n maxlength: undefined,\n softLimit: false,\n counter: false,\n})\n\nconst emit = defineEmits<{\n /** The start icon was clicked. Attaching this listener is what makes it a button. */\n 'click:icon-start': [event: MouseEvent]\n /** The end icon was clicked. Attaching this listener is what makes it a button. */\n 'click:icon-end': [event: MouseEvent]\n /** The clear button was pressed. The field has already been emptied. */\n clear: []\n}>()\n\ndefineSlots<{\n /** Content at the start of the field, which replaces `iconStart`. */\n start?(): unknown\n /**\n * Content at the end of the field, which replaces `iconEnd`. It is hidden while the\n * field is loading, the spinner taking that place.\n */\n end?(): unknown\n}>()\n\nconst model = defineModel<string>({ default: '' })\n\n// HTML wants `rows` to be a positive integer, and it drops anything else on the floor:\n// a 0, a negative or a fractional value would leave the browser falling back to its own\n// default of two rows, which is neither what was asked for nor this component's default.\n// Rounding and flooring here is what keeps the prop's contract out of the parser's hands.\nconst resolvedRows = computed(() => Math.max(1, Math.round(props.rows)))\n\n// `class` and `style` stay on the wrapper, where a consumer expects to style the\n// field; every other attribute goes to the textarea, where it does something.\nconst { attrs, rootClass, rootStyle, forwardedAttrs: restAttrs } = useRootAttrs()\n\n// The prop keeps priority; what it falls back to is the dictionary, so the default\n// wording follows the language the design system is set to.\nconst m = useMessages()\nconst resolvedLoadingLabel = computed(() => props.loadingLabel ?? m.value.common.loading)\nconst resolvedClearLabel = computed(() => props.clearLabel ?? m.value.common.clear)\n\nconst { fieldId, hintId, describedBy } = useFieldIds(attrs, () => !!props.hint)\n\nconst { hasIconStartHandler, hasIconEndHandler } = useIconClickHandlers({\n name: 'VTextarea',\n iconStartLabel: props.iconStartLabel,\n iconEndLabel: props.iconEndLabel,\n})\n\nconst controlEl = ref<HTMLTextAreaElement | null>(null)\n\nconst showClear = computed(\n () => props.clearable && model.value.length > 0 && !props.disabled && !props.readonly,\n)\n\n// @a11y @core — moving the focus back is the accessibility half of this handler.\n// The cross vanishes the instant it empties the field, so without that call focus\n// falls back to the page body and a keyboard user loses their place in the form.\nfunction onClear() {\n model.value = ''\n emit('clear')\n controlEl.value?.focus()\n}\n\nconst { counterText, over } = useTextLimit({\n el: controlEl,\n text: () => model.value,\n maxlength: () => props.maxlength,\n softLimit: () => props.softLimit,\n})\n</script>\n\n<template>\n <div\n class=\"v-textarea v-control\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-size=\"size\"\n :data-compact=\"compact ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n >\n <VTypography v-if=\"label\" as=\"label\" variant=\"label\" class=\"v-textarea-label\" :for=\"fieldId\">\n {{ label }}\n </VTypography>\n\n <div\n class=\"v-textarea-field\"\n :style=\"{ '--textarea-rows': resolvedRows }\"\n :data-auto-grow=\"autoGrow ? '' : undefined\"\n >\n <slot name=\"start\">\n <button\n v-if=\"iconStart && hasIconStartHandler\"\n type=\"button\"\n class=\"v-textarea-action\"\n :aria-label=\"iconStartLabel ?? iconName(iconStart)\"\n :disabled=\"disabled\"\n @click=\"emit('click:icon-start', $event)\"\n >\n <VIcon v-bind=\"iconProps(iconStart)\" />\n </button>\n <VIcon v-else-if=\"iconStart\" v-bind=\"iconProps(iconStart)\" />\n </slot>\n\n <textarea\n v-bind=\"restAttrs\"\n :id=\"fieldId\"\n ref=\"controlEl\"\n v-model=\"model\"\n class=\"v-textarea-control\"\n :rows=\"resolvedRows\"\n :maxlength=\"softLimit ? undefined : maxlength\"\n :disabled=\"disabled\"\n :readonly=\"readonly || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n\n <button\n v-if=\"showClear\"\n type=\"button\"\n class=\"v-textarea-action v-textarea-clear\"\n :aria-label=\"resolvedClearLabel\"\n @click=\"onClear\"\n >\n <VIcon :name=\"closeIcon\" />\n </button>\n\n <VSpinner v-if=\"loading\" :label=\"resolvedLoadingLabel\" />\n <slot v-else name=\"end\">\n <button\n v-if=\"iconEnd && hasIconEndHandler\"\n type=\"button\"\n class=\"v-textarea-action\"\n :aria-label=\"iconEndLabel ?? iconName(iconEnd)\"\n :disabled=\"disabled\"\n @click=\"emit('click:icon-end', $event)\"\n >\n <VIcon v-bind=\"iconProps(iconEnd)\" />\n </button>\n <VIcon v-else-if=\"iconEnd\" v-bind=\"iconProps(iconEnd)\" />\n </slot>\n </div>\n\n <div v-if=\"hint || counter\" class=\"v-textarea-meta\">\n <VTypography v-if=\"hint\" :id=\"hintId\" variant=\"caption\" tone=\"muted\" class=\"v-textarea-hint\">\n {{ hint }}\n </VTypography>\n <span v-if=\"counter\" class=\"v-textarea-counter\" :data-over=\"over ? '' : undefined\">\n {{ counterText }}\n </span>\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-textarea {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n width: 100%;\n font-family: var(--vectis-text-family);\n }\n\n /* The label and the hint are rendered by VTypography, which carries their type. The\n .v-textarea-label and .v-textarea-hint classes remain as hooks: a consumer\n overrides through them, and the disabled state below reaches them that way. */\n\n .v-textarea-meta {\n display: flex;\n align-items: baseline;\n gap: var(--vectis-space-2);\n }\n\n /* The counter keeps its own local styling rather than going through VTypography:\n figures of equal width, so the number does not shift as it counts, and a colour\n that marks the overflow — neither of which is a typographic role. */\n .v-textarea-counter {\n margin-inline-start: auto;\n font-size: var(--vectis-text-caption-size);\n color: var(--vectis-color-text-muted);\n font-variant-numeric: tabular-nums;\n }\n\n .v-textarea-counter[data-over] {\n color: var(--vectis-color-danger-text);\n }\n\n /* This is the box that carries the border, the background, the focus ring and the\n resize handle — which is why it also hides its overflow, `resize` having no\n effect on a box whose overflow is visible. `--field-border-color` is the single\n source of truth for its colour, and the hover, error and disabled states do\n nothing but redefine it. */\n .v-textarea-field {\n --field-border-color: var(--vectis-color-border-strong);\n\n /*\n * Nothing here restates the size scale: the `--control-*` variables are inherited\n * from the v-control root (styles/control-size.css), the icon context included.\n *\n * The field carries NO height of its own: it is the `rows` attribute on the\n * textarea that sets one, and the field is simply as tall as the control it wraps.\n * That is what makes dragging the resize handle behave like a bare textarea — the\n * field shrinks and the control scrolls — instead of stopping at a CSS floor.\n */\n\n /* The leading is named ONCE and feeds two things that have to agree by\n construction: the field's own `line-height`, and the first line box below,\n against which everything sitting beside the text is offset. */\n --textarea-leading: var(--vectis-text-body-md-leading);\n\n /* The height of the FIRST line box, the row the icons and the buttons align on.\n\n TRAP — it is DERIVED and must never be written as `1lh`. The `lh` unit resolves\n against the element the property is USED on, and the children do not share the\n field's font: an icon carries `--vectis-icon-size` (20px against the field's\n 14px), so `1lh` measured a 30px line there and dropped every icon 4.5px below\n the text and the buttons it is supposed to line up with. The buttons happened to\n be right only because the reset gives them `font: inherit`. */\n --textarea-line: calc(var(--control-font-size) * var(--textarea-leading));\n\n display: flex;\n align-items: flex-start;\n gap: var(--control-gap);\n padding-inline: var(--control-padding-inline-field);\n /* Half of what is left of the control height once its two 1px borders and one line\n box are taken out — so at `rows=\"1\"` the field is exactly a VInput of the same\n size, and every further row adds precisely one line box.\n\n It reads --control-height and not --control-height-base, which is what carries\n the density here: with no height of its own left to shrink, the padding is the\n only lever `compact` has, and 2px off each edge is the -4px the whole scale\n promises. */\n padding-block: calc((var(--control-height) - 2px - var(--textarea-line)) / 2);\n background: var(--vectis-color-surface);\n color: var(--vectis-color-text);\n border: 1px solid var(--field-border-color);\n border-radius: var(--vectis-radius-interactive);\n font-size: var(--control-font-size);\n /* Text running over several lines takes the body line height. The `control` type\n role, whose lines are set tight against one another, only makes sense for a\n single-line label. */\n line-height: var(--textarea-leading);\n resize: vertical;\n overflow: hidden;\n transition:\n border-color var(--vectis-duration-fast) var(--vectis-ease-default),\n background-color var(--vectis-duration-fast) var(--vectis-ease-default),\n box-shadow var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n .v-textarea-control {\n flex: 1;\n min-width: 0;\n align-self: stretch;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n outline: none; /* the focus ring is drawn by the field around it, not here */\n resize: none; /* the resize handle belongs to the field, so there is only one */\n }\n\n .v-textarea-control::placeholder {\n color: var(--vectis-color-text-subtle);\n }\n\n /* The icons and buttons align with the FIRST line of text rather than with the\n middle of a field whose height varies: half the difference between the line box and\n the element centres it there. On a single line that comes out identical to the\n centring VInput gets from its fixed height, which is the point.\n\n The measure is `--textarea-line` and never `1lh` — see the trap where it is\n declared: `lh` would be resolved against each child's own font, which differs from\n the field's.\n\n TRAP — the margin is SYMMETRIC, the VToast rule. It looks redundant under\n `align-items: flex-start`, where only the start side moves anything, but the end\n side is what keeps the item's OUTER box down to one line box. Left off, a clear\n cross (24px against a 21px line) would be the tallest thing in the flex line and\n the field would be 1.5px taller than the rows asked for — 2px at `lg` — which is\n exactly the gap that stops `rows=\"1\"` from being a VInput. */\n .v-textarea-field > .v-icon,\n .v-textarea-field > .v-spinner {\n margin-block: calc((var(--textarea-line) - var(--vectis-icon-size)) / 2);\n }\n\n .v-textarea-field > .v-textarea-action {\n margin-block: calc((var(--textarea-line) - var(--control-action-size)) / 2);\n }\n\n /* A decorative icon is drawn in a muted grey, so it stays quieter than the text\n being typed beside it. */\n .v-textarea-field > .v-icon {\n color: var(--vectis-color-text-muted);\n }\n\n .v-textarea-field > .v-spinner {\n font-size: var(--vectis-icon-size);\n }\n\n /* A read-only field sinks slightly into the page but keeps its text at full\n strength — the value is there to be read — and still shows the accent focus ring.\n The state is read from [data-readonly] and never from `:read-only`, which the\n browser also matches on a disabled field.\n\n TRAP — this block must stay FIRST in the sequence of states: read-only, then\n hover, focus, invalid and disabled. Every one of these selectors weighs (0,3,0),\n `:has()` taking the specificity of what it contains, so nothing but the source\n order arbitrates between them. Moved further down, this rule would repaint the\n error border and the accent focus ring grey, with no error anywhere. What belongs\n to a read-only field is its BASE colour alone. */\n .v-textarea[data-readonly] .v-textarea-field {\n --field-border-color: var(--vectis-color-border);\n\n background: var(--vectis-color-surface-sunken);\n }\n\n .v-textarea-field:hover:not(:has(.v-textarea-control:focus)):not(\n :has(\n .v-textarea-control:disabled,\n .v-textarea-control:user-invalid,\n .v-textarea-control[aria-invalid='true']\n )\n ) {\n --field-border-color: color-mix(\n in oklab,\n var(--vectis-color-border-strong),\n var(--vectis-color-text) 15%\n );\n }\n\n /* The focused field appears to have a two-pixel border: it is really its own 1px\n border plus a 1px shadow of the same colour just outside it, which costs no\n layout and therefore makes nothing jump.\n\n The selector watches the CONTROL's focus and not `:focus-within`, so that when one\n of the field's own buttons takes keyboard focus, only that button's outline\n lights up: two indicators at once would be unreadable. And it is `:focus` rather\n than `:focus-visible`, because a text field shows its focus even when it was\n reached with the mouse.\n\n The transparent outline is the safety net for Windows forced colours, which drop\n box-shadows entirely; an outline survives and keeps the field marked. */\n .v-textarea-field:has(.v-textarea-control:focus) {\n --field-border-color: var(--vectis-color-accent);\n\n box-shadow: 0 0 0 1px var(--field-border-color);\n outline: var(--vectis-focus-ring-width) solid transparent;\n }\n\n /* The invalid state, from the browser's own verdict first and from the `invalid`\n prop second. Only the colour variable is changed, which is why the border AND the\n focus ring both turn red without either being restated. */\n .v-textarea-field:has(.v-textarea-control:user-invalid),\n .v-textarea-field:has(.v-textarea-control[aria-invalid='true']) {\n --field-border-color: var(--vectis-color-danger);\n }\n\n /* The field's own buttons — the clear cross, a clickable icon — go from muted grey\n to full strength on hover, and take VButton's radius so their focus ring has the\n same rounded corners as everything else.\n\n The negative margin is DERIVED and never written as a number: it is exactly half\n the difference between the icon and the wider box holding it. Subtracting it\n cancels that inset, so the glyph lands precisely where a decorative icon would\n have — against the field's padding, one --control-gap from its neighbour. */\n .v-textarea-action {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--control-action-size);\n height: var(--control-action-size);\n margin-inline: calc((var(--vectis-icon-size) - var(--control-action-size)) / 2);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--vectis-color-text-muted);\n border-radius: var(--vectis-radius-interactive);\n cursor: pointer;\n flex: none;\n transition: color var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n .v-textarea-action:hover:not(:disabled) {\n color: var(--vectis-color-text);\n }\n\n .v-textarea-action:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: calc(var(--vectis-focus-ring-offset) * -1);\n }\n\n /* A disabled field greys out through the colour tokens, the same ones VCheckbox and\n VRadio use, and never through opacity. It comes LAST in the sequence of states,\n which at equal specificity is what makes it win over all of them, the error\n included: a disabled field is not submitted, so it has nothing to report.\n\n The text here is `text-muted` and not the `text-subtle` used by the label and the\n hint below, because those sit on the page surface where this sits on\n `surface-muted` — against which subtle falls to a 4.4:1 contrast. The control\n itself is exempt from that rule, being natively disabled, but the icons the field\n CONTAINS are not, and they inherit this colour. */\n .v-textarea[data-disabled] .v-textarea-field {\n --field-border-color: var(--vectis-color-border);\n\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-muted);\n cursor: not-allowed;\n resize: none;\n }\n\n .v-textarea[data-disabled] .v-textarea-label,\n .v-textarea[data-disabled] .v-textarea-hint,\n .v-textarea[data-disabled] .v-textarea-counter {\n color: var(--vectis-color-text-subtle);\n }\n\n .v-textarea[data-disabled] .v-textarea-action,\n .v-textarea[data-disabled] .v-textarea-field > .v-icon {\n color: inherit;\n cursor: not-allowed;\n }\n\n .v-textarea-control:disabled {\n cursor: not-allowed;\n }\n\n /* Growing with the content is pure CSS: `field-sizing` makes the textarea's height\n follow what is typed, and the field around it follows in turn. The resize handle\n goes, there being nothing left to resize by hand. A browser without support keeps\n the fixed height and its scrollbar, which is the intended fallback. */\n .v-textarea-field[data-auto-grow] {\n resize: none;\n }\n\n /* `field-sizing: content` sizes the control to what has been typed and ignores `rows`\n outright, so an auto-growing field would open one line tall whatever the prop said.\n The floor hands the STARTING height back to `rows` and leaves the growing to the\n browser. It is scoped to this branch and must not be lifted onto the control at\n large: a floor there would stop the control shrinking with the resize handle, and\n the field, which hides its overflow, would clip it instead of scrolling. */\n .v-textarea-field[data-auto-grow] .v-textarea-control {\n field-sizing: content;\n min-block-size: calc(var(--textarea-rows) * var(--textarea-line));\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-textarea-field,\n .v-textarea-action {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VTextarea.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VTextarea/VTextarea.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core\n/**\n * A multi-line field, with the same label, hint, icons, counter, loading state and clear\n * cross as VInput, arranged around a real `<textarea>`.\n *\n * Two things differ. It grows with what is typed, which is pure CSS (`field-sizing`) — a\n * browser without it keeps a fixed height and its usual scrollbar. And the counter goes\n * UNDER the field rather than inside it, where several lines of text would run into it.\n *\n * As in VInput: the attrs split, validation stays the browser's, and the only behavioural JS\n * is the v-model and the clear cross, which hands focus back to the field it just emptied.\n */\nimport { computed, ref } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconName, iconProps } from '../VIcon/iconProps'\nimport { close as closeIcon } from '../VIcon/icons/close'\nimport type { IconSource } from '../VIcon/types'\nimport VSpinner from '../VSpinner/VSpinner.vue'\nimport VTypography from '../VTypography/VTypography.vue'\n\nimport { useClearable } from '../../composables/useClearable'\nimport { useFieldIds } from '../../composables/useFieldIds'\nimport { useIconClickHandlers } from '../../composables/useIconClickHandlers'\nimport { useRootAttrs } from '../../composables/useRootAttrs'\nimport { useTextLimit } from '../../composables/useTextLimit'\nimport { useMessages } from '../../i18n/state'\n\n/** The height of one line: 32, 40 or 48 pixels. */\nexport type TextareaSize = 'sm' | 'md' | 'lg'\n\ninterface TextareaProps {\n /** The size of the field, which sets its padding, its type scale and its icons. */\n size?: TextareaSize\n /**\n * Takes 4px off the field by tightening its padding, leaving the number of lines,\n * the type and the icons alone.\n */\n compact?: boolean\n /**\n * How many lines of text the field shows — the native `rows` attribute, which is\n * what gives the field its height. Anything under 1 is raised to 1, and at 1 the\n * field is exactly as tall as a VInput of the same size.\n */\n rows?: number\n /**\n * Lets the field grow as the text is typed, instead of scrolling inside the height\n * `rows` gives it — which stays its starting height. It is pure CSS; where the\n * browser does not support it, the field simply behaves like an ordinary textarea.\n */\n autoGrow?: boolean\n /**\n * Marks the field as invalid whatever the browser thinks — the route for a rule\n * only the server can check.\n */\n invalid?: boolean\n /** Makes the field unusable, greyed out through the colour tokens. */\n disabled?: boolean\n /**\n * Shows the text without allowing it to be changed. The field can still be focused\n * and copied from, and the clear button is hidden.\n */\n readonly?: boolean\n /** The label above the field, tied to it so that clicking it focuses the field. */\n label?: string\n /**\n * A line of help under the field, tied to the textarea for assistive technology so\n * that it is read out along with the label.\n */\n hint?: string\n /**\n * An icon inside the field, at the start. It is decorative by default and becomes a\n * real button as soon as a `@click:icon-start` listener is attached — in which case\n * it needs `iconStartLabel`. The `#start` slot is rendered after it, so the two can\n * be given together.\n */\n iconStart?: IconSource\n /**\n * The same at the end of the field. The `#end` slot replaces it, and the loading\n * spinner takes its place while it turns.\n */\n iconEnd?: IconSource\n /** What the start icon does, in words, once it is clickable. */\n iconStartLabel?: string\n /** What the end icon does, in words, once it is clickable. */\n iconEndLabel?: string\n /** Shows a spinner at the end of the field, in place of the end icon or slot. */\n loading?: boolean\n /**\n * What screen readers announce while the spinner turns. It falls back to the design\n * system dictionary.\n */\n loadingLabel?: string\n /**\n * Offers a cross that empties the field. It appears when there is something to\n * clear and the field can be edited.\n */\n clearable?: boolean\n /**\n * Decides whether the cross is shown, instead of letting the field work it out from its\n * own content — a read-only field included. It is the same escape hatch VInput offers,\n * for the same reason: a component built on top of this one may hold what there is to\n * clear somewhere other than the text.\n */\n clearVisible?: boolean\n /** What the clear button does, in words. It falls back to the design system dictionary. */\n clearLabel?: string\n /**\n * The maximum number of characters. By default this is the browser's own limit,\n * which simply refuses anything beyond it.\n */\n maxlength?: number\n /**\n * Turns that limit into a soft one: the reader may type past it, and the field goes\n * into error instead of silently refusing the keystrokes. It is reported through\n * the native validity, so a form cannot be submitted over the limit.\n */\n softLimit?: boolean\n /**\n * Shows how much has been typed, under the field: \"12/80\" against a limit, or just\n * \"12\" without one.\n */\n counter?: boolean\n}\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n size: 'md',\n compact: false,\n rows: 5,\n autoGrow: false,\n invalid: false,\n disabled: false,\n readonly: false,\n label: undefined,\n hint: undefined,\n iconStart: undefined,\n iconEnd: undefined,\n iconStartLabel: undefined,\n iconEndLabel: undefined,\n loading: false,\n loadingLabel: undefined,\n clearable: false,\n clearVisible: undefined,\n clearLabel: undefined,\n maxlength: undefined,\n softLimit: false,\n counter: false,\n})\n\nconst emit = defineEmits<{\n /** The start icon was clicked. Attaching this listener is what makes it a button. */\n 'click:icon-start': [event: MouseEvent]\n /** The end icon was clicked. Attaching this listener is what makes it a button. */\n 'click:icon-end': [event: MouseEvent]\n /** The clear button was pressed. The field has already been emptied. */\n clear: []\n}>()\n\ndefineSlots<{\n /**\n * Content at the start of the field, rendered after `iconStart` rather than in its\n * place, as in VInput.\n */\n start?(): unknown\n /**\n * Content at the end of the field, which replaces `iconEnd`. It is hidden while the\n * field is loading, the spinner taking that place.\n */\n end?(): unknown\n /**\n * Controls of your own inside the field, placed before the field's own — the clear cross\n * and the end icon. It is the slot for something that acts on the VALUE rather than on\n * the field, and it is VInput's slot of the same name.\n */\n 'value-end'?(): unknown\n}>()\n\n/** The text in the field, empty to begin with. */\nconst model = defineModel<string>({ default: '' })\n\n// HTML wants `rows` to be a positive integer, and it drops anything else on the floor:\n// a 0, a negative or a fractional value would leave the browser falling back to its own\n// default of two rows, which is neither what was asked for nor this component's default.\n// Rounding and flooring here is what keeps the prop's contract out of the parser's hands.\nconst resolvedRows = computed(() => Math.max(1, Math.round(props.rows)))\n\n// `class` and `style` stay on the wrapper, where a consumer expects to style the\n// field; every other attribute goes to the textarea, where it does something.\nconst { attrs, rootClass, rootStyle, forwardedAttrs: restAttrs } = useRootAttrs()\n\n// The prop keeps priority; what it falls back to is the dictionary, so the default\n// wording follows the language the design system is set to.\nconst m = useMessages()\nconst resolvedClearLabel = computed(() => props.clearLabel ?? m.value.common.clear)\n\nconst { fieldId, hintId, describedBy } = useFieldIds(attrs, () => !!props.hint)\n\nconst { hasIconStartHandler, hasIconEndHandler } = useIconClickHandlers({\n name: 'VTextarea',\n iconStartLabel: props.iconStartLabel,\n iconEndLabel: props.iconEndLabel,\n})\n\nconst controlEl = ref<HTMLTextAreaElement | null>(null)\n\nconst { showClear, onClear } = useClearable({\n clearable: () => props.clearable,\n clearVisible: () => props.clearVisible,\n disabled: () => props.disabled,\n readonly: () => props.readonly,\n text: () => model.value,\n controlEl,\n onCleared: () => {\n model.value = ''\n emit('clear')\n },\n})\n\nconst { counterText, over } = useTextLimit({\n el: controlEl,\n text: () => model.value,\n maxlength: () => props.maxlength,\n softLimit: () => props.softLimit,\n})\n\ndefineExpose({\n /** Moves the focus to the real textarea. */\n focus: (options?: FocusOptions) => controlEl.value?.focus(options),\n /** Selects everything in the field. */\n select: () => controlEl.value?.select(),\n /** The real `<textarea>`, for what neither of the two above covers. */\n el: controlEl,\n})\n</script>\n\n<template>\n <div\n class=\"v-textarea v-control\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-size=\"size\"\n :data-compact=\"compact ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n >\n <VTypography v-if=\"label\" as=\"label\" variant=\"label\" class=\"v-textarea-label\" :for=\"fieldId\">\n {{ label }}\n </VTypography>\n\n <div\n class=\"v-textarea-field\"\n :style=\"{ '--textarea-rows': resolvedRows }\"\n :data-auto-grow=\"autoGrow ? '' : undefined\"\n >\n <!-- The start icon is rendered BEFORE the slot, where the end icon is the slot's own\n fallback. The asymmetry is VInput's, mirrored here so the two fields answer the\n same way: what a composed field puts in that zone is OTHER content beside the\n icon, not another way of drawing it. -->\n <button\n v-if=\"iconStart && hasIconStartHandler\"\n type=\"button\"\n class=\"v-textarea-action v-field-action\"\n :aria-label=\"iconStartLabel ?? iconName(iconStart)\"\n :disabled=\"disabled\"\n @click=\"emit('click:icon-start', $event)\"\n >\n <VIcon v-bind=\"iconProps(iconStart)\" />\n </button>\n <VIcon v-else-if=\"iconStart\" v-bind=\"iconProps(iconStart)\" />\n <slot name=\"start\" />\n\n <textarea\n v-bind=\"restAttrs\"\n :id=\"fieldId\"\n ref=\"controlEl\"\n v-model=\"model\"\n class=\"v-textarea-control\"\n :rows=\"resolvedRows\"\n :maxlength=\"softLimit ? undefined : maxlength\"\n :disabled=\"disabled\"\n :readonly=\"readonly || undefined\"\n :aria-invalid=\"invalid || undefined\"\n :aria-describedby=\"describedBy\"\n />\n\n <slot name=\"value-end\" />\n\n <button\n v-if=\"showClear\"\n type=\"button\"\n class=\"v-textarea-action v-field-action v-textarea-clear\"\n :aria-label=\"resolvedClearLabel\"\n @click=\"onClear\"\n >\n <VIcon :name=\"closeIcon\" />\n </button>\n\n <VSpinner v-if=\"loading\" :label=\"loadingLabel\" />\n <slot v-else name=\"end\">\n <button\n v-if=\"iconEnd && hasIconEndHandler\"\n type=\"button\"\n class=\"v-textarea-action v-field-action\"\n :aria-label=\"iconEndLabel ?? iconName(iconEnd)\"\n :disabled=\"disabled\"\n @click=\"emit('click:icon-end', $event)\"\n >\n <VIcon v-bind=\"iconProps(iconEnd)\" />\n </button>\n <VIcon v-else-if=\"iconEnd\" v-bind=\"iconProps(iconEnd)\" />\n </slot>\n </div>\n\n <div v-if=\"hint || counter\" class=\"v-textarea-meta v-field-meta\">\n <VTypography v-if=\"hint\" :id=\"hintId\" variant=\"caption\" tone=\"muted\" class=\"v-textarea-hint\">\n {{ hint }}\n </VTypography>\n <span\n v-if=\"counter\"\n class=\"v-textarea-counter v-field-counter\"\n :data-over=\"over ? '' : undefined\"\n >\n {{ counterText }}\n </span>\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-textarea {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n width: 100%;\n font-family: var(--vectis-text-family);\n }\n\n /* The label and the hint are rendered by VTypography, which carries their type. The\n .v-textarea-label and .v-textarea-hint classes remain as hooks: a consumer\n overrides through them, and the disabled state below reaches them that way. */\n\n /* This is the box that carries the border, the background, the focus ring and the\n resize handle — which is why it also hides its overflow, `resize` having no\n effect on a box whose overflow is visible. `--field-border-color` is the single\n source of truth for its colour, and the hover, error and disabled states do\n nothing but redefine it. */\n .v-textarea-field {\n --field-border-color: var(--vectis-color-border-strong);\n\n /*\n * Nothing here restates the size scale: the `--control-*` variables are inherited\n * from the v-control root (styles/control-size.css), the icon context included.\n *\n * The field carries NO height of its own: it is the `rows` attribute on the\n * textarea that sets one, and the field is simply as tall as the control it wraps.\n * That is what makes dragging the resize handle behave like a bare textarea — the\n * field shrinks and the control scrolls — instead of stopping at a CSS floor.\n */\n\n /* The leading is named ONCE and feeds two things that have to agree by\n construction: the field's own `line-height`, and the first line box below,\n against which everything sitting beside the text is offset. */\n --textarea-leading: var(--vectis-text-body-md-leading);\n\n /* The height of the FIRST line box, the row the icons and the buttons align on.\n\n TRAP — it is DERIVED and must never be written as `1lh`. The `lh` unit resolves\n against the element the property is USED on, and the children do not share the\n field's font: an icon carries `--vectis-icon-size` (20px against the field's\n 14px), so `1lh` measured a 30px line there and dropped every icon 4.5px below\n the text and the buttons it is supposed to line up with. The buttons happened to\n be right only because the reset gives them `font: inherit`. */\n --textarea-line: calc(var(--control-font-size) * var(--textarea-leading));\n\n display: flex;\n align-items: flex-start;\n gap: var(--control-gap);\n padding-inline: var(--control-padding-inline-field);\n /* Half of what is left of the control height once its two 1px borders and one line\n box are taken out — so at `rows=\"1\"` the field is exactly a VInput of the same\n size, and every further row adds precisely one line box.\n\n It reads --control-height and not --control-height-base, which is what carries\n the density here: with no height of its own left to shrink, the padding is the\n only lever `compact` has, and 2px off each edge is the -4px the whole scale\n promises. */\n padding-block: calc((var(--control-height) - 2px - var(--textarea-line)) / 2);\n background: var(--vectis-color-surface);\n color: var(--vectis-color-text);\n border: 1px solid var(--field-border-color);\n /* TRAP — the cap is what carries the VInput identity above into the OTHER row counts,\n and it has to stay derived from --control-height. A browser scales down any radius it\n cannot fit, so on a one-row field a pill override is already painted as half the\n control height; min() applies that same reduction to a field that is taller. Written\n bare, the identical override paints half of a FIVE-row box instead: 60px corners on a\n 120px field, an ellipse sitting beside buttons that kept 20px, and the same again on\n every drag of the resize handle. At the shipped 6px it resolves to 6px on every size,\n compact included, so nothing at the default value can see this line go — only the\n PillRadius play function can. */\n border-radius: min(var(--vectis-radius-interactive), calc(var(--control-height) / 2));\n font-size: var(--control-font-size);\n /* Text running over several lines takes the body line height. The `control` type\n role, whose lines are set tight against one another, only makes sense for a\n single-line label. */\n line-height: var(--textarea-leading);\n resize: vertical;\n overflow: hidden;\n transition:\n border-color var(--vectis-duration-fast) var(--vectis-ease-default),\n background-color var(--vectis-duration-fast) var(--vectis-ease-default),\n box-shadow var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n .v-textarea-control {\n flex: 1;\n min-width: 0;\n align-self: stretch;\n padding: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n outline: none; /* the focus ring is drawn by the field around it, not here */\n resize: none; /* the resize handle belongs to the field, so there is only one */\n }\n\n .v-textarea-control::placeholder {\n color: var(--vectis-color-text-subtle);\n }\n\n /* The icons and buttons align with the FIRST line of text rather than with the\n middle of a field whose height varies: half the difference between the line box and\n the element centres it there. On a single line that comes out identical to the\n centring VInput gets from its fixed height, which is the point.\n\n The measure is `--textarea-line` and never `1lh` — see the trap where it is\n declared: `lh` would be resolved against each child's own font, which differs from\n the field's.\n\n TRAP — the margin is SYMMETRIC, the VToast rule. It looks redundant under\n `align-items: flex-start`, where only the start side moves anything, but the end\n side is what keeps the item's OUTER box down to one line box. Left off, a clear\n cross (24px against a 21px line) would be the tallest thing in the flex line and\n the field would be 1.5px taller than the rows asked for — 2px at `lg` — which is\n exactly the gap that stops `rows=\"1\"` from being a VInput. */\n .v-textarea-field > .v-icon,\n .v-textarea-field > .v-spinner {\n margin-block: calc((var(--textarea-line) - var(--vectis-icon-size)) / 2);\n }\n\n .v-textarea-field > .v-textarea-action {\n margin-block: calc((var(--textarea-line) - var(--control-action-size)) / 2);\n }\n\n /* A decorative icon is drawn in a muted grey, so it stays quieter than the text\n being typed beside it. */\n .v-textarea-field > .v-icon {\n color: var(--vectis-color-text-muted);\n }\n\n .v-textarea-field > .v-spinner {\n font-size: var(--vectis-icon-size);\n }\n\n /* A read-only field sinks slightly into the page but keeps its text at full\n strength — the value is there to be read — and still shows the accent focus ring.\n The state is read from [data-readonly] and never from `:read-only`, which the\n browser also matches on a disabled field.\n\n TRAP — this block must stay FIRST in the sequence of states: read-only, then\n hover, focus, invalid and disabled. Every one of these selectors weighs (0,3,0),\n `:has()` taking the specificity of what it contains, so nothing but the source\n order arbitrates between them. Moved further down, this rule would repaint the\n error border and the accent focus ring grey, with no error anywhere. What belongs\n to a read-only field is its BASE colour alone. */\n .v-textarea[data-readonly] .v-textarea-field {\n --field-border-color: var(--vectis-color-border);\n\n background: var(--vectis-color-surface-sunken);\n }\n\n .v-textarea-field:hover:not(:has(.v-textarea-control:focus)):not(\n :has(\n .v-textarea-control:disabled,\n .v-textarea-control:user-invalid,\n .v-textarea-control[aria-invalid='true']\n )\n ) {\n --field-border-color: color-mix(\n in oklab,\n var(--vectis-color-border-strong),\n var(--vectis-color-text) 15%\n );\n }\n\n /* The focused field appears to have a two-pixel border: it is really its own 1px\n border plus a 1px shadow of the same colour just outside it, which costs no\n layout and therefore makes nothing jump.\n\n The selector watches the CONTROL's focus and not `:focus-within`, so that when one\n of the field's own buttons takes keyboard focus, only that button's outline\n lights up: two indicators at once would be unreadable. And it is `:focus` rather\n than `:focus-visible`, because a text field shows its focus even when it was\n reached with the mouse.\n\n The transparent outline is the safety net for Windows forced colours, which drop\n box-shadows entirely; an outline survives and keeps the field marked. */\n .v-textarea-field:has(.v-textarea-control:focus) {\n --field-border-color: var(--vectis-color-accent);\n\n box-shadow: 0 0 0 1px var(--field-border-color);\n outline: var(--vectis-focus-ring-width) solid transparent;\n }\n\n /* The invalid state, from the browser's own verdict first and from the `invalid`\n prop second. Only the colour variable is changed, which is why the border AND the\n focus ring both turn red without either being restated. */\n .v-textarea-field:has(.v-textarea-control:user-invalid),\n .v-textarea-field:has(.v-textarea-control[aria-invalid='true']) {\n --field-border-color: var(--vectis-color-danger);\n }\n\n /* A disabled field greys out through the colour tokens, the same ones VCheckbox and\n VRadio use, and never through opacity. It comes LAST in the sequence of states,\n which at equal specificity is what makes it win over all of them, the error\n included: a disabled field is not submitted, so it has nothing to report.\n\n The text here is `text-muted` and not the `text-subtle` used by the label and the\n hint below, because those sit on the page surface where this sits on\n `surface-muted` — against which subtle falls to a 4.4:1 contrast. The control\n itself is exempt from that rule, being natively disabled, but the icons the field\n CONTAINS are not, and they inherit this colour. */\n .v-textarea[data-disabled] .v-textarea-field {\n --field-border-color: var(--vectis-color-border);\n\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-muted);\n cursor: not-allowed;\n resize: none;\n }\n\n .v-textarea[data-disabled] .v-textarea-label,\n .v-textarea[data-disabled] .v-textarea-hint,\n .v-textarea[data-disabled] .v-textarea-counter {\n color: var(--vectis-color-text-subtle);\n }\n\n .v-textarea[data-disabled] .v-textarea-action,\n .v-textarea[data-disabled] .v-textarea-field > .v-icon {\n color: inherit;\n cursor: not-allowed;\n }\n\n .v-textarea-control:disabled {\n cursor: not-allowed;\n }\n\n /* Growing with the content is pure CSS: `field-sizing` makes the textarea's height\n follow what is typed, and the field around it follows in turn. The resize handle\n goes, there being nothing left to resize by hand. A browser without support keeps\n the fixed height and its scrollbar, which is the intended fallback. */\n .v-textarea-field[data-auto-grow] {\n resize: none;\n }\n\n /* `field-sizing: content` sizes the control to what has been typed and ignores `rows`\n outright, so an auto-growing field would open one line tall whatever the prop said.\n The floor hands the STARTING height back to `rows` and leaves the growing to the\n browser. It is scoped to this branch and must not be lifted onto the control at\n large: a floor there would stop the control shrinking with the resize handle, and\n the field, which hides its overflow, would clip it instead of scrolling. */\n .v-textarea-field[data-auto-grow] .v-textarea-control {\n field-sizing: content;\n min-block-size: calc(var(--textarea-rows) * var(--textarea-line));\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-textarea-field {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
-
@layer vectis.components{.v-time-input{anchor-scope:--time-input-anchor;width:100%;font-family:var(--vectis-text-family);display:block}.v-time-input-
|
|
2
|
+
@layer vectis.components{.v-time-input{anchor-scope:--time-input-anchor;width:100%;font-family:var(--vectis-text-family);display:block}.v-time-input-control{cursor:pointer}.v-time-input-control .v-input-field{anchor-name:--time-input-anchor}.v-time-input[data-mode=input] .v-time-input-control{cursor:text}.v-time-input[data-mode=input] .v-input-control{font-variant-numeric:tabular-nums}.v-field-action.v-time-input-meridiem{inline-size:auto;min-inline-size:var(--control-action-size);padding-inline:calc((var(--control-action-size) - var(--vectis-icon-size)) / 2);font:inherit}.v-separator[data-orientation=vertical].v-time-input-divider{block-size:var(--control-action-size);align-self:center}.v-popover-panel.v-time-input-panel{width:max-content;color:var(--vectis-color-text);padding:0}.v-time-input[data-mode=list] .v-combobox-panel{font-variant-numeric:tabular-nums}}
|
|
@@ -1,24 +1,11 @@
|
|
|
1
1
|
import { IconSource } from '../VIcon/types.js';
|
|
2
2
|
import { TimePickerFormat } from '../VTimePicker/VTimePicker.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* optionally with a picker beside it. It can be read-only, the picker then being the only way
|
|
10
|
-
* in. Or it can offer a LIST of times at a fixed interval, which suits booking a slot far
|
|
11
|
-
* better than pointing at a clock face.
|
|
12
|
-
*
|
|
13
|
-
* The two panels commit differently, and deliberately so. The PICKER works on a draft that
|
|
14
|
-
* only OK writes to the value — Cancel, Escape and the focus leaving all discard it —
|
|
15
|
-
* because dragging a hand across a clock passes over dozens of times nobody meant. The
|
|
16
|
-
* LIST writes immediately: choosing a row there is one deliberate gesture.
|
|
17
|
-
*
|
|
18
|
-
* Whatever is displayed, the value itself is always a 24-hour time.
|
|
19
|
-
*/
|
|
20
|
-
export type TimeInputMode = 'readonly' | 'input' | 'list';
|
|
21
|
-
type Placement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
|
|
3
|
+
import { TimePickerAllowed } from '../VTimePicker/limits.js';
|
|
4
|
+
export type TimeInputMode = 'picker' | 'input' | 'list';
|
|
5
|
+
/** Where the panel opens relative to the field, whether it holds the clock or the list. */
|
|
6
|
+
export type TimeInputPlacement = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
|
|
7
|
+
/** The height of the field: 32, 40 or 48 pixels. */
|
|
8
|
+
export type TimeInputSize = 'sm' | 'md' | 'lg';
|
|
22
9
|
interface TimeInputProps {
|
|
23
10
|
/**
|
|
24
11
|
* Whether times are shown on a 12- or a 24-hour clock. Left out, the reader's language
|
|
@@ -26,19 +13,17 @@ interface TimeInputProps {
|
|
|
26
13
|
*/
|
|
27
14
|
format?: TimePickerFormat;
|
|
28
15
|
/**
|
|
29
|
-
* Which form the field takes: one that can be TYPED into, a
|
|
30
|
-
*
|
|
31
|
-
* fixed interval, where a picker would make no sense.
|
|
16
|
+
* Which form the field takes: one that can be TYPED into, a `picker` one where the
|
|
17
|
+
* clock is the only way in — so the picker is forced on there — or a searchable LIST of
|
|
18
|
+
* times at a fixed interval, where a picker would make no sense.
|
|
32
19
|
*/
|
|
33
20
|
mode?: TimeInputMode;
|
|
34
21
|
/**
|
|
35
22
|
* Offers the picker beside a field one can type into: an icon at the end of the field,
|
|
36
23
|
* and a panel it opens.
|
|
37
24
|
*
|
|
38
|
-
* It
|
|
39
|
-
*
|
|
40
|
-
* consumer who really asked to remove the picker from a read-only field, where it is the
|
|
41
|
-
* only way in.
|
|
25
|
+
* It means nothing in `picker` mode, where the clock is already the only way to choose,
|
|
26
|
+
* nor in `list` mode, which has a panel of its own — VDateInput reads it the same way.
|
|
42
27
|
*/
|
|
43
28
|
showPicker?: boolean;
|
|
44
29
|
/**
|
|
@@ -46,6 +31,21 @@ interface TimeInputProps {
|
|
|
46
31
|
* arrow keys and to the rows of the list.
|
|
47
32
|
*/
|
|
48
33
|
minuteStep?: number;
|
|
34
|
+
/**
|
|
35
|
+
* The earliest time that can be chosen, inclusive, as a canonical 24-hour `'HH:mm'`.
|
|
36
|
+
* The picker and the list both LEAVE OUT what it rules out, and a time typed past it
|
|
37
|
+
* makes the field invalid.
|
|
38
|
+
*/
|
|
39
|
+
min?: string;
|
|
40
|
+
/** The latest time that can be chosen, inclusive, written like `min`. */
|
|
41
|
+
max?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Which hours can be chosen: the list of them, or a rule answering for one. The hour
|
|
44
|
+
* handed to a rule is always the 24-hour one, whichever clock is on display.
|
|
45
|
+
*/
|
|
46
|
+
allowedHours?: TimePickerAllowed;
|
|
47
|
+
/** Which minutes can be chosen: the list of them, or a rule answering for one. */
|
|
48
|
+
allowedMinutes?: TimePickerAllowed;
|
|
49
49
|
/**
|
|
50
50
|
* A BCP 47 locale, which decides the clock and how a time is written out. It TAKES
|
|
51
51
|
* PRECEDENCE over the design system's global locale and falls back to it — which is why
|
|
@@ -60,25 +60,87 @@ interface TimeInputProps {
|
|
|
60
60
|
/** What the field says while empty. */
|
|
61
61
|
placeholder?: string;
|
|
62
62
|
/** The height of the field: 32, 40 or 48 pixels. */
|
|
63
|
-
size?:
|
|
63
|
+
size?: TimeInputSize;
|
|
64
64
|
/** Takes 4px off the height. */
|
|
65
65
|
compact?: boolean;
|
|
66
66
|
/** Makes the field unusable, greyed out through the colour tokens. */
|
|
67
67
|
disabled?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Shows the time without letting it be changed: nothing can be typed, there is no
|
|
70
|
+
* clock and no clear cross. The field stays focusable and can be copied from, which
|
|
71
|
+
* is what separates it from `disabled`, and it is a different question from `mode`,
|
|
72
|
+
* which says how a field that CAN be changed is filled in.
|
|
73
|
+
*/
|
|
74
|
+
readonly?: boolean;
|
|
68
75
|
/** Marks the field as invalid — for a rule of your own. */
|
|
69
76
|
invalid?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* An icon inside the field, at the start. It is decorative by default and becomes a
|
|
79
|
+
* real button as soon as a `@click:icon-start` listener is attached, in which case it
|
|
80
|
+
* needs `iconStartLabel`.
|
|
81
|
+
*/
|
|
82
|
+
iconStart?: IconSource;
|
|
83
|
+
/** What the start icon does, in words, once it is clickable. */
|
|
84
|
+
iconStartLabel?: string;
|
|
85
|
+
/**
|
|
86
|
+
* What the clock button does, in words. It names the button `pickerIcon` renders,
|
|
87
|
+
* and falls back to the design system dictionary.
|
|
88
|
+
*/
|
|
89
|
+
pickerIconLabel?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Shows a spinner at the end of the field, in place of the clock icon. It says that
|
|
92
|
+
* something is being loaded and changes nothing else: the field can still be typed
|
|
93
|
+
* into and the panel still opens.
|
|
94
|
+
*/
|
|
95
|
+
loading?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* What screen readers announce while the spinner turns. It falls back to the design
|
|
98
|
+
* system dictionary.
|
|
99
|
+
*/
|
|
100
|
+
loadingLabel?: string;
|
|
70
101
|
/** Offers a cross that empties the value, shown before the end icon. */
|
|
71
102
|
clearable?: boolean;
|
|
103
|
+
/** What that cross does, in words. It falls back to the design system dictionary. */
|
|
104
|
+
clearLabel?: string;
|
|
72
105
|
/**
|
|
73
106
|
* The icon that opens the PICKER, at the end of the field. It has no effect on the list
|
|
74
107
|
* form, whose chevron follows the combobox convention. The clear cross appears to its
|
|
75
108
|
* left rather than in its place.
|
|
76
109
|
*/
|
|
77
110
|
pickerIcon?: IconSource;
|
|
78
|
-
/** Where the panel opens relative to the field. */
|
|
79
|
-
placement?:
|
|
111
|
+
/** Where the panel opens relative to the field, whether it holds the clock or the list. */
|
|
112
|
+
placement?: TimeInputPlacement;
|
|
80
113
|
}
|
|
81
114
|
type __VLS_Props = TimeInputProps;
|
|
115
|
+
type __VLS_Slots = {
|
|
116
|
+
/**
|
|
117
|
+
* Content at the start of the field, rendered after `iconStart` rather than in its place,
|
|
118
|
+
* as in VInput.
|
|
119
|
+
*/
|
|
120
|
+
start?(): unknown;
|
|
121
|
+
/**
|
|
122
|
+
* Controls of your own inside the field, after the AM/PM button when there is one and
|
|
123
|
+
* before the ones the field owns — the clear cross and the icon that opens the panel.
|
|
124
|
+
* Those two are this component's own affordance, which is why there is no `#end` here.
|
|
125
|
+
*/
|
|
126
|
+
'value-end'?(): unknown;
|
|
127
|
+
/**
|
|
128
|
+
* The strip at the foot of the clock, which REPLACES the Cancel and OK buttons rather
|
|
129
|
+
* than joining them.
|
|
130
|
+
*
|
|
131
|
+
* It receives both actions, and they are what make the slot usable: the clock writes a
|
|
132
|
+
* DRAFT that only `confirm` commits, so a footer of your own without it would leave the
|
|
133
|
+
* value unchangeable through the panel. `cancel` drops the draft and closes, and `close`
|
|
134
|
+
* is the same function under the name VDateInput's footer hands out.
|
|
135
|
+
*
|
|
136
|
+
* It is not rendered in `list` mode, which has no panel of this component's own.
|
|
137
|
+
*/
|
|
138
|
+
footer?(props: {
|
|
139
|
+
confirm: () => void;
|
|
140
|
+
cancel: () => void;
|
|
141
|
+
close: () => void;
|
|
142
|
+
}): unknown;
|
|
143
|
+
};
|
|
82
144
|
type __VLS_ModelProps = {
|
|
83
145
|
/**
|
|
84
146
|
* The time, always as a 24-hour "HH:mm" string whatever clock is displayed. A consumer
|
|
@@ -87,26 +149,54 @@ type __VLS_ModelProps = {
|
|
|
87
149
|
modelValue?: string | null;
|
|
88
150
|
};
|
|
89
151
|
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
90
|
-
declare const
|
|
152
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
153
|
+
/** Moves the focus to the text field. */
|
|
154
|
+
focus: (options?: FocusOptions) => void | undefined;
|
|
155
|
+
/** Selects what the field is showing. */
|
|
156
|
+
select: () => void | undefined;
|
|
157
|
+
/** The real `<input>` behind the field, for what neither of the two above covers. */
|
|
158
|
+
el: import('vue').ComputedRef<HTMLInputElement | null>;
|
|
159
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
160
|
+
clear: () => any;
|
|
91
161
|
"update:modelValue": (value: string | null) => any;
|
|
162
|
+
"click:icon-start": (event: MouseEvent) => any;
|
|
92
163
|
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
164
|
+
onClear?: (() => any) | undefined;
|
|
93
165
|
"onUpdate:modelValue"?: ((value: string | null) => any) | undefined;
|
|
166
|
+
"onClick:icon-start"?: ((event: MouseEvent) => any) | undefined;
|
|
94
167
|
}>, {
|
|
168
|
+
loading: boolean;
|
|
95
169
|
label: string;
|
|
96
|
-
minuteStep: number;
|
|
97
170
|
placeholder: string;
|
|
98
|
-
size:
|
|
99
|
-
placement:
|
|
171
|
+
size: TimeInputSize;
|
|
172
|
+
placement: TimeInputPlacement;
|
|
100
173
|
mode: TimeInputMode;
|
|
101
174
|
compact: boolean;
|
|
102
175
|
disabled: boolean;
|
|
176
|
+
iconStart: IconSource;
|
|
103
177
|
invalid: boolean;
|
|
104
178
|
hint: string;
|
|
179
|
+
readonly: boolean;
|
|
180
|
+
iconStartLabel: string;
|
|
181
|
+
loadingLabel: string;
|
|
105
182
|
clearable: boolean;
|
|
183
|
+
clearLabel: string;
|
|
184
|
+
max: string;
|
|
106
185
|
format: TimePickerFormat;
|
|
186
|
+
min: string;
|
|
107
187
|
locale: string;
|
|
108
188
|
showPicker: boolean;
|
|
189
|
+
pickerIconLabel: string;
|
|
109
190
|
pickerIcon: IconSource;
|
|
191
|
+
minuteStep: number;
|
|
192
|
+
allowedHours: TimePickerAllowed;
|
|
193
|
+
allowedMinutes: TimePickerAllowed;
|
|
110
194
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
195
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
111
196
|
declare const _default: typeof __VLS_export;
|
|
112
197
|
export default _default;
|
|
198
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
199
|
+
new (): {
|
|
200
|
+
$slots: S;
|
|
201
|
+
};
|
|
202
|
+
};
|