bits-ui 1.8.0 → 2.2.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/bits/accordion/accordion.svelte.d.ts +56 -53
- package/dist/bits/accordion/accordion.svelte.js +78 -89
- package/dist/bits/accordion/components/accordion-content.svelte +5 -3
- package/dist/bits/accordion/components/accordion-header.svelte +4 -2
- package/dist/bits/accordion/components/accordion-item.svelte +6 -3
- package/dist/bits/accordion/components/accordion-trigger.svelte +4 -2
- package/dist/bits/accordion/components/accordion.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +8 -3
- package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +2 -2
- package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +4 -2
- package/dist/bits/avatar/avatar.svelte.d.ts +2 -1
- package/dist/bits/avatar/avatar.svelte.js +8 -6
- package/dist/bits/avatar/components/avatar-fallback.svelte +4 -2
- package/dist/bits/avatar/components/avatar-image.svelte +4 -2
- package/dist/bits/avatar/components/avatar.svelte +4 -2
- package/dist/bits/button/components/button.svelte +1 -1
- package/dist/bits/calendar/calendar.svelte.d.ts +3 -9
- package/dist/bits/calendar/calendar.svelte.js +55 -41
- package/dist/bits/calendar/components/calendar-cell.svelte +4 -2
- package/dist/bits/calendar/components/calendar-day.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-body.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-head.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-row.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid.svelte +4 -2
- package/dist/bits/calendar/components/calendar-head-cell.svelte +4 -2
- package/dist/bits/calendar/components/calendar-header.svelte +4 -2
- package/dist/bits/calendar/components/calendar-heading.svelte +4 -2
- package/dist/bits/calendar/components/calendar-next-button.svelte +4 -2
- package/dist/bits/calendar/components/calendar-prev-button.svelte +4 -2
- package/dist/bits/checkbox/checkbox.svelte.js +4 -14
- package/dist/bits/checkbox/components/checkbox-group-label.svelte +4 -2
- package/dist/bits/checkbox/components/checkbox-group.svelte +4 -2
- package/dist/bits/checkbox/components/checkbox.svelte +4 -2
- package/dist/bits/collapsible/collapsible.svelte.js +4 -10
- package/dist/bits/collapsible/components/collapsible-content.svelte +5 -3
- package/dist/bits/collapsible/components/collapsible-trigger.svelte +4 -2
- package/dist/bits/collapsible/components/collapsible.svelte +4 -2
- package/dist/bits/combobox/components/combobox-input.svelte +3 -3
- package/dist/bits/combobox/components/combobox.svelte +6 -1
- package/dist/bits/combobox/types.d.ts +18 -1
- package/dist/bits/command/command.svelte.js +13 -45
- package/dist/bits/command/components/_command-label.svelte +6 -7
- package/dist/bits/command/components/_command-label.svelte.d.ts +1 -1
- package/dist/bits/command/components/command-empty.svelte +4 -2
- package/dist/bits/command/components/command-group-heading.svelte +4 -2
- package/dist/bits/command/components/command-group-items.svelte +4 -2
- package/dist/bits/command/components/command-group.svelte +4 -2
- package/dist/bits/command/components/command-input.svelte +4 -2
- package/dist/bits/command/components/command-item.svelte +4 -2
- package/dist/bits/command/components/command-link-item.svelte +4 -2
- package/dist/bits/command/components/command-list.svelte +4 -2
- package/dist/bits/command/components/command-loading.svelte +4 -2
- package/dist/bits/command/components/command-separator.svelte +4 -2
- package/dist/bits/command/components/command-viewport.svelte +4 -2
- package/dist/bits/command/components/command.svelte +4 -2
- package/dist/bits/context-menu/components/context-menu-content-static.svelte +2 -3
- package/dist/bits/context-menu/components/context-menu-content.svelte +2 -3
- package/dist/bits/context-menu/components/context-menu-trigger.svelte +1 -1
- package/dist/bits/date-field/components/date-field-input.svelte +4 -2
- package/dist/bits/date-field/components/date-field-label.svelte +4 -2
- package/dist/bits/date-field/components/date-field-segment.svelte +4 -2
- package/dist/bits/date-field/date-field.svelte.d.ts +7 -5
- package/dist/bits/date-field/date-field.svelte.js +29 -38
- package/dist/bits/date-picker/components/date-picker-calendar.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field-input.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field-label.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field.svelte +4 -2
- package/dist/bits/date-range-field/date-range-field.svelte.d.ts +2 -0
- package/dist/bits/date-range-field/date-range-field.svelte.js +6 -14
- package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +4 -2
- package/dist/bits/dialog/components/dialog-close.svelte +4 -2
- package/dist/bits/dialog/components/dialog-content.svelte +8 -2
- package/dist/bits/dialog/components/dialog-description.svelte +4 -2
- package/dist/bits/dialog/components/dialog-overlay.svelte +8 -3
- package/dist/bits/dialog/components/dialog-title.svelte +4 -2
- package/dist/bits/dialog/components/dialog-trigger.svelte +4 -2
- package/dist/bits/dialog/dialog.svelte.d.ts +1 -1
- package/dist/bits/dialog/dialog.svelte.js +19 -47
- package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +6 -5
- package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +6 -5
- package/dist/bits/index.d.ts +2 -0
- package/dist/bits/index.js +2 -0
- package/dist/bits/label/components/label.svelte +4 -2
- package/dist/bits/label/label.svelte.js +2 -2
- package/dist/bits/link-preview/components/link-preview-content-static.svelte +6 -2
- package/dist/bits/link-preview/components/link-preview-content.svelte +6 -2
- package/dist/bits/link-preview/components/link-preview-trigger.svelte +5 -3
- package/dist/bits/link-preview/link-preview.svelte.d.ts +2 -0
- package/dist/bits/link-preview/link-preview.svelte.js +13 -19
- package/dist/bits/menu/components/menu-checkbox-group.svelte +4 -2
- package/dist/bits/menu/components/menu-checkbox-item.svelte +6 -4
- package/dist/bits/menu/components/menu-content-static.svelte +6 -5
- package/dist/bits/menu/components/menu-content.svelte +6 -5
- package/dist/bits/menu/components/menu-group-heading.svelte +4 -2
- package/dist/bits/menu/components/menu-group.svelte +4 -2
- package/dist/bits/menu/components/menu-item.svelte +4 -2
- package/dist/bits/menu/components/menu-radio-group.svelte +4 -2
- package/dist/bits/menu/components/menu-radio-item.svelte +4 -2
- package/dist/bits/menu/components/menu-separator.svelte +4 -2
- package/dist/bits/menu/components/menu-sub-content-static.svelte +6 -5
- package/dist/bits/menu/components/menu-sub-content.svelte +6 -5
- package/dist/bits/menu/components/menu-sub-trigger.svelte +6 -3
- package/dist/bits/menu/components/menu-trigger.svelte +5 -3
- package/dist/bits/menu/menu.svelte.d.ts +9 -20
- package/dist/bits/menu/menu.svelte.js +40 -63
- package/dist/bits/menubar/components/menubar-content-static.svelte +4 -2
- package/dist/bits/menubar/components/menubar-content.svelte +4 -2
- package/dist/bits/menubar/components/menubar-menu.svelte +4 -2
- package/dist/bits/menubar/components/menubar-trigger.svelte +14 -6
- package/dist/bits/menubar/components/menubar.svelte +4 -2
- package/dist/bits/menubar/menubar.svelte.d.ts +24 -20
- package/dist/bits/menubar/menubar.svelte.js +40 -56
- package/dist/bits/meter/components/meter.svelte +4 -2
- package/dist/bits/meter/meter.svelte.js +2 -2
- package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +5 -2
- package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +8 -3
- package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +6 -4
- package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +6 -3
- package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +5 -3
- package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
- package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +3 -1
- package/dist/bits/navigation-menu/navigation-menu.svelte.js +33 -60
- package/dist/bits/pagination/components/pagination-next-button.svelte +4 -2
- package/dist/bits/pagination/components/pagination-page.svelte +4 -2
- package/dist/bits/pagination/components/pagination-prev-button.svelte +4 -2
- package/dist/bits/pagination/components/pagination.svelte +4 -2
- package/dist/bits/pagination/pagination.svelte.js +4 -4
- package/dist/bits/pin-input/components/pin-input-cell.svelte +4 -2
- package/dist/bits/pin-input/components/pin-input.svelte +5 -3
- package/dist/bits/pin-input/pin-input.svelte.d.ts +4 -2
- package/dist/bits/pin-input/pin-input.svelte.js +20 -22
- package/dist/bits/pin-input/usePasswordManager.svelte.d.ts +3 -2
- package/dist/bits/pin-input/usePasswordManager.svelte.js +6 -5
- package/dist/bits/popover/components/popover-close.svelte +4 -2
- package/dist/bits/popover/components/popover-content-static.svelte +6 -2
- package/dist/bits/popover/components/popover-content.svelte +6 -2
- package/dist/bits/popover/components/popover-trigger.svelte +5 -3
- package/dist/bits/popover/popover.svelte.js +4 -18
- package/dist/bits/progress/components/progress.svelte +4 -2
- package/dist/bits/progress/progress.svelte.js +2 -2
- package/dist/bits/radio-group/components/radio-group-item.svelte +4 -2
- package/dist/bits/radio-group/components/radio-group.svelte +4 -2
- package/dist/bits/radio-group/radio-group.svelte.js +4 -7
- package/dist/bits/range-calendar/components/range-calendar-cell.svelte +4 -2
- package/dist/bits/range-calendar/components/range-calendar-day.svelte +4 -2
- package/dist/bits/range-calendar/components/range-calendar.svelte +4 -2
- package/dist/bits/range-calendar/range-calendar.svelte.d.ts +2 -0
- package/dist/bits/range-calendar/range-calendar.svelte.js +12 -6
- package/dist/bits/scroll-area/components/scroll-area-corner.svelte +8 -2
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +4 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +1 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +5 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +4 -2
- package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +8 -3
- package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +4 -2
- package/dist/bits/scroll-area/components/scroll-area.svelte +4 -2
- package/dist/bits/scroll-area/scroll-area.svelte.d.ts +2 -0
- package/dist/bits/scroll-area/scroll-area.svelte.js +27 -58
- package/dist/bits/select/components/select-content-static.svelte +6 -2
- package/dist/bits/select/components/select-content.svelte +6 -2
- package/dist/bits/select/components/select-group-heading.svelte +3 -2
- package/dist/bits/select/components/select-group.svelte +4 -2
- package/dist/bits/select/components/select-item.svelte +4 -2
- package/dist/bits/select/components/select-scroll-down-button.svelte +4 -2
- package/dist/bits/select/components/select-scroll-up-button.svelte +4 -2
- package/dist/bits/select/components/select-trigger.svelte +5 -3
- package/dist/bits/select/components/select-viewport.svelte +4 -2
- package/dist/bits/select/components/select.svelte +7 -1
- package/dist/bits/select/select.svelte.d.ts +5 -19
- package/dist/bits/select/select.svelte.js +43 -60
- package/dist/bits/separator/components/separator.svelte +4 -2
- package/dist/bits/separator/separator.svelte.js +2 -2
- package/dist/bits/slider/components/slider-range.svelte +4 -2
- package/dist/bits/slider/components/slider-thumb-label.svelte +50 -0
- package/dist/bits/slider/components/slider-thumb-label.svelte.d.ts +4 -0
- package/dist/bits/slider/components/slider-thumb.svelte +4 -2
- package/dist/bits/slider/components/slider-tick-label.svelte +50 -0
- package/dist/bits/slider/components/slider-tick-label.svelte.d.ts +4 -0
- package/dist/bits/slider/components/slider-tick.svelte +4 -2
- package/dist/bits/slider/components/slider.svelte +24 -5
- package/dist/bits/slider/exports.d.ts +3 -1
- package/dist/bits/slider/exports.js +2 -0
- package/dist/bits/slider/helpers.d.ts +14 -0
- package/dist/bits/slider/helpers.js +122 -0
- package/dist/bits/slider/slider.svelte.d.ts +91 -5
- package/dist/bits/slider/slider.svelte.js +194 -101
- package/dist/bits/slider/types.d.ts +105 -11
- package/dist/bits/switch/components/switch-thumb.svelte +4 -2
- package/dist/bits/switch/components/switch.svelte +4 -2
- package/dist/bits/switch/switch.svelte.js +3 -3
- package/dist/bits/tabs/components/tabs-content.svelte +4 -2
- package/dist/bits/tabs/components/tabs-list.svelte +4 -2
- package/dist/bits/tabs/components/tabs-trigger.svelte +4 -2
- package/dist/bits/tabs/components/tabs.svelte +4 -2
- package/dist/bits/tabs/tabs.svelte.js +6 -6
- package/dist/bits/time-field/components/time-field-hidden-input.svelte +10 -0
- package/dist/bits/{date-field/components/date-field-error.svelte.d.ts → time-field/components/time-field-hidden-input.svelte.d.ts} +6 -14
- package/dist/bits/time-field/components/time-field-input.svelte +39 -0
- package/dist/bits/time-field/components/time-field-input.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field-label.svelte +34 -0
- package/dist/bits/time-field/components/time-field-label.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field-segment.svelte +37 -0
- package/dist/bits/time-field/components/time-field-segment.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field.svelte +94 -0
- package/dist/bits/time-field/components/time-field.svelte.d.ts +20 -0
- package/dist/bits/time-field/exports.d.ts +5 -0
- package/dist/bits/time-field/exports.js +4 -0
- package/dist/bits/time-field/index.d.ts +1 -0
- package/dist/bits/time-field/index.js +1 -0
- package/dist/bits/time-field/time-field.svelte.d.ts +417 -0
- package/dist/bits/time-field/time-field.svelte.js +980 -0
- package/dist/bits/time-field/types.d.ts +137 -0
- package/dist/bits/time-field/types.js +1 -0
- package/dist/bits/time-range-field/components/time-range-field-input.svelte +43 -0
- package/dist/bits/time-range-field/components/time-range-field-input.svelte.d.ts +4 -0
- package/dist/bits/time-range-field/components/time-range-field-label.svelte +34 -0
- package/dist/bits/time-range-field/components/time-range-field-label.svelte.d.ts +4 -0
- package/dist/bits/time-range-field/components/time-range-field.svelte +144 -0
- package/dist/bits/time-range-field/components/time-range-field.svelte.d.ts +20 -0
- package/dist/bits/time-range-field/exports.d.ts +5 -0
- package/dist/bits/time-range-field/exports.js +4 -0
- package/dist/bits/time-range-field/index.d.ts +1 -0
- package/dist/bits/time-range-field/index.js +1 -0
- package/dist/bits/time-range-field/time-range-field.svelte.d.ts +92 -0
- package/dist/bits/time-range-field/time-range-field.svelte.js +212 -0
- package/dist/bits/time-range-field/types.d.ts +150 -0
- package/dist/bits/time-range-field/types.js +1 -0
- package/dist/bits/toggle/components/toggle.svelte +4 -2
- package/dist/bits/toggle/toggle.svelte.js +2 -2
- package/dist/bits/toggle-group/components/toggle-group-item.svelte +4 -2
- package/dist/bits/toggle-group/components/toggle-group.svelte +4 -2
- package/dist/bits/toggle-group/toggle-group.svelte.js +4 -4
- package/dist/bits/toolbar/components/toolbar-button.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-group-item.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-group.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-link.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar.svelte +4 -2
- package/dist/bits/toolbar/toolbar.svelte.js +7 -7
- package/dist/bits/tooltip/components/tooltip-content-static.svelte +6 -2
- package/dist/bits/tooltip/components/tooltip-content.svelte +6 -2
- package/dist/bits/tooltip/components/tooltip-trigger.svelte +5 -3
- package/dist/bits/tooltip/tooltip.svelte.d.ts +2 -0
- package/dist/bits/tooltip/tooltip.svelte.js +6 -15
- package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -0
- package/dist/bits/utilities/dismissible-layer/types.d.ts +2 -0
- package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +3 -3
- package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +16 -25
- package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -1
- package/dist/bits/utilities/floating-layer/types.d.ts +1 -0
- package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +3 -2
- package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +7 -27
- package/dist/bits/utilities/focus-scope/focus-scope.svelte +2 -0
- package/dist/bits/utilities/focus-scope/types.d.ts +2 -0
- package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +2 -1
- package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +15 -16
- package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +4 -0
- package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -1
- package/dist/bits/utilities/portal/types.d.ts +1 -1
- package/dist/bits/utilities/presence-layer/presence-layer.svelte +2 -2
- package/dist/bits/utilities/presence-layer/types.d.ts +2 -1
- package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +1 -1
- package/dist/bits/utilities/presence-layer/use-presence.svelte.js +19 -36
- package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -0
- package/dist/bits/utilities/text-selection-layer/types.d.ts +2 -0
- package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +5 -1
- package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +8 -14
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/box-auto-reset.svelte.d.ts +7 -1
- package/dist/internal/box-auto-reset.svelte.js +11 -6
- package/dist/internal/create-id.d.ts +8 -0
- package/dist/internal/create-id.js +5 -0
- package/dist/internal/date-time/announcer.d.ts +1 -1
- package/dist/internal/date-time/announcer.js +20 -20
- package/dist/internal/date-time/calendar-helpers.svelte.js +7 -5
- package/dist/internal/date-time/field/helpers.d.ts +9 -2
- package/dist/internal/date-time/field/helpers.js +16 -9
- package/dist/internal/date-time/field/parts.d.ts +3 -1
- package/dist/internal/date-time/field/parts.js +10 -2
- package/dist/internal/date-time/field/segments.d.ts +9 -0
- package/dist/internal/date-time/field/segments.js +65 -0
- package/dist/internal/date-time/field/time-helpers.d.ts +83 -0
- package/dist/internal/date-time/field/time-helpers.js +301 -0
- package/dist/internal/date-time/field/types.d.ts +2 -2
- package/dist/internal/date-time/formatter.d.ts +11 -1
- package/dist/internal/date-time/formatter.js +56 -0
- package/dist/internal/date-time/utils.d.ts +7 -2
- package/dist/internal/date-time/utils.js +15 -1
- package/dist/internal/dom.d.ts +0 -1
- package/dist/internal/dom.js +0 -3
- package/dist/internal/focus.d.ts +2 -2
- package/dist/internal/focus.js +14 -9
- package/dist/internal/math.d.ts +0 -4
- package/dist/internal/math.js +0 -28
- package/dist/internal/tabbable.d.ts +0 -2
- package/dist/internal/tabbable.js +10 -14
- package/dist/internal/use-data-typeahead.svelte.d.ts +1 -0
- package/dist/internal/use-data-typeahead.svelte.js +4 -1
- package/dist/internal/use-dom-typeahead.svelte.d.ts +3 -1
- package/dist/internal/use-dom-typeahead.svelte.js +5 -2
- package/dist/internal/use-grace-area.svelte.js +9 -5
- package/dist/internal/use-roving-focus.svelte.d.ts +3 -3
- package/dist/internal/use-roving-focus.svelte.js +10 -11
- package/dist/shared/date/types.d.ts +27 -4
- package/dist/shared/index.d.ts +2 -2
- package/dist/types.d.ts +2 -0
- package/package.json +18 -16
- package/dist/bits/date-field/components/date-field-error.svelte +0 -0
- package/dist/internal/use-size.svelte.d.ts +0 -7
- package/dist/internal/use-size.svelte.js +0 -54
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Context, Previous, watch } from "runed";
|
|
2
|
-
import { afterSleep, afterTick, onDestroyEffect,
|
|
2
|
+
import { afterSleep, afterTick, onDestroyEffect, attachRef, DOMContext } from "svelte-toolbelt";
|
|
3
3
|
import { on } from "svelte/events";
|
|
4
4
|
import { backward, forward, next, prev } from "../../internal/arrays.js";
|
|
5
5
|
import { getAriaExpanded, getAriaHidden, getDataDisabled, getDataOpenClosed, getDisabled, getRequired, } from "../../internal/attrs.js";
|
|
@@ -18,7 +18,6 @@ export const CONTENT_MARGIN = 10;
|
|
|
18
18
|
class SelectBaseRootState {
|
|
19
19
|
opts;
|
|
20
20
|
touchedInput = $state(false);
|
|
21
|
-
inputValue = $state("");
|
|
22
21
|
inputNode = $state(null);
|
|
23
22
|
contentNode = $state(null);
|
|
24
23
|
triggerNode = $state(null);
|
|
@@ -42,6 +41,7 @@ class SelectBaseRootState {
|
|
|
42
41
|
isUsingKeyboard = false;
|
|
43
42
|
isCombobox = false;
|
|
44
43
|
bitsAttrs;
|
|
44
|
+
domContext = new DOMContext(() => null);
|
|
45
45
|
constructor(opts) {
|
|
46
46
|
this.opts = opts;
|
|
47
47
|
this.isCombobox = opts.isCombobox;
|
|
@@ -134,11 +134,12 @@ class SelectSingleRootState extends SelectBaseRootState {
|
|
|
134
134
|
}
|
|
135
135
|
toggleItem(itemValue, itemLabel = itemValue) {
|
|
136
136
|
this.opts.value.current = this.includesItem(itemValue) ? "" : itemValue;
|
|
137
|
-
this.inputValue = itemLabel;
|
|
137
|
+
this.opts.inputValue.current = itemLabel;
|
|
138
138
|
}
|
|
139
139
|
setInitialHighlightedNode() {
|
|
140
140
|
afterTick(() => {
|
|
141
|
-
if (this.highlightedNode &&
|
|
141
|
+
if (this.highlightedNode &&
|
|
142
|
+
this.domContext.getDocument().contains(this.highlightedNode))
|
|
142
143
|
return;
|
|
143
144
|
if (this.opts.value.current !== "") {
|
|
144
145
|
const node = this.getNodeByValue(this.opts.value.current);
|
|
@@ -183,11 +184,14 @@ class SelectMultipleRootState extends SelectBaseRootState {
|
|
|
183
184
|
else {
|
|
184
185
|
this.opts.value.current = [...this.opts.value.current, itemValue];
|
|
185
186
|
}
|
|
186
|
-
this.inputValue = itemLabel;
|
|
187
|
+
this.opts.inputValue.current = itemLabel;
|
|
187
188
|
}
|
|
188
189
|
setInitialHighlightedNode() {
|
|
189
190
|
afterTick(() => {
|
|
190
|
-
if (this.
|
|
191
|
+
if (!this.domContext)
|
|
192
|
+
return;
|
|
193
|
+
if (this.highlightedNode &&
|
|
194
|
+
this.domContext.getDocument().contains(this.highlightedNode))
|
|
191
195
|
return;
|
|
192
196
|
if (this.opts.value.current.length && this.opts.value.current[0] !== "") {
|
|
193
197
|
const node = this.getNodeByValue(this.opts.value.current[0]);
|
|
@@ -210,12 +214,7 @@ class SelectInputState {
|
|
|
210
214
|
constructor(opts, root) {
|
|
211
215
|
this.opts = opts;
|
|
212
216
|
this.root = root;
|
|
213
|
-
|
|
214
|
-
...opts,
|
|
215
|
-
onRefChange: (node) => {
|
|
216
|
-
this.root.inputNode = node;
|
|
217
|
-
},
|
|
218
|
-
});
|
|
217
|
+
this.root.domContext = new DOMContext(opts.ref);
|
|
219
218
|
this.onkeydown = this.onkeydown.bind(this);
|
|
220
219
|
this.oninput = this.oninput.bind(this);
|
|
221
220
|
watch([() => this.root.opts.value.current, () => this.opts.clearOnDeselect.current], ([value, clearOnDeselect], [prevValue]) => {
|
|
@@ -223,11 +222,11 @@ class SelectInputState {
|
|
|
223
222
|
return;
|
|
224
223
|
if (Array.isArray(value) && Array.isArray(prevValue)) {
|
|
225
224
|
if (value.length === 0 && prevValue.length !== 0) {
|
|
226
|
-
this.root.inputValue = "";
|
|
225
|
+
this.root.opts.inputValue.current = "";
|
|
227
226
|
}
|
|
228
227
|
}
|
|
229
228
|
else if (value === "" && prevValue !== "") {
|
|
230
|
-
this.root.inputValue = "";
|
|
229
|
+
this.root.opts.inputValue.current = "";
|
|
231
230
|
}
|
|
232
231
|
});
|
|
233
232
|
}
|
|
@@ -243,7 +242,7 @@ class SelectInputState {
|
|
|
243
242
|
return;
|
|
244
243
|
if (e.key === kbd.TAB)
|
|
245
244
|
return;
|
|
246
|
-
if (e.key === kbd.BACKSPACE && this.root.inputValue === "")
|
|
245
|
+
if (e.key === kbd.BACKSPACE && this.root.opts.inputValue.current === "")
|
|
247
246
|
return;
|
|
248
247
|
this.root.handleOpen();
|
|
249
248
|
// we need to wait for a tick after the menu opens to ensure the highlighted nodes are
|
|
@@ -325,7 +324,7 @@ class SelectInputState {
|
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
326
|
oninput(e) {
|
|
328
|
-
this.root.inputValue = e.currentTarget.value;
|
|
327
|
+
this.root.opts.inputValue.current = e.currentTarget.value;
|
|
329
328
|
this.root.setHighlightedToFirstCandidate();
|
|
330
329
|
}
|
|
331
330
|
props = $derived.by(() => ({
|
|
@@ -340,6 +339,7 @@ class SelectInputState {
|
|
|
340
339
|
onkeydown: this.onkeydown,
|
|
341
340
|
oninput: this.oninput,
|
|
342
341
|
[this.root.bitsAttrs.input]: "",
|
|
342
|
+
...attachRef(this.opts.ref, (v) => (this.root.inputNode = v)),
|
|
343
343
|
}));
|
|
344
344
|
}
|
|
345
345
|
class SelectComboTriggerState {
|
|
@@ -348,14 +348,15 @@ class SelectComboTriggerState {
|
|
|
348
348
|
constructor(opts, root) {
|
|
349
349
|
this.opts = opts;
|
|
350
350
|
this.root = root;
|
|
351
|
-
useRefById(opts);
|
|
352
351
|
this.onkeydown = this.onkeydown.bind(this);
|
|
353
352
|
this.onpointerdown = this.onpointerdown.bind(this);
|
|
354
353
|
}
|
|
355
354
|
onkeydown(e) {
|
|
355
|
+
if (!this.root.domContext)
|
|
356
|
+
return;
|
|
356
357
|
if (e.key === kbd.ENTER || e.key === kbd.SPACE) {
|
|
357
358
|
e.preventDefault();
|
|
358
|
-
if (
|
|
359
|
+
if (this.root.domContext.getActiveElement() !== this.root.inputNode) {
|
|
359
360
|
this.root.inputNode?.focus();
|
|
360
361
|
}
|
|
361
362
|
this.root.toggleMenu();
|
|
@@ -366,10 +367,10 @@ class SelectComboTriggerState {
|
|
|
366
367
|
* behavior of focusing the button and keep focus on the input.
|
|
367
368
|
*/
|
|
368
369
|
onpointerdown(e) {
|
|
369
|
-
if (this.root.opts.disabled.current)
|
|
370
|
+
if (this.root.opts.disabled.current || !this.root.domContext)
|
|
370
371
|
return;
|
|
371
372
|
e.preventDefault();
|
|
372
|
-
if (
|
|
373
|
+
if (this.root.domContext.getActiveElement() !== this.root.inputNode) {
|
|
373
374
|
this.root.inputNode?.focus();
|
|
374
375
|
}
|
|
375
376
|
this.root.toggleMenu();
|
|
@@ -383,6 +384,7 @@ class SelectComboTriggerState {
|
|
|
383
384
|
[this.root.bitsAttrs.trigger]: "",
|
|
384
385
|
onpointerdown: this.onpointerdown,
|
|
385
386
|
onkeydown: this.onkeydown,
|
|
387
|
+
...attachRef(this.opts.ref),
|
|
386
388
|
}));
|
|
387
389
|
}
|
|
388
390
|
class SelectTriggerState {
|
|
@@ -393,17 +395,14 @@ class SelectTriggerState {
|
|
|
393
395
|
constructor(opts, root) {
|
|
394
396
|
this.opts = opts;
|
|
395
397
|
this.root = root;
|
|
396
|
-
|
|
397
|
-
...opts,
|
|
398
|
-
onRefChange: (node) => {
|
|
399
|
-
this.root.triggerNode = node;
|
|
400
|
-
},
|
|
401
|
-
});
|
|
398
|
+
this.root.domContext = new DOMContext(opts.ref);
|
|
402
399
|
this.#domTypeahead = useDOMTypeahead({
|
|
403
400
|
getCurrentItem: () => this.root.highlightedNode,
|
|
404
401
|
onMatch: (node) => {
|
|
405
402
|
this.root.setHighlightedNode(node);
|
|
406
403
|
},
|
|
404
|
+
getActiveElement: () => this.root.domContext.getActiveElement(),
|
|
405
|
+
getWindow: () => this.root.domContext.getWindow(),
|
|
407
406
|
});
|
|
408
407
|
this.#dataTypeahead = useDataTypeahead({
|
|
409
408
|
getCurrentItem: () => {
|
|
@@ -423,6 +422,7 @@ class SelectTriggerState {
|
|
|
423
422
|
},
|
|
424
423
|
enabled: !this.root.isMulti && this.root.dataTypeaheadEnabled,
|
|
425
424
|
candidateValues: () => (this.root.isMulti ? [] : this.root.candidateLabels),
|
|
425
|
+
getWindow: () => this.root.domContext.getWindow(),
|
|
426
426
|
});
|
|
427
427
|
this.onkeydown = this.onkeydown.bind(this);
|
|
428
428
|
this.onpointerdown = this.onpointerdown.bind(this);
|
|
@@ -617,6 +617,7 @@ class SelectTriggerState {
|
|
|
617
617
|
onkeydown: this.onkeydown,
|
|
618
618
|
onclick: this.onclick,
|
|
619
619
|
onpointerup: this.onpointerup,
|
|
620
|
+
...attachRef(this.opts.ref, (v) => (this.root.triggerNode = v)),
|
|
620
621
|
}));
|
|
621
622
|
}
|
|
622
623
|
class SelectContentState {
|
|
@@ -624,16 +625,14 @@ class SelectContentState {
|
|
|
624
625
|
root;
|
|
625
626
|
viewportNode = $state(null);
|
|
626
627
|
isPositioned = $state(false);
|
|
628
|
+
domContext;
|
|
627
629
|
constructor(opts, root) {
|
|
628
630
|
this.opts = opts;
|
|
629
631
|
this.root = root;
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
},
|
|
635
|
-
deps: () => this.root.opts.open.current,
|
|
636
|
-
});
|
|
632
|
+
this.domContext = new DOMContext(this.opts.ref);
|
|
633
|
+
if (this.root.domContext === null) {
|
|
634
|
+
this.root.domContext = this.domContext;
|
|
635
|
+
}
|
|
637
636
|
onDestroyEffect(() => {
|
|
638
637
|
this.root.contentNode = null;
|
|
639
638
|
this.isPositioned = false;
|
|
@@ -696,6 +695,7 @@ class SelectContentState {
|
|
|
696
695
|
...this.#styles,
|
|
697
696
|
},
|
|
698
697
|
onpointermove: this.onpointermove,
|
|
698
|
+
...attachRef(this.opts.ref, (v) => (this.root.contentNode = v)),
|
|
699
699
|
}));
|
|
700
700
|
popperProps = {
|
|
701
701
|
onInteractOutside: this.onInteractOutside,
|
|
@@ -723,10 +723,6 @@ class SelectItemState {
|
|
|
723
723
|
constructor(opts, root) {
|
|
724
724
|
this.opts = opts;
|
|
725
725
|
this.root = root;
|
|
726
|
-
useRefById({
|
|
727
|
-
...opts,
|
|
728
|
-
deps: () => this.mounted,
|
|
729
|
-
});
|
|
730
726
|
watch([() => this.isHighlighted, () => this.prevHighlighted.current], () => {
|
|
731
727
|
if (this.isHighlighted) {
|
|
732
728
|
this.opts.onHighlight.current();
|
|
@@ -830,6 +826,7 @@ class SelectItemState {
|
|
|
830
826
|
onpointermove: this.onpointermove,
|
|
831
827
|
onpointerdown: this.onpointerdown,
|
|
832
828
|
onpointerup: this.onpointerup,
|
|
829
|
+
...attachRef(this.opts.ref),
|
|
833
830
|
}));
|
|
834
831
|
}
|
|
835
832
|
class SelectGroupState {
|
|
@@ -839,13 +836,13 @@ class SelectGroupState {
|
|
|
839
836
|
constructor(opts, root) {
|
|
840
837
|
this.opts = opts;
|
|
841
838
|
this.root = root;
|
|
842
|
-
useRefById(opts);
|
|
843
839
|
}
|
|
844
840
|
props = $derived.by(() => ({
|
|
845
841
|
id: this.opts.id.current,
|
|
846
842
|
role: "group",
|
|
847
843
|
[this.root.bitsAttrs.group]: "",
|
|
848
844
|
"aria-labelledby": this.labelNode?.id ?? undefined,
|
|
845
|
+
...attachRef(this.opts.ref),
|
|
849
846
|
}));
|
|
850
847
|
}
|
|
851
848
|
class SelectGroupHeadingState {
|
|
@@ -854,16 +851,11 @@ class SelectGroupHeadingState {
|
|
|
854
851
|
constructor(opts, group) {
|
|
855
852
|
this.opts = opts;
|
|
856
853
|
this.group = group;
|
|
857
|
-
useRefById({
|
|
858
|
-
...opts,
|
|
859
|
-
onRefChange: (node) => {
|
|
860
|
-
group.labelNode = node;
|
|
861
|
-
},
|
|
862
|
-
});
|
|
863
854
|
}
|
|
864
855
|
props = $derived.by(() => ({
|
|
865
856
|
id: this.opts.id.current,
|
|
866
857
|
[this.group.root.bitsAttrs["group-label"]]: "",
|
|
858
|
+
...attachRef(this.opts.ref, (v) => (this.group.labelNode = v)),
|
|
867
859
|
}));
|
|
868
860
|
}
|
|
869
861
|
class SelectHiddenInputState {
|
|
@@ -901,13 +893,6 @@ class SelectViewportState {
|
|
|
901
893
|
this.opts = opts;
|
|
902
894
|
this.content = content;
|
|
903
895
|
this.root = content.root;
|
|
904
|
-
useRefById({
|
|
905
|
-
...opts,
|
|
906
|
-
onRefChange: (node) => {
|
|
907
|
-
this.content.viewportNode = node;
|
|
908
|
-
},
|
|
909
|
-
deps: () => this.root.opts.open.current,
|
|
910
|
-
});
|
|
911
896
|
}
|
|
912
897
|
props = $derived.by(() => ({
|
|
913
898
|
id: this.opts.id.current,
|
|
@@ -921,6 +906,7 @@ class SelectViewportState {
|
|
|
921
906
|
flex: 1,
|
|
922
907
|
overflow: "auto",
|
|
923
908
|
},
|
|
909
|
+
...attachRef(this.opts.ref, (v) => (this.content.viewportNode = v)),
|
|
924
910
|
}));
|
|
925
911
|
}
|
|
926
912
|
class SelectScrollButtonImplState {
|
|
@@ -936,10 +922,6 @@ class SelectScrollButtonImplState {
|
|
|
936
922
|
this.opts = opts;
|
|
937
923
|
this.content = content;
|
|
938
924
|
this.root = content.root;
|
|
939
|
-
useRefById({
|
|
940
|
-
...opts,
|
|
941
|
-
deps: () => this.mounted,
|
|
942
|
-
});
|
|
943
925
|
watch([() => this.mounted], () => {
|
|
944
926
|
if (!this.mounted) {
|
|
945
927
|
this.isUserScrolling = false;
|
|
@@ -958,16 +940,16 @@ class SelectScrollButtonImplState {
|
|
|
958
940
|
this.onpointerleave = this.onpointerleave.bind(this);
|
|
959
941
|
}
|
|
960
942
|
handleUserScroll() {
|
|
961
|
-
|
|
943
|
+
this.content.domContext.clearTimeout(this.userScrollTimer);
|
|
962
944
|
this.isUserScrolling = true;
|
|
963
|
-
this.userScrollTimer =
|
|
945
|
+
this.userScrollTimer = this.content.domContext.setTimeout(() => {
|
|
964
946
|
this.isUserScrolling = false;
|
|
965
947
|
}, 200);
|
|
966
948
|
}
|
|
967
949
|
clearAutoScrollInterval() {
|
|
968
950
|
if (this.autoScrollTimer === null)
|
|
969
951
|
return;
|
|
970
|
-
|
|
952
|
+
this.content.domContext.clearTimeout(this.autoScrollTimer);
|
|
971
953
|
this.autoScrollTimer = null;
|
|
972
954
|
}
|
|
973
955
|
onpointerdown(_) {
|
|
@@ -975,9 +957,9 @@ class SelectScrollButtonImplState {
|
|
|
975
957
|
return;
|
|
976
958
|
const autoScroll = (tick) => {
|
|
977
959
|
this.onAutoScroll();
|
|
978
|
-
this.autoScrollTimer =
|
|
960
|
+
this.autoScrollTimer = this.content.domContext.setTimeout(() => autoScroll(tick + 1), this.opts.delay.current(tick));
|
|
979
961
|
};
|
|
980
|
-
this.autoScrollTimer =
|
|
962
|
+
this.autoScrollTimer = this.content.domContext.setTimeout(() => autoScroll(1), this.opts.delay.current(0));
|
|
981
963
|
}
|
|
982
964
|
onpointermove(e) {
|
|
983
965
|
this.onpointerdown(e);
|
|
@@ -994,6 +976,7 @@ class SelectScrollButtonImplState {
|
|
|
994
976
|
onpointerdown: this.onpointerdown,
|
|
995
977
|
onpointermove: this.onpointermove,
|
|
996
978
|
onpointerleave: this.onpointerleave,
|
|
979
|
+
...attachRef(this.opts.ref),
|
|
997
980
|
}));
|
|
998
981
|
}
|
|
999
982
|
class SelectScrollDownButtonState {
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import { useSeparatorRoot } from "../separator.svelte.js";
|
|
4
4
|
import type { SeparatorRootProps } from "../types.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
6
8
|
|
|
7
9
|
let {
|
|
8
|
-
id =
|
|
10
|
+
id = createId(uid),
|
|
9
11
|
ref = $bindable(null),
|
|
10
12
|
child,
|
|
11
13
|
children,
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { attachRef } from "svelte-toolbelt";
|
|
2
2
|
import { getAriaHidden, getAriaOrientation, getDataOrientation } from "../../internal/attrs.js";
|
|
3
3
|
const SEPARATOR_ROOT_ATTR = "data-separator-root";
|
|
4
4
|
class SeparatorRootState {
|
|
5
5
|
opts;
|
|
6
6
|
constructor(opts) {
|
|
7
7
|
this.opts = opts;
|
|
8
|
-
useRefById(opts);
|
|
9
8
|
}
|
|
10
9
|
props = $derived.by(() => ({
|
|
11
10
|
id: this.opts.id.current,
|
|
@@ -14,6 +13,7 @@ class SeparatorRootState {
|
|
|
14
13
|
"aria-hidden": getAriaHidden(this.opts.decorative.current),
|
|
15
14
|
"data-orientation": getDataOrientation(this.opts.orientation.current),
|
|
16
15
|
[SEPARATOR_ROOT_ATTR]: "",
|
|
16
|
+
...attachRef(this.opts.ref),
|
|
17
17
|
}));
|
|
18
18
|
}
|
|
19
19
|
export function useSeparatorRoot(props) {
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { SliderRangeProps } from "../types.js";
|
|
4
4
|
import { useSliderRange } from "../slider.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
6
8
|
|
|
7
9
|
let {
|
|
8
10
|
children,
|
|
9
11
|
child,
|
|
10
12
|
ref = $bindable(null),
|
|
11
|
-
id =
|
|
13
|
+
id = createId(uid),
|
|
12
14
|
...restProps
|
|
13
15
|
}: SliderRangeProps = $props();
|
|
14
16
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
|
+
import type { SliderThumbLabelProps } from "../types.js";
|
|
4
|
+
import { SliderRootContext, useSliderThumbLabel } from "../slider.svelte.js";
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
children,
|
|
11
|
+
child,
|
|
12
|
+
ref = $bindable(null),
|
|
13
|
+
id = createId(uid),
|
|
14
|
+
index,
|
|
15
|
+
position: positionProp,
|
|
16
|
+
...restProps
|
|
17
|
+
}: SliderThumbLabelProps = $props();
|
|
18
|
+
|
|
19
|
+
const root = SliderRootContext.get();
|
|
20
|
+
|
|
21
|
+
const position = $derived.by(() => {
|
|
22
|
+
if (positionProp !== undefined) return positionProp;
|
|
23
|
+
switch (root.direction) {
|
|
24
|
+
case "lr":
|
|
25
|
+
case "rl":
|
|
26
|
+
return "top";
|
|
27
|
+
case "tb":
|
|
28
|
+
case "bt":
|
|
29
|
+
return "left";
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const tickLabelState = useSliderThumbLabel({
|
|
34
|
+
id: box.with(() => id),
|
|
35
|
+
ref: box.with(
|
|
36
|
+
() => ref,
|
|
37
|
+
(v) => (ref = v)
|
|
38
|
+
),
|
|
39
|
+
index: box.with(() => index),
|
|
40
|
+
position: box.with(() => position),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const mergedProps = $derived(mergeProps(restProps, tickLabelState.props));
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
{#if child}
|
|
47
|
+
{@render child({ props: mergedProps })}
|
|
48
|
+
{:else}
|
|
49
|
+
<span {...mergedProps}>{@render children?.()}</span>
|
|
50
|
+
{/if}
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { SliderThumbProps } from "../types.js";
|
|
4
4
|
import { useSliderThumb } from "../slider.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
6
8
|
|
|
7
9
|
let {
|
|
8
10
|
children,
|
|
9
11
|
child,
|
|
10
12
|
ref = $bindable(null),
|
|
11
|
-
id =
|
|
13
|
+
id = createId(uid),
|
|
12
14
|
index,
|
|
13
15
|
disabled = false,
|
|
14
16
|
...restProps
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
|
+
import type { SliderTickLabelProps } from "../types.js";
|
|
4
|
+
import { SliderRootContext, useSliderTickLabel } from "../slider.svelte.js";
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
children,
|
|
11
|
+
child,
|
|
12
|
+
ref = $bindable(null),
|
|
13
|
+
id = createId(uid),
|
|
14
|
+
index,
|
|
15
|
+
position: positionProp,
|
|
16
|
+
...restProps
|
|
17
|
+
}: SliderTickLabelProps = $props();
|
|
18
|
+
|
|
19
|
+
const root = SliderRootContext.get();
|
|
20
|
+
|
|
21
|
+
const position = $derived.by(() => {
|
|
22
|
+
if (positionProp !== undefined) return positionProp;
|
|
23
|
+
switch (root.direction) {
|
|
24
|
+
case "lr":
|
|
25
|
+
case "rl":
|
|
26
|
+
return "top";
|
|
27
|
+
case "tb":
|
|
28
|
+
case "bt":
|
|
29
|
+
return "left";
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const tickLabelState = useSliderTickLabel({
|
|
34
|
+
id: box.with(() => id),
|
|
35
|
+
ref: box.with(
|
|
36
|
+
() => ref,
|
|
37
|
+
(v) => (ref = v)
|
|
38
|
+
),
|
|
39
|
+
index: box.with(() => index),
|
|
40
|
+
position: box.with(() => position),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const mergedProps = $derived(mergeProps(restProps, tickLabelState.props));
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
{#if child}
|
|
47
|
+
{@render child({ props: mergedProps })}
|
|
48
|
+
{:else}
|
|
49
|
+
<span {...mergedProps}>{@render children?.()}</span>
|
|
50
|
+
{/if}
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { SliderTickProps } from "../types.js";
|
|
4
4
|
import { useSliderTick } from "../slider.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
6
8
|
|
|
7
9
|
let {
|
|
8
10
|
children,
|
|
9
11
|
child,
|
|
10
12
|
ref = $bindable(null),
|
|
11
|
-
id =
|
|
13
|
+
id = createId(uid),
|
|
12
14
|
index,
|
|
13
15
|
...restProps
|
|
14
16
|
}: SliderTickProps = $props();
|
|
@@ -2,33 +2,51 @@
|
|
|
2
2
|
import { box, mergeProps, type WritableBox } from "svelte-toolbelt";
|
|
3
3
|
import type { SliderRootProps } from "../types.js";
|
|
4
4
|
import { useSliderRoot } from "../slider.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import { noop } from "../../../internal/noop.js";
|
|
7
7
|
import { watch } from "runed";
|
|
8
8
|
|
|
9
|
+
const uid = $props.id();
|
|
10
|
+
|
|
9
11
|
let {
|
|
10
12
|
children,
|
|
11
13
|
child,
|
|
12
|
-
id =
|
|
14
|
+
id = createId(uid),
|
|
13
15
|
ref = $bindable(null),
|
|
14
16
|
value = $bindable(),
|
|
15
17
|
type,
|
|
16
18
|
onValueChange = noop,
|
|
17
19
|
onValueCommit = noop,
|
|
18
20
|
disabled = false,
|
|
19
|
-
min
|
|
20
|
-
max
|
|
21
|
+
min: minProp,
|
|
22
|
+
max: maxProp,
|
|
21
23
|
step = 1,
|
|
22
24
|
dir = "ltr",
|
|
23
25
|
autoSort = true,
|
|
24
26
|
orientation = "horizontal",
|
|
25
27
|
thumbPositioning = "contain",
|
|
28
|
+
trackPadding,
|
|
26
29
|
...restProps
|
|
27
30
|
}: SliderRootProps = $props();
|
|
28
31
|
|
|
32
|
+
const min = $derived.by(() => {
|
|
33
|
+
if (minProp !== undefined) return minProp;
|
|
34
|
+
if (Array.isArray(step)) return Math.min(...step);
|
|
35
|
+
return 0;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const max = $derived.by(() => {
|
|
39
|
+
if (maxProp !== undefined) return maxProp;
|
|
40
|
+
if (Array.isArray(step)) return Math.max(...step);
|
|
41
|
+
return 100;
|
|
42
|
+
});
|
|
43
|
+
|
|
29
44
|
function handleDefaultValue() {
|
|
30
45
|
if (value !== undefined) return;
|
|
31
|
-
|
|
46
|
+
if (type === "single") {
|
|
47
|
+
return min;
|
|
48
|
+
}
|
|
49
|
+
return [];
|
|
32
50
|
}
|
|
33
51
|
|
|
34
52
|
// SSR
|
|
@@ -66,6 +84,7 @@
|
|
|
66
84
|
orientation: box.with(() => orientation),
|
|
67
85
|
thumbPositioning: box.with(() => thumbPositioning),
|
|
68
86
|
type,
|
|
87
|
+
trackPadding: box.with(() => trackPadding),
|
|
69
88
|
});
|
|
70
89
|
|
|
71
90
|
const mergedProps = $derived(mergeProps(restProps, rootState.props));
|
|
@@ -2,4 +2,6 @@ export { default as Root } from "./components/slider.svelte";
|
|
|
2
2
|
export { default as Range } from "./components/slider-range.svelte";
|
|
3
3
|
export { default as Thumb } from "./components/slider-thumb.svelte";
|
|
4
4
|
export { default as Tick } from "./components/slider-tick.svelte";
|
|
5
|
-
export
|
|
5
|
+
export { default as TickLabel } from "./components/slider-tick-label.svelte";
|
|
6
|
+
export { default as ThumbLabel } from "./components/slider-thumb-label.svelte";
|
|
7
|
+
export type { SliderRootProps as RootProps, SliderRangeProps as RangeProps, SliderThumbProps as ThumbProps, SliderTickProps as TickProps, SliderTickLabelProps as TickLabelProps, SliderThumbLabelProps as ThumbLabelProps, } from "./types.js";
|
|
@@ -2,3 +2,5 @@ export { default as Root } from "./components/slider.svelte";
|
|
|
2
2
|
export { default as Range } from "./components/slider-range.svelte";
|
|
3
3
|
export { default as Thumb } from "./components/slider-thumb.svelte";
|
|
4
4
|
export { default as Tick } from "./components/slider-tick.svelte";
|
|
5
|
+
export { default as TickLabel } from "./components/slider-tick-label.svelte";
|
|
6
|
+
export { default as ThumbLabel } from "./components/slider-thumb-label.svelte";
|
|
@@ -2,3 +2,17 @@ import type { StyleProperties } from "../../shared/index.js";
|
|
|
2
2
|
export declare function getRangeStyles(direction: "lr" | "rl" | "tb" | "bt", min: number, max: number): StyleProperties;
|
|
3
3
|
export declare function getThumbStyles(direction: "lr" | "rl" | "tb" | "bt", thumbPos: number): StyleProperties;
|
|
4
4
|
export declare function getTickStyles(direction: "lr" | "rl" | "tb" | "bt", tickPosition: number, offsetPercentage: number): StyleProperties;
|
|
5
|
+
export declare function getTickLabelStyles(direction: "lr" | "rl" | "tb" | "bt", tickPosition: number, labelPosition?: "top" | "bottom" | "left" | "right"): StyleProperties;
|
|
6
|
+
export declare function getThumbLabelStyles(direction: "lr" | "rl" | "tb" | "bt", thumbPosition: number, labelPosition?: "top" | "bottom" | "left" | "right"): StyleProperties;
|
|
7
|
+
/**
|
|
8
|
+
* Normalizes step to always be a sorted array of valid values within min/max range
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeSteps(step: number | number[], min: number, max: number): number[];
|
|
11
|
+
/**
|
|
12
|
+
* Snaps a value to the nearest step in a custom steps array
|
|
13
|
+
*/
|
|
14
|
+
export declare function snapValueToCustomSteps(value: number, steps: number[]): number;
|
|
15
|
+
/**
|
|
16
|
+
* Gets the next/previous step value for keyboard navigation
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAdjacentStepValue(currentValue: number, steps: number[], direction: "next" | "prev"): number;
|