bits-ui 1.8.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 +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.js +13 -50
- 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 +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 +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 +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
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { TooltipContentStaticProps } from "../types.js";
|
|
4
4
|
import { useTooltipContent } from "../tooltip.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import PopperLayer from "../../utilities/popper-layer/popper-layer.svelte";
|
|
7
7
|
import { getFloatingContentCSSVars } from "../../../internal/floating-svelte/floating-utils.svelte.js";
|
|
8
8
|
import PopperLayerForceMount from "../../utilities/popper-layer/popper-layer-force-mount.svelte";
|
|
9
9
|
import { noop } from "../../../internal/noop.js";
|
|
10
10
|
|
|
11
|
+
const uid = $props.id();
|
|
12
|
+
|
|
11
13
|
let {
|
|
12
14
|
children,
|
|
13
15
|
child,
|
|
14
|
-
id =
|
|
16
|
+
id = createId(uid),
|
|
15
17
|
ref = $bindable(null),
|
|
16
18
|
onInteractOutside = noop,
|
|
17
19
|
onEscapeKeydown = noop,
|
|
@@ -43,6 +45,7 @@
|
|
|
43
45
|
loop={false}
|
|
44
46
|
preventScroll={false}
|
|
45
47
|
forceMount={true}
|
|
48
|
+
ref={contentState.opts.ref}
|
|
46
49
|
>
|
|
47
50
|
{#snippet popper({ props })}
|
|
48
51
|
{@const mergedProps = mergeProps(props, {
|
|
@@ -68,6 +71,7 @@
|
|
|
68
71
|
loop={false}
|
|
69
72
|
preventScroll={false}
|
|
70
73
|
forceMount={false}
|
|
74
|
+
ref={contentState.opts.ref}
|
|
71
75
|
>
|
|
72
76
|
{#snippet popper({ props })}
|
|
73
77
|
{@const mergedProps = mergeProps(props, {
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { TooltipContentProps } from "../types.js";
|
|
4
4
|
import { useTooltipContent } from "../tooltip.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import PopperLayer from "../../utilities/popper-layer/popper-layer.svelte";
|
|
7
7
|
import { getFloatingContentCSSVars } from "../../../internal/floating-svelte/floating-utils.svelte.js";
|
|
8
8
|
import PopperLayerForceMount from "../../utilities/popper-layer/popper-layer-force-mount.svelte";
|
|
9
9
|
import { noop } from "../../../internal/noop.js";
|
|
10
10
|
|
|
11
|
+
const uid = $props.id();
|
|
12
|
+
|
|
11
13
|
let {
|
|
12
14
|
children,
|
|
13
15
|
child,
|
|
14
|
-
id =
|
|
16
|
+
id = createId(uid),
|
|
15
17
|
ref = $bindable(null),
|
|
16
18
|
side = "top",
|
|
17
19
|
sideOffset = 0,
|
|
@@ -61,6 +63,7 @@
|
|
|
61
63
|
loop={false}
|
|
62
64
|
preventScroll={false}
|
|
63
65
|
forceMount={true}
|
|
66
|
+
ref={contentState.opts.ref}
|
|
64
67
|
>
|
|
65
68
|
{#snippet popper({ props, wrapperProps })}
|
|
66
69
|
{@const mergedProps = mergeProps(props, {
|
|
@@ -87,6 +90,7 @@
|
|
|
87
90
|
loop={false}
|
|
88
91
|
preventScroll={false}
|
|
89
92
|
forceMount={false}
|
|
93
|
+
ref={contentState.opts.ref}
|
|
90
94
|
>
|
|
91
95
|
{#snippet popper({ props, wrapperProps })}
|
|
92
96
|
{@const mergedProps = mergeProps(props, {
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { TooltipTriggerProps } from "../types.js";
|
|
4
4
|
import { useTooltipTrigger } from "../tooltip.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import FloatingLayerAnchor from "../../utilities/floating-layer/components/floating-layer-anchor.svelte";
|
|
7
7
|
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
8
10
|
let {
|
|
9
11
|
children,
|
|
10
12
|
child,
|
|
11
|
-
id =
|
|
13
|
+
id = createId(uid),
|
|
12
14
|
disabled = false,
|
|
13
15
|
type = "button",
|
|
14
16
|
ref = $bindable(null),
|
|
@@ -27,7 +29,7 @@
|
|
|
27
29
|
const mergedProps = $derived(mergeProps(restProps, triggerState.props, { type }));
|
|
28
30
|
</script>
|
|
29
31
|
|
|
30
|
-
<FloatingLayerAnchor {id}>
|
|
32
|
+
<FloatingLayerAnchor {id} ref={triggerState.opts.ref}>
|
|
31
33
|
{#if child}
|
|
32
34
|
{@render child({ props: mergedProps })}
|
|
33
35
|
{:else}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { box, onMountEffect,
|
|
1
|
+
import { box, onMountEffect, attachRef } from "svelte-toolbelt";
|
|
2
2
|
import { on } from "svelte/events";
|
|
3
3
|
import { Context, watch } from "runed";
|
|
4
4
|
import { useTimeoutFn } from "../../internal/use-timeout-fn.svelte.js";
|
|
@@ -138,12 +138,6 @@ class TooltipTriggerState {
|
|
|
138
138
|
constructor(opts, root) {
|
|
139
139
|
this.opts = opts;
|
|
140
140
|
this.root = root;
|
|
141
|
-
useRefById({
|
|
142
|
-
...opts,
|
|
143
|
-
onRefChange: (node) => {
|
|
144
|
-
this.root.triggerNode = node;
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
141
|
}
|
|
148
142
|
handlePointerUp = () => {
|
|
149
143
|
this.#isPointerDown.current = false;
|
|
@@ -212,6 +206,7 @@ class TooltipTriggerState {
|
|
|
212
206
|
onfocus: this.#onfocus,
|
|
213
207
|
onblur: this.#onblur,
|
|
214
208
|
onclick: this.#onclick,
|
|
209
|
+
...attachRef(this.opts.ref, (v) => (this.root.triggerNode = v)),
|
|
215
210
|
}));
|
|
216
211
|
}
|
|
217
212
|
class TooltipContentState {
|
|
@@ -220,13 +215,6 @@ class TooltipContentState {
|
|
|
220
215
|
constructor(opts, root) {
|
|
221
216
|
this.opts = opts;
|
|
222
217
|
this.root = root;
|
|
223
|
-
useRefById({
|
|
224
|
-
...opts,
|
|
225
|
-
onRefChange: (node) => {
|
|
226
|
-
this.root.contentNode = node;
|
|
227
|
-
},
|
|
228
|
-
deps: () => this.root.opts.open.current,
|
|
229
|
-
});
|
|
230
218
|
useGraceArea({
|
|
231
219
|
triggerNode: () => this.root.triggerNode,
|
|
232
220
|
contentNode: () => this.root.contentNode,
|
|
@@ -284,6 +272,7 @@ class TooltipContentState {
|
|
|
284
272
|
outline: "none",
|
|
285
273
|
},
|
|
286
274
|
[TOOLTIP_CONTENT_ATTR]: "",
|
|
275
|
+
...attachRef(this.opts.ref, (v) => (this.root.contentNode = v)),
|
|
287
276
|
}));
|
|
288
277
|
popperProps = {
|
|
289
278
|
onInteractOutside: this.onInteractOutside,
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
children,
|
|
13
13
|
enabled,
|
|
14
14
|
isValidEvent = () => false,
|
|
15
|
+
ref,
|
|
15
16
|
}: DismissibleLayerImplProps = $props();
|
|
16
17
|
|
|
17
18
|
const dismissibleLayerState = useDismissibleLayer({
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
enabled: box.with(() => enabled),
|
|
22
23
|
onFocusOutside: box.with(() => onFocusOutside),
|
|
23
24
|
isValidEvent: box.with(() => isValidEvent),
|
|
25
|
+
ref,
|
|
24
26
|
});
|
|
25
27
|
</script>
|
|
26
28
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
|
+
import type { WritableBox } from "svelte-toolbelt";
|
|
2
3
|
export type InteractOutsideEvent = PointerEvent;
|
|
3
4
|
export type InteractOutsideEventHandler = (e: PointerEvent) => void;
|
|
4
5
|
export type InteractOutsideBehaviorType = "close" | "defer-otherwise-close" | "defer-otherwise-ignore" | "ignore";
|
|
@@ -44,4 +45,5 @@ export type DismissibleLayerImplProps = {
|
|
|
44
45
|
children?: Snippet<[{
|
|
45
46
|
props: Record<string, unknown>;
|
|
46
47
|
}]>;
|
|
48
|
+
ref: WritableBox<HTMLElement | null>;
|
|
47
49
|
} & DismissibleLayerProps;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type WritableBox } from "svelte-toolbelt";
|
|
2
2
|
import type { DismissibleLayerImplProps } from "./types.js";
|
|
3
3
|
import type { ReadableBoxedValues } from "../../../internal/box.svelte.js";
|
|
4
|
-
type DismissibleLayerStateProps = ReadableBoxedValues<Required<Omit<DismissibleLayerImplProps, "children"
|
|
4
|
+
type DismissibleLayerStateProps = ReadableBoxedValues<Required<Omit<DismissibleLayerImplProps, "children" | "ref">>> & {
|
|
5
|
+
ref: WritableBox<HTMLElement | null>;
|
|
6
|
+
};
|
|
5
7
|
export declare class DismissibleLayerState {
|
|
6
8
|
#private;
|
|
7
9
|
readonly opts: DismissibleLayerStateProps;
|
|
8
|
-
node: WritableBox<HTMLElement | null>;
|
|
9
|
-
currNode: HTMLElement | null;
|
|
10
10
|
constructor(opts: DismissibleLayerStateProps);
|
|
11
11
|
props: {
|
|
12
12
|
onfocuscapture: () => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterSleep, afterTick,
|
|
1
|
+
import { afterSleep, afterTick, executeCallbacks, onDestroyEffect, } from "svelte-toolbelt";
|
|
2
2
|
import { watch } from "runed";
|
|
3
3
|
import { on } from "svelte/events";
|
|
4
4
|
import { addEventListener } from "../../../internal/events.js";
|
|
@@ -17,26 +17,16 @@ export class DismissibleLayerState {
|
|
|
17
17
|
};
|
|
18
18
|
#isResponsibleLayer = false;
|
|
19
19
|
#isFocusInsideDOMTree = false;
|
|
20
|
-
node = box(null);
|
|
21
20
|
#documentObj = undefined;
|
|
22
21
|
#onFocusOutside;
|
|
23
|
-
currNode = $state(null);
|
|
24
22
|
#unsubClickListener = noop;
|
|
25
23
|
constructor(opts) {
|
|
26
24
|
this.opts = opts;
|
|
27
|
-
useRefById({
|
|
28
|
-
id: opts.id,
|
|
29
|
-
ref: this.node,
|
|
30
|
-
deps: () => opts.enabled.current,
|
|
31
|
-
onRefChange: (node) => {
|
|
32
|
-
this.currNode = node;
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
25
|
this.#behaviorType = opts.interactOutsideBehavior;
|
|
36
26
|
this.#interactOutsideProp = opts.onInteractOutside;
|
|
37
27
|
this.#onFocusOutside = opts.onFocusOutside;
|
|
38
28
|
$effect(() => {
|
|
39
|
-
this.#documentObj = getOwnerDocument(this.
|
|
29
|
+
this.#documentObj = getOwnerDocument(this.opts.ref.current);
|
|
40
30
|
});
|
|
41
31
|
let unsubEvents = noop;
|
|
42
32
|
const cleanup = () => {
|
|
@@ -45,11 +35,11 @@ export class DismissibleLayerState {
|
|
|
45
35
|
this.#handleInteractOutside.destroy();
|
|
46
36
|
unsubEvents();
|
|
47
37
|
};
|
|
48
|
-
watch([() => this.opts.enabled.current, () => this.
|
|
49
|
-
if (!enabled || !
|
|
38
|
+
watch([() => this.opts.enabled.current, () => this.opts.ref.current], () => {
|
|
39
|
+
if (!this.opts.enabled.current || !this.opts.ref.current)
|
|
50
40
|
return;
|
|
51
41
|
afterSleep(1, () => {
|
|
52
|
-
if (!this.
|
|
42
|
+
if (!this.opts.ref.current)
|
|
53
43
|
return;
|
|
54
44
|
globalThis.bitsDismissableLayers.set(this, this.#behaviorType);
|
|
55
45
|
unsubEvents();
|
|
@@ -68,10 +58,10 @@ export class DismissibleLayerState {
|
|
|
68
58
|
#handleFocus = (event) => {
|
|
69
59
|
if (event.defaultPrevented)
|
|
70
60
|
return;
|
|
71
|
-
if (!this.
|
|
61
|
+
if (!this.opts.ref.current)
|
|
72
62
|
return;
|
|
73
63
|
afterTick(() => {
|
|
74
|
-
if (!this.
|
|
64
|
+
if (!this.opts.ref.current || this.#isTargetWithinLayer(event.target))
|
|
75
65
|
return;
|
|
76
66
|
if (event.target && !this.#isFocusInsideDOMTree) {
|
|
77
67
|
this.#onFocusOutside.current?.(event);
|
|
@@ -107,11 +97,12 @@ export class DismissibleLayerState {
|
|
|
107
97
|
this.#interactOutsideProp.current(e);
|
|
108
98
|
};
|
|
109
99
|
#handleInteractOutside = debounce((e) => {
|
|
110
|
-
if (!this.
|
|
100
|
+
if (!this.opts.ref.current) {
|
|
111
101
|
this.#unsubClickListener();
|
|
112
102
|
return;
|
|
113
103
|
}
|
|
114
|
-
const isEventValid = this.opts.isValidEvent.current(e, this.
|
|
104
|
+
const isEventValid = this.opts.isValidEvent.current(e, this.opts.ref.current) ||
|
|
105
|
+
isValidEvent(e, this.opts.ref.current);
|
|
115
106
|
if (!this.#isResponsibleLayer || this.#isAnyEventIntercepted() || !isEventValid) {
|
|
116
107
|
this.#unsubClickListener();
|
|
117
108
|
return;
|
|
@@ -141,14 +132,14 @@ export class DismissibleLayerState {
|
|
|
141
132
|
this.#interceptedEvents[e.type] = false;
|
|
142
133
|
};
|
|
143
134
|
#markResponsibleLayer = () => {
|
|
144
|
-
if (!this.
|
|
135
|
+
if (!this.opts.ref.current)
|
|
145
136
|
return;
|
|
146
|
-
this.#isResponsibleLayer = isResponsibleLayer(this.
|
|
137
|
+
this.#isResponsibleLayer = isResponsibleLayer(this.opts.ref.current);
|
|
147
138
|
};
|
|
148
139
|
#isTargetWithinLayer = (target) => {
|
|
149
|
-
if (!this.
|
|
140
|
+
if (!this.opts.ref.current)
|
|
150
141
|
return false;
|
|
151
|
-
return isOrContainsTarget(this.
|
|
142
|
+
return isOrContainsTarget(this.opts.ref.current, target);
|
|
152
143
|
};
|
|
153
144
|
#resetState = debounce(() => {
|
|
154
145
|
for (const eventType in this.#interceptedEvents) {
|
|
@@ -187,9 +178,9 @@ function isResponsibleLayer(node) {
|
|
|
187
178
|
*/
|
|
188
179
|
const topMostLayer = getTopMostLayer(layersArr);
|
|
189
180
|
if (topMostLayer)
|
|
190
|
-
return topMostLayer[0].
|
|
181
|
+
return topMostLayer[0].opts.ref.current === node;
|
|
191
182
|
const [firstLayerNode] = layersArr[0];
|
|
192
|
-
return firstLayerNode.
|
|
183
|
+
return firstLayerNode.opts.ref.current === node;
|
|
193
184
|
}
|
|
194
185
|
function isValidEvent(e, node) {
|
|
195
186
|
if ("button" in e && e.button > 0)
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
import type { AnchorProps } from "./index.js";
|
|
5
5
|
import type { Measurable } from "../../../../internal/floating-svelte/types.js";
|
|
6
6
|
|
|
7
|
-
let { id, children, virtualEl }: AnchorProps = $props();
|
|
7
|
+
let { id, children, virtualEl, ref }: AnchorProps = $props();
|
|
8
8
|
|
|
9
9
|
useFloatingAnchorState({
|
|
10
10
|
id: box.with(() => id),
|
|
11
11
|
virtualEl: box.with(() => virtualEl as unknown as Measurable | null),
|
|
12
|
+
ref,
|
|
12
13
|
});
|
|
13
14
|
</script>
|
|
14
15
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Middleware, type Placement } from "@floating-ui/dom";
|
|
2
|
+
import { type ReadableBox } from "svelte-toolbelt";
|
|
2
3
|
import type { Arrayable, WithRefProps } from "../../../internal/types.js";
|
|
3
4
|
import type { Box, ReadableBoxedValues } from "../../../internal/box.svelte.js";
|
|
4
5
|
import type { Measurable, UseFloatingReturn } from "../../../internal/floating-svelte/types.js";
|
|
@@ -11,7 +12,7 @@ export type Boundary = Element | null;
|
|
|
11
12
|
declare class FloatingRootState {
|
|
12
13
|
anchorNode: import("svelte-toolbelt").WritableBox<HTMLElement | Measurable | null>;
|
|
13
14
|
customAnchorNode: import("svelte-toolbelt").WritableBox<string | HTMLElement | Measurable | null>;
|
|
14
|
-
triggerNode:
|
|
15
|
+
triggerNode: ReadableBox<Measurable | HTMLElement | null>;
|
|
15
16
|
constructor();
|
|
16
17
|
}
|
|
17
18
|
export type FloatingContentStateProps = ReadableBoxedValues<{
|
|
@@ -934,11 +935,11 @@ declare class FloatingArrowState {
|
|
|
934
935
|
type FloatingAnchorStateProps = ReadableBoxedValues<{
|
|
935
936
|
id: string;
|
|
936
937
|
virtualEl?: Measurable | null;
|
|
938
|
+
ref: Measurable | HTMLElement | null;
|
|
937
939
|
}>;
|
|
938
940
|
declare class FloatingAnchorState {
|
|
939
941
|
readonly opts: FloatingAnchorStateProps;
|
|
940
942
|
readonly root: FloatingRootState;
|
|
941
|
-
ref: import("svelte-toolbelt").WritableBox<HTMLElement | null>;
|
|
942
943
|
constructor(opts: FloatingAnchorStateProps, root: FloatingRootState);
|
|
943
944
|
}
|
|
944
945
|
export declare function useFloatingRootState(): FloatingRootState;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { arrow, autoUpdate, flip, hide, limitShift, offset, shift, size, } from "@floating-ui/dom";
|
|
2
|
-
import { box, cssToStyleObj, styleToString
|
|
2
|
+
import { attachRef, box, cssToStyleObj, styleToString } from "svelte-toolbelt";
|
|
3
3
|
import { Context, ElementSize, watch } from "runed";
|
|
4
4
|
import { isNotNull } from "../../../internal/is.js";
|
|
5
5
|
import { useId } from "../../../internal/use-id.js";
|
|
@@ -133,6 +133,7 @@ class FloatingContentState {
|
|
|
133
133
|
},
|
|
134
134
|
// Floating UI calculates logical alignment based the `dir` attribute
|
|
135
135
|
dir: this.opts.dir.current,
|
|
136
|
+
...attachRef(this.wrapperRef),
|
|
136
137
|
}));
|
|
137
138
|
props = $derived.by(() => ({
|
|
138
139
|
"data-side": this.placedSide,
|
|
@@ -143,6 +144,7 @@ class FloatingContentState {
|
|
|
143
144
|
// we prevent animations so that users's animation don't kick in too early referring wrong sides
|
|
144
145
|
// animation: !this.floating.isPositioned ? "none" : undefined,
|
|
145
146
|
}),
|
|
147
|
+
...attachRef(this.contentRef),
|
|
146
148
|
}));
|
|
147
149
|
arrowStyle = $derived({
|
|
148
150
|
position: "absolute",
|
|
@@ -172,16 +174,6 @@ class FloatingContentState {
|
|
|
172
174
|
watch(() => opts.customAnchor.current, (customAnchor) => {
|
|
173
175
|
this.root.customAnchorNode.current = customAnchor;
|
|
174
176
|
});
|
|
175
|
-
useRefById({
|
|
176
|
-
id: this.opts.wrapperId,
|
|
177
|
-
ref: this.wrapperRef,
|
|
178
|
-
deps: () => this.opts.enabled.current,
|
|
179
|
-
});
|
|
180
|
-
useRefById({
|
|
181
|
-
id: this.opts.id,
|
|
182
|
-
ref: this.contentRef,
|
|
183
|
-
deps: () => this.opts.enabled.current,
|
|
184
|
-
});
|
|
185
177
|
this.floating = useFloating({
|
|
186
178
|
strategy: () => this.opts.strategy.current,
|
|
187
179
|
placement: () => this.#desiredPlacement,
|
|
@@ -216,24 +208,17 @@ class FloatingArrowState {
|
|
|
216
208
|
constructor(opts, content) {
|
|
217
209
|
this.opts = opts;
|
|
218
210
|
this.content = content;
|
|
219
|
-
useRefById({
|
|
220
|
-
...opts,
|
|
221
|
-
onRefChange: (node) => {
|
|
222
|
-
this.content.arrowRef.current = node;
|
|
223
|
-
},
|
|
224
|
-
deps: () => this.content.opts.enabled.current,
|
|
225
|
-
});
|
|
226
211
|
}
|
|
227
212
|
props = $derived.by(() => ({
|
|
228
213
|
id: this.opts.id.current,
|
|
229
214
|
style: this.content.arrowStyle,
|
|
230
215
|
"data-side": this.content.placedSide,
|
|
216
|
+
...attachRef(this.content.arrowRef),
|
|
231
217
|
}));
|
|
232
218
|
}
|
|
233
219
|
class FloatingAnchorState {
|
|
234
220
|
opts;
|
|
235
221
|
root;
|
|
236
|
-
ref = box(null);
|
|
237
222
|
constructor(opts, root) {
|
|
238
223
|
this.opts = opts;
|
|
239
224
|
this.root = root;
|
|
@@ -241,13 +226,7 @@ class FloatingAnchorState {
|
|
|
241
226
|
root.triggerNode = box.from(opts.virtualEl.current);
|
|
242
227
|
}
|
|
243
228
|
else {
|
|
244
|
-
|
|
245
|
-
id: opts.id,
|
|
246
|
-
ref: this.ref,
|
|
247
|
-
onRefChange: (node) => {
|
|
248
|
-
root.triggerNode.current = node;
|
|
249
|
-
},
|
|
250
|
-
});
|
|
229
|
+
root.triggerNode = opts.ref;
|
|
251
230
|
}
|
|
252
231
|
}
|
|
253
232
|
}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
onOpenAutoFocus = noop,
|
|
13
13
|
focusScope,
|
|
14
14
|
forceMount = false,
|
|
15
|
+
ref,
|
|
15
16
|
}: FocusScopeImplProps = $props();
|
|
16
17
|
|
|
17
18
|
const focusScopeState = useFocusScope({
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
onOpenAutoFocus: box.with(() => onOpenAutoFocus),
|
|
22
23
|
id: box.with(() => id),
|
|
23
24
|
forceMount: box.with(() => forceMount),
|
|
25
|
+
ref,
|
|
24
26
|
});
|
|
25
27
|
</script>
|
|
26
28
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
2
|
import type { FocusScopeContainerProps } from "./use-focus-scope.svelte.js";
|
|
3
3
|
import type { EventCallback } from "../../../internal/events.js";
|
|
4
|
+
import type { ReadableBox } from "svelte-toolbelt";
|
|
4
5
|
export type FocusScopeProps = {
|
|
5
6
|
/**
|
|
6
7
|
* Event handler called when auto-focusing on open.
|
|
@@ -38,4 +39,5 @@ export type FocusScopeImplProps = {
|
|
|
38
39
|
* Whether the content within the focus trap is being force mounted or not.
|
|
39
40
|
*/
|
|
40
41
|
forceMount?: boolean;
|
|
42
|
+
ref: ReadableBox<HTMLElement | null>;
|
|
41
43
|
} & FocusScopeProps;
|
|
@@ -36,13 +36,14 @@ type UseFocusScopeProps = ReadableBoxedValues<{
|
|
|
36
36
|
* Whether force mount is enabled or not
|
|
37
37
|
*/
|
|
38
38
|
forceMount: boolean;
|
|
39
|
+
ref: HTMLElement | null;
|
|
39
40
|
}>;
|
|
40
41
|
export type FocusScopeContainerProps = {
|
|
41
42
|
id: string;
|
|
42
43
|
tabindex: number;
|
|
43
44
|
onkeydown: EventCallback<KeyboardEvent>;
|
|
44
45
|
};
|
|
45
|
-
export declare function useFocusScope({ id, loop, enabled, onOpenAutoFocus, onCloseAutoFocus, forceMount, }: UseFocusScopeProps): {
|
|
46
|
+
export declare function useFocusScope({ id, loop, enabled, onOpenAutoFocus, onCloseAutoFocus, forceMount, ref, }: UseFocusScopeProps): {
|
|
46
47
|
readonly props: FocusScopeContainerProps;
|
|
47
48
|
};
|
|
48
49
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterSleep, afterTick,
|
|
1
|
+
import { afterSleep, afterTick, executeCallbacks } from "svelte-toolbelt";
|
|
2
2
|
import { Context, watch } from "runed";
|
|
3
3
|
import { on } from "svelte/events";
|
|
4
4
|
import { createFocusScopeAPI, createFocusScopeStack, removeLinks, } from "./focus-scope-stack.svelte.js";
|
|
@@ -16,17 +16,11 @@ const AutoFocusOnDestroyEvent = new CustomEventDispatcher("focusScope.autoFocusO
|
|
|
16
16
|
cancelable: true,
|
|
17
17
|
});
|
|
18
18
|
export const FocusScopeContext = new Context("FocusScope");
|
|
19
|
-
export function useFocusScope({ id, loop, enabled, onOpenAutoFocus, onCloseAutoFocus, forceMount, }) {
|
|
19
|
+
export function useFocusScope({ id, loop, enabled, onOpenAutoFocus, onCloseAutoFocus, forceMount, ref, }) {
|
|
20
20
|
const focusScopeStack = createFocusScopeStack();
|
|
21
21
|
const focusScope = createFocusScopeAPI();
|
|
22
|
-
const ref = box(null);
|
|
23
22
|
const ctx = FocusScopeContext.getOr({ ignoreCloseAutoFocus: false });
|
|
24
23
|
let lastFocusedElement = null;
|
|
25
|
-
useRefById({
|
|
26
|
-
id,
|
|
27
|
-
ref,
|
|
28
|
-
deps: () => enabled.current,
|
|
29
|
-
});
|
|
30
24
|
function manageFocus(event) {
|
|
31
25
|
if (focusScope.paused || !ref.current || focusScope.isHandlingFocus)
|
|
32
26
|
return;
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
customAnchor = null,
|
|
45
45
|
isStatic = false,
|
|
46
46
|
enabled,
|
|
47
|
+
ref,
|
|
47
48
|
...restProps
|
|
48
49
|
}: Omit<PopperLayerImplProps, "present" | "children"> & {
|
|
49
50
|
enabled: boolean;
|
|
@@ -85,6 +86,7 @@
|
|
|
85
86
|
{loop}
|
|
86
87
|
trapFocus={enabled && trapFocus}
|
|
87
88
|
forceMount={restProps.forceMount}
|
|
89
|
+
{ref}
|
|
88
90
|
>
|
|
89
91
|
{#snippet focusScope({ props: focusScopeProps })}
|
|
90
92
|
<EscapeLayer {onEscapeKeydown} {escapeKeydownBehavior} {enabled}>
|
|
@@ -95,6 +97,7 @@
|
|
|
95
97
|
{interactOutsideBehavior}
|
|
96
98
|
{isValidEvent}
|
|
97
99
|
{enabled}
|
|
100
|
+
{ref}
|
|
98
101
|
>
|
|
99
102
|
{#snippet children({ props: dismissibleProps })}
|
|
100
103
|
<TextSelectionLayer
|
|
@@ -103,6 +106,7 @@
|
|
|
103
106
|
{onPointerDown}
|
|
104
107
|
{onPointerUp}
|
|
105
108
|
{enabled}
|
|
109
|
+
{ref}
|
|
106
110
|
>
|
|
107
111
|
{@render popper?.({
|
|
108
112
|
props: mergeProps(
|
|
@@ -39,11 +39,12 @@
|
|
|
39
39
|
isValidEvent = () => false,
|
|
40
40
|
customAnchor = null,
|
|
41
41
|
isStatic = false,
|
|
42
|
+
ref,
|
|
42
43
|
...restProps
|
|
43
44
|
}: PopperLayerImplProps = $props();
|
|
44
45
|
</script>
|
|
45
46
|
|
|
46
|
-
<PresenceLayer {
|
|
47
|
+
<PresenceLayer {present} {ref}>
|
|
47
48
|
{#snippet presence()}
|
|
48
49
|
<PopperLayerInner
|
|
49
50
|
{popper}
|
|
@@ -82,6 +83,7 @@
|
|
|
82
83
|
{isValidEvent}
|
|
83
84
|
{onFocusOutside}
|
|
84
85
|
forceMount={false}
|
|
86
|
+
{ref}
|
|
85
87
|
{...restProps}
|
|
86
88
|
/>
|
|
87
89
|
{/snippet}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
import type { PresenceLayerImplProps } from "./types.js";
|
|
4
4
|
import { usePresence } from "./use-presence.svelte.js";
|
|
5
5
|
|
|
6
|
-
let { present, forceMount, presence,
|
|
6
|
+
let { present, forceMount, presence, ref }: PresenceLayerImplProps = $props();
|
|
7
7
|
|
|
8
8
|
const isPresent = usePresence(
|
|
9
9
|
box.with(() => present),
|
|
10
|
-
|
|
10
|
+
ref
|
|
11
11
|
);
|
|
12
12
|
</script>
|
|
13
13
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
|
+
import type { ReadableBox } from "svelte-toolbelt";
|
|
2
3
|
export type PresenceLayerProps = {
|
|
3
4
|
/**
|
|
4
5
|
* Whether to force mount the component.
|
|
@@ -6,7 +7,6 @@ export type PresenceLayerProps = {
|
|
|
6
7
|
forceMount?: boolean;
|
|
7
8
|
};
|
|
8
9
|
export type PresenceLayerImplProps = PresenceLayerProps & {
|
|
9
|
-
id: string;
|
|
10
10
|
/**
|
|
11
11
|
* The presence status.
|
|
12
12
|
*/
|
|
@@ -16,4 +16,5 @@ export type PresenceLayerImplProps = PresenceLayerProps & {
|
|
|
16
16
|
current: boolean;
|
|
17
17
|
};
|
|
18
18
|
}]>;
|
|
19
|
+
ref: ReadableBox<HTMLElement | null>;
|
|
19
20
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type ReadableBox } from "svelte-toolbelt";
|
|
2
|
-
export declare function usePresence(present: ReadableBox<boolean>,
|
|
2
|
+
export declare function usePresence(present: ReadableBox<boolean>, ref: ReadableBox<HTMLElement | null>): {
|
|
3
3
|
readonly current: boolean;
|
|
4
4
|
};
|