vobi_document 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +23 -6
  2. package/dist/blocks.cjs +100 -0
  3. package/dist/blocks.cjs.map +1 -0
  4. package/dist/blocks.d.cts +201 -0
  5. package/dist/blocks.d.ts +201 -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-2EBYURIX.js +90 -0
  11. package/dist/chunk-2EBYURIX.js.map +1 -0
  12. package/dist/chunk-6GRYRVU5.js +824 -0
  13. package/dist/chunk-6GRYRVU5.js.map +1 -0
  14. package/dist/chunk-ABIEQHS2.js +159 -0
  15. package/dist/chunk-ABIEQHS2.js.map +1 -0
  16. package/dist/chunk-AQ5FAAP6.cjs +168 -0
  17. package/dist/chunk-AQ5FAAP6.cjs.map +1 -0
  18. package/dist/chunk-ERKU5FDV.cjs +407 -0
  19. package/dist/chunk-ERKU5FDV.cjs.map +1 -0
  20. package/dist/chunk-FKX46GKE.cjs +36 -0
  21. package/dist/chunk-FKX46GKE.cjs.map +1 -0
  22. package/dist/chunk-HMTCQOEV.js +1319 -0
  23. package/dist/chunk-HMTCQOEV.js.map +1 -0
  24. package/dist/chunk-IRFFN74K.cjs +89 -0
  25. package/dist/chunk-IRFFN74K.cjs.map +1 -0
  26. package/dist/chunk-IUDN2CGP.js +863 -0
  27. package/dist/chunk-IUDN2CGP.js.map +1 -0
  28. package/dist/chunk-JEVWEGSE.js +95 -0
  29. package/dist/chunk-JEVWEGSE.js.map +1 -0
  30. package/dist/chunk-KCZKC3OG.js +61 -0
  31. package/dist/chunk-KCZKC3OG.js.map +1 -0
  32. package/dist/chunk-KUB3TYG2.cjs +102 -0
  33. package/dist/chunk-KUB3TYG2.cjs.map +1 -0
  34. package/dist/chunk-L5FXGEKX.cjs +114 -0
  35. package/dist/chunk-L5FXGEKX.cjs.map +1 -0
  36. package/dist/chunk-LNBAFOVK.cjs +14 -0
  37. package/dist/chunk-LNBAFOVK.cjs.map +1 -0
  38. package/dist/chunk-M2TPAU2F.js +79 -0
  39. package/dist/chunk-M2TPAU2F.js.map +1 -0
  40. package/dist/chunk-MHTTFNK2.cjs +890 -0
  41. package/dist/chunk-MHTTFNK2.cjs.map +1 -0
  42. package/dist/chunk-NDHTMYPA.cjs +844 -0
  43. package/dist/chunk-NDHTMYPA.cjs.map +1 -0
  44. package/dist/chunk-PLQNNXS2.js +382 -0
  45. package/dist/chunk-PLQNNXS2.js.map +1 -0
  46. package/dist/chunk-QYBWIJXZ.js +98 -0
  47. package/dist/chunk-QYBWIJXZ.js.map +1 -0
  48. package/dist/chunk-U56KVTK5.cjs +68 -0
  49. package/dist/chunk-U56KVTK5.cjs.map +1 -0
  50. package/dist/chunk-X2BLERM5.cjs +1346 -0
  51. package/dist/chunk-X2BLERM5.cjs.map +1 -0
  52. package/dist/chunk-ZOJBDFKU.js +12 -0
  53. package/dist/chunk-ZOJBDFKU.js.map +1 -0
  54. package/dist/chunk-ZXWOZZXO.cjs +94 -0
  55. package/dist/chunk-ZXWOZZXO.cjs.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 +412 -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 +95 -0
  91. package/dist/variables.cjs.map +1 -0
  92. package/dist/variables.d.cts +74 -0
  93. package/dist/variables.d.ts +74 -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,890 @@
