bits-ui 1.7.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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.js +4 -4
- 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 +1 -9
- package/dist/bits/calendar/calendar.svelte.js +47 -38
- 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 +1 -1
- package/dist/bits/combobox/components/combobox.svelte +1 -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 +4 -4
- package/dist/bits/date-field/date-field.svelte.js +15 -33
- 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.js +3 -13
- 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.js +3 -14
- 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 +7 -20
- package/dist/bits/menu/menu.svelte.js +26 -54
- 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 +8 -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 +7 -3
- package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
- package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +29 -17
- package/dist/bits/navigation-menu/navigation-menu.svelte.js +107 -74
- package/dist/bits/navigation-menu/types.d.ts +14 -7
- 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.js +4 -10
- 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.js +4 -4
- 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.js +13 -47
- 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 +1 -1
- package/dist/bits/select/select.svelte.d.ts +0 -18
- package/dist/bits/select/select.svelte.js +10 -43
- 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 +26 -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 +93 -6
- package/dist/bits/slider/slider.svelte.js +198 -101
- package/dist/bits/slider/types.d.ts +111 -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 +415 -0
- package/dist/bits/time-field/time-field.svelte.js +971 -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 +90 -0
- package/dist/bits/time-range-field/time-range-field.svelte.js +210 -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.js +3 -14
- 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 +5 -26
- 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 +2 -8
- 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/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 +3 -1
- package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +2 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/create-id.d.ts +8 -0
- package/dist/internal/create-id.js +5 -0
- package/dist/internal/date-time/field/helpers.d.ts +1 -0
- package/dist/internal/date-time/field/helpers.js +8 -2
- 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 +77 -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-context.svelte.d.ts +9 -0
- package/dist/internal/dom-context.svelte.js +26 -0
- 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 +9 -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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Context, Previous, watch } from "runed";
|
|
2
|
-
import { afterSleep, afterTick, onDestroyEffect,
|
|
2
|
+
import { afterSleep, afterTick, onDestroyEffect, attachRef } 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";
|
|
@@ -210,12 +210,6 @@ class SelectInputState {
|
|
|
210
210
|
constructor(opts, root) {
|
|
211
211
|
this.opts = opts;
|
|
212
212
|
this.root = root;
|
|
213
|
-
useRefById({
|
|
214
|
-
...opts,
|
|
215
|
-
onRefChange: (node) => {
|
|
216
|
-
this.root.inputNode = node;
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
213
|
this.onkeydown = this.onkeydown.bind(this);
|
|
220
214
|
this.oninput = this.oninput.bind(this);
|
|
221
215
|
watch([() => this.root.opts.value.current, () => this.opts.clearOnDeselect.current], ([value, clearOnDeselect], [prevValue]) => {
|
|
@@ -340,6 +334,7 @@ class SelectInputState {
|
|
|
340
334
|
onkeydown: this.onkeydown,
|
|
341
335
|
oninput: this.oninput,
|
|
342
336
|
[this.root.bitsAttrs.input]: "",
|
|
337
|
+
...attachRef(this.opts.ref, (v) => (this.root.inputNode = v)),
|
|
343
338
|
}));
|
|
344
339
|
}
|
|
345
340
|
class SelectComboTriggerState {
|
|
@@ -348,7 +343,6 @@ class SelectComboTriggerState {
|
|
|
348
343
|
constructor(opts, root) {
|
|
349
344
|
this.opts = opts;
|
|
350
345
|
this.root = root;
|
|
351
|
-
useRefById(opts);
|
|
352
346
|
this.onkeydown = this.onkeydown.bind(this);
|
|
353
347
|
this.onpointerdown = this.onpointerdown.bind(this);
|
|
354
348
|
}
|
|
@@ -383,6 +377,7 @@ class SelectComboTriggerState {
|
|
|
383
377
|
[this.root.bitsAttrs.trigger]: "",
|
|
384
378
|
onpointerdown: this.onpointerdown,
|
|
385
379
|
onkeydown: this.onkeydown,
|
|
380
|
+
...attachRef(this.opts.ref),
|
|
386
381
|
}));
|
|
387
382
|
}
|
|
388
383
|
class SelectTriggerState {
|
|
@@ -393,12 +388,6 @@ class SelectTriggerState {
|
|
|
393
388
|
constructor(opts, root) {
|
|
394
389
|
this.opts = opts;
|
|
395
390
|
this.root = root;
|
|
396
|
-
useRefById({
|
|
397
|
-
...opts,
|
|
398
|
-
onRefChange: (node) => {
|
|
399
|
-
this.root.triggerNode = node;
|
|
400
|
-
},
|
|
401
|
-
});
|
|
402
391
|
this.#domTypeahead = useDOMTypeahead({
|
|
403
392
|
getCurrentItem: () => this.root.highlightedNode,
|
|
404
393
|
onMatch: (node) => {
|
|
@@ -617,6 +606,7 @@ class SelectTriggerState {
|
|
|
617
606
|
onkeydown: this.onkeydown,
|
|
618
607
|
onclick: this.onclick,
|
|
619
608
|
onpointerup: this.onpointerup,
|
|
609
|
+
...attachRef(this.opts.ref, (v) => (this.root.triggerNode = v)),
|
|
620
610
|
}));
|
|
621
611
|
}
|
|
622
612
|
class SelectContentState {
|
|
@@ -627,13 +617,6 @@ class SelectContentState {
|
|
|
627
617
|
constructor(opts, root) {
|
|
628
618
|
this.opts = opts;
|
|
629
619
|
this.root = root;
|
|
630
|
-
useRefById({
|
|
631
|
-
...opts,
|
|
632
|
-
onRefChange: (node) => {
|
|
633
|
-
this.root.contentNode = node;
|
|
634
|
-
},
|
|
635
|
-
deps: () => this.root.opts.open.current,
|
|
636
|
-
});
|
|
637
620
|
onDestroyEffect(() => {
|
|
638
621
|
this.root.contentNode = null;
|
|
639
622
|
this.isPositioned = false;
|
|
@@ -696,6 +679,7 @@ class SelectContentState {
|
|
|
696
679
|
...this.#styles,
|
|
697
680
|
},
|
|
698
681
|
onpointermove: this.onpointermove,
|
|
682
|
+
...attachRef(this.opts.ref, (v) => (this.root.contentNode = v)),
|
|
699
683
|
}));
|
|
700
684
|
popperProps = {
|
|
701
685
|
onInteractOutside: this.onInteractOutside,
|
|
@@ -723,10 +707,6 @@ class SelectItemState {
|
|
|
723
707
|
constructor(opts, root) {
|
|
724
708
|
this.opts = opts;
|
|
725
709
|
this.root = root;
|
|
726
|
-
useRefById({
|
|
727
|
-
...opts,
|
|
728
|
-
deps: () => this.mounted,
|
|
729
|
-
});
|
|
730
710
|
watch([() => this.isHighlighted, () => this.prevHighlighted.current], () => {
|
|
731
711
|
if (this.isHighlighted) {
|
|
732
712
|
this.opts.onHighlight.current();
|
|
@@ -830,6 +810,7 @@ class SelectItemState {
|
|
|
830
810
|
onpointermove: this.onpointermove,
|
|
831
811
|
onpointerdown: this.onpointerdown,
|
|
832
812
|
onpointerup: this.onpointerup,
|
|
813
|
+
...attachRef(this.opts.ref),
|
|
833
814
|
}));
|
|
834
815
|
}
|
|
835
816
|
class SelectGroupState {
|
|
@@ -839,13 +820,13 @@ class SelectGroupState {
|
|
|
839
820
|
constructor(opts, root) {
|
|
840
821
|
this.opts = opts;
|
|
841
822
|
this.root = root;
|
|
842
|
-
useRefById(opts);
|
|
843
823
|
}
|
|
844
824
|
props = $derived.by(() => ({
|
|
845
825
|
id: this.opts.id.current,
|
|
846
826
|
role: "group",
|
|
847
827
|
[this.root.bitsAttrs.group]: "",
|
|
848
828
|
"aria-labelledby": this.labelNode?.id ?? undefined,
|
|
829
|
+
...attachRef(this.opts.ref),
|
|
849
830
|
}));
|
|
850
831
|
}
|
|
851
832
|
class SelectGroupHeadingState {
|
|
@@ -854,16 +835,11 @@ class SelectGroupHeadingState {
|
|
|
854
835
|
constructor(opts, group) {
|
|
855
836
|
this.opts = opts;
|
|
856
837
|
this.group = group;
|
|
857
|
-
useRefById({
|
|
858
|
-
...opts,
|
|
859
|
-
onRefChange: (node) => {
|
|
860
|
-
group.labelNode = node;
|
|
861
|
-
},
|
|
862
|
-
});
|
|
863
838
|
}
|
|
864
839
|
props = $derived.by(() => ({
|
|
865
840
|
id: this.opts.id.current,
|
|
866
841
|
[this.group.root.bitsAttrs["group-label"]]: "",
|
|
842
|
+
...attachRef(this.opts.ref, (v) => (this.group.labelNode = v)),
|
|
867
843
|
}));
|
|
868
844
|
}
|
|
869
845
|
class SelectHiddenInputState {
|
|
@@ -901,13 +877,6 @@ class SelectViewportState {
|
|
|
901
877
|
this.opts = opts;
|
|
902
878
|
this.content = content;
|
|
903
879
|
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
880
|
}
|
|
912
881
|
props = $derived.by(() => ({
|
|
913
882
|
id: this.opts.id.current,
|
|
@@ -921,6 +890,7 @@ class SelectViewportState {
|
|
|
921
890
|
flex: 1,
|
|
922
891
|
overflow: "auto",
|
|
923
892
|
},
|
|
893
|
+
...attachRef(this.opts.ref, (v) => (this.content.viewportNode = v)),
|
|
924
894
|
}));
|
|
925
895
|
}
|
|
926
896
|
class SelectScrollButtonImplState {
|
|
@@ -936,10 +906,6 @@ class SelectScrollButtonImplState {
|
|
|
936
906
|
this.opts = opts;
|
|
937
907
|
this.content = content;
|
|
938
908
|
this.root = content.root;
|
|
939
|
-
useRefById({
|
|
940
|
-
...opts,
|
|
941
|
-
deps: () => this.mounted,
|
|
942
|
-
});
|
|
943
909
|
watch([() => this.mounted], () => {
|
|
944
910
|
if (!this.mounted) {
|
|
945
911
|
this.isUserScrolling = false;
|
|
@@ -994,6 +960,7 @@ class SelectScrollButtonImplState {
|
|
|
994
960
|
onpointerdown: this.onpointerdown,
|
|
995
961
|
onpointermove: this.onpointermove,
|
|
996
962
|
onpointerleave: this.onpointerleave,
|
|
963
|
+
...attachRef(this.opts.ref),
|
|
997
964
|
}));
|
|
998
965
|
}
|
|
999
966
|
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,32 +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",
|
|
27
|
+
thumbPositioning = "contain",
|
|
28
|
+
trackPadding,
|
|
25
29
|
...restProps
|
|
26
30
|
}: SliderRootProps = $props();
|
|
27
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
|
+
|
|
28
44
|
function handleDefaultValue() {
|
|
29
45
|
if (value !== undefined) return;
|
|
30
|
-
|
|
46
|
+
if (type === "single") {
|
|
47
|
+
return min;
|
|
48
|
+
}
|
|
49
|
+
return [];
|
|
31
50
|
}
|
|
32
51
|
|
|
33
52
|
// SSR
|
|
@@ -63,7 +82,9 @@
|
|
|
63
82
|
dir: box.with(() => dir),
|
|
64
83
|
autoSort: box.with(() => autoSort),
|
|
65
84
|
orientation: box.with(() => orientation),
|
|
85
|
+
thumbPositioning: box.with(() => thumbPositioning),
|
|
66
86
|
type,
|
|
87
|
+
trackPadding: box.with(() => trackPadding),
|
|
67
88
|
});
|
|
68
89
|
|
|
69
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;
|
|
@@ -64,3 +64,125 @@ export function getTickStyles(direction, tickPosition, offsetPercentage) {
|
|
|
64
64
|
}
|
|
65
65
|
return style;
|
|
66
66
|
}
|
|
67
|
+
export function getTickLabelStyles(direction, tickPosition, labelPosition = "top") {
|
|
68
|
+
const style = {
|
|
69
|
+
position: "absolute",
|
|
70
|
+
};
|
|
71
|
+
if (direction === "lr" || direction === "rl") {
|
|
72
|
+
// Horizontal slider
|
|
73
|
+
style.left = direction === "lr" ? `${tickPosition}%` : undefined;
|
|
74
|
+
style.right = direction === "rl" ? `${tickPosition}%` : undefined;
|
|
75
|
+
style.translate = "-50% 0";
|
|
76
|
+
if (labelPosition === "top") {
|
|
77
|
+
style.bottom = "100%";
|
|
78
|
+
}
|
|
79
|
+
else if (labelPosition === "bottom") {
|
|
80
|
+
style.top = "100%";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Vertical slider - use same positioning as ticks
|
|
85
|
+
if (direction === "tb") {
|
|
86
|
+
style.top = `${tickPosition}%`;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
style.bottom = `${tickPosition}%`;
|
|
90
|
+
}
|
|
91
|
+
style.translate = "0 50%";
|
|
92
|
+
if (labelPosition === "left") {
|
|
93
|
+
style.right = "100%";
|
|
94
|
+
}
|
|
95
|
+
else if (labelPosition === "right") {
|
|
96
|
+
style.left = "100%";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return style;
|
|
100
|
+
}
|
|
101
|
+
export function getThumbLabelStyles(direction, thumbPosition, labelPosition = "top") {
|
|
102
|
+
const style = {
|
|
103
|
+
position: "absolute",
|
|
104
|
+
};
|
|
105
|
+
if (direction === "lr" || direction === "rl") {
|
|
106
|
+
// Horizontal slider
|
|
107
|
+
style.left = direction === "lr" ? `${thumbPosition}%` : undefined;
|
|
108
|
+
style.right = direction === "rl" ? `${thumbPosition}%` : undefined;
|
|
109
|
+
style.translate = "-50% 0";
|
|
110
|
+
if (labelPosition === "top") {
|
|
111
|
+
style.bottom = "100%";
|
|
112
|
+
}
|
|
113
|
+
else if (labelPosition === "bottom") {
|
|
114
|
+
style.top = "100%";
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Vertical slider
|
|
119
|
+
if (direction === "tb") {
|
|
120
|
+
style.top = `${thumbPosition}%`;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
style.bottom = `${thumbPosition}%`;
|
|
124
|
+
}
|
|
125
|
+
style.translate = "0 -50%";
|
|
126
|
+
if (labelPosition === "left") {
|
|
127
|
+
style.right = "100%";
|
|
128
|
+
}
|
|
129
|
+
else if (labelPosition === "right") {
|
|
130
|
+
style.left = "100%";
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return style;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Normalizes step to always be a sorted array of valid values within min/max range
|
|
137
|
+
*/
|
|
138
|
+
export function normalizeSteps(step, min, max) {
|
|
139
|
+
if (typeof step === "number") {
|
|
140
|
+
// generate regular steps - match original behavior exactly
|
|
141
|
+
const difference = max - min;
|
|
142
|
+
let count = Math.ceil(difference / step);
|
|
143
|
+
if (difference % step === 0) {
|
|
144
|
+
count++;
|
|
145
|
+
}
|
|
146
|
+
const steps = [];
|
|
147
|
+
for (let i = 0; i < count; i++) {
|
|
148
|
+
const value = min + i * step;
|
|
149
|
+
steps.push(value);
|
|
150
|
+
}
|
|
151
|
+
return steps;
|
|
152
|
+
}
|
|
153
|
+
return [...new Set(step)].filter((value) => value >= min && value <= max).sort((a, b) => a - b);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Snaps a value to the nearest step in a custom steps array
|
|
157
|
+
*/
|
|
158
|
+
export function snapValueToCustomSteps(value, steps) {
|
|
159
|
+
if (steps.length === 0)
|
|
160
|
+
return value;
|
|
161
|
+
// Find the closest step
|
|
162
|
+
let closest = steps[0];
|
|
163
|
+
let minDistance = Math.abs(value - closest);
|
|
164
|
+
for (const step of steps) {
|
|
165
|
+
const distance = Math.abs(value - step);
|
|
166
|
+
if (distance < minDistance) {
|
|
167
|
+
minDistance = distance;
|
|
168
|
+
closest = step;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return closest;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets the next/previous step value for keyboard navigation
|
|
175
|
+
*/
|
|
176
|
+
export function getAdjacentStepValue(currentValue, steps, direction) {
|
|
177
|
+
const currentIndex = steps.indexOf(currentValue);
|
|
178
|
+
if (currentIndex === -1) {
|
|
179
|
+
// current value is not in steps, snap to nearest
|
|
180
|
+
return snapValueToCustomSteps(currentValue, steps);
|
|
181
|
+
}
|
|
182
|
+
if (direction === "next") {
|
|
183
|
+
return currentIndex < steps.length - 1 ? steps[currentIndex + 1] : currentValue;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
return currentIndex > 0 ? steps[currentIndex - 1] : currentValue;
|
|
187
|
+
}
|
|
188
|
+
}
|