@nice2dev/ui-3d 1.0.5 → 1.0.6

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 (95) hide show
  1. package/dist/cjs/core/i18n.js +3 -3
  2. package/dist/cjs/dance/DanceBridge.js +13 -13
  3. package/dist/cjs/dance/DanceScoreEngine.js +8 -8
  4. package/dist/cjs/dance/PoseDetector.js +20 -20
  5. package/dist/cjs/material/NiceMaterialEditor.js +19 -19
  6. package/dist/cjs/model/ModelEditorLeftPanel.js +5 -5
  7. package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -1
  8. package/dist/cjs/model/ModelEditorMenuBar.js +6 -5
  9. package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -1
  10. package/dist/cjs/model/ModelEditorRightPanel.js +19 -17
  11. package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -1
  12. package/dist/cjs/model/ModelEditorSubComponents.js +10 -9
  13. package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -1
  14. package/dist/cjs/model/ModelEditorTimeline.js +6 -5
  15. package/dist/cjs/model/ModelEditorTimeline.js.map +1 -1
  16. package/dist/cjs/model/ModelEditorToolbar.js +4 -4
  17. package/dist/cjs/model/ModelEditorToolbar.js.map +1 -1
  18. package/dist/cjs/model/ModelEditorViewport.js +2 -2
  19. package/dist/cjs/model/ModelViewer.js +14 -13
  20. package/dist/cjs/model/ModelViewer.js.map +1 -1
  21. package/dist/cjs/model/NiceArmatureEditor.js +18 -18
  22. package/dist/cjs/model/NiceMorphTargetEditor.js +18 -18
  23. package/dist/cjs/model/NiceOctree.js +16 -16
  24. package/dist/cjs/model/NicePhysicsSimulation.js +24 -24
  25. package/dist/cjs/model/NiceProceduralGeometry.js +8 -8
  26. package/dist/cjs/model/NiceTerrainEditor.js +19 -19
  27. package/dist/cjs/model/NiceWeightPainter.js +14 -14
  28. package/dist/cjs/model/NiceXRPreview.js +18 -18
  29. package/dist/cjs/model/useModelEditor.js +127 -127
  30. package/dist/cjs/model/useModelViewer.js +61 -61
  31. package/dist/cjs/particle/NiceParticleEditor.js +11 -11
  32. package/dist/cjs/rendering/NiceCascadedShadows.js +12 -12
  33. package/dist/cjs/rendering/NiceRenderExport.js +5 -5
  34. package/dist/cjs/rendering/NiceSSAO.js +18 -18
  35. package/dist/cjs/rendering/NiceSSR.js +14 -14
  36. package/dist/cjs/rendering/NiceWebGPURenderer.js +21 -21
  37. package/dist/cjs/ui/dist/NiceButton-DmTHNHet.js +453 -0
  38. package/dist/cjs/ui/dist/NiceButton-DmTHNHet.js.map +1 -0
  39. package/dist/cjs/ui/dist/NiceErrorBoundary-D1hh5GGe.js +543 -0
  40. package/dist/cjs/ui/dist/NiceErrorBoundary-D1hh5GGe.js.map +1 -0
  41. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js +4772 -0
  42. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js.map +1 -0
  43. package/dist/cjs/ui/dist/NicePinCodeInput-4q8yULuo.js +11329 -0
  44. package/dist/cjs/ui/dist/NicePinCodeInput-4q8yULuo.js.map +1 -0
  45. package/dist/cjs/ui/dist/NiceSavedQueryPanel-DUw8plYP.js +5544 -0
  46. package/dist/cjs/ui/dist/NiceSavedQueryPanel-DUw8plYP.js.map +1 -0
  47. package/dist/cjs/ui/dist/NiceStockChart-Cpmv9_Cc.js +2244 -0
  48. package/dist/cjs/ui/dist/NiceStockChart-Cpmv9_Cc.js.map +1 -0
  49. package/dist/cjs/ui/dist/NiceToggle-C1UKGXmJ.js +212 -0
  50. package/dist/cjs/ui/dist/NiceToggle-C1UKGXmJ.js.map +1 -0
  51. package/dist/cjs/ui/dist/NiceWindow-D1awkyFl.js +697 -0
  52. package/dist/cjs/ui/dist/NiceWindow-D1awkyFl.js.map +1 -0
  53. package/dist/cjs/ui/dist/core-CfXsl755.js +9597 -0
  54. package/dist/cjs/ui/dist/core-CfXsl755.js.map +1 -0
  55. package/dist/cjs/ui/dist/index-CNwVELPJ.js +31214 -0
  56. package/dist/cjs/ui/dist/index-CNwVELPJ.js.map +1 -0
  57. package/dist/cjs/ui/dist/index-x8mRM4Jc.js +20 -0
  58. package/dist/cjs/ui/dist/index-x8mRM4Jc.js.map +1 -0
  59. package/dist/cjs/uv/NiceUVEditor.js +24 -24
  60. package/dist/esm/model/ModelEditorLeftPanel.js +5 -5
  61. package/dist/esm/model/ModelEditorMenuBar.js +6 -5
  62. package/dist/esm/model/ModelEditorMenuBar.js.map +1 -1
  63. package/dist/esm/model/ModelEditorRightPanel.js +19 -17
  64. package/dist/esm/model/ModelEditorRightPanel.js.map +1 -1
  65. package/dist/esm/model/ModelEditorSubComponents.js +7 -6
  66. package/dist/esm/model/ModelEditorSubComponents.js.map +1 -1
  67. package/dist/esm/model/ModelEditorTimeline.js +6 -5
  68. package/dist/esm/model/ModelEditorTimeline.js.map +1 -1
  69. package/dist/esm/model/ModelEditorToolbar.js +4 -4
  70. package/dist/esm/model/ModelEditorViewport.js +2 -2
  71. package/dist/esm/model/ModelViewer.js +6 -5
  72. package/dist/esm/model/ModelViewer.js.map +1 -1
  73. package/dist/esm/ui/dist/NiceButton-DmTHNHet.js +448 -0
  74. package/dist/esm/ui/dist/NiceButton-DmTHNHet.js.map +1 -0
  75. package/dist/esm/ui/dist/NiceErrorBoundary-D1hh5GGe.js +533 -0
  76. package/dist/esm/ui/dist/NiceErrorBoundary-D1hh5GGe.js.map +1 -0
  77. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js +4731 -0
  78. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-BapdidD6.js.map +1 -0
  79. package/dist/esm/ui/dist/NicePinCodeInput-4q8yULuo.js +11259 -0
  80. package/dist/esm/ui/dist/NicePinCodeInput-4q8yULuo.js.map +1 -0
  81. package/dist/esm/ui/dist/NiceSavedQueryPanel-DUw8plYP.js +5527 -0
  82. package/dist/esm/ui/dist/NiceSavedQueryPanel-DUw8plYP.js.map +1 -0
  83. package/dist/esm/ui/dist/NiceStockChart-Cpmv9_Cc.js +2222 -0
  84. package/dist/esm/ui/dist/NiceStockChart-Cpmv9_Cc.js.map +1 -0
  85. package/dist/esm/ui/dist/NiceToggle-C1UKGXmJ.js +208 -0
  86. package/dist/esm/ui/dist/NiceToggle-C1UKGXmJ.js.map +1 -0
  87. package/dist/esm/ui/dist/NiceWindow-D1awkyFl.js +686 -0
  88. package/dist/esm/ui/dist/NiceWindow-D1awkyFl.js.map +1 -0
  89. package/dist/esm/ui/dist/core-CfXsl755.js +9419 -0
  90. package/dist/esm/ui/dist/core-CfXsl755.js.map +1 -0
  91. package/dist/esm/ui/dist/index-CNwVELPJ.js +31110 -0
  92. package/dist/esm/ui/dist/index-CNwVELPJ.js.map +1 -0
  93. package/dist/esm/ui/dist/index-x8mRM4Jc.js +18 -0
  94. package/dist/esm/ui/dist/index-x8mRM4Jc.js.map +1 -0
  95. package/package.json +1 -1
