@superdoc-dev/template-builder 0.1.0 → 0.2.0-next.12

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.mjs CHANGED
@@ -1,358 +1,57 @@
1
- import Oe, { useState as z, useEffect as de, useMemo as he, useCallback as _, forwardRef as Ae, useRef as Z, useImperativeHandle as Pe } from "react";
2
- var ce = { exports: {} }, se = {};
3
- /**
4
- * @license React
5
- * react-jsx-runtime.production.js
6
- *
7
- * Copyright (c) Meta Platforms, Inc. and affiliates.
8
- *
9
- * This source code is licensed under the MIT license found in the
10
- * LICENSE file in the root directory of this source tree.
11
- */
12
- var ye;
13
- function Ie() {
14
- if (ye) return se;
15
- ye = 1;
16
- var l = Symbol.for("react.transitional.element"), b = Symbol.for("react.fragment");
17
- function m(c, o, a) {
18
- var F = null;
19
- if (a !== void 0 && (F = "" + a), o.key !== void 0 && (F = "" + o.key), "key" in o) {
20
- a = {};
21
- for (var I in o)
22
- I !== "key" && (a[I] = o[I]);
23
- } else a = o;
24
- return o = a.ref, {
25
- $$typeof: l,
26
- type: c,
27
- key: F,
28
- ref: o !== void 0 ? o : null,
29
- props: a
30
- };
31
- }
32
- return se.Fragment = b, se.jsx = m, se.jsxs = m, se;
33
- }
34
- var ae = {};
35
- /**
36
- * @license React
37
- * react-jsx-runtime.development.js
38
- *
39
- * Copyright (c) Meta Platforms, Inc. and affiliates.
40
- *
41
- * This source code is licensed under the MIT license found in the
42
- * LICENSE file in the root directory of this source tree.
43
- */
44
- var ve;
45
- function De() {
46
- return ve || (ve = 1, process.env.NODE_ENV !== "production" && (function() {
47
- function l(e) {
48
- if (e == null) return null;
49
- if (typeof e == "function")
50
- return e.$$typeof === ue ? null : e.displayName || e.name || null;
51
- if (typeof e == "string") return e;
52
- switch (e) {
53
- case O:
54
- return "Fragment";
55
- case v:
56
- return "Profiler";
57
- case K:
58
- return "StrictMode";
59
- case x:
60
- return "Suspense";
61
- case E:
62
- return "SuspenseList";
63
- case M:
64
- return "Activity";
65
- }
66
- if (typeof e == "object")
67
- switch (typeof e.tag == "number" && console.error(
68
- "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
69
- ), e.$$typeof) {
70
- case J:
71
- return "Portal";
72
- case P:
73
- return e.displayName || "Context";
74
- case V:
75
- return (e._context.displayName || "Context") + ".Consumer";
76
- case i:
77
- var s = e.render;
78
- return e = e.displayName, e || (e = s.displayName || s.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
79
- case j:
80
- return s = e.displayName || null, s !== null ? s : l(e.type) || "Memo";
81
- case k:
82
- s = e._payload, e = e._init;
83
- try {
84
- return l(e(s));
85
- } catch {
86
- }
87
- }
88
- return null;
89
- }
90
- function b(e) {
91
- return "" + e;
92
- }
93
- function m(e) {
94
- try {
95
- b(e);
96
- var s = !1;
97
- } catch {
98
- s = !0;
99
- }
100
- if (s) {
101
- s = console;
102
- var f = s.error, d = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
103
- return f.call(
104
- s,
105
- "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
106
- d
107
- ), b(e);
108
- }
109
- }
110
- function c(e) {
111
- if (e === O) return "<>";
112
- if (typeof e == "object" && e !== null && e.$$typeof === k)
113
- return "<...>";
114
- try {
115
- var s = l(e);
116
- return s ? "<" + s + ">" : "<...>";
117
- } catch {
118
- return "<...>";
119
- }
120
- }
121
- function o() {
122
- var e = ee.A;
123
- return e === null ? null : e.getOwner();
124
- }
125
- function a() {
126
- return Error("react-stack-top-frame");
127
- }
128
- function F(e) {
129
- if (ie.call(e, "key")) {
130
- var s = Object.getOwnPropertyDescriptor(e, "key").get;
131
- if (s && s.isReactWarning) return !1;
132
- }
133
- return e.key !== void 0;
134
- }
135
- function I(e, s) {
136
- function f() {
137
- L || (L = !0, console.error(
138
- "%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)",
139
- s
140
- ));
141
- }
142
- f.isReactWarning = !0, Object.defineProperty(e, "key", {
143
- get: f,
144
- configurable: !0
145
- });
146
- }
147
- function H() {
148
- var e = l(this.type);
149
- return re[e] || (re[e] = !0, console.error(
150
- "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."
151
- )), e = this.props.ref, e !== void 0 ? e : null;
152
- }
153
- function U(e, s, f, d, $, oe) {
154
- var g = f.ref;
155
- return e = {
156
- $$typeof: D,
157
- type: e,
158
- key: s,
159
- props: f,
160
- _owner: d
161
- }, (g !== void 0 ? g : null) !== null ? Object.defineProperty(e, "ref", {
162
- enumerable: !1,
163
- get: H
164
- }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
165
- configurable: !1,
166
- enumerable: !1,
167
- writable: !0,
168
- value: 0
169
- }), Object.defineProperty(e, "_debugInfo", {
170
- configurable: !1,
171
- enumerable: !1,
172
- writable: !0,
173
- value: null
174
- }), Object.defineProperty(e, "_debugStack", {
175
- configurable: !1,
176
- enumerable: !1,
177
- writable: !0,
178
- value: $
179
- }), Object.defineProperty(e, "_debugTask", {
180
- configurable: !1,
181
- enumerable: !1,
182
- writable: !0,
183
- value: oe
184
- }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
185
- }
186
- function A(e, s, f, d, $, oe) {
187
- var g = s.children;
188
- if (g !== void 0)
189
- if (d)
190
- if (te(g)) {
191
- for (d = 0; d < g.length; d++)
192
- N(g[d]);
193
- Object.freeze && Object.freeze(g);
194
- } else
195
- console.error(
196
- "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
197
- );
198
- else N(g);
199
- if (ie.call(s, "key")) {
200
- g = l(e);
201
- var w = Object.keys(s).filter(function(fe) {
202
- return fe !== "key";
203
- });
204
- d = 0 < w.length ? "{key: someKey, " + w.join(": ..., ") + ": ...}" : "{key: someKey}", q[g + d] || (w = 0 < w.length ? "{" + w.join(": ..., ") + ": ...}" : "{}", console.error(
205
- `A props object containing a "key" prop is being spread into JSX:
206
- let props = %s;
207
- <%s {...props} />
208
- React keys must be passed directly to JSX without using spread:
209
- let props = %s;
210
- <%s key={someKey} {...props} />`,
211
- d,
212
- g,
213
- w,
214
- g
215
- ), q[g + d] = !0);
216
- }
217
- if (g = null, f !== void 0 && (m(f), g = "" + f), F(s) && (m(s.key), g = "" + s.key), "key" in s) {
218
- f = {};
219
- for (var G in s)
220
- G !== "key" && (f[G] = s[G]);
221
- } else f = s;
222
- return g && I(
223
- f,
224
- typeof e == "function" ? e.displayName || e.name || "Unknown" : e
225
- ), U(
226
- e,
227
- g,
228
- f,
229
- o(),
230
- $,
231
- oe
232
- );
233
- }
234
- function N(e) {
235
- T(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === k && (e._payload.status === "fulfilled" ? T(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
236
- }
237
- function T(e) {
238
- return typeof e == "object" && e !== null && e.$$typeof === D;
239
- }
240
- var Y = Oe, D = Symbol.for("react.transitional.element"), J = Symbol.for("react.portal"), O = Symbol.for("react.fragment"), K = Symbol.for("react.strict_mode"), v = Symbol.for("react.profiler"), V = Symbol.for("react.consumer"), P = Symbol.for("react.context"), i = Symbol.for("react.forward_ref"), x = Symbol.for("react.suspense"), E = Symbol.for("react.suspense_list"), j = Symbol.for("react.memo"), k = Symbol.for("react.lazy"), M = Symbol.for("react.activity"), ue = Symbol.for("react.client.reference"), ee = Y.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, ie = Object.prototype.hasOwnProperty, te = Array.isArray, R = console.createTask ? console.createTask : function() {
241
- return null;
242
- };
243
- Y = {
244
- react_stack_bottom_frame: function(e) {
245
- return e();
246
- }
247
- };
248
- var L, re = {}, B = Y.react_stack_bottom_frame.bind(
249
- Y,
250
- a
251
- )(), ne = R(c(a)), q = {};
252
- ae.Fragment = O, ae.jsx = function(e, s, f) {
253
- var d = 1e4 > ee.recentlyCreatedOwnerStacks++;
254
- return A(
255
- e,
256
- s,
257
- f,
258
- !1,
259
- d ? Error("react-stack-top-frame") : B,
260
- d ? R(c(e)) : ne
261
- );
262
- }, ae.jsxs = function(e, s, f) {
263
- var d = 1e4 > ee.recentlyCreatedOwnerStacks++;
264
- return A(
265
- e,
266
- s,
267
- f,
268
- !0,
269
- d ? Error("react-stack-top-frame") : B,
270
- d ? R(c(e)) : ne
271
- );
272
- };
273
- })()), ae;
274
- }
275
- var Ee;
276
- function Me() {
277
- return Ee || (Ee = 1, process.env.NODE_ENV === "production" ? ce.exports = Ie() : ce.exports = De()), ce.exports;
278
- }
279
- var n = Me();
280
- const Le = ({
281
- isVisible: l,
282
- position: b,
283
- availableFields: m,
284
- filteredFields: c,
285
- filterQuery: o,
1
+ import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
+ import { useState as I, useEffect as oe, useMemo as Fe, forwardRef as ze, useRef as J, useCallback as S, useImperativeHandle as Be } from "react";
3
+ const We = ({
4
+ isVisible: n,
5
+ position: d,
6
+ availableFields: g,
7
+ filteredFields: l,
8
+ filterQuery: u,
286
9
  allowCreate: a,
287
- onSelect: F,
288
- onClose: I,
289
- onCreateField: H
10
+ onSelect: N,
11
+ onClose: P,
12
+ onCreateField: G,
13
+ existingFields: f = [],
14
+ onSelectExisting: T
290
15
  }) => {
291
- const [U, A] = z(!1), [N, T] = z("");
292
- de(() => {
293
- l || (A(!1), T(""));
294
- }, [l]);
295
- const Y = he(() => ({
16
+ const [x, y] = I(!1), [w, R] = I(""), [q, A] = I("inline"), [X, ie] = I(!0), [p, z] = I(!0);
17
+ oe(() => {
18
+ n || (y(!1), R(""), A("inline"));
19
+ }, [n]);
20
+ const V = Fe(() => ({
296
21
  position: "absolute",
297
- left: b?.left,
298
- top: b?.top,
22
+ left: d?.left,
23
+ top: d?.top,
299
24
  zIndex: 1e3,
300
25
  background: "white",
301
26
  border: "1px solid #ddd",
302
27
  borderRadius: "4px",
303
28
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)",
304
29
  padding: "8px 0",
305
- minWidth: "200px"
306
- }), [b]), D = c ?? m, J = !!o, O = he(() => {
307
- const i = [], x = /* @__PURE__ */ new Map();
308
- return D.forEach((E) => {
309
- const j = E.category?.trim() || "Uncategorized", k = x.get(j);
310
- if (k !== void 0) {
311
- i[k].fields.push(E);
312
- return;
313
- }
314
- x.set(j, i.length), i.push({ category: j, fields: [E] });
315
- }), i;
316
- }, [D]), [K, v] = z({});
317
- de(() => {
318
- v((i) => {
319
- if (O.length === 0)
320
- return Object.keys(i).length === 0 ? i : {};
321
- const x = {};
322
- let E = Object.keys(i).length !== O.length;
323
- return O.forEach(({ category: j }, k) => {
324
- const M = J ? !0 : i[j] ?? k === 0;
325
- x[j] = M, !E && i[j] !== M && (E = !0);
326
- }), E ? x : i;
327
- });
328
- }, [O, J]);
329
- const V = _((i) => {
330
- v((x) => ({
331
- ...x,
332
- [i]: !x[i]
333
- }));
334
- }, []);
335
- if (!l) return null;
336
- const P = async () => {
337
- const i = N.trim();
338
- if (!i) return;
339
- const x = {
30
+ width: "280px"
31
+ }), [d]), O = l ?? g, j = !!u;
32
+ if (oe(() => {
33
+ j && z(!0);
34
+ }, [j]), !n) return null;
35
+ const D = async () => {
36
+ const m = w.trim();
37
+ if (!m) return;
38
+ const B = {
340
39
  id: `custom_${Date.now()}`,
341
- label: i,
342
- category: "Custom"
40
+ label: m,
41
+ mode: q
343
42
  };
344
43
  try {
345
- if (H) {
346
- const E = await H(x);
347
- F(E || x);
44
+ if (G) {
45
+ const h = await G(B);
46
+ N(h || B);
348
47
  } else
349
- F(x);
48
+ N(B);
350
49
  } finally {
351
- A(!1), T("");
50
+ y(!1), R(""), A("inline");
352
51
  }
353
52
  };
354
- return /* @__PURE__ */ n.jsxs("div", { className: "superdoc-field-menu", style: Y, children: [
355
- J && /* @__PURE__ */ n.jsx(
53
+ return /* @__PURE__ */ o("div", { className: "superdoc-field-menu", style: V, children: [
54
+ j && /* @__PURE__ */ r(
356
55
  "div",
357
56
  {
358
57
  style: {
@@ -360,23 +59,17 @@ const Le = ({
360
59
  borderBottom: "1px solid #f0f0f0",
361
60
  marginBottom: "4px"
362
61
  },
363
- children: /* @__PURE__ */ n.jsxs("div", { style: { fontSize: "12px", color: "#6b7280" }, children: [
62
+ children: /* @__PURE__ */ o("div", { style: { fontSize: "12px", color: "#6b7280" }, children: [
364
63
  "Filtering results for",
365
- /* @__PURE__ */ n.jsx(
366
- "span",
367
- {
368
- style: { fontWeight: 600, color: "#111827", marginLeft: "4px" },
369
- children: o
370
- }
371
- )
64
+ /* @__PURE__ */ r("span", { style: { fontWeight: 600, color: "#111827", marginLeft: "4px" }, children: u })
372
65
  ] })
373
66
  }
374
67
  ),
375
- a && !U && /* @__PURE__ */ n.jsx(
68
+ a && !x && /* @__PURE__ */ r(
376
69
  "div",
377
70
  {
378
71
  className: "field-menu-item",
379
- onClick: () => A(!0),
72
+ onClick: () => y(!0),
380
73
  style: {
381
74
  padding: "8px 16px",
382
75
  cursor: "pointer",
@@ -386,16 +79,16 @@ const Le = ({
386
79
  children: "+ Create New Field"
387
80
  }
388
81
  ),
389
- a && U && /* @__PURE__ */ n.jsxs("div", { style: { padding: "8px 16px" }, children: [
390
- /* @__PURE__ */ n.jsx(
82
+ a && x && /* @__PURE__ */ o("div", { style: { padding: "8px 16px" }, children: [
83
+ /* @__PURE__ */ r(
391
84
  "input",
392
85
  {
393
86
  type: "text",
394
- value: N,
87
+ value: w,
395
88
  placeholder: "Field name...",
396
- onChange: (i) => T(i.target.value),
397
- onKeyDown: (i) => {
398
- i.key === "Enter" && P(), i.key === "Escape" && (A(!1), T(""));
89
+ onChange: (m) => R(m.target.value),
90
+ onKeyDown: (m) => {
91
+ m.key === "Enter" && D(), m.key === "Escape" && (y(!1), R(""), A("inline"));
399
92
  },
400
93
  autoFocus: !0,
401
94
  style: {
@@ -406,7 +99,66 @@ const Le = ({
406
99
  }
407
100
  }
408
101
  ),
409
- /* @__PURE__ */ n.jsxs(
102
+ /* @__PURE__ */ o(
103
+ "div",
104
+ {
105
+ style: {
106
+ marginTop: "8px",
107
+ display: "flex",
108
+ gap: "12px",
109
+ fontSize: "13px"
110
+ },
111
+ children: [
112
+ /* @__PURE__ */ o(
113
+ "label",
114
+ {
115
+ style: {
116
+ display: "flex",
117
+ alignItems: "center",
118
+ gap: "4px",
119
+ cursor: "pointer"
120
+ },
121
+ children: [
122
+ /* @__PURE__ */ r(
123
+ "input",
124
+ {
125
+ type: "radio",
126
+ value: "inline",
127
+ checked: q === "inline",
128
+ onChange: () => A("inline")
129
+ }
130
+ ),
131
+ "Inline"
132
+ ]
133
+ }
134
+ ),
135
+ /* @__PURE__ */ o(
136
+ "label",
137
+ {
138
+ style: {
139
+ display: "flex",
140
+ alignItems: "center",
141
+ gap: "4px",
142
+ cursor: "pointer"
143
+ },
144
+ children: [
145
+ /* @__PURE__ */ r(
146
+ "input",
147
+ {
148
+ type: "radio",
149
+ value: "block",
150
+ checked: q === "block",
151
+ onChange: () => A("block")
152
+ }
153
+ ),
154
+ "Block"
155
+ ]
156
+ }
157
+ )
158
+ ]
159
+ }
160
+ ),
161
+ /* @__PURE__ */ o(
410
162
  "div",
411
163
  {
412
164
  style: {
@@ -415,27 +167,27 @@ const Le = ({
415
167
  gap: "8px"
416
168
  },
417
169
  children: [
418
- /* @__PURE__ */ n.jsx(
170
+ /* @__PURE__ */ r(
419
171
  "button",
420
172
  {
421
- onClick: P,
422
- disabled: !N.trim(),
173
+ onClick: D,
174
+ disabled: !w.trim(),
423
175
  style: {
424
176
  padding: "4px 12px",
425
- background: N.trim() ? "#0066cc" : "#ccc",
177
+ background: w.trim() ? "#0066cc" : "#ccc",
426
178
  color: "white",
427
179
  border: "none",
428
180
  borderRadius: "3px",
429
- cursor: N.trim() ? "pointer" : "not-allowed"
181
+ cursor: w.trim() ? "pointer" : "not-allowed"
430
182
  },
431
183
  children: "Create"
432
184
  }
433
185
  ),
434
- /* @__PURE__ */ n.jsx(
186
+ /* @__PURE__ */ r(
435
187
  "button",
436
188
  {
437
189
  onClick: () => {
438
- A(!1), T("");
190
+ y(!1), R(""), A("inline");
439
191
  },
440
192
  style: {
441
193
  padding: "4px 12px",
@@ -451,7 +203,7 @@ const Le = ({
451
203
  }
452
204
  )
453
205
  ] }),
454
- a && m.length > 0 && /* @__PURE__ */ n.jsx(
206
+ a && g.length > 0 && /* @__PURE__ */ r(
455
207
  "div",
456
208
  {
457
209
  style: {
@@ -460,7 +212,110 @@ const Le = ({
460
212
  }
461
213
  }
462
214
  ),
463
- O.length === 0 ? /* @__PURE__ */ n.jsx(
215
+ f.length > 0 && (() => {
216
+ const m = /* @__PURE__ */ new Map();
217
+ f.forEach((h) => {
218
+ const Y = h.group || `individual-${h.id}`, ee = m.get(Y) || [];
219
+ ee.push(h), m.set(Y, ee);
220
+ });
221
+ const B = Array.from(m.values()).map((h) => ({
222
+ ...h[0],
223
+ count: h.length
224
+ }));
225
+ return /* @__PURE__ */ o("div", { style: { borderBottom: "1px solid #f0f0f0" }, children: [
226
+ /* @__PURE__ */ o(
227
+ "button",
228
+ {
229
+ type: "button",
230
+ onClick: () => ie(!X),
231
+ style: {
232
+ width: "100%",
233
+ display: "flex",
234
+ alignItems: "center",
235
+ justifyContent: "space-between",
236
+ padding: "8px 16px",
237
+ background: "transparent",
238
+ border: "none",
239
+ cursor: "pointer",
240
+ fontWeight: 500,
241
+ fontSize: "13px",
242
+ color: "#374151",
243
+ textAlign: "left"
244
+ },
245
+ children: [
246
+ /* @__PURE__ */ o("span", { children: [
247
+ "Existing Fields (",
248
+ B.length,
249
+ ")"
250
+ ] }),
251
+ /* @__PURE__ */ r(
252
+ "span",
253
+ {
254
+ "aria-hidden": !0,
255
+ style: {
256
+ display: "inline-block",
257
+ width: "8px",
258
+ height: "8px",
259
+ borderRight: "2px solid #666",
260
+ borderBottom: "2px solid #666",
261
+ transform: X ? "rotate(45deg)" : "rotate(-45deg)",
262
+ transition: "transform 0.2s ease"
263
+ }
264
+ }
265
+ )
266
+ ]
267
+ }
268
+ ),
269
+ X && /* @__PURE__ */ r("div", { style: { maxHeight: "300px", overflowY: "auto" }, children: B.map((h) => /* @__PURE__ */ o(
270
+ "div",
271
+ {
272
+ className: "field-menu-item",
273
+ onClick: () => T?.(h),
274
+ style: {
275
+ padding: "8px 16px",
276
+ cursor: "pointer",
277
+ display: "flex",
278
+ alignItems: "flex-start",
279
+ justifyContent: "space-between",
280
+ gap: "8px"
281
+ },
282
+ children: [
283
+ /* @__PURE__ */ o("div", { style: { flex: 1, minWidth: 0 }, children: [
284
+ /* @__PURE__ */ r("div", { style: { fontWeight: 500, fontSize: "13px" }, children: h.alias || h.id }),
285
+ /* @__PURE__ */ r(
286
+ "div",
287
+ {
288
+ style: {
289
+ fontSize: "11px",
290
+ color: "#9ca3af",
291
+ marginTop: "2px"
292
+ },
293
+ children: h.group ? `group (${h.count} fields)` : `ID: ${h.id}`
294
+ }
295
+ )
296
+ ] }),
297
+ /* @__PURE__ */ r(
298
+ "span",
299
+ {
300
+ style: {
301
+ fontSize: "11px",
302
+ color: "#6b7280",
303
+ padding: "2px 6px",
304
+ background: "#f3f4f6",
305
+ borderRadius: "3px",
306
+ textTransform: "capitalize",
307
+ flexShrink: 0
308
+ },
309
+ children: h.mode || "inline"
310
+ }
311
+ )
312
+ ]
313
+ },
314
+ h.group || h.id
315
+ )) })
316
+ ] });
317
+ })(),
318
+ O.length === 0 ? /* @__PURE__ */ r(
464
319
  "div",
465
320
  {
466
321
  style: {
@@ -471,104 +326,112 @@ const Le = ({
471
326
  },
472
327
  children: "No matching fields"
473
328
  }
474
- ) : O.map(({ category: i, fields: x }, E) => {
475
- const j = !!K[i], k = `${Math.max(x.length * 40, 0)}px`;
476
- return /* @__PURE__ */ n.jsxs(
477
- "div",
329
+ ) : /* @__PURE__ */ o("div", { style: { borderBottom: "1px solid #f0f0f0" }, children: [
330
+ /* @__PURE__ */ o(
331
+ "button",
478
332
  {
333
+ type: "button",
334
+ onClick: () => z(!p),
479
335
  style: {
480
- borderTop: E === 0 && a ? void 0 : "1px solid #f0f0f0"
336
+ width: "100%",
337
+ display: "flex",
338
+ alignItems: "center",
339
+ justifyContent: "space-between",
340
+ padding: "8px 16px",
341
+ background: "transparent",
342
+ border: "none",
343
+ cursor: "pointer",
344
+ fontWeight: 500,
345
+ fontSize: "13px",
346
+ color: "#374151",
347
+ textAlign: "left"
481
348
  },
482
349
  children: [
483
- /* @__PURE__ */ n.jsxs(
484
- "button",
350
+ /* @__PURE__ */ o("span", { children: [
351
+ "Available Fields (",
352
+ O.length,
353
+ ")"
354
+ ] }),
355
+ /* @__PURE__ */ r(
356
+ "span",
485
357
  {
486
- type: "button",
487
- onClick: () => V(i),
358
+ "aria-hidden": !0,
488
359
  style: {
489
- width: "100%",
490
- display: "flex",
491
- alignItems: "center",
492
- justifyContent: "space-between",
493
- padding: "8px 16px",
494
- background: "transparent",
495
- border: "none",
496
- cursor: "pointer",
497
- fontWeight: 500,
498
- textAlign: "left"
499
- },
500
- children: [
501
- /* @__PURE__ */ n.jsxs("span", { children: [
502
- i,
503
- " (",
504
- x.length,
505
- ")"
506
- ] }),
507
- /* @__PURE__ */ n.jsx(
508
- "span",
509
- {
510
- "aria-hidden": !0,
511
- style: {
512
- display: "inline-block",
513
- width: "8px",
514
- height: "8px",
515
- borderRight: "2px solid #666",
516
- borderBottom: "2px solid #666",
517
- transform: j ? "rotate(45deg)" : "rotate(-45deg)",
518
- transition: "transform 0.2s ease",
519
- marginLeft: "12px"
520
- }
521
- }
522
- )
523
- ]
360
+ display: "inline-block",
361
+ width: "8px",
362
+ height: "8px",
363
+ borderRight: "2px solid #666",
364
+ borderBottom: "2px solid #666",
365
+ transform: p ? "rotate(45deg)" : "rotate(-45deg)",
366
+ transition: "transform 0.2s ease"
367
+ }
524
368
  }
525
- ),
526
- /* @__PURE__ */ n.jsx(
527
- "div",
369
+ )
370
+ ]
371
+ }
372
+ ),
373
+ p && /* @__PURE__ */ r("div", { style: { maxHeight: "300px", overflowY: "auto" }, children: O.map((m) => /* @__PURE__ */ o(
374
+ "div",
375
+ {
376
+ className: "field-menu-item",
377
+ onClick: () => N(m),
378
+ style: {
379
+ padding: "8px 16px",
380
+ cursor: "pointer",
381
+ display: "flex",
382
+ alignItems: "flex-start",
383
+ justifyContent: "space-between",
384
+ gap: "8px"
385
+ },
386
+ children: [
387
+ /* @__PURE__ */ o("div", { style: { flex: 1, minWidth: 0 }, children: [
388
+ /* @__PURE__ */ r("div", { style: { fontWeight: 500, fontSize: "13px" }, children: m.label || m.id }),
389
+ /* @__PURE__ */ o(
390
+ "div",
391
+ {
392
+ style: {
393
+ fontSize: "11px",
394
+ color: "#9ca3af",
395
+ marginTop: "2px"
396
+ },
397
+ children: [
398
+ "ID: ",
399
+ m.id
400
+ ]
401
+ }
402
+ )
403
+ ] }),
404
+ /* @__PURE__ */ r(
405
+ "span",
528
406
  {
529
- "data-category": i,
530
- "aria-hidden": !j,
531
407
  style: {
532
- overflow: "hidden",
533
- maxHeight: j ? k : "0px",
534
- opacity: j ? 1 : 0,
535
- transition: "max-height 0.2s ease, opacity 0.2s ease",
536
- pointerEvents: j ? "auto" : "none"
408
+ fontSize: "11px",
409
+ color: "#6b7280",
410
+ padding: "2px 6px",
411
+ background: "#f3f4f6",
412
+ borderRadius: "3px",
413
+ textTransform: "capitalize",
414
+ flexShrink: 0
537
415
  },
538
- children: /* @__PURE__ */ n.jsx("div", { style: { padding: j ? "4px 0" : 0 }, children: x.map((M) => /* @__PURE__ */ n.jsx(
539
- "div",
540
- {
541
- className: "field-menu-item",
542
- onClick: () => F(M),
543
- style: {
544
- padding: "8px 16px",
545
- cursor: "pointer",
546
- display: "flex",
547
- alignItems: "center",
548
- justifyContent: "space-between"
549
- },
550
- children: /* @__PURE__ */ n.jsx("span", { style: { fontWeight: 500 }, children: M.label })
551
- },
552
- M.id
553
- )) })
416
+ children: m.mode || "inline"
554
417
  }
555
418
  )
556
419
  ]
557
420
  },
558
- i
559
- );
560
- }),
561
- /* @__PURE__ */ n.jsx(
421
+ m.id
422
+ )) })
423
+ ] }),
424
+ /* @__PURE__ */ r(
562
425
  "div",
563
426
  {
564
427
  style: {
565
428
  borderTop: "1px solid #eee",
566
429
  marginTop: "4px"
567
430
  },
568
- children: /* @__PURE__ */ n.jsx(
431
+ children: /* @__PURE__ */ r(
569
432
  "button",
570
433
  {
571
- onClick: I,
434
+ onClick: P,
572
435
  style: {
573
436
  width: "100%",
574
437
  padding: "6px 16px",
@@ -583,530 +446,667 @@ const Le = ({
583
446
  }
584
447
  )
585
448
  ] });
586
- }, Be = ({
587
- fields: l,
588
- onSelect: b,
589
- onDelete: m,
590
- selectedFieldId: c
591
- }) => /* @__PURE__ */ n.jsxs(
449
+ }, He = (n) => {
450
+ const d = n.split("-");
451
+ return d.length > 2 ? d[d.length - 1].substring(0, 6) : n.substring(0, 6);
452
+ }, ye = ({ field: n, onSelect: d, onDelete: g, isSelected: l, isGrouped: u = !1 }) => /* @__PURE__ */ o(
592
453
  "div",
593
454
  {
594
- className: "superdoc-field-list",
455
+ onClick: () => d(n),
595
456
  style: {
596
- width: "250px",
597
- background: "white",
598
- border: "1px solid #e5e7eb",
599
- borderRadius: "8px",
600
- padding: "16px"
457
+ position: "relative",
458
+ padding: "10px 12px",
459
+ background: l ? "#eff6ff" : "#f9fafb",
460
+ border: l ? "1px solid #3b82f6" : "1px solid #e5e7eb",
461
+ borderRadius: "6px",
462
+ cursor: "pointer",
463
+ transition: "all 0.2s",
464
+ fontSize: u ? "13px" : "14px"
465
+ },
466
+ onMouseEnter: (a) => {
467
+ l || (a.currentTarget.style.background = "#f3f4f6");
601
468
  },
469
+ onMouseLeave: (a) => {
470
+ l || (a.currentTarget.style.background = "#f9fafb");
471
+ },
472
+ title: n.alias,
602
473
  children: [
603
- /* @__PURE__ */ n.jsxs("h3", { style: { margin: "0 0 16px 0", fontSize: "16px", fontWeight: "600" }, children: [
604
- "Template Fields (",
605
- l.length,
606
- ")"
607
- ] }),
608
- l.length === 0 ? /* @__PURE__ */ n.jsxs(
609
- "div",
474
+ /* @__PURE__ */ r(
475
+ "button",
610
476
  {
611
- style: {
612
- color: "#9ca3af",
613
- fontSize: "14px",
614
- textAlign: "center",
615
- padding: "20px 0"
477
+ onClick: (a) => {
478
+ a.stopPropagation(), g(n.id);
616
479
  },
617
- children: [
618
- "No fields yet. Type ",
619
- "{{",
620
- " to add a field."
621
- ]
622
- }
623
- ) : /* @__PURE__ */ n.jsx("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: l.map((o) => /* @__PURE__ */ n.jsxs(
624
- "div",
625
- {
626
- onClick: () => b(o),
627
480
  style: {
628
- position: "relative",
629
- padding: "12px",
630
- background: c === o.id ? "#eff6ff" : "#f9fafb",
631
- border: c === o.id ? "1px solid #3b82f6" : "1px solid #e5e7eb",
632
- borderRadius: "6px",
481
+ position: "absolute",
482
+ top: "6px",
483
+ right: "6px",
484
+ padding: "4px",
485
+ background: "transparent",
486
+ border: "none",
633
487
  cursor: "pointer",
634
- transition: "all 0.2s"
488
+ color: "#9ca3af",
489
+ transition: "color 0.2s",
490
+ display: "flex",
491
+ alignItems: "center",
492
+ justifyContent: "center"
635
493
  },
636
494
  onMouseEnter: (a) => {
637
- c !== o.id && (a.currentTarget.style.background = "#f3f4f6");
495
+ a.currentTarget.style.color = "#ef4444";
638
496
  },
639
497
  onMouseLeave: (a) => {
640
- c !== o.id && (a.currentTarget.style.background = "#f9fafb");
498
+ a.currentTarget.style.color = "#9ca3af";
641
499
  },
642
- title: o.alias,
643
- children: [
644
- /* @__PURE__ */ n.jsx(
645
- "button",
646
- {
647
- onClick: (a) => {
648
- a.stopPropagation(), m(o.id);
649
- },
650
- style: {
651
- position: "absolute",
652
- top: "8px",
653
- right: "8px",
654
- padding: "4px",
655
- background: "transparent",
656
- border: "none",
657
- cursor: "pointer",
658
- color: "#9ca3af",
659
- transition: "color 0.2s",
660
- display: "flex",
661
- alignItems: "center",
662
- justifyContent: "center"
663
- },
664
- onMouseEnter: (a) => {
665
- a.currentTarget.style.color = "#ef4444";
666
- },
667
- onMouseLeave: (a) => {
668
- a.currentTarget.style.color = "#9ca3af";
669
- },
670
- title: "Delete field",
671
- children: /* @__PURE__ */ n.jsx(
672
- "svg",
673
- {
674
- width: "16",
675
- height: "16",
676
- viewBox: "0 0 16 16",
677
- fill: "none",
678
- xmlns: "http://www.w3.org/2000/svg",
679
- children: /* @__PURE__ */ n.jsx(
680
- "path",
681
- {
682
- d: "M6 2V1.5C6 1.22386 6.22386 1 6.5 1H9.5C9.77614 1 10 1.22386 10 1.5V2M2 4H14M12.6667 4L12.1991 11.0129C12.129 12.065 12.0939 12.5911 11.8667 12.99C11.6666 13.3412 11.3648 13.6235 11.0011 13.7998C10.588 14 10.0607 14 9.00623 14H6.99377C5.93927 14 5.41202 14 4.99889 13.7998C4.63517 13.6235 4.33339 13.3412 4.13332 12.99C3.90607 12.5911 3.871 12.065 3.80086 11.0129L3.33333 4",
683
- stroke: "currentColor",
684
- strokeWidth: "1.5",
685
- strokeLinecap: "round",
686
- strokeLinejoin: "round"
687
- }
688
- )
689
- }
690
- )
691
- }
692
- ),
693
- /* @__PURE__ */ n.jsxs("div", { style: { paddingRight: "24px" }, children: [
694
- /* @__PURE__ */ n.jsx(
500
+ title: "Delete field",
501
+ children: /* @__PURE__ */ r(
502
+ "svg",
503
+ {
504
+ width: "14",
505
+ height: "14",
506
+ viewBox: "0 0 16 16",
507
+ fill: "none",
508
+ xmlns: "http://www.w3.org/2000/svg",
509
+ children: /* @__PURE__ */ r(
510
+ "path",
511
+ {
512
+ d: "M6 2V1.5C6 1.22386 6.22386 1 6.5 1H9.5C9.77614 1 10 1.22386 10 1.5V2M2 4H14M12.6667 4L12.1991 11.0129C12.129 12.065 12.0939 12.5911 11.8667 12.99C11.6666 13.3412 11.3648 13.6235 11.0011 13.7998C10.588 14 10.0607 14 9.00623 14H6.99377C5.93927 14 5.41202 14 4.99889 13.7998C4.63517 13.6235 4.33339 13.3412 4.13332 12.99C3.90607 12.5911 3.871 12.065 3.80086 11.0129L3.33333 4",
513
+ stroke: "currentColor",
514
+ strokeWidth: "1.5",
515
+ strokeLinecap: "round",
516
+ strokeLinejoin: "round"
517
+ }
518
+ )
519
+ }
520
+ )
521
+ }
522
+ ),
523
+ /* @__PURE__ */ o("div", { style: { paddingRight: "24px" }, children: [
524
+ /* @__PURE__ */ r(
525
+ "div",
526
+ {
527
+ style: {
528
+ fontWeight: "500",
529
+ fontSize: u ? "12px" : "14px",
530
+ color: u ? "#6b7280" : "#111827"
531
+ },
532
+ children: n.alias || n.id
533
+ }
534
+ ),
535
+ /* @__PURE__ */ o(
536
+ "div",
537
+ {
538
+ style: {
539
+ display: "flex",
540
+ alignItems: "center",
541
+ gap: "6px",
542
+ fontSize: "11px",
543
+ color: "#9ca3af",
544
+ marginTop: "2px"
545
+ },
546
+ children: [
547
+ /* @__PURE__ */ o("span", { children: [
548
+ "ID: ",
549
+ n.id
550
+ ] }),
551
+ n.mode && /* @__PURE__ */ r(
552
+ "span",
553
+ {
554
+ style: {
555
+ fontSize: "9px",
556
+ padding: "2px 5px",
557
+ borderRadius: "3px",
558
+ background: n.mode === "block" ? "#dbeafe" : "#f3f4f6",
559
+ color: n.mode === "block" ? "#1e40af" : "#4b5563",
560
+ fontWeight: "500"
561
+ },
562
+ children: n.mode
563
+ }
564
+ )
565
+ ]
566
+ }
567
+ )
568
+ ] })
569
+ ]
570
+ }
571
+ ), Le = ({
572
+ fields: n,
573
+ onSelect: d,
574
+ onDelete: g,
575
+ selectedFieldId: l
576
+ }) => {
577
+ const [u, a] = I(/* @__PURE__ */ new Set()), { groupedFields: N, ungroupedFields: P } = Fe(() => {
578
+ const f = {}, T = [];
579
+ return n.forEach((x) => {
580
+ x.group ? (f[x.group] || (f[x.group] = []), f[x.group].push(x)) : T.push(x);
581
+ }), { groupedFields: f, ungroupedFields: T };
582
+ }, [n]), G = (f) => {
583
+ a((T) => {
584
+ const x = new Set(T);
585
+ return x.has(f) ? x.delete(f) : x.add(f), x;
586
+ });
587
+ };
588
+ return /* @__PURE__ */ o(
589
+ "div",
590
+ {
591
+ className: "superdoc-field-list",
592
+ style: {
593
+ width: "250px",
594
+ background: "white",
595
+ border: "1px solid #e5e7eb",
596
+ borderRadius: "8px",
597
+ padding: "16px"
598
+ },
599
+ children: [
600
+ /* @__PURE__ */ o("h3", { style: { margin: "0 0 16px 0", fontSize: "16px", fontWeight: "600" }, children: [
601
+ "Template Fields (",
602
+ n.length,
603
+ ")"
604
+ ] }),
605
+ n.length === 0 ? /* @__PURE__ */ o(
606
+ "div",
607
+ {
608
+ style: {
609
+ color: "#9ca3af",
610
+ fontSize: "14px",
611
+ textAlign: "center",
612
+ padding: "20px 0"
613
+ },
614
+ children: [
615
+ "No fields yet. Type ",
616
+ "{{",
617
+ " to add a field."
618
+ ]
619
+ }
620
+ ) : /* @__PURE__ */ o("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [
621
+ P.map((f) => /* @__PURE__ */ r(
622
+ ye,
623
+ {
624
+ field: f,
625
+ onSelect: d,
626
+ onDelete: g,
627
+ isSelected: l === f.id
628
+ },
629
+ f.id
630
+ )),
631
+ Object.entries(N).map(([f, T]) => {
632
+ const x = u.has(f), y = T[0];
633
+ return /* @__PURE__ */ o("div", { children: [
634
+ /* @__PURE__ */ r(
695
635
  "div",
696
636
  {
697
637
  style: {
698
- fontWeight: "500",
699
- fontSize: "14px",
700
- marginBottom: o.alias && o.alias !== o.id ? "4px" : "0"
638
+ position: "relative",
639
+ padding: "12px",
640
+ background: "#f9fafb",
641
+ border: "1px solid #e5e7eb",
642
+ borderRadius: "6px",
643
+ cursor: "pointer",
644
+ transition: "all 0.2s"
645
+ },
646
+ onClick: () => G(f),
647
+ onMouseEnter: (w) => {
648
+ w.currentTarget.style.background = "#f3f4f6";
649
+ },
650
+ onMouseLeave: (w) => {
651
+ w.currentTarget.style.background = "#f9fafb";
701
652
  },
702
- children: o.id
653
+ children: /* @__PURE__ */ o("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
654
+ /* @__PURE__ */ r("span", { style: { fontSize: "12px", color: "#6b7280" }, children: x ? "▼" : "▶" }),
655
+ /* @__PURE__ */ o("div", { style: { flex: 1 }, children: [
656
+ /* @__PURE__ */ r("div", { style: { fontWeight: "500", fontSize: "14px" }, children: y.alias }),
657
+ /* @__PURE__ */ o(
658
+ "div",
659
+ {
660
+ style: {
661
+ fontSize: "11px",
662
+ color: "#9ca3af",
663
+ marginTop: "2px"
664
+ },
665
+ children: [
666
+ "group: ",
667
+ He(f),
668
+ " (",
669
+ T.length,
670
+ " fields)"
671
+ ]
672
+ }
673
+ )
674
+ ] })
675
+ ] })
703
676
  }
704
677
  ),
705
- o.alias && o.alias !== o.id && /* @__PURE__ */ n.jsx(
678
+ x && /* @__PURE__ */ r(
706
679
  "div",
707
680
  {
708
681
  style: {
709
- fontSize: "12px",
710
- color: "#4b5563"
682
+ marginLeft: "16px",
683
+ marginTop: "4px",
684
+ display: "flex",
685
+ flexDirection: "column",
686
+ gap: "4px"
711
687
  },
712
- children: o.alias
688
+ children: T.map((w) => /* @__PURE__ */ r(
689
+ ye,
690
+ {
691
+ field: w,
692
+ onSelect: d,
693
+ onDelete: g,
694
+ isSelected: l === w.id,
695
+ isGrouped: !0
696
+ },
697
+ w.id
698
+ ))
713
699
  }
714
700
  )
715
- ] })
716
- ]
717
- },
718
- o.id
719
- )) })
720
- ]
721
- }
722
- ), Re = (l) => {
723
- const b = l.helpers?.structuredContentCommands;
724
- return b?.getStructuredContentTags ? (b.getStructuredContentTags(l.state) || []).map((c) => {
725
- const a = (c?.node ?? c)?.attrs ?? {};
701
+ ] }, f);
702
+ })
703
+ ] })
704
+ ]
705
+ }
706
+ );
707
+ }, Q = (n) => {
708
+ const d = n.helpers?.structuredContentCommands;
709
+ return d?.getStructuredContentTags ? (d.getStructuredContentTags(n.state) || []).map((l) => {
710
+ const u = l?.node ?? l, a = u?.attrs ?? {}, P = (u?.type?.name || "").includes("Block") ? "block" : "inline";
726
711
  return {
727
712
  id: a.id,
728
713
  alias: a.alias || a.label || "",
729
- tag: a.tag
714
+ tag: a.tag,
715
+ mode: P,
716
+ group: d.getGroup?.(a.tag) ?? void 0
730
717
  };
731
- }).filter((c) => !!c.id) : [];
732
- }, Te = (l, b) => {
733
- if (l === b) return !0;
734
- if (l.length !== b.length) return !1;
735
- for (let m = 0; m < l.length; m += 1) {
736
- const c = l[m], o = b[m];
737
- if (!o || c.id !== o.id || c.alias !== o.alias || c.tag !== o.tag || c.position !== o.position)
718
+ }) : [];
719
+ }, ve = (n, d) => {
720
+ if (n === d) return !0;
721
+ if (n.length !== d.length) return !1;
722
+ for (let g = 0; g < n.length; g += 1) {
723
+ const l = n[g], u = d[g];
724
+ if (!u || l.id !== u.id || l.alias !== u.alias || l.tag !== u.tag || l.position !== u.position || l.mode !== u.mode || l.group !== u.group)
738
725
  return !1;
739
726
  }
740
727
  return !0;
741
- }, $e = (l) => {
742
- if (!l) return null;
743
- if (l === !0)
728
+ }, Pe = (n) => {
729
+ if (!n) return null;
730
+ if (n === !0)
744
731
  return {
745
732
  selector: "#superdoc-toolbar",
746
733
  config: {},
747
734
  renderDefaultContainer: !0
748
735
  };
749
- if (typeof l == "string")
736
+ if (typeof n == "string")
750
737
  return {
751
- selector: l,
738
+ selector: n,
752
739
  config: {},
753
740
  renderDefaultContainer: !1
754
741
  };
755
- const { selector: b, ...m } = l;
742
+ const { selector: d, ...g } = n;
756
743
  return {
757
- selector: b || "#superdoc-toolbar",
758
- config: m,
759
- renderDefaultContainer: b === void 0
744
+ selector: d || "#superdoc-toolbar",
745
+ config: g,
746
+ renderDefaultContainer: d === void 0
760
747
  };
761
- }, We = Ae((l, b) => {
748
+ }, re = 10, Ae = 250, Ve = 300, Ce = (n) => {
749
+ const d = window.innerWidth - Ae - re, g = window.innerHeight - Ve - re, l = Math.min(n.left, d), u = Math.min(n.top, g);
750
+ return new DOMRect(
751
+ Math.max(l, re),
752
+ Math.max(u, re),
753
+ n.width,
754
+ n.height
755
+ );
756
+ }, je = ze((n, d) => {
762
757
  const {
763
- document: m,
764
- fields: c = {},
765
- menu: o = {},
758
+ document: g,
759
+ fields: l = {},
760
+ menu: u = {},
766
761
  list: a = {},
767
- toolbar: F,
768
- onReady: I,
769
- onTrigger: H,
770
- onFieldInsert: U,
771
- onFieldUpdate: A,
772
- onFieldDelete: N,
773
- onFieldsChange: T,
774
- onFieldSelect: Y,
775
- onFieldCreate: D,
776
- className: J,
777
- style: O,
778
- documentHeight: K = "600px"
779
- } = l, [v, V] = z(
780
- c.initial || []
781
- ), [P, i] = z(null), [x, E] = z(!1), [j, k] = z(), [M, ue] = z(""), [ee, ie] = z(() => c.available || []), te = Z(null), R = Z(null), L = Z(null), re = Z(c);
782
- re.current = c;
783
- const B = Z(null), ne = Z(x);
784
- de(() => {
785
- ne.current = x;
786
- }, [x]);
787
- const q = o.trigger || "{{", e = re.current.available || [], s = _(
788
- (t) => {
789
- const r = t.trim().toLowerCase();
790
- return r ? e.filter((h) => {
791
- const y = h.label.toLowerCase(), S = h.category?.toLowerCase() || "";
792
- return y.includes(r) || S.includes(r);
793
- }) : e;
762
+ toolbar: N,
763
+ onReady: P,
764
+ onTrigger: G,
765
+ onFieldInsert: f,
766
+ onFieldUpdate: T,
767
+ onFieldDelete: x,
768
+ onFieldsChange: y,
769
+ onFieldSelect: w,
770
+ onFieldCreate: R,
771
+ onExport: q,
772
+ className: A,
773
+ style: X,
774
+ documentHeight: ie = "600px"
775
+ } = n, [p, z] = I(l.initial || []), [V, O] = I(null), [j, D] = I(!1), [m, B] = I(), [h, Y] = I(""), [ee, we] = I(
776
+ () => l.available || []
777
+ ), se = J(null), F = J(null), M = J(null), pe = J(l);
778
+ pe.current = l;
779
+ const W = J(null), fe = J(j);
780
+ oe(() => {
781
+ fe.current = j;
782
+ }, [j]);
783
+ const te = u.trigger || "{{", le = pe.current.available || [], ge = S(
784
+ (e) => {
785
+ const t = e.trim().toLowerCase();
786
+ return t ? le.filter((i) => i.label.toLowerCase().includes(t)) : le;
794
787
  },
795
- [e]
796
- ), f = _(
797
- (t) => {
798
- ue(t), ie(s(t));
788
+ [le]
789
+ ), de = S(
790
+ (e) => {
791
+ Y(e), we(ge(e));
799
792
  },
800
- [s]
801
- ), d = _(() => {
802
- f("");
803
- }, [f]), $ = _(
804
- (t, r) => {
805
- if (!R.current?.activeEditor) return !1;
806
- const h = R.current.activeEditor, y = `field_${Date.now()}`, S = t === "inline" ? h.commands.insertStructuredContentInline?.({
793
+ [ge]
794
+ ), H = S(() => {
795
+ de("");
796
+ }, [de]), K = S(
797
+ (e, t) => {
798
+ if (!F.current?.activeEditor) return !1;
799
+ const i = F.current.activeEditor, v = p, b = e === "inline" ? i.commands.insertStructuredContentInline?.({
807
800
  attrs: {
808
- id: y,
809
- alias: r.alias,
810
- tag: r.metadata ? JSON.stringify(r.metadata) : r.category
801
+ alias: t.alias,
802
+ tag: t.metadata ? JSON.stringify(t.metadata) : void 0
811
803
  },
812
- text: r.defaultValue || r.alias
813
- }) : h.commands.insertStructuredContentBlock?.({
804
+ text: t.defaultValue || t.alias
805
+ }) : i.commands.insertStructuredContentBlock?.({
814
806
  attrs: {
815
- id: y,
816
- alias: r.alias,
817
- tag: r.metadata ? JSON.stringify(r.metadata) : r.category
807
+ alias: t.alias,
808
+ tag: t.metadata ? JSON.stringify(t.metadata) : void 0
818
809
  },
819
- text: r.defaultValue || r.alias
810
+ text: t.defaultValue || t.alias
820
811
  });
821
- if (S) {
822
- const C = {
823
- id: y,
824
- alias: r.alias,
825
- tag: r.category
826
- };
827
- V((p) => {
828
- const u = [...p, C];
829
- return T?.(u), u;
830
- }), U?.(C);
812
+ if (b) {
813
+ const c = Q(i);
814
+ z(c), y?.(c);
815
+ const E = c.find(
816
+ (C) => !v.some((s) => s.id === C.id)
817
+ );
818
+ E && f?.(E);
831
819
  }
832
- return S;
820
+ return b;
833
821
  },
834
- [U, T]
835
- ), oe = _(
836
- (t, r) => {
837
- if (!R.current?.activeEditor) return !1;
838
- const y = R.current.activeEditor.commands.updateStructuredContentById?.(t, {
839
- attrs: r
822
+ [f, y, p]
823
+ ), Z = S(
824
+ (e, t) => {
825
+ if (!F.current?.activeEditor) return !1;
826
+ const v = F.current.activeEditor.commands.updateStructuredContentById?.(e, {
827
+ attrs: t
840
828
  });
841
- return y && V((S) => {
842
- const C = S.map(
843
- (u) => u.id === t ? { ...u, ...r } : u
844
- );
845
- T?.(C);
846
- const p = C.find((u) => u.id === t);
847
- return p && A?.(p), C;
848
- }), y;
829
+ return v && z((b) => {
830
+ const c = b.map((C) => C.id === e ? { ...C, ...t } : C);
831
+ y?.(c);
832
+ const E = c.find((C) => C.id === e);
833
+ return E && T?.(E), c;
834
+ }), v;
849
835
  },
850
- [A, T]
851
- ), g = _(
852
- (t) => {
853
- const r = R.current?.activeEditor;
854
- if (!r) {
855
- console.warn(
856
- "[SuperDocTemplateBuilder] deleteField called without active editor"
857
- );
858
- let p = !1;
859
- return V((u) => {
860
- if (!u.some((W) => W.id === t)) return u;
861
- const Q = u.filter((W) => W.id !== t);
862
- return p = !0, T?.(Q), Q;
863
- }), p && (N?.(t), i((u) => u === t ? null : u)), p;
836
+ [T, y]
837
+ ), ae = S(
838
+ (e) => {
839
+ const t = F.current?.activeEditor;
840
+ if (!t) {
841
+ let s = !1;
842
+ return z((k) => {
843
+ if (!k.some((L) => L.id === e)) return k;
844
+ const U = k.filter((L) => L.id !== e);
845
+ return s = !0, y?.(U), U;
846
+ }), s && (x?.(e), O((k) => k === e ? null : k)), s;
864
847
  }
865
- let h = !1;
848
+ const v = p.find((s) => s.id === e)?.group;
849
+ let b = !1;
866
850
  try {
867
- h = r.commands.deleteStructuredContentById?.(t) ?? !1;
868
- } catch (p) {
869
- console.error(
870
- "[SuperDocTemplateBuilder] Delete command failed:",
871
- p
872
- );
851
+ b = t.commands.deleteStructuredContentById?.(e) ?? !1;
852
+ } catch {
853
+ b = !1;
854
+ }
855
+ let c = Q(t);
856
+ const E = c.some((s) => s.id === e);
857
+ if (!b && E && (c = c.filter((s) => s.id !== e)), v) {
858
+ const s = c.filter((k) => k.group === v);
859
+ if (s.length === 1) {
860
+ const k = s[0];
861
+ t.commands.updateStructuredContentById?.(k.id, {
862
+ attrs: { tag: void 0 }
863
+ }), c = Q(t);
864
+ }
873
865
  }
874
- let y = Re(r);
875
- const S = y.some((p) => p.id === t);
876
- !h && S && (y = y.filter((p) => p.id !== t));
877
866
  let C = !1;
878
- return V((p) => {
879
- if (Te(p, y))
880
- return p;
881
- const u = p.some((W) => W.id === t), Q = y.some((W) => W.id === t);
882
- return u && !Q && (C = !0), T?.(y), y;
883
- }), C && (N?.(t), i((p) => p === t ? null : p)), h || C;
867
+ return z((s) => {
868
+ if (ve(s, c))
869
+ return s;
870
+ const k = s.some((L) => L.id === e), U = c.some((L) => L.id === e);
871
+ return k && !U && (C = !0), y?.(c), c;
872
+ }), C && (x?.(e), O((s) => s === e ? null : s)), b || C;
884
873
  },
885
- [N, T]
886
- ), w = _(
887
- (t) => {
888
- if (!R.current?.activeEditor) return;
889
- R.current.activeEditor.commands.selectStructuredContentById?.(t), i(t);
890
- const h = v.find((y) => y.id === t);
891
- h && Y?.(h);
874
+ [x, y, p]
875
+ ), _ = S(
876
+ (e) => {
877
+ if (!F.current?.activeEditor) return;
878
+ F.current.activeEditor.commands.selectStructuredContentById?.(e), O(e);
879
+ const i = p.find((v) => v.id === e);
880
+ i && w?.(i);
892
881
  },
893
- [v, Y]
894
- ), G = _(
895
- (t) => {
896
- if (!t) return;
897
- const r = Re(t);
898
- V((h) => Te(h, r) ? h : (T?.(r), r));
882
+ [p, w]
883
+ ), ce = S(
884
+ (e) => {
885
+ if (!e) return;
886
+ const t = Q(e);
887
+ z((i) => ve(i, t) ? i : (y?.(t), t));
899
888
  },
900
- [T]
889
+ [y]
901
890
  );
902
- de(() => te.current ? ((async () => {
903
- const { SuperDoc: r } = await import("superdoc"), h = {
904
- selector: te.current,
905
- document: m?.source,
906
- documentMode: m?.mode || "editing",
907
- onReady: () => {
908
- if (y.activeEditor) {
909
- const S = y.activeEditor;
910
- S.on("update", ({ editor: C }) => {
911
- const { state: p } = C, { from: u } = p.selection;
912
- if (u >= q.length) {
913
- const pe = u - q.length;
914
- if (p.doc.textBetween(pe, u) === q) {
915
- const xe = C.view.coordsAtPos(u), ge = new DOMRect(xe.left, xe.top, 0, 0), be = () => {
916
- const le = R.current?.activeEditor;
917
- if (!le) return;
918
- const Fe = le.state.selection.from, Ne = le.state.tr.delete(pe, Fe);
919
- le.view.dispatch(Ne);
920
- };
921
- L.current = be, B.current = u, k(ge), E(!0), d(), H?.({
922
- position: { from: pe, to: u },
923
- bounds: ge,
924
- cleanup: be
925
- });
926
- return;
927
- }
928
- }
929
- if (!ne.current)
930
- return;
931
- if (B.current == null) {
932
- E(!1), d();
933
- return;
934
- }
935
- if (u < B.current) {
936
- E(!1), B.current = null, d();
937
- return;
938
- }
939
- const Q = p.doc.textBetween(
940
- B.current,
941
- u
942
- );
943
- f(Q);
944
- const W = C.view.coordsAtPos(u), Se = new DOMRect(W.left, W.top, 0, 0);
945
- k(Se);
946
- }), S.on("update", () => {
947
- G(S);
948
- }), G(S);
891
+ oe(() => se.current ? ((async () => {
892
+ const { SuperDoc: t } = await import("superdoc"), i = {
893
+ comments: !1,
894
+ ...$ && {
895
+ toolbar: {
896
+ selector: $.selector,
897
+ toolbarGroups: $.config.toolbarGroups || ["center"],
898
+ excludeItems: $.config.excludeItems || [],
899
+ ...$.config
949
900
  }
950
- I?.();
951
901
  }
952
- }, y = new r({
953
- ...h,
954
- ...X && {
955
- toolbar: X.selector,
956
- modules: {
957
- toolbar: {
958
- selector: X.selector,
959
- toolbarGroups: X.config.toolbarGroups || ["center"],
960
- excludeItems: X.config.excludeItems || [],
961
- ...X.config
902
+ }, v = () => {
903
+ if (b.activeEditor) {
904
+ const c = b.activeEditor;
905
+ c.on("update", ({ editor: E }) => {
906
+ const { state: C } = E, { from: s } = C.selection;
907
+ if (s >= te.length) {
908
+ const ue = s - te.length;
909
+ if (C.doc.textBetween(ue, s) === te) {
910
+ const me = E.view.coordsAtPos(s), he = Ce(new DOMRect(me.left, me.top, 0, 0)), be = () => {
911
+ const ne = F.current?.activeEditor;
912
+ if (!ne) return;
913
+ const De = ne.state.selection.from, Ne = ne.state.tr.delete(ue, De);
914
+ ne.view.dispatch(Ne);
915
+ };
916
+ M.current = be, W.current = s, B(he), D(!0), H(), G?.({
917
+ position: { from: ue, to: s },
918
+ bounds: he,
919
+ cleanup: be
920
+ });
921
+ return;
922
+ }
962
923
  }
963
- }
924
+ if (!fe.current)
925
+ return;
926
+ if (W.current == null) {
927
+ D(!1), H();
928
+ return;
929
+ }
930
+ if (s < W.current) {
931
+ D(!1), W.current = null, H();
932
+ return;
933
+ }
934
+ const k = C.doc.textBetween(W.current, s);
935
+ de(k);
936
+ const U = E.view.coordsAtPos(s), L = Ce(new DOMRect(U.left, U.top, 0, 0));
937
+ B(L);
938
+ }), c.on("update", () => {
939
+ ce(c);
940
+ }), ce(c);
964
941
  }
942
+ P?.();
943
+ }, b = new t({
944
+ selector: se.current,
945
+ document: g?.source,
946
+ documentMode: g?.mode || "editing",
947
+ modules: i,
948
+ toolbar: $?.selector,
949
+ onReady: v
965
950
  });
966
- R.current = y;
951
+ F.current = b;
967
952
  })(), () => {
968
- R.current && (typeof R.current.destroy == "function" && R.current.destroy(), R.current = null);
969
- }) : void 0, [
970
- m?.source,
971
- m?.mode,
972
- q,
973
- G,
974
- I,
975
- H,
976
- F
977
- ]);
978
- const fe = _(
979
- async (t) => {
980
- if (L.current && (L.current(), L.current = null), B.current = null, d(), t.id.startsWith("custom_") && D)
981
- try {
982
- const r = await D(t);
983
- if (r) {
984
- $("inline", {
985
- alias: r.label,
986
- category: r.category,
987
- metadata: r.metadata,
988
- defaultValue: r.defaultValue
989
- }), E(!1);
990
- return;
991
- }
992
- } catch (r) {
993
- console.error("Field creation failed:", r);
953
+ M.current = null, W.current = null;
954
+ const t = F.current;
955
+ t && typeof t.destroy == "function" && t.destroy(), F.current = null;
956
+ }) : void 0, [g?.source, g?.mode, te, ce, P, G, N]);
957
+ const ke = S(
958
+ async (e) => {
959
+ M.current && (M.current(), M.current = null), W.current = null, H();
960
+ const t = e.mode || "inline";
961
+ if (e.id.startsWith("custom_") && R) {
962
+ const i = await R(e);
963
+ if (i) {
964
+ const v = i.mode || t;
965
+ K(v, {
966
+ alias: i.label,
967
+ metadata: i.metadata,
968
+ defaultValue: i.defaultValue
969
+ }), D(!1);
970
+ return;
994
971
  }
995
- $("inline", {
996
- alias: t.label,
997
- category: t.category,
998
- metadata: t.metadata,
999
- defaultValue: t.defaultValue
1000
- }), E(!1);
972
+ }
973
+ K(t, {
974
+ alias: e.label,
975
+ metadata: e.metadata,
976
+ defaultValue: e.defaultValue
977
+ }), D(!1);
1001
978
  },
1002
- [$, D, d]
1003
- ), je = _(() => {
1004
- E(!1), B.current = null, d(), L.current && (L.current(), L.current = null);
1005
- }, [d]), we = _(() => {
1006
- if (!R.current?.activeEditor || v.length === 0)
1007
- return;
1008
- const t = v.findIndex(
1009
- (h) => h.id === P
1010
- ), r = t >= 0 ? (t + 1) % v.length : 0;
1011
- w(v[r].id);
1012
- }, [v, P, w]), Ce = _(() => {
1013
- if (!R.current?.activeEditor || v.length === 0)
1014
- return;
1015
- const t = v.findIndex(
1016
- (h) => h.id === P
1017
- ), r = t > 0 ? t - 1 : v.length - 1;
1018
- w(v[r].id);
1019
- }, [v, P, w]), _e = _(
1020
- async (t) => {
1021
- try {
1022
- await R.current?.export({
1023
- exportType: ["docx"],
1024
- exportedName: t?.fileName ? t?.fileName : "document"
1025
- });
1026
- } catch (r) {
1027
- throw console.error("Failed to export DOCX", r), r;
979
+ [K, R, H]
980
+ ), Se = S(
981
+ (e) => {
982
+ M.current && (M.current(), M.current = null), W.current = null, H();
983
+ const t = F.current?.activeEditor;
984
+ if (!t) return;
985
+ const i = t.helpers?.structuredContentCommands;
986
+ if (!i) return;
987
+ const v = e.group || `group-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`, b = i.createTagObject?.({
988
+ group: v
989
+ });
990
+ if ((e.mode || "inline") === "inline" ? t.commands.insertStructuredContentInline?.({
991
+ attrs: {
992
+ alias: e.alias,
993
+ tag: b
994
+ },
995
+ text: e.alias
996
+ }) : t.commands.insertStructuredContentBlock?.({
997
+ attrs: {
998
+ alias: e.alias,
999
+ tag: b
1000
+ },
1001
+ text: e.alias
1002
+ })) {
1003
+ e.group || Z(e.id, { tag: b }), D(!1);
1004
+ const C = Q(t);
1005
+ z(C), y?.(C);
1006
+ }
1007
+ },
1008
+ [Z, H, y]
1009
+ ), Te = S(() => {
1010
+ D(!1), W.current = null, H(), M.current && (M.current(), M.current = null);
1011
+ }, [H]), Ee = S(() => {
1012
+ if (!F.current?.activeEditor || p.length === 0) return;
1013
+ const e = p.findIndex((i) => i.id === V), t = e >= 0 ? (e + 1) % p.length : 0;
1014
+ _(p[t].id);
1015
+ }, [p, V, _]), Ie = S(() => {
1016
+ if (!F.current?.activeEditor || p.length === 0) return;
1017
+ const e = p.findIndex((i) => i.id === V), t = e > 0 ? e - 1 : p.length - 1;
1018
+ _(p[t].id);
1019
+ }, [p, V, _]), Me = S(
1020
+ async (e) => {
1021
+ const { fileName: t = "document", triggerDownload: i = !0 } = e || {}, v = await F.current?.export({
1022
+ exportType: ["docx"],
1023
+ exportedName: t,
1024
+ triggerDownload: i
1025
+ }), b = F.current?.activeEditor;
1026
+ if (b) {
1027
+ const c = Q(b);
1028
+ q?.({ fields: c, blob: i ? void 0 : v, fileName: t });
1028
1029
  }
1030
+ return v;
1029
1031
  },
1030
- []
1032
+ [q]
1031
1033
  );
1032
- Pe(b, () => ({
1033
- insertField: (t) => $("inline", t),
1034
- insertBlockField: (t) => $("block", t),
1035
- updateField: oe,
1036
- deleteField: g,
1037
- selectField: w,
1038
- nextField: we,
1039
- previousField: Ce,
1040
- getFields: () => v,
1041
- exportTemplate: _e
1034
+ Be(d, () => ({
1035
+ insertField: (e) => K("inline", e),
1036
+ insertBlockField: (e) => K("block", e),
1037
+ updateField: Z,
1038
+ deleteField: ae,
1039
+ selectField: _,
1040
+ nextField: Ee,
1041
+ previousField: Ie,
1042
+ getFields: () => p,
1043
+ exportTemplate: Me,
1044
+ getSuperDoc: () => F.current
1042
1045
  }));
1043
- const ke = o.component || Le, me = a.component || Be, X = $e(F);
1044
- return /* @__PURE__ */ n.jsxs(
1045
- "div",
1046
- {
1047
- className: `superdoc-template-builder ${J || ""}`,
1048
- style: O,
1049
- children: [
1050
- /* @__PURE__ */ n.jsxs("div", { style: { display: "flex", gap: "20px" }, children: [
1051
- a.position === "left" && /* @__PURE__ */ n.jsx("div", { className: "superdoc-template-builder-sidebar", children: /* @__PURE__ */ n.jsx(
1052
- me,
1053
- {
1054
- fields: v,
1055
- onSelect: (t) => w(t.id),
1056
- onDelete: g,
1057
- selectedFieldId: P || void 0
1058
- }
1059
- ) }),
1060
- /* @__PURE__ */ n.jsxs("div", { className: "superdoc-template-builder-document", style: { flex: 1 }, children: [
1061
- X?.renderDefaultContainer && /* @__PURE__ */ n.jsx(
1062
- "div",
1063
- {
1064
- id: "superdoc-toolbar",
1065
- className: "superdoc-template-builder-toolbar",
1066
- "data-testid": "template-builder-toolbar"
1067
- }
1068
- ),
1069
- /* @__PURE__ */ n.jsx(
1070
- "div",
1071
- {
1072
- ref: te,
1073
- className: "superdoc-template-builder-editor",
1074
- style: { height: K },
1075
- "data-testid": "template-builder-editor"
1076
- }
1077
- )
1078
- ] }),
1079
- a.position === "right" && /* @__PURE__ */ n.jsx("div", { className: "superdoc-template-builder-sidebar", children: /* @__PURE__ */ n.jsx(
1080
- me,
1081
- {
1082
- fields: v,
1083
- onSelect: (t) => w(t.id),
1084
- onDelete: g,
1085
- selectedFieldId: P || void 0
1086
- }
1087
- ) })
1088
- ] }),
1089
- /* @__PURE__ */ n.jsx(
1090
- ke,
1046
+ const Re = u.component || We, xe = a.component || Le, $ = Pe(N);
1047
+ return /* @__PURE__ */ o("div", { className: `superdoc-template-builder ${A || ""}`, style: X, children: [
1048
+ /* @__PURE__ */ o("div", { style: { display: "flex", gap: "20px" }, children: [
1049
+ a.position === "left" && /* @__PURE__ */ r("div", { className: "superdoc-template-builder-sidebar", children: /* @__PURE__ */ r(
1050
+ xe,
1051
+ {
1052
+ fields: p,
1053
+ onSelect: (e) => _(e.id),
1054
+ onDelete: ae,
1055
+ onUpdate: (e) => Z(e.id, e),
1056
+ selectedFieldId: V || void 0
1057
+ }
1058
+ ) }),
1059
+ /* @__PURE__ */ o("div", { className: "superdoc-template-builder-document", style: { flex: 1 }, children: [
1060
+ $?.renderDefaultContainer && /* @__PURE__ */ r(
1061
+ "div",
1091
1062
  {
1092
- isVisible: x,
1093
- position: j,
1094
- availableFields: c.available || [],
1095
- filteredFields: ee,
1096
- filterQuery: M,
1097
- allowCreate: c.allowCreate || !1,
1098
- onSelect: fe,
1099
- onClose: je,
1100
- onCreateField: D
1063
+ id: "superdoc-toolbar",
1064
+ className: "superdoc-template-builder-toolbar",
1065
+ "data-testid": "template-builder-toolbar"
1066
+ }
1067
+ ),
1068
+ /* @__PURE__ */ r(
1069
+ "div",
1070
+ {
1071
+ ref: se,
1072
+ className: "superdoc-template-builder-editor",
1073
+ style: { height: ie },
1074
+ "data-testid": "template-builder-editor"
1101
1075
  }
1102
1076
  )
1103
- ]
1104
- }
1105
- );
1077
+ ] }),
1078
+ a.position === "right" && /* @__PURE__ */ r("div", { className: "superdoc-template-builder-sidebar", children: /* @__PURE__ */ r(
1079
+ xe,
1080
+ {
1081
+ fields: p,
1082
+ onSelect: (e) => _(e.id),
1083
+ onDelete: ae,
1084
+ onUpdate: (e) => Z(e.id, e),
1085
+ selectedFieldId: V || void 0
1086
+ }
1087
+ ) })
1088
+ ] }),
1089
+ /* @__PURE__ */ r(
1090
+ Re,
1091
+ {
1092
+ isVisible: j,
1093
+ position: m,
1094
+ availableFields: l.available || [],
1095
+ filteredFields: ee,
1096
+ filterQuery: h,
1097
+ allowCreate: l.allowCreate || !1,
1098
+ onSelect: ke,
1099
+ onClose: Te,
1100
+ onCreateField: R,
1101
+ existingFields: p,
1102
+ onSelectExisting: Se
1103
+ }
1104
+ )
1105
+ ] });
1106
1106
  });
1107
- We.displayName = "SuperDocTemplateBuilder";
1107
+ je.displayName = "SuperDocTemplateBuilder";
1108
1108
  export {
1109
- Be as FieldList,
1110
- Le as FieldMenu,
1111
- We as default
1109
+ Le as FieldList,
1110
+ We as FieldMenu,
1111
+ je as default
1112
1112
  };