vectis-ui 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/VAccordion/VAccordion.css +1 -1
- package/dist/components/VAccordion/VAccordion.d.ts +6 -5
- package/dist/components/VAccordion/VAccordion.js.map +1 -1
- package/dist/components/VAccordion/VAccordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.css +1 -1
- package/dist/components/VAccordion/VAccordionItem.d.ts +1 -1
- package/dist/components/VAccordion/VAccordionItem.js.map +1 -1
- package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VAlert/VAlert.css +2 -0
- package/dist/components/VAlert/VAlert.d.ts +73 -0
- package/dist/components/VAlert/VAlert.js +9 -0
- package/dist/components/VAlert/VAlert.js.map +1 -0
- package/dist/components/VAlert/VAlert.vue_vue_type_script_setup_true_lang.js +96 -0
- package/dist/components/VAlert/VAlert.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VAvatar/VAvatar.d.ts +2 -2
- package/dist/components/VAvatar/VAvatarGroup.d.ts +1 -1
- package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/VBadge/VBadge.d.ts +3 -3
- package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/components/VButton/VButton.d.ts +4 -4
- package/dist/components/VButton/VButtonGroup.css +1 -1
- package/dist/components/VButton/VButtonGroup.d.ts +2 -2
- package/dist/components/VButton/VButtonGroup.js.map +1 -1
- package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendar.css +1 -1
- package/dist/components/VCalendar/VCalendar.d.ts +7 -1
- package/dist/components/VCalendar/VCalendar.js.map +1 -1
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js +20 -18
- package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.js.map +1 -1
- package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.css +1 -1
- package/dist/components/VCalendar/VCalendarMonth.d.ts +2 -2
- package/dist/components/VCalendar/VCalendarMonth.js.map +1 -1
- package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.css +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.d.ts +3 -3
- package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -1
- package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.css +1 -1
- package/dist/components/VCalendar/VCalendarYear.js.map +1 -1
- package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCalendar/gesture.d.ts +1 -16
- package/dist/components/VCalendar/gesture.js +1 -1
- package/dist/components/VCalendar/gesture.js.map +1 -1
- package/dist/components/VCalendar/types.d.ts +2 -0
- package/dist/components/VCard/VCard.css +2 -0
- package/dist/components/VCard/VCard.d.ts +87 -0
- package/dist/components/VCard/VCard.js +9 -0
- package/dist/components/VCard/VCard.js.map +1 -0
- package/dist/components/VCard/VCard.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/VCard/VCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCarousel/VCarousel.d.ts +1 -1
- package/dist/components/VCarousel/VCarousel.js.map +1 -1
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCheckbox/VCheckMark.css +2 -0
- package/dist/components/VCheckbox/VCheckMark.js +9 -0
- package/dist/components/VCheckbox/VCheckMark.js.map +1 -0
- package/dist/components/VCheckbox/VCheckMark.vue_vue_type_script_setup_true_lang.js +33 -0
- package/dist/components/VCheckbox/VCheckMark.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCheckbox/VCheckbox.css +1 -1
- package/dist/components/VCheckbox/VCheckbox.d.ts +8 -3
- package/dist/components/VCheckbox/VCheckbox.js.map +1 -1
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js +54 -69
- package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VChip/VChip.d.ts +6 -6
- package/dist/components/VChip/VChip.js.map +1 -1
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js +26 -26
- package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VColorInput/VColorInput.css +2 -0
- package/dist/components/VColorInput/VColorInput.d.ts +113 -0
- package/dist/components/VColorInput/VColorInput.js +9 -0
- package/dist/components/VColorInput/VColorInput.js.map +1 -0
- package/dist/components/VColorInput/VColorInput.vue_vue_type_script_setup_true_lang.js +230 -0
- package/dist/components/VColorInput/VColorInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VColorPicker/VColorPicker.css +2 -0
- package/dist/components/VColorPicker/VColorPicker.d.ts +67 -0
- package/dist/components/VColorPicker/VColorPicker.js +9 -0
- package/dist/components/VColorPicker/VColorPicker.js.map +1 -0
- package/dist/components/VColorPicker/VColorPicker.vue_vue_type_script_setup_true_lang.js +390 -0
- package/dist/components/VColorPicker/VColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VColorPicker/color.d.ts +42 -0
- package/dist/components/VColorPicker/color.js +158 -0
- package/dist/components/VColorPicker/color.js.map +1 -0
- package/dist/components/VCombobox/VCombobox.css +1 -1
- package/dist/components/VCombobox/VCombobox.d.ts +46 -60
- package/dist/components/VCombobox/VCombobox.js.map +1 -1
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +271 -372
- package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VCommandPalette/VCommandPalette.css +2 -0
- package/dist/components/VCommandPalette/VCommandPalette.d.ts +163 -0
- package/dist/components/VCommandPalette/VCommandPalette.js +9 -0
- package/dist/components/VCommandPalette/VCommandPalette.js.map +1 -0
- package/dist/components/VCommandPalette/VCommandPalette.vue_vue_type_script_setup_true_lang.js +321 -0
- package/dist/components/VCommandPalette/VCommandPalette.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.css +2 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.d.ts +38 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.js +9 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.js.map +1 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.vue_vue_type_script_setup_true_lang.js +69 -0
- package/dist/components/VCommandPalette/VCommandPaletteItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VContextMenu/VContextMenu.css +2 -0
- package/dist/components/VContextMenu/VContextMenu.d.ts +66 -0
- package/dist/components/VContextMenu/VContextMenu.js +9 -0
- package/dist/components/VContextMenu/VContextMenu.js.map +1 -0
- package/dist/components/VContextMenu/VContextMenu.vue_vue_type_script_setup_true_lang.js +148 -0
- package/dist/components/VContextMenu/VContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VDataTable/VDataTable.css +1 -1
- package/dist/components/VDataTable/VDataTable.d.ts +41 -16
- package/dist/components/VDataTable/VDataTable.js.map +1 -1
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +307 -195
- package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.d.ts +27 -7
- package/dist/components/VDateInput/VDateInput.js.map +1 -1
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +170 -162
- package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.d.ts +3 -3
- package/dist/components/VDatePicker/VDatePicker.js.map +1 -1
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +228 -227
- package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDatePicker/keyboard.d.ts +7 -7
- package/dist/components/VDatePicker/keyboard.js +8 -6
- package/dist/components/VDatePicker/keyboard.js.map +1 -1
- package/dist/components/VDatePicker/names.js +16 -20
- package/dist/components/VDatePicker/names.js.map +1 -1
- package/dist/components/VDialog/VDialog.d.ts +2 -4
- package/dist/components/VDialog/VDialog.js.map +1 -1
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js +46 -77
- package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VDrawer/VDrawer.css +2 -0
- package/dist/components/VDrawer/VDrawer.d.ts +102 -0
- package/dist/components/VDrawer/VDrawer.js +9 -0
- package/dist/components/VDrawer/VDrawer.js.map +1 -0
- package/dist/components/VDrawer/VDrawer.vue_vue_type_script_setup_true_lang.js +128 -0
- package/dist/components/VDrawer/VDrawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VEmptyState/VEmptyState.css +2 -0
- package/dist/components/VEmptyState/VEmptyState.d.ts +43 -0
- package/dist/components/VEmptyState/VEmptyState.js +9 -0
- package/dist/components/VEmptyState/VEmptyState.js.map +1 -0
- package/dist/components/VEmptyState/VEmptyState.vue_vue_type_script_setup_true_lang.js +48 -0
- package/dist/components/VEmptyState/VEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VField/VField.css +2 -0
- package/dist/components/VField/VField.d.ts +84 -0
- package/dist/components/VField/VField.js +9 -0
- package/dist/components/VField/VField.js.map +1 -0
- package/dist/components/VField/VField.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/components/VField/VField.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VField/VFieldAnnouncer.d.ts +7 -0
- package/dist/components/VField/VFieldAnnouncer.js +7 -0
- package/dist/components/VField/VFieldAnnouncer.js.map +1 -0
- package/dist/components/VField/VFieldAnnouncer.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/components/VField/VFieldAnnouncer.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VField/VFieldMessage.d.ts +11 -0
- package/dist/components/VField/VFieldMessage.js +7 -0
- package/dist/components/VField/VFieldMessage.js.map +1 -0
- package/dist/components/VField/VFieldMessage.vue_vue_type_script_setup_true_lang.js +32 -0
- package/dist/components/VField/VFieldMessage.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VFieldset/VFieldset.css +2 -0
- package/dist/components/VFieldset/VFieldset.d.ts +52 -0
- package/dist/components/VFieldset/VFieldset.js +9 -0
- package/dist/components/VFieldset/VFieldset.js.map +1 -0
- package/dist/components/VFieldset/VFieldset.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/components/VFieldset/VFieldset.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VFileInput/VFileInput.css +1 -1
- package/dist/components/VFileInput/VFileInput.d.ts +31 -7
- package/dist/components/VFileInput/VFileInput.js.map +1 -1
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +168 -161
- package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VFilePicker/VFilePicker.d.ts +4 -4
- package/dist/components/VHotkeys/VHotkeys.css +1 -1
- package/dist/components/VHotkeys/VHotkeys.js.map +1 -1
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js +27 -30
- package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VHotkeys/platform.d.ts +2 -0
- package/dist/components/VHotkeys/platform.js +24 -5
- package/dist/components/VHotkeys/platform.js.map +1 -1
- package/dist/components/VHoverCard/VHoverCard.css +2 -0
- package/dist/components/VHoverCard/VHoverCard.d.ts +62 -0
- package/dist/components/VHoverCard/VHoverCard.js +9 -0
- package/dist/components/VHoverCard/VHoverCard.js.map +1 -0
- package/dist/components/VHoverCard/VHoverCard.vue_vue_type_script_setup_true_lang.js +97 -0
- package/dist/components/VHoverCard/VHoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VIcon/icons/add.d.ts +5 -0
- package/dist/components/VIcon/icons/add.js +9 -0
- package/dist/components/VIcon/icons/add.js.map +1 -0
- package/dist/components/VIcon/icons/colorize.d.ts +5 -0
- package/dist/components/VIcon/icons/colorize.js +9 -0
- package/dist/components/VIcon/icons/colorize.js.map +1 -0
- package/dist/components/VIcon/icons/inbox.d.ts +5 -0
- package/dist/components/VIcon/icons/inbox.js +9 -0
- package/dist/components/VIcon/icons/inbox.js.map +1 -0
- package/dist/components/VIcon/icons/index.d.ts +42 -2
- package/dist/components/VIcon/icons/index.js +88 -72
- package/dist/components/VIcon/icons/index.js.map +1 -1
- package/dist/components/VIcon/icons/names.d.ts +2 -2
- package/dist/components/VIcon/icons/names.js +1 -1
- package/dist/components/VIcon/icons/names.js.map +1 -1
- package/dist/components/VIcon/icons/open_in_new.d.ts +5 -0
- package/dist/components/VIcon/icons/open_in_new.js +9 -0
- package/dist/components/VIcon/icons/open_in_new.js.map +1 -0
- package/dist/components/VIcon/icons/priority_high.d.ts +5 -0
- package/dist/components/VIcon/icons/priority_high.js +9 -0
- package/dist/components/VIcon/icons/priority_high.js.map +1 -0
- package/dist/components/VIcon/icons/remove.d.ts +5 -0
- package/dist/components/VIcon/icons/remove.js +9 -0
- package/dist/components/VIcon/icons/remove.js.map +1 -0
- package/dist/components/VIcon/icons/search_off.d.ts +5 -0
- package/dist/components/VIcon/icons/search_off.js +9 -0
- package/dist/components/VIcon/icons/search_off.js.map +1 -0
- package/dist/components/VIcon/icons/star.d.ts +5 -0
- package/dist/components/VIcon/icons/star.js +9 -0
- package/dist/components/VIcon/icons/star.js.map +1 -0
- package/dist/components/VIconButton/VIconButton.d.ts +4 -4
- package/dist/components/VInput/VInput.css +1 -1
- package/dist/components/VInput/VInput.d.ts +51 -2
- package/dist/components/VInput/VInput.js.map +1 -1
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +129 -106
- package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInput/VInputGroup.css +1 -1
- package/dist/components/VInput/VInputGroup.d.ts +20 -0
- package/dist/components/VInput/VInputGroup.js.map +1 -1
- package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js +50 -51
- package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VInputOTP/VInputOTP.css +1 -1
- package/dist/components/VInputOTP/VInputOTP.d.ts +27 -4
- package/dist/components/VInputOTP/VInputOTP.js.map +1 -1
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +131 -113
- package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VLink/VLink.css +2 -0
- package/dist/components/VLink/VLink.d.ts +53 -0
- package/dist/components/VLink/VLink.js +9 -0
- package/dist/components/VLink/VLink.js.map +1 -0
- package/dist/components/VLink/VLink.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/components/VLink/VLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxChevron.css +2 -0
- package/dist/components/VListbox/VListboxChevron.d.ts +12 -0
- package/dist/components/VListbox/VListboxChevron.js +9 -0
- package/dist/components/VListbox/VListboxChevron.js.map +1 -0
- package/dist/components/VListbox/VListboxChevron.vue_vue_type_script_setup_true_lang.js +25 -0
- package/dist/components/VListbox/VListboxChevron.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxGroup.css +2 -0
- package/dist/components/VListbox/VListboxGroup.d.ts +27 -0
- package/dist/components/VListbox/VListboxGroup.js +9 -0
- package/dist/components/VListbox/VListboxGroup.js.map +1 -0
- package/dist/components/VListbox/VListboxGroup.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/VListbox/VListboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxOption.css +2 -0
- package/dist/components/{VCombobox/VComboboxOption.d.ts → VListbox/VListboxOption.d.ts} +4 -4
- package/dist/components/VListbox/VListboxOption.js +9 -0
- package/dist/components/VListbox/VListboxOption.js.map +1 -0
- package/dist/components/{VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js → VListbox/VListboxOption.vue_vue_type_script_setup_true_lang.js} +6 -6
- package/dist/components/VListbox/VListboxOption.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxPanel.css +2 -0
- package/dist/components/VListbox/VListboxPanel.d.ts +59 -0
- package/dist/components/VListbox/VListboxPanel.js +9 -0
- package/dist/components/VListbox/VListboxPanel.js.map +1 -0
- package/dist/components/VListbox/VListboxPanel.vue_vue_type_script_setup_true_lang.js +123 -0
- package/dist/components/VListbox/VListboxPanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxSeparator.css +2 -0
- package/dist/components/VListbox/VListboxSeparator.d.ts +3 -0
- package/dist/components/VListbox/VListboxSeparator.js +9 -0
- package/dist/components/VListbox/VListboxSeparator.js.map +1 -0
- package/dist/components/{VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js → VListbox/VListboxSeparator.vue_vue_type_script_setup_true_lang.js} +4 -4
- package/dist/components/VListbox/VListboxSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VListbox/VListboxValues.css +2 -0
- package/dist/components/VListbox/VListboxValues.d.ts +52 -0
- package/dist/components/VListbox/VListboxValues.js +9 -0
- package/dist/components/VListbox/VListboxValues.js.map +1 -0
- package/dist/components/VListbox/VListboxValues.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/components/VListbox/VListboxValues.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VMenu/VMenu.d.ts +1 -1
- package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/components/VMenu/VMenuItem.d.ts +1 -1
- package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/components/VMenu/VMenuPanel.d.ts +2 -2
- package/dist/components/VMenu/VMenuPanel.js.map +1 -1
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VMeter/VMeter.css +2 -0
- package/dist/components/VMeter/VMeter.d.ts +77 -0
- package/dist/components/VMeter/VMeter.js +9 -0
- package/dist/components/VMeter/VMeter.js.map +1 -0
- package/dist/components/VMeter/VMeter.vue_vue_type_script_setup_true_lang.js +113 -0
- package/dist/components/VMeter/VMeter.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VNumberInput/VNumberInput.css +2 -0
- package/dist/components/VNumberInput/VNumberInput.d.ts +114 -0
- package/dist/components/VNumberInput/VNumberInput.js +9 -0
- package/dist/components/VNumberInput/VNumberInput.js.map +1 -0
- package/dist/components/VNumberInput/VNumberInput.vue_vue_type_script_setup_true_lang.js +251 -0
- package/dist/components/VNumberInput/VNumberInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VNumberInput/number.d.ts +30 -0
- package/dist/components/VNumberInput/number.js +38 -0
- package/dist/components/VNumberInput/number.js.map +1 -0
- package/dist/components/VPagination/VPagination.d.ts +1 -1
- package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/VProgressCircular/VProgressCircular.d.ts +2 -2
- package/dist/components/VProgressLinear/VProgressLinear.css +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.d.ts +10 -7
- package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js +52 -34
- package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VRadio/VRadio.d.ts +8 -3
- package/dist/components/VRadio/VRadio.js.map +1 -1
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js +52 -46
- package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VRating/VRating.css +2 -0
- package/dist/components/VRating/VRating.d.ts +92 -0
- package/dist/components/VRating/VRating.js +9 -0
- package/dist/components/VRating/VRating.js.map +1 -0
- package/dist/components/VRating/VRating.vue_vue_type_script_setup_true_lang.js +158 -0
- package/dist/components/VRating/VRating.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VResizable/VResizable.css +2 -0
- package/dist/components/VResizable/VResizable.d.ts +50 -0
- package/dist/components/VResizable/VResizable.js +9 -0
- package/dist/components/VResizable/VResizable.js.map +1 -0
- package/dist/components/VResizable/VResizable.vue_vue_type_script_setup_true_lang.js +225 -0
- package/dist/components/VResizable/VResizable.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VResizable/VResizablePanel.css +2 -0
- package/dist/components/VResizable/VResizablePanel.d.ts +60 -0
- package/dist/components/VResizable/VResizablePanel.js +9 -0
- package/dist/components/VResizable/VResizablePanel.js.map +1 -0
- package/dist/components/VResizable/VResizablePanel.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/components/VResizable/VResizablePanel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VResizable/context.d.ts +24 -0
- package/dist/components/VResizable/context.js +6 -0
- package/dist/components/VResizable/context.js.map +1 -0
- package/dist/components/VResizable/layout.d.ts +28 -0
- package/dist/components/VResizable/layout.js +41 -0
- package/dist/components/VResizable/layout.js.map +1 -0
- package/dist/components/VSelect/VSelect.css +2 -0
- package/dist/components/VSelect/VSelect.d.ts +193 -0
- package/dist/components/VSelect/VSelect.js +9 -0
- package/dist/components/VSelect/VSelect.js.map +1 -0
- package/dist/components/VSelect/VSelect.vue_vue_type_script_setup_true_lang.js +424 -0
- package/dist/components/VSelect/VSelect.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSeparator/VSeparator.js.map +1 -1
- package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/VSideNavigation/VSideNavigationItem.d.ts +2 -2
- package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -1
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSkeletonLoader/VSkeletonLoader.d.ts +3 -3
- package/dist/components/VSlider/VSlider.css +1 -1
- package/dist/components/VSlider/VSlider.d.ts +34 -8
- package/dist/components/VSlider/VSlider.js.map +1 -1
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +236 -215
- package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/VSnackbar/state.js.map +1 -1
- package/dist/components/VSplitButton/VSplitButton.css +2 -0
- package/dist/components/VSplitButton/VSplitButton.d.ts +114 -0
- package/dist/components/VSplitButton/VSplitButton.js +9 -0
- package/dist/components/VSplitButton/VSplitButton.js.map +1 -0
- package/dist/components/VSplitButton/VSplitButton.vue_vue_type_script_setup_true_lang.js +148 -0
- package/dist/components/VSplitButton/VSplitButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VStepper/VStepper.css +2 -0
- package/dist/components/VStepper/VStepper.d.ts +73 -0
- package/dist/components/VStepper/VStepper.js +9 -0
- package/dist/components/VStepper/VStepper.js.map +1 -0
- package/dist/components/VStepper/VStepper.vue_vue_type_script_setup_true_lang.js +96 -0
- package/dist/components/VStepper/VStepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VSwitch/VSwitch.d.ts +8 -3
- package/dist/components/VSwitch/VSwitch.js.map +1 -1
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js +53 -47
- package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTab.css +1 -1
- package/dist/components/VTabs/VTab.d.ts +1 -1
- package/dist/components/VTabs/VTab.js.map +1 -1
- package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTabs/VTabs.css +1 -1
- package/dist/components/VTabs/VTabs.d.ts +13 -5
- package/dist/components/VTabs/VTabs.js.map +1 -1
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js +20 -20
- package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.css +1 -1
- package/dist/components/VTextarea/VTextarea.d.ts +22 -2
- package/dist/components/VTextarea/VTextarea.js.map +1 -1
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js +108 -100
- package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.d.ts +27 -7
- package/dist/components/VTimeInput/VTimeInput.js.map +1 -1
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +187 -171
- package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimePicker/VTimePicker.d.ts +2 -2
- package/dist/components/VTimePicker/VTimePicker.js.map +1 -1
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTimeline/VTimeline.css +2 -0
- package/dist/components/VTimeline/VTimeline.d.ts +59 -0
- package/dist/components/VTimeline/VTimeline.js +9 -0
- package/dist/components/VTimeline/VTimeline.js.map +1 -0
- package/dist/components/VTimeline/VTimeline.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/components/VTimeline/VTimeline.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTimeline/VTimelineItem.css +2 -0
- package/dist/components/VTimeline/VTimelineItem.d.ts +48 -0
- package/dist/components/VTimeline/VTimelineItem.js +9 -0
- package/dist/components/VTimeline/VTimelineItem.js.map +1 -0
- package/dist/components/VTimeline/VTimelineItem.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/components/VTimeline/VTimelineItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTimeline/context.d.ts +11 -0
- package/dist/components/VTimeline/context.js +6 -0
- package/dist/components/VTimeline/context.js.map +1 -0
- package/dist/components/VTimeline/datetime.d.ts +8 -0
- package/dist/components/VTimeline/datetime.js +36 -0
- package/dist/components/VTimeline/datetime.js.map +1 -0
- package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +12 -12
- package/dist/components/VToggle/VToggle.d.ts +4 -4
- package/dist/components/VToggle/VToggleItem.d.ts +1 -1
- package/dist/components/VTooltip/VTooltip.d.ts +8 -2
- package/dist/components/VTooltip/VTooltip.js.map +1 -1
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js +45 -43
- package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/VTreeView/VTreeView.css +2 -0
- package/dist/components/VTreeView/VTreeView.d.ts +112 -0
- package/dist/components/VTreeView/VTreeView.js +9 -0
- package/dist/components/VTreeView/VTreeView.js.map +1 -0
- package/dist/components/VTreeView/VTreeView.vue_vue_type_script_setup_true_lang.js +321 -0
- package/dist/components/VTreeView/VTreeView.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/VTypography/VTypography.d.ts +1 -1
- package/dist/components/VVirtualList/VVirtualList.css +2 -0
- package/dist/components/VVirtualList/VVirtualList.d.ts +78 -0
- package/dist/components/VVirtualList/VVirtualList.js +9 -0
- package/dist/components/VVirtualList/VVirtualList.js.map +1 -0
- package/dist/components/VVirtualList/VVirtualList.vue_vue_type_script_setup_true_lang.js +114 -0
- package/dist/components/VVirtualList/VVirtualList.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/composables/useChoice.d.ts +28 -0
- package/dist/composables/useChoice.js +28 -0
- package/dist/composables/useChoice.js.map +1 -0
- package/dist/composables/useDebouncedSearch.d.ts +17 -0
- package/dist/composables/useDebouncedSearch.js +18 -0
- package/dist/composables/useDebouncedSearch.js.map +1 -0
- package/dist/composables/useEscapeDismiss.d.ts +8 -0
- package/dist/composables/useEscapeDismiss.js +16 -0
- package/dist/composables/useEscapeDismiss.js.map +1 -0
- package/dist/composables/useFieldIds.d.ts +2 -1
- package/dist/composables/useFieldIds.js +7 -6
- package/dist/composables/useFieldIds.js.map +1 -1
- package/dist/composables/useFieldPanel.d.ts +1 -0
- package/dist/composables/useFieldPanel.js +52 -42
- package/dist/composables/useFieldPanel.js.map +1 -1
- package/dist/composables/useFileField.d.ts +1 -3
- package/dist/composables/useFileField.js +48 -50
- package/dist/composables/useFileField.js.map +1 -1
- package/dist/composables/useHotkeyListener.d.ts +17 -0
- package/dist/composables/useHotkeyListener.js +26 -0
- package/dist/composables/useHotkeyListener.js.map +1 -0
- package/dist/composables/useIconClickHandlers.d.ts +2 -10
- package/dist/composables/useIconClickHandlers.js +1 -1
- package/dist/composables/useIconClickHandlers.js.map +1 -1
- package/dist/{components/VCombobox/infiniteScroll.d.ts → composables/useInfiniteScroll.d.ts} +6 -0
- package/dist/{components/VCombobox/infiniteScroll.js → composables/useInfiniteScroll.js} +7 -7
- package/dist/composables/useInfiniteScroll.js.map +1 -0
- package/dist/composables/useListbox.d.ts +132 -0
- package/dist/composables/useListbox.js +227 -0
- package/dist/composables/useListbox.js.map +1 -0
- package/dist/composables/useModalDialog.d.ts +28 -0
- package/dist/composables/useModalDialog.js +60 -0
- package/dist/composables/useModalDialog.js.map +1 -0
- package/dist/composables/useRootAttrs.d.ts +2 -3
- package/dist/composables/useRootAttrs.js.map +1 -1
- package/dist/composables/useVirtualList.d.ts +46 -0
- package/dist/composables/useVirtualList.js +145 -0
- package/dist/composables/useVirtualList.js.map +1 -0
- package/dist/i18n/en.js +50 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/fr.js +50 -0
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/types.d.ts +103 -2
- package/dist/icons.js +45 -37
- package/dist/index.d.ts +49 -3
- package/dist/index.js +80 -56
- package/dist/styles.css +1 -1
- package/dist/tokens/index.d.ts +43 -0
- package/dist/tokens/semantic.d.ts +42 -0
- package/dist/tokens/semantic.js +43 -1
- package/dist/tokens/semantic.js.map +1 -1
- package/dist/tokens/themes/dark.d.ts +1 -0
- package/dist/tokens/themes/dark.js +1 -0
- package/dist/tokens/themes/dark.js.map +1 -1
- package/dist/tokens.json +215 -1
- package/dist/types.d.ts +57 -4
- package/dist/utils/arrowNav.js.map +1 -1
- package/dist/utils/attrs.d.ts +9 -0
- package/dist/utils/attrs.js +14 -0
- package/dist/utils/attrs.js.map +1 -0
- package/dist/utils/date.d.ts +1 -0
- package/dist/utils/date.js +2 -2
- package/dist/utils/date.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/VCombobox/VComboboxGroup.css +0 -2
- package/dist/components/VCombobox/VComboboxGroup.d.ts +0 -17
- package/dist/components/VCombobox/VComboboxGroup.js +0 -9
- package/dist/components/VCombobox/VComboboxGroup.js.map +0 -1
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js +0 -21
- package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/VCombobox/VComboboxOption.css +0 -2
- package/dist/components/VCombobox/VComboboxOption.js +0 -9
- package/dist/components/VCombobox/VComboboxOption.js.map +0 -1
- package/dist/components/VCombobox/VComboboxOption.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/VCombobox/VComboboxSeparator.css +0 -2
- package/dist/components/VCombobox/VComboboxSeparator.js +0 -9
- package/dist/components/VCombobox/VComboboxSeparator.js.map +0 -1
- package/dist/components/VCombobox/VComboboxSeparator.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/VCombobox/infiniteScroll.js.map +0 -1
- /package/dist/components/{VCombobox/VComboboxSeparator.d.ts → VCheckbox/VCheckMark.d.ts} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { IconSource } from '../VIcon/types.js';
|
|
2
|
+
/** The scale of the block: a panel or a list, a section, a whole page. */
|
|
3
|
+
export type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
4
|
+
/** The heading level the title is rendered at. */
|
|
5
|
+
export type EmptyStateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
6
|
+
interface EmptyStateProps {
|
|
7
|
+
/** What is empty, in a few words: "No invoices yet". */
|
|
8
|
+
title?: string;
|
|
9
|
+
/** A sentence saying why, or what to do next. The default slot replaces it. */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** An icon drawn in a round badge above the title. The `#media` slot replaces it. */
|
|
12
|
+
icon?: IconSource;
|
|
13
|
+
/** The scale of the block: `sm` for a panel or a list, `lg` for a whole page. */
|
|
14
|
+
size?: EmptyStateSize;
|
|
15
|
+
/**
|
|
16
|
+
* Renders the title as a heading of this level, without changing how it looks. Left out, the
|
|
17
|
+
* title is a paragraph, which keeps a block inside a panel out of the document outline.
|
|
18
|
+
*/
|
|
19
|
+
headingLevel?: EmptyStateHeadingLevel;
|
|
20
|
+
}
|
|
21
|
+
type __VLS_Slots = {
|
|
22
|
+
/** Replaces `description`: text with links or formatting of its own. */
|
|
23
|
+
default?(): unknown;
|
|
24
|
+
/** An illustration replacing the icon badge. */
|
|
25
|
+
media?(): unknown;
|
|
26
|
+
/** The buttons or links that get out of the empty state: create, import, clear the search. */
|
|
27
|
+
actions?(): unknown;
|
|
28
|
+
};
|
|
29
|
+
declare const __VLS_base: import('vue').DefineComponent<EmptyStateProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<EmptyStateProps> & Readonly<{}>, {
|
|
30
|
+
description: string;
|
|
31
|
+
size: EmptyStateSize;
|
|
32
|
+
title: string;
|
|
33
|
+
icon: IconSource;
|
|
34
|
+
headingLevel: EmptyStateHeadingLevel;
|
|
35
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
36
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
37
|
+
declare const _default: typeof __VLS_export;
|
|
38
|
+
export default _default;
|
|
39
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
40
|
+
new (): {
|
|
41
|
+
$slots: S;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import './VEmptyState.css';
|
|
2
|
+
import e from "./VEmptyState.vue_vue_type_script_setup_true_lang.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/components/VEmptyState/VEmptyState.vue
|
|
5
|
+
var t = e;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { t as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=VEmptyState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VEmptyState.js","names":[],"sources":["../../../src/components/VEmptyState/VEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core\n/** A static block saying that there is nothing to show, and what to do about it. */\nimport { computed } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport type { IconSource } from '../VIcon/types'\n\n/** The scale of the block: a panel or a list, a section, a whole page. */\nexport type EmptyStateSize = 'sm' | 'md' | 'lg'\n\n/** The heading level the title is rendered at. */\nexport type EmptyStateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\n\ninterface EmptyStateProps {\n /** What is empty, in a few words: \"No invoices yet\". */\n title?: string\n /** A sentence saying why, or what to do next. The default slot replaces it. */\n description?: string\n /** An icon drawn in a round badge above the title. The `#media` slot replaces it. */\n icon?: IconSource\n /** The scale of the block: `sm` for a panel or a list, `lg` for a whole page. */\n size?: EmptyStateSize\n /**\n * Renders the title as a heading of this level, without changing how it looks. Left out, the\n * title is a paragraph, which keeps a block inside a panel out of the document outline.\n */\n headingLevel?: EmptyStateHeadingLevel\n}\n\nconst props = withDefaults(defineProps<EmptyStateProps>(), {\n title: undefined,\n description: undefined,\n icon: undefined,\n size: 'md',\n headingLevel: undefined,\n})\n\ndefineSlots<{\n /** Replaces `description`: text with links or formatting of its own. */\n default?(): unknown\n /** An illustration replacing the icon badge. */\n media?(): unknown\n /** The buttons or links that get out of the empty state: create, import, clear the search. */\n actions?(): unknown\n}>()\n\nconst titleTag = computed(() => (props.headingLevel ? `h${props.headingLevel}` : 'p'))\n</script>\n\n<template>\n <div class=\"v-empty-state\" :data-size=\"size\">\n <div v-if=\"$slots.media\" class=\"v-empty-state-media\">\n <slot name=\"media\" />\n </div>\n <span v-else-if=\"icon\" class=\"v-empty-state-icon\">\n <VIcon v-bind=\"iconProps(icon)\" />\n </span>\n <component :is=\"titleTag\" v-if=\"title\" class=\"v-empty-state-title\">{{ title }}</component>\n <div v-if=\"$slots.default || description\" class=\"v-empty-state-description\">\n <slot>{{ description }}</slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"v-empty-state-actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-empty-state {\n --empty-state-media: var(--vectis-control-size-empty-state-media-md);\n --empty-state-gap: var(--vectis-space-3);\n\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--empty-state-gap);\n padding: var(--vectis-space-8) var(--vectis-space-6);\n text-align: center;\n color: var(--vectis-color-text);\n font-family: var(--vectis-text-family);\n }\n\n .v-empty-state[data-size='sm'] {\n --empty-state-media: var(--vectis-control-size-empty-state-media-sm);\n --empty-state-gap: var(--vectis-space-2);\n\n padding: var(--vectis-space-4);\n }\n\n .v-empty-state[data-size='lg'] {\n --empty-state-media: var(--vectis-control-size-empty-state-media-lg);\n --empty-state-gap: var(--vectis-space-4);\n\n padding: var(--vectis-space-12) var(--vectis-space-8);\n }\n\n /* The glyph takes half the badge, whatever its size. */\n .v-empty-state-icon {\n --vectis-icon-size: calc(var(--empty-state-media) / 2);\n\n display: inline-grid;\n place-items: center;\n inline-size: var(--empty-state-media);\n block-size: var(--empty-state-media);\n border-radius: var(--vectis-radius-full);\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-muted);\n }\n\n /* The badge's gap to the title is a step wider than the others: it opens the block. */\n .v-empty-state-icon,\n .v-empty-state-media {\n margin-block-end: var(--vectis-space-1);\n }\n\n .v-empty-state-title,\n .v-empty-state-description {\n max-inline-size: var(--vectis-control-size-empty-state-text-max);\n margin: 0;\n }\n\n .v-empty-state-title {\n font-size: var(--vectis-text-heading-4-size);\n font-weight: var(--vectis-text-heading-4-weight);\n line-height: var(--vectis-text-heading-4-leading);\n }\n\n .v-empty-state-description {\n font-size: var(--vectis-text-body-md-size);\n font-weight: var(--vectis-text-body-md-weight);\n line-height: var(--vectis-text-body-md-leading);\n color: var(--vectis-color-text-muted);\n }\n\n .v-empty-state[data-size='sm'] .v-empty-state-title {\n font-size: var(--vectis-text-label-size);\n font-weight: var(--vectis-text-label-weight);\n line-height: var(--vectis-text-label-leading);\n }\n\n .v-empty-state[data-size='sm'] .v-empty-state-description {\n font-size: var(--vectis-text-body-sm-size);\n font-weight: var(--vectis-text-body-sm-weight);\n line-height: var(--vectis-text-body-sm-leading);\n }\n\n .v-empty-state[data-size='lg'] .v-empty-state-title {\n font-size: var(--vectis-text-heading-3-size);\n font-weight: var(--vectis-text-heading-3-weight);\n line-height: var(--vectis-text-heading-3-leading);\n }\n\n .v-empty-state-actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--vectis-space-3);\n margin-block-start: var(--vectis-space-2);\n }\n\n /* Without a fill, the badge keeps its outline so the icon still sits in a circle. */\n @media (forced-colors: active) {\n .v-empty-state-icon {\n outline: 1px solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { iconProps as e } from "../VIcon/iconProps.js";
|
|
2
|
+
import t from "../VIcon/VIcon.js";
|
|
3
|
+
import { computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createTextVNode as o, createVNode as s, defineComponent as c, guardReactiveProps as l, normalizeProps as u, openBlock as d, renderSlot as f, resolveDynamicComponent as p, toDisplayString as m, unref as h, withCtx as g } from "vue";
|
|
4
|
+
//#region src/components/VEmptyState/VEmptyState.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var _ = ["data-size"], v = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "v-empty-state-media"
|
|
8
|
+
}, y = {
|
|
9
|
+
key: 1,
|
|
10
|
+
class: "v-empty-state-icon"
|
|
11
|
+
}, b = {
|
|
12
|
+
key: 3,
|
|
13
|
+
class: "v-empty-state-description"
|
|
14
|
+
}, x = {
|
|
15
|
+
key: 4,
|
|
16
|
+
class: "v-empty-state-actions"
|
|
17
|
+
}, S = /*@__PURE__*/ c({
|
|
18
|
+
__name: "VEmptyState",
|
|
19
|
+
props: {
|
|
20
|
+
title: { default: void 0 },
|
|
21
|
+
description: { default: void 0 },
|
|
22
|
+
icon: { default: void 0 },
|
|
23
|
+
size: { default: "md" },
|
|
24
|
+
headingLevel: { default: void 0 }
|
|
25
|
+
},
|
|
26
|
+
setup(c) {
|
|
27
|
+
let S = c, C = n(() => S.headingLevel ? `h${S.headingLevel}` : "p");
|
|
28
|
+
return (n, S) => (d(), a("div", {
|
|
29
|
+
class: "v-empty-state",
|
|
30
|
+
"data-size": c.size
|
|
31
|
+
}, [
|
|
32
|
+
n.$slots.media ? (d(), a("div", v, [f(n.$slots, "media")])) : c.icon ? (d(), a("span", y, [s(t, u(l(h(e)(c.icon))), null, 16)])) : i("", !0),
|
|
33
|
+
c.title ? (d(), r(p(C.value), {
|
|
34
|
+
key: 2,
|
|
35
|
+
class: "v-empty-state-title"
|
|
36
|
+
}, {
|
|
37
|
+
default: g(() => [o(m(c.title), 1)]),
|
|
38
|
+
_: 1
|
|
39
|
+
})) : i("", !0),
|
|
40
|
+
n.$slots.default || c.description ? (d(), a("div", b, [f(n.$slots, "default", {}, () => [o(m(c.description), 1)])])) : i("", !0),
|
|
41
|
+
n.$slots.actions ? (d(), a("div", x, [f(n.$slots, "actions")])) : i("", !0)
|
|
42
|
+
], 8, _));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//#endregion
|
|
46
|
+
export { S as default };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=VEmptyState.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VEmptyState.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/VEmptyState/VEmptyState.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @core\n/** A static block saying that there is nothing to show, and what to do about it. */\nimport { computed } from 'vue'\n\nimport VIcon from '../VIcon/VIcon.vue'\nimport { iconProps } from '../VIcon/iconProps'\nimport type { IconSource } from '../VIcon/types'\n\n/** The scale of the block: a panel or a list, a section, a whole page. */\nexport type EmptyStateSize = 'sm' | 'md' | 'lg'\n\n/** The heading level the title is rendered at. */\nexport type EmptyStateHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6\n\ninterface EmptyStateProps {\n /** What is empty, in a few words: \"No invoices yet\". */\n title?: string\n /** A sentence saying why, or what to do next. The default slot replaces it. */\n description?: string\n /** An icon drawn in a round badge above the title. The `#media` slot replaces it. */\n icon?: IconSource\n /** The scale of the block: `sm` for a panel or a list, `lg` for a whole page. */\n size?: EmptyStateSize\n /**\n * Renders the title as a heading of this level, without changing how it looks. Left out, the\n * title is a paragraph, which keeps a block inside a panel out of the document outline.\n */\n headingLevel?: EmptyStateHeadingLevel\n}\n\nconst props = withDefaults(defineProps<EmptyStateProps>(), {\n title: undefined,\n description: undefined,\n icon: undefined,\n size: 'md',\n headingLevel: undefined,\n})\n\ndefineSlots<{\n /** Replaces `description`: text with links or formatting of its own. */\n default?(): unknown\n /** An illustration replacing the icon badge. */\n media?(): unknown\n /** The buttons or links that get out of the empty state: create, import, clear the search. */\n actions?(): unknown\n}>()\n\nconst titleTag = computed(() => (props.headingLevel ? `h${props.headingLevel}` : 'p'))\n</script>\n\n<template>\n <div class=\"v-empty-state\" :data-size=\"size\">\n <div v-if=\"$slots.media\" class=\"v-empty-state-media\">\n <slot name=\"media\" />\n </div>\n <span v-else-if=\"icon\" class=\"v-empty-state-icon\">\n <VIcon v-bind=\"iconProps(icon)\" />\n </span>\n <component :is=\"titleTag\" v-if=\"title\" class=\"v-empty-state-title\">{{ title }}</component>\n <div v-if=\"$slots.default || description\" class=\"v-empty-state-description\">\n <slot>{{ description }}</slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"v-empty-state-actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-empty-state {\n --empty-state-media: var(--vectis-control-size-empty-state-media-md);\n --empty-state-gap: var(--vectis-space-3);\n\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--empty-state-gap);\n padding: var(--vectis-space-8) var(--vectis-space-6);\n text-align: center;\n color: var(--vectis-color-text);\n font-family: var(--vectis-text-family);\n }\n\n .v-empty-state[data-size='sm'] {\n --empty-state-media: var(--vectis-control-size-empty-state-media-sm);\n --empty-state-gap: var(--vectis-space-2);\n\n padding: var(--vectis-space-4);\n }\n\n .v-empty-state[data-size='lg'] {\n --empty-state-media: var(--vectis-control-size-empty-state-media-lg);\n --empty-state-gap: var(--vectis-space-4);\n\n padding: var(--vectis-space-12) var(--vectis-space-8);\n }\n\n /* The glyph takes half the badge, whatever its size. */\n .v-empty-state-icon {\n --vectis-icon-size: calc(var(--empty-state-media) / 2);\n\n display: inline-grid;\n place-items: center;\n inline-size: var(--empty-state-media);\n block-size: var(--empty-state-media);\n border-radius: var(--vectis-radius-full);\n background: var(--vectis-color-surface-muted);\n color: var(--vectis-color-text-muted);\n }\n\n /* The badge's gap to the title is a step wider than the others: it opens the block. */\n .v-empty-state-icon,\n .v-empty-state-media {\n margin-block-end: var(--vectis-space-1);\n }\n\n .v-empty-state-title,\n .v-empty-state-description {\n max-inline-size: var(--vectis-control-size-empty-state-text-max);\n margin: 0;\n }\n\n .v-empty-state-title {\n font-size: var(--vectis-text-heading-4-size);\n font-weight: var(--vectis-text-heading-4-weight);\n line-height: var(--vectis-text-heading-4-leading);\n }\n\n .v-empty-state-description {\n font-size: var(--vectis-text-body-md-size);\n font-weight: var(--vectis-text-body-md-weight);\n line-height: var(--vectis-text-body-md-leading);\n color: var(--vectis-color-text-muted);\n }\n\n .v-empty-state[data-size='sm'] .v-empty-state-title {\n font-size: var(--vectis-text-label-size);\n font-weight: var(--vectis-text-label-weight);\n line-height: var(--vectis-text-label-leading);\n }\n\n .v-empty-state[data-size='sm'] .v-empty-state-description {\n font-size: var(--vectis-text-body-sm-size);\n font-weight: var(--vectis-text-body-sm-weight);\n line-height: var(--vectis-text-body-sm-leading);\n }\n\n .v-empty-state[data-size='lg'] .v-empty-state-title {\n font-size: var(--vectis-text-heading-3-size);\n font-weight: var(--vectis-text-heading-3-weight);\n line-height: var(--vectis-text-heading-3-leading);\n }\n\n .v-empty-state-actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--vectis-space-3);\n margin-block-start: var(--vectis-space-2);\n }\n\n /* Without a fill, the badge keeps its outline so the icon still sits in a circle. */\n @media (forced-colors: active) {\n .v-empty-state-icon {\n outline: 1px solid CanvasText;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EA+BA,IAAM,IAAQ,GAiBR,IAAW,QAAgB,EAAM,eAAe,IAAI,EAAM,iBAAiB,GAAI;yBAInF,EAcM,OAAA;GAdD,OAAM;GAAiB,aAAW,EAAA;;GAC1BA,EAAAA,OAAO,SAAA,EAAA,GAAlB,EAEM,OAFN,GAEM,CADJ,EAAqB,EAAA,QAAA,OAAA,CAAA,CAAA,KAEN,EAAA,QAAA,EAAA,GAAjB,EAEO,QAFP,GAEO,CADL,EAAkC,GAAA,EAAA,EAAnB,EAAA,CAAA,CAAS,CAAC,EAAA,IAAI,CAAA,CAAA,GAAA,MAAA,EAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAEC,EAAA,SAAA,EAAA,GAAhC,EAA0F,EAA1E,EAAA,KAAQ,GAAA;;IAAe,OAAM;;qBAAiC,CAAA,EAAA,EAAR,EAAA,KAAK,GAAA,CAAA,CAAA,CAAA;;;GAChEA,EAAAA,OAAO,WAAW,EAAA,eAAA,EAAA,GAA7B,EAEM,OAFN,GAEM,CADJ,EAA8B,EAAA,QAAA,WAAA,CAAA,SAAA,CAAA,EAAA,EAArB,EAAA,WAAW,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAEXA,EAAAA,OAAO,WAAA,EAAA,GAAlB,EAEM,OAFN,GAEM,CADJ,EAAuB,EAAA,QAAA,SAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
+
@layer vectis.components{.v-field{gap:var(--vectis-space-1);font-family:var(--vectis-text-family);flex-direction:column;display:flex}.v-field-main{gap:var(--vectis-space-1);flex-direction:column;min-inline-size:0;display:flex}.v-field[data-disabled]>.v-field-label,.v-field[data-disabled]>.v-field-main>.v-field-meta>.v-field-hint{--typography-color:var(--vectis-color-text-subtle)}.v-field[data-label-position=start]{column-gap:var(--vectis-space-4);flex-flow:wrap}.v-field[data-label-position=start]>.v-field-label{flex:1 1 var(--vectis-control-size-field-label);padding-block-start:calc(( var(--vectis-control-height-md) - var(--vectis-text-label-size) * var(--vectis-text-label-leading) ) / 2)}.v-field[data-label-position=start]>.v-field-main{flex:999 1 var(--vectis-control-size-field-control-min)}}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Where the label sits: above the control, or at its start. */
|
|
2
|
+
export type FieldLabelPosition = 'top' | 'start';
|
|
3
|
+
/**
|
|
4
|
+
* What the slot hands over, to bind on the control with `v-bind`: its id, the references to
|
|
5
|
+
* the hint and the error, `aria-invalid` while there is an error, `required`, `disabled`, and the
|
|
6
|
+
* attributes set on the VField other than `class` and `style`. For a group, `aria-labelledby`
|
|
7
|
+
* replaces the states a group may not carry. A key is absent rather than undefined, so that
|
|
8
|
+
* binding it never cancels a value the control sets itself.
|
|
9
|
+
*/
|
|
10
|
+
export type FieldControlProps = {
|
|
11
|
+
id: string;
|
|
12
|
+
'aria-labelledby'?: string;
|
|
13
|
+
'aria-describedby'?: string;
|
|
14
|
+
'aria-invalid'?: 'true';
|
|
15
|
+
required?: true;
|
|
16
|
+
disabled?: true;
|
|
17
|
+
} & Record<string, unknown>;
|
|
18
|
+
interface FieldProps {
|
|
19
|
+
/** The label, tied to the control so that clicking it focuses the control. */
|
|
20
|
+
label?: string;
|
|
21
|
+
/** A line of help under the control, read along with it. */
|
|
22
|
+
hint?: string;
|
|
23
|
+
/**
|
|
24
|
+
* A message saying what is wrong with the value, shown in place of the hint so that the field
|
|
25
|
+
* does not grow. It marks the control invalid, is read along with it, and is announced when it
|
|
26
|
+
* appears or changes.
|
|
27
|
+
*/
|
|
28
|
+
error?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Marks the control as required: an asterisk follows the label, and `required` is handed to
|
|
31
|
+
* the control, which is what assistive technology announces.
|
|
32
|
+
*/
|
|
33
|
+
required?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Marks the control as disabled: the label and the hint grey out, and `disabled` is handed to
|
|
36
|
+
* the control.
|
|
37
|
+
*/
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
/** Hides the label visually. It still names the control for assistive technology. */
|
|
40
|
+
hideLabel?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Where the label sits: above the control (`top`, the default), or at its start, in a column
|
|
43
|
+
* of its own. A start label moves back above the control when there is not room for both.
|
|
44
|
+
*/
|
|
45
|
+
labelPosition?: FieldLabelPosition;
|
|
46
|
+
/**
|
|
47
|
+
* Names a group of elements rather than one control, such as a row of fields with a `group`
|
|
48
|
+
* role. The label is then plain text that the slot's `aria-labelledby` points at, since a
|
|
49
|
+
* `<label for>` names one element, and the slot hands over neither `aria-invalid`, `required`
|
|
50
|
+
* nor `disabled`, which a group may not carry.
|
|
51
|
+
*/
|
|
52
|
+
group?: boolean;
|
|
53
|
+
}
|
|
54
|
+
type __VLS_Slots = {
|
|
55
|
+
/** The control. Bind `fieldProps` on it. */
|
|
56
|
+
default(props: {
|
|
57
|
+
fieldProps: FieldControlProps;
|
|
58
|
+
}): unknown;
|
|
59
|
+
/**
|
|
60
|
+
* Content at the end of the hint's line, such as a character counter. Bind `id` on it: it
|
|
61
|
+
* joins the control's `aria-describedby`, after the error and the hint.
|
|
62
|
+
*/
|
|
63
|
+
meta?(props: {
|
|
64
|
+
id: string;
|
|
65
|
+
}): unknown;
|
|
66
|
+
};
|
|
67
|
+
declare const __VLS_base: import('vue').DefineComponent<FieldProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<FieldProps> & Readonly<{}>, {
|
|
68
|
+
label: string;
|
|
69
|
+
error: string;
|
|
70
|
+
disabled: boolean;
|
|
71
|
+
required: boolean;
|
|
72
|
+
group: boolean;
|
|
73
|
+
hint: string;
|
|
74
|
+
hideLabel: boolean;
|
|
75
|
+
labelPosition: FieldLabelPosition;
|
|
76
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
77
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
78
|
+
declare const _default: typeof __VLS_export;
|
|
79
|
+
export default _default;
|
|
80
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
81
|
+
new (): {
|
|
82
|
+
$slots: S;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VField.js","names":[],"sources":["../../../src/components/VField/VField.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * A label, a hint and an error message around one control of any kind. VField owns no control:\n * it hands the slot the attributes that tie the control to its label and messages, and the\n * consumer binds them. That works the same for a library control, a native element or a\n * third-party component.\n */\n\nimport { computed, useId } from 'vue'\n\nimport VTypography from '../VTypography/VTypography.vue'\nimport VFieldAnnouncer from './VFieldAnnouncer.vue'\nimport VFieldMessage from './VFieldMessage.vue'\n\nimport { useFieldIds } from '../../composables/useFieldIds'\nimport { useRootAttrs } from '../../composables/useRootAttrs'\nimport { joinIds } from '../../utils/ids'\n\n/** Where the label sits: above the control, or at its start. */\nexport type FieldLabelPosition = 'top' | 'start'\n\n/**\n * What the slot hands over, to bind on the control with `v-bind`: its id, the references to\n * the hint and the error, `aria-invalid` while there is an error, `required`, `disabled`, and the\n * attributes set on the VField other than `class` and `style`. For a group, `aria-labelledby`\n * replaces the states a group may not carry. A key is absent rather than undefined, so that\n * binding it never cancels a value the control sets itself.\n */\nexport type FieldControlProps = {\n id: string\n 'aria-labelledby'?: string\n 'aria-describedby'?: string\n 'aria-invalid'?: 'true'\n required?: true\n disabled?: true\n} & Record<string, unknown>\n\ninterface FieldProps {\n /** The label, tied to the control so that clicking it focuses the control. */\n label?: string\n /** A line of help under the control, read along with it. */\n hint?: string\n /**\n * A message saying what is wrong with the value, shown in place of the hint so that the field\n * does not grow. It marks the control invalid, is read along with it, and is announced when it\n * appears or changes.\n */\n error?: string\n /**\n * Marks the control as required: an asterisk follows the label, and `required` is handed to\n * the control, which is what assistive technology announces.\n */\n required?: boolean\n /**\n * Marks the control as disabled: the label and the hint grey out, and `disabled` is handed to\n * the control.\n */\n disabled?: boolean\n /** Hides the label visually. It still names the control for assistive technology. */\n hideLabel?: boolean\n /**\n * Where the label sits: above the control (`top`, the default), or at its start, in a column\n * of its own. A start label moves back above the control when there is not room for both.\n */\n labelPosition?: FieldLabelPosition\n /**\n * Names a group of elements rather than one control, such as a row of fields with a `group`\n * role. The label is then plain text that the slot's `aria-labelledby` points at, since a\n * `<label for>` names one element, and the slot hands over neither `aria-invalid`, `required`\n * nor `disabled`, which a group may not carry.\n */\n group?: boolean\n}\n\nconst props = withDefaults(defineProps<FieldProps>(), {\n label: undefined,\n hint: undefined,\n error: undefined,\n required: false,\n disabled: false,\n hideLabel: false,\n labelPosition: 'top',\n group: false,\n})\n\ndefineSlots<{\n /** The control. Bind `fieldProps` on it. */\n default(props: { fieldProps: FieldControlProps }): unknown\n /**\n * Content at the end of the hint's line, such as a character counter. Bind `id` on it: it\n * joins the control's `aria-describedby`, after the error and the hint.\n */\n meta?(props: { id: string }): unknown\n}>()\n\ndefineOptions({ inheritAttrs: false })\n\nconst { attrs, rootClass, rootStyle, forwardedAttrs } = useRootAttrs()\n\nconst { fieldId, hintId, errorId, describedBy } = useFieldIds(\n attrs,\n () => !!props.hint && !props.error,\n undefined,\n () => !!props.error,\n)\n\nconst labelId = useId()\nconst metaId = useId()\n\nconst fieldProps = computed<FieldControlProps>(() => {\n const bound: FieldControlProps = { ...forwardedAttrs.value, id: fieldId.value }\n if (describedBy.value) bound['aria-describedby'] = describedBy.value\n if (props.group) {\n // A consumer's `aria-labelledby` or `aria-label` names the group instead: ours would cancel\n // an `aria-label`, `aria-labelledby` winning in the accessible name computation.\n const named = attrs['aria-labelledby'] !== undefined || attrs['aria-label'] !== undefined\n if (props.label && !named) bound['aria-labelledby'] = labelId\n return bound\n }\n if (props.error) bound['aria-invalid'] = 'true'\n if (props.required) bound.required = true\n if (props.disabled) bound.disabled = true\n return bound\n})\n\n// Called from the template, where reading `$slots` is reactive, unlike in a computed.\nfunction withMeta(bound: FieldControlProps): FieldControlProps {\n return { ...bound, 'aria-describedby': joinIds(bound['aria-describedby'], metaId) }\n}\n</script>\n\n<template>\n <div\n class=\"v-field\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-label-position=\"labelPosition\"\n :data-disabled=\"disabled ? '' : undefined\"\n >\n <VTypography\n v-if=\"label\"\n :id=\"group ? labelId : undefined\"\n :as=\"group ? 'span' : 'label'\"\n variant=\"label\"\n class=\"v-field-label\"\n :class=\"{ 'v-visually-hidden': hideLabel }\"\n :for=\"group ? undefined : fieldId\"\n >\n {{ label }}<span v-if=\"required\" class=\"v-field-required\" aria-hidden=\"true\">*</span>\n </VTypography>\n <div class=\"v-field-main\">\n <slot :field-props=\"$slots.meta ? withMeta(fieldProps) : fieldProps\" />\n <div v-if=\"error || hint || $slots.meta\" class=\"v-field-meta\">\n <VFieldMessage :hint=\"hint\" :error=\"error\" :hint-id=\"hintId\" :error-id=\"errorId\" />\n <slot :id=\"metaId\" name=\"meta\" />\n </div>\n <VFieldAnnouncer :text=\"error\" />\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-field {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n font-family: var(--vectis-text-family);\n }\n\n .v-field-main {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n min-inline-size: 0;\n }\n\n /* Child combinators, so that a disabled field leaves a field nested in it alone. */\n .v-field[data-disabled] > .v-field-label,\n .v-field[data-disabled] > .v-field-main > .v-field-meta > .v-field-hint {\n --typography-color: var(--vectis-color-text-subtle);\n }\n\n /*\n * Side by side without a container query, as in VCard: the label keeps its basis and the\n * control takes the rest, until the two bases no longer fit on one line and the control wraps\n * under the label. A hidden label is out of the flow, and the control takes the whole line.\n */\n .v-field[data-label-position='start'] {\n flex-flow: row wrap;\n column-gap: var(--vectis-space-4);\n }\n\n .v-field[data-label-position='start'] > .v-field-label {\n flex: 1 1 var(--vectis-control-size-field-label);\n /* Centres the first line of the label on a medium control, the size forms use most. */\n padding-block-start: calc(\n (\n var(--vectis-control-height-md) - var(--vectis-text-label-size) *\n var(--vectis-text-label-leading)\n ) /\n 2\n );\n }\n\n .v-field[data-label-position='start'] > .v-field-main {\n flex: 999 1 var(--vectis-control-size-field-control-min);\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import e from "../VTypography/VTypography.js";
|
|
2
|
+
import { useRootAttrs as t } from "../../composables/useRootAttrs.js";
|
|
3
|
+
import n from "./VFieldAnnouncer.js";
|
|
4
|
+
import r from "./VFieldMessage.js";
|
|
5
|
+
import { joinIds as i } from "../../utils/ids.js";
|
|
6
|
+
import { useFieldIds as a } from "../../composables/useFieldIds.js";
|
|
7
|
+
import { computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as f, defineComponent as p, normalizeClass as m, normalizeStyle as h, openBlock as g, renderSlot as _, toDisplayString as v, unref as y, useId as b, withCtx as x } from "vue";
|
|
8
|
+
//#region src/components/VField/VField.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
+
var S = ["data-label-position", "data-disabled"], C = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "v-field-required",
|
|
12
|
+
"aria-hidden": "true"
|
|
13
|
+
}, w = { class: "v-field-main" }, T = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "v-field-meta"
|
|
16
|
+
}, E = /*@__PURE__*/ p({
|
|
17
|
+
inheritAttrs: !1,
|
|
18
|
+
__name: "VField",
|
|
19
|
+
props: {
|
|
20
|
+
label: { default: void 0 },
|
|
21
|
+
hint: { default: void 0 },
|
|
22
|
+
error: { default: void 0 },
|
|
23
|
+
required: {
|
|
24
|
+
type: Boolean,
|
|
25
|
+
default: !1
|
|
26
|
+
},
|
|
27
|
+
disabled: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
default: !1
|
|
30
|
+
},
|
|
31
|
+
hideLabel: {
|
|
32
|
+
type: Boolean,
|
|
33
|
+
default: !1
|
|
34
|
+
},
|
|
35
|
+
labelPosition: { default: "top" },
|
|
36
|
+
group: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: !1
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
setup(p) {
|
|
42
|
+
let E = p, { attrs: D, rootClass: O, rootStyle: k, forwardedAttrs: A } = t(), { fieldId: j, hintId: M, errorId: N, describedBy: P } = a(D, () => !!E.hint && !E.error, void 0, () => !!E.error), F = b(), I = b(), L = o(() => {
|
|
43
|
+
let e = {
|
|
44
|
+
...A.value,
|
|
45
|
+
id: j.value
|
|
46
|
+
};
|
|
47
|
+
if (P.value && (e["aria-describedby"] = P.value), E.group) {
|
|
48
|
+
let t = D["aria-labelledby"] !== void 0 || D["aria-label"] !== void 0;
|
|
49
|
+
return E.label && !t && (e["aria-labelledby"] = F), e;
|
|
50
|
+
}
|
|
51
|
+
return E.error && (e["aria-invalid"] = "true"), E.required && (e.required = !0), E.disabled && (e.disabled = !0), e;
|
|
52
|
+
});
|
|
53
|
+
function R(e) {
|
|
54
|
+
return {
|
|
55
|
+
...e,
|
|
56
|
+
"aria-describedby": i(e["aria-describedby"], I)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return (t, i) => (g(), l("div", {
|
|
60
|
+
class: m(["v-field", y(O)]),
|
|
61
|
+
style: h(y(k)),
|
|
62
|
+
"data-label-position": p.labelPosition,
|
|
63
|
+
"data-disabled": p.disabled ? "" : void 0
|
|
64
|
+
}, [p.label ? (g(), s(e, {
|
|
65
|
+
key: 0,
|
|
66
|
+
id: p.group ? y(F) : void 0,
|
|
67
|
+
as: p.group ? "span" : "label",
|
|
68
|
+
variant: "label",
|
|
69
|
+
class: m(["v-field-label", { "v-visually-hidden": p.hideLabel }]),
|
|
70
|
+
for: p.group ? void 0 : y(j)
|
|
71
|
+
}, {
|
|
72
|
+
default: x(() => [d(v(p.label), 1), p.required ? (g(), l("span", C, "*")) : c("", !0)]),
|
|
73
|
+
_: 1
|
|
74
|
+
}, 8, [
|
|
75
|
+
"id",
|
|
76
|
+
"as",
|
|
77
|
+
"class",
|
|
78
|
+
"for"
|
|
79
|
+
])) : c("", !0), u("div", w, [
|
|
80
|
+
_(t.$slots, "default", { fieldProps: t.$slots.meta ? R(L.value) : L.value }),
|
|
81
|
+
p.error || p.hint || t.$slots.meta ? (g(), l("div", T, [f(r, {
|
|
82
|
+
hint: p.hint,
|
|
83
|
+
error: p.error,
|
|
84
|
+
"hint-id": y(M),
|
|
85
|
+
"error-id": y(N)
|
|
86
|
+
}, null, 8, [
|
|
87
|
+
"hint",
|
|
88
|
+
"error",
|
|
89
|
+
"hint-id",
|
|
90
|
+
"error-id"
|
|
91
|
+
]), _(t.$slots, "meta", { id: y(I) })])) : c("", !0),
|
|
92
|
+
f(n, { text: p.error }, null, 8, ["text"])
|
|
93
|
+
])], 14, S));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
//#endregion
|
|
97
|
+
export { E as default };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=VField.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VField.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/VField/VField.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * A label, a hint and an error message around one control of any kind. VField owns no control:\n * it hands the slot the attributes that tie the control to its label and messages, and the\n * consumer binds them. That works the same for a library control, a native element or a\n * third-party component.\n */\n\nimport { computed, useId } from 'vue'\n\nimport VTypography from '../VTypography/VTypography.vue'\nimport VFieldAnnouncer from './VFieldAnnouncer.vue'\nimport VFieldMessage from './VFieldMessage.vue'\n\nimport { useFieldIds } from '../../composables/useFieldIds'\nimport { useRootAttrs } from '../../composables/useRootAttrs'\nimport { joinIds } from '../../utils/ids'\n\n/** Where the label sits: above the control, or at its start. */\nexport type FieldLabelPosition = 'top' | 'start'\n\n/**\n * What the slot hands over, to bind on the control with `v-bind`: its id, the references to\n * the hint and the error, `aria-invalid` while there is an error, `required`, `disabled`, and the\n * attributes set on the VField other than `class` and `style`. For a group, `aria-labelledby`\n * replaces the states a group may not carry. A key is absent rather than undefined, so that\n * binding it never cancels a value the control sets itself.\n */\nexport type FieldControlProps = {\n id: string\n 'aria-labelledby'?: string\n 'aria-describedby'?: string\n 'aria-invalid'?: 'true'\n required?: true\n disabled?: true\n} & Record<string, unknown>\n\ninterface FieldProps {\n /** The label, tied to the control so that clicking it focuses the control. */\n label?: string\n /** A line of help under the control, read along with it. */\n hint?: string\n /**\n * A message saying what is wrong with the value, shown in place of the hint so that the field\n * does not grow. It marks the control invalid, is read along with it, and is announced when it\n * appears or changes.\n */\n error?: string\n /**\n * Marks the control as required: an asterisk follows the label, and `required` is handed to\n * the control, which is what assistive technology announces.\n */\n required?: boolean\n /**\n * Marks the control as disabled: the label and the hint grey out, and `disabled` is handed to\n * the control.\n */\n disabled?: boolean\n /** Hides the label visually. It still names the control for assistive technology. */\n hideLabel?: boolean\n /**\n * Where the label sits: above the control (`top`, the default), or at its start, in a column\n * of its own. A start label moves back above the control when there is not room for both.\n */\n labelPosition?: FieldLabelPosition\n /**\n * Names a group of elements rather than one control, such as a row of fields with a `group`\n * role. The label is then plain text that the slot's `aria-labelledby` points at, since a\n * `<label for>` names one element, and the slot hands over neither `aria-invalid`, `required`\n * nor `disabled`, which a group may not carry.\n */\n group?: boolean\n}\n\nconst props = withDefaults(defineProps<FieldProps>(), {\n label: undefined,\n hint: undefined,\n error: undefined,\n required: false,\n disabled: false,\n hideLabel: false,\n labelPosition: 'top',\n group: false,\n})\n\ndefineSlots<{\n /** The control. Bind `fieldProps` on it. */\n default(props: { fieldProps: FieldControlProps }): unknown\n /**\n * Content at the end of the hint's line, such as a character counter. Bind `id` on it: it\n * joins the control's `aria-describedby`, after the error and the hint.\n */\n meta?(props: { id: string }): unknown\n}>()\n\ndefineOptions({ inheritAttrs: false })\n\nconst { attrs, rootClass, rootStyle, forwardedAttrs } = useRootAttrs()\n\nconst { fieldId, hintId, errorId, describedBy } = useFieldIds(\n attrs,\n () => !!props.hint && !props.error,\n undefined,\n () => !!props.error,\n)\n\nconst labelId = useId()\nconst metaId = useId()\n\nconst fieldProps = computed<FieldControlProps>(() => {\n const bound: FieldControlProps = { ...forwardedAttrs.value, id: fieldId.value }\n if (describedBy.value) bound['aria-describedby'] = describedBy.value\n if (props.group) {\n // A consumer's `aria-labelledby` or `aria-label` names the group instead: ours would cancel\n // an `aria-label`, `aria-labelledby` winning in the accessible name computation.\n const named = attrs['aria-labelledby'] !== undefined || attrs['aria-label'] !== undefined\n if (props.label && !named) bound['aria-labelledby'] = labelId\n return bound\n }\n if (props.error) bound['aria-invalid'] = 'true'\n if (props.required) bound.required = true\n if (props.disabled) bound.disabled = true\n return bound\n})\n\n// Called from the template, where reading `$slots` is reactive, unlike in a computed.\nfunction withMeta(bound: FieldControlProps): FieldControlProps {\n return { ...bound, 'aria-describedby': joinIds(bound['aria-describedby'], metaId) }\n}\n</script>\n\n<template>\n <div\n class=\"v-field\"\n :class=\"rootClass\"\n :style=\"rootStyle\"\n :data-label-position=\"labelPosition\"\n :data-disabled=\"disabled ? '' : undefined\"\n >\n <VTypography\n v-if=\"label\"\n :id=\"group ? labelId : undefined\"\n :as=\"group ? 'span' : 'label'\"\n variant=\"label\"\n class=\"v-field-label\"\n :class=\"{ 'v-visually-hidden': hideLabel }\"\n :for=\"group ? undefined : fieldId\"\n >\n {{ label }}<span v-if=\"required\" class=\"v-field-required\" aria-hidden=\"true\">*</span>\n </VTypography>\n <div class=\"v-field-main\">\n <slot :field-props=\"$slots.meta ? withMeta(fieldProps) : fieldProps\" />\n <div v-if=\"error || hint || $slots.meta\" class=\"v-field-meta\">\n <VFieldMessage :hint=\"hint\" :error=\"error\" :hint-id=\"hintId\" :error-id=\"errorId\" />\n <slot :id=\"metaId\" name=\"meta\" />\n </div>\n <VFieldAnnouncer :text=\"error\" />\n </div>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-field {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n font-family: var(--vectis-text-family);\n }\n\n .v-field-main {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n min-inline-size: 0;\n }\n\n /* Child combinators, so that a disabled field leaves a field nested in it alone. */\n .v-field[data-disabled] > .v-field-label,\n .v-field[data-disabled] > .v-field-main > .v-field-meta > .v-field-hint {\n --typography-color: var(--vectis-color-text-subtle);\n }\n\n /*\n * Side by side without a container query, as in VCard: the label keeps its basis and the\n * control takes the rest, until the two bases no longer fit on one line and the control wraps\n * under the label. A hidden label is out of the flow, and the control takes the whole line.\n */\n .v-field[data-label-position='start'] {\n flex-flow: row wrap;\n column-gap: var(--vectis-space-4);\n }\n\n .v-field[data-label-position='start'] > .v-field-label {\n flex: 1 1 var(--vectis-control-size-field-label);\n /* Centres the first line of the label on a medium control, the size forms use most. */\n padding-block-start: calc(\n (\n var(--vectis-control-height-md) - var(--vectis-text-label-size) *\n var(--vectis-text-label-leading)\n ) /\n 2\n );\n }\n\n .v-field[data-label-position='start'] > .v-field-main {\n flex: 999 1 var(--vectis-control-size-field-control-min);\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EA,IAAM,IAAQ,GAuBR,EAAE,UAAO,cAAW,cAAW,sBAAmB,EAAa,GAE/D,EAAE,YAAS,WAAQ,YAAS,mBAAgB,EAChD,SACM,CAAC,CAAC,EAAM,QAAQ,CAAC,EAAM,OAC7B,KAAA,SACM,CAAC,CAAC,EAAM,KAChB,GAEM,IAAU,EAAM,GAChB,IAAS,EAAM,GAEf,IAAa,QAAkC;GACnD,IAAM,IAA2B;IAAE,GAAG,EAAe;IAAO,IAAI,EAAQ;GAAM;GAE9E,IADI,EAAY,UAAO,EAAM,sBAAsB,EAAY,QAC3D,EAAM,OAAO;IAGf,IAAM,IAAQ,EAAM,uBAAuB,KAAA,KAAa,EAAM,kBAAkB,KAAA;IAEhF,OADI,EAAM,SAAS,CAAC,MAAO,EAAM,qBAAqB,IAC/C;GACT;GAIA,OAHI,EAAM,UAAO,EAAM,kBAAkB,SACrC,EAAM,aAAU,EAAM,WAAW,KACjC,EAAM,aAAU,EAAM,WAAW,KAC9B;EACT,CAAC;EAGD,SAAS,EAAS,GAA6C;GAC7D,OAAO;IAAE,GAAG;IAAO,oBAAoB,EAAQ,EAAM,qBAAqB,CAAM;GAAE;EACpF;yBAIE,EA0BM,OAAA;GAzBJ,OAAK,EAAA,CAAC,WACE,EAAA,CAAA,CAAS,CAAA;GAChB,OAAK,EAAE,EAAA,CAAA,CAAS;GAChB,uBAAqB,EAAA;GACrB,iBAAe,EAAA,WAAQ,KAAQ,KAAA;MAGxB,EAAA,SAAA,EAAA,GADR,EAUc,GAAA;;GARX,IAAI,EAAA,QAAQ,EAAA,CAAA,IAAU,KAAA;GACtB,IAAI,EAAA,QAAK,SAAA;GACV,SAAQ;GACR,OAAK,EAAA,CAAC,iBAAe,EAAA,qBACU,EAAA,UAAS,CAAA,CAAA;GACvC,KAAK,EAAA,QAAQ,KAAA,IAAY,EAAA,CAAA;;oBAEf,CAAA,EAAA,EAAR,EAAA,KAAK,GAAA,CAAA,GAAe,EAAA,YAAA,EAAA,GAAZ,EAA0E,QAA1E,GAAkE,GAAC,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;;;;;;mBAEhF,EAOM,OAPN,GAOM;GANJ,EAAuE,EAAA,QAAA,WAAA,EAAhE,YAAaA,EAAAA,OAAO,OAAO,EAAS,EAAA,KAAU,IAAI,EAAA,MAAA,CAAA;GAC9C,EAAA,SAAS,EAAA,QAAQA,EAAAA,OAAO,QAAA,EAAA,GAAnC,EAGM,OAHN,GAGM,CAFJ,EAAmF,GAAA;IAAnE,MAAM,EAAA;IAAO,OAAO,EAAA;IAAQ,WAAS,EAAA,CAAA;IAAS,YAAU,EAAA,CAAA;;;;;;OACxE,EAAiC,EAAA,QAAA,QAAA,EAA1B,IAAI,EAAA,CAAA,EAAM,CAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAEnB,EAAiC,GAAA,EAAf,MAAM,EAAA,MAAK,GAAA,MAAA,GAAA,CAAA,MAAA,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** The error message. Empty or absent, there is nothing to announce. */
|
|
3
|
+
text?: string;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
declare const _default: typeof __VLS_export;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VFieldAnnouncer.js","names":[],"sources":["../../../src/components/VField/VFieldAnnouncer.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * Announces the error message of a field, for VField, VFieldset and every control with an\n * `error` prop. The visible message, which takes the place of the hint, is referenced by the\n * control's `aria-describedby` and read whenever the control is focused; this region announces\n * it when it appears or changes. It stays mounted at the root of the control, because a live\n * region inserted together with its text is not announced reliably. The first message, rendered\n * with the page, is not announced.\n */\n\nimport { nextTick, ref, watch } from 'vue'\n\nconst props = defineProps<{\n /** The error message. Empty or absent, there is nothing to announce. */\n text?: string\n}>()\n\nconst announced = ref('')\n\nwatch(\n () => props.text,\n async (text) => {\n // Cleared first, so that the same message raised twice in a row is announced twice.\n announced.value = ''\n if (!text) return\n await nextTick()\n announced.value = text\n },\n)\n</script>\n\n<template>\n <span class=\"v-visually-hidden\" aria-live=\"polite\">{{ announced }}</span>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createElementBlock as e, defineComponent as t, nextTick as n, openBlock as r, ref as i, toDisplayString as a, watch as o } from "vue";
|
|
2
|
+
//#region src/components/VField/VFieldAnnouncer.vue?vue&type=script&setup=true&lang.ts
|
|
3
|
+
var s = {
|
|
4
|
+
class: "v-visually-hidden",
|
|
5
|
+
"aria-live": "polite"
|
|
6
|
+
}, c = /*@__PURE__*/ t({
|
|
7
|
+
__name: "VFieldAnnouncer",
|
|
8
|
+
props: { text: {} },
|
|
9
|
+
setup(t) {
|
|
10
|
+
let c = t, l = i("");
|
|
11
|
+
return o(() => c.text, async (e) => {
|
|
12
|
+
l.value = "", e && (await n(), l.value = e);
|
|
13
|
+
}), (t, n) => (r(), e("span", s, a(l.value), 1));
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
//#endregion
|
|
17
|
+
export { c as default };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=VFieldAnnouncer.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VFieldAnnouncer.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VField/VFieldAnnouncer.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * Announces the error message of a field, for VField, VFieldset and every control with an\n * `error` prop. The visible message, which takes the place of the hint, is referenced by the\n * control's `aria-describedby` and read whenever the control is focused; this region announces\n * it when it appears or changes. It stays mounted at the root of the control, because a live\n * region inserted together with its text is not announced reliably. The first message, rendered\n * with the page, is not announced.\n */\n\nimport { nextTick, ref, watch } from 'vue'\n\nconst props = defineProps<{\n /** The error message. Empty or absent, there is nothing to announce. */\n text?: string\n}>()\n\nconst announced = ref('')\n\nwatch(\n () => props.text,\n async (text) => {\n // Cleared first, so that the same message raised twice in a row is announced twice.\n announced.value = ''\n if (!text) return\n await nextTick()\n announced.value = text\n },\n)\n</script>\n\n<template>\n <span class=\"v-visually-hidden\" aria-live=\"polite\">{{ announced }}</span>\n</template>\n"],"mappings":";;;;;;;;;EAaA,IAAM,IAAQ,GAKR,IAAY,EAAI,EAAE;SAExB,QACQ,EAAM,MACZ,OAAO,MAAS;GAEd,EAAU,QAAQ,IACb,MACL,MAAM,EAAS,GACf,EAAU,QAAQ;EACpB,CACF,mBAIE,EAAyE,QAAzE,GAAyE,EAAnB,EAAA,KAAS,GAAA,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** A line of help. */
|
|
3
|
+
hint?: string;
|
|
4
|
+
/** What is wrong with the value, shown in place of the hint. */
|
|
5
|
+
error?: string;
|
|
6
|
+
hintId: string;
|
|
7
|
+
errorId: string;
|
|
8
|
+
};
|
|
9
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
declare const _default: typeof __VLS_export;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VFieldMessage.js","names":[],"sources":["../../../src/components/VField/VFieldMessage.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * The line under a control: the error message, or the hint when there is none, so that raising\n * the error does not grow the field. Shared by VField, VFieldset and the choice controls, whose\n * layouts differ but whose message does not. The ids are the owner's, which also references them.\n */\n\nimport VTypography from '../VTypography/VTypography.vue'\n\ndefineProps<{\n /** A line of help. */\n hint?: string\n /** What is wrong with the value, shown in place of the hint. */\n error?: string\n hintId: string\n errorId: string\n}>()\n</script>\n\n<template>\n <span v-if=\"error\" :id=\"errorId\" class=\"v-field-error\">{{ error }}</span>\n <VTypography v-else-if=\"hint\" :id=\"hintId\" variant=\"caption\" tone=\"muted\" class=\"v-field-hint\">\n {{ hint }}\n </VTypography>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import e from "../VTypography/VTypography.js";
|
|
2
|
+
import { createBlock as t, createCommentVNode as n, createElementBlock as r, createTextVNode as i, defineComponent as a, openBlock as o, toDisplayString as s, withCtx as c } from "vue";
|
|
3
|
+
//#region src/components/VField/VFieldMessage.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var l = ["id"], u = /*@__PURE__*/ a({
|
|
5
|
+
__name: "VFieldMessage",
|
|
6
|
+
props: {
|
|
7
|
+
hint: {},
|
|
8
|
+
error: {},
|
|
9
|
+
hintId: {},
|
|
10
|
+
errorId: {}
|
|
11
|
+
},
|
|
12
|
+
setup(a) {
|
|
13
|
+
return (u, d) => a.error ? (o(), r("span", {
|
|
14
|
+
key: 0,
|
|
15
|
+
id: a.errorId,
|
|
16
|
+
class: "v-field-error"
|
|
17
|
+
}, s(a.error), 9, l)) : a.hint ? (o(), t(e, {
|
|
18
|
+
key: 1,
|
|
19
|
+
id: a.hintId,
|
|
20
|
+
variant: "caption",
|
|
21
|
+
tone: "muted",
|
|
22
|
+
class: "v-field-hint"
|
|
23
|
+
}, {
|
|
24
|
+
default: c(() => [i(s(a.hint), 1)]),
|
|
25
|
+
_: 1
|
|
26
|
+
}, 8, ["id"])) : n("", !0);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//#endregion
|
|
30
|
+
export { u as default };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=VFieldMessage.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VFieldMessage.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VField/VFieldMessage.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * The line under a control: the error message, or the hint when there is none, so that raising\n * the error does not grow the field. Shared by VField, VFieldset and the choice controls, whose\n * layouts differ but whose message does not. The ids are the owner's, which also references them.\n */\n\nimport VTypography from '../VTypography/VTypography.vue'\n\ndefineProps<{\n /** A line of help. */\n hint?: string\n /** What is wrong with the value, shown in place of the hint. */\n error?: string\n hintId: string\n errorId: string\n}>()\n</script>\n\n<template>\n <span v-if=\"error\" :id=\"errorId\" class=\"v-field-error\">{{ error }}</span>\n <VTypography v-else-if=\"hint\" :id=\"hintId\" variant=\"caption\" tone=\"muted\" class=\"v-field-hint\">\n {{ hint }}\n </VTypography>\n</template>\n"],"mappings":";;;;;;;;;;;;mBAqBc,EAAA,SAAA,EAAA,GAAZ,EAAyE,QAAA;;GAArD,IAAI,EAAA;GAAS,OAAM;OAAmB,EAAA,KAAK,GAAA,GAAA,CAAA,KACvC,EAAA,QAAA,EAAA,GAAxB,EAEc,GAAA;;GAFiB,IAAI,EAAA;GAAQ,SAAQ;GAAU,MAAK;GAAQ,OAAM;;oBACpE,CAAA,EAAA,EAAP,EAAA,IAAI,GAAA,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
@layer vectis.reset, vectis.tokens, vectis.components, vectis.utilities;
|
|
2
|
+
@layer vectis.components{.v-fieldset{gap:var(--vectis-space-1);min-inline-size:0;font-family:var(--vectis-text-family);border:0;flex-direction:column;margin:0;padding:0;display:flex}.v-fieldset-legend{color:var(--vectis-color-text);font-size:var(--vectis-text-label-size);font-weight:var(--vectis-text-label-weight);line-height:var(--vectis-text-label-leading);margin-block-end:var(--vectis-space-2);padding:0}.v-fieldset:disabled>.v-fieldset-legend{color:var(--vectis-color-text-subtle)}.v-fieldset:disabled>.v-field-hint{--typography-color:var(--vectis-color-text-subtle)}.v-fieldset-body{align-items:flex-start;gap:var(--vectis-space-2);flex-direction:column;display:flex}.v-fieldset[data-orientation=horizontal]>.v-fieldset-body{column-gap:var(--vectis-space-4);flex-flow:wrap}}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** How the controls of the group are laid out: in a column, or in a wrapping row. */
|
|
2
|
+
export type FieldsetOrientation = 'vertical' | 'horizontal';
|
|
3
|
+
interface FieldsetProps {
|
|
4
|
+
/** The legend, which names the group for assistive technology. */
|
|
5
|
+
legend?: string;
|
|
6
|
+
/** A line of help under the group, read along with its name. */
|
|
7
|
+
hint?: string;
|
|
8
|
+
/**
|
|
9
|
+
* A message saying what is wrong with the group, shown in place of the hint and read along
|
|
10
|
+
* with its name. It is announced when it appears or changes, and the slot's `invalid` turns
|
|
11
|
+
* true.
|
|
12
|
+
*/
|
|
13
|
+
error?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Marks the group as required: an asterisk follows the legend, and the slot's `required`
|
|
16
|
+
* turns true, to be set on the controls.
|
|
17
|
+
*/
|
|
18
|
+
required?: boolean;
|
|
19
|
+
/** Hides the legend visually. It still names the group for assistive technology. */
|
|
20
|
+
hideLegend?: boolean;
|
|
21
|
+
/** Lays the controls out in a column (`vertical`, the default) or in a wrapping row. */
|
|
22
|
+
orientation?: FieldsetOrientation;
|
|
23
|
+
}
|
|
24
|
+
type __VLS_Slots = {
|
|
25
|
+
/**
|
|
26
|
+
* The controls of the group. `invalid` is true while there is an error, and `required`
|
|
27
|
+
* repeats the prop: bind them on the controls.
|
|
28
|
+
*/
|
|
29
|
+
default(props: {
|
|
30
|
+
invalid: boolean;
|
|
31
|
+
required: boolean;
|
|
32
|
+
}): unknown;
|
|
33
|
+
};
|
|
34
|
+
declare const __VLS_base: import('vue').DefineComponent<FieldsetProps, {
|
|
35
|
+
/** The `<fieldset>`. */
|
|
36
|
+
el: import('vue').Ref<HTMLFieldSetElement | null, HTMLFieldSetElement | null>;
|
|
37
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<FieldsetProps> & Readonly<{}>, {
|
|
38
|
+
error: string;
|
|
39
|
+
legend: string;
|
|
40
|
+
required: boolean;
|
|
41
|
+
orientation: FieldsetOrientation;
|
|
42
|
+
hint: string;
|
|
43
|
+
hideLegend: boolean;
|
|
44
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
45
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
46
|
+
declare const _default: typeof __VLS_export;
|
|
47
|
+
export default _default;
|
|
48
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
49
|
+
new (): {
|
|
50
|
+
$slots: S;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VFieldset.js","names":[],"sources":["../../../src/components/VFieldset/VFieldset.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// @a11y\n/**\n * A native `<fieldset>`, named by its `<legend>`: a group of radios, checkboxes or related\n * fields announced as one. The hint and the error describe the group; `aria-invalid` is not\n * allowed on a group, so the invalid state reaches the controls through the slot.\n */\n\nimport { ref, useAttrs } from 'vue'\n\nimport VFieldAnnouncer from '../VField/VFieldAnnouncer.vue'\nimport VFieldMessage from '../VField/VFieldMessage.vue'\n\nimport { useFieldIds } from '../../composables/useFieldIds'\n\n/** How the controls of the group are laid out: in a column, or in a wrapping row. */\nexport type FieldsetOrientation = 'vertical' | 'horizontal'\n\ninterface FieldsetProps {\n /** The legend, which names the group for assistive technology. */\n legend?: string\n /** A line of help under the group, read along with its name. */\n hint?: string\n /**\n * A message saying what is wrong with the group, shown in place of the hint and read along\n * with its name. It is announced when it appears or changes, and the slot's `invalid` turns\n * true.\n */\n error?: string\n /**\n * Marks the group as required: an asterisk follows the legend, and the slot's `required`\n * turns true, to be set on the controls.\n */\n required?: boolean\n /** Hides the legend visually. It still names the group for assistive technology. */\n hideLegend?: boolean\n /** Lays the controls out in a column (`vertical`, the default) or in a wrapping row. */\n orientation?: FieldsetOrientation\n}\n\nconst props = withDefaults(defineProps<FieldsetProps>(), {\n legend: undefined,\n hint: undefined,\n error: undefined,\n required: false,\n hideLegend: false,\n orientation: 'vertical',\n})\n\ndefineSlots<{\n /**\n * The controls of the group. `invalid` is true while there is an error, and `required`\n * repeats the prop: bind them on the controls.\n */\n default(props: { invalid: boolean; required: boolean }): unknown\n}>()\n\n// The consumer's `aria-describedby` is merged with the hint and error references, and the\n// merged list is bound after the other attributes, which fallthrough would overwrite.\ndefineOptions({ inheritAttrs: false })\n\nconst attrs = useAttrs()\n\nconst { hintId, errorId, describedBy } = useFieldIds(\n attrs,\n () => !!props.hint && !props.error,\n undefined,\n () => !!props.error,\n)\n\nconst rootEl = ref<HTMLFieldSetElement | null>(null)\n\ndefineExpose({\n /** The `<fieldset>`. */\n el: rootEl,\n})\n</script>\n\n<template>\n <fieldset\n ref=\"rootEl\"\n v-bind=\"attrs\"\n class=\"v-fieldset\"\n :aria-describedby=\"describedBy\"\n :data-orientation=\"orientation\"\n >\n <legend v-if=\"legend\" class=\"v-fieldset-legend\" :class=\"{ 'v-visually-hidden': hideLegend }\">\n {{ legend }}<span v-if=\"required\" class=\"v-field-required\" aria-hidden=\"true\">*</span>\n </legend>\n <div class=\"v-fieldset-body\">\n <slot :invalid=\"!!error\" :required=\"required\" />\n </div>\n <VFieldMessage :hint=\"hint\" :error=\"error\" :hint-id=\"hintId\" :error-id=\"errorId\" />\n <VFieldAnnouncer :text=\"error\" />\n </fieldset>\n</template>\n\n<style>\n@layer vectis.components {\n .v-fieldset {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-1);\n min-inline-size: 0;\n margin: 0;\n padding: 0;\n border: 0;\n font-family: var(--vectis-text-family);\n }\n\n /* A rendered legend is not a flex item of its fieldset, so the gap misses it: a margin. */\n .v-fieldset-legend {\n margin-block-end: var(--vectis-space-2);\n padding: 0;\n color: var(--vectis-color-text);\n font-size: var(--vectis-text-label-size);\n font-weight: var(--vectis-text-label-weight);\n line-height: var(--vectis-text-label-leading);\n }\n\n /* A native `disabled` disables every control of the group: its name and help grey out. */\n .v-fieldset:disabled > .v-fieldset-legend {\n color: var(--vectis-color-text-subtle);\n }\n\n .v-fieldset:disabled > .v-field-hint {\n --typography-color: var(--vectis-color-text-subtle);\n }\n\n .v-fieldset-body {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--vectis-space-2);\n }\n\n .v-fieldset[data-orientation='horizontal'] > .v-fieldset-body {\n flex-flow: row wrap;\n column-gap: var(--vectis-space-4);\n }\n}\n</style>\n"],"mappings":""}
|