vectis-ui 0.1.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/LICENSE +21 -0
- package/NOTICE +27 -0
- package/README.md +354 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/components/VAccordion/VAccordion.css +2 -0
- package/dist/components/VAccordion/VAccordion.d.ts +59 -0
- package/dist/components/VAccordion/VAccordion.js +9 -0
- package/dist/components/VAccordion/VAccordion.js.map +1 -0
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VAccordion/VAccordionItem.css +2 -0
- package/dist/components/VAccordion/VAccordionItem.d.ts +64 -0
- package/dist/components/VAccordion/VAccordionItem.js +9 -0
- package/dist/components/VAccordion/VAccordionItem.js.map +1 -0
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VAccordion/context.d.ts +18 -0
- package/dist/components/VAccordion/context.js +6 -0
- package/dist/components/VAccordion/context.js.map +1 -0
- package/dist/components/VAvatar/VAvatar.css +2 -0
- package/dist/components/VAvatar/VAvatar.d.ts +68 -0
- package/dist/components/VAvatar/VAvatar.js +9 -0
- package/dist/components/VAvatar/VAvatar.js.map +1 -0
- package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js +87 -0
- package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VAvatar/VAvatarGroup.css +2 -0
- package/dist/components/VAvatar/VAvatarGroup.d.ts +59 -0
- package/dist/components/VAvatar/VAvatarGroup.js +9 -0
- package/dist/components/VAvatar/VAvatarGroup.js.map +1 -0
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VAvatar/context.d.ts +17 -0
- package/dist/components/VAvatar/context.js +6 -0
- package/dist/components/VAvatar/context.js.map +1 -0
- package/dist/components/VBadge/VBadge.css +2 -0
- package/dist/components/VBadge/VBadge.d.ts +74 -0
- package/dist/components/VBadge/VBadge.js +9 -0
- package/dist/components/VBadge/VBadge.js.map +1 -0
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.css +2 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.d.ts +68 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.js +9 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.js.map +1 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VButton/VButton.css +2 -0
- package/dist/components/VButton/VButton.d.ts +88 -0
- package/dist/components/VButton/VButton.js +9 -0
- package/dist/components/VButton/VButton.js.map +1 -0
- package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js +86 -0
- package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VButton/VButtonGroup.css +2 -0
- package/dist/components/VButton/VButtonGroup.d.ts +32 -0
- package/dist/components/VButton/VButtonGroup.js +9 -0
- package/dist/components/VButton/VButtonGroup.js.map +1 -0
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js +17 -0
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/VCalendar.css +2 -0
- package/dist/components/VCalendar/VCalendar.d.ts +129 -0
- package/dist/components/VCalendar/VCalendar.js +9 -0
- package/dist/components/VCalendar/VCalendar.js.map +1 -0
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js +374 -0
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/VCalendarEvent.css +2 -0
- package/dist/components/VCalendar/VCalendarEvent.d.ts +71 -0
- package/dist/components/VCalendar/VCalendarEvent.js +9 -0
- package/dist/components/VCalendar/VCalendarEvent.js.map +1 -0
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js +106 -0
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/VCalendarMonth.css +2 -0
- package/dist/components/VCalendar/VCalendarMonth.d.ts +60 -0
- package/dist/components/VCalendar/VCalendarMonth.js +9 -0
- package/dist/components/VCalendar/VCalendarMonth.js.map +1 -0
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js +342 -0
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.css +2 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.d.ts +85 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.js +9 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js +621 -0
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/VCalendarYear.css +2 -0
- package/dist/components/VCalendar/VCalendarYear.d.ts +31 -0
- package/dist/components/VCalendar/VCalendarYear.js +9 -0
- package/dist/components/VCalendar/VCalendarYear.js.map +1 -0
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCalendar/color.d.ts +9 -0
- package/dist/components/VCalendar/color.js +9 -0
- package/dist/components/VCalendar/color.js.map +1 -0
- package/dist/components/VCalendar/edgeStep.d.ts +38 -0
- package/dist/components/VCalendar/edgeStep.js +28 -0
- package/dist/components/VCalendar/edgeStep.js.map +1 -0
- package/dist/components/VCalendar/keyboard.d.ts +78 -0
- package/dist/components/VCalendar/keyboard.js +86 -0
- package/dist/components/VCalendar/keyboard.js.map +1 -0
- package/dist/components/VCalendar/layout.d.ts +355 -0
- package/dist/components/VCalendar/layout.js +292 -0
- package/dist/components/VCalendar/layout.js.map +1 -0
- package/dist/components/VCalendar/types.d.ts +78 -0
- package/dist/components/VCarousel/VCarousel.css +2 -0
- package/dist/components/VCarousel/VCarousel.d.ts +241 -0
- package/dist/components/VCarousel/VCarousel.js +9 -0
- package/dist/components/VCarousel/VCarousel.js.map +1 -0
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js +262 -0
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCarousel/VCarouselItem.d.ts +41 -0
- package/dist/components/VCarousel/VCarouselItem.js +7 -0
- package/dist/components/VCarousel/VCarouselItem.js.map +1 -0
- package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js +25 -0
- package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCarousel/context.d.ts +23 -0
- package/dist/components/VCarousel/context.js +6 -0
- package/dist/components/VCarousel/context.js.map +1 -0
- package/dist/components/VCheckbox/VCheckbox.css +2 -0
- package/dist/components/VCheckbox/VCheckbox.d.ts +63 -0
- package/dist/components/VCheckbox/VCheckbox.js +9 -0
- package/dist/components/VCheckbox/VCheckbox.js.map +1 -0
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VChip/VChip.css +2 -0
- package/dist/components/VChip/VChip.d.ts +120 -0
- package/dist/components/VChip/VChip.js +9 -0
- package/dist/components/VChip/VChip.js.map +1 -0
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js +118 -0
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCombobox/VCombobox.css +2 -0
- package/dist/components/VCombobox/VCombobox.d.ts +183 -0
- package/dist/components/VCombobox/VCombobox.js +9 -0
- package/dist/components/VCombobox/VCombobox.js.map +1 -0
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +428 -0
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCombobox/VComboboxGroup.css +2 -0
- package/dist/components/VCombobox/VComboboxGroup.d.ts +26 -0
- package/dist/components/VCombobox/VComboboxGroup.js +9 -0
- package/dist/components/VCombobox/VComboboxGroup.js.map +1 -0
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCombobox/VComboboxOption.css +2 -0
- package/dist/components/VCombobox/VComboboxOption.d.ts +48 -0
- package/dist/components/VCombobox/VComboboxOption.js +9 -0
- package/dist/components/VCombobox/VComboboxOption.js.map +1 -0
- package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCombobox/VComboboxSeparator.css +2 -0
- package/dist/components/VCombobox/VComboboxSeparator.d.ts +3 -0
- package/dist/components/VCombobox/VComboboxSeparator.js +9 -0
- package/dist/components/VCombobox/VComboboxSeparator.js.map +1 -0
- package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js +16 -0
- package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCombobox/infiniteScroll.d.ts +22 -0
- package/dist/components/VCombobox/infiniteScroll.js +28 -0
- package/dist/components/VCombobox/infiniteScroll.js.map +1 -0
- package/dist/components/VDataTable/VDataTable.css +2 -0
- package/dist/components/VDataTable/VDataTable.d.ts +214 -0
- package/dist/components/VDataTable/VDataTable.js +9 -0
- package/dist/components/VDataTable/VDataTable.js.map +1 -0
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +396 -0
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VDateInput/VDateInput.css +2 -0
- package/dist/components/VDateInput/VDateInput.d.ts +152 -0
- package/dist/components/VDateInput/VDateInput.js +9 -0
- package/dist/components/VDateInput/VDateInput.js.map +1 -0
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +324 -0
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VDatePicker/VDatePicker.css +2 -0
- package/dist/components/VDatePicker/VDatePicker.d.ts +143 -0
- package/dist/components/VDatePicker/VDatePicker.js +9 -0
- package/dist/components/VDatePicker/VDatePicker.js.map +1 -0
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +454 -0
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VDatePicker/keyboard.d.ts +56 -0
- package/dist/components/VDatePicker/keyboard.js +26 -0
- package/dist/components/VDatePicker/keyboard.js.map +1 -0
- package/dist/components/VDialog/VDialog.css +2 -0
- package/dist/components/VDialog/VDialog.d.ts +96 -0
- package/dist/components/VDialog/VDialog.js +9 -0
- package/dist/components/VDialog/VDialog.js.map +1 -0
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js +134 -0
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VDialog/VDialogAlert.d.ts +67 -0
- package/dist/components/VDialog/VDialogAlert.js +7 -0
- package/dist/components/VDialog/VDialogAlert.js.map +1 -0
- package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/VDialog/VDialogAlert.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VFileInput/VFileInput.css +2 -0
- package/dist/components/VFileInput/VFileInput.d.ts +156 -0
- package/dist/components/VFileInput/VFileInput.js +9 -0
- package/dist/components/VFileInput/VFileInput.js.map +1 -0
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +244 -0
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VFileInput/truncate.d.ts +29 -0
- package/dist/components/VFileInput/truncate.js +10 -0
- package/dist/components/VFileInput/truncate.js.map +1 -0
- package/dist/components/VFilePicker/VFilePicker.css +2 -0
- package/dist/components/VFilePicker/VFilePicker.d.ts +203 -0
- package/dist/components/VFilePicker/VFilePicker.js +9 -0
- package/dist/components/VFilePicker/VFilePicker.js.map +1 -0
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js +266 -0
- package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VFilePicker/fileKind.d.ts +29 -0
- package/dist/components/VFilePicker/fileKind.js +91 -0
- package/dist/components/VFilePicker/fileKind.js.map +1 -0
- package/dist/components/VHotkeys/VHotkeys.css +2 -0
- package/dist/components/VHotkeys/VHotkeys.d.ts +100 -0
- package/dist/components/VHotkeys/VHotkeys.js +9 -0
- package/dist/components/VHotkeys/VHotkeys.js.map +1 -0
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VHotkeys/platform.d.ts +82 -0
- package/dist/components/VHotkeys/platform.js +115 -0
- package/dist/components/VHotkeys/platform.js.map +1 -0
- package/dist/components/VIcon/VIcon.css +2 -0
- package/dist/components/VIcon/VIcon.d.ts +57 -0
- package/dist/components/VIcon/VIcon.js +9 -0
- package/dist/components/VIcon/VIcon.js.map +1 -0
- package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VIcon/iconProps.d.ts +30 -0
- package/dist/components/VIcon/iconProps.js +6 -0
- package/dist/components/VIcon/iconProps.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_downward.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_downward.js +9 -0
- package/dist/components/VIcon/icons/arrow_downward.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_downward_alt.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_downward_alt.js +9 -0
- package/dist/components/VIcon/icons/arrow_downward_alt.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_drop_down.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_drop_down.js +9 -0
- package/dist/components/VIcon/icons/arrow_drop_down.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_drop_up.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_drop_up.js +9 -0
- package/dist/components/VIcon/icons/arrow_drop_up.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_left_alt.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_left_alt.js +9 -0
- package/dist/components/VIcon/icons/arrow_left_alt.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_right_alt.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_right_alt.js +9 -0
- package/dist/components/VIcon/icons/arrow_right_alt.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_upward.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_upward.js +9 -0
- package/dist/components/VIcon/icons/arrow_upward.js.map +1 -0
- package/dist/components/VIcon/icons/arrow_upward_alt.d.ts +5 -0
- package/dist/components/VIcon/icons/arrow_upward_alt.js +9 -0
- package/dist/components/VIcon/icons/arrow_upward_alt.js.map +1 -0
- package/dist/components/VIcon/icons/attach_file.d.ts +5 -0
- package/dist/components/VIcon/icons/attach_file.js +9 -0
- package/dist/components/VIcon/icons/attach_file.js.map +1 -0
- package/dist/components/VIcon/icons/audio_file.d.ts +5 -0
- package/dist/components/VIcon/icons/audio_file.js +9 -0
- package/dist/components/VIcon/icons/audio_file.js.map +1 -0
- package/dist/components/VIcon/icons/calendar_today.d.ts +5 -0
- package/dist/components/VIcon/icons/calendar_today.js +9 -0
- package/dist/components/VIcon/icons/calendar_today.js.map +1 -0
- package/dist/components/VIcon/icons/check.d.ts +5 -0
- package/dist/components/VIcon/icons/check.js +9 -0
- package/dist/components/VIcon/icons/check.js.map +1 -0
- package/dist/components/VIcon/icons/check_circle.d.ts +5 -0
- package/dist/components/VIcon/icons/check_circle.js +9 -0
- package/dist/components/VIcon/icons/check_circle.js.map +1 -0
- package/dist/components/VIcon/icons/chevron_left.d.ts +5 -0
- package/dist/components/VIcon/icons/chevron_left.js +9 -0
- package/dist/components/VIcon/icons/chevron_left.js.map +1 -0
- package/dist/components/VIcon/icons/chevron_right.d.ts +5 -0
- package/dist/components/VIcon/icons/chevron_right.js +9 -0
- package/dist/components/VIcon/icons/chevron_right.js.map +1 -0
- package/dist/components/VIcon/icons/close.d.ts +5 -0
- package/dist/components/VIcon/icons/close.js +9 -0
- package/dist/components/VIcon/icons/close.js.map +1 -0
- package/dist/components/VIcon/icons/cloud_upload.d.ts +5 -0
- package/dist/components/VIcon/icons/cloud_upload.js +9 -0
- package/dist/components/VIcon/icons/cloud_upload.js.map +1 -0
- package/dist/components/VIcon/icons/code.d.ts +5 -0
- package/dist/components/VIcon/icons/code.js +9 -0
- package/dist/components/VIcon/icons/code.js.map +1 -0
- package/dist/components/VIcon/icons/description.d.ts +5 -0
- package/dist/components/VIcon/icons/description.js +9 -0
- package/dist/components/VIcon/icons/description.js.map +1 -0
- package/dist/components/VIcon/icons/error.d.ts +5 -0
- package/dist/components/VIcon/icons/error.js +9 -0
- package/dist/components/VIcon/icons/error.js.map +1 -0
- package/dist/components/VIcon/icons/expand_less.d.ts +5 -0
- package/dist/components/VIcon/icons/expand_less.js +9 -0
- package/dist/components/VIcon/icons/expand_less.js.map +1 -0
- package/dist/components/VIcon/icons/expand_more.d.ts +5 -0
- package/dist/components/VIcon/icons/expand_more.js +9 -0
- package/dist/components/VIcon/icons/expand_more.js.map +1 -0
- package/dist/components/VIcon/icons/folder_zip.d.ts +5 -0
- package/dist/components/VIcon/icons/folder_zip.js +9 -0
- package/dist/components/VIcon/icons/folder_zip.js.map +1 -0
- package/dist/components/VIcon/icons/image.d.ts +5 -0
- package/dist/components/VIcon/icons/image.js +9 -0
- package/dist/components/VIcon/icons/image.js.map +1 -0
- package/dist/components/VIcon/icons/index.d.ts +183 -0
- package/dist/components/VIcon/icons/index.js +77 -0
- package/dist/components/VIcon/icons/index.js.map +1 -0
- package/dist/components/VIcon/icons/info.d.ts +5 -0
- package/dist/components/VIcon/icons/info.js +9 -0
- package/dist/components/VIcon/icons/info.js.map +1 -0
- package/dist/components/VIcon/icons/more_horiz.d.ts +5 -0
- package/dist/components/VIcon/icons/more_horiz.js +9 -0
- package/dist/components/VIcon/icons/more_horiz.js.map +1 -0
- package/dist/components/VIcon/icons/names.d.ts +11 -0
- package/dist/components/VIcon/icons/names.js +5 -0
- package/dist/components/VIcon/icons/names.js.map +1 -0
- package/dist/components/VIcon/icons/notifications.d.ts +5 -0
- package/dist/components/VIcon/icons/notifications.js +9 -0
- package/dist/components/VIcon/icons/notifications.js.map +1 -0
- package/dist/components/VIcon/icons/picture_as_pdf.d.ts +5 -0
- package/dist/components/VIcon/icons/picture_as_pdf.js +9 -0
- package/dist/components/VIcon/icons/picture_as_pdf.js.map +1 -0
- package/dist/components/VIcon/icons/schedule.d.ts +5 -0
- package/dist/components/VIcon/icons/schedule.js +9 -0
- package/dist/components/VIcon/icons/schedule.js.map +1 -0
- package/dist/components/VIcon/icons/search.d.ts +5 -0
- package/dist/components/VIcon/icons/search.js +9 -0
- package/dist/components/VIcon/icons/search.js.map +1 -0
- package/dist/components/VIcon/icons/swap_vert.d.ts +5 -0
- package/dist/components/VIcon/icons/swap_vert.js +9 -0
- package/dist/components/VIcon/icons/swap_vert.js.map +1 -0
- package/dist/components/VIcon/icons/table_chart.d.ts +5 -0
- package/dist/components/VIcon/icons/table_chart.js +9 -0
- package/dist/components/VIcon/icons/table_chart.js.map +1 -0
- package/dist/components/VIcon/icons/video_file.d.ts +5 -0
- package/dist/components/VIcon/icons/video_file.js +9 -0
- package/dist/components/VIcon/icons/video_file.js.map +1 -0
- package/dist/components/VIcon/icons/viewBox.d.ts +6 -0
- package/dist/components/VIcon/icons/viewBox.js +6 -0
- package/dist/components/VIcon/icons/viewBox.js.map +1 -0
- package/dist/components/VIcon/icons/warning.d.ts +5 -0
- package/dist/components/VIcon/icons/warning.js +9 -0
- package/dist/components/VIcon/icons/warning.js.map +1 -0
- package/dist/components/VIcon/resolver.d.ts +76 -0
- package/dist/components/VIcon/resolver.js +35 -0
- package/dist/components/VIcon/resolver.js.map +1 -0
- package/dist/components/VIcon/types.d.ts +77 -0
- package/dist/components/VIconButton/VIconButton.css +2 -0
- package/dist/components/VIconButton/VIconButton.d.ts +66 -0
- package/dist/components/VIconButton/VIconButton.js +9 -0
- package/dist/components/VIconButton/VIconButton.js.map +1 -0
- package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VInput/VInput.css +2 -0
- package/dist/components/VInput/VInput.d.ts +152 -0
- package/dist/components/VInput/VInput.js +9 -0
- package/dist/components/VInput/VInput.js.map +1 -0
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +185 -0
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VInputOTP/VInputOTP.css +2 -0
- package/dist/components/VInputOTP/VInputOTP.d.ts +76 -0
- package/dist/components/VInputOTP/VInputOTP.js +9 -0
- package/dist/components/VInputOTP/VInputOTP.js.map +1 -0
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +149 -0
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenu.d.ts +91 -0
- package/dist/components/VMenu/VMenu.js +7 -0
- package/dist/components/VMenu/VMenu.js.map +1 -0
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js +73 -0
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenuGroup.css +2 -0
- package/dist/components/VMenu/VMenuGroup.d.ts +22 -0
- package/dist/components/VMenu/VMenuGroup.js +9 -0
- package/dist/components/VMenu/VMenuGroup.js.map +1 -0
- package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenuItem.css +2 -0
- package/dist/components/VMenu/VMenuItem.d.ts +85 -0
- package/dist/components/VMenu/VMenuItem.js +9 -0
- package/dist/components/VMenu/VMenuItem.js.map +1 -0
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +121 -0
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenuPanel.css +2 -0
- package/dist/components/VMenu/VMenuPanel.d.ts +91 -0
- package/dist/components/VMenu/VMenuPanel.js +9 -0
- package/dist/components/VMenu/VMenuPanel.js.map +1 -0
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenuSeparator.css +2 -0
- package/dist/components/VMenu/VMenuSeparator.d.ts +3 -0
- package/dist/components/VMenu/VMenuSeparator.js +9 -0
- package/dist/components/VMenu/VMenuSeparator.js.map +1 -0
- package/dist/components/VMenu/VMenuSeparator.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/VMenu/VMenuSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/context.d.ts +33 -0
- package/dist/components/VMenu/context.js +9 -0
- package/dist/components/VMenu/context.js.map +1 -0
- package/dist/components/VPagination/VPagination.css +2 -0
- package/dist/components/VPagination/VPagination.d.ts +103 -0
- package/dist/components/VPagination/VPagination.js +9 -0
- package/dist/components/VPagination/VPagination.js.map +1 -0
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +270 -0
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VPopover/VPopover.css +2 -0
- package/dist/components/VPopover/VPopover.d.ts +82 -0
- package/dist/components/VPopover/VPopover.js +9 -0
- package/dist/components/VPopover/VPopover.js.map +1 -0
- package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VProgressCircular/VProgressCircular.css +2 -0
- package/dist/components/VProgressCircular/VProgressCircular.d.ts +60 -0
- package/dist/components/VProgressCircular/VProgressCircular.js +9 -0
- package/dist/components/VProgressCircular/VProgressCircular.js.map +1 -0
- package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VProgressLinear/VProgressLinear.css +2 -0
- package/dist/components/VProgressLinear/VProgressLinear.d.ts +74 -0
- package/dist/components/VProgressLinear/VProgressLinear.js +9 -0
- package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -0
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VRadio/VRadio.css +2 -0
- package/dist/components/VRadio/VRadio.d.ts +58 -0
- package/dist/components/VRadio/VRadio.js +9 -0
- package/dist/components/VRadio/VRadio.js.map +1 -0
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSeparator/VSeparator.css +2 -0
- package/dist/components/VSeparator/VSeparator.d.ts +23 -0
- package/dist/components/VSeparator/VSeparator.js +9 -0
- package/dist/components/VSeparator/VSeparator.js.map +1 -0
- package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js +17 -0
- package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigation.css +2 -0
- package/dist/components/VSideNavigation/VSideNavigation.d.ts +64 -0
- package/dist/components/VSideNavigation/VSideNavigation.js +9 -0
- package/dist/components/VSideNavigation/VSideNavigation.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.css +2 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.d.ts +33 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.js +9 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js +20 -0
- package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.css +2 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.d.ts +103 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.js +9 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +154 -0
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSideNavigation/VSideNavigationSeparator.css +2 -0
- package/dist/components/VSideNavigation/VSideNavigationSeparator.d.ts +3 -0
- package/dist/components/VSideNavigation/VSideNavigationSeparator.js +17 -0
- package/dist/components/VSideNavigation/VSideNavigationSeparator.js.map +1 -0
- package/dist/components/VSideNavigation/context.d.ts +37 -0
- package/dist/components/VSideNavigation/context.js +6 -0
- package/dist/components/VSideNavigation/context.js.map +1 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.css +2 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.d.ts +75 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.js +9 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSlider/VSlider.css +2 -0
- package/dist/components/VSlider/VSlider.d.ts +82 -0
- package/dist/components/VSlider/VSlider.js +9 -0
- package/dist/components/VSlider/VSlider.js.map +1 -0
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +220 -0
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSnackbar/VSnackbar.css +2 -0
- package/dist/components/VSnackbar/VSnackbar.d.ts +51 -0
- package/dist/components/VSnackbar/VSnackbar.js +9 -0
- package/dist/components/VSnackbar/VSnackbar.js.map +1 -0
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSnackbar/state.d.ts +92 -0
- package/dist/components/VSnackbar/state.js +18 -0
- package/dist/components/VSnackbar/state.js.map +1 -0
- package/dist/components/VSpinner/VSpinner.css +2 -0
- package/dist/components/VSpinner/VSpinner.d.ts +21 -0
- package/dist/components/VSpinner/VSpinner.js +9 -0
- package/dist/components/VSpinner/VSpinner.js.map +1 -0
- package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js +25 -0
- package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSwitch/VSwitch.css +2 -0
- package/dist/components/VSwitch/VSwitch.d.ts +46 -0
- package/dist/components/VSwitch/VSwitch.js +9 -0
- package/dist/components/VSwitch/VSwitch.js.map +1 -0
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTabs/VTab.css +2 -0
- package/dist/components/VTabs/VTab.d.ts +42 -0
- package/dist/components/VTabs/VTab.js +9 -0
- package/dist/components/VTabs/VTab.js.map +1 -0
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTabs/VTabPanel.css +2 -0
- package/dist/components/VTabs/VTabPanel.d.ts +34 -0
- package/dist/components/VTabs/VTabPanel.js +9 -0
- package/dist/components/VTabs/VTabPanel.js.map +1 -0
- package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/components/VTabs/VTabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTabs/VTabs.css +2 -0
- package/dist/components/VTabs/VTabs.d.ts +107 -0
- package/dist/components/VTabs/VTabs.js +9 -0
- package/dist/components/VTabs/VTabs.js.map +1 -0
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js +199 -0
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTabs/context.d.ts +43 -0
- package/dist/components/VTabs/context.js +6 -0
- package/dist/components/VTabs/context.js.map +1 -0
- package/dist/components/VTextarea/VTextarea.css +2 -0
- package/dist/components/VTextarea/VTextarea.d.ts +140 -0
- package/dist/components/VTextarea/VTextarea.js +9 -0
- package/dist/components/VTextarea/VTextarea.js.map +1 -0
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js +187 -0
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTimeInput/VTimeInput.css +2 -0
- package/dist/components/VTimeInput/VTimeInput.d.ts +112 -0
- package/dist/components/VTimeInput/VTimeInput.js +9 -0
- package/dist/components/VTimeInput/VTimeInput.js.map +1 -0
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +385 -0
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTimePicker/VTimePicker.css +2 -0
- package/dist/components/VTimePicker/VTimePicker.d.ts +89 -0
- package/dist/components/VTimePicker/VTimePicker.js +9 -0
- package/dist/components/VTimePicker/VTimePicker.js.map +1 -0
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +257 -0
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VToast/VToast.css +2 -0
- package/dist/components/VToast/VToast.d.ts +24 -0
- package/dist/components/VToast/VToast.js +9 -0
- package/dist/components/VToast/VToast.js.map +1 -0
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VToast/VToaster.css +2 -0
- package/dist/components/VToast/VToaster.d.ts +42 -0
- package/dist/components/VToast/VToaster.js +9 -0
- package/dist/components/VToast/VToaster.js.map +1 -0
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +112 -0
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VToast/state.d.ts +74 -0
- package/dist/components/VToast/state.js +25 -0
- package/dist/components/VToast/state.js.map +1 -0
- package/dist/components/VToggle/VToggle.css +2 -0
- package/dist/components/VToggle/VToggle.d.ts +84 -0
- package/dist/components/VToggle/VToggle.js +9 -0
- package/dist/components/VToggle/VToggle.js.map +1 -0
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VToggle/VToggleItem.css +2 -0
- package/dist/components/VToggle/VToggleItem.d.ts +35 -0
- package/dist/components/VToggle/VToggleItem.js +9 -0
- package/dist/components/VToggle/VToggleItem.js.map +1 -0
- package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VToggle/context.d.ts +37 -0
- package/dist/components/VToggle/context.js +6 -0
- package/dist/components/VToggle/context.js.map +1 -0
- package/dist/components/VTooltip/VTooltip.css +2 -0
- package/dist/components/VTooltip/VTooltip.d.ts +76 -0
- package/dist/components/VTooltip/VTooltip.js +9 -0
- package/dist/components/VTooltip/VTooltip.js.map +1 -0
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTypography/VTypography.css +2 -0
- package/dist/components/VTypography/VTypography.d.ts +46 -0
- package/dist/components/VTypography/VTypography.js +9 -0
- package/dist/components/VTypography/VTypography.js.map +1 -0
- package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composables/useAriaLabel.d.ts +19 -0
- package/dist/composables/useAriaLabel.js +10 -0
- package/dist/composables/useAriaLabel.js.map +1 -0
- package/dist/composables/useFieldIds.d.ts +21 -0
- package/dist/composables/useFieldIds.js +14 -0
- package/dist/composables/useFieldIds.js.map +1 -0
- package/dist/composables/useFieldPanel.d.ts +61 -0
- package/dist/composables/useFieldPanel.js +39 -0
- package/dist/composables/useFieldPanel.js.map +1 -0
- package/dist/composables/useFileDrop.d.ts +30 -0
- package/dist/composables/useFileDrop.js +28 -0
- package/dist/composables/useFileDrop.js.map +1 -0
- package/dist/composables/useFileField.d.ts +36 -0
- package/dist/composables/useFileField.js +45 -0
- package/dist/composables/useFileField.js.map +1 -0
- package/dist/composables/useFocusoutDismiss.d.ts +17 -0
- package/dist/composables/useFocusoutDismiss.js +11 -0
- package/dist/composables/useFocusoutDismiss.js.map +1 -0
- package/dist/composables/useIconClickHandlers.d.ts +27 -0
- package/dist/composables/useIconClickHandlers.js +13 -0
- package/dist/composables/useIconClickHandlers.js.map +1 -0
- package/dist/composables/useMaskedField.d.ts +65 -0
- package/dist/composables/useMaskedField.js +54 -0
- package/dist/composables/useMaskedField.js.map +1 -0
- package/dist/composables/usePopover.d.ts +7 -0
- package/dist/composables/usePopover.js +24 -0
- package/dist/composables/usePopover.js.map +1 -0
- package/dist/composables/useProgressValue.d.ts +13 -0
- package/dist/composables/useProgressValue.js +14 -0
- package/dist/composables/useProgressValue.js.map +1 -0
- package/dist/composables/useRootAttrs.d.ts +34 -0
- package/dist/composables/useRootAttrs.js +15 -0
- package/dist/composables/useRootAttrs.js.map +1 -0
- package/dist/composables/useTextLimit.d.ts +31 -0
- package/dist/composables/useTextLimit.js +19 -0
- package/dist/composables/useTextLimit.js.map +1 -0
- package/dist/composables/useTimer.d.ts +18 -0
- package/dist/composables/useTimer.js +19 -0
- package/dist/composables/useTimer.js.map +1 -0
- package/dist/i18n/en.d.ts +10 -0
- package/dist/i18n/en.js +179 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/fr.d.ts +18 -0
- package/dist/i18n/fr.js +179 -0
- package/dist/i18n/fr.js.map +1 -0
- package/dist/i18n/state.d.ts +64 -0
- package/dist/i18n/state.js +40 -0
- package/dist/i18n/state.js.map +1 -0
- package/dist/i18n/types.d.ts +345 -0
- package/dist/icons.d.ts +16 -0
- package/dist/icons.js +38 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.js +64 -0
- package/dist/styles.css +1 -0
- package/dist/tokens/css.d.ts +25 -0
- package/dist/tokens/css.js +29 -0
- package/dist/tokens/css.js.map +1 -0
- package/dist/tokens/index.d.ts +370 -0
- package/dist/tokens/index.js +15 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/primitives.d.ts +101 -0
- package/dist/tokens/primitives.js +166 -0
- package/dist/tokens/primitives.js.map +1 -0
- package/dist/tokens/semantic.d.ts +236 -0
- package/dist/tokens/semantic.js +219 -0
- package/dist/tokens/semantic.js.map +1 -0
- package/dist/tokens/themes/dark.d.ts +49 -0
- package/dist/tokens/themes/dark.js +53 -0
- package/dist/tokens/themes/dark.js.map +1 -0
- package/dist/tokens/types.d.ts +38 -0
- package/dist/tokens/types.js +16 -0
- package/dist/tokens/types.js.map +1 -0
- package/dist/tokens.json +1516 -0
- package/dist/utils/array.d.ts +10 -0
- package/dist/utils/array.js +8 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/arrowNav.d.ts +27 -0
- package/dist/utils/arrowNav.js +26 -0
- package/dist/utils/arrowNav.js.map +1 -0
- package/dist/utils/chip.d.ts +26 -0
- package/dist/utils/chip.js +13 -0
- package/dist/utils/chip.js.map +1 -0
- package/dist/utils/css.d.ts +19 -0
- package/dist/utils/css.js +13 -0
- package/dist/utils/css.js.map +1 -0
- package/dist/utils/date.d.ts +199 -0
- package/dist/utils/date.js +225 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/direction.d.ts +18 -0
- package/dist/utils/direction.js +8 -0
- package/dist/utils/direction.js.map +1 -0
- package/dist/utils/env.d.ts +10 -0
- package/dist/utils/file.d.ts +95 -0
- package/dist/utils/file.js +70 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/focus.d.ts +24 -0
- package/dist/utils/focus.js +13 -0
- package/dist/utils/focus.js.map +1 -0
- package/dist/utils/matcher.d.ts +13 -0
- package/dist/utils/matcher.js +11 -0
- package/dist/utils/matcher.js.map +1 -0
- package/dist/utils/number.d.ts +9 -0
- package/dist/utils/number.js +8 -0
- package/dist/utils/number.js.map +1 -0
- package/dist/utils/text.d.ts +19 -0
- package/dist/utils/text.js +12 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/time.d.ts +138 -0
- package/dist/utils/time.js +123 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/vnode.d.ts +21 -0
- package/dist/utils/vnode.js +14 -0
- package/dist/utils/vnode.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAccordionItem.js","names":[],"sources":["../../../src/components/VAccordion/VAccordionItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport { expand_more as expandMoreIcon } from '../VIcon/icons/expand_more'\nimport type { IconSource } from '../VIcon/types'\nimport VTypography from '../VTypography/VTypography.vue'\nimport { accordionKey } from './context'\n\n/**\n * One section of an accordion: a heading the reader can click, and the content it\n * reveals. It is a native `<details>`/`<summary>` pair, so the browser owns the\n * open and closed state, the keyboard and the accessibility semantics, and this\n * component adds no code of its own for any of them.\n *\n * The opening is animated entirely in CSS, with `::details-content` and\n * `interpolate-size`. Both are recent additions to the language: where they are\n * missing the section simply appears at once, which is the intended fallback.\n */\ninterface AccordionItemProps {\n /**\n * The heading of the section, the line that stays visible when it is closed. Use\n * the `#title` slot instead when the heading needs markup rather than plain text.\n */\n title?: string\n /**\n * A secondary line under the title, for a short explanation or a status. The\n * `#subtitle` slot replaces it when markup is needed.\n */\n subtitle?: string\n /**\n * An icon placed before the title: an icon name, or an explicit render\n * (`{ src }`, `{ component }`…).\n */\n iconStart?: IconSource\n /**\n * Renders the section already open. It only sets the state of the first render:\n * the browser owns it afterwards, so changing this prop later will not close a\n * section the reader has opened.\n */\n defaultOpen?: boolean\n /**\n * Makes the section inert. It can no longer be opened, the keyboard skips over\n * it, and it is greyed out through the colour tokens.\n */\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionItemProps>(), {\n title: undefined,\n subtitle: undefined,\n iconStart: undefined,\n defaultOpen: false,\n disabled: false,\n})\n\ndefineSlots<{\n /** The content revealed when the section is open. */\n default(): unknown\n /** A title made of markup, which replaces the `title` prop. */\n title?(): unknown\n /** A subtitle made of markup, which replaces the `subtitle` prop. */\n subtitle?(): unknown\n /** Free content before the title, which takes the place of `iconStart`. */\n start?(): unknown\n}>()\n\nconst accordion = inject(accordionKey, null)\n\n/**\n * Both icons are chosen on the enclosing group. The chevron fallback is what keeps\n * an item rendering correctly when it is used outside a VAccordion.\n */\nconst expandIcon = computed(() => accordion?.expandIcon ?? expandMoreIcon)\nconst collapseIcon = computed(() => accordion?.collapseIcon)\n\n// @a11y @core\n/*\n * The component's only behavioural JS. A <summary> has no native `disabled`\n * attribute, so there is no other way to stop a click from toggling the\n * <details>. The keyboard needs no handler of its own: `tabindex=\"-1\"` already\n * takes the summary out of the tab order.\n */\nfunction onSummaryClick(event: MouseEvent) {\n if (props.disabled) event.preventDefault()\n}\n</script>\n\n<template>\n <details\n class=\"v-accordion-item\"\n :name=\"accordion?.name\"\n :open=\"defaultOpen || undefined\"\n :data-swap=\"collapseIcon ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n >\n <summary\n class=\"v-accordion-summary\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n @click=\"onSummaryClick\"\n >\n <slot name=\"start\">\n <VIcon v-if=\"iconStart\" class=\"v-accordion-icon-start\" v-bind=\"iconProps(iconStart)\" />\n </slot>\n <span class=\"v-accordion-heading\">\n <span class=\"v-accordion-title\"\n ><slot name=\"title\">{{ title }}</slot></span\n >\n <VTypography\n v-if=\"subtitle || $slots.subtitle\"\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n class=\"v-accordion-subtitle\"\n ><slot name=\"subtitle\">{{ subtitle }}</slot></VTypography\n >\n </span>\n <VIcon class=\"v-accordion-icon\" v-bind=\"iconProps(expandIcon)\" />\n <!-- Both icons are always in the DOM; [open] decides which one shows, in CSS alone -->\n <VIcon\n v-if=\"collapseIcon\"\n class=\"v-accordion-icon v-accordion-icon-open\"\n v-bind=\"iconProps(collapseIcon)\"\n />\n </summary>\n <div class=\"v-accordion-content\">\n <slot />\n </div>\n </details>\n</template>\n\n<style>\n@layer vectis.components {\n .v-accordion-item {\n interpolate-size: allow-keywords;\n }\n\n .v-accordion-item + .v-accordion-item {\n border-block-start: 1px solid var(--vectis-color-border);\n }\n\n .v-accordion-summary {\n --vectis-icon-size: var(--vectis-icon-size-md);\n --vectis-icon-opsz: 20;\n\n display: flex;\n align-items: center;\n gap: var(--vectis-space-3);\n padding: var(--accordion-pad-block, var(--vectis-space-4))\n var(--accordion-pad-inline, var(--vectis-space-5));\n list-style: none;\n cursor: pointer;\n font-size: var(--vectis-text-label-size);\n font-weight: var(--vectis-text-label-weight);\n color: var(--vectis-color-text);\n }\n\n .v-accordion-summary::-webkit-details-marker {\n display: none;\n }\n\n .v-accordion-item:not([data-disabled]) > .v-accordion-summary:hover {\n background: var(--vectis-color-surface-muted);\n }\n\n .v-accordion-summary:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: calc(var(--vectis-focus-ring-offset) * -1);\n }\n\n .v-accordion-item:first-child > .v-accordion-summary {\n border-start-start-radius: var(--accordion-corner-radius, 0);\n border-start-end-radius: var(--accordion-corner-radius, 0);\n }\n\n .v-accordion-item:last-child:not([open]) > .v-accordion-summary {\n border-end-start-radius: var(--accordion-corner-radius, 0);\n border-end-end-radius: var(--accordion-corner-radius, 0);\n }\n\n .v-accordion-heading {\n flex: 1;\n display: flex;\n flex-direction: column;\n line-height: var(--vectis-text-label-leading);\n }\n\n .v-accordion-icon-start {\n flex: none;\n color: var(--vectis-color-text-muted);\n }\n\n .v-accordion-icon {\n flex: none;\n color: var(--vectis-color-text-muted);\n transition: rotate var(--vectis-duration-base) var(--vectis-ease-default);\n }\n\n .v-accordion-item[open]:not([data-swap]) > .v-accordion-summary .v-accordion-icon {\n rotate: 180deg;\n }\n\n /* data-swap marks an item whose group provided a collapseIcon: rather than\n rotating a single chevron, each state hides one of the two rendered icons. */\n .v-accordion-item[data-swap][open]\n > .v-accordion-summary\n .v-accordion-icon:not(.v-accordion-icon-open),\n .v-accordion-item[data-swap]:not([open]) > .v-accordion-summary .v-accordion-icon-open {\n display: none;\n }\n\n /* A disabled item greys out through the colour tokens and never through\n `opacity`, the rule every control in the DS follows. */\n .v-accordion-item[data-disabled] > .v-accordion-summary {\n color: var(--vectis-color-text-subtle);\n cursor: not-allowed;\n }\n\n /* The icons and the subtitle default to text-muted, which is DARKER than the\n text-subtle a disabled title takes: left to themselves they would come out\n stronger than the label they belong to, so they inherit it instead. */\n .v-accordion-item[data-disabled] .v-accordion-icon,\n .v-accordion-item[data-disabled] .v-accordion-icon-start,\n .v-accordion-item[data-disabled] .v-accordion-subtitle {\n color: inherit;\n }\n\n /* The opening animates in pure CSS: ::details-content targets the box the\n browser wraps the content in, and the `interpolate-size` declared on the item\n is what makes a transition towards `auto` possible at all. A browser missing\n either simply opens the section instantly. */\n .v-accordion-item::details-content {\n block-size: 0;\n overflow: clip;\n transition:\n block-size var(--vectis-duration-base) var(--vectis-ease-default),\n content-visibility var(--vectis-duration-base) allow-discrete;\n }\n\n .v-accordion-item[open]::details-content {\n block-size: auto;\n }\n\n .v-accordion-content {\n padding: var(--accordion-content-pad-start, var(--vectis-space-2))\n var(--accordion-pad-inline, var(--vectis-space-5))\n var(--accordion-pad-block, var(--vectis-space-4));\n font-size: var(--vectis-text-body-md-size);\n line-height: var(--vectis-text-body-md-leading);\n color: var(--vectis-color-text-muted);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-accordion-icon {\n transition: none;\n }\n\n .v-accordion-item::details-content {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import e from "../VIcon/VIcon.js";
|
|
2
|
+
import t from "../VTypography/VTypography.js";
|
|
3
|
+
import { iconProps as n } from "../VIcon/iconProps.js";
|
|
4
|
+
import { expand_more as r } from "../VIcon/icons/expand_more.js";
|
|
5
|
+
import { accordionKey as i } from "./context.js";
|
|
6
|
+
import { computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, inject as p, mergeProps as m, openBlock as h, renderSlot as g, toDisplayString as _, unref as v, withCtx as y } from "vue";
|
|
7
|
+
//#region src/components/VAccordion/VAccordionItem.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
+
var b = [
|
|
9
|
+
"name",
|
|
10
|
+
"open",
|
|
11
|
+
"data-swap",
|
|
12
|
+
"data-disabled"
|
|
13
|
+
], x = ["aria-disabled", "tabindex"], S = { class: "v-accordion-heading" }, C = { class: "v-accordion-title" }, w = { class: "v-accordion-content" }, T = /*@__PURE__*/ f({
|
|
14
|
+
__name: "VAccordionItem",
|
|
15
|
+
props: {
|
|
16
|
+
title: { default: void 0 },
|
|
17
|
+
subtitle: { default: void 0 },
|
|
18
|
+
iconStart: { default: void 0 },
|
|
19
|
+
defaultOpen: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
default: !1
|
|
22
|
+
},
|
|
23
|
+
disabled: {
|
|
24
|
+
type: Boolean,
|
|
25
|
+
default: !1
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
setup(f) {
|
|
29
|
+
let T = f, E = p(i, null), D = a(() => E?.expandIcon ?? r), O = a(() => E?.collapseIcon);
|
|
30
|
+
function k(e) {
|
|
31
|
+
T.disabled && e.preventDefault();
|
|
32
|
+
}
|
|
33
|
+
return (r, i) => (h(), c("details", {
|
|
34
|
+
class: "v-accordion-item",
|
|
35
|
+
name: v(E)?.name,
|
|
36
|
+
open: f.defaultOpen || void 0,
|
|
37
|
+
"data-swap": O.value ? "" : void 0,
|
|
38
|
+
"data-disabled": f.disabled ? "" : void 0
|
|
39
|
+
}, [l("summary", {
|
|
40
|
+
class: "v-accordion-summary",
|
|
41
|
+
"aria-disabled": f.disabled || void 0,
|
|
42
|
+
tabindex: f.disabled ? -1 : void 0,
|
|
43
|
+
onClick: k
|
|
44
|
+
}, [
|
|
45
|
+
g(r.$slots, "start", {}, () => [f.iconStart ? (h(), o(e, m({
|
|
46
|
+
key: 0,
|
|
47
|
+
class: "v-accordion-icon-start"
|
|
48
|
+
}, v(n)(f.iconStart)), null, 16)) : s("", !0)]),
|
|
49
|
+
l("span", S, [l("span", C, [g(r.$slots, "title", {}, () => [u(_(f.title), 1)])]), f.subtitle || r.$slots.subtitle ? (h(), o(t, {
|
|
50
|
+
key: 0,
|
|
51
|
+
as: "span",
|
|
52
|
+
variant: "caption",
|
|
53
|
+
tone: "muted",
|
|
54
|
+
class: "v-accordion-subtitle"
|
|
55
|
+
}, {
|
|
56
|
+
default: y(() => [g(r.$slots, "subtitle", {}, () => [u(_(f.subtitle), 1)])]),
|
|
57
|
+
_: 3
|
|
58
|
+
})) : s("", !0)]),
|
|
59
|
+
d(e, m({ class: "v-accordion-icon" }, v(n)(D.value)), null, 16),
|
|
60
|
+
O.value ? (h(), o(e, m({
|
|
61
|
+
key: 0,
|
|
62
|
+
class: "v-accordion-icon v-accordion-icon-open"
|
|
63
|
+
}, v(n)(O.value)), null, 16)) : s("", !0)
|
|
64
|
+
], 8, x), l("div", w, [g(r.$slots, "default")])], 8, b));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
//#endregion
|
|
68
|
+
export { T as default };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=VAccordionItem.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAccordionItem.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/VAccordion/VAccordionItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport { expand_more as expandMoreIcon } from '../VIcon/icons/expand_more'\nimport type { IconSource } from '../VIcon/types'\nimport VTypography from '../VTypography/VTypography.vue'\nimport { accordionKey } from './context'\n\n/**\n * One section of an accordion: a heading the reader can click, and the content it\n * reveals. It is a native `<details>`/`<summary>` pair, so the browser owns the\n * open and closed state, the keyboard and the accessibility semantics, and this\n * component adds no code of its own for any of them.\n *\n * The opening is animated entirely in CSS, with `::details-content` and\n * `interpolate-size`. Both are recent additions to the language: where they are\n * missing the section simply appears at once, which is the intended fallback.\n */\ninterface AccordionItemProps {\n /**\n * The heading of the section, the line that stays visible when it is closed. Use\n * the `#title` slot instead when the heading needs markup rather than plain text.\n */\n title?: string\n /**\n * A secondary line under the title, for a short explanation or a status. The\n * `#subtitle` slot replaces it when markup is needed.\n */\n subtitle?: string\n /**\n * An icon placed before the title: an icon name, or an explicit render\n * (`{ src }`, `{ component }`…).\n */\n iconStart?: IconSource\n /**\n * Renders the section already open. It only sets the state of the first render:\n * the browser owns it afterwards, so changing this prop later will not close a\n * section the reader has opened.\n */\n defaultOpen?: boolean\n /**\n * Makes the section inert. It can no longer be opened, the keyboard skips over\n * it, and it is greyed out through the colour tokens.\n */\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<AccordionItemProps>(), {\n title: undefined,\n subtitle: undefined,\n iconStart: undefined,\n defaultOpen: false,\n disabled: false,\n})\n\ndefineSlots<{\n /** The content revealed when the section is open. */\n default(): unknown\n /** A title made of markup, which replaces the `title` prop. */\n title?(): unknown\n /** A subtitle made of markup, which replaces the `subtitle` prop. */\n subtitle?(): unknown\n /** Free content before the title, which takes the place of `iconStart`. */\n start?(): unknown\n}>()\n\nconst accordion = inject(accordionKey, null)\n\n/**\n * Both icons are chosen on the enclosing group. The chevron fallback is what keeps\n * an item rendering correctly when it is used outside a VAccordion.\n */\nconst expandIcon = computed(() => accordion?.expandIcon ?? expandMoreIcon)\nconst collapseIcon = computed(() => accordion?.collapseIcon)\n\n// @a11y @core\n/*\n * The component's only behavioural JS. A <summary> has no native `disabled`\n * attribute, so there is no other way to stop a click from toggling the\n * <details>. The keyboard needs no handler of its own: `tabindex=\"-1\"` already\n * takes the summary out of the tab order.\n */\nfunction onSummaryClick(event: MouseEvent) {\n if (props.disabled) event.preventDefault()\n}\n</script>\n\n<template>\n <details\n class=\"v-accordion-item\"\n :name=\"accordion?.name\"\n :open=\"defaultOpen || undefined\"\n :data-swap=\"collapseIcon ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n >\n <summary\n class=\"v-accordion-summary\"\n :aria-disabled=\"disabled || undefined\"\n :tabindex=\"disabled ? -1 : undefined\"\n @click=\"onSummaryClick\"\n >\n <slot name=\"start\">\n <VIcon v-if=\"iconStart\" class=\"v-accordion-icon-start\" v-bind=\"iconProps(iconStart)\" />\n </slot>\n <span class=\"v-accordion-heading\">\n <span class=\"v-accordion-title\"\n ><slot name=\"title\">{{ title }}</slot></span\n >\n <VTypography\n v-if=\"subtitle || $slots.subtitle\"\n as=\"span\"\n variant=\"caption\"\n tone=\"muted\"\n class=\"v-accordion-subtitle\"\n ><slot name=\"subtitle\">{{ subtitle }}</slot></VTypography\n >\n </span>\n <VIcon class=\"v-accordion-icon\" v-bind=\"iconProps(expandIcon)\" />\n <!-- Both icons are always in the DOM; [open] decides which one shows, in CSS alone -->\n <VIcon\n v-if=\"collapseIcon\"\n class=\"v-accordion-icon v-accordion-icon-open\"\n v-bind=\"iconProps(collapseIcon)\"\n />\n </summary>\n <div class=\"v-accordion-content\">\n <slot />\n </div>\n </details>\n</template>\n\n<style>\n@layer vectis.components {\n .v-accordion-item {\n interpolate-size: allow-keywords;\n }\n\n .v-accordion-item + .v-accordion-item {\n border-block-start: 1px solid var(--vectis-color-border);\n }\n\n .v-accordion-summary {\n --vectis-icon-size: var(--vectis-icon-size-md);\n --vectis-icon-opsz: 20;\n\n display: flex;\n align-items: center;\n gap: var(--vectis-space-3);\n padding: var(--accordion-pad-block, var(--vectis-space-4))\n var(--accordion-pad-inline, var(--vectis-space-5));\n list-style: none;\n cursor: pointer;\n font-size: var(--vectis-text-label-size);\n font-weight: var(--vectis-text-label-weight);\n color: var(--vectis-color-text);\n }\n\n .v-accordion-summary::-webkit-details-marker {\n display: none;\n }\n\n .v-accordion-item:not([data-disabled]) > .v-accordion-summary:hover {\n background: var(--vectis-color-surface-muted);\n }\n\n .v-accordion-summary:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: calc(var(--vectis-focus-ring-offset) * -1);\n }\n\n .v-accordion-item:first-child > .v-accordion-summary {\n border-start-start-radius: var(--accordion-corner-radius, 0);\n border-start-end-radius: var(--accordion-corner-radius, 0);\n }\n\n .v-accordion-item:last-child:not([open]) > .v-accordion-summary {\n border-end-start-radius: var(--accordion-corner-radius, 0);\n border-end-end-radius: var(--accordion-corner-radius, 0);\n }\n\n .v-accordion-heading {\n flex: 1;\n display: flex;\n flex-direction: column;\n line-height: var(--vectis-text-label-leading);\n }\n\n .v-accordion-icon-start {\n flex: none;\n color: var(--vectis-color-text-muted);\n }\n\n .v-accordion-icon {\n flex: none;\n color: var(--vectis-color-text-muted);\n transition: rotate var(--vectis-duration-base) var(--vectis-ease-default);\n }\n\n .v-accordion-item[open]:not([data-swap]) > .v-accordion-summary .v-accordion-icon {\n rotate: 180deg;\n }\n\n /* data-swap marks an item whose group provided a collapseIcon: rather than\n rotating a single chevron, each state hides one of the two rendered icons. */\n .v-accordion-item[data-swap][open]\n > .v-accordion-summary\n .v-accordion-icon:not(.v-accordion-icon-open),\n .v-accordion-item[data-swap]:not([open]) > .v-accordion-summary .v-accordion-icon-open {\n display: none;\n }\n\n /* A disabled item greys out through the colour tokens and never through\n `opacity`, the rule every control in the DS follows. */\n .v-accordion-item[data-disabled] > .v-accordion-summary {\n color: var(--vectis-color-text-subtle);\n cursor: not-allowed;\n }\n\n /* The icons and the subtitle default to text-muted, which is DARKER than the\n text-subtle a disabled title takes: left to themselves they would come out\n stronger than the label they belong to, so they inherit it instead. */\n .v-accordion-item[data-disabled] .v-accordion-icon,\n .v-accordion-item[data-disabled] .v-accordion-icon-start,\n .v-accordion-item[data-disabled] .v-accordion-subtitle {\n color: inherit;\n }\n\n /* The opening animates in pure CSS: ::details-content targets the box the\n browser wraps the content in, and the `interpolate-size` declared on the item\n is what makes a transition towards `auto` possible at all. A browser missing\n either simply opens the section instantly. */\n .v-accordion-item::details-content {\n block-size: 0;\n overflow: clip;\n transition:\n block-size var(--vectis-duration-base) var(--vectis-ease-default),\n content-visibility var(--vectis-duration-base) allow-discrete;\n }\n\n .v-accordion-item[open]::details-content {\n block-size: auto;\n }\n\n .v-accordion-content {\n padding: var(--accordion-content-pad-start, var(--vectis-space-2))\n var(--accordion-pad-inline, var(--vectis-space-5))\n var(--accordion-pad-block, var(--vectis-space-4));\n font-size: var(--vectis-text-body-md-size);\n line-height: var(--vectis-text-body-md-leading);\n color: var(--vectis-color-text-muted);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-accordion-icon {\n transition: none;\n }\n\n .v-accordion-item::details-content {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDA,IAAM,IAAQ,GAmBR,IAAY,EAAO,GAAc,IAAI,GAMrC,IAAa,QAAe,GAAW,cAAc,CAAc,GACnE,IAAe,QAAe,GAAW,YAAY;EAS3D,SAAS,EAAe,GAAmB;GACzC,AAAI,EAAM,YAAU,EAAM,eAAe;EAC3C;yBAIE,EAwCU,WAAA;GAvCR,OAAM;GACL,MAAM,EAAA,CAAA,CAAS,EAAE;GACjB,MAAM,EAAA,eAAe,KAAA;GACrB,aAAW,EAAA,QAAY,KAAQ,KAAA;GAC/B,iBAAe,EAAA,WAAQ,KAAQ,KAAA;MAEhC,EA6BU,WAAA;GA5BR,OAAM;GACL,iBAAe,EAAA,YAAY,KAAA;GAC3B,UAAU,EAAA,WAAQ,KAAQ,KAAA;GAC1B,SAAO;;GAER,EAEO,EAAA,QAAA,SAAA,CAAA,SAAA,CADQ,EAAA,aAAA,EAAA,GAAb,EAAuF,GAAvF,EAAuF;;IAA/D,OAAM;MAAiC,EAAA,CAAA,CAAS,CAAC,EAAA,SAAS,CAAA,GAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA;GAEpF,EAYO,QAZP,GAYO,CAXL,EAEC,QAFD,GAEC,CADE,EAAqC,EAAA,QAAA,SAAA,CAAA,SAAA,CAAA,EAAA,EAAf,EAAA,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAGtB,EAAA,YAAYA,EAAAA,OAAO,YAAA,EAAA,GAD3B,EAOC,GAAA;;IALC,IAAG;IACH,SAAQ;IACR,MAAK;IACL,OAAM;;qBACsC,CAA3C,EAA2C,EAAA,QAAA,YAAA,CAAA,SAAA,CAAA,EAAA,EAAlB,EAAA,QAAQ,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;GAGtC,EAAiE,GAAjE,EAAiE,EAA1D,OAAM,mBAAkB,GAAS,EAAA,CAAA,CAAS,CAAC,EAAA,KAAU,CAAA,GAAA,MAAA,EAAA;GAGpD,EAAA,SAAA,EAAA,GADR,EAIE,GAJF,EAIE;;IAFA,OAAM;MACE,EAAA,CAAA,CAAS,CAAC,EAAA,KAAY,CAAA,GAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA;YAGlC,EAEM,OAFN,GAEM,CADJ,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA,CAAA,GAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InjectionKey } from 'vue';
|
|
2
|
+
import { IconSource } from '../VIcon/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The parent→items contract: the shared name set on each <details> activates NATIVE
|
|
5
|
+
* exclusive mode (the `name` attribute, Baseline 2024) — a single item open, with no
|
|
6
|
+
* JS at all. The icons are set on the group (homogeneous density and iconography);
|
|
7
|
+
* `compact` does NOT travel here, it descends through CSS inheritance (the
|
|
8
|
+
* --accordion-* variables set on the root).
|
|
9
|
+
*/
|
|
10
|
+
export interface AccordionContext {
|
|
11
|
+
/** Group name for <details name>; undefined = multiple items can be open. */
|
|
12
|
+
name: string | undefined;
|
|
13
|
+
/** Icon in the closed state: an icon name, or an explicit render. */
|
|
14
|
+
expandIcon: IconSource;
|
|
15
|
+
/** Icon in the open state; undefined = a rotation of `expandIcon`. */
|
|
16
|
+
collapseIcon: IconSource | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare const accordionKey: InjectionKey<AccordionContext>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/VAccordion/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\n\nimport type { IconSource } from '../VIcon/types'\n\n/**\n * The parent→items contract: the shared name set on each <details> activates NATIVE\n * exclusive mode (the `name` attribute, Baseline 2024) — a single item open, with no\n * JS at all. The icons are set on the group (homogeneous density and iconography);\n * `compact` does NOT travel here, it descends through CSS inheritance (the\n * --accordion-* variables set on the root).\n */\nexport interface AccordionContext {\n /** Group name for <details name>; undefined = multiple items can be open. */\n name: string | undefined\n /** Icon in the closed state: an icon name, or an explicit render. */\n expandIcon: IconSource\n /** Icon in the open state; undefined = a rotation of `expandIcon`. */\n collapseIcon: IconSource | undefined\n}\n\nexport const accordionKey: InjectionKey<AccordionContext> = Symbol('v-accordion')\n"],"mappings":";AAoBA,IAAa,IAA+C,OAAO,aAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
+
@layer vectis.components{.v-avatar{--avatar-bg:var(--vectis-color-surface-muted);--avatar-text:var(--vectis-color-text-muted);inline-size:var(--control-height);block-size:var(--control-height);background:var(--avatar-bg);color:var(--avatar-text);border-radius:var(--vectis-radius-full);font-family:var(--vectis-text-family);font-size:var(--control-font-size);font-weight:var(--vectis-font-weight-semibold);line-height:var(--vectis-text-control-leading);-webkit-user-select:none;user-select:none;box-shadow:0 0 0 var(--vectis-control-size-avatar-ring) var(--avatar-ring-color,transparent);transition:background-color var(--vectis-duration-fast) var(--vectis-ease-default), box-shadow var(--vectis-duration-fast) var(--vectis-ease-default);border:none;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex;overflow:hidden}.v-avatar[data-auto]{--avatar-bg:oklch(.9 .06 var(--avatar-hue));--avatar-text:oklch(.42 .13 var(--avatar-hue))}.v-avatar[data-custom]{--avatar-bg:var(--custom-color);--avatar-text:var(--vectis-color-text-on-accent)}[data-theme=dark] .v-avatar[data-auto]{--avatar-bg:oklch(.42 .09 var(--avatar-hue));--avatar-text:oklch(.92 .05 var(--avatar-hue))}.v-avatar-image{object-fit:cover;block-size:100%;inline-size:100%}.v-avatar-icon{--vectis-icon-size:calc(var(--control-height) * .55)}:is(a,button).v-avatar{cursor:pointer}:is(a,button).v-avatar:hover:not([aria-disabled=true],:disabled){background:color-mix(in oklab, var(--avatar-bg), var(--vectis-color-text) 10%)}:is(a,button).v-avatar:focus-visible{outline:var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);outline-offset:var(--vectis-focus-ring-offset)}.v-avatar:is(:disabled,[aria-disabled=true]){cursor:not-allowed;background:var(--vectis-color-surface-muted);color:var(--vectis-color-text-subtle)}@media (prefers-reduced-motion:reduce){.v-avatar{transition:none}}}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { IconSource } from '../VIcon/types.js';
|
|
2
|
+
export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3
|
+
/**
|
|
4
|
+
* A round avatar standing for a person or an entity. It shows the best of what it
|
|
5
|
+
* was given, in that order: the picture, failing that an icon, failing that the
|
|
6
|
+
* initials taken from the name, and failing that whatever the default slot holds —
|
|
7
|
+
* the escape hatch VAvatarGroup uses to render its "+X" overflow badge.
|
|
8
|
+
*
|
|
9
|
+
* Four things here genuinely need JavaScript. A picture that fails to download
|
|
10
|
+
* reports it as a DOM event and nothing else, so the script listens for it and
|
|
11
|
+
* hands over to the initials rather than leaving an empty circle. The initials and
|
|
12
|
+
* the automatic colour are both computed from the name, which is arithmetic no
|
|
13
|
+
* stylesheet can do. A disabled link has no native equivalent of a disabled
|
|
14
|
+
* button, so it is turned inert by hand (its `href` is removed, `aria-disabled`
|
|
15
|
+
* announces the state and the click handler is dropped). Finally the attributes
|
|
16
|
+
* the consumer passes are split so that `style` never reaches the element
|
|
17
|
+
* directly: the component has to merge its own `--avatar-hue`/`--custom-color`
|
|
18
|
+
* into it first, and a plain fallthrough would overwrite them.
|
|
19
|
+
*/
|
|
20
|
+
interface AvatarProps {
|
|
21
|
+
/** Image URL (priority 1). */
|
|
22
|
+
src?: string;
|
|
23
|
+
/** Icon shown in the absence of an image (priority 2): a name, or an explicit render. */
|
|
24
|
+
icon?: IconSource;
|
|
25
|
+
/** Full name — the default alt, the source of the initials and the seed of the auto hue. */
|
|
26
|
+
name?: string;
|
|
27
|
+
/** Explicit alt/label (wins over `name`). */
|
|
28
|
+
alt?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Custom colour (hex, CSS name or oklch()) which REPLACES the auto hue: set inline
|
|
31
|
+
* as `--custom-color`. Otherwise, in the absence of an image, a deterministic OKLCH
|
|
32
|
+
* hue is derived from `name`.
|
|
33
|
+
*/
|
|
34
|
+
color?: string;
|
|
35
|
+
/** Default `md`. `undefined` = inherited from an enclosing VAvatarGroup. */
|
|
36
|
+
size?: AvatarSize;
|
|
37
|
+
/** Height reduced by 4px (like the other controls). */
|
|
38
|
+
compact?: boolean;
|
|
39
|
+
/** Rendered as `<a>`. disabled → an inert link (href removed + aria-disabled). */
|
|
40
|
+
href?: string;
|
|
41
|
+
/** Rendered as `<button type="button">` (a VTooltip's #trigger slot plugs in through fallthrough). */
|
|
42
|
+
clickable?: boolean;
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
}
|
|
45
|
+
type __VLS_Slots = {
|
|
46
|
+
/** Fallback content (replaces the initials), e.g. VAvatarGroup's "+X". */
|
|
47
|
+
default?(): unknown;
|
|
48
|
+
};
|
|
49
|
+
declare const __VLS_base: import('vue').DefineComponent<AvatarProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AvatarProps> & Readonly<{}>, {
|
|
50
|
+
alt: string;
|
|
51
|
+
size: AvatarSize;
|
|
52
|
+
name: string;
|
|
53
|
+
src: string;
|
|
54
|
+
compact: boolean;
|
|
55
|
+
href: string;
|
|
56
|
+
disabled: boolean;
|
|
57
|
+
icon: IconSource;
|
|
58
|
+
color: string;
|
|
59
|
+
clickable: boolean;
|
|
60
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
61
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
62
|
+
declare const _default: typeof __VLS_export;
|
|
63
|
+
export default _default;
|
|
64
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
65
|
+
new (): {
|
|
66
|
+
$slots: S;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAvatar.js","names":[],"sources":["../../../src/components/VAvatar/VAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject, ref, useAttrs, watch } from 'vue'\nimport type { StyleValue } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport type { IconSource } from '../VIcon/types'\nimport { avatarGroupKey } from './context'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * A round avatar standing for a person or an entity. It shows the best of what it\n * was given, in that order: the picture, failing that an icon, failing that the\n * initials taken from the name, and failing that whatever the default slot holds —\n * the escape hatch VAvatarGroup uses to render its \"+X\" overflow badge.\n *\n * Four things here genuinely need JavaScript. A picture that fails to download\n * reports it as a DOM event and nothing else, so the script listens for it and\n * hands over to the initials rather than leaving an empty circle. The initials and\n * the automatic colour are both computed from the name, which is arithmetic no\n * stylesheet can do. A disabled link has no native equivalent of a disabled\n * button, so it is turned inert by hand (its `href` is removed, `aria-disabled`\n * announces the state and the click handler is dropped). Finally the attributes\n * the consumer passes are split so that `style` never reaches the element\n * directly: the component has to merge its own `--avatar-hue`/`--custom-color`\n * into it first, and a plain fallthrough would overwrite them.\n */\ninterface AvatarProps {\n /** Image URL (priority 1). */\n src?: string\n /** Icon shown in the absence of an image (priority 2): a name, or an explicit render. */\n icon?: IconSource\n /** Full name — the default alt, the source of the initials and the seed of the auto hue. */\n name?: string\n /** Explicit alt/label (wins over `name`). */\n alt?: string\n /**\n * Custom colour (hex, CSS name or oklch()) which REPLACES the auto hue: set inline\n * as `--custom-color`. Otherwise, in the absence of an image, a deterministic OKLCH\n * hue is derived from `name`.\n */\n color?: string\n /** Default `md`. `undefined` = inherited from an enclosing VAvatarGroup. */\n size?: AvatarSize\n /** Height reduced by 4px (like the other controls). */\n compact?: boolean\n /** Rendered as `<a>`. disabled → an inert link (href removed + aria-disabled). */\n href?: string\n /** Rendered as `<button type=\"button\">` (a VTooltip's #trigger slot plugs in through fallthrough). */\n clickable?: boolean\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n src: undefined,\n icon: undefined,\n name: undefined,\n alt: undefined,\n color: undefined,\n size: undefined,\n compact: false,\n href: undefined,\n clickable: false,\n disabled: false,\n})\n\ndefineSlots<{\n /** Fallback content (replaces the initials), e.g. VAvatarGroup's \"+X\". */\n default?(): unknown\n}>()\n\ndefineOptions({ inheritAttrs: false })\n\nconst attrs = useAttrs()\nconst group = inject(avatarGroupKey, null)\n\n// Size/compact: the explicit prop, else the group's, else the default.\nconst resolvedSize = computed<AvatarSize>(() => props.size ?? group?.size ?? 'md')\nconst resolvedCompact = computed(() => props.compact || (group?.compact ?? false))\n\n/* Interactivity priority: href > clickable > static. */\nconst isLink = computed(() => props.href !== undefined)\nconst isInteractive = computed(() => isLink.value || props.clickable)\nconst tag = computed(() => (isLink.value ? 'a' : props.clickable ? 'button' : 'span'))\nconst isInertLink = computed(() => isLink.value && props.disabled)\n\n// @fallback — the image failed to load: the initials take over, so an avatar is\n// never an empty box.\nconst failed = ref(false)\nwatch(\n () => props.src,\n () => {\n failed.value = false\n },\n)\nconst showImage = computed(() => Boolean(props.src) && !failed.value)\n\nconst accessibleName = computed(() => props.alt ?? props.name)\n\nconst initials = computed(() => {\n if (!props.name) return ''\n return props.name\n .split(/\\s+/)\n .slice(0, 2)\n .map((part) => part[0]?.toLocaleUpperCase() ?? '')\n .join('')\n})\n\n/*\n * Auto hue: a pure JS hash of the name → an OKLCH hue (0–359). Only the hue is\n * inline (a unitless scalar); the CSS composes background/text with L/C fixed per\n * theme (light/dark adaptation without depending on contrast-color). A colour\n * computed outside the tokens, a deliberate exception. SSR-safe: no browser API.\n */\nconst hue = computed(() => {\n if (!props.name) return null\n let hash = 0\n for (let i = 0; i < props.name.length; i++) {\n hash = (hash * 31 + props.name.charCodeAt(i)) | 0\n }\n return Math.abs(hash) % 360\n})\nconst isAuto = computed(() => props.color === undefined && hue.value !== null)\n\nconst rootStyle = computed<StyleValue>(() => [\n props.color !== undefined\n ? { '--custom-color': props.color }\n : isAuto.value\n ? { '--avatar-hue': String(hue.value) }\n : undefined,\n attrs.style as StyleValue,\n])\n\n// Fallthrough without `style` (handled by rootStyle); onClick removed on an inert link.\nconst passedAttrs = computed(() => {\n const rest = { ...(attrs as Record<string, unknown>) }\n delete rest.style\n if (isInertLink.value) delete rest.onClick\n return rest\n})\n</script>\n\n<template>\n <component\n :is=\"tag\"\n v-bind=\"passedAttrs\"\n class=\"v-avatar v-control\"\n :style=\"rootStyle\"\n :data-size=\"resolvedSize\"\n :data-compact=\"resolvedCompact ? '' : undefined\"\n :data-custom=\"color !== undefined ? '' : undefined\"\n :data-auto=\"isAuto ? '' : undefined\"\n :href=\"isLink && !disabled ? href : undefined\"\n :type=\"tag === 'button' ? 'button' : undefined\"\n :disabled=\"tag === 'button' ? disabled : undefined\"\n :aria-disabled=\"isInertLink ? 'true' : undefined\"\n :role=\"!isInteractive && !showImage && accessibleName ? 'img' : undefined\"\n :aria-label=\"!showImage ? accessibleName : undefined\"\n >\n <img\n v-if=\"showImage\"\n class=\"v-avatar-image\"\n :src=\"src\"\n :alt=\"alt ?? name ?? ''\"\n @error=\"failed = true\"\n />\n <VIcon v-else-if=\"icon\" v-bind=\"iconProps(icon)\" class=\"v-avatar-icon\" />\n <slot v-else>\n <span class=\"v-avatar-initials\" aria-hidden=\"true\">{{ initials }}</span>\n </slot>\n </component>\n</template>\n\n<style>\n@layer vectis.components {\n .v-avatar {\n --avatar-bg: var(--vectis-color-surface-muted);\n --avatar-text: var(--vectis-color-text-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--control-height);\n block-size: var(--control-height);\n flex: none;\n overflow: hidden;\n padding: 0;\n border: none;\n background: var(--avatar-bg);\n color: var(--avatar-text);\n border-radius: var(--vectis-radius-full);\n font-family: var(--vectis-text-family);\n font-size: var(--control-font-size);\n font-weight: var(--vectis-font-weight-semibold);\n line-height: var(--vectis-text-control-leading);\n text-decoration: none;\n user-select: none;\n box-shadow: 0 0 0 var(--vectis-control-size-avatar-ring) var(--avatar-ring-color, transparent);\n transition:\n background-color var(--vectis-duration-fast) var(--vectis-ease-default),\n box-shadow var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n /* Auto hue */\n .v-avatar[data-auto] {\n --avatar-bg: oklch(0.9 0.06 var(--avatar-hue));\n --avatar-text: oklch(0.42 0.13 var(--avatar-hue));\n }\n\n /* Custom colour (--custom-color inline): wins, with a fixed white text (contrast\n is the consumer's responsibility). */\n .v-avatar[data-custom] {\n --avatar-bg: var(--custom-color);\n --avatar-text: var(--vectis-color-text-on-accent);\n }\n\n [data-theme='dark'] .v-avatar[data-auto] {\n --avatar-bg: oklch(0.42 0.09 var(--avatar-hue));\n --avatar-text: oklch(0.92 0.05 var(--avatar-hue));\n }\n\n .v-avatar-image {\n inline-size: 100%;\n block-size: 100%;\n object-fit: cover;\n }\n\n /* The icon occupies ~55% of the disc (a unitless ratio, like the font-size). */\n .v-avatar-icon {\n --vectis-icon-size: calc(var(--control-height) * 0.55);\n }\n\n :is(a, button).v-avatar {\n cursor: pointer;\n }\n\n :is(a, button).v-avatar:hover:not([aria-disabled='true'], :disabled) {\n background: color-mix(in oklab, var(--avatar-bg), var(--vectis-color-text) 10%);\n }\n\n :is(a, button).v-avatar:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: var(--vectis-focus-ring-offset);\n }\n\n .v-avatar:is(:disabled, [aria-disabled='true']) {\n cursor: not-allowed;\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-subtle);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-avatar {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import e from "../VIcon/VIcon.js";
|
|
2
|
+
import { iconProps as t } from "../VIcon/iconProps.js";
|
|
3
|
+
import { avatarGroupKey as n } from "./context.js";
|
|
4
|
+
import { computed as r, createBlock as i, createElementBlock as a, createElementVNode as o, defineComponent as s, inject as c, mergeProps as l, openBlock as u, ref as d, renderSlot as f, resolveDynamicComponent as p, toDisplayString as m, unref as h, useAttrs as g, watch as _, withCtx as v } from "vue";
|
|
5
|
+
//#region src/components/VAvatar/VAvatar.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var y = ["src", "alt"], b = {
|
|
7
|
+
class: "v-avatar-initials",
|
|
8
|
+
"aria-hidden": "true"
|
|
9
|
+
}, x = /*@__PURE__*/ s({
|
|
10
|
+
inheritAttrs: !1,
|
|
11
|
+
__name: "VAvatar",
|
|
12
|
+
props: {
|
|
13
|
+
src: { default: void 0 },
|
|
14
|
+
icon: { default: void 0 },
|
|
15
|
+
name: { default: void 0 },
|
|
16
|
+
alt: { default: void 0 },
|
|
17
|
+
color: { default: void 0 },
|
|
18
|
+
size: { default: void 0 },
|
|
19
|
+
compact: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
default: !1
|
|
22
|
+
},
|
|
23
|
+
href: { default: void 0 },
|
|
24
|
+
clickable: {
|
|
25
|
+
type: Boolean,
|
|
26
|
+
default: !1
|
|
27
|
+
},
|
|
28
|
+
disabled: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: !1
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
setup(s) {
|
|
34
|
+
let x = s, S = g(), C = c(n, null), w = r(() => x.size ?? C?.size ?? "md"), T = r(() => x.compact || (C?.compact ?? !1)), E = r(() => x.href !== void 0), D = r(() => E.value || x.clickable), O = r(() => E.value ? "a" : x.clickable ? "button" : "span"), k = r(() => E.value && x.disabled), A = d(!1);
|
|
35
|
+
_(() => x.src, () => {
|
|
36
|
+
A.value = !1;
|
|
37
|
+
});
|
|
38
|
+
let j = r(() => !!x.src && !A.value), M = r(() => x.alt ?? x.name), N = r(() => x.name ? x.name.split(/\s+/).slice(0, 2).map((e) => e[0]?.toLocaleUpperCase() ?? "").join("") : ""), P = r(() => {
|
|
39
|
+
if (!x.name) return null;
|
|
40
|
+
let e = 0;
|
|
41
|
+
for (let t = 0; t < x.name.length; t++) e = e * 31 + x.name.charCodeAt(t) | 0;
|
|
42
|
+
return Math.abs(e) % 360;
|
|
43
|
+
}), F = r(() => x.color === void 0 && P.value !== null), I = r(() => [x.color === void 0 ? F.value ? { "--avatar-hue": String(P.value) } : void 0 : { "--custom-color": x.color }, S.style]), L = r(() => {
|
|
44
|
+
let e = { ...S };
|
|
45
|
+
return delete e.style, k.value && delete e.onClick, e;
|
|
46
|
+
});
|
|
47
|
+
return (n, r) => (u(), i(p(O.value), l(L.value, {
|
|
48
|
+
class: "v-avatar v-control",
|
|
49
|
+
style: I.value,
|
|
50
|
+
"data-size": w.value,
|
|
51
|
+
"data-compact": T.value ? "" : void 0,
|
|
52
|
+
"data-custom": s.color === void 0 ? void 0 : "",
|
|
53
|
+
"data-auto": F.value ? "" : void 0,
|
|
54
|
+
href: E.value && !s.disabled ? s.href : void 0,
|
|
55
|
+
type: O.value === "button" ? "button" : void 0,
|
|
56
|
+
disabled: O.value === "button" ? s.disabled : void 0,
|
|
57
|
+
"aria-disabled": k.value ? "true" : void 0,
|
|
58
|
+
role: !D.value && !j.value && M.value ? "img" : void 0,
|
|
59
|
+
"aria-label": j.value ? void 0 : M.value
|
|
60
|
+
}), {
|
|
61
|
+
default: v(() => [j.value ? (u(), a("img", {
|
|
62
|
+
key: 0,
|
|
63
|
+
class: "v-avatar-image",
|
|
64
|
+
src: s.src,
|
|
65
|
+
alt: s.alt ?? s.name ?? "",
|
|
66
|
+
onError: r[0] ||= (e) => A.value = !0
|
|
67
|
+
}, null, 40, y)) : s.icon ? (u(), i(e, l({ key: 1 }, h(t)(s.icon), { class: "v-avatar-icon" }), null, 16)) : f(n.$slots, "default", {}, () => [o("span", b, m(N.value), 1)], void 0, 2)]),
|
|
68
|
+
_: 3
|
|
69
|
+
}, 16, [
|
|
70
|
+
"style",
|
|
71
|
+
"data-size",
|
|
72
|
+
"data-compact",
|
|
73
|
+
"data-custom",
|
|
74
|
+
"data-auto",
|
|
75
|
+
"href",
|
|
76
|
+
"type",
|
|
77
|
+
"disabled",
|
|
78
|
+
"aria-disabled",
|
|
79
|
+
"role",
|
|
80
|
+
"aria-label"
|
|
81
|
+
]));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
//#endregion
|
|
85
|
+
export { x as default };
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=VAvatar.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAvatar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VAvatar/VAvatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject, ref, useAttrs, watch } from 'vue'\nimport type { StyleValue } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport type { IconSource } from '../VIcon/types'\nimport { avatarGroupKey } from './context'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * A round avatar standing for a person or an entity. It shows the best of what it\n * was given, in that order: the picture, failing that an icon, failing that the\n * initials taken from the name, and failing that whatever the default slot holds —\n * the escape hatch VAvatarGroup uses to render its \"+X\" overflow badge.\n *\n * Four things here genuinely need JavaScript. A picture that fails to download\n * reports it as a DOM event and nothing else, so the script listens for it and\n * hands over to the initials rather than leaving an empty circle. The initials and\n * the automatic colour are both computed from the name, which is arithmetic no\n * stylesheet can do. A disabled link has no native equivalent of a disabled\n * button, so it is turned inert by hand (its `href` is removed, `aria-disabled`\n * announces the state and the click handler is dropped). Finally the attributes\n * the consumer passes are split so that `style` never reaches the element\n * directly: the component has to merge its own `--avatar-hue`/`--custom-color`\n * into it first, and a plain fallthrough would overwrite them.\n */\ninterface AvatarProps {\n /** Image URL (priority 1). */\n src?: string\n /** Icon shown in the absence of an image (priority 2): a name, or an explicit render. */\n icon?: IconSource\n /** Full name — the default alt, the source of the initials and the seed of the auto hue. */\n name?: string\n /** Explicit alt/label (wins over `name`). */\n alt?: string\n /**\n * Custom colour (hex, CSS name or oklch()) which REPLACES the auto hue: set inline\n * as `--custom-color`. Otherwise, in the absence of an image, a deterministic OKLCH\n * hue is derived from `name`.\n */\n color?: string\n /** Default `md`. `undefined` = inherited from an enclosing VAvatarGroup. */\n size?: AvatarSize\n /** Height reduced by 4px (like the other controls). */\n compact?: boolean\n /** Rendered as `<a>`. disabled → an inert link (href removed + aria-disabled). */\n href?: string\n /** Rendered as `<button type=\"button\">` (a VTooltip's #trigger slot plugs in through fallthrough). */\n clickable?: boolean\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n src: undefined,\n icon: undefined,\n name: undefined,\n alt: undefined,\n color: undefined,\n size: undefined,\n compact: false,\n href: undefined,\n clickable: false,\n disabled: false,\n})\n\ndefineSlots<{\n /** Fallback content (replaces the initials), e.g. VAvatarGroup's \"+X\". */\n default?(): unknown\n}>()\n\ndefineOptions({ inheritAttrs: false })\n\nconst attrs = useAttrs()\nconst group = inject(avatarGroupKey, null)\n\n// Size/compact: the explicit prop, else the group's, else the default.\nconst resolvedSize = computed<AvatarSize>(() => props.size ?? group?.size ?? 'md')\nconst resolvedCompact = computed(() => props.compact || (group?.compact ?? false))\n\n/* Interactivity priority: href > clickable > static. */\nconst isLink = computed(() => props.href !== undefined)\nconst isInteractive = computed(() => isLink.value || props.clickable)\nconst tag = computed(() => (isLink.value ? 'a' : props.clickable ? 'button' : 'span'))\nconst isInertLink = computed(() => isLink.value && props.disabled)\n\n// @fallback — the image failed to load: the initials take over, so an avatar is\n// never an empty box.\nconst failed = ref(false)\nwatch(\n () => props.src,\n () => {\n failed.value = false\n },\n)\nconst showImage = computed(() => Boolean(props.src) && !failed.value)\n\nconst accessibleName = computed(() => props.alt ?? props.name)\n\nconst initials = computed(() => {\n if (!props.name) return ''\n return props.name\n .split(/\\s+/)\n .slice(0, 2)\n .map((part) => part[0]?.toLocaleUpperCase() ?? '')\n .join('')\n})\n\n/*\n * Auto hue: a pure JS hash of the name → an OKLCH hue (0–359). Only the hue is\n * inline (a unitless scalar); the CSS composes background/text with L/C fixed per\n * theme (light/dark adaptation without depending on contrast-color). A colour\n * computed outside the tokens, a deliberate exception. SSR-safe: no browser API.\n */\nconst hue = computed(() => {\n if (!props.name) return null\n let hash = 0\n for (let i = 0; i < props.name.length; i++) {\n hash = (hash * 31 + props.name.charCodeAt(i)) | 0\n }\n return Math.abs(hash) % 360\n})\nconst isAuto = computed(() => props.color === undefined && hue.value !== null)\n\nconst rootStyle = computed<StyleValue>(() => [\n props.color !== undefined\n ? { '--custom-color': props.color }\n : isAuto.value\n ? { '--avatar-hue': String(hue.value) }\n : undefined,\n attrs.style as StyleValue,\n])\n\n// Fallthrough without `style` (handled by rootStyle); onClick removed on an inert link.\nconst passedAttrs = computed(() => {\n const rest = { ...(attrs as Record<string, unknown>) }\n delete rest.style\n if (isInertLink.value) delete rest.onClick\n return rest\n})\n</script>\n\n<template>\n <component\n :is=\"tag\"\n v-bind=\"passedAttrs\"\n class=\"v-avatar v-control\"\n :style=\"rootStyle\"\n :data-size=\"resolvedSize\"\n :data-compact=\"resolvedCompact ? '' : undefined\"\n :data-custom=\"color !== undefined ? '' : undefined\"\n :data-auto=\"isAuto ? '' : undefined\"\n :href=\"isLink && !disabled ? href : undefined\"\n :type=\"tag === 'button' ? 'button' : undefined\"\n :disabled=\"tag === 'button' ? disabled : undefined\"\n :aria-disabled=\"isInertLink ? 'true' : undefined\"\n :role=\"!isInteractive && !showImage && accessibleName ? 'img' : undefined\"\n :aria-label=\"!showImage ? accessibleName : undefined\"\n >\n <img\n v-if=\"showImage\"\n class=\"v-avatar-image\"\n :src=\"src\"\n :alt=\"alt ?? name ?? ''\"\n @error=\"failed = true\"\n />\n <VIcon v-else-if=\"icon\" v-bind=\"iconProps(icon)\" class=\"v-avatar-icon\" />\n <slot v-else>\n <span class=\"v-avatar-initials\" aria-hidden=\"true\">{{ initials }}</span>\n </slot>\n </component>\n</template>\n\n<style>\n@layer vectis.components {\n .v-avatar {\n --avatar-bg: var(--vectis-color-surface-muted);\n --avatar-text: var(--vectis-color-text-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--control-height);\n block-size: var(--control-height);\n flex: none;\n overflow: hidden;\n padding: 0;\n border: none;\n background: var(--avatar-bg);\n color: var(--avatar-text);\n border-radius: var(--vectis-radius-full);\n font-family: var(--vectis-text-family);\n font-size: var(--control-font-size);\n font-weight: var(--vectis-font-weight-semibold);\n line-height: var(--vectis-text-control-leading);\n text-decoration: none;\n user-select: none;\n box-shadow: 0 0 0 var(--vectis-control-size-avatar-ring) var(--avatar-ring-color, transparent);\n transition:\n background-color var(--vectis-duration-fast) var(--vectis-ease-default),\n box-shadow var(--vectis-duration-fast) var(--vectis-ease-default);\n }\n\n /* Auto hue */\n .v-avatar[data-auto] {\n --avatar-bg: oklch(0.9 0.06 var(--avatar-hue));\n --avatar-text: oklch(0.42 0.13 var(--avatar-hue));\n }\n\n /* Custom colour (--custom-color inline): wins, with a fixed white text (contrast\n is the consumer's responsibility). */\n .v-avatar[data-custom] {\n --avatar-bg: var(--custom-color);\n --avatar-text: var(--vectis-color-text-on-accent);\n }\n\n [data-theme='dark'] .v-avatar[data-auto] {\n --avatar-bg: oklch(0.42 0.09 var(--avatar-hue));\n --avatar-text: oklch(0.92 0.05 var(--avatar-hue));\n }\n\n .v-avatar-image {\n inline-size: 100%;\n block-size: 100%;\n object-fit: cover;\n }\n\n /* The icon occupies ~55% of the disc (a unitless ratio, like the font-size). */\n .v-avatar-icon {\n --vectis-icon-size: calc(var(--control-height) * 0.55);\n }\n\n :is(a, button).v-avatar {\n cursor: pointer;\n }\n\n :is(a, button).v-avatar:hover:not([aria-disabled='true'], :disabled) {\n background: color-mix(in oklab, var(--avatar-bg), var(--vectis-color-text) 10%);\n }\n\n :is(a, button).v-avatar:focus-visible {\n outline: var(--vectis-focus-ring-width) solid var(--vectis-focus-ring-color);\n outline-offset: var(--vectis-focus-ring-offset);\n }\n\n .v-avatar:is(:disabled, [aria-disabled='true']) {\n cursor: not-allowed;\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-subtle);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .v-avatar {\n transition: none;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDA,IAAM,IAAQ,GAoBR,IAAQ,EAAS,GACjB,IAAQ,EAAO,GAAgB,IAAI,GAGnC,IAAe,QAA2B,EAAM,QAAQ,GAAO,QAAQ,IAAI,GAC3E,IAAkB,QAAe,EAAM,YAAY,GAAO,WAAW,GAAM,GAG3E,IAAS,QAAe,EAAM,SAAS,KAAA,CAAS,GAChD,IAAgB,QAAe,EAAO,SAAS,EAAM,SAAS,GAC9D,IAAM,QAAgB,EAAO,QAAQ,MAAM,EAAM,YAAY,WAAW,MAAO,GAC/E,IAAc,QAAe,EAAO,SAAS,EAAM,QAAQ,GAI3D,IAAS,EAAI,EAAK;EACxB,QACQ,EAAM,WACN;GACJ,EAAO,QAAQ;EACjB,CACF;EACA,IAAM,IAAY,QAAe,EAAQ,EAAM,OAAQ,CAAC,EAAO,KAAK,GAE9D,IAAiB,QAAe,EAAM,OAAO,EAAM,IAAI,GAEvD,IAAW,QACV,EAAM,OACJ,EAAM,KACV,MAAM,KAAK,CAAA,CACX,MAAM,GAAG,CAAC,CAAA,CACV,KAAK,MAAS,EAAK,EAAE,EAAE,kBAAkB,KAAK,EAAE,CAAA,CAChD,KAAK,EAAE,IALc,EAMzB,GAQK,IAAM,QAAe;GACzB,IAAI,CAAC,EAAM,MAAM,OAAO;GACxB,IAAI,IAAO;GACX,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,KAAK,QAAQ,KACrC,IAAQ,IAAO,KAAK,EAAM,KAAK,WAAW,CAAC,IAAK;GAElD,OAAO,KAAK,IAAI,CAAI,IAAI;EAC1B,CAAC,GACK,IAAS,QAAe,EAAM,UAAU,KAAA,KAAa,EAAI,UAAU,IAAI,GAEvE,IAAY,QAA2B,CAC3C,EAAM,UAAU,KAAA,IAEZ,EAAO,QACL,EAAE,gBAAgB,OAAO,EAAI,KAAK,EAAE,IACpC,KAAA,IAHF,EAAE,kBAAkB,EAAM,MAAM,GAIpC,EAAM,KACR,CAAC,GAGK,IAAc,QAAe;GACjC,IAAM,IAAO,EAAE,GAAI,EAAkC;GAGrD,OAFA,OAAO,EAAK,OACR,EAAY,SAAO,OAAO,EAAK,SAC5B;EACT,CAAC;yBAIC,EA2BY,EA1BL,EAAA,KAAG,GADV,EAEU,EAyBE,OAzBS;GACnB,OAAM;GACL,OAAO,EAAA;GACP,aAAW,EAAA;GACX,gBAAc,EAAA,QAAe,KAAQ,KAAA;GACrC,eAAa,EAAA,UAAU,KAAA,IAAiB,KAAA,IAAR;GAChC,aAAW,EAAA,QAAM,KAAQ,KAAA;GACzB,MAAM,EAAA,SAAM,CAAK,EAAA,WAAW,EAAA,OAAO,KAAA;GACnC,MAAM,EAAA,UAAG,WAAA,WAA2B,KAAA;GACpC,UAAU,EAAA,UAAG,WAAgB,EAAA,WAAW,KAAA;GACxC,iBAAe,EAAA,QAAW,SAAY,KAAA;GACtC,MAAI,CAAG,EAAA,SAAa,CAAK,EAAA,SAAa,EAAA,QAAc,QAAW,KAAA;GAC/D,cAAa,EAAA,QAA6B,KAAA,IAAjB,EAAA;;oBAQxB,CALM,EAAA,SAAA,EAAA,GADR,EAME,OAAA;;IAJA,OAAM;IACL,KAAK,EAAA;IACL,KAAK,EAAA,OAAO,EAAA,QAAI;IAChB,SAAK,AAAA,EAAA,QAAA,MAAE,EAAA,QAAM;sBAEE,EAAA,QAAA,EAAA,GAAlB,EAAyE,GAAzE,EAAyE,EAAA,KAAA,EAAA,GAAzC,EAAA,CAAA,CAAS,CAAC,EAAA,IAAI,GAAA,EAAG,OAAM,gBAAe,CAAA,GAAA,MAAA,EAAA,KACtE,EAEO,EAAA,QAAA,WAAA,CAAA,SAAA,CADL,EAAwE,QAAxE,GAAwE,EAAlB,EAAA,KAAQ,GAAA,CAAA,CAAA,GAAA,KAAA,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
+
@layer vectis.components{.v-avatar-group{--avatar-ring-color:var(--vectis-color-surface);align-items:center;display:inline-flex}.v-avatar-group>*+*{margin-inline-start:calc(var(--control-height) * -.3)}.v-avatar-group>:hover,.v-avatar-group>:focus-within{z-index:1}}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AvatarSize } from './VAvatar.js';
|
|
2
|
+
/**
|
|
3
|
+
* Stacks several VAvatars into an overlapping row, the usual way of showing the
|
|
4
|
+
* members of a team or the participants in a conversation. Each disc bites into the
|
|
5
|
+
* one before it and, coming later in the document, is painted over it: the
|
|
6
|
+
* browser's own paint order does the work, no positioning code is involved. A ring
|
|
7
|
+
* in `--avatar-ring-color` surrounds every disc so the overlapping edges stay
|
|
8
|
+
* distinct from one another.
|
|
9
|
+
*
|
|
10
|
+
* Two things here do need JavaScript. Counting the avatars the group was given and
|
|
11
|
+
* keeping only the first few, so that the rest can be summed up as a single "+X"
|
|
12
|
+
* disc, is something neither HTML nor CSS can express. And the size and the density
|
|
13
|
+
* chosen on the group are handed down to the avatars inside through Vue's
|
|
14
|
+
* provide/inject.
|
|
15
|
+
*/
|
|
16
|
+
interface AvatarGroupProps {
|
|
17
|
+
/**
|
|
18
|
+
* How many avatars to show before the remaining ones are summed up as a single
|
|
19
|
+
* "+X" disc. Left out, or set to 0, every avatar is shown.
|
|
20
|
+
*/
|
|
21
|
+
max?: number;
|
|
22
|
+
/**
|
|
23
|
+
* The size given to the avatars inside the group. An avatar that sets a `size`
|
|
24
|
+
* of its own keeps it.
|
|
25
|
+
*/
|
|
26
|
+
size?: AvatarSize;
|
|
27
|
+
/** Applies the reduced density to the avatars inside, on the same terms as `size`. */
|
|
28
|
+
compact?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* The colour of the ring drawn around each disc. It defaults to the page
|
|
31
|
+
* background, which is what makes the ring read as a gap between two avatars.
|
|
32
|
+
*/
|
|
33
|
+
ringColor?: string;
|
|
34
|
+
}
|
|
35
|
+
type __VLS_Slots = {
|
|
36
|
+
/** The VAvatars to stack. */
|
|
37
|
+
default?(): unknown;
|
|
38
|
+
/**
|
|
39
|
+
* Replaces the "+X" disc that stands for the avatars beyond `max`. It receives
|
|
40
|
+
* `count`, the number of avatars being hidden.
|
|
41
|
+
*/
|
|
42
|
+
overflow?(props: {
|
|
43
|
+
count: number;
|
|
44
|
+
}): unknown;
|
|
45
|
+
};
|
|
46
|
+
declare const __VLS_base: import('vue').DefineComponent<AvatarGroupProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AvatarGroupProps> & Readonly<{}>, {
|
|
47
|
+
size: AvatarSize;
|
|
48
|
+
compact: boolean;
|
|
49
|
+
max: number;
|
|
50
|
+
ringColor: string;
|
|
51
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
52
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
53
|
+
declare const _default: typeof __VLS_export;
|
|
54
|
+
export default _default;
|
|
55
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
56
|
+
new (): {
|
|
57
|
+
$slots: S;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import './VAvatarGroup.css';
|
|
2
|
+
import e from "./VAvatarGroup.vue_vue_type_script_setup_true_lang.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/components/VAvatar/VAvatarGroup.vue
|
|
5
|
+
var t = e;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { t as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=VAvatarGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAvatarGroup.js","names":[],"sources":["../../../src/components/VAvatar/VAvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\nimport type { StyleValue } from 'vue'\n\nimport VAvatar from './VAvatar.vue'\nimport type { AvatarSize } from './VAvatar.vue'\nimport { avatarGroupKey } from './context'\n\nimport { flattenSlot } from '../../utils/vnode'\n\n// @ssr @core — the number of avatars is read from the slot's VNODES through\n// `flattenSlot`, never from a registry the children would fill at mount: such a\n// registry is empty during the server render and full on the client, which is a\n// hydration mismatch.\n/**\n * Stacks several VAvatars into an overlapping row, the usual way of showing the\n * members of a team or the participants in a conversation. Each disc bites into the\n * one before it and, coming later in the document, is painted over it: the\n * browser's own paint order does the work, no positioning code is involved. A ring\n * in `--avatar-ring-color` surrounds every disc so the overlapping edges stay\n * distinct from one another.\n *\n * Two things here do need JavaScript. Counting the avatars the group was given and\n * keeping only the first few, so that the rest can be summed up as a single \"+X\"\n * disc, is something neither HTML nor CSS can express. And the size and the density\n * chosen on the group are handed down to the avatars inside through Vue's\n * provide/inject.\n */\ninterface AvatarGroupProps {\n /**\n * How many avatars to show before the remaining ones are summed up as a single\n * \"+X\" disc. Left out, or set to 0, every avatar is shown.\n */\n max?: number\n /**\n * The size given to the avatars inside the group. An avatar that sets a `size`\n * of its own keeps it.\n */\n size?: AvatarSize\n /** Applies the reduced density to the avatars inside, on the same terms as `size`. */\n compact?: boolean\n /**\n * The colour of the ring drawn around each disc. It defaults to the page\n * background, which is what makes the ring read as a gap between two avatars.\n */\n ringColor?: string\n}\n\nconst props = withDefaults(defineProps<AvatarGroupProps>(), {\n max: undefined,\n size: undefined,\n compact: false,\n ringColor: undefined,\n})\n\ndefineSlots<{\n /** The VAvatars to stack. */\n default?(): unknown\n /**\n * Replaces the \"+X\" disc that stands for the avatars beyond `max`. It receives\n * `count`, the number of avatars being hidden.\n */\n overflow?(props: { count: number }): unknown\n}>()\n\nprovide(avatarGroupKey, {\n get size() {\n return props.size\n },\n get compact() {\n return props.compact\n },\n})\n\nconst slots = useSlots()\n\nconst items = computed(() => flattenSlot(slots.default?.()))\nconst visibleItems = computed(() =>\n props.max != null ? items.value.slice(0, props.max) : items.value,\n)\nconst overflowCount = computed(() => items.value.length - visibleItems.value.length)\n\n// A functional component is the only way to render VNodes that have already been\n// captured: <component :is> expects a component definition, not a vnode.\nconst VisibleAvatars = () => visibleItems.value\n\nconst rootStyle = computed<StyleValue>(() =>\n props.ringColor !== undefined ? { '--avatar-ring-color': props.ringColor } : undefined,\n)\n\n// The group carries v-control so that --control-height is defined at ITS level,\n// which keeps the overlap computable even when a child is wrapped — a VTooltip, for\n// instance, inserts a <span> between the group and the VAvatar. An avatar given a\n// size of its own redefines --control-height on itself, so its own overlap follows\n// that size rather than the group's.\nconst resolvedGroupSize = computed<AvatarSize>(() => props.size ?? 'md')\n</script>\n\n<template>\n <div\n class=\"v-avatar-group v-control\"\n role=\"group\"\n :style=\"rootStyle\"\n :data-size=\"resolvedGroupSize\"\n :data-compact=\"compact ? '' : undefined\"\n >\n <component :is=\"VisibleAvatars\" />\n <slot v-if=\"overflowCount > 0\" name=\"overflow\" :count=\"overflowCount\">\n <VAvatar>+{{ overflowCount }}</VAvatar>\n </slot>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-avatar-group {\n /* The separation ring, declared here so that every child .v-avatar inherits it. */\n --avatar-ring-color: var(--vectis-color-surface);\n display: inline-flex;\n align-items: center;\n }\n\n /* The overlap itself: each disc bites into the previous one by a fraction of its\n own height, and the DOM order is what makes the following one paint over it.\n The selector deliberately targets the direct child whatever it is — a bare\n VAvatar as well as a VTooltip wrapper — which is why --control-height has to\n come from the group; an avatar carrying its own size overrides it on itself.\n The ratio is unitless so it scales with whichever height applies. */\n .v-avatar-group > * + * {\n margin-inline-start: calc(var(--control-height) * -0.3);\n }\n\n /* On hover, or as soon as something inside it takes focus, a disc rises above its\n neighbours so it is seen whole rather than clipped by the next one. */\n .v-avatar-group > *:hover,\n .v-avatar-group > *:focus-within {\n z-index: 1;\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { avatarGroupKey as e } from "./context.js";
|
|
2
|
+
import t from "./VAvatar.js";
|
|
3
|
+
import { flattenSlot as n } from "../../utils/vnode.js";
|
|
4
|
+
import { computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createTextVNode as s, createVNode as c, defineComponent as l, normalizeStyle as u, openBlock as d, provide as f, renderSlot as p, resolveDynamicComponent as m, toDisplayString as h, useSlots as g, withCtx as _ } from "vue";
|
|
5
|
+
//#region src/components/VAvatar/VAvatarGroup.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var v = ["data-size", "data-compact"], y = /*@__PURE__*/ l({
|
|
7
|
+
__name: "VAvatarGroup",
|
|
8
|
+
props: {
|
|
9
|
+
max: { default: void 0 },
|
|
10
|
+
size: { default: void 0 },
|
|
11
|
+
compact: {
|
|
12
|
+
type: Boolean,
|
|
13
|
+
default: !1
|
|
14
|
+
},
|
|
15
|
+
ringColor: { default: void 0 }
|
|
16
|
+
},
|
|
17
|
+
setup(l) {
|
|
18
|
+
let y = l;
|
|
19
|
+
f(e, {
|
|
20
|
+
get size() {
|
|
21
|
+
return y.size;
|
|
22
|
+
},
|
|
23
|
+
get compact() {
|
|
24
|
+
return y.compact;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
let b = g(), x = r(() => n(b.default?.())), S = r(() => y.max == null ? x.value : x.value.slice(0, y.max)), C = r(() => x.value.length - S.value.length), w = () => S.value, T = r(() => y.ringColor === void 0 ? void 0 : { "--avatar-ring-color": y.ringColor }), E = r(() => y.size ?? "md");
|
|
28
|
+
return (e, n) => (d(), o("div", {
|
|
29
|
+
class: "v-avatar-group v-control",
|
|
30
|
+
role: "group",
|
|
31
|
+
style: u(T.value),
|
|
32
|
+
"data-size": E.value,
|
|
33
|
+
"data-compact": l.compact ? "" : void 0
|
|
34
|
+
}, [(d(), i(m(w))), C.value > 0 ? p(e.$slots, "overflow", { count: C.value }, () => [c(t, null, {
|
|
35
|
+
default: _(() => [s("+" + h(C.value), 1)]),
|
|
36
|
+
_: 1
|
|
37
|
+
})], void 0, 0) : a("", !0)], 12, v));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//#endregion
|
|
41
|
+
export { y as default };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VAvatarGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VAvatar/VAvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, provide, useSlots } from 'vue'\nimport type { StyleValue } from 'vue'\n\nimport VAvatar from './VAvatar.vue'\nimport type { AvatarSize } from './VAvatar.vue'\nimport { avatarGroupKey } from './context'\n\nimport { flattenSlot } from '../../utils/vnode'\n\n// @ssr @core — the number of avatars is read from the slot's VNODES through\n// `flattenSlot`, never from a registry the children would fill at mount: such a\n// registry is empty during the server render and full on the client, which is a\n// hydration mismatch.\n/**\n * Stacks several VAvatars into an overlapping row, the usual way of showing the\n * members of a team or the participants in a conversation. Each disc bites into the\n * one before it and, coming later in the document, is painted over it: the\n * browser's own paint order does the work, no positioning code is involved. A ring\n * in `--avatar-ring-color` surrounds every disc so the overlapping edges stay\n * distinct from one another.\n *\n * Two things here do need JavaScript. Counting the avatars the group was given and\n * keeping only the first few, so that the rest can be summed up as a single \"+X\"\n * disc, is something neither HTML nor CSS can express. And the size and the density\n * chosen on the group are handed down to the avatars inside through Vue's\n * provide/inject.\n */\ninterface AvatarGroupProps {\n /**\n * How many avatars to show before the remaining ones are summed up as a single\n * \"+X\" disc. Left out, or set to 0, every avatar is shown.\n */\n max?: number\n /**\n * The size given to the avatars inside the group. An avatar that sets a `size`\n * of its own keeps it.\n */\n size?: AvatarSize\n /** Applies the reduced density to the avatars inside, on the same terms as `size`. */\n compact?: boolean\n /**\n * The colour of the ring drawn around each disc. It defaults to the page\n * background, which is what makes the ring read as a gap between two avatars.\n */\n ringColor?: string\n}\n\nconst props = withDefaults(defineProps<AvatarGroupProps>(), {\n max: undefined,\n size: undefined,\n compact: false,\n ringColor: undefined,\n})\n\ndefineSlots<{\n /** The VAvatars to stack. */\n default?(): unknown\n /**\n * Replaces the \"+X\" disc that stands for the avatars beyond `max`. It receives\n * `count`, the number of avatars being hidden.\n */\n overflow?(props: { count: number }): unknown\n}>()\n\nprovide(avatarGroupKey, {\n get size() {\n return props.size\n },\n get compact() {\n return props.compact\n },\n})\n\nconst slots = useSlots()\n\nconst items = computed(() => flattenSlot(slots.default?.()))\nconst visibleItems = computed(() =>\n props.max != null ? items.value.slice(0, props.max) : items.value,\n)\nconst overflowCount = computed(() => items.value.length - visibleItems.value.length)\n\n// A functional component is the only way to render VNodes that have already been\n// captured: <component :is> expects a component definition, not a vnode.\nconst VisibleAvatars = () => visibleItems.value\n\nconst rootStyle = computed<StyleValue>(() =>\n props.ringColor !== undefined ? { '--avatar-ring-color': props.ringColor } : undefined,\n)\n\n// The group carries v-control so that --control-height is defined at ITS level,\n// which keeps the overlap computable even when a child is wrapped — a VTooltip, for\n// instance, inserts a <span> between the group and the VAvatar. An avatar given a\n// size of its own redefines --control-height on itself, so its own overlap follows\n// that size rather than the group's.\nconst resolvedGroupSize = computed<AvatarSize>(() => props.size ?? 'md')\n</script>\n\n<template>\n <div\n class=\"v-avatar-group v-control\"\n role=\"group\"\n :style=\"rootStyle\"\n :data-size=\"resolvedGroupSize\"\n :data-compact=\"compact ? '' : undefined\"\n >\n <component :is=\"VisibleAvatars\" />\n <slot v-if=\"overflowCount > 0\" name=\"overflow\" :count=\"overflowCount\">\n <VAvatar>+{{ overflowCount }}</VAvatar>\n </slot>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-avatar-group {\n /* The separation ring, declared here so that every child .v-avatar inherits it. */\n --avatar-ring-color: var(--vectis-color-surface);\n display: inline-flex;\n align-items: center;\n }\n\n /* The overlap itself: each disc bites into the previous one by a fraction of its\n own height, and the DOM order is what makes the following one paint over it.\n The selector deliberately targets the direct child whatever it is — a bare\n VAvatar as well as a VTooltip wrapper — which is why --control-height has to\n come from the group; an avatar carrying its own size overrides it on itself.\n The ratio is unitless so it scales with whichever height applies. */\n .v-avatar-group > * + * {\n margin-inline-start: calc(var(--control-height) * -0.3);\n }\n\n /* On hover, or as soon as something inside it takes focus, a disc rises above its\n neighbours so it is seen whole rather than clipped by the next one. */\n .v-avatar-group > *:hover,\n .v-avatar-group > *:focus-within {\n z-index: 1;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;EAgDA,IAAM,IAAQ;EAiBd,EAAQ,GAAgB;GACtB,IAAI,OAAO;IACT,OAAO,EAAM;GACf;GACA,IAAI,UAAU;IACZ,OAAO,EAAM;GACf;EACF,CAAC;EAED,IAAM,IAAQ,EAAS,GAEjB,IAAQ,QAAe,EAAY,EAAM,UAAU,CAAC,CAAC,GACrD,IAAe,QACnB,EAAM,OAAO,OAAyC,EAAM,QAAxC,EAAM,MAAM,MAAM,GAAG,EAAM,GAAG,CACpD,GACM,IAAgB,QAAe,EAAM,MAAM,SAAS,EAAa,MAAM,MAAM,GAI7E,UAAuB,EAAa,OAEpC,IAAY,QAChB,EAAM,cAAc,KAAA,IAAyD,KAAA,IAA7C,EAAE,uBAAuB,EAAM,UAAU,CAC3E,GAOM,IAAoB,QAA2B,EAAM,QAAQ,IAAI;yBAIrE,EAWM,OAAA;GAVJ,OAAM;GACN,MAAK;GACJ,OAAK,EAAE,EAAA,KAAS;GAChB,aAAW,EAAA;GACX,gBAAc,EAAA,UAAO,KAAQ,KAAA;YAE9B,EAAkC,EAAlB,CAAc,CAAA,IAClB,EAAA,QAAa,IAAzB,EAEO,EAAA,QAAA,YAAA,EAFyC,OAAO,EAAA,MAAa,SAE7D,CADL,EAAuC,GAAA,MAAA;oBAA7B,CAAA,EAAD,MAAC,EAAG,EAAA,KAAa,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InjectionKey } from 'vue';
|
|
2
|
+
import { AvatarSize } from './VAvatar.js';
|
|
3
|
+
/**
|
|
4
|
+
* This is what a VAvatarGroup passes down to the VAvatars it contains. Sizing a
|
|
5
|
+
* row of avatars is a decision that belongs to the row, so the group announces
|
|
6
|
+
* its size and its compact density once and every avatar inside picks them up,
|
|
7
|
+
* instead of the writer repeating the same two props on each one.
|
|
8
|
+
*
|
|
9
|
+
* The values are only a fallback: an avatar that was given an explicit prop keeps
|
|
10
|
+
* it, an avatar that was not takes the group's, and one that has neither falls
|
|
11
|
+
* back to the default size (`props.size ?? group.size ?? 'md'`).
|
|
12
|
+
*/
|
|
13
|
+
export interface AvatarGroupContext {
|
|
14
|
+
size?: AvatarSize;
|
|
15
|
+
compact?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const avatarGroupKey: InjectionKey<AvatarGroupContext>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/VAvatar/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\n\nimport type { AvatarSize } from './VAvatar.vue'\n\n/**\n * This is what a VAvatarGroup passes down to the VAvatars it contains. Sizing a\n * row of avatars is a decision that belongs to the row, so the group announces\n * its size and its compact density once and every avatar inside picks them up,\n * instead of the writer repeating the same two props on each one.\n *\n * The values are only a fallback: an avatar that was given an explicit prop keeps\n * it, an avatar that was not takes the group's, and one that has neither falls\n * back to the default size (`props.size ?? group.size ?? 'md'`).\n */\nexport interface AvatarGroupContext {\n size?: AvatarSize\n compact?: boolean\n}\n\nexport const avatarGroupKey: InjectionKey<AvatarGroupContext> = Symbol('v-avatar-group')\n"],"mappings":";AAmBA,IAAa,IAAmD,OAAO,gBAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
+
@layer vectis.components{.v-badge-host{align-items:center;gap:var(--vectis-space-2);display:inline-flex;position:relative}.v-badge{--vectis-icon-size:var(--vectis-icon-size-sm);--vectis-icon-opsz:20;height:var(--vectis-control-size-badge-h);min-width:var(--vectis-control-size-badge-h);padding-inline:var(--vectis-space-1);border-radius:var(--vectis-radius-pill);background:var(--badge-bg);font-family:var(--vectis-text-family);font-size:var(--vectis-text-caption-size);font-weight:var(--vectis-text-control-weight);line-height:var(--vectis-text-control-leading);color:var(--tone-text-fallback);justify-content:center;align-items:center;display:inline-flex}@supports (color:contrast-color(red)){.v-badge{color:contrast-color(var(--badge-bg))}}.v-badge[data-tone=accent]{--badge-bg:var(--vectis-color-accent);--tone-text-fallback:var(--vectis-color-text-on-accent)}.v-badge[data-tone=danger]{--badge-bg:var(--vectis-color-danger);--tone-text-fallback:var(--vectis-color-text-on-accent)}.v-badge[data-tone=success]{--badge-bg:var(--vectis-color-success);--tone-text-fallback:var(--vectis-color-text-on-accent)}.v-badge[data-tone=warning]{--badge-bg:var(--vectis-color-warning);--tone-text-fallback:var(--vectis-color-text-on-warning)}.v-badge[data-tone=neutral]{--badge-bg:var(--vectis-color-text);--tone-text-fallback:var(--vectis-color-surface)}.v-badge[data-custom]{--badge-bg:var(--custom-color);--tone-text-fallback:var(--vectis-color-text-on-accent)}.v-badge[data-icon-only]{padding:0}.v-badge[data-dot]{width:var(--vectis-control-size-badge-dot);height:var(--vectis-control-size-badge-dot);min-width:0;padding:0}.v-badge[data-bordered]{box-shadow:0 0 0 2px var(--vectis-color-surface)}.v-badge-host[data-overlay]>.v-badge{--badge-overlay-x:25%;--badge-overlay-y:-25%;translate:var(--badge-overlay-x) var(--badge-overlay-y);position:absolute;inset-block:0 auto;inset-inline-end:0}.v-badge-host[data-overlay][data-overlay-position=bottom]>.v-badge{--badge-overlay-y:25%;inset-block:auto 0}.v-badge-host[data-overlay]:dir(rtl)>.v-badge{--badge-overlay-x:-25%}}
|