@weasel-js/ui 1.4.4 → 1.5.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 (161) hide show
  1. package/dist/chunks/{BandEditor-CUlbOlJi.js → BandEditor-BeWO56_w.js} +1 -1
  2. package/dist/chunks/{BandEditor-CUlbOlJi.js.map → BandEditor-BeWO56_w.js.map} +1 -1
  3. package/dist/chunks/{Callout-Dvt6lqVn.js → Callout-BPIA2is-.js} +1 -1
  4. package/dist/chunks/{Callout-Dvt6lqVn.js.map → Callout-BPIA2is-.js.map} +1 -1
  5. package/dist/chunks/ComboBox-CPES6Y1i.js +138 -0
  6. package/dist/chunks/ComboBox-CPES6Y1i.js.map +1 -0
  7. package/dist/chunks/CurveEditor-Cj0lLiyR.js +533 -0
  8. package/dist/chunks/CurveEditor-Cj0lLiyR.js.map +1 -0
  9. package/dist/chunks/{DetentSlider-BpD7bgjN.js → DetentSlider-CYicfnKr.js} +2 -2
  10. package/dist/chunks/{DetentSlider-BpD7bgjN.js.map → DetentSlider-CYicfnKr.js.map} +1 -1
  11. package/dist/chunks/{GradientEditor-BLpAtMDK.js → GradientEditor-dBprHbS0.js} +2 -2
  12. package/dist/chunks/{GradientEditor-BLpAtMDK.js.map → GradientEditor-dBprHbS0.js.map} +1 -1
  13. package/dist/chunks/MenuButton-Do8fFUx1.js +60 -0
  14. package/dist/chunks/MenuButton-Do8fFUx1.js.map +1 -0
  15. package/dist/chunks/NumberField-BWzhqS19.js +112 -0
  16. package/dist/chunks/NumberField-BWzhqS19.js.map +1 -0
  17. package/dist/chunks/{PaintInput-B7AScmHN.js → PaintInput-DAevU7fd.js} +2 -2
  18. package/dist/chunks/{PaintInput-B7AScmHN.js.map → PaintInput-DAevU7fd.js.map} +1 -1
  19. package/dist/chunks/Plot2D-CVZwQpWJ.js +292 -0
  20. package/dist/chunks/Plot2D-CVZwQpWJ.js.map +1 -0
  21. package/dist/chunks/{PointPlotter-CbDKVggs.js → PointPlotter-anTHwz8f.js} +2 -2
  22. package/dist/chunks/PointPlotter-anTHwz8f.js.map +1 -0
  23. package/dist/chunks/Prefs-CzIn-hlq.js +302 -0
  24. package/dist/chunks/Prefs-CzIn-hlq.js.map +1 -0
  25. package/dist/chunks/Properties-DJaDEJkT.js +765 -0
  26. package/dist/chunks/Properties-DJaDEJkT.js.map +1 -0
  27. package/dist/chunks/{ResizeHandle-BrCO0JrH.js → ResizeHandle-CiExUWP-.js} +1 -1
  28. package/dist/chunks/{ResizeHandle-BrCO0JrH.js.map → ResizeHandle-CiExUWP-.js.map} +1 -1
  29. package/dist/chunks/{SelectionPanel-C59wavdA.js → SelectionPanel-CbyUT3Dh.js} +204 -194
  30. package/dist/chunks/SelectionPanel-CbyUT3Dh.js.map +1 -0
  31. package/dist/chunks/{Sidebar-BvwjZiFm.js → Sidebar-Cqcfx3_s.js} +1 -1
  32. package/dist/chunks/{Sidebar-BvwjZiFm.js.map → Sidebar-Cqcfx3_s.js.map} +1 -1
  33. package/dist/chunks/{SidebarPanel-D5Ua2vyP.js → SidebarPanel-BLzBo0S2.js} +1 -1
  34. package/dist/chunks/{SidebarPanel-D5Ua2vyP.js.map → SidebarPanel-BLzBo0S2.js.map} +1 -1
  35. package/dist/chunks/{Slider-Bs-KSYgQ.js → Slider--DFRC_hc.js} +2 -2
  36. package/dist/chunks/{Slider-Bs-KSYgQ.js.map → Slider--DFRC_hc.js.map} +1 -1
  37. package/dist/chunks/{StatusBar-Bqv4D0dW.js → StatusBar-B9NQ8atD.js} +1 -1
  38. package/dist/chunks/{StatusBar-Bqv4D0dW.js.map → StatusBar-B9NQ8atD.js.map} +1 -1
  39. package/dist/chunks/{Tabs-BT3CDkoQ.js → Tabs-9sODd2Ut.js} +1 -1
  40. package/dist/chunks/{Tabs-BT3CDkoQ.js.map → Tabs-9sODd2Ut.js.map} +1 -1
  41. package/dist/chunks/Timeline-DOZgb1CG.js +915 -0
  42. package/dist/chunks/Timeline-DOZgb1CG.js.map +1 -0
  43. package/dist/chunks/{Toast-B7ylq7fz.js → Toast-LpN1WK8E.js} +1 -1
  44. package/dist/chunks/{Toast-B7ylq7fz.js.map → Toast-LpN1WK8E.js.map} +1 -1
  45. package/dist/chunks/{ToolButton-CtDkqUIc.js → ToolButton-B81YjdwO.js} +1 -1
  46. package/dist/chunks/{ToolButton-CtDkqUIc.js.map → ToolButton-B81YjdwO.js.map} +1 -1
  47. package/dist/chunks/{ToolGroup-zDtqt0QJ.js → ToolGroup-D7juDOC_.js} +1 -1
  48. package/dist/chunks/{ToolGroup-zDtqt0QJ.js.map → ToolGroup-D7juDOC_.js.map} +1 -1
  49. package/dist/chunks/{ToolPalette-BbrMHfQ9.js → ToolPalette-BSzmRJS7.js} +3 -3
  50. package/dist/chunks/{ToolPalette-BbrMHfQ9.js.map → ToolPalette-BSzmRJS7.js.map} +1 -1
  51. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js +694 -0
  52. package/dist/chunks/createKeyframeLayer-AL4jP0EX.js.map +1 -0
  53. package/dist/chunks/number-f6PydOZK.js +52 -0
  54. package/dist/chunks/number-f6PydOZK.js.map +1 -0
  55. package/dist/chunks/{schema-CtWwGbqJ.js → schema-CPdFNeP6.js} +15 -9
  56. package/dist/chunks/schema-CPdFNeP6.js.map +1 -0
  57. package/dist/components/BandEditor/index.js +1 -1
  58. package/dist/components/Callout/index.js +1 -1
  59. package/dist/components/ComboBox/ComboBox.d.ts +36 -0
  60. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  61. package/dist/components/ComboBox/index.d.ts +1 -1
  62. package/dist/components/ComboBox/index.d.ts.map +1 -1
  63. package/dist/components/ComboBox/index.js +1 -1
  64. package/dist/components/CurveEditor/CurveEditor.d.ts +4 -2
  65. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
  66. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts +8 -1
  67. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  68. package/dist/components/CurveEditor/createFunctionLayer.d.ts +2 -0
  69. package/dist/components/CurveEditor/createFunctionLayer.d.ts.map +1 -1
  70. package/dist/components/CurveEditor/createKeyframeLayer.d.ts +70 -0
  71. package/dist/components/CurveEditor/createKeyframeLayer.d.ts.map +1 -0
  72. package/dist/components/CurveEditor/index.d.ts +3 -1
  73. package/dist/components/CurveEditor/index.d.ts.map +1 -1
  74. package/dist/components/CurveEditor/index.js +3 -2
  75. package/dist/components/CurveEditor/layerTypes.d.ts +8 -3
  76. package/dist/components/CurveEditor/layerTypes.d.ts.map +1 -1
  77. package/dist/components/CurveEditor/snap.d.ts +3 -0
  78. package/dist/components/CurveEditor/snap.d.ts.map +1 -0
  79. package/dist/components/DetentSlider/index.js +1 -1
  80. package/dist/components/GradientEditor/index.js +1 -1
  81. package/dist/components/MenuButton/MenuButton.d.ts +29 -0
  82. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -0
  83. package/dist/components/MenuButton/index.d.ts +3 -0
  84. package/dist/components/MenuButton/index.d.ts.map +1 -0
  85. package/dist/components/MenuButton/index.js +2 -0
  86. package/dist/components/NumberField/UnitField.d.ts +30 -0
  87. package/dist/components/NumberField/UnitField.d.ts.map +1 -0
  88. package/dist/components/NumberField/index.d.ts +2 -0
  89. package/dist/components/NumberField/index.d.ts.map +1 -1
  90. package/dist/components/NumberField/index.js +2 -2
  91. package/dist/components/PaintInput/index.js +1 -1
  92. package/dist/components/Plot2D/Plot2D.d.ts +38 -2
  93. package/dist/components/Plot2D/Plot2D.d.ts.map +1 -1
  94. package/dist/components/Plot2D/index.d.ts +2 -1
  95. package/dist/components/Plot2D/index.d.ts.map +1 -1
  96. package/dist/components/Plot2D/index.js +2 -2
  97. package/dist/components/Plot2D/ticks.d.ts +43 -0
  98. package/dist/components/Plot2D/ticks.d.ts.map +1 -0
  99. package/dist/components/PointPlotter/PointPlotter.d.ts +3 -1
  100. package/dist/components/PointPlotter/PointPlotter.d.ts.map +1 -1
  101. package/dist/components/PointPlotter/index.js +1 -1
  102. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  103. package/dist/components/Prefs/index.d.ts +1 -1
  104. package/dist/components/Prefs/index.d.ts.map +1 -1
  105. package/dist/components/Prefs/index.js +3 -3
  106. package/dist/components/Prefs/schema.d.ts +5 -2
  107. package/dist/components/Prefs/schema.d.ts.map +1 -1
  108. package/dist/components/Properties/PropertyPanel.d.ts +15 -6
  109. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  110. package/dist/components/Properties/index.js +1 -1
  111. package/dist/components/ResizeHandle/index.js +1 -1
  112. package/dist/components/SelectionPanel/index.js +1 -1
  113. package/dist/components/Sidebar/index.js +1 -1
  114. package/dist/components/SidebarPanel/index.js +1 -1
  115. package/dist/components/Slider/index.js +1 -1
  116. package/dist/components/StatusBar/index.js +1 -1
  117. package/dist/components/Tabs/index.js +1 -1
  118. package/dist/components/Timeline/Lane.d.ts +9 -7
  119. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  120. package/dist/components/Timeline/LaneGraph.d.ts +24 -0
  121. package/dist/components/Timeline/LaneGraph.d.ts.map +1 -0
  122. package/dist/components/Timeline/Ruler.d.ts.map +1 -1
  123. package/dist/components/Timeline/Timeline.d.ts.map +1 -1
  124. package/dist/components/Timeline/index.js +1 -1
  125. package/dist/components/Timeline/keys.d.ts +4 -3
  126. package/dist/components/Timeline/keys.d.ts.map +1 -1
  127. package/dist/components/Timeline/timeScale.d.ts +2 -0
  128. package/dist/components/Timeline/timeScale.d.ts.map +1 -1
  129. package/dist/components/Toast/index.js +1 -1
  130. package/dist/components/ToolButton/index.js +1 -1
  131. package/dist/components/ToolGroup/index.js +1 -1
  132. package/dist/components/ToolPalette/index.js +1 -1
  133. package/dist/format/number.d.ts +16 -0
  134. package/dist/format/number.d.ts.map +1 -1
  135. package/dist/index.d.ts +4 -1
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +99 -64
  138. package/dist/index.js.map +1 -1
  139. package/dist/style.css +1 -1
  140. package/dist/useAsyncOptions.d.ts +38 -0
  141. package/dist/useAsyncOptions.d.ts.map +1 -0
  142. package/package.json +7 -6
  143. package/dist/chunks/ComboBox-BBRRWvdc.js +0 -107
  144. package/dist/chunks/ComboBox-BBRRWvdc.js.map +0 -1
  145. package/dist/chunks/CurveEditor-DtjdpJVB.js +0 -784
  146. package/dist/chunks/CurveEditor-DtjdpJVB.js.map +0 -1
  147. package/dist/chunks/NumberField-DBowmOfe.js +0 -62
  148. package/dist/chunks/NumberField-DBowmOfe.js.map +0 -1
  149. package/dist/chunks/Plot2D-C97pO13t.js +0 -134
  150. package/dist/chunks/Plot2D-C97pO13t.js.map +0 -1
  151. package/dist/chunks/PointPlotter-CbDKVggs.js.map +0 -1
  152. package/dist/chunks/Prefs-4JSEtuU-.js +0 -294
  153. package/dist/chunks/Prefs-4JSEtuU-.js.map +0 -1
  154. package/dist/chunks/Properties-BpUYKi7-.js +0 -758
  155. package/dist/chunks/Properties-BpUYKi7-.js.map +0 -1
  156. package/dist/chunks/SelectionPanel-C59wavdA.js.map +0 -1
  157. package/dist/chunks/Timeline-Bz806JbE.js +0 -908
  158. package/dist/chunks/Timeline-Bz806JbE.js.map +0 -1
  159. package/dist/chunks/number-Bv1nbhOJ.js +0 -18
  160. package/dist/chunks/number-Bv1nbhOJ.js.map +0 -1
  161. package/dist/chunks/schema-CtWwGbqJ.js.map +0 -1