@@ -0,0 +1,686 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { b as de, u as ys, a as ei, d as cl } from './core-CfXsl755.js';
3
+ import { useState, useRef, forwardRef, useCallback, useEffect, createContext } from 'react';
4
+ import 'react-dom';
5
+
6
+ const Dt = ({
7
+ visible: e,
8
+ onClose: n,
9
+ title: r,
10
+ items: i,
11
+ showCancelButton: h = true,
12
+ cancelText: d,
13
+ className: m,
14
+ style: g
15
+ }) => {
16
+ const { t: p } = de();
17
+ return e ? /* @__PURE__ */ jsxs(Fragment, { children: [
18
+ /* @__PURE__ */ jsx("div", { className: "nice-actionsheet__overlay", onClick: n }),
19
+ /* @__PURE__ */ jsxs("div", { className: `nice-actionsheet ${m || ""}`, style: g, children: [
20
+ r && /* @__PURE__ */ jsx("div", { className: "nice-actionsheet__title", children: r }),
21
+ /* @__PURE__ */ jsx("div", { className: "nice-actionsheet__items", children: i.map((x, a) => /* @__PURE__ */ jsxs(
22
+ "button",
23
+ {
24
+ className: `nice-actionsheet__item ${x.type === "danger" ? "nice-actionsheet__item--danger" : ""}`,
25
+ disabled: x.disabled,
26
+ onClick: () => {
27
+ x.onClick?.(), n();
28
+ },
29
+ children: [
30
+ x.icon && /* @__PURE__ */ jsx("span", { className: "nice-actionsheet__icon", children: x.icon }),
31
+ x.text
32
+ ]
33
+ },
34
+ a
35
+ )) }),
36
+ h && /* @__PURE__ */ jsx("button", { className: "nice-actionsheet__cancel", onClick: n, children: d || p("cancel", "Cancel") })
37
+ ] })
38
+ ] }) : null;
39
+ }, Wt = ({
40
+ visible: e,
41
+ onClose: n,
42
+ targetRef: r,
43
+ position: i = "bottom",
44
+ title: h,
45
+ showArrow: d = true,
46
+ width: m,
47
+ children: g,
48
+ className: p,
49
+ style: x,
50
+ displayStyle: a
51
+ }) => {
52
+ cl("tooltip", a);
53
+ const M = useRef(null), [C, f] = useState({ top: 0, left: 0 }), N = useCallback(() => {
54
+ const s = r.current, k = M.current;
55
+ if (!s || !k) return;
56
+ const c = s.getBoundingClientRect(), v = k.getBoundingClientRect();
57
+ let _ = 0, I = 0;
58
+ const R = 8;
59
+ switch (i) {
60
+ case "top":
61
+ _ = c.top - v.height - R, I = c.left + (c.width - v.width) / 2;
62
+ break;
63
+ case "bottom":
64
+ _ = c.bottom + R, I = c.left + (c.width - v.width) / 2;
65
+ break;
66
+ case "left":
67
+ _ = c.top + (c.height - v.height) / 2, I = c.left - v.width - R;
68
+ break;
69
+ case "right":
70
+ _ = c.top + (c.height - v.height) / 2, I = c.right + R;
71
+ break;
72
+ }
73
+ f({ top: _ + window.scrollY, left: I + window.scrollX });
74
+ }, [r, i]);
75
+ return useEffect(() => {
76
+ if (e) {
77
+ requestAnimationFrame(N);
78
+ const s = (k) => {
79
+ M.current && !M.current.contains(k.target) && r.current && !r.current.contains(k.target) && n();
80
+ };
81
+ return document.addEventListener("mousedown", s), () => document.removeEventListener("mousedown", s);
82
+ }
83
+ }, [e, N, n, r]), e ? /* @__PURE__ */ jsxs(
84
+ "div",
85
+ {
86
+ ref: M,
87
+ className: `nice-popover nice-popover--${i} ${p || ""}`,
88
+ style: { ...x, position: "absolute", top: C.top, left: C.left, width: m },
89
+ children: [
90
+ d && /* @__PURE__ */ jsx("div", { className: `nice-popover__arrow nice-popover__arrow--${i}` }),
91
+ h && /* @__PURE__ */ jsx("div", { className: "nice-popover__title", children: h }),
92
+ /* @__PURE__ */ jsx("div", { className: "nice-popover__content", children: g })
93
+ ]
94
+ }
95
+ ) : null;
96
+ }, Ft = ({
97
+ visible: e,
98
+ message: n,
99
+ container: r,
100
+ showIndicator: i = true,
101
+ shading: h = true,
102
+ className: d,
103
+ style: m
104
+ }) => {
105
+ const { t: g } = de();
106
+ if (!e) return null;
107
+ const p = !!r?.current, x = /* @__PURE__ */ jsxs("div", { className: `nice-loadpanel ${d || ""}`, style: m, children: [
108
+ h && /* @__PURE__ */ jsx("div", { className: "nice-loadpanel__shade" }),
109
+ /* @__PURE__ */ jsxs("div", { className: "nice-loadpanel__box", children: [
110
+ i && /* @__PURE__ */ jsx("div", { className: "nice-spinner nice-spinner--md" }),
111
+ /* @__PURE__ */ jsx("span", { className: "nice-loadpanel__text", children: n || g("loading", "Loading...") })
112
+ ] })
113
+ ] });
114
+ if (p && r.current) {
115
+ const a = r.current;
116
+ return a.style.position = a.style.position || "relative", x;
117
+ }
118
+ return x;
119
+ }, Ut = ({
120
+ direction: e = "row",
121
+ align: n,
122
+ justify: r,
123
+ wrap: i,
124
+ gap: h,
125
+ flex: d,
126
+ children: m,
127
+ className: g,
128
+ style: p
129
+ }) => /* @__PURE__ */ jsx(
130
+ "div",
131
+ {
132
+ className: `nice-box ${g || ""}`,
133
+ style: {
134
+ display: "flex",
135
+ flexDirection: e,
136
+ alignItems: n,
137
+ justifyContent: r,
138
+ flexWrap: i ? "wrap" : void 0,
139
+ gap: h,
140
+ flex: d,
141
+ ...p
142
+ },
143
+ children: m
144
+ }
145
+ ), Gt = ({
146
+ direction: e = "row",
147
+ items: n,
148
+ gap: r,
149
+ className: i,
150
+ style: h
151
+ }) => /* @__PURE__ */ jsx(
152
+ "div",
153
+ {
154
+ className: `nice-responsivebox ${i || ""}`,
155
+ style: { display: "flex", flexDirection: e, gap: r, ...h },
156
+ children: n.map((d, m) => /* @__PURE__ */ jsx("div", { style: { flex: d.ratio ?? 1, flexBasis: d.baseSize, flexShrink: d.shrink ?? 1 }, children: d.children }, m))
157
+ }
158
+ ), Vt = ({
159
+ width: e = 200,
160
+ height: n = 200,
161
+ minWidth: r = 50,
162
+ minHeight: i = 50,
163
+ maxWidth: h = 1 / 0,
164
+ maxHeight: d = 1 / 0,
165
+ handles: m = ["right", "bottom", "bottomRight"],
166
+ onResize: g,
167
+ children: p,
168
+ className: x,
169
+ style: a
170
+ }) => {
171
+ const [M, C] = useState({ width: e, height: n }), f = useRef(null), N = (c, v) => {
172
+ v.preventDefault();
173
+ const _ = v.clientX, I = v.clientY, R = M.width, O = M.height, t = (E) => {
174
+ const T = E.clientX - _, P = E.clientY - I;
175
+ let S = R, u = O;
176
+ (c.includes("right") || c === "right") && (S = R + T), (c.includes("bottom") || c === "bottom") && (u = O + P), (c.includes("left") || c === "left") && (S = R - T), (c.includes("top") || c === "top") && (u = O - P), S = Math.max(r, Math.min(h, S)), u = Math.max(i, Math.min(d, u)), C({ width: S, height: u }), g?.({ width: S, height: u });
177
+ }, l = () => {
178
+ document.removeEventListener("pointermove", t), document.removeEventListener("pointerup", l);
179
+ };
180
+ document.addEventListener("pointermove", t), document.addEventListener("pointerup", l);
181
+ }, s = (c) => {
182
+ switch (c) {
183
+ case "top":
184
+ case "bottom":
185
+ return "ns-resize";
186
+ case "left":
187
+ case "right":
188
+ return "ew-resize";
189
+ case "topLeft":
190
+ case "bottomRight":
191
+ return "nwse-resize";
192
+ case "topRight":
193
+ case "bottomLeft":
194
+ return "nesw-resize";
195
+ default:
196
+ return "default";
197
+ }
198
+ }, k = (c) => {
199
+ const v = { position: "absolute", zIndex: 1 }, _ = 8;
200
+ return c === "right" ? { ...v, top: 0, right: -_ / 2, width: _, height: "100%", cursor: s(c) } : c === "bottom" ? { ...v, left: 0, bottom: -_ / 2, width: "100%", height: _, cursor: s(c) } : c === "left" ? { ...v, top: 0, left: -_ / 2, width: _, height: "100%", cursor: s(c) } : c === "top" ? { ...v, top: -_ / 2, left: 0, width: "100%", height: _, cursor: s(c) } : c === "bottomRight" ? { ...v, bottom: -_ / 2, right: -_ / 2, width: _ * 2, height: _ * 2, cursor: s(c) } : c === "bottomLeft" ? { ...v, bottom: -_ / 2, left: -_ / 2, width: _ * 2, height: _ * 2, cursor: s(c) } : c === "topRight" ? { ...v, top: -_ / 2, right: -_ / 2, width: _ * 2, height: _ * 2, cursor: s(c) } : c === "topLeft" ? { ...v, top: -_ / 2, left: -_ / 2, width: _ * 2, height: _ * 2, cursor: s(c) } : v;
201
+ };
202
+ return /* @__PURE__ */ jsxs(
203
+ "div",
204
+ {
205
+ ref: f,
206
+ className: `nice-resizable ${x || ""}`,
207
+ style: { ...a, width: M.width, height: M.height, position: "relative", overflow: "hidden" },
208
+ children: [
209
+ p,
210
+ m.map((c) => /* @__PURE__ */ jsx("div", { style: k(c), onPointerDown: (v) => N(c, v) }, c))
211
+ ]
212
+ }
213
+ );
214
+ }, jt = ({
215
+ direction: e = "vertical",
216
+ showScrollbar: n = "onInteraction",
217
+ width: r,
218
+ height: i,
219
+ onScroll: h,
220
+ children: d,
221
+ className: m,
222
+ style: g
223
+ }) => {
224
+ const p = e === "horizontal" || e === "both" ? "auto" : "hidden", x = e === "vertical" || e === "both" ? "auto" : "hidden";
225
+ return /* @__PURE__ */ jsx(
226
+ "div",
227
+ {
228
+ className: `nice-scrollview ${n === "never" ? "nice-scrollview--hide-sb" : n === "always" ? "nice-scrollview--show-sb" : ""} ${m || ""}`,
229
+ style: { ...g, width: r, height: i, overflowX: p, overflowY: x },
230
+ onScroll: h,
231
+ children: d
232
+ }
233
+ );
234
+ };
235
+ createContext(null);
236
+ const Nt = forwardRef(({
237
+ blocked: e,
238
+ message: n,
239
+ children: r,
240
+ className: i,
241
+ style: h,
242
+ id: d
243
+ }, m) => {
244
+ const g = ys(d);
245
+ return /* @__PURE__ */ jsxs(
246
+ "div",
247
+ {
248
+ ref: m,
249
+ id: g,
250
+ className: `nice-block-ui ${i || ""}`,
251
+ style: { position: "relative", ...h },
252
+ children: [
253
+ r,
254
+ e && /* @__PURE__ */ jsx("div", { className: "nice-block-ui__overlay", "aria-busy": "true", role: "alert", children: n && /* @__PURE__ */ jsx("div", { className: "nice-block-ui__message", children: n }) })
255
+ ]
256
+ }
257
+ );
258
+ });
259
+ Nt.displayName = "NiceBlockUI";
260
+ const kt = forwardRef(
261
+ ({
262
+ windows: e,
263
+ onChange: n,
264
+ onClose: r,
265
+ onFocus: i,
266
+ showTaskbar: h = true,
267
+ size: d = "md",
268
+ className: m,
269
+ style: g,
270
+ id: p,
271
+ ...x
272
+ }, a) => {
273
+ const M = ys(p), { t: C } = de(), [f, N] = useState(null), s = useRef(null), k = Math.max(1, ...e.map((t) => t.zIndex ?? 1)), c = useCallback(
274
+ (t, l) => {
275
+ const E = e.map((T) => T.key === t ? { ...T, ...l } : T);
276
+ n?.(E);
277
+ },
278
+ [e, n]
279
+ ), v = useCallback(
280
+ (t) => {
281
+ c(t, { zIndex: k + 1 }), i?.(t);
282
+ },
283
+ [c, k, i]
284
+ ), _ = useCallback(
285
+ (t) => {
286
+ r?.(t), n?.(e.filter((l) => l.key !== t));
287
+ },
288
+ [e, n, r]
289
+ ), I = useCallback(
290
+ (t) => {
291
+ const l = e.find((E) => E.key === t);
292
+ l && c(t, { minimized: !l.minimized, maximized: false });
293
+ },
294
+ [e, c]
295
+ ), R = useCallback(
296
+ (t) => {
297
+ const l = e.find((E) => E.key === t);
298
+ l && c(t, { maximized: !l.maximized, minimized: false });
299
+ },
300
+ [e, c]
301
+ );
302
+ useEffect(() => {
303
+ if (!f) return;
304
+ const t = (E) => {
305
+ const T = e.find((P) => P.key === f.key);
306
+ if (T)
307
+ if (f.mode === "move")
308
+ c(f.key, {
309
+ x: E.clientX - f.offsetX,
310
+ y: E.clientY - f.offsetY
311
+ });
312
+ else {
313
+ const S = s.current?.getBoundingClientRect(), u = S?.left ?? 0, y = S?.top ?? 0;
314
+ c(f.key, {
315
+ width: Math.max(200, E.clientX - u - T.x),
316
+ height: Math.max(100, E.clientY - y - T.y)
317
+ });
318
+ }
319
+ }, l = () => N(null);
320
+ return document.addEventListener("mousemove", t), document.addEventListener("mouseup", l), () => {
321
+ document.removeEventListener("mousemove", t), document.removeEventListener("mouseup", l);
322
+ };
323
+ }, [f, e, c]);
324
+ const O = useCallback(
325
+ (t, l, E) => {
326
+ l.preventDefault();
327
+ const T = e.find((P) => P.key === t);
328
+ T && (v(t), N({
329
+ key: t,
330
+ offsetX: E === "move" ? l.clientX - T.x : 0,
331
+ offsetY: E === "move" ? l.clientY - T.y : 0,
332
+ mode: E
333
+ }));
334
+ },
335
+ [e, v]
336
+ );
337
+ return /* @__PURE__ */ jsxs(
338
+ "div",
339
+ {
340
+ ref: (t) => {
341
+ s.current = t, typeof a == "function" ? a(t) : a && (a.current = t);
342
+ },
343
+ id: M,
344
+ className: `nice-wm nice-wm--${d} ${m ?? ""}`,
345
+ style: { ...g, position: "relative", overflow: "hidden" },
346
+ ...x,
347
+ children: [
348
+ e.map((t) => {
349
+ if (t.minimized) return null;
350
+ const l = t.maximized, E = l ? { position: "absolute", top: 0, left: 0, width: "100%", height: "100%", zIndex: t.zIndex ?? 1 } : { position: "absolute", top: t.y, left: t.x, width: t.width, height: t.height, zIndex: t.zIndex ?? 1 };
351
+ return /* @__PURE__ */ jsxs(
352
+ "div",
353
+ {
354
+ className: `nice-wm__window ${l ? "nice-wm__window--maximized" : ""}`,
355
+ style: E,
356
+ onMouseDown: () => v(t.key),
357
+ role: "dialog",
358
+ "aria-label": t.title,
359
+ children: [
360
+ /* @__PURE__ */ jsxs(
361
+ "div",
362
+ {
363
+ className: "nice-wm__titlebar",
364
+ onMouseDown: (T) => !l && O(t.key, T, "move"),
365
+ children: [
366
+ t.icon && /* @__PURE__ */ jsx("span", { className: "nice-wm__icon", children: t.icon }),
367
+ /* @__PURE__ */ jsx("span", { className: "nice-wm__title", children: t.title }),
368
+ /* @__PURE__ */ jsxs("div", { className: "nice-wm__controls", children: [
369
+ (t.minimizable ?? true) && /* @__PURE__ */ jsx("button", { type: "button", className: "nice-wm__ctrl-btn nice-wm__ctrl-btn--min", onClick: () => I(t.key), title: C("wm.minimize", "Minimize"), children: "─" }),
370
+ (t.maximizable ?? true) && /* @__PURE__ */ jsx("button", { type: "button", className: "nice-wm__ctrl-btn nice-wm__ctrl-btn--max", onClick: () => R(t.key), title: C("wm.maximize", "Maximize"), children: l ? "❐" : "☐" }),
371
+ (t.closable ?? true) && /* @__PURE__ */ jsx("button", { type: "button", className: "nice-wm__ctrl-btn nice-wm__ctrl-btn--close", onClick: () => _(t.key), title: C("wm.close", "Close"), children: "✕" })
372
+ ] })
373
+ ]
374
+ }
375
+ ),
376
+ /* @__PURE__ */ jsx("div", { className: "nice-wm__body", children: t.content }),
377
+ (t.resizable ?? true) && !l && /* @__PURE__ */ jsx(
378
+ "div",
379
+ {
380
+ className: "nice-wm__resize-handle",
381
+ onMouseDown: (T) => O(t.key, T, "resize")
382
+ }
383
+ )
384
+ ]
385
+ },
386
+ t.key
387
+ );
388
+ }),
389
+ h && /* @__PURE__ */ jsx("div", { className: "nice-wm__taskbar", role: "toolbar", "aria-label": C("wm.taskbar", "Taskbar"), children: e.map((t) => /* @__PURE__ */ jsxs(
390
+ "button",
391
+ {
392
+ type: "button",
393
+ className: `nice-wm__taskbar-btn ${t.minimized ? "nice-wm__taskbar-btn--minimized" : ""}`,
394
+ onClick: () => {
395
+ t.minimized && I(t.key), v(t.key);
396
+ },
397
+ children: [
398
+ t.icon && /* @__PURE__ */ jsx("span", { className: "nice-wm__taskbar-icon", children: t.icon }),
399
+ /* @__PURE__ */ jsx("span", { className: "nice-wm__taskbar-label", children: t.title })
400
+ ]
401
+ },
402
+ t.key
403
+ )) })
404
+ ]
405
+ }
406
+ );
407
+ }
408
+ );
409
+ kt.displayName = "NiceWindowManager";
410
+ createContext({
411
+ startTutorial: () => {
412
+ },
413
+ stopTutorial: () => {
414
+ },
415
+ isActive: false,
416
+ currentStep: 0,
417
+ nextStep: () => {
418
+ },
419
+ prevStep: () => {
420
+ },
421
+ goToStep: () => {
422
+ }
423
+ });
424
+ function It(e, n, r, i, h) {
425
+ const d = e <= h, m = e + h >= r, g = n <= h, p = n + h >= i;
426
+ return g && d ? "top-left" : g && m ? "top-right" : p && d ? "bottom-left" : p && m ? "bottom-right" : d ? "left" : m ? "right" : g ? "top" : p ? "bottom" : "none";
427
+ }
428
+ function Ct(e) {
429
+ switch (e) {
430
+ case "left":
431
+ return { left: 0, top: 0, width: "50%", height: "100%" };
432
+ case "right":
433
+ return { left: "50%", top: 0, width: "50%", height: "100%" };
434
+ case "top":
435
+ return { left: 0, top: 0, width: "100%", height: "50%" };
436
+ case "bottom":
437
+ return { left: 0, top: "50%", width: "100%", height: "50%" };
438
+ case "top-left":
439
+ return { left: 0, top: 0, width: "50%", height: "50%" };
440
+ case "top-right":
441
+ return { left: "50%", top: 0, width: "50%", height: "50%" };
442
+ case "bottom-left":
443
+ return { left: 0, top: "50%", width: "50%", height: "50%" };
444
+ case "bottom-right":
445
+ return { left: "50%", top: "50%", width: "50%", height: "50%" };
446
+ default:
447
+ return null;
448
+ }
449
+ }
450
+ const Tt = forwardRef(
451
+ ({
452
+ windowKey: e,
453
+ title: n,
454
+ icon: r,
455
+ children: i,
456
+ footer: h,
457
+ x: d = 100,
458
+ y: m = 100,
459
+ width: g = 480,
460
+ height: p = 360,
461
+ minWidth: x = 200,
462
+ minHeight: a = 120,
463
+ maxWidth: M,
464
+ maxHeight: C,
465
+ zIndex: f = 1,
466
+ closable: N = true,
467
+ minimizable: s = true,
468
+ maximizable: k = true,
469
+ fullscreenable: c = false,
470
+ pinnable: v = false,
471
+ resizable: _ = true,
472
+ draggable: I = true,
473
+ snappable: R = true,
474
+ snapThreshold: O = 20,
475
+ minimized: t,
476
+ maximized: l,
477
+ fullscreen: E,
478
+ pinned: T,
479
+ focused: P,
480
+ onClose: S,
481
+ onMinimize: u,
482
+ onMaximize: y,
483
+ onFullscreen: w,
484
+ onPin: A,
485
+ onFocus: Y,
486
+ onMove: ne,
487
+ onResize: ae,
488
+ onSnap: L,
489
+ onTitleBarDoubleClick: B,
490
+ size: ye = "md",
491
+ statusBar: Re,
492
+ titleBarActions: qe,
493
+ className: Be,
494
+ style: Ae,
495
+ id: $e,
496
+ accessMode: We,
497
+ ...Fe
498
+ }, Ue) => {
499
+ const Ge = ys($e), Ve = ei(We, $e), { t: le } = de();
500
+ if (Ve === "hidden") return null;
501
+ const [pe, re] = useState({ x: d, y: m }), [_e, ge] = useState({ width: g, height: p }), [je, Qe] = useState(false), [Ze, Je] = useState(false), [Ke, et] = useState(false), [tt, nt] = useState(false), [V, xe] = useState("none"), it = t ?? je, G = l ?? Ze, U = E ?? Ke, de$1 = T ?? tt, Ne = P ?? true, ie = pe.x, oe = pe.y, Z = _e.width, J = _e.height, j = useRef(null), F = useRef(null), H = useRef(null), ot = useCallback(() => {
502
+ S?.(e);
503
+ }, [e, S]), rt = useCallback(() => {
504
+ Qe(true), u?.(e);
505
+ }, [e, u]), ke = useCallback(() => {
506
+ const $ = !G;
507
+ Je($), !$ && H.current ? (re({ x: H.current.x, y: H.current.y }), ge({ width: H.current.w, height: H.current.h }), H.current = null) : $ && (H.current = { x: ie, y: oe, w: Z, h: J }), xe("none"), y?.(e, $);
508
+ }, [e, G, ie, oe, Z, J, y]), Ee = useCallback(() => {
509
+ const $ = !U;
510
+ et($), $ ? H.current = { x: ie, y: oe, w: Z, h: J } : H.current && (re({ x: H.current.x, y: H.current.y }), ge({ width: H.current.w, height: H.current.h }), H.current = null), w?.(e, $);
511
+ }, [e, U, ie, oe, Z, J, w]), ct = useCallback(() => {
512
+ const $ = !de$1;
513
+ nt($), A?.(e, $);
514
+ }, [e, de$1, A]), ue = useCallback(() => {
515
+ Y?.(e);
516
+ }, [e, Y]), st = useCallback(() => {
517
+ B ? B(e) : k && ke();
518
+ }, [e, k, ke, B]);
519
+ useEffect(() => {
520
+ if (!j.current) return;
521
+ const $ = (K) => {
522
+ if (!j.current) return;
523
+ const Q = K.clientX - j.current.startX + j.current.origX, me = K.clientY - j.current.startY + j.current.origY;
524
+ re({ x: Q, y: me }), ne?.(e, { x: Q, y: me });
525
+ }, W = (K) => {
526
+ if (j.current) {
527
+ if (R) {
528
+ const Q = It(K.clientX, K.clientY, window.innerWidth, window.innerHeight, O);
529
+ Q !== "none" && (H.current = { x: pe.x, y: pe.y, w: Z, h: J }, xe(Q), L?.(e, Q));
530
+ }
531
+ j.current = null;
532
+ }
533
+ };
534
+ return document.addEventListener("mousemove", $), document.addEventListener("mouseup", W), () => {
535
+ document.removeEventListener("mousemove", $), document.removeEventListener("mouseup", W);
536
+ };
537
+ });
538
+ const at = useCallback(
539
+ ($) => {
540
+ !I || G || U || ($.preventDefault(), V !== "none" && (H.current && (re({ x: H.current.x, y: H.current.y }), ge({ width: H.current.w, height: H.current.h })), xe("none")), ue(), j.current = { startX: $.clientX, startY: $.clientY, origX: ie, origY: oe });
541
+ },
542
+ [I, G, U, V, ie, oe, ue]
543
+ );
544
+ useEffect(() => {
545
+ if (!F.current) return;
546
+ const $ = (K) => {
547
+ if (!F.current) return;
548
+ const Q = K.clientX - F.current.startX, me = K.clientY - F.current.startY, ce = F.current.handle;
549
+ let ee = F.current.origW, te = F.current.origH;
550
+ if (ce.includes("e") && (ee = F.current.origW + Q), ce.includes("w") && (ee = F.current.origW - Q), ce.includes("s") && (te = F.current.origH + me), ce.includes("n") && (te = F.current.origH - me), ee = Math.max(x, M ? Math.min(M, ee) : ee), te = Math.max(a, C ? Math.min(C, te) : te), ce.includes("w")) {
551
+ const Me = _e.width - ee;
552
+ re((he) => ({ ...he, x: he.x + Me }));
553
+ }
554
+ if (ce.includes("n")) {
555
+ const Me = _e.height - te;
556
+ re((he) => ({ ...he, y: he.y + Me }));
557
+ }
558
+ ge({ width: ee, height: te }), ae?.(e, { width: ee, height: te });
559
+ }, W = () => {
560
+ F.current = null;
561
+ };
562
+ return document.addEventListener("mousemove", $), document.addEventListener("mouseup", W), () => {
563
+ document.removeEventListener("mousemove", $), document.removeEventListener("mouseup", W);
564
+ };
565
+ });
566
+ const lt = useCallback(
567
+ ($, W) => {
568
+ !_ || G || U || V !== "none" || (W.preventDefault(), W.stopPropagation(), ue(), F.current = { startX: W.clientX, startY: W.clientY, origW: Z, origH: J, handle: $ });
569
+ },
570
+ [_, G, U, V, Z, J, ue]
571
+ );
572
+ if (useEffect(() => {
573
+ if (!Ne) return;
574
+ const $ = (W) => {
575
+ W.key === "Escape" && U && Ee();
576
+ };
577
+ return document.addEventListener("keydown", $), () => document.removeEventListener("keydown", $);
578
+ }, [Ne, U, Ee]), it) return null;
579
+ const Se = V !== "none" ? Ct(V) : null, Le = G || U, dt = U ? { position: "fixed", top: 0, left: 0, width: "100vw", height: "100vh", zIndex: 999999 } : G ? { position: "absolute", top: 0, left: 0, width: "100%", height: "100%", zIndex: f } : Se ? { position: "absolute", ...Se, zIndex: f } : { position: "absolute", top: oe, left: ie, width: Z, height: J, zIndex: f }, ut = ["n", "e", "s", "w", "ne", "se", "sw", "nw"], mt = {
580
+ n: "ns-resize",
581
+ s: "ns-resize",
582
+ e: "ew-resize",
583
+ w: "ew-resize",
584
+ ne: "nesw-resize",
585
+ sw: "nesw-resize",
586
+ nw: "nwse-resize",
587
+ se: "nwse-resize"
588
+ };
589
+ return /* @__PURE__ */ jsxs(
590
+ "div",
591
+ {
592
+ ref: Ue,
593
+ id: Ge,
594
+ className: `nice-window nice-window--${ye} ${Ne ? "nice-window--focused" : ""} ${de$1 ? "nice-window--pinned" : ""} ${Le ? "nice-window--maximized" : ""} ${V !== "none" ? `nice-window--snapped-${V}` : ""} ${Be ?? ""}`,
595
+ style: { ...dt, ...Ae },
596
+ onMouseDown: ue,
597
+ role: "dialog",
598
+ "aria-label": n,
599
+ ...Fe,
600
+ children: [
601
+ /* @__PURE__ */ jsxs(
602
+ "div",
603
+ {
604
+ className: "nice-window__titlebar",
605
+ onMouseDown: at,
606
+ onDoubleClick: st,
607
+ children: [
608
+ r && /* @__PURE__ */ jsx("span", { className: "nice-window__icon", children: r }),
609
+ /* @__PURE__ */ jsx("span", { className: "nice-window__title", children: n }),
610
+ /* @__PURE__ */ jsxs("div", { className: "nice-window__actions", children: [
611
+ qe,
612
+ v && /* @__PURE__ */ jsx(
613
+ "button",
614
+ {
615
+ type: "button",
616
+ className: `nice-window__action nice-window__action--pin ${de$1 ? "nice-window__action--active" : ""}`,
617
+ onClick: ct,
618
+ title: le("window.pin", de$1 ? "Unpin" : "Pin"),
619
+ children: "📌"
620
+ }
621
+ ),
622
+ s && /* @__PURE__ */ jsx(
623
+ "button",
624
+ {
625
+ type: "button",
626
+ className: "nice-window__action nice-window__action--minimize",
627
+ onClick: rt,
628
+ title: le("window.minimize", "Minimize"),
629
+ children: "─"
630
+ }
631
+ ),
632
+ k && /* @__PURE__ */ jsx(
633
+ "button",
634
+ {
635
+ type: "button",
636
+ className: "nice-window__action nice-window__action--maximize",
637
+ onClick: ke,
638
+ title: le("window.maximize", G ? "Restore" : "Maximize"),
639
+ children: G ? "❐" : "☐"
640
+ }
641
+ ),
642
+ c && /* @__PURE__ */ jsx(
643
+ "button",
644
+ {
645
+ type: "button",
646
+ className: "nice-window__action nice-window__action--fullscreen",
647
+ onClick: Ee,
648
+ title: le("window.fullscreen", U ? "Exit Full Screen" : "Full Screen"),
649
+ children: U ? "⇲" : "⇱"
650
+ }
651
+ ),
652
+ N && /* @__PURE__ */ jsx(
653
+ "button",
654
+ {
655
+ type: "button",
656
+ className: "nice-window__action nice-window__action--close",
657
+ onClick: ot,
658
+ title: le("window.close", "Close"),
659
+ children: "✕"
660
+ }
661
+ )
662
+ ] })
663
+ ]
664
+ }
665
+ ),
666
+ /* @__PURE__ */ jsx("div", { className: "nice-window__body", children: i }),
667
+ h && /* @__PURE__ */ jsx("div", { className: "nice-window__footer", children: h }),
668
+ Re && /* @__PURE__ */ jsx("div", { className: "nice-window__statusbar", children: Re }),
669
+ _ && !Le && V === "none" && /* @__PURE__ */ jsx(Fragment, { children: ut.map(($) => /* @__PURE__ */ jsx(
670
+ "div",
671
+ {
672
+ className: `nice-window__resize nice-window__resize--${$}`,
673
+ style: { cursor: mt[$] },
674
+ onMouseDown: (W) => lt($, W)
675
+ },
676
+ $
677
+ )) })
678
+ ]
679
+ }
680
+ );
681
+ }
682
+ );
683
+ Tt.displayName = "NiceWindow";
684
+
685
+ export { Dt as N, Nt as a, Ut as c, Ft as g, Wt as m, Vt as n, Gt as o, jt as p, Tt as s, kt as t };
686
+ //# sourceMappingURL=NiceWindow-D1awkyFl.js.map