@mypixia/simplex-designer 2.0.4 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +8 -8
- package/dist/index.es.js +1255 -1166
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import Qe, { useState as N, useRef as gt, useEffect as
|
|
1
|
+
import Qe, { useState as N, useRef as gt, useEffect as rt, useMemo as ie, forwardRef as $e, useCallback as at, useReducer as He, useImperativeHandle as Ge } from "react";
|
|
2
2
|
import _e from "qrcode";
|
|
3
3
|
import Ye from "react-barcode";
|
|
4
4
|
import oe from "axios";
|
|
5
|
-
import './index_external.css';var
|
|
5
|
+
import './index_external.css';var Et = { exports: {} }, jt = {};
|
|
6
6
|
/**
|
|
7
7
|
* @license React
|
|
8
8
|
* react-jsx-runtime.production.js
|
|
@@ -14,25 +14,25 @@ import './index_external.css';var Dt = { exports: {} }, Ct = {};
|
|
|
14
14
|
*/
|
|
15
15
|
var re;
|
|
16
16
|
function qe() {
|
|
17
|
-
if (re) return
|
|
17
|
+
if (re) return jt;
|
|
18
18
|
re = 1;
|
|
19
19
|
var f = Symbol.for("react.transitional.element"), o = Symbol.for("react.fragment");
|
|
20
|
-
function a(l, s,
|
|
21
|
-
var
|
|
22
|
-
if (
|
|
23
|
-
|
|
20
|
+
function a(l, s, g) {
|
|
21
|
+
var h = null;
|
|
22
|
+
if (g !== void 0 && (h = "" + g), s.key !== void 0 && (h = "" + s.key), "key" in s) {
|
|
23
|
+
g = {};
|
|
24
24
|
for (var n in s)
|
|
25
|
-
n !== "key" && (
|
|
26
|
-
} else
|
|
27
|
-
return s =
|
|
25
|
+
n !== "key" && (g[n] = s[n]);
|
|
26
|
+
} else g = s;
|
|
27
|
+
return s = g.ref, {
|
|
28
28
|
$$typeof: f,
|
|
29
29
|
type: l,
|
|
30
|
-
key:
|
|
30
|
+
key: h,
|
|
31
31
|
ref: s !== void 0 ? s : null,
|
|
32
|
-
props:
|
|
32
|
+
props: g
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
return
|
|
35
|
+
return jt.Fragment = o, jt.jsx = a, jt.jsxs = a, jt;
|
|
36
36
|
}
|
|
37
37
|
var Tt = {};
|
|
38
38
|
/**
|
|
@@ -47,163 +47,163 @@ var Tt = {};
|
|
|
47
47
|
var ae;
|
|
48
48
|
function Ve() {
|
|
49
49
|
return ae || (ae = 1, process.env.NODE_ENV !== "production" && function() {
|
|
50
|
-
function f(
|
|
51
|
-
if (
|
|
52
|
-
if (typeof
|
|
53
|
-
return
|
|
54
|
-
if (typeof
|
|
55
|
-
switch (
|
|
56
|
-
case
|
|
50
|
+
function f(y) {
|
|
51
|
+
if (y == null) return null;
|
|
52
|
+
if (typeof y == "function")
|
|
53
|
+
return y.$$typeof === _ ? null : y.displayName || y.name || null;
|
|
54
|
+
if (typeof y == "string") return y;
|
|
55
|
+
switch (y) {
|
|
56
|
+
case p:
|
|
57
57
|
return "Fragment";
|
|
58
|
-
case
|
|
58
|
+
case X:
|
|
59
59
|
return "Profiler";
|
|
60
|
-
case
|
|
60
|
+
case v:
|
|
61
61
|
return "StrictMode";
|
|
62
|
-
case
|
|
62
|
+
case Z:
|
|
63
63
|
return "Suspense";
|
|
64
64
|
case W:
|
|
65
65
|
return "SuspenseList";
|
|
66
66
|
case ft:
|
|
67
67
|
return "Activity";
|
|
68
68
|
}
|
|
69
|
-
if (typeof
|
|
70
|
-
switch (typeof
|
|
69
|
+
if (typeof y == "object")
|
|
70
|
+
switch (typeof y.tag == "number" && console.error(
|
|
71
71
|
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
|
72
|
-
),
|
|
73
|
-
case
|
|
72
|
+
), y.$$typeof) {
|
|
73
|
+
case j:
|
|
74
74
|
return "Portal";
|
|
75
75
|
case O:
|
|
76
|
-
return (
|
|
77
|
-
case
|
|
78
|
-
return (
|
|
79
|
-
case
|
|
80
|
-
var D =
|
|
81
|
-
return
|
|
76
|
+
return (y.displayName || "Context") + ".Provider";
|
|
77
|
+
case T:
|
|
78
|
+
return (y._context.displayName || "Context") + ".Consumer";
|
|
79
|
+
case k:
|
|
80
|
+
var D = y.render;
|
|
81
|
+
return y = y.displayName, y || (y = D.displayName || D.name || "", y = y !== "" ? "ForwardRef(" + y + ")" : "ForwardRef"), y;
|
|
82
82
|
case xt:
|
|
83
|
-
return D =
|
|
83
|
+
return D = y.displayName || null, D !== null ? D : f(y.type) || "Memo";
|
|
84
84
|
case Q:
|
|
85
|
-
D =
|
|
85
|
+
D = y._payload, y = y._init;
|
|
86
86
|
try {
|
|
87
|
-
return f(
|
|
87
|
+
return f(y(D));
|
|
88
88
|
} catch {
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
return null;
|
|
92
92
|
}
|
|
93
|
-
function o(
|
|
94
|
-
return "" +
|
|
93
|
+
function o(y) {
|
|
94
|
+
return "" + y;
|
|
95
95
|
}
|
|
96
|
-
function a(
|
|
96
|
+
function a(y) {
|
|
97
97
|
try {
|
|
98
|
-
o(
|
|
98
|
+
o(y);
|
|
99
99
|
var D = !1;
|
|
100
100
|
} catch {
|
|
101
101
|
D = !0;
|
|
102
102
|
}
|
|
103
103
|
if (D) {
|
|
104
104
|
D = console;
|
|
105
|
-
var L = D.error, H = typeof Symbol == "function" && Symbol.toStringTag &&
|
|
105
|
+
var L = D.error, H = typeof Symbol == "function" && Symbol.toStringTag && y[Symbol.toStringTag] || y.constructor.name || "Object";
|
|
106
106
|
return L.call(
|
|
107
107
|
D,
|
|
108
108
|
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
109
109
|
H
|
|
110
|
-
), o(
|
|
110
|
+
), o(y);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
function l(
|
|
114
|
-
if (
|
|
115
|
-
if (typeof
|
|
113
|
+
function l(y) {
|
|
114
|
+
if (y === p) return "<>";
|
|
115
|
+
if (typeof y == "object" && y !== null && y.$$typeof === Q)
|
|
116
116
|
return "<...>";
|
|
117
117
|
try {
|
|
118
|
-
var D = f(
|
|
118
|
+
var D = f(y);
|
|
119
119
|
return D ? "<" + D + ">" : "<...>";
|
|
120
120
|
} catch {
|
|
121
121
|
return "<...>";
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
function s() {
|
|
125
|
-
var
|
|
126
|
-
return
|
|
125
|
+
var y = st.A;
|
|
126
|
+
return y === null ? null : y.getOwner();
|
|
127
127
|
}
|
|
128
|
-
function
|
|
128
|
+
function g() {
|
|
129
129
|
return Error("react-stack-top-frame");
|
|
130
130
|
}
|
|
131
|
-
function
|
|
132
|
-
if (M.call(
|
|
133
|
-
var D = Object.getOwnPropertyDescriptor(
|
|
131
|
+
function h(y) {
|
|
132
|
+
if (M.call(y, "key")) {
|
|
133
|
+
var D = Object.getOwnPropertyDescriptor(y, "key").get;
|
|
134
134
|
if (D && D.isReactWarning) return !1;
|
|
135
135
|
}
|
|
136
|
-
return
|
|
136
|
+
return y.key !== void 0;
|
|
137
137
|
}
|
|
138
|
-
function n(
|
|
138
|
+
function n(y, D) {
|
|
139
139
|
function L() {
|
|
140
140
|
ct || (ct = !0, console.error(
|
|
141
141
|
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
|
142
142
|
D
|
|
143
143
|
));
|
|
144
144
|
}
|
|
145
|
-
L.isReactWarning = !0, Object.defineProperty(
|
|
145
|
+
L.isReactWarning = !0, Object.defineProperty(y, "key", {
|
|
146
146
|
get: L,
|
|
147
147
|
configurable: !0
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
|
-
function
|
|
151
|
-
var
|
|
152
|
-
return
|
|
150
|
+
function c() {
|
|
151
|
+
var y = f(this.type);
|
|
152
|
+
return Y[y] || (Y[y] = !0, console.error(
|
|
153
153
|
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
|
154
|
-
)),
|
|
154
|
+
)), y = this.props.ref, y !== void 0 ? y : null;
|
|
155
155
|
}
|
|
156
|
-
function
|
|
157
|
-
return L =
|
|
158
|
-
$$typeof:
|
|
159
|
-
type:
|
|
156
|
+
function F(y, D, L, H, G, it, J, q) {
|
|
157
|
+
return L = it.ref, y = {
|
|
158
|
+
$$typeof: B,
|
|
159
|
+
type: y,
|
|
160
160
|
key: D,
|
|
161
|
-
props:
|
|
161
|
+
props: it,
|
|
162
162
|
_owner: G
|
|
163
|
-
}, (L !== void 0 ? L : null) !== null ? Object.defineProperty(
|
|
163
|
+
}, (L !== void 0 ? L : null) !== null ? Object.defineProperty(y, "ref", {
|
|
164
164
|
enumerable: !1,
|
|
165
|
-
get:
|
|
166
|
-
}) : Object.defineProperty(
|
|
165
|
+
get: c
|
|
166
|
+
}) : Object.defineProperty(y, "ref", { enumerable: !1, value: null }), y._store = {}, Object.defineProperty(y._store, "validated", {
|
|
167
167
|
configurable: !1,
|
|
168
168
|
enumerable: !1,
|
|
169
169
|
writable: !0,
|
|
170
170
|
value: 0
|
|
171
|
-
}), Object.defineProperty(
|
|
171
|
+
}), Object.defineProperty(y, "_debugInfo", {
|
|
172
172
|
configurable: !1,
|
|
173
173
|
enumerable: !1,
|
|
174
174
|
writable: !0,
|
|
175
175
|
value: null
|
|
176
|
-
}), Object.defineProperty(
|
|
176
|
+
}), Object.defineProperty(y, "_debugStack", {
|
|
177
177
|
configurable: !1,
|
|
178
178
|
enumerable: !1,
|
|
179
179
|
writable: !0,
|
|
180
|
-
value:
|
|
181
|
-
}), Object.defineProperty(
|
|
180
|
+
value: J
|
|
181
|
+
}), Object.defineProperty(y, "_debugTask", {
|
|
182
182
|
configurable: !1,
|
|
183
183
|
enumerable: !1,
|
|
184
184
|
writable: !0,
|
|
185
|
-
value:
|
|
186
|
-
}), Object.freeze && (Object.freeze(
|
|
185
|
+
value: q
|
|
186
|
+
}), Object.freeze && (Object.freeze(y.props), Object.freeze(y)), y;
|
|
187
187
|
}
|
|
188
|
-
function
|
|
188
|
+
function I(y, D, L, H, G, it, J, q) {
|
|
189
189
|
var U = D.children;
|
|
190
190
|
if (U !== void 0)
|
|
191
191
|
if (H)
|
|
192
192
|
if (nt(U)) {
|
|
193
193
|
for (H = 0; H < U.length; H++)
|
|
194
|
-
|
|
194
|
+
E(U[H]);
|
|
195
195
|
Object.freeze && Object.freeze(U);
|
|
196
196
|
} else
|
|
197
197
|
console.error(
|
|
198
198
|
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
199
199
|
);
|
|
200
|
-
else
|
|
200
|
+
else E(U);
|
|
201
201
|
if (M.call(D, "key")) {
|
|
202
|
-
U = f(
|
|
203
|
-
var K = Object.keys(D).filter(function(
|
|
204
|
-
return
|
|
202
|
+
U = f(y);
|
|
203
|
+
var K = Object.keys(D).filter(function(pt) {
|
|
204
|
+
return pt !== "key";
|
|
205
205
|
});
|
|
206
|
-
H = 0 < K.length ? "{key: someKey, " + K.join(": ..., ") + ": ...}" : "{key: someKey}",
|
|
206
|
+
H = 0 < K.length ? "{key: someKey, " + K.join(": ..., ") + ": ...}" : "{key: someKey}", et[U + H] || (K = 0 < K.length ? "{" + K.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
207
207
|
`A props object containing a "key" prop is being spread into JSX:
|
|
208
208
|
let props = %s;
|
|
209
209
|
<%s {...props} />
|
|
@@ -214,72 +214,72 @@ React keys must be passed directly to JSX without using spread:
|
|
|
214
214
|
U,
|
|
215
215
|
K,
|
|
216
216
|
U
|
|
217
|
-
),
|
|
217
|
+
), et[U + H] = !0);
|
|
218
218
|
}
|
|
219
|
-
if (U = null, L !== void 0 && (a(L), U = "" + L),
|
|
219
|
+
if (U = null, L !== void 0 && (a(L), U = "" + L), h(D) && (a(D.key), U = "" + D.key), "key" in D) {
|
|
220
220
|
L = {};
|
|
221
|
-
for (var
|
|
222
|
-
|
|
221
|
+
for (var kt in D)
|
|
222
|
+
kt !== "key" && (L[kt] = D[kt]);
|
|
223
223
|
} else L = D;
|
|
224
224
|
return U && n(
|
|
225
225
|
L,
|
|
226
|
-
typeof
|
|
227
|
-
),
|
|
228
|
-
|
|
226
|
+
typeof y == "function" ? y.displayName || y.name || "Unknown" : y
|
|
227
|
+
), F(
|
|
228
|
+
y,
|
|
229
229
|
U,
|
|
230
|
-
|
|
230
|
+
it,
|
|
231
231
|
G,
|
|
232
232
|
s(),
|
|
233
233
|
L,
|
|
234
|
-
|
|
235
|
-
|
|
234
|
+
J,
|
|
235
|
+
q
|
|
236
236
|
);
|
|
237
237
|
}
|
|
238
|
-
function
|
|
239
|
-
typeof
|
|
238
|
+
function E(y) {
|
|
239
|
+
typeof y == "object" && y !== null && y.$$typeof === B && y._store && (y._store.validated = 1);
|
|
240
240
|
}
|
|
241
|
-
var
|
|
241
|
+
var m = Qe, B = Symbol.for("react.transitional.element"), j = Symbol.for("react.portal"), p = Symbol.for("react.fragment"), v = Symbol.for("react.strict_mode"), X = Symbol.for("react.profiler"), T = Symbol.for("react.consumer"), O = Symbol.for("react.context"), k = Symbol.for("react.forward_ref"), Z = Symbol.for("react.suspense"), W = Symbol.for("react.suspense_list"), xt = Symbol.for("react.memo"), Q = Symbol.for("react.lazy"), ft = Symbol.for("react.activity"), _ = Symbol.for("react.client.reference"), st = m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, M = Object.prototype.hasOwnProperty, nt = Array.isArray, tt = console.createTask ? console.createTask : function() {
|
|
242
242
|
return null;
|
|
243
243
|
};
|
|
244
|
-
|
|
245
|
-
"react-stack-bottom-frame": function(
|
|
246
|
-
return
|
|
244
|
+
m = {
|
|
245
|
+
"react-stack-bottom-frame": function(y) {
|
|
246
|
+
return y();
|
|
247
247
|
}
|
|
248
248
|
};
|
|
249
|
-
var ct,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
)(),
|
|
253
|
-
Tt.Fragment =
|
|
254
|
-
var
|
|
255
|
-
return
|
|
256
|
-
|
|
249
|
+
var ct, Y = {}, P = m["react-stack-bottom-frame"].bind(
|
|
250
|
+
m,
|
|
251
|
+
g
|
|
252
|
+
)(), C = tt(l(g)), et = {};
|
|
253
|
+
Tt.Fragment = p, Tt.jsx = function(y, D, L, H, G) {
|
|
254
|
+
var it = 1e4 > st.recentlyCreatedOwnerStacks++;
|
|
255
|
+
return I(
|
|
256
|
+
y,
|
|
257
257
|
D,
|
|
258
258
|
L,
|
|
259
259
|
!1,
|
|
260
260
|
H,
|
|
261
261
|
G,
|
|
262
|
-
|
|
263
|
-
|
|
262
|
+
it ? Error("react-stack-top-frame") : P,
|
|
263
|
+
it ? tt(l(y)) : C
|
|
264
264
|
);
|
|
265
|
-
}, Tt.jsxs = function(
|
|
266
|
-
var
|
|
267
|
-
return
|
|
268
|
-
|
|
265
|
+
}, Tt.jsxs = function(y, D, L, H, G) {
|
|
266
|
+
var it = 1e4 > st.recentlyCreatedOwnerStacks++;
|
|
267
|
+
return I(
|
|
268
|
+
y,
|
|
269
269
|
D,
|
|
270
270
|
L,
|
|
271
271
|
!0,
|
|
272
272
|
H,
|
|
273
273
|
G,
|
|
274
|
-
|
|
275
|
-
|
|
274
|
+
it ? Error("react-stack-top-frame") : P,
|
|
275
|
+
it ? tt(l(y)) : C
|
|
276
276
|
);
|
|
277
277
|
};
|
|
278
278
|
}()), Tt;
|
|
279
279
|
}
|
|
280
280
|
var se;
|
|
281
281
|
function Xe() {
|
|
282
|
-
return se || (se = 1, process.env.NODE_ENV === "production" ?
|
|
282
|
+
return se || (se = 1, process.env.NODE_ENV === "production" ? Et.exports = qe() : Et.exports = Ve()), Et.exports;
|
|
283
283
|
}
|
|
284
284
|
var i = Xe();
|
|
285
285
|
const Ut = {
|
|
@@ -381,24 +381,24 @@ const Ut = {
|
|
|
381
381
|
), Je = (f) => ne().filter(
|
|
382
382
|
(a) => a.name.toLowerCase().includes(f.toLowerCase()) || a.category.toLowerCase().includes(f.toLowerCase())
|
|
383
383
|
), Ke = ({ onSelectIcon: f, disabled: o = !1 }) => {
|
|
384
|
-
const [a, l] = N(!1), [s,
|
|
385
|
-
|
|
386
|
-
const
|
|
387
|
-
|
|
384
|
+
const [a, l] = N(!1), [s, g] = N(""), [h, n] = N("all"), c = gt(null);
|
|
385
|
+
rt(() => {
|
|
386
|
+
const m = (B) => {
|
|
387
|
+
c.current && !c.current.contains(B.target) && l(!1);
|
|
388
388
|
};
|
|
389
|
-
return document.addEventListener("mousedown",
|
|
389
|
+
return document.addEventListener("mousedown", m), () => document.removeEventListener("mousedown", m);
|
|
390
390
|
}, []);
|
|
391
|
-
const
|
|
392
|
-
f(
|
|
393
|
-
},
|
|
394
|
-
let
|
|
395
|
-
if (s.trim() && (
|
|
396
|
-
const
|
|
397
|
-
|
|
391
|
+
const F = (m) => {
|
|
392
|
+
f(m), l(!1), g("");
|
|
393
|
+
}, E = (() => {
|
|
394
|
+
let m = ne();
|
|
395
|
+
if (s.trim() && (m = Je(s)), h !== "all") {
|
|
396
|
+
const B = Ut[h];
|
|
397
|
+
B && (m = m.filter((j) => j.category === B.name));
|
|
398
398
|
}
|
|
399
|
-
return
|
|
399
|
+
return m;
|
|
400
400
|
})();
|
|
401
|
-
return /* @__PURE__ */ i.jsxs("div", { className: "icon-selector", ref:
|
|
401
|
+
return /* @__PURE__ */ i.jsxs("div", { className: "icon-selector", ref: c, children: [
|
|
402
402
|
/* @__PURE__ */ i.jsxs(
|
|
403
403
|
"button",
|
|
404
404
|
{
|
|
@@ -421,49 +421,49 @@ const Ut = {
|
|
|
421
421
|
type: "text",
|
|
422
422
|
placeholder: "Search icons...",
|
|
423
423
|
value: s,
|
|
424
|
-
onChange: (
|
|
424
|
+
onChange: (m) => g(m.target.value),
|
|
425
425
|
className: "icon-search"
|
|
426
426
|
}
|
|
427
427
|
),
|
|
428
428
|
/* @__PURE__ */ i.jsxs(
|
|
429
429
|
"select",
|
|
430
430
|
{
|
|
431
|
-
value:
|
|
432
|
-
onChange: (
|
|
431
|
+
value: h,
|
|
432
|
+
onChange: (m) => n(m.target.value),
|
|
433
433
|
className: "category-select",
|
|
434
434
|
children: [
|
|
435
435
|
/* @__PURE__ */ i.jsx("option", { value: "all", children: "All Categories" }),
|
|
436
|
-
Object.entries(Ut).map(([
|
|
436
|
+
Object.entries(Ut).map(([m, B]) => /* @__PURE__ */ i.jsx("option", { value: m, children: B.name }, m))
|
|
437
437
|
]
|
|
438
438
|
}
|
|
439
439
|
)
|
|
440
440
|
] }),
|
|
441
|
-
/* @__PURE__ */ i.jsx("div", { className: "icon-grid", children:
|
|
441
|
+
/* @__PURE__ */ i.jsx("div", { className: "icon-grid", children: E.length === 0 ? /* @__PURE__ */ i.jsx("div", { className: "no-icons", children: s ? "No icons found" : "No icons in this category" }) : E.map((m, B) => /* @__PURE__ */ i.jsxs(
|
|
442
442
|
"button",
|
|
443
443
|
{
|
|
444
444
|
className: "icon-item",
|
|
445
|
-
onClick: () =>
|
|
446
|
-
title: `${
|
|
445
|
+
onClick: () => F(m),
|
|
446
|
+
title: `${m.name} (${m.category})`,
|
|
447
447
|
children: [
|
|
448
|
-
/* @__PURE__ */ i.jsx("span", { className: "icon-symbol", children:
|
|
449
|
-
/* @__PURE__ */ i.jsx("span", { className: "icon-name", children:
|
|
448
|
+
/* @__PURE__ */ i.jsx("span", { className: "icon-symbol", children: m.symbol }),
|
|
449
|
+
/* @__PURE__ */ i.jsx("span", { className: "icon-name", children: m.name })
|
|
450
450
|
]
|
|
451
451
|
},
|
|
452
|
-
`${
|
|
452
|
+
`${m.name}-${B}`
|
|
453
453
|
)) }),
|
|
454
454
|
/* @__PURE__ */ i.jsx("div", { className: "icon-dropdown-footer", children: /* @__PURE__ */ i.jsxs("span", { className: "icon-count", children: [
|
|
455
|
-
|
|
455
|
+
E.length,
|
|
456
456
|
" icon",
|
|
457
|
-
|
|
457
|
+
E.length !== 1 ? "s" : ""
|
|
458
458
|
] }) })
|
|
459
459
|
] })
|
|
460
460
|
] });
|
|
461
461
|
}, Ze = ({ isOpen: f, onClose: o, onAddQRCode: a, theme: l }) => {
|
|
462
|
-
const [s,
|
|
462
|
+
const [s, g] = N(""), [h, n] = N(""), [c, F] = N(200), [I, E] = N("M"), m = () => {
|
|
463
463
|
if (!s.trim()) return;
|
|
464
|
-
const
|
|
465
|
-
width:
|
|
466
|
-
errorCorrectionLevel:
|
|
464
|
+
const p = {
|
|
465
|
+
width: c,
|
|
466
|
+
errorCorrectionLevel: I,
|
|
467
467
|
type: "image/png",
|
|
468
468
|
quality: 0.92,
|
|
469
469
|
margin: 1,
|
|
@@ -472,40 +472,40 @@ const Ut = {
|
|
|
472
472
|
light: "#FFFFFF"
|
|
473
473
|
}
|
|
474
474
|
};
|
|
475
|
-
_e.toDataURL(s,
|
|
476
|
-
if (
|
|
477
|
-
console.error("QR Code generation error:",
|
|
475
|
+
_e.toDataURL(s, p, (v, X) => {
|
|
476
|
+
if (v) {
|
|
477
|
+
console.error("QR Code generation error:", v);
|
|
478
478
|
return;
|
|
479
479
|
}
|
|
480
|
-
n(
|
|
480
|
+
n(X);
|
|
481
481
|
});
|
|
482
|
-
},
|
|
483
|
-
if (!
|
|
484
|
-
const
|
|
485
|
-
|
|
482
|
+
}, B = () => {
|
|
483
|
+
if (!h) return;
|
|
484
|
+
const p = new Image();
|
|
485
|
+
p.onload = () => {
|
|
486
486
|
a({
|
|
487
487
|
type: "qrcode",
|
|
488
|
-
src:
|
|
488
|
+
src: h,
|
|
489
489
|
data: s,
|
|
490
|
-
width:
|
|
491
|
-
height:
|
|
490
|
+
width: c,
|
|
491
|
+
height: c,
|
|
492
492
|
x: 100,
|
|
493
493
|
y: 100,
|
|
494
|
-
imageObject:
|
|
494
|
+
imageObject: p
|
|
495
495
|
// Store the loaded image object
|
|
496
|
-
}),
|
|
497
|
-
},
|
|
498
|
-
},
|
|
499
|
-
|
|
496
|
+
}), j();
|
|
497
|
+
}, p.src = h;
|
|
498
|
+
}, j = () => {
|
|
499
|
+
g(""), n(""), o();
|
|
500
500
|
};
|
|
501
|
-
return f ? /* @__PURE__ */ i.jsx("div", { className: "qr-modal-overlay", onClick:
|
|
501
|
+
return f ? /* @__PURE__ */ i.jsx("div", { className: "qr-modal-overlay", onClick: j, children: /* @__PURE__ */ i.jsxs("div", { className: "qr-modal-content", onClick: (p) => p.stopPropagation(), children: [
|
|
502
502
|
/* @__PURE__ */ i.jsxs("div", { className: "qr-modal-header", children: [
|
|
503
503
|
/* @__PURE__ */ i.jsx("h3", { children: "Generate QR Code" }),
|
|
504
504
|
/* @__PURE__ */ i.jsx(
|
|
505
505
|
"button",
|
|
506
506
|
{
|
|
507
507
|
className: "qr-modal-close",
|
|
508
|
-
onClick:
|
|
508
|
+
onClick: j,
|
|
509
509
|
"aria-label": "Close",
|
|
510
510
|
children: "×"
|
|
511
511
|
}
|
|
@@ -519,7 +519,7 @@ const Ut = {
|
|
|
519
519
|
{
|
|
520
520
|
id: "qr-data",
|
|
521
521
|
value: s,
|
|
522
|
-
onChange: (
|
|
522
|
+
onChange: (p) => g(p.target.value),
|
|
523
523
|
placeholder: "https://example.com or any text...",
|
|
524
524
|
rows: 3
|
|
525
525
|
}
|
|
@@ -533,8 +533,8 @@ const Ut = {
|
|
|
533
533
|
{
|
|
534
534
|
type: "number",
|
|
535
535
|
id: "qr-size",
|
|
536
|
-
value:
|
|
537
|
-
onChange: (
|
|
536
|
+
value: c,
|
|
537
|
+
onChange: (p) => F(Math.max(50, Math.min(500, parseInt(p.target.value) || 200))),
|
|
538
538
|
min: "50",
|
|
539
539
|
max: "500"
|
|
540
540
|
}
|
|
@@ -546,8 +546,8 @@ const Ut = {
|
|
|
546
546
|
"select",
|
|
547
547
|
{
|
|
548
548
|
id: "qr-error-level",
|
|
549
|
-
value:
|
|
550
|
-
onChange: (
|
|
549
|
+
value: I,
|
|
550
|
+
onChange: (p) => E(p.target.value),
|
|
551
551
|
children: [
|
|
552
552
|
/* @__PURE__ */ i.jsx("option", { value: "L", children: "Low (7%)" }),
|
|
553
553
|
/* @__PURE__ */ i.jsx("option", { value: "M", children: "Medium (15%)" }),
|
|
@@ -562,19 +562,19 @@ const Ut = {
|
|
|
562
562
|
"button",
|
|
563
563
|
{
|
|
564
564
|
className: "qr-btn qr-btn-generate",
|
|
565
|
-
onClick:
|
|
565
|
+
onClick: m,
|
|
566
566
|
disabled: !s.trim(),
|
|
567
567
|
children: "Generate QR Code"
|
|
568
568
|
}
|
|
569
569
|
) }),
|
|
570
|
-
|
|
570
|
+
h && /* @__PURE__ */ i.jsxs("div", { className: "qr-preview", children: [
|
|
571
571
|
/* @__PURE__ */ i.jsx("h4", { children: "Preview" }),
|
|
572
|
-
/* @__PURE__ */ i.jsx("div", { className: "qr-preview-container", children: /* @__PURE__ */ i.jsx("img", { src:
|
|
572
|
+
/* @__PURE__ */ i.jsx("div", { className: "qr-preview-container", children: /* @__PURE__ */ i.jsx("img", { src: h, alt: "QR Code Preview" }) }),
|
|
573
573
|
/* @__PURE__ */ i.jsx(
|
|
574
574
|
"button",
|
|
575
575
|
{
|
|
576
576
|
className: "qr-btn qr-btn-add",
|
|
577
|
-
onClick:
|
|
577
|
+
onClick: B,
|
|
578
578
|
style: {
|
|
579
579
|
backgroundColor: (l == null ? void 0 : l.primaryColor) || "#3b82f6",
|
|
580
580
|
borderColor: (l == null ? void 0 : l.primaryColor) || "#3b82f6"
|
|
@@ -586,7 +586,7 @@ const Ut = {
|
|
|
586
586
|
] })
|
|
587
587
|
] }) }) : null;
|
|
588
588
|
}, ti = ({ isOpen: f, onClose: o, onAddBarcode: a, theme: l }) => {
|
|
589
|
-
const [s,
|
|
589
|
+
const [s, g] = N(""), [h, n] = N("CODE128"), [c, F] = N(null), [I, E] = N(2), [m, B] = N(100), [j, p] = N(20), [v, X] = N("center"), [T, O] = N("bottom"), [k, Z] = N(10), W = gt(null), xt = [
|
|
590
590
|
{ value: "CODE128", label: "CODE128 (Most Common)" },
|
|
591
591
|
{ value: "EAN13", label: "EAN-13 (European Article Number)" },
|
|
592
592
|
{ value: "EAN8", label: "EAN-8 (Short EAN)" },
|
|
@@ -599,17 +599,17 @@ const Ut = {
|
|
|
599
599
|
], Q = () => {
|
|
600
600
|
if (s.trim())
|
|
601
601
|
try {
|
|
602
|
-
|
|
602
|
+
F(/* @__PURE__ */ i.jsx(
|
|
603
603
|
Ye,
|
|
604
604
|
{
|
|
605
605
|
value: s,
|
|
606
|
-
format:
|
|
607
|
-
width:
|
|
608
|
-
height:
|
|
609
|
-
fontSize:
|
|
610
|
-
textAlign:
|
|
611
|
-
textPosition:
|
|
612
|
-
margin:
|
|
606
|
+
format: h,
|
|
607
|
+
width: I,
|
|
608
|
+
height: m,
|
|
609
|
+
fontSize: j,
|
|
610
|
+
textAlign: v,
|
|
611
|
+
textPosition: T,
|
|
612
|
+
margin: k,
|
|
613
613
|
background: "#ffffff",
|
|
614
614
|
lineColor: "#000000"
|
|
615
615
|
}
|
|
@@ -618,40 +618,40 @@ const Ut = {
|
|
|
618
618
|
console.error("Barcode generation error:", M), alert("Invalid data for selected barcode format. Please check your input.");
|
|
619
619
|
}
|
|
620
620
|
}, ft = () => {
|
|
621
|
-
var M, nt,
|
|
622
|
-
if (!(!
|
|
621
|
+
var M, nt, tt, ct;
|
|
622
|
+
if (!(!c || !W.current))
|
|
623
623
|
try {
|
|
624
|
-
const
|
|
625
|
-
if (!
|
|
624
|
+
const Y = W.current.querySelector("svg");
|
|
625
|
+
if (!Y) {
|
|
626
626
|
console.error("No SVG element found in barcode");
|
|
627
627
|
return;
|
|
628
628
|
}
|
|
629
|
-
const P = document.createElement("canvas"),
|
|
630
|
-
P.width =
|
|
631
|
-
const L = new XMLSerializer().serializeToString(
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
const
|
|
635
|
-
|
|
629
|
+
const P = document.createElement("canvas"), C = P.getContext("2d"), et = Y.getBoundingClientRect(), y = ((nt = (M = Y.width) == null ? void 0 : M.baseVal) == null ? void 0 : nt.value) || et.width || 200, D = ((ct = (tt = Y.height) == null ? void 0 : tt.baseVal) == null ? void 0 : ct.value) || et.height || 100;
|
|
630
|
+
P.width = y, P.height = D;
|
|
631
|
+
const L = new XMLSerializer().serializeToString(Y), H = new Blob([L], { type: "image/svg+xml;charset=utf-8" }), G = URL.createObjectURL(H), it = new Image();
|
|
632
|
+
it.onload = () => {
|
|
633
|
+
C.drawImage(it, 0, 0);
|
|
634
|
+
const J = P.toDataURL("image/png"), q = new Image();
|
|
635
|
+
q.onload = () => {
|
|
636
636
|
a({
|
|
637
637
|
type: "barcode",
|
|
638
|
-
src:
|
|
638
|
+
src: J,
|
|
639
639
|
data: s,
|
|
640
|
-
format:
|
|
641
|
-
width:
|
|
640
|
+
format: h,
|
|
641
|
+
width: y,
|
|
642
642
|
height: D,
|
|
643
643
|
x: 100,
|
|
644
644
|
y: 100,
|
|
645
|
-
imageObject:
|
|
646
|
-
}),
|
|
647
|
-
},
|
|
648
|
-
},
|
|
649
|
-
} catch (
|
|
650
|
-
console.error("Error adding barcode to canvas:",
|
|
645
|
+
imageObject: q
|
|
646
|
+
}), _();
|
|
647
|
+
}, q.src = J, URL.revokeObjectURL(G);
|
|
648
|
+
}, it.src = G;
|
|
649
|
+
} catch (Y) {
|
|
650
|
+
console.error("Error adding barcode to canvas:", Y), alert("Failed to add barcode to canvas. Please try again.");
|
|
651
651
|
}
|
|
652
|
-
},
|
|
653
|
-
|
|
654
|
-
},
|
|
652
|
+
}, _ = () => {
|
|
653
|
+
g(""), F(null), n("CODE128"), E(2), B(100), p(20), o();
|
|
654
|
+
}, st = (M) => ({
|
|
655
655
|
CODE128: "Supports all ASCII characters. Most versatile format.",
|
|
656
656
|
EAN13: "Requires exactly 12 digits (13th is checksum). Used for retail products.",
|
|
657
657
|
EAN8: "Requires exactly 7 digits (8th is checksum). Compact version of EAN-13.",
|
|
@@ -662,14 +662,14 @@ const Ut = {
|
|
|
662
662
|
pharmacode: "Numbers 3-131070. Used in pharmaceutical industry.",
|
|
663
663
|
codabar: "Supports 0-9, A-D, and symbols. Used in libraries."
|
|
664
664
|
})[M] || "";
|
|
665
|
-
return f ? /* @__PURE__ */ i.jsx("div", { className: "barcode-modal-overlay", onClick:
|
|
665
|
+
return f ? /* @__PURE__ */ i.jsx("div", { className: "barcode-modal-overlay", onClick: _, children: /* @__PURE__ */ i.jsxs("div", { className: "barcode-modal-content", onClick: (M) => M.stopPropagation(), children: [
|
|
666
666
|
/* @__PURE__ */ i.jsxs("div", { className: "barcode-modal-header", children: [
|
|
667
667
|
/* @__PURE__ */ i.jsx("h3", { children: "Generate Barcode" }),
|
|
668
668
|
/* @__PURE__ */ i.jsx(
|
|
669
669
|
"button",
|
|
670
670
|
{
|
|
671
671
|
className: "barcode-modal-close",
|
|
672
|
-
onClick:
|
|
672
|
+
onClick: _,
|
|
673
673
|
"aria-label": "Close",
|
|
674
674
|
children: "×"
|
|
675
675
|
}
|
|
@@ -684,7 +684,7 @@ const Ut = {
|
|
|
684
684
|
type: "text",
|
|
685
685
|
id: "barcode-data",
|
|
686
686
|
value: s,
|
|
687
|
-
onChange: (M) =>
|
|
687
|
+
onChange: (M) => g(M.target.value),
|
|
688
688
|
placeholder: "Enter your data..."
|
|
689
689
|
}
|
|
690
690
|
)
|
|
@@ -695,12 +695,12 @@ const Ut = {
|
|
|
695
695
|
"select",
|
|
696
696
|
{
|
|
697
697
|
id: "barcode-format",
|
|
698
|
-
value:
|
|
698
|
+
value: h,
|
|
699
699
|
onChange: (M) => n(M.target.value),
|
|
700
700
|
children: xt.map((M) => /* @__PURE__ */ i.jsx("option", { value: M.value, children: M.label }, M.value))
|
|
701
701
|
}
|
|
702
702
|
),
|
|
703
|
-
/* @__PURE__ */ i.jsx("small", { className: "format-description", children:
|
|
703
|
+
/* @__PURE__ */ i.jsx("small", { className: "format-description", children: st(h) })
|
|
704
704
|
] }),
|
|
705
705
|
/* @__PURE__ */ i.jsxs("div", { className: "barcode-options", children: [
|
|
706
706
|
/* @__PURE__ */ i.jsxs("div", { className: "barcode-form-group", children: [
|
|
@@ -713,12 +713,12 @@ const Ut = {
|
|
|
713
713
|
min: "1",
|
|
714
714
|
max: "4",
|
|
715
715
|
step: "0.5",
|
|
716
|
-
value:
|
|
717
|
-
onChange: (M) =>
|
|
716
|
+
value: I,
|
|
717
|
+
onChange: (M) => E(parseFloat(M.target.value))
|
|
718
718
|
}
|
|
719
719
|
),
|
|
720
720
|
/* @__PURE__ */ i.jsxs("span", { className: "range-value", children: [
|
|
721
|
-
|
|
721
|
+
I,
|
|
722
722
|
"px"
|
|
723
723
|
] })
|
|
724
724
|
] }),
|
|
@@ -731,12 +731,12 @@ const Ut = {
|
|
|
731
731
|
id: "barcode-height",
|
|
732
732
|
min: "50",
|
|
733
733
|
max: "200",
|
|
734
|
-
value:
|
|
735
|
-
onChange: (M) =>
|
|
734
|
+
value: m,
|
|
735
|
+
onChange: (M) => B(parseInt(M.target.value))
|
|
736
736
|
}
|
|
737
737
|
),
|
|
738
738
|
/* @__PURE__ */ i.jsxs("span", { className: "range-value", children: [
|
|
739
|
-
|
|
739
|
+
m,
|
|
740
740
|
"px"
|
|
741
741
|
] })
|
|
742
742
|
] }),
|
|
@@ -749,12 +749,12 @@ const Ut = {
|
|
|
749
749
|
id: "barcode-fontsize",
|
|
750
750
|
min: "10",
|
|
751
751
|
max: "30",
|
|
752
|
-
value:
|
|
753
|
-
onChange: (M) =>
|
|
752
|
+
value: j,
|
|
753
|
+
onChange: (M) => p(parseInt(M.target.value))
|
|
754
754
|
}
|
|
755
755
|
),
|
|
756
756
|
/* @__PURE__ */ i.jsxs("span", { className: "range-value", children: [
|
|
757
|
-
|
|
757
|
+
j,
|
|
758
758
|
"px"
|
|
759
759
|
] })
|
|
760
760
|
] }),
|
|
@@ -764,7 +764,7 @@ const Ut = {
|
|
|
764
764
|
"select",
|
|
765
765
|
{
|
|
766
766
|
id: "text-position",
|
|
767
|
-
value:
|
|
767
|
+
value: T,
|
|
768
768
|
onChange: (M) => O(M.target.value),
|
|
769
769
|
children: [
|
|
770
770
|
/* @__PURE__ */ i.jsx("option", { value: "bottom", children: "Bottom" }),
|
|
@@ -783,9 +783,9 @@ const Ut = {
|
|
|
783
783
|
children: "Generate Barcode"
|
|
784
784
|
}
|
|
785
785
|
) }),
|
|
786
|
-
|
|
786
|
+
c && /* @__PURE__ */ i.jsxs("div", { className: "barcode-preview", children: [
|
|
787
787
|
/* @__PURE__ */ i.jsx("h4", { children: "Preview" }),
|
|
788
|
-
/* @__PURE__ */ i.jsx("div", { className: "barcode-preview-container", ref: W, children:
|
|
788
|
+
/* @__PURE__ */ i.jsx("div", { className: "barcode-preview-container", ref: W, children: c }),
|
|
789
789
|
/* @__PURE__ */ i.jsx(
|
|
790
790
|
"button",
|
|
791
791
|
{
|
|
@@ -864,88 +864,88 @@ const Ut = {
|
|
|
864
864
|
100% { transform: rotate(360deg); }
|
|
865
865
|
}
|
|
866
866
|
` })
|
|
867
|
-
] }), ii = ({ isOpen: f, onClose: o, onAddSticker: a, theme: l, apiKey: s, apiEndpoint:
|
|
868
|
-
const [
|
|
867
|
+
] }), ii = ({ isOpen: f, onClose: o, onAddSticker: a, theme: l, apiKey: s, apiEndpoint: g }) => {
|
|
868
|
+
const [h, n] = N([]), [c, F] = N(!1), [I, E] = N(null), [m, B] = N(""), [j, p] = N(""), [v, X] = N({});
|
|
869
869
|
gt(null);
|
|
870
|
-
const [
|
|
871
|
-
|
|
870
|
+
const [T, O] = N(!1), [k, Z] = N(!1), [W, xt] = N(!1), Q = `${g}/api/v1/designer`;
|
|
871
|
+
rt(() => {
|
|
872
872
|
f && s && ft();
|
|
873
873
|
}, [f, s]);
|
|
874
874
|
const ft = async () => {
|
|
875
875
|
const P = sessionStorage.getItem("apc_x_sub_status");
|
|
876
|
-
P === "active" ? (O(!0),
|
|
877
|
-
},
|
|
876
|
+
P === "active" ? (O(!0), Z(!0), st()) : P === "inactive" ? (O(!1), Z(!0)) : (xt(!0), await _());
|
|
877
|
+
}, _ = async () => {
|
|
878
878
|
if (!s) {
|
|
879
|
-
O(!1),
|
|
879
|
+
O(!1), Z(!0), xt(!1);
|
|
880
880
|
return;
|
|
881
881
|
}
|
|
882
882
|
const P = `${Q}/get-subscription-status/${s}`;
|
|
883
883
|
try {
|
|
884
|
-
(await oe.get(P)).data.object === "active" ? (sessionStorage.setItem("apc_x_sub_status", "active"), O(!0),
|
|
885
|
-
} catch (
|
|
886
|
-
console.error("Subscription check failed:",
|
|
884
|
+
(await oe.get(P)).data.object === "active" ? (sessionStorage.setItem("apc_x_sub_status", "active"), O(!0), st()) : (sessionStorage.setItem("apc_x_sub_status", "inactive"), O(!1));
|
|
885
|
+
} catch (C) {
|
|
886
|
+
console.error("Subscription check failed:", C), sessionStorage.setItem("apc_x_sub_status", "inactive"), O(!1);
|
|
887
887
|
} finally {
|
|
888
|
-
xt(!1),
|
|
888
|
+
xt(!1), Z(!0);
|
|
889
889
|
}
|
|
890
|
-
},
|
|
890
|
+
}, st = async () => {
|
|
891
891
|
const P = sessionStorage.getItem("apc_stickers");
|
|
892
892
|
if (P)
|
|
893
893
|
try {
|
|
894
|
-
const
|
|
895
|
-
n(
|
|
894
|
+
const C = JSON.parse(P);
|
|
895
|
+
n(C);
|
|
896
896
|
return;
|
|
897
897
|
} catch {
|
|
898
898
|
console.warn("Failed to parse cached stickers, fetching fresh data");
|
|
899
899
|
}
|
|
900
|
-
|
|
900
|
+
F(!0), E(null);
|
|
901
901
|
try {
|
|
902
|
-
const
|
|
903
|
-
if (
|
|
904
|
-
const
|
|
905
|
-
n(
|
|
902
|
+
const C = await oe.get(`${Q}/get-stickers`);
|
|
903
|
+
if (C.data && C.data.object && C.data.object.contents) {
|
|
904
|
+
const et = C.data.object.contents;
|
|
905
|
+
n(et), sessionStorage.setItem("apc_stickers", JSON.stringify(et));
|
|
906
906
|
} else
|
|
907
907
|
throw new Error("Invalid response format");
|
|
908
|
-
} catch (
|
|
909
|
-
console.error("Error fetching stickers:",
|
|
908
|
+
} catch (C) {
|
|
909
|
+
console.error("Error fetching stickers:", C), E("Failed to load stickers. Please try again.");
|
|
910
910
|
} finally {
|
|
911
|
-
|
|
911
|
+
F(!1);
|
|
912
912
|
}
|
|
913
|
-
}, M = (P,
|
|
913
|
+
}, M = (P, C) => {
|
|
914
914
|
a({
|
|
915
915
|
type: "sticker",
|
|
916
916
|
src: P,
|
|
917
|
-
name:
|
|
917
|
+
name: C,
|
|
918
918
|
width: 100,
|
|
919
919
|
height: 100,
|
|
920
920
|
x: 100,
|
|
921
921
|
y: 100
|
|
922
922
|
}), o();
|
|
923
923
|
}, nt = (P) => {
|
|
924
|
-
|
|
925
|
-
...
|
|
926
|
-
[P]: !
|
|
924
|
+
X((C) => ({
|
|
925
|
+
...C,
|
|
926
|
+
[P]: !C[P]
|
|
927
927
|
}));
|
|
928
|
-
},
|
|
929
|
-
const
|
|
930
|
-
return P.forEach((
|
|
931
|
-
const
|
|
932
|
-
let D =
|
|
933
|
-
|
|
934
|
-
D[L] || (D[L] = H ===
|
|
928
|
+
}, tt = (P) => {
|
|
929
|
+
const C = {};
|
|
930
|
+
return P.forEach((et) => {
|
|
931
|
+
const y = et.name.split("/");
|
|
932
|
+
let D = C;
|
|
933
|
+
y.forEach((L, H) => {
|
|
934
|
+
D[L] || (D[L] = H === y.length - 1 ? et : {}), D = D[L];
|
|
935
935
|
});
|
|
936
|
-
}),
|
|
937
|
-
}, ct = (P,
|
|
938
|
-
const D = `${
|
|
939
|
-
return P[
|
|
936
|
+
}), C;
|
|
937
|
+
}, ct = (P, C = "", et = 0) => /* @__PURE__ */ i.jsx("div", { className: "sticker-tree-level", style: { paddingLeft: `${et * 15}px` }, children: Object.keys(P).map((y) => {
|
|
938
|
+
const D = `${C}/${y}`, L = v[D];
|
|
939
|
+
return P[y].type === "image" ? !j || y.toLowerCase().includes(j.toLowerCase()) ? /* @__PURE__ */ i.jsx(
|
|
940
940
|
"div",
|
|
941
941
|
{
|
|
942
942
|
className: "sticker-item",
|
|
943
|
-
onClick: () => M(P[
|
|
943
|
+
onClick: () => M(P[y].url, y),
|
|
944
944
|
children: /* @__PURE__ */ i.jsx("div", { className: "sticker-preview", children: /* @__PURE__ */ i.jsx(
|
|
945
945
|
"img",
|
|
946
946
|
{
|
|
947
|
-
src: P[
|
|
948
|
-
alt:
|
|
947
|
+
src: P[y].url,
|
|
948
|
+
alt: y,
|
|
949
949
|
loading: "lazy",
|
|
950
950
|
onError: (G) => {
|
|
951
951
|
G.target.style.display = "none";
|
|
@@ -962,14 +962,14 @@ const Ut = {
|
|
|
962
962
|
onClick: () => nt(D),
|
|
963
963
|
children: [
|
|
964
964
|
/* @__PURE__ */ i.jsx("span", { className: `expand-icon ${L ? "expanded" : ""}`, children: "▶" }),
|
|
965
|
-
/* @__PURE__ */ i.jsx("span", { className: "category-name", children:
|
|
965
|
+
/* @__PURE__ */ i.jsx("span", { className: "category-name", children: y })
|
|
966
966
|
]
|
|
967
967
|
}
|
|
968
968
|
),
|
|
969
|
-
L && ct(P[
|
|
969
|
+
L && ct(P[y], D, et + 1)
|
|
970
970
|
] }, D);
|
|
971
|
-
}) }),
|
|
972
|
-
(P) => !
|
|
971
|
+
}) }), Y = h.filter(
|
|
972
|
+
(P) => !j || P.name.toLowerCase().includes(j.toLowerCase())
|
|
973
973
|
);
|
|
974
974
|
return f ? /* @__PURE__ */ i.jsx("div", { className: "sticker-modal-overlay", onClick: o, children: /* @__PURE__ */ i.jsxs("div", { className: "sticker-modal-content", onClick: (P) => P.stopPropagation(), children: [
|
|
975
975
|
/* @__PURE__ */ i.jsxs("div", { className: "sticker-modal-header", children: [
|
|
@@ -986,24 +986,24 @@ const Ut = {
|
|
|
986
986
|
] }),
|
|
987
987
|
/* @__PURE__ */ i.jsxs("div", { className: "sticker-modal-body", children: [
|
|
988
988
|
W && /* @__PURE__ */ i.jsx(le, {}),
|
|
989
|
-
!
|
|
990
|
-
|
|
989
|
+
!T && !W && k && /* @__PURE__ */ i.jsx(ei, { theme: l }),
|
|
990
|
+
T && k && /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
|
|
991
991
|
/* @__PURE__ */ i.jsx("div", { className: "sticker-modal-controls", children: /* @__PURE__ */ i.jsx("div", { className: "search-container", children: /* @__PURE__ */ i.jsx(
|
|
992
992
|
"input",
|
|
993
993
|
{
|
|
994
994
|
type: "text",
|
|
995
995
|
placeholder: "Search stickers...",
|
|
996
|
-
value:
|
|
997
|
-
onChange: (P) =>
|
|
996
|
+
value: j,
|
|
997
|
+
onChange: (P) => p(P.target.value),
|
|
998
998
|
className: "sticker-search"
|
|
999
999
|
}
|
|
1000
1000
|
) }) }),
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
/* @__PURE__ */ i.jsx("p", { children:
|
|
1004
|
-
/* @__PURE__ */ i.jsx("button", { onClick:
|
|
1001
|
+
c && /* @__PURE__ */ i.jsx(le, {}),
|
|
1002
|
+
I && /* @__PURE__ */ i.jsxs("div", { className: "sticker-error", children: [
|
|
1003
|
+
/* @__PURE__ */ i.jsx("p", { children: I }),
|
|
1004
|
+
/* @__PURE__ */ i.jsx("button", { onClick: st, children: "Retry" })
|
|
1005
1005
|
] }),
|
|
1006
|
-
!
|
|
1006
|
+
!c && !I && h.length > 0 && /* @__PURE__ */ i.jsx("div", { className: "sticker-grid", children: ct(tt(Y)) })
|
|
1007
1007
|
] })
|
|
1008
1008
|
] })
|
|
1009
1009
|
] }) }) : null;
|
|
@@ -2559,33 +2559,33 @@ const Ut = {
|
|
|
2559
2559
|
category: "Geometric",
|
|
2560
2560
|
description: "Complex mandala flower pattern"
|
|
2561
2561
|
}
|
|
2562
|
-
], ri = ({ isOpen: f, onClose: o, onAddEmbroidery: a, theme: l, apiKey: s, apiEndpoint:
|
|
2563
|
-
const [
|
|
2564
|
-
|
|
2562
|
+
], ri = ({ isOpen: f, onClose: o, onAddEmbroidery: a, theme: l, apiKey: s, apiEndpoint: g }) => {
|
|
2563
|
+
const [h, n] = N([]), [c, F] = N(!1), [I, E] = N(null), [m, B] = N(""), [j, p] = N("All"), v = gt(null), X = ["All", "Floral", "Nature", "Geometric", "Traditional", "Sports", "Hobbies", "Food", "Symbols", "Holiday", "Text"];
|
|
2564
|
+
rt(() => {
|
|
2565
2565
|
f && n(oi);
|
|
2566
2566
|
}, [f]);
|
|
2567
|
-
const
|
|
2567
|
+
const T = (k) => {
|
|
2568
2568
|
a({
|
|
2569
2569
|
type: "embroidery",
|
|
2570
|
-
src:
|
|
2571
|
-
name:
|
|
2572
|
-
description:
|
|
2573
|
-
category:
|
|
2570
|
+
src: k.url,
|
|
2571
|
+
name: k.name,
|
|
2572
|
+
description: k.description,
|
|
2573
|
+
category: k.category,
|
|
2574
2574
|
width: 120,
|
|
2575
2575
|
height: 120,
|
|
2576
2576
|
x: 100,
|
|
2577
2577
|
y: 100
|
|
2578
2578
|
}), o();
|
|
2579
|
-
}, O =
|
|
2580
|
-
const
|
|
2581
|
-
return
|
|
2579
|
+
}, O = h.filter((k) => {
|
|
2580
|
+
const Z = !m || k.name.toLowerCase().includes(m.toLowerCase()) || k.description.toLowerCase().includes(m.toLowerCase()), W = j === "All" || k.category === j;
|
|
2581
|
+
return Z && W;
|
|
2582
2582
|
});
|
|
2583
2583
|
return f ? /* @__PURE__ */ i.jsx("div", { className: "embroidery-modal-overlay", onClick: o, children: /* @__PURE__ */ i.jsxs(
|
|
2584
2584
|
"div",
|
|
2585
2585
|
{
|
|
2586
2586
|
className: "embroidery-modal-content",
|
|
2587
|
-
onClick: (
|
|
2588
|
-
ref:
|
|
2587
|
+
onClick: (k) => k.stopPropagation(),
|
|
2588
|
+
ref: v,
|
|
2589
2589
|
children: [
|
|
2590
2590
|
/* @__PURE__ */ i.jsxs("div", { className: "embroidery-modal-header", children: [
|
|
2591
2591
|
/* @__PURE__ */ i.jsx("h3", { children: "Choose an Embroidery Design" }),
|
|
@@ -2605,8 +2605,8 @@ const Ut = {
|
|
|
2605
2605
|
{
|
|
2606
2606
|
type: "text",
|
|
2607
2607
|
placeholder: "Search embroidery designs...",
|
|
2608
|
-
value:
|
|
2609
|
-
onChange: (
|
|
2608
|
+
value: m,
|
|
2609
|
+
onChange: (k) => B(k.target.value),
|
|
2610
2610
|
className: "embroidery-search"
|
|
2611
2611
|
}
|
|
2612
2612
|
) }),
|
|
@@ -2615,47 +2615,47 @@ const Ut = {
|
|
|
2615
2615
|
/* @__PURE__ */ i.jsx(
|
|
2616
2616
|
"select",
|
|
2617
2617
|
{
|
|
2618
|
-
value:
|
|
2619
|
-
onChange: (
|
|
2618
|
+
value: j,
|
|
2619
|
+
onChange: (k) => p(k.target.value),
|
|
2620
2620
|
className: "category-select",
|
|
2621
|
-
children:
|
|
2621
|
+
children: X.map((k) => /* @__PURE__ */ i.jsx("option", { value: k, children: k }, k))
|
|
2622
2622
|
}
|
|
2623
2623
|
)
|
|
2624
2624
|
] })
|
|
2625
2625
|
] }),
|
|
2626
2626
|
/* @__PURE__ */ i.jsxs("div", { className: "embroidery-modal-body", children: [
|
|
2627
|
-
|
|
2627
|
+
c && /* @__PURE__ */ i.jsxs("div", { className: "embroidery-loading", children: [
|
|
2628
2628
|
/* @__PURE__ */ i.jsx("div", { className: "loading-spinner" }),
|
|
2629
2629
|
/* @__PURE__ */ i.jsx("p", { children: "Loading embroidery designs..." })
|
|
2630
2630
|
] }),
|
|
2631
|
-
|
|
2632
|
-
!
|
|
2631
|
+
I && /* @__PURE__ */ i.jsx("div", { className: "embroidery-error", children: /* @__PURE__ */ i.jsx("p", { children: I }) }),
|
|
2632
|
+
!c && !I && /* @__PURE__ */ i.jsx("div", { className: "embroidery-grid", children: O.map((k) => /* @__PURE__ */ i.jsxs(
|
|
2633
2633
|
"div",
|
|
2634
2634
|
{
|
|
2635
2635
|
className: "embroidery-item",
|
|
2636
|
-
onClick: () =>
|
|
2637
|
-
title:
|
|
2636
|
+
onClick: () => T(k),
|
|
2637
|
+
title: k.description,
|
|
2638
2638
|
children: [
|
|
2639
2639
|
/* @__PURE__ */ i.jsx("div", { className: "embroidery-preview", children: /* @__PURE__ */ i.jsx(
|
|
2640
2640
|
"img",
|
|
2641
2641
|
{
|
|
2642
|
-
src:
|
|
2643
|
-
alt:
|
|
2642
|
+
src: k.url,
|
|
2643
|
+
alt: k.name,
|
|
2644
2644
|
loading: "lazy",
|
|
2645
|
-
onError: (
|
|
2646
|
-
console.error("Failed to load embroidery image:",
|
|
2645
|
+
onError: (Z) => {
|
|
2646
|
+
console.error("Failed to load embroidery image:", k.url), Z.target.style.display = "none";
|
|
2647
2647
|
}
|
|
2648
2648
|
}
|
|
2649
2649
|
) }),
|
|
2650
2650
|
/* @__PURE__ */ i.jsxs("div", { className: "embroidery-info", children: [
|
|
2651
|
-
/* @__PURE__ */ i.jsx("div", { className: "embroidery-name", children:
|
|
2652
|
-
/* @__PURE__ */ i.jsx("div", { className: "embroidery-category", children:
|
|
2651
|
+
/* @__PURE__ */ i.jsx("div", { className: "embroidery-name", children: k.name }),
|
|
2652
|
+
/* @__PURE__ */ i.jsx("div", { className: "embroidery-category", children: k.category })
|
|
2653
2653
|
] })
|
|
2654
2654
|
]
|
|
2655
2655
|
},
|
|
2656
|
-
|
|
2656
|
+
k.id
|
|
2657
2657
|
)) }),
|
|
2658
|
-
!
|
|
2658
|
+
!c && !I && O.length === 0 && /* @__PURE__ */ i.jsx("div", { className: "no-embroideries", children: /* @__PURE__ */ i.jsx("p", { children: "No embroidery designs found matching your search." }) })
|
|
2659
2659
|
] }),
|
|
2660
2660
|
/* @__PURE__ */ i.jsx("div", { className: "embroidery-modal-footer", children: /* @__PURE__ */ i.jsxs("div", { className: "embroidery-disclaimer", children: [
|
|
2661
2661
|
/* @__PURE__ */ i.jsx("span", { className: "disclaimer-icon", children: "ℹ️" }),
|
|
@@ -2664,7 +2664,7 @@ const Ut = {
|
|
|
2664
2664
|
]
|
|
2665
2665
|
}
|
|
2666
2666
|
) }) : null;
|
|
2667
|
-
},
|
|
2667
|
+
}, Nt = [
|
|
2668
2668
|
// MOTIVATIONAL & INSPIRATIONAL (25 items)
|
|
2669
2669
|
{
|
|
2670
2670
|
id: 1,
|
|
@@ -4602,23 +4602,23 @@ const Ut = {
|
|
|
4602
4602
|
textAlign: "center"
|
|
4603
4603
|
}
|
|
4604
4604
|
], ai = ({ isOpen: f, onClose: o, onAddText: a, theme: l }) => {
|
|
4605
|
-
const [s,
|
|
4606
|
-
const
|
|
4605
|
+
const [s, g] = N(""), [h, n] = N("All"), c = ie(() => {
|
|
4606
|
+
const m = Nt.reduce((B, j) => (B[j.category] = (B[j.category] || 0) + 1, B), {});
|
|
4607
4607
|
return [
|
|
4608
|
-
{ name: "All", count:
|
|
4609
|
-
...Object.entries(
|
|
4608
|
+
{ name: "All", count: Nt.length },
|
|
4609
|
+
...Object.entries(m).map(([B, j]) => ({ name: B, count: j }))
|
|
4610
4610
|
];
|
|
4611
|
-
}, [
|
|
4612
|
-
const
|
|
4613
|
-
return
|
|
4614
|
-
}), [
|
|
4615
|
-
const
|
|
4616
|
-
...
|
|
4611
|
+
}, [Nt]), F = ie(() => Nt.filter((m) => {
|
|
4612
|
+
const B = !s || m.text.toLowerCase().includes(s.toLowerCase()) || m.category.toLowerCase().includes(s.toLowerCase()), j = h === "All" || m.category === h;
|
|
4613
|
+
return B && j;
|
|
4614
|
+
}), [Nt, s, h]), I = (m) => {
|
|
4615
|
+
const B = {
|
|
4616
|
+
...m,
|
|
4617
4617
|
x: 100,
|
|
4618
4618
|
y: 100
|
|
4619
4619
|
};
|
|
4620
|
-
a("text",
|
|
4621
|
-
},
|
|
4620
|
+
a("text", B), o();
|
|
4621
|
+
}, E = () => {
|
|
4622
4622
|
a("text", {
|
|
4623
4623
|
text: "Your Text Here",
|
|
4624
4624
|
fontSize: 24,
|
|
@@ -4628,7 +4628,7 @@ const Ut = {
|
|
|
4628
4628
|
y: 100
|
|
4629
4629
|
}), o();
|
|
4630
4630
|
};
|
|
4631
|
-
return f ? /* @__PURE__ */ i.jsx("div", { className: "text-templates-modal-overlay", onClick: o, children: /* @__PURE__ */ i.jsxs("div", { className: "text-templates-modal", onClick: (
|
|
4631
|
+
return f ? /* @__PURE__ */ i.jsx("div", { className: "text-templates-modal-overlay", onClick: o, children: /* @__PURE__ */ i.jsxs("div", { className: "text-templates-modal", onClick: (m) => m.stopPropagation(), children: [
|
|
4632
4632
|
/* @__PURE__ */ i.jsxs("div", { className: "modal-header", children: [
|
|
4633
4633
|
/* @__PURE__ */ i.jsx("h2", { children: "Text Templates" }),
|
|
4634
4634
|
/* @__PURE__ */ i.jsx("button", { className: "close-btn", onClick: o, "aria-label": "Close", children: "×" })
|
|
@@ -4640,70 +4640,70 @@ const Ut = {
|
|
|
4640
4640
|
type: "text",
|
|
4641
4641
|
placeholder: "Search templates...",
|
|
4642
4642
|
value: s,
|
|
4643
|
-
onChange: (
|
|
4643
|
+
onChange: (m) => g(m.target.value),
|
|
4644
4644
|
className: "search-input"
|
|
4645
4645
|
}
|
|
4646
4646
|
) }),
|
|
4647
|
-
/* @__PURE__ */ i.jsx("div", { className: "category-tabs", children:
|
|
4647
|
+
/* @__PURE__ */ i.jsx("div", { className: "category-tabs", children: c.map((m) => /* @__PURE__ */ i.jsxs(
|
|
4648
4648
|
"button",
|
|
4649
4649
|
{
|
|
4650
|
-
className: `category-tab ${
|
|
4651
|
-
onClick: () => n(
|
|
4650
|
+
className: `category-tab ${h === m.name ? "active" : ""}`,
|
|
4651
|
+
onClick: () => n(m.name),
|
|
4652
4652
|
children: [
|
|
4653
|
-
|
|
4653
|
+
m.name,
|
|
4654
4654
|
/* @__PURE__ */ i.jsxs("span", { className: "count", children: [
|
|
4655
4655
|
"(",
|
|
4656
|
-
|
|
4656
|
+
m.count,
|
|
4657
4657
|
")"
|
|
4658
4658
|
] })
|
|
4659
4659
|
]
|
|
4660
4660
|
},
|
|
4661
|
-
|
|
4661
|
+
m.name
|
|
4662
4662
|
)) })
|
|
4663
4663
|
] }),
|
|
4664
4664
|
/* @__PURE__ */ i.jsxs("div", { className: "templates-grid", children: [
|
|
4665
|
-
/* @__PURE__ */ i.jsx("div", { className: "custom-text-option", onClick:
|
|
4665
|
+
/* @__PURE__ */ i.jsx("div", { className: "custom-text-option", onClick: E, children: /* @__PURE__ */ i.jsxs("div", { className: "custom-text-preview", children: [
|
|
4666
4666
|
/* @__PURE__ */ i.jsx("div", { className: "custom-icon", children: "✏️" }),
|
|
4667
4667
|
/* @__PURE__ */ i.jsx("div", { className: "custom-label", children: "Create Custom Text" })
|
|
4668
4668
|
] }) }),
|
|
4669
|
-
|
|
4669
|
+
F.map((m) => /* @__PURE__ */ i.jsxs(
|
|
4670
4670
|
"div",
|
|
4671
4671
|
{
|
|
4672
4672
|
className: "template-item",
|
|
4673
|
-
onClick: () =>
|
|
4673
|
+
onClick: () => I(m),
|
|
4674
4674
|
children: [
|
|
4675
4675
|
/* @__PURE__ */ i.jsx(
|
|
4676
4676
|
"div",
|
|
4677
4677
|
{
|
|
4678
4678
|
className: "template-preview",
|
|
4679
4679
|
style: {
|
|
4680
|
-
fontFamily:
|
|
4681
|
-
fontSize: `${Math.min(
|
|
4682
|
-
fontWeight:
|
|
4683
|
-
fontStyle:
|
|
4684
|
-
color:
|
|
4685
|
-
backgroundColor:
|
|
4686
|
-
textAlign:
|
|
4687
|
-
textTransform:
|
|
4688
|
-
letterSpacing:
|
|
4689
|
-
textShadow:
|
|
4680
|
+
fontFamily: m.fontFamily,
|
|
4681
|
+
fontSize: `${Math.min(m.fontSize * 0.6, 18)}px`,
|
|
4682
|
+
fontWeight: m.fontWeight,
|
|
4683
|
+
fontStyle: m.fontStyle,
|
|
4684
|
+
color: m.fill,
|
|
4685
|
+
backgroundColor: m.hasBackground ? m.backgroundColor : "transparent",
|
|
4686
|
+
textAlign: m.textAlign || "left",
|
|
4687
|
+
textTransform: m.textTransform || "none",
|
|
4688
|
+
letterSpacing: m.letterSpacing ? `${m.letterSpacing}px` : "normal",
|
|
4689
|
+
textShadow: m.hasTextShadow ? `${m.textShadowX}px ${m.textShadowY}px ${m.textShadowBlur}px ${m.textShadowColor}` : "none"
|
|
4690
4690
|
},
|
|
4691
|
-
children:
|
|
4691
|
+
children: m.text
|
|
4692
4692
|
}
|
|
4693
4693
|
),
|
|
4694
4694
|
/* @__PURE__ */ i.jsxs("div", { className: "template-info", children: [
|
|
4695
|
-
/* @__PURE__ */ i.jsx("span", { className: "template-category", children:
|
|
4696
|
-
/* @__PURE__ */ i.jsx("span", { className: "template-font", children:
|
|
4695
|
+
/* @__PURE__ */ i.jsx("span", { className: "template-category", children: m.category }),
|
|
4696
|
+
/* @__PURE__ */ i.jsx("span", { className: "template-font", children: m.fontFamily })
|
|
4697
4697
|
] })
|
|
4698
4698
|
]
|
|
4699
4699
|
},
|
|
4700
|
-
|
|
4700
|
+
m.id
|
|
4701
4701
|
))
|
|
4702
4702
|
] }),
|
|
4703
4703
|
/* @__PURE__ */ i.jsx("div", { className: "modal-footer", children: /* @__PURE__ */ i.jsxs("div", { className: "results-count", children: [
|
|
4704
|
-
|
|
4704
|
+
F.length,
|
|
4705
4705
|
" template",
|
|
4706
|
-
|
|
4706
|
+
F.length !== 1 ? "s" : "",
|
|
4707
4707
|
" found"
|
|
4708
4708
|
] }) })
|
|
4709
4709
|
] }) }) : null;
|
|
@@ -4713,25 +4713,25 @@ const Ut = {
|
|
|
4713
4713
|
onDuplicateElement: a,
|
|
4714
4714
|
onUndo: l,
|
|
4715
4715
|
onRedo: s,
|
|
4716
|
-
onToggleGrid:
|
|
4717
|
-
onToggleRulers:
|
|
4716
|
+
onToggleGrid: g,
|
|
4717
|
+
onToggleRulers: h,
|
|
4718
4718
|
onToggleSnap: n,
|
|
4719
|
-
onImageUpload:
|
|
4720
|
-
canUndo:
|
|
4721
|
-
canRedo:
|
|
4722
|
-
showGrid:
|
|
4723
|
-
showRulers:
|
|
4724
|
-
snapToGrid:
|
|
4725
|
-
selectedElement:
|
|
4726
|
-
theme:
|
|
4727
|
-
readOnly:
|
|
4728
|
-
apiKey:
|
|
4729
|
-
apiEndpoint:
|
|
4719
|
+
onImageUpload: c,
|
|
4720
|
+
canUndo: F,
|
|
4721
|
+
canRedo: I,
|
|
4722
|
+
showGrid: E,
|
|
4723
|
+
showRulers: m,
|
|
4724
|
+
snapToGrid: B,
|
|
4725
|
+
selectedElement: j,
|
|
4726
|
+
theme: p,
|
|
4727
|
+
readOnly: v,
|
|
4728
|
+
apiKey: X,
|
|
4729
|
+
apiEndpoint: T
|
|
4730
4730
|
}) => {
|
|
4731
|
-
const [O,
|
|
4731
|
+
const [O, k] = N(!1), [Z, W] = N(!1), [xt, Q] = N(!1), [ft, _] = N(!1), [st, M] = N(!1), [nt, tt] = N(!1), [ct, Y] = N(!1), P = (U) => {
|
|
4732
4732
|
const K = U.target.files[0];
|
|
4733
|
-
K && K.type.startsWith("image/") &&
|
|
4734
|
-
},
|
|
4733
|
+
K && K.type.startsWith("image/") && c(K), U.target.value = "";
|
|
4734
|
+
}, C = (U) => {
|
|
4735
4735
|
f("icon", {
|
|
4736
4736
|
iconData: U,
|
|
4737
4737
|
text: U.symbol,
|
|
@@ -4739,9 +4739,9 @@ const Ut = {
|
|
|
4739
4739
|
fontFamily: "Arial",
|
|
4740
4740
|
fill: "#000000"
|
|
4741
4741
|
});
|
|
4742
|
-
},
|
|
4742
|
+
}, et = (U) => {
|
|
4743
4743
|
f("qrcode", U);
|
|
4744
|
-
},
|
|
4744
|
+
}, y = (U) => {
|
|
4745
4745
|
f("barcode", U);
|
|
4746
4746
|
}, D = (U) => {
|
|
4747
4747
|
f("sticker", U);
|
|
@@ -4750,13 +4750,13 @@ const Ut = {
|
|
|
4750
4750
|
}, H = (U, K) => {
|
|
4751
4751
|
f(U, K);
|
|
4752
4752
|
}, G = () => {
|
|
4753
|
-
|
|
4754
|
-
},
|
|
4755
|
-
|
|
4756
|
-
},
|
|
4757
|
-
U === "custom" ? f("text") : U === "templates" && M(!0),
|
|
4758
|
-
},
|
|
4759
|
-
f(U),
|
|
4753
|
+
tt(!nt), Y(!1);
|
|
4754
|
+
}, it = () => {
|
|
4755
|
+
Y(!ct), tt(!1);
|
|
4756
|
+
}, J = (U) => {
|
|
4757
|
+
U === "custom" ? f("text") : U === "templates" && M(!0), tt(!1);
|
|
4758
|
+
}, q = (U) => {
|
|
4759
|
+
f(U), Y(!1);
|
|
4760
4760
|
};
|
|
4761
4761
|
return /* @__PURE__ */ i.jsxs("div", { className: "toolbar", children: [
|
|
4762
4762
|
/* @__PURE__ */ i.jsxs("div", { className: "toolbar-section", children: [
|
|
@@ -4766,7 +4766,7 @@ const Ut = {
|
|
|
4766
4766
|
{
|
|
4767
4767
|
className: "toolbar-btn compact",
|
|
4768
4768
|
onClick: l,
|
|
4769
|
-
disabled: !
|
|
4769
|
+
disabled: !F || v,
|
|
4770
4770
|
title: "Undo (Ctrl+Z)",
|
|
4771
4771
|
children: [
|
|
4772
4772
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "↶" }),
|
|
@@ -4779,7 +4779,7 @@ const Ut = {
|
|
|
4779
4779
|
{
|
|
4780
4780
|
className: "toolbar-btn compact",
|
|
4781
4781
|
onClick: s,
|
|
4782
|
-
disabled: !
|
|
4782
|
+
disabled: !I || v,
|
|
4783
4783
|
title: "Redo (Ctrl+Y)",
|
|
4784
4784
|
children: [
|
|
4785
4785
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "↷" }),
|
|
@@ -4795,7 +4795,7 @@ const Ut = {
|
|
|
4795
4795
|
"button",
|
|
4796
4796
|
{
|
|
4797
4797
|
className: "toolbar-btn compact dropdown-trigger",
|
|
4798
|
-
disabled:
|
|
4798
|
+
disabled: v,
|
|
4799
4799
|
title: "Add Text",
|
|
4800
4800
|
onClick: G,
|
|
4801
4801
|
children: [
|
|
@@ -4806,11 +4806,11 @@ const Ut = {
|
|
|
4806
4806
|
}
|
|
4807
4807
|
),
|
|
4808
4808
|
/* @__PURE__ */ i.jsxs("div", { className: `dropdown-menu ${nt ? "show" : ""}`, children: [
|
|
4809
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4809
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => J("custom"), children: [
|
|
4810
4810
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "𝐓" }),
|
|
4811
4811
|
" Custom Text"
|
|
4812
4812
|
] }),
|
|
4813
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4813
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => J("templates"), children: [
|
|
4814
4814
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "📝" }),
|
|
4815
4815
|
" Text Templates"
|
|
4816
4816
|
] })
|
|
@@ -4821,8 +4821,8 @@ const Ut = {
|
|
|
4821
4821
|
"button",
|
|
4822
4822
|
{
|
|
4823
4823
|
className: "toolbar-btn compact dropdown-trigger",
|
|
4824
|
-
disabled:
|
|
4825
|
-
onClick:
|
|
4824
|
+
disabled: v,
|
|
4825
|
+
onClick: it,
|
|
4826
4826
|
children: [
|
|
4827
4827
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "◩" }),
|
|
4828
4828
|
/* @__PURE__ */ i.jsx("span", { className: "label", children: "Shapes" }),
|
|
@@ -4831,58 +4831,58 @@ const Ut = {
|
|
|
4831
4831
|
}
|
|
4832
4832
|
),
|
|
4833
4833
|
/* @__PURE__ */ i.jsxs("div", { className: `dropdown-menu ${ct ? "show" : ""}`, children: [
|
|
4834
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4834
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("rectangle"), children: [
|
|
4835
4835
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "▭" }),
|
|
4836
4836
|
" Rectangle"
|
|
4837
4837
|
] }),
|
|
4838
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4838
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("circle"), children: [
|
|
4839
4839
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "●" }),
|
|
4840
4840
|
" Circle"
|
|
4841
4841
|
] }),
|
|
4842
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4842
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("triangle"), children: [
|
|
4843
4843
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "▲" }),
|
|
4844
4844
|
" Triangle"
|
|
4845
4845
|
] }),
|
|
4846
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4846
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("star"), children: [
|
|
4847
4847
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "★" }),
|
|
4848
4848
|
" Star"
|
|
4849
4849
|
] }),
|
|
4850
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4850
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("heart"), children: [
|
|
4851
4851
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "♥" }),
|
|
4852
4852
|
" Heart"
|
|
4853
4853
|
] }),
|
|
4854
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4854
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("arrow"), children: [
|
|
4855
4855
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "➤" }),
|
|
4856
4856
|
" Arrow"
|
|
4857
4857
|
] }),
|
|
4858
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4858
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("diamond"), children: [
|
|
4859
4859
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "◆" }),
|
|
4860
4860
|
" Diamond"
|
|
4861
4861
|
] }),
|
|
4862
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4862
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("hexagon"), children: [
|
|
4863
4863
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "⬡" }),
|
|
4864
4864
|
" Hexagon"
|
|
4865
4865
|
] }),
|
|
4866
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4866
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("pentagon"), children: [
|
|
4867
4867
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "⬟" }),
|
|
4868
4868
|
" Pentagon"
|
|
4869
4869
|
] }),
|
|
4870
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4870
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("oval"), children: [
|
|
4871
4871
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "⬯" }),
|
|
4872
4872
|
" Oval"
|
|
4873
4873
|
] }),
|
|
4874
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4874
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("roundedRectangle"), children: [
|
|
4875
4875
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "▢" }),
|
|
4876
4876
|
" Rounded Rectangle"
|
|
4877
4877
|
] }),
|
|
4878
|
-
/* @__PURE__ */ i.jsxs("button", { onClick: () =>
|
|
4878
|
+
/* @__PURE__ */ i.jsxs("button", { onClick: () => q("horizontalLine"), children: [
|
|
4879
4879
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "―" }),
|
|
4880
4880
|
" Horizontal Line"
|
|
4881
4881
|
] })
|
|
4882
4882
|
] })
|
|
4883
4883
|
] }),
|
|
4884
4884
|
/* @__PURE__ */ i.jsx("div", { className: "toolbar-separator" }),
|
|
4885
|
-
/* @__PURE__ */ i.jsxs("label", { className: "toolbar-btn compact file-upload", style: { cursor:
|
|
4885
|
+
/* @__PURE__ */ i.jsxs("label", { className: "toolbar-btn compact file-upload", style: { cursor: v ? "not-allowed" : "pointer" }, children: [
|
|
4886
4886
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "☁️" }),
|
|
4887
4887
|
/* @__PURE__ */ i.jsx("span", { className: "label", children: "Upload" }),
|
|
4888
4888
|
/* @__PURE__ */ i.jsx(
|
|
@@ -4891,18 +4891,18 @@ const Ut = {
|
|
|
4891
4891
|
type: "file",
|
|
4892
4892
|
accept: "image/*",
|
|
4893
4893
|
onChange: P,
|
|
4894
|
-
disabled:
|
|
4894
|
+
disabled: v
|
|
4895
4895
|
}
|
|
4896
4896
|
)
|
|
4897
4897
|
] }),
|
|
4898
4898
|
/* @__PURE__ */ i.jsx("div", { className: "toolbar-separator" }),
|
|
4899
|
-
/* @__PURE__ */ i.jsx(Ke, { onSelectIcon:
|
|
4899
|
+
/* @__PURE__ */ i.jsx(Ke, { onSelectIcon: C, theme: p, disabled: v }),
|
|
4900
4900
|
/* @__PURE__ */ i.jsxs(
|
|
4901
4901
|
"button",
|
|
4902
4902
|
{
|
|
4903
4903
|
className: "toolbar-btn compact",
|
|
4904
4904
|
onClick: () => Q(!0),
|
|
4905
|
-
disabled:
|
|
4905
|
+
disabled: v,
|
|
4906
4906
|
title: "Add Sticker",
|
|
4907
4907
|
children: [
|
|
4908
4908
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "🎨" }),
|
|
@@ -4915,8 +4915,8 @@ const Ut = {
|
|
|
4915
4915
|
"button",
|
|
4916
4916
|
{
|
|
4917
4917
|
className: "toolbar-btn compact",
|
|
4918
|
-
onClick: () =>
|
|
4919
|
-
disabled:
|
|
4918
|
+
onClick: () => k(!0),
|
|
4919
|
+
disabled: v,
|
|
4920
4920
|
title: "Add QR Code",
|
|
4921
4921
|
children: [
|
|
4922
4922
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "▦" }),
|
|
@@ -4929,7 +4929,7 @@ const Ut = {
|
|
|
4929
4929
|
{
|
|
4930
4930
|
className: "toolbar-btn compact",
|
|
4931
4931
|
onClick: () => W(!0),
|
|
4932
|
-
disabled:
|
|
4932
|
+
disabled: v,
|
|
4933
4933
|
title: "Add Barcode",
|
|
4934
4934
|
children: [
|
|
4935
4935
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "▤" }),
|
|
@@ -4943,8 +4943,8 @@ const Ut = {
|
|
|
4943
4943
|
"button",
|
|
4944
4944
|
{
|
|
4945
4945
|
className: "toolbar-btn compact",
|
|
4946
|
-
onClick: () =>
|
|
4947
|
-
disabled:
|
|
4946
|
+
onClick: () => _(!0),
|
|
4947
|
+
disabled: v,
|
|
4948
4948
|
title: "Add Embroidery Design",
|
|
4949
4949
|
children: [
|
|
4950
4950
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "🧵" }),
|
|
@@ -4952,7 +4952,7 @@ const Ut = {
|
|
|
4952
4952
|
]
|
|
4953
4953
|
}
|
|
4954
4954
|
) }),
|
|
4955
|
-
|
|
4955
|
+
j && /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
|
|
4956
4956
|
/* @__PURE__ */ i.jsx("div", { className: "toolbar-separator" }),
|
|
4957
4957
|
/* @__PURE__ */ i.jsxs("div", { className: "toolbar-group", children: [
|
|
4958
4958
|
/* @__PURE__ */ i.jsxs(
|
|
@@ -4960,7 +4960,7 @@ const Ut = {
|
|
|
4960
4960
|
{
|
|
4961
4961
|
className: "toolbar-btn compact success",
|
|
4962
4962
|
onClick: a,
|
|
4963
|
-
disabled:
|
|
4963
|
+
disabled: v,
|
|
4964
4964
|
title: "Duplicate Element (Ctrl+D)",
|
|
4965
4965
|
children: [
|
|
4966
4966
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "⧉" }),
|
|
@@ -4973,7 +4973,7 @@ const Ut = {
|
|
|
4973
4973
|
{
|
|
4974
4974
|
className: "toolbar-btn compact danger",
|
|
4975
4975
|
onClick: o,
|
|
4976
|
-
disabled:
|
|
4976
|
+
disabled: v,
|
|
4977
4977
|
title: "Delete Element (Delete)",
|
|
4978
4978
|
children: [
|
|
4979
4979
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "🗑️" }),
|
|
@@ -4988,8 +4988,8 @@ const Ut = {
|
|
|
4988
4988
|
/* @__PURE__ */ i.jsxs(
|
|
4989
4989
|
"button",
|
|
4990
4990
|
{
|
|
4991
|
-
className: `toolbar-btn compact ${
|
|
4992
|
-
onClick:
|
|
4991
|
+
className: `toolbar-btn compact ${E ? "active" : ""}`,
|
|
4992
|
+
onClick: g,
|
|
4993
4993
|
title: "Toggle Grid",
|
|
4994
4994
|
children: [
|
|
4995
4995
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "⚏" }),
|
|
@@ -5000,8 +5000,8 @@ const Ut = {
|
|
|
5000
5000
|
/* @__PURE__ */ i.jsxs(
|
|
5001
5001
|
"button",
|
|
5002
5002
|
{
|
|
5003
|
-
className: `toolbar-btn compact ${
|
|
5004
|
-
onClick:
|
|
5003
|
+
className: `toolbar-btn compact ${m ? "active" : ""}`,
|
|
5004
|
+
onClick: h,
|
|
5005
5005
|
title: "Toggle Rulers",
|
|
5006
5006
|
children: [
|
|
5007
5007
|
/* @__PURE__ */ i.jsx("span", { className: "icon", children: "📐" }),
|
|
@@ -5012,7 +5012,7 @@ const Ut = {
|
|
|
5012
5012
|
/* @__PURE__ */ i.jsxs(
|
|
5013
5013
|
"button",
|
|
5014
5014
|
{
|
|
5015
|
-
className: `toolbar-btn compact ${
|
|
5015
|
+
className: `toolbar-btn compact ${B ? "active" : ""}`,
|
|
5016
5016
|
onClick: n,
|
|
5017
5017
|
title: "Snap to Grid",
|
|
5018
5018
|
children: [
|
|
@@ -5027,18 +5027,18 @@ const Ut = {
|
|
|
5027
5027
|
Ze,
|
|
5028
5028
|
{
|
|
5029
5029
|
isOpen: O,
|
|
5030
|
-
onClose: () =>
|
|
5031
|
-
onAddQRCode:
|
|
5032
|
-
theme:
|
|
5030
|
+
onClose: () => k(!1),
|
|
5031
|
+
onAddQRCode: et,
|
|
5032
|
+
theme: p
|
|
5033
5033
|
}
|
|
5034
5034
|
),
|
|
5035
5035
|
/* @__PURE__ */ i.jsx(
|
|
5036
5036
|
ti,
|
|
5037
5037
|
{
|
|
5038
|
-
isOpen:
|
|
5038
|
+
isOpen: Z,
|
|
5039
5039
|
onClose: () => W(!1),
|
|
5040
|
-
onAddBarcode:
|
|
5041
|
-
theme:
|
|
5040
|
+
onAddBarcode: y,
|
|
5041
|
+
theme: p
|
|
5042
5042
|
}
|
|
5043
5043
|
),
|
|
5044
5044
|
/* @__PURE__ */ i.jsx(
|
|
@@ -5047,29 +5047,29 @@ const Ut = {
|
|
|
5047
5047
|
isOpen: xt,
|
|
5048
5048
|
onClose: () => Q(!1),
|
|
5049
5049
|
onAddSticker: D,
|
|
5050
|
-
theme:
|
|
5051
|
-
apiKey:
|
|
5052
|
-
apiEndpoint:
|
|
5050
|
+
theme: p,
|
|
5051
|
+
apiKey: X,
|
|
5052
|
+
apiEndpoint: T
|
|
5053
5053
|
}
|
|
5054
5054
|
),
|
|
5055
5055
|
/* @__PURE__ */ i.jsx(
|
|
5056
5056
|
ri,
|
|
5057
5057
|
{
|
|
5058
5058
|
isOpen: ft,
|
|
5059
|
-
onClose: () =>
|
|
5059
|
+
onClose: () => _(!1),
|
|
5060
5060
|
onAddEmbroidery: L,
|
|
5061
|
-
theme:
|
|
5062
|
-
apiKey:
|
|
5063
|
-
apiEndpoint:
|
|
5061
|
+
theme: p,
|
|
5062
|
+
apiKey: X,
|
|
5063
|
+
apiEndpoint: T
|
|
5064
5064
|
}
|
|
5065
5065
|
),
|
|
5066
5066
|
/* @__PURE__ */ i.jsx(
|
|
5067
5067
|
ai,
|
|
5068
5068
|
{
|
|
5069
|
-
isOpen:
|
|
5069
|
+
isOpen: st,
|
|
5070
5070
|
onClose: () => M(!1),
|
|
5071
5071
|
onAddText: H,
|
|
5072
|
-
theme:
|
|
5072
|
+
theme: p
|
|
5073
5073
|
}
|
|
5074
5074
|
)
|
|
5075
5075
|
] });
|
|
@@ -5080,16 +5080,16 @@ const Ut = {
|
|
|
5080
5080
|
availableFonts: l,
|
|
5081
5081
|
theme: s
|
|
5082
5082
|
}) => {
|
|
5083
|
-
const [
|
|
5083
|
+
const [g, h] = N(!1);
|
|
5084
5084
|
if (!f)
|
|
5085
5085
|
return /* @__PURE__ */ i.jsxs("div", { className: "properties-panel", children: [
|
|
5086
5086
|
/* @__PURE__ */ i.jsx("h3", { children: "Properties" }),
|
|
5087
5087
|
/* @__PURE__ */ i.jsx("p", { className: "no-selection", children: "Select an element to edit its properties" })
|
|
5088
5088
|
] });
|
|
5089
|
-
const n = (
|
|
5090
|
-
o(f.id, { [
|
|
5091
|
-
},
|
|
5092
|
-
var
|
|
5089
|
+
const n = (p, v) => {
|
|
5090
|
+
o(f.id, { [p]: v });
|
|
5091
|
+
}, c = () => {
|
|
5092
|
+
var p, v, X;
|
|
5093
5093
|
return /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5094
5094
|
/* @__PURE__ */ i.jsx("h4", { children: "Text Content" }),
|
|
5095
5095
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
@@ -5098,7 +5098,7 @@ const Ut = {
|
|
|
5098
5098
|
"textarea",
|
|
5099
5099
|
{
|
|
5100
5100
|
value: f.text || "",
|
|
5101
|
-
onChange: (
|
|
5101
|
+
onChange: (T) => n("text", T.target.value),
|
|
5102
5102
|
rows: 3,
|
|
5103
5103
|
placeholder: "Enter your text here..."
|
|
5104
5104
|
}
|
|
@@ -5110,8 +5110,8 @@ const Ut = {
|
|
|
5110
5110
|
"select",
|
|
5111
5111
|
{
|
|
5112
5112
|
value: f.fontFamily || "Arial",
|
|
5113
|
-
onChange: (
|
|
5114
|
-
children: l.map((
|
|
5113
|
+
onChange: (T) => n("fontFamily", T.target.value),
|
|
5114
|
+
children: l.map((T) => /* @__PURE__ */ i.jsx("option", { value: T, children: T }, T))
|
|
5115
5115
|
}
|
|
5116
5116
|
)
|
|
5117
5117
|
] }),
|
|
@@ -5123,7 +5123,7 @@ const Ut = {
|
|
|
5123
5123
|
{
|
|
5124
5124
|
type: "number",
|
|
5125
5125
|
value: f.fontSize || 20,
|
|
5126
|
-
onChange: (
|
|
5126
|
+
onChange: (T) => n("fontSize", parseInt(T.target.value)),
|
|
5127
5127
|
min: "8",
|
|
5128
5128
|
max: "200"
|
|
5129
5129
|
}
|
|
@@ -5137,7 +5137,7 @@ const Ut = {
|
|
|
5137
5137
|
type: "number",
|
|
5138
5138
|
step: "0.1",
|
|
5139
5139
|
value: f.lineHeight || 1.2,
|
|
5140
|
-
onChange: (
|
|
5140
|
+
onChange: (T) => n("lineHeight", parseFloat(T.target.value)),
|
|
5141
5141
|
min: "0.5",
|
|
5142
5142
|
max: "3"
|
|
5143
5143
|
}
|
|
@@ -5191,10 +5191,10 @@ const Ut = {
|
|
|
5191
5191
|
/* @__PURE__ */ i.jsx(
|
|
5192
5192
|
"button",
|
|
5193
5193
|
{
|
|
5194
|
-
className: (
|
|
5194
|
+
className: (p = f.textDecoration) != null && p.includes("underline") ? "active" : "",
|
|
5195
5195
|
onClick: () => {
|
|
5196
|
-
const
|
|
5197
|
-
|
|
5196
|
+
const T = f.textDecoration || "", O = T.split(" ").filter((k) => k && k !== "underline");
|
|
5197
|
+
T.includes("underline") || O.push("underline"), n("textDecoration", O.join(" ").trim());
|
|
5198
5198
|
},
|
|
5199
5199
|
title: "Underline",
|
|
5200
5200
|
children: /* @__PURE__ */ i.jsx("u", { children: "U" })
|
|
@@ -5203,10 +5203,10 @@ const Ut = {
|
|
|
5203
5203
|
/* @__PURE__ */ i.jsx(
|
|
5204
5204
|
"button",
|
|
5205
5205
|
{
|
|
5206
|
-
className: (
|
|
5206
|
+
className: (v = f.textDecoration) != null && v.includes("overline") ? "active" : "",
|
|
5207
5207
|
onClick: () => {
|
|
5208
|
-
const
|
|
5209
|
-
|
|
5208
|
+
const T = f.textDecoration || "", O = T.split(" ").filter((k) => k && k !== "overline");
|
|
5209
|
+
T.includes("overline") || O.push("overline"), n("textDecoration", O.join(" ").trim());
|
|
5210
5210
|
},
|
|
5211
5211
|
title: "Overline",
|
|
5212
5212
|
children: /* @__PURE__ */ i.jsx("span", { style: { textDecoration: "overline" }, children: "O" })
|
|
@@ -5215,10 +5215,10 @@ const Ut = {
|
|
|
5215
5215
|
/* @__PURE__ */ i.jsx(
|
|
5216
5216
|
"button",
|
|
5217
5217
|
{
|
|
5218
|
-
className: (
|
|
5218
|
+
className: (X = f.textDecoration) != null && X.includes("line-through") ? "active" : "",
|
|
5219
5219
|
onClick: () => {
|
|
5220
|
-
const
|
|
5221
|
-
|
|
5220
|
+
const T = f.textDecoration || "", O = T.split(" ").filter((k) => k && k !== "line-through");
|
|
5221
|
+
T.includes("line-through") || O.push("line-through"), n("textDecoration", O.join(" ").trim());
|
|
5222
5222
|
},
|
|
5223
5223
|
title: "Strikethrough",
|
|
5224
5224
|
children: /* @__PURE__ */ i.jsx("s", { children: "S" })
|
|
@@ -5316,7 +5316,7 @@ const Ut = {
|
|
|
5316
5316
|
{
|
|
5317
5317
|
type: "color",
|
|
5318
5318
|
value: f.fill || "#000000",
|
|
5319
|
-
onChange: (
|
|
5319
|
+
onChange: (T) => n("fill", T.target.value)
|
|
5320
5320
|
}
|
|
5321
5321
|
)
|
|
5322
5322
|
] }),
|
|
@@ -5328,7 +5328,7 @@ const Ut = {
|
|
|
5328
5328
|
{
|
|
5329
5329
|
type: "color",
|
|
5330
5330
|
value: f.backgroundColor || "#ffffff",
|
|
5331
|
-
onChange: (
|
|
5331
|
+
onChange: (T) => n("backgroundColor", T.target.value),
|
|
5332
5332
|
disabled: !f.hasBackground
|
|
5333
5333
|
}
|
|
5334
5334
|
),
|
|
@@ -5344,7 +5344,7 @@ const Ut = {
|
|
|
5344
5344
|
] })
|
|
5345
5345
|
] })
|
|
5346
5346
|
] }) }),
|
|
5347
|
-
|
|
5347
|
+
g && /* @__PURE__ */ i.jsxs(i.Fragment, { children: [
|
|
5348
5348
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5349
5349
|
/* @__PURE__ */ i.jsxs("div", { className: "input-group", children: [
|
|
5350
5350
|
/* @__PURE__ */ i.jsx("label", { children: "Letter Spacing" }),
|
|
@@ -5354,7 +5354,7 @@ const Ut = {
|
|
|
5354
5354
|
type: "number",
|
|
5355
5355
|
step: "0.1",
|
|
5356
5356
|
value: f.letterSpacing || 0,
|
|
5357
|
-
onChange: (
|
|
5357
|
+
onChange: (T) => n("letterSpacing", parseFloat(T.target.value)),
|
|
5358
5358
|
min: "-5",
|
|
5359
5359
|
max: "10"
|
|
5360
5360
|
}
|
|
@@ -5368,7 +5368,7 @@ const Ut = {
|
|
|
5368
5368
|
type: "number",
|
|
5369
5369
|
step: "0.1",
|
|
5370
5370
|
value: f.wordSpacing || 0,
|
|
5371
|
-
onChange: (
|
|
5371
|
+
onChange: (T) => n("wordSpacing", parseFloat(T.target.value)),
|
|
5372
5372
|
min: "-10",
|
|
5373
5373
|
max: "20"
|
|
5374
5374
|
}
|
|
@@ -5394,7 +5394,7 @@ const Ut = {
|
|
|
5394
5394
|
{
|
|
5395
5395
|
type: "number",
|
|
5396
5396
|
value: f.textShadowX || 2,
|
|
5397
|
-
onChange: (
|
|
5397
|
+
onChange: (T) => n("textShadowX", parseInt(T.target.value)),
|
|
5398
5398
|
min: "-20",
|
|
5399
5399
|
max: "20"
|
|
5400
5400
|
}
|
|
@@ -5407,7 +5407,7 @@ const Ut = {
|
|
|
5407
5407
|
{
|
|
5408
5408
|
type: "number",
|
|
5409
5409
|
value: f.textShadowY || 2,
|
|
5410
|
-
onChange: (
|
|
5410
|
+
onChange: (T) => n("textShadowY", parseInt(T.target.value)),
|
|
5411
5411
|
min: "-20",
|
|
5412
5412
|
max: "20"
|
|
5413
5413
|
}
|
|
@@ -5420,7 +5420,7 @@ const Ut = {
|
|
|
5420
5420
|
{
|
|
5421
5421
|
type: "number",
|
|
5422
5422
|
value: f.textShadowBlur || 4,
|
|
5423
|
-
onChange: (
|
|
5423
|
+
onChange: (T) => n("textShadowBlur", parseInt(T.target.value)),
|
|
5424
5424
|
min: "0",
|
|
5425
5425
|
max: "20"
|
|
5426
5426
|
}
|
|
@@ -5433,7 +5433,7 @@ const Ut = {
|
|
|
5433
5433
|
{
|
|
5434
5434
|
type: "color",
|
|
5435
5435
|
value: f.textShadowColor || "#000000",
|
|
5436
|
-
onChange: (
|
|
5436
|
+
onChange: (T) => n("textShadowColor", T.target.value)
|
|
5437
5437
|
}
|
|
5438
5438
|
)
|
|
5439
5439
|
] })
|
|
@@ -5448,7 +5448,7 @@ const Ut = {
|
|
|
5448
5448
|
{
|
|
5449
5449
|
type: "color",
|
|
5450
5450
|
value: f.stroke || "#000000",
|
|
5451
|
-
onChange: (
|
|
5451
|
+
onChange: (T) => n("stroke", T.target.value)
|
|
5452
5452
|
}
|
|
5453
5453
|
)
|
|
5454
5454
|
] }),
|
|
@@ -5459,7 +5459,7 @@ const Ut = {
|
|
|
5459
5459
|
{
|
|
5460
5460
|
type: "number",
|
|
5461
5461
|
value: f.strokeWidth || 0,
|
|
5462
|
-
onChange: (
|
|
5462
|
+
onChange: (T) => n("strokeWidth", parseInt(T.target.value)),
|
|
5463
5463
|
min: "0",
|
|
5464
5464
|
max: "20"
|
|
5465
5465
|
}
|
|
@@ -5476,7 +5476,7 @@ const Ut = {
|
|
|
5476
5476
|
max: "1",
|
|
5477
5477
|
step: "0.1",
|
|
5478
5478
|
value: f.opacity || 1,
|
|
5479
|
-
onChange: (
|
|
5479
|
+
onChange: (T) => n("opacity", parseFloat(T.target.value))
|
|
5480
5480
|
}
|
|
5481
5481
|
),
|
|
5482
5482
|
/* @__PURE__ */ i.jsxs("span", { children: [
|
|
@@ -5490,7 +5490,7 @@ const Ut = {
|
|
|
5490
5490
|
"select",
|
|
5491
5491
|
{
|
|
5492
5492
|
value: f.fontVariant || "normal",
|
|
5493
|
-
onChange: (
|
|
5493
|
+
onChange: (T) => n("fontVariant", T.target.value),
|
|
5494
5494
|
children: [
|
|
5495
5495
|
/* @__PURE__ */ i.jsx("option", { value: "normal", children: "Normal" }),
|
|
5496
5496
|
/* @__PURE__ */ i.jsx("option", { value: "small-caps", children: "Small Caps" })
|
|
@@ -5504,7 +5504,7 @@ const Ut = {
|
|
|
5504
5504
|
"select",
|
|
5505
5505
|
{
|
|
5506
5506
|
value: f.writingMode || "horizontal-tb",
|
|
5507
|
-
onChange: (
|
|
5507
|
+
onChange: (T) => n("writingMode", T.target.value),
|
|
5508
5508
|
children: [
|
|
5509
5509
|
/* @__PURE__ */ i.jsx("option", { value: "horizontal-tb", children: "Horizontal" }),
|
|
5510
5510
|
/* @__PURE__ */ i.jsx("option", { value: "vertical-rl", children: "Vertical Right-to-Left" }),
|
|
@@ -5543,7 +5543,7 @@ const Ut = {
|
|
|
5543
5543
|
{
|
|
5544
5544
|
type: "number",
|
|
5545
5545
|
value: f.backgroundPadding || 5,
|
|
5546
|
-
onChange: (
|
|
5546
|
+
onChange: (T) => n("backgroundPadding", parseInt(T.target.value)),
|
|
5547
5547
|
min: "0",
|
|
5548
5548
|
max: "50",
|
|
5549
5549
|
disabled: !f.hasBackground
|
|
@@ -5552,7 +5552,7 @@ const Ut = {
|
|
|
5552
5552
|
] })
|
|
5553
5553
|
] })
|
|
5554
5554
|
] });
|
|
5555
|
-
},
|
|
5555
|
+
}, F = () => /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5556
5556
|
/* @__PURE__ */ i.jsx("h4", { children: "Shape Properties" }),
|
|
5557
5557
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5558
5558
|
/* @__PURE__ */ i.jsx("label", { children: "Fill Color" }),
|
|
@@ -5561,7 +5561,7 @@ const Ut = {
|
|
|
5561
5561
|
{
|
|
5562
5562
|
type: "color",
|
|
5563
5563
|
value: f.fill || "#000000",
|
|
5564
|
-
onChange: (
|
|
5564
|
+
onChange: (p) => n("fill", p.target.value)
|
|
5565
5565
|
}
|
|
5566
5566
|
)
|
|
5567
5567
|
] }),
|
|
@@ -5572,7 +5572,7 @@ const Ut = {
|
|
|
5572
5572
|
{
|
|
5573
5573
|
type: "color",
|
|
5574
5574
|
value: f.stroke || "#000000",
|
|
5575
|
-
onChange: (
|
|
5575
|
+
onChange: (p) => n("stroke", p.target.value)
|
|
5576
5576
|
}
|
|
5577
5577
|
)
|
|
5578
5578
|
] }),
|
|
@@ -5583,7 +5583,7 @@ const Ut = {
|
|
|
5583
5583
|
{
|
|
5584
5584
|
type: "number",
|
|
5585
5585
|
value: f.strokeWidth || 2,
|
|
5586
|
-
onChange: (
|
|
5586
|
+
onChange: (p) => n("strokeWidth", parseInt(p.target.value)),
|
|
5587
5587
|
min: "0",
|
|
5588
5588
|
max: "20"
|
|
5589
5589
|
}
|
|
@@ -5596,7 +5596,7 @@ const Ut = {
|
|
|
5596
5596
|
{
|
|
5597
5597
|
type: "number",
|
|
5598
5598
|
value: f.numPoints || 5,
|
|
5599
|
-
onChange: (
|
|
5599
|
+
onChange: (p) => n("numPoints", parseInt(p.target.value)),
|
|
5600
5600
|
min: "3",
|
|
5601
5601
|
max: "20"
|
|
5602
5602
|
}
|
|
@@ -5609,13 +5609,13 @@ const Ut = {
|
|
|
5609
5609
|
{
|
|
5610
5610
|
type: "number",
|
|
5611
5611
|
value: f.cornerRadius || 10,
|
|
5612
|
-
onChange: (
|
|
5612
|
+
onChange: (p) => n("cornerRadius", parseInt(p.target.value)),
|
|
5613
5613
|
min: "0",
|
|
5614
5614
|
max: "50"
|
|
5615
5615
|
}
|
|
5616
5616
|
)
|
|
5617
5617
|
] })
|
|
5618
|
-
] }),
|
|
5618
|
+
] }), I = () => /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5619
5619
|
/* @__PURE__ */ i.jsx("h4", { children: "Image Properties" }),
|
|
5620
5620
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5621
5621
|
/* @__PURE__ */ i.jsx("label", { children: "Opacity" }),
|
|
@@ -5627,7 +5627,7 @@ const Ut = {
|
|
|
5627
5627
|
max: "1",
|
|
5628
5628
|
step: "0.1",
|
|
5629
5629
|
value: f.opacity || 1,
|
|
5630
|
-
onChange: (
|
|
5630
|
+
onChange: (p) => n("opacity", parseFloat(p.target.value))
|
|
5631
5631
|
}
|
|
5632
5632
|
),
|
|
5633
5633
|
/* @__PURE__ */ i.jsxs("span", { children: [
|
|
@@ -5635,20 +5635,20 @@ const Ut = {
|
|
|
5635
5635
|
"%"
|
|
5636
5636
|
] })
|
|
5637
5637
|
] }),
|
|
5638
|
-
|
|
5638
|
+
g && /* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5639
5639
|
/* @__PURE__ */ i.jsx("label", { children: "Border Radius" }),
|
|
5640
5640
|
/* @__PURE__ */ i.jsx(
|
|
5641
5641
|
"input",
|
|
5642
5642
|
{
|
|
5643
5643
|
type: "number",
|
|
5644
5644
|
value: f.borderRadius || 0,
|
|
5645
|
-
onChange: (
|
|
5645
|
+
onChange: (p) => n("borderRadius", parseInt(p.target.value)),
|
|
5646
5646
|
min: "0",
|
|
5647
5647
|
max: "50"
|
|
5648
5648
|
}
|
|
5649
5649
|
)
|
|
5650
5650
|
] })
|
|
5651
|
-
] }),
|
|
5651
|
+
] }), E = () => /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5652
5652
|
/* @__PURE__ */ i.jsx("h4", { children: "Position & Size" }),
|
|
5653
5653
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5654
5654
|
/* @__PURE__ */ i.jsxs("div", { className: "input-group", children: [
|
|
@@ -5658,7 +5658,7 @@ const Ut = {
|
|
|
5658
5658
|
{
|
|
5659
5659
|
type: "number",
|
|
5660
5660
|
value: Math.round(f.x) || 0,
|
|
5661
|
-
onChange: (
|
|
5661
|
+
onChange: (p) => n("x", parseInt(p.target.value))
|
|
5662
5662
|
}
|
|
5663
5663
|
)
|
|
5664
5664
|
] }),
|
|
@@ -5669,7 +5669,7 @@ const Ut = {
|
|
|
5669
5669
|
{
|
|
5670
5670
|
type: "number",
|
|
5671
5671
|
value: Math.round(f.y) || 0,
|
|
5672
|
-
onChange: (
|
|
5672
|
+
onChange: (p) => n("y", parseInt(p.target.value))
|
|
5673
5673
|
}
|
|
5674
5674
|
)
|
|
5675
5675
|
] })
|
|
@@ -5682,7 +5682,7 @@ const Ut = {
|
|
|
5682
5682
|
{
|
|
5683
5683
|
type: "number",
|
|
5684
5684
|
value: Math.round(f.width) || 0,
|
|
5685
|
-
onChange: (
|
|
5685
|
+
onChange: (p) => n("width", parseInt(p.target.value)),
|
|
5686
5686
|
min: "1"
|
|
5687
5687
|
}
|
|
5688
5688
|
)
|
|
@@ -5694,7 +5694,7 @@ const Ut = {
|
|
|
5694
5694
|
{
|
|
5695
5695
|
type: "number",
|
|
5696
5696
|
value: Math.round(f.height) || 0,
|
|
5697
|
-
onChange: (
|
|
5697
|
+
onChange: (p) => n("height", parseInt(p.target.value)),
|
|
5698
5698
|
min: "1"
|
|
5699
5699
|
}
|
|
5700
5700
|
)
|
|
@@ -5709,7 +5709,7 @@ const Ut = {
|
|
|
5709
5709
|
min: "-180",
|
|
5710
5710
|
max: "180",
|
|
5711
5711
|
value: f.rotation || 0,
|
|
5712
|
-
onChange: (
|
|
5712
|
+
onChange: (p) => n("rotation", parseInt(p.target.value))
|
|
5713
5713
|
}
|
|
5714
5714
|
),
|
|
5715
5715
|
/* @__PURE__ */ i.jsxs("span", { children: [
|
|
@@ -5717,7 +5717,7 @@ const Ut = {
|
|
|
5717
5717
|
"°"
|
|
5718
5718
|
] })
|
|
5719
5719
|
] })
|
|
5720
|
-
] }),
|
|
5720
|
+
] }), m = () => /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5721
5721
|
/* @__PURE__ */ i.jsx("h4", { children: "Line Properties" }),
|
|
5722
5722
|
/* @__PURE__ */ i.jsxs("div", { className: "property-row", children: [
|
|
5723
5723
|
/* @__PURE__ */ i.jsxs("div", { className: "input-group", children: [
|
|
@@ -5727,9 +5727,9 @@ const Ut = {
|
|
|
5727
5727
|
{
|
|
5728
5728
|
type: "number",
|
|
5729
5729
|
value: f.strokeWidth || f.height || 2,
|
|
5730
|
-
onChange: (
|
|
5731
|
-
const
|
|
5732
|
-
n("strokeWidth",
|
|
5730
|
+
onChange: (p) => {
|
|
5731
|
+
const v = parseInt(p.target.value);
|
|
5732
|
+
n("strokeWidth", v), n("height", v);
|
|
5733
5733
|
},
|
|
5734
5734
|
min: "1",
|
|
5735
5735
|
max: "50"
|
|
@@ -5743,7 +5743,7 @@ const Ut = {
|
|
|
5743
5743
|
{
|
|
5744
5744
|
type: "number",
|
|
5745
5745
|
value: f.width || 200,
|
|
5746
|
-
onChange: (
|
|
5746
|
+
onChange: (p) => n("width", parseInt(p.target.value)),
|
|
5747
5747
|
min: "10",
|
|
5748
5748
|
max: "1000"
|
|
5749
5749
|
}
|
|
@@ -5758,8 +5758,8 @@ const Ut = {
|
|
|
5758
5758
|
{
|
|
5759
5759
|
type: "color",
|
|
5760
5760
|
value: f.stroke || f.fill || "#000000",
|
|
5761
|
-
onChange: (
|
|
5762
|
-
n("stroke",
|
|
5761
|
+
onChange: (p) => {
|
|
5762
|
+
n("stroke", p.target.value), n("fill", p.target.value);
|
|
5763
5763
|
}
|
|
5764
5764
|
}
|
|
5765
5765
|
),
|
|
@@ -5768,15 +5768,15 @@ const Ut = {
|
|
|
5768
5768
|
{
|
|
5769
5769
|
type: "text",
|
|
5770
5770
|
value: f.stroke || f.fill || "#000000",
|
|
5771
|
-
onChange: (
|
|
5772
|
-
n("stroke",
|
|
5771
|
+
onChange: (p) => {
|
|
5772
|
+
n("stroke", p.target.value), n("fill", p.target.value);
|
|
5773
5773
|
},
|
|
5774
5774
|
placeholder: "#000000"
|
|
5775
5775
|
}
|
|
5776
5776
|
)
|
|
5777
5777
|
] })
|
|
5778
5778
|
] })
|
|
5779
|
-
] }),
|
|
5779
|
+
] }), B = () => /* @__PURE__ */ i.jsxs("div", { className: "property-group", children: [
|
|
5780
5780
|
/* @__PURE__ */ i.jsx("h4", { children: "Layer Controls" }),
|
|
5781
5781
|
/* @__PURE__ */ i.jsxs("div", { className: "button-group vertical", children: [
|
|
5782
5782
|
/* @__PURE__ */ i.jsx("button", { onClick: () => a(f.id, "top"), children: "Bring to Front" }),
|
|
@@ -5784,7 +5784,7 @@ const Ut = {
|
|
|
5784
5784
|
/* @__PURE__ */ i.jsx("button", { onClick: () => a(f.id, "down"), children: "Send Backward" }),
|
|
5785
5785
|
/* @__PURE__ */ i.jsx("button", { onClick: () => a(f.id, "bottom"), children: "Send to Back" })
|
|
5786
5786
|
] })
|
|
5787
|
-
] }),
|
|
5787
|
+
] }), j = [
|
|
5788
5788
|
"rectangle",
|
|
5789
5789
|
"circle",
|
|
5790
5790
|
"triangle",
|
|
@@ -5803,19 +5803,19 @@ const Ut = {
|
|
|
5803
5803
|
/* @__PURE__ */ i.jsx("span", { className: "element-type", children: f.type })
|
|
5804
5804
|
] }),
|
|
5805
5805
|
/* @__PURE__ */ i.jsxs("div", { className: "panel-content", children: [
|
|
5806
|
-
f.type === "text" &&
|
|
5807
|
-
|
|
5808
|
-
f.type === "image" &&
|
|
5809
|
-
f.type === "horizontalLine" &&
|
|
5810
|
-
I(),
|
|
5806
|
+
f.type === "text" && c(),
|
|
5807
|
+
j.includes(f.type) && F(),
|
|
5808
|
+
f.type === "image" && I(),
|
|
5809
|
+
f.type === "horizontalLine" && m(),
|
|
5811
5810
|
E(),
|
|
5811
|
+
B(),
|
|
5812
5812
|
/* @__PURE__ */ i.jsx("div", { className: "property-group", children: /* @__PURE__ */ i.jsxs(
|
|
5813
5813
|
"button",
|
|
5814
5814
|
{
|
|
5815
5815
|
className: "toggle-advanced",
|
|
5816
|
-
onClick: () =>
|
|
5816
|
+
onClick: () => h(!g),
|
|
5817
5817
|
children: [
|
|
5818
|
-
|
|
5818
|
+
g ? "Hide" : "Show",
|
|
5819
5819
|
" Advanced Options"
|
|
5820
5820
|
]
|
|
5821
5821
|
}
|
|
@@ -5828,10 +5828,10 @@ const Ut = {
|
|
|
5828
5828
|
onSelectElement: a,
|
|
5829
5829
|
onMoveLayer: l,
|
|
5830
5830
|
onDeleteElement: s,
|
|
5831
|
-
theme:
|
|
5831
|
+
theme: g
|
|
5832
5832
|
}) => {
|
|
5833
|
-
const
|
|
5834
|
-
switch (
|
|
5833
|
+
const h = (c, F) => {
|
|
5834
|
+
switch (c) {
|
|
5835
5835
|
case "text":
|
|
5836
5836
|
return "T";
|
|
5837
5837
|
case "rectangle":
|
|
@@ -5871,42 +5871,42 @@ const Ut = {
|
|
|
5871
5871
|
default:
|
|
5872
5872
|
return "?";
|
|
5873
5873
|
}
|
|
5874
|
-
}, n = (
|
|
5875
|
-
var
|
|
5876
|
-
if (
|
|
5877
|
-
return
|
|
5878
|
-
if (
|
|
5879
|
-
return `QR Code: ${(
|
|
5880
|
-
if (
|
|
5881
|
-
const
|
|
5882
|
-
return `Barcode (${
|
|
5874
|
+
}, n = (c) => {
|
|
5875
|
+
var F, I;
|
|
5876
|
+
if (c.type === "text")
|
|
5877
|
+
return c.isIcon && c.iconData ? `Icon: ${c.iconData.name}` : ((F = c.text) == null ? void 0 : F.substring(0, 20)) + (((I = c.text) == null ? void 0 : I.length) > 20 ? "..." : "") || "Text";
|
|
5878
|
+
if (c.type === "qrcode")
|
|
5879
|
+
return `QR Code: ${(c.data || "").substring(0, 15) + ((c.data || "").length > 15 ? "..." : "")}`;
|
|
5880
|
+
if (c.type === "barcode") {
|
|
5881
|
+
const E = c.format || "CODE128", m = c.data || "";
|
|
5882
|
+
return `Barcode (${E}): ${m.substring(0, 10) + (m.length > 10 ? "..." : "")}`;
|
|
5883
5883
|
}
|
|
5884
|
-
return
|
|
5884
|
+
return c.type === "sticker" ? `Sticker: ${(c.name || "Untitled").substring(0, 15)}` : c.type === "embroidery" ? `Embroidery: ${(c.name || "Design").substring(0, 15)}` : c.type.charAt(0).toUpperCase() + c.type.slice(1);
|
|
5885
5885
|
};
|
|
5886
5886
|
return /* @__PURE__ */ i.jsxs("div", { className: "layers-panel", children: [
|
|
5887
5887
|
/* @__PURE__ */ i.jsxs("div", { className: "panel-header", children: [
|
|
5888
5888
|
/* @__PURE__ */ i.jsx("h3", { children: "Layers" }),
|
|
5889
5889
|
/* @__PURE__ */ i.jsx("span", { className: "layer-count", children: f.length })
|
|
5890
5890
|
] }),
|
|
5891
|
-
/* @__PURE__ */ i.jsx("div", { className: "layers-list", children: f.length === 0 ? /* @__PURE__ */ i.jsx("div", { className: "no-layers", children: "No elements added yet" }) : [...f].reverse().map((
|
|
5891
|
+
/* @__PURE__ */ i.jsx("div", { className: "layers-list", children: f.length === 0 ? /* @__PURE__ */ i.jsx("div", { className: "no-layers", children: "No elements added yet" }) : [...f].reverse().map((c, F) => /* @__PURE__ */ i.jsxs(
|
|
5892
5892
|
"div",
|
|
5893
5893
|
{
|
|
5894
|
-
className: `layer-item ${(o == null ? void 0 : o.id) ===
|
|
5895
|
-
onClick: () => a(
|
|
5894
|
+
className: `layer-item ${(o == null ? void 0 : o.id) === c.id ? "selected" : ""}`,
|
|
5895
|
+
onClick: () => a(c),
|
|
5896
5896
|
children: [
|
|
5897
5897
|
/* @__PURE__ */ i.jsxs("div", { className: "layer-info", children: [
|
|
5898
|
-
/* @__PURE__ */ i.jsx("span", { className: "layer-icon", children:
|
|
5899
|
-
/* @__PURE__ */ i.jsx("span", { className: "layer-name", children: n(
|
|
5898
|
+
/* @__PURE__ */ i.jsx("span", { className: "layer-icon", children: h(c.type) }),
|
|
5899
|
+
/* @__PURE__ */ i.jsx("span", { className: "layer-name", children: n(c) })
|
|
5900
5900
|
] }),
|
|
5901
5901
|
/* @__PURE__ */ i.jsxs("div", { className: "layer-controls", children: [
|
|
5902
5902
|
/* @__PURE__ */ i.jsx(
|
|
5903
5903
|
"button",
|
|
5904
5904
|
{
|
|
5905
5905
|
className: "layer-btn",
|
|
5906
|
-
onClick: (
|
|
5907
|
-
|
|
5906
|
+
onClick: (I) => {
|
|
5907
|
+
I.stopPropagation(), l(c.id, "up");
|
|
5908
5908
|
},
|
|
5909
|
-
disabled:
|
|
5909
|
+
disabled: F === 0,
|
|
5910
5910
|
title: "Move Up",
|
|
5911
5911
|
children: "↑"
|
|
5912
5912
|
}
|
|
@@ -5915,10 +5915,10 @@ const Ut = {
|
|
|
5915
5915
|
"button",
|
|
5916
5916
|
{
|
|
5917
5917
|
className: "layer-btn",
|
|
5918
|
-
onClick: (
|
|
5919
|
-
|
|
5918
|
+
onClick: (I) => {
|
|
5919
|
+
I.stopPropagation(), l(c.id, "down");
|
|
5920
5920
|
},
|
|
5921
|
-
disabled:
|
|
5921
|
+
disabled: F === f.length - 1,
|
|
5922
5922
|
title: "Move Down",
|
|
5923
5923
|
children: "↓"
|
|
5924
5924
|
}
|
|
@@ -5927,8 +5927,8 @@ const Ut = {
|
|
|
5927
5927
|
"button",
|
|
5928
5928
|
{
|
|
5929
5929
|
className: "layer-btn delete",
|
|
5930
|
-
onClick: (
|
|
5931
|
-
|
|
5930
|
+
onClick: (I) => {
|
|
5931
|
+
I.stopPropagation(), s(c.id);
|
|
5932
5932
|
},
|
|
5933
5933
|
title: "Delete",
|
|
5934
5934
|
children: "×"
|
|
@@ -5937,7 +5937,7 @@ const Ut = {
|
|
|
5937
5937
|
] })
|
|
5938
5938
|
]
|
|
5939
5939
|
},
|
|
5940
|
-
|
|
5940
|
+
c.id
|
|
5941
5941
|
)) })
|
|
5942
5942
|
] });
|
|
5943
5943
|
};
|
|
@@ -5946,34 +5946,34 @@ class ci {
|
|
|
5946
5946
|
this.canvas = document.createElement("canvas"), this.ctx = this.canvas.getContext("2d");
|
|
5947
5947
|
}
|
|
5948
5948
|
// Add this method to the ExportManager class
|
|
5949
|
-
async exportAllSections(o, a, l, s,
|
|
5950
|
-
const
|
|
5951
|
-
for (const
|
|
5952
|
-
const
|
|
5953
|
-
if (!
|
|
5954
|
-
console.log(`Skipping section ${
|
|
5949
|
+
async exportAllSections(o, a, l, s, g = "png", h = !0, n = null) {
|
|
5950
|
+
const c = {};
|
|
5951
|
+
for (const F of a) {
|
|
5952
|
+
const I = F.id || F.sectionName, E = o[I];
|
|
5953
|
+
if (!E || !E.elements || E.elements.length === 0) {
|
|
5954
|
+
console.log(`Skipping section ${I} - no elements`);
|
|
5955
5955
|
continue;
|
|
5956
5956
|
}
|
|
5957
|
-
if (this.canvas.width = l, this.canvas.height = s, this.ctx.clearRect(0, 0, l, s),
|
|
5958
|
-
|
|
5959
|
-
if (
|
|
5957
|
+
if (this.canvas.width = l, this.canvas.height = s, this.ctx.clearRect(0, 0, l, s), h) {
|
|
5958
|
+
let B = F.image || F.sectionImage;
|
|
5959
|
+
if (n && n.sectionImage && (F.sectionName === "Front" || n.sections && Object.keys(n.sections).includes(F.sectionName)) && (B = n.sectionImage), B)
|
|
5960
5960
|
try {
|
|
5961
|
-
const
|
|
5962
|
-
await this.processImageColor(
|
|
5963
|
-
} catch (
|
|
5964
|
-
console.warn("Failed to load background image:",
|
|
5961
|
+
const j = await this.loadImage(B);
|
|
5962
|
+
await this.processImageColor(j, E.selectedColor || "#FFFFFF"), this.ctx.drawImage(this.processedImage, 0, 0, l, s);
|
|
5963
|
+
} catch (j) {
|
|
5964
|
+
console.warn("Failed to load background image:", j);
|
|
5965
5965
|
}
|
|
5966
5966
|
} else
|
|
5967
5967
|
this.ctx.clearRect(0, 0, l, s);
|
|
5968
|
-
for (const
|
|
5969
|
-
await this.drawElement(
|
|
5970
|
-
const
|
|
5971
|
-
|
|
5972
|
-
dataUrl:
|
|
5973
|
-
blob: await this.dataUrlToBlob(
|
|
5968
|
+
for (const B of E.elements)
|
|
5969
|
+
await this.drawElement(B);
|
|
5970
|
+
const m = this.canvas.toDataURL(`image/${g}`, g === "jpeg" ? 0.9 : void 0);
|
|
5971
|
+
c[I] = {
|
|
5972
|
+
dataUrl: m,
|
|
5973
|
+
blob: await this.dataUrlToBlob(m)
|
|
5974
5974
|
};
|
|
5975
5975
|
}
|
|
5976
|
-
return
|
|
5976
|
+
return c;
|
|
5977
5977
|
}
|
|
5978
5978
|
// Also add a method to download all exports
|
|
5979
5979
|
async downloadExports(o, a = "design") {
|
|
@@ -5983,12 +5983,12 @@ class ci {
|
|
|
5983
5983
|
return;
|
|
5984
5984
|
}
|
|
5985
5985
|
if (l.length === 1) {
|
|
5986
|
-
const s = l[0], { blob:
|
|
5987
|
-
n.href =
|
|
5986
|
+
const s = l[0], { blob: g } = o[s], h = URL.createObjectURL(g), n = document.createElement("a");
|
|
5987
|
+
n.href = h, n.download = `${a}-${s}.png`, document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(h);
|
|
5988
5988
|
} else
|
|
5989
5989
|
for (const s of l) {
|
|
5990
|
-
const { blob:
|
|
5991
|
-
n.href =
|
|
5990
|
+
const { blob: g } = o[s], h = URL.createObjectURL(g), n = document.createElement("a");
|
|
5991
|
+
n.href = h, n.download = `${a}-${s}.png`, document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(h), await new Promise((c) => setTimeout(c, 100));
|
|
5992
5992
|
}
|
|
5993
5993
|
}
|
|
5994
5994
|
async loadImage(o) {
|
|
@@ -6005,22 +6005,22 @@ class ci {
|
|
|
6005
6005
|
async processImageColor(o, a) {
|
|
6006
6006
|
const l = document.createElement("canvas"), s = l.getContext("2d");
|
|
6007
6007
|
l.width = o.width, l.height = o.height, s.clearRect(0, 0, l.width, l.height), s.drawImage(o, 0, 0);
|
|
6008
|
-
const
|
|
6008
|
+
const g = s.getImageData(0, 0, l.width, l.height), h = g.data, n = this.hexToRgb(a);
|
|
6009
6009
|
if (!n) {
|
|
6010
6010
|
console.warn("Invalid target color:", a);
|
|
6011
6011
|
return;
|
|
6012
6012
|
}
|
|
6013
|
-
const { r:
|
|
6014
|
-
for (let
|
|
6015
|
-
if (
|
|
6016
|
-
const
|
|
6017
|
-
|
|
6013
|
+
const { r: c, g: F, b: I } = n;
|
|
6014
|
+
for (let E = 0; E < h.length; E += 4) {
|
|
6015
|
+
if (h[E + 3] === 0) continue;
|
|
6016
|
+
const B = this.getLuma(h[E], h[E + 1], h[E + 2]);
|
|
6017
|
+
h[E] = Math.round(c * B), h[E + 1] = Math.round(F * B), h[E + 2] = Math.round(I * B);
|
|
6018
6018
|
}
|
|
6019
|
-
return s.putImageData(
|
|
6019
|
+
return s.putImageData(g, 0, 0), this.processedImage = new Image(), new Promise((E) => {
|
|
6020
6020
|
this.processedImage.onload = () => {
|
|
6021
|
-
|
|
6021
|
+
E();
|
|
6022
6022
|
}, this.processedImage.onerror = () => {
|
|
6023
|
-
console.error("Failed to create processed image"),
|
|
6023
|
+
console.error("Failed to create processed image"), E();
|
|
6024
6024
|
}, this.processedImage.src = l.toDataURL("image/png");
|
|
6025
6025
|
});
|
|
6026
6026
|
}
|
|
@@ -6080,7 +6080,7 @@ class ci {
|
|
|
6080
6080
|
await this.drawEmbroidery(o);
|
|
6081
6081
|
break;
|
|
6082
6082
|
case "image":
|
|
6083
|
-
|
|
6083
|
+
await this.drawImage(o);
|
|
6084
6084
|
break;
|
|
6085
6085
|
}
|
|
6086
6086
|
this.ctx.restore();
|
|
@@ -6089,9 +6089,9 @@ class ci {
|
|
|
6089
6089
|
this.ctx.font = `${o.fontStyle || "normal"} ${o.fontWeight || "normal"} ${o.fontSize || 20}px ${o.fontFamily || "Arial"}`, this.ctx.fillStyle = o.fill || "#000000", this.ctx.textAlign = o.textAlign || "left", this.ctx.textBaseline = "top", o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth);
|
|
6090
6090
|
const a = (o.text || "Text").split(`
|
|
6091
6091
|
`), l = (o.fontSize || 20) * 1.2;
|
|
6092
|
-
a.forEach((s,
|
|
6093
|
-
const
|
|
6094
|
-
o.stroke && o.strokeWidth > 0 && this.ctx.strokeText(s, 0,
|
|
6092
|
+
a.forEach((s, g) => {
|
|
6093
|
+
const h = g * l;
|
|
6094
|
+
o.stroke && o.strokeWidth > 0 && this.ctx.strokeText(s, 0, h), this.ctx.fillText(s, 0, h);
|
|
6095
6095
|
});
|
|
6096
6096
|
}
|
|
6097
6097
|
drawRectangle(o) {
|
|
@@ -6106,11 +6106,11 @@ class ci {
|
|
|
6106
6106
|
this.ctx.beginPath(), this.ctx.moveTo(a, 0), this.ctx.lineTo(0, o.height), this.ctx.lineTo(o.width, o.height), this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6107
6107
|
}
|
|
6108
6108
|
drawStar(o) {
|
|
6109
|
-
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2,
|
|
6109
|
+
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2, g = s * 0.4, h = o.numPoints || 5;
|
|
6110
6110
|
this.ctx.beginPath();
|
|
6111
|
-
for (let n = 0; n <
|
|
6112
|
-
const
|
|
6113
|
-
n === 0 ? this.ctx.moveTo(
|
|
6111
|
+
for (let n = 0; n < h * 2; n++) {
|
|
6112
|
+
const c = n % 2 === 0 ? s : g, F = n * Math.PI / h, I = a + Math.cos(F) * c, E = l + Math.sin(F) * c;
|
|
6113
|
+
n === 0 ? this.ctx.moveTo(I, E) : this.ctx.lineTo(I, E);
|
|
6114
6114
|
}
|
|
6115
6115
|
this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6116
6116
|
}
|
|
@@ -6120,10 +6120,10 @@ class ci {
|
|
|
6120
6120
|
}
|
|
6121
6121
|
async dataUrlToBlob(o) {
|
|
6122
6122
|
return new Promise((a) => {
|
|
6123
|
-
const l = document.createElement("canvas"), s = l.getContext("2d"),
|
|
6124
|
-
|
|
6125
|
-
l.width =
|
|
6126
|
-
},
|
|
6123
|
+
const l = document.createElement("canvas"), s = l.getContext("2d"), g = new Image();
|
|
6124
|
+
g.onload = () => {
|
|
6125
|
+
l.width = g.width, l.height = g.height, s.drawImage(g, 0, 0), l.toBlob(a);
|
|
6126
|
+
}, g.src = o;
|
|
6127
6127
|
});
|
|
6128
6128
|
}
|
|
6129
6129
|
hexToRgb(o) {
|
|
@@ -6140,67 +6140,67 @@ class ci {
|
|
|
6140
6140
|
this.ctx.beginPath(), this.ctx.moveTo(a, 0), this.ctx.lineTo(o.width, l), this.ctx.lineTo(a, o.height), this.ctx.lineTo(0, l), this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6141
6141
|
}
|
|
6142
6142
|
drawHexagon(o) {
|
|
6143
|
-
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2,
|
|
6143
|
+
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2, g = 6;
|
|
6144
6144
|
this.ctx.beginPath();
|
|
6145
|
-
for (let
|
|
6146
|
-
const n =
|
|
6147
|
-
|
|
6145
|
+
for (let h = 0; h < g; h++) {
|
|
6146
|
+
const n = h * 2 * Math.PI / g - Math.PI / 2, c = a + s * Math.cos(n), F = l + s * Math.sin(n);
|
|
6147
|
+
h === 0 ? this.ctx.moveTo(c, F) : this.ctx.lineTo(c, F);
|
|
6148
6148
|
}
|
|
6149
6149
|
this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6150
6150
|
}
|
|
6151
6151
|
drawPentagon(o) {
|
|
6152
|
-
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2,
|
|
6152
|
+
const a = o.width / 2, l = o.height / 2, s = Math.min(o.width, o.height) / 2, g = 5;
|
|
6153
6153
|
this.ctx.beginPath();
|
|
6154
|
-
for (let
|
|
6155
|
-
const n =
|
|
6156
|
-
|
|
6154
|
+
for (let h = 0; h < g; h++) {
|
|
6155
|
+
const n = h * 2 * Math.PI / g - Math.PI / 2, c = a + s * Math.cos(n), F = l + s * Math.sin(n);
|
|
6156
|
+
h === 0 ? this.ctx.moveTo(c, F) : this.ctx.lineTo(c, F);
|
|
6157
6157
|
}
|
|
6158
6158
|
this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6159
6159
|
}
|
|
6160
6160
|
drawHeart(o) {
|
|
6161
|
-
const a = o.width, l = o.height, s = 0,
|
|
6161
|
+
const a = o.width, l = o.height, s = 0, g = 0;
|
|
6162
6162
|
this.ctx.beginPath();
|
|
6163
|
-
const
|
|
6164
|
-
this.ctx.moveTo(s + a / 2,
|
|
6163
|
+
const h = l * 0.3;
|
|
6164
|
+
this.ctx.moveTo(s + a / 2, g + h), this.ctx.bezierCurveTo(
|
|
6165
6165
|
s + a / 2,
|
|
6166
|
-
|
|
6166
|
+
g,
|
|
6167
6167
|
s,
|
|
6168
|
-
|
|
6168
|
+
g,
|
|
6169
6169
|
s,
|
|
6170
|
-
|
|
6170
|
+
g + h
|
|
6171
6171
|
), this.ctx.bezierCurveTo(
|
|
6172
6172
|
s,
|
|
6173
|
-
|
|
6173
|
+
g + (l + h) / 2,
|
|
6174
6174
|
s + a / 2,
|
|
6175
|
-
|
|
6175
|
+
g + (l + h) / 2,
|
|
6176
6176
|
s + a / 2,
|
|
6177
|
-
|
|
6177
|
+
g + l
|
|
6178
6178
|
), this.ctx.bezierCurveTo(
|
|
6179
6179
|
s + a / 2,
|
|
6180
|
-
|
|
6180
|
+
g + (l + h) / 2,
|
|
6181
6181
|
s + a,
|
|
6182
|
-
|
|
6182
|
+
g + (l + h) / 2,
|
|
6183
6183
|
s + a,
|
|
6184
|
-
|
|
6184
|
+
g + h
|
|
6185
6185
|
), this.ctx.bezierCurveTo(
|
|
6186
6186
|
s + a,
|
|
6187
|
-
|
|
6187
|
+
g,
|
|
6188
6188
|
s + a / 2,
|
|
6189
|
-
|
|
6189
|
+
g,
|
|
6190
6190
|
s + a / 2,
|
|
6191
|
-
|
|
6191
|
+
g + h
|
|
6192
6192
|
), this.ctx.closePath(), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6193
6193
|
}
|
|
6194
6194
|
drawOval(o) {
|
|
6195
|
-
const a = o.width / 2, l = o.height / 2, s = o.width / 2,
|
|
6196
|
-
this.ctx.beginPath(), this.ctx.ellipse(a, l, s,
|
|
6195
|
+
const a = o.width / 2, l = o.height / 2, s = o.width / 2, g = o.height / 2;
|
|
6196
|
+
this.ctx.beginPath(), this.ctx.ellipse(a, l, s, g, 0, 0, 2 * Math.PI), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6197
6197
|
}
|
|
6198
6198
|
drawRoundedRectangle(o) {
|
|
6199
6199
|
const a = Math.min(o.width, o.height) * 0.1;
|
|
6200
6200
|
this.drawRoundedRect(0, 0, o.width, o.height, a), o.fill && o.fill !== "transparent" && (this.ctx.fillStyle = o.fill, this.ctx.fill()), o.stroke && o.strokeWidth > 0 && (this.ctx.strokeStyle = o.stroke, this.ctx.lineWidth = o.strokeWidth, this.ctx.stroke());
|
|
6201
6201
|
}
|
|
6202
|
-
drawRoundedRect(o, a, l, s,
|
|
6203
|
-
this.ctx.beginPath(), this.ctx.moveTo(o +
|
|
6202
|
+
drawRoundedRect(o, a, l, s, g) {
|
|
6203
|
+
this.ctx.beginPath(), this.ctx.moveTo(o + g, a), this.ctx.lineTo(o + l - g, a), this.ctx.quadraticCurveTo(o + l, a, o + l, a + g), this.ctx.lineTo(o + l, a + s - g), this.ctx.quadraticCurveTo(o + l, a + s, o + l - g, a + s), this.ctx.lineTo(o + g, a + s), this.ctx.quadraticCurveTo(o, a + s, o, a + s - g), this.ctx.lineTo(o, a + g), this.ctx.quadraticCurveTo(o, a, o + g, a), this.ctx.closePath();
|
|
6204
6204
|
}
|
|
6205
6205
|
async drawQRCode(o) {
|
|
6206
6206
|
if (o.imageObject)
|
|
@@ -6263,6 +6263,54 @@ class ci {
|
|
|
6263
6263
|
console.warn("Failed to draw embroidery:", a), this.ctx.fillStyle = "#ffebee", this.ctx.fillRect(0, 0, o.width, o.height), this.ctx.strokeStyle = "#f44336", this.ctx.strokeRect(0, 0, o.width, o.height), this.ctx.fillStyle = "#f44336", this.ctx.font = "12px Arial", this.ctx.textAlign = "center", this.ctx.textBaseline = "middle", this.ctx.fillText("Error", o.width / 2, o.height / 2);
|
|
6264
6264
|
}
|
|
6265
6265
|
}
|
|
6266
|
+
// Add this new method to handle image elements more robustly
|
|
6267
|
+
async drawImage(o) {
|
|
6268
|
+
try {
|
|
6269
|
+
let a = null;
|
|
6270
|
+
if (o.imageObject && o.imageObject instanceof HTMLImageElement)
|
|
6271
|
+
a = o.imageObject;
|
|
6272
|
+
else if (o.imageData) {
|
|
6273
|
+
if (o.imageData instanceof HTMLImageElement)
|
|
6274
|
+
a = o.imageData;
|
|
6275
|
+
else if (typeof o.imageData == "string")
|
|
6276
|
+
try {
|
|
6277
|
+
a = await this.loadImage(o.imageData);
|
|
6278
|
+
} catch (l) {
|
|
6279
|
+
console.warn("Failed to load image from imageData URL:", o.imageData, l), a = await this.loadImageWithFallback(o.imageData);
|
|
6280
|
+
}
|
|
6281
|
+
} else if (o.src)
|
|
6282
|
+
try {
|
|
6283
|
+
a = await this.loadImage(o.src);
|
|
6284
|
+
} catch (l) {
|
|
6285
|
+
console.warn("Failed to load image from src:", o.src, l), a = await this.loadImageWithFallback(o.src);
|
|
6286
|
+
}
|
|
6287
|
+
else if (o.image)
|
|
6288
|
+
try {
|
|
6289
|
+
a = await this.loadImage(o.image);
|
|
6290
|
+
} catch (l) {
|
|
6291
|
+
console.warn("Failed to load image from image property:", o.image, l), a = await this.loadImageWithFallback(o.image);
|
|
6292
|
+
}
|
|
6293
|
+
a ? (o.opacity !== void 0 && (this.ctx.globalAlpha = o.opacity), this.ctx.drawImage(a, 0, 0, o.width, o.height)) : this.drawImagePlaceholder(o);
|
|
6294
|
+
} catch (a) {
|
|
6295
|
+
console.error("Failed to draw image element:", a), this.drawImagePlaceholder(o);
|
|
6296
|
+
}
|
|
6297
|
+
}
|
|
6298
|
+
// Add fallback image loading method
|
|
6299
|
+
async loadImageWithFallback(o) {
|
|
6300
|
+
return new Promise((a) => {
|
|
6301
|
+
const l = new Image();
|
|
6302
|
+
l.onload = () => a(l), l.onerror = () => {
|
|
6303
|
+
const s = new Image();
|
|
6304
|
+
s.crossOrigin = "anonymous", s.onload = () => a(s), s.onerror = () => {
|
|
6305
|
+
console.warn("All image loading attempts failed for:", o), a(null);
|
|
6306
|
+
}, s.src = o;
|
|
6307
|
+
}, l.src = o;
|
|
6308
|
+
});
|
|
6309
|
+
}
|
|
6310
|
+
// Add placeholder drawing method
|
|
6311
|
+
drawImagePlaceholder(o) {
|
|
6312
|
+
this.ctx.fillStyle = "#f0f0f0", this.ctx.fillRect(0, 0, o.width, o.height), this.ctx.strokeStyle = "#ccc", this.ctx.lineWidth = 2, this.ctx.strokeRect(0, 0, o.width, o.height), this.ctx.fillStyle = "#666", this.ctx.font = "12px Arial", this.ctx.textAlign = "center", this.ctx.textBaseline = "middle", this.ctx.fillText("Image", o.width / 2, o.height / 2 - 8), this.ctx.fillText("Not Found", o.width / 2, o.height / 2 + 8);
|
|
6313
|
+
}
|
|
6266
6314
|
/**Export to JSON formats**/
|
|
6267
6315
|
// Add these new methods to the ExportManager class
|
|
6268
6316
|
// Helper method to convert blob to File
|
|
@@ -6273,189 +6321,225 @@ class ci {
|
|
|
6273
6321
|
});
|
|
6274
6322
|
}
|
|
6275
6323
|
// Export all sections as JSON with File objects
|
|
6276
|
-
async exportAllSectionsAsJSON(o, a, l, s,
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6324
|
+
async exportAllSectionsAsJSON(o, a, l, s, g = "png", h = null) {
|
|
6325
|
+
var m, B;
|
|
6326
|
+
const n = [], c = [], F = {};
|
|
6327
|
+
for (const j of a) {
|
|
6328
|
+
const p = j.id || j.sectionName, v = o[p];
|
|
6329
|
+
if (!v || !v.elements || v.elements.length === 0) {
|
|
6330
|
+
console.log(`Skipping section ${p} - no elements`);
|
|
6282
6331
|
continue;
|
|
6283
6332
|
}
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6333
|
+
let X = j.image || j.sectionImage;
|
|
6334
|
+
h && h.sectionImage && (j.sectionName === "Front" || h.sections && Object.keys(h.sections).includes(j.sectionName)) && (X = h.sectionImage);
|
|
6335
|
+
const T = {
|
|
6336
|
+
...v,
|
|
6337
|
+
// Include background information using the determined image
|
|
6338
|
+
backgroundImage: X,
|
|
6339
|
+
sectionImage: X,
|
|
6340
|
+
sectionName: p,
|
|
6290
6341
|
// Ensure we have the selected color
|
|
6291
|
-
selectedColor:
|
|
6342
|
+
selectedColor: v.selectedColor || "#FFFFFF",
|
|
6292
6343
|
// Include canvas dimensions
|
|
6293
6344
|
canvasWidth: l,
|
|
6294
6345
|
canvasHeight: s
|
|
6295
6346
|
};
|
|
6296
|
-
|
|
6297
|
-
const
|
|
6298
|
-
|
|
6299
|
-
|
|
6347
|
+
F[p] = T;
|
|
6348
|
+
const O = await this.exportSectionAsBlob(
|
|
6349
|
+
v,
|
|
6350
|
+
j,
|
|
6300
6351
|
l,
|
|
6301
6352
|
s,
|
|
6302
|
-
|
|
6303
|
-
!0
|
|
6353
|
+
g,
|
|
6354
|
+
!0,
|
|
6355
|
+
h
|
|
6356
|
+
// Pass initData to exportSectionAsBlob
|
|
6304
6357
|
);
|
|
6305
|
-
if (
|
|
6306
|
-
const
|
|
6307
|
-
|
|
6308
|
-
`${
|
|
6309
|
-
`image/${
|
|
6358
|
+
if (O) {
|
|
6359
|
+
const Z = await this.blobToFile(
|
|
6360
|
+
O,
|
|
6361
|
+
`${p}-full.${g}`,
|
|
6362
|
+
`image/${g}`
|
|
6310
6363
|
);
|
|
6311
|
-
|
|
6312
|
-
sectionName:
|
|
6313
|
-
sectionImage:
|
|
6364
|
+
n.push({
|
|
6365
|
+
sectionName: p,
|
|
6366
|
+
sectionImage: Z
|
|
6314
6367
|
});
|
|
6315
6368
|
}
|
|
6316
|
-
const
|
|
6317
|
-
|
|
6318
|
-
|
|
6369
|
+
const k = await this.exportSectionAsBlob(
|
|
6370
|
+
v,
|
|
6371
|
+
j,
|
|
6319
6372
|
l,
|
|
6320
6373
|
s,
|
|
6321
|
-
|
|
6322
|
-
!1
|
|
6374
|
+
g,
|
|
6375
|
+
!1,
|
|
6376
|
+
h
|
|
6377
|
+
// Pass initData to exportSectionAsBlob
|
|
6323
6378
|
);
|
|
6324
|
-
if (
|
|
6325
|
-
const
|
|
6326
|
-
|
|
6327
|
-
`${
|
|
6328
|
-
`image/${
|
|
6379
|
+
if (k) {
|
|
6380
|
+
const Z = await this.blobToFile(
|
|
6381
|
+
k,
|
|
6382
|
+
`${p}-print.${g}`,
|
|
6383
|
+
`image/${g}`
|
|
6329
6384
|
);
|
|
6330
|
-
|
|
6331
|
-
sectionName:
|
|
6332
|
-
sectionImage:
|
|
6385
|
+
c.push({
|
|
6386
|
+
sectionName: p,
|
|
6387
|
+
sectionImage: Z
|
|
6333
6388
|
});
|
|
6334
6389
|
}
|
|
6335
6390
|
}
|
|
6336
|
-
|
|
6337
|
-
|
|
6391
|
+
let I = ((m = a[0]) == null ? void 0 : m.image) || ((B = a[0]) == null ? void 0 : B.sectionImage);
|
|
6392
|
+
if (h && h.sectionImage) {
|
|
6393
|
+
const j = a[0];
|
|
6394
|
+
j && (j.sectionName === "Front" || h.sections && Object.keys(h.sections).includes(j.sectionName)) && (I = h.sectionImage);
|
|
6395
|
+
}
|
|
6396
|
+
const E = {
|
|
6397
|
+
sections: F,
|
|
6338
6398
|
canvasWidth: l,
|
|
6339
6399
|
canvasHeight: s,
|
|
6340
|
-
sectionImage:
|
|
6341
|
-
format:
|
|
6400
|
+
sectionImage: I,
|
|
6401
|
+
format: g,
|
|
6342
6402
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6343
6403
|
version: "1.0",
|
|
6404
|
+
// Include initData information if present
|
|
6405
|
+
...h && {
|
|
6406
|
+
initData: {
|
|
6407
|
+
sectionImage: h.sectionImage,
|
|
6408
|
+
sections: h.sections ? Object.keys(h.sections) : []
|
|
6409
|
+
}
|
|
6410
|
+
},
|
|
6344
6411
|
// Include product information for complete context
|
|
6345
6412
|
product: {
|
|
6346
|
-
sections: a.map((
|
|
6347
|
-
sectionName:
|
|
6348
|
-
sectionImage:
|
|
6349
|
-
id:
|
|
6413
|
+
sections: a.map((j) => ({
|
|
6414
|
+
sectionName: j.sectionName || j.id,
|
|
6415
|
+
sectionImage: j.image || j.sectionImage,
|
|
6416
|
+
id: j.id || j.sectionName
|
|
6350
6417
|
}))
|
|
6351
6418
|
}
|
|
6352
6419
|
};
|
|
6353
6420
|
return {
|
|
6354
|
-
fullDesign:
|
|
6355
|
-
printReady:
|
|
6356
|
-
designFile: JSON.stringify(
|
|
6421
|
+
fullDesign: n,
|
|
6422
|
+
printReady: c,
|
|
6423
|
+
designFile: JSON.stringify(E)
|
|
6357
6424
|
};
|
|
6358
6425
|
}
|
|
6359
6426
|
// Helper method to export a single section as blob
|
|
6360
|
-
async exportSectionAsBlob(o, a, l, s,
|
|
6427
|
+
async exportSectionAsBlob(o, a, l, s, g = "png", h = !0, n = null) {
|
|
6361
6428
|
try {
|
|
6362
|
-
if (this.canvas.width = l, this.canvas.height = s, this.ctx.clearRect(0, 0, l, s),
|
|
6363
|
-
|
|
6364
|
-
if (n)
|
|
6429
|
+
if (this.canvas.width = l, this.canvas.height = s, this.ctx.clearRect(0, 0, l, s), h) {
|
|
6430
|
+
let c = a.image || a.sectionImage;
|
|
6431
|
+
if (n && n.sectionImage && (a.sectionName === "Front" || n.sections && Object.keys(n.sections).includes(a.sectionName)) && (c = n.sectionImage), c)
|
|
6365
6432
|
try {
|
|
6366
|
-
const
|
|
6367
|
-
await this.processImageColor(
|
|
6368
|
-
} catch (
|
|
6369
|
-
console.warn("Failed to load background image:",
|
|
6433
|
+
const F = await this.loadImage(c);
|
|
6434
|
+
await this.processImageColor(F, o.selectedColor || "#FFFFFF"), this.ctx.drawImage(this.processedImage, 0, 0, l, s);
|
|
6435
|
+
} catch (F) {
|
|
6436
|
+
console.warn("Failed to load background image:", F);
|
|
6370
6437
|
}
|
|
6371
6438
|
} else
|
|
6372
6439
|
this.ctx.clearRect(0, 0, l, s);
|
|
6373
|
-
for (const
|
|
6374
|
-
await this.drawElement(
|
|
6375
|
-
return new Promise((
|
|
6376
|
-
this.canvas.toBlob(
|
|
6440
|
+
for (const c of o.elements)
|
|
6441
|
+
await this.drawElement(c);
|
|
6442
|
+
return new Promise((c) => {
|
|
6443
|
+
this.canvas.toBlob(c, `image/${g}`, g === "jpeg" ? 0.9 : void 0);
|
|
6377
6444
|
});
|
|
6378
|
-
} catch (
|
|
6379
|
-
return console.error("Error exporting section as blob:",
|
|
6445
|
+
} catch (c) {
|
|
6446
|
+
return console.error("Error exporting section as blob:", c), null;
|
|
6380
6447
|
}
|
|
6381
6448
|
}
|
|
6382
|
-
async exportCurrentSectionAsJSON(o, a = "png") {
|
|
6383
|
-
var
|
|
6384
|
-
const
|
|
6449
|
+
async exportCurrentSectionAsJSON(o, a = "png", l = null) {
|
|
6450
|
+
var B, j, p;
|
|
6451
|
+
const s = ((B = o.activeSection) == null ? void 0 : B.sectionName) || "main";
|
|
6452
|
+
let g = ((j = o.activeSection) == null ? void 0 : j.sectionImage) || ((p = o.activeSection) == null ? void 0 : p.image);
|
|
6453
|
+
l && l.sectionImage && (s === "Front" || l.sections && Object.keys(l.sections).includes(s)) && (g = l.sectionImage);
|
|
6454
|
+
const h = {
|
|
6385
6455
|
elements: o.elements,
|
|
6386
6456
|
selectedColor: o.selectedColor,
|
|
6387
6457
|
canvasWidth: o.canvasWidth,
|
|
6388
6458
|
canvasHeight: o.canvasHeight,
|
|
6389
|
-
// Include background information
|
|
6390
|
-
backgroundImage:
|
|
6391
|
-
sectionImage:
|
|
6392
|
-
sectionName:
|
|
6459
|
+
// Include background information using the determined image
|
|
6460
|
+
backgroundImage: g,
|
|
6461
|
+
sectionImage: g,
|
|
6462
|
+
sectionName: s,
|
|
6393
6463
|
zoomLevel: o.zoomLevel,
|
|
6394
6464
|
showGrid: o.showGrid,
|
|
6395
6465
|
snapToGrid: o.snapToGrid
|
|
6396
|
-
},
|
|
6397
|
-
id:
|
|
6398
|
-
sectionName:
|
|
6399
|
-
image:
|
|
6400
|
-
sectionImage:
|
|
6401
|
-
},
|
|
6402
|
-
s,
|
|
6466
|
+
}, n = {
|
|
6467
|
+
id: s,
|
|
6468
|
+
sectionName: s,
|
|
6469
|
+
image: g,
|
|
6470
|
+
sectionImage: g
|
|
6471
|
+
}, c = [], F = [], I = await this.exportSectionAsBlob(
|
|
6403
6472
|
h,
|
|
6473
|
+
n,
|
|
6404
6474
|
o.canvasWidth,
|
|
6405
6475
|
o.canvasHeight,
|
|
6406
6476
|
a,
|
|
6407
|
-
!0
|
|
6477
|
+
!0,
|
|
6478
|
+
l
|
|
6479
|
+
// Pass initData to exportSectionAsBlob
|
|
6408
6480
|
);
|
|
6409
|
-
if (
|
|
6481
|
+
if (I) {
|
|
6410
6482
|
const v = await this.blobToFile(
|
|
6411
|
-
|
|
6412
|
-
`${
|
|
6483
|
+
I,
|
|
6484
|
+
`${s}-full.${a}`,
|
|
6413
6485
|
`image/${a}`
|
|
6414
6486
|
);
|
|
6415
|
-
|
|
6416
|
-
sectionName:
|
|
6487
|
+
c.push({
|
|
6488
|
+
sectionName: s,
|
|
6417
6489
|
sectionImage: v
|
|
6418
6490
|
});
|
|
6419
6491
|
}
|
|
6420
|
-
const
|
|
6421
|
-
s,
|
|
6492
|
+
const E = await this.exportSectionAsBlob(
|
|
6422
6493
|
h,
|
|
6494
|
+
n,
|
|
6423
6495
|
o.canvasWidth,
|
|
6424
6496
|
o.canvasHeight,
|
|
6425
6497
|
a,
|
|
6426
|
-
!1
|
|
6498
|
+
!1,
|
|
6499
|
+
l
|
|
6500
|
+
// Pass initData to exportSectionAsBlob
|
|
6427
6501
|
);
|
|
6428
|
-
if (
|
|
6502
|
+
if (E) {
|
|
6429
6503
|
const v = await this.blobToFile(
|
|
6430
|
-
|
|
6431
|
-
`${
|
|
6504
|
+
E,
|
|
6505
|
+
`${s}-print.${a}`,
|
|
6432
6506
|
`image/${a}`
|
|
6433
6507
|
);
|
|
6434
|
-
|
|
6435
|
-
sectionName:
|
|
6508
|
+
F.push({
|
|
6509
|
+
sectionName: s,
|
|
6436
6510
|
sectionImage: v
|
|
6437
6511
|
});
|
|
6438
6512
|
}
|
|
6439
|
-
const
|
|
6440
|
-
sections: { [
|
|
6513
|
+
const m = {
|
|
6514
|
+
sections: { [s]: h },
|
|
6441
6515
|
canvasWidth: o.canvasWidth,
|
|
6442
6516
|
canvasHeight: o.canvasHeight,
|
|
6517
|
+
sectionImage: g,
|
|
6518
|
+
// Use the determined image here too
|
|
6443
6519
|
format: a,
|
|
6444
6520
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6445
6521
|
version: "1.0",
|
|
6522
|
+
// Include initData information if present
|
|
6523
|
+
...l && {
|
|
6524
|
+
initData: {
|
|
6525
|
+
sectionImage: l.sectionImage,
|
|
6526
|
+
sections: l.sections ? Object.keys(l.sections) : []
|
|
6527
|
+
}
|
|
6528
|
+
},
|
|
6446
6529
|
// Include product information for complete context
|
|
6447
6530
|
productInfo: {
|
|
6448
6531
|
sections: [{
|
|
6449
|
-
sectionName:
|
|
6450
|
-
sectionImage:
|
|
6451
|
-
|
|
6532
|
+
sectionName: s,
|
|
6533
|
+
sectionImage: g,
|
|
6534
|
+
// Use the determined image here too
|
|
6535
|
+
id: s
|
|
6452
6536
|
}]
|
|
6453
6537
|
}
|
|
6454
6538
|
};
|
|
6455
6539
|
return {
|
|
6456
|
-
fullDesign:
|
|
6457
|
-
printReady:
|
|
6458
|
-
designFile: JSON.stringify(
|
|
6540
|
+
fullDesign: c,
|
|
6541
|
+
printReady: F,
|
|
6542
|
+
designFile: JSON.stringify(m)
|
|
6459
6543
|
};
|
|
6460
6544
|
}
|
|
6461
6545
|
}
|
|
@@ -6467,10 +6551,10 @@ class di {
|
|
|
6467
6551
|
saveDesign(o, a) {
|
|
6468
6552
|
var l;
|
|
6469
6553
|
try {
|
|
6470
|
-
const s = this.generateDesignId(o),
|
|
6554
|
+
const s = this.generateDesignId(o), g = (/* @__PURE__ */ new Date()).toISOString(), h = {
|
|
6471
6555
|
id: s,
|
|
6472
6556
|
name: o,
|
|
6473
|
-
timestamp:
|
|
6557
|
+
timestamp: g,
|
|
6474
6558
|
version: "1.0",
|
|
6475
6559
|
canvasData: {
|
|
6476
6560
|
elements: a.elements || [],
|
|
@@ -6486,11 +6570,11 @@ class di {
|
|
|
6486
6570
|
},
|
|
6487
6571
|
metadata: {
|
|
6488
6572
|
elementCount: ((l = a.elements) == null ? void 0 : l.length) || 0,
|
|
6489
|
-
lastModified:
|
|
6573
|
+
lastModified: g,
|
|
6490
6574
|
thumbnail: a.thumbnail || null
|
|
6491
6575
|
}
|
|
6492
6576
|
};
|
|
6493
|
-
return this.storage.setItem(this.STORAGE_PREFIX + s, JSON.stringify(
|
|
6577
|
+
return this.storage.setItem(this.STORAGE_PREFIX + s, JSON.stringify(h)), this.updateDesignsList(s, o, g), { success: !0, designId: s, message: "Design saved successfully" };
|
|
6494
6578
|
} catch (s) {
|
|
6495
6579
|
return console.error("Error saving design:", s), { success: !1, error: s.message };
|
|
6496
6580
|
}
|
|
@@ -6500,10 +6584,10 @@ class di {
|
|
|
6500
6584
|
try {
|
|
6501
6585
|
let a = o;
|
|
6502
6586
|
if (!o.startsWith("design_")) {
|
|
6503
|
-
const
|
|
6504
|
-
if (!
|
|
6587
|
+
const h = this.getAllDesigns().find((n) => n.name === o);
|
|
6588
|
+
if (!h)
|
|
6505
6589
|
return { success: !1, error: "Design not found" };
|
|
6506
|
-
a =
|
|
6590
|
+
a = h.id;
|
|
6507
6591
|
}
|
|
6508
6592
|
const l = this.storage.getItem(this.STORAGE_PREFIX + a);
|
|
6509
6593
|
return l ? { success: !0, data: JSON.parse(l) } : { success: !1, error: "Design not found" };
|
|
@@ -6536,8 +6620,8 @@ class di {
|
|
|
6536
6620
|
const a = this.loadDesign(o);
|
|
6537
6621
|
if (!a.success)
|
|
6538
6622
|
return a;
|
|
6539
|
-
const l = a.data, s = JSON.stringify(l, null, 2),
|
|
6540
|
-
return n.href =
|
|
6623
|
+
const l = a.data, s = JSON.stringify(l, null, 2), g = new Blob([s], { type: "application/json" }), h = URL.createObjectURL(g), n = document.createElement("a");
|
|
6624
|
+
return n.href = h, n.download = `${l.name}_${l.id}.json`, document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(h), { success: !0, message: "Design exported successfully" };
|
|
6541
6625
|
} catch (a) {
|
|
6542
6626
|
return console.error("Error exporting design:", a), { success: !1, error: a.message };
|
|
6543
6627
|
}
|
|
@@ -6549,13 +6633,13 @@ class di {
|
|
|
6549
6633
|
const l = new FileReader();
|
|
6550
6634
|
l.onload = (s) => {
|
|
6551
6635
|
try {
|
|
6552
|
-
const
|
|
6553
|
-
if (!this.validateDesignData(
|
|
6636
|
+
const g = JSON.parse(s.target.result);
|
|
6637
|
+
if (!this.validateDesignData(g)) {
|
|
6554
6638
|
a({ success: !1, error: "Invalid design file format" });
|
|
6555
6639
|
return;
|
|
6556
6640
|
}
|
|
6557
|
-
const
|
|
6558
|
-
|
|
6641
|
+
const h = this.generateDesignId(g.name + "_imported");
|
|
6642
|
+
g.id = h, g.name += "_imported", g.timestamp = (/* @__PURE__ */ new Date()).toISOString(), g.metadata.lastModified = g.timestamp, this.storage.setItem(this.STORAGE_PREFIX + h, JSON.stringify(g)), this.updateDesignsList(h, g.name, g.timestamp), a({ success: !0, data: g, message: "Design imported successfully" });
|
|
6559
6643
|
} catch {
|
|
6560
6644
|
a({ success: !1, error: "Failed to parse design file" });
|
|
6561
6645
|
}
|
|
@@ -6623,13 +6707,13 @@ class di {
|
|
|
6623
6707
|
return `design_${a}_${l}`;
|
|
6624
6708
|
}
|
|
6625
6709
|
updateDesignsList(o, a, l) {
|
|
6626
|
-
const s = this.getAllDesigns(),
|
|
6710
|
+
const s = this.getAllDesigns(), g = s.findIndex((n) => n.id === o), h = {
|
|
6627
6711
|
id: o,
|
|
6628
6712
|
name: a,
|
|
6629
6713
|
timestamp: l,
|
|
6630
6714
|
lastModified: l
|
|
6631
6715
|
};
|
|
6632
|
-
|
|
6716
|
+
g >= 0 ? s[g] = h : s.push(h), s.sort((n, c) => new Date(c.timestamp) - new Date(n.timestamp)), this.storage.setItem(this.DESIGNS_LIST_KEY, JSON.stringify(s));
|
|
6633
6717
|
}
|
|
6634
6718
|
validateDesignData(o) {
|
|
6635
6719
|
return o && o.id && o.name && o.canvasData && Array.isArray(o.canvasData.elements);
|
|
@@ -6679,45 +6763,45 @@ const fi = $e((f, o) => {
|
|
|
6679
6763
|
}
|
|
6680
6764
|
]
|
|
6681
6765
|
},
|
|
6682
|
-
initFile:
|
|
6683
|
-
} = f, [
|
|
6766
|
+
initFile: g
|
|
6767
|
+
} = f, [h, n] = N([]), [c, F] = N(null), [I, E] = N(!1), [m, B] = N(!1), [j, p] = N(!1), [v, X] = N({ x: 0, y: 0 }), [T, O] = N(null), [k, Z] = N(800), [W, xt] = N(600), [Q, ft] = N(1), [_, st] = N(s.colorSettings[0]), [M, nt] = N(!1), [tt, ct] = N(!0), [Y, P] = N(!0), [C, et] = N(s.sections[0]), [y, D] = N(!1), [L, H] = N({}), [G, it] = N([]), [J, q] = N(-1), [U] = N(new di("localStorage")), K = gt(null), kt = gt(null), pt = gt(null), wt = gt(null), Ot = gt(null), Bt = gt(new ci()), zt = gt(!1), [yt, ce] = N(null), lt = at(() => {
|
|
6684
6768
|
const e = {
|
|
6685
|
-
elements: JSON.parse(JSON.stringify(
|
|
6686
|
-
selectedElement:
|
|
6769
|
+
elements: JSON.parse(JSON.stringify(h)),
|
|
6770
|
+
selectedElement: c ? { ...c } : null,
|
|
6687
6771
|
timestamp: Date.now()
|
|
6688
|
-
}, t = G.slice(0,
|
|
6689
|
-
t.push(e), t.length > 50 ? t.shift() :
|
|
6690
|
-
}, [
|
|
6691
|
-
elements:
|
|
6692
|
-
canvasWidth:
|
|
6772
|
+
}, t = G.slice(0, J + 1);
|
|
6773
|
+
t.push(e), t.length > 50 ? t.shift() : q(J + 1), it(t);
|
|
6774
|
+
}, [h, c, G, J]), St = at(() => ({
|
|
6775
|
+
elements: h,
|
|
6776
|
+
canvasWidth: k,
|
|
6693
6777
|
canvasHeight: W,
|
|
6694
|
-
selectedColor:
|
|
6695
|
-
activeSection:
|
|
6778
|
+
selectedColor: _,
|
|
6779
|
+
activeSection: C,
|
|
6696
6780
|
product: s,
|
|
6697
6781
|
sectionDesigns: L,
|
|
6698
6782
|
zoomLevel: Q,
|
|
6699
6783
|
showGrid: M,
|
|
6700
|
-
snapToGrid:
|
|
6701
|
-
selectedElement:
|
|
6784
|
+
snapToGrid: Y,
|
|
6785
|
+
selectedElement: c ? { ...c } : null,
|
|
6702
6786
|
canvasRef: K
|
|
6703
6787
|
// Include reference for thumbnail generation
|
|
6704
|
-
}), [
|
|
6705
|
-
|
|
6788
|
+
}), [h, k, W, _, C, s, L, Q, M, Y, c]);
|
|
6789
|
+
rt(() => {
|
|
6706
6790
|
const t = setTimeout(async () => {
|
|
6707
|
-
if (
|
|
6708
|
-
if (
|
|
6791
|
+
if (h.length === 0 && G.length <= 1) {
|
|
6792
|
+
if (g)
|
|
6709
6793
|
try {
|
|
6710
|
-
const A = await fetch(
|
|
6794
|
+
const A = await fetch(g);
|
|
6711
6795
|
if (A.ok) {
|
|
6712
6796
|
const z = await A.text();
|
|
6713
6797
|
if (z.trim()) {
|
|
6714
6798
|
const $ = JSON.parse(z.trim());
|
|
6715
6799
|
if (console.log("Loading design from file:", $), ce($), $.sections && typeof $.sections == "object") {
|
|
6716
|
-
const dt = Object.keys($.sections)[0],
|
|
6717
|
-
if (
|
|
6718
|
-
n(
|
|
6719
|
-
const
|
|
6720
|
-
|
|
6800
|
+
const dt = Object.keys($.sections)[0], ot = $.sections[dt];
|
|
6801
|
+
if (ot && ot.elements) {
|
|
6802
|
+
n(ot.elements || []), Z(ot.canvasWidth || 800), xt(ot.canvasHeight || 600), st(ot.selectedColor || s.colorSettings[0]), ft(ot.zoomLevel || 1), nt(ot.showGrid || !1), P(ot.snapToGrid || !0), F(null), $.sections && H($.sections);
|
|
6803
|
+
const Rt = s.sections.find((Dt) => Dt.sectionName === dt);
|
|
6804
|
+
Rt && et(Rt), it([]), q(-1), setTimeout(() => {
|
|
6721
6805
|
lt();
|
|
6722
6806
|
}, 100);
|
|
6723
6807
|
return;
|
|
@@ -6729,20 +6813,20 @@ const fi = $e((f, o) => {
|
|
|
6729
6813
|
} catch (A) {
|
|
6730
6814
|
console.error("Error loading design file:", A), console.warn("Using default text instead");
|
|
6731
6815
|
}
|
|
6732
|
-
const r = 24,
|
|
6733
|
-
|
|
6734
|
-
const
|
|
6816
|
+
const r = 24, d = "Arial", x = "Change me", w = document.createElement("canvas").getContext("2d");
|
|
6817
|
+
w.font = `${r}px ${d}`;
|
|
6818
|
+
const b = w.measureText(x).width, R = {
|
|
6735
6819
|
id: ht(),
|
|
6736
6820
|
type: "text",
|
|
6737
|
-
x:
|
|
6821
|
+
x: k / 2 - b / 2,
|
|
6738
6822
|
// Center the actual text width
|
|
6739
6823
|
y: W / 2 - r / 2,
|
|
6740
6824
|
// Center based on font size
|
|
6741
|
-
width:
|
|
6825
|
+
width: b,
|
|
6742
6826
|
height: r,
|
|
6743
|
-
text:
|
|
6827
|
+
text: x,
|
|
6744
6828
|
fontSize: r,
|
|
6745
|
-
fontFamily:
|
|
6829
|
+
fontFamily: d,
|
|
6746
6830
|
fontWeight: "normal",
|
|
6747
6831
|
fontStyle: "normal",
|
|
6748
6832
|
textAlign: "left",
|
|
@@ -6753,29 +6837,30 @@ const fi = $e((f, o) => {
|
|
|
6753
6837
|
rotation: 0,
|
|
6754
6838
|
opacity: 1
|
|
6755
6839
|
};
|
|
6756
|
-
n([R]),
|
|
6840
|
+
n([R]), F(R), setTimeout(() => {
|
|
6757
6841
|
lt();
|
|
6758
6842
|
}, 100);
|
|
6759
6843
|
}
|
|
6760
6844
|
}, 300);
|
|
6761
6845
|
return () => clearTimeout(t);
|
|
6762
|
-
}, [
|
|
6763
|
-
const Wt =
|
|
6764
|
-
const r =
|
|
6765
|
-
return s.sections,
|
|
6766
|
-
{ [(
|
|
6846
|
+
}, [g, s.colorSettings, s.sections]);
|
|
6847
|
+
const Wt = at((e = "png", t = !0) => {
|
|
6848
|
+
const r = St();
|
|
6849
|
+
return s.sections, Bt.current.exportAllSections(
|
|
6850
|
+
{ [(C == null ? void 0 : C.sectionName) || "main"]: r },
|
|
6767
6851
|
[{
|
|
6768
|
-
id: (
|
|
6769
|
-
sectionName: (
|
|
6770
|
-
image:
|
|
6771
|
-
sectionImage:
|
|
6852
|
+
id: (C == null ? void 0 : C.sectionName) || "main",
|
|
6853
|
+
sectionName: (C == null ? void 0 : C.sectionName) || "main",
|
|
6854
|
+
image: C == null ? void 0 : C.sectionImage,
|
|
6855
|
+
sectionImage: C == null ? void 0 : C.sectionImage
|
|
6772
6856
|
}],
|
|
6773
|
-
|
|
6857
|
+
k,
|
|
6774
6858
|
W,
|
|
6775
6859
|
e,
|
|
6776
|
-
t
|
|
6860
|
+
t,
|
|
6861
|
+
yt
|
|
6777
6862
|
);
|
|
6778
|
-
}, [
|
|
6863
|
+
}, [St, s.sections, C, k, W]), de = [
|
|
6779
6864
|
"Arial",
|
|
6780
6865
|
"Helvetica",
|
|
6781
6866
|
"Times New Roman",
|
|
@@ -6791,18 +6876,18 @@ const fi = $e((f, o) => {
|
|
|
6791
6876
|
"Bookman",
|
|
6792
6877
|
"Avant Garde",
|
|
6793
6878
|
"Century Gothic"
|
|
6794
|
-
],
|
|
6795
|
-
|
|
6879
|
+
], It = 20;
|
|
6880
|
+
rt(() => {
|
|
6796
6881
|
const e = () => D(window.innerWidth < 768);
|
|
6797
6882
|
return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
|
|
6798
|
-
}, []),
|
|
6883
|
+
}, []), rt(() => {
|
|
6799
6884
|
const e = document.createElement("canvas");
|
|
6800
|
-
e.width =
|
|
6801
|
-
}, [
|
|
6885
|
+
e.width = k, e.height = W, Ot.current = e;
|
|
6886
|
+
}, [k, W]), rt(() => {
|
|
6802
6887
|
G.length === 0 && lt();
|
|
6803
6888
|
}, []);
|
|
6804
|
-
const At = (e, t, r,
|
|
6805
|
-
e.beginPath(), e.moveTo(t +
|
|
6889
|
+
const At = (e, t, r, d, x, u) => {
|
|
6890
|
+
e.beginPath(), e.moveTo(t + u, r), e.lineTo(t + d - u, r), e.quadraticCurveTo(t + d, r, t + d, r + u), e.lineTo(t + d, r + x - u), e.quadraticCurveTo(t + d, r + x, t + d - u, r + x), e.lineTo(t + u, r + x), e.quadraticCurveTo(t, r + x, t, r + x - u), e.lineTo(t, r + u), e.quadraticCurveTo(t, r, t + u, r), e.closePath();
|
|
6806
6891
|
}, Qt = (e, t) => {
|
|
6807
6892
|
if (!t.isIcon)
|
|
6808
6893
|
return {
|
|
@@ -6814,126 +6899,129 @@ const fi = $e((f, o) => {
|
|
|
6814
6899
|
cy: t.y + t.height / 2
|
|
6815
6900
|
};
|
|
6816
6901
|
e.save(), e.font = `${t.fontStyle || ""} ${t.fontWeight || ""} ${t.fontSize}px ${t.fontFamily}`, e.textBaseline = "alphabetic", e.textAlign = "left";
|
|
6817
|
-
const r = e.measureText(t.text),
|
|
6818
|
-
return e.restore(), { x: z, y: $, width:
|
|
6902
|
+
const r = e.measureText(t.text), d = r.actualBoundingBoxAscent ?? t.fontSize * 0.8, x = r.actualBoundingBoxDescent ?? t.fontSize * 0.2, u = r.actualBoundingBoxLeft ?? 0, w = r.actualBoundingBoxRight ?? r.width, S = u + w, b = d + x, R = t.x, A = t.y, z = R - S / 2 - u, $ = A - b / 2 - d;
|
|
6903
|
+
return e.restore(), { x: z, y: $, width: S, height: b, cx: R, cy: A };
|
|
6819
6904
|
}, fe = (e, t) => {
|
|
6820
6905
|
if (!t) return;
|
|
6821
|
-
const r = 8,
|
|
6822
|
-
x: -
|
|
6823
|
-
y: -
|
|
6824
|
-
w:
|
|
6825
|
-
h:
|
|
6906
|
+
const r = 8, d = 8, x = 4, u = 30, w = Qt(e, t), S = t.isIcon ? Math.max(r, 12) : r, b = {
|
|
6907
|
+
x: -w.width / 2 - S,
|
|
6908
|
+
y: -w.height / 2 - S,
|
|
6909
|
+
w: w.width + S * 2,
|
|
6910
|
+
h: w.height + S * 2
|
|
6826
6911
|
};
|
|
6827
|
-
e.save(), e.translate(
|
|
6912
|
+
e.save(), e.translate(w.cx, w.cy), t.rotation && e.rotate(t.rotation * Math.PI / 180);
|
|
6828
6913
|
const R = e.createLinearGradient(
|
|
6829
|
-
|
|
6830
|
-
|
|
6831
|
-
|
|
6832
|
-
|
|
6914
|
+
b.x,
|
|
6915
|
+
b.y,
|
|
6916
|
+
b.x + b.w,
|
|
6917
|
+
b.y + b.h
|
|
6833
6918
|
);
|
|
6834
6919
|
R.addColorStop(0, "#3b82f6"), R.addColorStop(0.5, "#1d4ed8"), R.addColorStop(1, "#3b82f6"), e.strokeStyle = "rgba(59,130,246,.3)", e.lineWidth = 3, At(
|
|
6835
6920
|
e,
|
|
6836
|
-
|
|
6837
|
-
|
|
6838
|
-
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
), e.stroke(), e.strokeStyle = R, e.lineWidth = 2, e.setLineDash([8, 4]), At(e,
|
|
6842
|
-
{ x:
|
|
6843
|
-
{ x:
|
|
6844
|
-
{ x:
|
|
6845
|
-
{ x:
|
|
6921
|
+
b.x - 1,
|
|
6922
|
+
b.y - 1,
|
|
6923
|
+
b.w + 2,
|
|
6924
|
+
b.h + 2,
|
|
6925
|
+
x + 1
|
|
6926
|
+
), e.stroke(), e.strokeStyle = R, e.lineWidth = 2, e.setLineDash([8, 4]), At(e, b.x, b.y, b.w, b.h, x), e.stroke(), e.lineDashOffset = -(Date.now() / 50) % 12, e.strokeStyle = "#ffffff", e.lineWidth = 1, e.setLineDash([4, 8]), At(e, b.x, b.y, b.w, b.h, x), e.stroke(), e.setLineDash([]), e.lineDashOffset = 0, [
|
|
6927
|
+
{ x: b.x, y: b.y },
|
|
6928
|
+
{ x: b.x + b.w, y: b.y },
|
|
6929
|
+
{ x: b.x + b.w, y: b.y + b.h },
|
|
6930
|
+
{ x: b.x, y: b.y + b.h }
|
|
6846
6931
|
].forEach(($) => {
|
|
6847
6932
|
e.fillStyle = "rgba(0,0,0,.2)", e.fillRect(
|
|
6848
|
-
$.x -
|
|
6849
|
-
$.y -
|
|
6850
|
-
|
|
6851
|
-
|
|
6933
|
+
$.x - d / 2 + 1,
|
|
6934
|
+
$.y - d / 2 + 1,
|
|
6935
|
+
d,
|
|
6936
|
+
d
|
|
6852
6937
|
), e.fillStyle = "#ffffff", e.fillRect(
|
|
6853
|
-
$.x -
|
|
6854
|
-
$.y -
|
|
6855
|
-
|
|
6856
|
-
|
|
6938
|
+
$.x - d / 2,
|
|
6939
|
+
$.y - d / 2,
|
|
6940
|
+
d,
|
|
6941
|
+
d
|
|
6857
6942
|
), e.strokeStyle = "#3b82f6", e.lineWidth = 1, e.strokeRect(
|
|
6858
|
-
$.x -
|
|
6859
|
-
$.y -
|
|
6860
|
-
|
|
6861
|
-
|
|
6943
|
+
$.x - d / 2,
|
|
6944
|
+
$.y - d / 2,
|
|
6945
|
+
d,
|
|
6946
|
+
d
|
|
6862
6947
|
);
|
|
6863
6948
|
});
|
|
6864
|
-
const A = 0, z =
|
|
6865
|
-
e.strokeStyle = "#3b82f6", e.lineWidth = 1, e.setLineDash([2, 2]), e.beginPath(), e.moveTo(A, z + 12), e.lineTo(A,
|
|
6949
|
+
const A = 0, z = b.y - u;
|
|
6950
|
+
e.strokeStyle = "#3b82f6", e.lineWidth = 1, e.setLineDash([2, 2]), e.beginPath(), e.moveTo(A, z + 12), e.lineTo(A, b.y), e.stroke(), e.setLineDash([]), e.beginPath(), e.arc(A, z, 12, 0, 2 * Math.PI), e.fillStyle = "#f59e0b", e.fill(), e.strokeStyle = "#ffffff", e.lineWidth = 2, e.stroke(), e.strokeStyle = "#ffffff", e.lineWidth = 2, e.beginPath(), e.arc(A, z, 6, -Math.PI / 2, Math.PI, !1), e.stroke(), e.beginPath(), e.moveTo(A - 6, z), e.lineTo(A - 3, z - 3), e.lineTo(A - 3, z + 3), e.closePath(), e.fillStyle = "#ffffff", e.fill(), e.restore();
|
|
6866
6951
|
}, he = (e, t) => {
|
|
6867
6952
|
if (!t) return [];
|
|
6868
|
-
const r = Qt(e, t),
|
|
6869
|
-
x: -r.width / 2 -
|
|
6870
|
-
y: -r.height / 2 -
|
|
6871
|
-
w: r.width +
|
|
6872
|
-
h: r.height +
|
|
6873
|
-
},
|
|
6874
|
-
{ x:
|
|
6875
|
-
{ x:
|
|
6876
|
-
{ x:
|
|
6877
|
-
{ x:
|
|
6878
|
-
{ x: 0, y:
|
|
6879
|
-
], R = Math.cos(
|
|
6880
|
-
return
|
|
6953
|
+
const r = Qt(e, t), d = t.isIcon ? Math.max(8, 12) : 8, x = 8, u = 30, w = (t.rotation || 0) * Math.PI / 180, S = {
|
|
6954
|
+
x: -r.width / 2 - d,
|
|
6955
|
+
y: -r.height / 2 - d,
|
|
6956
|
+
w: r.width + d * 2,
|
|
6957
|
+
h: r.height + d * 2
|
|
6958
|
+
}, b = [
|
|
6959
|
+
{ x: S.x, y: S.y, type: "nw-resize" },
|
|
6960
|
+
{ x: S.x + S.w, y: S.y, type: "ne-resize" },
|
|
6961
|
+
{ x: S.x + S.w, y: S.y + S.h, type: "se-resize" },
|
|
6962
|
+
{ x: S.x, y: S.y + S.h, type: "sw-resize" },
|
|
6963
|
+
{ x: 0, y: S.y - u, type: "rotate" }
|
|
6964
|
+
], R = Math.cos(w), A = Math.sin(w);
|
|
6965
|
+
return b.map((z) => ({
|
|
6881
6966
|
x: r.cx + (z.x * R - z.y * A),
|
|
6882
6967
|
y: r.cy + (z.x * A + z.y * R),
|
|
6883
6968
|
type: z.type,
|
|
6884
|
-
size: z.type === "rotate" ? 24 :
|
|
6969
|
+
size: z.type === "rotate" ? 24 : x
|
|
6885
6970
|
}));
|
|
6886
6971
|
}, $t = (e, t, r) => {
|
|
6887
6972
|
if (!r) return null;
|
|
6888
|
-
const
|
|
6889
|
-
if (!
|
|
6890
|
-
const
|
|
6891
|
-
for (const
|
|
6892
|
-
const
|
|
6893
|
-
if (Math.sqrt(
|
|
6894
|
-
return
|
|
6973
|
+
const d = K.current;
|
|
6974
|
+
if (!d) return null;
|
|
6975
|
+
const x = d.getContext("2d"), u = he(x, r);
|
|
6976
|
+
for (const w of u) {
|
|
6977
|
+
const S = e - w.x, b = t - w.y;
|
|
6978
|
+
if (Math.sqrt(S * S + b * b) <= w.size / 2)
|
|
6979
|
+
return w.type;
|
|
6895
6980
|
}
|
|
6896
6981
|
return null;
|
|
6897
|
-
},
|
|
6898
|
-
if (
|
|
6899
|
-
const e = G[
|
|
6900
|
-
n(e.elements),
|
|
6982
|
+
}, Ft = at(() => {
|
|
6983
|
+
if (J > 0) {
|
|
6984
|
+
const e = G[J - 1];
|
|
6985
|
+
n(e.elements), F(e.selectedElement), q(J - 1);
|
|
6901
6986
|
}
|
|
6902
|
-
}, [G,
|
|
6903
|
-
if (
|
|
6904
|
-
const e = G[
|
|
6905
|
-
n(e.elements),
|
|
6987
|
+
}, [G, J]), bt = at(() => {
|
|
6988
|
+
if (J < G.length - 1) {
|
|
6989
|
+
const e = G[J + 1];
|
|
6990
|
+
n(e.elements), F(e.selectedElement), q(J + 1);
|
|
6906
6991
|
}
|
|
6907
|
-
}, [G,
|
|
6908
|
-
|
|
6909
|
-
if (
|
|
6910
|
-
|
|
6992
|
+
}, [G, J]), ut = (e) => Y ? Math.round(e / It) * It : e;
|
|
6993
|
+
rt(() => {
|
|
6994
|
+
if (C != null && C.sectionImage) {
|
|
6995
|
+
pt.current = null, wt.current = null;
|
|
6911
6996
|
const e = K.current;
|
|
6912
|
-
e &&
|
|
6997
|
+
if (e && e.getContext("2d").clearRect(0, 0, k, W), g && !yt)
|
|
6998
|
+
return;
|
|
6913
6999
|
const t = new Image();
|
|
6914
7000
|
t.crossOrigin = "anonymous", t.onload = () => {
|
|
6915
|
-
|
|
7001
|
+
pt.current = t, Xt(t, _);
|
|
6916
7002
|
}, t.onerror = () => {
|
|
6917
|
-
console.error("Failed to load background image:",
|
|
6918
|
-
}
|
|
7003
|
+
console.error("Failed to load background image:", C.sectionImage), V();
|
|
7004
|
+
};
|
|
7005
|
+
let r = C.sectionImage;
|
|
7006
|
+
yt && yt.sectionImage && (C.sectionName === "Front" || yt.sections && Object.keys(yt.sections).includes(C.sectionName)) && (r = yt.sectionImage), t.src = r;
|
|
6919
7007
|
} else
|
|
6920
|
-
|
|
6921
|
-
}, [
|
|
7008
|
+
pt.current = null, wt.current = null, V();
|
|
7009
|
+
}, [C, _, yt]), rt(() => {
|
|
6922
7010
|
const e = (t) => {
|
|
6923
7011
|
const r = document.activeElement;
|
|
6924
7012
|
if (!(r && (r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.tagName === "SELECT" || r.isContentEditable))) {
|
|
6925
|
-
if ((t.key === "Delete" || t.key === "Backspace") &&
|
|
7013
|
+
if ((t.key === "Delete" || t.key === "Backspace") && c && !l) {
|
|
6926
7014
|
t.preventDefault();
|
|
6927
|
-
const
|
|
6928
|
-
n((
|
|
7015
|
+
const x = c;
|
|
7016
|
+
n((u) => u.filter((w) => w.id !== x.id)), F(null), lt();
|
|
6929
7017
|
}
|
|
6930
7018
|
if (t.ctrlKey || t.metaKey)
|
|
6931
7019
|
switch (t.key) {
|
|
6932
7020
|
case "z":
|
|
6933
|
-
t.shiftKey ? (t.preventDefault(),
|
|
7021
|
+
t.shiftKey ? (t.preventDefault(), bt()) : (t.preventDefault(), Ft());
|
|
6934
7022
|
break;
|
|
6935
7023
|
case "y":
|
|
6936
|
-
t.preventDefault(),
|
|
7024
|
+
t.preventDefault(), bt();
|
|
6937
7025
|
break;
|
|
6938
7026
|
}
|
|
6939
7027
|
}
|
|
@@ -6941,7 +7029,7 @@ const fi = $e((f, o) => {
|
|
|
6941
7029
|
return document.addEventListener("keydown", e), () => {
|
|
6942
7030
|
document.removeEventListener("keydown", e);
|
|
6943
7031
|
};
|
|
6944
|
-
}, [
|
|
7032
|
+
}, [c, l, Ft, bt, lt]);
|
|
6945
7033
|
const ge = (e) => {
|
|
6946
7034
|
const t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
|
|
6947
7035
|
return t ? {
|
|
@@ -6951,15 +7039,15 @@ const fi = $e((f, o) => {
|
|
|
6951
7039
|
} : null;
|
|
6952
7040
|
}, ht = () => `element_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, xe = (e) => {
|
|
6953
7041
|
e.strokeStyle = "#e0e0e0", e.lineWidth = 1, e.setLineDash([1, 1]);
|
|
6954
|
-
for (let t = 0; t <=
|
|
7042
|
+
for (let t = 0; t <= k; t += It)
|
|
6955
7043
|
e.beginPath(), e.moveTo(t, 0), e.lineTo(t, W), e.stroke();
|
|
6956
|
-
for (let t = 0; t <= W; t +=
|
|
6957
|
-
e.beginPath(), e.moveTo(0, t), e.lineTo(
|
|
7044
|
+
for (let t = 0; t <= W; t += It)
|
|
7045
|
+
e.beginPath(), e.moveTo(0, t), e.lineTo(k, t), e.stroke();
|
|
6958
7046
|
e.setLineDash([]);
|
|
6959
7047
|
}, ye = (e, t) => {
|
|
6960
7048
|
e.save();
|
|
6961
|
-
const r = t.x + t.width / 2,
|
|
6962
|
-
switch (e.translate(r,
|
|
7049
|
+
const r = t.x + t.width / 2, d = t.y + t.height / 2;
|
|
7050
|
+
switch (e.translate(r, d), t.rotation && e.rotate(t.rotation * Math.PI / 180), e.translate(-t.width / 2, -t.height / 2), t.type) {
|
|
6963
7051
|
case "text":
|
|
6964
7052
|
pe(e, t);
|
|
6965
7053
|
break;
|
|
@@ -6985,38 +7073,38 @@ const fi = $e((f, o) => {
|
|
|
6985
7073
|
Ce(e, t);
|
|
6986
7074
|
break;
|
|
6987
7075
|
case "pentagon":
|
|
6988
|
-
|
|
7076
|
+
je(e, t);
|
|
6989
7077
|
break;
|
|
6990
7078
|
case "heart":
|
|
6991
|
-
|
|
7079
|
+
Te(e, t);
|
|
6992
7080
|
break;
|
|
6993
7081
|
case "oval":
|
|
6994
7082
|
Ne(e, t);
|
|
6995
7083
|
break;
|
|
6996
7084
|
case "roundedRectangle":
|
|
6997
|
-
|
|
7085
|
+
Ie(e, t);
|
|
6998
7086
|
break;
|
|
6999
7087
|
case "image":
|
|
7000
7088
|
Re(e, t);
|
|
7001
7089
|
break;
|
|
7002
7090
|
case "qrcode":
|
|
7003
|
-
|
|
7091
|
+
ue(e, t);
|
|
7004
7092
|
break;
|
|
7005
7093
|
case "barcode":
|
|
7006
|
-
|
|
7094
|
+
me(e, t);
|
|
7007
7095
|
break;
|
|
7008
7096
|
case "sticker":
|
|
7009
7097
|
De(e, t);
|
|
7010
7098
|
break;
|
|
7011
7099
|
case "horizontalLine":
|
|
7012
|
-
|
|
7100
|
+
Ae(e, t);
|
|
7013
7101
|
break;
|
|
7014
7102
|
case "embroidery":
|
|
7015
7103
|
Ee(e, t);
|
|
7016
7104
|
break;
|
|
7017
7105
|
}
|
|
7018
7106
|
e.restore();
|
|
7019
|
-
},
|
|
7107
|
+
}, me = (e, t) => {
|
|
7020
7108
|
if (t.imageObject)
|
|
7021
7109
|
e.drawImage(t.imageObject, 0, 0, t.width, t.height);
|
|
7022
7110
|
else if (t.src && !t.imageLoading) {
|
|
@@ -7024,19 +7112,19 @@ const fi = $e((f, o) => {
|
|
|
7024
7112
|
const r = new Image();
|
|
7025
7113
|
r.onload = () => {
|
|
7026
7114
|
n(
|
|
7027
|
-
(
|
|
7028
|
-
(
|
|
7115
|
+
(d) => d.map(
|
|
7116
|
+
(x) => x.id === t.id ? { ...x, imageObject: r, imageLoading: !1 } : x
|
|
7029
7117
|
)
|
|
7030
7118
|
);
|
|
7031
7119
|
}, r.onerror = () => {
|
|
7032
7120
|
n(
|
|
7033
|
-
(
|
|
7034
|
-
(
|
|
7121
|
+
(d) => d.map(
|
|
7122
|
+
(x) => x.id === t.id ? { ...x, imageLoading: !1 } : x
|
|
7035
7123
|
)
|
|
7036
7124
|
);
|
|
7037
7125
|
}, r.src = t.src, e.fillStyle = "#f0f0f0", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ccc", e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#666", e.font = "12px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("Loading...", t.width / 2, t.height / 2);
|
|
7038
7126
|
} else t.imageLoading ? (e.fillStyle = "#f0f0f0", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ccc", e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#666", e.font = "12px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("Loading...", t.width / 2, t.height / 2)) : (e.fillStyle = "#f0f0f0", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ccc", e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#666", e.font = "12px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("No Barcode", t.width / 2, t.height / 2));
|
|
7039
|
-
},
|
|
7127
|
+
}, ue = (e, t) => {
|
|
7040
7128
|
if (t.imageObject)
|
|
7041
7129
|
e.drawImage(t.imageObject, 0, 0, t.width, t.height);
|
|
7042
7130
|
else if (t.src && !t.imageLoading) {
|
|
@@ -7044,14 +7132,14 @@ const fi = $e((f, o) => {
|
|
|
7044
7132
|
const r = new Image();
|
|
7045
7133
|
r.onload = () => {
|
|
7046
7134
|
n(
|
|
7047
|
-
(
|
|
7048
|
-
(
|
|
7135
|
+
(d) => d.map(
|
|
7136
|
+
(x) => x.id === t.id ? { ...x, imageObject: r, imageLoading: !1 } : x
|
|
7049
7137
|
)
|
|
7050
7138
|
);
|
|
7051
7139
|
}, r.onerror = () => {
|
|
7052
7140
|
n(
|
|
7053
|
-
(
|
|
7054
|
-
(
|
|
7141
|
+
(d) => d.map(
|
|
7142
|
+
(x) => x.id === t.id ? { ...x, imageLoading: !1 } : x
|
|
7055
7143
|
)
|
|
7056
7144
|
);
|
|
7057
7145
|
}, r.src = t.src, e.fillStyle = "#f0f0f0", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ccc", e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#666", e.font = "12px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("Loading QR...", t.width / 2, t.height / 2);
|
|
@@ -7068,43 +7156,43 @@ const fi = $e((f, o) => {
|
|
|
7068
7156
|
r = r.toLowerCase();
|
|
7069
7157
|
break;
|
|
7070
7158
|
case "capitalize":
|
|
7071
|
-
r = r.replace(/\b\w/g, (
|
|
7159
|
+
r = r.replace(/\b\w/g, (S) => S.toUpperCase());
|
|
7072
7160
|
break;
|
|
7073
7161
|
}
|
|
7074
7162
|
e.font = `${t.fontStyle || "normal"} ${t.fontWeight || "normal"} ${t.fontSize || 20}px ${t.fontFamily || "Arial"}`, e.fillStyle = t.fill || "#000000", e.textAlign = t.textAlign || "left", e.textBaseline = "top", t.opacity !== void 0 && (e.globalAlpha = t.opacity), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth);
|
|
7075
|
-
const
|
|
7076
|
-
`),
|
|
7163
|
+
const d = r.split(`
|
|
7164
|
+
`), x = (t.fontSize || 20) * (t.lineHeight || 1.2), u = Math.max(...d.map((S) => e.measureText(S).width)), w = d.length * x;
|
|
7077
7165
|
if (t.backgroundColor && t.backgroundColor !== "transparent") {
|
|
7078
7166
|
e.fillStyle = t.backgroundColor;
|
|
7079
|
-
const
|
|
7167
|
+
const S = t.backgroundPadding || 4;
|
|
7080
7168
|
e.fillRect(
|
|
7081
|
-
-
|
|
7082
|
-
-
|
|
7083
|
-
|
|
7084
|
-
|
|
7169
|
+
-S,
|
|
7170
|
+
-S,
|
|
7171
|
+
u + S * 2,
|
|
7172
|
+
w + S * 2
|
|
7085
7173
|
), e.fillStyle = t.fill || "#000000";
|
|
7086
7174
|
}
|
|
7087
|
-
|
|
7088
|
-
const R =
|
|
7089
|
-
t.stroke && t.strokeWidth > 0 && e.strokeText(
|
|
7175
|
+
d.forEach((S, b) => {
|
|
7176
|
+
const R = b * x, A = e.measureText(S).width;
|
|
7177
|
+
t.stroke && t.strokeWidth > 0 && e.strokeText(S, 0, R), e.fillText(S, 0, R);
|
|
7090
7178
|
const z = t.fontSize || 20, $ = t.decorationColor || t.fill || "#000000", dt = Math.max(1, z / 20);
|
|
7091
7179
|
if (e.strokeStyle = $, e.lineWidth = dt, t.textDecoration === "underline" || t.underline) {
|
|
7092
|
-
const
|
|
7093
|
-
e.beginPath(), e.moveTo(0,
|
|
7180
|
+
const ot = R + z + 2;
|
|
7181
|
+
e.beginPath(), e.moveTo(0, ot), e.lineTo(A, ot), e.stroke();
|
|
7094
7182
|
}
|
|
7095
7183
|
if (t.textDecoration === "overline" || t.overline) {
|
|
7096
|
-
const
|
|
7097
|
-
e.beginPath(), e.moveTo(0,
|
|
7184
|
+
const ot = R - 2;
|
|
7185
|
+
e.beginPath(), e.moveTo(0, ot), e.lineTo(A, ot), e.stroke();
|
|
7098
7186
|
}
|
|
7099
7187
|
if (t.textDecoration === "line-through" || t.strikethrough) {
|
|
7100
|
-
const
|
|
7101
|
-
e.beginPath(), e.moveTo(0,
|
|
7188
|
+
const ot = R + z / 2;
|
|
7189
|
+
e.beginPath(), e.moveTo(0, ot), e.lineTo(A, ot), e.stroke();
|
|
7102
7190
|
}
|
|
7103
|
-
typeof t.textDecoration == "string" && t.textDecoration.includes(" ") && t.textDecoration.split(" ").forEach((
|
|
7104
|
-
switch (
|
|
7191
|
+
typeof t.textDecoration == "string" && t.textDecoration.includes(" ") && t.textDecoration.split(" ").forEach((Rt) => {
|
|
7192
|
+
switch (Rt.trim()) {
|
|
7105
7193
|
case "underline":
|
|
7106
|
-
const
|
|
7107
|
-
e.beginPath(), e.moveTo(0,
|
|
7194
|
+
const Dt = R + z + 2;
|
|
7195
|
+
e.beginPath(), e.moveTo(0, Dt), e.lineTo(A, Dt), e.stroke();
|
|
7108
7196
|
break;
|
|
7109
7197
|
case "overline":
|
|
7110
7198
|
const te = R - 2;
|
|
@@ -7120,81 +7208,81 @@ const fi = $e((f, o) => {
|
|
|
7120
7208
|
}, we = (e, t) => {
|
|
7121
7209
|
t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fillRect(0, 0, t.width, t.height)), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.strokeRect(0, 0, t.width, t.height));
|
|
7122
7210
|
}, be = (e, t) => {
|
|
7123
|
-
const r = Math.min(t.width, t.height) / 2,
|
|
7124
|
-
e.beginPath(), e.arc(
|
|
7211
|
+
const r = Math.min(t.width, t.height) / 2, d = t.width / 2, x = t.height / 2;
|
|
7212
|
+
e.beginPath(), e.arc(d, x, r, 0, 2 * Math.PI), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7125
7213
|
}, ve = (e, t) => {
|
|
7126
7214
|
const r = t.width / 2;
|
|
7127
7215
|
t.height / 2, e.beginPath(), e.moveTo(r, 0), e.lineTo(0, t.height), e.lineTo(t.width, t.height), e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7128
7216
|
}, ke = (e, t) => {
|
|
7129
|
-
const r = t.width / 2,
|
|
7217
|
+
const r = t.width / 2, d = t.height / 2, x = Math.min(t.width, t.height) / 2, u = x * 0.4, w = t.numPoints || 5;
|
|
7130
7218
|
e.beginPath();
|
|
7131
|
-
for (let
|
|
7132
|
-
const
|
|
7133
|
-
|
|
7219
|
+
for (let S = 0; S < w * 2; S++) {
|
|
7220
|
+
const b = S % 2 === 0 ? x : u, R = S * Math.PI / w, A = r + Math.cos(R) * b, z = d + Math.sin(R) * b;
|
|
7221
|
+
S === 0 ? e.moveTo(A, z) : e.lineTo(A, z);
|
|
7134
7222
|
}
|
|
7135
7223
|
e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7136
7224
|
}, Se = (e, t) => {
|
|
7137
|
-
const r = t.width,
|
|
7138
|
-
e.beginPath(), e.moveTo(r / 2, 0), e.lineTo(r,
|
|
7225
|
+
const r = t.width, d = t.height, x = r * 0.3;
|
|
7226
|
+
e.beginPath(), e.moveTo(r / 2, 0), e.lineTo(r, d * 0.6), e.lineTo(r - x, d * 0.6), e.lineTo(r - x, d), e.lineTo(x, d), e.lineTo(x, d * 0.6), e.lineTo(0, d * 0.6), e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7139
7227
|
}, Fe = (e, t) => {
|
|
7140
|
-
const r = t.width / 2,
|
|
7141
|
-
e.beginPath(), e.moveTo(r, 0), e.lineTo(t.width,
|
|
7228
|
+
const r = t.width / 2, d = t.height / 2;
|
|
7229
|
+
e.beginPath(), e.moveTo(r, 0), e.lineTo(t.width, d), e.lineTo(r, t.height), e.lineTo(0, d), e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7142
7230
|
}, Ce = (e, t) => {
|
|
7143
|
-
const r = t.width / 2,
|
|
7231
|
+
const r = t.width / 2, d = t.height / 2, x = Math.min(t.width, t.height) / 2, u = 6;
|
|
7144
7232
|
e.beginPath();
|
|
7145
|
-
for (let
|
|
7146
|
-
const
|
|
7147
|
-
|
|
7233
|
+
for (let w = 0; w < u; w++) {
|
|
7234
|
+
const S = w * 2 * Math.PI / u - Math.PI / 2, b = r + x * Math.cos(S), R = d + x * Math.sin(S);
|
|
7235
|
+
w === 0 ? e.moveTo(b, R) : e.lineTo(b, R);
|
|
7148
7236
|
}
|
|
7149
7237
|
e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7150
|
-
},
|
|
7151
|
-
const r = t.width / 2,
|
|
7238
|
+
}, je = (e, t) => {
|
|
7239
|
+
const r = t.width / 2, d = t.height / 2, x = Math.min(t.width, t.height) / 2, u = 5;
|
|
7152
7240
|
e.beginPath();
|
|
7153
|
-
for (let
|
|
7154
|
-
const
|
|
7155
|
-
|
|
7241
|
+
for (let w = 0; w < u; w++) {
|
|
7242
|
+
const S = w * 2 * Math.PI / u - Math.PI / 2, b = r + x * Math.cos(S), R = d + x * Math.sin(S);
|
|
7243
|
+
w === 0 ? e.moveTo(b, R) : e.lineTo(b, R);
|
|
7156
7244
|
}
|
|
7157
7245
|
e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7158
|
-
},
|
|
7159
|
-
const r = t.width,
|
|
7246
|
+
}, Te = (e, t) => {
|
|
7247
|
+
const r = t.width, d = t.height, x = 0, u = 0;
|
|
7160
7248
|
e.beginPath();
|
|
7161
|
-
const
|
|
7162
|
-
e.moveTo(
|
|
7163
|
-
|
|
7164
|
-
|
|
7165
|
-
|
|
7166
|
-
|
|
7167
|
-
|
|
7168
|
-
|
|
7249
|
+
const w = d * 0.3;
|
|
7250
|
+
e.moveTo(x + r / 2, u + w), e.bezierCurveTo(
|
|
7251
|
+
x + r / 2,
|
|
7252
|
+
u,
|
|
7253
|
+
x,
|
|
7254
|
+
u,
|
|
7255
|
+
x,
|
|
7256
|
+
u + w
|
|
7169
7257
|
), e.bezierCurveTo(
|
|
7170
|
-
|
|
7171
|
-
|
|
7172
|
-
|
|
7173
|
-
|
|
7174
|
-
|
|
7175
|
-
|
|
7258
|
+
x,
|
|
7259
|
+
u + (d + w) / 2,
|
|
7260
|
+
x + r / 2,
|
|
7261
|
+
u + (d + w) / 2,
|
|
7262
|
+
x + r / 2,
|
|
7263
|
+
u + d
|
|
7176
7264
|
), e.bezierCurveTo(
|
|
7177
|
-
|
|
7178
|
-
|
|
7179
|
-
|
|
7180
|
-
|
|
7181
|
-
|
|
7182
|
-
|
|
7265
|
+
x + r / 2,
|
|
7266
|
+
u + (d + w) / 2,
|
|
7267
|
+
x + r,
|
|
7268
|
+
u + (d + w) / 2,
|
|
7269
|
+
x + r,
|
|
7270
|
+
u + w
|
|
7183
7271
|
), e.bezierCurveTo(
|
|
7184
|
-
|
|
7185
|
-
|
|
7186
|
-
|
|
7187
|
-
|
|
7188
|
-
|
|
7189
|
-
|
|
7272
|
+
x + r,
|
|
7273
|
+
u,
|
|
7274
|
+
x + r / 2,
|
|
7275
|
+
u,
|
|
7276
|
+
x + r / 2,
|
|
7277
|
+
u + w
|
|
7190
7278
|
), e.closePath(), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7191
7279
|
}, Ne = (e, t) => {
|
|
7192
|
-
const r = t.width / 2,
|
|
7193
|
-
e.beginPath(), e.ellipse(r,
|
|
7194
|
-
},
|
|
7280
|
+
const r = t.width / 2, d = t.height / 2, x = t.width / 2, u = t.height / 2;
|
|
7281
|
+
e.beginPath(), e.ellipse(r, d, x, u, 0, 0, 2 * Math.PI), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7282
|
+
}, Ie = (e, t) => {
|
|
7195
7283
|
const r = Math.min(t.width, t.height) * 0.1;
|
|
7196
7284
|
At(e, 0, 0, t.width, t.height, r), t.fill && t.fill !== "transparent" && (e.fillStyle = t.fill, e.fill()), t.stroke && t.strokeWidth > 0 && (e.strokeStyle = t.stroke, e.lineWidth = t.strokeWidth, e.stroke());
|
|
7197
|
-
},
|
|
7285
|
+
}, Ae = (e, t) => {
|
|
7198
7286
|
e.save(), t.opacity !== void 0 && (e.globalAlpha = t.opacity), e.strokeStyle = t.stroke || t.fill || "#000000", e.lineWidth = t.strokeWidth || t.height || 2, e.lineCap = "round", e.beginPath(), e.moveTo(0, t.height / 2), e.lineTo(t.width, t.height / 2), e.stroke(), e.restore();
|
|
7199
7287
|
}, Re = (e, t) => {
|
|
7200
7288
|
const r = t.src || t.imageData;
|
|
@@ -7220,8 +7308,8 @@ const fi = $e((f, o) => {
|
|
|
7220
7308
|
}
|
|
7221
7309
|
}
|
|
7222
7310
|
e.fillStyle = "#f0f0f0", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ccc", e.lineWidth = 1, e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#666", e.font = "14px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("Loading...", t.width / 2, t.height / 2);
|
|
7223
|
-
} catch (
|
|
7224
|
-
console.error("Error drawing image:",
|
|
7311
|
+
} catch (d) {
|
|
7312
|
+
console.error("Error drawing image:", d), e.fillStyle = "#ffebee", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#f44336", e.lineWidth = 2, e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#f44336", e.font = "14px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("Error loading image", t.width / 2, t.height / 2);
|
|
7225
7313
|
}
|
|
7226
7314
|
else
|
|
7227
7315
|
e.fillStyle = "#f8f8f8", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ddd", e.lineWidth = 1, e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#999", e.font = "14px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("No Image", t.width / 2, t.height / 2);
|
|
@@ -7240,7 +7328,7 @@ const fi = $e((f, o) => {
|
|
|
7240
7328
|
try {
|
|
7241
7329
|
e.drawImage(t.imageObject, 0, 0, t.width, t.height);
|
|
7242
7330
|
} catch (r) {
|
|
7243
|
-
console.error("Error drawing embroidery image:", r),
|
|
7331
|
+
console.error("Error drawing embroidery image:", r), Ct(e, t, "Error loading image");
|
|
7244
7332
|
}
|
|
7245
7333
|
else if (t.src && !t.imageLoading) {
|
|
7246
7334
|
t.imageLoading = !0;
|
|
@@ -7248,47 +7336,47 @@ const fi = $e((f, o) => {
|
|
|
7248
7336
|
r.crossOrigin = "anonymous", r.onload = () => {
|
|
7249
7337
|
r.complete && r.naturalHeight !== 0 ? (t.imageObject = r, t.imageLoading = !1, V()) : (t.imageLoading = !1, console.error("Image loaded but is invalid:", t.src));
|
|
7250
7338
|
}, r.onerror = () => {
|
|
7251
|
-
t.imageLoading = !1, console.error("Failed to load embroidery image:", t.src),
|
|
7252
|
-
}, r.src = t.src,
|
|
7253
|
-
} else t.imageLoading ?
|
|
7254
|
-
},
|
|
7339
|
+
t.imageLoading = !1, console.error("Failed to load embroidery image:", t.src), Ct(e, t, "Failed to load");
|
|
7340
|
+
}, r.src = t.src, Ct(e, t, "Loading...");
|
|
7341
|
+
} else t.imageLoading ? Ct(e, t, "Loading...") : Ct(e, t);
|
|
7342
|
+
}, Ct = (e, t, r = "Embroidery") => {
|
|
7255
7343
|
e.fillStyle = "#f9f9f9", e.fillRect(0, 0, t.width, t.height), e.strokeStyle = "#ddd", e.lineWidth = 2, e.strokeRect(0, 0, t.width, t.height), e.fillStyle = "#999", e.font = "24px Arial", e.textAlign = "center", e.textBaseline = "middle", e.fillText("🧵", t.width / 2, t.height / 2 - 10), e.fillStyle = "#666", e.font = "12px Arial", e.fillText(r, t.width / 2, t.height / 2 + 15);
|
|
7256
7344
|
}, Ht = (e, t, r) => {
|
|
7257
7345
|
if (!r) return !1;
|
|
7258
|
-
const
|
|
7346
|
+
const d = r.x + r.width / 2, x = r.y + r.height / 2, u = e - d, w = t - x, S = -(r.rotation || 0) * Math.PI / 180, b = Math.cos(S), R = Math.sin(S), A = u * b - w * R, z = u * R + w * b, $ = r.width / 2, dt = r.height / 2;
|
|
7259
7347
|
return A >= -$ && A <= $ && z >= -dt && z <= dt;
|
|
7260
|
-
}, Be =
|
|
7261
|
-
(
|
|
7348
|
+
}, Be = at(() => {
|
|
7349
|
+
(I || m || j) && lt(), E(!1), B(!1), p(!1), O(null);
|
|
7262
7350
|
const e = K.current;
|
|
7263
7351
|
e && (e.style.cursor = "default");
|
|
7264
|
-
}, [
|
|
7265
|
-
|
|
7352
|
+
}, [I, m, j, lt]);
|
|
7353
|
+
rt(() => {
|
|
7266
7354
|
const e = (t) => {
|
|
7267
7355
|
if (l) return;
|
|
7268
7356
|
const r = document.activeElement;
|
|
7269
|
-
if (!(r && (r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.tagName === "SELECT" || r.isContentEditable)) && ((t.ctrlKey || t.metaKey) && (t.key === "z" && !t.shiftKey ? (t.preventDefault(),
|
|
7357
|
+
if (!(r && (r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.tagName === "SELECT" || r.isContentEditable)) && ((t.ctrlKey || t.metaKey) && (t.key === "z" && !t.shiftKey ? (t.preventDefault(), Ft()) : (t.key === "z" && t.shiftKey || t.key === "y") && (t.preventDefault(), bt())), (t.key === "Delete" || t.key === "Backspace") && c && (Mt(c.id), t.preventDefault()), (t.ctrlKey || t.metaKey) && t.key === "d" && c && (_t(c.id), t.preventDefault()), c && ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(t.key))) {
|
|
7270
7358
|
t.preventDefault();
|
|
7271
|
-
const
|
|
7272
|
-
let
|
|
7359
|
+
const x = t.shiftKey ? 10 : 1;
|
|
7360
|
+
let u = {};
|
|
7273
7361
|
switch (t.key) {
|
|
7274
7362
|
case "ArrowUp":
|
|
7275
|
-
|
|
7363
|
+
u.y = c.y - x;
|
|
7276
7364
|
break;
|
|
7277
7365
|
case "ArrowDown":
|
|
7278
|
-
|
|
7366
|
+
u.y = c.y + x;
|
|
7279
7367
|
break;
|
|
7280
7368
|
case "ArrowLeft":
|
|
7281
|
-
|
|
7369
|
+
u.x = c.x - x;
|
|
7282
7370
|
break;
|
|
7283
7371
|
case "ArrowRight":
|
|
7284
|
-
|
|
7372
|
+
u.x = c.x + x;
|
|
7285
7373
|
break;
|
|
7286
7374
|
}
|
|
7287
|
-
Gt(
|
|
7375
|
+
Gt(c.id, u), lt();
|
|
7288
7376
|
}
|
|
7289
7377
|
};
|
|
7290
7378
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
7291
|
-
}, [
|
|
7379
|
+
}, [c, Ft, bt, l]);
|
|
7292
7380
|
const ze = (e, t = {}) => {
|
|
7293
7381
|
const r = {
|
|
7294
7382
|
id: ht(),
|
|
@@ -7314,16 +7402,16 @@ const fi = $e((f, o) => {
|
|
|
7314
7402
|
r.id = ht(), r.imageData = t.imageData || null, r.width = t.width || 200, r.height = t.height || 200;
|
|
7315
7403
|
break;
|
|
7316
7404
|
case "qrcode":
|
|
7317
|
-
r.id = ht(), r.type = "qrcode", r.x = (t == null ? void 0 : t.x) ||
|
|
7405
|
+
r.id = ht(), r.type = "qrcode", r.x = (t == null ? void 0 : t.x) || k / 2 - ((t == null ? void 0 : t.width) || 100) / 2, r.y = (t == null ? void 0 : t.y) || W / 2 - ((t == null ? void 0 : t.height) || 100) / 2, r.width = (t == null ? void 0 : t.width) || 100, r.height = (t == null ? void 0 : t.height) || 100, r.src = (t == null ? void 0 : t.src) || "", r.data = (t == null ? void 0 : t.data) || "", r.rotation = 0, r.opacity = 1;
|
|
7318
7406
|
break;
|
|
7319
7407
|
case "barcode":
|
|
7320
|
-
r.id = ht(), r.type = "barcode", r.x = (t == null ? void 0 : t.x) ||
|
|
7408
|
+
r.id = ht(), r.type = "barcode", r.x = (t == null ? void 0 : t.x) || k / 2 - ((t == null ? void 0 : t.width) || 200) / 2, r.y = (t == null ? void 0 : t.y) || W / 2 - ((t == null ? void 0 : t.height) || 100) / 2, r.width = (t == null ? void 0 : t.width) || 200, r.height = (t == null ? void 0 : t.height) || 100, r.src = (t == null ? void 0 : t.src) || "", r.data = (t == null ? void 0 : t.data) || "", r.format = (t == null ? void 0 : t.format) || "CODE128", r.rotation = 0, r.opacity = 1, r.imageObject = (t == null ? void 0 : t.imageObject) || null;
|
|
7321
7409
|
break;
|
|
7322
7410
|
case "sticker":
|
|
7323
7411
|
r.id = ht(), r.type = "sticker", r.imageData = (t == null ? void 0 : t.imageData) || null, r.width = t.width || 200, r.height = t.height || 200;
|
|
7324
7412
|
break;
|
|
7325
7413
|
case "horizontalLine":
|
|
7326
|
-
r.id = ht(), r.type = "horizontalLine", r.x =
|
|
7414
|
+
r.id = ht(), r.type = "horizontalLine", r.x = k / 2 - 100, r.y = W / 2 - 1, r.width = 200, r.height = 2, r.fill = "#000000", r.stroke = "#000000", r.strokeWidth = 2, r.rotation = 0, r.opacity = 1;
|
|
7327
7415
|
break;
|
|
7328
7416
|
case "embroidery":
|
|
7329
7417
|
r.id = ht(), r.type = "embroidery", r.imageData = (t == null ? void 0 : t.imageData) || null, r.width = t.width || 200, r.height = t.height || 200;
|
|
@@ -7344,15 +7432,15 @@ const fi = $e((f, o) => {
|
|
|
7344
7432
|
console.warn(`Unknown element type: ${e}`);
|
|
7345
7433
|
return;
|
|
7346
7434
|
}
|
|
7347
|
-
n((
|
|
7435
|
+
n((d) => [...d, r]), F(r), lt();
|
|
7348
7436
|
}, Gt = (e, t) => {
|
|
7349
7437
|
n((r) => r.map(
|
|
7350
|
-
(
|
|
7351
|
-
)),
|
|
7352
|
-
}, Mt =
|
|
7353
|
-
|
|
7354
|
-
}, [
|
|
7355
|
-
const t =
|
|
7438
|
+
(d) => d.id === e ? { ...d, ...t } : d
|
|
7439
|
+
)), c && c.id === e && F((r) => ({ ...r, ...t }));
|
|
7440
|
+
}, Mt = at(() => {
|
|
7441
|
+
c && (n((e) => e.filter((t) => t.id !== c.id)), F(null), lt());
|
|
7442
|
+
}, [c, lt]), _t = (e) => {
|
|
7443
|
+
const t = h.find((r) => r.id === e);
|
|
7356
7444
|
if (t) {
|
|
7357
7445
|
const r = {
|
|
7358
7446
|
...t,
|
|
@@ -7360,23 +7448,23 @@ const fi = $e((f, o) => {
|
|
|
7360
7448
|
x: t.x + 20,
|
|
7361
7449
|
y: t.y + 20
|
|
7362
7450
|
};
|
|
7363
|
-
n((
|
|
7451
|
+
n((d) => [...d, r]), F(r), lt();
|
|
7364
7452
|
}
|
|
7365
7453
|
}, Yt = (e, t) => {
|
|
7366
|
-
const r =
|
|
7454
|
+
const r = h.findIndex((u) => u.id === e);
|
|
7367
7455
|
if (r === -1) return;
|
|
7368
|
-
const
|
|
7369
|
-
t === "up" && r <
|
|
7456
|
+
const d = [...h], x = d[r];
|
|
7457
|
+
t === "up" && r < d.length - 1 ? (d[r] = d[r + 1], d[r + 1] = x) : t === "down" && r > 0 ? (d[r] = d[r - 1], d[r - 1] = x) : t === "top" ? (d.splice(r, 1), d.push(x)) : t === "bottom" && (d.splice(r, 1), d.unshift(x)), n(d), lt();
|
|
7370
7458
|
};
|
|
7371
|
-
|
|
7372
|
-
|
|
7459
|
+
at(() => {
|
|
7460
|
+
C && H((e) => ({
|
|
7373
7461
|
...e,
|
|
7374
|
-
[
|
|
7375
|
-
elements: [...
|
|
7376
|
-
selectedColor:
|
|
7462
|
+
[C.sectionName]: {
|
|
7463
|
+
elements: [...h],
|
|
7464
|
+
selectedColor: _
|
|
7377
7465
|
}
|
|
7378
7466
|
}));
|
|
7379
|
-
}, [
|
|
7467
|
+
}, [C, h, _]);
|
|
7380
7468
|
const [, We] = He((e) => e + 1, 0);
|
|
7381
7469
|
setTimeout(() => {
|
|
7382
7470
|
We();
|
|
@@ -7388,31 +7476,32 @@ const fi = $e((f, o) => {
|
|
|
7388
7476
|
// Access to the existing exportDesign method
|
|
7389
7477
|
exportDesign: Wt,
|
|
7390
7478
|
// Get canvas data for custom exports
|
|
7391
|
-
getCanvasData: () =>
|
|
7479
|
+
getCanvasData: () => St(),
|
|
7392
7480
|
// NEW: Export methods that return JSON with File objects
|
|
7393
7481
|
exportAllDesignsAsJSON: async (e = "png") => {
|
|
7394
7482
|
try {
|
|
7395
|
-
const t =
|
|
7483
|
+
const t = St();
|
|
7396
7484
|
console.log("canvas data to export: ", t);
|
|
7397
|
-
const r = {},
|
|
7398
|
-
r[
|
|
7485
|
+
const r = {}, d = (C == null ? void 0 : C.sectionName) || "main";
|
|
7486
|
+
r[d] = {
|
|
7399
7487
|
elements: t.elements,
|
|
7400
7488
|
selectedColor: t.selectedColor,
|
|
7401
7489
|
canvasWidth: t.canvasWidth,
|
|
7402
7490
|
canvasHeight: t.canvasHeight
|
|
7403
7491
|
}, t.sectionDesigns && typeof t.sectionDesigns == "object" && Object.assign(r, t.sectionDesigns);
|
|
7404
|
-
const
|
|
7405
|
-
id:
|
|
7406
|
-
sectionName:
|
|
7407
|
-
image:
|
|
7408
|
-
sectionImage:
|
|
7492
|
+
const x = s.sections && s.sections.length > 0 ? s.sections : [{
|
|
7493
|
+
id: d,
|
|
7494
|
+
sectionName: d,
|
|
7495
|
+
image: C == null ? void 0 : C.sectionImage,
|
|
7496
|
+
sectionImage: C == null ? void 0 : C.sectionImage
|
|
7409
7497
|
}];
|
|
7410
|
-
return await
|
|
7498
|
+
return await Bt.current.exportAllSectionsAsJSON(
|
|
7411
7499
|
r,
|
|
7412
|
-
|
|
7413
|
-
|
|
7500
|
+
x,
|
|
7501
|
+
k,
|
|
7414
7502
|
W,
|
|
7415
|
-
e
|
|
7503
|
+
e,
|
|
7504
|
+
yt
|
|
7416
7505
|
);
|
|
7417
7506
|
} catch (t) {
|
|
7418
7507
|
throw console.error("Export as JSON failed:", t), t;
|
|
@@ -7420,273 +7509,273 @@ const fi = $e((f, o) => {
|
|
|
7420
7509
|
},
|
|
7421
7510
|
exportCurrentSectionAsJSON: async (e = "png") => {
|
|
7422
7511
|
try {
|
|
7423
|
-
const t =
|
|
7424
|
-
return await
|
|
7512
|
+
const t = St();
|
|
7513
|
+
return await Bt.current.exportCurrentSectionAsJSON(t, e, yt);
|
|
7425
7514
|
} catch (t) {
|
|
7426
7515
|
throw console.error("Export current section as JSON failed:", t), t;
|
|
7427
7516
|
}
|
|
7428
7517
|
}
|
|
7429
7518
|
}));
|
|
7430
|
-
const
|
|
7519
|
+
const mt = gt(null), Lt = gt(!1), V = at(() => {
|
|
7431
7520
|
const e = K.current;
|
|
7432
7521
|
if (!e || Lt.current) return;
|
|
7433
7522
|
Lt.current = !0;
|
|
7434
7523
|
const t = e.getContext("2d");
|
|
7435
|
-
t.clearRect(0, 0,
|
|
7524
|
+
t.clearRect(0, 0, k, W), wt.current && t.drawImage(wt.current, 0, 0, k, W), M && xe(t), h.forEach((r) => {
|
|
7436
7525
|
t.save(), t.globalAlpha = r.opacity || 1, ye(t, r), t.restore();
|
|
7437
|
-
}),
|
|
7438
|
-
}, [
|
|
7439
|
-
|
|
7440
|
-
V(),
|
|
7526
|
+
}), c && fe(t, c), Lt.current = !1;
|
|
7527
|
+
}, [h, c, k, W, M]), vt = at(() => {
|
|
7528
|
+
mt.current && cancelAnimationFrame(mt.current), mt.current = requestAnimationFrame(() => {
|
|
7529
|
+
V(), mt.current = null;
|
|
7441
7530
|
});
|
|
7442
7531
|
}, [V]);
|
|
7443
|
-
|
|
7444
|
-
|
|
7445
|
-
}, [
|
|
7446
|
-
|
|
7447
|
-
}, [
|
|
7448
|
-
|
|
7532
|
+
rt(() => {
|
|
7533
|
+
vt();
|
|
7534
|
+
}, [h, c, k, W, M, vt]), rt(() => {
|
|
7535
|
+
wt.current && vt();
|
|
7536
|
+
}, [wt.current, vt]), rt(() => () => {
|
|
7537
|
+
mt.current && cancelAnimationFrame(mt.current);
|
|
7449
7538
|
}, []);
|
|
7450
|
-
const Pt =
|
|
7451
|
-
V(), (
|
|
7452
|
-
}, [V,
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
}, [
|
|
7456
|
-
const Me =
|
|
7539
|
+
const Pt = at(() => {
|
|
7540
|
+
V(), (I || m || j) && (mt.current = requestAnimationFrame(Pt));
|
|
7541
|
+
}, [V, I, m, j]);
|
|
7542
|
+
rt(() => {
|
|
7543
|
+
I || m || j ? Pt() : (mt.current && (cancelAnimationFrame(mt.current), mt.current = null), vt());
|
|
7544
|
+
}, [I, m, j, Pt, vt]);
|
|
7545
|
+
const Me = at((e) => {
|
|
7457
7546
|
if (l) return;
|
|
7458
|
-
const r = K.current.getBoundingClientRect(),
|
|
7459
|
-
if (
|
|
7460
|
-
const
|
|
7461
|
-
if (
|
|
7462
|
-
if (
|
|
7463
|
-
|
|
7464
|
-
const
|
|
7465
|
-
|
|
7466
|
-
x:
|
|
7467
|
-
y:
|
|
7547
|
+
const r = K.current.getBoundingClientRect(), d = (e.clientX - r.left) / Q, x = (e.clientY - r.top) / Q;
|
|
7548
|
+
if (X({ x: d, y: x }), c) {
|
|
7549
|
+
const w = $t(d, x, c);
|
|
7550
|
+
if (w) {
|
|
7551
|
+
if (w === "rotate") {
|
|
7552
|
+
p(!0);
|
|
7553
|
+
const S = c.x + c.width / 2, b = c.y + c.height / 2, R = Math.atan2(x - b, d - S) * 180 / Math.PI;
|
|
7554
|
+
X({
|
|
7555
|
+
x: d,
|
|
7556
|
+
y: x,
|
|
7468
7557
|
initialAngle: R,
|
|
7469
|
-
initialRotation:
|
|
7558
|
+
initialRotation: c.rotation || 0
|
|
7470
7559
|
});
|
|
7471
7560
|
} else
|
|
7472
|
-
|
|
7473
|
-
x:
|
|
7474
|
-
y:
|
|
7475
|
-
initialWidth:
|
|
7476
|
-
initialHeight:
|
|
7477
|
-
initialX:
|
|
7478
|
-
initialY:
|
|
7561
|
+
B(!0), O(w), X({
|
|
7562
|
+
x: d,
|
|
7563
|
+
y: x,
|
|
7564
|
+
initialWidth: c.width,
|
|
7565
|
+
initialHeight: c.height,
|
|
7566
|
+
initialX: c.x,
|
|
7567
|
+
initialY: c.y
|
|
7479
7568
|
});
|
|
7480
7569
|
return;
|
|
7481
7570
|
}
|
|
7482
7571
|
}
|
|
7483
|
-
let
|
|
7484
|
-
for (let
|
|
7485
|
-
if (Ht(
|
|
7486
|
-
|
|
7572
|
+
let u = null;
|
|
7573
|
+
for (let w = h.length - 1; w >= 0; w--)
|
|
7574
|
+
if (Ht(d, x, h[w])) {
|
|
7575
|
+
u = h[w];
|
|
7487
7576
|
break;
|
|
7488
7577
|
}
|
|
7489
|
-
|
|
7490
|
-
x:
|
|
7491
|
-
y:
|
|
7492
|
-
offsetX:
|
|
7493
|
-
offsetY:
|
|
7494
|
-
})) :
|
|
7495
|
-
}, [l, Q,
|
|
7578
|
+
u ? (F(u), E(!0), X({
|
|
7579
|
+
x: d,
|
|
7580
|
+
y: x,
|
|
7581
|
+
offsetX: d - u.x,
|
|
7582
|
+
offsetY: x - u.y
|
|
7583
|
+
})) : F(null), V();
|
|
7584
|
+
}, [l, Q, c, h, V]), Le = at((e) => {
|
|
7496
7585
|
if (l) return;
|
|
7497
|
-
const t = K.current, r = t.getBoundingClientRect(),
|
|
7498
|
-
if (
|
|
7499
|
-
const
|
|
7500
|
-
|
|
7586
|
+
const t = K.current, r = t.getBoundingClientRect(), d = (e.clientX - r.left) / Q, x = (e.clientY - r.top) / Q;
|
|
7587
|
+
if (c && !I && !m && !j) {
|
|
7588
|
+
const u = $t(d, x, c);
|
|
7589
|
+
u ? u === "rotate" ? t.style.cursor = "grab" : t.style.cursor = u : Ht(d, x, c) ? t.style.cursor = "move" : t.style.cursor = "default";
|
|
7501
7590
|
} else
|
|
7502
|
-
t.style.cursor =
|
|
7503
|
-
if (
|
|
7504
|
-
const
|
|
7505
|
-
let R =
|
|
7591
|
+
t.style.cursor = I ? "grabbing" : "default";
|
|
7592
|
+
if (j && c) {
|
|
7593
|
+
const u = c.x + c.width / 2, w = c.y + c.height / 2, b = Math.atan2(x - w, d - u) * 180 / Math.PI - v.initialAngle;
|
|
7594
|
+
let R = v.initialRotation + b;
|
|
7506
7595
|
e.shiftKey && (R = Math.round(R / 15) * 15), R = (R % 360 + 360) % 360, n(
|
|
7507
7596
|
(A) => A.map(
|
|
7508
|
-
(z) => z.id ===
|
|
7597
|
+
(z) => z.id === c.id ? { ...z, rotation: R } : z
|
|
7509
7598
|
)
|
|
7510
|
-
),
|
|
7599
|
+
), F((A) => ({ ...A, rotation: R })), V();
|
|
7511
7600
|
return;
|
|
7512
7601
|
}
|
|
7513
|
-
if (
|
|
7514
|
-
const
|
|
7515
|
-
let
|
|
7516
|
-
switch (
|
|
7602
|
+
if (m && c && T) {
|
|
7603
|
+
const u = d - v.x, w = x - v.y;
|
|
7604
|
+
let S = v.initialWidth, b = v.initialHeight, R = v.initialX, A = v.initialY;
|
|
7605
|
+
switch (T) {
|
|
7517
7606
|
case "se-resize":
|
|
7518
|
-
|
|
7607
|
+
S = Math.max(20, v.initialWidth + u), b = Math.max(20, v.initialHeight + w);
|
|
7519
7608
|
break;
|
|
7520
7609
|
case "sw-resize":
|
|
7521
|
-
|
|
7610
|
+
S = Math.max(20, v.initialWidth - u), b = Math.max(20, v.initialHeight + w), R = v.initialX + (v.initialWidth - S);
|
|
7522
7611
|
break;
|
|
7523
7612
|
case "ne-resize":
|
|
7524
|
-
|
|
7613
|
+
S = Math.max(20, v.initialWidth + u), b = Math.max(20, v.initialHeight - w), A = v.initialY + (v.initialHeight - b);
|
|
7525
7614
|
break;
|
|
7526
7615
|
case "nw-resize":
|
|
7527
|
-
|
|
7616
|
+
S = Math.max(20, v.initialWidth - u), b = Math.max(20, v.initialHeight - w), R = v.initialX + (v.initialWidth - S), A = v.initialY + (v.initialHeight - b);
|
|
7528
7617
|
break;
|
|
7529
7618
|
}
|
|
7530
|
-
if (e.shiftKey &&
|
|
7531
|
-
const $ =
|
|
7532
|
-
|
|
7619
|
+
if (e.shiftKey && c.type !== "text") {
|
|
7620
|
+
const $ = v.initialWidth / v.initialHeight;
|
|
7621
|
+
T.includes("e"), b = S / $, T.includes("n") && (A = v.initialY + (v.initialHeight - b));
|
|
7533
7622
|
}
|
|
7534
|
-
|
|
7623
|
+
Y && (R = ut(R), A = ut(A), S = ut(S), b = ut(b));
|
|
7535
7624
|
const z = {
|
|
7536
|
-
...
|
|
7625
|
+
...c,
|
|
7537
7626
|
x: R,
|
|
7538
7627
|
y: A,
|
|
7539
|
-
width:
|
|
7540
|
-
height:
|
|
7628
|
+
width: S,
|
|
7629
|
+
height: b
|
|
7541
7630
|
};
|
|
7542
7631
|
n(
|
|
7543
7632
|
($) => $.map(
|
|
7544
|
-
(dt) => dt.id ===
|
|
7633
|
+
(dt) => dt.id === c.id ? z : dt
|
|
7545
7634
|
)
|
|
7546
|
-
),
|
|
7635
|
+
), F(z), V();
|
|
7547
7636
|
return;
|
|
7548
7637
|
}
|
|
7549
|
-
if (
|
|
7550
|
-
let
|
|
7551
|
-
|
|
7552
|
-
const
|
|
7553
|
-
...
|
|
7554
|
-
x:
|
|
7555
|
-
y:
|
|
7638
|
+
if (I && c) {
|
|
7639
|
+
let u = d - v.offsetX, w = x - v.offsetY;
|
|
7640
|
+
Y && (u = ut(u), w = ut(w)), u = Math.max(0, Math.min(k - c.width, u)), w = Math.max(0, Math.min(W - c.height, w));
|
|
7641
|
+
const S = {
|
|
7642
|
+
...c,
|
|
7643
|
+
x: u,
|
|
7644
|
+
y: w
|
|
7556
7645
|
};
|
|
7557
7646
|
n(
|
|
7558
|
-
(
|
|
7559
|
-
(R) => R.id ===
|
|
7647
|
+
(b) => b.map(
|
|
7648
|
+
(R) => R.id === c.id ? S : R
|
|
7560
7649
|
)
|
|
7561
|
-
),
|
|
7650
|
+
), F(S), V();
|
|
7562
7651
|
}
|
|
7563
|
-
}, [l, Q,
|
|
7564
|
-
|
|
7652
|
+
}, [l, Q, c, I, m, j, T, v, Y, k, W, h, V]), qt = at((e) => {
|
|
7653
|
+
C && H((r) => ({
|
|
7565
7654
|
...r,
|
|
7566
|
-
[
|
|
7567
|
-
elements:
|
|
7568
|
-
...
|
|
7655
|
+
[C.sectionName]: {
|
|
7656
|
+
elements: h.map((d) => d.type === "image" ? {
|
|
7657
|
+
...d,
|
|
7569
7658
|
// Keep the image data reference
|
|
7570
|
-
imageData:
|
|
7571
|
-
src:
|
|
7572
|
-
} :
|
|
7573
|
-
selectedColor:
|
|
7659
|
+
imageData: d.imageData,
|
|
7660
|
+
src: d.src
|
|
7661
|
+
} : d),
|
|
7662
|
+
selectedColor: _
|
|
7574
7663
|
}
|
|
7575
7664
|
}));
|
|
7576
7665
|
const t = L[e.sectionName];
|
|
7577
7666
|
if (t) {
|
|
7578
|
-
const r = t.elements.map((
|
|
7579
|
-
if (
|
|
7580
|
-
const
|
|
7581
|
-
return
|
|
7667
|
+
const r = t.elements.map((d) => {
|
|
7668
|
+
if (d.type === "image" && d.src && !d.imageData) {
|
|
7669
|
+
const x = new Image();
|
|
7670
|
+
return x.onload = () => {
|
|
7582
7671
|
n(
|
|
7583
|
-
(
|
|
7584
|
-
(
|
|
7672
|
+
(u) => u.map(
|
|
7673
|
+
(w) => w.id === d.id ? { ...w, imageData: x } : w
|
|
7585
7674
|
)
|
|
7586
7675
|
), V();
|
|
7587
|
-
},
|
|
7676
|
+
}, x.src = d.src, { ...d, imageData: x };
|
|
7588
7677
|
}
|
|
7589
|
-
return
|
|
7678
|
+
return d;
|
|
7590
7679
|
});
|
|
7591
|
-
n(r),
|
|
7680
|
+
n(r), st(t.selectedColor || _);
|
|
7592
7681
|
} else
|
|
7593
7682
|
n([]);
|
|
7594
|
-
|
|
7595
|
-
}, [
|
|
7683
|
+
et(e), F(null);
|
|
7684
|
+
}, [C, h, _, L, V]), Pe = at((e) => {
|
|
7596
7685
|
if (e && e.type.startsWith("image/")) {
|
|
7597
7686
|
const t = new FileReader();
|
|
7598
7687
|
t.onload = (r) => {
|
|
7599
|
-
const
|
|
7600
|
-
|
|
7601
|
-
const
|
|
7688
|
+
const d = new Image();
|
|
7689
|
+
d.onload = () => {
|
|
7690
|
+
const x = {
|
|
7602
7691
|
id: ht(),
|
|
7603
7692
|
type: "image",
|
|
7604
|
-
x: ut(
|
|
7693
|
+
x: ut(k / 2 - 100),
|
|
7605
7694
|
y: ut(W / 2 - 100),
|
|
7606
|
-
width: Math.min(
|
|
7695
|
+
width: Math.min(d.width, 200),
|
|
7607
7696
|
// Limit initial size
|
|
7608
|
-
height: Math.min(
|
|
7697
|
+
height: Math.min(d.height, 200),
|
|
7609
7698
|
rotation: 0,
|
|
7610
|
-
imageData:
|
|
7699
|
+
imageData: d,
|
|
7611
7700
|
src: r.target.result,
|
|
7612
|
-
originalWidth:
|
|
7613
|
-
originalHeight:
|
|
7614
|
-
},
|
|
7615
|
-
|
|
7616
|
-
},
|
|
7701
|
+
originalWidth: d.width,
|
|
7702
|
+
originalHeight: d.height
|
|
7703
|
+
}, u = d.width / d.height;
|
|
7704
|
+
x.width / x.height !== u && (x.width / u <= 200 ? x.height = x.width / u : x.width = x.height * u), n((w) => [...w, x]), F(x), lt();
|
|
7705
|
+
}, d.onerror = () => {
|
|
7617
7706
|
console.error("Failed to load uploaded image"), alert("Failed to load the uploaded image. Please try again.");
|
|
7618
|
-
},
|
|
7707
|
+
}, d.src = r.target.result;
|
|
7619
7708
|
}, t.onerror = () => {
|
|
7620
7709
|
console.error("Failed to read file"), alert("Failed to read the file. Please try again.");
|
|
7621
7710
|
}, t.readAsDataURL(e);
|
|
7622
7711
|
} else
|
|
7623
7712
|
alert("Please select a valid image file.");
|
|
7624
|
-
}, [
|
|
7713
|
+
}, [k, W, ut, ht, lt]), Vt = at(
|
|
7625
7714
|
Ue(() => {
|
|
7626
7715
|
V();
|
|
7627
7716
|
}, 16),
|
|
7628
7717
|
// 60fps limit
|
|
7629
7718
|
[V]
|
|
7630
7719
|
);
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
}, [
|
|
7720
|
+
rt(() => {
|
|
7721
|
+
zt.current || Vt();
|
|
7722
|
+
}, [h, c, M, Vt]);
|
|
7634
7723
|
function Ue(e, t) {
|
|
7635
7724
|
let r;
|
|
7636
|
-
return function(...
|
|
7637
|
-
const
|
|
7638
|
-
clearTimeout(r), e(...
|
|
7725
|
+
return function(...x) {
|
|
7726
|
+
const u = () => {
|
|
7727
|
+
clearTimeout(r), e(...x);
|
|
7639
7728
|
};
|
|
7640
|
-
clearTimeout(r), r = setTimeout(
|
|
7729
|
+
clearTimeout(r), r = setTimeout(u, t);
|
|
7641
7730
|
};
|
|
7642
7731
|
}
|
|
7643
|
-
|
|
7644
|
-
|
|
7645
|
-
}, [
|
|
7732
|
+
rt(() => {
|
|
7733
|
+
pt.current && Xt(pt.current, _);
|
|
7734
|
+
}, [_]), rt(() => {
|
|
7646
7735
|
V();
|
|
7647
7736
|
}, [V]);
|
|
7648
|
-
const Oe = (e, t, r) => (0.2126 * e + 0.7152 * t + 0.0722 * r) / 255, Xt =
|
|
7649
|
-
const r = Ot.current,
|
|
7650
|
-
r.width =
|
|
7651
|
-
const
|
|
7652
|
-
if (!
|
|
7653
|
-
|
|
7737
|
+
const Oe = (e, t, r) => (0.2126 * e + 0.7152 * t + 0.0722 * r) / 255, Xt = at((e, t) => {
|
|
7738
|
+
const r = Ot.current, d = r.getContext("2d");
|
|
7739
|
+
r.width = k, r.height = W, d.clearRect(0, 0, k, W), d.drawImage(e, 0, 0, k, W);
|
|
7740
|
+
const x = d.getImageData(0, 0, k, W), u = x.data, w = ge(t);
|
|
7741
|
+
if (!w) {
|
|
7742
|
+
zt.current = !1;
|
|
7654
7743
|
return;
|
|
7655
7744
|
}
|
|
7656
|
-
const { r:
|
|
7657
|
-
for (let z = 0; z <
|
|
7658
|
-
if (
|
|
7659
|
-
const dt = Oe(
|
|
7660
|
-
|
|
7745
|
+
const { r: S, g: b, b: R } = w;
|
|
7746
|
+
for (let z = 0; z < u.length; z += 4) {
|
|
7747
|
+
if (u[z + 3] === 0) continue;
|
|
7748
|
+
const dt = Oe(u[z], u[z + 1], u[z + 2]);
|
|
7749
|
+
u[z] = Math.round(S * dt), u[z + 1] = Math.round(b * dt), u[z + 2] = Math.round(R * dt);
|
|
7661
7750
|
}
|
|
7662
|
-
|
|
7751
|
+
d.putImageData(x, 0, 0);
|
|
7663
7752
|
const A = new Image();
|
|
7664
7753
|
A.onload = () => {
|
|
7665
|
-
|
|
7754
|
+
wt.current = s.plainColor === "Y" ? A : e, zt.current = !1, V();
|
|
7666
7755
|
}, A.src = r.toDataURL("image/png");
|
|
7667
|
-
}, [
|
|
7668
|
-
if (!
|
|
7756
|
+
}, [k, W, V]), Jt = (e) => {
|
|
7757
|
+
if (!tt) return { horizontal: [], vertical: [] };
|
|
7669
7758
|
const t = document.querySelector(".ruler-horizontal"), r = document.querySelector(".ruler-vertical");
|
|
7670
7759
|
if (!t || !r)
|
|
7671
7760
|
return { horizontal: [], vertical: [] };
|
|
7672
|
-
const
|
|
7673
|
-
for (let A =
|
|
7674
|
-
A <=
|
|
7761
|
+
const d = t.getBoundingClientRect(), x = r.getBoundingClientRect(), u = d.width, w = x.height, S = 50, b = [], R = [];
|
|
7762
|
+
for (let A = S; A <= u; A += S)
|
|
7763
|
+
A <= u - 20 && b.push({
|
|
7675
7764
|
position: A,
|
|
7676
7765
|
value: Math.round(A / e)
|
|
7677
7766
|
});
|
|
7678
|
-
for (let A =
|
|
7679
|
-
A <=
|
|
7767
|
+
for (let A = S; A <= w; A += S)
|
|
7768
|
+
A <= w - 15 && R.push({
|
|
7680
7769
|
position: A,
|
|
7681
7770
|
value: Math.round(A / e)
|
|
7682
7771
|
});
|
|
7683
|
-
return { horizontal:
|
|
7772
|
+
return { horizontal: b, vertical: R };
|
|
7684
7773
|
}, [Kt, Zt] = N({ horizontal: [], vertical: [] });
|
|
7685
|
-
return
|
|
7774
|
+
return rt(() => {
|
|
7686
7775
|
const e = () => {
|
|
7687
7776
|
setTimeout(() => {
|
|
7688
|
-
const
|
|
7689
|
-
Zt(
|
|
7777
|
+
const d = Jt(Q);
|
|
7778
|
+
Zt(d);
|
|
7690
7779
|
}, 50);
|
|
7691
7780
|
};
|
|
7692
7781
|
e();
|
|
@@ -7697,33 +7786,33 @@ const fi = $e((f, o) => {
|
|
|
7697
7786
|
return window.addEventListener("resize", r), () => {
|
|
7698
7787
|
window.removeEventListener("resize", r), clearTimeout(t);
|
|
7699
7788
|
};
|
|
7700
|
-
}, [Q,
|
|
7701
|
-
if (
|
|
7789
|
+
}, [Q, tt]), rt(() => {
|
|
7790
|
+
if (tt && !y) {
|
|
7702
7791
|
const e = setTimeout(() => {
|
|
7703
7792
|
const t = Jt(Q);
|
|
7704
7793
|
Zt(t);
|
|
7705
7794
|
}, 100);
|
|
7706
7795
|
return () => clearTimeout(e);
|
|
7707
7796
|
}
|
|
7708
|
-
}, [
|
|
7797
|
+
}, [tt, y, Q]), /* @__PURE__ */ i.jsxs("div", { className: "pure-canvas-designer", children: [
|
|
7709
7798
|
/* @__PURE__ */ i.jsx("div", { className: "designer-header", children: /* @__PURE__ */ i.jsx(
|
|
7710
7799
|
si,
|
|
7711
7800
|
{
|
|
7712
7801
|
onAddElement: ze,
|
|
7713
|
-
onDeleteElement: () =>
|
|
7714
|
-
onDuplicateElement: () =>
|
|
7715
|
-
onUndo:
|
|
7716
|
-
onRedo:
|
|
7802
|
+
onDeleteElement: () => c && Mt(c.id),
|
|
7803
|
+
onDuplicateElement: () => c && _t(c.id),
|
|
7804
|
+
onUndo: Ft,
|
|
7805
|
+
onRedo: bt,
|
|
7717
7806
|
onToggleGrid: () => nt(!M),
|
|
7718
|
-
onToggleRulers: () => ct(!
|
|
7719
|
-
onToggleSnap: () => P(!
|
|
7807
|
+
onToggleRulers: () => ct(!tt),
|
|
7808
|
+
onToggleSnap: () => P(!Y),
|
|
7720
7809
|
onImageUpload: Pe,
|
|
7721
|
-
canUndo:
|
|
7722
|
-
canRedo:
|
|
7810
|
+
canUndo: J > 0,
|
|
7811
|
+
canRedo: J < G.length - 1,
|
|
7723
7812
|
showGrid: M,
|
|
7724
|
-
showRulers:
|
|
7725
|
-
snapToGrid:
|
|
7726
|
-
selectedElement:
|
|
7813
|
+
showRulers: tt,
|
|
7814
|
+
snapToGrid: Y,
|
|
7815
|
+
selectedElement: c,
|
|
7727
7816
|
theme: a,
|
|
7728
7817
|
readOnly: l,
|
|
7729
7818
|
apiKey: f.apiKey,
|
|
@@ -7731,7 +7820,7 @@ const fi = $e((f, o) => {
|
|
|
7731
7820
|
}
|
|
7732
7821
|
) }),
|
|
7733
7822
|
/* @__PURE__ */ i.jsxs("div", { className: "designer-content", children: [
|
|
7734
|
-
|
|
7823
|
+
tt && !y && /* @__PURE__ */ i.jsxs("div", { className: "rulers", children: [
|
|
7735
7824
|
/* @__PURE__ */ i.jsx("div", { className: "ruler-horizontal", children: /* @__PURE__ */ i.jsx("div", { className: "ruler-horizontal-numbers", children: Kt.horizontal.map((e, t) => /* @__PURE__ */ i.jsx(
|
|
7736
7825
|
"span",
|
|
7737
7826
|
{
|
|
@@ -7751,18 +7840,18 @@ const fi = $e((f, o) => {
|
|
|
7751
7840
|
t
|
|
7752
7841
|
)) }) })
|
|
7753
7842
|
] }),
|
|
7754
|
-
/* @__PURE__ */ i.jsx("div", { className: "canvas-container", ref:
|
|
7843
|
+
/* @__PURE__ */ i.jsx("div", { className: "canvas-container", ref: kt, children: /* @__PURE__ */ i.jsx(
|
|
7755
7844
|
"canvas",
|
|
7756
7845
|
{
|
|
7757
7846
|
ref: K,
|
|
7758
|
-
width:
|
|
7847
|
+
width: k,
|
|
7759
7848
|
height: W,
|
|
7760
7849
|
onMouseDown: Me,
|
|
7761
7850
|
onMouseMove: Le,
|
|
7762
7851
|
onMouseUp: Be,
|
|
7763
7852
|
style: {
|
|
7764
7853
|
border: "1px solid #e2e8f0",
|
|
7765
|
-
cursor:
|
|
7854
|
+
cursor: I ? "grabbing" : "default",
|
|
7766
7855
|
transform: `scale(${Q})`,
|
|
7767
7856
|
transformOrigin: "top left"
|
|
7768
7857
|
}
|
|
@@ -7772,7 +7861,7 @@ const fi = $e((f, o) => {
|
|
|
7772
7861
|
/* @__PURE__ */ i.jsx(
|
|
7773
7862
|
li,
|
|
7774
7863
|
{
|
|
7775
|
-
selectedElement:
|
|
7864
|
+
selectedElement: c,
|
|
7776
7865
|
onUpdate: Gt,
|
|
7777
7866
|
onMoveLayer: Yt,
|
|
7778
7867
|
availableFonts: de,
|
|
@@ -7782,9 +7871,9 @@ const fi = $e((f, o) => {
|
|
|
7782
7871
|
/* @__PURE__ */ i.jsx(
|
|
7783
7872
|
ni,
|
|
7784
7873
|
{
|
|
7785
|
-
elements:
|
|
7786
|
-
selectedElement:
|
|
7787
|
-
onSelectElement:
|
|
7874
|
+
elements: h,
|
|
7875
|
+
selectedElement: c,
|
|
7876
|
+
onSelectElement: F,
|
|
7788
7877
|
onMoveLayer: Yt,
|
|
7789
7878
|
onDeleteElement: Mt,
|
|
7790
7879
|
theme: a
|
|
@@ -7803,11 +7892,11 @@ const fi = $e((f, o) => {
|
|
|
7803
7892
|
return /* @__PURE__ */ i.jsxs(
|
|
7804
7893
|
"div",
|
|
7805
7894
|
{
|
|
7806
|
-
className: `section-thumbnail compact ${
|
|
7895
|
+
className: `section-thumbnail compact ${C.sectionName === e.sectionName ? "active" : ""}`,
|
|
7807
7896
|
onClick: (r) => {
|
|
7808
7897
|
r.stopPropagation();
|
|
7809
|
-
const
|
|
7810
|
-
qt(
|
|
7898
|
+
const d = s.sections.find((x) => x.sectionName === e.sectionName);
|
|
7899
|
+
qt(d);
|
|
7811
7900
|
},
|
|
7812
7901
|
title: e.sectionName,
|
|
7813
7902
|
children: [
|
|
@@ -7839,9 +7928,9 @@ const fi = $e((f, o) => {
|
|
|
7839
7928
|
s.colorSettings.slice(0, 3).map((e, t) => /* @__PURE__ */ i.jsxs(
|
|
7840
7929
|
"div",
|
|
7841
7930
|
{
|
|
7842
|
-
className: `color-swatch-enhanced compact ${
|
|
7931
|
+
className: `color-swatch-enhanced compact ${_ === e ? "active" : ""}`,
|
|
7843
7932
|
onClick: (r) => {
|
|
7844
|
-
r.stopPropagation(),
|
|
7933
|
+
r.stopPropagation(), st(e);
|
|
7845
7934
|
},
|
|
7846
7935
|
title: `Change product to ${e}`,
|
|
7847
7936
|
children: [
|
|
@@ -7852,7 +7941,7 @@ const fi = $e((f, o) => {
|
|
|
7852
7941
|
style: { backgroundColor: e }
|
|
7853
7942
|
}
|
|
7854
7943
|
),
|
|
7855
|
-
|
|
7944
|
+
_ === e && /* @__PURE__ */ i.jsx("div", { className: "color-selection-ring compact" })
|
|
7856
7945
|
]
|
|
7857
7946
|
},
|
|
7858
7947
|
e
|
|
@@ -7878,9 +7967,9 @@ const fi = $e((f, o) => {
|
|
|
7878
7967
|
/* @__PURE__ */ i.jsx("div", { className: "color-dropdown-menu", style: { display: "none" }, children: s.colorSettings.slice(3).map((e, t) => /* @__PURE__ */ i.jsxs(
|
|
7879
7968
|
"div",
|
|
7880
7969
|
{
|
|
7881
|
-
className: `color-swatch-dropdown ${
|
|
7970
|
+
className: `color-swatch-dropdown ${_ === e ? "active" : ""}`,
|
|
7882
7971
|
onClick: (r) => {
|
|
7883
|
-
r.stopPropagation(),
|
|
7972
|
+
r.stopPropagation(), st(e), r.currentTarget.parentElement.style.display = "none";
|
|
7884
7973
|
},
|
|
7885
7974
|
title: `Change product to ${e}`,
|
|
7886
7975
|
children: [
|