vobi_document 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +23 -6
  2. package/dist/blocks.cjs +108 -0
  3. package/dist/blocks.cjs.map +1 -0
  4. package/dist/blocks.d.cts +214 -0
  5. package/dist/blocks.d.ts +214 -0
  6. package/dist/blocks.js +7 -0
  7. package/dist/blocks.js.map +1 -0
  8. package/dist/catalogContext-DenbX-OW.d.cts +15 -0
  9. package/dist/catalogContext-HGMU-w_4.d.ts +15 -0
  10. package/dist/chunk-26DSIOEY.cjs +68 -0
  11. package/dist/chunk-26DSIOEY.cjs.map +1 -0
  12. package/dist/chunk-3FTKM37U.cjs +1354 -0
  13. package/dist/chunk-3FTKM37U.cjs.map +1 -0
  14. package/dist/chunk-CZB7F2LA.js +90 -0
  15. package/dist/chunk-CZB7F2LA.js.map +1 -0
  16. package/dist/chunk-ERKU5FDV.cjs +407 -0
  17. package/dist/chunk-ERKU5FDV.cjs.map +1 -0
  18. package/dist/chunk-FKX46GKE.cjs +36 -0
  19. package/dist/chunk-FKX46GKE.cjs.map +1 -0
  20. package/dist/chunk-GR76U6FP.cjs +194 -0
  21. package/dist/chunk-GR76U6FP.cjs.map +1 -0
  22. package/dist/chunk-I22MGPXO.cjs +117 -0
  23. package/dist/chunk-I22MGPXO.cjs.map +1 -0
  24. package/dist/chunk-JYSA6IM5.js +1327 -0
  25. package/dist/chunk-JYSA6IM5.js.map +1 -0
  26. package/dist/chunk-L5FXGEKX.cjs +114 -0
  27. package/dist/chunk-L5FXGEKX.cjs.map +1 -0
  28. package/dist/chunk-LNBAFOVK.cjs +14 -0
  29. package/dist/chunk-LNBAFOVK.cjs.map +1 -0
  30. package/dist/chunk-M6FQVH76.js +824 -0
  31. package/dist/chunk-M6FQVH76.js.map +1 -0
  32. package/dist/chunk-MUSSJOOA.js +109 -0
  33. package/dist/chunk-MUSSJOOA.js.map +1 -0
  34. package/dist/chunk-N3IDPT3B.js +182 -0
  35. package/dist/chunk-N3IDPT3B.js.map +1 -0
  36. package/dist/chunk-OJZJJEJX.js +904 -0
  37. package/dist/chunk-OJZJJEJX.js.map +1 -0
  38. package/dist/chunk-PLQNNXS2.js +382 -0
  39. package/dist/chunk-PLQNNXS2.js.map +1 -0
  40. package/dist/chunk-QJ5W5EED.cjs +94 -0
  41. package/dist/chunk-QJ5W5EED.cjs.map +1 -0
  42. package/dist/chunk-QYBWIJXZ.js +98 -0
  43. package/dist/chunk-QYBWIJXZ.js.map +1 -0
  44. package/dist/chunk-RO3Y2MSU.cjs +844 -0
  45. package/dist/chunk-RO3Y2MSU.cjs.map +1 -0
  46. package/dist/chunk-RZOR3HOA.cjs +933 -0
  47. package/dist/chunk-RZOR3HOA.cjs.map +1 -0
  48. package/dist/chunk-SOIYSSU3.js +108 -0
  49. package/dist/chunk-SOIYSSU3.js.map +1 -0
  50. package/dist/chunk-SP5LCPDG.cjs +119 -0
  51. package/dist/chunk-SP5LCPDG.cjs.map +1 -0
  52. package/dist/chunk-W52ULJCW.js +61 -0
  53. package/dist/chunk-W52ULJCW.js.map +1 -0
  54. package/dist/chunk-ZOJBDFKU.js +12 -0
  55. package/dist/chunk-ZOJBDFKU.js.map +1 -0
  56. package/dist/editor.cjs +60 -0
  57. package/dist/editor.cjs.map +1 -0
  58. package/dist/editor.d.cts +190 -0
  59. package/dist/editor.d.ts +190 -0
  60. package/dist/editor.js +7 -0
  61. package/dist/editor.js.map +1 -0
  62. package/dist/index.cjs +436 -3753
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +72 -7892
  65. package/dist/index.d.ts +72 -7892
  66. package/dist/index.js +22 -3662
  67. package/dist/index.js.map +1 -1
  68. package/dist/messages-Bi0JxNIH.d.cts +23 -0
  69. package/dist/messages-Bi0JxNIH.d.ts +23 -0
  70. package/dist/print.cjs +354 -0
  71. package/dist/print.cjs.map +1 -0
  72. package/dist/print.d.cts +43 -0
  73. package/dist/print.d.ts +43 -0
  74. package/dist/print.js +336 -0
  75. package/dist/print.js.map +1 -0
  76. package/dist/puck.cjs +8 -8
  77. package/dist/puck.cjs.map +1 -1
  78. package/dist/render.cjs +72 -0
  79. package/dist/render.cjs.map +1 -0
  80. package/dist/render.d.cts +93 -0
  81. package/dist/render.d.ts +93 -0
  82. package/dist/render.js +7 -0
  83. package/dist/render.js.map +1 -0
  84. package/dist/theme-BuEFpQeZ.d.cts +112 -0
  85. package/dist/theme-BuEFpQeZ.d.ts +112 -0
  86. package/dist/types-BgIugNWW.d.cts +25 -0
  87. package/dist/types-BgIugNWW.d.ts +25 -0
  88. package/dist/types-CvKSS1Sy.d.cts +38 -0
  89. package/dist/types-CvKSS1Sy.d.ts +38 -0
  90. package/dist/variables.cjs +111 -0
  91. package/dist/variables.cjs.map +1 -0
  92. package/dist/variables.d.cts +106 -0
  93. package/dist/variables.d.ts +106 -0
  94. package/dist/variables.js +6 -0
  95. package/dist/variables.js.map +1 -0
  96. package/package.json +39 -8
