bits-ui 2.3.0 → 2.3.1
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 +0 -5
- package/dist/bits/accordion/accordion.svelte.js +11 -14
- package/dist/bits/aspect-ratio/aspect-ratio.svelte.d.ts +0 -1
- package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +6 -2
- package/dist/bits/avatar/avatar.svelte.d.ts +0 -3
- package/dist/bits/avatar/avatar.svelte.js +8 -6
- package/dist/bits/calendar/calendar.svelte.d.ts +2 -2
- package/dist/bits/calendar/calendar.svelte.js +4 -4
- package/dist/bits/checkbox/checkbox.svelte.d.ts +0 -3
- package/dist/bits/checkbox/checkbox.svelte.js +14 -14
- package/dist/bits/collapsible/collapsible.svelte.d.ts +0 -3
- package/dist/bits/collapsible/collapsible.svelte.js +8 -7
- package/dist/bits/command/command.svelte.d.ts +0 -12
- package/dist/bits/command/command.svelte.js +35 -31
- package/dist/bits/date-field/date-field.svelte.d.ts +2 -4
- package/dist/bits/date-field/date-field.svelte.js +8 -6
- package/dist/bits/date-picker/components/date-picker-trigger.svelte +2 -2
- package/dist/bits/date-range-field/date-range-field.svelte.d.ts +1 -3
- package/dist/bits/date-range-field/date-range-field.svelte.js +7 -5
- package/dist/bits/date-range-picker/components/date-range-picker-trigger.svelte +2 -2
- package/dist/bits/dialog/dialog.svelte.d.ts +2 -12
- package/dist/bits/dialog/dialog.svelte.js +16 -24
- package/dist/bits/label/label.svelte.d.ts +0 -1
- package/dist/bits/label/label.svelte.js +6 -2
- package/dist/bits/link-preview/link-preview.svelte.d.ts +0 -2
- package/dist/bits/link-preview/link-preview.svelte.js +7 -5
- package/dist/bits/menu/components/menu-sub-content-static.svelte +1 -1
- package/dist/bits/menu/components/menu-sub-content.svelte +1 -1
- package/dist/bits/menu/menu.svelte.d.ts +2 -1
- package/dist/bits/menu/menu.svelte.js +39 -21
- package/dist/bits/menubar/menubar.svelte.d.ts +1 -7
- package/dist/bits/menubar/menubar.svelte.js +12 -14
- package/dist/bits/meter/meter.svelte.d.ts +0 -1
- package/dist/bits/meter/meter.svelte.js +6 -2
- package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +2 -11
- package/dist/bits/navigation-menu/navigation-menu.svelte.js +30 -25
- package/dist/bits/pagination/pagination.svelte.d.ts +0 -4
- package/dist/bits/pagination/pagination.svelte.js +9 -10
- package/dist/bits/pin-input/pin-input.svelte.d.ts +0 -2
- package/dist/bits/pin-input/pin-input.svelte.js +7 -5
- package/dist/bits/popover/popover.svelte.d.ts +0 -3
- package/dist/bits/popover/popover.svelte.js +9 -5
- package/dist/bits/progress/progress.svelte.d.ts +0 -1
- package/dist/bits/progress/progress.svelte.js +6 -2
- package/dist/bits/radio-group/radio-group.svelte.d.ts +7 -9
- package/dist/bits/radio-group/radio-group.svelte.js +9 -10
- package/dist/bits/range-calendar/range-calendar.svelte.d.ts +38 -38
- package/dist/bits/range-calendar/range-calendar.svelte.js +79 -79
- package/dist/bits/rating-group/rating-group.svelte.d.ts +0 -2
- package/dist/bits/rating-group/rating-group.svelte.js +33 -11
- package/dist/bits/scroll-area/scroll-area.svelte.d.ts +15 -19
- package/dist/bits/scroll-area/scroll-area.svelte.js +10 -10
- package/dist/bits/select/select.svelte.d.ts +28 -30
- package/dist/bits/select/select.svelte.js +36 -48
- package/dist/bits/separator/separator.svelte.d.ts +1 -2
- package/dist/bits/separator/separator.svelte.js +6 -3
- package/dist/bits/slider/slider.svelte.d.ts +17 -24
- package/dist/bits/slider/slider.svelte.js +15 -17
- package/dist/bits/switch/switch.svelte.d.ts +6 -8
- package/dist/bits/switch/switch.svelte.js +7 -5
- package/dist/bits/tabs/tabs.svelte.d.ts +5 -9
- package/dist/bits/tabs/tabs.svelte.js +11 -11
- package/dist/bits/time-field/time-field.svelte.d.ts +1 -3
- package/dist/bits/time-field/time-field.svelte.js +7 -5
- package/dist/bits/time-range-field/time-range-field.svelte.d.ts +1 -3
- package/dist/bits/time-range-field/time-range-field.svelte.js +7 -5
- package/dist/bits/toggle/toggle.svelte.d.ts +3 -3
- package/dist/bits/toggle/toggle.svelte.js +6 -3
- package/dist/bits/toggle-group/toggle-group.svelte.d.ts +1 -2
- package/dist/bits/toggle-group/toggle-group.svelte.js +8 -6
- package/dist/bits/toolbar/toolbar.svelte.d.ts +11 -18
- package/dist/bits/toolbar/toolbar.svelte.js +14 -17
- package/dist/bits/tooltip/tooltip.svelte.d.ts +13 -14
- package/dist/bits/tooltip/tooltip.svelte.js +7 -5
- package/dist/internal/attrs.d.ts +14 -0
- package/dist/internal/attrs.js +18 -0
- package/dist/internal/date-time/calendar-helpers.svelte.d.ts +1 -0
- package/dist/internal/date-time/calendar-helpers.svelte.js +18 -1
- package/dist/internal/use-arrow-navigation.d.ts +2 -2
- package/dist/internal/use-arrow-navigation.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
|
|
2
2
|
import type { BitsMouseEvent, WithRefProps } from "../../internal/types.js";
|
|
3
|
+
export declare const toggleAttrs: import("../../internal/attrs.js").BitsAttrs<readonly ["root"]>;
|
|
3
4
|
type ToggleRootStateProps = WithRefProps<ReadableBoxedValues<{
|
|
4
5
|
disabled: boolean;
|
|
5
6
|
}> & WritableBoxedValues<{
|
|
@@ -10,11 +11,10 @@ declare class ToggleRootState {
|
|
|
10
11
|
readonly opts: ToggleRootStateProps;
|
|
11
12
|
constructor(opts: ToggleRootStateProps);
|
|
12
13
|
onclick(_: BitsMouseEvent): void;
|
|
13
|
-
snippetProps: {
|
|
14
|
+
readonly snippetProps: {
|
|
14
15
|
pressed: boolean;
|
|
15
16
|
};
|
|
16
|
-
props: {
|
|
17
|
-
readonly "data-toggle-root": "";
|
|
17
|
+
readonly props: {
|
|
18
18
|
readonly id: string;
|
|
19
19
|
readonly "data-disabled": "" | undefined;
|
|
20
20
|
readonly "aria-pressed": "true" | "false";
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { attachRef } from "svelte-toolbelt";
|
|
2
|
-
import { getAriaPressed, getDataDisabled, getDisabled } from "../../internal/attrs.js";
|
|
3
|
-
const
|
|
2
|
+
import { createBitsAttrs, getAriaPressed, getDataDisabled, getDisabled, } from "../../internal/attrs.js";
|
|
3
|
+
export const toggleAttrs = createBitsAttrs({
|
|
4
|
+
component: "toggle",
|
|
5
|
+
parts: ["root"],
|
|
6
|
+
});
|
|
4
7
|
class ToggleRootState {
|
|
5
8
|
opts;
|
|
6
9
|
constructor(opts) {
|
|
@@ -21,7 +24,7 @@ class ToggleRootState {
|
|
|
21
24
|
pressed: this.opts.pressed.current,
|
|
22
25
|
}));
|
|
23
26
|
props = $derived.by(() => ({
|
|
24
|
-
[
|
|
27
|
+
[toggleAttrs.root]: "",
|
|
25
28
|
id: this.opts.id.current,
|
|
26
29
|
"data-disabled": getDataDisabled(this.opts.disabled.current),
|
|
27
30
|
"aria-pressed": getAriaPressed(this.opts.pressed.current),
|
|
@@ -3,6 +3,7 @@ import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/bo
|
|
|
3
3
|
import type { Orientation } from "../../shared/index.js";
|
|
4
4
|
import { type UseRovingFocusReturn } from "../../internal/use-roving-focus.svelte.js";
|
|
5
5
|
import type { BitsKeyboardEvent, BitsMouseEvent, WithRefProps } from "../../internal/types.js";
|
|
6
|
+
export declare const toggleGroupAttrs: import("../../internal/attrs.js").BitsAttrs<readonly ["root", "item"]>;
|
|
6
7
|
type ToggleGroupBaseStateProps = WithRefProps<ReadableBoxedValues<{
|
|
7
8
|
disabled: boolean;
|
|
8
9
|
rovingFocus: boolean;
|
|
@@ -15,7 +16,6 @@ declare class ToggleGroupBaseState {
|
|
|
15
16
|
constructor(opts: ToggleGroupBaseStateProps);
|
|
16
17
|
props: {
|
|
17
18
|
readonly id: string;
|
|
18
|
-
readonly "data-toggle-group-root": "";
|
|
19
19
|
readonly role: "group";
|
|
20
20
|
readonly "data-orientation": "horizontal" | "vertical";
|
|
21
21
|
readonly "data-disabled": "" | undefined;
|
|
@@ -70,7 +70,6 @@ declare class ToggleGroupItemState {
|
|
|
70
70
|
readonly "aria-pressed": "true" | "false" | undefined;
|
|
71
71
|
readonly "aria-checked": "true" | "false" | "mixed" | undefined;
|
|
72
72
|
readonly disabled: true | undefined;
|
|
73
|
-
readonly "data-toggle-group-item": "";
|
|
74
73
|
readonly onclick: (_: BitsMouseEvent) => void;
|
|
75
74
|
readonly onkeydown: (e: BitsKeyboardEvent) => void;
|
|
76
75
|
};
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { attachRef } from "svelte-toolbelt";
|
|
2
2
|
import { Context } from "runed";
|
|
3
|
-
import { getAriaChecked, getAriaPressed, getDataDisabled, getDataOrientation, getDisabled, } from "../../internal/attrs.js";
|
|
3
|
+
import { createBitsAttrs, getAriaChecked, getAriaPressed, getDataDisabled, getDataOrientation, getDisabled, } from "../../internal/attrs.js";
|
|
4
4
|
import { kbd } from "../../internal/kbd.js";
|
|
5
5
|
import { useRovingFocus, } from "../../internal/use-roving-focus.svelte.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
6
|
+
export const toggleGroupAttrs = createBitsAttrs({
|
|
7
|
+
component: "toggle-group",
|
|
8
|
+
parts: ["root", "item"],
|
|
9
|
+
});
|
|
8
10
|
class ToggleGroupBaseState {
|
|
9
11
|
opts;
|
|
10
12
|
rovingFocusGroup;
|
|
11
13
|
constructor(opts) {
|
|
12
14
|
this.opts = opts;
|
|
13
15
|
this.rovingFocusGroup = useRovingFocus({
|
|
14
|
-
candidateAttr:
|
|
16
|
+
candidateAttr: toggleGroupAttrs.item,
|
|
15
17
|
rootNode: opts.ref,
|
|
16
18
|
loop: opts.loop,
|
|
17
19
|
orientation: opts.orientation,
|
|
@@ -19,7 +21,7 @@ class ToggleGroupBaseState {
|
|
|
19
21
|
}
|
|
20
22
|
props = $derived.by(() => ({
|
|
21
23
|
id: this.opts.id.current,
|
|
22
|
-
[
|
|
24
|
+
[toggleGroupAttrs.root]: "",
|
|
23
25
|
role: "group",
|
|
24
26
|
"data-orientation": getDataOrientation(this.opts.orientation.current),
|
|
25
27
|
"data-disabled": getDataDisabled(this.opts.disabled.current),
|
|
@@ -130,7 +132,7 @@ class ToggleGroupItemState {
|
|
|
130
132
|
"aria-pressed": this.#ariaPressed,
|
|
131
133
|
"aria-checked": this.#ariaChecked,
|
|
132
134
|
disabled: getDisabled(this.#isDisabled),
|
|
133
|
-
[
|
|
135
|
+
[toggleGroupAttrs.item]: "",
|
|
134
136
|
//
|
|
135
137
|
onclick: this.onclick,
|
|
136
138
|
onkeydown: this.onkeydown,
|
|
@@ -3,6 +3,7 @@ import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/bo
|
|
|
3
3
|
import { type UseRovingFocusReturn } from "../../internal/use-roving-focus.svelte.js";
|
|
4
4
|
import type { Orientation } from "../../shared/index.js";
|
|
5
5
|
import type { BitsKeyboardEvent, BitsMouseEvent, WithRefProps } from "../../internal/types.js";
|
|
6
|
+
export declare const toolbarAttrs: import("../../internal/attrs.js").BitsAttrs<readonly ["root", "item", "group", "group-item", "link", "button"]>;
|
|
6
7
|
type ToolbarRootStateProps = WithRefProps<ReadableBoxedValues<{
|
|
7
8
|
orientation: Orientation;
|
|
8
9
|
loop: boolean;
|
|
@@ -11,11 +12,10 @@ declare class ToolbarRootState {
|
|
|
11
12
|
readonly opts: ToolbarRootStateProps;
|
|
12
13
|
rovingFocusGroup: UseRovingFocusReturn;
|
|
13
14
|
constructor(opts: ToolbarRootStateProps);
|
|
14
|
-
props: {
|
|
15
|
+
readonly props: {
|
|
15
16
|
readonly id: string;
|
|
16
17
|
readonly role: "toolbar";
|
|
17
18
|
readonly "data-orientation": Orientation;
|
|
18
|
-
readonly "data-toolbar-root": "";
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
type ToolbarGroupBaseStateProps = WithRefProps<ReadableBoxedValues<{
|
|
@@ -25,9 +25,8 @@ declare class ToolbarGroupBaseState {
|
|
|
25
25
|
readonly opts: ToolbarGroupBaseStateProps;
|
|
26
26
|
readonly root: ToolbarRootState;
|
|
27
27
|
constructor(opts: ToolbarGroupBaseStateProps, root: ToolbarRootState);
|
|
28
|
-
props: {
|
|
28
|
+
readonly props: {
|
|
29
29
|
readonly id: string;
|
|
30
|
-
readonly "data-toolbar-group": "";
|
|
31
30
|
readonly role: "group";
|
|
32
31
|
readonly "data-orientation": "horizontal" | "vertical";
|
|
33
32
|
readonly "data-disabled": "" | undefined;
|
|
@@ -39,8 +38,8 @@ type ToolbarGroupSingleStateProps = ToolbarGroupBaseStateProps & WritableBoxedVa
|
|
|
39
38
|
declare class ToolbarGroupSingleState extends ToolbarGroupBaseState {
|
|
40
39
|
readonly opts: ToolbarGroupSingleStateProps;
|
|
41
40
|
readonly root: ToolbarRootState;
|
|
42
|
-
isMulti:
|
|
43
|
-
anyPressed: boolean;
|
|
41
|
+
readonly isMulti: false;
|
|
42
|
+
readonly anyPressed: boolean;
|
|
44
43
|
constructor(opts: ToolbarGroupSingleStateProps, root: ToolbarRootState);
|
|
45
44
|
includesItem(item: string): boolean;
|
|
46
45
|
toggleItem(item: string): void;
|
|
@@ -51,8 +50,8 @@ type ToolbarGroupMultipleStateProps = ToolbarGroupBaseStateProps & WritableBoxed
|
|
|
51
50
|
declare class ToolbarGroupMultipleState extends ToolbarGroupBaseState {
|
|
52
51
|
readonly opts: ToolbarGroupMultipleStateProps;
|
|
53
52
|
readonly root: ToolbarRootState;
|
|
54
|
-
isMulti:
|
|
55
|
-
anyPressed: boolean;
|
|
53
|
+
readonly isMulti: true;
|
|
54
|
+
readonly anyPressed: boolean;
|
|
56
55
|
constructor(opts: ToolbarGroupMultipleStateProps, root: ToolbarRootState);
|
|
57
56
|
includesItem(item: string): boolean;
|
|
58
57
|
toggleItem(item: string): void;
|
|
@@ -70,8 +69,8 @@ declare class ToolbarGroupItemState {
|
|
|
70
69
|
constructor(opts: ToolbarGroupItemStateProps, group: ToolbarGroupState, root: ToolbarRootState);
|
|
71
70
|
onclick(_: BitsMouseEvent): void;
|
|
72
71
|
onkeydown(e: BitsKeyboardEvent): void;
|
|
73
|
-
isPressed: boolean;
|
|
74
|
-
props: {
|
|
72
|
+
readonly isPressed: boolean;
|
|
73
|
+
readonly props: {
|
|
75
74
|
readonly id: string;
|
|
76
75
|
readonly role: "radio" | undefined;
|
|
77
76
|
readonly tabindex: number;
|
|
@@ -81,8 +80,6 @@ declare class ToolbarGroupItemState {
|
|
|
81
80
|
readonly "data-value": string;
|
|
82
81
|
readonly "aria-pressed": "true" | "false" | undefined;
|
|
83
82
|
readonly "aria-checked": "true" | "false" | "mixed" | undefined;
|
|
84
|
-
readonly "data-toolbar-item": "";
|
|
85
|
-
readonly "data-toolbar-group-item": "";
|
|
86
83
|
readonly disabled: true | undefined;
|
|
87
84
|
readonly onclick: (_: BitsMouseEvent) => void;
|
|
88
85
|
readonly onkeydown: (e: BitsKeyboardEvent) => void;
|
|
@@ -95,10 +92,8 @@ declare class ToolbarLinkState {
|
|
|
95
92
|
readonly root: ToolbarRootState;
|
|
96
93
|
constructor(opts: ToolbarLinkStateProps, root: ToolbarRootState);
|
|
97
94
|
onkeydown(e: BitsKeyboardEvent): void;
|
|
98
|
-
props: {
|
|
95
|
+
readonly props: {
|
|
99
96
|
readonly id: string;
|
|
100
|
-
readonly "data-toolbar-link": "";
|
|
101
|
-
readonly "data-toolbar-item": "";
|
|
102
97
|
readonly role: "link" | undefined;
|
|
103
98
|
readonly tabindex: number;
|
|
104
99
|
readonly "data-orientation": "horizontal" | "vertical";
|
|
@@ -114,10 +109,8 @@ declare class ToolbarButtonState {
|
|
|
114
109
|
readonly root: ToolbarRootState;
|
|
115
110
|
constructor(opts: ToolbarButtonStateProps, root: ToolbarRootState);
|
|
116
111
|
onkeydown(e: BitsKeyboardEvent): void;
|
|
117
|
-
props: {
|
|
112
|
+
readonly props: {
|
|
118
113
|
readonly id: string;
|
|
119
|
-
readonly "data-toolbar-item": "";
|
|
120
|
-
readonly "data-toolbar-button": "";
|
|
121
114
|
readonly role: "button" | undefined;
|
|
122
115
|
readonly tabindex: number;
|
|
123
116
|
readonly "data-disabled": "" | undefined;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { attachRef } from "svelte-toolbelt";
|
|
2
2
|
import { Context } from "runed";
|
|
3
|
-
import { getAriaChecked, getAriaPressed, getDataDisabled, getDataOrientation, getDisabled, } from "../../internal/attrs.js";
|
|
3
|
+
import { createBitsAttrs, getAriaChecked, getAriaPressed, getDataDisabled, getDataOrientation, getDisabled, } from "../../internal/attrs.js";
|
|
4
4
|
import { kbd } from "../../internal/kbd.js";
|
|
5
5
|
import { useRovingFocus, } from "../../internal/use-roving-focus.svelte.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const TOOLBAR_GROUP_ITEM_ATTR = "data-toolbar-group-item";
|
|
11
|
-
const TOOLBAR_LINK_ATTR = "data-toolbar-link";
|
|
12
|
-
const TOOLBAR_BUTTON_ATTR = "data-toolbar-button";
|
|
6
|
+
export const toolbarAttrs = createBitsAttrs({
|
|
7
|
+
component: "toolbar",
|
|
8
|
+
parts: ["root", "item", "group", "group-item", "link", "button"],
|
|
9
|
+
});
|
|
13
10
|
class ToolbarRootState {
|
|
14
11
|
opts;
|
|
15
12
|
rovingFocusGroup;
|
|
@@ -19,14 +16,14 @@ class ToolbarRootState {
|
|
|
19
16
|
orientation: this.opts.orientation,
|
|
20
17
|
loop: this.opts.loop,
|
|
21
18
|
rootNode: this.opts.ref,
|
|
22
|
-
candidateAttr:
|
|
19
|
+
candidateAttr: toolbarAttrs.item,
|
|
23
20
|
});
|
|
24
21
|
}
|
|
25
22
|
props = $derived.by(() => ({
|
|
26
23
|
id: this.opts.id.current,
|
|
27
24
|
role: "toolbar",
|
|
28
25
|
"data-orientation": this.opts.orientation.current,
|
|
29
|
-
[
|
|
26
|
+
[toolbarAttrs.root]: "",
|
|
30
27
|
...attachRef(this.opts.ref),
|
|
31
28
|
}));
|
|
32
29
|
}
|
|
@@ -39,7 +36,7 @@ class ToolbarGroupBaseState {
|
|
|
39
36
|
}
|
|
40
37
|
props = $derived.by(() => ({
|
|
41
38
|
id: this.opts.id.current,
|
|
42
|
-
[
|
|
39
|
+
[toolbarAttrs.group]: "",
|
|
43
40
|
role: "group",
|
|
44
41
|
"data-orientation": getDataOrientation(this.root.opts.orientation.current),
|
|
45
42
|
"data-disabled": getDataDisabled(this.opts.disabled.current),
|
|
@@ -143,8 +140,8 @@ class ToolbarGroupItemState {
|
|
|
143
140
|
"data-value": this.opts.value.current,
|
|
144
141
|
"aria-pressed": this.#ariaPressed,
|
|
145
142
|
"aria-checked": this.#ariaChecked,
|
|
146
|
-
[
|
|
147
|
-
[
|
|
143
|
+
[toolbarAttrs.item]: "",
|
|
144
|
+
[toolbarAttrs["group-item"]]: "",
|
|
148
145
|
disabled: getDisabled(this.#isDisabled),
|
|
149
146
|
//
|
|
150
147
|
onclick: this.onclick,
|
|
@@ -177,8 +174,8 @@ class ToolbarLinkState {
|
|
|
177
174
|
#tabIndex = $state(0);
|
|
178
175
|
props = $derived.by(() => ({
|
|
179
176
|
id: this.opts.id.current,
|
|
180
|
-
[
|
|
181
|
-
[
|
|
177
|
+
[toolbarAttrs.link]: "",
|
|
178
|
+
[toolbarAttrs.item]: "",
|
|
182
179
|
role: this.#role,
|
|
183
180
|
tabindex: this.#tabIndex,
|
|
184
181
|
"data-orientation": getDataOrientation(this.root.opts.orientation.current),
|
|
@@ -212,8 +209,8 @@ class ToolbarButtonState {
|
|
|
212
209
|
});
|
|
213
210
|
props = $derived.by(() => ({
|
|
214
211
|
id: this.opts.id.current,
|
|
215
|
-
[
|
|
216
|
-
[
|
|
212
|
+
[toolbarAttrs.item]: "",
|
|
213
|
+
[toolbarAttrs.button]: "",
|
|
217
214
|
role: this.#role,
|
|
218
215
|
tabindex: this.#tabIndex,
|
|
219
216
|
"data-disabled": getDataDisabled(this.opts.disabled.current),
|
|
@@ -2,6 +2,7 @@ import { DOMContext } from "svelte-toolbelt";
|
|
|
2
2
|
import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
|
|
3
3
|
import type { WithRefProps } from "../../internal/types.js";
|
|
4
4
|
import type { FocusEventHandler, MouseEventHandler, PointerEventHandler } from "svelte/elements";
|
|
5
|
+
export declare const tooltipAttrs: import("../../internal/attrs.js").BitsAttrs<readonly ["content", "trigger"]>;
|
|
5
6
|
type TooltipProviderStateProps = ReadableBoxedValues<{
|
|
6
7
|
delayDuration: number;
|
|
7
8
|
disableHoverableContent: boolean;
|
|
@@ -33,14 +34,14 @@ declare class TooltipRootState {
|
|
|
33
34
|
#private;
|
|
34
35
|
readonly opts: TooltipRootStateProps;
|
|
35
36
|
readonly provider: TooltipProviderState;
|
|
36
|
-
delayDuration: number;
|
|
37
|
-
disableHoverableContent: boolean;
|
|
38
|
-
disableCloseOnTriggerClick: boolean;
|
|
39
|
-
disabled: boolean;
|
|
40
|
-
ignoreNonKeyboardFocus: boolean;
|
|
37
|
+
readonly delayDuration: number;
|
|
38
|
+
readonly disableHoverableContent: boolean;
|
|
39
|
+
readonly disableCloseOnTriggerClick: boolean;
|
|
40
|
+
readonly disabled: boolean;
|
|
41
|
+
readonly ignoreNonKeyboardFocus: boolean;
|
|
41
42
|
contentNode: HTMLElement | null;
|
|
42
43
|
triggerNode: HTMLElement | null;
|
|
43
|
-
stateAttr: string;
|
|
44
|
+
readonly stateAttr: string;
|
|
44
45
|
constructor(opts: TooltipRootStateProps, provider: TooltipProviderState);
|
|
45
46
|
handleOpen: () => void;
|
|
46
47
|
handleClose: () => void;
|
|
@@ -57,13 +58,12 @@ declare class TooltipTriggerState {
|
|
|
57
58
|
domContext: DOMContext;
|
|
58
59
|
constructor(opts: TooltipTriggerStateProps, root: TooltipRootState);
|
|
59
60
|
handlePointerUp: () => void;
|
|
60
|
-
props: {
|
|
61
|
+
readonly props: {
|
|
61
62
|
readonly id: string;
|
|
62
63
|
readonly "aria-describedby": string | undefined;
|
|
63
|
-
readonly "data-state":
|
|
64
|
+
readonly "data-state": "closed" | "delayed-open" | "instant-open";
|
|
64
65
|
readonly "data-disabled": "" | undefined;
|
|
65
66
|
readonly "data-delay-duration": `${number}`;
|
|
66
|
-
readonly "data-tooltip-trigger": "";
|
|
67
67
|
readonly tabindex: 0 | undefined;
|
|
68
68
|
readonly disabled: boolean;
|
|
69
69
|
readonly onpointerup: PointerEventHandler<HTMLElement>;
|
|
@@ -87,20 +87,19 @@ declare class TooltipContentState {
|
|
|
87
87
|
onEscapeKeydown: (e: KeyboardEvent) => void;
|
|
88
88
|
onOpenAutoFocus: (e: Event) => void;
|
|
89
89
|
onCloseAutoFocus: (e: Event) => void;
|
|
90
|
-
snippetProps: {
|
|
90
|
+
readonly snippetProps: {
|
|
91
91
|
open: boolean;
|
|
92
92
|
};
|
|
93
|
-
props: {
|
|
93
|
+
readonly props: {
|
|
94
94
|
readonly id: string;
|
|
95
|
-
readonly "data-state":
|
|
95
|
+
readonly "data-state": "closed" | "delayed-open" | "instant-open";
|
|
96
96
|
readonly "data-disabled": "" | undefined;
|
|
97
97
|
readonly style: {
|
|
98
98
|
readonly pointerEvents: "auto";
|
|
99
99
|
readonly outline: "none";
|
|
100
100
|
};
|
|
101
|
-
readonly "data-tooltip-content": "";
|
|
102
101
|
};
|
|
103
|
-
popperProps: {
|
|
102
|
+
readonly popperProps: {
|
|
104
103
|
onInteractOutside: (e: PointerEvent) => void;
|
|
105
104
|
onEscapeKeydown: (e: KeyboardEvent) => void;
|
|
106
105
|
onOpenAutoFocus: (e: Event) => void;
|
|
@@ -4,9 +4,11 @@ import { Context, watch } from "runed";
|
|
|
4
4
|
import { useTimeoutFn } from "../../internal/use-timeout-fn.svelte.js";
|
|
5
5
|
import { isElement, isFocusVisible } from "../../internal/is.js";
|
|
6
6
|
import { useGraceArea } from "../../internal/use-grace-area.svelte.js";
|
|
7
|
-
import { getDataDisabled } from "../../internal/attrs.js";
|
|
8
|
-
const
|
|
9
|
-
|
|
7
|
+
import { createBitsAttrs, getDataDisabled } from "../../internal/attrs.js";
|
|
8
|
+
export const tooltipAttrs = createBitsAttrs({
|
|
9
|
+
component: "tooltip",
|
|
10
|
+
parts: ["content", "trigger"],
|
|
11
|
+
});
|
|
10
12
|
class TooltipProviderState {
|
|
11
13
|
opts;
|
|
12
14
|
isOpenDelayed = $state(true);
|
|
@@ -200,7 +202,7 @@ class TooltipTriggerState {
|
|
|
200
202
|
"data-state": this.root.stateAttr,
|
|
201
203
|
"data-disabled": getDataDisabled(this.#isDisabled),
|
|
202
204
|
"data-delay-duration": `${this.root.delayDuration}`,
|
|
203
|
-
[
|
|
205
|
+
[tooltipAttrs.trigger]: "",
|
|
204
206
|
tabindex: this.#isDisabled ? undefined : 0,
|
|
205
207
|
disabled: this.opts.disabled.current,
|
|
206
208
|
onpointerup: this.#onpointerup,
|
|
@@ -275,7 +277,7 @@ class TooltipContentState {
|
|
|
275
277
|
pointerEvents: "auto",
|
|
276
278
|
outline: "none",
|
|
277
279
|
},
|
|
278
|
-
[
|
|
280
|
+
[tooltipAttrs.content]: "",
|
|
279
281
|
...attachRef(this.opts.ref, (v) => (this.root.contentNode = v)),
|
|
280
282
|
}));
|
|
281
283
|
popperProps = {
|
package/dist/internal/attrs.d.ts
CHANGED
|
@@ -20,3 +20,17 @@ export declare function getHidden(condition: boolean): true | undefined;
|
|
|
20
20
|
export declare function getDisabled(condition: boolean): true | undefined;
|
|
21
21
|
export declare function getAriaPressed(condition: boolean): "true" | "false";
|
|
22
22
|
export declare function getRequired(condition: boolean): true | undefined;
|
|
23
|
+
export type BitsAttrsConfig<T extends readonly string[]> = {
|
|
24
|
+
component: string;
|
|
25
|
+
parts: T;
|
|
26
|
+
getVariant?: () => string | null;
|
|
27
|
+
};
|
|
28
|
+
export type BitsAttrs<T extends readonly string[]> = {
|
|
29
|
+
[K in T[number]]: string;
|
|
30
|
+
} & {
|
|
31
|
+
selector: (part: T[number]) => string;
|
|
32
|
+
getAttr: (part: T[number], variant?: string) => string;
|
|
33
|
+
};
|
|
34
|
+
export declare function createBitsAttrs<const T extends readonly string[]>(config: Omit<BitsAttrsConfig<T>, "parts"> & {
|
|
35
|
+
parts: T;
|
|
36
|
+
}): BitsAttrs<T>;
|
package/dist/internal/attrs.js
CHANGED
|
@@ -67,3 +67,21 @@ export function getAriaPressed(condition) {
|
|
|
67
67
|
export function getRequired(condition) {
|
|
68
68
|
return condition ? true : undefined;
|
|
69
69
|
}
|
|
70
|
+
export function createBitsAttrs(config) {
|
|
71
|
+
const variant = config.getVariant?.();
|
|
72
|
+
const prefix = variant ? `data-${variant}-` : `data-${config.component}-`;
|
|
73
|
+
function getAttr(part, variantOverride) {
|
|
74
|
+
if (variantOverride)
|
|
75
|
+
return `data-${variantOverride}-${part}`;
|
|
76
|
+
return `${prefix}${part}`;
|
|
77
|
+
}
|
|
78
|
+
function selector(part, variantOverride) {
|
|
79
|
+
return `[${getAttr(part, variantOverride)}]`;
|
|
80
|
+
}
|
|
81
|
+
const attrs = Object.fromEntries(config.parts.map((part) => [part, getAttr(part)]));
|
|
82
|
+
return {
|
|
83
|
+
...attrs,
|
|
84
|
+
selector,
|
|
85
|
+
getAttr,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
@@ -198,4 +198,5 @@ export declare function useEnsureNonDisabledPlaceholder({ ref, placeholder, defa
|
|
|
198
198
|
defaultPlaceholder: DateValue;
|
|
199
199
|
}): void;
|
|
200
200
|
export declare function getDateWithPreviousTime(date: DateValue | undefined, prev: DateValue | undefined): DateValue | undefined;
|
|
201
|
+
export declare const calendarAttrs: import("../attrs.js").BitsAttrs<readonly ["root", "grid", "cell", "next-button", "prev-button", "day", "grid-body", "grid-head", "grid-row", "head-cell", "header", "heading"]>;
|
|
201
202
|
export {};
|
|
@@ -2,7 +2,7 @@ import { endOfMonth, isSameDay, isSameMonth, startOfMonth, } from "@internationa
|
|
|
2
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
|
-
import { getDataDisabled, getDataInvalid, getDataReadonly } from "../attrs.js";
|
|
5
|
+
import { createBitsAttrs, getDataDisabled, getDataInvalid, getDataReadonly, } from "../attrs.js";
|
|
6
6
|
import { chunk, isValidIndex } from "../arrays.js";
|
|
7
7
|
import { isBrowser, isHTMLElement } from "../is.js";
|
|
8
8
|
import { kbd } from "../kbd.js";
|
|
@@ -514,3 +514,20 @@ export function getDateWithPreviousTime(date, prev) {
|
|
|
514
514
|
}
|
|
515
515
|
return date;
|
|
516
516
|
}
|
|
517
|
+
export const calendarAttrs = createBitsAttrs({
|
|
518
|
+
component: "calendar",
|
|
519
|
+
parts: [
|
|
520
|
+
"root",
|
|
521
|
+
"grid",
|
|
522
|
+
"cell",
|
|
523
|
+
"next-button",
|
|
524
|
+
"prev-button",
|
|
525
|
+
"day",
|
|
526
|
+
"grid-body",
|
|
527
|
+
"grid-head",
|
|
528
|
+
"grid-row",
|
|
529
|
+
"head-cell",
|
|
530
|
+
"header",
|
|
531
|
+
"heading",
|
|
532
|
+
],
|
|
533
|
+
});
|
|
@@ -8,9 +8,9 @@ interface ArrowNavigationOptions {
|
|
|
8
8
|
*/
|
|
9
9
|
arrowKeyOptions?: ArrowKeyOptions;
|
|
10
10
|
/**
|
|
11
|
-
* The
|
|
11
|
+
* The selector to find the collection items in the parent element.
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
candidateSelector: string;
|
|
14
14
|
/**
|
|
15
15
|
* The parent element where contains all the collection items, this will collect every item to be used when nav
|
|
16
16
|
* It will be ignored if attributeName is provided
|
|
@@ -12,7 +12,7 @@ export function useArrowNavigation(e, currentElement, parentElement, options) {
|
|
|
12
12
|
(options.enableIgnoredElement && ignoredElement.includes(currentElement.nodeName))) {
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
|
-
const { arrowKeyOptions = "both", attributeName, itemsArray = [], loop = true, dir = "ltr", preventScroll = true, focus = false, } = options;
|
|
15
|
+
const { arrowKeyOptions = "both", candidateSelector: attributeName, itemsArray = [], loop = true, dir = "ltr", preventScroll = true, focus = false, } = options;
|
|
16
16
|
const [right, left, up, down, home, end] = [
|
|
17
17
|
e.key === "ArrowRight",
|
|
18
18
|
e.key === "ArrowLeft",
|