@spectral_labs/ui 1.1.2 → 1.2.1
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/accordion/__tests__/AccordionTest.svelte +4 -4
- package/dist/components/accordion/components/accordion-content.svelte +3 -3
- package/dist/components/accordion/components/accordion-item.svelte +1 -1
- package/dist/components/accordion/components/accordion-root.svelte +5 -7
- package/dist/components/accordion/components/accordion-root.svelte.d.ts.map +1 -1
- package/dist/components/accordion/components/accordion-trigger.svelte +12 -12
- package/dist/components/alert-dialog/__tests__/AlertDialogTest.svelte +6 -3
- package/dist/components/alert-dialog/__tests__/alert-dialog.a11y.test.js +9 -2
- package/dist/components/alert-dialog/components/alert-dialog-action.svelte +2 -2
- package/dist/components/alert-dialog/components/alert-dialog-cancel.svelte +2 -2
- package/dist/components/alert-dialog/components/alert-dialog-content.svelte +15 -11
- package/dist/components/alert-dialog/components/alert-dialog-content.svelte.d.ts.map +1 -1
- package/dist/components/alert-dialog/components/alert-dialog-description.svelte +1 -1
- package/dist/components/alert-dialog/components/alert-dialog-overlay.svelte +8 -6
- package/dist/components/alert-dialog/components/alert-dialog-overlay.svelte.d.ts.map +1 -1
- package/dist/components/alert-dialog/components/alert-dialog-root.svelte +7 -2
- package/dist/components/alert-dialog/components/alert-dialog-root.svelte.d.ts.map +1 -1
- package/dist/components/alert-dialog/components/alert-dialog-title.svelte +6 -2
- package/dist/components/alert-dialog/components/alert-dialog-trigger.svelte +3 -3
- package/dist/components/app-bar/app-bar.svelte +12 -12
- package/dist/components/aspect-ratio/aspect-ratio.svelte +2 -2
- package/dist/components/avatar/avatar.svelte +6 -6
- package/dist/components/badge/badge.svelte +60 -16
- package/dist/components/badge/types.d.ts.map +1 -1
- package/dist/components/bottom-sheet/__tests__/BottomSheetTest.svelte +16 -6
- package/dist/components/bottom-sheet/components/bottom-sheet-root.svelte +20 -20
- package/dist/components/breadcrumb/breadcrumb-item.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-link.svelte +6 -2
- package/dist/components/breadcrumb/breadcrumb-link.svelte.d.ts.map +1 -1
- package/dist/components/breadcrumb/breadcrumb-list.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-page.svelte +3 -3
- package/dist/components/breadcrumb/breadcrumb-separator.svelte +12 -4
- package/dist/components/breadcrumb/breadcrumb.svelte +2 -2
- package/dist/components/button/button.svelte +1 -1
- package/dist/components/button/types.d.ts.map +1 -1
- package/dist/components/calendar/__tests__/CalendarTest.svelte +1 -1
- package/dist/components/calendar/calendar.svelte.d.ts.map +1 -1
- package/dist/components/calendar/calendar.svelte.js +89 -33
- package/dist/components/calendar/components/calendar-grid.svelte +16 -15
- package/dist/components/calendar/components/calendar-grid.svelte.d.ts.map +1 -1
- package/dist/components/calendar/components/calendar-header.svelte +1 -1
- package/dist/components/calendar/components/calendar-heading.svelte +2 -2
- package/dist/components/calendar/components/calendar-next-button.svelte +14 -6
- package/dist/components/calendar/components/calendar-prev-button.svelte +14 -6
- package/dist/components/calendar/components/calendar-root.svelte +50 -22
- package/dist/components/calendar/components/calendar-root.svelte.d.ts.map +1 -1
- package/dist/components/card/card.svelte +1 -1
- package/dist/components/checkbox/checkbox.svelte +23 -27
- package/dist/components/checkbox/checkbox.svelte.d.ts.map +1 -1
- package/dist/components/chips/chip-group.svelte +8 -13
- package/dist/components/chips/chip-group.svelte.d.ts.map +1 -1
- package/dist/components/chips/chips.svelte +32 -39
- package/dist/components/chips/chips.svelte.d.ts.map +1 -1
- package/dist/components/chips/types.d.ts +5 -5
- package/dist/components/chips/types.d.ts.map +1 -1
- package/dist/components/collapsible/__tests__/CollapsibleTest.svelte +1 -1
- package/dist/components/collapsible/components/collapsible-content.svelte +8 -6
- package/dist/components/collapsible/components/collapsible-content.svelte.d.ts.map +1 -1
- package/dist/components/collapsible/components/collapsible-root.svelte +2 -3
- package/dist/components/collapsible/components/collapsible-root.svelte.d.ts.map +1 -1
- package/dist/components/collapsible/components/collapsible-trigger.svelte +2 -2
- package/dist/components/combobox/__tests__/ComboboxTest.svelte +5 -5
- package/dist/components/combobox/components/combobox-content.svelte +4 -6
- package/dist/components/combobox/components/combobox-content.svelte.d.ts.map +1 -1
- package/dist/components/combobox/components/combobox-input.svelte +10 -15
- package/dist/components/combobox/components/combobox-input.svelte.d.ts.map +1 -1
- package/dist/components/combobox/components/combobox-item.svelte +5 -8
- package/dist/components/combobox/components/combobox-item.svelte.d.ts.map +1 -1
- package/dist/components/combobox/components/combobox-root.svelte +13 -18
- package/dist/components/combobox/components/combobox-root.svelte.d.ts.map +1 -1
- package/dist/components/combobox/index.d.ts +1 -1
- package/dist/components/combobox/index.d.ts.map +1 -1
- package/dist/components/command/__tests__/CommandTest.svelte +19 -10
- package/dist/components/command/__tests__/command.a11y.test.js +1 -1
- package/dist/components/command/command.svelte.d.ts.map +1 -1
- package/dist/components/command/command.svelte.js +20 -10
- package/dist/components/command/components/command-empty.svelte +2 -2
- package/dist/components/command/components/command-group.svelte +6 -4
- package/dist/components/command/components/command-group.svelte.d.ts.map +1 -1
- package/dist/components/command/components/command-input.svelte +27 -14
- package/dist/components/command/components/command-input.svelte.d.ts.map +1 -1
- package/dist/components/command/components/command-item.svelte +12 -7
- package/dist/components/command/components/command-item.svelte.d.ts.map +1 -1
- package/dist/components/command/components/command-list.svelte +2 -7
- package/dist/components/command/components/command-root.svelte +18 -10
- package/dist/components/command/components/command-root.svelte.d.ts.map +1 -1
- package/dist/components/command/components/command-separator.svelte +2 -2
- package/dist/components/context-menu/__tests__/ContextMenuNonInteractiveTest.svelte +32 -0
- package/dist/components/context-menu/__tests__/ContextMenuTest.svelte +1 -1
- package/dist/components/context-menu/__tests__/context-menu.test.svelte.js +77 -1
- package/dist/components/context-menu/components/context-menu-content.svelte +7 -10
- package/dist/components/context-menu/components/context-menu-content.svelte.d.ts.map +1 -1
- package/dist/components/context-menu/components/context-menu-root.svelte +7 -2
- package/dist/components/context-menu/components/context-menu-root.svelte.d.ts.map +1 -1
- package/dist/components/context-menu/components/context-menu-trigger.svelte +15 -15
- package/dist/components/context-menu/index.d.ts +1 -1
- package/dist/components/context-menu/index.d.ts.map +1 -1
- package/dist/components/context-menu/types.d.ts +16 -1
- package/dist/components/context-menu/types.d.ts.map +1 -1
- package/dist/components/date-field/__tests__/DateFieldTest.svelte +1 -1
- package/dist/components/date-field/__tests__/date-field.test.svelte.js +5 -5
- package/dist/components/date-field/components/date-field-root.svelte +55 -55
- package/dist/components/date-field/types.d.ts +14 -14
- package/dist/components/date-field/types.d.ts.map +1 -1
- package/dist/components/date-picker/__tests__/DatePickerTest.svelte +2 -8
- package/dist/components/date-picker/__tests__/date-picker.test.svelte.js +10 -9
- package/dist/components/date-picker/components/date-picker-root.svelte +38 -31
- package/dist/components/date-picker/components/date-picker-root.svelte.d.ts.map +1 -1
- package/dist/components/date-range-field/__tests__/DateRangeFieldTest.svelte +1 -1
- package/dist/components/date-range-field/__tests__/date-range-field.test.svelte.js +3 -3
- package/dist/components/date-range-field/components/date-range-field-root.svelte +5 -5
- package/dist/components/date-range-picker/__tests__/DateRangePickerTest.svelte +2 -7
- package/dist/components/date-range-picker/__tests__/date-range-picker.test.svelte.js +11 -11
- package/dist/components/date-range-picker/components/date-range-picker-root.svelte +40 -32
- package/dist/components/date-range-picker/components/date-range-picker-root.svelte.d.ts.map +1 -1
- package/dist/components/dialog/__tests__/DialogTest.svelte +8 -3
- package/dist/components/dialog/components/dialog-close.svelte +2 -2
- package/dist/components/dialog/components/dialog-content.svelte +16 -13
- package/dist/components/dialog/components/dialog-content.svelte.d.ts.map +1 -1
- package/dist/components/dialog/components/dialog-description.svelte +1 -1
- package/dist/components/dialog/components/dialog-overlay.svelte +8 -6
- package/dist/components/dialog/components/dialog-overlay.svelte.d.ts.map +1 -1
- package/dist/components/dialog/components/dialog-root.svelte +4 -2
- package/dist/components/dialog/components/dialog-root.svelte.d.ts.map +1 -1
- package/dist/components/dialog/components/dialog-title.svelte +6 -2
- package/dist/components/dialog/components/dialog-trigger.svelte +3 -3
- package/dist/components/drop-zone/drop-zone.svelte +12 -18
- package/dist/components/drop-zone/drop-zone.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/__tests__/DropdownMenuTest.svelte +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-checkbox-item.svelte +19 -8
- package/dist/components/dropdown-menu/components/dropdown-menu-checkbox-item.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-content.svelte +8 -12
- package/dist/components/dropdown-menu/components/dropdown-menu-content.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-item.svelte +4 -6
- package/dist/components/dropdown-menu/components/dropdown-menu-item.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-label.svelte +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-root.svelte +7 -2
- package/dist/components/dropdown-menu/components/dropdown-menu-root.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-separator.svelte +2 -2
- package/dist/components/dropdown-menu/components/dropdown-menu-sub-content.svelte +5 -8
- package/dist/components/dropdown-menu/components/dropdown-menu-sub-content.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-sub-trigger.svelte +19 -14
- package/dist/components/dropdown-menu/components/dropdown-menu-sub-trigger.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-sub.svelte +19 -7
- package/dist/components/dropdown-menu/components/dropdown-menu-sub.svelte.d.ts.map +1 -1
- package/dist/components/dropdown-menu/components/dropdown-menu-trigger.svelte +5 -7
- package/dist/components/dropdown-menu/components/dropdown-menu-trigger.svelte.d.ts.map +1 -1
- package/dist/components/empty-state/empty-state.svelte +6 -6
- package/dist/components/fab/fab.svelte +2 -2
- package/dist/components/field/__tests__/FieldTest.svelte +2 -2
- package/dist/components/field/field-description.svelte +1 -1
- package/dist/components/field/field-error.svelte +2 -2
- package/dist/components/field/field-group.svelte +1 -1
- package/dist/components/field/field-label.svelte +2 -2
- package/dist/components/field/field-separator.svelte +4 -4
- package/dist/components/field/field.svelte +1 -1
- package/dist/components/grid-list/__tests__/GridListTest.svelte +2 -2
- package/dist/components/grid-list/components/grid-list-item.svelte +11 -17
- package/dist/components/grid-list/components/grid-list-item.svelte.d.ts.map +1 -1
- package/dist/components/grid-list/components/grid-list-root.svelte +32 -35
- package/dist/components/grid-list/components/grid-list-root.svelte.d.ts.map +1 -1
- package/dist/components/grid-list/grid-list.svelte.d.ts.map +1 -1
- package/dist/components/grid-list/grid-list.svelte.js +25 -15
- package/dist/components/grid-list/index.d.ts +1 -1
- package/dist/components/grid-list/index.d.ts.map +1 -1
- package/dist/components/grid-list/types.d.ts +21 -21
- package/dist/components/grid-list/types.d.ts.map +1 -1
- package/dist/components/hover-card/__tests__/HoverCardTest.svelte +3 -3
- package/dist/components/hover-card/components/hover-card-content.svelte +26 -12
- package/dist/components/hover-card/components/hover-card-content.svelte.d.ts.map +1 -1
- package/dist/components/hover-card/components/hover-card-root.svelte +10 -4
- package/dist/components/hover-card/components/hover-card-root.svelte.d.ts.map +1 -1
- package/dist/components/hover-card/components/hover-card-trigger.svelte +3 -4
- package/dist/components/hover-card/components/hover-card-trigger.svelte.d.ts.map +1 -1
- package/dist/components/indicator/indicator.svelte +5 -5
- package/dist/components/input/__tests__/input.test.svelte.js +29 -0
- package/dist/components/input/input.svelte +22 -5
- package/dist/components/label/label.svelte +2 -3
- package/dist/components/label/label.svelte.d.ts.map +1 -1
- package/dist/components/language-select/__tests__/languages.test.js +8 -8
- package/dist/components/language-select/language-select.svelte +23 -35
- package/dist/components/language-select/language-select.svelte.d.ts.map +1 -1
- package/dist/components/link-preview/__tests__/LinkPreviewTest.svelte +2 -2
- package/dist/components/link-preview/__tests__/link-preview.a11y.test.js +5 -1
- package/dist/components/link-preview/__tests__/link-preview.test.svelte.js +4 -1
- package/dist/components/link-preview/components/link-preview-content.svelte +16 -7
- package/dist/components/link-preview/components/link-preview-content.svelte.d.ts.map +1 -1
- package/dist/components/link-preview/components/link-preview-root.svelte +7 -2
- package/dist/components/link-preview/components/link-preview-root.svelte.d.ts.map +1 -1
- package/dist/components/link-preview/components/link-preview-trigger.svelte +15 -13
- package/dist/components/link-preview/components/link-preview-trigger.svelte.d.ts.map +1 -1
- package/dist/components/link-preview/index.d.ts +1 -1
- package/dist/components/link-preview/index.d.ts.map +1 -1
- package/dist/components/list/components/list-item.svelte +4 -4
- package/dist/components/list/components/list-root.svelte +2 -2
- package/dist/components/menubar/__tests__/MenubarTest.svelte +5 -5
- package/dist/components/menubar/__tests__/menubar.a11y.test.js +5 -1
- package/dist/components/menubar/components/menubar-content.svelte +36 -27
- package/dist/components/menubar/components/menubar-content.svelte.d.ts.map +1 -1
- package/dist/components/menubar/components/menubar-menu.svelte +7 -3
- package/dist/components/menubar/components/menubar-menu.svelte.d.ts.map +1 -1
- package/dist/components/menubar/components/menubar-root.svelte +12 -22
- package/dist/components/menubar/components/menubar-root.svelte.d.ts.map +1 -1
- package/dist/components/menubar/components/menubar-trigger.svelte +6 -8
- package/dist/components/menubar/components/menubar-trigger.svelte.d.ts.map +1 -1
- package/dist/components/meter/meter.svelte +6 -9
- package/dist/components/meter/meter.svelte.d.ts.map +1 -1
- package/dist/components/nav-bar/components/nav-bar-item.svelte +9 -12
- package/dist/components/nav-bar/components/nav-bar-item.svelte.d.ts.map +1 -1
- package/dist/components/nav-bar/components/nav-bar-root.svelte +3 -3
- package/dist/components/nav-drawer/components/nav-drawer-item.svelte +8 -11
- package/dist/components/nav-drawer/components/nav-drawer-item.svelte.d.ts.map +1 -1
- package/dist/components/nav-drawer/components/nav-drawer-root.svelte +11 -11
- package/dist/components/nav-drawer/components/nav-drawer-root.svelte.d.ts.map +1 -1
- package/dist/components/nav-rail/components/nav-rail-item.svelte +10 -12
- package/dist/components/nav-rail/components/nav-rail-item.svelte.d.ts.map +1 -1
- package/dist/components/nav-rail/components/nav-rail-root.svelte +4 -4
- package/dist/components/pagination/pagination.svelte +28 -33
- package/dist/components/pagination/pagination.svelte.d.ts.map +1 -1
- package/dist/components/pin-input/pin-input.svelte +21 -20
- package/dist/components/pin-input/pin-input.svelte.d.ts.map +1 -1
- package/dist/components/popover/__tests__/PopoverTest.svelte +2 -2
- package/dist/components/popover/components/popover-close.svelte +2 -2
- package/dist/components/popover/components/popover-content.svelte +48 -25
- package/dist/components/popover/components/popover-content.svelte.d.ts.map +1 -1
- package/dist/components/popover/components/popover-root.svelte +1 -1
- package/dist/components/popover/components/popover-trigger.svelte +4 -5
- package/dist/components/popover/components/popover-trigger.svelte.d.ts.map +1 -1
- package/dist/components/progress/progress.svelte +3 -3
- package/dist/components/radio-group/components/radio-group-item.svelte +8 -9
- package/dist/components/radio-group/components/radio-group-item.svelte.d.ts.map +1 -1
- package/dist/components/radio-group/components/radio-group-root.svelte +6 -5
- package/dist/components/radio-group/components/radio-group-root.svelte.d.ts.map +1 -1
- package/dist/components/range-calendar/__tests__/RangeCalendarTest.svelte +1 -1
- package/dist/components/range-calendar/__tests__/range-calendar.test.svelte.js +4 -1
- package/dist/components/range-calendar/components/range-calendar-grid.svelte +16 -17
- package/dist/components/range-calendar/components/range-calendar-grid.svelte.d.ts.map +1 -1
- package/dist/components/range-calendar/components/range-calendar-header.svelte +29 -13
- package/dist/components/range-calendar/components/range-calendar-root.svelte +42 -17
- package/dist/components/range-calendar/components/range-calendar-root.svelte.d.ts.map +1 -1
- package/dist/components/range-calendar/range-calendar.svelte.d.ts.map +1 -1
- package/dist/components/range-calendar/range-calendar.svelte.js +54 -24
- package/dist/components/rating-group/rating-group.svelte +17 -23
- package/dist/components/rating-group/rating-group.svelte.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area.svelte +22 -28
- package/dist/components/scroll-area/scroll-area.svelte.d.ts.map +1 -1
- package/dist/components/search-field/__tests__/SearchFieldTest.svelte +3 -3
- package/dist/components/search-field/__tests__/search-field.test.svelte.js +28 -0
- package/dist/components/search-field/search-field.svelte +44 -18
- package/dist/components/search-field/types.d.ts +7 -7
- package/dist/components/search-field/types.d.ts.map +1 -1
- package/dist/components/select/__tests__/SelectLabelPersistenceTest.svelte +6 -8
- package/dist/components/select/__tests__/SelectTest.svelte +1 -1
- package/dist/components/select/components/select-content.svelte +13 -16
- package/dist/components/select/components/select-content.svelte.d.ts.map +1 -1
- package/dist/components/select/components/select-item.svelte +14 -16
- package/dist/components/select/components/select-item.svelte.d.ts.map +1 -1
- package/dist/components/select/components/select-root.svelte +9 -12
- package/dist/components/select/components/select-root.svelte.d.ts.map +1 -1
- package/dist/components/select/components/select-trigger.svelte +20 -12
- package/dist/components/select/components/select-trigger.svelte.d.ts.map +1 -1
- package/dist/components/separator/separator.svelte +1 -1
- package/dist/components/sheet/__tests__/SheetTest.svelte +2 -2
- package/dist/components/sheet/components/sheet-close.svelte +2 -2
- package/dist/components/sheet/components/sheet-content.svelte +12 -11
- package/dist/components/sheet/components/sheet-content.svelte.d.ts.map +1 -1
- package/dist/components/sheet/components/sheet-description.svelte +1 -1
- package/dist/components/sheet/components/sheet-overlay.svelte +8 -6
- package/dist/components/sheet/components/sheet-overlay.svelte.d.ts.map +1 -1
- package/dist/components/sheet/components/sheet-root.svelte +4 -2
- package/dist/components/sheet/components/sheet-root.svelte.d.ts.map +1 -1
- package/dist/components/sheet/components/sheet-title.svelte +7 -6
- package/dist/components/sheet/components/sheet-trigger.svelte +3 -3
- package/dist/components/side-sheet/__tests__/side-sheet.test.svelte.js +3 -1
- package/dist/components/side-sheet/side-sheet.svelte +5 -5
- package/dist/components/sidebar/__tests__/SidebarFullTest.svelte +7 -7
- package/dist/components/sidebar/__tests__/SidebarTest.svelte +2 -2
- package/dist/components/sidebar/__tests__/sidebar.test.svelte.js +9 -5
- package/dist/components/sidebar/components/sidebar-content.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-footer.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-group-content.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-group-label.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-group.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-header.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-inset.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-menu-action.svelte +11 -4
- package/dist/components/sidebar/components/sidebar-menu-action.svelte.d.ts.map +1 -1
- package/dist/components/sidebar/components/sidebar-menu-button.svelte +8 -4
- package/dist/components/sidebar/components/sidebar-menu-item.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-menu-sub-button.svelte +5 -3
- package/dist/components/sidebar/components/sidebar-menu-sub-item.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-menu-sub.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-menu.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-provider.svelte +5 -3
- package/dist/components/sidebar/components/sidebar-provider.svelte.d.ts.map +1 -1
- package/dist/components/sidebar/components/sidebar-root.svelte +6 -4
- package/dist/components/sidebar/components/sidebar-separator.svelte +1 -1
- package/dist/components/sidebar/components/sidebar-trigger.svelte +13 -5
- package/dist/components/sidebar/sidebar.svelte.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar.svelte.js +9 -3
- package/dist/components/simple-dialog/__tests__/SimpleDialogTest.svelte +4 -4
- package/dist/components/simple-dialog/simple-dialog.svelte +7 -7
- package/dist/components/simple-tooltip/__tests__/SimpleTooltipTest.svelte +2 -2
- package/dist/components/simple-tooltip/__tests__/simple-tooltip.test.svelte.js +1 -0
- package/dist/components/simple-tooltip/simple-tooltip.svelte +1 -1
- package/dist/components/slider/slider.svelte +11 -15
- package/dist/components/slider/slider.svelte.d.ts.map +1 -1
- package/dist/components/slider/types.d.ts +10 -10
- package/dist/components/slider/types.d.ts.map +1 -1
- package/dist/components/sortable-list/__tests__/SortableListTest.svelte +9 -2
- package/dist/components/sortable-list/__tests__/sortable-list.test.svelte.js +13 -7
- package/dist/components/sortable-list/components/sortable-list-handle.svelte +20 -25
- package/dist/components/sortable-list/components/sortable-list-handle.svelte.d.ts.map +1 -1
- package/dist/components/sortable-list/components/sortable-list-indicator.svelte +11 -16
- package/dist/components/sortable-list/components/sortable-list-indicator.svelte.d.ts.map +1 -1
- package/dist/components/sortable-list/components/sortable-list-item.svelte +5 -9
- package/dist/components/sortable-list/components/sortable-list-item.svelte.d.ts.map +1 -1
- package/dist/components/sortable-list/components/sortable-list-root.svelte +3 -3
- package/dist/components/sortable-list/sortable-list.svelte.d.ts.map +1 -1
- package/dist/components/sortable-list/sortable-list.svelte.js +8 -10
- package/dist/components/sortable-list/types.d.ts +15 -15
- package/dist/components/sortable-list/types.d.ts.map +1 -1
- package/dist/components/splitter/splitter.svelte +21 -30
- package/dist/components/splitter/splitter.svelte.d.ts.map +1 -1
- package/dist/components/switch/switch.svelte +11 -11
- package/dist/components/switch/switch.svelte.d.ts.map +1 -1
- package/dist/components/table/components/table-body.svelte +1 -1
- package/dist/components/table/components/table-cell.svelte +23 -35
- package/dist/components/table/components/table-cell.svelte.d.ts.map +1 -1
- package/dist/components/table/components/table-header.svelte +1 -1
- package/dist/components/table/components/table-resize-handle.svelte +7 -10
- package/dist/components/table/components/table-resize-handle.svelte.d.ts.map +1 -1
- package/dist/components/table/components/table-root.svelte +26 -22
- package/dist/components/table/components/table-row.svelte +5 -4
- package/dist/components/table/components/table-row.svelte.d.ts.map +1 -1
- package/dist/components/table/table.svelte.d.ts.map +1 -1
- package/dist/components/table/table.svelte.js +6 -2
- package/dist/components/tabs/__tests__/TabsTest.svelte +11 -9
- package/dist/components/tabs/__tests__/tabs.test.svelte.js +77 -1
- package/dist/components/tabs/components/tabs-content.svelte +2 -2
- package/dist/components/tabs/components/tabs-list.svelte +61 -6
- package/dist/components/tabs/components/tabs-list.svelte.d.ts.map +1 -1
- package/dist/components/tabs/components/tabs-root.svelte +1 -1
- package/dist/components/tabs/components/tabs-trigger.svelte +4 -5
- package/dist/components/tabs/components/tabs-trigger.svelte.d.ts.map +1 -1
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/index.d.ts.map +1 -1
- package/dist/components/tabs/types.d.ts +26 -0
- package/dist/components/tabs/types.d.ts.map +1 -1
- package/dist/components/textarea/__tests__/textarea.test.svelte.js +29 -0
- package/dist/components/textarea/textarea.svelte +14 -1
- package/dist/components/time-field/__tests__/TimeFieldTest.svelte +1 -1
- package/dist/components/time-field/__tests__/time-field.test.svelte.js +6 -8
- package/dist/components/time-field/components/time-field-root.svelte +67 -73
- package/dist/components/time-field/components/time-field-root.svelte.d.ts.map +1 -1
- package/dist/components/time-field/index.d.ts +1 -1
- package/dist/components/time-field/index.d.ts.map +1 -1
- package/dist/components/time-field/time-field.svelte.d.ts.map +1 -1
- package/dist/components/time-field/types.d.ts +13 -13
- package/dist/components/time-field/types.d.ts.map +1 -1
- package/dist/components/time-range-field/__tests__/TimeRangeFieldTest.svelte +1 -1
- package/dist/components/time-range-field/__tests__/time-range-field.test.svelte.js +4 -4
- package/dist/components/time-range-field/components/time-range-field-root.svelte +5 -5
- package/dist/components/time-range-field/types.d.ts +1 -1
- package/dist/components/time-range-field/types.d.ts.map +1 -1
- package/dist/components/toast/toast.svelte +15 -15
- package/dist/components/toggle/toggle.svelte +3 -4
- package/dist/components/toggle/toggle.svelte.d.ts.map +1 -1
- package/dist/components/toggle-group/components/toggle-group-item.svelte +3 -4
- package/dist/components/toggle-group/components/toggle-group-item.svelte.d.ts.map +1 -1
- package/dist/components/toggle-group/components/toggle-group-root.svelte +7 -11
- package/dist/components/toggle-group/components/toggle-group-root.svelte.d.ts.map +1 -1
- package/dist/components/toggle-group/types.d.ts.map +1 -1
- package/dist/components/toolbar/__tests__/ToolbarCompositionTest.svelte +7 -7
- package/dist/components/toolbar/__tests__/ToolbarTabstopTest.svelte +5 -5
- package/dist/components/toolbar/toolbar-group.svelte +3 -8
- package/dist/components/toolbar/toolbar-group.svelte.d.ts.map +1 -1
- package/dist/components/toolbar/toolbar-separator.svelte +2 -3
- package/dist/components/toolbar/toolbar-separator.svelte.d.ts.map +1 -1
- package/dist/components/toolbar/toolbar.svelte +17 -23
- package/dist/components/toolbar/toolbar.svelte.d.ts.map +1 -1
- package/dist/components/tooltip/__tests__/TooltipTest.svelte +1 -1
- package/dist/components/tooltip/components/tooltip-content.svelte +20 -15
- package/dist/components/tooltip/components/tooltip-content.svelte.d.ts.map +1 -1
- package/dist/components/tooltip/components/tooltip-provider.svelte +8 -3
- package/dist/components/tooltip/components/tooltip-provider.svelte.d.ts.map +1 -1
- package/dist/components/tooltip/components/tooltip-root.svelte +1 -1
- package/dist/components/tooltip/components/tooltip-trigger.svelte +15 -13
- package/dist/components/tooltip/components/tooltip-trigger.svelte.d.ts.map +1 -1
- package/dist/components/tooltip/index.d.ts +1 -1
- package/dist/components/tooltip/index.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip-provider.svelte.d.ts.map +1 -1
- package/dist/components/tree/__tests__/TreeLabelContentTest.svelte +7 -7
- package/dist/components/tree/__tests__/TreeTest.svelte +7 -7
- package/dist/components/tree/components/tree-item.svelte +34 -30
- package/dist/components/tree/components/tree-item.svelte.d.ts.map +1 -1
- package/dist/components/tree/components/tree-root.svelte +2 -2
- package/dist/components/tree/tree.svelte.d.ts.map +1 -1
- package/dist/components/tree/types.d.ts +9 -9
- package/dist/components/tree/types.d.ts.map +1 -1
- package/dist/components/virtualizer/__tests__/waterfall-layout.test.js +1 -1
- package/dist/components/virtualizer/components/virtualizer-root.svelte +8 -17
- package/dist/components/virtualizer/components/virtualizer-root.svelte.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/announcer/announcer.svelte.d.ts.map +1 -1
- package/dist/internal/date-time/calendar-helpers.d.ts.map +1 -1
- package/dist/internal/date-time/formatter.d.ts.map +1 -1
- package/dist/internal/date-time/types.d.ts.map +1 -1
- package/dist/internal/date-time/types.js +4 -1
- package/dist/internal/date-time/utils.d.ts +2 -2
- package/dist/internal/date-time/utils.d.ts.map +1 -1
- package/dist/internal/date-time/utils.js +2 -2
- package/dist/internal/dismissible-layer/dismissible-layer.svelte.d.ts.map +1 -1
- package/dist/internal/dismissible-layer/dismissible-layer.svelte.js +6 -6
- package/dist/internal/drag-drop/__tests__/auto-scroll.test.js +6 -2
- package/dist/internal/drag-drop/__tests__/drag-session.test.svelte.js +9 -4
- package/dist/internal/drag-drop/__tests__/drop-delegate.test.js +18 -10
- package/dist/internal/drag-drop/auto-scroll.svelte.d.ts.map +1 -1
- package/dist/internal/drag-drop/auto-scroll.svelte.js +12 -8
- package/dist/internal/drag-drop/drag-session.svelte.d.ts.map +1 -1
- package/dist/internal/drag-drop/drag-session.svelte.js +41 -17
- package/dist/internal/drag-drop/drag-source.svelte.d.ts.map +1 -1
- package/dist/internal/drag-drop/drop-delegate.svelte.d.ts.map +1 -1
- package/dist/internal/drag-drop/drop-delegate.svelte.js +3 -3
- package/dist/internal/drag-drop/drop-target.svelte.d.ts.map +1 -1
- package/dist/internal/drag-drop/keyboard-dnd.svelte.d.ts.map +1 -1
- package/dist/internal/escape-layer/escape-layer.svelte.d.ts.map +1 -1
- package/dist/internal/escape-layer/escape-layer.svelte.js +2 -2
- package/dist/internal/floating-layer/floating-layer.svelte.d.ts.map +1 -1
- package/dist/internal/floating-layer/types.d.ts.map +1 -1
- package/dist/internal/focus-scope/focus-scope.svelte.d.ts.map +1 -1
- package/dist/internal/grace-area/grace-area.svelte.d.ts.map +1 -1
- package/dist/internal/grace-area/grace-area.svelte.js +1 -1
- package/dist/internal/helpers/arrays.d.ts.map +1 -1
- package/dist/internal/helpers/dom.d.ts.map +1 -1
- package/dist/internal/helpers/dom.js +2 -2
- package/dist/internal/helpers/merge-props.d.ts.map +1 -1
- package/dist/internal/i18n/languages.d.ts.map +1 -1
- package/dist/internal/i18n/languages.js +2 -2
- package/dist/internal/portal/__tests__/PortalTest.svelte +3 -3
- package/dist/internal/portal/portal-consumer.svelte +1 -1
- package/dist/internal/portal/portal.svelte +7 -3
- package/dist/internal/portal/portal.svelte.d.ts.map +1 -1
- package/dist/internal/presence-layer/presence-layer.svelte.d.ts.map +1 -1
- package/dist/internal/roving-focus/roving-focus.svelte.d.ts.map +1 -1
- package/dist/internal/roving-focus/roving-focus.svelte.js +2 -2
- package/dist/internal/scroll-lock/scroll-lock.svelte.d.ts.map +1 -1
- package/dist/internal/text-selection-layer/text-selection-layer.svelte.d.ts.map +1 -1
- package/dist/internal/typeahead/typeahead.svelte.d.ts.map +1 -1
- package/dist/internal/typeahead/typeahead.svelte.js +1 -1
- package/package.json +1 -1
- package/src/fonts.css +2 -2
- package/src/themes/__tests__/carbon-dark-contrast.test.ts +170 -0
- package/src/themes/carbon.css +136 -107
- package/src/themes/day.css +104 -106
- package/src/themes/docs.css +104 -106
- package/src/themes/iris-ocr.css +104 -108
- package/src/themes/midnight.css +104 -107
- package/src/themes/spectral-components.css +3 -1
- package/src/themes/spectral.css +116 -111
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { flushSync, mount, unmount } from 'svelte';
|
|
2
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
3
3
|
import TabsRoot from '../components/tabs-root.svelte';
|
|
4
4
|
import TabsTest from './TabsTest.svelte';
|
|
5
5
|
describe('tabs', () => {
|
|
@@ -148,4 +148,80 @@ describe('tabs', () => {
|
|
|
148
148
|
flushSync();
|
|
149
149
|
expect(tabs[1]?.getAttribute('aria-selected')).toBe('true');
|
|
150
150
|
});
|
|
151
|
+
// -------------------------------------------------------------------------
|
|
152
|
+
// overflow prop (mobile overflow strategy)
|
|
153
|
+
//
|
|
154
|
+
// Default is 'scroll' so long labels never silently truncate; consumers can
|
|
155
|
+
// opt into 'wrap' for multi-row pill layouts. When the active tab changes,
|
|
156
|
+
// the list scrolls it into view via `scrollIntoView` so the user is never
|
|
157
|
+
// looking at an out-of-viewport active tab.
|
|
158
|
+
// -------------------------------------------------------------------------
|
|
159
|
+
describe('overflow prop', () => {
|
|
160
|
+
it('default overflow="scroll" emits data-overflow="scroll" on tablist', () => {
|
|
161
|
+
setup();
|
|
162
|
+
const tablist = target.querySelector('[role="tablist"]');
|
|
163
|
+
expect(tablist.getAttribute('data-overflow')).toBe('scroll');
|
|
164
|
+
});
|
|
165
|
+
it('overflow="wrap" emits data-overflow="wrap" on tablist', () => {
|
|
166
|
+
setup({ overflow: 'wrap' });
|
|
167
|
+
const tablist = target.querySelector('[role="tablist"]');
|
|
168
|
+
expect(tablist.getAttribute('data-overflow')).toBe('wrap');
|
|
169
|
+
});
|
|
170
|
+
it('vertical + default overflow still emits data-overflow="scroll" alongside data-orientation', () => {
|
|
171
|
+
setup({ orientation: 'vertical' });
|
|
172
|
+
const tablist = target.querySelector('[role="tablist"]');
|
|
173
|
+
expect(tablist.getAttribute('data-overflow')).toBe('scroll');
|
|
174
|
+
expect(tablist.getAttribute('data-orientation')).toBe('vertical');
|
|
175
|
+
});
|
|
176
|
+
it('changing the active tab calls scrollIntoView on the newly active trigger when overflow="scroll"', () => {
|
|
177
|
+
// jsdom does not implement scrollIntoView — install a mock on the
|
|
178
|
+
// prototype so the component's call hits our spy instead of throwing.
|
|
179
|
+
const original = HTMLElement.prototype.scrollIntoView;
|
|
180
|
+
const spy = vi.fn();
|
|
181
|
+
HTMLElement.prototype.scrollIntoView = spy;
|
|
182
|
+
try {
|
|
183
|
+
setup({ value: 'tab1' });
|
|
184
|
+
const tabs = target.querySelectorAll('[role="tab"]');
|
|
185
|
+
spy.mockClear(); // ignore any call from the initial mount
|
|
186
|
+
tabs[1].click();
|
|
187
|
+
flushSync();
|
|
188
|
+
// The spy should have been called on the new active trigger with a
|
|
189
|
+
// sensible config that brings it into the viewport without scrolling
|
|
190
|
+
// the page vertically.
|
|
191
|
+
expect(spy).toHaveBeenCalled();
|
|
192
|
+
const lastCall = spy.mock.calls.at(-1);
|
|
193
|
+
const arg = lastCall?.[0];
|
|
194
|
+
expect(arg).toBeDefined();
|
|
195
|
+
expect(typeof arg).toBe('object');
|
|
196
|
+
expect(arg).toMatchObject({
|
|
197
|
+
inline: expect.stringMatching(/^(nearest|center|start|end)$/),
|
|
198
|
+
block: 'nearest',
|
|
199
|
+
});
|
|
200
|
+
// And the call target was the now-active trigger, not an arbitrary node.
|
|
201
|
+
const callTarget = spy.mock.contexts.at(-1);
|
|
202
|
+
expect(callTarget?.getAttribute('data-state')).toBe('active');
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
;
|
|
206
|
+
HTMLElement.prototype.scrollIntoView = original;
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
it('overflow="wrap" does NOT call scrollIntoView on tab change (wrap layout shows all tabs)', () => {
|
|
210
|
+
const original = HTMLElement.prototype.scrollIntoView;
|
|
211
|
+
const spy = vi.fn();
|
|
212
|
+
HTMLElement.prototype.scrollIntoView = spy;
|
|
213
|
+
try {
|
|
214
|
+
setup({ value: 'tab1', overflow: 'wrap' });
|
|
215
|
+
const tabs = target.querySelectorAll('[role="tab"]');
|
|
216
|
+
spy.mockClear();
|
|
217
|
+
tabs[1].click();
|
|
218
|
+
flushSync();
|
|
219
|
+
expect(spy).not.toHaveBeenCalled();
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
;
|
|
223
|
+
HTMLElement.prototype.scrollIntoView = original;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
});
|
|
151
227
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang=
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import type { TabsContentProps } from '../types.js'
|
|
3
3
|
import { getTabsContext } from '../tabs.svelte.js'
|
|
4
4
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
{#if isActive}
|
|
12
12
|
<div
|
|
13
13
|
class="sp-tabs-content {className ?? ''}"
|
|
14
|
-
role=
|
|
14
|
+
role="tabpanel"
|
|
15
15
|
tabindex={0}
|
|
16
16
|
data-state={isActive ? 'active' : 'inactive'}
|
|
17
17
|
>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<script lang=
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import type { TabsListProps } from '../types.js'
|
|
3
3
|
import { RovingFocusGroup } from '../../../internal/roving-focus/index.js'
|
|
4
4
|
import { getTabsContext } from '../tabs.svelte.js'
|
|
5
5
|
|
|
6
|
-
const { class: className, children }: TabsListProps = $props()
|
|
6
|
+
const { overflow = 'scroll', class: className, children }: TabsListProps = $props()
|
|
7
7
|
|
|
8
8
|
const ctx = getTabsContext()
|
|
9
9
|
|
|
@@ -16,27 +16,50 @@
|
|
|
16
16
|
let listEl: HTMLElement | undefined = $state()
|
|
17
17
|
|
|
18
18
|
function onkeydown(event: KeyboardEvent) {
|
|
19
|
-
if (!listEl)
|
|
20
|
-
return
|
|
19
|
+
if (!listEl) return
|
|
21
20
|
roving.handleKeydown(listEl, event)
|
|
22
21
|
|
|
23
22
|
if (ctx.activationMode === 'automatic') {
|
|
24
23
|
// In automatic mode, focus activates the tab immediately
|
|
25
|
-
const focused = (
|
|
24
|
+
const focused = (
|
|
25
|
+
typeof document !== 'undefined' ? document.activeElement : null
|
|
26
|
+
) as HTMLElement | null
|
|
26
27
|
if (focused?.hasAttribute('data-roving-focus-item')) {
|
|
27
28
|
focused.click()
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
}
|
|
32
|
+
|
|
33
|
+
// When `overflow="scroll"`, the active trigger may sit outside the visible
|
|
34
|
+
// viewport (especially on mobile after a tab is selected via list-restored
|
|
35
|
+
// state or via keyboard navigation). Re-run scrollIntoView on every value
|
|
36
|
+
// change so the user never looks at an out-of-viewport active tab. We use
|
|
37
|
+
// `inline: 'nearest'` + `block: 'nearest'` so the scroll is minimal and
|
|
38
|
+
// never moves the page vertically when the tablist is horizontal.
|
|
39
|
+
$effect(() => {
|
|
40
|
+
if (overflow !== 'scroll') return
|
|
41
|
+
// Track ctx.value to retrigger on activation changes.
|
|
42
|
+
const _activeValue = ctx.value
|
|
43
|
+
if (!listEl) return
|
|
44
|
+
const active = listEl.querySelector<HTMLElement>('[role="tab"][data-state="active"]')
|
|
45
|
+
if (!active) return
|
|
46
|
+
// SSR-safe: $effect only runs in the browser, but scrollIntoView may still
|
|
47
|
+
// be undefined in jsdom-based tests — guard before calling.
|
|
48
|
+
if (typeof active.scrollIntoView !== 'function') return
|
|
49
|
+
active.scrollIntoView({ inline: 'nearest', block: 'nearest' })
|
|
50
|
+
// `_activeValue` is read above strictly for the reactive subscription.
|
|
51
|
+
void _activeValue
|
|
52
|
+
})
|
|
31
53
|
</script>
|
|
32
54
|
|
|
33
55
|
<div
|
|
34
56
|
bind:this={listEl}
|
|
35
57
|
class="sp-tabs-list {className ?? ''}"
|
|
36
|
-
role=
|
|
58
|
+
role="tablist"
|
|
37
59
|
aria-orientation={ctx.orientation}
|
|
38
60
|
tabindex={0}
|
|
39
61
|
data-orientation={ctx.orientation}
|
|
62
|
+
data-overflow={overflow}
|
|
40
63
|
{onkeydown}
|
|
41
64
|
>
|
|
42
65
|
{#if children}{@render children()}{/if}
|
|
@@ -54,4 +77,36 @@
|
|
|
54
77
|
border-bottom: none;
|
|
55
78
|
border-right: 1px solid var(--sp-sys-color-outline-variant);
|
|
56
79
|
}
|
|
80
|
+
|
|
81
|
+
/* `overflow="scroll"` (default): horizontal scroll on horizontal tablist,
|
|
82
|
+
vertical scroll on vertical tablist. Native scrollbar hidden — the
|
|
83
|
+
active trigger is brought into view programmatically via scrollIntoView.
|
|
84
|
+
The tablist itself keeps its tabindex={0}, so it remains keyboard-scrollable. */
|
|
85
|
+
.sp-tabs-list[data-overflow='scroll'][data-orientation='horizontal'] {
|
|
86
|
+
overflow-x: auto;
|
|
87
|
+
overflow-y: hidden;
|
|
88
|
+
scrollbar-width: none; /* Firefox */
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.sp-tabs-list[data-overflow='scroll'][data-orientation='vertical'] {
|
|
92
|
+
overflow-x: hidden;
|
|
93
|
+
overflow-y: auto;
|
|
94
|
+
scrollbar-width: none;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.sp-tabs-list[data-overflow='scroll']::-webkit-scrollbar {
|
|
98
|
+
display: none; /* WebKit */
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* `overflow="wrap"`: triggers wrap onto multiple lines. We also unset
|
|
102
|
+
`white-space: nowrap` on every trigger (set in tabs-trigger.svelte) via
|
|
103
|
+
a scoped `:global` selector — without this the trigger labels would
|
|
104
|
+
still refuse to wrap inside their pill, defeating the point of wrap. */
|
|
105
|
+
.sp-tabs-list[data-overflow='wrap'] {
|
|
106
|
+
flex-wrap: wrap;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.sp-tabs-list[data-overflow='wrap'] :global(.sp-tabs-trigger) {
|
|
110
|
+
white-space: normal;
|
|
111
|
+
}
|
|
57
112
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-list.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tabs/components/tabs-list.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"tabs-list.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tabs/components/tabs-list.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAkEhD,QAAA,MAAM,QAAQ,mDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang=
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import type { TabsTriggerProps } from '../types.js'
|
|
3
3
|
import { getTabsContext } from '../tabs.svelte.js'
|
|
4
4
|
|
|
@@ -8,15 +8,14 @@
|
|
|
8
8
|
const isActive = $derived(ctx.value === value)
|
|
9
9
|
|
|
10
10
|
function onclick() {
|
|
11
|
-
if (!disabled)
|
|
12
|
-
ctx.setValue(value)
|
|
11
|
+
if (!disabled) ctx.setValue(value)
|
|
13
12
|
}
|
|
14
13
|
</script>
|
|
15
14
|
|
|
16
15
|
<button
|
|
17
16
|
class="sp-tabs-trigger {className ?? ''}"
|
|
18
|
-
type=
|
|
19
|
-
role=
|
|
17
|
+
type="button"
|
|
18
|
+
role="tab"
|
|
20
19
|
aria-selected={isActive}
|
|
21
20
|
tabindex={isActive ? 0 : -1}
|
|
22
21
|
{disabled}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs-trigger.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tabs/components/tabs-trigger.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"tabs-trigger.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tabs/components/tabs-trigger.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAyBnD,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -2,5 +2,5 @@ export { default as Content } from './components/tabs-content.svelte';
|
|
|
2
2
|
export { default as List } from './components/tabs-list.svelte';
|
|
3
3
|
export { default as Root } from './components/tabs-root.svelte';
|
|
4
4
|
export { default as Trigger } from './components/tabs-trigger.svelte';
|
|
5
|
-
export type { TabsActivationMode, TabsContentProps, TabsListProps, TabsOrientation, TabsProps, TabsTriggerProps, } from './types.js';
|
|
5
|
+
export type { TabsActivationMode, TabsContentProps, TabsListOverflow, TabsListProps, TabsOrientation, TabsProps, TabsTriggerProps, } from './types.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,SAAS,EACT,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,SAAS,EACT,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
export type TabsOrientation = 'horizontal' | 'vertical';
|
|
3
3
|
export type TabsActivationMode = 'automatic' | 'manual';
|
|
4
|
+
/**
|
|
5
|
+
* Strategy used by `Tabs.List` when its triggers exceed the available space.
|
|
6
|
+
*
|
|
7
|
+
* - `'scroll'` (default): the tablist becomes horizontally (or vertically, when
|
|
8
|
+
* `orientation="vertical"`) scrollable, hides its native scrollbar, and
|
|
9
|
+
* programmatically scrolls the newly active trigger into view via
|
|
10
|
+
* `scrollIntoView({ inline: 'nearest', block: 'nearest' })` on every value
|
|
11
|
+
* change. Suited to narrow viewports (mobile) and to surfaces with an
|
|
12
|
+
* unknown number of tabs.
|
|
13
|
+
* - `'wrap'`: the tablist wraps its triggers onto multiple lines and unsets
|
|
14
|
+
* `white-space: nowrap` on the trigger labels so long labels remain
|
|
15
|
+
* readable on multi-row. No `scrollIntoView` is performed because every
|
|
16
|
+
* trigger is already visible.
|
|
17
|
+
*
|
|
18
|
+
* The previous behaviour (no overflow handling at all — long labels silently
|
|
19
|
+
* truncated and the user had no scroll affordance) is intentionally not
|
|
20
|
+
* exposed in the API: consumers who need it can still use `class` to override
|
|
21
|
+
* the styling locally, but the design system does not offer a mode whose
|
|
22
|
+
* documented behaviour is "silently broken on narrow viewports".
|
|
23
|
+
*/
|
|
24
|
+
export type TabsListOverflow = 'scroll' | 'wrap';
|
|
4
25
|
export interface TabsProps {
|
|
5
26
|
/** The currently active tab value. */
|
|
6
27
|
value?: string;
|
|
@@ -20,6 +41,11 @@ export interface TabsProps {
|
|
|
20
41
|
children?: Snippet;
|
|
21
42
|
}
|
|
22
43
|
export interface TabsListProps {
|
|
44
|
+
/**
|
|
45
|
+
* Strategy used when triggers exceed the available space. Defaults to
|
|
46
|
+
* `'scroll'`. See {@link TabsListOverflow}.
|
|
47
|
+
*/
|
|
48
|
+
overflow?: TabsListOverflow;
|
|
23
49
|
/** Additional CSS class. */
|
|
24
50
|
class?: string;
|
|
25
51
|
/** Content snippet. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/components/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAErC,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAA;AACvD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAA;AAEvD,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/components/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAErC,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAA;AACvD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEhD,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
1
4
|
import { mount, unmount } from 'svelte';
|
|
2
5
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
6
|
import Textarea from '../textarea.svelte';
|
|
7
|
+
const componentSource = readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), '../textarea.svelte'), 'utf8');
|
|
4
8
|
describe('textarea', () => {
|
|
5
9
|
let target;
|
|
6
10
|
let instance;
|
|
@@ -23,4 +27,29 @@ describe('textarea', () => {
|
|
|
23
27
|
setup({ invalid: true });
|
|
24
28
|
expect(target.querySelector('textarea')?.getAttribute('aria-invalid')).toBe('true');
|
|
25
29
|
});
|
|
30
|
+
// ── iOS Safari focus-zoom contract ────────────────────────────────
|
|
31
|
+
// Real WebKit focus-zoom cannot be reproduced in jsdom. These tests
|
|
32
|
+
// lock the CSS contract that prevents the regression on `size="sm"` :
|
|
33
|
+
// the `sm` typography stays token-driven for desktop, and a clamp to
|
|
34
|
+
// >= 1rem is applied on coarse pointers (touch / iOS). Other sizes
|
|
35
|
+
// inherit the base 1rem and are already iOS-safe.
|
|
36
|
+
describe('iOS Safari focus-zoom contract (size="sm")', () => {
|
|
37
|
+
it('keeps fine-pointer typography on the body-medium token', () => {
|
|
38
|
+
expect(componentSource).toMatch(/\.sp-textarea\.sm\s*\{[^}]*font-size:\s*var\(--sp-sys-typescale-body-medium-size[^}]*\}/);
|
|
39
|
+
});
|
|
40
|
+
it('clamps the sm textarea to at least 1rem on coarse pointers', () => {
|
|
41
|
+
expect(componentSource).toMatch(/@media\s*\(pointer:\s*coarse\)\s*\{[\s\S]*?\.sp-textarea\.sm\s*\{[^}]*font-size:\s*max\(1rem,[^)]*\)[\s\S]*?\}/);
|
|
42
|
+
});
|
|
43
|
+
it('only the sm variant is targeted by the coarse-pointer clamp', () => {
|
|
44
|
+
// The clamp must target `.sp-textarea.sm` and only `.sp-textarea.sm`.
|
|
45
|
+
// Other sizes inherit the base 1rem and must not get an override.
|
|
46
|
+
const coarseRules = [
|
|
47
|
+
...componentSource.matchAll(/@media\s*\(pointer:\s*coarse\)\s*\{[^}]*\{/g),
|
|
48
|
+
];
|
|
49
|
+
expect(coarseRules.length).toBe(1);
|
|
50
|
+
expect(coarseRules[0][0]).toContain('.sp-textarea.sm');
|
|
51
|
+
expect(coarseRules[0][0]).not.toContain('.sp-textarea.md');
|
|
52
|
+
expect(coarseRules[0][0]).not.toContain('.sp-textarea.lg');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
26
55
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang=
|
|
1
|
+
<script lang="ts">
|
|
2
2
|
import type { TextareaProps } from './types.js'
|
|
3
3
|
|
|
4
4
|
let {
|
|
@@ -48,6 +48,19 @@
|
|
|
48
48
|
font-size: var(--sp-sys-typescale-body-medium-size, 0.875rem);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
/* iOS Safari focus zoom : WebKit auto-zooms the viewport when a focused
|
|
52
|
+
form control's computed font-size is < 16px. The `sm` size renders
|
|
53
|
+
at `body-medium` (14px by default), which crosses that threshold.
|
|
54
|
+
Clamp to at least 1rem on coarse pointers (touch / iOS) so dense
|
|
55
|
+
forms on mobile stay usable; `max()` preserves any theme that may
|
|
56
|
+
override `--sp-sys-typescale-body-medium-size` upward. Other sizes
|
|
57
|
+
inherit the base 1rem and are already iOS-safe. */
|
|
58
|
+
@media (pointer: coarse) {
|
|
59
|
+
.sp-textarea.sm {
|
|
60
|
+
font-size: max(1rem, var(--sp-sys-typescale-body-medium-size, 0.875rem));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
51
64
|
.sp-textarea.md {
|
|
52
65
|
min-height: 96px;
|
|
53
66
|
}
|
|
@@ -29,10 +29,9 @@ describe('timeField', () => {
|
|
|
29
29
|
// 3. Segments include hour and minute labels
|
|
30
30
|
it('segments include hour and minute labels', () => {
|
|
31
31
|
setup();
|
|
32
|
-
const labels = Array.from(target.querySelectorAll('[role="spinbutton"]'))
|
|
33
|
-
|
|
34
|
-
expect(labels.some(l => l &&
|
|
35
|
-
expect(labels.some(l => l && l.includes('minute'))).toBe(true);
|
|
32
|
+
const labels = Array.from(target.querySelectorAll('[role="spinbutton"]')).map((s) => s.getAttribute('aria-label')?.toLowerCase() ?? '');
|
|
33
|
+
expect(labels.some((l) => l && (l.includes('hour') || l.includes('heure')))).toBe(true);
|
|
34
|
+
expect(labels.some((l) => l && l.includes('minute'))).toBe(true);
|
|
36
35
|
});
|
|
37
36
|
// 4. Renders value when provided (minute field shows 30)
|
|
38
37
|
it('renders value when provided', () => {
|
|
@@ -76,9 +75,8 @@ describe('timeField', () => {
|
|
|
76
75
|
// 9. granularity="second" adds seconds segment
|
|
77
76
|
it('granularity="second" adds seconds segment', () => {
|
|
78
77
|
setup({ granularity: 'second', value: { hour: 14, minute: 30, second: 45 } });
|
|
79
|
-
const labels = Array.from(target.querySelectorAll('[role="spinbutton"]'))
|
|
80
|
-
|
|
81
|
-
expect(labels.some(l => l && l.includes('second'))).toBe(true);
|
|
78
|
+
const labels = Array.from(target.querySelectorAll('[role="spinbutton"]')).map((s) => s.getAttribute('aria-label')?.toLowerCase() ?? '');
|
|
79
|
+
expect(labels.some((l) => l && l.includes('second'))).toBe(true);
|
|
82
80
|
});
|
|
83
81
|
// 10. disabled marks group with data-disabled
|
|
84
82
|
it('disabled marks group as disabled', () => {
|
|
@@ -90,7 +88,7 @@ describe('timeField', () => {
|
|
|
90
88
|
it('readonly marks segments as readonly', () => {
|
|
91
89
|
setup({ readonly: true });
|
|
92
90
|
const segments = target.querySelectorAll('[role="spinbutton"]');
|
|
93
|
-
const readonlySegments = Array.from(segments).filter(s => s.getAttribute('aria-readonly') === 'true');
|
|
91
|
+
const readonlySegments = Array.from(segments).filter((s) => s.getAttribute('aria-readonly') === 'true');
|
|
94
92
|
expect(readonlySegments.length).toBeGreaterThanOrEqual(2);
|
|
95
93
|
});
|
|
96
94
|
// 12. group has aria-label
|