haze-ui 1.32.0 → 1.33.0

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 (49) hide show
  1. package/README.md +87 -1210
  2. package/dist/coi-serviceworker.LICENSE +21 -0
  3. package/dist/coi-serviceworker.js +118 -0
  4. package/dist/components/Countdown/Countdown.js +49 -0
  5. package/dist/components/Countdown/index.js +3 -0
  6. package/dist/components/HoverCard/HoverCard.js +63 -43
  7. package/dist/components/ImageCrop/ImageCrop.js +188 -0
  8. package/dist/components/ImageCrop/image-crop-geometry.js +81 -0
  9. package/dist/components/ImageCrop/index.js +3 -0
  10. package/dist/components/LocaleProvider/ar-sa.js +6 -0
  11. package/dist/components/LocaleProvider/de-de.js +6 -0
  12. package/dist/components/LocaleProvider/es-es.js +6 -0
  13. package/dist/components/LocaleProvider/fr-fr.js +6 -0
  14. package/dist/components/LocaleProvider/it-it.js +6 -0
  15. package/dist/components/LocaleProvider/ja-jp.js +6 -0
  16. package/dist/components/LocaleProvider/ko-kr.js +6 -0
  17. package/dist/components/LocaleProvider/locale.js +6 -0
  18. package/dist/components/LocaleProvider/pt-br.js +6 -0
  19. package/dist/components/LocaleProvider/ru-ru.js +6 -0
  20. package/dist/components/LocaleProvider/zh-cn.js +6 -0
  21. package/dist/components/Resizable/index.js +1 -1
  22. package/dist/components/Splitter/Splitter.js +199 -0
  23. package/dist/components/Splitter/index.js +3 -0
  24. package/dist/css/countdown.css +4 -0
  25. package/dist/css/image-crop.css +4 -0
  26. package/dist/css/splitter.css +4 -0
  27. package/dist/css-manifest.json +4 -3
  28. package/dist/haze-ui.css +12 -0
  29. package/dist/hooks/useHotkeys.js +78 -24
  30. package/dist/index.js +277 -274
  31. package/dist/mcp-docs.json +210 -9
  32. package/dist/registry.json +71 -5
  33. package/dist/robots.txt +4 -0
  34. package/dist/sitemap.xml +160 -0
  35. package/dist/types/components/ConfigProvider/ConfigContext.d.ts +2 -1
  36. package/dist/types/components/Countdown/Countdown.d.ts +30 -0
  37. package/dist/types/components/Countdown/index.d.ts +2 -0
  38. package/dist/types/components/HoverCard/HoverCard.d.ts +18 -1
  39. package/dist/types/components/ImageCrop/ImageCrop.d.ts +67 -0
  40. package/dist/types/components/ImageCrop/image-crop-geometry.d.ts +65 -0
  41. package/dist/types/components/ImageCrop/index.d.ts +3 -0
  42. package/dist/types/components/LocaleProvider/locale.d.ts +6 -0
  43. package/dist/types/components/Resizable/index.d.ts +0 -2
  44. package/dist/types/components/Splitter/Splitter.d.ts +33 -0
  45. package/dist/types/components/Splitter/index.d.ts +2 -0
  46. package/dist/types/headless/index.d.ts +7 -6
  47. package/dist/types/hooks/useHotkeys.d.ts +16 -4
  48. package/dist/types/index.d.ts +7 -2
  49. package/package.json +23 -4
@@ -184,6 +184,12 @@ var e = {
184
184
  moreTags: "+{count}"
185
185
  },
186
186
  spinner: { loading: "불러오는 중" },
