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,4 +1,4 @@
|
|
|
1
|
-
import { afterTick, box, mergeProps, onDestroyEffect,
|
|
1
|
+
import { afterTick, box, mergeProps, onDestroyEffect, attachRef, DOMContext, getWindow, } from "svelte-toolbelt";
|
|
2
2
|
import { Context, watch } from "runed";
|
|
3
3
|
import { FIRST_LAST_KEYS, LAST_KEYS, SELECTION_KEYS, SUB_OPEN_KEYS, getCheckedState, isMouseEvent, } from "./utils.js";
|
|
4
4
|
import { focusFirst } from "../../internal/focus.js";
|
|
@@ -13,6 +13,7 @@ import { useGraceArea } from "../../internal/use-grace-area.svelte.js";
|
|
|
13
13
|
import { getTabbableFrom } from "../../internal/tabbable.js";
|
|
14
14
|
import { FocusScopeContext } from "../utilities/focus-scope/use-focus-scope.svelte.js";
|
|
15
15
|
import { isTabbable } from "tabbable";
|
|
16
|
+
import { untrack } from "svelte";
|
|
16
17
|
export const CONTEXT_MENU_TRIGGER_ATTR = "data-context-menu-trigger";
|
|
17
18
|
const MenuRootContext = new Context("Menu.Root");
|
|
18
19
|
const MenuMenuContext = new Context("Menu.Root | Menu.Sub");
|
|
@@ -74,24 +75,17 @@ class MenuContentState {
|
|
|
74
75
|
rovingFocusGroup;
|
|
75
76
|
mounted = $state(false);
|
|
76
77
|
#isSub;
|
|
78
|
+
domContext;
|
|
77
79
|
constructor(opts, parentMenu) {
|
|
78
80
|
this.opts = opts;
|
|
79
81
|
this.parentMenu = parentMenu;
|
|
82
|
+
this.domContext = new DOMContext(opts.ref);
|
|
80
83
|
parentMenu.contentId = opts.id;
|
|
81
84
|
this.#isSub = opts.isSub ?? false;
|
|
82
85
|
this.onkeydown = this.onkeydown.bind(this);
|
|
83
86
|
this.onblur = this.onblur.bind(this);
|
|
84
87
|
this.onfocus = this.onfocus.bind(this);
|
|
85
88
|
this.handleInteractOutside = this.handleInteractOutside.bind(this);
|
|
86
|
-
useRefById({
|
|
87
|
-
...opts,
|
|
88
|
-
deps: () => this.parentMenu.opts.open.current,
|
|
89
|
-
onRefChange: (node) => {
|
|
90
|
-
if (this.parentMenu.contentNode !== node) {
|
|
91
|
-
this.parentMenu.contentNode = node;
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
89
|
useGraceArea({
|
|
96
90
|
contentNode: () => this.parentMenu.contentNode,
|
|
97
91
|
triggerNode: () => this.parentMenu.triggerNode,
|
|
@@ -104,9 +98,12 @@ class MenuContentState {
|
|
|
104
98
|
this.parentMenu.root.isPointerInTransit = value;
|
|
105
99
|
},
|
|
106
100
|
});
|
|
107
|
-
this.#handleTypeaheadSearch = useDOMTypeahead(
|
|
101
|
+
this.#handleTypeaheadSearch = useDOMTypeahead({
|
|
102
|
+
getActiveElement: () => this.domContext.getActiveElement(),
|
|
103
|
+
getWindow: () => this.domContext.getWindow(),
|
|
104
|
+
}).handleTypeaheadSearch;
|
|
108
105
|
this.rovingFocusGroup = useRovingFocus({
|
|
109
|
-
|
|
106
|
+
rootNode: box.with(() => this.parentMenu.contentNode),
|
|
110
107
|
candidateAttr: this.parentMenu.root.getAttr("item"),
|
|
111
108
|
loop: this.opts.loop,
|
|
112
109
|
orientation: box.with(() => "vertical"),
|
|
@@ -125,7 +122,7 @@ class MenuContentState {
|
|
|
125
122
|
});
|
|
126
123
|
$effect(() => {
|
|
127
124
|
if (!this.parentMenu.opts.open.current) {
|
|
128
|
-
|
|
125
|
+
this.domContext.getWindow().clearTimeout(this.#timer);
|
|
129
126
|
}
|
|
130
127
|
});
|
|
131
128
|
}
|
|
@@ -182,7 +179,7 @@ class MenuContentState {
|
|
|
182
179
|
});
|
|
183
180
|
}
|
|
184
181
|
else {
|
|
185
|
-
|
|
182
|
+
this.domContext.getDocument().body.focus();
|
|
186
183
|
}
|
|
187
184
|
}
|
|
188
185
|
onkeydown(e) {
|
|
@@ -221,7 +218,7 @@ class MenuContentState {
|
|
|
221
218
|
if (LAST_KEYS.includes(e.key)) {
|
|
222
219
|
candidateNodes.reverse();
|
|
223
220
|
}
|
|
224
|
-
focusFirst(candidateNodes);
|
|
221
|
+
focusFirst(candidateNodes, { select: false }, () => this.domContext.getActiveElement());
|
|
225
222
|
}
|
|
226
223
|
onblur(e) {
|
|
227
224
|
if (!isElement(e.currentTarget))
|
|
@@ -230,7 +227,7 @@ class MenuContentState {
|
|
|
230
227
|
return;
|
|
231
228
|
// clear search buffer when leaving the menu
|
|
232
229
|
if (!e.currentTarget.contains?.(e.target)) {
|
|
233
|
-
|
|
230
|
+
this.domContext.getWindow().clearTimeout(this.#timer);
|
|
234
231
|
this.search = "";
|
|
235
232
|
}
|
|
236
233
|
}
|
|
@@ -289,6 +286,13 @@ class MenuContentState {
|
|
|
289
286
|
style: {
|
|
290
287
|
pointerEvents: "auto",
|
|
291
288
|
},
|
|
289
|
+
...attachRef(this.opts.ref, (v) => {
|
|
290
|
+
untrack(() => {
|
|
291
|
+
if (this.parentMenu.contentNode !== v) {
|
|
292
|
+
this.parentMenu.contentNode = v;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}),
|
|
292
296
|
}));
|
|
293
297
|
popperProps = {
|
|
294
298
|
onCloseAutoFocus: (e) => this.onCloseAutoFocus(e),
|
|
@@ -305,10 +309,6 @@ class MenuItemSharedState {
|
|
|
305
309
|
this.onpointerleave = this.onpointerleave.bind(this);
|
|
306
310
|
this.onfocus = this.onfocus.bind(this);
|
|
307
311
|
this.onblur = this.onblur.bind(this);
|
|
308
|
-
useRefById({
|
|
309
|
-
...opts,
|
|
310
|
-
deps: () => this.content.mounted,
|
|
311
|
-
});
|
|
312
312
|
}
|
|
313
313
|
onpointermove(e) {
|
|
314
314
|
if (e.defaultPrevented)
|
|
@@ -362,6 +362,7 @@ class MenuItemSharedState {
|
|
|
362
362
|
onpointerleave: this.onpointerleave,
|
|
363
363
|
onfocus: this.onfocus,
|
|
364
364
|
onblur: this.onblur,
|
|
365
|
+
...attachRef(this.opts.ref),
|
|
365
366
|
}));
|
|
366
367
|
}
|
|
367
368
|
class MenuItemState {
|
|
@@ -452,17 +453,11 @@ class MenuSubTriggerState {
|
|
|
452
453
|
onDestroyEffect(() => {
|
|
453
454
|
this.#clearOpenTimer();
|
|
454
455
|
});
|
|
455
|
-
useRefById({
|
|
456
|
-
...item.opts,
|
|
457
|
-
onRefChange: (node) => {
|
|
458
|
-
this.submenu.triggerNode = node;
|
|
459
|
-
},
|
|
460
|
-
});
|
|
461
456
|
}
|
|
462
457
|
#clearOpenTimer() {
|
|
463
458
|
if (this.#openTimer === null)
|
|
464
459
|
return;
|
|
465
|
-
|
|
460
|
+
this.content.domContext.getWindow().clearTimeout(this.#openTimer);
|
|
466
461
|
this.#openTimer = null;
|
|
467
462
|
}
|
|
468
463
|
onpointermove(e) {
|
|
@@ -472,7 +467,7 @@ class MenuSubTriggerState {
|
|
|
472
467
|
!this.submenu.opts.open.current &&
|
|
473
468
|
!this.#openTimer &&
|
|
474
469
|
!this.content.parentMenu.root.isPointerInTransit) {
|
|
475
|
-
this.#openTimer =
|
|
470
|
+
this.#openTimer = this.content.domContext.setTimeout(() => {
|
|
476
471
|
this.submenu.onOpen();
|
|
477
472
|
this.#clearOpenTimer();
|
|
478
473
|
}, 100);
|
|
@@ -530,6 +525,7 @@ class MenuSubTriggerState {
|
|
|
530
525
|
onpointermove: this.onpointermove,
|
|
531
526
|
onpointerleave: this.onpointerleave,
|
|
532
527
|
onkeydown: this.onkeydown,
|
|
528
|
+
...attachRef(this.opts.ref, (v) => (this.submenu.triggerNode = v)),
|
|
533
529
|
}, this.item.props));
|
|
534
530
|
}
|
|
535
531
|
class MenuCheckboxItemState {
|
|
@@ -584,13 +580,13 @@ class MenuGroupState {
|
|
|
584
580
|
constructor(opts, root) {
|
|
585
581
|
this.opts = opts;
|
|
586
582
|
this.root = root;
|
|
587
|
-
useRefById(this.opts);
|
|
588
583
|
}
|
|
589
584
|
props = $derived.by(() => ({
|
|
590
585
|
id: this.opts.id.current,
|
|
591
586
|
role: "group",
|
|
592
587
|
"aria-labelledby": this.groupHeadingId,
|
|
593
588
|
[this.root.getAttr("group")]: "",
|
|
589
|
+
...attachRef(this.opts.ref),
|
|
594
590
|
}));
|
|
595
591
|
}
|
|
596
592
|
class MenuGroupHeadingState {
|
|
@@ -599,17 +595,12 @@ class MenuGroupHeadingState {
|
|
|
599
595
|
constructor(opts, group) {
|
|
600
596
|
this.opts = opts;
|
|
601
597
|
this.group = group;
|
|
602
|
-
useRefById({
|
|
603
|
-
...opts,
|
|
604
|
-
onRefChange: (node) => {
|
|
605
|
-
this.group.groupHeadingId = node?.id;
|
|
606
|
-
},
|
|
607
|
-
});
|
|
608
598
|
}
|
|
609
599
|
props = $derived.by(() => ({
|
|
610
600
|
id: this.opts.id.current,
|
|
611
601
|
role: "group",
|
|
612
602
|
[this.group.root.getAttr("group-heading")]: "",
|
|
603
|
+
...attachRef(this.opts.ref, (v) => (this.group.groupHeadingId = v?.id)),
|
|
613
604
|
}));
|
|
614
605
|
}
|
|
615
606
|
class MenuSeparatorState {
|
|
@@ -618,12 +609,12 @@ class MenuSeparatorState {
|
|
|
618
609
|
constructor(opts, root) {
|
|
619
610
|
this.opts = opts;
|
|
620
611
|
this.root = root;
|
|
621
|
-
useRefById(opts);
|
|
622
612
|
}
|
|
623
613
|
props = $derived.by(() => ({
|
|
624
614
|
id: this.opts.id.current,
|
|
625
615
|
role: "group",
|
|
626
616
|
[this.root.getAttr("separator")]: "",
|
|
617
|
+
...attachRef(this.opts.ref),
|
|
627
618
|
}));
|
|
628
619
|
}
|
|
629
620
|
class MenuArrowState {
|
|
@@ -644,7 +635,6 @@ class MenuRadioGroupState {
|
|
|
644
635
|
this.opts = opts;
|
|
645
636
|
this.content = content;
|
|
646
637
|
this.root = content.parentMenu.root;
|
|
647
|
-
useRefById(opts);
|
|
648
638
|
}
|
|
649
639
|
setValue(v) {
|
|
650
640
|
this.opts.value.current = v;
|
|
@@ -654,6 +644,7 @@ class MenuRadioGroupState {
|
|
|
654
644
|
[this.root.getAttr("radio-group")]: "",
|
|
655
645
|
role: "group",
|
|
656
646
|
"aria-labelledby": this.groupHeadingId,
|
|
647
|
+
...attachRef(this.opts.ref),
|
|
657
648
|
}));
|
|
658
649
|
}
|
|
659
650
|
class MenuRadioItemState {
|
|
@@ -665,7 +656,6 @@ class MenuRadioItemState {
|
|
|
665
656
|
this.opts = opts;
|
|
666
657
|
this.item = item;
|
|
667
658
|
this.group = group;
|
|
668
|
-
useRefById(opts);
|
|
669
659
|
}
|
|
670
660
|
selectValue() {
|
|
671
661
|
this.group.setValue(this.opts.value.current);
|
|
@@ -676,6 +666,7 @@ class MenuRadioItemState {
|
|
|
676
666
|
role: "menuitemradio",
|
|
677
667
|
"aria-checked": getAriaChecked(this.isChecked, false),
|
|
678
668
|
"data-state": getCheckedState(this.isChecked),
|
|
669
|
+
...attachRef(this.opts.ref),
|
|
679
670
|
}));
|
|
680
671
|
}
|
|
681
672
|
class DropdownMenuTriggerState {
|
|
@@ -684,17 +675,8 @@ class DropdownMenuTriggerState {
|
|
|
684
675
|
constructor(opts, parentMenu) {
|
|
685
676
|
this.opts = opts;
|
|
686
677
|
this.parentMenu = parentMenu;
|
|
687
|
-
this.onpointerdown = this.onpointerdown.bind(this);
|
|
688
|
-
this.onpointerup = this.onpointerup.bind(this);
|
|
689
|
-
this.onkeydown = this.onkeydown.bind(this);
|
|
690
|
-
useRefById({
|
|
691
|
-
...opts,
|
|
692
|
-
onRefChange: (ref) => {
|
|
693
|
-
this.parentMenu.triggerNode = ref;
|
|
694
|
-
},
|
|
695
|
-
});
|
|
696
678
|
}
|
|
697
|
-
onpointerdown(e) {
|
|
679
|
+
onpointerdown = (e) => {
|
|
698
680
|
if (this.opts.disabled.current)
|
|
699
681
|
return;
|
|
700
682
|
if (e.pointerType === "touch")
|
|
@@ -706,16 +688,16 @@ class DropdownMenuTriggerState {
|
|
|
706
688
|
if (!this.parentMenu.opts.open.current)
|
|
707
689
|
e.preventDefault();
|
|
708
690
|
}
|
|
709
|
-
}
|
|
710
|
-
onpointerup(e) {
|
|
691
|
+
};
|
|
692
|
+
onpointerup = (e) => {
|
|
711
693
|
if (this.opts.disabled.current)
|
|
712
694
|
return;
|
|
713
695
|
if (e.pointerType === "touch") {
|
|
714
696
|
e.preventDefault();
|
|
715
697
|
this.parentMenu.toggleOpen();
|
|
716
698
|
}
|
|
717
|
-
}
|
|
718
|
-
onkeydown(e) {
|
|
699
|
+
};
|
|
700
|
+
onkeydown = (e) => {
|
|
719
701
|
if (this.opts.disabled.current)
|
|
720
702
|
return;
|
|
721
703
|
if (e.key === kbd.SPACE || e.key === kbd.ENTER) {
|
|
@@ -727,7 +709,7 @@ class DropdownMenuTriggerState {
|
|
|
727
709
|
this.parentMenu.onOpen();
|
|
728
710
|
e.preventDefault();
|
|
729
711
|
}
|
|
730
|
-
}
|
|
712
|
+
};
|
|
731
713
|
#ariaControls = $derived.by(() => {
|
|
732
714
|
if (this.parentMenu.opts.open.current && this.parentMenu.contentId.current)
|
|
733
715
|
return this.parentMenu.contentId.current;
|
|
@@ -746,6 +728,7 @@ class DropdownMenuTriggerState {
|
|
|
746
728
|
onpointerdown: this.onpointerdown,
|
|
747
729
|
onpointerup: this.onpointerup,
|
|
748
730
|
onkeydown: this.onkeydown,
|
|
731
|
+
...attachRef(this.opts.ref, (v) => (this.parentMenu.triggerNode = v)),
|
|
749
732
|
}));
|
|
750
733
|
}
|
|
751
734
|
class ContextMenuTriggerState {
|
|
@@ -764,13 +747,6 @@ class ContextMenuTriggerState {
|
|
|
764
747
|
this.onpointermove = this.onpointermove.bind(this);
|
|
765
748
|
this.onpointercancel = this.onpointercancel.bind(this);
|
|
766
749
|
this.onpointerup = this.onpointerup.bind(this);
|
|
767
|
-
useRefById({
|
|
768
|
-
...opts,
|
|
769
|
-
onRefChange: (node) => {
|
|
770
|
-
this.parentMenu.triggerNode = node;
|
|
771
|
-
},
|
|
772
|
-
deps: () => this.parentMenu.opts.open.current,
|
|
773
|
-
});
|
|
774
750
|
watch(() => this.#point, (point) => {
|
|
775
751
|
this.virtualElement.current = {
|
|
776
752
|
getBoundingClientRect: () => DOMRect.fromRect({ width: 0, height: 0, ...point }),
|
|
@@ -786,7 +762,7 @@ class ContextMenuTriggerState {
|
|
|
786
762
|
#clearLongPressTimer() {
|
|
787
763
|
if (this.#longPressTimer === null)
|
|
788
764
|
return;
|
|
789
|
-
|
|
765
|
+
getWindow(this.opts.ref.current).clearTimeout(this.#longPressTimer);
|
|
790
766
|
}
|
|
791
767
|
#handleOpen(e) {
|
|
792
768
|
this.#point = { x: e.clientX, y: e.clientY };
|
|
@@ -804,7 +780,7 @@ class ContextMenuTriggerState {
|
|
|
804
780
|
if (this.opts.disabled.current || isMouseEvent(e))
|
|
805
781
|
return;
|
|
806
782
|
this.#clearLongPressTimer();
|
|
807
|
-
this.#longPressTimer =
|
|
783
|
+
this.#longPressTimer = getWindow(this.opts.ref.current).setTimeout(() => this.#handleOpen(e), 700);
|
|
808
784
|
}
|
|
809
785
|
onpointermove(e) {
|
|
810
786
|
if (this.opts.disabled.current || isMouseEvent(e))
|
|
@@ -834,6 +810,7 @@ class ContextMenuTriggerState {
|
|
|
834
810
|
onpointercancel: this.onpointercancel,
|
|
835
811
|
onpointerup: this.onpointerup,
|
|
836
812
|
oncontextmenu: this.oncontextmenu,
|
|
813
|
+
...attachRef(this.opts.ref, (v) => (this.parentMenu.triggerNode = v)),
|
|
837
814
|
}));
|
|
838
815
|
}
|
|
839
816
|
class MenuCheckboxGroupState {
|
|
@@ -845,7 +822,6 @@ class MenuCheckboxGroupState {
|
|
|
845
822
|
this.opts = opts;
|
|
846
823
|
this.content = content;
|
|
847
824
|
this.root = content.parentMenu.root;
|
|
848
|
-
useRefById(opts);
|
|
849
825
|
}
|
|
850
826
|
addValue(checkboxValue) {
|
|
851
827
|
if (!checkboxValue)
|
|
@@ -871,6 +847,7 @@ class MenuCheckboxGroupState {
|
|
|
871
847
|
[this.root.getAttr("checkbox-group")]: "",
|
|
872
848
|
role: "group",
|
|
873
849
|
"aria-labelledby": this.groupHeadingId,
|
|
850
|
+
...attachRef(this.opts.ref),
|
|
874
851
|
}));
|
|
875
852
|
}
|
|
876
853
|
export function useMenuRoot(props) {
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { MenubarContentStaticProps } from "../types.js";
|
|
4
4
|
import { useMenubarContent } from "../menubar.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import MenuContentStatic from "../../menu/components/menu-content-static.svelte";
|
|
7
7
|
import { noop } from "../../../internal/noop.js";
|
|
8
8
|
|
|
9
|
+
const uid = $props.id();
|
|
10
|
+
|
|
9
11
|
let {
|
|
10
12
|
ref = $bindable(null),
|
|
11
13
|
interactOutsideBehavior = "close",
|
|
12
|
-
id =
|
|
14
|
+
id = createId(uid),
|
|
13
15
|
onInteractOutside = noop,
|
|
14
16
|
onCloseAutoFocus = noop,
|
|
15
17
|
onFocusOutside = noop,
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
import type { MenubarContentProps } from "../types.js";
|
|
4
4
|
import { useMenubarContent } from "../menubar.svelte.js";
|
|
5
5
|
import MenuContent from "../../menu/components/menu-content.svelte";
|
|
6
|
-
import {
|
|
6
|
+
import { createId } from "../../../internal/create-id.js";
|
|
7
7
|
import { noop } from "../../../internal/noop.js";
|
|
8
8
|
|
|
9
|
+
const uid = $props.id();
|
|
10
|
+
|
|
9
11
|
let {
|
|
10
12
|
ref = $bindable(null),
|
|
11
13
|
interactOutsideBehavior = "close",
|
|
12
|
-
id =
|
|
14
|
+
id = createId(uid),
|
|
13
15
|
onInteractOutside = noop,
|
|
14
16
|
onFocusOutside = noop,
|
|
15
17
|
onCloseAutoFocus = noop,
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
import type { MenubarMenuProps } from "../types.js";
|
|
4
4
|
import { useMenubarMenu } from "../menubar.svelte.js";
|
|
5
5
|
import Menu from "../../menu/components/menu.svelte";
|
|
6
|
-
import { useId } from "../../../internal/use-id.js";
|
|
7
6
|
import { noop } from "../../../internal/noop.js";
|
|
7
|
+
import { createId } from "../../../internal/create-id.js";
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
const uid = $props.id();
|
|
10
|
+
|
|
11
|
+
let { value = createId(uid), onOpenChange = noop, ...restProps }: MenubarMenuProps = $props();
|
|
10
12
|
|
|
11
13
|
const menuState = useMenubarMenu({
|
|
12
14
|
value: box.with(() => value),
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { box, mergeProps } from "svelte-toolbelt";
|
|
2
|
+
import { attachRef, box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { MenubarTriggerProps } from "../types.js";
|
|
4
4
|
import { useMenubarTrigger } from "../menubar.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
|
import { useMenuDropdownTrigger } from "../../menu/menu.svelte.js";
|
|
8
8
|
|
|
9
|
+
const uid = $props.id();
|
|
10
|
+
|
|
9
11
|
let {
|
|
10
|
-
id =
|
|
12
|
+
id = createId(uid),
|
|
11
13
|
disabled = false,
|
|
12
14
|
children,
|
|
13
15
|
child,
|
|
@@ -24,12 +26,18 @@
|
|
|
24
26
|
),
|
|
25
27
|
});
|
|
26
28
|
|
|
27
|
-
useMenuDropdownTrigger(triggerState.opts);
|
|
29
|
+
const dropdownTriggerState = useMenuDropdownTrigger(triggerState.opts);
|
|
28
30
|
|
|
29
|
-
const mergedProps = $derived(
|
|
31
|
+
const mergedProps = $derived(
|
|
32
|
+
mergeProps(restProps, triggerState.props, {
|
|
33
|
+
...attachRef(
|
|
34
|
+
(v: HTMLElement | null) => (dropdownTriggerState.parentMenu.triggerNode = v)
|
|
35
|
+
),
|
|
36
|
+
})
|
|
37
|
+
);
|
|
30
38
|
</script>
|
|
31
39
|
|
|
32
|
-
<FloatingLayerAnchor {id}>
|
|
40
|
+
<FloatingLayerAnchor {id} ref={triggerState.opts.ref}>
|
|
33
41
|
{#if child}
|
|
34
42
|
{@render child({ props: mergedProps })}
|
|
35
43
|
{:else}
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
3
|
import type { MenubarRootProps } from "../types.js";
|
|
4
4
|
import { useMenubarRoot } from "../menubar.svelte.js";
|
|
5
|
-
import {
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
6
|
import { noop } from "../../../internal/noop.js";
|
|
7
7
|
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
8
10
|
let {
|
|
9
|
-
id =
|
|
11
|
+
id = createId(uid),
|
|
10
12
|
children,
|
|
11
13
|
child,
|
|
12
14
|
ref = $bindable(null),
|
|
@@ -3,8 +3,9 @@ import type { InteractOutsideBehaviorType } from "../utilities/dismissible-layer
|
|
|
3
3
|
import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
|
|
4
4
|
import { type UseRovingFocusReturn } from "../../internal/use-roving-focus.svelte.js";
|
|
5
5
|
import type { Direction } from "../../shared/index.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type { OnChangeFn, WithRefProps } from "../../internal/types.js";
|
|
7
7
|
import { type FocusScopeContextValue } from "../utilities/focus-scope/use-focus-scope.svelte.js";
|
|
8
|
+
import type { FocusEventHandler, KeyboardEventHandler, PointerEventHandler } from "svelte/elements";
|
|
8
9
|
type MenubarRootStateProps = WithRefProps<ReadableBoxedValues<{
|
|
9
10
|
dir: Direction;
|
|
10
11
|
loop: boolean;
|
|
@@ -22,18 +23,18 @@ declare class MenubarRootState {
|
|
|
22
23
|
* @param id - the id of the trigger to register
|
|
23
24
|
* @returns - a function to de-register the trigger
|
|
24
25
|
*/
|
|
25
|
-
registerTrigger(id: string)
|
|
26
|
+
registerTrigger: (id: string) => () => void;
|
|
26
27
|
/**
|
|
27
28
|
* @param value - the value of the menu to register
|
|
28
29
|
* @param contentId - the content id to associate with the value
|
|
29
30
|
* @returns - a function to de-register the menu
|
|
30
31
|
*/
|
|
31
|
-
registerMenu(value: string, onOpenChange: ReadableBox<OnChangeFn<boolean>>)
|
|
32
|
-
updateValue(value: string)
|
|
33
|
-
getTriggers()
|
|
34
|
-
onMenuOpen(id: string, triggerId: string)
|
|
35
|
-
onMenuClose()
|
|
36
|
-
onMenuToggle(id: string)
|
|
32
|
+
registerMenu: (value: string, onOpenChange: ReadableBox<OnChangeFn<boolean>>) => () => void;
|
|
33
|
+
updateValue: (value: string) => void;
|
|
34
|
+
getTriggers: () => HTMLButtonElement[];
|
|
35
|
+
onMenuOpen: (id: string, triggerId: string) => void;
|
|
36
|
+
onMenuClose: () => void;
|
|
37
|
+
onMenuToggle: (id: string) => void;
|
|
37
38
|
props: {
|
|
38
39
|
readonly id: string;
|
|
39
40
|
readonly role: "menubar";
|
|
@@ -50,9 +51,12 @@ declare class MenubarMenuState {
|
|
|
50
51
|
open: boolean;
|
|
51
52
|
wasOpenedByKeyboard: boolean;
|
|
52
53
|
triggerNode: HTMLElement | null;
|
|
54
|
+
triggerId: string | undefined;
|
|
55
|
+
contentId: string | undefined;
|
|
53
56
|
contentNode: HTMLElement | null;
|
|
54
57
|
constructor(opts: MenubarMenuStateProps, root: MenubarRootState);
|
|
55
58
|
getTriggerNode(): HTMLElement | null;
|
|
59
|
+
toggleMenu(): void;
|
|
56
60
|
openMenu(): void;
|
|
57
61
|
}
|
|
58
62
|
type MenubarTriggerStateProps = WithRefProps<ReadableBoxedValues<{
|
|
@@ -65,11 +69,11 @@ declare class MenubarTriggerState {
|
|
|
65
69
|
root: MenubarRootState;
|
|
66
70
|
isFocused: boolean;
|
|
67
71
|
constructor(opts: MenubarTriggerStateProps, menu: MenubarMenuState);
|
|
68
|
-
onpointerdown
|
|
69
|
-
onpointerenter
|
|
70
|
-
onkeydown
|
|
71
|
-
onfocus
|
|
72
|
-
onblur
|
|
72
|
+
onpointerdown: PointerEventHandler<HTMLElement>;
|
|
73
|
+
onpointerenter: PointerEventHandler<HTMLElement>;
|
|
74
|
+
onkeydown: KeyboardEventHandler<HTMLElement>;
|
|
75
|
+
onfocus: FocusEventHandler<HTMLElement>;
|
|
76
|
+
onblur: FocusEventHandler<HTMLElement>;
|
|
73
77
|
props: {
|
|
74
78
|
readonly type: "button";
|
|
75
79
|
readonly role: "menuitem";
|
|
@@ -84,11 +88,11 @@ declare class MenubarTriggerState {
|
|
|
84
88
|
readonly disabled: true | undefined;
|
|
85
89
|
readonly tabindex: number;
|
|
86
90
|
readonly "data-menubar-trigger": "";
|
|
87
|
-
readonly onpointerdown:
|
|
88
|
-
readonly onpointerenter:
|
|
89
|
-
readonly onkeydown:
|
|
90
|
-
readonly onfocus:
|
|
91
|
-
readonly onblur:
|
|
91
|
+
readonly onpointerdown: PointerEventHandler<HTMLElement>;
|
|
92
|
+
readonly onpointerenter: PointerEventHandler<HTMLElement>;
|
|
93
|
+
readonly onkeydown: KeyboardEventHandler<HTMLElement>;
|
|
94
|
+
readonly onfocus: FocusEventHandler<HTMLElement>;
|
|
95
|
+
readonly onblur: FocusEventHandler<HTMLElement>;
|
|
92
96
|
};
|
|
93
97
|
}
|
|
94
98
|
type MenubarContentStateProps = WithRefProps<ReadableBoxedValues<{
|
|
@@ -108,7 +112,7 @@ declare class MenubarContentState {
|
|
|
108
112
|
onFocusOutside: (e: FocusEvent) => void;
|
|
109
113
|
onInteractOutside: (e: PointerEvent) => void;
|
|
110
114
|
onOpenAutoFocus: (e: Event) => void;
|
|
111
|
-
onkeydown
|
|
115
|
+
onkeydown: KeyboardEventHandler<HTMLElement>;
|
|
112
116
|
props: {
|
|
113
117
|
readonly id: string;
|
|
114
118
|
readonly "aria-labelledby": string | undefined;
|
|
@@ -119,7 +123,7 @@ declare class MenubarContentState {
|
|
|
119
123
|
readonly "--bits-menubar-anchor-width": "var(--bits-floating-anchor-width)";
|
|
120
124
|
readonly "--bits-menubar-anchor-height": "var(--bits-floating-anchor-height)";
|
|
121
125
|
};
|
|
122
|
-
readonly onkeydown:
|
|
126
|
+
readonly onkeydown: KeyboardEventHandler<HTMLElement>;
|
|
123
127
|
readonly "data-menu-content": "";
|
|
124
128
|
};
|
|
125
129
|
popperProps: {
|