vectis-ui 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/VAccordion/VAccordion.js.map +1 -1
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAccordion/context.js.map +1 -1
- package/dist/components/VAlert/VAlert.js.map +1 -1
- package/dist/components/VAlert/VAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAvatar/VAvatar.js.map +1 -1
- package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAvatar/VAvatarGroup.js.map +1 -1
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAvatar/context.js.map +1 -1
- package/dist/components/VBadge/VBadge.js.map +1 -1
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VBreadcrumb/VBreadcrumb.js.map +1 -1
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/VButton.js.map +1 -1
- package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/VButtonGroup.js.map +1 -1
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VButton/context.js.map +1 -1
- package/dist/components/VCalendar/VCalendar.js.map +1 -1
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js +5 -17
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js +19 -31
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/color.js.map +1 -1
- package/dist/components/VCalendar/edgeStep.js +1 -5
- package/dist/components/VCalendar/edgeStep.js.map +1 -1
- package/dist/components/VCalendar/gesture.js +4 -12
- package/dist/components/VCalendar/gesture.js.map +1 -1
- package/dist/components/VCalendar/keyboard.js.map +1 -1
- package/dist/components/VCalendar/layout.js +8 -12
- package/dist/components/VCalendar/layout.js.map +1 -1
- package/dist/components/VCalendar/timeGrid.js +5 -5
- package/dist/components/VCalendar/timeGrid.js.map +1 -1
- package/dist/components/VCard/VCard.js.map +1 -1
- package/dist/components/VCard/VCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCarousel/VCarousel.js.map +1 -1
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.js.map +1 -1
- package/dist/components/VCheckbox/VCheckMark.js.map +1 -1
- package/dist/components/VCheckbox/VCheckMark.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCheckbox/VCheckbox.js.map +1 -1
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VChip/VChip.js.map +1 -1
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VColorInput/VColorInput.js.map +1 -1
- package/dist/components/VColorInput/VColorInput.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/VColorInput/VColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VColorPicker/VColorPicker.css +1 -1
- package/dist/components/VColorPicker/VColorPicker.js.map +1 -1
- package/dist/components/VColorPicker/VColorPicker.vue_vue_type_script_setup_true_lang.js +1 -5
- package/dist/components/VColorPicker/VColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VColorPicker/color.js.map +1 -1
- package/dist/components/VCombobox/VCombobox.js.map +1 -1
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +114 -122
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCommandPalette/VCommandPalette.css +1 -1
- package/dist/components/VCommandPalette/VCommandPalette.js.map +1 -1
- package/dist/components/VCommandPalette/VCommandPalette.vue_vue_type_script_setup_true_lang.js +0 -1
- package/dist/components/VCommandPalette/VCommandPalette.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCommandPalette/VCommandPaletteItem.js.map +1 -1
- package/dist/components/VCommandPalette/VCommandPaletteItem.vue_vue_type_script_setup_true_lang.js +1 -5
- package/dist/components/VCommandPalette/VCommandPaletteItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VContextMenu/VContextMenu.js.map +1 -1
- package/dist/components/VContextMenu/VContextMenu.vue_vue_type_script_setup_true_lang.js +3 -5
- package/dist/components/VContextMenu/VContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDataTable/VDataTable.js.map +1 -1
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +7 -10
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +35 -35
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDateInput/mask.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDatePicker/keyboard.js.map +1 -1
- package/dist/components/VDatePicker/names.js.map +1 -1
- package/dist/components/VDialog/VDialog.js.map +1 -1
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDialog/VDialogAlert.js.map +1 -1
- package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDrawer/VDrawer.js.map +1 -1
- package/dist/components/VDrawer/VDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VEmptyState/VEmptyState.js.map +1 -1
- package/dist/components/VEmptyState/VEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VField/VField.js.map +1 -1
- package/dist/components/VField/VField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VField/VFieldAnnouncer.js.map +1 -1
- package/dist/components/VField/VFieldAnnouncer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VField/VFieldMessage.js.map +1 -1
- package/dist/components/VField/VFieldMessage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFieldset/VFieldset.js.map +1 -1
- package/dist/components/VFieldset/VFieldset.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFileInput/VFileInput.js.map +1 -1
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +85 -85
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFileInput/truncate.js.map +1 -1
- package/dist/components/VFilePicker/VFilePicker.js.map +1 -1
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFilePicker/fileKind.js.map +1 -1
- package/dist/components/VHotkeys/VHotkeys.js.map +1 -1
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VHotkeys/platform.js +1 -1
- package/dist/components/VHotkeys/platform.js.map +1 -1
- package/dist/components/VHoverCard/VHoverCard.js.map +1 -1
- package/dist/components/VHoverCard/VHoverCard.vue_vue_type_script_setup_true_lang.js +2 -12
- package/dist/components/VHoverCard/VHoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VIcon/VIcon.js.map +1 -1
- 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/add.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_downward.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_downward_alt.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_drop_down.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_drop_up.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_left_alt.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_right_alt.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_upward.js.map +1 -1
- package/dist/components/VIcon/icons/arrow_upward_alt.js.map +1 -1
- package/dist/components/VIcon/icons/attach_file.js.map +1 -1
- package/dist/components/VIcon/icons/audio_file.js.map +1 -1
- package/dist/components/VIcon/icons/calendar_today.js.map +1 -1
- package/dist/components/VIcon/icons/check.js.map +1 -1
- package/dist/components/VIcon/icons/check_circle.js.map +1 -1
- package/dist/components/VIcon/icons/chevron_left.js.map +1 -1
- package/dist/components/VIcon/icons/chevron_right.js.map +1 -1
- package/dist/components/VIcon/icons/close.js.map +1 -1
- package/dist/components/VIcon/icons/cloud_upload.js.map +1 -1
- package/dist/components/VIcon/icons/code.js.map +1 -1
- package/dist/components/VIcon/icons/colorize.js.map +1 -1
- package/dist/components/VIcon/icons/description.js.map +1 -1
- package/dist/components/VIcon/icons/error.js.map +1 -1
- package/dist/components/VIcon/icons/expand_less.js.map +1 -1
- package/dist/components/VIcon/icons/expand_more.js.map +1 -1
- package/dist/components/VIcon/icons/first_page.js.map +1 -1
- package/dist/components/VIcon/icons/folder_zip.js.map +1 -1
- package/dist/components/VIcon/icons/image.js.map +1 -1
- package/dist/components/VIcon/icons/inbox.js.map +1 -1
- package/dist/components/VIcon/icons/index.js.map +1 -1
- package/dist/components/VIcon/icons/info.js.map +1 -1
- package/dist/components/VIcon/icons/last_page.js.map +1 -1
- package/dist/components/VIcon/icons/more_horiz.js.map +1 -1
- package/dist/components/VIcon/icons/names.js.map +1 -1
- package/dist/components/VIcon/icons/notifications.js.map +1 -1
- package/dist/components/VIcon/icons/open_in_new.js.map +1 -1
- package/dist/components/VIcon/icons/picture_as_pdf.js.map +1 -1
- package/dist/components/VIcon/icons/priority_high.js.map +1 -1
- package/dist/components/VIcon/icons/remove.js.map +1 -1
- package/dist/components/VIcon/icons/schedule.js.map +1 -1
- package/dist/components/VIcon/icons/search.js.map +1 -1
- package/dist/components/VIcon/icons/search_off.js.map +1 -1
- package/dist/components/VIcon/icons/star.js.map +1 -1
- package/dist/components/VIcon/icons/swap_vert.js.map +1 -1
- package/dist/components/VIcon/icons/table_chart.js.map +1 -1
- package/dist/components/VIcon/icons/video_file.js.map +1 -1
- package/dist/components/VIcon/icons/viewBox.js.map +1 -1
- package/dist/components/VIcon/icons/warning.js.map +1 -1
- package/dist/components/VIcon/resolver.js.map +1 -1
- package/dist/components/VIconButton/VIconButton.js.map +1 -1
- package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/VInput.js.map +1 -1
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +20 -20
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/VInputGroup.js.map +1 -1
- package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/context.js.map +1 -1
- package/dist/components/VInputOTP/VInputOTP.js.map +1 -1
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +2 -8
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VLink/VLink.js.map +1 -1
- package/dist/components/VLink/VLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxChevron.js.map +1 -1
- package/dist/components/VListbox/VListboxChevron.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxGroup.js.map +1 -1
- package/dist/components/VListbox/VListboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxOption.js.map +1 -1
- package/dist/components/VListbox/VListboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxPanel.js.map +1 -1
- package/dist/components/VListbox/VListboxPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxSeparator.js.map +1 -1
- package/dist/components/VListbox/VListboxSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VListbox/VListboxValues.js.map +1 -1
- package/dist/components/VListbox/VListboxValues.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenu.js.map +1 -1
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuGroup.js.map +1 -1
- package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuItem.js.map +1 -1
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +6 -12
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuPanel.js.map +1 -1
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/VMenuSeparator.js.map +1 -1
- package/dist/components/VMenu/VMenuSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMenu/context.js.map +1 -1
- package/dist/components/VMeter/VMeter.js.map +1 -1
- package/dist/components/VMeter/VMeter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VNumberInput/VNumberInput.js.map +1 -1
- package/dist/components/VNumberInput/VNumberInput.vue_vue_type_script_setup_true_lang.js +86 -85
- package/dist/components/VNumberInput/VNumberInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VNumberInput/number.d.ts +2 -2
- package/dist/components/VNumberInput/number.js +1 -1
- package/dist/components/VNumberInput/number.js.map +1 -1
- package/dist/components/VPagination/VPagination.js.map +1 -1
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VPopover/VPopover.js.map +1 -1
- package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VProgressCircular/VProgressCircular.js.map +1 -1
- package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VRadio/VRadio.js.map +1 -1
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VRating/VRating.js.map +1 -1
- package/dist/components/VRating/VRating.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VResizable/VResizable.js.map +1 -1
- package/dist/components/VResizable/VResizable.vue_vue_type_script_setup_true_lang.js +8 -6
- package/dist/components/VResizable/VResizable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VResizable/VResizablePanel.js.map +1 -1
- package/dist/components/VResizable/VResizablePanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VResizable/context.js.map +1 -1
- package/dist/components/VResizable/layout.js.map +1 -1
- package/dist/components/VSelect/VSelect.js.map +1 -1
- package/dist/components/VSelect/VSelect.vue_vue_type_script_setup_true_lang.js +182 -189
- package/dist/components/VSelect/VSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationGroup.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +1 -5
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationSeparator.js.map +1 -1
- package/dist/components/VSideNavigation/context.js.map +1 -1
- 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.js.map +1 -1
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +22 -22
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSnackbar/VSnackbar.js.map +1 -1
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSnackbar/state.js.map +1 -1
- package/dist/components/VSpinner/VSpinner.js.map +1 -1
- package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSplitButton/VSplitButton.js.map +1 -1
- package/dist/components/VSplitButton/VSplitButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VStepper/VStepper.js.map +1 -1
- package/dist/components/VStepper/VStepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSwitch/VSwitch.js.map +1 -1
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTab.js.map +1 -1
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTabPanel.js.map +1 -1
- package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTabs.js.map +1 -1
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/context.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeInput/search.js.map +1 -1
- package/dist/components/VTimePicker/VTimePicker.js.map +1 -1
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimePicker/limits.js.map +1 -1
- package/dist/components/VTimeline/VTimeline.js.map +1 -1
- package/dist/components/VTimeline/VTimeline.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeline/VTimelineItem.js.map +1 -1
- package/dist/components/VTimeline/VTimelineItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeline/context.js.map +1 -1
- package/dist/components/VTimeline/datetime.js.map +1 -1
- package/dist/components/VToast/VToast.js.map +1 -1
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToast/VToaster.js.map +1 -1
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToast/state.js.map +1 -1
- package/dist/components/VToggle/VToggle.js.map +1 -1
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js +2 -8
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToggle/VToggleItem.js.map +1 -1
- package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VToggle/context.js.map +1 -1
- package/dist/components/VTooltip/VTooltip.js.map +1 -1
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTreeView/VTreeView.js.map +1 -1
- package/dist/components/VTreeView/VTreeView.vue_vue_type_script_setup_true_lang.js +127 -135
- package/dist/components/VTreeView/VTreeView.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/components/VVirtualList/VVirtualList.js.map +1 -1
- package/dist/components/VVirtualList/VVirtualList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/composables/useAriaLabel.js.map +1 -1
- package/dist/composables/useChoice.js.map +1 -1
- package/dist/composables/useClearable.js.map +1 -1
- package/dist/composables/useControlShape.js.map +1 -1
- package/dist/composables/useDebouncedSearch.js.map +1 -1
- package/dist/composables/useDetailsOpen.js.map +1 -1
- package/dist/composables/useEscapeDismiss.js.map +1 -1
- package/dist/composables/useFieldIds.js.map +1 -1
- package/dist/composables/useFieldPanel.js +3 -7
- package/dist/composables/useFieldPanel.js.map +1 -1
- package/dist/composables/useFileDrop.js.map +1 -1
- package/dist/composables/useFileField.js +2 -2
- package/dist/composables/useFileField.js.map +1 -1
- package/dist/composables/useFocusoutDismiss.js.map +1 -1
- package/dist/composables/useHotkeyListener.js +5 -2
- package/dist/composables/useHotkeyListener.js.map +1 -1
- package/dist/composables/useIconClickHandlers.js.map +1 -1
- package/dist/composables/useInertLink.js.map +1 -1
- package/dist/composables/useInfiniteScroll.js +4 -4
- package/dist/composables/useInfiniteScroll.js.map +1 -1
- package/dist/composables/useListbox.js +3 -9
- package/dist/composables/useListbox.js.map +1 -1
- package/dist/composables/useLiveAnnouncer.js.map +1 -1
- package/dist/composables/useMaskedField.js +28 -48
- package/dist/composables/useMaskedField.js.map +1 -1
- package/dist/composables/useModalDialog.js +1 -1
- package/dist/composables/useModalDialog.js.map +1 -1
- package/dist/composables/usePopover.js +1 -1
- package/dist/composables/usePopover.js.map +1 -1
- package/dist/composables/useProgressValue.js.map +1 -1
- package/dist/composables/useRootAttrs.js.map +1 -1
- package/dist/composables/useSlotNodes.js.map +1 -1
- package/dist/composables/useTextLimit.js.map +1 -1
- package/dist/composables/useTimer.js.map +1 -1
- package/dist/composables/useTypeahead.d.ts +13 -0
- package/dist/composables/useTypeahead.js +23 -0
- package/dist/composables/useTypeahead.js.map +1 -0
- package/dist/composables/useVirtualList.js.map +1 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/state.d.ts +1 -1
- package/dist/i18n/state.js +17 -6
- package/dist/i18n/state.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tokens/css.js.map +1 -1
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/primitives.js.map +1 -1
- package/dist/tokens/semantic.js.map +1 -1
- package/dist/tokens/themes/dark.js.map +1 -1
- package/dist/tokens/types.js.map +1 -1
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/arrowNav.js.map +1 -1
- package/dist/utils/attrs.js.map +1 -1
- package/dist/utils/chip.js.map +1 -1
- package/dist/utils/clock.js +3 -1
- package/dist/utils/clock.js.map +1 -1
- package/dist/utils/css.js +1 -1
- package/dist/utils/css.js.map +1 -1
- package/dist/utils/date.js +4 -3
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/direction.js.map +1 -1
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/file.js +13 -31
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/focus.js.map +1 -1
- package/dist/utils/hostWarns.js.map +1 -1
- package/dist/utils/ids.js.map +1 -1
- package/dist/utils/matcher.js.map +1 -1
- package/dist/utils/memo.js.map +1 -1
- package/dist/utils/number.js.map +1 -1
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/vnode.js.map +1 -1
- package/package.json +19 -19
package/dist/utils/clock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clock.js","names":[],"sources":["../../src/utils/clock.ts"],"sourcesContent":["// @ssr @core\n/**\n * Clock- and input-specific time arithmetic stays outside the smaller time module imported by\n * calendar views.\n */\nimport { digitsOf, pad2 } from './text'\nimport { formatTime, parseTime, formatTimeDisplay } from './time'\nimport type { HourFormat, Meridiem } from './time'\n\n/**\n * Turns an hour of the 24-hour clock into the hour a 12-hour clock face shows, together\n * with which half of the day it belongs to: midnight is 12 AM, noon is 12 PM, and eleven\n * at night is 11 PM.\n */\nexport function to12h(hour24: number): { hour: number; meridiem: Meridiem } {\n const meridiem: Meridiem = hour24 >= 12 ? 'PM' : 'AM'\n const hour = hour24 % 12 === 0 ? 12 : hour24 % 12\n return { hour, meridiem }\n}\n\n/**\n * The way back: an hour read off a 12-hour clock face, plus the half of the day it is in,\n * gives the hour on the 24-hour clock: 12 in the morning is 0, 12 in the afternoon is 12.\n */\nexport function to24h(hour12: number, meridiem: Meridiem): number {\n const base = hour12 % 12 // Twelve is the zero of the cycle, not its top.\n return meridiem === 'PM' ? base + 12 : base\n}\n\n/**\n * The same hour moved into the other half of the day, or left where it is: 9 with PM gives\n * 21, and 21 with PM stays 21. It is what an AM/PM control does to the hour it qualifies.\n */\nexport function hourWithMeridiem(hour24: number, meridiem: Meridiem): number {\n return to24h(to12h(hour24).hour, meridiem)\n}\n\n/**\n * A canonical time moved into a half of the day, its minutes untouched, or `null` when it is\n * not a time at all: `'09:30'` with PM gives `'21:30'`.\n */\nexport function withMeridiem(time: string | null | undefined, meridiem: Meridiem): string | null {\n const parts = parseTime(time)\n return parts ? formatTime(hourWithMeridiem(parts.hour, meridiem), parts.minute) : null\n}\n\n/** Snaps a minute to the nearest allowed step and wraps it back inside the hour. */\nexport function snapMinute(minute: number, step: number): number {\n const size = Math.round(step)\n const snapped = size <= 1 ? Math.round(minute) : Math.round(minute / size) * size\n return ((snapped % 60) + 60) % 60\n}\n\n/**\n * Which mark a pointer offset from the dial's centre is aiming at. Marks are numbered clockwise\n * from twelve o'clock and the nearest wins.\n */\nexport function angleToIndex(dx: number, dy: number, segments: number): number {\n const angle = Math.atan2(dx, -dy)\n const turn = (angle / (2 * Math.PI) + 1) % 1\n return Math.round(turn * segments) % segments\n}\n\n/** How far from the centre a finger landed, as a fraction: nothing at the centre, one at the edge. */\nexport function distanceFraction(dx: number, dy: number, radius: number): number {\n return radius > 0 ? Math.hypot(dx, dy) / radius : 0\n}\n\n/**\n * The number is DERIVED from the dial tokens. A 256px dial with 48px numerals puts the rings'\n * centres at 104px and 56px from the middle, whose midpoint is 0.625 of the radius.\n */\nexport const DIAL_INNER_THRESHOLD = 0.625\n\n/**\n * Derived from the same tokens as the threshold above: the inner ring's numerals start 32px\n * from the middle (56px less half a 48px numeral), 0.25 of the radius, so the dead zone stops\n * short of them. Grow it past 0.25 and the inner small hours lose their inner half to it.\n */\nexport const DIAL_DEAD_ZONE = 0.2\n\n/**\n * Which hour a mark stands for on the two-ring dial: outer carries 12 then 1-11, inner\n * carries 00 then 13-23. Index 0 of each is the mark at twelve o'clock.\n */\nexport function dialIndexToHour24(index: number, ring: 'outer' | 'inner'): number {\n if (ring === 'outer') return index === 0 ? 12 : index\n return index === 0 ? 0 : index + 12\n}\n\n/** The way back, which tells the hand where to point. */\nexport function hour24ToDial(hour: number): { index: number; ring: 'outer' | 'inner' } {\n if (hour === 0) return { index: 0, ring: 'inner' }\n if (hour === 12) return { index: 0, ring: 'outer' }\n if (hour > 12) return { index: hour - 12, ring: 'inner' }\n return { index: hour, ring: 'outer' }\n}\n\nexport interface TimeOption {\n /** The canonical time, which the component's value will be set to. */\n value: string\n /** The same time written out for the reader: \"07:30\", or \"7:30 AM\". */\n label: string\n}\n\n/**\n * Every time of the day at a given interval, midnight to the last one before the next. A\n * nonsensical step (zero, a fraction, more than an hour) falls back to hourly, so the list\n * stays FINITE even when the component's warning about it was ignored.\n */\nexport function timeList(step: number, locale: string, format: HourFormat): TimeOption[] {\n const safe = Number.isInteger(step) && step >= 1 && step <= 60 ? step : 60\n const out: TimeOption[] = []\n for (let m = 0; m < 24 * 60; m += safe) {\n const value = formatTime(Math.floor(m / 60), m % 60)\n out.push({ value, label: formatTimeDisplay(value, locale, format) })\n }\n return out\n}\n\n/*\n * Unlike a date's separator this one is UNIVERSAL: every language writes a time with a colon,\n * and only the 12/24-hour cycle varies. It therefore stays out of the dictionary, where the\n * empty field's `hh:mm` placeholder does belong; that one is made of the initials of words.\n */\nconst TIME_SEPARATOR = ':'\n\n/**\n * Lays a run of typed digits out as a time. The colon appears AS SOON AS the hour is\n * complete: typing \"09\" already gives \"09:\", exactly as a date's separators do.\n */\nexport function formatTimeMask(digits: string): string {\n const all = digitsOf(digits).slice(0, 4)\n return all.length >= 2 ? `${all.slice(0, 2)}${TIME_SEPARATOR}${all.slice(2)}` : all\n}\n\n/**\n * Where the caret belongs to sit just after `n` digits. On a DELETION it stays in front of it,\n * or the next Backspace steps over the colon instead of erasing a digit and the key appears to\n * do nothing.\n */\nexport function timeCaret(n: number, skipSeparator = false): number {\n if (n < 2) return n\n if (n === 2) return skipSeparator ? 3 : 2\n return Math.min(n + 1, 5)\n}\n\n/**\n * A canonical time written into the field in whichever form is SHOWN. On a 12-hour clock the\n * hour comes back into 1-12: the meridiem belongs to the toggle beside the field, never to\n * the text.\n */\nexport function timeToMask(time: string | null | undefined, format: HourFormat): string {\n const parts = parseTime(time)\n if (!parts) return ''\n const hour = format === '12h' ? to12h(parts.hour).hour : parts.hour\n return formatTimeMask(pad2(hour) + pad2(parts.minute))\n}\n\n/**\n * What was typed read back into a canonical time, or `null` when it is incomplete, too long\n * or not a real time. On a 12-hour clock this is the ONE place the typed digits and the\n * meridiem toggle meet.\n */\nexport function parseTimeMask(\n text: string,\n format: HourFormat,\n meridiem: Meridiem = 'AM',\n): string | null {\n const digits = digitsOf(text)\n if (digits.length !== 4) return null\n const hour = Number(digits.slice(0, 2))\n const minute = Number(digits.slice(2))\n if (minute > 59) return null\n if (format === '12h')\n return hour >= 1 && hour <= 12 ? formatTime(to24h(hour, meridiem), minute) : null\n return hour <= 23 ? formatTime(hour, minute) : null\n}\n"],"mappings":";;;AAcA,SAAgB,EAAM,GAAsD;CAC1E,IAAM,IAAqB,KAAU,KAAK,OAAO;CAEjD,OAAO;EAAE,MADI,IAAS,MAAO,IAAI,KAAK,IAAS;EAChC;CAAS;AAC1B;AAMA,SAAgB,EAAM,GAAgB,GAA4B;CAChE,IAAM,IAAO,IAAS;CACtB,OAAO,MAAa,OAAO,IAAO,KAAK;AACzC;AAMA,SAAgB,EAAiB,GAAgB,GAA4B;CAC3E,OAAO,EAAM,EAAM,CAAM,CAAC,CAAC,MAAM,CAAQ;AAC3C;AAMA,SAAgB,EAAa,GAAiC,GAAmC;CAC/F,IAAM,IAAQ,EAAU,CAAI;CAC5B,OAAO,IAAQ,EAAW,EAAiB,EAAM,MAAM,CAAQ,GAAG,EAAM,MAAM,IAAI;AACpF;AAGA,SAAgB,EAAW,GAAgB,GAAsB;CAC/D,IAAM,IAAO,KAAK,MAAM,CAAI;CAE5B,SADgB,KAAQ,IAAI,KAAK,MAAM,CAAM,IAAI,KAAK,MAAM,IAAS,CAAI,IAAI,KAC1D,KAAM,MAAM;AACjC;AAMA,SAAgB,EAAa,GAAY,GAAY,GAA0B;CAE7E,IAAM,KADQ,KAAK,MAAM,GAAI,CAAC,CAChB,KAAS,IAAI,KAAK,MAAM,KAAK;CAC3C,OAAO,KAAK,MAAM,IAAO,CAAQ,IAAI;AACvC;AAGA,SAAgB,EAAiB,GAAY,GAAY,GAAwB;CAC/E,OAAO,IAAS,IAAI,KAAK,MAAM,GAAI,CAAE,IAAI,IAAS;AACpD;AAMA,IAAa,IAAuB,MAOvB,IAAiB;AAM9B,SAAgB,EAAkB,GAAe,GAAiC;CAEhF,OADI,MAAS,UAAgB,MAAU,IAAI,KAAK,IACzC,MAAU,IAAI,IAAI,IAAQ;AACnC;AAGA,SAAgB,EAAa,GAA0D;CAIrF,OAHI,MAAS,IAAU;EAAE,OAAO;EAAG,MAAM;CAAQ,IAC7C,MAAS,KAAW;EAAE,OAAO;EAAG,MAAM;CAAQ,IAC9C,IAAO,KAAW;EAAE,OAAO,IAAO;EAAI,MAAM;CAAQ,IACjD;EAAE,OAAO;EAAM,MAAM;CAAQ;AACtC;AAcA,SAAgB,EAAS,GAAc,GAAgB,GAAkC;CACvF,IAAM,IAAO,OAAO,UAAU,CAAI,KAAK,KAAQ,KAAK,KAAQ,KAAK,IAAO,IAClE,IAAoB,CAAC;CAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAS,KAAK,GAAM;EACtC,IAAM,IAAQ,EAAW,KAAK,MAAM,IAAI,EAAE,GAAG,IAAI,EAAE;EACnD,EAAI,KAAK;GAAE;GAAO,OAAO,EAAkB,GAAO,GAAQ,CAAM;EAAE,CAAC;CACrE;CACA,OAAO;AACT;AAOA,IAAM,IAAiB;AAMvB,SAAgB,EAAe,GAAwB;CACrD,IAAM,IAAM,EAAS,CAAM,CAAC,CAAC,MAAM,GAAG,CAAC;CACvC,OAAO,EAAI,UAAU,IAAI,GAAG,EAAI,MAAM,GAAG,CAAC,IAAI,IAAiB,EAAI,MAAM,CAAC,MAAM;AAClF;AAOA,SAAgB,EAAU,GAAW,IAAgB,IAAe;CAGlE,OAFI,IAAI,IAAU,IACd,MAAM,IAAU,IAAgB,IAAI,IACjC,KAAK,IAAI,IAAI,GAAG,CAAC;AAC1B;AAOA,SAAgB,EAAW,GAAiC,GAA4B;CACtF,IAAM,IAAQ,EAAU,CAAI;CAG5B,OAFK,IAEE,EAAe,EADT,MAAW,QAAQ,EAAM,EAAM,IAAI,CAAC,CAAC,OAAO,EAAM,IAChC,IAAI,EAAK,EAAM,MAAM,CAAC,IAFlC;AAGrB;AAOA,SAAgB,EACd,GACA,GACA,IAAqB,MACN;CACf,IAAM,IAAS,EAAS,CAAI;CAC5B,IAAI,EAAO,WAAW,GAAG,OAAO;CAChC,IAAM,IAAO,OAAO,EAAO,MAAM,GAAG,CAAC,CAAC,GAChC,IAAS,OAAO,EAAO,MAAM,CAAC,CAAC;CAIrC,OAHI,IAAS,KAAW,OACpB,MAAW,QACN,KAAQ,KAAK,KAAQ,KAAK,EAAW,EAAM,GAAM,CAAQ,GAAG,CAAM,IAAI,OACxE,KAAQ,KAAK,EAAW,GAAM,CAAM,IAAI;AACjD"}
|
|
1
|
+
{"version":3,"file":"clock.js","names":["to12h","meridiem","hour24","to24h","base","hour12","hourWithMeridiem","withMeridiem","parts","parseTime","time","formatTime","snapMinute","size","step","minute","angleToIndex","turn","dx","dy","segments","distanceFraction","radius","DIAL_INNER_THRESHOLD","DIAL_DEAD_ZONE","dialIndexToHour24","ring","index","hour24ToDial","hour","timeList","safe","out","m","value","formatTimeDisplay","locale","format","TIME_SEPARATOR","formatTimeMask","all","digitsOf","digits","timeCaret","n","skipSeparator","timeToMask","pad2","parseTimeMask","text"],"sources":["../../src/utils/clock.ts"],"sourcesContent":["// @ssr @core\n/**\n * Clock- and input-specific time arithmetic stays outside the smaller time module imported by\n * calendar views.\n */\nimport { digitsOf, pad2 } from './text'\nimport { formatTime, parseTime, formatTimeDisplay } from './time'\nimport type { HourFormat, Meridiem } from './time'\n\n/**\n * Turns an hour of the 24-hour clock into the hour a 12-hour clock face shows, together\n * with which half of the day it belongs to: midnight is 12 AM, noon is 12 PM, and eleven\n * at night is 11 PM.\n */\nexport function to12h(hour24: number): { hour: number; meridiem: Meridiem } {\n const meridiem: Meridiem = hour24 >= 12 ? 'PM' : 'AM'\n const hour = hour24 % 12 === 0 ? 12 : hour24 % 12\n return { hour, meridiem }\n}\n\n/**\n * The way back: an hour read off a 12-hour clock face, plus the half of the day it is in,\n * gives the hour on the 24-hour clock: 12 in the morning is 0, 12 in the afternoon is 12.\n */\nexport function to24h(hour12: number, meridiem: Meridiem): number {\n const base = hour12 % 12 // Twelve is the zero of the cycle, not its top.\n return meridiem === 'PM' ? base + 12 : base\n}\n\n/**\n * The same hour moved into the other half of the day, or left where it is: 9 with PM gives\n * 21, and 21 with PM stays 21. It is what an AM/PM control does to the hour it qualifies.\n */\nexport function hourWithMeridiem(hour24: number, meridiem: Meridiem): number {\n return to24h(to12h(hour24).hour, meridiem)\n}\n\n/**\n * A canonical time moved into a half of the day, its minutes untouched, or `null` when it is\n * not a time at all: `'09:30'` with PM gives `'21:30'`.\n */\nexport function withMeridiem(time: string | null | undefined, meridiem: Meridiem): string | null {\n const parts = parseTime(time)\n return parts ? formatTime(hourWithMeridiem(parts.hour, meridiem), parts.minute) : null\n}\n\n/** Snaps a minute to the nearest allowed step and wraps it back inside the hour. */\nexport function snapMinute(minute: number, step: number): number {\n const size = Math.round(step)\n const snapped = size <= 1 ? Math.round(minute) : Math.round(minute / size) * size\n return ((snapped % 60) + 60) % 60\n}\n\n/**\n * Which mark a pointer offset from the dial's centre is aiming at. Marks are numbered clockwise\n * from twelve o'clock and the nearest wins.\n */\nexport function angleToIndex(dx: number, dy: number, segments: number): number {\n const angle = Math.atan2(dx, -dy)\n const turn = (angle / (2 * Math.PI) + 1) % 1\n return Math.round(turn * segments) % segments\n}\n\n/** How far from the centre a finger landed, as a fraction: nothing at the centre, one at the edge. */\nexport function distanceFraction(dx: number, dy: number, radius: number): number {\n return radius > 0 ? Math.hypot(dx, dy) / radius : 0\n}\n\n/**\n * The number is DERIVED from the dial tokens. A 256px dial with 48px numerals puts the rings'\n * centres at 104px and 56px from the middle, whose midpoint is 0.625 of the radius.\n */\nexport const DIAL_INNER_THRESHOLD = 0.625\n\n/**\n * Derived from the same tokens as the threshold above: the inner ring's numerals start 32px\n * from the middle (56px less half a 48px numeral), 0.25 of the radius, so the dead zone stops\n * short of them. Grow it past 0.25 and the inner small hours lose their inner half to it.\n */\nexport const DIAL_DEAD_ZONE = 0.2\n\n/**\n * Which hour a mark stands for on the two-ring dial: outer carries 12 then 1-11, inner\n * carries 00 then 13-23. Index 0 of each is the mark at twelve o'clock.\n */\nexport function dialIndexToHour24(index: number, ring: 'outer' | 'inner'): number {\n if (ring === 'outer') return index === 0 ? 12 : index\n return index === 0 ? 0 : index + 12\n}\n\n/** The way back, which tells the hand where to point. */\nexport function hour24ToDial(hour: number): { index: number; ring: 'outer' | 'inner' } {\n if (hour === 0) return { index: 0, ring: 'inner' }\n if (hour === 12) return { index: 0, ring: 'outer' }\n if (hour > 12) return { index: hour - 12, ring: 'inner' }\n return { index: hour, ring: 'outer' }\n}\n\nexport interface TimeOption {\n /** The canonical time, which the component's value will be set to. */\n value: string\n /** The same time written out for the reader: \"07:30\", or \"7:30 AM\". */\n label: string\n}\n\n/**\n * Every time of the day at a given interval, midnight to the last one before the next. A\n * nonsensical step (zero, a fraction, more than an hour) falls back to hourly, so the list\n * stays FINITE even when the component's warning about it was ignored.\n */\nexport function timeList(step: number, locale: string, format: HourFormat): TimeOption[] {\n const safe = Number.isInteger(step) && step >= 1 && step <= 60 ? step : 60\n const out: TimeOption[] = []\n for (let m = 0; m < 24 * 60; m += safe) {\n const value = formatTime(Math.floor(m / 60), m % 60)\n out.push({ value, label: formatTimeDisplay(value, locale, format) })\n }\n return out\n}\n\n/*\n * Unlike a date's separator this one is UNIVERSAL: every language writes a time with a colon,\n * and only the 12/24-hour cycle varies. It therefore stays out of the dictionary, where the\n * empty field's `hh:mm` placeholder does belong; that one is made of the initials of words.\n */\nconst TIME_SEPARATOR = ':'\n\n/**\n * Lays a run of typed digits out as a time. The colon appears AS SOON AS the hour is\n * complete: typing \"09\" already gives \"09:\", exactly as a date's separators do.\n */\nexport function formatTimeMask(digits: string): string {\n const all = digitsOf(digits).slice(0, 4)\n return all.length >= 2 ? `${all.slice(0, 2)}${TIME_SEPARATOR}${all.slice(2)}` : all\n}\n\n/**\n * Where the caret belongs to sit just after `n` digits. On a DELETION it stays in front of it,\n * or the next Backspace steps over the colon instead of erasing a digit and the key appears to\n * do nothing.\n */\nexport function timeCaret(n: number, skipSeparator = false): number {\n if (n < 2) return n\n if (n === 2) return skipSeparator ? 3 : 2\n return Math.min(n + 1, 5)\n}\n\n/**\n * A canonical time written into the field in whichever form is SHOWN. On a 12-hour clock the\n * hour comes back into 1-12: the meridiem belongs to the toggle beside the field, never to\n * the text.\n */\nexport function timeToMask(time: string | null | undefined, format: HourFormat): string {\n const parts = parseTime(time)\n if (!parts) return ''\n const hour = format === '12h' ? to12h(parts.hour).hour : parts.hour\n return formatTimeMask(pad2(hour) + pad2(parts.minute))\n}\n\n/**\n * What was typed read back into a canonical time, or `null` when it is incomplete, too long\n * or not a real time. On a 12-hour clock this is the ONE place the typed digits and the\n * meridiem toggle meet.\n */\nexport function parseTimeMask(\n text: string,\n format: HourFormat,\n meridiem: Meridiem = 'AM',\n): string | null {\n const digits = digitsOf(text)\n if (digits.length !== 4) return null\n const hour = Number(digits.slice(0, 2))\n const minute = Number(digits.slice(2))\n if (minute > 59) return null\n if (format === '12h')\n return hour >= 1 && hour <= 12 ? formatTime(to24h(hour, meridiem), minute) : null\n return hour <= 23 ? formatTime(hour, minute) : null\n}\n"],"mappings":"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"}
|
package/dist/utils/css.js
CHANGED
|
@@ -5,7 +5,7 @@ function e(e) {
|
|
|
5
5
|
return Number.isFinite(t) && t >= 0 ? `${t}px` : void 0;
|
|
6
6
|
}
|
|
7
7
|
function t(e) {
|
|
8
|
-
if (
|
|
8
|
+
if (e !== void 0 && e !== "") return typeof e == "string" ? e : Number.isFinite(e) && e >= 0 ? `${e}px` : void 0;
|
|
9
9
|
}
|
|
10
10
|
function n(e) {
|
|
11
11
|
return e === void 0 ? void 0 : { "--custom-color": e };
|
package/dist/utils/css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","names":[],"sources":["../../src/utils/css.ts"],"sourcesContent":["// @core\n/**\n * Accept complete numeric strings; parseFloat would silently reinterpret 12rem as 12px. Reject\n * blanks before Number converts them to zero.\n */\nexport function px(v: number | string | undefined): string | undefined {\n if (v === undefined) return undefined\n const n = typeof v === 'number' ? v : v.trim() === '' ? Number.NaN : Number(v)\n return Number.isFinite(n) && n >= 0 ? `${n}px` : undefined\n}\n\n// @core\n/**\n * A dimension in any unit: a bare number is read as pixels, a string passes through untouched:\n * `50%`, `20vw`, `max-content`. Unlike `px` above, the string is deliberately not examined: CSS\n * judges it, and one it cannot parse falls back to whatever the component declares for itself.\n */\nexport function cssSize(v: number | string | undefined): string | undefined {\n if (v === undefined || v === '') return undefined\n if (typeof v === 'string') return v\n return Number.isFinite(v) && v >= 0 ? `${v}px` : undefined\n}\n\n// @core\n/**\n * The inline style carrying a consumer's own colour to a component's sheet, which derives\n * every shade from `--custom-color`: VChip, VAvatar and VBadge.\n *\n * `undefined` when no colour was given, so a style array holding it binds nothing and the\n * tone the sheet already paints stays in force.\n */\nexport function customColorStyle(\n color: string | undefined,\n): { '--custom-color': string } | undefined {\n return color === undefined ? undefined : { '--custom-color': color }\n}\n"],"mappings":";AAKA,
|
|
1
|
+
{"version":3,"file":"css.js","names":["px","v","n","cssSize","customColorStyle","color"],"sources":["../../src/utils/css.ts"],"sourcesContent":["// @core\n/**\n * Accept complete numeric strings; parseFloat would silently reinterpret 12rem as 12px. Reject\n * blanks before Number converts them to zero.\n */\nexport function px(v: number | string | undefined): string | undefined {\n if (v === undefined) return undefined\n const n = typeof v === 'number' ? v : v.trim() === '' ? Number.NaN : Number(v)\n return Number.isFinite(n) && n >= 0 ? `${n}px` : undefined\n}\n\n// @core\n/**\n * A dimension in any unit: a bare number is read as pixels, a string passes through untouched:\n * `50%`, `20vw`, `max-content`. Unlike `px` above, the string is deliberately not examined: CSS\n * judges it, and one it cannot parse falls back to whatever the component declares for itself.\n */\nexport function cssSize(v: number | string | undefined): string | undefined {\n if (v === undefined || v === '') return undefined\n if (typeof v === 'string') return v\n return Number.isFinite(v) && v >= 0 ? `${v}px` : undefined\n}\n\n// @core\n/**\n * The inline style carrying a consumer's own colour to a component's sheet, which derives\n * every shade from `--custom-color`: VChip, VAvatar and VBadge.\n *\n * `undefined` when no colour was given, so a style array holding it binds nothing and the\n * tone the sheet already paints stays in force.\n */\nexport function customColorStyle(\n color: string | undefined,\n): { '--custom-color': string } | undefined {\n return color === undefined ? undefined : { '--custom-color': color }\n}\n"],"mappings":";AAKA,SAAgBA,EAAG,GAAoD;CACrE,IAAIC,MAAM,KAAA,GAAW;CACrB,IAAMC,IAAI,OAAOD,KAAM,WAAWA,IAAIA,EAAE,KAAK,MAAM,KAAK,MAAa,OAAOA,CAAC;CAC7E,OAAO,OAAO,SAASC,CAAC,KAAKA,KAAK,IAAI,GAAGA,EAAE,MAAM,KAAA;AACnD;AAQA,SAAgBC,EAAQ,GAAoD;CAC1E,IAAIF,MAAM,KAAA,KAAaA,MAAM,IAE7B,OADI,OAAOA,KAAM,WAAiBA,IAC3B,OAAO,SAASA,CAAC,KAAKA,KAAK,IAAI,GAAGA,EAAE,MAAM,KAAA;AACnD;AAUA,SAAgBG,EACd,GAC0C;CAC1C,OAAOC,MAAU,KAAA,IAAY,KAAA,IAAY,EAAE,kBAAkBA,EAAM;AACrE"}
|
package/dist/utils/date.js
CHANGED
|
@@ -85,13 +85,14 @@ function T(e, t, n) {
|
|
|
85
85
|
let r = a(e);
|
|
86
86
|
return r ? w(t, n).format(r) : "";
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
var E = /[\u2009\u200A]/g;
|
|
89
|
+
function D(e, t, n, r) {
|
|
89
90
|
let i = a(e), o = a(t);
|
|
90
91
|
if (!i || !o) return "";
|
|
91
92
|
let s = w(n, r), c = d(e, t);
|
|
92
|
-
return c === 0 ? s.format(i) : c < 0 ? s.formatRange(i, o) : s.formatRange(o, i);
|
|
93
|
+
return c === 0 ? s.format(i) : (c < 0 ? s.formatRange(i, o) : s.formatRange(o, i)).replace(E, " ");
|
|
93
94
|
}
|
|
94
95
|
//#endregion
|
|
95
|
-
export { c as addDays, l as addMonths, g as buildMonthGrid, p as clampISO, d as compareISO, w as dateFormatter, u as daysInMonth, v as firstDayOfWeekFor, T as formatDateDisplay,
|
|
96
|
+
export { c as addDays, l as addMonths, g as buildMonthGrid, p as clampISO, d as compareISO, w as dateFormatter, u as daysInMonth, v as firstDayOfWeekFor, T as formatDateDisplay, D as formatDisplayRange, o as formatISO, h as isDateAllowed, f as isSameISO, i as isValidISO, m as isWithin, s as isoOf, a as parseISO, S as weekdayNames };
|
|
96
97
|
|
|
97
98
|
//# sourceMappingURL=date.js.map
|
package/dist/utils/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","names":[],"sources":["../../src/utils/date.ts"],"sourcesContent":["// @ssr @core\n/** Pure date arithmetic shared by date inputs, pickers and calendars. */\n\nimport { memo } from './memo'\nimport { pad2 } from './text'\n\n/**\n * Not `new Date(y, m, d)` itself, which reads a year from 0 to 99 as 1900 to 1999: `0050-01-01`\n * would come back as 1950, and a `min` in the first century would open the years view nineteen\n * centuries late. `setFullYear` takes the year as it is.\n */\nfunction localDate(year: number, month0: number, day: number): Date {\n const date = new Date(year, month0, day)\n if (year >= 0 && year < 100) date.setFullYear(year, month0, day)\n return date\n}\n\nconst ISO_RE = /^\\d{4}-\\d{2}-\\d{2}$/\n\n/** Tells whether a value is a real `YYYY-MM-DD` date. */\nexport function isValidISO(iso: unknown): iso is string {\n return typeof iso === 'string' && parseISO(iso) !== null\n}\n\n/**\n * Parse ISO dates at local midnight, returning null for invalid input. Round-trip the result to\n * reject impossible days that Date silently rolls into the next month.\n */\nexport function parseISO(iso: string | null | undefined): Date | null {\n if (typeof iso !== 'string' || !ISO_RE.test(iso)) return null\n const parts = iso.split('-')\n const date = localDate(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]))\n return Number.isNaN(date.getTime()) || formatISO(date) !== iso ? null : date\n}\n\n/**\n * Writes a `Date` as an ISO string, reading its LOCAL components. This manual\n * concatenation is what `toISOString()` cannot do, since that one formats in UTC.\n */\nexport function formatISO(date: Date): string {\n const year = String(date.getFullYear()).padStart(4, '0')\n return `${year}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`\n}\n\n/**\n * Builds an ISO string from separate values. The month is 0-indexed, as everywhere\n * in the language: 0 is January.\n */\nexport function isoOf(year: number, month0: number, day: number): string {\n return formatISO(localDate(year, month0, day))\n}\n\n/**\n * Moves a date by a number of days, forwards or backwards. Crossing into another\n * month or year is handled by `Date` itself.\n */\nexport function addDays(iso: string, n: number): string {\n const d = parseISO(iso)\n if (!d) return iso\n d.setDate(d.getDate() + n)\n return formatISO(d)\n}\n\n/** Moves a date by a number of months, keeping the day of the month where possible. */\nexport function addMonths(iso: string, n: number): string {\n const d = parseISO(iso)\n if (!d) return iso\n const day = d.getDate()\n d.setDate(1)\n d.setMonth(d.getMonth() + n)\n d.setDate(Math.min(day, daysInMonth(d.getFullYear(), d.getMonth())))\n return formatISO(d)\n}\n\n/**\n * How many days the given month holds, leap years included. Day 0 of the following month is the\n * last day of this one, which makes the leap year rule the language's problem rather than ours.\n */\nexport function daysInMonth(year: number, month0: number): number {\n return localDate(year, month0 + 1, 0).getDate()\n}\n\n/** Compares two dates chronologically, returning the usual -1, 0 or 1. */\nexport function compareISO(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n\n/**\n * Whether two dates are the same day, with a null on either side counting as no\n * date at all rather than as a match.\n */\nexport const isSameISO = (a: string | null, b: string | null) => !!a && a === b\n\n/**\n * Brings a date back inside the allowed interval, returning the bound it exceeded.\n * Both bounds are optional, and an absent one means unbounded on that side.\n */\nexport function clampISO(iso: string, min?: string, max?: string): string {\n if (min && compareISO(iso, min) < 0) return min\n if (max && compareISO(iso, max) > 0) return max\n return iso\n}\n\n/** Whether a date falls inside the allowed interval, each bound being optional. */\nexport function isWithin(iso: string, min?: string, max?: string): boolean {\n if (min && compareISO(iso, min) < 0) return false\n if (max && compareISO(iso, max) > 0) return false\n return true\n}\n\n/** Whether a date may be chosen: inside the bounds, and not one the matcher excludes. */\nexport function isDateAllowed(\n iso: string,\n min: string | undefined,\n max: string | undefined,\n excluded: (iso: string) => boolean,\n): boolean {\n return isWithin(iso, min, max) && !excluded(iso)\n}\n\n/** One square of a month grid. */\nexport interface MonthCell {\n /** The day it stands for, as an ISO `YYYY-MM-DD` string. */\n iso: string\n /** The day of the month, carried so a caller does not parse back what was just formatted. */\n day: number\n /**\n * Which side of the displayed month this day belongs to when it is not part of it,\n * and `null` when it is.\n */\n adjacent: 'prev' | 'next' | null\n}\n\n/**\n * Builds the grid of a month: 42 cells, six rows of seven, filled out at both ends with the\n * days of the neighbouring months. The count is fixed on purpose, so that the calendar keeps\n * the same height from one month to the next instead of jumping by a row.\n */\nexport function buildMonthGrid(year: number, month0: number, firstDayOfWeek: number): MonthCell[] {\n const first = localDate(year, month0, 1)\n // How many cells the 1st of the month sits after the start of its row, which is\n // exactly how many days of the previous month the grid has to open with.\n const offset = (first.getDay() - firstDayOfWeek + 7) % 7\n const cells: MonthCell[] = []\n for (let i = 0; i < 42; i++) {\n // Built from the 1st rather than stepped from a start date, so the month and year\n // rolling over at either end is `Date`'s arithmetic and not ours.\n const d = localDate(year, month0, 1 - offset + i)\n const adjacent =\n d.getMonth() === month0 && d.getFullYear() === year ? null : d < first ? 'prev' : 'next'\n cells.push({ iso: formatISO(d), day: d.getDate(), adjacent })\n }\n return cells\n}\n\nconst firstDayCache = new Map<string, number>()\n\n// @fallback @ssr\n/**\n * The day the week starts on in a given locale, from 0 for Sunday to 6 for Saturday : Sunday in\n * the United States, Monday in most of Europe, Saturday in much of the Middle East. That part\n * of `Intl` is not everywhere (some Node builds lack it), so the answer falls back to Monday\n * when it is missing.\n */\nexport function firstDayOfWeekFor(locale: string): number {\n return memo(firstDayCache, locale, () => resolveFirstDayOfWeek(locale))\n}\n\nfunction resolveFirstDayOfWeek(locale: string): number {\n try {\n // Implementations disagree on the shape: Chrome and Safari expose `weekInfo` as\n // a getter, others a `getWeekInfo()` method. Both are tried.\n const loc = new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: { firstDay: number }\n getWeekInfo?: () => { firstDay: number }\n }\n const info = loc.getWeekInfo?.() ?? loc.weekInfo\n if (info?.firstDay) return info.firstDay % 7\n } catch {\n /* An invalid locale throws a RangeError: fall through to the fallback */\n }\n return 1\n}\n\n// The reference instants the names are formatted from. Any Sunday will do for the\n// weekdays, and any year for the months; combined with `timeZone: 'UTC'` at every\n// call site, they pin the output whatever zone the machine is in.\nconst REF_SUNDAY = Date.UTC(2021, 7, 1)\nconst MS_DAY = 86_400_000\n\n/**\n * The names of the seven days, starting from `firstDayOfWeek` so the list can be\n * dropped straight into a calendar header.\n */\nexport function weekdayNames(\n locale: string,\n firstDayOfWeek: number,\n weekday: 'short' | 'long' = 'short',\n): string[] {\n const fmt = dateFormatter(locale, { weekday, timeZone: 'UTC' })\n return Array.from({ length: 7 }, (_, i) =>\n fmt.format(REF_SUNDAY + ((firstDayOfWeek + i) % 7) * MS_DAY),\n )\n}\n\n/**\n * One formatter kept per locale and set of options, for the lifetime of the module: building an\n * `Intl` formatter costs far more than using one.\n */\nconst formatters = new Map<string, Intl.DateTimeFormat>()\n\nexport function dateFormatter(\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n return memo(\n formatters,\n `${locale}|${JSON.stringify(options)}`,\n () => new Intl.DateTimeFormat(locale, options),\n )\n}\n\n/**\n * A date written out for the reader, in the conventions of their locale: this is\n * what VDateInput shows in its field. An unparsable date yields an empty string\n * rather than a broken one.\n */\nexport function formatDateDisplay(\n iso: string,\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): string {\n const d = parseISO(iso)\n return d ? dateFormatter(locale, options).format(d) : ''\n}\n\n/** A period written out for the reader. */\nexport function formatDisplayRange(\n start: string,\n end: string,\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): string {\n const a = parseISO(start)\n const b = parseISO(end)\n if (!a || !b) return ''\n const fmt = dateFormatter(locale, options)\n const order = compareISO(start, end)\n if (order === 0) return fmt.format(a)\n return order < 0 ? fmt.formatRange(a, b) : fmt.formatRange(b, a)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date.js","names":["localDate","date","year","month0","day","ISO_RE","isValidISO","iso","parseISO","parts","formatISO","pad2","isoOf","addDays","d","n","addMonths","daysInMonth","compareISO","a","b","isSameISO","clampISO","min","max","isWithin","isDateAllowed","excluded","buildMonthGrid","first","offset","firstDayOfWeek","cells","i","adjacent","firstDayCache","firstDayOfWeekFor","memo","locale","resolveFirstDayOfWeek","loc","info","REF_SUNDAY","MS_DAY","weekdayNames","fmt","dateFormatter","formatters","options","formatDateDisplay","RANGE_SPACES","formatDisplayRange","start","end","order"],"sources":["../../src/utils/date.ts"],"sourcesContent":["// @ssr @core\n/** Pure date arithmetic shared by date inputs, pickers and calendars. */\n\nimport { memo } from './memo'\nimport { pad2 } from './text'\n\n/**\n * Not `new Date(y, m, d)` itself, which reads a year from 0 to 99 as 1900 to 1999: `0050-01-01`\n * would come back as 1950, and a `min` in the first century would open the years view nineteen\n * centuries late. `setFullYear` takes the year as it is.\n */\nfunction localDate(year: number, month0: number, day: number): Date {\n const date = new Date(year, month0, day)\n if (year >= 0 && year < 100) date.setFullYear(year, month0, day)\n return date\n}\n\nconst ISO_RE = /^\\d{4}-\\d{2}-\\d{2}$/\n\n/** Tells whether a value is a real `YYYY-MM-DD` date. */\nexport function isValidISO(iso: unknown): iso is string {\n return typeof iso === 'string' && parseISO(iso) !== null\n}\n\n/**\n * Parse ISO dates at local midnight, returning null for invalid input. Round-trip the result to\n * reject impossible days that Date silently rolls into the next month.\n */\nexport function parseISO(iso: string | null | undefined): Date | null {\n if (typeof iso !== 'string' || !ISO_RE.test(iso)) return null\n const parts = iso.split('-')\n const date = localDate(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]))\n return Number.isNaN(date.getTime()) || formatISO(date) !== iso ? null : date\n}\n\n/**\n * Writes a `Date` as an ISO string, reading its LOCAL components. This manual\n * concatenation is what `toISOString()` cannot do, since that one formats in UTC.\n */\nexport function formatISO(date: Date): string {\n const year = String(date.getFullYear()).padStart(4, '0')\n return `${year}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`\n}\n\n/**\n * Builds an ISO string from separate values. The month is 0-indexed, as everywhere\n * in the language: 0 is January.\n */\nexport function isoOf(year: number, month0: number, day: number): string {\n return formatISO(localDate(year, month0, day))\n}\n\n/**\n * Moves a date by a number of days, forwards or backwards. Crossing into another\n * month or year is handled by `Date` itself.\n */\nexport function addDays(iso: string, n: number): string {\n const d = parseISO(iso)\n if (!d) return iso\n d.setDate(d.getDate() + n)\n return formatISO(d)\n}\n\n/** Moves a date by a number of months, keeping the day of the month where possible. */\nexport function addMonths(iso: string, n: number): string {\n const d = parseISO(iso)\n if (!d) return iso\n const day = d.getDate()\n d.setDate(1)\n d.setMonth(d.getMonth() + n)\n d.setDate(Math.min(day, daysInMonth(d.getFullYear(), d.getMonth())))\n return formatISO(d)\n}\n\n/**\n * How many days the given month holds, leap years included. Day 0 of the following month is the\n * last day of this one, which makes the leap year rule the language's problem rather than ours.\n */\nexport function daysInMonth(year: number, month0: number): number {\n return localDate(year, month0 + 1, 0).getDate()\n}\n\n/** Compares two dates chronologically, returning the usual -1, 0 or 1. */\nexport function compareISO(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n\n/**\n * Whether two dates are the same day, with a null on either side counting as no\n * date at all rather than as a match.\n */\nexport const isSameISO = (a: string | null, b: string | null) => !!a && a === b\n\n/**\n * Brings a date back inside the allowed interval, returning the bound it exceeded.\n * Both bounds are optional, and an absent one means unbounded on that side.\n */\nexport function clampISO(iso: string, min?: string, max?: string): string {\n if (min && compareISO(iso, min) < 0) return min\n if (max && compareISO(iso, max) > 0) return max\n return iso\n}\n\n/** Whether a date falls inside the allowed interval, each bound being optional. */\nexport function isWithin(iso: string, min?: string, max?: string): boolean {\n if (min && compareISO(iso, min) < 0) return false\n if (max && compareISO(iso, max) > 0) return false\n return true\n}\n\n/** Whether a date may be chosen: inside the bounds, and not one the matcher excludes. */\nexport function isDateAllowed(\n iso: string,\n min: string | undefined,\n max: string | undefined,\n excluded: (iso: string) => boolean,\n): boolean {\n return isWithin(iso, min, max) && !excluded(iso)\n}\n\n/** One square of a month grid. */\nexport interface MonthCell {\n /** The day it stands for, as an ISO `YYYY-MM-DD` string. */\n iso: string\n /** The day of the month, carried so a caller does not parse back what was just formatted. */\n day: number\n /**\n * Which side of the displayed month this day belongs to when it is not part of it,\n * and `null` when it is.\n */\n adjacent: 'prev' | 'next' | null\n}\n\n/**\n * Builds the grid of a month: 42 cells, six rows of seven, filled out at both ends with the\n * days of the neighbouring months. The count is fixed on purpose, so that the calendar keeps\n * the same height from one month to the next instead of jumping by a row.\n */\nexport function buildMonthGrid(year: number, month0: number, firstDayOfWeek: number): MonthCell[] {\n const first = localDate(year, month0, 1)\n // How many cells the 1st of the month sits after the start of its row, which is\n // exactly how many days of the previous month the grid has to open with.\n const offset = (first.getDay() - firstDayOfWeek + 7) % 7\n const cells: MonthCell[] = []\n for (let i = 0; i < 42; i++) {\n // Built from the 1st rather than stepped from a start date, so the month and year\n // rolling over at either end is `Date`'s arithmetic and not ours.\n const d = localDate(year, month0, 1 - offset + i)\n const adjacent =\n d.getMonth() === month0 && d.getFullYear() === year ? null : d < first ? 'prev' : 'next'\n cells.push({ iso: formatISO(d), day: d.getDate(), adjacent })\n }\n return cells\n}\n\nconst firstDayCache = new Map<string, number>()\n\n// @fallback @ssr\n/**\n * The day the week starts on in a given locale, from 0 for Sunday to 6 for Saturday : Sunday in\n * the United States, Monday in most of Europe, Saturday in much of the Middle East. That part\n * of `Intl` is not everywhere (some Node builds lack it), so the answer falls back to Monday\n * when it is missing.\n */\nexport function firstDayOfWeekFor(locale: string): number {\n return memo(firstDayCache, locale, () => resolveFirstDayOfWeek(locale))\n}\n\nfunction resolveFirstDayOfWeek(locale: string): number {\n try {\n // Implementations disagree on the shape: Chrome and Safari expose `weekInfo` as\n // a getter, others a `getWeekInfo()` method. Both are tried.\n const loc = new Intl.Locale(locale) as Intl.Locale & {\n weekInfo?: { firstDay: number }\n getWeekInfo?: () => { firstDay: number }\n }\n const info = loc.getWeekInfo?.() ?? loc.weekInfo\n if (info?.firstDay) return info.firstDay % 7\n } catch {\n /* An invalid locale throws a RangeError: fall through to the fallback */\n }\n return 1\n}\n\n// The reference instants the names are formatted from. Any Sunday will do for the\n// weekdays, and any year for the months; combined with `timeZone: 'UTC'` at every\n// call site, they pin the output whatever zone the machine is in.\nconst REF_SUNDAY = Date.UTC(2021, 7, 1)\nconst MS_DAY = 86_400_000\n\n/**\n * The names of the seven days, starting from `firstDayOfWeek` so the list can be\n * dropped straight into a calendar header.\n */\nexport function weekdayNames(\n locale: string,\n firstDayOfWeek: number,\n weekday: 'short' | 'long' = 'short',\n): string[] {\n const fmt = dateFormatter(locale, { weekday, timeZone: 'UTC' })\n return Array.from({ length: 7 }, (_, i) =>\n fmt.format(REF_SUNDAY + ((firstDayOfWeek + i) % 7) * MS_DAY),\n )\n}\n\n/**\n * One formatter kept per locale and set of options, for the lifetime of the module: building an\n * `Intl` formatter costs far more than using one.\n */\nconst formatters = new Map<string, Intl.DateTimeFormat>()\n\nexport function dateFormatter(\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n return memo(\n formatters,\n `${locale}|${JSON.stringify(options)}`,\n () => new Intl.DateTimeFormat(locale, options),\n )\n}\n\n/**\n * A date written out for the reader, in the conventions of their locale: this is\n * what VDateInput shows in its field. An unparsable date yields an empty string\n * rather than a broken one.\n */\nexport function formatDateDisplay(\n iso: string,\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): string {\n const d = parseISO(iso)\n return d ? dateFormatter(locale, options).format(d) : ''\n}\n\n/**\n * ICU releases disagree on the spaces around a range's dash: Node 24 (ICU 78) writes thin spaces\n * where Chromium writes plain ones. Writing every thin or hair space as a plain one keeps a\n * prerendered range identical to the one the browser hydrates.\n */\nconst RANGE_SPACES = /[\\u2009\\u200A]/g\n\n/** A period written out for the reader. */\nexport function formatDisplayRange(\n start: string,\n end: string,\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): string {\n const a = parseISO(start)\n const b = parseISO(end)\n if (!a || !b) return ''\n const fmt = dateFormatter(locale, options)\n const order = compareISO(start, end)\n if (order === 0) return fmt.format(a)\n const text = order < 0 ? fmt.formatRange(a, b) : fmt.formatRange(b, a)\n return text.replace(RANGE_SPACES, ' ')\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direction.js","names":[],"sources":["../../src/utils/direction.ts"],"sourcesContent":["// @core\n/**\n * Read computed direction for physical keys and coordinates; dir may be inherited or supplied\n * through CSS.\n */\nexport function isRtl(el: Element | null | undefined): boolean {\n return el != null && getComputedStyle(el).direction === 'rtl'\n}\n"],"mappings":";AAKA,
|
|
1
|
+
{"version":3,"file":"direction.js","names":["isRtl","el"],"sources":["../../src/utils/direction.ts"],"sourcesContent":["// @core\n/**\n * Read computed direction for physical keys and coordinates; dir may be inherited or supplied\n * through CSS.\n */\nexport function isRtl(el: Element | null | undefined): boolean {\n return el != null && getComputedStyle(el).direction === 'rtl'\n}\n"],"mappings":";AAKA,SAAgBA,EAAM,GAAyC;CAC7D,OAAOC,KAAM,QAAQ,iBAAiBA,CAAE,CAAC,CAAC,cAAc;AAC1D"}
|
package/dist/utils/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","names":[],"sources":["../../src/utils/env.ts"],"sourcesContent":["/*\n * Declare process locally so the consumer's bundler can replace NODE_ENV without leaking Node\n * ambient types into library declarations.\n */\ndeclare const process: { env: { NODE_ENV?: string } }\n\n// @devwarn\n/**\n * Use process.env.NODE_ENV so the consumer chooses development warnings; import.meta.env would\n * be folded during library build and erase them.\n */\nexport const isDev = process.env.NODE_ENV !== 'production'\n"],"mappings":";AAWA,
|
|
1
|
+
{"version":3,"file":"env.js","names":["isDev"],"sources":["../../src/utils/env.ts"],"sourcesContent":["/*\n * Declare process locally so the consumer's bundler can replace NODE_ENV without leaking Node\n * ambient types into library declarations.\n */\ndeclare const process: { env: { NODE_ENV?: string } }\n\n// @devwarn\n/**\n * Use process.env.NODE_ENV so the consumer chooses development warnings; import.meta.env would\n * be folded during library build and erase them.\n */\nexport const isDev = process.env.NODE_ENV !== 'production'\n"],"mappings":";AAWA,IAAaA,IAAA,QAAA,IAAA,aAAiC"}
|
package/dist/utils/file.js
CHANGED
|
@@ -35,37 +35,19 @@ function u(e, t) {
|
|
|
35
35
|
}
|
|
36
36
|
function d(e, r, i) {
|
|
37
37
|
let a = [], o = [], s = r.reduce((e, t) => e + t.size, 0), c = t(i.accept);
|
|
38
|
-
for (let t of e) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (i.maxFiles !== void 0 && r.length + a.length >= i.maxFiles) {
|
|
54
|
-
o.push({
|
|
55
|
-
file: t,
|
|
56
|
-
reason: "count"
|
|
57
|
-
});
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
if (i.maxTotalSize !== void 0 && s + t.size > i.maxTotalSize) {
|
|
61
|
-
o.push({
|
|
62
|
-
file: t,
|
|
63
|
-
reason: "total-size"
|
|
64
|
-
});
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
a.push(t), s += t.size;
|
|
68
|
-
}
|
|
38
|
+
for (let t of e) n(t, c) ? i.maxSize !== void 0 && t.size > i.maxSize ? o.push({
|
|
39
|
+
file: t,
|
|
40
|
+
reason: "size"
|
|
41
|
+
}) : i.maxFiles !== void 0 && r.length + a.length >= i.maxFiles ? o.push({
|
|
42
|
+
file: t,
|
|
43
|
+
reason: "count"
|
|
44
|
+
}) : i.maxTotalSize !== void 0 && s + t.size > i.maxTotalSize ? o.push({
|
|
45
|
+
file: t,
|
|
46
|
+
reason: "total-size"
|
|
47
|
+
}) : (a.push(t), s += t.size) : o.push({
|
|
48
|
+
file: t,
|
|
49
|
+
reason: "type"
|
|
50
|
+
});
|
|
69
51
|
return {
|
|
70
52
|
accepted: a,
|
|
71
53
|
rejected: o
|
package/dist/utils/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","names":[],"sources":["../../src/utils/file.ts"],"sourcesContent":["// @core\n/**\n * Pure file screening and formatting; return accepted files and rejection reasons for\n * components to emit.\n */\nimport { memo } from './memo'\n\n/** All the matching needs of a file, so that a test does not have to counterfeit one. */\nexport interface FileCandidate {\n name: string\n type: string\n}\n\n/**\n * An `accept` list read into its tokens: split on commas, trimmed, lowercased, the empty ones\n * dropped. An empty result accepts everything.\n */\nexport function parseAccept(accept?: string): string[] {\n if (!accept) return []\n return accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean)\n}\n\n/**\n * `file.type` is the browser's GUESS and is often empty (an unknown extension, some Linux\n * setups). A list written only in MIME types then turns away a perfectly good file, which is\n * why the docs ask for extensions alongside: `image/*,.heic`, not `image/*` alone.\n */\nexport function matchesAccept(file: FileCandidate, accept?: string | readonly string[]): boolean {\n const tokens = typeof accept === 'string' || accept === undefined ? parseAccept(accept) : accept\n if (tokens.length === 0) return true\n\n const name = file.name.toLowerCase()\n const type = file.type.toLowerCase()\n\n return tokens.some((token) => {\n if (token === '*' || token === '*/*') return true\n if (token.startsWith('.')) return name.endsWith(token)\n if (token.endsWith('/*')) return type !== '' && type.startsWith(token.slice(0, -1))\n return type === token\n })\n}\n\n/** A stable key per FILE OBJECT, for the `v-for` of a file list. */\nconst fileIds = new WeakMap<File, number>()\nlet nextFileId = 0\n\nexport function fileKey(file: File): number {\n let id = fileIds.get(file)\n if (id === undefined) {\n id = nextFileId++\n fileIds.set(file, id)\n }\n return id\n}\n\n/** The units a size can be written in, smallest first; the rungs of the ladder. */\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte', 'terabyte'] as const\n\n/**\n * Building a number formatter costs one to two orders of magnitude more than using one, and a\n * running total is rewritten every time a file is added; so one is built per language and rung,\n * and kept for as long as the page lives.\n */\nconst formatters = new Map<string, Intl.NumberFormat>()\n\n/** Bytes are counted whole; above that, one decimal is what reads as a size. */\nconst digitsFor = (step: number) => (step === 0 ? 0 : 1)\n\nfunction formatterFor(locale: string, step: number): Intl.NumberFormat {\n return memo(\n formatters,\n `${locale}|${step}`,\n () =>\n new Intl.NumberFormat(locale, {\n style: 'unit',\n unit: UNITS[step]!,\n // The byte rung is spelled out, plural included: CLDR's short English name for a\n // byte is the word \"byte\" itself, which printed \"999 byte\".\n unitDisplay: step === 0 ? 'long' : 'short',\n maximumFractionDigits: digitsFor(step),\n }),\n )\n}\n\n/** A file size as a reader expects it: 1 200 000 gives \"1.2 MB\" in English, \"1,2 Mo\" in French. */\nexport function formatBytes(bytes: number, locale: string): string {\n const n = Number.isFinite(bytes) && bytes > 0 ? bytes : 0\n\n let step = n === 0 ? 0 : Math.min(UNITS.length - 1, Math.max(0, Math.floor(Math.log10(n) / 3)))\n let value = n / 1000 ** step\n\n /*\n * The carry. 999 999 bytes belongs on the kB rung and ROUNDS to 1000 at one decimal, so\n * rung and rounding have to agree or the reader is shown \"1,000 kB\" for \"1 MB\". Round\n * first, then step up: the other order lets the same discrepancy through one rung higher.\n */\n const rounded = Math.round(value * 10 ** digitsFor(step)) / 10 ** digitsFor(step)\n if (rounded >= 1000 && step < UNITS.length - 1) {\n step += 1\n value = n / 1000 ** step\n }\n\n return formatterFor(locale, step).format(value)\n}\n\n/** Why a file was turned away: its kind, its size, how many there already are, or the total. */\nexport type FileRejectReason = 'type' | 'size' | 'count' | 'total-size'\n\n/** One file that was turned away, and the reason it was. */\nexport interface FileRejection {\n /** The file itself, so a message can name it. */\n file: File\n /** What it fell foul of. */\n reason: FileRejectReason\n}\n\nexport interface FileLimits {\n accept?: string\n /** How large ONE file may be, in bytes. */\n maxSize?: number\n /** Already settled by the caller: a field that takes a single file passes one. */\n maxFiles?: number\n maxTotalSize?: number\n}\n\n/**\n * Screens an arriving batch against what is already chosen, returning the accepted files and\n * one rejection per refusal. What is already chosen counts towards both the count and the\n * running total, so a second drop obeys the same limits as the first instead of starting over.\n */\nexport function screenFiles(\n incoming: readonly File[],\n current: readonly File[],\n limits: FileLimits,\n): { accepted: File[]; rejected: FileRejection[] } {\n const accepted: File[] = []\n const rejected: FileRejection[] = []\n let total = current.reduce((sum, file) => sum + file.size, 0)\n const accept = parseAccept(limits.accept)\n\n for (const file of incoming) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: 'type' })\n continue\n }\n if (limits.maxSize !== undefined && file.size > limits.maxSize) {\n rejected.push({ file, reason: 'size' })\n continue\n }\n if (limits.maxFiles !== undefined && current.length + accepted.length >= limits.maxFiles) {\n rejected.push({ file, reason: 'count' })\n continue\n }\n if (limits.maxTotalSize !== undefined && total + file.size > limits.maxTotalSize) {\n rejected.push({ file, reason: 'total-size' })\n continue\n }\n accepted.push(file)\n total += file.size\n }\n\n return { accepted, rejected }\n}\n"],"mappings":";;AAiBA,
|
|
1
|
+
{"version":3,"file":"file.js","names":["parseAccept","accept","token","matchesAccept","tokens","name","file","type","fileIds","nextFileId","fileKey","id","UNITS","formatters","digitsFor","step","formatterFor","memo","locale","formatBytes","bytes","value","screenFiles","accepted","rejected","total","current","sum","limits","incoming"],"sources":["../../src/utils/file.ts"],"sourcesContent":["// @core\n/**\n * Pure file screening and formatting; return accepted files and rejection reasons for\n * components to emit.\n */\nimport { memo } from './memo'\n\n/** All the matching needs of a file, so that a test does not have to counterfeit one. */\nexport interface FileCandidate {\n name: string\n type: string\n}\n\n/**\n * An `accept` list read into its tokens: split on commas, trimmed, lowercased, the empty ones\n * dropped. An empty result accepts everything.\n */\nexport function parseAccept(accept?: string): string[] {\n if (!accept) return []\n return accept\n .split(',')\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean)\n}\n\n/**\n * `file.type` is the browser's GUESS and is often empty (an unknown extension, some Linux\n * setups). A list written only in MIME types then turns away a perfectly good file, which is\n * why the docs ask for extensions alongside: `image/*,.heic`, not `image/*` alone.\n */\nexport function matchesAccept(file: FileCandidate, accept?: string | readonly string[]): boolean {\n const tokens = typeof accept === 'string' || accept === undefined ? parseAccept(accept) : accept\n if (tokens.length === 0) return true\n\n const name = file.name.toLowerCase()\n const type = file.type.toLowerCase()\n\n return tokens.some((token) => {\n if (token === '*' || token === '*/*') return true\n if (token.startsWith('.')) return name.endsWith(token)\n if (token.endsWith('/*')) return type !== '' && type.startsWith(token.slice(0, -1))\n return type === token\n })\n}\n\n/** A stable key per FILE OBJECT, for the `v-for` of a file list. */\nconst fileIds = new WeakMap<File, number>()\nlet nextFileId = 0\n\nexport function fileKey(file: File): number {\n let id = fileIds.get(file)\n if (id === undefined) {\n id = nextFileId++\n fileIds.set(file, id)\n }\n return id\n}\n\n/** The units a size can be written in, smallest first; the rungs of the ladder. */\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte', 'terabyte'] as const\n\n/**\n * Building a number formatter costs one to two orders of magnitude more than using one, and a\n * running total is rewritten every time a file is added; so one is built per language and rung,\n * and kept for as long as the page lives.\n */\nconst formatters = new Map<string, Intl.NumberFormat>()\n\n/** Bytes are counted whole; above that, one decimal is what reads as a size. */\nconst digitsFor = (step: number) => (step === 0 ? 0 : 1)\n\nfunction formatterFor(locale: string, step: number): Intl.NumberFormat {\n return memo(\n formatters,\n `${locale}|${step}`,\n () =>\n new Intl.NumberFormat(locale, {\n style: 'unit',\n unit: UNITS[step]!,\n // The byte rung is spelled out, plural included: CLDR's short English name for a\n // byte is the word \"byte\" itself, which printed \"999 byte\".\n unitDisplay: step === 0 ? 'long' : 'short',\n maximumFractionDigits: digitsFor(step),\n }),\n )\n}\n\n/** A file size as a reader expects it: 1 200 000 gives \"1.2 MB\" in English, \"1,2 Mo\" in French. */\nexport function formatBytes(bytes: number, locale: string): string {\n const n = Number.isFinite(bytes) && bytes > 0 ? bytes : 0\n\n let step = n === 0 ? 0 : Math.min(UNITS.length - 1, Math.max(0, Math.floor(Math.log10(n) / 3)))\n let value = n / 1000 ** step\n\n /*\n * The carry. 999 999 bytes belongs on the kB rung and ROUNDS to 1000 at one decimal, so\n * rung and rounding have to agree or the reader is shown \"1,000 kB\" for \"1 MB\". Round\n * first, then step up: the other order lets the same discrepancy through one rung higher.\n */\n const rounded = Math.round(value * 10 ** digitsFor(step)) / 10 ** digitsFor(step)\n if (rounded >= 1000 && step < UNITS.length - 1) {\n step += 1\n value = n / 1000 ** step\n }\n\n return formatterFor(locale, step).format(value)\n}\n\n/** Why a file was turned away: its kind, its size, how many there already are, or the total. */\nexport type FileRejectReason = 'type' | 'size' | 'count' | 'total-size'\n\n/** One file that was turned away, and the reason it was. */\nexport interface FileRejection {\n /** The file itself, so a message can name it. */\n file: File\n /** What it fell foul of. */\n reason: FileRejectReason\n}\n\nexport interface FileLimits {\n accept?: string\n /** How large ONE file may be, in bytes. */\n maxSize?: number\n /** Already settled by the caller: a field that takes a single file passes one. */\n maxFiles?: number\n maxTotalSize?: number\n}\n\n/**\n * Screens an arriving batch against what is already chosen, returning the accepted files and\n * one rejection per refusal. What is already chosen counts towards both the count and the\n * running total, so a second drop obeys the same limits as the first instead of starting over.\n */\nexport function screenFiles(\n incoming: readonly File[],\n current: readonly File[],\n limits: FileLimits,\n): { accepted: File[]; rejected: FileRejection[] } {\n const accepted: File[] = []\n const rejected: FileRejection[] = []\n let total = current.reduce((sum, file) => sum + file.size, 0)\n const accept = parseAccept(limits.accept)\n\n for (const file of incoming) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: 'type' })\n continue\n }\n if (limits.maxSize !== undefined && file.size > limits.maxSize) {\n rejected.push({ file, reason: 'size' })\n continue\n }\n if (limits.maxFiles !== undefined && current.length + accepted.length >= limits.maxFiles) {\n rejected.push({ file, reason: 'count' })\n continue\n }\n if (limits.maxTotalSize !== undefined && total + file.size > limits.maxTotalSize) {\n rejected.push({ file, reason: 'total-size' })\n continue\n }\n accepted.push(file)\n total += file.size\n }\n\n return { accepted, rejected }\n}\n"],"mappings":"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"}
|
package/dist/utils/focus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.js","names":[],"sources":["../../src/utils/focus.ts"],"sourcesContent":["// @a11y\n/** Use the browser's focus-visible heuristic to distinguish keyboard focus. */\nexport function isKeyboardFocus(target: EventTarget | null): boolean {\n return target instanceof Element && target.matches(':focus-visible')\n}\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"focus.js","names":["isKeyboardFocus","target"],"sources":["../../src/utils/focus.ts"],"sourcesContent":["// @a11y\n/** Use the browser's focus-visible heuristic to distinguish keyboard focus. */\nexport function isKeyboardFocus(target: EventTarget | null): boolean {\n return target instanceof Element && target.matches(':focus-visible')\n}\n"],"mappings":";AAEA,SAAgBA,EAAgB,GAAqC;CACnE,OAAOC,aAAkB,WAAWA,EAAO,QAAQ,gBAAgB;AACrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostWarns.js","names":[],"sources":["../../src/utils/hostWarns.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\n\n/**\n * Provided by a component that renders another with props it has ALREADY checked and reported\n * on: VDateInput for VDatePicker's bounds, VTimeInput for VTimePicker's step and restrictions,\n * both forwarded as they stand.\n */\nexport const hostWarnsKey: InjectionKey<true> = Symbol('vectisHostWarns')\n"],"mappings":";AAOA,
|
|
1
|
+
{"version":3,"file":"hostWarns.js","names":["hostWarnsKey"],"sources":["../../src/utils/hostWarns.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\n\n/**\n * Provided by a component that renders another with props it has ALREADY checked and reported\n * on: VDateInput for VDatePicker's bounds, VTimeInput for VTimePicker's step and restrictions,\n * both forwarded as they stand.\n */\nexport const hostWarnsKey: InjectionKey<true> = Symbol('vectisHostWarns')\n"],"mappings":";AAOA,IAAaA,IAAmC,OAAO,iBAAiB"}
|
package/dist/utils/ids.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","names":[],"sources":["../../src/utils/ids.ts"],"sourcesContent":["// @a11y\n/**\n * Omit empty ID references and return undefined for an empty list so ARIA attributes are\n * removed rather than left blank.\n */\nexport function joinIds(...ids: (string | false | null | undefined)[]): string | undefined {\n return ids.filter(Boolean).join(' ') || undefined\n}\n"],"mappings":";AAKA,
|
|
1
|
+
{"version":3,"file":"ids.js","names":["joinIds","ids"],"sources":["../../src/utils/ids.ts"],"sourcesContent":["// @a11y\n/**\n * Omit empty ID references and return undefined for an empty list so ARIA attributes are\n * removed rather than left blank.\n */\nexport function joinIds(...ids: (string | false | null | undefined)[]): string | undefined {\n return ids.filter(Boolean).join(' ') || undefined\n}\n"],"mappings":";AAKA,SAAgBA,EAAQ,GAAGC,GAAgE;CACzF,OAAOA,EAAI,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;AAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.js","names":[],"sources":["../../src/utils/matcher.ts"],"sourcesContent":["// @core\n/** Resolve matchers once in a computed value so repeated cell lookups reuse the compiled Set. */\nexport function resolveMatcher<T>(\n matcher: readonly T[] | ((value: T) => boolean) | undefined,\n): (value: T) => boolean {\n if (!matcher) return () => false\n if (typeof matcher === 'function') return matcher\n const set = new Set(matcher)\n return (value: T) => set.has(value)\n}\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"matcher.js","names":["resolveMatcher","matcher","set","value"],"sources":["../../src/utils/matcher.ts"],"sourcesContent":["// @core\n/** Resolve matchers once in a computed value so repeated cell lookups reuse the compiled Set. */\nexport function resolveMatcher<T>(\n matcher: readonly T[] | ((value: T) => boolean) | undefined,\n): (value: T) => boolean {\n if (!matcher) return () => false\n if (typeof matcher === 'function') return matcher\n const set = new Set(matcher)\n return (value: T) => set.has(value)\n}\n"],"mappings":";AAEA,SAAgBA,EACd,GACuB;CACvB,IAAI,CAACC,GAAS,aAAa;CAC3B,IAAI,OAAOA,KAAY,YAAY,OAAOA;CAC1C,IAAMC,IAAM,IAAI,IAAID,CAAO;CAC3B,QAAQ,MAAaC,EAAI,IAAIC,CAAK;AACpC"}
|
package/dist/utils/memo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memo.js","names":[],"sources":["../../src/utils/memo.ts"],"sourcesContent":["// @core\n/** undefined marks a cache miss; builders must return a defined value. */\nexport function memo<K, V>(cache: Map<K, V>, key: K, build: () => V): V {\n let value = cache.get(key)\n if (value === undefined) {\n value = build()\n cache.set(key, value)\n }\n return value\n}\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"memo.js","names":["memo","value","cache","key","build"],"sources":["../../src/utils/memo.ts"],"sourcesContent":["// @core\n/** undefined marks a cache miss; builders must return a defined value. */\nexport function memo<K, V>(cache: Map<K, V>, key: K, build: () => V): V {\n let value = cache.get(key)\n if (value === undefined) {\n value = build()\n cache.set(key, value)\n }\n return value\n}\n"],"mappings":";AAEA,SAAgBA,EAAW,GAAkB,GAAQ,GAAmB;CACtE,IAAIC,IAAQC,EAAM,IAAIC,CAAG;CAKzB,OAJIF,MAAU,KAAA,MACZ,IAAQG,EAAM,GACdF,EAAM,IAAIC,GAAKF,CAAK,IAEfA;AACT"}
|
package/dist/utils/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","names":[],"sources":["../../src/utils/number.ts"],"sourcesContent":["// @core\n/** Clamp to the lower bound when the interval is empty, as with the last index of an empty list. */\nexport function clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n))\n}\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"number.js","names":["clamp","min","max","n"],"sources":["../../src/utils/number.ts"],"sourcesContent":["// @core\n/** Clamp to the lower bound when the interval is empty, as with the last index of an empty list. */\nexport function clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n))\n}\n"],"mappings":";AAEA,SAAgBA,EAAM,GAAW,GAAa,GAAqB;CACjE,OAAO,KAAK,IAAIC,GAAK,KAAK,IAAIC,GAAKC,CAAC,CAAC;AACvC"}
|
package/dist/utils/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","names":[],"sources":["../../src/utils/text.ts"],"sourcesContent":["// @core\n/** Remove NFD combining marks for accent-insensitive matching. */\nexport function normalizeText(s: string): string {\n return s\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n}\n\n// @core\n/**\n * A memory of `normalizeText` results, filed under the object a text belongs to: a table row, a\n * combobox option, and under a field name when one object holds several texts.\n */\nexport function createNormalizedCache<K extends object>() {\n const cache = new WeakMap<K, Map<string, { raw: string; normalized: string }>>()\n return (owner: K, raw: string, field = ''): string => {\n let texts = cache.get(owner)\n if (!texts) {\n texts = new Map()\n cache.set(owner, texts)\n }\n const hit = texts.get(field)\n if (hit && hit.raw === raw) return hit.normalized\n const normalized = normalizeText(raw)\n texts.set(field, { raw, normalized })\n return normalized\n }\n}\n\n// @core\n/** A whole number written on two digits, so that 7 becomes \"07\": as dates and times are. */\nexport function pad2(n: number): string {\n return String(n).padStart(2, '0')\n}\n\n// @core\n/** Just the digits of a string, everything else dropped. */\nexport const digitsOf = (text: string): string => text.replace(/\\D/g, '')\n"],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"text.js","names":["normalizeText","s","createNormalizedCache","cache","texts","owner","hit","field","raw","normalized","pad2","n","digitsOf","text"],"sources":["../../src/utils/text.ts"],"sourcesContent":["// @core\n/** Remove NFD combining marks for accent-insensitive matching. */\nexport function normalizeText(s: string): string {\n return s\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n}\n\n// @core\n/**\n * A memory of `normalizeText` results, filed under the object a text belongs to: a table row, a\n * combobox option, and under a field name when one object holds several texts.\n */\nexport function createNormalizedCache<K extends object>() {\n const cache = new WeakMap<K, Map<string, { raw: string; normalized: string }>>()\n return (owner: K, raw: string, field = ''): string => {\n let texts = cache.get(owner)\n if (!texts) {\n texts = new Map()\n cache.set(owner, texts)\n }\n const hit = texts.get(field)\n if (hit && hit.raw === raw) return hit.normalized\n const normalized = normalizeText(raw)\n texts.set(field, { raw, normalized })\n return normalized\n }\n}\n\n// @core\n/** A whole number written on two digits, so that 7 becomes \"07\": as dates and times are. */\nexport function pad2(n: number): string {\n return String(n).padStart(2, '0')\n}\n\n// @core\n/** Just the digits of a string, everything else dropped. */\nexport const digitsOf = (text: string): string => text.replace(/\\D/g, '')\n"],"mappings":";AAEA,SAAgBA,EAAc,GAAmB;CAC/C,OAAOC,EACJ,UAAU,KAAK,CAAC,CAChB,QAAQ,oBAAoB,EAAE,CAAC,CAC/B,YAAY;AACjB;AAOA,SAAgBC,IAA0C;CACxD,IAAMC,oBAAQ,IAAI,QAA6D;CAC/E,QAAQ,GAAU,GAAa,IAAQ,OAAe;EACpD,IAAIC,IAAQD,EAAM,IAAIE,CAAK;EAC3B,AAAKD,MACH,oBAAQ,IAAI,IAAI,GAChBD,EAAM,IAAIE,GAAOD,CAAK;EAExB,IAAME,IAAMF,EAAM,IAAIG,CAAK;EAC3B,IAAID,KAAOA,EAAI,QAAQE,GAAK,OAAOF,EAAI;EACvC,IAAMG,IAAaT,EAAcQ,CAAG;EAEpC,OADAJ,EAAM,IAAIG,GAAO;GAAE;GAAK;EAAW,CAAC,GAC7BE;CACT;AACF;AAIA,SAAgBC,EAAK,GAAmB;CACtC,OAAO,OAAOC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;AAClC;AAIA,IAAaC,KAAY,MAAyBC,EAAK,QAAQ,OAAO,EAAE"}
|
package/dist/utils/time.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","names":[],"sources":["../../src/utils/time.ts"],"sourcesContent":["// @ssr @core\n/**\n * Keep this shared time module small: calendar views import it, while clock and field-specific\n * helpers belong in clock.ts.\n */\nimport { memo } from './memo'\nimport { pad2 } from './text'\n\nexport type HourFormat = '12h' | '24h'\nexport type Meridiem = 'AM' | 'PM'\n\nexport interface TimeParts {\n /** The hour on the 24-hour clock, from 0 to 23. */\n hour: number\n minute: number\n}\n\nconst TIME_RE = /^([01]\\d|2[0-3]):([0-5]\\d)$/\n\n/** Whether something is a time in the canonical form: two digits, a colon, two digits. */\nexport function isValidTime(value: unknown): value is string {\n return typeof value === 'string' && TIME_RE.test(value)\n}\n\n/** Reads a canonical time into its two numbers, or nothing at all if it is not one. */\nexport function parseTime(value: string | null | undefined): TimeParts | null {\n if (!isValidTime(value)) return null\n const [h, m] = value.split(':')\n return { hour: Number(h), minute: Number(m) }\n}\n\n/** Writes an hour and a minute back into the canonical form, both on two digits. */\nexport function formatTime(hour: number, minute: number): string {\n return `${pad2(hour)}:${pad2(minute)}`\n}\n\nconst hourCycleCache = new Map<string, HourFormat>()\n\n// @fallback\n/**\n * Whether a language counts the hours to twelve, with a morning and an afternoon, or straight\n * to twenty-four. A language tag it cannot make sense of falls back to the 24-hour clock rather\n * than failing.\n */\nexport function hourCycleFor(locale: string): HourFormat {\n return memo(hourCycleCache, locale, () => resolveHourCycle(locale))\n}\n\nfunction resolveHourCycle(locale: string): HourFormat {\n try {\n const { hourCycle } = new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions()\n return hourCycle === 'h11' || hourCycle === 'h12' ? '12h' : '24h'\n } catch {\n return '24h'\n }\n}\n\n/** One formatter per locale and clock, module-lived; the `formatterFor` idiom of `file.ts`. */\nconst displayFormatters = new Map<string, Intl.DateTimeFormat>()\n\nfunction displayFormatterFor(locale: string, format: HourFormat): Intl.DateTimeFormat {\n return memo(\n displayFormatters,\n `${locale}|${format}`,\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n // A 12-hour clock takes the language's own: Japanese counts it from 0 (h11), English\n // from 12 (h12). Imposing h12 wrote 午前12:05 where 午前0:05 is written.\n ...(format === '12h' ? { hour12: true } : { hourCycle: 'h23' as const }),\n timeZone: 'UTC',\n }),\n )\n}\n\n/** A time written out for a reader: \"19:05\", or \"7:05 PM\". */\nexport function formatTimeDisplay(time: string, locale: string, format: HourFormat): string {\n const parts = parseTime(time)\n if (!parts) return ''\n return displayFormatterFor(locale, format).format(Date.UTC(2021, 0, 1, parts.hour, parts.minute))\n}\n\n/** A time as minutes since midnight, `null` if it is not one: its position in a list. */\nexport function minutesOf(time: string | null | undefined): number | null {\n const parts = parseTime(time)\n return parts ? parts.hour * 60 + parts.minute : null\n}\n"],"mappings":";;;AAiBA,
|
|
1
|
+
{"version":3,"file":"time.js","names":["TIME_RE","isValidTime","value","parseTime","h","m","formatTime","pad2","hour","minute","hourCycleCache","hourCycleFor","memo","locale","resolveHourCycle","hourCycle","displayFormatters","displayFormatterFor","format","formatTimeDisplay","parts","time","minutesOf"],"sources":["../../src/utils/time.ts"],"sourcesContent":["// @ssr @core\n/**\n * Keep this shared time module small: calendar views import it, while clock and field-specific\n * helpers belong in clock.ts.\n */\nimport { memo } from './memo'\nimport { pad2 } from './text'\n\nexport type HourFormat = '12h' | '24h'\nexport type Meridiem = 'AM' | 'PM'\n\nexport interface TimeParts {\n /** The hour on the 24-hour clock, from 0 to 23. */\n hour: number\n minute: number\n}\n\nconst TIME_RE = /^([01]\\d|2[0-3]):([0-5]\\d)$/\n\n/** Whether something is a time in the canonical form: two digits, a colon, two digits. */\nexport function isValidTime(value: unknown): value is string {\n return typeof value === 'string' && TIME_RE.test(value)\n}\n\n/** Reads a canonical time into its two numbers, or nothing at all if it is not one. */\nexport function parseTime(value: string | null | undefined): TimeParts | null {\n if (!isValidTime(value)) return null\n const [h, m] = value.split(':')\n return { hour: Number(h), minute: Number(m) }\n}\n\n/** Writes an hour and a minute back into the canonical form, both on two digits. */\nexport function formatTime(hour: number, minute: number): string {\n return `${pad2(hour)}:${pad2(minute)}`\n}\n\nconst hourCycleCache = new Map<string, HourFormat>()\n\n// @fallback\n/**\n * Whether a language counts the hours to twelve, with a morning and an afternoon, or straight\n * to twenty-four. A language tag it cannot make sense of falls back to the 24-hour clock rather\n * than failing.\n */\nexport function hourCycleFor(locale: string): HourFormat {\n return memo(hourCycleCache, locale, () => resolveHourCycle(locale))\n}\n\nfunction resolveHourCycle(locale: string): HourFormat {\n try {\n const { hourCycle } = new Intl.DateTimeFormat(locale, { hour: 'numeric' }).resolvedOptions()\n return hourCycle === 'h11' || hourCycle === 'h12' ? '12h' : '24h'\n } catch {\n return '24h'\n }\n}\n\n/** One formatter per locale and clock, module-lived; the `formatterFor` idiom of `file.ts`. */\nconst displayFormatters = new Map<string, Intl.DateTimeFormat>()\n\nfunction displayFormatterFor(locale: string, format: HourFormat): Intl.DateTimeFormat {\n return memo(\n displayFormatters,\n `${locale}|${format}`,\n () =>\n new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: '2-digit',\n // A 12-hour clock takes the language's own: Japanese counts it from 0 (h11), English\n // from 12 (h12). Imposing h12 wrote 午前12:05 where 午前0:05 is written.\n ...(format === '12h' ? { hour12: true } : { hourCycle: 'h23' as const }),\n timeZone: 'UTC',\n }),\n )\n}\n\n/** A time written out for a reader: \"19:05\", or \"7:05 PM\". */\nexport function formatTimeDisplay(time: string, locale: string, format: HourFormat): string {\n const parts = parseTime(time)\n if (!parts) return ''\n return displayFormatterFor(locale, format).format(Date.UTC(2021, 0, 1, parts.hour, parts.minute))\n}\n\n/** A time as minutes since midnight, `null` if it is not one: its position in a list. */\nexport function minutesOf(time: string | null | undefined): number | null {\n const parts = parseTime(time)\n return parts ? parts.hour * 60 + parts.minute : null\n}\n"],"mappings":";;;AAiBA,IAAMA,IAAU;AAGhB,SAAgBC,EAAY,GAAiC;CAC3D,OAAO,OAAOC,KAAU,YAAYF,EAAQ,KAAKE,CAAK;AACxD;AAGA,SAAgBC,EAAU,GAAoD;CAC5E,IAAI,CAACF,EAAYC,CAAK,GAAG,OAAO;CAChC,IAAM,CAACE,GAAGC,KAAKH,EAAM,MAAM,GAAG;CAC9B,OAAO;EAAE,MAAM,OAAOE,CAAC;EAAG,QAAQ,OAAOC,CAAC;CAAE;AAC9C;AAGA,SAAgBC,EAAW,GAAc,GAAwB;CAC/D,OAAO,GAAGC,EAAKC,CAAI,EAAE,GAAGD,EAAKE,CAAM;AACrC;AAEA,IAAMC,oBAAiB,IAAI,IAAwB;AAQnD,SAAgBC,EAAa,GAA4B;CACvD,OAAOC,EAAKF,GAAgBG,SAAcC,EAAiBD,CAAM,CAAC;AACpE;AAEA,SAASC,EAAiB,GAA4B;CACpD,IAAI;EACF,IAAM,EAAE,iBAAc,IAAI,KAAK,eAAeD,GAAQ,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,gBAAgB;EAC3F,OAAOE,MAAc,SAASA,MAAc,QAAQ,QAAQ;CAC9D,QAAQ;EACN,OAAO;CACT;AACF;AAGA,IAAMC,oBAAoB,IAAI,IAAiC;AAE/D,SAASC,EAAoB,GAAgB,GAAyC;CACpF,OAAOL,EACLI,GACA,GAAGH,EAAO,GAAGK,WAEX,IAAI,KAAK,eAAeL,GAAQ;EAC9B,MAAM;EACN,QAAQ;EAGR,GAAIK,MAAW,QAAQ,EAAE,QAAQ,GAAK,IAAI,EAAE,WAAW,MAAe;EACtE,UAAU;CACZ,CAAC,CACL;AACF;AAGA,SAAgBC,EAAkB,GAAc,GAAgB,GAA4B;CAC1F,IAAMC,IAAQjB,EAAUkB,CAAI;CAE5B,OADKD,IACEH,EAAoBJ,GAAQK,CAAM,CAAC,CAAC,OAAO,KAAK,IAAI,MAAM,GAAG,GAAGE,EAAM,MAAMA,EAAM,MAAM,CAAC,IAD7E;AAErB;AAGA,SAAgBE,EAAU,GAAgD;CACxE,IAAMF,IAAQjB,EAAUkB,CAAI;CAC5B,OAAOD,IAAQA,EAAM,OAAO,KAAKA,EAAM,SAAS;AAClD"}
|
package/dist/utils/vnode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vnode.js","names":[],"sources":["../../src/utils/vnode.ts"],"sourcesContent":["import { Comment, Fragment, Text } from 'vue'\nimport type { VNode } from 'vue'\n\n// @ssr @core\n/**\n * A slot's VNodes reduced to the elements that will actually render: `v-for` Fragments\n * unwrapped, a false `v-if`'s Comment and the source text's whitespace dropped.\n */\nexport function flattenSlot(nodes: VNode[] | undefined): VNode[] {\n const out: VNode[] = []\n for (const node of nodes ?? []) {\n if (node.type === Fragment) out.push(...flattenSlot(node.children as VNode[]))\n else if (node.type === Comment) continue\n else if (node.type === Text && !String(node.children).trim()) continue\n else out.push(node)\n }\n return out\n}\n"],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"vnode.js","names":["flattenSlot","out","node","nodes","Fragment","Comment","Text"],"sources":["../../src/utils/vnode.ts"],"sourcesContent":["import { Comment, Fragment, Text } from 'vue'\nimport type { VNode } from 'vue'\n\n// @ssr @core\n/**\n * A slot's VNodes reduced to the elements that will actually render: `v-for` Fragments\n * unwrapped, a false `v-if`'s Comment and the source text's whitespace dropped.\n */\nexport function flattenSlot(nodes: VNode[] | undefined): VNode[] {\n const out: VNode[] = []\n for (const node of nodes ?? []) {\n if (node.type === Fragment) out.push(...flattenSlot(node.children as VNode[]))\n else if (node.type === Comment) continue\n else if (node.type === Text && !String(node.children).trim()) continue\n else out.push(node)\n }\n return out\n}\n"],"mappings":";;AAQA,SAAgBA,EAAY,GAAqC;CAC/D,IAAMC,IAAe,CAAC;CACtB,KAAK,IAAMC,KAAQC,KAAS,CAAC,GAC3B,IAAID,EAAK,SAASE,GAAU,EAAI,KAAK,GAAGJ,EAAYE,EAAK,QAAmB,CAAC;MACxE,IAAIA,EAAK,SAASG,GAAS;MAC3B,IAAIH,EAAK,SAASI,KAAQ,CAAC,OAAOJ,EAAK,QAAQ,CAAC,CAAC,KAAK,GAAG;MACzD,EAAI,KAAKA,CAAI;CAEpB,OAAOD;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vectis-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Vue 3 design system — HTML/CSS first, CSS tokens, Nuxt 3 (SSR) compatible",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"typescript"
|
|
28
28
|
],
|
|
29
29
|
"engines": {
|
|
30
|
-
"node": ">=
|
|
30
|
+
"node": ">=26"
|
|
31
31
|
},
|
|
32
32
|
"publishConfig": {
|
|
33
33
|
"access": "public"
|
|
@@ -63,27 +63,27 @@
|
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
66
|
-
"@storybook/addon-a11y": "^10.6.
|
|
67
|
-
"@storybook/addon-docs": "^10.6.
|
|
68
|
-
"@storybook/addon-vitest": "^10.6.
|
|
69
|
-
"@storybook/vue3-vite": "^10.6.
|
|
66
|
+
"@storybook/addon-a11y": "^10.6.2",
|
|
67
|
+
"@storybook/addon-docs": "^10.6.2",
|
|
68
|
+
"@storybook/addon-vitest": "^10.6.2",
|
|
69
|
+
"@storybook/vue3-vite": "^10.6.2",
|
|
70
70
|
"@testing-library/vue": "^8.1.0",
|
|
71
|
-
"@types/node": "^26.
|
|
71
|
+
"@types/node": "^26.6.5",
|
|
72
72
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
73
|
-
"@vitest/browser": "
|
|
74
|
-
"@vitest/
|
|
75
|
-
"@vitest/coverage-v8": "^4.1.10",
|
|
73
|
+
"@vitest/browser-playwright": "5.0.4",
|
|
74
|
+
"@vitest/coverage-v8": "5.0.4",
|
|
76
75
|
"@vue/test-utils": "^2.4.11",
|
|
77
76
|
"chromatic": "^18.1.0",
|
|
78
77
|
"jsdom": "^29.1.1",
|
|
79
78
|
"playwright": "^1.62.0",
|
|
80
79
|
"publint": "^0.3.23",
|
|
81
|
-
"storybook": "^10.6.
|
|
80
|
+
"storybook": "^10.6.2",
|
|
82
81
|
"tsx": "^4.23.1",
|
|
83
82
|
"typescript": "^5.9.3",
|
|
84
|
-
"vite": "
|
|
83
|
+
"vite": "npm:@voidzero-dev/vite-plus-core@1.2.0",
|
|
85
84
|
"vite-plugin-dts": "^5.0.3",
|
|
86
|
-
"
|
|
85
|
+
"vite-plus": "1.2.0",
|
|
86
|
+
"vitest": "5.0.4",
|
|
87
87
|
"vue": "^3.5.40",
|
|
88
88
|
"vue-tsc": "^3.3.7"
|
|
89
89
|
},
|
|
@@ -92,19 +92,19 @@
|
|
|
92
92
|
"tokens:check": "tsx scripts/build-tokens.ts --check",
|
|
93
93
|
"icons": "tsx scripts/build-icons.ts",
|
|
94
94
|
"prebuild": "pnpm run tokens",
|
|
95
|
-
"build": "
|
|
95
|
+
"build": "vp build",
|
|
96
96
|
"postbuild": "tsx scripts/check-css-split.ts && tsx scripts/check-dev-warnings.ts && tsx scripts/bench-size.ts",
|
|
97
97
|
"//bench": "Runtime timings, deliberately OUTSIDE the checkpoint and never gating: a benchmark on a shared runner measures the runner. The SIZE gate is the deterministic half and runs in postbuild.",
|
|
98
|
-
"bench": "
|
|
98
|
+
"bench": "vp test bench --run --project \"bench (bench)\" --reporter=verbose",
|
|
99
99
|
"bench:size": "tsx scripts/bench-size.ts",
|
|
100
100
|
"bench:size:update": "tsx scripts/bench-size.ts --update",
|
|
101
101
|
"//check:package": "Run AFTER build, never from postbuild: attw's `--pack` shells out to `npm pack`, which fires `prepack` → `build` → postbuild → attw, i.e. unbounded recursion. CI calls it as its own step. publint reads the manifest; attw resolves every entrypoint under each moduleResolution — `styles.css` is excluded because a CSS export legitimately carries no type declarations.",
|
|
102
102
|
"check:package": "publint && attw --pack . --profile esm-only --exclude-entrypoints styles.css",
|
|
103
103
|
"typecheck": "vue-tsc --noEmit -p tsconfig.json",
|
|
104
|
-
"test": "
|
|
105
|
-
"test:watch": "
|
|
106
|
-
"test:stories": "
|
|
107
|
-
"test:coverage": "
|
|
104
|
+
"test": "vp test run --project unit",
|
|
105
|
+
"test:watch": "vp test --project unit",
|
|
106
|
+
"test:stories": "vp test run --project storybook",
|
|
107
|
+
"test:coverage": "vp test run --coverage",
|
|
108
108
|
"prestorybook": "pnpm run tokens",
|
|
109
109
|
"storybook": "storybook dev -p 6006",
|
|
110
110
|
"prebuild-storybook": "pnpm run tokens",
|