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
|
@@ -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
|
};
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { executeCallbacks } from "svelte-toolbelt";
|
|
2
2
|
import { Previous, watch } from "runed";
|
|
3
3
|
import { on } from "svelte/events";
|
|
4
4
|
import { useStateMachine } from "../../../internal/use-state-machine.svelte.js";
|
|
5
|
-
export function usePresence(present,
|
|
5
|
+
export function usePresence(present, ref) {
|
|
6
6
|
let styles = $state({});
|
|
7
7
|
let prevAnimationNameState = $state("none");
|
|
8
8
|
const initialState = present.current ? "mounted" : "unmounted";
|
|
9
|
-
let node = $state(null);
|
|
10
9
|
const prevPresent = new Previous(() => present.current);
|
|
11
|
-
watch([() => id.current, () => present.current], ([id, present]) => {
|
|
12
|
-
if (!id || !present)
|
|
13
|
-
return;
|
|
14
|
-
afterTick(() => {
|
|
15
|
-
node = document.getElementById(id);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
10
|
const { state, dispatch } = useStateMachine(initialState, {
|
|
19
11
|
mounted: {
|
|
20
12
|
UNMOUNT: "unmounted",
|
|
@@ -28,18 +20,15 @@ export function usePresence(present, id) {
|
|
|
28
20
|
MOUNT: "mounted",
|
|
29
21
|
},
|
|
30
22
|
});
|
|
31
|
-
watch(() => present.current, (
|
|
32
|
-
if (!
|
|
33
|
-
node = document.getElementById(id.current);
|
|
34
|
-
}
|
|
35
|
-
if (!node)
|
|
23
|
+
watch(() => present.current, () => {
|
|
24
|
+
if (!ref.current)
|
|
36
25
|
return;
|
|
37
|
-
const hasPresentChanged =
|
|
26
|
+
const hasPresentChanged = present.current !== prevPresent.current;
|
|
38
27
|
if (!hasPresentChanged)
|
|
39
28
|
return;
|
|
40
29
|
const prevAnimationName = prevAnimationNameState;
|
|
41
|
-
const currAnimationName = getAnimationName(
|
|
42
|
-
if (
|
|
30
|
+
const currAnimationName = getAnimationName(ref.current);
|
|
31
|
+
if (present.current) {
|
|
43
32
|
dispatch("MOUNT");
|
|
44
33
|
}
|
|
45
34
|
else if (currAnimationName === "none" || styles.display === "none") {
|
|
@@ -69,38 +58,32 @@ export function usePresence(present, id) {
|
|
|
69
58
|
* make sure we only trigger ANIMATION_END for the currently active animation.
|
|
70
59
|
*/
|
|
71
60
|
function handleAnimationEnd(event) {
|
|
72
|
-
if (!
|
|
73
|
-
node = document.getElementById(id.current);
|
|
74
|
-
if (!node)
|
|
61
|
+
if (!ref.current)
|
|
75
62
|
return;
|
|
76
|
-
const currAnimationName = getAnimationName(
|
|
63
|
+
const currAnimationName = getAnimationName(ref.current);
|
|
77
64
|
const isCurrentAnimation = currAnimationName.includes(event.animationName) || currAnimationName === "none";
|
|
78
|
-
if (event.target ===
|
|
65
|
+
if (event.target === ref.current && isCurrentAnimation) {
|
|
79
66
|
dispatch("ANIMATION_END");
|
|
80
67
|
}
|
|
81
68
|
}
|
|
82
69
|
function handleAnimationStart(event) {
|
|
83
|
-
if (!
|
|
84
|
-
node = document.getElementById(id.current);
|
|
85
|
-
if (!node)
|
|
70
|
+
if (!ref.current)
|
|
86
71
|
return;
|
|
87
|
-
if (event.target ===
|
|
88
|
-
prevAnimationNameState = getAnimationName(
|
|
72
|
+
if (event.target === ref.current) {
|
|
73
|
+
prevAnimationNameState = getAnimationName(ref.current);
|
|
89
74
|
}
|
|
90
75
|
}
|
|
91
76
|
watch(() => state.current, () => {
|
|
92
|
-
if (!
|
|
93
|
-
node = document.getElementById(id.current);
|
|
94
|
-
if (!node)
|
|
77
|
+
if (!ref.current)
|
|
95
78
|
return;
|
|
96
|
-
const currAnimationName = getAnimationName(
|
|
79
|
+
const currAnimationName = getAnimationName(ref.current);
|
|
97
80
|
prevAnimationNameState = state.current === "mounted" ? currAnimationName : "none";
|
|
98
81
|
});
|
|
99
|
-
watch(() =>
|
|
100
|
-
if (!
|
|
82
|
+
watch(() => ref.current, () => {
|
|
83
|
+
if (!ref.current)
|
|
101
84
|
return;
|
|
102
|
-
styles = getComputedStyle(
|
|
103
|
-
return executeCallbacks(on(
|
|
85
|
+
styles = getComputedStyle(ref.current);
|
|
86
|
+
return executeCallbacks(on(ref.current, "animationstart", handleAnimationStart), on(ref.current, "animationcancel", handleAnimationEnd), on(ref.current, "animationend", handleAnimationEnd));
|
|
104
87
|
});
|
|
105
88
|
const isPresentDerived = $derived(["mounted", "unmountSuspended"].includes(state.current));
|
|
106
89
|
return {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
id,
|
|
12
12
|
children,
|
|
13
13
|
enabled,
|
|
14
|
+
ref,
|
|
14
15
|
}: TextSelectionLayerImplProps = $props();
|
|
15
16
|
|
|
16
17
|
useTextSelectionLayer({
|
|
@@ -18,6 +19,7 @@
|
|
|
18
19
|
onPointerDown: box.with(() => onPointerDown),
|
|
19
20
|
onPointerUp: box.with(() => onPointerUp),
|
|
20
21
|
enabled: box.with(() => enabled && preventOverflowTextSelection),
|
|
22
|
+
ref,
|
|
21
23
|
});
|
|
22
24
|
</script>
|
|
23
25
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Snippet } from "svelte";
|
|
2
|
+
import type { ReadableBox } from "svelte-toolbelt";
|
|
2
3
|
export type PointerHandler = (e: PointerEvent) => void;
|
|
3
4
|
export type TextSelectionLayerProps = {
|
|
4
5
|
/**
|
|
@@ -28,4 +29,5 @@ export type TextSelectionLayerImplProps = {
|
|
|
28
29
|
* Callback fired when pointerup event triggers.
|
|
29
30
|
*/
|
|
30
31
|
onPointerUp?: PointerHandler;
|
|
32
|
+
ref: ReadableBox<HTMLElement | null>;
|
|
31
33
|
} & TextSelectionLayerProps;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { DOMContext } from "svelte-toolbelt";
|
|
1
2
|
import type { TextSelectionLayerImplProps } from "./types.js";
|
|
2
3
|
import type { ReadableBoxedValues } from "../../../internal/box.svelte.js";
|
|
3
|
-
type TextSelectionLayerStateProps = ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection"
|
|
4
|
+
type TextSelectionLayerStateProps = ReadableBoxedValues<Required<Omit<TextSelectionLayerImplProps, "children" | "preventOverflowTextSelection" | "ref">> & {
|
|
5
|
+
ref: HTMLElement | null;
|
|
6
|
+
}>;
|
|
4
7
|
export declare class TextSelectionLayerState {
|
|
5
8
|
#private;
|
|
6
9
|
readonly opts: TextSelectionLayerStateProps;
|
|
10
|
+
readonly domContext: DOMContext;
|
|
7
11
|
constructor(opts: TextSelectionLayerStateProps);
|
|
8
12
|
}
|
|
9
13
|
export declare function useTextSelectionLayer(props: TextSelectionLayerStateProps): TextSelectionLayerState;
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DOMContext, composeHandlers, contains, executeCallbacks, } from "svelte-toolbelt";
|
|
2
2
|
import { watch } from "runed";
|
|
3
3
|
import { on } from "svelte/events";
|
|
4
4
|
import { noop } from "../../../internal/noop.js";
|
|
5
5
|
import { isHTMLElement } from "../../../internal/is.js";
|
|
6
|
-
import { isOrContainsTarget } from "../../../internal/elements.js";
|
|
7
6
|
globalThis.bitsTextSelectionLayers ??= new Map();
|
|
8
7
|
export class TextSelectionLayerState {
|
|
9
8
|
opts;
|
|
9
|
+
domContext;
|
|
10
10
|
#unsubSelectionLock = noop;
|
|
11
|
-
#ref = box(null);
|
|
12
11
|
constructor(opts) {
|
|
13
12
|
this.opts = opts;
|
|
14
|
-
|
|
15
|
-
id: opts.id,
|
|
16
|
-
ref: this.#ref,
|
|
17
|
-
deps: () => this.opts.enabled.current,
|
|
18
|
-
});
|
|
13
|
+
this.domContext = new DOMContext(opts.ref);
|
|
19
14
|
let unsubEvents = noop;
|
|
20
15
|
watch(() => this.opts.enabled.current, (isEnabled) => {
|
|
21
16
|
if (isEnabled) {
|
|
@@ -31,10 +26,10 @@ export class TextSelectionLayerState {
|
|
|
31
26
|
});
|
|
32
27
|
}
|
|
33
28
|
#addEventListeners() {
|
|
34
|
-
return executeCallbacks(on(
|
|
29
|
+
return executeCallbacks(on(this.domContext.getDocument(), "pointerdown", this.#pointerdown), on(this.domContext.getDocument(), "pointerup", composeHandlers(this.#resetSelectionLock, this.opts.onPointerUp.current)));
|
|
35
30
|
}
|
|
36
31
|
#pointerdown = (e) => {
|
|
37
|
-
const node = this
|
|
32
|
+
const node = this.opts.ref.current;
|
|
38
33
|
const target = e.target;
|
|
39
34
|
if (!isHTMLElement(node) || !isHTMLElement(target) || !this.opts.enabled.current)
|
|
40
35
|
return;
|
|
@@ -43,12 +38,12 @@ export class TextSelectionLayerState {
|
|
|
43
38
|
* pointerdown occurred inside the node. You are still allowed to select text
|
|
44
39
|
* outside the node provided pointerdown occurs outside the node.
|
|
45
40
|
*/
|
|
46
|
-
if (!isHighestLayer(this) || !
|
|
41
|
+
if (!isHighestLayer(this) || !contains(node, target))
|
|
47
42
|
return;
|
|
48
43
|
this.opts.onPointerDown.current(e);
|
|
49
44
|
if (e.defaultPrevented)
|
|
50
45
|
return;
|
|
51
|
-
this.#unsubSelectionLock = preventTextSelectionOverflow(node);
|
|
46
|
+
this.#unsubSelectionLock = preventTextSelectionOverflow(node, this.domContext.getDocument().body);
|
|
52
47
|
};
|
|
53
48
|
#resetSelectionLock = () => {
|
|
54
49
|
this.#unsubSelectionLock();
|
|
@@ -59,8 +54,7 @@ export function useTextSelectionLayer(props) {
|
|
|
59
54
|
return new TextSelectionLayerState(props);
|
|
60
55
|
}
|
|
61
56
|
const getUserSelect = (node) => node.style.userSelect || node.style.webkitUserSelect;
|
|
62
|
-
function preventTextSelectionOverflow(node) {
|
|
63
|
-
const body = document.body;
|
|
57
|
+
function preventTextSelectionOverflow(node, body) {
|
|
64
58
|
const originalBodyUserSelect = getUserSelect(body);
|
|
65
59
|
const originalNodeUserSelect = getUserSelect(node);
|
|
66
60
|
setUserSelect(body, "none");
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
|
|
1
|
+
export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, TimeField, TimeRangeField, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
|
|
2
2
|
export * from "./shared/index.js";
|
|
3
3
|
export type * from "./shared/index.js";
|
|
4
4
|
export * from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
|
|
1
|
+
export { Accordion, AlertDialog, AspectRatio, Avatar, Button, Calendar, Checkbox, Collapsible, Combobox, Command, ContextMenu, DateField, DatePicker, DateRangeField, DateRangePicker, Dialog, DropdownMenu, Label, LinkPreview, Menubar, Meter, NavigationMenu, Pagination, PinInput, Popover, Progress, RadioGroup, RangeCalendar, ScrollArea, Select, Separator, Slider, Switch, Tabs, TimeField, TimeRangeField, Toggle, ToggleGroup, Toolbar, Tooltip, Portal, IsUsingKeyboard, computeCommandScore, } from "./bits/index.js";
|
|
2
2
|
export * from "./shared/index.js";
|
|
3
3
|
export * from "./types.js";
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { type WritableBox } from "svelte-toolbelt";
|
|
2
|
+
type BoxAutoResetOptions<T> = {
|
|
3
|
+
afterMs?: number;
|
|
4
|
+
onChange?: (value: T) => void;
|
|
5
|
+
getWindow: () => Window & typeof globalThis;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
8
|
* Creates a box which will be reset to the default value after some time.
|
|
4
9
|
*
|
|
5
10
|
* @param defaultValue The value which will be set.
|
|
6
11
|
* @param afterMs A zero-or-greater delay in milliseconds.
|
|
7
12
|
*/
|
|
8
|
-
export declare function boxAutoReset<T>(defaultValue: T,
|
|
13
|
+
export declare function boxAutoReset<T>(defaultValue: T, options: BoxAutoResetOptions<T>): WritableBox<T>;
|
|
14
|
+
export {};
|
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
import { box } from "svelte-toolbelt";
|
|
2
2
|
import { noop } from "./noop.js";
|
|
3
|
+
const defaultOptions = {
|
|
4
|
+
afterMs: 10000,
|
|
5
|
+
onChange: noop,
|
|
6
|
+
};
|
|
3
7
|
/**
|
|
4
8
|
* Creates a box which will be reset to the default value after some time.
|
|
5
9
|
*
|
|
6
10
|
* @param defaultValue The value which will be set.
|
|
7
11
|
* @param afterMs A zero-or-greater delay in milliseconds.
|
|
8
12
|
*/
|
|
9
|
-
export function boxAutoReset(defaultValue,
|
|
13
|
+
export function boxAutoReset(defaultValue, options) {
|
|
14
|
+
const { afterMs, onChange, getWindow } = { ...defaultOptions, ...options };
|
|
10
15
|
let timeout = null;
|
|
11
16
|
let value = $state(defaultValue);
|
|
12
17
|
function resetAfter() {
|
|
13
|
-
return
|
|
18
|
+
return getWindow().setTimeout(() => {
|
|
14
19
|
value = defaultValue;
|
|
15
|
-
onChange(defaultValue);
|
|
20
|
+
onChange?.(defaultValue);
|
|
16
21
|
}, afterMs);
|
|
17
22
|
}
|
|
18
23
|
$effect(() => {
|
|
19
24
|
return () => {
|
|
20
25
|
if (timeout)
|
|
21
|
-
clearTimeout(timeout);
|
|
26
|
+
getWindow().clearTimeout(timeout);
|
|
22
27
|
};
|
|
23
28
|
});
|
|
24
29
|
return box.with(() => value, (v) => {
|
|
25
30
|
value = v;
|
|
26
|
-
onChange(v);
|
|
31
|
+
onChange?.(v);
|
|
27
32
|
if (timeout)
|
|
28
|
-
clearTimeout(timeout);
|
|
33
|
+
getWindow().clearTimeout(timeout);
|
|
29
34
|
timeout = resetAfter();
|
|
30
35
|
});
|
|
31
36
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a unique ID for a given uid and optional prefix.
|
|
3
|
+
*
|
|
4
|
+
* @param uid - the uid generated by $props.id()
|
|
5
|
+
* @param prefix - optional prefix to use for the id (defaults to "bits")
|
|
6
|
+
*/
|
|
7
|
+
export declare function createId(uid: string): string;
|
|
8
|
+
export declare function createId(prefix: string, uid: string): string;
|
|
@@ -2,6 +2,6 @@ export type Announcer = ReturnType<typeof getAnnouncer>;
|
|
|
2
2
|
/**
|
|
3
3
|
* Creates an announcer object that can be used to make `aria-live` announcements to screen readers.
|
|
4
4
|
*/
|
|
5
|
-
export declare function getAnnouncer(): {
|
|
5
|
+
export declare function getAnnouncer(doc: Document | null): {
|
|
6
6
|
announce: (value: string | null | number, kind?: "assertive" | "polite", timeout?: number) => NodeJS.Timeout | undefined;
|
|
7
7
|
};
|
|
@@ -5,40 +5,40 @@ import { isBrowser, isHTMLElement } from "../is.js";
|
|
|
5
5
|
* Within the date components, we use this to announce when the values of the individual segments
|
|
6
6
|
* change, as without it we get inconsistent behavior across screen readers.
|
|
7
7
|
*/
|
|
8
|
-
function initAnnouncer() {
|
|
9
|
-
if (!isBrowser)
|
|
8
|
+
function initAnnouncer(doc) {
|
|
9
|
+
if (!isBrowser || !doc)
|
|
10
10
|
return null;
|
|
11
|
-
let el =
|
|
12
|
-
if (!isHTMLElement(el)) {
|
|
13
|
-
const div = document.createElement("div");
|
|
14
|
-
div.style.cssText = srOnlyStylesString;
|
|
15
|
-
div.setAttribute("data-bits-announcer", "");
|
|
16
|
-
div.appendChild(createLog("assertive"));
|
|
17
|
-
div.appendChild(createLog("polite"));
|
|
18
|
-
el = div;
|
|
19
|
-
document.body.insertBefore(el, document.body.firstChild);
|
|
20
|
-
}
|
|
11
|
+
let el = doc.querySelector("[data-bits-announcer]");
|
|
21
12
|
/**
|
|
22
13
|
* Creates a log element for assertive or polite announcements.
|
|
23
14
|
*/
|
|
24
|
-
|
|
25
|
-
const log =
|
|
15
|
+
const createLog = (kind) => {
|
|
16
|
+
const log = doc.createElement("div");
|
|
26
17
|
log.role = "log";
|
|
27
18
|
log.ariaLive = kind;
|
|
28
19
|
log.setAttribute("aria-relevant", "additions");
|
|
29
20
|
return log;
|
|
21
|
+
};
|
|
22
|
+
if (!isHTMLElement(el)) {
|
|
23
|
+
const div = doc.createElement("div");
|
|
24
|
+
div.style.cssText = srOnlyStylesString;
|
|
25
|
+
div.setAttribute("data-bits-announcer", "");
|
|
26
|
+
div.appendChild(createLog("assertive"));
|
|
27
|
+
div.appendChild(createLog("polite"));
|
|
28
|
+
el = div;
|
|
29
|
+
doc.body.insertBefore(el, doc.body.firstChild);
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Retrieves the log element for assertive or polite announcements.
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
const getLog = (kind) => {
|
|
35
35
|
if (!isHTMLElement(el))
|
|
36
36
|
return null;
|
|
37
37
|
const log = el.querySelector(`[aria-live="${kind}"]`);
|
|
38
38
|
if (!isHTMLElement(log))
|
|
39
39
|
return null;
|
|
40
40
|
return log;
|
|
41
|
-
}
|
|
41
|
+
};
|
|
42
42
|
return {
|
|
43
43
|
getLog,
|
|
44
44
|
};
|
|
@@ -46,16 +46,16 @@ function initAnnouncer() {
|
|
|
46
46
|
/**
|
|
47
47
|
* Creates an announcer object that can be used to make `aria-live` announcements to screen readers.
|
|
48
48
|
*/
|
|
49
|
-
export function getAnnouncer() {
|
|
50
|
-
const announcer = initAnnouncer();
|
|
49
|
+
export function getAnnouncer(doc) {
|
|
50
|
+
const announcer = initAnnouncer(doc);
|
|
51
51
|
/**
|
|
52
52
|
* Announces a message to screen readers using the specified kind of announcement.
|
|
53
53
|
*/
|
|
54
54
|
function announce(value, kind = "assertive", timeout = 7500) {
|
|
55
|
-
if (!announcer || !isBrowser)
|
|
55
|
+
if (!announcer || !isBrowser || !doc)
|
|
56
56
|
return;
|
|
57
57
|
const log = announcer.getLog(kind);
|
|
58
|
-
const content =
|
|
58
|
+
const content = doc.createElement("div");
|
|
59
59
|
if (typeof value === "number") {
|
|
60
60
|
value = value.toString();
|
|
61
61
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { endOfMonth, isSameDay, isSameMonth, startOfMonth, } from "@internationalized/date";
|
|
2
|
-
import { afterTick, styleToString } from "svelte-toolbelt";
|
|
2
|
+
import { afterTick, getDocument, styleToString, } from "svelte-toolbelt";
|
|
3
3
|
import { untrack } from "svelte";
|
|
4
4
|
import { getDaysInMonth, getLastFirstDayOfWeek, getNextLastDayOfWeek, hasTime, isAfter, isBefore, parseAnyDateValue, parseStringToDateValue, toDate, } from "./utils.js";
|
|
5
5
|
import { getDataDisabled, getDataInvalid, getDataReadonly } from "../attrs.js";
|
|
@@ -331,7 +331,8 @@ export function useMonthViewOptionsSync(props) {
|
|
|
331
331
|
* Returns a function that removes the heading element.
|
|
332
332
|
*/
|
|
333
333
|
export function createAccessibleHeading({ calendarNode, label, accessibleHeadingId, }) {
|
|
334
|
-
const
|
|
334
|
+
const doc = getDocument(calendarNode);
|
|
335
|
+
const div = doc.createElement("div");
|
|
335
336
|
div.style.cssText = styleToString({
|
|
336
337
|
border: "0px",
|
|
337
338
|
clip: "rect(0px, 0px, 0px, 0px)",
|
|
@@ -344,7 +345,7 @@ export function createAccessibleHeading({ calendarNode, label, accessibleHeading
|
|
|
344
345
|
whiteSpace: "nowrap",
|
|
345
346
|
width: "1px",
|
|
346
347
|
});
|
|
347
|
-
const h2 =
|
|
348
|
+
const h2 = doc.createElement("div");
|
|
348
349
|
h2.textContent = label;
|
|
349
350
|
h2.id = accessibleHeadingId;
|
|
350
351
|
h2.role = "heading";
|
|
@@ -352,7 +353,7 @@ export function createAccessibleHeading({ calendarNode, label, accessibleHeading
|
|
|
352
353
|
calendarNode.insertBefore(div, calendarNode.firstChild);
|
|
353
354
|
div.appendChild(h2);
|
|
354
355
|
return () => {
|
|
355
|
-
const h2 =
|
|
356
|
+
const h2 = doc.getElementById(accessibleHeadingId);
|
|
356
357
|
if (!h2)
|
|
357
358
|
return;
|
|
358
359
|
div.parentElement?.removeChild(div);
|
|
@@ -442,7 +443,8 @@ export function getCalendarElementProps({ fullCalendarLabel, id, isInvalid, disa
|
|
|
442
443
|
};
|
|
443
444
|
}
|
|
444
445
|
export function pickerOpenFocus(e) {
|
|
445
|
-
const
|
|
446
|
+
const doc = getDocument(e.target);
|
|
447
|
+
const nodeToFocus = doc.querySelector("[data-bits-day][data-focused]");
|
|
446
448
|
if (nodeToFocus) {
|
|
447
449
|
e.preventDefault();
|
|
448
450
|
nodeToFocus?.focus();
|
|
@@ -61,6 +61,12 @@ export declare function isAcceptableSegmentKey(key: string): boolean;
|
|
|
61
61
|
* @param fieldNode - The id of the date field associated with the segment
|
|
62
62
|
*/
|
|
63
63
|
export declare function isFirstSegment(id: string, fieldNode: HTMLElement | null): boolean;
|
|
64
|
+
type SetDescriptionProps = {
|
|
65
|
+
id: string;
|
|
66
|
+
formatter: Formatter;
|
|
67
|
+
value: DateValue;
|
|
68
|
+
doc: Document;
|
|
69
|
+
};
|
|
64
70
|
/**
|
|
65
71
|
* Creates or updates a description element for a date field
|
|
66
72
|
* which enables screen readers to read the date field's value.
|
|
@@ -69,11 +75,12 @@ export declare function isFirstSegment(id: string, fieldNode: HTMLElement | null
|
|
|
69
75
|
* so it can be associated via `aria-describedby` and read by
|
|
70
76
|
* screen readers as the user interacts with the date field.
|
|
71
77
|
*/
|
|
72
|
-
export declare function setDescription(
|
|
78
|
+
export declare function setDescription(props: SetDescriptionProps): void;
|
|
73
79
|
/**
|
|
74
80
|
* Removes the description element for the date field with
|
|
75
81
|
* the provided ID. This function should be called when the
|
|
76
82
|
* date field is unmounted.
|
|
77
83
|
*/
|
|
78
|
-
export declare function removeDescriptionElement(id: string): void;
|
|
84
|
+
export declare function removeDescriptionElement(id: string, doc: Document): void;
|
|
85
|
+
export declare function getDefaultHourCycle(locale: string): 12 | 24;
|
|
79
86
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { styleToString } from "svelte-toolbelt";
|
|
2
2
|
import { getPlaceholder } from "../placeholders.js";
|
|
3
3
|
import { hasTime, isZonedDateTime } from "../utils.js";
|
|
4
|
-
import { ALL_SEGMENT_PARTS, DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS,
|
|
4
|
+
import { ALL_SEGMENT_PARTS, DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, EDITABLE_TIME_SEGMENT_PARTS, } from "./parts.js";
|
|
5
5
|
import { getSegments } from "./segments.js";
|
|
6
6
|
import { isBrowser, isNull, isNumberString } from "../../is.js";
|
|
7
7
|
import { useId } from "../../use-id.js";
|
|
@@ -289,7 +289,7 @@ export function isDateAndTimeSegmentObj(obj) {
|
|
|
289
289
|
return false;
|
|
290
290
|
}
|
|
291
291
|
return Object.entries(obj).every(([key, value]) => {
|
|
292
|
-
const validKey =
|
|
292
|
+
const validKey = EDITABLE_TIME_SEGMENT_PARTS.includes(key) ||
|
|
293
293
|
DATE_SEGMENT_PARTS.includes(key);
|
|
294
294
|
const validValue = key === "dayPeriod"
|
|
295
295
|
? value === "AM" || value === "PM" || value === null
|
|
@@ -345,19 +345,20 @@ export function isFirstSegment(id, fieldNode) {
|
|
|
345
345
|
* so it can be associated via `aria-describedby` and read by
|
|
346
346
|
* screen readers as the user interacts with the date field.
|
|
347
347
|
*/
|
|
348
|
-
export function setDescription(
|
|
348
|
+
export function setDescription(props) {
|
|
349
|
+
const { id, formatter, value, doc } = props;
|
|
349
350
|
if (!isBrowser)
|
|
350
351
|
return;
|
|
351
352
|
const valueString = formatter.selectedDate(value);
|
|
352
|
-
const el =
|
|
353
|
+
const el = doc.getElementById(id);
|
|
353
354
|
if (!el) {
|
|
354
|
-
const div =
|
|
355
|
+
const div = doc.createElement("div");
|
|
355
356
|
div.style.cssText = styleToString({
|
|
356
357
|
display: "none",
|
|
357
358
|
});
|
|
358
359
|
div.id = id;
|
|
359
360
|
div.innerText = `Selected Date: ${valueString}`;
|
|
360
|
-
|
|
361
|
+
doc.body.appendChild(div);
|
|
361
362
|
}
|
|
362
363
|
else {
|
|
363
364
|
el.innerText = `Selected Date: ${valueString}`;
|
|
@@ -368,11 +369,17 @@ export function setDescription(id, formatter, value) {
|
|
|
368
369
|
* the provided ID. This function should be called when the
|
|
369
370
|
* date field is unmounted.
|
|
370
371
|
*/
|
|
371
|
-
export function removeDescriptionElement(id) {
|
|
372
|
+
export function removeDescriptionElement(id, doc) {
|
|
372
373
|
if (!isBrowser)
|
|
373
374
|
return;
|
|
374
|
-
const el =
|
|
375
|
+
const el = doc.getElementById(id);
|
|
375
376
|
if (!el)
|
|
376
377
|
return;
|
|
377
|
-
|
|
378
|
+
doc.body.removeChild(el);
|
|
379
|
+
}
|
|
380
|
+
export function getDefaultHourCycle(locale) {
|
|
381
|
+
const formatter = new Intl.DateTimeFormat(locale, { hour: "numeric" });
|
|
382
|
+
const parts = formatter.formatToParts(new Date("2023-01-01T13:00:00"));
|
|
383
|
+
const hourPart = parts.find((part) => part.type === "hour");
|
|
384
|
+
return hourPart?.value === "1" ? 12 : 24;
|
|
378
385
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export declare const DATE_SEGMENT_PARTS: readonly ["day", "month", "year"];
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const EDITABLE_TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod"];
|
|
3
3
|
export declare const NON_EDITABLE_SEGMENT_PARTS: readonly ["literal", "timeZoneName"];
|
|
4
4
|
export declare const EDITABLE_SEGMENT_PARTS: readonly ["day", "month", "year", "hour", "minute", "second", "dayPeriod"];
|
|
5
5
|
export declare const ALL_SEGMENT_PARTS: readonly ["day", "month", "year", "hour", "minute", "second", "dayPeriod", "literal", "timeZoneName"];
|
|
6
|
+
export declare const ALL_TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod", "literal", "timeZoneName"];
|
|
6
7
|
export declare const ALL_EXCEPT_LITERAL_PARTS: ("day" | "month" | "year" | "hour" | "minute" | "second" | "dayPeriod" | "timeZoneName")[];
|
|
8
|
+
export declare const ALL_TIME_EXCEPT_LITERAL_PARTS: ("hour" | "minute" | "second" | "dayPeriod" | "timeZoneName")[];
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
export const DATE_SEGMENT_PARTS = ["day", "month", "year"];
|
|
2
|
-
export const
|
|
2
|
+
export const EDITABLE_TIME_SEGMENT_PARTS = ["hour", "minute", "second", "dayPeriod"];
|
|
3
3
|
export const NON_EDITABLE_SEGMENT_PARTS = ["literal", "timeZoneName"];
|
|
4
|
-
export const EDITABLE_SEGMENT_PARTS = [
|
|
4
|
+
export const EDITABLE_SEGMENT_PARTS = [
|
|
5
|
+
...DATE_SEGMENT_PARTS,
|
|
6
|
+
...EDITABLE_TIME_SEGMENT_PARTS,
|
|
7
|
+
];
|
|
5
8
|
export const ALL_SEGMENT_PARTS = [
|
|
6
9
|
...EDITABLE_SEGMENT_PARTS,
|
|
7
10
|
...NON_EDITABLE_SEGMENT_PARTS,
|
|
8
11
|
];
|
|
12
|
+
export const ALL_TIME_SEGMENT_PARTS = [
|
|
13
|
+
...EDITABLE_TIME_SEGMENT_PARTS,
|
|
14
|
+
...NON_EDITABLE_SEGMENT_PARTS,
|
|
15
|
+
];
|
|
9
16
|
export const ALL_EXCEPT_LITERAL_PARTS = ALL_SEGMENT_PARTS.filter((part) => part !== "literal");
|
|
17
|
+
export const ALL_TIME_EXCEPT_LITERAL_PARTS = ALL_TIME_SEGMENT_PARTS.filter((part) => part !== "literal");
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* @param fieldNode - The ID of the field we're navigating within
|
|
6
6
|
*/
|
|
7
7
|
export declare function handleSegmentNavigation(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
|
|
8
|
+
export declare function handleTimeSegmentNavigation(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
|
|
8
9
|
/**
|
|
9
10
|
* Retrieves the next segment in the list of segments relative to the provided node.
|
|
10
11
|
*
|
|
@@ -29,11 +30,17 @@ export declare function getPrevNextSegments(startingNode: HTMLElement, fieldNode
|
|
|
29
30
|
next: HTMLElement | null | undefined;
|
|
30
31
|
prev: HTMLElement | null | undefined;
|
|
31
32
|
};
|
|
33
|
+
export declare function getPrevNextTimeSegments(startingNode: HTMLElement, fieldNode: HTMLElement | null): {
|
|
34
|
+
next: HTMLElement | null | undefined;
|
|
35
|
+
prev: HTMLElement | null | undefined;
|
|
36
|
+
};
|
|
32
37
|
/**
|
|
33
38
|
* Shifts the focus to the next segment in the list of segments
|
|
34
39
|
* within the field identified by the provided ID.
|
|
35
40
|
*/
|
|
36
41
|
export declare function moveToNextSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
|
|
42
|
+
export declare function moveToNextTimeSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
|
|
43
|
+
export declare function moveToPrevTimeSegment(e: KeyboardEvent, fieldNode: HTMLElement | null): void;
|
|
37
44
|
/**
|
|
38
45
|
* Shifts the focus to the previous segment in the list of segments
|
|
39
46
|
* within the field identified by the provided ID. If this is the first
|
|
@@ -45,6 +52,8 @@ export declare function isSegmentNavigationKey(key: string): boolean;
|
|
|
45
52
|
* Retrieves all the interactive segments within the field identified by the provided ID.
|
|
46
53
|
*/
|
|
47
54
|
export declare function getSegments(fieldNode: HTMLElement | null): HTMLElement[];
|
|
55
|
+
export declare function getTimeSegments(fieldNode: HTMLElement | null): HTMLElement[];
|
|
56
|
+
export declare function getFirstTimeSegment(fieldNode: HTMLElement | null): HTMLElement | undefined;
|
|
48
57
|
/**
|
|
49
58
|
* Get the first interactive segment within the field identified by the provided ID.
|
|
50
59
|
*/
|