@vertz/ui-primitives 0.2.16 → 0.2.18

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.
Files changed (117) hide show
  1. package/dist/shared/chunk-18y8gfk0.js +308 -0
  2. package/dist/shared/chunk-4085nbdq.js +196 -0
  3. package/dist/shared/chunk-4da5zksy.js +46 -0
  4. package/dist/shared/chunk-7ffg0caj.js +265 -0
  5. package/dist/shared/{chunk-w06tst6x.js → chunk-7kpsyjd7.js} +9 -5
  6. package/dist/shared/chunk-7krvqrwq.js +177 -0
  7. package/dist/shared/chunk-8ak7vdk1.js +151 -0
  8. package/dist/shared/chunk-8nk0ya7a.js +163 -0
  9. package/dist/shared/chunk-8tvzqry6.js +218 -0
  10. package/dist/shared/{chunk-qpfqyrc5.js → chunk-96d9nr7y.js} +1 -1
  11. package/dist/shared/chunk-9hj9p7s2.js +95 -0
  12. package/dist/shared/chunk-avxcmmk6.js +178 -0
  13. package/dist/shared/chunk-bew4bjgf.js +165 -0
  14. package/dist/shared/chunk-dpsgb1xw.js +18 -0
  15. package/dist/shared/chunk-g9qvd20g.js +133 -0
  16. package/dist/shared/chunk-gkddsbmh.js +73 -0
  17. package/dist/shared/chunk-gt0wth9h.js +128 -0
  18. package/dist/shared/chunk-hr9hx58m.js +71 -0
  19. package/dist/shared/{chunk-n92bvn5d.js → chunk-j4cm8avr.js} +85 -59
  20. package/dist/shared/chunk-jz0s6srh.js +161 -0
  21. package/dist/shared/chunk-kg27s15c.js +282 -0
  22. package/dist/shared/chunk-m1ptgp1s.js +142 -0
  23. package/dist/shared/{chunk-9cqe2q6e.js → chunk-n9nwx58j.js} +9 -5
  24. package/dist/shared/chunk-ppcv3ehd.js +85 -0
  25. package/dist/shared/{chunk-vq9tfzh8.js → chunk-rnjm61t0.js} +5 -1
  26. package/dist/shared/chunk-sqs8kyb2.js +288 -0
  27. package/dist/shared/chunk-tfyg0qrp.js +117 -0
  28. package/dist/shared/chunk-ttsyf6ma.js +239 -0
  29. package/dist/shared/chunk-x0we8gcy.js +219 -0
  30. package/dist/shared/{chunk-6pnjrst7.js → chunk-x2hz98qn.js} +2 -2
  31. package/dist/shared/chunk-yr9yzpvq.js +107 -0
  32. package/dist/src/accordion/accordion.d.ts +14 -2
  33. package/dist/src/accordion/accordion.js +2 -1
  34. package/dist/src/badge/badge.d.ts +13 -1
  35. package/dist/src/badge/badge.js +2 -1
  36. package/dist/src/button/button.d.ts +16 -14
  37. package/dist/src/button/button.js +2 -2
  38. package/dist/src/calendar/calendar.d.ts +14 -2
  39. package/dist/src/calendar/calendar.js +2 -1
  40. package/dist/src/carousel/carousel.d.ts +14 -2
  41. package/dist/src/carousel/carousel.js +2 -1
  42. package/dist/src/checkbox/checkbox.d.ts +15 -13
  43. package/dist/src/checkbox/checkbox.js +2 -2
  44. package/dist/src/collapsible/collapsible.d.ts +14 -2
  45. package/dist/src/collapsible/collapsible.js +2 -1
  46. package/dist/src/combobox/combobox.d.ts +14 -2
  47. package/dist/src/combobox/combobox.js +2 -1
  48. package/dist/src/command/command.d.ts +14 -2
  49. package/dist/src/command/command.js +2 -1
  50. package/dist/src/context-menu/context-menu.d.ts +14 -2
  51. package/dist/src/context-menu/context-menu.js +2 -1
  52. package/dist/src/date-picker/date-picker.js +4 -3
  53. package/dist/src/dialog/dialog.d.ts +14 -2
  54. package/dist/src/dialog/dialog.js +2 -1
  55. package/dist/src/dropdown-menu/dropdown-menu.d.ts +13 -1
  56. package/dist/src/dropdown-menu/dropdown-menu.js +3 -2
  57. package/dist/src/hover-card/hover-card.d.ts +14 -2
  58. package/dist/src/hover-card/hover-card.js +2 -1
  59. package/dist/src/index.d.ts +132 -140
  60. package/dist/src/index.js +31 -30
  61. package/dist/src/menu/menu.d.ts +14 -2
  62. package/dist/src/menu/menu.js +2 -1
  63. package/dist/src/menubar/menubar.d.ts +14 -2
  64. package/dist/src/menubar/menubar.js +2 -1
  65. package/dist/src/navigation-menu/navigation-menu.d.ts +14 -2
  66. package/dist/src/navigation-menu/navigation-menu.js +2 -1
  67. package/dist/src/popover/popover.d.ts +14 -2
  68. package/dist/src/popover/popover.js +2 -1
  69. package/dist/src/progress/progress.d.ts +14 -2
  70. package/dist/src/progress/progress.js +2 -1
  71. package/dist/src/radio/radio.d.ts +14 -2
  72. package/dist/src/radio/radio.js +2 -1
  73. package/dist/src/resizable-panel/resizable-panel.d.ts +14 -2
  74. package/dist/src/resizable-panel/resizable-panel.js +2 -1
  75. package/dist/src/scroll-area/scroll-area.d.ts +14 -2
  76. package/dist/src/scroll-area/scroll-area.js +2 -1
  77. package/dist/src/select/select.d.ts +14 -2
  78. package/dist/src/select/select.js +2 -1
  79. package/dist/src/slider/slider.d.ts +14 -2
  80. package/dist/src/slider/slider.js +2 -1
  81. package/dist/src/switch/switch.d.ts +13 -1
  82. package/dist/src/switch/switch.js +2 -1
  83. package/dist/src/tabs/tabs.d.ts +14 -2
  84. package/dist/src/tabs/tabs.js +2 -1
  85. package/dist/src/toast/toast.d.ts +14 -2
  86. package/dist/src/toast/toast.js +2 -1
  87. package/dist/src/toggle/toggle.d.ts +13 -1
  88. package/dist/src/toggle/toggle.js +2 -1
  89. package/dist/src/toggle-group/toggle-group.d.ts +14 -2
  90. package/dist/src/toggle-group/toggle-group.js +2 -1
  91. package/dist/src/tooltip/tooltip.d.ts +14 -2
  92. package/dist/src/tooltip/tooltip.js +2 -1
  93. package/package.json +3 -3
  94. package/dist/shared/chunk-2h5qpc00.js +0 -98
  95. package/dist/shared/chunk-31yptvbf.js +0 -151
  96. package/dist/shared/chunk-3pantb0p.js +0 -108
  97. package/dist/shared/chunk-3s6s6f06.js +0 -61
  98. package/dist/shared/chunk-48v8j0vh.js +0 -267
  99. package/dist/shared/chunk-6dmt4513.js +0 -78
  100. package/dist/shared/chunk-6sqwjfg8.js +0 -169
  101. package/dist/shared/chunk-8qfeqrrz.js +0 -179
  102. package/dist/shared/chunk-bcfzteh0.js +0 -148
  103. package/dist/shared/chunk-cr9sbwns.js +0 -235
  104. package/dist/shared/chunk-cvbf1js1.js +0 -52
  105. package/dist/shared/chunk-dkhst4wv.js +0 -97
  106. package/dist/shared/chunk-e3aj5yw4.js +0 -115
  107. package/dist/shared/chunk-fv1y77tn.js +0 -225
  108. package/dist/shared/chunk-h42bk324.js +0 -58
  109. package/dist/shared/chunk-h9m9x5my.js +0 -119
  110. package/dist/shared/chunk-qq0e0gym.js +0 -73
  111. package/dist/shared/chunk-tk1k1bet.js +0 -93
  112. package/dist/shared/chunk-tvpgeswh.js +0 -216
  113. package/dist/shared/chunk-vcp10kne.js +0 -175
  114. package/dist/shared/chunk-ve006hmy.js +0 -51
  115. package/dist/shared/chunk-vx1ajy2z.js +0 -115
  116. package/dist/shared/chunk-wnttq0gv.js +0 -49
  117. package/dist/shared/chunk-x6qzr3g6.js +0 -100
