@vertz/ui-primitives 0.2.15 → 0.2.17
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/shared/chunk-0mcr52hc.js +78 -0
- package/dist/shared/chunk-18y8gfk0.js +308 -0
- package/dist/shared/chunk-34yfm2b0.js +182 -0
- package/dist/shared/chunk-4085nbdq.js +196 -0
- package/dist/shared/chunk-4da5zksy.js +46 -0
- package/dist/shared/chunk-7ffg0caj.js +265 -0
- package/dist/shared/chunk-7kpsyjd7.js +61 -0
- package/dist/shared/chunk-7krvqrwq.js +177 -0
- package/dist/shared/chunk-8ak7vdk1.js +151 -0
- package/dist/shared/chunk-8nk0ya7a.js +163 -0
- package/dist/shared/chunk-8tvzqry6.js +218 -0
- package/dist/shared/chunk-8y1jf6xr.js +17 -0
- package/dist/shared/chunk-96d9nr7y.js +19 -0
- package/dist/shared/chunk-9hj9p7s2.js +95 -0
- package/dist/shared/chunk-a6wp8c32.js +32 -0
- package/dist/shared/chunk-avxcmmk6.js +178 -0
- package/dist/shared/chunk-bew4bjgf.js +165 -0
- package/dist/shared/chunk-dpsgb1xw.js +18 -0
- package/dist/shared/chunk-e2v1c9ex.js +62 -0
- package/dist/shared/chunk-g9qvd20g.js +133 -0
- package/dist/shared/chunk-gkddsbmh.js +73 -0
- package/dist/shared/chunk-gt0wth9h.js +128 -0
- package/dist/shared/chunk-hr9hx58m.js +71 -0
- package/dist/shared/chunk-j4cm8avr.js +175 -0
- package/dist/shared/chunk-jctqs9m4.js +60 -0
- package/dist/shared/chunk-jz0s6srh.js +161 -0
- package/dist/shared/chunk-kg27s15c.js +282 -0
- package/dist/shared/chunk-m1ptgp1s.js +142 -0
- package/dist/shared/chunk-n9nwx58j.js +60 -0
- package/dist/shared/chunk-ppcv3ehd.js +85 -0
- package/dist/shared/chunk-rnjm61t0.js +34 -0
- package/dist/shared/chunk-sqs8kyb2.js +288 -0
- package/dist/shared/chunk-t1vkvsz2.js +175 -0
- package/dist/shared/chunk-tfyg0qrp.js +117 -0
- package/dist/shared/chunk-ttsyf6ma.js +239 -0
- package/dist/shared/chunk-vvjyx7fe.js +62 -0
- package/dist/shared/chunk-x0we8gcy.js +219 -0
- package/dist/shared/chunk-x2hz98qn.js +108 -0
- package/dist/shared/chunk-yr9yzpvq.js +107 -0
- package/dist/src/accordion/accordion.d.ts +35 -0
- package/dist/src/accordion/accordion.js +10 -0
- package/dist/src/alert-dialog/alert-dialog.d.ts +26 -0
- package/dist/src/alert-dialog/alert-dialog.js +9 -0
- package/dist/src/badge/badge.d.ts +22 -0
- package/dist/src/badge/badge.js +8 -0
- package/dist/src/button/button.d.ts +20 -0
- package/dist/src/button/button.js +8 -0
- package/dist/src/calendar/calendar.d.ts +52 -0
- package/dist/src/calendar/calendar.js +7 -0
- package/dist/src/carousel/carousel.d.ts +39 -0
- package/dist/src/carousel/carousel.js +9 -0
- package/dist/src/checkbox/checkbox.d.ts +22 -0
- package/dist/src/checkbox/checkbox.js +9 -0
- package/dist/src/collapsible/collapsible.d.ts +33 -0
- package/dist/src/collapsible/collapsible.js +9 -0
- package/dist/src/combobox/combobox.d.ts +35 -0
- package/dist/src/combobox/combobox.js +10 -0
- package/dist/src/command/command.d.ts +41 -0
- package/dist/src/command/command.js +10 -0
- package/dist/src/context-menu/context-menu.d.ts +51 -0
- package/dist/src/context-menu/context-menu.js +12 -0
- package/dist/src/date-picker/date-picker.d.ts +47 -0
- package/dist/src/date-picker/date-picker.js +15 -0
- package/dist/src/dialog/dialog.d.ts +36 -0
- package/dist/src/dialog/dialog.js +11 -0
- package/dist/src/dropdown-menu/dropdown-menu.d.ts +54 -0
- package/dist/src/dropdown-menu/dropdown-menu.js +13 -0
- package/dist/src/hover-card/hover-card.d.ts +45 -0
- package/dist/src/hover-card/hover-card.js +11 -0
- package/dist/{index.d.ts → src/index.d.ts} +132 -140
- package/dist/src/index.js +137 -0
- package/dist/src/menu/menu.d.ts +51 -0
- package/dist/src/menu/menu.js +12 -0
- package/dist/src/menubar/menubar.d.ts +52 -0
- package/dist/src/menubar/menubar.js +13 -0
- package/dist/src/navigation-menu/navigation-menu.d.ts +37 -0
- package/dist/src/navigation-menu/navigation-menu.js +11 -0
- package/dist/src/popover/popover.d.ts +44 -0
- package/dist/src/popover/popover.js +13 -0
- package/dist/src/progress/progress.d.ts +32 -0
- package/dist/src/progress/progress.js +9 -0
- package/dist/src/radio/radio.d.ts +30 -0
- package/dist/src/radio/radio.js +11 -0
- package/dist/src/resizable-panel/resizable-panel.d.ts +36 -0
- package/dist/src/resizable-panel/resizable-panel.js +9 -0
- package/dist/src/scroll-area/scroll-area.d.ts +37 -0
- package/dist/src/scroll-area/scroll-area.js +7 -0
- package/dist/src/select/select.d.ts +53 -0
- package/dist/src/select/select.js +12 -0
- package/dist/src/sheet/sheet.d.ts +24 -0
- package/dist/src/sheet/sheet.js +10 -0
- package/dist/src/slider/slider.d.ts +36 -0
- package/dist/src/slider/slider.js +10 -0
- package/dist/src/switch/switch.d.ts +21 -0
- package/dist/src/switch/switch.js +9 -0
- package/dist/src/tabs/tabs.d.ts +35 -0
- package/dist/src/tabs/tabs.js +11 -0
- package/dist/src/toast/toast.d.ts +36 -0
- package/dist/src/toast/toast.js +9 -0
- package/dist/src/toggle/toggle.d.ts +21 -0
- package/dist/src/toggle/toggle.js +9 -0
- package/dist/src/toggle-group/toggle-group.d.ts +34 -0
- package/dist/src/toggle-group/toggle-group.js +10 -0
- package/dist/src/tooltip/tooltip.d.ts +44 -0
- package/dist/src/tooltip/tooltip.js +11 -0
- package/dist/src/utils.d.ts +176 -0
- package/dist/src/utils.js +72 -0
- package/package.json +12 -10
- package/dist/index.js +0 -3675
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Signal } from "@vertz/ui";
|
|
2
|
+
interface ElementAttrs {
|
|
3
|
+
class?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
style?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
role?: string;
|
|
8
|
+
tabindex?: number | string;
|
|
9
|
+
hidden?: boolean | string;
|
|
10
|
+
autofocus?: boolean;
|
|
11
|
+
[key: `data-${string}`]: string | undefined;
|
|
12
|
+
[key: `aria-${string}`]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
interface SliderOptions extends ElementAttrs {
|
|
15
|
+
defaultValue?: number;
|
|
16
|
+
min?: number;
|
|
17
|
+
max?: number;
|
|
18
|
+
step?: number;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
onValueChange?: (value: number) => void;
|
|
21
|
+
}
|
|
22
|
+
interface SliderState {
|
|
23
|
+
value: Signal<number>;
|
|
24
|
+
disabled: Signal<boolean>;
|
|
25
|
+
}
|
|
26
|
+
interface SliderElements {
|
|
27
|
+
root: HTMLDivElement;
|
|
28
|
+
thumb: HTMLDivElement;
|
|
29
|
+
track: HTMLDivElement;
|
|
30
|
+
}
|
|
31
|
+
declare const Slider: {
|
|
32
|
+
Root: (options?: SliderOptions) => SliderElements & {
|
|
33
|
+
state: SliderState;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export { SliderState, SliderOptions, SliderElements, Slider };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface ElementAttrs {
|
|
2
|
+
class?: string;
|
|
3
|
+
id?: string;
|
|
4
|
+
style?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
role?: string;
|
|
7
|
+
tabindex?: number | string;
|
|
8
|
+
hidden?: boolean | string;
|
|
9
|
+
autofocus?: boolean;
|
|
10
|
+
[key: `data-${string}`]: string | undefined;
|
|
11
|
+
[key: `aria-${string}`]: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
interface SwitchOptions extends ElementAttrs {
|
|
14
|
+
defaultChecked?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
17
|
+
}
|
|
18
|
+
declare const Switch: {
|
|
19
|
+
Root: (options?: SwitchOptions) => HTMLButtonElement;
|
|
20
|
+
};
|
|
21
|
+
export { SwitchOptions, Switch };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Signal } from "@vertz/ui";
|
|
2
|
+
interface ElementAttrs {
|
|
3
|
+
class?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
style?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
role?: string;
|
|
8
|
+
tabindex?: number | string;
|
|
9
|
+
hidden?: boolean | string;
|
|
10
|
+
autofocus?: boolean;
|
|
11
|
+
[key: `data-${string}`]: string | undefined;
|
|
12
|
+
[key: `aria-${string}`]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
interface TabsOptions extends ElementAttrs {
|
|
15
|
+
defaultValue?: string;
|
|
16
|
+
orientation?: "horizontal" | "vertical";
|
|
17
|
+
onValueChange?: (value: string) => void;
|
|
18
|
+
}
|
|
19
|
+
interface TabsState {
|
|
20
|
+
value: Signal<string>;
|
|
21
|
+
}
|
|
22
|
+
interface TabsElements {
|
|
23
|
+
root: HTMLDivElement;
|
|
24
|
+
list: HTMLDivElement;
|
|
25
|
+
}
|
|
26
|
+
declare const Tabs: {
|
|
27
|
+
Root: (options?: TabsOptions) => TabsElements & {
|
|
28
|
+
state: TabsState;
|
|
29
|
+
Tab: (value: string, label?: string) => {
|
|
30
|
+
trigger: HTMLButtonElement;
|
|
31
|
+
panel: HTMLDivElement;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export { TabsState, TabsOptions, TabsElements, Tabs };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tabs
|
|
3
|
+
} from "../../shared/chunk-8nk0ya7a.js";
|
|
4
|
+
import"../../shared/chunk-e2v1c9ex.js";
|
|
5
|
+
import"../../shared/chunk-jctqs9m4.js";
|
|
6
|
+
import"../../shared/chunk-vvjyx7fe.js";
|
|
7
|
+
import"../../shared/chunk-dpsgb1xw.js";
|
|
8
|
+
import"../../shared/chunk-8y1jf6xr.js";
|
|
9
|
+
export {
|
|
10
|
+
Tabs
|
|
11
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Signal } from "@vertz/ui";
|
|
2
|
+
interface ElementAttrs {
|
|
3
|
+
class?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
style?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
role?: string;
|
|
8
|
+
tabindex?: number | string;
|
|
9
|
+
hidden?: boolean | string;
|
|
10
|
+
autofocus?: boolean;
|
|
11
|
+
[key: `data-${string}`]: string | undefined;
|
|
12
|
+
[key: `aria-${string}`]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
interface ToastOptions extends ElementAttrs {
|
|
15
|
+
duration?: number;
|
|
16
|
+
politeness?: "polite" | "assertive";
|
|
17
|
+
}
|
|
18
|
+
interface ToastMessage {
|
|
19
|
+
id: string;
|
|
20
|
+
content: string;
|
|
21
|
+
el: HTMLDivElement;
|
|
22
|
+
}
|
|
23
|
+
interface ToastState {
|
|
24
|
+
messages: Signal<ToastMessage[]>;
|
|
25
|
+
}
|
|
26
|
+
interface ToastElements {
|
|
27
|
+
region: HTMLDivElement;
|
|
28
|
+
}
|
|
29
|
+
declare const Toast: {
|
|
30
|
+
Root: (options?: ToastOptions) => ToastElements & {
|
|
31
|
+
state: ToastState;
|
|
32
|
+
announce: (content: string) => ToastMessage;
|
|
33
|
+
dismiss: (id: string) => void;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export { ToastState, ToastOptions, ToastMessage, ToastElements, Toast };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface ElementAttrs {
|
|
2
|
+
class?: string;
|
|
3
|
+
id?: string;
|
|
4
|
+
style?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
role?: string;
|
|
7
|
+
tabindex?: number | string;
|
|
8
|
+
hidden?: boolean | string;
|
|
9
|
+
autofocus?: boolean;
|
|
10
|
+
[key: `data-${string}`]: string | undefined;
|
|
11
|
+
[key: `aria-${string}`]: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
interface ToggleOptions extends ElementAttrs {
|
|
14
|
+
defaultPressed?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
onPressedChange?: (pressed: boolean) => void;
|
|
17
|
+
}
|
|
18
|
+
declare const Toggle: {
|
|
19
|
+
Root: (options?: ToggleOptions) => HTMLButtonElement;
|
|
20
|
+
};
|
|
21
|
+
export { ToggleOptions, Toggle };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Signal } from "@vertz/ui";
|
|
2
|
+
interface ElementAttrs {
|
|
3
|
+
class?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
style?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
role?: string;
|
|
8
|
+
tabindex?: number | string;
|
|
9
|
+
hidden?: boolean | string;
|
|
10
|
+
autofocus?: boolean;
|
|
11
|
+
[key: `data-${string}`]: string | undefined;
|
|
12
|
+
[key: `aria-${string}`]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
interface ToggleGroupOptions extends ElementAttrs {
|
|
15
|
+
type?: "single" | "multiple";
|
|
16
|
+
defaultValue?: string[];
|
|
17
|
+
orientation?: "horizontal" | "vertical";
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
onValueChange?: (value: string[]) => void;
|
|
20
|
+
}
|
|
21
|
+
interface ToggleGroupState {
|
|
22
|
+
value: Signal<string[]>;
|
|
23
|
+
disabled: Signal<boolean>;
|
|
24
|
+
}
|
|
25
|
+
interface ToggleGroupElements {
|
|
26
|
+
root: HTMLDivElement;
|
|
27
|
+
}
|
|
28
|
+
declare const ToggleGroup: {
|
|
29
|
+
Root: (options?: ToggleGroupOptions) => ToggleGroupElements & {
|
|
30
|
+
state: ToggleGroupState;
|
|
31
|
+
Item: (value: string) => HTMLButtonElement;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export { ToggleGroupState, ToggleGroupOptions, ToggleGroupElements, ToggleGroup };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ToggleGroup
|
|
3
|
+
} from "../../shared/chunk-gt0wth9h.js";
|
|
4
|
+
import"../../shared/chunk-e2v1c9ex.js";
|
|
5
|
+
import"../../shared/chunk-jctqs9m4.js";
|
|
6
|
+
import"../../shared/chunk-vvjyx7fe.js";
|
|
7
|
+
import"../../shared/chunk-dpsgb1xw.js";
|
|
8
|
+
export {
|
|
9
|
+
ToggleGroup
|
|
10
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Signal } from "@vertz/ui";
|
|
2
|
+
interface ElementAttrs {
|
|
3
|
+
class?: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
style?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
role?: string;
|
|
8
|
+
tabindex?: number | string;
|
|
9
|
+
hidden?: boolean | string;
|
|
10
|
+
autofocus?: boolean;
|
|
11
|
+
[key: `data-${string}`]: string | undefined;
|
|
12
|
+
[key: `aria-${string}`]: string | undefined;
|
|
13
|
+
}
|
|
14
|
+
import { Middleware, Placement, Strategy } from "@floating-ui/dom";
|
|
15
|
+
interface FloatingOptions {
|
|
16
|
+
placement?: Placement;
|
|
17
|
+
strategy?: Strategy;
|
|
18
|
+
offset?: number;
|
|
19
|
+
flip?: boolean;
|
|
20
|
+
shift?: boolean;
|
|
21
|
+
middleware?: Middleware[];
|
|
22
|
+
matchReferenceWidth?: boolean;
|
|
23
|
+
portal?: boolean;
|
|
24
|
+
/** Override the reference element used for positioning (e.g., a custom trigger wrapping the primitive trigger). */
|
|
25
|
+
referenceElement?: HTMLElement;
|
|
26
|
+
}
|
|
27
|
+
interface TooltipOptions extends ElementAttrs {
|
|
28
|
+
delay?: number;
|
|
29
|
+
onOpenChange?: (open: boolean) => void;
|
|
30
|
+
positioning?: FloatingOptions;
|
|
31
|
+
}
|
|
32
|
+
interface TooltipState {
|
|
33
|
+
open: Signal<boolean>;
|
|
34
|
+
}
|
|
35
|
+
interface TooltipElements {
|
|
36
|
+
trigger: HTMLElement;
|
|
37
|
+
content: HTMLDivElement;
|
|
38
|
+
}
|
|
39
|
+
declare const Tooltip: {
|
|
40
|
+
Root: (options?: TooltipOptions) => TooltipElements & {
|
|
41
|
+
state: TooltipState;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export { TooltipState, TooltipOptions, TooltipElements, Tooltip };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tooltip
|
|
3
|
+
} from "../../shared/chunk-9hj9p7s2.js";
|
|
4
|
+
import"../../shared/chunk-0mcr52hc.js";
|
|
5
|
+
import"../../shared/chunk-jctqs9m4.js";
|
|
6
|
+
import"../../shared/chunk-vvjyx7fe.js";
|
|
7
|
+
import"../../shared/chunk-dpsgb1xw.js";
|
|
8
|
+
import"../../shared/chunk-8y1jf6xr.js";
|
|
9
|
+
export {
|
|
10
|
+
Tooltip
|
|
11
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { onAnimationsComplete } from "@vertz/ui/internals";
|
|
2
|
+
/**
|
|
3
|
+
* Set aria-expanded on an element.
|
|
4
|
+
*/
|
|
5
|
+
declare function setExpanded(el: HTMLElement, expanded: boolean): void;
|
|
6
|
+
/**
|
|
7
|
+
* Toggle aria-expanded on an element. Returns the new value.
|
|
8
|
+
*/
|
|
9
|
+
declare function toggleExpanded(el: HTMLElement): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Set aria-selected on an element.
|
|
12
|
+
*/
|
|
13
|
+
declare function setSelected(el: HTMLElement, selected: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Set aria-hidden on an element and toggle visual display.
|
|
16
|
+
*
|
|
17
|
+
* aria-hidden alone only affects assistive technology — it does not visually
|
|
18
|
+
* hide the element. We pair it with style.display so that primitives like
|
|
19
|
+
* Dialog, Tabs, and Tooltip actually disappear when hidden.
|
|
20
|
+
*/
|
|
21
|
+
declare function setHidden(el: HTMLElement, hidden: boolean): void;
|
|
22
|
+
/**
|
|
23
|
+
* Hide an element after its CSS exit animations complete.
|
|
24
|
+
* Sets aria-hidden immediately for screen readers, but defers
|
|
25
|
+
* style.display = 'none' until animations finish.
|
|
26
|
+
*
|
|
27
|
+
* For showing (hidden=false), the display is set immediately
|
|
28
|
+
* so enter animations can play.
|
|
29
|
+
*/
|
|
30
|
+
declare function setHiddenAnimated(el: HTMLElement, hidden: boolean): void;
|
|
31
|
+
/**
|
|
32
|
+
* Set aria-checked on an element. Supports boolean and 'mixed' for indeterminate.
|
|
33
|
+
*/
|
|
34
|
+
declare function setChecked(el: HTMLElement, checked: boolean | "mixed"): void;
|
|
35
|
+
/**
|
|
36
|
+
* Set aria-disabled on an element.
|
|
37
|
+
*/
|
|
38
|
+
declare function setDisabled(el: HTMLElement, disabled: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* Set data-state attribute for CSS styling hooks.
|
|
41
|
+
*/
|
|
42
|
+
declare function setDataState(el: HTMLElement, state: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Link two elements with aria-controls.
|
|
45
|
+
*/
|
|
46
|
+
declare function setControls(trigger: HTMLElement, contentId: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Link an element to its label via aria-labelledby.
|
|
49
|
+
*/
|
|
50
|
+
declare function setLabelledBy(el: HTMLElement, labelId: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Link an element to its description via aria-describedby.
|
|
53
|
+
*/
|
|
54
|
+
declare function setDescribedBy(el: HTMLElement, descriptionId: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Set aria-valuenow, aria-valuemin, and aria-valuemax for range widgets.
|
|
57
|
+
*/
|
|
58
|
+
declare function setValueRange(el: HTMLElement, now: number, min: number, max: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* Shared dismiss utility for floating elements.
|
|
61
|
+
* Handles click-outside and Escape key dismissal.
|
|
62
|
+
*/
|
|
63
|
+
interface DismissOptions {
|
|
64
|
+
onDismiss: () => void;
|
|
65
|
+
insideElements: HTMLElement[];
|
|
66
|
+
escapeKey?: boolean;
|
|
67
|
+
clickOutside?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Set up dismissal listeners (click-outside + Escape key).
|
|
71
|
+
* Returns a cleanup function that removes all listeners.
|
|
72
|
+
*/
|
|
73
|
+
declare function createDismiss(options: DismissOptions): () => void;
|
|
74
|
+
import { Middleware, Placement, Strategy, VirtualElement } from "@floating-ui/dom";
|
|
75
|
+
interface FloatingOptions {
|
|
76
|
+
placement?: Placement;
|
|
77
|
+
strategy?: Strategy;
|
|
78
|
+
offset?: number;
|
|
79
|
+
flip?: boolean;
|
|
80
|
+
shift?: boolean;
|
|
81
|
+
middleware?: Middleware[];
|
|
82
|
+
matchReferenceWidth?: boolean;
|
|
83
|
+
portal?: boolean;
|
|
84
|
+
/** Override the reference element used for positioning (e.g., a custom trigger wrapping the primitive trigger). */
|
|
85
|
+
referenceElement?: HTMLElement;
|
|
86
|
+
}
|
|
87
|
+
interface FloatingResult {
|
|
88
|
+
cleanup: () => void;
|
|
89
|
+
update: () => Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Position a floating element relative to a reference element.
|
|
93
|
+
* Uses @floating-ui/dom under the hood for robust viewport-aware positioning.
|
|
94
|
+
*/
|
|
95
|
+
declare function createFloatingPosition(reference: HTMLElement | VirtualElement, floating: HTMLElement, options?: FloatingOptions): FloatingResult;
|
|
96
|
+
/**
|
|
97
|
+
* Create a virtual element for positioning at mouse coordinates (e.g., context menu).
|
|
98
|
+
*/
|
|
99
|
+
declare function virtualElement(x: number, y: number): VirtualElement;
|
|
100
|
+
/**
|
|
101
|
+
* Get all focusable elements within a container.
|
|
102
|
+
*/
|
|
103
|
+
declare function getFocusableElements(container: HTMLElement): HTMLElement[];
|
|
104
|
+
/**
|
|
105
|
+
* Create a focus trap within a container element.
|
|
106
|
+
* When Tab is pressed at the last element, focus wraps to the first.
|
|
107
|
+
* When Shift+Tab is pressed at the first element, focus wraps to the last.
|
|
108
|
+
*
|
|
109
|
+
* Returns a cleanup function to remove the trap.
|
|
110
|
+
*/
|
|
111
|
+
declare function trapFocus(container: HTMLElement): () => void;
|
|
112
|
+
/**
|
|
113
|
+
* Focus the first focusable element within a container.
|
|
114
|
+
*/
|
|
115
|
+
declare function focusFirst(container: HTMLElement): void;
|
|
116
|
+
/**
|
|
117
|
+
* Save the currently focused element and return a function to restore focus.
|
|
118
|
+
*/
|
|
119
|
+
declare function saveFocus(): () => void;
|
|
120
|
+
/**
|
|
121
|
+
* Apply roving tabindex to a set of elements.
|
|
122
|
+
* Only the active item has tabindex="0"; all others have tabindex="-1".
|
|
123
|
+
*/
|
|
124
|
+
declare function setRovingTabindex(items: HTMLElement[], activeIndex: number): void;
|
|
125
|
+
/**
|
|
126
|
+
* Generate a unique ID string with an optional prefix.
|
|
127
|
+
* IDs are deterministic within a session (incrementing counter).
|
|
128
|
+
*/
|
|
129
|
+
declare function uniqueId(prefix?: string): string;
|
|
130
|
+
/**
|
|
131
|
+
* Generate a pair of linked IDs for trigger/content relationships.
|
|
132
|
+
* Returns { triggerId, contentId } for use with aria-controls / aria-labelledby.
|
|
133
|
+
*/
|
|
134
|
+
declare function linkedIds(prefix?: string): {
|
|
135
|
+
triggerId: string;
|
|
136
|
+
contentId: string;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Reset the ID counter (useful for tests).
|
|
140
|
+
*/
|
|
141
|
+
declare function resetIdCounter(): void;
|
|
142
|
+
/**
|
|
143
|
+
* Keyboard event helpers for WAI-ARIA patterns.
|
|
144
|
+
* Provides key constants and navigation handlers for common patterns.
|
|
145
|
+
*/
|
|
146
|
+
declare const Keys: {
|
|
147
|
+
readonly Enter: "Enter";
|
|
148
|
+
readonly Space: " ";
|
|
149
|
+
readonly Escape: "Escape";
|
|
150
|
+
readonly ArrowUp: "ArrowUp";
|
|
151
|
+
readonly ArrowDown: "ArrowDown";
|
|
152
|
+
readonly ArrowLeft: "ArrowLeft";
|
|
153
|
+
readonly ArrowRight: "ArrowRight";
|
|
154
|
+
readonly Home: "Home";
|
|
155
|
+
readonly End: "End";
|
|
156
|
+
readonly Tab: "Tab";
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Check if a keyboard event matches one of the given keys.
|
|
160
|
+
*/
|
|
161
|
+
declare function isKey(event: KeyboardEvent, ...keys: string[]): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Handle arrow key navigation within a list of elements.
|
|
164
|
+
* Supports ArrowUp/Down for vertical lists, ArrowLeft/Right for horizontal.
|
|
165
|
+
* Also supports Home/End for jumping to first/last.
|
|
166
|
+
*/
|
|
167
|
+
declare function handleListNavigation(event: KeyboardEvent, items: HTMLElement[], options?: {
|
|
168
|
+
orientation?: "vertical" | "horizontal";
|
|
169
|
+
loop?: boolean;
|
|
170
|
+
}): HTMLElement | null;
|
|
171
|
+
/**
|
|
172
|
+
* Handle activation keys (Enter and Space).
|
|
173
|
+
* Calls the handler and prevents default behavior.
|
|
174
|
+
*/
|
|
175
|
+
declare function handleActivation(event: KeyboardEvent, handler: () => void): void;
|
|
176
|
+
export { virtualElement, uniqueId, trapFocus, toggleExpanded, setValueRange, setSelected, setRovingTabindex, setLabelledBy, setHiddenAnimated, setHidden, setExpanded, setDisabled, setDescribedBy, setDataState, setControls, setChecked, saveFocus, resetIdCounter, onAnimationsComplete, linkedIds, isKey, handleListNavigation, handleActivation, getFocusableElements, focusFirst, createFloatingPosition, createDismiss, Keys, FloatingResult, FloatingOptions, DismissOptions };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDismiss
|
|
3
|
+
} from "../shared/chunk-a6wp8c32.js";
|
|
4
|
+
import {
|
|
5
|
+
focusFirst,
|
|
6
|
+
getFocusableElements,
|
|
7
|
+
saveFocus,
|
|
8
|
+
setRovingTabindex,
|
|
9
|
+
trapFocus
|
|
10
|
+
} from "../shared/chunk-e2v1c9ex.js";
|
|
11
|
+
import {
|
|
12
|
+
createFloatingPosition,
|
|
13
|
+
virtualElement
|
|
14
|
+
} from "../shared/chunk-0mcr52hc.js";
|
|
15
|
+
import {
|
|
16
|
+
Keys,
|
|
17
|
+
handleActivation,
|
|
18
|
+
handleListNavigation,
|
|
19
|
+
isKey
|
|
20
|
+
} from "../shared/chunk-jctqs9m4.js";
|
|
21
|
+
import {
|
|
22
|
+
setChecked,
|
|
23
|
+
setControls,
|
|
24
|
+
setDataState,
|
|
25
|
+
setDescribedBy,
|
|
26
|
+
setDisabled,
|
|
27
|
+
setExpanded,
|
|
28
|
+
setHidden,
|
|
29
|
+
setHiddenAnimated,
|
|
30
|
+
setLabelledBy,
|
|
31
|
+
setSelected,
|
|
32
|
+
setValueRange,
|
|
33
|
+
toggleExpanded
|
|
34
|
+
} from "../shared/chunk-vvjyx7fe.js";
|
|
35
|
+
import {
|
|
36
|
+
linkedIds,
|
|
37
|
+
resetIdCounter,
|
|
38
|
+
uniqueId
|
|
39
|
+
} from "../shared/chunk-8y1jf6xr.js";
|
|
40
|
+
|
|
41
|
+
// src/utils.ts
|
|
42
|
+
import { onAnimationsComplete } from "@vertz/ui/internals";
|
|
43
|
+
export {
|
|
44
|
+
virtualElement,
|
|
45
|
+
uniqueId,
|
|
46
|
+
trapFocus,
|
|
47
|
+
toggleExpanded,
|
|
48
|
+
setValueRange,
|
|
49
|
+
setSelected,
|
|
50
|
+
setRovingTabindex,
|
|
51
|
+
setLabelledBy,
|
|
52
|
+
setHiddenAnimated,
|
|
53
|
+
setHidden,
|
|
54
|
+
setExpanded,
|
|
55
|
+
setDisabled,
|
|
56
|
+
setDescribedBy,
|
|
57
|
+
setDataState,
|
|
58
|
+
setControls,
|
|
59
|
+
setChecked,
|
|
60
|
+
saveFocus,
|
|
61
|
+
resetIdCounter,
|
|
62
|
+
onAnimationsComplete,
|
|
63
|
+
linkedIds,
|
|
64
|
+
isKey,
|
|
65
|
+
handleListNavigation,
|
|
66
|
+
handleActivation,
|
|
67
|
+
getFocusableElements,
|
|
68
|
+
focusFirst,
|
|
69
|
+
createFloatingPosition,
|
|
70
|
+
createDismiss,
|
|
71
|
+
Keys
|
|
72
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertz/ui-primitives",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Headless UI primitives for Vertz — Accordion, Dialog, Select, and more",
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"access": "public",
|
|
14
14
|
"provenance": true
|
|
15
15
|
},
|
|
16
|
-
"main": "dist/index.js",
|
|
17
|
-
"types": "dist/index.d.ts",
|
|
16
|
+
"main": "dist/src/index.js",
|
|
17
|
+
"types": "dist/src/index.d.ts",
|
|
18
18
|
"exports": {
|
|
19
19
|
".": {
|
|
20
|
-
"import": "./dist/index.js",
|
|
21
|
-
"types": "./dist/index.d.ts"
|
|
20
|
+
"import": "./dist/src/index.js",
|
|
21
|
+
"types": "./dist/src/index.d.ts"
|
|
22
22
|
},
|
|
23
23
|
"./utils": {
|
|
24
|
-
"import": "./dist/utils.js",
|
|
25
|
-
"types": "./dist/utils.d.ts"
|
|
24
|
+
"import": "./dist/src/utils.js",
|
|
25
|
+
"types": "./dist/src/utils.d.ts"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@floating-ui/dom": "^1.7.5",
|
|
39
|
-
"@vertz/ui": "^0.2.
|
|
39
|
+
"@vertz/ui": "^0.2.16"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@happy-dom/global-registrator": "^20.7.0",
|
|
43
|
-
"@vertz/ui-compiler": "^0.2.
|
|
43
|
+
"@vertz/ui-compiler": "^0.2.16",
|
|
44
44
|
"bunup": "^0.16.31",
|
|
45
45
|
"happy-dom": "^20.7.0",
|
|
46
46
|
"typescript": "^5.7.0"
|
|
@@ -48,5 +48,7 @@
|
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=22"
|
|
50
50
|
},
|
|
51
|
-
"sideEffects":
|
|
51
|
+
"sideEffects": [
|
|
52
|
+
"./dist/shared/*.js"
|
|
53
|
+
]
|
|
52
54
|
}
|