tekivex-ui 2.5.1 → 2.5.3

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 (80) hide show
  1. package/README.md +436 -83
  2. package/dist/TkxForm-DSMDo2Ol.js +388 -0
  3. package/dist/TkxForm-DwV_n-eE.cjs +12 -0
  4. package/dist/headless.cjs +1 -1
  5. package/dist/headless.js +396 -195
  6. package/dist/i18n.cjs +1 -0
  7. package/dist/i18n.js +757 -0
  8. package/dist/index.cjs +27 -22
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +4994 -5089
  12. package/dist/quantum.cjs +91 -0
  13. package/dist/quantum.js +2312 -0
  14. package/dist/realtime.cjs +25 -0
  15. package/dist/realtime.js +944 -0
  16. package/dist/security-C369oOWH.cjs +1 -0
  17. package/dist/security-CzAmaMqa.js +97 -0
  18. package/dist/src/components/TkxDataGrid.d.ts +9 -1
  19. package/dist/src/components/TkxDataGrid.d.ts.map +1 -1
  20. package/dist/src/components/TkxDropdown.d.ts +41 -0
  21. package/dist/src/components/TkxDropdown.d.ts.map +1 -0
  22. package/dist/src/components/TkxLiveFeed.d.ts +891 -0
  23. package/dist/src/components/TkxLiveFeed.d.ts.map +1 -0
  24. package/dist/src/components/TkxLiveLog.d.ts +892 -0
  25. package/dist/src/components/TkxLiveLog.d.ts.map +1 -0
  26. package/dist/src/components/TkxLiveMetrics.d.ts +24 -0
  27. package/dist/src/components/TkxLiveMetrics.d.ts.map +1 -0
  28. package/dist/src/components/TkxPlayground.d.ts +15 -0
  29. package/dist/src/components/TkxPlayground.d.ts.map +1 -0
  30. package/dist/src/components/TkxQuantumForm.d.ts +20 -0
  31. package/dist/src/components/TkxQuantumForm.d.ts.map +1 -0
  32. package/dist/src/components/TkxRealTimeChart.d.ts +27 -0
  33. package/dist/src/components/TkxRealTimeChart.d.ts.map +1 -0
  34. package/dist/src/components/TkxTable.d.ts +11 -1
  35. package/dist/src/components/TkxTable.d.ts.map +1 -1
  36. package/dist/src/components/TkxThemeBuilder.d.ts +9 -0
  37. package/dist/src/components/TkxThemeBuilder.d.ts.map +1 -0
  38. package/dist/src/components/index.d.ts +1 -0
  39. package/dist/src/components/index.d.ts.map +1 -1
  40. package/dist/src/engine/index.d.ts +2 -0
  41. package/dist/src/engine/index.d.ts.map +1 -1
  42. package/dist/src/engine/quantum-ai.d.ts +201 -0
  43. package/dist/src/engine/quantum-ai.d.ts.map +1 -0
  44. package/dist/src/engine/tkx.d.ts.map +1 -1
  45. package/dist/src/headless/index.d.ts +6 -0
  46. package/dist/src/headless/index.d.ts.map +1 -1
  47. package/dist/src/headless/useInfiniteQuery.d.ts +35 -0
  48. package/dist/src/headless/useInfiniteQuery.d.ts.map +1 -0
  49. package/dist/src/headless/useSSE.d.ts +36 -0
  50. package/dist/src/headless/useSSE.d.ts.map +1 -0
  51. package/dist/src/headless/useWebSocket.d.ts +33 -0
  52. package/dist/src/headless/useWebSocket.d.ts.map +1 -0
  53. package/dist/src/quantum/index.d.ts +9 -0
  54. package/dist/src/quantum/index.d.ts.map +1 -0
  55. package/dist/src/realtime/index.d.ts +9 -0
  56. package/dist/src/realtime/index.d.ts.map +1 -0
  57. package/dist/{TkxForm-BWK4LqY3.js → tkx-BJ10JtMv.js} +372 -721
  58. package/dist/tkx-BeNyC0w7.cjs +4 -0
  59. package/package.json +16 -1
  60. package/src/components/TkxDataGrid.tsx +72 -0
  61. package/src/components/TkxDropdown.tsx +802 -0
  62. package/src/components/TkxLiveFeed.tsx +329 -0
  63. package/src/components/TkxLiveLog.tsx +470 -0
  64. package/src/components/TkxLiveMetrics.tsx +291 -0
  65. package/src/components/TkxPlayground.tsx +736 -0
  66. package/src/components/TkxQuantumForm.tsx +592 -0
  67. package/src/components/TkxRealTimeChart.tsx +381 -0
  68. package/src/components/TkxTable.tsx +351 -77
  69. package/src/components/TkxThemeBuilder.tsx +685 -0
  70. package/src/components/index.ts +4 -0
  71. package/src/engine/index.ts +2 -0
  72. package/src/engine/quantum-ai.ts +1045 -0
  73. package/src/engine/tkx.ts +95 -4
  74. package/src/headless/index.ts +6 -0
  75. package/src/headless/useInfiniteQuery.ts +153 -0
  76. package/src/headless/useSSE.ts +165 -0
  77. package/src/headless/useWebSocket.ts +229 -0
  78. package/src/quantum/index.ts +39 -0
  79. package/src/realtime/index.ts +21 -0
  80. package/dist/TkxForm-ljQjX7KD.cjs +0 -15