1
+ 'use strict';
2
+
3
+ var chunkL5FXGEKX_cjs = require('./chunk-L5FXGEKX.cjs');
4
+ var chunkLNBAFOVK_cjs = require('./chunk-LNBAFOVK.cjs');
5
+ var chunkKUB3TYG2_cjs = require('./chunk-KUB3TYG2.cjs');
6
+ var chunkIRFFN74K_cjs = require('./chunk-IRFFN74K.cjs');
7
+ var zod = require('zod');
8
+ var styled4 = require('styled-components');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var styled4__default = /*#__PURE__*/_interopDefault(styled4);
14
+
15
+ // src/blocks/defineBlock.ts
16
+ function defineBlock(entry) {
17
+ return entry;
18
+ }
19
+ var Prose = styled4__default.default.div`
20
+ > :first-child {
21
+ margin-top: 0;
22
+ }
23
+ > :last-child {
24
+ margin-bottom: 0;
25
+ }
26
+
27
+ p,
28
+ ul,
29
+ ol {
30
+ margin: 0 0 8px;
31
+ }
32
+
33
+ h1,
34
+ h2,
35
+ h3,
36
+ h4 {
37
+ margin: 0 0 8px;
38
+ line-height: 1.25;
39
+ }
40
+
41
+ a {
42
+ color: var(--doc-brand, #005ac3);
43
+ }
44
+
45
+ strong {
46
+ font-weight: 600;
47
+ }
48
+
49
+ .${chunkKUB3TYG2_cjs.CHIP_CLASS} {
50
+ padding: 1px 6px;
51
+ border-radius: 4px;
52
+ background: color-mix(in srgb, var(--doc-brand, #005ac3) 12%, transparent);
53
+ color: var(--doc-brand, #005ac3);
54
+ font-size: 0.94em;
55
+ white-space: nowrap;
56
+ }
57
+
58
+ .${chunkKUB3TYG2_cjs.INVALID_CHIP_CLASS} {
59
+ background: #fdecea;
60
+ color: #b4341b;
61
+ }
62
+ `;
63
+ function RichText({ html = "", editing = false, as, className }) {
64
+ const resolved = chunkIRFFN74K_cjs.useResolvedVariables();
65
+ const catalog = chunkIRFFN74K_cjs.useCatalog();
66
+ const unresolved = chunkIRFFN74K_cjs.useUnresolvedDisplay();
67
+ return /* @__PURE__ */ jsxRuntime.jsx(
68
+ Prose,
69
+ {
70
+ as,
71
+ className,
72
+ dangerouslySetInnerHTML: {
73
+ __html: chunkKUB3TYG2_cjs.resolveVariableHtml(html, resolved, { keepChip: editing, catalog, unresolved })
74
+ }
75
+ }
76
+ );
77
+ }
78
+ var TextBlock = defineBlock({
79
+ key: "Text",
80
+ label: "Texto",
81
+ category: "Conte\xFAdo",
82
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TextIcon, {}),
83
+ fields: {
84
+ content: { type: "textarea", label: "Conte\xFAdo (HTML)" }
85
+ },
86
+ propsSchema: zod.z.object({ content: zod.z.string() }),
87
+ defaultProps: { content: "<p>Escreva o texto do documento aqui.</p>" },
88
+ component: ({ content, puck }) => /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing })
89
+ });
90
+ var HeadingBlock = defineBlock({
91
+ key: "Heading",
92
+ label: "T\xEDtulo",
93
+ category: "Conte\xFAdo",
94
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.HeadingIcon, {}),
95
+ fields: {
96
+ text: { type: "text", label: "T\xEDtulo" },
97
+ level: {
98
+ type: "select",
99
+ label: "N\xEDvel",
100
+ options: [
101
+ { label: "T\xEDtulo 1", value: 1 },
102
+ { label: "T\xEDtulo 2", value: 2 },
103
+ { label: "T\xEDtulo 3", value: 3 },
104
+ { label: "T\xEDtulo 4", value: 4 }
105
+ ]
106
+ }
107
+ },
108
+ propsSchema: zod.z.object({ text: zod.z.string(), level: zod.z.union([zod.z.literal(1), zod.z.literal(2), zod.z.literal(3), zod.z.literal(4)]) }),
109
+ defaultProps: { text: "T\xEDtulo da se\xE7\xE3o", level: 2 },
110
+ component: ({ text, level, puck }) => /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: `h${level ?? 2}`, html: text, editing: puck?.isEditing })
111
+ });
112
+ var List = styled4__default.default.ul`
113
+ margin: 0;
114
+ padding-left: 22px;
115
+
116
+ li {
117
+ margin-bottom: 4px;
118
+ }
119
+ li::marker {
120
+ color: var(--doc-brand, #005ac3);
121
+ }
122
+ `;
123
+ var ListBlock = defineBlock({
124
+ key: "List",
125
+ label: "Lista",
126
+ category: "Conte\xFAdo",
127
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ListIcon, {}),
128
+ fields: {
129
+ ordered: {
130
+ type: "radio",
131
+ label: "Marcador",
132
+ options: [
133
+ { label: "Bolinha", value: false },
134
+ { label: "Numerada", value: true }
135
+ ]
136
+ },
137
+ items: {
138
+ type: "array",
139
+ label: "Itens",
140
+ getItemSummary: (item, index) => item?.text || `Item ${(index ?? 0) + 1}`,
141
+ arrayFields: { text: { type: "text", label: "Texto" } },
142
+ defaultItemProps: { text: "Novo item" }
143
+ }
144
+ },
145
+ propsSchema: zod.z.object({ items: zod.z.array(zod.z.object({ text: zod.z.string() })), ordered: zod.z.boolean() }),
146
+ defaultProps: {
147
+ ordered: false,
148
+ items: [{ text: "Primeiro item" }, { text: "Segundo item" }]
149
+ },
150
+ component: ({ items = [], ordered, puck }) => /* @__PURE__ */ jsxRuntime.jsx(List, { as: ordered ? "ol" : "ul", children: items.map((item, index) => (
151
+ // eslint-disable-next-line react/no-array-index-key -- o item não tem id próprio; a ordem é a identidade
152
+ /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: item?.text, editing: puck?.isEditing }) }, index)
153
+ )) })
154
+ });
155
+ var Callout = styled4__default.default.blockquote`
156
+ margin: 0;
157
+ padding: 12px 0 12px 16px;
158
+ border-left: 3px solid var(--doc-brand, #005ac3);
159
+ `;
160
+ var Author = styled4__default.default.footer`
161
+ margin-top: 6px;
162
+ font-size: 0.9em;
163
+ opacity: 0.75;
164
+ `;
165
+ var QuoteBlock = defineBlock({
166
+ key: "Quote",
167
+ label: "Destaque",
168
+ category: "Conte\xFAdo",
169
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.QuoteIcon, {}),
170
+ fields: {
171
+ content: { type: "textarea", label: "Texto (HTML)" },
172
+ author: { type: "text", label: "Autor (opcional)" }
173
+ },
174
+ propsSchema: zod.z.object({ content: zod.z.string(), author: zod.z.string().optional() }),
175
+ defaultProps: { content: "<p>Texto em destaque.</p>", author: "" },
176
+ component: ({ content, author, puck }) => /* @__PURE__ */ jsxRuntime.jsxs(Callout, { children: [
177
+ /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing }),
178
+ author ? /* @__PURE__ */ jsxRuntime.jsx(Author, { children: author }) : null
179
+ ] })
180
+ });
181
+ var SIZE_WIDTH = { small: "33%", medium: "66%", large: "100%" };
182
+ var GAP_PX = { none: 0, small: 8, medium: 16, large: 24 };
183
+ var Placeholder = styled4__default.default.div`
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ min-height: 64px;
188
+ padding: 16px;
189
+ border: 1px dashed #c3c9d2;
190
+ border-radius: 8px;
191
+ color: #9aa3af;
192
+ font-size: 13px;
193
+ text-align: center;
194
+ `;
195
+ var LinkButton = styled4__default.default.a`
196
+ display: inline-block;
197
+ padding: 8px 16px;
198
+ border-radius: 6px;
199
+ background: var(--doc-brand, #1a56db);
200
+ color: #fff;
201
+ text-decoration: none;
202
+ font-weight: 500;
203
+ `;
204
+ var PageBreakMark = styled4__default.default.div`
205
+ break-after: page;
206
+ margin: 8px 0;
207
+ border-top: 1px dashed #c3c9d2;
208
+ text-align: center;
209
+ color: #9aa3af;
210
+ font-size: 11px;
211
+ text-transform: uppercase;
212
+ letter-spacing: 0.04em;
213
+ `;
214
+ var SlotColumn = styled4__default.default.div`
215
+ flex: ${(props) => props.$basis} 1 0;
216
+ min-width: 0;
217
+ `;
218
+ var Row = styled4__default.default.div`
219
+ display: flex;
220
+ gap: ${(props) => props.$gap}px;
221
+ align-items: ${(props) => props.$align ?? "flex-start"};
222
+ `;
223
+ var renderSlot = (slot) => typeof slot === "function" ? slot() : null;
224
+ var ButtonBlock = defineBlock({
225
+ key: "Button",
226
+ label: "Bot\xE3o",
227
+ category: "Conte\xFAdo",
228
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ButtonIcon, {}),
229
+ fields: {
230
+ text: { type: "text", label: "Texto do bot\xE3o", contentEditable: true },
231
+ href: { type: "text", label: "Link ao clicar" }
232
+ },
233
+ propsSchema: zod.z.object({ text: zod.z.string(), href: zod.z.string() }),
234
+ defaultProps: { text: "Clique aqui", href: "#" },
235
+ component: ({ text, href }) => /* @__PURE__ */ jsxRuntime.jsx(LinkButton, { href: href || "#", target: "_blank", rel: "noopener noreferrer", children: text })
236
+ });
237
+ var Rule = styled4__default.default.hr`
238
+ border: none;
239
+ border-top: 1px ${(props) => props.$variant} currentColor;
240
+ opacity: 0.25;
241
+ margin: ${(props) => props.$spacing}px 0;
242
+ `;
243
+ var DividerBlock = defineBlock({
244
+ key: "Divider",
245
+ label: "Divisor",
246
+ category: "Conte\xFAdo",
247
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.DividerIcon, {}),
248
+ fields: {
249
+ variant: {
250
+ type: "select",
251
+ label: "Tra\xE7o",
252
+ options: [
253
+ { label: "Cont\xEDnuo", value: "solid" },
254
+ { label: "Tracejado", value: "dashed" },
255
+ { label: "Pontilhado", value: "dotted" }
256
+ ]
257
+ },
258
+ spacing: {
259
+ type: "select",
260
+ label: "Espa\xE7amento",
261
+ options: [
262
+ { label: "Nenhum", value: "none" },
263
+ { label: "Pequeno", value: "small" },
264
+ { label: "M\xE9dio", value: "medium" },
265
+ { label: "Grande", value: "large" }
266
+ ]
267
+ }
268
+ },
269
+ propsSchema: zod.z.object({
270
+ variant: zod.z.enum(["solid", "dashed", "dotted"]),
271
+ spacing: zod.z.enum(["none", "small", "medium", "large"])
272
+ }),
273
+ defaultProps: { variant: "solid", spacing: "medium" },
274
+ component: ({ variant, spacing }) => /* @__PURE__ */ jsxRuntime.jsx(Rule, { $variant: variant ?? "solid", $spacing: GAP_PX[spacing] ?? 16 })
275
+ });
276
+ var Gap = styled4__default.default.div`
277
+ height: ${(props) => props.$height}px;
278
+ ${(props) => props.$editing ? "border: 1px dashed #dbe0e6; border-radius: 4px;" : ""}
279
+ `;
280
+ var SpacerBlock = defineBlock({
281
+ key: "Spacer",
282
+ label: "Espa\xE7o",
283
+ category: "Conte\xFAdo",
284
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.SpacerIcon, {}),
285
+ fields: {
286
+ height: { type: "number", label: "Altura (px)", min: 4, max: 400 }
287
+ },
288
+ propsSchema: zod.z.object({ height: zod.z.number().int().min(1).max(600) }),
289
+ defaultProps: { height: 24 },
290
+ component: ({ height, puck }) => /* @__PURE__ */ jsxRuntime.jsx(Gap, { $height: height ?? 24, $editing: Boolean(puck?.isEditing) })
291
+ });
292
+ var Figure = styled4__default.default.figure`
293
+ margin: 0;
294
+ `;
295
+ var Caption = styled4__default.default.figcaption`
296
+ margin-top: 6px;
297
+ font-size: 0.85em;
298
+ opacity: 0.7;
299
+ `;
300
+ var ImageBlock = defineBlock({
301
+ key: "Image",
302
+ label: "Imagem",
303
+ category: "M\xEDdia",
304
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageIcon, {}),
305
+ fields: {
306
+ src: { type: "text", label: "Imagem (URL)" },
307
+ alt: { type: "text", label: "Texto alternativo" },
308
+ caption: { type: "text", label: "Legenda (opcional)" },
309
+ size: {
310
+ type: "select",
311
+ label: "Tamanho",
312
+ options: [
313
+ { label: "Pequeno", value: "small" },
314
+ { label: "M\xE9dio", value: "medium" },
315
+ { label: "Grande", value: "large" }
316
+ ]
317
+ },
318
+ opacity: { type: "number", label: "Opacidade (%)", min: 0, max: 100 }
319
+ },
320
+ propsSchema: zod.z.object({
321
+ src: zod.z.string(),
322
+ alt: zod.z.string(),
323
+ caption: zod.z.string().optional(),
324
+ size: zod.z.enum(["small", "medium", "large"]),
325
+ opacity: zod.z.number().min(0).max(100)
326
+ }),
327
+ defaultProps: { src: "", alt: "", caption: "", size: "medium", opacity: 100 },
328
+ component: ({ src, alt, caption, size, opacity, puck }) => {
329
+ if (!src) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Informe a URL da imagem" }) : null;
330
+ return /* @__PURE__ */ jsxRuntime.jsxs(Figure, { children: [
331
+ /* @__PURE__ */ jsxRuntime.jsx(
332
+ "img",
333
+ {
334
+ src,
335
+ alt: alt ?? "",
336
+ style: { width: SIZE_WIDTH[size] ?? "66%", maxWidth: "100%", opacity: (opacity ?? 100) / 100 }
337
+ }
338
+ ),
339
+ caption ? /* @__PURE__ */ jsxRuntime.jsx(Caption, { children: caption }) : null
340
+ ] });
341
+ }
342
+ });
343
+ var RATIO = {
344
+ square: "1 / 1",
345
+ landscape: "4 / 3",
346
+ portrait: "3 / 4",
347
+ auto: void 0
348
+ };
349
+ var Grid = styled4__default.default.div`
350
+ display: grid;
351
+ grid-template-columns: repeat(${(props) => props.$columns}, 1fr);
352
+ gap: ${(props) => props.$gap}px;
353
+ `;
354
+ var Cell = styled4__default.default.img`
355
+ width: 100%;
356
+ height: ${(props) => props.$ratio ? "100%" : "auto"};
357
+ aspect-ratio: ${(props) => props.$ratio ?? "auto"};
358
+ object-fit: ${(props) => props.$ratio ? "cover" : "contain"};
359
+ display: block;
360
+ `;
361
+ var ImageGridBlock = defineBlock({
362
+ key: "ImageGrid",
363
+ label: "Grade de imagens",
364
+ category: "M\xEDdia",
365
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageGridIcon, {}),
366
+ fields: {
367
+ images: {
368
+ type: "array",
369
+ label: "Imagens",
370
+ getItemSummary: (item, index) => item?.alt || item?.src || `Imagem ${(index ?? 0) + 1}`,
371
+ arrayFields: {
372
+ src: { type: "text", label: "URL" },
373
+ alt: { type: "text", label: "Texto alternativo" }
374
+ },
375
+ defaultItemProps: { src: "", alt: "" }
376
+ },
377
+ columns: { type: "number", label: "Colunas", min: 1, max: 4 },
378
+ gap: {
379
+ type: "select",
380
+ label: "Espa\xE7amento",
381
+ options: [
382
+ { label: "Nenhum", value: "none" },
383
+ { label: "Pequeno", value: "small" },
384
+ { label: "M\xE9dio", value: "medium" },
385
+ { label: "Grande", value: "large" }
386
+ ]
387
+ },
388
+ ratio: {
389
+ type: "select",
390
+ label: "Propor\xE7\xE3o",
391
+ options: [
392
+ { label: "Quadrada", value: "square" },
393
+ { label: "Paisagem", value: "landscape" },
394
+ { label: "Retrato", value: "portrait" },
395
+ { label: "Original", value: "auto" }
396
+ ]
397
+ }
398
+ },
399
+ propsSchema: zod.z.object({
400
+ images: zod.z.array(zod.z.object({ src: zod.z.string(), alt: zod.z.string().optional() })),
401
+ columns: zod.z.number().int().min(1).max(4),
402
+ gap: zod.z.enum(["none", "small", "medium", "large"]),
403
+ ratio: zod.z.enum(["square", "landscape", "portrait", "auto"])
404
+ }),
405
+ defaultProps: { images: [], columns: 2, gap: "small", ratio: "square" },
406
+ component: ({ images = [], columns, gap, ratio, puck }) => {
407
+ const filled = images.filter((image) => image?.src);
408
+ if (!filled.length) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Adicione imagens \xE0 grade" }) : null;
409
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid, { $columns: columns ?? 2, $gap: GAP_PX[gap] ?? 8, children: filled.map((image, index) => (
410
+ // eslint-disable-next-line react/no-array-index-key -- a imagem não tem id próprio; a ordem é a identidade
411
+ /* @__PURE__ */ jsxRuntime.jsx(Cell, { src: image.src, alt: image.alt ?? "", $ratio: RATIO[ratio ?? "square"] }, index)
412
+ )) });
413
+ }
414
+ });
415
+ var slotSchema = zod.z.array(zod.z.unknown()).optional();
416
+ var TwoColumnsBlock = defineBlock({
417
+ key: "TwoColumns",
418
+ label: "Duas colunas",
419
+ category: "Layout",
420
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TwoColumnsIcon, {}),
421
+ fields: {
422
+ left: { type: "slot", label: "Coluna esquerda" },
423
+ right: { type: "slot", label: "Coluna direita" },
424
+ ratio: { type: "number", label: "Largura da esquerda (%)", min: 20, max: 80 },
425
+ gap: {
426
+ type: "select",
427
+ label: "Espa\xE7amento",
428
+ options: [
429
+ { label: "Nenhum", value: "none" },
430
+ { label: "Pequeno", value: "small" },
431
+ { label: "M\xE9dio", value: "medium" },
432
+ { label: "Grande", value: "large" }
433
+ ]
434
+ },
435
+ align: {
436
+ type: "radio",
437
+ label: "Alinhamento vertical",
438
+ options: [
439
+ { label: "Topo", value: "start" },
440
+ { label: "Centro", value: "center" }
441
+ ]
442
+ }
443
+ },
444
+ propsSchema: zod.z.object({
445
+ left: slotSchema,
446
+ right: slotSchema,
447
+ ratio: zod.z.number().min(0).max(100),
448
+ gap: zod.z.enum(["none", "small", "medium", "large"]),
449
+ align: zod.z.enum(["start", "center"])
450
+ }),
451
+ defaultProps: { ratio: 50, gap: "medium", align: "start" },
452
+ component: ({ left, right, ratio = 50, gap, align }) => /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 16, $align: align === "center" ? "center" : "flex-start", children: [
453
+ /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: ratio, children: renderSlot(left) }),
454
+ /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: 100 - ratio, children: renderSlot(right) })
455
+ ] })
456
+ });
457
+ var slotSchema2 = zod.z.array(zod.z.unknown()).optional();
458
+ var ImageTextBlock = defineBlock({
459
+ key: "ImageText",
460
+ label: "Imagem e texto",
461
+ category: "Layout",
462
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageTextIcon, {}),
463
+ fields: {
464
+ image: { type: "slot", label: "Imagem", allow: ["Image", "ImageGrid"] },
465
+ text: { type: "slot", label: "Texto", allow: ["Text", "Heading", "List", "Quote", "Button"] },
466
+ ratio: { type: "number", label: "Largura da imagem (%)", min: 20, max: 80 },
467
+ imageRight: {
468
+ type: "radio",
469
+ label: "Posi\xE7\xE3o da imagem",
470
+ options: [
471
+ { label: "Esquerda", value: false },
472
+ { label: "Direita", value: true }
473
+ ]
474
+ },
475
+ gap: {
476
+ type: "select",
477
+ label: "Espa\xE7amento",
478
+ options: [
479
+ { label: "Nenhum", value: "none" },
480
+ { label: "Pequeno", value: "small" },
481
+ { label: "M\xE9dio", value: "medium" },
482
+ { label: "Grande", value: "large" }
483
+ ]
484
+ }
485
+ },
486
+ propsSchema: zod.z.object({
487
+ image: slotSchema2,
488
+ text: slotSchema2,
489
+ ratio: zod.z.number().min(0).max(100),
490
+ imageRight: zod.z.boolean(),
491
+ gap: zod.z.enum(["none", "small", "medium", "large"])
492
+ }),
493
+ defaultProps: {
494
+ ratio: 40,
495
+ imageRight: false,
496
+ gap: "medium",
497
+ image: [{ type: "Image", props: {} }],
498
+ text: [{ type: "Text", props: {} }]
499
+ },
500
+ component: ({ image, text, ratio = 40, imageRight, gap }) => {
501
+ const imageColumn = /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: ratio, children: renderSlot(image) });
502
+ const textColumn = /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: 100 - ratio, children: renderSlot(text) });
503
+ return /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 16, children: [
504
+ imageRight ? textColumn : imageColumn,
505
+ imageRight ? imageColumn : textColumn
506
+ ] });
507
+ }
508
+ });
509
+ var SOCIAL = "Social e contato";
510
+ var ACTIONS = "A\xE7\xF5es";
511
+ var NAV = "Navega\xE7\xE3o";
512
+ var TIME_PLACE = "Tempo e local";
513
+ var GENERAL = "Gerais";
514
+ var CONTENT_ICON_CATALOG = {
515
+ whatsapp: {
516
+ label: "WhatsApp",
517
+ group: SOCIAL,
518
+ variant: "fill",
519
+ viewBox: "0 0 448 512",
520
+ inner: '<path d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"/>'
521
+ },
522
+ instagram: {
523
+ label: "Instagram",
524
+ group: SOCIAL,
525
+ variant: "fill",
526
+ viewBox: "0 0 448 512",
527
+ inner: '<path d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"/>'
528
+ },
529
+ facebook: {
530
+ label: "Facebook",
531
+ group: SOCIAL,
532
+ variant: "fill",
533
+ viewBox: "0 0 320 512",
534
+ inner: '<path d="M80 299.3V512H196V299.3h86.5l18-97.8H196V166.9c0-51.7 20.3-71.5 72.7-71.5c16.3 0 29.4 .4 37 1.2V7.9C291.4 4 256.4 0 236.2 0C129.3 0 80 50.5 80 159.4v42.1H14v97.8H80z"/>'
535
+ },
536
+ email: {
537
+ label: "E-mail",
538
+ group: SOCIAL,
539
+ viewBox: "0 0 24 24",
540
+ inner: '<path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /><rect x="2" y="4" width="20" height="16" rx="2" />'
541
+ },
542
+ telefone: {
543
+ label: "Telefone",
544
+ group: SOCIAL,
545
+ viewBox: "0 0 24 24",
546
+ inner: '<path d="M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384" />'
547
+ },
548
+ link: {
549
+ label: "Link",
550
+ group: SOCIAL,
551
+ viewBox: "0 0 24 24",
552
+ inner: '<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />'
553
+ },
554
+ download: {
555
+ label: "Download",
556
+ group: ACTIONS,
557
+ viewBox: "0 0 24 24",
558
+ inner: '<path d="M12 15V3" /><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /><path d="m7 10 5 5 5-5" />'
559
+ },
560
+ check: {
561
+ label: "Check",
562
+ group: ACTIONS,
563
+ viewBox: "0 0 24 24",
564
+ inner: '<path d="M20 6 9 17l-5-5" />'
565
+ },
566
+ enviar: {
567
+ label: "Enviar",
568
+ group: ACTIONS,
569
+ viewBox: "0 0 24 24",
570
+ inner: '<path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" /><path d="m21.854 2.147-10.94 10.939" />'
571
+ },
572
+ cifrao: {
573
+ label: "Cifr\xE3o",
574
+ group: ACTIONS,
575
+ viewBox: "0 0 24 24",
576
+ inner: '<line x1="12" x2="12" y1="2" y2="22" /><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" />'
577
+ },
578
+ "seta-esquerda": {
579
+ label: "Seta esquerda",
580
+ group: NAV,
581
+ viewBox: "0 0 24 24",
582
+ inner: '<path d="m12 19-7-7 7-7" /><path d="M19 12H5" />'
583
+ },
584
+ "seta-direita": {
585
+ label: "Seta direita",
586
+ group: NAV,
587
+ viewBox: "0 0 24 24",
588
+ inner: '<path d="M5 12h14" /><path d="m12 5 7 7-7 7" />'
589
+ },
590
+ "link-externo": {
591
+ label: "Link externo",
592
+ group: NAV,
593
+ viewBox: "0 0 24 24",
594
+ inner: '<path d="M15 3h6v6" /><path d="M10 14 21 3" /><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" />'
595
+ },
596
+ calendario: {
597
+ label: "Calend\xE1rio",
598
+ group: TIME_PLACE,
599
+ viewBox: "0 0 24 24",
600
+ inner: '<path d="M8 2v3" /><path d="M16 2v3" /><rect x="3" y="3" width="18" height="18" rx="2" /><path d="M3 9h18" />'
601
+ },
602
+ relogio: {
603
+ label: "Rel\xF3gio",
604
+ group: TIME_PLACE,
605
+ viewBox: "0 0 24 24",
606
+ inner: '<circle cx="12" cy="12" r="10" /><path d="M12 6v6l4 2" />'
607
+ },
608
+ localizacao: {
609
+ label: "Localiza\xE7\xE3o",
610
+ group: TIME_PLACE,
611
+ viewBox: "0 0 24 24",
612
+ inner: '<path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0" /><circle cx="12" cy="10" r="3" />'
613
+ },
614
+ predio: {
615
+ label: "Pr\xE9dio",
616
+ group: TIME_PLACE,
617
+ viewBox: "0 0 24 24",
618
+ inner: '<path d="M12 10h.01" /><path d="M12 14h.01" /><path d="M12 6h.01" /><path d="M16 10h.01" /><path d="M16 14h.01" /><path d="M16 6h.01" /><path d="M8 10h.01" /><path d="M8 14h.01" /><path d="M8 6h.01" /><path d="M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3" /><rect x="4" y="2" width="16" height="20" rx="2" />'
619
+ },
620
+ estrela: {
621
+ label: "Estrela",
622
+ group: GENERAL,
623
+ viewBox: "0 0 24 24",
624
+ inner: '<path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z" />'
625
+ },
626
+ coracao: {
627
+ label: "Cora\xE7\xE3o",
628
+ group: GENERAL,
629
+ viewBox: "0 0 24 24",
630
+ inner: '<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5" />'
631
+ },
632
+ globo: {
633
+ label: "Globo",
634
+ group: GENERAL,
635
+ viewBox: "0 0 24 24",
636
+ inner: '<circle cx="12" cy="12" r="10" /><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" /><path d="M2 12h20" />'
637
+ },
638
+ usuario: {
639
+ label: "Usu\xE1rio",
640
+ group: GENERAL,
641
+ viewBox: "0 0 24 24",
642
+ inner: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" /><circle cx="12" cy="7" r="4" />'
643
+ },
644
+ arquivo: {
645
+ label: "Arquivo",
646
+ group: GENERAL,
647
+ viewBox: "0 0 24 24",
648
+ inner: '<path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z" /><path d="M14 2v5a1 1 0 0 0 1 1h5" />'
649
+ },
650
+ imagem: {
651
+ label: "Imagem",
652
+ group: GENERAL,
653
+ viewBox: "0 0 24 24",
654
+ inner: '<rect width="18" height="18" x="3" y="3" rx="2" ry="2" /><circle cx="9" cy="9" r="2" /><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" />'
655
+ },
656
+ camera: {
657
+ label: "C\xE2mera",
658
+ group: GENERAL,
659
+ viewBox: "0 0 24 24",
660
+ inner: '<path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z" /><circle cx="12" cy="13" r="3" />'
661
+ }
662
+ };
663
+ var CONTENT_ICON_NAMES = Object.keys(CONTENT_ICON_CATALOG);
664
+ function ContentIcon({
665
+ name,
666
+ size = "1em",
667
+ color = "currentColor",
668
+ strokeWidth = 2,
669
+ style,
670
+ className
671
+ }) {
672
+ const def = name ? CONTENT_ICON_CATALOG[name] : void 0;
673
+ if (!def) return null;
674
+ const stroked = def.variant !== "fill";
675
+ return /* @__PURE__ */ jsxRuntime.jsx(
676
+ "svg",
677
+ {
678
+ width: size,
679
+ height: size,
680
+ viewBox: def.viewBox,
681
+ fill: stroked ? "none" : color,
682
+ ...stroked ? { stroke: color, strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" } : {},
683
+ "aria-hidden": "true",
684
+ focusable: "false",
685
+ className,
686
+ style: { display: "inline-block", verticalAlign: "-0.125em", flexShrink: 0, ...style },
687
+ dangerouslySetInnerHTML: { __html: def.inner }
688
+ }
689
+ );
690
+ }
691
+ var IconSlot = styled4__default.default.span`
692
+ flex: none;
693
+ color: var(--doc-brand, #005ac3);
694
+ line-height: 1;
695
+ `;
696
+ var Body = styled4__default.default.div`
697
+ flex: 1;
698
+ min-width: 0;
699
+ `;
700
+ var IconTextBlock = defineBlock({
701
+ key: "IconText",
702
+ label: "\xCDcone e texto",
703
+ category: "Layout",
704
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.IconTextIcon, {}),
705
+ fields: {
706
+ icon: {
707
+ type: "select",
708
+ label: "\xCDcone",
709
+ options: CONTENT_ICON_NAMES.map((name) => ({ label: CONTENT_ICON_CATALOG[name].label, value: name }))
710
+ },
711
+ content: { type: "textarea", label: "Texto (HTML)" },
712
+ iconSize: { type: "number", label: "Tamanho do \xEDcone (px)", min: 12, max: 96 },
713
+ iconRight: {
714
+ type: "radio",
715
+ label: "Posi\xE7\xE3o do \xEDcone",
716
+ options: [
717
+ { label: "Esquerda", value: false },
718
+ { label: "Direita", value: true }
719
+ ]
720
+ },
721
+ gap: {
722
+ type: "select",
723
+ label: "Espa\xE7amento",
724
+ options: [
725
+ { label: "Nenhum", value: "none" },
726
+ { label: "Pequeno", value: "small" },
727
+ { label: "M\xE9dio", value: "medium" },
728
+ { label: "Grande", value: "large" }
729
+ ]
730
+ }
731
+ },
732
+ propsSchema: zod.z.object({
733
+ icon: zod.z.string(),
734
+ content: zod.z.string(),
735
+ iconSize: zod.z.number().int().min(8).max(128),
736
+ iconRight: zod.z.boolean(),
737
+ gap: zod.z.enum(["none", "small", "medium", "large"])
738
+ }),
739
+ defaultProps: { icon: "check", content: "<p>Descreva o item.</p>", iconSize: 24, iconRight: false, gap: "small" },
740
+ component: ({ icon, content, iconSize, iconRight, gap, puck }) => {
741
+ const glyph = /* @__PURE__ */ jsxRuntime.jsx(IconSlot, { children: /* @__PURE__ */ jsxRuntime.jsx(ContentIcon, { name: icon, size: iconSize ?? 24 }) });
742
+ return /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 8, $align: "flex-start", children: [
743
+ iconRight ? null : glyph,
744
+ /* @__PURE__ */ jsxRuntime.jsx(Body, { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing }) }),
745
+ iconRight ? glyph : null
746
+ ] });
747
+ }
748
+ });
749
+ var Grid2 = styled4__default.default.table`
750
+ width: 100%;
751
+ border-collapse: collapse;
752
+ font-size: 0.95em;
753
+
754
+ th,
755
+ td {
756
+ padding: 8px 10px;
757
+ border-bottom: 1px solid rgba(127, 137, 152, 0.28);
758
+ text-align: left;
759
+ vertical-align: top;
760
+ }
761
+
762
+ th {
763
+ font-weight: 600;
764
+ background: color-mix(in srgb, var(--doc-brand, #005ac3) 8%, transparent);
765
+ }
766
+ `;
767
+ var TableBlock = defineBlock({
768
+ key: "Table",
769
+ label: "Tabela",
770
+ category: "Dados",
771
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TableIcon, {}),
772
+ fields: {
773
+ headerRow: {
774
+ type: "radio",
775
+ label: "Primeira linha \xE9 cabe\xE7alho",
776
+ options: [
777
+ { label: "Sim", value: true },
778
+ { label: "N\xE3o", value: false }
779
+ ]
780
+ },
781
+ rows: {
782
+ type: "array",
783
+ label: "Linhas",
784
+ getItemSummary: (row, index) => row?.cells?.map((cell) => cell?.value).filter(Boolean).join(" \xB7 ") || `Linha ${(index ?? 0) + 1}`,
785
+ arrayFields: {
786
+ cells: {
787
+ type: "array",
788
+ label: "C\xE9lulas",
789
+ getItemSummary: (cell, index) => cell?.value || `Coluna ${(index ?? 0) + 1}`,
790
+ arrayFields: { value: { type: "text", label: "Conte\xFAdo" } },
791
+ defaultItemProps: { value: "" }
792
+ }
793
+ },
794
+ defaultItemProps: { cells: [{ value: "" }, { value: "" }] }
795
+ }
796
+ },
797
+ propsSchema: zod.z.object({
798
+ rows: zod.z.array(zod.z.object({ cells: zod.z.array(zod.z.object({ value: zod.z.string() })) })),
799
+ headerRow: zod.z.boolean()
800
+ }),
801
+ defaultProps: {
802
+ headerRow: true,
803
+ rows: [{ cells: [{ value: "Item" }, { value: "Valor" }] }, { cells: [{ value: "Exemplo" }, { value: "R$ 0,00" }] }]
804
+ },
805
+ component: ({ rows = [], headerRow, puck }) => {
806
+ if (!rows.length) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Adicione linhas \xE0 tabela" }) : null;
807
+ const [first, ...rest] = rows;
808
+ const body = headerRow ? rest : rows;
809
+ return /* @__PURE__ */ jsxRuntime.jsxs(Grid2, { children: [
810
+ headerRow ? /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: (first?.cells ?? []).map((cell, index) => (
811
+ // eslint-disable-next-line react/no-array-index-key -- a célula não tem id; a posição é a identidade
812
+ /* @__PURE__ */ jsxRuntime.jsx("th", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: cell?.value, editing: puck?.isEditing }) }, index)
813
+ )) }) }) : null,
814
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: body.map((row, rowIndex) => (
815
+ // eslint-disable-next-line react/no-array-index-key -- idem
816
+ /* @__PURE__ */ jsxRuntime.jsx("tr", { children: (row?.cells ?? []).map((cell, cellIndex) => (
817
+ // eslint-disable-next-line react/no-array-index-key -- idem
818
+ /* @__PURE__ */ jsxRuntime.jsx("td", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: cell?.value, editing: puck?.isEditing }) }, cellIndex)
819
+ )) }, rowIndex)
820
+ )) })
821
+ ] });
822
+ }
823
+ });
824
+ var PageBreakBlock = defineBlock({
825
+ key: "PageBreak",
826
+ label: "Quebra de p\xE1gina",
827
+ category: "Estrutura",
828
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.PageBreakIcon, {}),
829
+ fields: {},
830
+ propsSchema: zod.z.object({}),
831
+ component: ({ puck }) => puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(PageBreakMark, { children: "Quebra de p\xE1gina" }) : null
832
+ });
833
+
834
+ // src/blocks/defaults.tsx
835
+ var defaultBlocks = [
836
+ TextBlock,
837
+ HeadingBlock,
838
+ ListBlock,
839
+ QuoteBlock,
840
+ ButtonBlock,
841
+ DividerBlock,
842
+ SpacerBlock,
843
+ ImageBlock,
844
+ ImageGridBlock,
845
+ TwoColumnsBlock,
846
+ ImageTextBlock,
847
+ IconTextBlock,
848
+ TableBlock,
849
+ PageBreakBlock
850
+ ];
851
+ var blocksByKey = Object.fromEntries(
852
+ defaultBlocks.map((block) => [block.key, block])
853
+ );
854
+
855
+ // src/blocks/overrideBlock.ts
856
+ function overrideBlock(key, patch = {}) {
857
+ const base = blocksByKey[key];
858
+ if (!base) {
859
+ chunkLNBAFOVK_cjs.devWarn(
860
+ `override-unknown-block:${key}`,
861
+ `overrideBlock('${key}') n\xE3o achou bloco default com essa key \u2014 nada foi herdado. Bloco que \xE9 s\xF3 do host se declara com defineBlock.`
862
+ );
863
+ }
864
+ return { ...base, key, ...patch };
865
+ }
866
+
867
+ exports.ButtonBlock = ButtonBlock;
868
+ exports.CONTENT_ICON_CATALOG = CONTENT_ICON_CATALOG;
869
+ exports.CONTENT_ICON_NAMES = CONTENT_ICON_NAMES;
870
+ exports.ContentIcon = ContentIcon;
871
+ exports.DividerBlock = DividerBlock;
872
+ exports.HeadingBlock = HeadingBlock;
873
+ exports.IconTextBlock = IconTextBlock;
874
+ exports.ImageBlock = ImageBlock;
875
+ exports.ImageGridBlock = ImageGridBlock;
876
+ exports.ImageTextBlock = ImageTextBlock;
877
+ exports.ListBlock = ListBlock;
878
+ exports.PageBreakBlock = PageBreakBlock;
879
+ exports.QuoteBlock = QuoteBlock;
880
+ exports.RichText = RichText;
881
+ exports.SpacerBlock = SpacerBlock;
882
+ exports.TableBlock = TableBlock;
883
+ exports.TextBlock = TextBlock;
884
+ exports.TwoColumnsBlock = TwoColumnsBlock;
885
+ exports.blocksByKey = blocksByKey;
886
+ exports.defaultBlocks = defaultBlocks;
887
+ exports.defineBlock = defineBlock;
888
+ exports.overrideBlock = overrideBlock;
889
+ //# sourceMappingURL=chunk-MHTTFNK2.cjs.map
890
+ //# sourceMappingURL=chunk-MHTTFNK2.cjs.map