@@ -1,216 +0,0 @@
1
- import {
2
- createDismiss
3
- } from "./chunk-a6wp8c32.js";
4
- import {
5
- createFloatingPosition
6
- } from "./chunk-0mcr52hc.js";
7
- import {
8
- Keys,
9
- handleListNavigation,
10
- isKey
11
- } from "./chunk-jctqs9m4.js";
12
- import {
13
- setDataState,
14
- setExpanded,
15
- setHidden,
16
- setHiddenAnimated
17
- } from "./chunk-vvjyx7fe.js";
18
- import {
19
- linkedIds
20
- } from "./chunk-8y1jf6xr.js";
21
-
22
- // src/menu/menu.ts
23
- import { signal } from "@vertz/ui";
24
- var Menu = {
25
- Root(options = {}) {
26
- const { onSelect, positioning } = options;
27
- const ids = linkedIds("menu");
28
- const state = {
29
- open: signal(false),
30
- activeIndex: signal(-1)
31
- };
32
- const items = [];
33
- let floatingCleanup = null;
34
- let dismissCleanup = null;
35
- const trigger = document.createElement("button");
36
- trigger.setAttribute("type", "button");
37
- trigger.id = ids.triggerId;
38
- trigger.setAttribute("aria-controls", ids.contentId);
39
- trigger.setAttribute("aria-haspopup", "menu");
40
- setExpanded(trigger, false);
41
- setDataState(trigger, "closed");
42
- const content = document.createElement("div");
43
- content.setAttribute("role", "menu");
44
- content.setAttribute("tabindex", "-1");
45
- content.id = ids.contentId;
46
- setHidden(content, true);
47
- setDataState(content, "closed");
48
- function handleClickOutside(event) {
49
- const target = event.target;
50
- if (!trigger.contains(target) && !content.contains(target)) {
51
- close();
52
- }
53
- }
54
- function open(activateFirst = false) {
55
- state.open.value = true;
56
- setExpanded(trigger, true);
57
- setHidden(content, false);
58
- setDataState(trigger, "open");
59
- setDataState(content, "open");
60
- if (positioning) {
61
- const ref = positioning.referenceElement ?? trigger;
62
- const result = createFloatingPosition(ref, content, positioning);
63
- floatingCleanup = result.cleanup;
64
- dismissCleanup = createDismiss({
65
- onDismiss: close,
66
- insideElements: [ref, trigger, content],
67
- escapeKey: false
68
- });
69
- } else {
70
- document.addEventListener("mousedown", handleClickOutside);
71
- }
72
- if (activateFirst && items.length > 0) {
73
- state.activeIndex.value = 0;
74
- updateActiveItem(0);
75
- items[0]?.focus();
76
- } else {
77
- state.activeIndex.value = -1;
78
- updateActiveItem(-1);
79
- content.focus();
80
- }
81
- }
82
- function close() {
83
- state.open.value = false;
84
- setExpanded(trigger, false);
85
- setDataState(trigger, "closed");
86
- setDataState(content, "closed");
87
- setHiddenAnimated(content, true);
88
- if (positioning) {
89
- floatingCleanup?.();
90
- floatingCleanup = null;
91
- dismissCleanup?.();
92
- dismissCleanup = null;
93
- } else {
94
- document.removeEventListener("mousedown", handleClickOutside);
95
- }
96
- trigger.focus();
97
- }
98
- function updateActiveItem(index) {
99
- for (let i = 0;i < items.length; i++) {
100
- items[i]?.setAttribute("tabindex", i === index ? "0" : "-1");
101
- }
102
- }
103
- trigger.addEventListener("click", () => {
104
- if (state.open.peek()) {
105
- close();
106
- } else {
107
- open();
108
- }
109
- });
110
- trigger.addEventListener("keydown", (event) => {
111
- if (isKey(event, Keys.ArrowDown, Keys.Enter, Keys.Space)) {
112
- event.preventDefault();
113
- if (!state.open.peek())
114
- open(true);
115
- }
116
- });
117
- content.addEventListener("keydown", (event) => {
118
- if (isKey(event, Keys.Escape)) {
119
- event.preventDefault();
120
- close();
121
- return;
122
- }
123
- if (isKey(event, Keys.Enter, Keys.Space)) {
124
- event.preventDefault();
125
- const active = items[state.activeIndex.peek()];
126
- if (active) {
127
- const val = active.getAttribute("data-value");
128
- if (val !== null) {
129
- onSelect?.(val);
130
- close();
131
- }
132
- }
133
- return;
134
- }
135
- if (state.activeIndex.peek() === -1) {
136
- if (isKey(event, Keys.ArrowDown)) {
137
- event.preventDefault();
138
- state.activeIndex.value = 0;
139
- updateActiveItem(0);
140
- items[0]?.focus();
141
- return;
142
- }
143
- if (isKey(event, Keys.ArrowUp)) {
144
- event.preventDefault();
145
- const last = items.length - 1;
146
- state.activeIndex.value = last;
147
- updateActiveItem(last);
148
- items[last]?.focus();
149
- return;
150
- }
151
- }
152
- const result = handleListNavigation(event, items, { orientation: "vertical" });
153
- if (result) {
154
- const idx = items.indexOf(result);
155
- if (idx >= 0) {
156
- state.activeIndex.value = idx;
157
- updateActiveItem(idx);
158
- }
159
- return;
160
- }
161
- if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
162
- const char = event.key.toLowerCase();
163
- const match = items.find((item) => item.textContent?.toLowerCase().startsWith(char));
164
- if (match) {
165
- const idx = items.indexOf(match);
166
- state.activeIndex.value = idx;
167
- updateActiveItem(idx);
168
- match.focus();
169
- }
170
- }
171
- });
172
- function createItem(value, label, parent) {
173
- const item = document.createElement("div");
174
- item.setAttribute("role", "menuitem");
175
- item.setAttribute("data-value", value);
176
- item.setAttribute("tabindex", "-1");
177
- item.textContent = label ?? value;
178
- item.addEventListener("click", () => {
179
- onSelect?.(value);
180
- close();
181
- });
182
- items.push(item);
183
- (parent ?? content).appendChild(item);
184
- return item;
185
- }
186
- function Item(value, label) {
187
- return createItem(value, label);
188
- }
189
- function Group(label) {
190
- const el = document.createElement("div");
191
- el.setAttribute("role", "group");
192
- el.setAttribute("aria-label", label);
193
- content.appendChild(el);
194
- return {
195
- el,
196
- Item: (value, itemLabel) => createItem(value, itemLabel, el)
197
- };
198
- }
199
- function Separator() {
200
- const hr = document.createElement("hr");
201
- hr.setAttribute("role", "separator");
202
- content.appendChild(hr);
203
- return hr;
204
- }
205
- function Label(text) {
206
- const el = document.createElement("div");
207
- el.setAttribute("role", "none");
208
- el.textContent = text;
209
- content.appendChild(el);
210
- return el;
211
- }
212
- return { trigger, content, state, Item, Group, Separator, Label };
213
- }
214
- };
215
-
216
- export { Menu };
@@ -1,175 +0,0 @@
1
- import {
2
- Keys,
3
- isKey
4
- } from "./chunk-jctqs9m4.js";
5
- import {
6
- setHidden
7
- } from "./chunk-vvjyx7fe.js";
8
- import {
9
- uniqueId
10
- } from "./chunk-8y1jf6xr.js";
11
-
12
- // src/command/command.ts
13
- import { signal } from "@vertz/ui";
14
- var Command = {
15
- Root(options = {}) {
16
- const { filter: customFilter, onSelect, onInputChange, placeholder } = options;
17
- const listId = uniqueId("command-list");
18
- const state = {
19
- inputValue: signal(""),
20
- activeIndex: signal(0)
21
- };
22
- const allItems = [];
23
- const groups = new Map;
24
- const root = document.createElement("div");
25
- const input = document.createElement("input");
26
- input.setAttribute("type", "text");
27
- input.setAttribute("role", "combobox");
28
- input.setAttribute("aria-autocomplete", "list");
29
- input.setAttribute("aria-expanded", "true");
30
- input.setAttribute("aria-controls", listId);
31
- if (placeholder)
32
- input.placeholder = placeholder;
33
- const list = document.createElement("div");
34
- list.setAttribute("role", "listbox");
35
- list.id = listId;
36
- const empty = document.createElement("div");
37
- setHidden(empty, true);
38
- const defaultFilter = (value, search) => {
39
- return value.toLowerCase().includes(search.toLowerCase());
40
- };
41
- const filterFn = customFilter ?? defaultFilter;
42
- function getVisibleItems() {
43
- return allItems.filter((item) => item.getAttribute("aria-hidden") !== "true");
44
- }
45
- function updateActiveItem() {
46
- const visible = getVisibleItems();
47
- const activeIdx = state.activeIndex.peek();
48
- for (const item of allItems) {
49
- item.setAttribute("aria-selected", "false");
50
- }
51
- if (visible.length > 0 && activeIdx >= 0 && activeIdx < visible.length) {
52
- visible[activeIdx]?.setAttribute("aria-selected", "true");
53
- }
54
- }
55
- function runFilter() {
56
- const search = state.inputValue.peek();
57
- let visibleCount = 0;
58
- for (const item of allItems) {
59
- const value = item.getAttribute("data-value") ?? "";
60
- const text = item.textContent ?? "";
61
- const keywords = item.getAttribute("data-keywords") ?? "";
62
- const searchable = `${value} ${text} ${keywords}`;
63
- const matches = search === "" || filterFn(searchable, search);
64
- setHidden(item, !matches);
65
- if (matches)
66
- visibleCount++;
67
- }
68
- for (const [groupEl, group] of groups) {
69
- const hasVisible = group.items.some((item) => item.getAttribute("aria-hidden") !== "true");
70
- setHidden(group.heading, !hasVisible);
71
- if (!hasVisible) {
72
- groupEl.style.display = "none";
73
- } else {
74
- groupEl.style.display = "";
75
- }
76
- }
77
- setHidden(empty, visibleCount > 0);
78
- state.activeIndex.value = 0;
79
- updateActiveItem();
80
- }
81
- input.addEventListener("input", () => {
82
- state.inputValue.value = input.value;
83
- onInputChange?.(input.value);
84
- runFilter();
85
- });
86
- input.addEventListener("keydown", (event) => {
87
- const visible = getVisibleItems();
88
- if (isKey(event, Keys.ArrowDown)) {
89
- event.preventDefault();
90
- const next = Math.min(state.activeIndex.peek() + 1, visible.length - 1);
91
- state.activeIndex.value = next;
92
- updateActiveItem();
93
- return;
94
- }
95
- if (isKey(event, Keys.ArrowUp)) {
96
- event.preventDefault();
97
- const prev = Math.max(state.activeIndex.peek() - 1, 0);
98
- state.activeIndex.value = prev;
99
- updateActiveItem();
100
- return;
101
- }
102
- if (isKey(event, Keys.Enter)) {
103
- event.preventDefault();
104
- const active = visible[state.activeIndex.peek()];
105
- if (active) {
106
- const val = active.getAttribute("data-value");
107
- if (val !== null) {
108
- onSelect?.(val);
109
- }
110
- }
111
- return;
112
- }
113
- if (isKey(event, Keys.Escape)) {
114
- event.preventDefault();
115
- input.value = "";
116
- state.inputValue.value = "";
117
- onInputChange?.("");
118
- runFilter();
119
- }
120
- });
121
- function createItem(value, label, keywords, parent) {
122
- const item = document.createElement("div");
123
- item.setAttribute("role", "option");
124
- item.setAttribute("data-value", value);
125
- item.setAttribute("aria-selected", "false");
126
- item.textContent = label ?? value;
127
- if (keywords && keywords.length > 0) {
128
- item.setAttribute("data-keywords", keywords.join(" "));
129
- }
130
- item.addEventListener("click", () => {
131
- onSelect?.(value);
132
- });
133
- allItems.push(item);
134
- (parent ?? list).appendChild(item);
135
- updateActiveItem();
136
- return item;
137
- }
138
- function Item(value, label, keywords) {
139
- return createItem(value, label, keywords);
140
- }
141
- function Group(label) {
142
- const headingId = uniqueId("command-group");
143
- const el = document.createElement("div");
144
- el.setAttribute("role", "group");
145
- el.setAttribute("aria-labelledby", headingId);
146
- const heading = document.createElement("div");
147
- heading.id = headingId;
148
- heading.textContent = label;
149
- el.appendChild(heading);
150
- const groupItems = [];
151
- groups.set(el, { heading, items: groupItems });
152
- list.appendChild(el);
153
- return {
154
- el,
155
- Item: (value, itemLabel, keywords) => {
156
- const item = createItem(value, itemLabel, keywords, el);
157
- groupItems.push(item);
158
- return item;
159
- }
160
- };
161
- }
162
- function Separator() {
163
- const hr = document.createElement("hr");
164
- hr.setAttribute("role", "separator");
165
- list.appendChild(hr);
166
- return hr;
167
- }
168
- root.appendChild(input);
169
- root.appendChild(list);
170
- root.appendChild(empty);
171
- return { root, input, list, empty, state, Item, Group, Separator };
172
- }
173
- };
174
-
175
- export { Command };
@@ -1,51 +0,0 @@
1
- import {
2
- handleActivation
3
- } from "./chunk-jctqs9m4.js";
4
- import {
5
- setDataState,
6
- setDisabled
7
- } from "./chunk-vvjyx7fe.js";
8
-
9
- // src/button/button.ts
10
- import { signal } from "@vertz/ui";
11
- function createButtonRoot(state, options) {
12
- const el = document.createElement("button");
13
- el.setAttribute("type", "button");
14
- el.setAttribute("role", "button");
15
- setDataState(el, "idle");
16
- if (options.disabled) {
17
- el.disabled = true;
18
- setDisabled(el, true);
19
- }
20
- el.addEventListener("click", () => {
21
- if (state.disabled.peek())
22
- return;
23
- state.pressed.value = true;
24
- setDataState(el, "pressed");
25
- options.onPress?.();
26
- queueMicrotask(() => {
27
- state.pressed.value = false;
28
- setDataState(el, "idle");
29
- });
30
- });
31
- el.addEventListener("keydown", (event) => {
32
- if (state.disabled.peek())
33
- return;
34
- handleActivation(event, () => {
35
- el.click();
36
- });
37
- });
38
- return el;
39
- }
40
- var Button = {
41
- Root(options = {}) {
42
- const state = {
43
- disabled: signal(options.disabled ?? false),
44
- pressed: signal(false)
45
- };
46
- const root = createButtonRoot(state, options);
47
- return { root, state };
48
- }
49
- };
50
-
51
- export { Button };
@@ -1,115 +0,0 @@
1
- import {
2
- Keys,
3
- isKey
4
- } from "./chunk-jctqs9m4.js";
5
- import {
6
- setDataState,
7
- setValueRange
8
- } from "./chunk-vvjyx7fe.js";
9
- import {
10
- uniqueId
11
- } from "./chunk-8y1jf6xr.js";
12
-
13
- // src/slider/slider.ts
14
- import { signal } from "@vertz/ui";
15
- var Slider = {
16
- Root(options = {}) {
17
- const {
18
- defaultValue = 0,
19
- min = 0,
20
- max = 100,
21
- step = 1,
22
- disabled = false,
23
- onValueChange
24
- } = options;
25
- const state = {
26
- value: signal(defaultValue),
27
- disabled: signal(disabled)
28
- };
29
- const root = document.createElement("div");
30
- root.id = uniqueId("slider");
31
- setDataState(root, disabled ? "disabled" : "active");
32
- const track = document.createElement("div");
33
- track.setAttribute("data-part", "track");
34
- const thumb = document.createElement("div");
35
- thumb.setAttribute("role", "slider");
36
- thumb.setAttribute("tabindex", disabled ? "-1" : "0");
37
- thumb.setAttribute("data-part", "thumb");
38
- setValueRange(thumb, defaultValue, min, max);
39
- if (disabled) {
40
- thumb.setAttribute("aria-disabled", "true");
41
- }
42
- function clamp(val) {
43
- return Math.min(max, Math.max(min, val));
44
- }
45
- const fill = document.createElement("div");
46
- fill.setAttribute("data-part", "fill");
47
- fill.style.cssText = "position: absolute; height: 100%; border-radius: inherit;";
48
- function updatePosition(pct2) {
49
- thumb.style.left = `${pct2}%`;
50
- fill.style.width = `${pct2}%`;
51
- }
52
- function setValue(val) {
53
- if (state.disabled.peek())
54
- return;
55
- const clamped = clamp(val);
56
- state.value.value = clamped;
57
- setValueRange(thumb, clamped, min, max);
58
- const pct2 = (clamped - min) / (max - min) * 100;
59
- updatePosition(pct2);
60
- setDataState(root, "active");
61
- onValueChange?.(clamped);
62
- }
63
- function valueFromPointer(event) {
64
- const rect = track.getBoundingClientRect();
65
- const pct2 = Math.max(0, Math.min(1, (event.clientX - rect.left) / rect.width));
66
- const raw = min + pct2 * (max - min);
67
- return Math.round(raw / step) * step;
68
- }
69
- thumb.addEventListener("keydown", (event) => {
70
- if (state.disabled.peek())
71
- return;
72
- const current = state.value.peek();
73
- if (isKey(event, Keys.ArrowRight, Keys.ArrowUp)) {
74
- event.preventDefault();
75
- setValue(current + step);
76
- } else if (isKey(event, Keys.ArrowLeft, Keys.ArrowDown)) {
77
- event.preventDefault();
78
- setValue(current - step);
79
- } else if (isKey(event, Keys.Home)) {
80
- event.preventDefault();
81
- setValue(min);
82
- } else if (isKey(event, Keys.End)) {
83
- event.preventDefault();
84
- setValue(max);
85
- }
86
- });
87
- root.addEventListener("pointerdown", (event) => {
88
- if (state.disabled.peek())
89
- return;
90
- event.preventDefault();
91
- setValue(valueFromPointer(event));
92
- thumb.focus();
93
- function onMove(e) {
94
- setValue(valueFromPointer(e));
95
- }
96
- function onUp() {
97
- document.removeEventListener("pointermove", onMove);
98
- document.removeEventListener("pointerup", onUp);
99
- }
100
- document.addEventListener("pointermove", onMove);
101
- document.addEventListener("pointerup", onUp);
102
- });
103
- thumb.style.position = "absolute";
104
- thumb.style.transform = "translate(-50%, -50%)";
105
- track.style.position = "relative";
106
- track.appendChild(fill);
107
- track.appendChild(thumb);
108
- root.appendChild(track);
109
- const pct = (defaultValue - min) / (max - min) * 100;
110
- updatePosition(pct);
111
- return { root, thumb, track, state };
112
- }
113
- };
114
-
115
- export { Slider };
@@ -1,49 +0,0 @@
1
- import {
2
- setDataState,
3
- setValueRange
4
- } from "./chunk-vvjyx7fe.js";
5
- import {
6
- uniqueId
7
- } from "./chunk-8y1jf6xr.js";
8
-
9
- // src/progress/progress.ts
10
- import { signal } from "@vertz/ui";
11
- var Progress = {
12
- Root(options = {}) {
13
- const { defaultValue = 0, min = 0, max = 100 } = options;
14
- const state = { value: signal(defaultValue) };
15
- const root = document.createElement("div");
16
- root.setAttribute("role", "progressbar");
17
- root.id = uniqueId("progress");
18
- setValueRange(root, defaultValue, min, max);
19
- const pct = (defaultValue - min) / (max - min) * 100;
20
- if (pct >= 100) {
21
- setDataState(root, "complete");
22
- } else if (pct > 0) {
23
- setDataState(root, "loading");
24
- } else {
25
- setDataState(root, "idle");
26
- }
27
- const indicator = document.createElement("div");
28
- indicator.setAttribute("data-part", "indicator");
29
- indicator.style.width = `${pct}%`;
30
- root.appendChild(indicator);
31
- function setValue(val) {
32
- const clamped = Math.min(max, Math.max(min, val));
33
- state.value.value = clamped;
34
- setValueRange(root, clamped, min, max);
35
- const p = (clamped - min) / (max - min) * 100;
36
- indicator.style.width = `${p}%`;
37
- if (p >= 100) {
38
- setDataState(root, "complete");
39
- } else if (p > 0) {
40
- setDataState(root, "loading");
41
- } else {
42
- setDataState(root, "idle");
43
- }
44
- }
45
- return { root, indicator, state, setValue };
46
- }
47
- };
48
-
49
- export { Progress };
@@ -1,100 +0,0 @@
1
- import {
2
- Keys,
3
- isKey
4
- } from "./chunk-jctqs9m4.js";
5
- import {
6
- setDataState
7
- } from "./chunk-vvjyx7fe.js";
8
-
9
- // src/carousel/carousel.ts
10
- import { signal } from "@vertz/ui";
11
- var Carousel = {
12
- Root(options = {}) {
13
- const { orientation = "horizontal", loop = false, defaultIndex = 0, onSlideChange } = options;
14
- const state = {
15
- currentIndex: signal(defaultIndex),
16
- slideCount: signal(0)
17
- };
18
- const slides = [];
19
- const root = document.createElement("div");
20
- root.setAttribute("role", "region");
21
- root.setAttribute("aria-roledescription", "carousel");
22
- root.setAttribute("data-orientation", orientation);
23
- const viewport = document.createElement("div");
24
- viewport.style.overflow = "hidden";
25
- const prevButton = document.createElement("button");
26
- prevButton.setAttribute("type", "button");
27
- prevButton.setAttribute("aria-label", "Previous slide");
28
- const nextButton = document.createElement("button");
29
- nextButton.setAttribute("type", "button");
30
- nextButton.setAttribute("aria-label", "Next slide");
31
- function updateSlideVisibility() {
32
- const current = state.currentIndex.peek();
33
- for (let i = 0;i < slides.length; i++) {
34
- const slide = slides[i];
35
- if (!slide)
36
- continue;
37
- slide.setAttribute("aria-hidden", String(i !== current));
38
- slide.setAttribute("aria-label", `Slide ${i + 1} of ${slides.length}`);
39
- setDataState(slide, i === current ? "active" : "inactive");
40
- }
41
- if (!loop) {
42
- prevButton.disabled = current <= 0;
43
- nextButton.disabled = current >= slides.length - 1;
44
- }
45
- const translateProp = orientation === "horizontal" ? "translateX" : "translateY";
46
- viewport.style.transform = `${translateProp}(-${current * 100}%)`;
47
- }
48
- function goTo(index) {
49
- const total = slides.length;
50
- if (total === 0)
51
- return;
52
- let next = index;
53
- if (loop) {
54
- next = (index % total + total) % total;
55
- } else {
56
- next = Math.max(0, Math.min(total - 1, index));
57
- }
58
- if (next === state.currentIndex.peek())
59
- return;
60
- state.currentIndex.value = next;
61
- updateSlideVisibility();
62
- onSlideChange?.(next);
63
- }
64
- function goNext() {
65
- goTo(state.currentIndex.peek() + 1);
66
- }
67
- function goPrev() {
68
- goTo(state.currentIndex.peek() - 1);
69
- }
70
- prevButton.addEventListener("click", goPrev);
71
- nextButton.addEventListener("click", goNext);
72
- root.addEventListener("keydown", (event) => {
73
- const prevKey = orientation === "horizontal" ? Keys.ArrowLeft : Keys.ArrowUp;
74
- const nextKey = orientation === "horizontal" ? Keys.ArrowRight : Keys.ArrowDown;
75
- if (isKey(event, prevKey)) {
76
- event.preventDefault();
77
- goPrev();
78
- }
79
- if (isKey(event, nextKey)) {
80
- event.preventDefault();
81
- goNext();
82
- }
83
- });
84
- function Slide() {
85
- const slide = document.createElement("div");
86
- slide.setAttribute("role", "group");
87
- slide.setAttribute("aria-roledescription", "slide");
88
- slides.push(slide);
89
- state.slideCount.value = slides.length;
90
- viewport.appendChild(slide);
91
- updateSlideVisibility();
92
- return slide;
93
- }
94
- root.appendChild(viewport);
95
- updateSlideVisibility();
96
- return { root, viewport, prevButton, nextButton, state, Slide, goTo, goNext, goPrev };
97
- }
98
- };
99
-
100
- export { Carousel };