@@ -0,0 +1,694 @@
1
+ import { t as e } from "./dlog-CMYiRF3Q.js";
2
+ import { c as t, s as n, t as r } from "./Plot2D-CVZwQpWJ.js";
3
+ import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ import { cubicBezierEasing as s, openPointerSession as c, resolveEasing as l } from "@weasel-js/core";
5
+ import { useCallback as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
6
+ //#region src/components/CurveEditor/hitTest.ts
7
+ function h(e, t, n) {
8
+ let r = n * n, i = null;
9
+ for (let n = 0; n < e.length; n++) {
10
+ let a = e[n], o = a.x - t.x, s = a.y - t.y, c = o * o + s * s;
11
+ c > r || (i === null || c < i.d2) && (i = {
12
+ index: n,
13
+ d2: c
14
+ });
15
+ }
16
+ return i ? { index: i.index } : null;
17
+ }
18
+ function g(e, t, n) {
19
+ let r = n * n, i = null;
20
+ for (let n = 0; n < e.length; n++) {
21
+ let a = e[n];
22
+ if (a.length < 2) continue;
23
+ let o = a.length - 1;
24
+ for (let e = 0; e < o; e++) {
25
+ let s = a[e], c = a[e + 1], l = c.x - s.x, u = c.y - s.y, d = t.x - s.x, f = t.y - s.y, p = l * l + u * u, m = p > 0 ? (d * l + f * u) / p : 0;
26
+ m < 0 ? m = 0 : m > 1 && (m = 1);
27
+ let h = s.x + m * l, g = s.y + m * u, _ = h - t.x, v = g - t.y, y = _ * _ + v * v;
28
+ if (y > r) continue;
29
+ let b = (e + m) / o;
30
+ (i === null || y < i.d2) && (i = {
31
+ segIdx: n,
32
+ t: b,
33
+ d2: y
34
+ });
35
+ }
36
+ }
37
+ return i ? {
38
+ segIdx: i.segIdx,
39
+ t: i.t
40
+ } : null;
41
+ }
42
+ var _ = {
43
+ root: "_root_19koz_1",
44
+ fill: "_fill_19koz_19",
45
+ curve: "_curve_19koz_25",
46
+ anchor: "_anchor_19koz_32",
47
+ active: "_active_19koz_43",
48
+ pinned: "_pinned_19koz_48",
49
+ locked: "_locked_19koz_55",
50
+ endpoint: "_endpoint_19koz_63",
51
+ hidden: "_hidden_19koz_71",
52
+ keyframe: "_keyframe_19koz_85",
53
+ handle: "_handle_19koz_92",
54
+ segmentTarget: "_segmentTarget_19koz_98",
55
+ keyframeGhost: "_keyframeGhost_19koz_108",
56
+ segmentBand: "_segmentBand_19koz_116",
57
+ handleStem: "_handleStem_19koz_136"
58
+ }, v = {
59
+ shift: !1,
60
+ alt: !1,
61
+ meta: !1,
62
+ ctrl: !1
63
+ };
64
+ function y(e) {
65
+ return {
66
+ shift: e.shiftKey,
67
+ alt: e.altKey,
68
+ meta: e.metaKey,
69
+ ctrl: e.ctrlKey
70
+ };
71
+ }
72
+ function b(i) {
73
+ let { layers: s, onLayerChange: l, onLayerCommit: h, width: g, height: b, xRange: x = [0, 1], yRange: S = [0, 1], grid: C, axes: w, xTicks: T, yTicks: E, className: D, style: O, children: k } = i, A = i.history !== !1, j = f(() => ({
74
+ xMin: x[0],
75
+ xMax: x[1],
76
+ yMin: S[0],
77
+ yMax: S[1]
78
+ }), [x, S]), M = f(() => ({
79
+ width: g,
80
+ height: b
81
+ }), [g, b]), N = p(s);
82
+ N.current = s;
83
+ let P = p(j);
84
+ P.current = j;
85
+ let F = p(M);
86
+ F.current = M;
87
+ let I = p(null), L = u((e) => {
88
+ let r = P.current, i = F.current;
89
+ return {
90
+ modelRange: r,
91
+ plotSize: i,
92
+ toPlot: (e) => n(e, r, i),
93
+ toModel: (e) => t(e, r, i),
94
+ modifiers: e
95
+ };
96
+ }, []), R = p(null), [z, B] = m(null), V = p([]), H = p([]), U = u(() => {
97
+ let e = /* @__PURE__ */ new Map();
98
+ for (let t of N.current) e.set(t.layer.id, t.state);
99
+ return e;
100
+ }, []), W = u((e) => {
101
+ let t = N.current;
102
+ for (let n of t) {
103
+ let t = e.get(n.layer.id);
104
+ t !== void 0 && t !== n.state && l(n.layer.id, t);
105
+ }
106
+ }, [l]), G = u(() => {
107
+ if (!A) return;
108
+ let e = V.current;
109
+ if (e.length === 0) return;
110
+ let t = e.pop();
111
+ H.current.push(U()), W(t);
112
+ }, [
113
+ A,
114
+ U,
115
+ W
116
+ ]), K = u(() => {
117
+ if (!A) return;
118
+ let e = H.current;
119
+ if (e.length === 0) return;
120
+ let t = e.pop();
121
+ V.current.push(U()), W(t);
122
+ }, [
123
+ A,
124
+ U,
125
+ W
126
+ ]), q = p(() => {}), J = p(() => {}), Y = p(() => {}), X = p(null), Z = u(() => {
127
+ X.current = null, R.current = null, B(null);
128
+ }, []), Q = u((e) => {
129
+ for (let t of N.current) if (t.layer.id === e) return t.state;
130
+ }, []);
131
+ q.current = (e) => {
132
+ let t = R.current;
133
+ if (!t) return;
134
+ let n = I.current;
135
+ if (!n) return;
136
+ let r = n.clientToModel(e), i = Q(t.layerId);
137
+ if (i === void 0) return;
138
+ let a = L(y(e)), o = t.gesture.onMove(i, r, e, a);
139
+ o !== i && l(t.layerId, o);
140
+ }, J.current = (e) => {
141
+ let t = R.current;
142
+ if (!t) return;
143
+ let n = Q(t.layerId);
144
+ if (n === void 0) {
145
+ Z();
146
+ return;
147
+ }
148
+ let r = L(y(e)), i = t.gesture.onCommit ? t.gesture.onCommit(n, r) : n;
149
+ i !== n && l(t.layerId, i), A && (V.current.push(t.startStates), H.current = []), h && h(t.layerId, i, t.startSelfState), Z();
150
+ }, Y.current = () => {
151
+ let e = R.current;
152
+ if (!e) return;
153
+ let t = Q(e.layerId);
154
+ if (t === void 0) {
155
+ Z();
156
+ return;
157
+ }
158
+ let n = L(v), r = e.gesture.onCancel ? e.gesture.onCancel(t, n) : e.startSelfState;
159
+ r !== t && l(e.layerId, r), Z();
160
+ };
161
+ let $ = u((e, t, n) => {
162
+ let r = U();
163
+ R.current = {
164
+ layerId: e,
165
+ gesture: n,
166
+ startStates: r,
167
+ startSelfState: r.get(e)
168
+ }, B(e), X.current = c(t.currentTarget, t, {
169
+ onMove: (e) => q.current(e),
170
+ onEnd: (e) => J.current(e),
171
+ onCancel: () => Y.current()
172
+ }, { capture: !1 });
173
+ }, [U]), ee = u((t, n) => {
174
+ if (R.current) return;
175
+ let r = L(y(t)), i = N.current, a = t.nativeEvent;
176
+ e("layered-curve-editor", "pointerdown", {
177
+ plot: n.plot,
178
+ model: n.model,
179
+ layers: i.length
180
+ });
181
+ let o = U();
182
+ for (let e = i.length - 1; e >= 0; e--) {
183
+ let s = i[e], c = s.layer.hitTest?.(s.state, n.plot, r);
184
+ if (!c) continue;
185
+ let u = s.state, d, f = s.layer.onPointerDown?.(u, c, a, r, {
186
+ plot: n.plot,
187
+ model: n.model,
188
+ commit(e) {
189
+ d = e, l(s.layer.id, e);
190
+ }
191
+ });
192
+ if (t.stopPropagation(), f) {
193
+ $(s.layer.id, t, f);
194
+ return;
195
+ }
196
+ d !== void 0 && (A && (V.current.push(o), H.current = []), h?.(s.layer.id, d, u));
197
+ return;
198
+ }
199
+ let s = null;
200
+ for (let e = i.length - 1; e >= 0; e--) {
201
+ let c = i[e];
202
+ if (!c.layer.onEmptyPointerDown) continue;
203
+ let u = c.state, d, f = c.layer.onEmptyPointerDown(u, n.model, a, r, {
204
+ plot: n.plot,
205
+ model: n.model,
206
+ commit(e) {
207
+ d = e, l(c.layer.id, e);
208
+ }
209
+ });
210
+ if (f) {
211
+ $(c.layer.id, t, f), d !== void 0 && R.current !== null && (R.current.startStates = o, R.current.startSelfState = o.get(c.layer.id));
212
+ return;
213
+ }
214
+ if (d !== void 0) {
215
+ s = {
216
+ id: c.layer.id,
217
+ next: d,
218
+ prev: u
219
+ };
220
+ break;
221
+ }
222
+ }
223
+ s && (A && (V.current.push(o), H.current = []), h?.(s.id, s.next, s.prev));
224
+ }, [
225
+ L,
226
+ $,
227
+ l,
228
+ h,
229
+ A,
230
+ U
231
+ ]), te = u((e) => {
232
+ let t = L(y(e)), n = N.current;
233
+ if (A && (e.metaKey || e.ctrlKey)) {
234
+ let t = e.key.toLowerCase();
235
+ if (t === "z") {
236
+ e.shiftKey ? K() : G(), e.preventDefault();
237
+ return;
238
+ }
239
+ if (t === "y") {
240
+ K(), e.preventDefault();
241
+ return;
242
+ }
243
+ }
244
+ for (let r = n.length - 1; r >= 0; r--) {
245
+ let i = n[r];
246
+ if (!i.layer.onKeyDown) continue;
247
+ let a = U(), o;
248
+ if (i.layer.onKeyDown(i.state, e.nativeEvent, t, { commit(e) {
249
+ o = e, l(i.layer.id, e);
250
+ } }), o !== void 0 && (A && (V.current.push(a), H.current = []), h?.(i.layer.id, o, i.state)), e.nativeEvent.defaultPrevented) return;
251
+ }
252
+ }, [
253
+ A,
254
+ G,
255
+ K,
256
+ L,
257
+ U,
258
+ l,
259
+ h
260
+ ]);
261
+ d(() => () => {
262
+ X.current?.cancel();
263
+ }, []);
264
+ let ne = f(() => ({
265
+ modelRange: j,
266
+ plotSize: M,
267
+ toPlot: (e) => n(e, j, M),
268
+ toModel: (e) => t(e, j, M)
269
+ }), [j, M]);
270
+ return /* @__PURE__ */ o(r, {
271
+ ref: I,
272
+ className: [_.root, D].filter(Boolean).join(" "),
273
+ style: O,
274
+ width: g,
275
+ height: b,
276
+ xRange: x,
277
+ yRange: S,
278
+ grid: C,
279
+ axes: w,
280
+ xTicks: T,
281
+ yTicks: E,
282
+ tabIndex: A ? 0 : void 0,
283
+ role: "group",
284
+ "aria-label": i["aria-label"],
285
+ onPointerDown: ee,
286
+ onKeyDown: te,
287
+ children: [k, s.map((e) => {
288
+ let t = {
289
+ ...ne,
290
+ modifiers: {
291
+ shift: !1,
292
+ alt: !1,
293
+ meta: !1,
294
+ ctrl: !1
295
+ },
296
+ isActive: z === e.layer.id
297
+ };
298
+ return /* @__PURE__ */ a("g", {
299
+ "data-layer-id": e.layer.id,
300
+ children: e.layer.render(e.state, t)
301
+ }, e.layer.id);
302
+ })]
303
+ });
304
+ }
305
+ //#endregion
306
+ //#region src/components/CurveEditor/snap.ts
307
+ function x(e, t, n) {
308
+ let r = e, i = n;
309
+ for (let n of t) {
310
+ let t = Math.abs(n - e);
311
+ t <= i && (r = n, i = t);
312
+ }
313
+ return r;
314
+ }
315
+ //#endregion
316
+ //#region src/components/CurveEditor/createKeyframeLayer.tsx
317
+ var S = 16, C = 8, w = 8, T = 6, E = 6, D = 4.5, O = 3.5, k = 10, A = .01;
318
+ function j(e) {
319
+ return {
320
+ keys: e,
321
+ selectedKey: null,
322
+ selectedSegment: null,
323
+ drag: null
324
+ };
325
+ }
326
+ function M(e, t) {
327
+ return t ? Math.min(t[1], Math.max(t[0], e)) : e;
328
+ }
329
+ function N(e) {
330
+ let t = e?.easing;
331
+ return typeof t == "object" && t && "bezier" in t ? t.bezier : null;
332
+ }
333
+ function P(e, t, n, r) {
334
+ let i = {
335
+ ...e[t],
336
+ t: n,
337
+ value: r
338
+ }, a = e.filter((e, n) => n !== t), o = a.findIndex((e) => e.t > n), s = o === -1 ? a.length : o;
339
+ return a.splice(s, 0, i), {
340
+ keys: a,
341
+ selectedKey: s
342
+ };
343
+ }
344
+ function F(e) {
345
+ let { drag: t, keys: n } = e;
346
+ if (!t) return {
347
+ keys: n,
348
+ selectedKey: e.selectedKey
349
+ };
350
+ if (t.kind === "key") {
351
+ let e = n[t.index];
352
+ return e && e.t === t.t && e.value === t.value ? {
353
+ keys: n,
354
+ selectedKey: t.index
355
+ } : P(n, t.index, t.t, t.value);
356
+ }
357
+ let r = n.slice();
358
+ return r[t.segment] = {
359
+ ...n[t.segment],
360
+ easing: { bezier: t.bezier }
361
+ }, {
362
+ keys: r,
363
+ selectedKey: e.selectedKey
364
+ };
365
+ }
366
+ function I(e = {}) {
367
+ let t = e.id ?? "keyframes", n = e.label ?? "Curve", r = e.formatX ?? ((e) => String(Math.round(e))), c = e.snapRadiusPx ?? E;
368
+ function u(e, t, n) {
369
+ let r = e.drag;
370
+ return r?.kind === "handle" && r.segment === n ? s(...r.bezier) : l(t[n].easing);
371
+ }
372
+ function d(e, t, n) {
373
+ let r = [];
374
+ for (let i = 1; i < t.length; i++) {
375
+ let a = t[i - 1], o = t[i], s = u(e, t, i), c = [];
376
+ for (let e = 0; e <= S; e++) {
377
+ let t = e / S;
378
+ c.push(n.toPlot({
379
+ x: a.t + (o.t - a.t) * t,
380
+ y: a.value + (o.value - a.value) * s(t)
381
+ }));
382
+ }
383
+ r.push(c);
384
+ }
385
+ return r;
386
+ }
387
+ function f(e) {
388
+ let t = e.selectedSegment;
389
+ if (t === null || t < 1 || t >= e.keys.length) return null;
390
+ let n = e.drag;
391
+ return n?.kind === "handle" && n.segment === t ? n.bezier : N(e.keys[t]);
392
+ }
393
+ function p(e, t, n) {
394
+ let r = e.keys[e.selectedSegment - 1], i = e.keys[e.selectedSegment], a = (e, t) => n.toPlot({
395
+ x: r.t + e * (i.t - r.t),
396
+ y: r.value + t * (i.value - r.value)
397
+ });
398
+ return [a(t[0], t[1]), a(t[2], t[3])];
399
+ }
400
+ let m = (e) => e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x.toFixed(2)},${e.y.toFixed(2)}`).join("");
401
+ function v(e, t) {
402
+ let s = e.drag?.kind === "key" ? F(e).keys : e.keys, c = d(e, s, t), l = c.flatMap((e, t) => t === 0 ? e : e.slice(1)), u = e.selectedSegment, h = f(e), g = e.drag?.kind === "key" ? e.drag.index : null;
403
+ return /* @__PURE__ */ o(i, { children: [
404
+ u !== null && u >= 1 && u < s.length ? (() => {
405
+ let e = t.toPlot({
406
+ x: s[u - 1].t,
407
+ y: 0
408
+ }).x, n = t.toPlot({
409
+ x: s[u].t,
410
+ y: 0
411
+ }).x;
412
+ return /* @__PURE__ */ a("rect", {
413
+ className: _.segmentBand,
414
+ x: Math.min(e, n),
415
+ y: 0,
416
+ width: Math.abs(n - e),
417
+ height: t.plotSize.height
418
+ });
419
+ })() : null,
420
+ l.length > 1 ? /* @__PURE__ */ a("path", {
421
+ "data-curve-element": "curve",
422
+ className: _.curve,
423
+ d: m(l)
424
+ }) : null,
425
+ c.map((e, t) => /* @__PURE__ */ a("path", {
426
+ className: _.segmentTarget,
427
+ d: m(e),
428
+ role: "button",
429
+ tabIndex: 0,
430
+ "aria-label": `${n} segment into ${r(s[t + 1].t)}`,
431
+ "aria-current": u === t + 1 ? "true" : void 0,
432
+ "data-segment-index": t + 1
433
+ }, `seg-${t + 1}`)),
434
+ h ? (() => {
435
+ let [r, s] = p(e, h, t), c = t.toPlot({
436
+ x: e.keys[u - 1].t,
437
+ y: e.keys[u - 1].value
438
+ }), l = t.toPlot({
439
+ x: e.keys[u].t,
440
+ y: e.keys[u].value
441
+ });
442
+ return /* @__PURE__ */ o(i, { children: [
443
+ /* @__PURE__ */ a("line", {
444
+ className: _.handleStem,
445
+ x1: c.x,
446
+ y1: c.y,
447
+ x2: r.x,
448
+ y2: r.y
449
+ }),
450
+ /* @__PURE__ */ a("line", {
451
+ className: _.handleStem,
452
+ x1: l.x,
453
+ y1: l.y,
454
+ x2: s.x,
455
+ y2: s.y
456
+ }),
457
+ [r, s].map((e, t) => /* @__PURE__ */ a("circle", {
458
+ className: _.handle,
459
+ cx: e.x,
460
+ cy: e.y,
461
+ r: O,
462
+ role: "button",
463
+ tabIndex: 0,
464
+ "aria-label": `${n} bezier handle ${t + 1}`,
465
+ "data-handle-index": t
466
+ }, `handle-${t}`))
467
+ ] });
468
+ })() : null,
469
+ e.keys.map((i, o) => {
470
+ let s = t.toPlot({
471
+ x: i.t,
472
+ y: i.value
473
+ });
474
+ return /* @__PURE__ */ a("rect", {
475
+ className: _.keyframe,
476
+ x: s.x - D,
477
+ y: s.y - D,
478
+ width: D * 2,
479
+ height: D * 2,
480
+ transform: `rotate(45 ${s.x} ${s.y})`,
481
+ role: "button",
482
+ tabIndex: 0,
483
+ "aria-label": `${n} key at ${r(i.t)}`,
484
+ "aria-current": e.selectedKey === o ? "true" : void 0,
485
+ "data-keyframe-index": o,
486
+ "data-dragging": g === o ? "true" : void 0
487
+ }, `key-${o}`);
488
+ }),
489
+ e.drag?.kind === "key" ? (() => {
490
+ let n = t.toPlot({
491
+ x: e.drag.t,
492
+ y: e.drag.value
493
+ });
494
+ return /* @__PURE__ */ a("rect", {
495
+ "aria-hidden": "true",
496
+ className: _.keyframeGhost,
497
+ x: n.x - D,
498
+ y: n.y - D,
499
+ width: D * 2,
500
+ height: D * 2,
501
+ transform: `rotate(45 ${n.x} ${n.y})`,
502
+ "data-keyframe-ghost": ""
503
+ });
504
+ })() : null
505
+ ] });
506
+ }
507
+ function y(e, t, n) {
508
+ let r = f(e);
509
+ if (r) {
510
+ let i = h(p(e, r, n), t, w);
511
+ if (i) return {
512
+ kind: "handle",
513
+ payload: { handle: i.index }
514
+ };
515
+ }
516
+ let i = h(e.keys.map((e) => n.toPlot({
517
+ x: e.t,
518
+ y: e.value
519
+ })), t, C);
520
+ if (i) return {
521
+ kind: "key",
522
+ payload: { index: i.index }
523
+ };
524
+ let a = g(d(e, e.keys, n), t, T);
525
+ return a ? {
526
+ kind: "segment",
527
+ payload: { segment: a.segIdx + 1 }
528
+ } : null;
529
+ }
530
+ function b(t) {
531
+ return {
532
+ onMove(n, r, i, a) {
533
+ let o = M(r.x, e.xClamp);
534
+ if (e.snapX && !i.altKey) {
535
+ let t = (a.modelRange.xMax - a.modelRange.xMin) / a.plotSize.width;
536
+ o = M(x(o, e.snapX, Math.abs(t) * c), e.xClamp);
537
+ }
538
+ return {
539
+ ...n,
540
+ drag: {
541
+ kind: "key",
542
+ index: t,
543
+ t: o,
544
+ value: M(r.y, e.yClamp)
545
+ }
546
+ };
547
+ },
548
+ onCommit(e) {
549
+ return {
550
+ ...e,
551
+ ...F(e),
552
+ drag: null
553
+ };
554
+ },
555
+ onCancel(e) {
556
+ return {
557
+ ...e,
558
+ drag: null
559
+ };
560
+ }
561
+ };
562
+ }
563
+ function j(e, t) {
564
+ return {
565
+ onMove(n, r) {
566
+ let i = n.keys[e - 1], a = n.keys[e], o = n.drag;
567
+ if (!i || !a || o?.kind !== "handle") return n;
568
+ let s = a.t === i.t ? 0 : Math.min(1, Math.max(0, (r.x - i.t) / (a.t - i.t))), c = a.value === i.value ? 0 : (r.y - i.value) / (a.value - i.value), l = [...o.bezier];
569
+ return l[t * 2] = s, l[t * 2 + 1] = c, {
570
+ ...n,
571
+ drag: {
572
+ kind: "handle",
573
+ segment: e,
574
+ bezier: l
575
+ }
576
+ };
577
+ },
578
+ onCommit(e) {
579
+ return {
580
+ ...e,
581
+ ...F(e),
582
+ drag: null
583
+ };
584
+ },
585
+ onCancel(e) {
586
+ return {
587
+ ...e,
588
+ drag: null
589
+ };
590
+ }
591
+ };
592
+ }
593
+ function I(e, t, n, r, i) {
594
+ if (n.button === 0) {
595
+ if (t.kind === "handle") {
596
+ let n = f(e), r = e.selectedSegment;
597
+ if (!n || r === null) return;
598
+ let { handle: a } = t.payload;
599
+ return i.commit({
600
+ ...e,
601
+ drag: {
602
+ kind: "handle",
603
+ segment: r,
604
+ bezier: n
605
+ }
606
+ }), j(r, a);
607
+ }
608
+ if (t.kind === "key") {
609
+ let { index: n } = t.payload, r = e.keys[n];
610
+ return i.commit({
611
+ ...e,
612
+ selectedKey: n,
613
+ drag: {
614
+ kind: "key",
615
+ index: n,
616
+ t: r.t,
617
+ value: r.value
618
+ }
619
+ }), b(n);
620
+ }
621
+ if (t.kind === "segment") {
622
+ let { segment: n } = t.payload;
623
+ i.commit({
624
+ ...e,
625
+ selectedSegment: n
626
+ });
627
+ }
628
+ }
629
+ }
630
+ function L(n, r, i, a) {
631
+ let o = r.target;
632
+ if (o?.closest?.("[data-layer-id]")?.getAttribute("data-layer-id") !== t) return;
633
+ let s = r.key === "Enter" || r.key === " ", c = r.key === "ArrowRight" ? 1 : r.key === "ArrowLeft" ? -1 : 0, l = r.key === "ArrowUp" ? 1 : r.key === "ArrowDown" ? -1 : 0, u = r.shiftKey ? k : 1, d = o.closest("[data-keyframe-index]");
634
+ if (d) {
635
+ let t = Number(d.getAttribute("data-keyframe-index")), o = n.keys[t];
636
+ if (!o) return;
637
+ if (s) {
638
+ r.preventDefault(), a.commit({
639
+ ...n,
640
+ selectedKey: t
641
+ });
642
+ return;
643
+ }
644
+ if (c === 0 && l === 0) return;
645
+ r.preventDefault();
646
+ let f = i.modelRange, p = (e.step?.x ?? Math.abs(f.xMax - f.xMin) / 100) * u, m = (e.step?.y ?? Math.abs(f.yMax - f.yMin) / 100) * u, h = M(o.t + c * p, e.xClamp), g = M(o.value + l * m, e.yClamp);
647
+ if (h === o.t && g === o.value) return;
648
+ a.commit({
649
+ ...n,
650
+ ...P(n.keys, t, h, g),
651
+ drag: null
652
+ });
653
+ return;
654
+ }
655
+ let p = o.closest("[data-segment-index]");
656
+ if (p && s) {
657
+ r.preventDefault(), a.commit({
658
+ ...n,
659
+ selectedSegment: Number(p.getAttribute("data-segment-index"))
660
+ });
661
+ return;
662
+ }
663
+ let m = o.closest("[data-handle-index]"), h = f(n);
664
+ if (m && h && n.selectedSegment !== null && (c !== 0 || l !== 0)) {
665
+ r.preventDefault();
666
+ let e = Number(m.getAttribute("data-handle-index")), t = [...h];
667
+ t[e * 2] = Math.min(1, Math.max(0, t[e * 2] + c * A * u)), t[e * 2 + 1] += l * A * u;
668
+ let i = {
669
+ kind: "handle",
670
+ segment: n.selectedSegment,
671
+ bezier: t
672
+ };
673
+ a.commit({
674
+ ...n,
675
+ ...F({
676
+ ...n,
677
+ drag: i
678
+ }),
679
+ drag: null
680
+ });
681
+ }
682
+ }
683
+ return {
684
+ id: t,
685
+ render: v,
686
+ hitTest: y,
687
+ onPointerDown: I,
688
+ onKeyDown: L
689
+ };
690
+ }
691
+ //#endregion
692
+ export { b as a, g as c, x as i, I as n, _ as o, j as r, h as s, F as t };
693
+
694
+ //# sourceMappingURL=createKeyframeLayer-AL4jP0EX.js.map