@@ -0,0 +1,1354 @@
1
+ 'use strict';
2
+
3
+ var chunkL5FXGEKX_cjs = require('./chunk-L5FXGEKX.cjs');
4
+ var chunkERKU5FDV_cjs = require('./chunk-ERKU5FDV.cjs');
5
+ var chunkQJ5W5EED_cjs = require('./chunk-QJ5W5EED.cjs');
6
+ var chunkSP5LCPDG_cjs = require('./chunk-SP5LCPDG.cjs');
7
+ var e = require('react');
8
+ var core = require('@puckeditor/core');
9
+ var zod = require('zod');
10
+ var styled3 = require('styled-components');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var e__default = /*#__PURE__*/_interopDefault(e);
16
+ var styled3__default = /*#__PURE__*/_interopDefault(styled3);
17
+
18
+ // src/editor/dictionary.ts
19
+ var ptBrDictionary = {
20
+ "header-publish": "Publicar",
21
+ "header-undo": "desfazer",
22
+ "header-redo": "refazer",
23
+ "header-toggle-leftsidebar": "Alternar barra lateral esquerda",
24
+ "header-toggle-rightsidebar": "Alternar barra lateral direita",
25
+ "header-toggle-menubar": "Alternar barra de menu",
26
+ "action-selectparent": "Selecionar bloco pai",
27
+ "action-duplicate": "Duplicar",
28
+ "action-delete": "Excluir",
29
+ "label-page": "P\xE1gina",
30
+ "label-component": "Bloco",
31
+ "outline-empty": "Nenhum item",
32
+ "outline-item-collapse": "Recolher",
33
+ "outline-item-expand": "Expandir",
34
+ "outline-header-title": "Estrutura",
35
+ "outline-header-collapseall": "Recolher tudo",
36
+ "outline-item-duplicate": "Duplicar",
37
+ "outline-item-delete": "Excluir",
38
+ "drawer-category-collapse": "Recolher {title}",
39
+ "drawer-category-expand": "Expandir {title}",
40
+ "drawer-category-other": "Outros",
41
+ "canvas-noconfig": "Sem configura\xE7\xE3o para {type}",
42
+ "field-readonly": "Somente leitura",
43
+ "field-arrayitem-summary": "Item #{index}",
44
+ "field-arrayitem-duplicate": "Duplicar",
45
+ "field-arrayitem-delete": "Excluir",
46
+ "field-external-selectdata": "Selecionar dados",
47
+ "field-external-search": "Buscar",
48
+ "field-external-togglefilters": "Alternar filtros",
49
+ "field-external-item": "Item externo",
50
+ "field-external-result-singular": "{count} resultado",
51
+ "field-external-result-plural": "{count} resultados",
52
+ "field-richtext-bold": "Negrito",
53
+ "field-richtext-italic": "It\xE1lico",
54
+ "field-richtext-underline": "Sublinhado",
55
+ "field-richtext-strikethrough": "Riscado",
56
+ "field-richtext-blockquote": "Cita\xE7\xE3o",
57
+ "field-richtext-code-inline": "C\xF3digo em linha",
58
+ "field-richtext-code-block": "Bloco de c\xF3digo",
59
+ "field-richtext-list-bullet": "Lista com marcadores",
60
+ "field-richtext-list-ordered": "Lista numerada",
61
+ "field-richtext-horizontalrule": "Linha horizontal",
62
+ "field-richtext-align-left": "Alinhar \xE0 esquerda",
63
+ "field-richtext-align-center": "Centralizar",
64
+ "field-richtext-align-right": "Alinhar \xE0 direita",
65
+ "field-richtext-align-justify": "Justificar",
66
+ "field-richtext-select": "Selecionar",
67
+ "field-richtext-headingselect-1": "T\xEDtulo 1",
68
+ "field-richtext-headingselect-2": "T\xEDtulo 2",
69
+ "field-richtext-headingselect-3": "T\xEDtulo 3",
70
+ "field-richtext-headingselect-4": "T\xEDtulo 4",
71
+ "field-richtext-headingselect-5": "T\xEDtulo 5",
72
+ "field-richtext-headingselect-6": "T\xEDtulo 6",
73
+ "field-richtext-alignselect-left": "Esquerda",
74
+ "field-richtext-alignselect-center": "Centro",
75
+ "field-richtext-alignselect-right": "Direita",
76
+ "field-richtext-alignselect-justify": "Justificado",
77
+ "field-richtext-listselect-bullet": "Lista com marcadores",
78
+ "field-richtext-listselect-ordered": "Lista numerada",
79
+ "viewport-zoom-in": "Aumentar zoom",
80
+ "viewport-zoom-out": "Diminuir zoom",
81
+ "viewport-zoom-auto": "{zoom}% (autom\xE1tico)",
82
+ "viewport-toggle-menu": "Alternar menu de visualiza\xE7\xE3o",
83
+ "viewport-switch": "Mudar para a visualiza\xE7\xE3o {label}",
84
+ "viewport-switch-default": "Mudar visualiza\xE7\xE3o",
85
+ "plugin-blocks": "Blocos",
86
+ "plugin-outline": "Estrutura",
87
+ "plugin-fields": "Campos",
88
+ "plugin-components": "Componentes",
89
+ "layout-maximize": "maximizar",
90
+ "layout-minimize": "minimizar",
91
+ "loader-loading": "carregando"
92
+ };
93
+
94
+ // src/editor/modifierStateShim.ts
95
+ var INSTALLED = "__dgModifierStateShim";
96
+ function installModifierStateShim() {
97
+ if (typeof Event === "undefined") return;
98
+ const proto = Event.prototype;
99
+ if (proto[INSTALLED]) return;
100
+ Object.defineProperty(Event.prototype, "getModifierState", {
101
+ value: () => false,
102
+ configurable: true,
103
+ writable: true
104
+ });
105
+ proto[INSTALLED] = true;
106
+ }
107
+
108
+ // src/editor/editorApi.ts
109
+ var createEditorApi = (dispatch) => ({
110
+ setData: (updater) => dispatch({
111
+ type: "setData",
112
+ data: typeof updater === "function" ? updater : () => updater
113
+ })
114
+ });
115
+ var assignEditorApiRef = (ref, api) => {
116
+ if (!ref) return;
117
+ if (typeof ref === "function") ref(api);
118
+ else ref.current = api;
119
+ };
120
+
121
+ // src/editor/EditorApiBridge.tsx
122
+ function EditorApiBridge({ apiRef, children }) {
123
+ const getPuck = core.useGetPuck();
124
+ e.useEffect(() => {
125
+ assignEditorApiRef(
126
+ apiRef,
127
+ createEditorApi((action) => getPuck().dispatch(action))
128
+ );
129
+ return () => assignEditorApiRef(apiRef, null);
130
+ }, [apiRef, getPuck]);
131
+ return e.createElement(e.Fragment, null, children);
132
+ }
133
+
134
+ // src/editor/headerApi.ts
135
+ function headerApiFromHistory(history, extras) {
136
+ return {
137
+ undo: () => history.back(),
138
+ redo: () => history.forward(),
139
+ canUndo: history.hasPast,
140
+ canRedo: history.hasFuture,
141
+ openSettings: extras.openSettings,
142
+ openPreview: extras.openPreview,
143
+ theme: extras.theme
144
+ };
145
+ }
146
+ var usePuckState = core.createUsePuck();
147
+ var pageFormatSchema = zod.z.enum(["A4", "A5", "A3", "Letter", "Legal"]);
148
+ var marginsSchema = zod.z.object({
149
+ top: zod.z.number(),
150
+ right: zod.z.number(),
151
+ bottom: zod.z.number(),
152
+ left: zod.z.number()
153
+ }).partial();
154
+ var coverFieldsSchema = zod.z.object({
155
+ title: zod.z.string().optional(),
156
+ subtitle: zod.z.string().optional(),
157
+ date: zod.z.string().optional(),
158
+ preparedFor: zod.z.string().optional(),
159
+ presentedBy: zod.z.string().optional(),
160
+ imageUrl: zod.z.string().optional()
161
+ }).strict();
162
+ var headerConfigSchema = zod.z.object({
163
+ enabled: zod.z.boolean().default(false),
164
+ background: zod.z.string().default("#FFFFFF"),
165
+ color: zod.z.string().default("#3F4759"),
166
+ logoPosition: zod.z.enum(["left", "right"]).default("right"),
167
+ info: zod.z.object({
168
+ companyName: zod.z.boolean(),
169
+ cnpj: zod.z.boolean(),
170
+ phone: zod.z.boolean(),
171
+ email: zod.z.boolean(),
172
+ address: zod.z.boolean()
173
+ }).partial().strict().optional()
174
+ }).strict();
175
+ var footerConfigSchema = zod.z.object({
176
+ enabled: zod.z.boolean().default(false),
177
+ pageNumber: zod.z.boolean().default(true),
178
+ background: zod.z.string().default("#FFFFFF"),
179
+ color: zod.z.string().default("#3F4759"),
180
+ alignment: zod.z.enum(["left", "center", "right"]).default("center"),
181
+ info: zod.z.object({
182
+ email: zod.z.boolean(),
183
+ phone: zod.z.boolean(),
184
+ instagram: zod.z.boolean(),
185
+ twitter: zod.z.boolean(),
186
+ address: zod.z.boolean(),
187
+ site: zod.z.boolean(),
188
+ facebook: zod.z.boolean(),
189
+ linkedin: zod.z.boolean()
190
+ }).partial().strict().optional()
191
+ }).strict();
192
+ var themeSchema = zod.z.object({
193
+ documentFont: zod.z.string().optional(),
194
+ page: zod.z.object({
195
+ format: pageFormatSchema.default("A4"),
196
+ orientation: zod.z.enum(["portrait", "landscape"]).default("portrait"),
197
+ margins: marginsSchema.optional()
198
+ }).strict().optional(),
199
+ colors: zod.z.object({
200
+ brand: zod.z.string(),
201
+ text: zod.z.string(),
202
+ background: zod.z.string()
203
+ }).partial().strict().optional(),
204
+ logo: zod.z.object({
205
+ key: zod.z.string().optional(),
206
+ url: zod.z.string().optional()
207
+ }).strict().optional(),
208
+ header: headerConfigSchema.optional(),
209
+ footer: footerConfigSchema.optional(),
210
+ watermark: zod.z.object({
211
+ text: zod.z.string().optional(),
212
+ imageKey: zod.z.string().optional(),
213
+ opacity: zod.z.number().min(0).max(1).optional()
214
+ }).strict().optional()
215
+ }).strict();
216
+
217
+ // src/surface/resolveTheme.ts
218
+ var DEFAULT_DOCUMENT_FONT_ID = "inter";
219
+ var DEFAULT_HEADER_CONFIG = headerConfigSchema.parse({});
220
+ var DEFAULT_FOOTER_CONFIG = footerConfigSchema.parse({});
221
+ function resolveTheme(theme = {}) {
222
+ return {
223
+ ...theme,
224
+ documentFont: theme.documentFont ?? DEFAULT_DOCUMENT_FONT_ID,
225
+ colors: { ...chunkERKU5FDV_cjs.DEFAULT_DOCUMENT_COLORS, ...theme.colors },
226
+ page: {
227
+ format: "A4",
228
+ orientation: "portrait",
229
+ ...theme.page,
230
+ margins: { ...chunkERKU5FDV_cjs.DEFAULT_PAGE_MARGINS, ...theme.page?.margins }
231
+ },
232
+ header: { ...DEFAULT_HEADER_CONFIG, ...theme.header },
233
+ footer: { ...DEFAULT_FOOTER_CONFIG, ...theme.footer }
234
+ };
235
+ }
236
+ function u() {
237
+ return (u = Object.assign || function(e2) {
238
+ for (var r2 = 1; r2 < arguments.length; r2++) {
239
+ var n2 = arguments[r2];
240
+ for (var t2 in n2) Object.prototype.hasOwnProperty.call(n2, t2) && (e2[t2] = n2[t2]);
241
+ }
242
+ return e2;
243
+ }).apply(this, arguments);
244
+ }
245
+ function c(e2, r2) {
246
+ if (null == e2) return {};
247
+ var n2, t2, o2 = {}, a2 = Object.keys(e2);
248
+ for (t2 = 0; t2 < a2.length; t2++) r2.indexOf(n2 = a2[t2]) >= 0 || (o2[n2] = e2[n2]);
249
+ return o2;
250
+ }
251
+ function i(e2) {
252
+ var n2 = e.useRef(e2), t2 = e.useRef(function(e3) {
253
+ n2.current && n2.current(e3);
254
+ });
255
+ return n2.current = e2, t2.current;
256
+ }
257
+ var s = function(e2, r2, n2) {
258
+ return void 0 === r2 && (r2 = 0), void 0 === n2 && (n2 = 1), e2 > n2 ? n2 : e2 < r2 ? r2 : e2;
259
+ };
260
+ var f = function(e2) {
261
+ return "touches" in e2;
262
+ };
263
+ var v = function(e2) {
264
+ return e2 && e2.ownerDocument.defaultView || self;
265
+ };
266
+ var d = function(e2, r2, n2) {
267
+ var t2 = e2.getBoundingClientRect(), o2 = f(r2) ? (function(e3, r3) {
268
+ for (var n3 = 0; n3 < e3.length; n3++) if (e3[n3].identifier === r3) return e3[n3];
269
+ return e3[0];
270
+ })(r2.touches, n2) : r2;
271
+ return { left: s((o2.pageX - (t2.left + v(e2).pageXOffset)) / t2.width), top: s((o2.pageY - (t2.top + v(e2).pageYOffset)) / t2.height) };
272
+ };
273
+ var h = function(e2) {
274
+ !f(e2) && e2.preventDefault();
275
+ };
276
+ var g = e__default.default.memo(function(o2) {
277
+ var a2 = o2.onMove, l2 = o2.onKey, s2 = o2.onEnd, g2 = c(o2, ["onMove", "onKey", "onEnd"]), m2 = e.useRef(null), p2 = i(a2), b2 = i(l2), _2 = i(s2), E2 = e.useRef(null), C2 = e.useRef(false), x = e.useMemo(function() {
278
+ var e2 = function(e3) {
279
+ h(e3), (f(e3) ? e3.touches.length > 0 : e3.buttons > 0) && m2.current ? p2(d(m2.current, e3, E2.current)) : (n2(false), _2());
280
+ }, r2 = function() {
281
+ n2(false), _2();
282
+ };
283
+ function n2(n3) {
284
+ var t2 = C2.current, o3 = v(m2.current), a3 = n3 ? o3.addEventListener : o3.removeEventListener;
285
+ a3(t2 ? "touchmove" : "mousemove", e2), a3(t2 ? "touchend" : "mouseup", r2);
286
+ }
287
+ return [function(e3) {
288
+ var r3 = e3.nativeEvent, t2 = m2.current;
289
+ if (t2 && (h(r3), !(function(e4, r4) {
290
+ return r4 && !f(e4);
291
+ })(r3, C2.current) && t2)) {
292
+ if (f(r3)) {
293
+ C2.current = true;
294
+ var o3 = r3.changedTouches || [];
295
+ o3.length && (E2.current = o3[0].identifier);
296
+ }
297
+ t2.focus(), p2(d(t2, r3, E2.current)), n2(true);
298
+ }
299
+ }, function(e3) {
300
+ var r3 = e3.which || e3.keyCode;
301
+ r3 < 37 || r3 > 40 || (e3.preventDefault(), b2({ left: 39 === r3 ? 0.05 : 37 === r3 ? -0.05 : 0, top: 40 === r3 ? 0.05 : 38 === r3 ? -0.05 : 0 }));
302
+ }, function(e3) {
303
+ var r3 = e3.which || e3.keyCode;
304
+ r3 >= 37 && r3 <= 40 && _2();
305
+ }, n2];
306
+ }, [b2, p2, _2]), H = x[0], M = x[1], N = x[2], w2 = x[3];
307
+ return e.useEffect(function() {
308
+ return w2;
309
+ }, [w2]), e__default.default.createElement("div", u({}, g2, { onTouchStart: H, onMouseDown: H, className: "react-colorful__interactive", ref: m2, onKeyDown: M, onKeyUp: N, tabIndex: 0, role: "slider" }));
310
+ });
311
+ var m = function(e2) {
312
+ return e2.filter(Boolean).join(" ");
313
+ };
314
+ var p = function(r2) {
315
+ var n2 = r2.color, t2 = r2.left, o2 = r2.top, a2 = void 0 === o2 ? 0.5 : o2, l2 = m(["react-colorful__pointer", r2.className]);
316
+ return e__default.default.createElement("div", { className: l2, style: { top: 100 * a2 + "%", left: 100 * t2 + "%" } }, e__default.default.createElement("div", { className: "react-colorful__pointer-fill", style: { backgroundColor: n2 } }));
317
+ };
318
+ var b = function(e2, r2, n2) {
319
+ return void 0 === r2 && (r2 = 0), void 0 === n2 && (n2 = Math.pow(10, r2)), Math.round(n2 * e2) / n2;
320
+ };
321
+ var E = function(e2) {
322
+ return L(C(e2));
323
+ };
324
+ var C = function(e2) {
325
+ return "#" === e2[0] && (e2 = e2.substring(1)), e2.length < 6 ? { r: parseInt(e2[0] + e2[0], 16), g: parseInt(e2[1] + e2[1], 16), b: parseInt(e2[2] + e2[2], 16), a: 4 === e2.length ? b(parseInt(e2[3] + e2[3], 16) / 255, 2) : 1 } : { r: parseInt(e2.substring(0, 2), 16), g: parseInt(e2.substring(2, 4), 16), b: parseInt(e2.substring(4, 6), 16), a: 8 === e2.length ? b(parseInt(e2.substring(6, 8), 16) / 255, 2) : 1 };
326
+ };
327
+ var w = function(e2) {
328
+ return D(I(e2));
329
+ };
330
+ var y = function(e2) {
331
+ var r2 = e2.s, n2 = e2.v, t2 = e2.a, o2 = (200 - r2) * n2 / 100;
332
+ return { h: b(e2.h), s: b(o2 > 0 && o2 < 200 ? r2 * n2 / 100 / (o2 <= 100 ? o2 : 200 - o2) * 100 : 0), l: b(o2 / 2), a: b(t2, 2) };
333
+ };
334
+ var q = function(e2) {
335
+ var r2 = y(e2);
336
+ return "hsl(" + r2.h + ", " + r2.s + "%, " + r2.l + "%)";
337
+ };
338
+ var I = function(e2) {
339
+ var r2 = e2.h, n2 = e2.s, t2 = e2.v, o2 = e2.a;
340
+ r2 = r2 / 360 * 6, n2 /= 100, t2 /= 100;
341
+ var a2 = Math.floor(r2), l2 = t2 * (1 - n2), u2 = t2 * (1 - (r2 - a2) * n2), c2 = t2 * (1 - (1 - r2 + a2) * n2), i2 = a2 % 6;
342
+ return { r: b(255 * [t2, u2, l2, l2, c2, t2][i2]), g: b(255 * [c2, t2, t2, u2, l2, l2][i2]), b: b(255 * [l2, l2, c2, t2, t2, u2][i2]), a: b(o2, 2) };
343
+ };
344
+ var B = function(e2) {
345
+ var r2 = e2.toString(16);
346
+ return r2.length < 2 ? "0" + r2 : r2;
347
+ };
348
+ var D = function(e2) {
349
+ var r2 = e2.r, n2 = e2.g, t2 = e2.b, o2 = e2.a, a2 = o2 < 1 ? B(b(255 * o2)) : "";
350
+ return "#" + B(r2) + B(n2) + B(t2) + a2;
351
+ };
352
+ var L = function(e2) {
353
+ var r2 = e2.r, n2 = e2.g, t2 = e2.b, o2 = e2.a, a2 = Math.max(r2, n2, t2), l2 = a2 - Math.min(r2, n2, t2), u2 = l2 ? a2 === r2 ? (n2 - t2) / l2 : a2 === n2 ? 2 + (t2 - r2) / l2 : 4 + (r2 - n2) / l2 : 0;
354
+ return { h: b(60 * (u2 < 0 ? u2 + 6 : u2)), s: b(a2 ? l2 / a2 * 100 : 0), v: b(a2 / 255 * 100), a: o2 };
355
+ };
356
+ var S = e__default.default.memo(function(r2) {
357
+ var n2 = r2.hue, t2 = r2.onChange, o2 = r2.onChangeEnd, a2 = m(["react-colorful__hue", r2.className]);
358
+ return e__default.default.createElement("div", { className: a2 }, e__default.default.createElement(g, { onMove: function(e2) {
359
+ t2({ h: 360 * e2.left });
360
+ }, onKey: function(e2) {
361
+ t2({ h: s(n2 + 360 * e2.left, 0, 360) });
362
+ }, onEnd: o2, "aria-label": "Hue", "aria-valuenow": b(n2), "aria-valuemax": "360", "aria-valuemin": "0" }, e__default.default.createElement(p, { className: "react-colorful__hue-pointer", left: n2 / 360, color: q({ h: n2, s: 100, v: 100, a: 1 }) })));
363
+ });
364
+ var T = e__default.default.memo(function(r2) {
365
+ var n2 = r2.hsva, t2 = r2.onChange, o2 = r2.onChangeEnd, a2 = { backgroundColor: q({ h: n2.h, s: 100, v: 100, a: 1 }) };
366
+ return e__default.default.createElement("div", { className: "react-colorful__saturation", style: a2 }, e__default.default.createElement(g, { onMove: function(e2) {
367
+ t2({ s: 100 * e2.left, v: 100 - 100 * e2.top });
368
+ }, onKey: function(e2) {
369
+ t2({ s: s(n2.s + 100 * e2.left, 0, 100), v: s(n2.v - 100 * e2.top, 0, 100) });
370
+ }, onEnd: o2, "aria-label": "Color", "aria-valuetext": "Saturation " + b(n2.s) + "%, Brightness " + b(n2.v) + "%" }, e__default.default.createElement(p, { className: "react-colorful__saturation-pointer", top: 1 - n2.v / 100, left: n2.s / 100, color: q(n2) })));
371
+ });
372
+ var F = function(e2, r2) {
373
+ if (e2 === r2) return true;
374
+ for (var n2 in e2) if (e2[n2] !== r2[n2]) return false;
375
+ return true;
376
+ };
377
+ var X = function(e2, r2) {
378
+ return e2.toLowerCase() === r2.toLowerCase() || F(C(e2), C(r2));
379
+ };
380
+ function Y(e2, n2, l2, u2) {
381
+ var c2 = i(l2), s2 = i(u2), f2 = e.useState(function() {
382
+ return e2.toHsva(n2);
383
+ }), v2 = f2[0], d2 = f2[1], h2 = e.useRef({ color: n2, hsva: v2 }), g2 = e.useRef(false);
384
+ e.useEffect(function() {
385
+ if (!e2.equal(n2, h2.current.color)) {
386
+ var r2 = e2.toHsva(n2);
387
+ h2.current = { hsva: r2, color: n2 }, d2(r2), g2.current = false;
388
+ }
389
+ }, [n2, e2]), e.useEffect(function() {
390
+ var r2;
391
+ F(v2, h2.current.hsva) || e2.equal(r2 = e2.fromHsva(v2), h2.current.color) || (h2.current = { hsva: v2, color: r2 }, c2(r2), g2.current = true);
392
+ }, [v2, e2, c2]);
393
+ var m2 = e.useCallback(function(e3) {
394
+ d2(function(r2) {
395
+ return Object.assign({}, r2, e3);
396
+ });
397
+ }, []), p2 = e.useCallback(function() {
398
+ g2.current && (g2.current = false, s2(h2.current.color));
399
+ }, [s2]);
400
+ return [v2, m2, p2];
401
+ }
402
+ var U = "undefined" != typeof window ? e.useLayoutEffect : e.useEffect;
403
+ var V = function() {
404
+ return ("undefined" != typeof __webpack_nonce__ ? __webpack_nonce__ : void 0);
405
+ };
406
+ var G = /* @__PURE__ */ new Map();
407
+ var J = function(e2) {
408
+ U(function() {
409
+ var r2 = e2.current ? e2.current.ownerDocument : document;
410
+ if (void 0 !== r2 && !G.has(r2)) {
411
+ var n2 = r2.createElement("style");
412
+ n2.innerHTML = `.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill-opacity=".05"><path d="M8 0h8v8H8zM0 8h8v8H0z"/></svg>')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`, G.set(r2, n2);
413
+ var t2 = V();
414
+ t2 && n2.setAttribute("nonce", t2), r2.head.appendChild(n2);
415
+ }
416
+ }, []);
417
+ };
418
+ var Q = function(n2) {
419
+ var t2 = n2.className, o2 = n2.colorModel, a2 = n2.color, l2 = void 0 === a2 ? o2.defaultColor : a2, i2 = n2.onChange, s2 = n2.onChangeEnd, f2 = c(n2, ["className", "colorModel", "color", "onChange", "onChangeEnd"]), v2 = e.useRef(null);
420
+ J(v2);
421
+ var d2 = Y(o2, l2, i2, s2), h2 = d2[0], g2 = d2[1], p2 = d2[2], b2 = m(["react-colorful", t2]);
422
+ return e__default.default.createElement("div", u({}, f2, { ref: v2, className: b2 }), e__default.default.createElement(T, { hsva: h2, onChange: g2, onChangeEnd: p2 }), e__default.default.createElement(S, { hue: h2.h, onChange: g2, onChangeEnd: p2, className: "react-colorful__last-control" }));
423
+ };
424
+ var W = { defaultColor: "000", toHsva: E, fromHsva: function(e2) {
425
+ return w({ h: e2.h, s: e2.s, v: e2.v, a: 1 });
426
+ }, equal: X };
427
+ var Z = function(r2) {
428
+ return e__default.default.createElement(Q, u({}, r2, { colorModel: W }));
429
+ };
430
+
431
+ // src/editor/colorPicker/color.ts
432
+ var HEX_RE = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
433
+ function normalizeHex(input) {
434
+ const withHash = input.startsWith("#") ? input : `#${input}`;
435
+ if (!HEX_RE.test(withHash)) return null;
436
+ if (withHash.length === 7) return withHash.toUpperCase();
437
+ const [r2, g2, b2] = withHash.slice(1);
438
+ return `#${r2}${r2}${g2}${g2}${b2}${b2}`.toUpperCase();
439
+ }
440
+ function hexToRgb(hex) {
441
+ const full = normalizeHex(hex) ?? "#000000";
442
+ return {
443
+ r: parseInt(full.slice(1, 3), 16),
444
+ g: parseInt(full.slice(3, 5), 16),
445
+ b: parseInt(full.slice(5, 7), 16)
446
+ };
447
+ }
448
+ function rgbToHex(r2, g2, b2) {
449
+ const channel = (value) => Math.max(0, Math.min(255, Math.round(value))).toString(16).padStart(2, "0");
450
+ return `#${channel(r2)}${channel(g2)}${channel(b2)}`.toUpperCase();
451
+ }
452
+ var Panel = styled3__default.default.div`
453
+ width: 100%;
454
+
455
+ .react-colorful {
456
+ width: 100%;
457
+ height: 160px;
458
+ }
459
+
460
+ .react-colorful__saturation {
461
+ border-radius: 8px;
462
+ border-bottom: none;
463
+ }
464
+
465
+ .react-colorful__hue {
466
+ height: 10px;
467
+ margin-top: 10px;
468
+ border-radius: 5px;
469
+ }
470
+
471
+ .react-colorful__pointer {
472
+ width: 18px;
473
+ height: 18px;
474
+ border: 3px solid #fff;
475
+ }
476
+
477
+ .react-colorful__hue-pointer {
478
+ width: 14px;
479
+ height: 14px;
480
+ }
481
+ `;
482
+ var Fields = styled3__default.default.div`
483
+ display: grid;
484
+ grid-template-columns: 1.8fr 1fr 1fr 1fr;
485
+ gap: 6px;
486
+ margin-top: 12px;
487
+ `;
488
+ var FieldColumn = styled3__default.default.label`
489
+ display: flex;
490
+ flex-direction: column;
491
+ gap: 4px;
492
+ font-size: 11px;
493
+ font-weight: 600;
494
+ color: #3f4759;
495
+ `;
496
+ var FieldInput = styled3__default.default.input`
497
+ width: 100%;
498
+ padding: 6px 4px;
499
+ border: 1px solid #e5e7eb;
500
+ border-radius: 6px;
501
+ font-size: 12px;
502
+ text-align: center;
503
+ color: #3f4759;
504
+ `;
505
+ var CHANNELS = [
506
+ { key: "r", label: "R" },
507
+ { key: "g", label: "G" },
508
+ { key: "b", label: "B" }
509
+ ];
510
+ function ColorPickerPanel({ value, onChange, debounceMs = 300 }) {
511
+ const [draft, setDraft] = e.useState(() => normalizeHex(value) ?? "#000000");
512
+ const [hexText, setHexText] = e.useState(draft);
513
+ const timer = e.useRef();
514
+ const pending = e.useRef(null);
515
+ const onChangeRef = e.useRef(onChange);
516
+ onChangeRef.current = onChange;
517
+ e.useEffect(() => setHexText(draft), [draft]);
518
+ e.useEffect(
519
+ () => () => {
520
+ clearTimeout(timer.current);
521
+ if (pending.current !== null) onChangeRef.current(pending.current);
522
+ },
523
+ []
524
+ );
525
+ const apply = (hex) => {
526
+ setDraft(hex);
527
+ pending.current = hex;
528
+ clearTimeout(timer.current);
529
+ timer.current = setTimeout(() => {
530
+ pending.current = null;
531
+ onChangeRef.current(hex);
532
+ }, debounceMs);
533
+ };
534
+ const rgb = hexToRgb(draft);
535
+ const onChannelChange = (channel, raw) => {
536
+ const parsed = raw === "" ? 0 : parseInt(raw, 10);
537
+ if (Number.isNaN(parsed)) return;
538
+ const next = { ...rgb, [channel]: parsed };
539
+ apply(rgbToHex(next.r, next.g, next.b));
540
+ };
541
+ return /* @__PURE__ */ jsxRuntime.jsxs(Panel, { children: [
542
+ /* @__PURE__ */ jsxRuntime.jsx(Z, { color: draft, onChange: (next) => apply(next.toUpperCase()) }),
543
+ /* @__PURE__ */ jsxRuntime.jsxs(Fields, { children: [
544
+ /* @__PURE__ */ jsxRuntime.jsxs(FieldColumn, { children: [
545
+ "Hex",
546
+ /* @__PURE__ */ jsxRuntime.jsx(
547
+ FieldInput,
548
+ {
549
+ "aria-label": "Hex",
550
+ value: hexText,
551
+ onChange: (e2) => {
552
+ setHexText(e2.target.value);
553
+ const normalized = normalizeHex(e2.target.value);
554
+ if (normalized) apply(normalized);
555
+ },
556
+ onBlur: () => setHexText(draft)
557
+ }
558
+ )
559
+ ] }),
560
+ CHANNELS.map(({ key, label }) => /* @__PURE__ */ jsxRuntime.jsxs(FieldColumn, { children: [
561
+ label,
562
+ /* @__PURE__ */ jsxRuntime.jsx(
563
+ FieldInput,
564
+ {
565
+ "aria-label": label,
566
+ inputMode: "numeric",
567
+ value: rgb[key],
568
+ onChange: (e2) => onChannelChange(key, e2.target.value)
569
+ }
570
+ )
571
+ ] }, key))
572
+ ] })
573
+ ] });
574
+ }
575
+ var Wrapper = styled3__default.default.div`
576
+ position: relative;
577
+ display: inline-flex;
578
+ `;
579
+ var SwatchTrigger = styled3__default.default.button`
580
+ width: ${(props) => props.$size}px;
581
+ height: ${(props) => props.$size}px;
582
+ padding: 0;
583
+ border: 1px solid #e5e7eb;
584
+ border-radius: 6px;
585
+ cursor: pointer;
586
+ background: ${(props) => props.$color};
587
+ `;
588
+ var Popover = styled3__default.default.div`
589
+ position: absolute;
590
+ top: calc(100% + 8px);
591
+ right: 0;
592
+ width: 216px;
593
+ padding: 12px;
594
+ background: #fff;
595
+ border: 1px solid #e5e7eb;
596
+ border-radius: 10px;
597
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);
598
+ z-index: 1200;
599
+ display: flex;
600
+ flex-direction: column;
601
+ gap: 12px;
602
+ `;
603
+ var PresetGrid = styled3__default.default.div`
604
+ display: grid;
605
+ grid-template-columns: repeat(6, 1fr);
606
+ gap: 6px;
607
+ `;
608
+ var PresetSwatch = styled3__default.default.button`
609
+ position: relative;
610
+ width: 100%;
611
+ aspect-ratio: 1;
612
+ padding: 0;
613
+ border: 1px solid rgba(15, 23, 42, 0.12);
614
+ border-radius: 7px;
615
+ cursor: pointer;
616
+ background: ${(props) => props.$color};
617
+ color: #fff;
618
+ display: flex;
619
+ align-items: center;
620
+ justify-content: center;
621
+
622
+ &:hover {
623
+ transform: scale(1.08);
624
+ }
625
+ `;
626
+ var CurrentRow = styled3__default.default.div`
627
+ display: flex;
628
+ align-items: center;
629
+ gap: 8px;
630
+ `;
631
+ var CurrentSwatch = styled3__default.default.button`
632
+ width: 28px;
633
+ height: 28px;
634
+ flex-shrink: 0;
635
+ padding: 0;
636
+ border: 1px solid #e5e7eb;
637
+ border-radius: 6px;
638
+ cursor: pointer;
639
+ background: ${(props) => props.$color};
640
+ `;
641
+ var HexField = styled3__default.default.input`
642
+ flex: 1;
643
+ min-width: 0;
644
+ padding: 6px 8px;
645
+ border: 1px solid #e5e7eb;
646
+ border-radius: 6px;
647
+ font-size: 13px;
648
+ color: #3f4759;
649
+ `;
650
+ var InheritAction = styled3__default.default.button`
651
+ display: inline-flex;
652
+ align-items: center;
653
+ gap: 6px;
654
+ align-self: flex-start;
655
+ padding: 0;
656
+ border: none;
657
+ background: none;
658
+ font-size: 13px;
659
+ font-weight: 500;
660
+ color: #1a56db;
661
+ cursor: pointer;
662
+
663
+ &:hover {
664
+ text-decoration: underline;
665
+ }
666
+ `;
667
+ var DEFAULT_COLOR_PRESETS = [
668
+ "#000000",
669
+ "#434A5B",
670
+ "#A9B0C5",
671
+ "#FFFFFF",
672
+ "#7D2A55",
673
+ "#9B3FD6",
674
+ "#D63F94",
675
+ "#D63C31",
676
+ "#F5820B",
677
+ "#DFA71E",
678
+ "#54390B",
679
+ "#57AB32",
680
+ "#25541B",
681
+ "#2AA48D",
682
+ "#7DA8F7",
683
+ "#2563EB",
684
+ "#152C61",
685
+ "#6B7280"
686
+ ];
687
+ var checkColor = (hex) => {
688
+ const { r: r2, g: g2, b: b2 } = hexToRgb(hex);
689
+ return 0.299 * r2 + 0.587 * g2 + 0.114 * b2 > 186 ? "#1F2937" : "#FFFFFF";
690
+ };
691
+ function CheckIcon() {
692
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
693
+ "path",
694
+ {
695
+ d: "M3 8.5 6.5 12 13 4.5",
696
+ stroke: "currentColor",
697
+ strokeWidth: "2.4",
698
+ strokeLinecap: "round",
699
+ strokeLinejoin: "round"
700
+ }
701
+ ) });
702
+ }
703
+ function InheritIcon() {
704
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "13", height: "13", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
705
+ "path",
706
+ {
707
+ d: "M13.5 8a5.5 5.5 0 1 1-1.61-3.89M13.5 2.5v2.75h-2.75",
708
+ stroke: "currentColor",
709
+ strokeWidth: "1.6",
710
+ strokeLinecap: "round",
711
+ strokeLinejoin: "round"
712
+ }
713
+ ) });
714
+ }
715
+ function ColorPicker({
716
+ value,
717
+ fallback,
718
+ presets = DEFAULT_COLOR_PRESETS,
719
+ onChange,
720
+ inheritLabel,
721
+ ariaLabel,
722
+ size = 28
723
+ }) {
724
+ const [open, setOpen] = e.useState(false);
725
+ const [advanced, setAdvanced] = e.useState(false);
726
+ const [hexDraft, setHexDraft] = e.useState(null);
727
+ const wrapperRef = e.useRef(null);
728
+ const effective = value ?? fallback ?? "#000000";
729
+ if (presets.length % 6 !== 0) {
730
+ console.warn(`[vobi-document] paleta com ${presets.length} cores n\xE3o fecha linhas de 6 (docs/theme.md).`);
731
+ }
732
+ e.useEffect(() => {
733
+ if (!open) return void 0;
734
+ const close = (event) => {
735
+ const el = wrapperRef.current;
736
+ if (el && !el.contains(event.target)) {
737
+ setOpen(false);
738
+ setAdvanced(false);
739
+ }
740
+ };
741
+ document.addEventListener("pointerdown", close);
742
+ return () => document.removeEventListener("pointerdown", close);
743
+ }, [open]);
744
+ const commit = (hex) => {
745
+ setHexDraft(null);
746
+ onChange(hex);
747
+ };
748
+ return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { ref: wrapperRef, children: [
749
+ /* @__PURE__ */ jsxRuntime.jsx(
750
+ SwatchTrigger,
751
+ {
752
+ type: "button",
753
+ "aria-label": ariaLabel,
754
+ $color: effective,
755
+ $size: size,
756
+ onClick: () => setOpen((prev) => !prev)
757
+ }
758
+ ),
759
+ open ? /* @__PURE__ */ jsxRuntime.jsxs(Popover, { children: [
760
+ /* @__PURE__ */ jsxRuntime.jsx(PresetGrid, { children: presets.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
761
+ PresetSwatch,
762
+ {
763
+ type: "button",
764
+ "aria-label": preset,
765
+ $color: preset,
766
+ style: { color: checkColor(preset) },
767
+ onClick: () => commit(preset),
768
+ children: value?.toUpperCase() === preset.toUpperCase() ? /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, {}) : null
769
+ },
770
+ preset
771
+ )) }),
772
+ /* @__PURE__ */ jsxRuntime.jsxs(CurrentRow, { children: [
773
+ /* @__PURE__ */ jsxRuntime.jsx(
774
+ CurrentSwatch,
775
+ {
776
+ type: "button",
777
+ "aria-label": "Cor personalizada",
778
+ $color: effective,
779
+ onClick: () => setAdvanced((prev) => !prev)
780
+ }
781
+ ),
782
+ /* @__PURE__ */ jsxRuntime.jsx(
783
+ HexField,
784
+ {
785
+ "aria-label": "Cor (hex)",
786
+ value: hexDraft ?? effective.toUpperCase(),
787
+ onChange: (e2) => {
788
+ const next = e2.target.value;
789
+ const normalized = normalizeHex(next);
790
+ if (normalized) {
791
+ commit(normalized);
792
+ return;
793
+ }
794
+ setHexDraft(next);
795
+ },
796
+ onBlur: () => setHexDraft(null)
797
+ }
798
+ )
799
+ ] }),
800
+ advanced ? /* @__PURE__ */ jsxRuntime.jsx(ColorPickerPanel, { value: effective, onChange: (next) => commit(next) }) : null,
801
+ inheritLabel ? /* @__PURE__ */ jsxRuntime.jsxs(
802
+ InheritAction,
803
+ {
804
+ type: "button",
805
+ onClick: () => {
806
+ commit(void 0);
807
+ setOpen(false);
808
+ },
809
+ children: [
810
+ /* @__PURE__ */ jsxRuntime.jsx(InheritIcon, {}),
811
+ inheritLabel
812
+ ]
813
+ }
814
+ ) : null
815
+ ] }) : null
816
+ ] });
817
+ }
818
+ var Backdrop = styled3__default.default.div`
819
+ position: fixed;
820
+ inset: 0;
821
+ background: rgba(15, 23, 42, 0.45);
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: center;
825
+ z-index: 1000;
826
+ `;
827
+ var Dialog = styled3__default.default.div`
828
+ width: 560px;
829
+ max-width: calc(100vw - 32px);
830
+ max-height: calc(100vh - 64px);
831
+ background: #fff;
832
+ border-radius: 12px;
833
+ overflow: hidden;
834
+ display: flex;
835
+ flex-direction: column;
836
+ font-family:
837
+ 'Inter',
838
+ -apple-system,
839
+ sans-serif;
840
+ `;
841
+ var Head = styled3__default.default.div`
842
+ display: flex;
843
+ align-items: center;
844
+ justify-content: space-between;
845
+ padding: 20px 24px;
846
+ border-bottom: 1px solid #eef0f3;
847
+ font-size: 18px;
848
+ font-weight: 600;
849
+ color: #1f2937;
850
+ `;
851
+ var CloseButton = styled3__default.default.button`
852
+ border: none;
853
+ background: none;
854
+ cursor: pointer;
855
+ font-size: 20px;
856
+ color: #6b7280;
857
+ line-height: 1;
858
+ `;
859
+ var Panel2 = styled3__default.default.div`
860
+ flex: 1;
861
+ padding: 24px 28px;
862
+ overflow: auto;
863
+ `;
864
+ var SectionTitle = styled3__default.default.h3`
865
+ margin: 0 0 16px;
866
+ font-size: 15px;
867
+ font-weight: 600;
868
+ color: #1f2937;
869
+ `;
870
+ var ColorRow = styled3__default.default.label`
871
+ display: flex;
872
+ align-items: center;
873
+ justify-content: space-between;
874
+ gap: 12px;
875
+ padding: 10px 0;
876
+ font-size: 14px;
877
+ color: #3f4759;
878
+ `;
879
+ var ColorControls = styled3__default.default.div`
880
+ position: relative;
881
+ display: flex;
882
+ align-items: center;
883
+ gap: 10px;
884
+ `;
885
+ styled3__default.default.input`
886
+ width: 96px;
887
+ padding: 6px 8px;
888
+ border: 1px solid #e5e7eb;
889
+ border-radius: 6px;
890
+ font-size: 13px;
891
+ text-align: right;
892
+ color: #6b7280;
893
+ `;
894
+ styled3__default.default.button`
895
+ width: 36px;
896
+ height: 36px;
897
+ padding: 0;
898
+ border: 1px solid #e5e7eb;
899
+ border-radius: 6px;
900
+ cursor: pointer;
901
+ background: ${(props) => props.$color};
902
+ `;
903
+ var Field = styled3__default.default.div`
904
+ margin-top: 24px;
905
+ `;
906
+ var FieldLabel = styled3__default.default.label`
907
+ display: block;
908
+ margin-bottom: 8px;
909
+ font-size: 14px;
910
+ font-weight: 600;
911
+ color: #1f2937;
912
+ `;
913
+ var Select = styled3__default.default.select`
914
+ width: 100%;
915
+ padding: 10px 12px;
916
+ border: 1px solid #e5e7eb;
917
+ border-radius: 8px;
918
+ font-size: 14px;
919
+ color: #3f4759;
920
+ background: #fff;
921
+ `;
922
+ var LogoBox = styled3__default.default.div`
923
+ margin-top: 12px;
924
+ width: 160px;
925
+ height: 160px;
926
+ border: 1px solid #e5e7eb;
927
+ border-radius: 8px;
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ background: #f5f7fa;
932
+ overflow: hidden;
933
+ position: relative;
934
+ `;
935
+ var LogoImg = styled3__default.default.img`
936
+ max-width: 100%;
937
+ max-height: 100%;
938
+ `;
939
+ var UploadLabel = styled3__default.default.label`
940
+ display: inline-flex;
941
+ align-items: center;
942
+ gap: 6px;
943
+ margin-top: 12px;
944
+ padding: 8px 14px;
945
+ border-radius: 6px;
946
+ background: #1a56db;
947
+ color: #fff;
948
+ font-size: 13px;
949
+ font-weight: 500;
950
+ cursor: pointer;
951
+ `;
952
+ var HiddenFile = styled3__default.default.input`
953
+ display: none;
954
+ `;
955
+ var Placeholder = styled3__default.default.div`
956
+ color: #9aa3af;
957
+ font-size: 14px;
958
+ `;
959
+ function ColorField({ label, value, onCommit }) {
960
+ return /* @__PURE__ */ jsxRuntime.jsxs(ColorRow, { as: "div", children: [
961
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
962
+ /* @__PURE__ */ jsxRuntime.jsx(ColorControls, { children: /* @__PURE__ */ jsxRuntime.jsx(
963
+ ColorPicker,
964
+ {
965
+ value,
966
+ ariaLabel: `${label} (seletor)`,
967
+ onChange: (next) => {
968
+ if (next) onCommit(next);
969
+ }
970
+ }
971
+ ) })
972
+ ] });
973
+ }
974
+ var COLOR_FIELDS = [
975
+ { key: "brand", label: "Cor de marca" },
976
+ { key: "text", label: "Texto" },
977
+ { key: "background", label: "Fundo" }
978
+ ];
979
+ function VisualTab({ theme, onPatch, onLogoUpload }) {
980
+ const colors = { ...chunkERKU5FDV_cjs.DEFAULT_DOCUMENT_COLORS, ...theme.colors };
981
+ const setColor = (key, value) => onPatch({ colors: { ...theme.colors, [key]: value } });
982
+ const handleLogo = async (file) => {
983
+ if (!file || !onLogoUpload) return;
984
+ const result = await onLogoUpload(file);
985
+ onPatch({ logo: result });
986
+ };
987
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
988
+ /* @__PURE__ */ jsxRuntime.jsx(SectionTitle, { children: "Cores" }),
989
+ COLOR_FIELDS.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
990
+ ColorField,
991
+ {
992
+ label: field.label,
993
+ value: colors[field.key],
994
+ onCommit: (next) => setColor(field.key, next)
995
+ },
996
+ field.key
997
+ )),
998
+ /* @__PURE__ */ jsxRuntime.jsxs(Field, { children: [
999
+ /* @__PURE__ */ jsxRuntime.jsx(FieldLabel, { htmlFor: "docgen-font", children: "Fonte" }),
1000
+ /* @__PURE__ */ jsxRuntime.jsx(
1001
+ Select,
1002
+ {
1003
+ id: "docgen-font",
1004
+ "aria-label": "Fonte",
1005
+ value: theme.documentFont ?? DEFAULT_DOCUMENT_FONT_ID,
1006
+ onChange: (e2) => onPatch({ documentFont: e2.target.value }),
1007
+ children: chunkERKU5FDV_cjs.DOCUMENT_FONTS.map((font) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: font.id, children: font.label }, font.id))
1008
+ }
1009
+ )
1010
+ ] }),
1011
+ /* @__PURE__ */ jsxRuntime.jsxs(Field, { children: [
1012
+ /* @__PURE__ */ jsxRuntime.jsx(FieldLabel, { as: "span", children: "Logo" }),
1013
+ /* @__PURE__ */ jsxRuntime.jsx(LogoBox, { children: theme.logo?.url ? /* @__PURE__ */ jsxRuntime.jsx(LogoImg, { src: theme.logo.url, alt: "Logo" }) : /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Sem logo" }) }),
1014
+ /* @__PURE__ */ jsxRuntime.jsxs(UploadLabel, { children: [
1015
+ "Alterar",
1016
+ /* @__PURE__ */ jsxRuntime.jsx(
1017
+ HiddenFile,
1018
+ {
1019
+ type: "file",
1020
+ accept: "image/*",
1021
+ "aria-label": "Alterar logo",
1022
+ onChange: (e2) => handleLogo(e2.target.files?.[0])
1023
+ }
1024
+ )
1025
+ ] })
1026
+ ] })
1027
+ ] });
1028
+ }
1029
+ function DocumentSettingsModal({
1030
+ open,
1031
+ onClose,
1032
+ theme,
1033
+ onThemeChange,
1034
+ onLogoUpload
1035
+ }) {
1036
+ if (!open) return null;
1037
+ const patch = (next) => onThemeChange({ ...theme, ...next });
1038
+ return /* @__PURE__ */ jsxRuntime.jsx(Backdrop, { role: "dialog", "aria-modal": "true", "aria-label": "Configura\xE7\xF5es do documento", children: /* @__PURE__ */ jsxRuntime.jsxs(Dialog, { children: [
1039
+ /* @__PURE__ */ jsxRuntime.jsxs(Head, { children: [
1040
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Configura\xE7\xF5es do documento" }),
1041
+ /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { type: "button", "aria-label": "Fechar", onClick: onClose, children: "\xD7" })
1042
+ ] }),
1043
+ /* @__PURE__ */ jsxRuntime.jsx(Panel2, { children: /* @__PURE__ */ jsxRuntime.jsx(VisualTab, { theme, onPatch: patch, onLogoUpload }) })
1044
+ ] }) });
1045
+ }
1046
+ var EMPTY = {};
1047
+ var EMPTY_RAW = {};
1048
+ var defsFor = (keys, catalog) => {
1049
+ const byKey = new Map(catalog.map((def) => [def.key, def]));
1050
+ return keys.map((key) => byKey.get(key) ?? { key, label: key, type: "string", model: "outros" });
1051
+ };
1052
+ function useVariableResolution({
1053
+ catalog = [],
1054
+ resolver,
1055
+ ctx = {},
1056
+ keys = []
1057
+ }) {
1058
+ const keysHash = e.useMemo(() => [...keys].sort().join("|"), [keys]);
1059
+ const ctxHash = e.useMemo(() => JSON.stringify(ctx), [ctx]);
1060
+ const [state, setState] = e.useState({ ctxHash, raw: EMPTY_RAW, attempted: [] });
1061
+ const catalogRef = e.useRef(catalog);
1062
+ catalogRef.current = catalog;
1063
+ const resolverRef = e.useRef(resolver);
1064
+ resolverRef.current = resolver;
1065
+ const ctxRef = e.useRef(ctx);
1066
+ ctxRef.current = ctx;
1067
+ const ctxHashRef = e.useRef(ctxHash);
1068
+ ctxHashRef.current = ctxHash;
1069
+ const keysRef = e.useRef(keys);
1070
+ keysRef.current = keys;
1071
+ const stateRef = e.useRef(state);
1072
+ stateRef.current = state;
1073
+ const resolved = e.useMemo(
1074
+ () => state.ctxHash === ctxHash ? chunkQJ5W5EED_cjs.formatResolvedValues(defsFor(state.attempted, catalog), state.raw) : EMPTY,
1075
+ [state, ctxHash, catalog]
1076
+ );
1077
+ const missingFor = (list, forCtx) => {
1078
+ const attempted = new Set(stateRef.current.ctxHash === forCtx ? stateRef.current.attempted : []);
1079
+ return list.filter((key) => !attempted.has(key));
1080
+ };
1081
+ const merge = (forCtx, list, next) => setState((prev) => {
1082
+ const stale = prev.ctxHash !== forCtx;
1083
+ return {
1084
+ ctxHash: forCtx,
1085
+ raw: { ...stale ? EMPTY_RAW : prev.raw, ...next },
1086
+ attempted: [.../* @__PURE__ */ new Set([...stale ? [] : prev.attempted, ...list])]
1087
+ };
1088
+ });
1089
+ const fetchKeys = e.useCallback((list) => {
1090
+ const currentResolver = resolverRef.current;
1091
+ if (!currentResolver || list.length === 0) return Promise.resolve(null);
1092
+ return currentResolver(list, ctxRef.current);
1093
+ }, []);
1094
+ e.useEffect(() => {
1095
+ const forCtx = ctxHash;
1096
+ const missing = missingFor(keysRef.current, forCtx);
1097
+ if (!missing.length) return void 0;
1098
+ let active = true;
1099
+ fetchKeys(missing).then((next) => {
1100
+ if (active && next) merge(forCtx, missing, next);
1101
+ });
1102
+ return () => {
1103
+ active = false;
1104
+ };
1105
+ }, [keysHash, ctxHash, fetchKeys, resolver]);
1106
+ const ensureResolved = e.useCallback(
1107
+ (list) => {
1108
+ const forCtx = ctxHashRef.current;
1109
+ const missing = missingFor(list, forCtx);
1110
+ if (!missing.length) return Promise.resolve();
1111
+ return fetchKeys(missing).then((next) => {
1112
+ if (next) merge(forCtx, missing, next);
1113
+ });
1114
+ },
1115
+ [fetchKeys]
1116
+ );
1117
+ return { resolved, ensureResolved };
1118
+ }
1119
+ var EMPTY2 = { content: [], root: {} };
1120
+ function DocumentEditor({
1121
+ registry,
1122
+ data,
1123
+ onChange,
1124
+ onPublish,
1125
+ iframe = { enabled: false },
1126
+ theme = {},
1127
+ onThemeChange,
1128
+ onLogoUpload,
1129
+ renderSettings,
1130
+ renderHeader,
1131
+ renderBlockActions,
1132
+ catalog = [],
1133
+ translator = {},
1134
+ resolver,
1135
+ ctx = {},
1136
+ unresolvedDisplay = "placeholder",
1137
+ metadata,
1138
+ dictionary = ptBrDictionary,
1139
+ patchModifierState = true,
1140
+ disabledBlocks = [],
1141
+ apiRef
1142
+ }) {
1143
+ if (patchModifierState) installModifierStateShim();
1144
+ const [settingsOpen, setSettingsOpen] = e.useState(false);
1145
+ chunkERKU5FDV_cjs.useDocumentFont(theme.documentFont);
1146
+ const disabledByKey = e.useMemo(
1147
+ () => Object.fromEntries(disabledBlocks.map((block) => [block.key, block.reason ?? ""])),
1148
+ [disabledBlocks.map((block) => `${block.key}:${block.reason ?? ""}`).join("|")]
1149
+ );
1150
+ const baseConfig = e.useMemo(() => chunkERKU5FDV_cjs.buildConfig(registry), [registry]);
1151
+ const config = e.useMemo(() => {
1152
+ const disabledKeys = Object.keys(disabledByKey);
1153
+ if (!disabledKeys.length) return baseConfig;
1154
+ const components = { ...baseConfig.components };
1155
+ disabledKeys.forEach((key) => {
1156
+ if (!components[key]) return;
1157
+ components[key] = {
1158
+ ...components[key],
1159
+ permissions: { ...components[key].permissions, insert: false }
1160
+ };
1161
+ });
1162
+ return { ...baseConfig, components };
1163
+ }, [baseConfig, disabledByKey]);
1164
+ const themeRef = e.useRef(theme);
1165
+ themeRef.current = theme;
1166
+ const renderHeaderRef = e.useRef(renderHeader);
1167
+ renderHeaderRef.current = renderHeader;
1168
+ const apiRefRef = e.useRef(apiRef);
1169
+ apiRefRef.current = apiRef;
1170
+ const renderBlockActionsRef = e.useRef(renderBlockActions);
1171
+ renderBlockActionsRef.current = renderBlockActions;
1172
+ const usedKeys = e.useMemo(() => chunkSP5LCPDG_cjs.extractBindingKeys(data), [data]);
1173
+ const { resolved, ensureResolved } = useVariableResolution({ catalog, resolver, ctx, keys: usedKeys });
1174
+ const blockByKey = e.useMemo(() => {
1175
+ const map = {};
1176
+ registry.forEach((block) => {
1177
+ map[block.key] = { icon: block.icon, label: block.label };
1178
+ });
1179
+ return map;
1180
+ }, [registry]);
1181
+ const plugins = e.useMemo(
1182
+ () => [
1183
+ { ...core.blocksPlugin(), label: "Blocos" },
1184
+ { ...core.outlinePlugin(), label: "Estrutura" },
1185
+ { ...core.fieldsPlugin(), label: "Campos" }
1186
+ ],
1187
+ []
1188
+ );
1189
+ const overrides = e.useMemo(() => {
1190
+ const base = {
1191
+ // eslint-disable-next-line react/no-unstable-nested-components, react/no-unused-prop-types
1192
+ drawerItem: ({ name }) => {
1193
+ const card = /* @__PURE__ */ jsxRuntime.jsxs(chunkERKU5FDV_cjs.DrawerCard, { $disabled: name in disabledByKey, children: [
1194
+ /* @__PURE__ */ jsxRuntime.jsx(chunkERKU5FDV_cjs.DrawerItemIcon, { children: blockByKey[name]?.icon ?? /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.BlockIcon, {}) }),
1195
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: blockByKey[name]?.label ?? name })
1196
+ ] });
1197
+ if (!(name in disabledByKey)) return card;
1198
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkERKU5FDV_cjs.DrawerHint, { "data-hint": disabledByKey[name] || void 0, children: card });
1199
+ }
1200
+ };
1201
+ const withBridge = apiRefRef.current ? {
1202
+ ...base,
1203
+ // eslint-disable-next-line react/no-unstable-nested-components, react/no-unused-prop-types
1204
+ puck: ({ children }) => e.createElement(EditorApiBridge, { apiRef: apiRefRef.current }, children)
1205
+ } : base;
1206
+ function BlockActionBar({ label, children, parentAction }) {
1207
+ const selectedItem = usePuckState((state) => state.selectedItem);
1208
+ const extra = renderBlockActionsRef.current?.(selectedItem ?? null);
1209
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.ActionBar, { children: [
1210
+ /* @__PURE__ */ jsxRuntime.jsxs(core.ActionBar.Group, { children: [
1211
+ parentAction,
1212
+ label ? /* @__PURE__ */ jsxRuntime.jsx(core.ActionBar.Label, { label }) : null
1213
+ ] }),
1214
+ extra ? /* @__PURE__ */ jsxRuntime.jsx(core.ActionBar.Group, { children: extra }) : null,
1215
+ /* @__PURE__ */ jsxRuntime.jsx(core.ActionBar.Group, { children })
1216
+ ] });
1217
+ }
1218
+ const withActions = renderBlockActionsRef.current ? { ...withBridge, actionBar: BlockActionBar } : withBridge;
1219
+ if (!renderHeaderRef.current) return withActions;
1220
+ function Header() {
1221
+ const getPuck = core.useGetPuck();
1222
+ const hasPast = usePuckState((state) => state.history.hasPast);
1223
+ const hasFuture = usePuckState((state) => state.history.hasFuture);
1224
+ const api = headerApiFromHistory(
1225
+ {
1226
+ hasPast,
1227
+ hasFuture,
1228
+ back: () => getPuck().history.back(),
1229
+ forward: () => getPuck().history.forward()
1230
+ },
1231
+ {
1232
+ openSettings: () => setSettingsOpen(true),
1233
+ openPreview: () => getPuck().dispatch({
1234
+ type: "setUi",
1235
+ ui: (prev) => ({ previewMode: prev.previewMode === "edit" ? "interactive" : "edit" })
1236
+ }),
1237
+ theme: themeRef.current
1238
+ }
1239
+ );
1240
+ return e.createElement(e.Fragment, null, renderHeaderRef.current?.(api));
1241
+ }
1242
+ return { ...withActions, header: Header };
1243
+ }, [blockByKey, disabledByKey, Boolean(renderHeader), Boolean(apiRef), Boolean(renderBlockActions)]);
1244
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkERKU5FDV_cjs.DocumentThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntime.jsx(chunkSP5LCPDG_cjs.CatalogProvider, { catalog, translator, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSP5LCPDG_cjs.ResolvedProvider, { resolved, ensureResolved, unresolvedDisplay, children: [
1245
+ /* @__PURE__ */ jsxRuntime.jsx(chunkERKU5FDV_cjs.EditorShell, { children: /* @__PURE__ */ jsxRuntime.jsx(
1246
+ core.Puck,
1247
+ {
1248
+ config,
1249
+ data: { ...EMPTY2, ...data },
1250
+ onChange,
1251
+ onPublish,
1252
+ iframe,
1253
+ overrides,
1254
+ plugins,
1255
+ metadata,
1256
+ dictionary
1257
+ }
1258
+ ) }),
1259
+ renderSettings ? renderSettings({
1260
+ open: settingsOpen,
1261
+ onClose: () => setSettingsOpen(false),
1262
+ theme,
1263
+ onThemeChange: onThemeChange ?? (() => void 0),
1264
+ onLogoUpload
1265
+ }) : /* @__PURE__ */ jsxRuntime.jsx(
1266
+ DocumentSettingsModal,
1267
+ {
1268
+ open: settingsOpen,
1269
+ onClose: () => setSettingsOpen(false),
1270
+ theme,
1271
+ onThemeChange: onThemeChange ?? (() => void 0),
1272
+ onLogoUpload
1273
+ }
1274
+ )
1275
+ ] }) }) });
1276
+ }
1277
+ function useDocumentAutosave({
1278
+ doc,
1279
+ save,
1280
+ delay = 3e3,
1281
+ initialSavedAt = null,
1282
+ enabled = true
1283
+ }) {
1284
+ const [status, setStatus] = e.useState("saved");
1285
+ const [lastSavedAt, setLastSavedAt] = e.useState(initialSavedAt);
1286
+ const lastSaved = e.useRef(null);
1287
+ const timer = e.useRef();
1288
+ const inFlight = e.useRef(false);
1289
+ const tail = e.useRef(Promise.resolve());
1290
+ const latest = e.useRef(doc);
1291
+ latest.current = doc;
1292
+ const enabledRef = e.useRef(enabled);
1293
+ enabledRef.current = enabled;
1294
+ const saveRef = e.useRef(save);
1295
+ saveRef.current = save;
1296
+ const flush = e.useCallback(() => {
1297
+ if (!enabledRef.current) return Promise.resolve();
1298
+ const run = async () => {
1299
+ inFlight.current = true;
1300
+ try {
1301
+ const snapshot = JSON.stringify(latest.current);
1302
+ if (snapshot === lastSaved.current) return;
1303
+ setStatus("saving");
1304
+ await saveRef.current(latest.current);
1305
+ lastSaved.current = snapshot;
1306
+ setStatus("saved");
1307
+ setLastSavedAt(/* @__PURE__ */ new Date());
1308
+ } catch {
1309
+ setStatus("error");
1310
+ clearTimeout(timer.current);
1311
+ timer.current = setTimeout(flush, delay);
1312
+ } finally {
1313
+ inFlight.current = false;
1314
+ }
1315
+ };
1316
+ const chained = inFlight.current ? tail.current.then(run) : run();
1317
+ tail.current = chained;
1318
+ return chained;
1319
+ }, [delay]);
1320
+ e.useEffect(() => {
1321
+ if (!enabled || lastSaved.current === null) {
1322
+ lastSaved.current = JSON.stringify(doc);
1323
+ return void 0;
1324
+ }
1325
+ clearTimeout(timer.current);
1326
+ timer.current = setTimeout(flush, delay);
1327
+ return () => clearTimeout(timer.current);
1328
+ }, [doc, delay, flush, enabled]);
1329
+ return { status, lastSavedAt, flushNow: flush };
1330
+ }
1331
+
1332
+ exports.ColorPicker = ColorPicker;
1333
+ exports.ColorPickerPanel = ColorPickerPanel;
1334
+ exports.DEFAULT_COLOR_PRESETS = DEFAULT_COLOR_PRESETS;
1335
+ exports.DEFAULT_DOCUMENT_FONT_ID = DEFAULT_DOCUMENT_FONT_ID;
1336
+ exports.DEFAULT_FOOTER_CONFIG = DEFAULT_FOOTER_CONFIG;
1337
+ exports.DEFAULT_HEADER_CONFIG = DEFAULT_HEADER_CONFIG;
1338
+ exports.DocumentEditor = DocumentEditor;
1339
+ exports.DocumentSettingsModal = DocumentSettingsModal;
1340
+ exports.coverFieldsSchema = coverFieldsSchema;
1341
+ exports.footerConfigSchema = footerConfigSchema;
1342
+ exports.headerConfigSchema = headerConfigSchema;
1343
+ exports.hexToRgb = hexToRgb;
1344
+ exports.installModifierStateShim = installModifierStateShim;
1345
+ exports.normalizeHex = normalizeHex;
1346
+ exports.pageFormatSchema = pageFormatSchema;
1347
+ exports.ptBrDictionary = ptBrDictionary;
1348
+ exports.resolveTheme = resolveTheme;
1349
+ exports.rgbToHex = rgbToHex;
1350
+ exports.themeSchema = themeSchema;
1351
+ exports.useDocumentAutosave = useDocumentAutosave;
1352
+ exports.usePuckState = usePuckState;
1353
+ //# sourceMappingURL=chunk-3FTKM37U.cjs.map
1354
+ //# sourceMappingURL=chunk-3FTKM37U.cjs.map