bits-ui 1.7.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bits/accordion/accordion.svelte.d.ts +56 -53
- package/dist/bits/accordion/accordion.svelte.js +78 -89
- package/dist/bits/accordion/components/accordion-content.svelte +5 -3
- package/dist/bits/accordion/components/accordion-header.svelte +4 -2
- package/dist/bits/accordion/components/accordion-item.svelte +6 -3
- package/dist/bits/accordion/components/accordion-trigger.svelte +4 -2
- package/dist/bits/accordion/components/accordion.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +4 -2
- package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +8 -3
- package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +2 -2
- package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +4 -2
- package/dist/bits/avatar/avatar.svelte.js +4 -4
- package/dist/bits/avatar/components/avatar-fallback.svelte +4 -2
- package/dist/bits/avatar/components/avatar-image.svelte +4 -2
- package/dist/bits/avatar/components/avatar.svelte +4 -2
- package/dist/bits/button/components/button.svelte +1 -1
- package/dist/bits/calendar/calendar.svelte.d.ts +1 -9
- package/dist/bits/calendar/calendar.svelte.js +47 -38
- package/dist/bits/calendar/components/calendar-cell.svelte +4 -2
- package/dist/bits/calendar/components/calendar-day.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-body.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-head.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid-row.svelte +4 -2
- package/dist/bits/calendar/components/calendar-grid.svelte +4 -2
- package/dist/bits/calendar/components/calendar-head-cell.svelte +4 -2
- package/dist/bits/calendar/components/calendar-header.svelte +4 -2
- package/dist/bits/calendar/components/calendar-heading.svelte +4 -2
- package/dist/bits/calendar/components/calendar-next-button.svelte +4 -2
- package/dist/bits/calendar/components/calendar-prev-button.svelte +4 -2
- package/dist/bits/checkbox/checkbox.svelte.js +4 -14
- package/dist/bits/checkbox/components/checkbox-group-label.svelte +4 -2
- package/dist/bits/checkbox/components/checkbox-group.svelte +4 -2
- package/dist/bits/checkbox/components/checkbox.svelte +4 -2
- package/dist/bits/collapsible/collapsible.svelte.js +4 -10
- package/dist/bits/collapsible/components/collapsible-content.svelte +5 -3
- package/dist/bits/collapsible/components/collapsible-trigger.svelte +4 -2
- package/dist/bits/collapsible/components/collapsible.svelte +4 -2
- package/dist/bits/combobox/components/combobox-input.svelte +1 -1
- package/dist/bits/combobox/components/combobox.svelte +1 -1
- package/dist/bits/command/command.svelte.js +13 -45
- package/dist/bits/command/components/_command-label.svelte +6 -7
- package/dist/bits/command/components/_command-label.svelte.d.ts +1 -1
- package/dist/bits/command/components/command-empty.svelte +4 -2
- package/dist/bits/command/components/command-group-heading.svelte +4 -2
- package/dist/bits/command/components/command-group-items.svelte +4 -2
- package/dist/bits/command/components/command-group.svelte +4 -2
- package/dist/bits/command/components/command-input.svelte +4 -2
- package/dist/bits/command/components/command-item.svelte +4 -2
- package/dist/bits/command/components/command-link-item.svelte +4 -2
- package/dist/bits/command/components/command-list.svelte +4 -2
- package/dist/bits/command/components/command-loading.svelte +4 -2
- package/dist/bits/command/components/command-separator.svelte +4 -2
- package/dist/bits/command/components/command-viewport.svelte +4 -2
- package/dist/bits/command/components/command.svelte +4 -2
- package/dist/bits/context-menu/components/context-menu-content-static.svelte +2 -3
- package/dist/bits/context-menu/components/context-menu-content.svelte +2 -3
- package/dist/bits/context-menu/components/context-menu-trigger.svelte +1 -1
- package/dist/bits/date-field/components/date-field-input.svelte +4 -2
- package/dist/bits/date-field/components/date-field-label.svelte +4 -2
- package/dist/bits/date-field/components/date-field-segment.svelte +4 -2
- package/dist/bits/date-field/date-field.svelte.d.ts +4 -4
- package/dist/bits/date-field/date-field.svelte.js +15 -33
- package/dist/bits/date-picker/components/date-picker-calendar.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field-input.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field-label.svelte +4 -2
- package/dist/bits/date-range-field/components/date-range-field.svelte +4 -2
- package/dist/bits/date-range-field/date-range-field.svelte.js +3 -13
- package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +4 -2
- package/dist/bits/dialog/components/dialog-close.svelte +4 -2
- package/dist/bits/dialog/components/dialog-content.svelte +8 -2
- package/dist/bits/dialog/components/dialog-description.svelte +4 -2
- package/dist/bits/dialog/components/dialog-overlay.svelte +8 -3
- package/dist/bits/dialog/components/dialog-title.svelte +4 -2
- package/dist/bits/dialog/components/dialog-trigger.svelte +4 -2
- package/dist/bits/dialog/dialog.svelte.d.ts +1 -1
- package/dist/bits/dialog/dialog.svelte.js +19 -47
- package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +6 -5
- package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +6 -5
- package/dist/bits/index.d.ts +2 -0
- package/dist/bits/index.js +2 -0
- package/dist/bits/label/components/label.svelte +4 -2
- package/dist/bits/label/label.svelte.js +2 -2
- package/dist/bits/link-preview/components/link-preview-content-static.svelte +6 -2
- package/dist/bits/link-preview/components/link-preview-content.svelte +6 -2
- package/dist/bits/link-preview/components/link-preview-trigger.svelte +5 -3
- package/dist/bits/link-preview/link-preview.svelte.js +3 -14
- package/dist/bits/menu/components/menu-checkbox-group.svelte +4 -2
- package/dist/bits/menu/components/menu-checkbox-item.svelte +6 -4
- package/dist/bits/menu/components/menu-content-static.svelte +6 -5
- package/dist/bits/menu/components/menu-content.svelte +6 -5
- package/dist/bits/menu/components/menu-group-heading.svelte +4 -2
- package/dist/bits/menu/components/menu-group.svelte +4 -2
- package/dist/bits/menu/components/menu-item.svelte +4 -2
- package/dist/bits/menu/components/menu-radio-group.svelte +4 -2
- package/dist/bits/menu/components/menu-radio-item.svelte +4 -2
- package/dist/bits/menu/components/menu-separator.svelte +4 -2
- package/dist/bits/menu/components/menu-sub-content-static.svelte +6 -5
- package/dist/bits/menu/components/menu-sub-content.svelte +6 -5
- package/dist/bits/menu/components/menu-sub-trigger.svelte +6 -3
- package/dist/bits/menu/components/menu-trigger.svelte +5 -3
- package/dist/bits/menu/menu.svelte.d.ts +7 -20
- package/dist/bits/menu/menu.svelte.js +26 -54
- package/dist/bits/menubar/components/menubar-content-static.svelte +4 -2
- package/dist/bits/menubar/components/menubar-content.svelte +4 -2
- package/dist/bits/menubar/components/menubar-menu.svelte +4 -2
- package/dist/bits/menubar/components/menubar-trigger.svelte +14 -6
- package/dist/bits/menubar/components/menubar.svelte +4 -2
- package/dist/bits/menubar/menubar.svelte.d.ts +24 -20
- package/dist/bits/menubar/menubar.svelte.js +40 -56
- package/dist/bits/meter/components/meter.svelte +4 -2
- package/dist/bits/meter/meter.svelte.js +2 -2
- package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +5 -2
- package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +8 -3
- package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +6 -4
- package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +8 -3
- package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +4 -2
- package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +7 -3
- package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
- package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +29 -17
- package/dist/bits/navigation-menu/navigation-menu.svelte.js +107 -74
- package/dist/bits/navigation-menu/types.d.ts +14 -7
- package/dist/bits/pagination/components/pagination-next-button.svelte +4 -2
- package/dist/bits/pagination/components/pagination-page.svelte +4 -2
- package/dist/bits/pagination/components/pagination-prev-button.svelte +4 -2
- package/dist/bits/pagination/components/pagination.svelte +4 -2
- package/dist/bits/pagination/pagination.svelte.js +4 -4
- package/dist/bits/pin-input/components/pin-input-cell.svelte +4 -2
- package/dist/bits/pin-input/components/pin-input.svelte +5 -3
- package/dist/bits/pin-input/pin-input.svelte.js +4 -10
- package/dist/bits/popover/components/popover-close.svelte +4 -2
- package/dist/bits/popover/components/popover-content-static.svelte +6 -2
- package/dist/bits/popover/components/popover-content.svelte +6 -2
- package/dist/bits/popover/components/popover-trigger.svelte +5 -3
- package/dist/bits/popover/popover.svelte.js +4 -18
- package/dist/bits/progress/components/progress.svelte +4 -2
- package/dist/bits/progress/progress.svelte.js +2 -2
- package/dist/bits/radio-group/components/radio-group-item.svelte +4 -2
- package/dist/bits/radio-group/components/radio-group.svelte +4 -2
- package/dist/bits/radio-group/radio-group.svelte.js +4 -7
- package/dist/bits/range-calendar/components/range-calendar-cell.svelte +4 -2
- package/dist/bits/range-calendar/components/range-calendar-day.svelte +4 -2
- package/dist/bits/range-calendar/components/range-calendar.svelte +4 -2
- package/dist/bits/range-calendar/range-calendar.svelte.js +4 -4
- package/dist/bits/scroll-area/components/scroll-area-corner.svelte +8 -2
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +4 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +1 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +5 -1
- package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +4 -2
- package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +8 -3
- package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +4 -2
- package/dist/bits/scroll-area/components/scroll-area.svelte +4 -2
- package/dist/bits/scroll-area/scroll-area.svelte.js +13 -47
- package/dist/bits/select/components/select-content-static.svelte +6 -2
- package/dist/bits/select/components/select-content.svelte +6 -2
- package/dist/bits/select/components/select-group-heading.svelte +3 -2
- package/dist/bits/select/components/select-group.svelte +4 -2
- package/dist/bits/select/components/select-item.svelte +4 -2
- package/dist/bits/select/components/select-scroll-down-button.svelte +4 -2
- package/dist/bits/select/components/select-scroll-up-button.svelte +4 -2
- package/dist/bits/select/components/select-trigger.svelte +5 -3
- package/dist/bits/select/components/select-viewport.svelte +4 -2
- package/dist/bits/select/components/select.svelte +1 -1
- package/dist/bits/select/select.svelte.d.ts +0 -18
- package/dist/bits/select/select.svelte.js +10 -43
- package/dist/bits/separator/components/separator.svelte +4 -2
- package/dist/bits/separator/separator.svelte.js +2 -2
- package/dist/bits/slider/components/slider-range.svelte +4 -2
- package/dist/bits/slider/components/slider-thumb-label.svelte +50 -0
- package/dist/bits/slider/components/slider-thumb-label.svelte.d.ts +4 -0
- package/dist/bits/slider/components/slider-thumb.svelte +4 -2
- package/dist/bits/slider/components/slider-tick-label.svelte +50 -0
- package/dist/bits/slider/components/slider-tick-label.svelte.d.ts +4 -0
- package/dist/bits/slider/components/slider-tick.svelte +4 -2
- package/dist/bits/slider/components/slider.svelte +26 -5
- package/dist/bits/slider/exports.d.ts +3 -1
- package/dist/bits/slider/exports.js +2 -0
- package/dist/bits/slider/helpers.d.ts +14 -0
- package/dist/bits/slider/helpers.js +122 -0
- package/dist/bits/slider/slider.svelte.d.ts +93 -6
- package/dist/bits/slider/slider.svelte.js +198 -101
- package/dist/bits/slider/types.d.ts +111 -11
- package/dist/bits/switch/components/switch-thumb.svelte +4 -2
- package/dist/bits/switch/components/switch.svelte +4 -2
- package/dist/bits/switch/switch.svelte.js +3 -3
- package/dist/bits/tabs/components/tabs-content.svelte +4 -2
- package/dist/bits/tabs/components/tabs-list.svelte +4 -2
- package/dist/bits/tabs/components/tabs-trigger.svelte +4 -2
- package/dist/bits/tabs/components/tabs.svelte +4 -2
- package/dist/bits/tabs/tabs.svelte.js +6 -6
- package/dist/bits/time-field/components/time-field-hidden-input.svelte +10 -0
- package/dist/bits/{date-field/components/date-field-error.svelte.d.ts → time-field/components/time-field-hidden-input.svelte.d.ts} +6 -14
- package/dist/bits/time-field/components/time-field-input.svelte +39 -0
- package/dist/bits/time-field/components/time-field-input.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field-label.svelte +34 -0
- package/dist/bits/time-field/components/time-field-label.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field-segment.svelte +37 -0
- package/dist/bits/time-field/components/time-field-segment.svelte.d.ts +4 -0
- package/dist/bits/time-field/components/time-field.svelte +94 -0
- package/dist/bits/time-field/components/time-field.svelte.d.ts +20 -0
- package/dist/bits/time-field/exports.d.ts +5 -0
- package/dist/bits/time-field/exports.js +4 -0
- package/dist/bits/time-field/index.d.ts +1 -0
- package/dist/bits/time-field/index.js +1 -0
- package/dist/bits/time-field/time-field.svelte.d.ts +415 -0
- package/dist/bits/time-field/time-field.svelte.js +971 -0
- package/dist/bits/time-field/types.d.ts +137 -0
- package/dist/bits/time-field/types.js +1 -0
- package/dist/bits/time-range-field/components/time-range-field-input.svelte +43 -0
- package/dist/bits/time-range-field/components/time-range-field-input.svelte.d.ts +4 -0
- package/dist/bits/time-range-field/components/time-range-field-label.svelte +34 -0
- package/dist/bits/time-range-field/components/time-range-field-label.svelte.d.ts +4 -0
- package/dist/bits/time-range-field/components/time-range-field.svelte +144 -0
- package/dist/bits/time-range-field/components/time-range-field.svelte.d.ts +20 -0
- package/dist/bits/time-range-field/exports.d.ts +5 -0
- package/dist/bits/time-range-field/exports.js +4 -0
- package/dist/bits/time-range-field/index.d.ts +1 -0
- package/dist/bits/time-range-field/index.js +1 -0
- package/dist/bits/time-range-field/time-range-field.svelte.d.ts +90 -0
- package/dist/bits/time-range-field/time-range-field.svelte.js +210 -0
- package/dist/bits/time-range-field/types.d.ts +150 -0
- package/dist/bits/time-range-field/types.js +1 -0
- package/dist/bits/toggle/components/toggle.svelte +4 -2
- package/dist/bits/toggle/toggle.svelte.js +2 -2
- package/dist/bits/toggle-group/components/toggle-group-item.svelte +4 -2
- package/dist/bits/toggle-group/components/toggle-group.svelte +4 -2
- package/dist/bits/toggle-group/toggle-group.svelte.js +4 -4
- package/dist/bits/toolbar/components/toolbar-button.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-group-item.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-group.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar-link.svelte +4 -2
- package/dist/bits/toolbar/components/toolbar.svelte +4 -2
- package/dist/bits/toolbar/toolbar.svelte.js +7 -7
- package/dist/bits/tooltip/components/tooltip-content-static.svelte +6 -2
- package/dist/bits/tooltip/components/tooltip-content.svelte +6 -2
- package/dist/bits/tooltip/components/tooltip-trigger.svelte +5 -3
- package/dist/bits/tooltip/tooltip.svelte.js +3 -14
- package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -0
- package/dist/bits/utilities/dismissible-layer/types.d.ts +2 -0
- package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +3 -3
- package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +16 -25
- package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -1
- package/dist/bits/utilities/floating-layer/types.d.ts +1 -0
- package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +3 -2
- package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +5 -26
- package/dist/bits/utilities/focus-scope/focus-scope.svelte +2 -0
- package/dist/bits/utilities/focus-scope/types.d.ts +2 -0
- package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +2 -1
- package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +2 -8
- package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +4 -0
- package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -1
- package/dist/bits/utilities/presence-layer/presence-layer.svelte +2 -2
- package/dist/bits/utilities/presence-layer/types.d.ts +2 -1
- package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +1 -1
- package/dist/bits/utilities/presence-layer/use-presence.svelte.js +19 -36
- package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -0
- package/dist/bits/utilities/text-selection-layer/types.d.ts +2 -0
- package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +3 -1
- package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +2 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/create-id.d.ts +8 -0
- package/dist/internal/create-id.js +5 -0
- package/dist/internal/date-time/field/helpers.d.ts +1 -0
- package/dist/internal/date-time/field/helpers.js +8 -2
- package/dist/internal/date-time/field/parts.d.ts +3 -1
- package/dist/internal/date-time/field/parts.js +10 -2
- package/dist/internal/date-time/field/segments.d.ts +9 -0
- package/dist/internal/date-time/field/segments.js +65 -0
- package/dist/internal/date-time/field/time-helpers.d.ts +77 -0
- package/dist/internal/date-time/field/time-helpers.js +301 -0
- package/dist/internal/date-time/field/types.d.ts +2 -2
- package/dist/internal/date-time/formatter.d.ts +11 -1
- package/dist/internal/date-time/formatter.js +56 -0
- package/dist/internal/date-time/utils.d.ts +7 -2
- package/dist/internal/date-time/utils.js +15 -1
- package/dist/internal/dom-context.svelte.d.ts +9 -0
- package/dist/internal/dom-context.svelte.js +26 -0
- package/dist/internal/use-roving-focus.svelte.d.ts +3 -3
- package/dist/internal/use-roving-focus.svelte.js +10 -11
- package/dist/shared/date/types.d.ts +27 -4
- package/dist/shared/index.d.ts +9 -2
- package/dist/types.d.ts +2 -0
- package/package.json +18 -16
- package/dist/bits/date-field/components/date-field-error.svelte +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Time } from "@internationalized/date";
|
|
2
|
+
import type { EditableSegmentPart, WithChildren } from "../../shared/index.js";
|
|
3
|
+
import type { OnChangeFn, WithChild, Without } from "../../internal/types.js";
|
|
4
|
+
import type { BitsPrimitiveDivAttributes, BitsPrimitiveSpanAttributes } from "../../shared/attributes.js";
|
|
5
|
+
import type { TimeGranularity, TimeOnInvalid, TimeSegmentPart, TimeValidator, TimeValue } from "../../shared/date/types.js";
|
|
6
|
+
export type TimeFieldRootPropsWithoutHTML<T extends TimeValue = Time> = WithChildren<{
|
|
7
|
+
/**
|
|
8
|
+
* The value of the time field.
|
|
9
|
+
*
|
|
10
|
+
* @bindable
|
|
11
|
+
*/
|
|
12
|
+
value?: T;
|
|
13
|
+
/**
|
|
14
|
+
* A callback that is called when the time field value changes.
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
onValueChange?: OnChangeFn<T | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* The placeholder value of the time field. This determines the format
|
|
20
|
+
* and what time the field starts at when it is empty.
|
|
21
|
+
*
|
|
22
|
+
* @bindable
|
|
23
|
+
*/
|
|
24
|
+
placeholder?: TimeValue;
|
|
25
|
+
/**
|
|
26
|
+
* A callback that is called when the time field's placeholder value changes.
|
|
27
|
+
*/
|
|
28
|
+
onPlaceholderChange?: OnChangeFn<TimeValue | undefined>;
|
|
29
|
+
/**
|
|
30
|
+
* A function that returns a string or array of strings as validation errors if the time is
|
|
31
|
+
* invalid, or nothing if the time is valid
|
|
32
|
+
*/
|
|
33
|
+
validate?: TimeValidator<T>;
|
|
34
|
+
/**
|
|
35
|
+
* A callback fired when the time field's value is invalid. Use this to display an error
|
|
36
|
+
* message to the user.
|
|
37
|
+
*/
|
|
38
|
+
onInvalid?: TimeOnInvalid;
|
|
39
|
+
/**
|
|
40
|
+
* The minimum acceptable time. When provided, the time field
|
|
41
|
+
* will be marked as invalid if the user enters a time before this time.
|
|
42
|
+
*/
|
|
43
|
+
minValue?: TimeValue;
|
|
44
|
+
/**
|
|
45
|
+
* The maximum acceptable time. When provided, the time field
|
|
46
|
+
* will be marked as invalid if the user enters a time after this time.
|
|
47
|
+
*/
|
|
48
|
+
maxValue?: TimeValue;
|
|
49
|
+
/**
|
|
50
|
+
* If true, the time field will be disabled and users will not be able
|
|
51
|
+
* to interact with it. This also disables the hidden input element if
|
|
52
|
+
* the time field is used in a form.
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue false
|
|
55
|
+
*/
|
|
56
|
+
disabled?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* If true, the time field will be readonly, and users will not be able to
|
|
59
|
+
* edit the values of any of the individual segments.
|
|
60
|
+
*
|
|
61
|
+
* @defaultValue false
|
|
62
|
+
*/
|
|
63
|
+
readonly?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* An array of segment names that should be readonly. If provided, only the
|
|
66
|
+
* segments not in this array will be editable.
|
|
67
|
+
*/
|
|
68
|
+
readonlySegments?: EditableSegmentPart[];
|
|
69
|
+
/**
|
|
70
|
+
* The format to use for displaying the time in the input.
|
|
71
|
+
* If using a 12 hour clock, ensure you also include the `dayPeriod`
|
|
72
|
+
* segment in your input to ensure the user can select AM/PM.
|
|
73
|
+
*
|
|
74
|
+
* @defaultValue the locale's default time format
|
|
75
|
+
*/
|
|
76
|
+
hourCycle?: 12 | 24;
|
|
77
|
+
/**
|
|
78
|
+
* The locale to use for formatting the time field.
|
|
79
|
+
*
|
|
80
|
+
* @defaultValue 'en'
|
|
81
|
+
*/
|
|
82
|
+
locale?: string;
|
|
83
|
+
/**
|
|
84
|
+
* The granularity of the time field. This determines which
|
|
85
|
+
* segments will be includes in the segments array used to
|
|
86
|
+
* build the time field.
|
|
87
|
+
*
|
|
88
|
+
* Granularity is only used for visual purposes, and does not impact
|
|
89
|
+
* the value of the time field. You can have the same value synced
|
|
90
|
+
* between multiple time fields with different granularities and they
|
|
91
|
+
* will all contain the same value.
|
|
92
|
+
*
|
|
93
|
+
* @default 'minute'
|
|
94
|
+
*/
|
|
95
|
+
granularity?: TimeGranularity;
|
|
96
|
+
/**
|
|
97
|
+
* Whether or not to hide the timeZoneName segment from the time field.
|
|
98
|
+
*
|
|
99
|
+
* @default false;
|
|
100
|
+
*/
|
|
101
|
+
hideTimeZone?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Whether or not the hidden input of the time field requires a value
|
|
104
|
+
* to be submitted.
|
|
105
|
+
*
|
|
106
|
+
* @defaultValue false
|
|
107
|
+
*/
|
|
108
|
+
required?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* The `id` of the element which contains the error messages for the time field when the
|
|
111
|
+
* time is invalid.
|
|
112
|
+
*/
|
|
113
|
+
errorMessageId?: string;
|
|
114
|
+
}>;
|
|
115
|
+
export type TimeFieldRootProps<T extends TimeValue = Time> = TimeFieldRootPropsWithoutHTML<T>;
|
|
116
|
+
export type TimeFieldInputSnippetProps = {
|
|
117
|
+
segments: Array<{
|
|
118
|
+
part: TimeSegmentPart;
|
|
119
|
+
value: string;
|
|
120
|
+
}>;
|
|
121
|
+
};
|
|
122
|
+
export type TimeFieldInputPropsWithoutHTML = WithChild<{
|
|
123
|
+
/**
|
|
124
|
+
* The name to use for the hidden input element of the time field,
|
|
125
|
+
* which is used to submit the ISO string value of the time field
|
|
126
|
+
* to a server. If not provided, the hidden input element will not
|
|
127
|
+
* be rendered.
|
|
128
|
+
*/
|
|
129
|
+
name?: string;
|
|
130
|
+
}, TimeFieldInputSnippetProps>;
|
|
131
|
+
export type TimeFieldInputProps = TimeFieldInputPropsWithoutHTML & Without<BitsPrimitiveDivAttributes, TimeFieldInputPropsWithoutHTML>;
|
|
132
|
+
export type TimeFieldSegmentPropsWithoutHTML = WithChild<{
|
|
133
|
+
part: TimeSegmentPart;
|
|
134
|
+
}>;
|
|
135
|
+
export type TimeFieldSegmentProps = TimeFieldSegmentPropsWithoutHTML & Without<BitsPrimitiveSpanAttributes, TimeFieldSegmentPropsWithoutHTML>;
|
|
136
|
+
export type TimeFieldLabelPropsWithoutHTML = WithChild;
|
|
137
|
+
export type TimeFieldLabelProps = TimeFieldLabelPropsWithoutHTML & Without<BitsPrimitiveDivAttributes, TimeFieldLabelPropsWithoutHTML>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
|
+
import type { TimeRangeFieldInputProps } from "../types.js";
|
|
4
|
+
import { useTimeRangeFieldInput } from "../time-range-field.svelte.js";
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
import TimeFieldHiddenInput from "../../time-field/components/time-field-hidden-input.svelte";
|
|
7
|
+
|
|
8
|
+
const uid = $props.id();
|
|
9
|
+
|
|
10
|
+
let {
|
|
11
|
+
id = createId(uid),
|
|
12
|
+
ref = $bindable(null),
|
|
13
|
+
name = "",
|
|
14
|
+
child,
|
|
15
|
+
children,
|
|
16
|
+
type,
|
|
17
|
+
...restProps
|
|
18
|
+
}: TimeRangeFieldInputProps = $props();
|
|
19
|
+
|
|
20
|
+
const inputState = useTimeRangeFieldInput(
|
|
21
|
+
{
|
|
22
|
+
id: box.with(() => id),
|
|
23
|
+
ref: box.with(
|
|
24
|
+
() => ref,
|
|
25
|
+
(v) => (ref = v)
|
|
26
|
+
),
|
|
27
|
+
name: box.with(() => name),
|
|
28
|
+
},
|
|
29
|
+
type
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const mergedProps = $derived(mergeProps(restProps, inputState.props, { role: "presentation" }));
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
{#if child}
|
|
36
|
+
{@render child({ props: mergedProps, segments: inputState.root.segmentContents })}
|
|
37
|
+
{:else}
|
|
38
|
+
<div {...mergedProps}>
|
|
39
|
+
{@render children?.({ segments: inputState.root.segmentContents })}
|
|
40
|
+
</div>
|
|
41
|
+
{/if}
|
|
42
|
+
|
|
43
|
+
<TimeFieldHiddenInput />
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { box, mergeProps } from "svelte-toolbelt";
|
|
3
|
+
import { useTimeRangeFieldLabel } from "../time-range-field.svelte.js";
|
|
4
|
+
import type { TimeRangeFieldLabelProps } from "../types.js";
|
|
5
|
+
import { createId } from "../../../internal/create-id.js";
|
|
6
|
+
|
|
7
|
+
const uid = $props.id();
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
id = createId(uid),
|
|
11
|
+
ref = $bindable(null),
|
|
12
|
+
children,
|
|
13
|
+
child,
|
|
14
|
+
...restProps
|
|
15
|
+
}: TimeRangeFieldLabelProps = $props();
|
|
16
|
+
|
|
17
|
+
const labelState = useTimeRangeFieldLabel({
|
|
18
|
+
id: box.with(() => id),
|
|
19
|
+
ref: box.with(
|
|
20
|
+
() => ref,
|
|
21
|
+
(v) => (ref = v)
|
|
22
|
+
),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const mergedProps = $derived(mergeProps(restProps, labelState.props));
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
{#if child}
|
|
29
|
+
{@render child({ props: mergedProps })}
|
|
30
|
+
{:else}
|
|
31
|
+
<span {...mergedProps}>
|
|
32
|
+
{@render children?.()}
|
|
33
|
+
</span>
|
|
34
|
+
{/if}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { TimeRange, TimeValue } from "../../../shared/date/types.js";
|
|
3
|
+
import type { Time } from "@internationalized/date";
|
|
4
|
+
|
|
5
|
+
type T = unknown;
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<script lang="ts" generics="T extends TimeValue = Time">
|
|
9
|
+
import { box, mergeProps } from "svelte-toolbelt";
|
|
10
|
+
import { useTimeRangeFieldRoot } from "../time-range-field.svelte.js";
|
|
11
|
+
import type { TimeRangeFieldRootProps } from "../types.js";
|
|
12
|
+
import { createId } from "../../../internal/create-id.js";
|
|
13
|
+
import { noop } from "../../../internal/noop.js";
|
|
14
|
+
import { getDefaultTime } from "../../../internal/date-time/utils.js";
|
|
15
|
+
import { watch } from "runed";
|
|
16
|
+
|
|
17
|
+
const uid = $props.id();
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
id = createId(uid),
|
|
21
|
+
ref = $bindable(null),
|
|
22
|
+
value = $bindable(),
|
|
23
|
+
onValueChange = noop,
|
|
24
|
+
placeholder = $bindable(),
|
|
25
|
+
onPlaceholderChange = noop,
|
|
26
|
+
disabled = false,
|
|
27
|
+
readonly = false,
|
|
28
|
+
required = false,
|
|
29
|
+
hourCycle,
|
|
30
|
+
granularity,
|
|
31
|
+
locale = "en-US",
|
|
32
|
+
hideTimeZone = false,
|
|
33
|
+
validate = noop,
|
|
34
|
+
onInvalid = noop,
|
|
35
|
+
maxValue,
|
|
36
|
+
minValue,
|
|
37
|
+
readonlySegments = [],
|
|
38
|
+
children,
|
|
39
|
+
child,
|
|
40
|
+
onStartValueChange = noop,
|
|
41
|
+
onEndValueChange = noop,
|
|
42
|
+
errorMessageId,
|
|
43
|
+
...restProps
|
|
44
|
+
}: TimeRangeFieldRootProps<T> = $props();
|
|
45
|
+
|
|
46
|
+
let startValue = $state<T | undefined>(value?.start);
|
|
47
|
+
let endValue = $state<T | undefined>(value?.end);
|
|
48
|
+
|
|
49
|
+
function handleDefaultPlaceholder() {
|
|
50
|
+
if (placeholder !== undefined) return;
|
|
51
|
+
const defaultPlaceholder = getDefaultTime({ granularity, defaultValue: value?.start });
|
|
52
|
+
placeholder = defaultPlaceholder;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// SSR
|
|
56
|
+
handleDefaultPlaceholder();
|
|
57
|
+
|
|
58
|
+
watch.pre(
|
|
59
|
+
() => placeholder,
|
|
60
|
+
() => {
|
|
61
|
+
handleDefaultPlaceholder();
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
function handleDefaultValue() {
|
|
66
|
+
if (value !== undefined) return;
|
|
67
|
+
const defaultValue = { start: undefined, end: undefined };
|
|
68
|
+
value = defaultValue;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// SSR
|
|
72
|
+
handleDefaultValue();
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Covers an edge case where when a spread props object is reassigned,
|
|
76
|
+
* the props are reset to their default values, which would make value
|
|
77
|
+
* undefined which causes errors to be thrown.
|
|
78
|
+
*/
|
|
79
|
+
watch.pre(
|
|
80
|
+
() => value,
|
|
81
|
+
() => {
|
|
82
|
+
handleDefaultValue();
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const rootState = useTimeRangeFieldRoot({
|
|
87
|
+
id: box.with(() => id),
|
|
88
|
+
ref: box.with(
|
|
89
|
+
() => ref,
|
|
90
|
+
(v) => (ref = v)
|
|
91
|
+
),
|
|
92
|
+
disabled: box.with(() => disabled),
|
|
93
|
+
readonly: box.with(() => readonly),
|
|
94
|
+
required: box.with(() => required),
|
|
95
|
+
hourCycle: box.with(() => hourCycle),
|
|
96
|
+
granularity: box.with(() => granularity),
|
|
97
|
+
locale: box.with(() => locale),
|
|
98
|
+
hideTimeZone: box.with(() => hideTimeZone),
|
|
99
|
+
validate: box.with(() => validate),
|
|
100
|
+
maxValue: box.with(() => maxValue),
|
|
101
|
+
minValue: box.with(() => minValue),
|
|
102
|
+
placeholder: box.with(
|
|
103
|
+
() => placeholder as TimeValue,
|
|
104
|
+
(v) => {
|
|
105
|
+
placeholder = v;
|
|
106
|
+
onPlaceholderChange(v);
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
readonlySegments: box.with(() => readonlySegments),
|
|
110
|
+
value: box.with(
|
|
111
|
+
() => value as TimeRange<T>,
|
|
112
|
+
(v) => {
|
|
113
|
+
value = v;
|
|
114
|
+
onValueChange(v);
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
startValue: box.with(
|
|
118
|
+
() => startValue,
|
|
119
|
+
(v) => {
|
|
120
|
+
startValue = v;
|
|
121
|
+
onStartValueChange(v);
|
|
122
|
+
}
|
|
123
|
+
),
|
|
124
|
+
endValue: box.with(
|
|
125
|
+
() => endValue,
|
|
126
|
+
(v) => {
|
|
127
|
+
endValue = v;
|
|
128
|
+
onEndValueChange(v);
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
onInvalid: box.with(() => onInvalid),
|
|
132
|
+
errorMessageId: box.with(() => errorMessageId),
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const mergedProps = $derived(mergeProps(restProps, rootState.props));
|
|
136
|
+
</script>
|
|
137
|
+
|
|
138
|
+
{#if child}
|
|
139
|
+
{@render child({ props: mergedProps })}
|
|
140
|
+
{:else}
|
|
141
|
+
<div {...mergedProps}>
|
|
142
|
+
{@render children?.()}
|
|
143
|
+
</div>
|
|
144
|
+
{/if}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TimeValue } from "../../../shared/date/types.js";
|
|
2
|
+
import type { Time } from "@internationalized/date";
|
|
3
|
+
import type { TimeRangeFieldRootProps } from "../types.js";
|
|
4
|
+
declare class __sveltets_Render<T extends TimeValue = Time> {
|
|
5
|
+
props(): TimeRangeFieldRootProps<T>;
|
|
6
|
+
events(): {};
|
|
7
|
+
slots(): {};
|
|
8
|
+
bindings(): "value" | "placeholder" | "ref";
|
|
9
|
+
exports(): {};
|
|
10
|
+
}
|
|
11
|
+
interface $$IsomorphicComponent {
|
|
12
|
+
new <T extends TimeValue = Time>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
13
|
+
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
14
|
+
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
15
|
+
<T extends TimeValue = Time>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
16
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
17
|
+
}
|
|
18
|
+
declare const TimeRangeField: $$IsomorphicComponent;
|
|
19
|
+
type TimeRangeField<T extends TimeValue = Time> = InstanceType<typeof TimeRangeField<T>>;
|
|
20
|
+
export default TimeRangeField;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as Root } from "./components/time-range-field.svelte";
|
|
2
|
+
export { default as Input } from "./components/time-range-field-input.svelte";
|
|
3
|
+
export { default as Label } from "./components/time-range-field-label.svelte";
|
|
4
|
+
export { default as Segment } from "../time-field/components/time-field-segment.svelte";
|
|
5
|
+
export type { TimeRangeFieldRootProps as RootProps, TimeRangeFieldLabelProps as LabelProps, TimeRangeFieldInputProps as InputProps, TimeRangeFieldSegmentProps as SegmentProps, } from "./types.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as Root } from "./components/time-range-field.svelte";
|
|
2
|
+
export { default as Input } from "./components/time-range-field-input.svelte";
|
|
3
|
+
export { default as Label } from "./components/time-range-field-label.svelte";
|
|
4
|
+
export { default as Segment } from "../time-field/components/time-field-segment.svelte";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as TimeRangeField from "./exports.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as TimeRangeField from "./exports.js";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { Time } from "@internationalized/date";
|
|
2
|
+
import { Context } from "runed";
|
|
3
|
+
import type { TimeFieldRootState } from "../time-field/time-field.svelte.js";
|
|
4
|
+
import { TimeFieldInputState } from "../time-field/time-field.svelte.js";
|
|
5
|
+
import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
|
|
6
|
+
import type { TimeSegmentPart } from "../../shared/index.js";
|
|
7
|
+
import type { WithRefProps } from "../../internal/types.js";
|
|
8
|
+
import type { TimeGranularity, TimeOnInvalid, TimeRange, TimeRangeValidator, TimeValue } from "../../shared/date/types.js";
|
|
9
|
+
import { type TimeFormatter } from "../../internal/date-time/formatter.js";
|
|
10
|
+
export declare const TIME_RANGE_FIELD_ROOT_ATTR = "data-time-range-field-root";
|
|
11
|
+
type TimeRangeFieldRootStateProps<T extends TimeValue = Time> = WithRefProps<WritableBoxedValues<{
|
|
12
|
+
value: TimeRange<T>;
|
|
13
|
+
placeholder: TimeValue;
|
|
14
|
+
startValue: T | undefined;
|
|
15
|
+
endValue: T | undefined;
|
|
16
|
+
}> & ReadableBoxedValues<{
|
|
17
|
+
readonlySegments: TimeSegmentPart[];
|
|
18
|
+
validate: TimeRangeValidator<T> | undefined;
|
|
19
|
+
onInvalid: TimeOnInvalid | undefined;
|
|
20
|
+
minValue: TimeValue | undefined;
|
|
21
|
+
maxValue: TimeValue | undefined;
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
readonly: boolean;
|
|
24
|
+
granularity: TimeGranularity | undefined;
|
|
25
|
+
hourCycle: 12 | 24 | undefined;
|
|
26
|
+
locale: string;
|
|
27
|
+
hideTimeZone: boolean;
|
|
28
|
+
required: boolean;
|
|
29
|
+
errorMessageId: string | undefined;
|
|
30
|
+
}>>;
|
|
31
|
+
export declare class TimeRangeFieldRootState<T extends TimeValue = Time> {
|
|
32
|
+
#private;
|
|
33
|
+
readonly opts: TimeRangeFieldRootStateProps<T>;
|
|
34
|
+
startFieldState: TimeFieldRootState | undefined;
|
|
35
|
+
endFieldState: TimeFieldRootState | undefined;
|
|
36
|
+
descriptionId: string;
|
|
37
|
+
formatter: TimeFormatter;
|
|
38
|
+
fieldNode: HTMLElement | null;
|
|
39
|
+
labelNode: HTMLElement | null;
|
|
40
|
+
descriptionNode: HTMLElement | null;
|
|
41
|
+
startValueComplete: boolean;
|
|
42
|
+
endValueComplete: boolean;
|
|
43
|
+
rangeComplete: boolean;
|
|
44
|
+
startValueTime: Time | undefined;
|
|
45
|
+
endValueTime: Time | undefined;
|
|
46
|
+
minValueTime: Time | undefined;
|
|
47
|
+
maxValueTime: Time | undefined;
|
|
48
|
+
constructor(opts: TimeRangeFieldRootStateProps<T>);
|
|
49
|
+
validationStatus: false | {
|
|
50
|
+
readonly reason: "custom";
|
|
51
|
+
readonly message: string | string[];
|
|
52
|
+
} | {
|
|
53
|
+
readonly reason: "min";
|
|
54
|
+
readonly message?: undefined;
|
|
55
|
+
} | {
|
|
56
|
+
readonly reason: "max";
|
|
57
|
+
readonly message?: undefined;
|
|
58
|
+
};
|
|
59
|
+
isInvalid: boolean;
|
|
60
|
+
props: {
|
|
61
|
+
readonly id: string;
|
|
62
|
+
readonly role: "group";
|
|
63
|
+
readonly "data-time-range-field-root": "";
|
|
64
|
+
readonly "data-invalid": "" | undefined;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
type TimeRangeFieldLabelStateProps = WithRefProps;
|
|
68
|
+
declare class TimeRangeFieldLabelState {
|
|
69
|
+
#private;
|
|
70
|
+
readonly opts: TimeRangeFieldLabelStateProps;
|
|
71
|
+
readonly root: TimeRangeFieldRootState;
|
|
72
|
+
constructor(opts: TimeRangeFieldLabelStateProps, root: TimeRangeFieldRootState);
|
|
73
|
+
props: {
|
|
74
|
+
readonly id: string;
|
|
75
|
+
readonly "data-invalid": "" | undefined;
|
|
76
|
+
readonly "data-disabled": "" | undefined;
|
|
77
|
+
readonly "data-time-range-field-label": "";
|
|
78
|
+
readonly onclick: () => void;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
type TimeRangeFieldInputStateProps<T extends TimeValue = Time> = WritableBoxedValues<{
|
|
82
|
+
value: T | undefined;
|
|
83
|
+
}> & ReadableBoxedValues<{
|
|
84
|
+
name: string;
|
|
85
|
+
}> & WithRefProps;
|
|
86
|
+
export declare const TimeRangeFieldRootContext: Context<TimeRangeFieldRootState<Time>>;
|
|
87
|
+
export declare function useTimeRangeFieldRoot<T extends TimeValue = Time>(props: TimeRangeFieldRootStateProps<T>): TimeRangeFieldRootState<Time>;
|
|
88
|
+
export declare function useTimeRangeFieldLabel(props: TimeRangeFieldLabelStateProps): TimeRangeFieldLabelState;
|
|
89
|
+
export declare function useTimeRangeFieldInput(props: Omit<TimeRangeFieldInputStateProps, "value">, type: "start" | "end"): TimeFieldInputState;
|
|
90
|
+
export {};
|