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,933 @@
1
+ 'use strict';
2
+
3
+ var chunkL5FXGEKX_cjs = require('./chunk-L5FXGEKX.cjs');
4
+ var chunkLNBAFOVK_cjs = require('./chunk-LNBAFOVK.cjs');
5
+ var chunkI22MGPXO_cjs = require('./chunk-I22MGPXO.cjs');
6
+ var chunkSP5LCPDG_cjs = require('./chunk-SP5LCPDG.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
+
20
+ // src/blocks/primitives/proseCss.ts
21
+ var DOCUMENT_TEXT_CSS = `font-size: 16px;
22
+ line-height: 1.5;
23
+ overflow-wrap: break-word;
24
+ word-break: break-word;`;
25
+ var DOCUMENT_PROSE_CSS = `p {
26
+ margin: 0 0 8px;
27
+ }
28
+
29
+ h1, h2, h3, h4, h5, h6 {
30
+ margin: 0 0 8px;
31
+ line-height: 1.25;
32
+ font-weight: 600;
33
+ }
34
+
35
+ h1 { font-size: 2em; }
36
+ h2 { font-size: 1.5em; }
37
+ h3 { font-size: 1.25em; }
38
+ h4 { font-size: 1.125em; }
39
+ h5 { font-size: 1em; }
40
+ h6 { font-size: 0.875em; }
41
+
42
+ ul, ol {
43
+ margin: 0 0 8px;
44
+ padding-left: 24px;
45
+ }
46
+
47
+ ul { list-style: disc; }
48
+ ol { list-style: decimal; }
49
+
50
+ li { margin: 0 0 4px; }
51
+
52
+ strong, b { font-weight: 600; }
53
+ em, i { font-style: italic; }
54
+
55
+ a { color: var(--doc-brand, #005ac3); }
56
+
57
+ img { max-width: 100%; }
58
+
59
+ /* O chip herda peso, estilo e sublinhado do texto ao redor: pinar qualquer um deles faz
60
+ negrito/italico/sublinhado nao pegarem na variavel. Inline (e nao inline-block) porque
61
+ text-decoration nao atravessa um inline-block. */
62
+ .dg-var {
63
+ display: inline;
64
+ font-size: 0.92em;
65
+ font-weight: inherit;
66
+ font-style: inherit;
67
+ white-space: nowrap;
68
+ }
69
+
70
+ /* Sem margem sobrando no fim do bloco. Seletores de elemento, e nao um combinador filho,
71
+ porque a mesma string tambem e usada no topo de uma folha, onde nao ha pai. */
72
+ p:last-child,
73
+ ul:last-child,
74
+ ol:last-child,
75
+ h1:last-child,
76
+ h2:last-child,
77
+ h3:last-child,
78
+ h4:last-child,
79
+ h5:last-child,
80
+ h6:last-child {
81
+ margin-bottom: 0;
82
+ }`;
83
+ var Prose = styled4__default.default.div`
84
+ ${DOCUMENT_TEXT_CSS}
85
+ ${DOCUMENT_PROSE_CSS}
86
+
87
+ .${chunkI22MGPXO_cjs.CHIP_CLASS} {
88
+ padding: 1px 6px;
89
+ border-radius: 4px;
90
+ background: color-mix(in srgb, var(--doc-brand, #005ac3) 12%, transparent);
91
+ color: var(--doc-brand, #005ac3);
92
+ }
93
+
94
+ .${chunkI22MGPXO_cjs.INVALID_CHIP_CLASS} {
95
+ background: #fdecea;
96
+ color: #b4341b;
97
+ }
98
+
99
+ .${chunkI22MGPXO_cjs.EMPTY_CHIP_CLASS} {
100
+ background: #f5e4b8;
101
+ color: #84620d;
102
+ }
103
+ `;
104
+ function RichText({ html = "", editing = false, as, className }) {
105
+ const resolved = chunkSP5LCPDG_cjs.useResolvedVariables();
106
+ const catalog = chunkSP5LCPDG_cjs.useCatalog();
107
+ const unresolved = chunkSP5LCPDG_cjs.useUnresolvedDisplay();
108
+ return /* @__PURE__ */ jsxRuntime.jsx(
109
+ Prose,
110
+ {
111
+ as,
112
+ className,
113
+ dangerouslySetInnerHTML: {
114
+ __html: chunkI22MGPXO_cjs.resolveVariableHtml(html, resolved, { keepChip: editing, catalog, unresolved })
115
+ }
116
+ }
117
+ );
118
+ }
119
+ var TextBlock = defineBlock({
120
+ key: "Text",
121
+ label: "Texto",
122
+ category: "Conte\xFAdo",
123
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TextIcon, {}),
124
+ fields: {
125
+ content: { type: "textarea", label: "Conte\xFAdo (HTML)" }
126
+ },
127
+ propsSchema: zod.z.object({ content: zod.z.string() }),
128
+ defaultProps: { content: "<p>Escreva o texto do documento aqui.</p>" },
129
+ component: ({ content, puck }) => /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing })
130
+ });
131
+ var HeadingBlock = defineBlock({
132
+ key: "Heading",
133
+ label: "T\xEDtulo",
134
+ category: "Conte\xFAdo",
135
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.HeadingIcon, {}),
136
+ fields: {
137
+ text: { type: "text", label: "T\xEDtulo" },
138
+ level: {
139
+ type: "select",
140
+ label: "N\xEDvel",
141
+ options: [
142
+ { label: "T\xEDtulo 1", value: 1 },
143
+ { label: "T\xEDtulo 2", value: 2 },
144
+ { label: "T\xEDtulo 3", value: 3 },
145
+ { label: "T\xEDtulo 4", value: 4 }
146
+ ]
147
+ }
148
+ },
149
+ 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)]) }),
150
+ defaultProps: { text: "T\xEDtulo da se\xE7\xE3o", level: 2 },
151
+ component: ({ text, level, puck }) => /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: `h${level ?? 2}`, html: text, editing: puck?.isEditing })
152
+ });
153
+ var List = styled4__default.default.ul`
154
+ margin: 0;
155
+ padding-left: 22px;
156
+
157
+ li {
158
+ margin-bottom: 4px;
159
+ }
160
+ li::marker {
161
+ color: var(--doc-brand, #005ac3);
162
+ }
163
+ `;
164
+ var ListBlock = defineBlock({
165
+ key: "List",
166
+ label: "Lista",
167
+ category: "Conte\xFAdo",
168
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ListIcon, {}),
169
+ fields: {
170
+ ordered: {
171
+ type: "radio",
172
+ label: "Marcador",
173
+ options: [
174
+ { label: "Bolinha", value: false },
175
+ { label: "Numerada", value: true }
176
+ ]
177
+ },
178
+ items: {
179
+ type: "array",
180
+ label: "Itens",
181
+ getItemSummary: (item, index) => item?.text || `Item ${(index ?? 0) + 1}`,
182
+ arrayFields: { text: { type: "text", label: "Texto" } },
183
+ defaultItemProps: { text: "Novo item" }
184
+ }
185
+ },
186
+ propsSchema: zod.z.object({ items: zod.z.array(zod.z.object({ text: zod.z.string() })), ordered: zod.z.boolean() }),
187
+ defaultProps: {
188
+ ordered: false,
189
+ items: [{ text: "Primeiro item" }, { text: "Segundo item" }]
190
+ },
191
+ component: ({ items = [], ordered, puck }) => /* @__PURE__ */ jsxRuntime.jsx(List, { as: ordered ? "ol" : "ul", children: items.map((item, index) => (
192
+ // eslint-disable-next-line react/no-array-index-key -- o item não tem id próprio; a ordem é a identidade
193
+ /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: item?.text, editing: puck?.isEditing }) }, index)
194
+ )) })
195
+ });
196
+ var Callout = styled4__default.default.blockquote`
197
+ margin: 0;
198
+ padding: 12px 0 12px 16px;
199
+ border-left: 3px solid var(--doc-brand, #005ac3);
200
+ `;
201
+ var Author = styled4__default.default.footer`
202
+ margin-top: 6px;
203
+ font-size: 0.9em;
204
+ opacity: 0.75;
205
+ `;
206
+ var QuoteBlock = defineBlock({
207
+ key: "Quote",
208
+ label: "Destaque",
209
+ category: "Conte\xFAdo",
210
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.QuoteIcon, {}),
211
+ fields: {
212
+ content: { type: "textarea", label: "Texto (HTML)" },
213
+ author: { type: "text", label: "Autor (opcional)" }
214
+ },
215
+ propsSchema: zod.z.object({ content: zod.z.string(), author: zod.z.string().optional() }),
216
+ defaultProps: { content: "<p>Texto em destaque.</p>", author: "" },
217
+ component: ({ content, author, puck }) => /* @__PURE__ */ jsxRuntime.jsxs(Callout, { children: [
218
+ /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing }),
219
+ author ? /* @__PURE__ */ jsxRuntime.jsx(Author, { children: author }) : null
220
+ ] })
221
+ });
222
+ var SIZE_WIDTH = { small: "33%", medium: "66%", large: "100%" };
223
+ var GAP_PX = { none: 0, small: 8, medium: 16, large: 24 };
224
+ var Placeholder = styled4__default.default.div`
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: center;
228
+ min-height: 64px;
229
+ padding: 16px;
230
+ border: 1px dashed #c3c9d2;
231
+ border-radius: 8px;
232
+ color: #9aa3af;
233
+ font-size: 13px;
234
+ text-align: center;
235
+ `;
236
+ var LinkButton = styled4__default.default.a`
237
+ display: inline-block;
238
+ padding: 8px 16px;
239
+ border-radius: 6px;
240
+ background: var(--doc-brand, #1a56db);
241
+ color: #fff;
242
+ text-decoration: none;
243
+ font-weight: 500;
244
+ `;
245
+ var PageBreakMark = styled4__default.default.div`
246
+ break-after: page;
247
+ margin: 8px 0;
248
+ border-top: 1px dashed #c3c9d2;
249
+ text-align: center;
250
+ color: #9aa3af;
251
+ font-size: 11px;
252
+ text-transform: uppercase;
253
+ letter-spacing: 0.04em;
254
+ `;
255
+ var SlotColumn = styled4__default.default.div`
256
+ flex: ${(props) => props.$basis} 1 0;
257
+ min-width: 0;
258
+ `;
259
+ var Row = styled4__default.default.div`
260
+ display: flex;
261
+ gap: ${(props) => props.$gap}px;
262
+ align-items: ${(props) => props.$align ?? "flex-start"};
263
+ `;
264
+ var renderSlot = (slot) => typeof slot === "function" ? slot() : null;
265
+ var ButtonBlock = defineBlock({
266
+ key: "Button",
267
+ label: "Bot\xE3o",
268
+ category: "Conte\xFAdo",
269
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ButtonIcon, {}),
270
+ fields: {
271
+ text: { type: "text", label: "Texto do bot\xE3o", contentEditable: true },
272
+ href: { type: "text", label: "Link ao clicar" }
273
+ },
274
+ propsSchema: zod.z.object({ text: zod.z.string(), href: zod.z.string() }),
275
+ defaultProps: { text: "Clique aqui", href: "#" },
276
+ component: ({ text, href }) => /* @__PURE__ */ jsxRuntime.jsx(LinkButton, { href: href || "#", target: "_blank", rel: "noopener noreferrer", children: text })
277
+ });
278
+ var Rule = styled4__default.default.hr`
279
+ border: none;
280
+ border-top: 1px ${(props) => props.$variant} currentColor;
281
+ opacity: 0.25;
282
+ margin: ${(props) => props.$spacing}px 0;
283
+ `;
284
+ var DividerBlock = defineBlock({
285
+ key: "Divider",
286
+ label: "Divisor",
287
+ category: "Conte\xFAdo",
288
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.DividerIcon, {}),
289
+ fields: {
290
+ variant: {
291
+ type: "select",
292
+ label: "Tra\xE7o",
293
+ options: [
294
+ { label: "Cont\xEDnuo", value: "solid" },
295
+ { label: "Tracejado", value: "dashed" },
296
+ { label: "Pontilhado", value: "dotted" }
297
+ ]
298
+ },
299
+ spacing: {
300
+ type: "select",
301
+ label: "Espa\xE7amento",
302
+ options: [
303
+ { label: "Nenhum", value: "none" },
304
+ { label: "Pequeno", value: "small" },
305
+ { label: "M\xE9dio", value: "medium" },
306
+ { label: "Grande", value: "large" }
307
+ ]
308
+ }
309
+ },
310
+ propsSchema: zod.z.object({
311
+ variant: zod.z.enum(["solid", "dashed", "dotted"]),
312
+ spacing: zod.z.enum(["none", "small", "medium", "large"])
313
+ }),
314
+ defaultProps: { variant: "solid", spacing: "medium" },
315
+ component: ({ variant, spacing }) => /* @__PURE__ */ jsxRuntime.jsx(Rule, { $variant: variant ?? "solid", $spacing: GAP_PX[spacing] ?? 16 })
316
+ });
317
+ var Gap = styled4__default.default.div`
318
+ height: ${(props) => props.$height}px;
319
+ ${(props) => props.$editing ? "border: 1px dashed #dbe0e6; border-radius: 4px;" : ""}
320
+ `;
321
+ var SpacerBlock = defineBlock({
322
+ key: "Spacer",
323
+ label: "Espa\xE7o",
324
+ category: "Conte\xFAdo",
325
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.SpacerIcon, {}),
326
+ fields: {
327
+ height: { type: "number", label: "Altura (px)", min: 4, max: 400 }
328
+ },
329
+ propsSchema: zod.z.object({ height: zod.z.number().int().min(1).max(600) }),
330
+ defaultProps: { height: 24 },
331
+ component: ({ height, puck }) => /* @__PURE__ */ jsxRuntime.jsx(Gap, { $height: height ?? 24, $editing: Boolean(puck?.isEditing) })
332
+ });
333
+ var Figure = styled4__default.default.figure`
334
+ margin: 0;
335
+ `;
336
+ var Caption = styled4__default.default.figcaption`
337
+ margin-top: 6px;
338
+ font-size: 0.85em;
339
+ opacity: 0.7;
340
+ `;
341
+ var ImageBlock = defineBlock({
342
+ key: "Image",
343
+ label: "Imagem",
344
+ category: "M\xEDdia",
345
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageIcon, {}),
346
+ fields: {
347
+ src: { type: "text", label: "Imagem (URL)" },
348
+ alt: { type: "text", label: "Texto alternativo" },
349
+ caption: { type: "text", label: "Legenda (opcional)" },
350
+ size: {
351
+ type: "select",
352
+ label: "Tamanho",
353
+ options: [
354
+ { label: "Pequeno", value: "small" },
355
+ { label: "M\xE9dio", value: "medium" },
356
+ { label: "Grande", value: "large" }
357
+ ]
358
+ },
359
+ opacity: { type: "number", label: "Opacidade (%)", min: 0, max: 100 }
360
+ },
361
+ propsSchema: zod.z.object({
362
+ src: zod.z.string(),
363
+ alt: zod.z.string(),
364
+ caption: zod.z.string().optional(),
365
+ size: zod.z.enum(["small", "medium", "large"]),
366
+ opacity: zod.z.number().min(0).max(100)
367
+ }),
368
+ defaultProps: { src: "", alt: "", caption: "", size: "medium", opacity: 100 },
369
+ component: ({ src, alt, caption, size, opacity, puck }) => {
370
+ if (!src) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Informe a URL da imagem" }) : null;
371
+ return /* @__PURE__ */ jsxRuntime.jsxs(Figure, { children: [
372
+ /* @__PURE__ */ jsxRuntime.jsx(
373
+ "img",
374
+ {
375
+ src,
376
+ alt: alt ?? "",
377
+ style: { width: SIZE_WIDTH[size] ?? "66%", maxWidth: "100%", opacity: (opacity ?? 100) / 100 }
378
+ }
379
+ ),
380
+ caption ? /* @__PURE__ */ jsxRuntime.jsx(Caption, { children: caption }) : null
381
+ ] });
382
+ }
383
+ });
384
+ var RATIO = {
385
+ square: "1 / 1",
386
+ landscape: "4 / 3",
387
+ portrait: "3 / 4",
388
+ auto: void 0
389
+ };
390
+ var Grid = styled4__default.default.div`
391
+ display: grid;
392
+ grid-template-columns: repeat(${(props) => props.$columns}, 1fr);
393
+ gap: ${(props) => props.$gap}px;
394
+ `;
395
+ var Cell = styled4__default.default.img`
396
+ width: 100%;
397
+ height: ${(props) => props.$ratio ? "100%" : "auto"};
398
+ aspect-ratio: ${(props) => props.$ratio ?? "auto"};
399
+ object-fit: ${(props) => props.$ratio ? "cover" : "contain"};
400
+ display: block;
401
+ `;
402
+ var ImageGridBlock = defineBlock({
403
+ key: "ImageGrid",
404
+ label: "Grade de imagens",
405
+ category: "M\xEDdia",
406
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageGridIcon, {}),
407
+ fields: {
408
+ images: {
409
+ type: "array",
410
+ label: "Imagens",
411
+ getItemSummary: (item, index) => item?.alt || item?.src || `Imagem ${(index ?? 0) + 1}`,
412
+ arrayFields: {
413
+ src: { type: "text", label: "URL" },
414
+ alt: { type: "text", label: "Texto alternativo" }
415
+ },
416
+ defaultItemProps: { src: "", alt: "" }
417
+ },
418
+ columns: { type: "number", label: "Colunas", min: 1, max: 4 },
419
+ gap: {
420
+ type: "select",
421
+ label: "Espa\xE7amento",
422
+ options: [
423
+ { label: "Nenhum", value: "none" },
424
+ { label: "Pequeno", value: "small" },
425
+ { label: "M\xE9dio", value: "medium" },
426
+ { label: "Grande", value: "large" }
427
+ ]
428
+ },
429
+ ratio: {
430
+ type: "select",
431
+ label: "Propor\xE7\xE3o",
432
+ options: [
433
+ { label: "Quadrada", value: "square" },
434
+ { label: "Paisagem", value: "landscape" },
435
+ { label: "Retrato", value: "portrait" },
436
+ { label: "Original", value: "auto" }
437
+ ]
438
+ }
439
+ },
440
+ propsSchema: zod.z.object({
441
+ images: zod.z.array(zod.z.object({ src: zod.z.string(), alt: zod.z.string().optional() })),
442
+ columns: zod.z.number().int().min(1).max(4),
443
+ gap: zod.z.enum(["none", "small", "medium", "large"]),
444
+ ratio: zod.z.enum(["square", "landscape", "portrait", "auto"])
445
+ }),
446
+ defaultProps: { images: [], columns: 2, gap: "small", ratio: "square" },
447
+ component: ({ images = [], columns, gap, ratio, puck }) => {
448
+ const filled = images.filter((image) => image?.src);
449
+ if (!filled.length) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Adicione imagens \xE0 grade" }) : null;
450
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid, { $columns: columns ?? 2, $gap: GAP_PX[gap] ?? 8, children: filled.map((image, index) => (
451
+ // eslint-disable-next-line react/no-array-index-key -- a imagem não tem id próprio; a ordem é a identidade
452
+ /* @__PURE__ */ jsxRuntime.jsx(Cell, { src: image.src, alt: image.alt ?? "", $ratio: RATIO[ratio ?? "square"] }, index)
453
+ )) });
454
+ }
455
+ });
456
+ var slotSchema = zod.z.array(zod.z.unknown()).optional();
457
+ var TwoColumnsBlock = defineBlock({
458
+ key: "TwoColumns",
459
+ label: "Duas colunas",
460
+ category: "Layout",
461
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TwoColumnsIcon, {}),
462
+ fields: {
463
+ left: { type: "slot", label: "Coluna esquerda" },
464
+ right: { type: "slot", label: "Coluna direita" },
465
+ ratio: { type: "number", label: "Largura da esquerda (%)", min: 20, max: 80 },
466
+ gap: {
467
+ type: "select",
468
+ label: "Espa\xE7amento",
469
+ options: [
470
+ { label: "Nenhum", value: "none" },
471
+ { label: "Pequeno", value: "small" },
472
+ { label: "M\xE9dio", value: "medium" },
473
+ { label: "Grande", value: "large" }
474
+ ]
475
+ },
476
+ align: {
477
+ type: "radio",
478
+ label: "Alinhamento vertical",
479
+ options: [
480
+ { label: "Topo", value: "start" },
481
+ { label: "Centro", value: "center" }
482
+ ]
483
+ }
484
+ },
485
+ propsSchema: zod.z.object({
486
+ left: slotSchema,
487
+ right: slotSchema,
488
+ ratio: zod.z.number().min(0).max(100),
489
+ gap: zod.z.enum(["none", "small", "medium", "large"]),
490
+ align: zod.z.enum(["start", "center"])
491
+ }),
492
+ defaultProps: { ratio: 50, gap: "medium", align: "start" },
493
+ component: ({ left, right, ratio = 50, gap, align }) => /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 16, $align: align === "center" ? "center" : "flex-start", children: [
494
+ /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: ratio, children: renderSlot(left) }),
495
+ /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: 100 - ratio, children: renderSlot(right) })
496
+ ] })
497
+ });
498
+ var slotSchema2 = zod.z.array(zod.z.unknown()).optional();
499
+ var ImageTextBlock = defineBlock({
500
+ key: "ImageText",
501
+ label: "Imagem e texto",
502
+ category: "Layout",
503
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.ImageTextIcon, {}),
504
+ fields: {
505
+ image: { type: "slot", label: "Imagem", allow: ["Image", "ImageGrid"] },
506
+ text: { type: "slot", label: "Texto", allow: ["Text", "Heading", "List", "Quote", "Button"] },
507
+ ratio: { type: "number", label: "Largura da imagem (%)", min: 20, max: 80 },
508
+ imageRight: {
509
+ type: "radio",
510
+ label: "Posi\xE7\xE3o da imagem",
511
+ options: [
512
+ { label: "Esquerda", value: false },
513
+ { label: "Direita", value: true }
514
+ ]
515
+ },
516
+ gap: {
517
+ type: "select",
518
+ label: "Espa\xE7amento",
519
+ options: [
520
+ { label: "Nenhum", value: "none" },
521
+ { label: "Pequeno", value: "small" },
522
+ { label: "M\xE9dio", value: "medium" },
523
+ { label: "Grande", value: "large" }
524
+ ]
525
+ }
526
+ },
527
+ propsSchema: zod.z.object({
528
+ image: slotSchema2,
529
+ text: slotSchema2,
530
+ ratio: zod.z.number().min(0).max(100),
531
+ imageRight: zod.z.boolean(),
532
+ gap: zod.z.enum(["none", "small", "medium", "large"])
533
+ }),
534
+ defaultProps: {
535
+ ratio: 40,
536
+ imageRight: false,
537
+ gap: "medium",
538
+ image: [{ type: "Image", props: {} }],
539
+ text: [{ type: "Text", props: {} }]
540
+ },
541
+ component: ({ image, text, ratio = 40, imageRight, gap }) => {
542
+ const imageColumn = /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: ratio, children: renderSlot(image) });
543
+ const textColumn = /* @__PURE__ */ jsxRuntime.jsx(SlotColumn, { $basis: 100 - ratio, children: renderSlot(text) });
544
+ return /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 16, children: [
545
+ imageRight ? textColumn : imageColumn,
546
+ imageRight ? imageColumn : textColumn
547
+ ] });
548
+ }
549
+ });
550
+ var SOCIAL = "Social e contato";
551
+ var ACTIONS = "A\xE7\xF5es";
552
+ var NAV = "Navega\xE7\xE3o";
553
+ var TIME_PLACE = "Tempo e local";
554
+ var GENERAL = "Gerais";
555
+ var CONTENT_ICON_CATALOG = {
556
+ whatsapp: {
557
+ label: "WhatsApp",
558
+ group: SOCIAL,
559
+ variant: "fill",
560
+ viewBox: "0 0 448 512",
561
+ 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"/>'
562
+ },
563
+ instagram: {
564
+ label: "Instagram",
565
+ group: SOCIAL,
566
+ variant: "fill",
567
+ viewBox: "0 0 448 512",
568
+ 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"/>'
569
+ },
570
+ facebook: {
571
+ label: "Facebook",
572
+ group: SOCIAL,
573
+ variant: "fill",
574
+ viewBox: "0 0 320 512",
575
+ 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"/>'
576
+ },
577
+ email: {
578
+ label: "E-mail",
579
+ group: SOCIAL,
580
+ viewBox: "0 0 24 24",
581
+ 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" />'
582
+ },
583
+ telefone: {
584
+ label: "Telefone",
585
+ group: SOCIAL,
586
+ viewBox: "0 0 24 24",
587
+ 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" />'
588
+ },
589
+ link: {
590
+ label: "Link",
591
+ group: SOCIAL,
592
+ viewBox: "0 0 24 24",
593
+ 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" />'
594
+ },
595
+ download: {
596
+ label: "Download",
597
+ group: ACTIONS,
598
+ viewBox: "0 0 24 24",
599
+ 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" />'
600
+ },
601
+ check: {
602
+ label: "Check",
603
+ group: ACTIONS,
604
+ viewBox: "0 0 24 24",
605
+ inner: '<path d="M20 6 9 17l-5-5" />'
606
+ },
607
+ enviar: {
608
+ label: "Enviar",
609
+ group: ACTIONS,
610
+ viewBox: "0 0 24 24",
611
+ 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" />'
612
+ },
613
+ cifrao: {
614
+ label: "Cifr\xE3o",
615
+ group: ACTIONS,
616
+ viewBox: "0 0 24 24",
617
+ 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" />'
618
+ },
619
+ "seta-esquerda": {
620
+ label: "Seta esquerda",
621
+ group: NAV,
622
+ viewBox: "0 0 24 24",
623
+ inner: '<path d="m12 19-7-7 7-7" /><path d="M19 12H5" />'
624
+ },
625
+ "seta-direita": {
626
+ label: "Seta direita",
627
+ group: NAV,
628
+ viewBox: "0 0 24 24",
629
+ inner: '<path d="M5 12h14" /><path d="m12 5 7 7-7 7" />'
630
+ },
631
+ "link-externo": {
632
+ label: "Link externo",
633
+ group: NAV,
634
+ viewBox: "0 0 24 24",
635
+ 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" />'
636
+ },
637
+ calendario: {
638
+ label: "Calend\xE1rio",
639
+ group: TIME_PLACE,
640
+ viewBox: "0 0 24 24",
641
+ inner: '<path d="M8 2v3" /><path d="M16 2v3" /><rect x="3" y="3" width="18" height="18" rx="2" /><path d="M3 9h18" />'
642
+ },
643
+ relogio: {
644
+ label: "Rel\xF3gio",
645
+ group: TIME_PLACE,
646
+ viewBox: "0 0 24 24",
647
+ inner: '<circle cx="12" cy="12" r="10" /><path d="M12 6v6l4 2" />'
648
+ },
649
+ localizacao: {
650
+ label: "Localiza\xE7\xE3o",
651
+ group: TIME_PLACE,
652
+ viewBox: "0 0 24 24",
653
+ 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" />'
654
+ },
655
+ predio: {
656
+ label: "Pr\xE9dio",
657
+ group: TIME_PLACE,
658
+ viewBox: "0 0 24 24",
659
+ 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" />'
660
+ },
661
+ estrela: {
662
+ label: "Estrela",
663
+ group: GENERAL,
664
+ viewBox: "0 0 24 24",
665
+ 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" />'
666
+ },
667
+ coracao: {
668
+ label: "Cora\xE7\xE3o",
669
+ group: GENERAL,
670
+ viewBox: "0 0 24 24",
671
+ 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" />'
672
+ },
673
+ globo: {
674
+ label: "Globo",
675
+ group: GENERAL,
676
+ viewBox: "0 0 24 24",
677
+ 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" />'
678
+ },
679
+ usuario: {
680
+ label: "Usu\xE1rio",
681
+ group: GENERAL,
682
+ viewBox: "0 0 24 24",
683
+ 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" />'
684
+ },
685
+ arquivo: {
686
+ label: "Arquivo",
687
+ group: GENERAL,
688
+ viewBox: "0 0 24 24",
689
+ 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" />'
690
+ },
691
+ imagem: {
692
+ label: "Imagem",
693
+ group: GENERAL,
694
+ viewBox: "0 0 24 24",
695
+ 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" />'
696
+ },
697
+ camera: {
698
+ label: "C\xE2mera",
699
+ group: GENERAL,
700
+ viewBox: "0 0 24 24",
701
+ 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" />'
702
+ }
703
+ };
704
+ var CONTENT_ICON_NAMES = Object.keys(CONTENT_ICON_CATALOG);
705
+ function ContentIcon({
706
+ name,
707
+ size = "1em",
708
+ color = "currentColor",
709
+ strokeWidth = 2,
710
+ style,
711
+ className
712
+ }) {
713
+ const def = name ? CONTENT_ICON_CATALOG[name] : void 0;
714
+ if (!def) return null;
715
+ const stroked = def.variant !== "fill";
716
+ return /* @__PURE__ */ jsxRuntime.jsx(
717
+ "svg",
718
+ {
719
+ width: size,
720
+ height: size,
721
+ viewBox: def.viewBox,
722
+ fill: stroked ? "none" : color,
723
+ ...stroked ? { stroke: color, strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" } : {},
724
+ "aria-hidden": "true",
725
+ focusable: "false",
726
+ className,
727
+ style: { display: "inline-block", verticalAlign: "-0.125em", flexShrink: 0, ...style },
728
+ dangerouslySetInnerHTML: { __html: def.inner }
729
+ }
730
+ );
731
+ }
732
+ var IconSlot = styled4__default.default.span`
733
+ flex: none;
734
+ color: var(--doc-brand, #005ac3);
735
+ line-height: 1;
736
+ `;
737
+ var Body = styled4__default.default.div`
738
+ flex: 1;
739
+ min-width: 0;
740
+ `;
741
+ var IconTextBlock = defineBlock({
742
+ key: "IconText",
743
+ label: "\xCDcone e texto",
744
+ category: "Layout",
745
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.IconTextIcon, {}),
746
+ fields: {
747
+ icon: {
748
+ type: "select",
749
+ label: "\xCDcone",
750
+ options: CONTENT_ICON_NAMES.map((name) => ({ label: CONTENT_ICON_CATALOG[name].label, value: name }))
751
+ },
752
+ content: { type: "textarea", label: "Texto (HTML)" },
753
+ iconSize: { type: "number", label: "Tamanho do \xEDcone (px)", min: 12, max: 96 },
754
+ iconRight: {
755
+ type: "radio",
756
+ label: "Posi\xE7\xE3o do \xEDcone",
757
+ options: [
758
+ { label: "Esquerda", value: false },
759
+ { label: "Direita", value: true }
760
+ ]
761
+ },
762
+ gap: {
763
+ type: "select",
764
+ label: "Espa\xE7amento",
765
+ options: [
766
+ { label: "Nenhum", value: "none" },
767
+ { label: "Pequeno", value: "small" },
768
+ { label: "M\xE9dio", value: "medium" },
769
+ { label: "Grande", value: "large" }
770
+ ]
771
+ }
772
+ },
773
+ propsSchema: zod.z.object({
774
+ icon: zod.z.string(),
775
+ content: zod.z.string(),
776
+ iconSize: zod.z.number().int().min(8).max(128),
777
+ iconRight: zod.z.boolean(),
778
+ gap: zod.z.enum(["none", "small", "medium", "large"])
779
+ }),
780
+ defaultProps: { icon: "check", content: "<p>Descreva o item.</p>", iconSize: 24, iconRight: false, gap: "small" },
781
+ component: ({ icon, content, iconSize, iconRight, gap, puck }) => {
782
+ const glyph = /* @__PURE__ */ jsxRuntime.jsx(IconSlot, { children: /* @__PURE__ */ jsxRuntime.jsx(ContentIcon, { name: icon, size: iconSize ?? 24 }) });
783
+ return /* @__PURE__ */ jsxRuntime.jsxs(Row, { $gap: GAP_PX[gap] ?? 8, $align: "flex-start", children: [
784
+ iconRight ? null : glyph,
785
+ /* @__PURE__ */ jsxRuntime.jsx(Body, { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { html: content, editing: puck?.isEditing }) }),
786
+ iconRight ? glyph : null
787
+ ] });
788
+ }
789
+ });
790
+ var Grid2 = styled4__default.default.table`
791
+ width: 100%;
792
+ border-collapse: collapse;
793
+ font-size: 0.95em;
794
+
795
+ th,
796
+ td {
797
+ padding: 8px 10px;
798
+ border-bottom: 1px solid rgba(127, 137, 152, 0.28);
799
+ text-align: left;
800
+ vertical-align: top;
801
+ }
802
+
803
+ th {
804
+ font-weight: 600;
805
+ background: color-mix(in srgb, var(--doc-brand, #005ac3) 8%, transparent);
806
+ }
807
+ `;
808
+ var TableBlock = defineBlock({
809
+ key: "Table",
810
+ label: "Tabela",
811
+ category: "Dados",
812
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.TableIcon, {}),
813
+ fields: {
814
+ headerRow: {
815
+ type: "radio",
816
+ label: "Primeira linha \xE9 cabe\xE7alho",
817
+ options: [
818
+ { label: "Sim", value: true },
819
+ { label: "N\xE3o", value: false }
820
+ ]
821
+ },
822
+ rows: {
823
+ type: "array",
824
+ label: "Linhas",
825
+ getItemSummary: (row, index) => row?.cells?.map((cell) => cell?.value).filter(Boolean).join(" \xB7 ") || `Linha ${(index ?? 0) + 1}`,
826
+ arrayFields: {
827
+ cells: {
828
+ type: "array",
829
+ label: "C\xE9lulas",
830
+ getItemSummary: (cell, index) => cell?.value || `Coluna ${(index ?? 0) + 1}`,
831
+ arrayFields: { value: { type: "text", label: "Conte\xFAdo" } },
832
+ defaultItemProps: { value: "" }
833
+ }
834
+ },
835
+ defaultItemProps: { cells: [{ value: "" }, { value: "" }] }
836
+ }
837
+ },
838
+ propsSchema: zod.z.object({
839
+ rows: zod.z.array(zod.z.object({ cells: zod.z.array(zod.z.object({ value: zod.z.string() })) })),
840
+ headerRow: zod.z.boolean()
841
+ }),
842
+ defaultProps: {
843
+ headerRow: true,
844
+ rows: [{ cells: [{ value: "Item" }, { value: "Valor" }] }, { cells: [{ value: "Exemplo" }, { value: "R$ 0,00" }] }]
845
+ },
846
+ component: ({ rows = [], headerRow, puck }) => {
847
+ if (!rows.length) return puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Placeholder, { children: "Adicione linhas \xE0 tabela" }) : null;
848
+ const [first, ...rest] = rows;
849
+ const body = headerRow ? rest : rows;
850
+ return /* @__PURE__ */ jsxRuntime.jsxs(Grid2, { children: [
851
+ headerRow ? /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { children: (first?.cells ?? []).map((cell, index) => (
852
+ // eslint-disable-next-line react/no-array-index-key -- a célula não tem id; a posição é a identidade
853
+ /* @__PURE__ */ jsxRuntime.jsx("th", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: cell?.value, editing: puck?.isEditing }) }, index)
854
+ )) }) }) : null,
855
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: body.map((row, rowIndex) => (
856
+ // eslint-disable-next-line react/no-array-index-key -- idem
857
+ /* @__PURE__ */ jsxRuntime.jsx("tr", { children: (row?.cells ?? []).map((cell, cellIndex) => (
858
+ // eslint-disable-next-line react/no-array-index-key -- idem
859
+ /* @__PURE__ */ jsxRuntime.jsx("td", { children: /* @__PURE__ */ jsxRuntime.jsx(RichText, { as: "span", html: cell?.value, editing: puck?.isEditing }) }, cellIndex)
860
+ )) }, rowIndex)
861
+ )) })
862
+ ] });
863
+ }
864
+ });
865
+ var PageBreakBlock = defineBlock({
866
+ key: "PageBreak",
867
+ label: "Quebra de p\xE1gina",
868
+ category: "Estrutura",
869
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkL5FXGEKX_cjs.PageBreakIcon, {}),
870
+ fields: {},
871
+ propsSchema: zod.z.object({}),
872
+ component: ({ puck }) => puck?.isEditing ? /* @__PURE__ */ jsxRuntime.jsx(PageBreakMark, { children: "Quebra de p\xE1gina" }) : null
873
+ });
874
+
875
+ // src/blocks/defaults.tsx
876
+ var defaultBlocks = [
877
+ TextBlock,
878
+ HeadingBlock,
879
+ ListBlock,
880
+ QuoteBlock,
881
+ ButtonBlock,
882
+ DividerBlock,
883
+ SpacerBlock,
884
+ ImageBlock,
885
+ ImageGridBlock,
886
+ TwoColumnsBlock,
887
+ ImageTextBlock,
888
+ IconTextBlock,
889
+ TableBlock,
890
+ PageBreakBlock
891
+ ];
892
+ var blocksByKey = Object.fromEntries(
893
+ defaultBlocks.map((block) => [block.key, block])
894
+ );
895
+
896
+ // src/blocks/overrideBlock.ts
897
+ function overrideBlock(key, patch = {}) {
898
+ const base = blocksByKey[key];
899
+ if (!base) {
900
+ chunkLNBAFOVK_cjs.devWarn(
901
+ `override-unknown-block:${key}`,
902
+ `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.`
903
+ );
904
+ }
905
+ return { ...base, key, ...patch };
906
+ }
907
+
908
+ exports.ButtonBlock = ButtonBlock;
909
+ exports.CONTENT_ICON_CATALOG = CONTENT_ICON_CATALOG;
910
+ exports.CONTENT_ICON_NAMES = CONTENT_ICON_NAMES;
911
+ exports.ContentIcon = ContentIcon;
912
+ exports.DOCUMENT_PROSE_CSS = DOCUMENT_PROSE_CSS;
913
+ exports.DOCUMENT_TEXT_CSS = DOCUMENT_TEXT_CSS;
914
+ exports.DividerBlock = DividerBlock;
915
+ exports.HeadingBlock = HeadingBlock;
916
+ exports.IconTextBlock = IconTextBlock;
917
+ exports.ImageBlock = ImageBlock;
918
+ exports.ImageGridBlock = ImageGridBlock;
919
+ exports.ImageTextBlock = ImageTextBlock;
920
+ exports.ListBlock = ListBlock;
921
+ exports.PageBreakBlock = PageBreakBlock;
922
+ exports.QuoteBlock = QuoteBlock;
923
+ exports.RichText = RichText;
924
+ exports.SpacerBlock = SpacerBlock;
925
+ exports.TableBlock = TableBlock;
926
+ exports.TextBlock = TextBlock;
927
+ exports.TwoColumnsBlock = TwoColumnsBlock;
928
+ exports.blocksByKey = blocksByKey;
929
+ exports.defaultBlocks = defaultBlocks;
930
+ exports.defineBlock = defineBlock;
931
+ exports.overrideBlock = overrideBlock;
932
+ //# sourceMappingURL=chunk-RZOR3HOA.cjs.map
933
+ //# sourceMappingURL=chunk-RZOR3HOA.cjs.map