187
+ splitter: {
188
+ collapseLead: "앞쪽 창 접기",
189
+ expandLead: "앞쪽 창 펼치기",
190
+ collapseTrail: "뒤쪽 창 접기",
191
+ expandTrail: "뒤쪽 창 펼치기"
192
+ },
187
193
  sources: {
188
194
  label: "출처",
189
195
  expand: "발췌 보기",
@@ -184,6 +184,12 @@ var e = {
184
184
  moreTags: "+{count}"
185
185
  },
186
186
  spinner: { loading: "Loading" },
187
+ splitter: {
188
+ collapseLead: "Collapse leading pane",
189
+ expandLead: "Expand leading pane",
190
+ collapseTrail: "Collapse trailing pane",
191
+ expandTrail: "Expand trailing pane"
192
+ },
187
193
  sources: {
188
194
  label: "Sources",
189
195
  expand: "Show excerpt",
@@ -184,6 +184,12 @@ var e = {
184
184
  moreTags: "+{count}"
185
185
  },
186
186
  spinner: { loading: "Carregando" },
187
+ splitter: {
188
+ collapseLead: "Recolher o painel anterior",
189
+ expandLead: "Expandir o painel anterior",
190
+ collapseTrail: "Recolher o painel seguinte",
191
+ expandTrail: "Expandir o painel seguinte"
192
+ },
187
193
  sources: {
188
194
  label: "Fontes",
189
195
  expand: "Mostrar trecho",
@@ -184,6 +184,12 @@ var e = {
184
184
  moreTags: "+{count}"
185
185
  },
186
186
  spinner: { loading: "Загрузка" },
187
+ splitter: {
188
+ collapseLead: "Свернуть переднюю панель",
189
+ expandLead: "Развернуть переднюю панель",
190
+ collapseTrail: "Свернуть заднюю панель",
191
+ expandTrail: "Развернуть заднюю панель"
192
+ },
187
193
  sources: {
188
194
  label: "Источники",
189
195
  expand: "Показать отрывок",
@@ -184,6 +184,12 @@ var e = {
184
184
  moreTags: "+{count}"
185
185
  },
186
186
  spinner: { loading: "加载中" },
187
+ splitter: {
188
+ collapseLead: "收起前侧窗格",
189
+ expandLead: "展开前侧窗格",
190
+ collapseTrail: "收起后侧窗格",
191
+ expandTrail: "展开后侧窗格"
192
+ },
187
193
  sources: {
188
194
  label: "引用来源",
189
195
  expand: "展开摘录",
@@ -1,3 +1,3 @@
1
1
  "use client";
2
2
  import { ResizableGroup as e, ResizableHandle as t, ResizablePanel as n } from "./Resizable.js";
3
- export { e as ResizableGroup, t as ResizableHandle, n as ResizablePanel, e as SplitterGroup, t as SplitterHandle, n as SplitterPanel };
3
+ export { e as ResizableGroup, t as ResizableHandle, n as ResizablePanel };
@@ -0,0 +1,199 @@
1
+
2
+ "use client";
3
+ import { classnames as e } from "../../utils/classnames.js";
4
+ import { getDirection as t } from "../../utils/direction.js";
5
+ import { useStrings as n } from "../LocaleProvider/useStrings.js";
6
+ /* empty css */
7
+ import { Children as r, cloneElement as i, createContext as a, isValidElement as o, useContext as s, useRef as c } from "react";
8
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
9
+ import { isControl as d, useControl as ee, useThru as f, watch as p } from "react-use-control";
10
+ //#region src/lib/components/Splitter/Splitter.tsx
11
+ var m = a(null);
12
+ function h() {
13
+ if (s(m) === null) throw Error("SplitterPane must be used within <Splitter>");
14
+ }
15
+ var g = 5, _ = 2 ** 53 - 1, v = (e) => Math.round(e * 100) / 100;
16
+ function y(e, t, n) {
17
+ return Math.min(Math.max(e, t), n);
18
+ }
19
+ function b(e, t, n) {
20
+ return {
21
+ lo: Math.max(e.min, n - t.max),
22
+ hi: Math.min(e.max, n - t.min)
23
+ };
24
+ }
25
+ var te = "haze-Splitter__splitterBase", ne = "haze-Splitter__splitterHorizontal", x = "haze-Splitter__splitterVertical";
26
+ function S({ orientation: a = "horizontal", sizes: s, onSizesChange: h, children: S, className: C, ...N }) {
27
+ let P = r.toArray(S).filter(o).map((e) => {
28
+ if (e.type !== w) throw Error("Splitter children must be <SplitterPane> elements");
29
+ return e;
30
+ }), F = P.length, I = () => Array.from({ length: F }, () => 100 / F), L = d(s), [R, ae] = ee(f(L ? s : void 0, p((e) => h?.(e))), L ? I : s ?? I), z = (e) => {
31
+ let t = R[e];
32
+ return t === void 0 ? 100 / F : t;
33
+ }, B = (e) => {
34
+ let t = P[e]?.props;
35
+ return {
36
+ min: t?.min ?? 0,
37
+ max: t?.max ?? Infinity
38
+ };
39
+ }, V = c(null), H = c(null), U = n("splitter"), W = c(/* @__PURE__ */ new Map()), G = (e) => P[e]?.props.collapsible === !0, K = (e) => z(e) === 0, q = (e) => {
40
+ let t = B(e);
41
+ return K(e) ? {
42
+ ...t,
43
+ min: 0
44
+ } : t;
45
+ }, J = (e, t) => {
46
+ let n = Math.min(e, t), r = z(n) + z(n + 1);
47
+ if (K(e)) {
48
+ let { lo: i, hi: a } = b(B(e), B(t), r), o = y(W.current.get(e) ?? r / 2, i, a);
49
+ W.current.delete(e);
50
+ let s = e === n ? o : r - o;
51
+ X(n, s, r);
52
+ } else W.current.set(e, z(e)), X(n, e === n ? 0 : r, r);
53
+ }, Y = () => a === "horizontal" && t(V.current) === "rtl", X = (e, t, n) => {
54
+ let r = v(t), i = v(n - r);
55
+ ae((t) => {
56
+ if (e + 1 >= t.length || t[e] === r) return t;
57
+ let n = t.slice();
58
+ return n[e] = r, n[e + 1] = i, n;
59
+ });
60
+ }, Z = (e) => a === "horizontal" ? e.clientX : e.clientY, oe = () => {
61
+ let e = V.current;
62
+ if (e === null) return 0;
63
+ let t = 0;
64
+ for (let n of e.querySelectorAll("[data-slot='pane']")) {
65
+ let e = n.getBoundingClientRect();
66
+ t += a === "horizontal" ? e.width : e.height;
67
+ }
68
+ return t;
69
+ }, se = (e, t) => {
70
+ if (t.button !== 0) return;
71
+ let n = oe();
72
+ if (!(n > 0)) return;
73
+ let r = z(e) + z(e + 1), { lo: i, hi: a } = b(q(e), q(e + 1), r);
74
+ t.preventDefault();
75
+ let o = t.currentTarget;
76
+ if (H.current = {
77
+ pointerId: t.pointerId,
78
+ origin: Z(t),
79
+ extent: n,
80
+ leadIndex: e,
81
+ startLead: z(e),
82
+ pairSum: r,
83
+ lo: i,
84
+ hi: a,
85
+ lastLead: z(e)
86
+ }, typeof o.setPointerCapture == "function") try {
87
+ o.setPointerCapture(t.pointerId);
88
+ } catch {}
89
+ }, ce = (e) => {
90
+ let t = H.current;
91
+ if (t?.pointerId !== e.pointerId) return;
92
+ K(t.leadIndex) && W.current.delete(t.leadIndex), K(t.leadIndex + 1) && W.current.delete(t.leadIndex + 1);
93
+ let n = Z(e) - t.origin, r = (Y() ? -n : n) / t.extent * 100, i = y(t.startLead + r, t.lo, t.hi);
94
+ v(i) !== v(t.lastLead) && (t.lastLead = i, X(t.leadIndex, i, t.pairSum));
95
+ }, Q = (e) => {
96
+ if (H.current?.pointerId !== e.pointerId) return;
97
+ H.current = null;
98
+ let t = e.currentTarget;
99
+ if (typeof t.releasePointerCapture == "function") try {
100
+ t.releasePointerCapture(e.pointerId);
101
+ } catch {}
102
+ }, le = (e, t) => {
103
+ let n = a === "horizontal" ? "ArrowRight" : "ArrowDown", r = a === "horizontal" ? "ArrowLeft" : "ArrowUp", { key: i } = t;
104
+ if (i !== n && i !== r && i !== "Home" && i !== "End") return;
105
+ let o = z(e) + z(e + 1), { lo: s, hi: c } = b(q(e), q(e + 1), o), l = z(e);
106
+ t.preventDefault();
107
+ let u = Y(), d = y(l + (i === n ? u ? -5 : g : i === r ? u ? g : -5 : i === "Home" ? -_ : _), s, c);
108
+ d !== l && X(e, d, o);
109
+ }, $ = [];
110
+ return P.forEach((t, n) => {
111
+ if (n > 0) {
112
+ let t = n - 1, r = z(t) + z(n), { lo: i, hi: o } = b(q(t), q(n), r);
113
+ $.push(/* @__PURE__ */ u("div", {
114
+ "data-slot": "divider",
115
+ className: e([T, a === "horizontal" ? re : E]),
116
+ children: [
117
+ /* @__PURE__ */ l("div", {
118
+ "data-slot": "divider-handle",
119
+ role: "separator",
120
+ "aria-orientation": a === "horizontal" ? "vertical" : "horizontal",
121
+ tabIndex: 0,
122
+ "aria-valuenow": Math.round(z(t)),
123
+ "aria-valuemin": Math.round(i),
124
+ "aria-valuemax": Math.round(o),
125
+ onKeyDown: (e) => le(t, e),
126
+ onPointerDown: (e) => se(t, e),
127
+ onPointerMove: ce,
128
+ onPointerUp: Q,
129
+ onPointerCancel: Q,
130
+ className: e([ie])
131
+ }),
132
+ G(t) && /* @__PURE__ */ l("button", {
133
+ type: "button",
134
+ "data-slot": "divider-collapse",
135
+ "data-side": "lead",
136
+ "aria-expanded": !K(t),
137
+ "aria-label": K(t) ? U.expandLead : U.collapseLead,
138
+ onClick: () => J(t, n),
139
+ className: e([O, a === "horizontal" ? k : j]),
140
+ children: D
141
+ }, `splitter-collapse-lead-${n}`),
142
+ G(n) && /* @__PURE__ */ l("button", {
143
+ type: "button",
144
+ "data-slot": "divider-collapse",
145
+ "data-side": "trail",
146
+ "aria-expanded": !K(n),
147
+ "aria-label": K(n) ? U.expandTrail : U.collapseTrail,
148
+ onClick: () => J(n, t),
149
+ className: e([O, a === "horizontal" ? A : M]),
150
+ children: D
151
+ }, `splitter-collapse-trail-${n}`)
152
+ ]
153
+ }, `splitter-divider-${n}`));
154
+ }
155
+ $.push(i(t, { style: {
156
+ ...t.props.style,
157
+ flexGrow: z(n)
158
+ } }));
159
+ }), /* @__PURE__ */ l(m.Provider, {
160
+ value: !0,
161
+ children: l("div", {
162
+ ref: V,
163
+ "data-slot": "splitter",
164
+ ...N,
165
+ className: e([
166
+ te,
167
+ a === "horizontal" ? ne : x,
168
+ C
169
+ ]),
170
+ children: $
171
+ })
172
+ });
173
+ }
174
+ var C = "haze-Splitter__paneBase";
175
+ function w({ min: t, max: n, collapsible: r, children: i, className: a, ...o }) {
176
+ return h(), /* @__PURE__ */ l("div", {
177
+ "data-slot": "pane",
178
+ ...o,
179
+ className: e([C, a]),
180
+ children: i
181
+ });
182
+ }
183
+ var T = "haze-Splitter__dividerBase", re = "haze-Splitter__dividerHorizontal", E = "haze-Splitter__dividerVertical", ie = "haze-Splitter__dividerHandle", D = /* @__PURE__ */ l("svg", {
184
+ width: "12",
185
+ height: "12",
186
+ viewBox: "0 0 16 16",
187
+ fill: "none",
188
+ "aria-hidden": "true",
189
+ focusable: "false",
190
+ children: l("path", {
191
+ d: "M10.5 3 5.5 8l5 5",
192
+ stroke: "currentColor",
193
+ strokeWidth: "1.75",
194
+ strokeLinecap: "round",
195
+ strokeLinejoin: "round"
196
+ })
197
+ }), O = "haze-Splitter__collapseButtonBase", k = "haze-Splitter__collapseLeadHorizontal", A = "haze-Splitter__collapseTrailHorizontal", j = "haze-Splitter__collapseLeadVertical", M = "haze-Splitter__collapseTrailVertical";
198
+ //#endregion
199
+ export { S as Splitter, w as SplitterPane };
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import { Splitter as e, SplitterPane as t } from "./Splitter.js";
3
+ export { e as Splitter, t as SplitterPane };
@@ -0,0 +1,4 @@
1
+ /* haze-ui countdown — generated by scripts/split-css.mjs, do not edit */
2
+ @layer haze {
3
+ .haze-Countdown__base{font-variant-numeric:tabular-nums;font-family:var(--haze-font-sans);font-size:inherit;color:inherit}
4
+ }
@@ -0,0 +1,4 @@
1
+ /* haze-ui image-crop — generated by scripts/split-css.mjs, do not edit */
2
+ @layer haze {
3
+ .haze-ImageCrop__root{max-width:100%;font-family:var(--haze-font-sans);display:block}.haze-ImageCrop__sourceClass{display:none}.haze-ImageCrop__frame{border-radius:var(--haze-radius-md);background:var(--haze-color-bg-muted);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.haze-ImageCrop__canvasClass{width:100%;height:auto;display:block}.haze-ImageCrop__loading{box-sizing:border-box;aspect-ratio:4/3;border-radius:var(--haze-radius-md);background:var(--haze-color-bg-subtle);width:100%}.haze-ImageCrop__cropBox{box-sizing:border-box;border:1px solid var(--haze-color-primary);border-radius:var(--haze-radius-sm);cursor:move;touch-action:none;position:absolute;box-shadow:0 0 0 9999px #00000073}.haze-ImageCrop__cropBox:focus-visible{box-shadow:0 0 0 9999px #00000073,inset 0 0 0 var(--haze-space-1) var(--haze-color-focus-ring);outline:none}.haze-ImageCrop__cropBox[aria-disabled=true]{cursor:not-allowed}@media (forced-colors:active){.haze-ImageCrop__cropBox{box-shadow:none;border-color:highlight}.haze-ImageCrop__cropBox:focus-visible{box-shadow:inset 0 0 0 var(--haze-space-1) Highlight}}.haze-ImageCrop__cropCircle{border-radius:var(--haze-radius-full)}.haze-ImageCrop__handleBase{width:var(--haze-space-6);height:var(--haze-space-6);touch-action:none;position:absolute}.haze-ImageCrop__handleBase:before{content:"";inset:calc((var(--haze-space-6) - var(--haze-space-2)) / 2);box-sizing:border-box;border:1px solid var(--haze-color-primary);border-radius:var(--haze-radius-sm);background:var(--haze-color-bg);position:absolute}@media (forced-colors:active){.haze-ImageCrop__handleBase:before{background:canvastext;border-color:canvastext}}.haze-ImageCrop__nw{top:calc(var(--haze-space-6) / -2);left:calc(var(--haze-space-6) / -2);cursor:nw-resize}.haze-ImageCrop__ne{top:calc(var(--haze-space-6) / -2);right:calc(var(--haze-space-6) / -2);cursor:ne-resize}.haze-ImageCrop__sw{bottom:calc(var(--haze-space-6) / -2);left:calc(var(--haze-space-6) / -2);cursor:sw-resize}.haze-ImageCrop__se{bottom:calc(var(--haze-space-6) / -2);right:calc(var(--haze-space-6) / -2);cursor:se-resize}.haze-ImageCrop__notice{box-sizing:border-box;aspect-ratio:4/3;border:1px dashed var(--haze-color-border);border-radius:var(--haze-radius-md);width:100%;color:var(--haze-color-text-muted);font-size:var(--haze-text-sm);justify-content:center;align-items:center;display:flex}.haze-ImageCrop__srOnly{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}
4
+ }
@@ -0,0 +1,4 @@
1
+ /* haze-ui splitter — generated by scripts/split-css.mjs, do not edit */
2
+ @layer haze {
3
+ .haze-Splitter__splitterBase{box-sizing:border-box;min-width:0;min-height:0;display:flex;overflow:hidden}.haze-Splitter__splitterHorizontal{flex-direction:row;height:100%}.haze-Splitter__splitterVertical{flex-direction:column;width:100%}.haze-Splitter__paneBase{box-sizing:border-box;flex-shrink:0;flex-basis:0;min-width:0;min-height:0;overflow:auto}.haze-Splitter__dividerBase{background:var(--haze-color-border);-webkit-transition:background var(--haze-duration-fast);transition:background var(--haze-duration-fast);-webkit-background-clip:content-box;background-clip:content-box;flex:none;position:relative}.haze-Splitter__dividerBase:hover{background:linear-gradient(to right, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/2px 100% no-repeat,var(--haze-color-bg-subtle)}.haze-Splitter__dividerBase:has(>:focus-visible){background:linear-gradient(to right, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/2px 100% no-repeat,var(--haze-color-bg-subtle)}.haze-Splitter__dividerBase:has(>:focus-visible){box-shadow:inset 0 0 0 2px var(--haze-color-focus-ring);outline:none}.haze-Splitter__dividerBase:hover>[data-slot=divider-collapse],.haze-Splitter__dividerBase:focus-within>[data-slot=divider-collapse],.haze-Splitter__dividerBase>[data-slot=divider-collapse]:focus-visible{opacity:1;pointer-events:auto}@media (forced-colors:active){.haze-Splitter__dividerBase{background:canvastext;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:hover{background:highlight;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:has(>:focus-visible){background:highlight;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:has(>:focus-visible){outline-offset:-2px;outline:2px solid highlight}}.haze-Splitter__dividerHorizontal{width:2px;height:100%;padding-inline:calc((var(--haze-space-6) - 2px) / 2);cursor:col-resize}@media (pointer:coarse){.haze-Splitter__dividerHorizontal{padding-inline:21px}}.haze-Splitter__dividerVertical{width:100%;height:2px;padding-block:calc((var(--haze-space-6) - 2px) / 2);cursor:row-resize}.haze-Splitter__dividerVertical:hover,.haze-Splitter__dividerVertical:focus-visible{background:linear-gradient(to bottom, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/100% 2px no-repeat,var(--haze-color-bg-subtle)}@media (pointer:coarse){.haze-Splitter__dividerVertical{padding-block:21px}}.haze-Splitter__dividerHandle{touch-action:none;position:absolute;inset:0}.haze-Splitter__dividerHandle:focus-visible{outline:none}.haze-Splitter__collapseButtonBase{box-sizing:border-box;width:var(--haze-space-6);height:var(--haze-space-6);border-radius:var(--haze-radius-sm);background:var(--haze-color-bg-muted);color:var(--haze-color-text-secondary);cursor:pointer;opacity:0;pointer-events:none;-webkit-transition:opacity var(--haze-duration-fast);transition:opacity var(--haze-duration-fast);border:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.haze-Splitter__collapseButtonBase:hover{color:var(--haze-color-text)}.haze-Splitter__collapseButtonBase:focus-visible{outline:2px solid var(--haze-color-focus-ring);outline-offset:1px}@media (forced-colors:active){.haze-Splitter__collapseButtonBase{background:canvas;border:1px solid buttonborder}}.haze-Splitter__collapseLeadHorizontal{top:var(--haze-space-1);left:50%;transform:translate(-50%)}.haze-Splitter__collapseLeadHorizontal svg{transform:rotate(0)}html[dir=rtl] .haze-Splitter__collapseLeadHorizontal svg{transform:rotate(180deg)}.haze-Splitter__collapseTrailHorizontal{bottom:var(--haze-space-1);left:50%;transform:translate(-50%)}.haze-Splitter__collapseTrailHorizontal svg{transform:rotate(180deg)}html[dir=rtl] .haze-Splitter__collapseTrailHorizontal svg{transform:rotate(0)}.haze-Splitter__collapseLeadVertical{inset-inline-start:var(--haze-space-1);top:50%;transform:translateY(-50%)}.haze-Splitter__collapseLeadVertical svg{transform:rotate(90deg)}.haze-Splitter__collapseTrailVertical{inset-inline-end:var(--haze-space-1);top:50%;transform:translateY(-50%)}.haze-Splitter__collapseTrailVertical svg{transform:rotate(-90deg)}
4
+ }
@@ -58,6 +58,7 @@
58
58
  "ConversationItem": "conversation-list",
59
59
  "ConversationList": "conversation-list",
60
60
  "CountUp": "count-up",
61
+ "Countdown": "countdown",
61
62
  "DataTable": "data-table",
62
63
  "DateRangePicker": "date-range-picker",
63
64
  "DateRangePickerCore": "date-range-picker",
@@ -97,6 +98,7 @@
97
98
  "HoverCard": "hover-card",
98
99
  "Icon": "icon",
99
100
  "Image": "image",
101
+ "ImageCrop": "image-crop",
100
102
  "Indicator": "indicator",
101
103
  "InlineCompletion": "inline-completion",
102
104
  "InlineEdit": "inline-edit",
@@ -171,9 +173,8 @@
171
173
  "Sources": "sources",
172
174
  "Sparkline": "sparkline",
173
175
  "Spinner": "spinner",
174
- "SplitterGroup": "resizable",
175
- "SplitterHandle": "resizable",
176
- "SplitterPanel": "resizable",
176
+ "Splitter": "splitter",
177
+ "SplitterPane": "splitter",
177
178
  "Spoiler": "spoiler",
178
179
  "Stat": "stat",
179
180
  "StatGroup": "stat",
package/dist/haze-ui.css CHANGED
@@ -170,6 +170,10 @@
170
170
  .haze-CountUp__base{font-variant-numeric:tabular-nums;font-family:var(--haze-font-sans);font-size:inherit;color:inherit}
171
171
  }
172
172
 
173
+ @layer haze {
174
+ .haze-Countdown__base{font-variant-numeric:tabular-nums;font-family:var(--haze-font-sans);font-size:inherit;color:inherit}
175
+ }
176
+
173
177
  @layer haze {
174
178
  .haze-CellEditor__editorInput{min-width:0;margin-block:calc(-1 * var(--haze-space-1))}
175
179
  .haze-DataTable__root{flex-direction:column;display:flex}.haze-DataTable__scrollArea{overflow-x:auto}.haze-DataTable__stickyScrollArea{flex:1;min-height:0;overflow:auto}.haze-DataTable__virtualArea{-webkit-scrollbar-gutter:stable;-ms-scrollbar-gutter:stable;scrollbar-gutter:stable;flex:1;min-height:0;overflow:auto hidden}.haze-DataTable__fixedLayout{table-layout:fixed}.haze-DataTable__virtualRowTable{height:100%}.haze-DataTable__tableBase{border-collapse:collapse;width:100%;font-family:var(--haze-font-sans);font-size:var(--haze-text-sm);color:var(--haze-color-text)}.haze-DataTable__stickyHead th{z-index:2;background:var(--haze-color-bg);box-shadow:var(--haze-shadow-sm);position:sticky;top:0}.haze-DataTable__sortButton{align-items:center;gap:var(--haze-space-1);font:inherit;font-weight:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0;display:inline-flex}.haze-DataTable__sortButton:hover{color:var(--haze-color-primary)}.haze-DataTable__sortButton:focus-visible{border-radius:var(--haze-radius-sm);box-shadow:0 0 0 3px var(--haze-color-focus-ring);outline:none}.haze-DataTable__sortIcon{color:var(--haze-color-text-muted);font-size:var(--haze-text-xs)}.haze-DataTable__rowHover:hover{background:var(--haze-color-bg-subtle)}.haze-DataTable__rowSelected,.haze-DataTable__rowSelected:hover{background:var(--haze-color-primary-subtle)}.haze-DataTable__clickableRow{cursor:pointer}.haze-DataTable__checkCell{white-space:nowrap;width:1%}.haze-DataTable__checkCellCol{white-space:nowrap}.haze-DataTable__fixedCell{z-index:1;background:var(--haze-color-bg);position:sticky}tr:hover .haze-DataTable__fixedCell{background:var(--haze-color-bg-subtle)}tr .haze-DataTable__fixedCellSelected,tr:hover .haze-DataTable__fixedCellSelected{background:var(--haze-color-primary-subtle)}.haze-DataTable__fixedHeadCell{z-index:3}.haze-DataTable__fixedLeftEdge{clip-path:inset(0 -8px 0 0);box-shadow:6px 0 8px -6px var(--haze-color-border)}.haze-DataTable__fixedRightEdge{clip-path:inset(0 0 0 -8px);box-shadow:-6px 0 8px -6px var(--haze-color-border)}.haze-DataTable__emptyCell{padding:0}.haze-DataTable__footer{margin-top:var(--haze-space-3);justify-content:flex-end;align-items:center;display:flex}.haze-DataTable__toolbar{margin-bottom:var(--haze-space-3);justify-content:flex-end;display:flex}.haze-DataTable__footerMenu{-webkit-margin-end:auto;margin-inline-end:auto}.haze-DataTable__columnsTrigger{align-items:center;gap:var(--haze-space-1);padding:var(--haze-space-1) var(--haze-space-2);border:1px solid var(--haze-color-border);border-radius:var(--haze-radius-md);background:var(--haze-color-bg);color:var(--haze-color-text);font-size:var(--haze-text-sm);font-family:var(--haze-font-sans);display:inline-flex}.haze-DataTable__columnsTrigger:hover{border-color:var(--haze-color-border-hover);background:var(--haze-color-bg-subtle)}.haze-DataTable__toggleRow{padding:var(--haze-space-1) var(--haze-space-2);border-radius:var(--haze-radius-sm);cursor:pointer;font-size:var(--haze-text-sm);align-items:center;display:flex}.haze-DataTable__toggleRow:hover{background:var(--haze-color-bg-subtle)}.haze-DataTable__resizableHead{position:relative}.haze-DataTable__resizeHandle{top:0;bottom:0;z-index:1;cursor:col-resize;touch-action:none;border-radius:var(--haze-radius-sm);width:6px;position:absolute;inset-inline-end:-3px}.haze-DataTable__resizeHandle:after{content:"";top:25%;bottom:25%;background:var(--haze-color-border);width:1px;position:absolute;inset-inline-end:2.5px}.haze-DataTable__resizeHandle:hover:after,.haze-DataTable__resizeHandle:focus-visible:after{background:var(--haze-color-primary);top:0;bottom:0}.haze-DataTable__resizeHandle:focus-visible{box-shadow:0 0 0 3px var(--haze-color-focus-ring);outline:none}.haze-DataTable__expander{width:var(--haze-space-5);height:var(--haze-space-5);-webkit-margin-end:var(--haze-space-1);color:var(--haze-color-text-muted);font-size:var(--haze-text-xs);vertical-align:middle;cursor:pointer;border-radius:var(--haze-radius-sm);background:0 0;border:none;justify-content:center;align-items:center;margin-inline-end:var(--haze-space-1);padding:0;display:inline-flex}.haze-DataTable__expander:hover{color:var(--haze-color-text);background:var(--haze-color-bg-subtle)}.haze-DataTable__expander:focus-visible{box-shadow:0 0 0 3px var(--haze-color-focus-ring);outline:none}.haze-DataTable__expanderIcon{-webkit-transition:-webkit-transform var(--haze-duration-fast) var(--haze-ease);transition:transform var(--haze-duration-fast) var(--haze-ease)}[aria-expanded=true] .haze-DataTable__expanderIcon{transform:rotate(90deg)}.haze-DataTable__panelCell{padding:var(--haze-space-3);background:var(--haze-color-bg-subtle)}.haze-DataTable__treeIndent{vertical-align:middle;display:inline-block}.haze-DataTable__summaryFoot td{padding:var(--haze-space-2) var(--haze-space-3);border-top:2px solid var(--haze-color-border);color:var(--haze-color-text);font-weight:var(--haze-weight-semibold);white-space:nowrap}.haze-DataTable__stickyFoot td{z-index:2;background:var(--haze-color-bg);box-shadow:var(--haze-shadow-sm);position:sticky;bottom:0}.haze-DataTable__editableCell{cursor:text}.haze-DataTable__editableCell:focus-visible{box-shadow:inset 0 0 0 2px var(--haze-color-primary);outline:none}
@@ -275,6 +279,10 @@
275
279
  .haze-ImagePreview__overlay{border-radius:var(--haze-radius-none);color:var(--haze-color-text);font-family:var(--haze-font-sans);background:0 0;border:none;width:100vw;max-width:100vw;height:100vh;max-height:100vh;margin:0;padding:0;overflow:hidden}.haze-ImagePreview__overlay[open]{justify-content:center;align-items:center;display:flex}.haze-ImagePreview__overlay::backdrop{background:#000000b8}.haze-ImagePreview__overlay[open][data-state=open]{-webkit-animation:haze-image-preview-in-haze-ImagePreview__overlay var(--haze-duration-normal) var(--haze-ease);animation:haze-image-preview-in-haze-ImagePreview__overlay var(--haze-duration-normal) var(--haze-ease)}.haze-ImagePreview__overlay[open][data-state=closed]{-webkit-animation:haze-image-preview-out-haze-ImagePreview__overlay var(--haze-duration-fast) var(--haze-ease);animation:haze-image-preview-out-haze-ImagePreview__overlay var(--haze-duration-fast) var(--haze-ease)}.haze-ImagePreview__overlay[open][data-state=open]::backdrop{-webkit-animation:haze-image-backdrop-in-haze-ImagePreview__overlay var(--haze-duration-normal) var(--haze-ease);animation:haze-image-backdrop-in-haze-ImagePreview__overlay var(--haze-duration-normal) var(--haze-ease)}.haze-ImagePreview__overlay[open][data-state=closed]::backdrop{-webkit-animation:haze-image-backdrop-out-haze-ImagePreview__overlay var(--haze-duration-fast) var(--haze-ease);animation:haze-image-backdrop-out-haze-ImagePreview__overlay var(--haze-duration-fast) var(--haze-ease)}@keyframes haze-image-preview-in-haze-ImagePreview__overlay{0%{opacity:0}}@keyframes haze-image-preview-out-haze-ImagePreview__overlay{to{opacity:0}}@keyframes haze-image-backdrop-in-haze-ImagePreview__overlay{0%{opacity:0}}@keyframes haze-image-backdrop-out-haze-ImagePreview__overlay{to{opacity:0}}.haze-ImagePreview__previewImg{object-fit:contain;transform-origin:50%;-webkit-user-select:none;user-select:none;touch-action:none;max-width:90%;max-height:90%}.haze-ImagePreview__imgPannable{cursor:-webkit-grab;cursor:grab}.haze-ImagePreview__imgPanning{cursor:-webkit-grabbing;cursor:grabbing}.haze-ImagePreview__imgAnimated{-webkit-transition:-webkit-transform var(--haze-duration-normal) var(--haze-ease);transition:transform var(--haze-duration-normal) var(--haze-ease)}.haze-ImagePreview__toolbar{top:var(--haze-space-4);align-items:center;gap:var(--haze-space-1);width:fit-content;padding:var(--haze-space-1);border:1px solid var(--haze-color-border);border-radius:var(--haze-radius-lg);background:var(--haze-color-bg);box-shadow:var(--haze-shadow-lg);margin-inline:auto;display:flex;position:absolute;left:0;right:0}.haze-ImagePreview__toolButton{width:var(--haze-space-8);height:var(--haze-space-8);border-radius:var(--haze-radius-md);color:var(--haze-color-text);font-family:var(--haze-font-sans);font-size:var(--haze-text-sm);font-weight:var(--haze-weight-medium);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}.haze-ImagePreview__toolButton svg{width:var(--haze-space-5);height:var(--haze-space-5)}.haze-ImagePreview__toolButton:hover:not(:disabled){background:var(--haze-color-bg-muted)}.haze-ImagePreview__toolButton:disabled{color:var(--haze-color-text-muted);cursor:not-allowed}.haze-ImagePreview__toolButton:focus-visible{box-shadow:0 0 0 3px var(--haze-color-focus-ring);outline:none}
276
280
  }
277
281
 
282
+ @layer haze {
283
+ .haze-ImageCrop__root{max-width:100%;font-family:var(--haze-font-sans);display:block}.haze-ImageCrop__sourceClass{display:none}.haze-ImageCrop__frame{border-radius:var(--haze-radius-md);background:var(--haze-color-bg-muted);-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.haze-ImageCrop__canvasClass{width:100%;height:auto;display:block}.haze-ImageCrop__loading{box-sizing:border-box;aspect-ratio:4/3;border-radius:var(--haze-radius-md);background:var(--haze-color-bg-subtle);width:100%}.haze-ImageCrop__cropBox{box-sizing:border-box;border:1px solid var(--haze-color-primary);border-radius:var(--haze-radius-sm);cursor:move;touch-action:none;position:absolute;box-shadow:0 0 0 9999px #00000073}.haze-ImageCrop__cropBox:focus-visible{box-shadow:0 0 0 9999px #00000073,inset 0 0 0 var(--haze-space-1) var(--haze-color-focus-ring);outline:none}.haze-ImageCrop__cropBox[aria-disabled=true]{cursor:not-allowed}@media (forced-colors:active){.haze-ImageCrop__cropBox{box-shadow:none;border-color:highlight}.haze-ImageCrop__cropBox:focus-visible{box-shadow:inset 0 0 0 var(--haze-space-1) Highlight}}.haze-ImageCrop__cropCircle{border-radius:var(--haze-radius-full)}.haze-ImageCrop__handleBase{width:var(--haze-space-6);height:var(--haze-space-6);touch-action:none;position:absolute}.haze-ImageCrop__handleBase:before{content:"";inset:calc((var(--haze-space-6) - var(--haze-space-2)) / 2);box-sizing:border-box;border:1px solid var(--haze-color-primary);border-radius:var(--haze-radius-sm);background:var(--haze-color-bg);position:absolute}@media (forced-colors:active){.haze-ImageCrop__handleBase:before{background:canvastext;border-color:canvastext}}.haze-ImageCrop__nw{top:calc(var(--haze-space-6) / -2);left:calc(var(--haze-space-6) / -2);cursor:nw-resize}.haze-ImageCrop__ne{top:calc(var(--haze-space-6) / -2);right:calc(var(--haze-space-6) / -2);cursor:ne-resize}.haze-ImageCrop__sw{bottom:calc(var(--haze-space-6) / -2);left:calc(var(--haze-space-6) / -2);cursor:sw-resize}.haze-ImageCrop__se{bottom:calc(var(--haze-space-6) / -2);right:calc(var(--haze-space-6) / -2);cursor:se-resize}.haze-ImageCrop__notice{box-sizing:border-box;aspect-ratio:4/3;border:1px dashed var(--haze-color-border);border-radius:var(--haze-radius-md);width:100%;color:var(--haze-color-text-muted);font-size:var(--haze-text-sm);justify-content:center;align-items:center;display:flex}.haze-ImageCrop__srOnly{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}
284
+ }
285
+
278
286
  @layer haze {
279
287
  .haze-Indicator__host{display:inline-flex;position:relative}.haze-Indicator__badge{top:0;-webkit-translate:50% -50%;-moz-translate:50% -50%;-ms-translate:50% -50%;min-width:var(--haze-space-4);height:var(--haze-space-4);padding-inline:var(--haze-space-1);border-radius:var(--haze-radius-full);border:var(--haze-indicator-ring-width,2px) solid var(--haze-color-bg);background:var(--haze-color-danger);color:var(--haze-color-text-inverse);font-family:var(--haze-font-sans);font-size:var(--haze-text-xs);font-weight:var(--haze-weight-medium);pointer-events:none;justify-content:center;align-items:center;line-height:1;display:inline-flex;position:absolute;inset-inline-end:0;translate:50% -50%}@media (forced-colors:active){.haze-Indicator__badge{color:marktext;background:mark;border-color:canvas}}.haze-Indicator__dot{min-width:var(--haze-space-2);height:var(--haze-space-2);border-radius:var(--haze-radius-full);padding-inline:0}.haze-Indicator__top-start{-webkit-translate:-50% -50%;-moz-translate:-50% -50%;-ms-translate:-50% -50%;inset-inline:0 auto;translate:-50% -50%}.haze-Indicator__bottom-start{top:auto;bottom:0;-webkit-translate:-50% 50%;-moz-translate:-50% 50%;-ms-translate:-50% 50%;inset-inline:0 auto;translate:-50% 50%}.haze-Indicator__bottom-end{-webkit-translate:50% 50%;-moz-translate:50% 50%;-ms-translate:50% 50%;top:auto;bottom:0;translate:50% 50%}.haze-Indicator__primary{background:var(--haze-color-primary)}.haze-Indicator__danger{background:var(--haze-color-danger)}.haze-Indicator__success{background:var(--haze-color-success)}.haze-Indicator__warning{background:var(--haze-color-warning);color:var(--haze-color-text)}
280
288
  }
@@ -444,6 +452,10 @@
444
452
  .haze-Spinner__base{animation:.8s linear infinite spin-haze-Spinner__base;display:inline-flex}@media (prefers-reduced-motion:reduce){.haze-Spinner__base{animation-duration:.01ms;animation-iteration-count:1}}@keyframes spin-haze-Spinner__base{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (forced-colors:active){.haze-Spinner__base svg circle{stroke:graytext}.haze-Spinner__base svg path{stroke:canvastext}}.haze-Spinner__sm{width:16px;height:16px}.haze-Spinner__md{width:24px;height:24px}.haze-Spinner__lg{width:32px;height:32px}
445
453
  }
446
454
 
455
+ @layer haze {
456
+ .haze-Splitter__splitterBase{box-sizing:border-box;min-width:0;min-height:0;display:flex;overflow:hidden}.haze-Splitter__splitterHorizontal{flex-direction:row;height:100%}.haze-Splitter__splitterVertical{flex-direction:column;width:100%}.haze-Splitter__paneBase{box-sizing:border-box;flex-shrink:0;flex-basis:0;min-width:0;min-height:0;overflow:auto}.haze-Splitter__dividerBase{background:var(--haze-color-border);-webkit-transition:background var(--haze-duration-fast);transition:background var(--haze-duration-fast);-webkit-background-clip:content-box;background-clip:content-box;flex:none;position:relative}.haze-Splitter__dividerBase:hover{background:linear-gradient(to right, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/2px 100% no-repeat,var(--haze-color-bg-subtle)}.haze-Splitter__dividerBase:has(>:focus-visible){background:linear-gradient(to right, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/2px 100% no-repeat,var(--haze-color-bg-subtle)}.haze-Splitter__dividerBase:has(>:focus-visible){box-shadow:inset 0 0 0 2px var(--haze-color-focus-ring);outline:none}.haze-Splitter__dividerBase:hover>[data-slot=divider-collapse],.haze-Splitter__dividerBase:focus-within>[data-slot=divider-collapse],.haze-Splitter__dividerBase>[data-slot=divider-collapse]:focus-visible{opacity:1;pointer-events:auto}@media (forced-colors:active){.haze-Splitter__dividerBase{background:canvastext;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:hover{background:highlight;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:has(>:focus-visible){background:highlight;-webkit-background-clip:content-box;background-clip:content-box}.haze-Splitter__dividerBase:has(>:focus-visible){outline-offset:-2px;outline:2px solid highlight}}.haze-Splitter__dividerHorizontal{width:2px;height:100%;padding-inline:calc((var(--haze-space-6) - 2px) / 2);cursor:col-resize}@media (pointer:coarse){.haze-Splitter__dividerHorizontal{padding-inline:21px}}.haze-Splitter__dividerVertical{width:100%;height:2px;padding-block:calc((var(--haze-space-6) - 2px) / 2);cursor:row-resize}.haze-Splitter__dividerVertical:hover,.haze-Splitter__dividerVertical:focus-visible{background:linear-gradient(to bottom, transparent 0, var(--haze-color-primary) 50%, transparent 100%) center/100% 2px no-repeat,var(--haze-color-bg-subtle)}@media (pointer:coarse){.haze-Splitter__dividerVertical{padding-block:21px}}.haze-Splitter__dividerHandle{touch-action:none;position:absolute;inset:0}.haze-Splitter__dividerHandle:focus-visible{outline:none}.haze-Splitter__collapseButtonBase{box-sizing:border-box;width:var(--haze-space-6);height:var(--haze-space-6);border-radius:var(--haze-radius-sm);background:var(--haze-color-bg-muted);color:var(--haze-color-text-secondary);cursor:pointer;opacity:0;pointer-events:none;-webkit-transition:opacity var(--haze-duration-fast);transition:opacity var(--haze-duration-fast);border:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}.haze-Splitter__collapseButtonBase:hover{color:var(--haze-color-text)}.haze-Splitter__collapseButtonBase:focus-visible{outline:2px solid var(--haze-color-focus-ring);outline-offset:1px}@media (forced-colors:active){.haze-Splitter__collapseButtonBase{background:canvas;border:1px solid buttonborder}}.haze-Splitter__collapseLeadHorizontal{top:var(--haze-space-1);left:50%;transform:translate(-50%)}.haze-Splitter__collapseLeadHorizontal svg{transform:rotate(0)}html[dir=rtl] .haze-Splitter__collapseLeadHorizontal svg{transform:rotate(180deg)}.haze-Splitter__collapseTrailHorizontal{bottom:var(--haze-space-1);left:50%;transform:translate(-50%)}.haze-Splitter__collapseTrailHorizontal svg{transform:rotate(180deg)}html[dir=rtl] .haze-Splitter__collapseTrailHorizontal svg{transform:rotate(0)}.haze-Splitter__collapseLeadVertical{inset-inline-start:var(--haze-space-1);top:50%;transform:translateY(-50%)}.haze-Splitter__collapseLeadVertical svg{transform:rotate(90deg)}.haze-Splitter__collapseTrailVertical{inset-inline-end:var(--haze-space-1);top:50%;transform:translateY(-50%)}.haze-Splitter__collapseTrailVertical svg{transform:rotate(-90deg)}
457
+ }
458
+
447
459
  @layer haze {
448
460
  .haze-Spoiler__root{display:block}.haze-Spoiler__clip{position:relative;overflow:hidden}.haze-Spoiler__clip:after{content:"";inset-inline:0;height:var(--haze-space-8);background:linear-gradient(transparent, var(--haze-spoiler-fade-bg,var(--haze-color-bg)));pointer-events:none;position:absolute;bottom:0}@media (forced-colors:active){.haze-Spoiler__clip:after{background:0 0;border-top:1px dotted graytext}}.haze-Spoiler__toggle{appearance:none;padding:var(--haze-space-1) 0;margin-top:var(--haze-space-1);cursor:pointer;color:var(--haze-color-primary);font-family:var(--haze-font-sans);font-size:var(--haze-text-sm);background:0 0;border:none}.haze-Spoiler__toggle:hover{color:var(--haze-color-primary-hover);-webkit-text-decoration:underline;text-decoration:underline}
449
461
  }
@@ -33,45 +33,99 @@ function i(e) {
33
33
  }
34
34
  function a(e, t) {
35
35
  let n = i(e);
36
- if (n === null) return !1;
37
- let { modifiers: r, key: a } = n;
38
- return r.has("ctrl") && !t.ctrlKey || r.has("shift") && !t.shiftKey || r.has("alt") && !t.altKey || r.has("meta") && !t.metaKey || !r.has("ctrl") && t.ctrlKey || !r.has("alt") && t.altKey || !r.has("meta") && t.metaKey ? !1 : a.length === 1 ? t.key.toLowerCase() === a.toLowerCase() : t.key === a;
36
+ return n !== null && o(n, t);
39
37
  }
40
- function o(e) {
38
+ function o(e, t) {
39
+ let { modifiers: n, key: r } = e;
40
+ return n.has("ctrl") && !t.ctrlKey || n.has("shift") && !t.shiftKey || n.has("alt") && !t.altKey || n.has("meta") && !t.metaKey || !n.has("ctrl") && t.ctrlKey || !n.has("alt") && t.altKey || !n.has("meta") && t.metaKey ? !1 : r.length === 1 ? t.key.toLowerCase() === r.toLowerCase() : t.key === r;
41
+ }
42
+ function s(e) {
43
+ let t = [];
44
+ for (let n of e.split(/\s+/)) {
45
+ if (n === "") continue;
46
+ let e = i(n);
47
+ if (e === null) return null;
48
+ t.push(e);
49
+ }
50
+ return t.length >= 2 ? t : null;
51
+ }
52
+ function c(e) {
41
53
  if (!(e instanceof HTMLElement)) return !1;
42
54
  if (e.isContentEditable) return !0;
43
55
  let t = e.tagName;
44
56
  return t === "INPUT" || t === "TEXTAREA" || t === "SELECT";
45
57
  }
46
- function s(...e) {
58
+ function l(...e) {
47
59
  return e.join(",");
48
60
  }
49
- function c(n, r = {}) {
50
- let { enabled: i = !0, target: s, eventName: c = "keydown", allowInInput: l = !1 } = r, u = t(n);
61
+ function u(n, r = {}) {
62
+ let { enabled: i = !0, target: l, eventName: u = "keydown", allowInInput: d = !1, sequenceTimeout: f = 1e3 } = r, p = t(n);
63
+ e(() => {
64
+ p.current = n;
65
+ });
66
+ let m = t({
67
+ progress: /* @__PURE__ */ new Map(),
68
+ timer: null
69
+ });
51
70
  e(() => {
52
- u.current = n;
53
- }), e(() => {
54
71
  if (!i) return;
55
- let e = s === void 0 ? window : "current" in s ? s.current : s;
72
+ let e = l === void 0 ? window : "current" in l ? l.current : l;
56
73
  if (e === null) return;
57
- let t = (e) => {
58
- let t = e;
59
- if (!l && o(t.target)) return;
60
- let n = u.current;
61
- for (let e of Object.keys(n)) if (e.split(",").some((e) => a(e.trim(), t))) {
62
- let r = n[e];
63
- if (!r) continue;
64
- t.preventDefault(), t.stopPropagation(), r(t);
65
- return;
74
+ let t = () => {
75
+ let e = m.current;
76
+ e.timer !== null && (clearTimeout(e.timer), e.timer = null);
77
+ }, n = () => {
78
+ t(), m.current.progress.clear();
79
+ }, r = (e) => {
80
+ let r = e;
81
+ if (!d && c(r.target)) return;
82
+ let i = p.current, l = /* @__PURE__ */ new Map();
83
+ for (let e of Object.keys(i)) {
84
+ let t = !1;
85
+ for (let n of e.split(",")) {
86
+ let e = n.trim();
87
+ if (!/\s/.test(e)) {
88
+ if (a(e, r)) {
89
+ t = !0;
90
+ break;
91
+ }
92
+ continue;
93
+ }
94
+ let i = s(e);
95
+ if (i === null) continue;
96
+ let c = m.current.progress.get(e) ?? 0, u = i[c];
97
+ if (u !== void 0 && o(u, r)) {
98
+ if (c + 1 === i.length) {
99
+ t = !0;
100
+ break;
101
+ }
102
+ l.set(e, c + 1);
103
+ } else {
104
+ let t = i[0];
105
+ t !== void 0 && o(t, r) && l.set(e, 1);
106
+ }
107
+ }
108
+ if (t) {
109
+ let t = i[e];
110
+ if (!t) continue;
111
+ n(), r.preventDefault(), r.stopPropagation(), t(r);
112
+ return;
113
+ }
66
114
  }
115
+ l.size > 0 ? (t(), m.current.progress = l, m.current.timer = setTimeout(() => {
116
+ m.current.progress.clear(), m.current.timer = null;
117
+ }, f)) : n();
118
+ };
119
+ return e.addEventListener(u, r), () => {
120
+ e.removeEventListener(u, r), n();
67
121
  };
68
- return e.addEventListener(c, t), () => e.removeEventListener(c, t);
69
122
  }, [
70
123
  i,
71
- s,
72
- c,
73
- l
124
+ l,
125
+ u,
126
+ d,
127
+ f
74
128
  ]);
75
129
  }
76
130
  //#endregion
77
- export { s as hotkey, c as useHotkeys };
131
+ export { l as hotkey, u as useHotkeys };