tekivex-ui 2.3.0 → 2.5.2
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/README.md +436 -83
- package/dist/TkxForm-BWK4LqY3.js +1461 -0
- package/dist/TkxForm-ljQjX7KD.cjs +15 -0
- package/dist/charts.cjs +1 -0
- package/dist/charts.js +480 -0
- package/dist/headless.cjs +1 -0
- package/dist/headless.js +258 -0
- package/dist/index-BINBzXuY.cjs +2 -0
- package/dist/index-eT_U4qB2.js +512 -0
- package/dist/index.cjs +20 -32
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7942 -8903
- package/dist/src/charts/TkxAreaChart.d.ts +29 -0
- package/dist/src/charts/TkxAreaChart.d.ts.map +1 -0
- package/dist/src/charts/TkxBarChart.d.ts +28 -0
- package/dist/src/charts/TkxBarChart.d.ts.map +1 -0
- package/dist/src/charts/TkxDonutChart.d.ts +23 -0
- package/dist/src/charts/TkxDonutChart.d.ts.map +1 -0
- package/dist/src/charts/TkxLineChart.d.ts +35 -0
- package/dist/src/charts/TkxLineChart.d.ts.map +1 -0
- package/dist/src/charts/TkxPieChart.d.ts +19 -0
- package/dist/src/charts/TkxPieChart.d.ts.map +1 -0
- package/dist/src/charts/TkxRadarChart.d.ts +20 -0
- package/dist/src/charts/TkxRadarChart.d.ts.map +1 -0
- package/dist/src/charts/TkxScatterChart.d.ts +28 -0
- package/dist/src/charts/TkxScatterChart.d.ts.map +1 -0
- package/dist/src/charts/index.d.ts +15 -0
- package/dist/src/charts/index.d.ts.map +1 -0
- package/dist/src/charts/shared.d.ts +33 -0
- package/dist/src/charts/shared.d.ts.map +1 -0
- package/dist/src/components/TkxDataGrid.d.ts +16 -2
- package/dist/src/components/TkxDataGrid.d.ts.map +1 -1
- package/dist/src/components/TkxForm.d.ts +33 -3
- package/dist/src/components/TkxForm.d.ts.map +1 -1
- package/dist/src/components/TkxImage.d.ts.map +1 -1
- package/dist/src/components/TkxTypography.d.ts +1 -1
- package/dist/src/components/TkxTypography.d.ts.map +1 -1
- package/dist/src/engine/tkx.d.ts.map +1 -1
- package/dist/src/headless/index.d.ts +18 -0
- package/dist/src/headless/index.d.ts.map +1 -0
- package/dist/src/headless/useControllable.d.ts +20 -0
- package/dist/src/headless/useControllable.d.ts.map +1 -0
- package/dist/src/headless/useDebounce.d.ts +14 -0
- package/dist/src/headless/useDebounce.d.ts.map +1 -0
- package/dist/src/headless/useDisclosure.d.ts +20 -0
- package/dist/src/headless/useDisclosure.d.ts.map +1 -0
- package/dist/src/headless/useFormState.d.ts +44 -0
- package/dist/src/headless/useFormState.d.ts.map +1 -0
- package/dist/src/headless/useIntersectionObserver.d.ts +23 -0
- package/dist/src/headless/useIntersectionObserver.d.ts.map +1 -0
- package/dist/src/headless/useListSelection.d.ts +29 -0
- package/dist/src/headless/useListSelection.d.ts.map +1 -0
- package/dist/src/headless/useLocalStorage.d.ts +9 -0
- package/dist/src/headless/useLocalStorage.d.ts.map +1 -0
- package/dist/src/headless/useMediaQuery.d.ts +21 -0
- package/dist/src/headless/useMediaQuery.d.ts.map +1 -0
- package/dist/src/headless/useRovingTabIndex.d.ts +33 -0
- package/dist/src/headless/useRovingTabIndex.d.ts.map +1 -0
- package/dist/src/headless/useThrottle.d.ts +9 -0
- package/dist/src/headless/useThrottle.d.ts.map +1 -0
- package/dist/src/i18n/index.d.ts +47 -2
- package/dist/src/i18n/index.d.ts.map +1 -1
- package/dist/src/themes/index.d.ts.map +1 -1
- package/package.json +61 -7
- package/src/charts/TkxAreaChart.tsx +119 -0
- package/src/charts/TkxBarChart.tsx +115 -0
- package/src/charts/TkxDonutChart.tsx +145 -0
- package/src/charts/TkxLineChart.tsx +135 -0
- package/src/charts/TkxPieChart.tsx +82 -0
- package/src/charts/TkxRadarChart.tsx +90 -0
- package/src/charts/TkxScatterChart.tsx +102 -0
- package/src/charts/index.ts +20 -0
- package/src/charts/shared.ts +45 -0
- package/src/components/TkxDataGrid.tsx +532 -268
- package/src/components/TkxForm.tsx +67 -15
- package/src/components/TkxImage.tsx +1 -1
- package/src/components/TkxTypography.tsx +4 -2
- package/src/engine/tkx.ts +60 -3
- package/src/headless/index.ts +44 -0
- package/src/headless/useControllable.ts +40 -0
- package/src/headless/useDebounce.ts +35 -0
- package/src/headless/useDisclosure.ts +28 -0
- package/src/headless/useFormState.ts +111 -0
- package/src/headless/useIntersectionObserver.ts +51 -0
- package/src/headless/useListSelection.ts +101 -0
- package/src/headless/useLocalStorage.ts +46 -0
- package/src/headless/useMediaQuery.ts +37 -0
- package/src/headless/useRovingTabIndex.ts +84 -0
- package/src/headless/useThrottle.ts +46 -0
- package/src/i18n/I18nProvider.tsx +1 -1
- package/src/i18n/index.ts +678 -38
- package/src/themes/index.ts +31 -4
package/dist/headless.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { c as q, h as H, r as J, k as K, s as N, l as U, m as B, n as Q, a as $, e as G, d as W, b as X, p as Y, u as Z, q as _ } from "./TkxForm-BWK4LqY3.js";
|
|
2
|
+
import { f as te, l as ne, m as se, q as re, s as oe, t as ce, F as ue } from "./index-eT_U4qB2.js";
|
|
3
|
+
import { useState as g, useCallback as i, useRef as A, useMemo as O, useEffect as x } from "react";
|
|
4
|
+
function k(e = !1) {
|
|
5
|
+
const [r, t] = g(e), n = i(() => t(!0), []), s = i(() => t(!1), []), c = i(() => t((o) => !o), []);
|
|
6
|
+
return { isOpen: r, open: n, close: s, toggle: c };
|
|
7
|
+
}
|
|
8
|
+
function V({
|
|
9
|
+
count: e,
|
|
10
|
+
initialIndex: r = 0,
|
|
11
|
+
orientation: t = "horizontal",
|
|
12
|
+
loop: n = !0
|
|
13
|
+
}) {
|
|
14
|
+
const [s, c] = g(r), o = A([]), u = i(
|
|
15
|
+
(l) => {
|
|
16
|
+
c((a) => {
|
|
17
|
+
let h = a + l;
|
|
18
|
+
return n ? h = (h % e + e) % e : h = Math.max(0, Math.min(e - 1, h)), requestAnimationFrame(() => {
|
|
19
|
+
var y;
|
|
20
|
+
(y = o.current[h]) == null || y.focus();
|
|
21
|
+
}), h;
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
[e, n]
|
|
25
|
+
), w = i(
|
|
26
|
+
(l) => ({
|
|
27
|
+
tabIndex: l === s ? 0 : -1,
|
|
28
|
+
"data-focused": l === s,
|
|
29
|
+
onFocus: () => c(l),
|
|
30
|
+
onKeyDown: (a) => {
|
|
31
|
+
const h = t === "horizontal" || t === "both", y = t === "vertical" || t === "both";
|
|
32
|
+
h && a.key === "ArrowRight" && (a.preventDefault(), u(1)), h && a.key === "ArrowLeft" && (a.preventDefault(), u(-1)), y && a.key === "ArrowDown" && (a.preventDefault(), u(1)), y && a.key === "ArrowUp" && (a.preventDefault(), u(-1)), a.key === "Home" && (a.preventDefault(), c(0), requestAnimationFrame(() => {
|
|
33
|
+
var p;
|
|
34
|
+
return (p = o.current[0]) == null ? void 0 : p.focus();
|
|
35
|
+
})), a.key === "End" && (a.preventDefault(), c(e - 1), requestAnimationFrame(() => {
|
|
36
|
+
var p;
|
|
37
|
+
return (p = o.current[e - 1]) == null ? void 0 : p.focus();
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
}),
|
|
41
|
+
[s, u, t, e]
|
|
42
|
+
);
|
|
43
|
+
return { focusedIndex: s, setFocusedIndex: c, getItemProps: w };
|
|
44
|
+
}
|
|
45
|
+
function T({
|
|
46
|
+
initialValues: e,
|
|
47
|
+
validate: r
|
|
48
|
+
}) {
|
|
49
|
+
const [t, n] = g({ ...e }), [s, c] = g({}), [o, u] = g({}), w = A(e), l = i((d, b) => {
|
|
50
|
+
n((v) => ({ ...v, [d]: b }));
|
|
51
|
+
}, []), a = i((d) => {
|
|
52
|
+
n((b) => ({ ...b, ...d }));
|
|
53
|
+
}, []), h = i((d) => {
|
|
54
|
+
u((b) => ({ ...b, [d]: !0 }));
|
|
55
|
+
}, []), y = i(() => {
|
|
56
|
+
if (!r) return !0;
|
|
57
|
+
const d = r(t), b = Object.fromEntries(
|
|
58
|
+
Object.entries(d).filter(([, I]) => I != null)
|
|
59
|
+
);
|
|
60
|
+
c(b);
|
|
61
|
+
const v = Object.fromEntries(
|
|
62
|
+
Object.keys(t).map((I) => [I, !0])
|
|
63
|
+
);
|
|
64
|
+
return u(v), Object.keys(b).length === 0;
|
|
65
|
+
}, [t, r]), p = i(() => {
|
|
66
|
+
n({ ...w.current }), c({}), u({});
|
|
67
|
+
}, []), f = Object.keys(t).some(
|
|
68
|
+
(d) => t[d] !== w.current[d]
|
|
69
|
+
), S = Object.keys(s).length === 0, m = i(
|
|
70
|
+
(d) => ({
|
|
71
|
+
value: t[d],
|
|
72
|
+
onChange: (b) => {
|
|
73
|
+
l(d, b.target.value);
|
|
74
|
+
},
|
|
75
|
+
onBlur: () => h(d),
|
|
76
|
+
"aria-invalid": o[d] && s[d] ? !0 : void 0,
|
|
77
|
+
"aria-describedby": s[d] ? `${String(d)}-error` : void 0
|
|
78
|
+
}),
|
|
79
|
+
[t, s, o, l, h]
|
|
80
|
+
);
|
|
81
|
+
return { values: t, errors: s, touched: o, dirty: f, isValid: S, setValue: l, setValues: a, touchField: h, validate: y, reset: p, getFieldProps: m };
|
|
82
|
+
}
|
|
83
|
+
function E({
|
|
84
|
+
items: e,
|
|
85
|
+
initialSelected: r = [],
|
|
86
|
+
multiple: t = !0
|
|
87
|
+
}) {
|
|
88
|
+
const [n, s] = g(() => new Set(r)), c = i((f) => {
|
|
89
|
+
s((S) => {
|
|
90
|
+
const m = new Set(S);
|
|
91
|
+
return m.has(f) ? m.delete(f) : (t || m.clear(), m.add(f)), m;
|
|
92
|
+
});
|
|
93
|
+
}, [t]), o = i((f) => {
|
|
94
|
+
s((S) => {
|
|
95
|
+
if (S.has(f)) return S;
|
|
96
|
+
const m = t ? new Set(S) : /* @__PURE__ */ new Set();
|
|
97
|
+
return m.add(f), m;
|
|
98
|
+
});
|
|
99
|
+
}, [t]), u = i((f) => {
|
|
100
|
+
s((S) => {
|
|
101
|
+
if (!S.has(f)) return S;
|
|
102
|
+
const m = new Set(S);
|
|
103
|
+
return m.delete(f), m;
|
|
104
|
+
});
|
|
105
|
+
}, []), w = i(() => {
|
|
106
|
+
t && s(new Set(e));
|
|
107
|
+
}, [e, t]), l = i(() => s(/* @__PURE__ */ new Set()), []), a = i(() => {
|
|
108
|
+
s((f) => e.every((m) => f.has(m)) ? /* @__PURE__ */ new Set() : new Set(e));
|
|
109
|
+
}, [e]), h = e.length > 0 && e.every((f) => n.has(f)), y = e.some((f) => n.has(f)), p = O(() => Array.from(n), [n]);
|
|
110
|
+
return {
|
|
111
|
+
selected: n,
|
|
112
|
+
isSelected: i((f) => n.has(f), [n]),
|
|
113
|
+
toggle: c,
|
|
114
|
+
select: o,
|
|
115
|
+
deselect: u,
|
|
116
|
+
selectAll: w,
|
|
117
|
+
deselectAll: l,
|
|
118
|
+
toggleAll: a,
|
|
119
|
+
allSelected: h,
|
|
120
|
+
someSelected: y,
|
|
121
|
+
selectedCount: n.size,
|
|
122
|
+
selectedArray: p
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function F(e, r) {
|
|
126
|
+
const [t, n] = g(e);
|
|
127
|
+
return x(() => {
|
|
128
|
+
const s = setTimeout(() => n(e), r);
|
|
129
|
+
return () => clearTimeout(s);
|
|
130
|
+
}, [e, r]), t;
|
|
131
|
+
}
|
|
132
|
+
function j(e, r) {
|
|
133
|
+
const [t, n] = g(e), s = A(Date.now());
|
|
134
|
+
return x(() => {
|
|
135
|
+
const c = Date.now(), o = r - (c - s.current);
|
|
136
|
+
if (o <= 0)
|
|
137
|
+
s.current = c, n(e);
|
|
138
|
+
else {
|
|
139
|
+
const u = setTimeout(() => {
|
|
140
|
+
s.current = Date.now(), n(e);
|
|
141
|
+
}, o);
|
|
142
|
+
return () => clearTimeout(u);
|
|
143
|
+
}
|
|
144
|
+
}, [e, r]), t;
|
|
145
|
+
}
|
|
146
|
+
function C({
|
|
147
|
+
value: e,
|
|
148
|
+
onChange: r,
|
|
149
|
+
defaultValue: t
|
|
150
|
+
}) {
|
|
151
|
+
const n = e !== void 0, [s, c] = g(t), o = A(r);
|
|
152
|
+
o.current = r;
|
|
153
|
+
const u = i(
|
|
154
|
+
(w) => {
|
|
155
|
+
var l;
|
|
156
|
+
n || c(w), (l = o.current) == null || l.call(o, w);
|
|
157
|
+
},
|
|
158
|
+
[n]
|
|
159
|
+
);
|
|
160
|
+
return [n ? e : s, u];
|
|
161
|
+
}
|
|
162
|
+
function R(e) {
|
|
163
|
+
const [r, t] = g(() => typeof window > "u" ? !1 : window.matchMedia(e).matches);
|
|
164
|
+
return x(() => {
|
|
165
|
+
if (typeof window > "u") return;
|
|
166
|
+
const n = window.matchMedia(e);
|
|
167
|
+
t(n.matches);
|
|
168
|
+
const s = (c) => t(c.matches);
|
|
169
|
+
return n.addEventListener("change", s), () => n.removeEventListener("change", s);
|
|
170
|
+
}, [e]), r;
|
|
171
|
+
}
|
|
172
|
+
function M(e, r) {
|
|
173
|
+
const [t, n] = g(() => {
|
|
174
|
+
if (typeof window > "u") return r;
|
|
175
|
+
try {
|
|
176
|
+
const o = window.localStorage.getItem(e);
|
|
177
|
+
return o !== null ? JSON.parse(o) : r;
|
|
178
|
+
} catch {
|
|
179
|
+
return r;
|
|
180
|
+
}
|
|
181
|
+
}), s = i(
|
|
182
|
+
(o) => {
|
|
183
|
+
n((u) => {
|
|
184
|
+
const w = typeof o == "function" ? o(u) : o;
|
|
185
|
+
if (typeof window < "u")
|
|
186
|
+
try {
|
|
187
|
+
window.localStorage.setItem(e, JSON.stringify(w));
|
|
188
|
+
} catch {
|
|
189
|
+
}
|
|
190
|
+
return w;
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
[e]
|
|
194
|
+
), c = i(() => {
|
|
195
|
+
if (n(r), typeof window < "u")
|
|
196
|
+
try {
|
|
197
|
+
window.localStorage.removeItem(e);
|
|
198
|
+
} catch {
|
|
199
|
+
}
|
|
200
|
+
}, [e, r]);
|
|
201
|
+
return [t, s, c];
|
|
202
|
+
}
|
|
203
|
+
function z({
|
|
204
|
+
threshold: e = 0,
|
|
205
|
+
rootMargin: r = "0px",
|
|
206
|
+
root: t = null,
|
|
207
|
+
once: n = !1
|
|
208
|
+
} = {}) {
|
|
209
|
+
const s = A(null), [c, o] = g(null), u = A(null);
|
|
210
|
+
return x(() => {
|
|
211
|
+
const w = s.current;
|
|
212
|
+
if (!(!w || typeof IntersectionObserver > "u"))
|
|
213
|
+
return u.current = new IntersectionObserver(
|
|
214
|
+
([l]) => {
|
|
215
|
+
var a;
|
|
216
|
+
o(l), n && l.isIntersecting && ((a = u.current) == null || a.unobserve(w));
|
|
217
|
+
},
|
|
218
|
+
{ threshold: e, rootMargin: r, root: t }
|
|
219
|
+
), u.current.observe(w), () => {
|
|
220
|
+
var l;
|
|
221
|
+
return (l = u.current) == null ? void 0 : l.disconnect();
|
|
222
|
+
};
|
|
223
|
+
}, [e, r, t, n]), { ref: s, isIntersecting: (c == null ? void 0 : c.isIntersecting) ?? !1, entry: c };
|
|
224
|
+
}
|
|
225
|
+
export {
|
|
226
|
+
te as contrastRatio,
|
|
227
|
+
ne as cssVar,
|
|
228
|
+
q as cx,
|
|
229
|
+
H as extractAtomicCSS,
|
|
230
|
+
se as extractCSS,
|
|
231
|
+
re as injectStyles,
|
|
232
|
+
oe as meetsAA,
|
|
233
|
+
ce as meetsAAA,
|
|
234
|
+
J as resetAtomicCSS,
|
|
235
|
+
ue as resetStyles,
|
|
236
|
+
K as sanitizeProps,
|
|
237
|
+
N as sanitizeString,
|
|
238
|
+
U as tkxListPlugins,
|
|
239
|
+
B as tkxPlugin,
|
|
240
|
+
Q as tkxRemovePlugin,
|
|
241
|
+
$ as useAnnounce,
|
|
242
|
+
G as useClickOutside,
|
|
243
|
+
C as useControllable,
|
|
244
|
+
F as useDebounce,
|
|
245
|
+
k as useDisclosure,
|
|
246
|
+
W as useEscapeKey,
|
|
247
|
+
X as useFocusTrap,
|
|
248
|
+
T as useFormState,
|
|
249
|
+
Y as useHighContrast,
|
|
250
|
+
z as useIntersectionObserver,
|
|
251
|
+
E as useListSelection,
|
|
252
|
+
M as useLocalStorage,
|
|
253
|
+
R as useMediaQuery,
|
|
254
|
+
Z as useReducedMotion,
|
|
255
|
+
V as useRovingTabIndex,
|
|
256
|
+
j as useThrottle,
|
|
257
|
+
_ as useTkxForm
|
|
258
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const u=require("react"),G=2166136261,W=16777619;function v(n){let e=G;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=Math.imul(e,W)>>>0;return e.toString(16).padStart(8,"0")}class M{constructor(e=512){this.cache=new Map,this.hits=0,this.misses=0,this.ceiling=Math.min(e,512)}get(e){if(!this.cache.has(e)){this.misses++;return}this.hits++;const t=this.cache.get(e);return this.cache.delete(e),this.cache.set(e,t),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.ceiling&&this.cache.delete(this.cache.keys().next().value),this.cache.set(e,t)}has(e){return this.cache.has(e)}invalidate(e){e!==void 0?this.cache.delete(e):this.cache.clear()}get size(){return this.cache.size}get cacheHitRate(){const e=this.hits+this.misses;return e===0?0:this.hits/e*100}}const f=new M(512);function $(n,e){const t=f.get(n);if(t!==void 0)return t;const s=e();return f.set(n,s),s}const C=[];let b=!1;const m=[];let y=0,l=0;function _(){const n=C.splice(0),e=performance.now();for(const s of n)try{s()}catch{}const t=performance.now()-e;y+=t,l++,m.push({duration:t,timestamp:Date.now()}),m.length>100&&m.shift()}function H(n){C.push(n),b||(b=!0,queueMicrotask(()=>{_(),b=!1}))}function X(n){const e=n!==void 0?m.slice(-n):m.slice();return{avgRenderTime:l===0?0:y/l,cacheHitRate:f.cacheHitRate,renderCount:l,recent:e}}function Q(n){n!==void 0?f.invalidate(n):f.invalidate()}const Z={hash:v,memoize:$,batchUpdate:H,invalidate:Q,get avgRenderTime(){return l===0?0:y/l},get cacheHitRate(){return f.cacheHitRate},getMetrics:X},x=new Map;function R(n){return n.replace(/([A-Z])/g,"-$1").toLowerCase()}function J(n){return"tkx-"+v(n)}function j(n){const e=J(n);return x.has(e)||x.set(e,n),e}function D(n,...e){const t=n.reduce((r,a,i)=>r+a+(e[i]!==void 0?String(e[i]):""),"");return{className:j(t.trim()),styles:t.trim()}}function z(n){const e=Object.entries(n).map(([s,r])=>`${R(s)}: ${r};`).join(" ");return{className:j(e),styles:e}}const Y={xs:"480px",sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"};function L(n,e){return`@media (min-width: ${Y[n]}) { ${e} }`}function F(n,e){const t=Object.entries(e).map(([s,r])=>{const a=Object.entries(r).map(([i,o])=>`${R(i)}: ${o};`).join(" ");return`${s} { ${a} }`}).join(" ");return`@keyframes ${n} { ${t} }`}function w(n,e){return e!==void 0?`--tkx-${n}: ${e};`:`var(--tkx-${n})`}function A(){return Array.from(x.entries()).map(([n,e])=>`.${n} { ${e} }`).join(`
|
|
2
|
+
`)}function O(){x.clear()}function N(){if(typeof document>"u")return;let n=document.getElementById("tkx-styles");n||(n=document.createElement("style"),n.id="tkx-styles",document.head.appendChild(n)),n.textContent=A()}const ee={css:D,fromObject:z,responsive:L,keyframes:F,cssVar:w,extractCSS:A,injectStyles:N,resetStyles:O};function te(n){const e=n.replace("#",""),t=e.length===3?e.split("").map(i=>i+i).join(""):e,s=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),a=parseInt(t.slice(4,6),16);return[s,r,a]}function S(n){const[e,t,s]=te(n).map(r=>{const a=r/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4});return .2126*e+.7152*t+.0722*s}function d(n,e){const t=S(n),s=S(e),r=Math.max(t,s),a=Math.min(t,s);return(r+.05)/(a+.05)}function g(n,e,t=!1){return d(n,e)>=(t?3:4.5)}function B(n,e,t=!1){return d(n,e)>=(t?4.5:7)}function P(n,e){const s=e??["#ffffff","#000000"];return s.reduce((r,a)=>d(a,n)>d(r,n)?a:r,s[0])}function K(){const n=document.createElement("div"),e=document.createElement("div");for(const t of[n,e])t.setAttribute("aria-atomic","true"),t.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;",document.body.appendChild(t);return n.setAttribute("aria-live","polite"),e.setAttribute("aria-live","assertive"),{announce(t,s="polite"){const r=s==="assertive"?e:n;r.textContent="",setTimeout(()=>{r.textContent=t},0)},destroy(){n.remove(),e.remove()}}}const ne=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])',"details > summary"].join(", ");function U(n){let e=null,t=null;function s(){return Array.from(n.querySelectorAll(ne)).filter(r=>!r.closest("[hidden]")&&!r.closest('[aria-hidden="true"]'))}return{activate(){e=document.activeElement;const r=s();r.length>0&&r[0].focus(),t=a=>{if(a.key!=="Tab")return;const i=s();if(i.length===0)return;const o=i[0],h=i[i.length-1];a.shiftKey?document.activeElement===o&&(a.preventDefault(),h.focus()):document.activeElement===h&&(a.preventDefault(),o.focus())},n.addEventListener("keydown",t)},deactivate(){t&&n.removeEventListener("keydown",t),e instanceof HTMLElement&&e.focus(),e=null,t=null}}}function V(n,e,t,s){let r=e;switch(n.key){case"ArrowLeft":case"ArrowUp":n.preventDefault(),r=e===0?t-1:e-1;break;case"ArrowRight":case"ArrowDown":n.preventDefault(),r=e===t-1?0:e+1;break;case"Home":n.preventDefault(),r=0;break;case"End":n.preventDefault(),r=t-1;break;case"Enter":case" ":n.preventDefault(),s(e);return;default:return}s(r)}function re(n,e,t,s,r){let a=e;switch(n.key){case"ArrowUp":n.preventDefault(),a=e===0?t-1:e-1;break;case"ArrowDown":n.preventDefault(),a=e===t-1?0:e+1;break;case"Home":n.preventDefault(),a=0;break;case"End":n.preventDefault(),a=t-1;break;case"Enter":case" ":n.preventDefault(),s(e);return;case"Escape":n.preventDefault(),r==null||r();return;default:return}s(a)}function q(){return typeof window>"u"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function I(){return typeof window>"u"?!1:window.matchMedia("(forced-colors: active)").matches}function se(n,e="polite"){if(typeof document>"u")return;let t=document.getElementById("tkx-live-region");t||(t=document.createElement("div"),t.id="tkx-live-region",t.setAttribute("aria-live",e),t.setAttribute("aria-atomic","true"),t.style.cssText="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;",document.body.appendChild(t)),t.textContent="",setTimeout(()=>{t&&(t.textContent=n)},0)}const ae={contrastRatio:d,meetsAA:g,meetsAAA:B,getAccessibleForeground:P,createAnnouncer:K,createFocusTrap:U,handleTabsKeyboard:V,handleMenuKeyboard:re,prefersReducedMotion:q,prefersHighContrast:I,announce:se},ie=typeof window<"u"?u.useLayoutEffect:u.useEffect,E={bg:"#0a0a0f",surface:"#12121a",surfaceAlt:"#1a1a2e",border:"#2a2a3e",text:"#e8e8f4",textMuted:"#8888aa",primary:"#00f5d4",secondary:"#7b2ff7",danger:"#f72585",warning:"#ffbe0b",success:"#06d6a0",info:"#3a86ff"},oe={bg:"#f8f6f1",surface:"#ffffff",surfaceAlt:"#f0ede6",border:"#ddd8cc",text:"#1a1815",textMuted:"#6b6560",primary:"#0d7c5f",secondary:"#6930c3",danger:"#c1121f",warning:"#d4a017",success:"#0d7c5f",info:"#1d4ed8"},ce=/^#[0-9a-fA-F]{3,8}$/;function le(n,e){const t={...n,...e};for(const[s,r]of Object.entries(t))if(!ce.test(r))throw new Error(`Invalid hex color for theme token '${s}': ${r}`);return g(t.text,t.bg)||console.warn(`[TekiVex] Theme contrast warning: text (${t.text}) vs bg (${t.bg}) does not meet WCAG AA minimum (4.5:1)`),g(t.primary,t.bg)||console.warn(`[TekiVex] Theme contrast warning: primary (${t.primary}) vs bg (${t.bg}) does not meet WCAG AA minimum`),t}const k=u.createContext(E);function ue({theme:n=E,children:e}){ie(()=>{const s=Object.entries(n).map(([a,i])=>w(a,i)).join(" ");let r=document.getElementById("tkx-theme");if(!r){r=document.createElement("style"),r.id="tkx-theme";const a=document.head.querySelector("style");a?document.head.insertBefore(r,a):document.head.appendChild(r)}r.textContent=`:root { ${s} }`},[n]);const t=Object.fromEntries(Object.entries(n).map(([s,r])=>[`--tkx-${s}`,r]));return u.createElement(k.Provider,{value:n},u.createElement("div",{style:{display:"contents",...t}},e))}function fe(){return u.useContext(k)}function de(n){const e=n.replace("#",""),t=parseInt(e.slice(0,2),16)/255,s=parseInt(e.slice(2,4),16)/255,r=parseInt(e.slice(4,6),16)/255,a=Math.max(t,s,r),i=Math.min(t,s,r);let o=0,h=0;const T=(a+i)/2;if(a!==i){const p=a-i;switch(h=T>.5?p/(2-a-i):p/(a+i),a){case t:o=((s-r)/p+(s<r?6:0))/6;break;case s:o=((r-t)/p+2)/6;break;case r:o=((t-s)/p+4)/6;break}}return[Math.round(o*360),Math.round(h*100),Math.round(T*100)]}function c(n,e,t){e/=100,t/=100;const s=e*Math.min(t,1-t),r=a=>{const i=(a+n/30)%12,o=t-s*Math.max(Math.min(i-3,9-i,1),-1);return Math.round(255*o).toString(16).padStart(2,"0")};return`#${r(0)}${r(8)}${r(4)}`}function he(n){const[e,t]=de(n);return{50:c(e,Math.min(t,30),96),100:c(e,Math.min(t,40),90),200:c(e,Math.min(t,50),80),300:c(e,t,70),400:c(e,t,60),500:n,600:c(e,t,45),700:c(e,t,35),800:c(e,t,25),900:c(e,t,15)}}const pe={xs:{fontSize:"0.75rem",lineHeight:"1rem"},sm:{fontSize:"0.875rem",lineHeight:"1.25rem"},base:{fontSize:"1rem",lineHeight:"1.5rem"},lg:{fontSize:"1.125rem",lineHeight:"1.75rem"},xl:{fontSize:"1.25rem",lineHeight:"1.75rem"},"2xl":{fontSize:"1.5rem",lineHeight:"2rem"},"3xl":{fontSize:"1.875rem",lineHeight:"2.25rem"},"4xl":{fontSize:"2.25rem",lineHeight:"2.5rem"},"5xl":{fontSize:"3rem",lineHeight:"1.15"}},me={0:"0px",.5:"2px",1:"4px",1.5:"6px",2:"8px",2.5:"10px",3:"12px",4:"16px",5:"20px",6:"24px",8:"32px",10:"40px",12:"48px",16:"64px",20:"80px",24:"96px"},xe={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},ge={none:"none",xs:"0 1px 2px 0 rgba(0,0,0,0.05)",sm:"0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px -1px rgba(0,0,0,0.1)",md:"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)",lg:"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)",xl:"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)","2xl":"0 25px 50px -12px rgba(0,0,0,0.25)",inner:"inset 0 2px 4px 0 rgba(0,0,0,0.06)"},be={hide:-1,base:0,dropdown:1e3,sticky:1100,fixed:1200,overlay:1300,modal:1400,popover:1500,tooltip:1600,toast:1700,max:9999},ve={none:"0",sm:"4px",md:"6px",lg:"8px",xl:"12px","2xl":"16px",full:"9999px"};exports.LRUCache=M;exports.Quantum=Z;exports.TKX=ee;exports.ThemeContext=k;exports.ThemeProvider=ue;exports.WCAGEngine=ae;exports.auroraLight=oe;exports.batchUpdate=H;exports.breakpoints=xe;exports.contrastRatio=d;exports.createAnnouncer=K;exports.createFocusTrap=U;exports.createTheme=le;exports.css=D;exports.cssVar=w;exports.extractCSS=A;exports.fnv1aHash=v;exports.fromObject=z;exports.generatePalette=he;exports.getAccessibleForeground=P;exports.handleTabsKeyboard=V;exports.injectStyles=N;exports.keyframes=F;exports.meetsAA=g;exports.meetsAAA=B;exports.memoize=$;exports.prefersHighContrast=I;exports.prefersReducedMotion=q;exports.quantumDark=E;exports.radii=ve;exports.resetStyles=O;exports.responsive=L;exports.shadows=ge;exports.spacing=me;exports.typography=pe;exports.useTheme=fe;exports.zIndex=be;
|