@@ -0,0 +1,388 @@
1
+ import { useRef as f, useEffect as j, useCallback as d, useState as K, useMemo as A, cloneElement as X, useContext as O, createContext as Z } from "react";
2
+ import { G as ee, i as te, w as re, x as ne, u as Q } from "./index-eT_U4qB2.js";
3
+ import { jsx as N, jsxs as T, Fragment as se } from "react/jsx-runtime";
4
+ import { s as G } from "./security-CzAmaMqa.js";
5
+ import { t as g, c as S } from "./tkx-BJ10JtMv.js";
6
+ function pe() {
7
+ const [e, r] = K(() => typeof window > "u" ? !1 : ne());
8
+ return j(() => {
9
+ if (typeof window > "u") return;
10
+ const t = window.matchMedia("(prefers-reduced-motion: reduce)"), s = (i) => r(i.matches);
11
+ return t.addEventListener("change", s), () => t.removeEventListener("change", s);
12
+ }, []), e;
13
+ }
14
+ function Fe() {
15
+ const [e, r] = K(() => typeof window > "u" ? !1 : re());
16
+ return j(() => {
17
+ if (typeof window > "u") return;
18
+ const t = window.matchMedia("(forced-colors: active)"), s = (i) => r(i.matches);
19
+ return t.addEventListener("change", s), () => t.removeEventListener("change", s);
20
+ }, []), e;
21
+ }
22
+ function ge(e) {
23
+ const r = f(null);
24
+ return j(() => {
25
+ if (!e || !r.current) return;
26
+ const t = te(r.current);
27
+ return t.activate(), () => t.deactivate();
28
+ }, [e]), r;
29
+ }
30
+ function ye() {
31
+ const e = f(null);
32
+ return j(() => {
33
+ if (!(typeof document > "u"))
34
+ return e.current = ee(), () => {
35
+ var r;
36
+ (r = e.current) == null || r.destroy();
37
+ };
38
+ }, []), d((r, t = "polite") => {
39
+ var s;
40
+ (s = e.current) == null || s.announce(r, t);
41
+ }, []);
42
+ }
43
+ function ve(e, r = !0) {
44
+ const t = f(e);
45
+ t.current = e, j(() => {
46
+ if (!r || typeof document > "u") return;
47
+ const s = (i) => {
48
+ i.key === "Escape" && t.current();
49
+ };
50
+ return document.addEventListener("keydown", s), () => document.removeEventListener("keydown", s);
51
+ }, [r]);
52
+ }
53
+ function we(e, r) {
54
+ const t = f(r);
55
+ t.current = r, j(() => {
56
+ const s = (i) => {
57
+ !e.current || e.current.contains(i.target) || t.current();
58
+ };
59
+ return document.addEventListener("pointerdown", s), () => document.removeEventListener("pointerdown", s);
60
+ }, [e]);
61
+ }
62
+ const W = Z(null);
63
+ function oe() {
64
+ const e = O(W);
65
+ if (!e)
66
+ throw new Error("TkxFormField must be used inside a <TkxForm>. Wrap your fields in a TkxForm component.");
67
+ return e;
68
+ }
69
+ async function _(e, r) {
70
+ for (const t of r) {
71
+ if (t.required && (e == null || e === "" || Array.isArray(e) && e.length === 0))
72
+ return t.message ?? "This field is required";
73
+ if (!(e == null || e === "")) {
74
+ if (t.min !== void 0) {
75
+ if (typeof e == "string" && e.length < t.min)
76
+ return t.message ?? `Must be at least ${t.min} characters`;
77
+ if (typeof e == "number" && e < t.min)
78
+ return t.message ?? `Must be at least ${t.min}`;
79
+ }
80
+ if (t.max !== void 0) {
81
+ if (typeof e == "string" && e.length > t.max)
82
+ return t.message ?? `Must be no more than ${t.max} characters`;
83
+ if (typeof e == "number" && e > t.max)
84
+ return t.message ?? `Must be no more than ${t.max}`;
85
+ }
86
+ if (t.pattern && typeof e == "string" && !t.pattern.test(e))
87
+ return t.message ?? "Invalid format";
88
+ if (t.validator) {
89
+ const s = await t.validator(e);
90
+ if (s)
91
+ return s;
92
+ }
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ function ce(e, r) {
98
+ const t = e ? [...e] : [];
99
+ return r && !t.some((s) => s.required) && t.unshift({ required: !0, message: "This field is required" }), t;
100
+ }
101
+ function ie(e) {
102
+ return e.some((r) => r.required);
103
+ }
104
+ function Ee() {
105
+ const e = O(W), r = f({}), t = f({}), s = f({}), i = A(() => ({
106
+ getFieldValue: (u) => r.current[u],
107
+ setFieldValue: (u, E) => {
108
+ r.current[u] = E;
109
+ },
110
+ getFieldsValue: () => ({ ...r.current }),
111
+ setFieldsValue: (u) => {
112
+ Object.assign(r.current, u);
113
+ },
114
+ validateFields: () => Promise.resolve({ ...r.current }),
115
+ validateField: (u) => Promise.resolve(!0),
116
+ resetFields: () => {
117
+ r.current = {}, t.current = {}, s.current = {};
118
+ },
119
+ getFieldError: (u) => t.current[u] ?? null,
120
+ isFieldTouched: (u) => s.current[u] ?? !1
121
+ }), []);
122
+ return e ? e.instance : i;
123
+ }
124
+ function ue({
125
+ onSubmit: e,
126
+ onValuesChange: r,
127
+ initialValues: t = {},
128
+ layout: s = "vertical",
129
+ disabled: i = !1,
130
+ children: u,
131
+ className: E,
132
+ style: L,
133
+ form: b
134
+ }) {
135
+ const m = Q(), [v, p] = K({
136
+ values: { ...t },
137
+ errors: {},
138
+ touched: {}
139
+ }), H = f(t), h = f({}), x = f(v);
140
+ x.current = v;
141
+ const M = d((n, o) => {
142
+ h.current[n] = o;
143
+ }, []), I = d((n) => {
144
+ delete h.current[n];
145
+ }, []), q = d((n, o) => {
146
+ p((c) => {
147
+ const a = {
148
+ ...c,
149
+ values: { ...c.values, [n]: o }
150
+ };
151
+ return r == null || r({ [n]: o }, a.values), a;
152
+ });
153
+ }, [r]), z = d((n, o) => {
154
+ p((c) => ({
155
+ ...c,
156
+ errors: { ...c.errors, [n]: o }
157
+ }));
158
+ }, []), w = d((n) => {
159
+ p((o) => ({
160
+ ...o,
161
+ touched: { ...o.touched, [n]: !0 }
162
+ }));
163
+ }, []), R = d(async (n) => {
164
+ const o = h.current[n];
165
+ if (!o) return !0;
166
+ const c = x.current.values[n], a = await _(c, o.rules);
167
+ return p((F) => ({
168
+ ...F,
169
+ errors: { ...F.errors, [n]: a },
170
+ touched: { ...F.touched, [n]: !0 }
171
+ })), a === null;
172
+ }, []), k = d(async () => {
173
+ const n = Object.keys(h.current), o = await Promise.all(
174
+ n.map(async (l) => {
175
+ const y = h.current[l], U = x.current.values[l], V = await _(U, y.rules);
176
+ return { name: l, error: V };
177
+ })
178
+ ), c = {}, a = {};
179
+ let F = !1;
180
+ for (const { name: l, error: y } of o)
181
+ c[l] = y, a[l] = !0, y && (F = !0);
182
+ if (p((l) => ({
183
+ ...l,
184
+ errors: { ...l.errors, ...c },
185
+ touched: { ...l.touched, ...a }
186
+ })), F) {
187
+ const l = Object.fromEntries(
188
+ o.filter((y) => y.error).map((y) => [y.name, y.error])
189
+ );
190
+ return Promise.reject(l);
191
+ }
192
+ return { ...x.current.values };
193
+ }, []), P = d(() => {
194
+ p({
195
+ values: { ...H.current },
196
+ errors: {},
197
+ touched: {}
198
+ });
199
+ }, []), Y = A(() => ({
200
+ getFieldValue: (n) => x.current.values[n],
201
+ setFieldValue: q,
202
+ getFieldsValue: () => ({ ...x.current.values }),
203
+ setFieldsValue: (n) => {
204
+ p((o) => {
205
+ const c = { ...o.values, ...n };
206
+ return r == null || r(n, c), { ...o, values: c };
207
+ });
208
+ },
209
+ validateFields: k,
210
+ validateField: R,
211
+ resetFields: P,
212
+ getFieldError: (n) => x.current.errors[n] ?? null,
213
+ isFieldTouched: (n) => !!x.current.touched[n]
214
+ }), [q, k, R, P, r]), C = d(async (n) => {
215
+ n.preventDefault();
216
+ try {
217
+ const o = await k();
218
+ await (e == null ? void 0 : e(o));
219
+ } catch {
220
+ }
221
+ }, [k, e]), $ = s === "inline" ? g("flex flex-row flex-wrap items-end gap-4") : g("flex flex-col gap-5"), B = b ?? Y, D = A(() => ({
222
+ state: v,
223
+ initialValues: H.current,
224
+ layout: s,
225
+ disabled: i,
226
+ fieldMeta: h,
227
+ setFieldValue: q,
228
+ setFieldError: z,
229
+ setFieldTouched: w,
230
+ registerField: M,
231
+ unregisterField: I,
232
+ validateField: R,
233
+ instance: B
234
+ }), [v, s, i, q, z, w, M, I, R, B]);
235
+ return /* @__PURE__ */ N(W.Provider, { value: D, children: /* @__PURE__ */ N(
236
+ "form",
237
+ {
238
+ noValidate: !0,
239
+ role: "form",
240
+ "aria-label": "Form",
241
+ onSubmit: C,
242
+ className: S($, E),
243
+ style: {
244
+ color: m.text,
245
+ ...L
246
+ },
247
+ children: u
248
+ }
249
+ ) });
250
+ }
251
+ ue.displayName = "TkxForm";
252
+ function ae({
253
+ name: e,
254
+ label: r,
255
+ rules: t,
256
+ help: s,
257
+ required: i,
258
+ children: u,
259
+ className: E,
260
+ style: L
261
+ }) {
262
+ const b = Q(), m = oe(), { state: v, layout: p, disabled: H } = m, h = A(() => ce(t, i), [t, i]), x = ie(h), M = f({ rules: h });
263
+ M.current.rules = h;
264
+ const I = f(!1);
265
+ I.current || (m.registerField(e, M.current), I.current = !0), A(() => {
266
+ m.registerField(e, M.current);
267
+ }, [h, e, m]);
268
+ const q = v.values[e], z = v.touched[e] ? v.errors[e] ?? null : null, w = z ? G(z) : null, R = r ? G(r) : void 0, k = s ? G(s) : void 0, P = d(
269
+ (c) => {
270
+ let a;
271
+ if (c !== null && typeof c == "object" && "target" in c) {
272
+ const F = c.target;
273
+ a = F.type === "checkbox" ? F.checked : F.value;
274
+ } else
275
+ a = c;
276
+ m.setFieldValue(e, a);
277
+ },
278
+ [m, e]
279
+ ), Y = d(() => {
280
+ m.setFieldTouched(e), m.validateField(e);
281
+ }, [m, e]), C = X(u, {
282
+ value: q ?? "",
283
+ onChange: P,
284
+ onBlur: Y,
285
+ error: w ?? void 0,
286
+ isInvalid: !!w,
287
+ isRequired: x,
288
+ disabled: H || u.props.disabled,
289
+ name: e
290
+ }), $ = p === "horizontal", B = p === "inline", D = /* @__PURE__ */ N("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ N("path", { d: "M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" }) }), n = R ? /* @__PURE__ */ T(
291
+ "label",
292
+ {
293
+ className: g(
294
+ "text-sm font-medium font-sans",
295
+ $ ? "min-w-[140px] pt-2.5" : ""
296
+ ),
297
+ style: { color: b.text },
298
+ children: [
299
+ R,
300
+ x && /* @__PURE__ */ N("span", { "aria-hidden": "true", className: g("ml-1"), style: { color: b.danger }, children: "*" })
301
+ ]
302
+ }
303
+ ) : null, o = /* @__PURE__ */ T(se, { children: [
304
+ k && !w && /* @__PURE__ */ N("span", { className: g("text-xs mt-0.5"), style: { color: b.textMuted }, children: k }),
305
+ w && /* @__PURE__ */ T(
306
+ "span",
307
+ {
308
+ role: "alert",
309
+ className: g("text-xs flex items-center gap-1 mt-0.5"),
310
+ style: {
311
+ color: b.danger,
312
+ animation: "tkxFormErrorReveal 200ms ease-out"
313
+ },
314
+ children: [
315
+ D,
316
+ w
317
+ ]
318
+ }
319
+ )
320
+ ] });
321
+ return B ? /* @__PURE__ */ T(
322
+ "div",
323
+ {
324
+ className: S(g("flex flex-col gap-1"), E),
325
+ style: L,
326
+ children: [
327
+ n,
328
+ C,
329
+ o
330
+ ]
331
+ }
332
+ ) : $ ? /* @__PURE__ */ T(
333
+ "div",
334
+ {
335
+ className: S(g("flex flex-row gap-4 items-start"), E),
336
+ style: L,
337
+ children: [
338
+ n,
339
+ /* @__PURE__ */ T("div", { className: g("flex flex-col gap-1 flex-1 min-w-0"), children: [
340
+ C,
341
+ o
342
+ ] })
343
+ ]
344
+ }
345
+ ) : /* @__PURE__ */ T(
346
+ "div",
347
+ {
348
+ className: S(g("flex flex-col gap-1"), E),
349
+ style: L,
350
+ children: [
351
+ n,
352
+ C,
353
+ o
354
+ ]
355
+ }
356
+ );
357
+ }
358
+ ae.displayName = "TkxFormField";
359
+ let J = !1;
360
+ function le() {
361
+ if (J || typeof document > "u") return;
362
+ J = !0;
363
+ const e = document.createElement("style");
364
+ e.setAttribute("data-tkx-form", ""), e.textContent = `
365
+ @keyframes tkxFormErrorReveal {
366
+ from {
367
+ opacity: 0;
368
+ transform: translateY(-4px);
369
+ }
370
+ to {
371
+ opacity: 1;
372
+ transform: translateY(0);
373
+ }
374
+ }
375
+ `, document.head.appendChild(e);
376
+ }
377
+ le();
378
+ export {
379
+ ue as T,
380
+ ye as a,
381
+ ge as b,
382
+ ve as c,
383
+ we as d,
384
+ ae as e,
385
+ Fe as f,
386
+ Ee as g,
387
+ pe as u
388
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";const n=require("react"),C=require("./index-BINBzXuY.cjs"),l=require("react/jsx-runtime"),$=require("./security-C369oOWH.cjs"),d=require("./tkx-BeNyC0w7.cjs");function G(){const[e,r]=n.useState(()=>typeof window>"u"?!1:C.prefersReducedMotion());return n.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(prefers-reduced-motion: reduce)"),o=i=>r(i.matches);return t.addEventListener("change",o),()=>t.removeEventListener("change",o)},[]),e}function J(){const[e,r]=n.useState(()=>typeof window>"u"?!1:C.prefersHighContrast());return n.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(forced-colors: active)"),o=i=>r(i.matches);return t.addEventListener("change",o),()=>t.removeEventListener("change",o)},[]),e}function Q(e){const r=n.useRef(null);return n.useEffect(()=>{if(!e||!r.current)return;const t=C.createFocusTrap(r.current);return t.activate(),()=>t.deactivate()},[e]),r}function U(){const e=n.useRef(null);return n.useEffect(()=>{if(!(typeof document>"u"))return e.current=C.createAnnouncer(),()=>{var r;(r=e.current)==null||r.destroy()}},[]),n.useCallback((r,t="polite")=>{var o;(o=e.current)==null||o.announce(r,t)},[])}function V(e,r=!0){const t=n.useRef(e);t.current=e,n.useEffect(()=>{if(!r||typeof document>"u")return;const o=i=>{i.key==="Escape"&&t.current()};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[r])}function X(e,r){const t=n.useRef(r);t.current=r,n.useEffect(()=>{const o=i=>{!e.current||e.current.contains(i.target)||t.current()};return document.addEventListener("pointerdown",o),()=>document.removeEventListener("pointerdown",o)},[e])}const B=n.createContext(null);function Z(){const e=n.useContext(B);if(!e)throw new Error("TkxFormField must be used inside a <TkxForm>. Wrap your fields in a TkxForm component.");return e}async function K(e,r){for(const t of r){if(t.required&&(e==null||e===""||Array.isArray(e)&&e.length===0))return t.message??"This field is required";if(!(e==null||e==="")){if(t.min!==void 0){if(typeof e=="string"&&e.length<t.min)return t.message??`Must be at least ${t.min} characters`;if(typeof e=="number"&&e<t.min)return t.message??`Must be at least ${t.min}`}if(t.max!==void 0){if(typeof e=="string"&&e.length>t.max)return t.message??`Must be no more than ${t.max} characters`;if(typeof e=="number"&&e>t.max)return t.message??`Must be no more than ${t.max}`}if(t.pattern&&typeof e=="string"&&!t.pattern.test(e))return t.message??"Invalid format";if(t.validator){const o=await t.validator(e);if(o)return o}}}return null}function ee(e,r){const t=e?[...e]:[];return r&&!t.some(o=>o.required)&&t.unshift({required:!0,message:"This field is required"}),t}function te(e){return e.some(r=>r.required)}function re(){const e=n.useContext(B),r=n.useRef({}),t=n.useRef({}),o=n.useRef({}),i=n.useMemo(()=>({getFieldValue:a=>r.current[a],setFieldValue:(a,v)=>{r.current[a]=v},getFieldsValue:()=>({...r.current}),setFieldsValue:a=>{Object.assign(r.current,a)},validateFields:()=>Promise.resolve({...r.current}),validateField:a=>Promise.resolve(!0),resetFields:()=>{r.current={},t.current={},o.current={}},getFieldError:a=>t.current[a]??null,isFieldTouched:a=>o.current[a]??!1}),[]);return e?e.instance:i}function D({onSubmit:e,onValuesChange:r,initialValues:t={},layout:o="vertical",disabled:i=!1,children:a,className:v,style:M,form:b}){const x=C.useTheme(),[y,p]=n.useState({values:{...t},errors:{},touched:{}}),z=n.useRef(t),h=n.useRef({}),F=n.useRef(y);F.current=y;const T=n.useCallback((s,c)=>{h.current[s]=c},[]),q=n.useCallback(s=>{delete h.current[s]},[]),j=n.useCallback((s,c)=>{p(u=>{const f={...u,values:{...u.values,[s]:c}};return r==null||r({[s]:c},f.values),f})},[r]),N=n.useCallback((s,c)=>{p(u=>({...u,errors:{...u.errors,[s]:c}}))},[]),R=n.useCallback(s=>{p(c=>({...c,touched:{...c.touched,[s]:!0}}))},[]),w=n.useCallback(async s=>{const c=h.current[s];if(!c)return!0;const u=F.current.values[s],f=await K(u,c.rules);return p(g=>({...g,errors:{...g.errors,[s]:f},touched:{...g.touched,[s]:!0}})),f===null},[]),E=n.useCallback(async()=>{const s=Object.keys(h.current),c=await Promise.all(s.map(async m=>{const k=h.current[m],W=F.current.values[m],_=await K(W,k.rules);return{name:m,error:_}})),u={},f={};let g=!1;for(const{name:m,error:k}of c)u[m]=k,f[m]=!0,k&&(g=!0);if(p(m=>({...m,errors:{...m.errors,...u},touched:{...m.touched,...f}})),g){const m=Object.fromEntries(c.filter(k=>k.error).map(k=>[k.name,k.error]));return Promise.reject(m)}return{...F.current.values}},[]),I=n.useCallback(()=>{p({values:{...z.current},errors:{},touched:{}})},[]),S=n.useMemo(()=>({getFieldValue:s=>F.current.values[s],setFieldValue:j,getFieldsValue:()=>({...F.current.values}),setFieldsValue:s=>{p(c=>{const u={...c.values,...s};return r==null||r(s,u),{...c,values:u}})},validateFields:E,validateField:w,resetFields:I,getFieldError:s=>F.current.errors[s]??null,isFieldTouched:s=>!!F.current.touched[s]}),[j,E,w,I,r]),L=n.useCallback(async s=>{s.preventDefault();try{const c=await E();await(e==null?void 0:e(c))}catch{}},[E,e]),A=o==="inline"?d.tkx("flex flex-row flex-wrap items-end gap-4"):d.tkx("flex flex-col gap-5"),H=b??S,P=n.useMemo(()=>({state:y,initialValues:z.current,layout:o,disabled:i,fieldMeta:h,setFieldValue:j,setFieldError:N,setFieldTouched:R,registerField:T,unregisterField:q,validateField:w,instance:H}),[y,o,i,j,N,R,T,q,w,H]);return l.jsx(B.Provider,{value:P,children:l.jsx("form",{noValidate:!0,role:"form","aria-label":"Form",onSubmit:L,className:d.cx(A,v),style:{color:x.text,...M},children:a})})}D.displayName="TkxForm";function O({name:e,label:r,rules:t,help:o,required:i,children:a,className:v,style:M}){const b=C.useTheme(),x=Z(),{state:y,layout:p,disabled:z}=x,h=n.useMemo(()=>ee(t,i),[t,i]),F=te(h),T=n.useRef({rules:h});T.current.rules=h;const q=n.useRef(!1);q.current||(x.registerField(e,T.current),q.current=!0),n.useMemo(()=>{x.registerField(e,T.current)},[h,e,x]);const j=y.values[e],N=y.touched[e]?y.errors[e]??null:null,R=N?$.sanitizeString(N):null,w=r?$.sanitizeString(r):void 0,E=o?$.sanitizeString(o):void 0,I=n.useCallback(u=>{let f;if(u!==null&&typeof u=="object"&&"target"in u){const g=u.target;f=g.type==="checkbox"?g.checked:g.value}else f=u;x.setFieldValue(e,f)},[x,e]),S=n.useCallback(()=>{x.setFieldTouched(e),x.validateField(e)},[x,e]),L=n.cloneElement(a,{value:j??"",onChange:I,onBlur:S,error:R??void 0,isInvalid:!!R,isRequired:F,disabled:z||a.props.disabled,name:e}),A=p==="horizontal",H=p==="inline",P=l.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:l.jsx("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),s=w?l.jsxs("label",{className:d.tkx("text-sm font-medium font-sans",A?"min-w-[140px] pt-2.5":""),style:{color:b.text},children:[w,F&&l.jsx("span",{"aria-hidden":"true",className:d.tkx("ml-1"),style:{color:b.danger},children:"*"})]}):null,c=l.jsxs(l.Fragment,{children:[E&&!R&&l.jsx("span",{className:d.tkx("text-xs mt-0.5"),style:{color:b.textMuted},children:E}),R&&l.jsxs("span",{role:"alert",className:d.tkx("text-xs flex items-center gap-1 mt-0.5"),style:{color:b.danger,animation:"tkxFormErrorReveal 200ms ease-out"},children:[P,R]})]});return H?l.jsxs("div",{className:d.cx(d.tkx("flex flex-col gap-1"),v),style:M,children:[s,L,c]}):A?l.jsxs("div",{className:d.cx(d.tkx("flex flex-row gap-4 items-start"),v),style:M,children:[s,l.jsxs("div",{className:d.tkx("flex flex-col gap-1 flex-1 min-w-0"),children:[L,c]})]}):l.jsxs("div",{className:d.cx(d.tkx("flex flex-col gap-1"),v),style:M,children:[s,L,c]})}O.displayName="TkxFormField";let Y=!1;function ne(){if(Y||typeof document>"u")return;Y=!0;const e=document.createElement("style");e.setAttribute("data-tkx-form",""),e.textContent=`
2
+ @keyframes tkxFormErrorReveal {
3
+ from {
4
+ opacity: 0;
5
+ transform: translateY(-4px);
6
+ }
7
+ to {
8
+ opacity: 1;
9
+ transform: translateY(0);
10
+ }
11
+ }
12
+ `,document.head.appendChild(e)}ne();exports.TkxForm=D;exports.TkxFormField=O;exports.useAnnounce=U;exports.useClickOutside=X;exports.useEscapeKey=V;exports.useFocusTrap=Q;exports.useHighContrast=J;exports.useReducedMotion=G;exports.useTkxForm=re;
package/dist/headless.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./TkxForm-ljQjX7KD.cjs"),y=require("./index-BINBzXuY.cjs"),t=require("react");function v(e=!1){const[c,s]=t.useState(e),n=t.useCallback(()=>s(!0),[]),r=t.useCallback(()=>s(!1),[]),u=t.useCallback(()=>s(o=>!o),[]);return{isOpen:c,open:n,close:r,toggle:u}}function p({count:e,initialIndex:c=0,orientation:s="horizontal",loop:n=!0}){const[r,u]=t.useState(c),o=t.useRef([]),a=t.useCallback(i=>{u(l=>{let b=l+i;return n?b=(b%e+e)%e:b=Math.max(0,Math.min(e-1,b)),requestAnimationFrame(()=>{var k;(k=o.current[b])==null||k.focus()}),b})},[e,n]),S=t.useCallback(i=>({tabIndex:i===r?0:-1,"data-focused":i===r,onFocus:()=>u(i),onKeyDown:l=>{const b=s==="horizontal"||s==="both",k=s==="vertical"||s==="both";b&&l.key==="ArrowRight"&&(l.preventDefault(),a(1)),b&&l.key==="ArrowLeft"&&(l.preventDefault(),a(-1)),k&&l.key==="ArrowDown"&&(l.preventDefault(),a(1)),k&&l.key==="ArrowUp"&&(l.preventDefault(),a(-1)),l.key==="Home"&&(l.preventDefault(),u(0),requestAnimationFrame(()=>{var C;return(C=o.current[0])==null?void 0:C.focus()})),l.key==="End"&&(l.preventDefault(),u(e-1),requestAnimationFrame(()=>{var C;return(C=o.current[e-1])==null?void 0:C.focus()}))}}),[r,a,s,e]);return{focusedIndex:r,setFocusedIndex:u,getItemProps:S}}function I({initialValues:e,validate:c}){const[s,n]=t.useState({...e}),[r,u]=t.useState({}),[o,a]=t.useState({}),S=t.useRef(e),i=t.useCallback((d,h)=>{n(A=>({...A,[d]:h}))},[]),l=t.useCallback(d=>{n(h=>({...h,...d}))},[]),b=t.useCallback(d=>{a(h=>({...h,[d]:!0}))},[]),k=t.useCallback(()=>{if(!c)return!0;const d=c(s),h=Object.fromEntries(Object.entries(d).filter(([,x])=>x!=null));u(h);const A=Object.fromEntries(Object.keys(s).map(x=>[x,!0]));return a(A),Object.keys(h).length===0},[s,c]),C=t.useCallback(()=>{n({...S.current}),u({}),a({})},[]),f=Object.keys(s).some(d=>s[d]!==S.current[d]),m=Object.keys(r).length===0,w=t.useCallback(d=>({value:s[d],onChange:h=>{i(d,h.target.value)},onBlur:()=>b(d),"aria-invalid":o[d]&&r[d]?!0:void 0,"aria-describedby":r[d]?`${String(d)}-error`:void 0}),[s,r,o,i,b]);return{values:s,errors:r,touched:o,dirty:f,isValid:m,setValue:i,setValues:l,touchField:b,validate:k,reset:C,getFieldProps:w}}function O({items:e,initialSelected:c=[],multiple:s=!0}){const[n,r]=t.useState(()=>new Set(c)),u=t.useCallback(f=>{r(m=>{const w=new Set(m);return w.has(f)?w.delete(f):(s||w.clear(),w.add(f)),w})},[s]),o=t.useCallback(f=>{r(m=>{if(m.has(f))return m;const w=s?new Set(m):new Set;return w.add(f),w})},[s]),a=t.useCallback(f=>{r(m=>{if(!m.has(f))return m;const w=new Set(m);return w.delete(f),w})},[]),S=t.useCallback(()=>{s&&r(new Set(e))},[e,s]),i=t.useCallback(()=>r(new Set),[]),l=t.useCallback(()=>{r(f=>e.every(w=>f.has(w))?new Set:new Set(e))},[e]),b=e.length>0&&e.every(f=>n.has(f)),k=e.some(f=>n.has(f)),C=t.useMemo(()=>Array.from(n),[n]);return{selected:n,isSelected:t.useCallback(f=>n.has(f),[n]),toggle:u,select:o,deselect:a,selectAll:S,deselectAll:i,toggleAll:l,allSelected:b,someSelected:k,selectedCount:n.size,selectedArray:C}}function R(e,c){const[s,n]=t.useState(e);return t.useEffect(()=>{const r=setTimeout(()=>n(e),c);return()=>clearTimeout(r)},[e,c]),s}function T(e,c){const[s,n]=t.useState(e),r=t.useRef(Date.now());return t.useEffect(()=>{const u=Date.now(),o=c-(u-r.current);if(o<=0)r.current=u,n(e);else{const a=setTimeout(()=>{r.current=Date.now(),n(e)},o);return()=>clearTimeout(a)}},[e,c]),s}function D({value:e,onChange:c,defaultValue:s}){const n=e!==void 0,[r,u]=t.useState(s),o=t.useRef(c);o.current=c;const a=t.useCallback(S=>{var i;n||u(S),(i=o.current)==null||i.call(o,S)},[n]);return[n?e:r,a]}function E(e){const[c,s]=t.useState(()=>typeof window>"u"?!1:window.matchMedia(e).matches);return t.useEffect(()=>{if(typeof window>"u")return;const n=window.matchMedia(e);s(n.matches);const r=u=>s(u.matches);return n.addEventListener("change",r),()=>n.removeEventListener("change",r)},[e]),c}function F(e,c){const[s,n]=t.useState(()=>{if(typeof window>"u")return c;try{const o=window.localStorage.getItem(e);return o!==null?JSON.parse(o):c}catch{return c}}),r=t.useCallback(o=>{n(a=>{const S=typeof o=="function"?o(a):o;if(typeof window<"u")try{window.localStorage.setItem(e,JSON.stringify(S))}catch{}return S})},[e]),u=t.useCallback(()=>{if(n(c),typeof window<"u")try{window.localStorage.removeItem(e)}catch{}},[e,c]);return[s,r,u]}function V({threshold:e=0,rootMargin:c="0px",root:s=null,once:n=!1}={}){const r=t.useRef(null),[u,o]=t.useState(null),a=t.useRef(null);return t.useEffect(()=>{const S=r.current;if(!(!S||typeof IntersectionObserver>"u"))return a.current=new IntersectionObserver(([i])=>{var l;o(i),n&&i.isIntersecting&&((l=a.current)==null||l.unobserve(S))},{threshold:e,rootMargin:c,root:s}),a.current.observe(S),()=>{var i;return(i=a.current)==null?void 0:i.disconnect()}},[e,c,s,n]),{ref:r,isIntersecting:(u==null?void 0:u.isIntersecting)??!1,entry:u}}exports.cx=g.cx;exports.extractAtomicCSS=g.extractAtomicCSS;exports.resetAtomicCSS=g.resetAtomicCSS;exports.sanitizeProps=g.sanitizeProps;exports.sanitizeString=g.sanitizeString;exports.tkxListPlugins=g.tkxListPlugins;exports.tkxPlugin=g.tkxPlugin;exports.tkxRemovePlugin=g.tkxRemovePlugin;exports.useAnnounce=g.useAnnounce;exports.useClickOutside=g.useClickOutside;exports.useEscapeKey=g.useEscapeKey;exports.useFocusTrap=g.useFocusTrap;exports.useHighContrast=g.useHighContrast;exports.useReducedMotion=g.useReducedMotion;exports.useTkxForm=g.useTkxForm;exports.contrastRatio=y.contrastRatio;exports.cssVar=y.cssVar;exports.extractCSS=y.extractCSS;exports.injectStyles=y.injectStyles;exports.meetsAA=y.meetsAA;exports.meetsAAA=y.meetsAAA;exports.resetStyles=y.resetStyles;exports.useControllable=D;exports.useDebounce=R;exports.useDisclosure=v;exports.useFormState=I;exports.useIntersectionObserver=V;exports.useListSelection=O;exports.useLocalStorage=F;exports.useMediaQuery=E;exports.useRovingTabIndex=p;exports.useThrottle=T;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("./TkxForm-DwV_n-eE.cjs"),J=require("./tkx-BeNyC0w7.cjs"),q=require("./index-BINBzXuY.cjs"),B=require("./security-C369oOWH.cjs"),e=require("react");function Y(t=!1){const[c,n]=e.useState(t),s=e.useCallback(()=>n(!0),[]),r=e.useCallback(()=>n(!1),[]),o=e.useCallback(()=>n(u=>!u),[]);return{isOpen:c,open:s,close:r,toggle:o}}function Z({count:t,initialIndex:c=0,orientation:n="horizontal",loop:s=!0}){const[r,o]=e.useState(c),u=e.useRef([]),l=e.useCallback(i=>{o(d=>{let y=d+i;return s?y=(y%t+t)%t:y=Math.max(0,Math.min(t-1,y)),requestAnimationFrame(()=>{var w;(w=u.current[y])==null||w.focus()}),y})},[t,s]),S=e.useCallback(i=>({tabIndex:i===r?0:-1,"data-focused":i===r,onFocus:()=>o(i),onKeyDown:d=>{const y=n==="horizontal"||n==="both",w=n==="vertical"||n==="both";y&&d.key==="ArrowRight"&&(d.preventDefault(),l(1)),y&&d.key==="ArrowLeft"&&(d.preventDefault(),l(-1)),w&&d.key==="ArrowDown"&&(d.preventDefault(),l(1)),w&&d.key==="ArrowUp"&&(d.preventDefault(),l(-1)),d.key==="Home"&&(d.preventDefault(),o(0),requestAnimationFrame(()=>{var m;return(m=u.current[0])==null?void 0:m.focus()})),d.key==="End"&&(d.preventDefault(),o(t-1),requestAnimationFrame(()=>{var m;return(m=u.current[t-1])==null?void 0:m.focus()}))}}),[r,l,n,t]);return{focusedIndex:r,setFocusedIndex:o,getItemProps:S}}function _({initialValues:t,validate:c}){const[n,s]=e.useState({...t}),[r,o]=e.useState({}),[u,l]=e.useState({}),S=e.useRef(t),i=e.useCallback((f,b)=>{s(x=>({...x,[f]:b}))},[]),d=e.useCallback(f=>{s(b=>({...b,...f}))},[]),y=e.useCallback(f=>{l(b=>({...b,[f]:!0}))},[]),w=e.useCallback(()=>{if(!c)return!0;const f=c(n),b=Object.fromEntries(Object.entries(f).filter(([,A])=>A!=null));o(b);const x=Object.fromEntries(Object.keys(n).map(A=>[A,!0]));return l(x),Object.keys(b).length===0},[n,c]),m=e.useCallback(()=>{s({...S.current}),o({}),l({})},[]),g=Object.keys(n).some(f=>n[f]!==S.current[f]),k=Object.keys(r).length===0,a=e.useCallback(f=>({value:n[f],onChange:b=>{i(f,b.target.value)},onBlur:()=>y(f),"aria-invalid":u[f]&&r[f]?!0:void 0,"aria-describedby":r[f]?`${String(f)}-error`:void 0}),[n,r,u,i,y]);return{values:n,errors:r,touched:u,dirty:g,isValid:k,setValue:i,setValues:d,touchField:y,validate:w,reset:m,getFieldProps:a}}function ee({items:t,initialSelected:c=[],multiple:n=!0}){const[s,r]=e.useState(()=>new Set(c)),o=e.useCallback(g=>{r(k=>{const a=new Set(k);return a.has(g)?a.delete(g):(n||a.clear(),a.add(g)),a})},[n]),u=e.useCallback(g=>{r(k=>{if(k.has(g))return k;const a=n?new Set(k):new Set;return a.add(g),a})},[n]),l=e.useCallback(g=>{r(k=>{if(!k.has(g))return k;const a=new Set(k);return a.delete(g),a})},[]),S=e.useCallback(()=>{n&&r(new Set(t))},[t,n]),i=e.useCallback(()=>r(new Set),[]),d=e.useCallback(()=>{r(g=>t.every(a=>g.has(a))?new Set:new Set(t))},[t]),y=t.length>0&&t.every(g=>s.has(g)),w=t.some(g=>s.has(g)),m=e.useMemo(()=>Array.from(s),[s]);return{selected:s,isSelected:e.useCallback(g=>s.has(g),[s]),toggle:o,select:u,deselect:l,selectAll:S,deselectAll:i,toggleAll:d,allSelected:y,someSelected:w,selectedCount:s.size,selectedArray:m}}function te(t,c){const[n,s]=e.useState(t);return e.useEffect(()=>{const r=setTimeout(()=>s(t),c);return()=>clearTimeout(r)},[t,c]),n}function ne(t,c){const[n,s]=e.useState(t),r=e.useRef(Date.now());return e.useEffect(()=>{const o=Date.now(),u=c-(o-r.current);if(u<=0)r.current=o,s(t);else{const l=setTimeout(()=>{r.current=Date.now(),s(t)},u);return()=>clearTimeout(l)}},[t,c]),n}function re({value:t,onChange:c,defaultValue:n}){const s=t!==void 0,[r,o]=e.useState(n),u=e.useRef(c);u.current=c;const l=e.useCallback(S=>{var i;s||o(S),(i=u.current)==null||i.call(u,S)},[s]);return[s?t:r,l]}function se(t){const[c,n]=e.useState(()=>typeof window>"u"?!1:window.matchMedia(t).matches);return e.useEffect(()=>{if(typeof window>"u")return;const s=window.matchMedia(t);n(s.matches);const r=o=>n(o.matches);return s.addEventListener("change",r),()=>s.removeEventListener("change",r)},[t]),c}function ce(t,c){const[n,s]=e.useState(()=>{if(typeof window>"u")return c;try{const u=window.localStorage.getItem(t);return u!==null?JSON.parse(u):c}catch{return c}}),r=e.useCallback(u=>{s(l=>{const S=typeof u=="function"?u(l):u;if(typeof window<"u")try{window.localStorage.setItem(t,JSON.stringify(S))}catch{}return S})},[t]),o=e.useCallback(()=>{if(s(c),typeof window<"u")try{window.localStorage.removeItem(t)}catch{}},[t,c]);return[n,r,o]}function ue({threshold:t=0,rootMargin:c="0px",root:n=null,once:s=!1}={}){const r=e.useRef(null),[o,u]=e.useState(null),l=e.useRef(null);return e.useEffect(()=>{const S=r.current;if(!(!S||typeof IntersectionObserver>"u"))return l.current=new IntersectionObserver(([i])=>{var d;u(i),s&&i.isIntersecting&&((d=l.current)==null||d.unobserve(S))},{threshold:t,rootMargin:c,root:n}),l.current.observe(S),()=>{var i;return(i=l.current)==null?void 0:i.disconnect()}},[t,c,n,s]),{ref:r,isIntersecting:(o==null?void 0:o.isIntersecting)??!1,entry:o}}function oe(t){const{url:c,protocols:n,reconnect:s=!0,reconnectDelay:r=1e3,reconnectAttempts:o=10,heartbeatInterval:u=3e4,heartbeatMessage:l="ping",onOpen:S,onClose:i,onError:d,onMessage:y}=t,[w,m]=e.useState("disconnected"),[g,k]=e.useState(null),[a,f]=e.useState([]),[b,x]=e.useState(0),[A,F]=e.useState(null),h=e.useRef(null),O=e.useRef(0),V=e.useRef(null),D=e.useRef(null),L=e.useRef(null),p=e.useRef([]),R=e.useRef(!0),T=e.useRef(!1),C=e.useRef(S),M=e.useRef(i),P=e.useRef(d),Q=e.useRef(y);C.current=S,M.current=i,P.current=d,Q.current=y;const z=e.useCallback(()=>{V.current&&(clearTimeout(V.current),V.current=null),D.current&&(clearInterval(D.current),D.current=null)},[]),U=e.useCallback(E=>{for(;p.current.length>0;){const I=p.current.shift();I!==void 0&&E.send(typeof I=="string"?I:JSON.stringify(I))}},[]),K=e.useCallback(()=>{if(h.current&&h.current.readyState===WebSocket.OPEN)return;T.current=!1,z(),R.current&&m("connecting");const E=new WebSocket(c,n);h.current=E,E.onopen=I=>{var v;R.current&&(m("connected"),O.current=0,x(0),(v=C.current)==null||v.call(C,I),U(E),D.current=setInterval(()=>{if(E.readyState===WebSocket.OPEN){L.current=Date.now();try{E.send(JSON.stringify({type:"ping",t:L.current}))}catch{}}},u))},E.onmessage=I=>{var W;if(!R.current)return;let v;try{v=JSON.parse(I.data)}catch{v=I.data}const j=v;if(j&&typeof j=="object"&&j.type==="pong"&&typeof j.t=="number"){F(Date.now()-j.t);return}if(v===l&&L.current!==null){F(Date.now()-L.current),L.current=null;return}k(v),f(X=>{const H=[...X,v];return H.length>100?H.slice(H.length-100):H}),(W=Q.current)==null||W.call(Q,v)},E.onerror=I=>{var v;R.current&&(m("error"),(v=P.current)==null||v.call(P,I))},E.onclose=I=>{var v;if(R.current&&(z(),m("disconnected"),(v=M.current)==null||v.call(M,I),!T.current&&s&&O.current<o)){const j=O.current,W=r*Math.pow(1.5,j);O.current+=1,x(O.current),V.current=setTimeout(()=>{R.current&&K()},W)}}},[c,n,s,r,o,u,l,z,U]),$=e.useCallback(()=>{T.current=!0,z(),h.current&&(h.current.close(),h.current=null),R.current&&m("disconnected")},[z]),G=e.useCallback(E=>{h.current&&h.current.readyState===WebSocket.OPEN?h.current.send(typeof E=="string"?E:JSON.stringify(E)):p.current.push(E)},[]);return e.useEffect(()=>(R.current=!0,K(),()=>{R.current=!1,T.current=!0,z(),h.current&&(h.current.close(),h.current=null)}),[]),{status:w,lastMessage:g,messages:a,send:G,connect:K,disconnect:$,reconnectCount:b,latency:A}}function ae(t){const{url:c,events:n=["message"],withCredentials:s=!1,reconnect:r=!0,reconnectDelay:o=3e3,onOpen:u,onError:l}=t,[S,i]=e.useState("connecting"),[d,y]=e.useState(null),[w,m]=e.useState([]),[g,k]=e.useState(0),a=e.useRef(null),f=e.useRef(null),b=e.useRef(!0),x=e.useRef(!1),A=e.useRef(u),F=e.useRef(l);A.current=u,F.current=l;const h=e.useCallback(()=>{f.current&&(clearTimeout(f.current),f.current=null)},[]),O=e.useCallback(()=>{if(typeof EventSource>"u"){b.current&&i("error");return}x.current=!1,h(),a.current&&(a.current.close(),a.current=null),b.current&&i("connecting");const D=new EventSource(c,{withCredentials:s});a.current=D,D.onopen=()=>{var p;b.current&&(i("connected"),(p=A.current)==null||p.call(A))},D.onerror=p=>{var R;b.current&&(i("error"),(R=F.current)==null||R.call(F,p),!x.current&&r&&(h(),f.current=setTimeout(()=>{b.current&&O()},o)))};const L=p=>R=>{if(!b.current)return;let T;try{T=JSON.parse(R.data)}catch{T=R.data}const C={type:p,data:T,timestamp:Date.now(),...R.lastEventId?{id:R.lastEventId}:{}};y({type:C.type,data:C.data,id:C.id}),m(M=>{const P=[...M,C];return P.length>200?P.slice(P.length-200):P}),k(M=>M+1)};for(const p of n)D.addEventListener(p,L(p))},[c,s,r,o,h]),V=e.useCallback(()=>{x.current=!0,h(),a.current&&(a.current.close(),a.current=null),b.current&&i("closed")},[h]);return e.useEffect(()=>(b.current=!0,O(),()=>{b.current=!1,x.current=!0,h(),a.current&&(a.current.close(),a.current=null)}),[]),{status:S,lastEvent:d,events:w,connect:O,disconnect:V,eventCount:g}}function le(t){const{queryFn:c,initialCursor:n=null,enabled:s=!0,dedupKey:r}=t,[o,u]=e.useState([]),[l,S]=e.useState("idle"),[i,d]=e.useState(null),[y,w]=e.useState(!1),[m,g]=e.useState(0),k=e.useRef(n??null),a=e.useRef(!1),f=e.useRef(!0),b=e.useRef(void 0),x=e.useRef(c);x.current=c;const A=e.useCallback(async(L,p,R)=>{if(a.current||r!==void 0&&r===b.current)return;a.current=!0;let T=!1;f.current&&(S(R?"loading":"fetching-more"),d(null));try{const C=await x.current(L,p);if(T||!f.current)return;r!==void 0&&(b.current=r),k.current=C.nextCursor,u(M=>R?[C.data]:[...M,C.data]),w(C.hasMore),g(p),S("success")}catch(C){if(T||!f.current)return;d(C instanceof Error?C:new Error(String(C))),S("error")}finally{T||(a.current=!1)}return()=>{T=!0}},[r]),F=e.useCallback(()=>{!y||a.current||A(k.current,m+1,!1)},[y,m,A]),h=e.useCallback(()=>{a.current=!1,b.current=void 0,k.current=n??null,u([]),S("idle"),d(null),w(!1),g(0)},[n]);e.useEffect(()=>(f.current=!0,s&&A(n??null,0,!0),()=>{f.current=!1}),[s]);const O=o.flat(),V=l==="fetching-more",D=O.length;return{data:O,pages:o,status:l,error:i,hasMore:y,isFetchingMore:V,fetchMore:F,reset:h,pageIndex:m,totalLoaded:D}}exports.useAnnounce=N.useAnnounce;exports.useClickOutside=N.useClickOutside;exports.useEscapeKey=N.useEscapeKey;exports.useFocusTrap=N.useFocusTrap;exports.useHighContrast=N.useHighContrast;exports.useReducedMotion=N.useReducedMotion;exports.useTkxForm=N.useTkxForm;exports.cx=J.cx;exports.extractAtomicCSS=J.extractAtomicCSS;exports.resetAtomicCSS=J.resetAtomicCSS;exports.tkxListPlugins=J.tkxListPlugins;exports.tkxPlugin=J.tkxPlugin;exports.tkxRemovePlugin=J.tkxRemovePlugin;exports.contrastRatio=q.contrastRatio;exports.cssVar=q.cssVar;exports.extractCSS=q.extractCSS;exports.injectStyles=q.injectStyles;exports.meetsAA=q.meetsAA;exports.meetsAAA=q.meetsAAA;exports.resetStyles=q.resetStyles;exports.sanitizeProps=B.sanitizeProps;exports.sanitizeString=B.sanitizeString;exports.useControllable=re;exports.useDebounce=te;exports.useDisclosure=Y;exports.useFormState=_;exports.useInfiniteQuery=le;exports.useIntersectionObserver=ue;exports.useListSelection=ee;exports.useLocalStorage=ce;exports.useMediaQuery=se;exports.useRovingTabIndex=Z;exports.useSSE=ae;exports.useThrottle=ne;exports.useWebSocket=oe;