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.
- package/README.md +23 -6
- package/dist/blocks.cjs +108 -0
- package/dist/blocks.cjs.map +1 -0
- package/dist/blocks.d.cts +214 -0
- package/dist/blocks.d.ts +214 -0
- package/dist/blocks.js +7 -0
- package/dist/blocks.js.map +1 -0
- package/dist/catalogContext-DenbX-OW.d.cts +15 -0
- package/dist/catalogContext-HGMU-w_4.d.ts +15 -0
- package/dist/chunk-26DSIOEY.cjs +68 -0
- package/dist/chunk-26DSIOEY.cjs.map +1 -0
- package/dist/chunk-3FTKM37U.cjs +1354 -0
- package/dist/chunk-3FTKM37U.cjs.map +1 -0
- package/dist/chunk-CZB7F2LA.js +90 -0
- package/dist/chunk-CZB7F2LA.js.map +1 -0
- package/dist/chunk-ERKU5FDV.cjs +407 -0
- package/dist/chunk-ERKU5FDV.cjs.map +1 -0
- package/dist/chunk-FKX46GKE.cjs +36 -0
- package/dist/chunk-FKX46GKE.cjs.map +1 -0
- package/dist/chunk-GR76U6FP.cjs +194 -0
- package/dist/chunk-GR76U6FP.cjs.map +1 -0
- package/dist/chunk-I22MGPXO.cjs +117 -0
- package/dist/chunk-I22MGPXO.cjs.map +1 -0
- package/dist/chunk-JYSA6IM5.js +1327 -0
- package/dist/chunk-JYSA6IM5.js.map +1 -0
- package/dist/chunk-L5FXGEKX.cjs +114 -0
- package/dist/chunk-L5FXGEKX.cjs.map +1 -0
- package/dist/chunk-LNBAFOVK.cjs +14 -0
- package/dist/chunk-LNBAFOVK.cjs.map +1 -0
- package/dist/chunk-M6FQVH76.js +824 -0
- package/dist/chunk-M6FQVH76.js.map +1 -0
- package/dist/chunk-MUSSJOOA.js +109 -0
- package/dist/chunk-MUSSJOOA.js.map +1 -0
- package/dist/chunk-N3IDPT3B.js +182 -0
- package/dist/chunk-N3IDPT3B.js.map +1 -0
- package/dist/chunk-OJZJJEJX.js +904 -0
- package/dist/chunk-OJZJJEJX.js.map +1 -0
- package/dist/chunk-PLQNNXS2.js +382 -0
- package/dist/chunk-PLQNNXS2.js.map +1 -0
- package/dist/chunk-QJ5W5EED.cjs +94 -0
- package/dist/chunk-QJ5W5EED.cjs.map +1 -0
- package/dist/chunk-QYBWIJXZ.js +98 -0
- package/dist/chunk-QYBWIJXZ.js.map +1 -0
- package/dist/chunk-RO3Y2MSU.cjs +844 -0
- package/dist/chunk-RO3Y2MSU.cjs.map +1 -0
- package/dist/chunk-RZOR3HOA.cjs +933 -0
- package/dist/chunk-RZOR3HOA.cjs.map +1 -0
- package/dist/chunk-SOIYSSU3.js +108 -0
- package/dist/chunk-SOIYSSU3.js.map +1 -0
- package/dist/chunk-SP5LCPDG.cjs +119 -0
- package/dist/chunk-SP5LCPDG.cjs.map +1 -0
- package/dist/chunk-W52ULJCW.js +61 -0
- package/dist/chunk-W52ULJCW.js.map +1 -0
- package/dist/chunk-ZOJBDFKU.js +12 -0
- package/dist/chunk-ZOJBDFKU.js.map +1 -0
- package/dist/editor.cjs +60 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.d.cts +190 -0
- package/dist/editor.d.ts +190 -0
- package/dist/editor.js +7 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.cjs +436 -3753
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +72 -7892
- package/dist/index.d.ts +72 -7892
- package/dist/index.js +22 -3662
- package/dist/index.js.map +1 -1
- package/dist/messages-Bi0JxNIH.d.cts +23 -0
- package/dist/messages-Bi0JxNIH.d.ts +23 -0
- package/dist/print.cjs +354 -0
- package/dist/print.cjs.map +1 -0
- package/dist/print.d.cts +43 -0
- package/dist/print.d.ts +43 -0
- package/dist/print.js +336 -0
- package/dist/print.js.map +1 -0
- package/dist/puck.cjs +8 -8
- package/dist/puck.cjs.map +1 -1
- package/dist/render.cjs +72 -0
- package/dist/render.cjs.map +1 -0
- package/dist/render.d.cts +93 -0
- package/dist/render.d.ts +93 -0
- package/dist/render.js +7 -0
- package/dist/render.js.map +1 -0
- package/dist/theme-BuEFpQeZ.d.cts +112 -0
- package/dist/theme-BuEFpQeZ.d.ts +112 -0
- package/dist/types-BgIugNWW.d.cts +25 -0
- package/dist/types-BgIugNWW.d.ts +25 -0
- package/dist/types-CvKSS1Sy.d.cts +38 -0
- package/dist/types-CvKSS1Sy.d.ts +38 -0
- package/dist/variables.cjs +111 -0
- package/dist/variables.cjs.map +1 -0
- package/dist/variables.d.cts +106 -0
- package/dist/variables.d.ts +106 -0
- package/dist/variables.js +6 -0
- package/dist/variables.js.map +1 -0
- package/package.json +39 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/blocks/defineBlock.ts","../src/blocks/primitives/proseCss.ts","../src/blocks/primitives/RichText.tsx","../src/blocks/components/TextBlock.tsx","../src/blocks/components/HeadingBlock.tsx","../src/blocks/components/ListBlock.tsx","../src/blocks/components/QuoteBlock.tsx","../src/blocks/components/shared.tsx","../src/blocks/components/ButtonBlock.tsx","../src/blocks/components/DividerBlock.tsx","../src/blocks/components/SpacerBlock.tsx","../src/blocks/components/ImageBlock.tsx","../src/blocks/components/ImageGridBlock.tsx","../src/blocks/components/TwoColumnsBlock.tsx","../src/blocks/components/ImageTextBlock.tsx","../src/blocks/contentIcons.tsx","../src/blocks/components/IconTextBlock.tsx","../src/blocks/components/TableBlock.tsx","../src/blocks/components/PageBreakBlock.tsx","../src/blocks/defaults.tsx","../src/blocks/overrideBlock.ts"],"names":["styled","jsx","z","jsxs","slotSchema","Grid"],"mappings":"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","file":"chunk-OJZJJEJX.js","sourcesContent":["import type { BlockEntry } from './types';\n\n/** Helper tipado para declarar um bloco (`fields`/`defaultProps` alinhados às props). */\nexport function defineBlock<Props extends Record<string, unknown>>(entry: BlockEntry<Props>): BlockEntry<Props> {\n return entry;\n}\n","/**\n * Tipografia do texto rico do documento, em CSS cru para servir às três superfícies que\n * mostram o MESMO conteúdo: o editor inline (iframe do TinyMCE, documento à parte que não\n * recebe o CSS do app), o canvas do Puck e o HTML publicado. Antes cada uma caía num default\n * diferente (h1 de 48px no canvas, 28px no editor, 32px no publicado) — ver docs/blocks.md.\n *\n * Sem `&` e sem seletor de escopo: dentro de `styled` os seletores de elemento já viram\n * descendentes; no `content_style` do TinyMCE eles valem a partir do body.\n */\n\n/** Declarações da base do texto — vão no container (ou no `body`, no iframe). */\nexport const DOCUMENT_TEXT_CSS = `font-size: 16px;\nline-height: 1.5;\noverflow-wrap: break-word;\nword-break: break-word;`;\n\nexport const DOCUMENT_PROSE_CSS = `p {\n margin: 0 0 8px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin: 0 0 8px;\n line-height: 1.25;\n font-weight: 600;\n}\n\nh1 { font-size: 2em; }\nh2 { font-size: 1.5em; }\nh3 { font-size: 1.25em; }\nh4 { font-size: 1.125em; }\nh5 { font-size: 1em; }\nh6 { font-size: 0.875em; }\n\nul, ol {\n margin: 0 0 8px;\n padding-left: 24px;\n}\n\nul { list-style: disc; }\nol { list-style: decimal; }\n\nli { margin: 0 0 4px; }\n\nstrong, b { font-weight: 600; }\nem, i { font-style: italic; }\n\na { color: var(--doc-brand, #005ac3); }\n\nimg { max-width: 100%; }\n\n/* O chip herda peso, estilo e sublinhado do texto ao redor: pinar qualquer um deles faz\n negrito/italico/sublinhado nao pegarem na variavel. Inline (e nao inline-block) porque\n text-decoration nao atravessa um inline-block. */\n.dg-var {\n display: inline;\n font-size: 0.92em;\n font-weight: inherit;\n font-style: inherit;\n white-space: nowrap;\n}\n\n/* Sem margem sobrando no fim do bloco. Seletores de elemento, e nao um combinador filho,\n porque a mesma string tambem e usada no topo de uma folha, onde nao ha pai. */\np:last-child,\nul:last-child,\nol:last-child,\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child,\nh6:last-child {\n margin-bottom: 0;\n}`;\n","import type { ElementType } from 'react';\nimport styled from 'styled-components';\nimport { useCatalog } from '../../variables/catalogContext';\nimport { useResolvedVariables, useUnresolvedDisplay } from '../../variables/resolvedContext';\nimport { CHIP_CLASS, EMPTY_CHIP_CLASS, INVALID_CHIP_CLASS, resolveVariableHtml } from '../../variables/variableHtml';\nimport { DOCUMENT_PROSE_CSS, DOCUMENT_TEXT_CSS } from './proseCss';\n\nexport type RichTextProps = {\n html?: string;\n editing?: boolean;\n as?: ElementType;\n className?: string;\n};\n\nconst Prose = styled.div`\n ${DOCUMENT_TEXT_CSS}\n ${DOCUMENT_PROSE_CSS}\n\n .${CHIP_CLASS} {\n padding: 1px 6px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--doc-brand, #005ac3) 12%, transparent);\n color: var(--doc-brand, #005ac3);\n }\n\n .${INVALID_CHIP_CLASS} {\n background: #fdecea;\n color: #b4341b;\n }\n\n .${EMPTY_CHIP_CLASS} {\n background: #f5e4b8;\n color: #84620d;\n }\n`;\n\nexport function RichText({ html = '', editing = false, as, className }: RichTextProps) {\n const resolved = useResolvedVariables();\n const catalog = useCatalog();\n const unresolved = useUnresolvedDisplay();\n\n return (\n <Prose\n as={as}\n className={className}\n dangerouslySetInnerHTML={{\n __html: resolveVariableHtml(html, resolved, { keepChip: editing, catalog, unresolved })\n }}\n />\n );\n}\n","import { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { TextIcon } from '../../editor/blockIcons';\nimport { RichText } from '../primitives/RichText';\n\nexport type TextBlockProps = {\n content: string;\n puck?: { isEditing?: boolean };\n};\n\nexport const TextBlock = defineBlock<TextBlockProps>({\n key: 'Text',\n label: 'Texto',\n category: 'Conteúdo',\n icon: <TextIcon />,\n fields: {\n content: { type: 'textarea', label: 'Conteúdo (HTML)' }\n },\n propsSchema: z.object({ content: z.string() }),\n defaultProps: { content: '<p>Escreva o texto do documento aqui.</p>' },\n component: ({ content, puck }) => <RichText html={content} editing={puck?.isEditing} />\n});\n","import { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { HeadingIcon } from '../../editor/blockIcons';\nimport { RichText } from '../primitives/RichText';\n\nexport type HeadingBlockProps = {\n text: string;\n level: 1 | 2 | 3 | 4;\n puck?: { isEditing?: boolean };\n};\n\nexport const HeadingBlock = defineBlock<HeadingBlockProps>({\n key: 'Heading',\n label: 'Título',\n category: 'Conteúdo',\n icon: <HeadingIcon />,\n fields: {\n text: { type: 'text', label: 'Título' },\n level: {\n type: 'select',\n label: 'Nível',\n options: [\n { label: 'Título 1', value: 1 },\n { label: 'Título 2', value: 2 },\n { label: 'Título 3', value: 3 },\n { label: 'Título 4', value: 4 }\n ]\n }\n },\n propsSchema: z.object({ text: z.string(), level: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]) }),\n defaultProps: { text: 'Título da seção', level: 2 },\n component: ({ text, level, puck }) => <RichText as={`h${level ?? 2}`} html={text} editing={puck?.isEditing} />\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { ListIcon } from '../../editor/blockIcons';\nimport { RichText } from '../primitives/RichText';\n\nexport type ListItem = { text: string };\n\nexport type ListBlockProps = {\n items: ListItem[];\n ordered: boolean;\n puck?: { isEditing?: boolean };\n};\n\nconst List = styled.ul`\n margin: 0;\n padding-left: 22px;\n\n li {\n margin-bottom: 4px;\n }\n li::marker {\n color: var(--doc-brand, #005ac3);\n }\n`;\n\nexport const ListBlock = defineBlock<ListBlockProps>({\n key: 'List',\n label: 'Lista',\n category: 'Conteúdo',\n icon: <ListIcon />,\n fields: {\n ordered: {\n type: 'radio',\n label: 'Marcador',\n options: [\n { label: 'Bolinha', value: false },\n { label: 'Numerada', value: true }\n ]\n },\n items: {\n type: 'array',\n label: 'Itens',\n getItemSummary: (item: ListItem, index) => item?.text || `Item ${(index ?? 0) + 1}`,\n arrayFields: { text: { type: 'text', label: 'Texto' } },\n defaultItemProps: { text: 'Novo item' }\n }\n },\n propsSchema: z.object({ items: z.array(z.object({ text: z.string() })), ordered: z.boolean() }),\n defaultProps: {\n ordered: false,\n items: [{ text: 'Primeiro item' }, { text: 'Segundo item' }]\n },\n component: ({ items = [], ordered, puck }) => (\n <List as={ordered ? 'ol' : 'ul'}>\n {items.map((item, index) => (\n // eslint-disable-next-line react/no-array-index-key -- o item não tem id próprio; a ordem é a identidade\n <li key={index}>\n <RichText as=\"span\" html={item?.text} editing={puck?.isEditing} />\n </li>\n ))}\n </List>\n )\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { QuoteIcon } from '../../editor/blockIcons';\nimport { RichText } from '../primitives/RichText';\n\nexport type QuoteBlockProps = {\n content: string;\n author?: string;\n puck?: { isEditing?: boolean };\n};\n\nconst Callout = styled.blockquote`\n margin: 0;\n padding: 12px 0 12px 16px;\n border-left: 3px solid var(--doc-brand, #005ac3);\n`;\n\nconst Author = styled.footer`\n margin-top: 6px;\n font-size: 0.9em;\n opacity: 0.75;\n`;\n\nexport const QuoteBlock = defineBlock<QuoteBlockProps>({\n key: 'Quote',\n label: 'Destaque',\n category: 'Conteúdo',\n icon: <QuoteIcon />,\n fields: {\n content: { type: 'textarea', label: 'Texto (HTML)' },\n author: { type: 'text', label: 'Autor (opcional)' }\n },\n propsSchema: z.object({ content: z.string(), author: z.string().optional() }),\n defaultProps: { content: '<p>Texto em destaque.</p>', author: '' },\n component: ({ content, author, puck }) => (\n <Callout>\n <RichText html={content} editing={puck?.isEditing} />\n {author ? <Author>{author}</Author> : null}\n </Callout>\n )\n});\n","import type { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nexport const SIZE_WIDTH: Record<string, string> = { small: '33%', medium: '66%', large: '100%' };\n\nexport const GAP_PX: Record<string, number> = { none: 0, small: 8, medium: 16, large: 24 };\n\nexport const Placeholder = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 64px;\n padding: 16px;\n border: 1px dashed #c3c9d2;\n border-radius: 8px;\n color: #9aa3af;\n font-size: 13px;\n text-align: center;\n`;\n\nexport const LinkButton = styled.a`\n display: inline-block;\n padding: 8px 16px;\n border-radius: 6px;\n background: var(--doc-brand, #1a56db);\n color: #fff;\n text-decoration: none;\n font-weight: 500;\n`;\n\nexport const PageBreakMark = styled.div`\n break-after: page;\n margin: 8px 0;\n border-top: 1px dashed #c3c9d2;\n text-align: center;\n color: #9aa3af;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n`;\n\n/**\n * Coluna de slot. `min-width: 0` é obrigatório: sem isso um filho largo (tabela,\n * imagem, palavra sem quebra) força a coluna a crescer e estoura a folha.\n */\nexport const SlotColumn = styled.div<{ $basis: number }>`\n flex: ${props => props.$basis} 1 0;\n min-width: 0;\n`;\n\nexport const Row = styled.div<{ $gap: number; $align?: string }>`\n display: flex;\n gap: ${props => props.$gap}px;\n align-items: ${props => props.$align ?? 'flex-start'};\n`;\n\n/**\n * Campo `slot` tem duas caras: no documento ele é um ARRAY de blocos (é isso que\n * `defaultProps` e `propsSchema` descrevem), mas o Puck entrega ao componente uma\n * FUNÇÃO que renderiza a zona. O helper faz a ponte sem espalhar cast por bloco.\n */\nexport const renderSlot = (slot: unknown): ReactNode =>\n typeof slot === 'function' ? (slot as () => ReactNode)() : null;\n","import { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { ButtonIcon } from '../../editor/blockIcons';\nimport { LinkButton } from './shared';\n\nexport type ButtonBlockProps = {\n text: string;\n href: string;\n};\n\nexport const ButtonBlock = defineBlock<ButtonBlockProps>({\n key: 'Button',\n label: 'Botão',\n category: 'Conteúdo',\n icon: <ButtonIcon />,\n fields: {\n text: { type: 'text', label: 'Texto do botão', contentEditable: true },\n href: { type: 'text', label: 'Link ao clicar' }\n },\n propsSchema: z.object({ text: z.string(), href: z.string() }),\n defaultProps: { text: 'Clique aqui', href: '#' },\n component: ({ text, href }) => (\n <LinkButton href={href || '#'} target=\"_blank\" rel=\"noopener noreferrer\">\n {text}\n </LinkButton>\n )\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { DividerIcon } from '../../editor/blockIcons';\nimport { GAP_PX } from './shared';\n\nexport type DividerBlockProps = {\n variant: 'solid' | 'dashed' | 'dotted';\n spacing: 'none' | 'small' | 'medium' | 'large';\n};\n\nconst Rule = styled.hr<{ $variant: string; $spacing: number }>`\n border: none;\n border-top: 1px ${props => props.$variant} currentColor;\n opacity: 0.25;\n margin: ${props => props.$spacing}px 0;\n`;\n\nexport const DividerBlock = defineBlock<DividerBlockProps>({\n key: 'Divider',\n label: 'Divisor',\n category: 'Conteúdo',\n icon: <DividerIcon />,\n fields: {\n variant: {\n type: 'select',\n label: 'Traço',\n options: [\n { label: 'Contínuo', value: 'solid' },\n { label: 'Tracejado', value: 'dashed' },\n { label: 'Pontilhado', value: 'dotted' }\n ]\n },\n spacing: {\n type: 'select',\n label: 'Espaçamento',\n options: [\n { label: 'Nenhum', value: 'none' },\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n }\n },\n propsSchema: z.object({\n variant: z.enum(['solid', 'dashed', 'dotted']),\n spacing: z.enum(['none', 'small', 'medium', 'large'])\n }),\n defaultProps: { variant: 'solid', spacing: 'medium' },\n component: ({ variant, spacing }) => <Rule $variant={variant ?? 'solid'} $spacing={GAP_PX[spacing] ?? 16} />\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { SpacerIcon } from '../../editor/blockIcons';\n\nexport type SpacerBlockProps = {\n height: number;\n puck?: { isEditing?: boolean };\n};\n\nconst Gap = styled.div<{ $height: number; $editing: boolean }>`\n height: ${props => props.$height}px;\n ${props => (props.$editing ? 'border: 1px dashed #dbe0e6; border-radius: 4px;' : '')}\n`;\n\nexport const SpacerBlock = defineBlock<SpacerBlockProps>({\n key: 'Spacer',\n label: 'Espaço',\n category: 'Conteúdo',\n icon: <SpacerIcon />,\n fields: {\n height: { type: 'number', label: 'Altura (px)', min: 4, max: 400 }\n },\n propsSchema: z.object({ height: z.number().int().min(1).max(600) }),\n defaultProps: { height: 24 },\n component: ({ height, puck }) => <Gap $height={height ?? 24} $editing={Boolean(puck?.isEditing)} />\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { ImageIcon } from '../../editor/blockIcons';\nimport { Placeholder, SIZE_WIDTH } from './shared';\n\nexport type ImageBlockProps = {\n src: string;\n alt: string;\n caption?: string;\n size: 'small' | 'medium' | 'large';\n opacity: number;\n puck?: { isEditing?: boolean };\n};\n\nconst Figure = styled.figure`\n margin: 0;\n`;\n\nconst Caption = styled.figcaption`\n margin-top: 6px;\n font-size: 0.85em;\n opacity: 0.7;\n`;\n\nexport const ImageBlock = defineBlock<ImageBlockProps>({\n key: 'Image',\n label: 'Imagem',\n category: 'Mídia',\n icon: <ImageIcon />,\n fields: {\n src: { type: 'text', label: 'Imagem (URL)' },\n alt: { type: 'text', label: 'Texto alternativo' },\n caption: { type: 'text', label: 'Legenda (opcional)' },\n size: {\n type: 'select',\n label: 'Tamanho',\n options: [\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n },\n opacity: { type: 'number', label: 'Opacidade (%)', min: 0, max: 100 }\n },\n propsSchema: z.object({\n src: z.string(),\n alt: z.string(),\n caption: z.string().optional(),\n size: z.enum(['small', 'medium', 'large']),\n opacity: z.number().min(0).max(100)\n }),\n defaultProps: { src: '', alt: '', caption: '', size: 'medium', opacity: 100 },\n component: ({ src, alt, caption, size, opacity, puck }) => {\n if (!src) return puck?.isEditing ? <Placeholder>Informe a URL da imagem</Placeholder> : null;\n\n return (\n <Figure>\n <img\n src={src}\n alt={alt ?? ''}\n style={{ width: SIZE_WIDTH[size] ?? '66%', maxWidth: '100%', opacity: (opacity ?? 100) / 100 }}\n />\n {caption ? <Caption>{caption}</Caption> : null}\n </Figure>\n );\n }\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { ImageGridIcon } from '../../editor/blockIcons';\nimport { GAP_PX, Placeholder } from './shared';\n\nexport type GridImage = { src: string; alt?: string };\n\nexport type ImageGridBlockProps = {\n images: GridImage[];\n columns: number;\n gap: 'none' | 'small' | 'medium' | 'large';\n ratio: 'square' | 'landscape' | 'portrait' | 'auto';\n puck?: { isEditing?: boolean };\n};\n\nconst RATIO: Record<string, string | undefined> = {\n square: '1 / 1',\n landscape: '4 / 3',\n portrait: '3 / 4',\n auto: undefined\n};\n\nconst Grid = styled.div<{ $columns: number; $gap: number }>`\n display: grid;\n grid-template-columns: repeat(${props => props.$columns}, 1fr);\n gap: ${props => props.$gap}px;\n`;\n\nconst Cell = styled.img<{ $ratio?: string }>`\n width: 100%;\n height: ${props => (props.$ratio ? '100%' : 'auto')};\n aspect-ratio: ${props => props.$ratio ?? 'auto'};\n object-fit: ${props => (props.$ratio ? 'cover' : 'contain')};\n display: block;\n`;\n\nexport const ImageGridBlock = defineBlock<ImageGridBlockProps>({\n key: 'ImageGrid',\n label: 'Grade de imagens',\n category: 'Mídia',\n icon: <ImageGridIcon />,\n fields: {\n images: {\n type: 'array',\n label: 'Imagens',\n getItemSummary: (item: GridImage, index) => item?.alt || item?.src || `Imagem ${(index ?? 0) + 1}`,\n arrayFields: {\n src: { type: 'text', label: 'URL' },\n alt: { type: 'text', label: 'Texto alternativo' }\n },\n defaultItemProps: { src: '', alt: '' }\n },\n columns: { type: 'number', label: 'Colunas', min: 1, max: 4 },\n gap: {\n type: 'select',\n label: 'Espaçamento',\n options: [\n { label: 'Nenhum', value: 'none' },\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n },\n ratio: {\n type: 'select',\n label: 'Proporção',\n options: [\n { label: 'Quadrada', value: 'square' },\n { label: 'Paisagem', value: 'landscape' },\n { label: 'Retrato', value: 'portrait' },\n { label: 'Original', value: 'auto' }\n ]\n }\n },\n propsSchema: z.object({\n images: z.array(z.object({ src: z.string(), alt: z.string().optional() })),\n columns: z.number().int().min(1).max(4),\n gap: z.enum(['none', 'small', 'medium', 'large']),\n ratio: z.enum(['square', 'landscape', 'portrait', 'auto'])\n }),\n defaultProps: { images: [], columns: 2, gap: 'small', ratio: 'square' },\n component: ({ images = [], columns, gap, ratio, puck }) => {\n const filled = images.filter(image => image?.src);\n if (!filled.length) return puck?.isEditing ? <Placeholder>Adicione imagens à grade</Placeholder> : null;\n\n return (\n <Grid $columns={columns ?? 2} $gap={GAP_PX[gap] ?? 8}>\n {filled.map((image, index) => (\n // eslint-disable-next-line react/no-array-index-key -- a imagem não tem id próprio; a ordem é a identidade\n <Cell key={index} src={image.src} alt={image.alt ?? ''} $ratio={RATIO[ratio ?? 'square']} />\n ))}\n </Grid>\n );\n }\n});\n","import type { Slot } from '@puckeditor/core';\nimport { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { TwoColumnsIcon } from '../../editor/blockIcons';\nimport { GAP_PX, Row, SlotColumn, renderSlot } from './shared';\n\nexport type TwoColumnsBlockProps = {\n left: Slot;\n right: Slot;\n ratio: number;\n gap: 'none' | 'small' | 'medium' | 'large';\n align: 'start' | 'center';\n};\n\nconst slotSchema = z.array(z.unknown()).optional();\n\nexport const TwoColumnsBlock = defineBlock<TwoColumnsBlockProps>({\n key: 'TwoColumns',\n label: 'Duas colunas',\n category: 'Layout',\n icon: <TwoColumnsIcon />,\n fields: {\n left: { type: 'slot', label: 'Coluna esquerda' },\n right: { type: 'slot', label: 'Coluna direita' },\n ratio: { type: 'number', label: 'Largura da esquerda (%)', min: 20, max: 80 },\n gap: {\n type: 'select',\n label: 'Espaçamento',\n options: [\n { label: 'Nenhum', value: 'none' },\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n },\n align: {\n type: 'radio',\n label: 'Alinhamento vertical',\n options: [\n { label: 'Topo', value: 'start' },\n { label: 'Centro', value: 'center' }\n ]\n }\n },\n propsSchema: z.object({\n left: slotSchema,\n right: slotSchema,\n ratio: z.number().min(0).max(100),\n gap: z.enum(['none', 'small', 'medium', 'large']),\n align: z.enum(['start', 'center'])\n }),\n defaultProps: { ratio: 50, gap: 'medium', align: 'start' },\n component: ({ left, right, ratio = 50, gap, align }) => (\n <Row $gap={GAP_PX[gap] ?? 16} $align={align === 'center' ? 'center' : 'flex-start'}>\n <SlotColumn $basis={ratio}>{renderSlot(left)}</SlotColumn>\n <SlotColumn $basis={100 - ratio}>{renderSlot(right)}</SlotColumn>\n </Row>\n )\n});\n","import type { Slot } from '@puckeditor/core';\nimport { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { ImageTextIcon } from '../../editor/blockIcons';\nimport { GAP_PX, Row, SlotColumn, renderSlot } from './shared';\n\nexport type ImageTextBlockProps = {\n image: Slot;\n text: Slot;\n ratio: number;\n imageRight: boolean;\n gap: 'none' | 'small' | 'medium' | 'large';\n};\n\nconst slotSchema = z.array(z.unknown()).optional();\n\nexport const ImageTextBlock = defineBlock<ImageTextBlockProps>({\n key: 'ImageText',\n label: 'Imagem e texto',\n category: 'Layout',\n icon: <ImageTextIcon />,\n fields: {\n image: { type: 'slot', label: 'Imagem', allow: ['Image', 'ImageGrid'] },\n text: { type: 'slot', label: 'Texto', allow: ['Text', 'Heading', 'List', 'Quote', 'Button'] },\n ratio: { type: 'number', label: 'Largura da imagem (%)', min: 20, max: 80 },\n imageRight: {\n type: 'radio',\n label: 'Posição da imagem',\n options: [\n { label: 'Esquerda', value: false },\n { label: 'Direita', value: true }\n ]\n },\n gap: {\n type: 'select',\n label: 'Espaçamento',\n options: [\n { label: 'Nenhum', value: 'none' },\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n }\n },\n propsSchema: z.object({\n image: slotSchema,\n text: slotSchema,\n ratio: z.number().min(0).max(100),\n imageRight: z.boolean(),\n gap: z.enum(['none', 'small', 'medium', 'large'])\n }),\n defaultProps: {\n ratio: 40,\n imageRight: false,\n gap: 'medium',\n image: [{ type: 'Image', props: {} }],\n text: [{ type: 'Text', props: {} }]\n },\n component: ({ image, text, ratio = 40, imageRight, gap }) => {\n const imageColumn = <SlotColumn $basis={ratio}>{renderSlot(image)}</SlotColumn>;\n const textColumn = <SlotColumn $basis={100 - ratio}>{renderSlot(text)}</SlotColumn>;\n\n return (\n <Row $gap={GAP_PX[gap] ?? 16}>\n {imageRight ? textColumn : imageColumn}\n {imageRight ? imageColumn : textColumn}\n </Row>\n );\n }\n});\n","import type { CSSProperties } from 'react';\n\nconst SOCIAL = 'Social e contato';\nconst ACTIONS = 'Ações';\nconst NAV = 'Navegação';\nconst TIME_PLACE = 'Tempo e local';\nconst GENERAL = 'Gerais';\n\nexport type ContentIconDef = {\n label: string;\n group: string;\n viewBox: string;\n inner: string;\n variant?: 'fill' | 'stroke';\n};\n\n/**\n * SVG inline com width/height explícitos: o HTML do documento (iframe, link público, PDF)\n * não carrega CSS global nenhum, e sem dimensão o svg cai no default 300x150.\n *\n * As `key`s são contrato de dado — ficam gravadas em `appearance.icon` no documento.\n * Renomear uma exige migração; trocar o desenho, não.\n */\nexport const CONTENT_ICON_CATALOG: Record<string, ContentIconDef> = {\n whatsapp: {\n label: 'WhatsApp',\n group: SOCIAL,\n variant: 'fill',\n viewBox: '0 0 448 512',\n inner:\n '<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\"/>'\n },\n instagram: {\n label: 'Instagram',\n group: SOCIAL,\n variant: 'fill',\n viewBox: '0 0 448 512',\n inner:\n '<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\"/>'\n },\n facebook: {\n label: 'Facebook',\n group: SOCIAL,\n variant: 'fill',\n viewBox: '0 0 320 512',\n inner:\n '<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\"/>'\n },\n email: {\n label: 'E-mail',\n group: SOCIAL,\n viewBox: '0 0 24 24',\n 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\" />'\n },\n telefone: {\n label: 'Telefone',\n group: SOCIAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n link: {\n label: 'Link',\n group: SOCIAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n download: {\n label: 'Download',\n group: ACTIONS,\n viewBox: '0 0 24 24',\n 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\" />'\n },\n check: {\n label: 'Check',\n group: ACTIONS,\n viewBox: '0 0 24 24',\n inner: '<path d=\"M20 6 9 17l-5-5\" />'\n },\n enviar: {\n label: 'Enviar',\n group: ACTIONS,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n cifrao: {\n label: 'Cifrão',\n group: ACTIONS,\n viewBox: '0 0 24 24',\n 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\" />'\n },\n 'seta-esquerda': {\n label: 'Seta esquerda',\n group: NAV,\n viewBox: '0 0 24 24',\n inner: '<path d=\"m12 19-7-7 7-7\" /><path d=\"M19 12H5\" />'\n },\n 'seta-direita': {\n label: 'Seta direita',\n group: NAV,\n viewBox: '0 0 24 24',\n inner: '<path d=\"M5 12h14\" /><path d=\"m12 5 7 7-7 7\" />'\n },\n 'link-externo': {\n label: 'Link externo',\n group: NAV,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n calendario: {\n label: 'Calendário',\n group: TIME_PLACE,\n viewBox: '0 0 24 24',\n inner:\n '<path d=\"M8 2v3\" /><path d=\"M16 2v3\" /><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><path d=\"M3 9h18\" />'\n },\n relogio: {\n label: 'Relógio',\n group: TIME_PLACE,\n viewBox: '0 0 24 24',\n inner: '<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 6v6l4 2\" />'\n },\n localizacao: {\n label: 'Localização',\n group: TIME_PLACE,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n predio: {\n label: 'Prédio',\n group: TIME_PLACE,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n estrela: {\n label: 'Estrela',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n coracao: {\n label: 'Coração',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n globo: {\n label: 'Globo',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n usuario: {\n label: 'Usuário',\n group: GENERAL,\n viewBox: '0 0 24 24',\n 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\" />'\n },\n arquivo: {\n label: 'Arquivo',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n imagem: {\n label: 'Imagem',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n },\n camera: {\n label: 'Câmera',\n group: GENERAL,\n viewBox: '0 0 24 24',\n inner:\n '<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\" />'\n }\n};\n\nexport const CONTENT_ICON_NAMES = Object.keys(CONTENT_ICON_CATALOG);\n\nexport type ContentIconProps = {\n name?: string;\n /** Aceita número (px) ou qualquer unidade CSS. Default `1em` — acompanha o font-size do contexto. */\n size?: number | string;\n color?: string;\n /** Espessura do traço, em unidades do viewBox (24). Ignorado por ícone preenchido. */\n strokeWidth?: number;\n style?: CSSProperties;\n className?: string;\n};\n\nexport function ContentIcon({\n name,\n size = '1em',\n color = 'currentColor',\n strokeWidth = 2,\n style,\n className\n}: ContentIconProps) {\n const def = name ? CONTENT_ICON_CATALOG[name] : undefined;\n if (!def) return null;\n\n const stroked = def.variant !== 'fill';\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={def.viewBox}\n fill={stroked ? 'none' : color}\n {...(stroked\n ? { stroke: color, strokeWidth, strokeLinecap: 'round' as const, strokeLinejoin: 'round' as const }\n : {})}\n aria-hidden=\"true\"\n focusable=\"false\"\n className={className}\n style={{ display: 'inline-block', verticalAlign: '-0.125em', flexShrink: 0, ...style }}\n // eslint-disable-next-line react/no-danger -- markup estático deste arquivo, nunca entrada do host\n dangerouslySetInnerHTML={{ __html: def.inner }}\n />\n );\n}\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { IconTextIcon } from '../../editor/blockIcons';\nimport { CONTENT_ICON_CATALOG, CONTENT_ICON_NAMES, ContentIcon } from '../contentIcons';\nimport { GAP_PX, Row } from './shared';\nimport { RichText } from '../primitives/RichText';\n\nexport type IconTextBlockProps = {\n icon: string;\n content: string;\n iconSize: number;\n iconRight: boolean;\n gap: 'none' | 'small' | 'medium' | 'large';\n puck?: { isEditing?: boolean };\n};\n\nconst IconSlot = styled.span`\n flex: none;\n color: var(--doc-brand, #005ac3);\n line-height: 1;\n`;\n\nconst Body = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nexport const IconTextBlock = defineBlock<IconTextBlockProps>({\n key: 'IconText',\n label: 'Ícone e texto',\n category: 'Layout',\n icon: <IconTextIcon />,\n fields: {\n icon: {\n type: 'select',\n label: 'Ícone',\n options: CONTENT_ICON_NAMES.map(name => ({ label: CONTENT_ICON_CATALOG[name].label, value: name }))\n },\n content: { type: 'textarea', label: 'Texto (HTML)' },\n iconSize: { type: 'number', label: 'Tamanho do ícone (px)', min: 12, max: 96 },\n iconRight: {\n type: 'radio',\n label: 'Posição do ícone',\n options: [\n { label: 'Esquerda', value: false },\n { label: 'Direita', value: true }\n ]\n },\n gap: {\n type: 'select',\n label: 'Espaçamento',\n options: [\n { label: 'Nenhum', value: 'none' },\n { label: 'Pequeno', value: 'small' },\n { label: 'Médio', value: 'medium' },\n { label: 'Grande', value: 'large' }\n ]\n }\n },\n propsSchema: z.object({\n icon: z.string(),\n content: z.string(),\n iconSize: z.number().int().min(8).max(128),\n iconRight: z.boolean(),\n gap: z.enum(['none', 'small', 'medium', 'large'])\n }),\n defaultProps: { icon: 'check', content: '<p>Descreva o item.</p>', iconSize: 24, iconRight: false, gap: 'small' },\n component: ({ icon, content, iconSize, iconRight, gap, puck }) => {\n const glyph = (\n <IconSlot>\n <ContentIcon name={icon} size={iconSize ?? 24} />\n </IconSlot>\n );\n\n return (\n <Row $gap={GAP_PX[gap] ?? 8} $align=\"flex-start\">\n {iconRight ? null : glyph}\n <Body>\n <RichText html={content} editing={puck?.isEditing} />\n </Body>\n {iconRight ? glyph : null}\n </Row>\n );\n }\n});\n","import { z } from 'zod';\nimport styled from 'styled-components';\nimport { defineBlock } from '../defineBlock';\nimport { TableIcon } from '../../editor/blockIcons';\nimport { Placeholder } from './shared';\nimport { RichText } from '../primitives/RichText';\n\nexport type TableCell = { value: string };\nexport type TableRow = { cells: TableCell[] };\n\nexport type TableBlockProps = {\n rows: TableRow[];\n headerRow: boolean;\n puck?: { isEditing?: boolean };\n};\n\nconst Grid = styled.table`\n width: 100%;\n border-collapse: collapse;\n font-size: 0.95em;\n\n th,\n td {\n padding: 8px 10px;\n border-bottom: 1px solid rgba(127, 137, 152, 0.28);\n text-align: left;\n vertical-align: top;\n }\n\n th {\n font-weight: 600;\n background: color-mix(in srgb, var(--doc-brand, #005ac3) 8%, transparent);\n }\n`;\n\nexport const TableBlock = defineBlock<TableBlockProps>({\n key: 'Table',\n label: 'Tabela',\n category: 'Dados',\n icon: <TableIcon />,\n fields: {\n headerRow: {\n type: 'radio',\n label: 'Primeira linha é cabeçalho',\n options: [\n { label: 'Sim', value: true },\n { label: 'Não', value: false }\n ]\n },\n rows: {\n type: 'array',\n label: 'Linhas',\n getItemSummary: (row: TableRow, index) =>\n row?.cells\n ?.map(cell => cell?.value)\n .filter(Boolean)\n .join(' · ') || `Linha ${(index ?? 0) + 1}`,\n arrayFields: {\n cells: {\n type: 'array',\n label: 'Células',\n getItemSummary: (cell: TableCell, index) => cell?.value || `Coluna ${(index ?? 0) + 1}`,\n arrayFields: { value: { type: 'text', label: 'Conteúdo' } },\n defaultItemProps: { value: '' }\n }\n },\n defaultItemProps: { cells: [{ value: '' }, { value: '' }] }\n }\n },\n propsSchema: z.object({\n rows: z.array(z.object({ cells: z.array(z.object({ value: z.string() })) })),\n headerRow: z.boolean()\n }),\n defaultProps: {\n headerRow: true,\n rows: [{ cells: [{ value: 'Item' }, { value: 'Valor' }] }, { cells: [{ value: 'Exemplo' }, { value: 'R$ 0,00' }] }]\n },\n component: ({ rows = [], headerRow, puck }) => {\n if (!rows.length) return puck?.isEditing ? <Placeholder>Adicione linhas à tabela</Placeholder> : null;\n\n const [first, ...rest] = rows;\n const body = headerRow ? rest : rows;\n\n return (\n <Grid>\n {headerRow ? (\n <thead>\n <tr>\n {(first?.cells ?? []).map((cell, index) => (\n // eslint-disable-next-line react/no-array-index-key -- a célula não tem id; a posição é a identidade\n <th key={index}>\n <RichText as=\"span\" html={cell?.value} editing={puck?.isEditing} />\n </th>\n ))}\n </tr>\n </thead>\n ) : null}\n <tbody>\n {body.map((row, rowIndex) => (\n // eslint-disable-next-line react/no-array-index-key -- idem\n <tr key={rowIndex}>\n {(row?.cells ?? []).map((cell, cellIndex) => (\n // eslint-disable-next-line react/no-array-index-key -- idem\n <td key={cellIndex}>\n <RichText as=\"span\" html={cell?.value} editing={puck?.isEditing} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </Grid>\n );\n }\n});\n","import { z } from 'zod';\nimport { defineBlock } from '../defineBlock';\nimport { PageBreakIcon } from '../../editor/blockIcons';\nimport { PageBreakMark } from './shared';\n\nexport type PageBreakBlockProps = {\n puck?: { isEditing?: boolean };\n};\n\nexport const PageBreakBlock = defineBlock<PageBreakBlockProps>({\n key: 'PageBreak',\n label: 'Quebra de página',\n category: 'Estrutura',\n icon: <PageBreakIcon />,\n fields: {},\n propsSchema: z.object({}),\n component: ({ puck }) => (puck?.isEditing ? <PageBreakMark>Quebra de página</PageBreakMark> : null)\n});\n","import { TextBlock } from './components/TextBlock';\nimport { HeadingBlock } from './components/HeadingBlock';\nimport { ListBlock } from './components/ListBlock';\nimport { QuoteBlock } from './components/QuoteBlock';\nimport { ButtonBlock } from './components/ButtonBlock';\nimport { DividerBlock } from './components/DividerBlock';\nimport { SpacerBlock } from './components/SpacerBlock';\nimport { ImageBlock } from './components/ImageBlock';\nimport { ImageGridBlock } from './components/ImageGridBlock';\nimport { TwoColumnsBlock } from './components/TwoColumnsBlock';\nimport { ImageTextBlock } from './components/ImageTextBlock';\nimport { IconTextBlock } from './components/IconTextBlock';\nimport { TableBlock } from './components/TableBlock';\nimport { PageBreakBlock } from './components/PageBreakBlock';\nimport type { BlockEntry, Registry } from './types';\n\nexport {\n TextBlock,\n HeadingBlock,\n ListBlock,\n QuoteBlock,\n ButtonBlock,\n DividerBlock,\n SpacerBlock,\n ImageBlock,\n ImageGridBlock,\n TwoColumnsBlock,\n ImageTextBlock,\n IconTextBlock,\n TableBlock,\n PageBreakBlock\n};\n\nexport const defaultBlocks: Registry = [\n TextBlock,\n HeadingBlock,\n ListBlock,\n QuoteBlock,\n ButtonBlock,\n DividerBlock,\n SpacerBlock,\n ImageBlock,\n ImageGridBlock,\n TwoColumnsBlock,\n ImageTextBlock,\n IconTextBlock,\n TableBlock,\n PageBreakBlock\n];\n\nexport const blocksByKey: Record<string, BlockEntry> = Object.fromEntries(\n defaultBlocks.map(block => [block.key, block])\n);\n","import { devWarn } from '../core/devWarn';\nimport { blocksByKey } from './defaults';\nimport type { BlockEntry } from './types';\n\n/**\n * Deriva um bloco a partir de um default da lib: herda a entry inteira e aplica `patch`\n * por cima.\n *\n * ```ts\n * const MeuTexto = overrideBlock('Text', { component: MeuRichText });\n * const Copia = overrideBlock('Text', { key: 'TextoLegal' }); // clona sob outra key\n * ```\n *\n * `key` desconhecida avisa em dev e devolve a entry só com o `patch` — para bloco que é\n * só do host, use `defineBlock`, que não promete herança nenhuma.\n */\nexport function overrideBlock<Props extends Record<string, unknown> = Record<string, unknown>>(\n key: string,\n patch: Partial<BlockEntry<Props>> = {}\n): BlockEntry<Props> {\n const base = blocksByKey[key];\n\n if (!base) {\n devWarn(\n `override-unknown-block:${key}`,\n `overrideBlock('${key}') não achou bloco default com essa key — nada foi herdado. ` +\n 'Bloco que é só do host se declara com defineBlock.'\n );\n }\n\n return { ...(base as BlockEntry<Props> | undefined), key, ...patch } as BlockEntry<Props>;\n}\n"]}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
import { createContext, useContext, useEffect, createElement } from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/surface/surface.tsx
|
|
6
|
+
var DEFAULT_DOCUMENT_FONT = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif";
|
|
7
|
+
var DEFAULT_DOCUMENT_COLORS = {
|
|
8
|
+
brand: "#005AC3",
|
|
9
|
+
text: "#3F4759",
|
|
10
|
+
background: "#FFFFFF"
|
|
11
|
+
};
|
|
12
|
+
var PAGE_WIDTH_PX = {
|
|
13
|
+
A4: 794,
|
|
14
|
+
A5: 559,
|
|
15
|
+
A3: 1123,
|
|
16
|
+
Letter: 816,
|
|
17
|
+
Legal: 816
|
|
18
|
+
};
|
|
19
|
+
var DEFAULT_PAGE_MARGINS = { top: 24, right: 24, bottom: 24, left: 24 };
|
|
20
|
+
function pageWidthPx(format = "A4") {
|
|
21
|
+
return PAGE_WIDTH_PX[format];
|
|
22
|
+
}
|
|
23
|
+
function marginsToPadding(margins) {
|
|
24
|
+
const m = { ...DEFAULT_PAGE_MARGINS, ...margins };
|
|
25
|
+
return `${m.top}px ${m.right}px ${m.bottom}px ${m.left}px`;
|
|
26
|
+
}
|
|
27
|
+
var PageFrame = styled.div`
|
|
28
|
+
--doc-brand: ${(props) => props.$brand};
|
|
29
|
+
--doc-text: ${(props) => props.$text};
|
|
30
|
+
--doc-bg: ${(props) => props.$bg};
|
|
31
|
+
font-family: ${(props) => props.$font};
|
|
32
|
+
width: ${(props) => props.$width}px;
|
|
33
|
+
max-width: 100%;
|
|
34
|
+
min-height: 100%;
|
|
35
|
+
margin: 0 auto;
|
|
36
|
+
padding: ${(props) => props.$padding};
|
|
37
|
+
background: var(--doc-bg);
|
|
38
|
+
color: var(--doc-text);
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
|
|
41
|
+
&,
|
|
42
|
+
& *,
|
|
43
|
+
& *::before,
|
|
44
|
+
& *::after {
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
& [data-docgen-block] {
|
|
49
|
+
margin-bottom: 16px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* A capa é full-bleed (no preview/PDF ela sai do PageFrame via hoist). No editor
|
|
53
|
+
ela renderiza em fluxo dentro do padding da folha — neutralizamos esse padding
|
|
54
|
+
só pra ela, pra bater com o preview. O bleed vai no wrapper do Puck
|
|
55
|
+
([data-puck-component]) e não no bloco interno, senão a borda de seleção do Puck
|
|
56
|
+
(desenhada no wrapper) fica inset. No PDF/viewer esse seletor nem existe (hoist). */
|
|
57
|
+
& [data-puck-component]:has([data-docgen-block='Cover']) {
|
|
58
|
+
margin-top: ${(props) => -(props.$padTop ?? 0)}px;
|
|
59
|
+
margin-left: ${(props) => -(props.$padLeft ?? 0)}px;
|
|
60
|
+
margin-right: ${(props) => -(props.$padRight ?? 0)}px;
|
|
61
|
+
width: calc(100% + ${(props) => (props.$padLeft ?? 0) + (props.$padRight ?? 0)}px);
|
|
62
|
+
}
|
|
63
|
+
`;
|
|
64
|
+
var EditorShell = styled.div`
|
|
65
|
+
height: 100%;
|
|
66
|
+
|
|
67
|
+
li[data-puck-layer-tree-id] button > div,
|
|
68
|
+
li[data-puck-layer-tree-id] button > div > div {
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#puck-canvas-root,
|
|
73
|
+
[class*='_PuckCanvas_'] {
|
|
74
|
+
background: #e8e9eb;
|
|
75
|
+
outline: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[class*='_PuckCanvas_'][class*='_PuckCanvas_'][class*='_PuckCanvas_'] {
|
|
79
|
+
padding: 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#preview-frame {
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
align-items: center;
|
|
86
|
+
box-sizing: border-box;
|
|
87
|
+
min-height: 100%;
|
|
88
|
+
padding: 32px 16px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#preview-frame > * {
|
|
92
|
+
flex: 1 0 auto;
|
|
93
|
+
min-height: 0;
|
|
94
|
+
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.14);
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
var DrawerCard = styled.div`
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
gap: 10px;
|
|
101
|
+
width: 100%;
|
|
102
|
+
padding: 11px 12px;
|
|
103
|
+
border: 1px solid #e5e7eb;
|
|
104
|
+
border-radius: 8px;
|
|
105
|
+
background: #fff;
|
|
106
|
+
cursor: grab;
|
|
107
|
+
font-size: 14px;
|
|
108
|
+
color: #1f2937;
|
|
109
|
+
|
|
110
|
+
&:hover {
|
|
111
|
+
background: #f3f6fb;
|
|
112
|
+
border-color: #c3c9d2;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
${(props) => props.$disabled && `
|
|
116
|
+
opacity: 0.45;
|
|
117
|
+
cursor: not-allowed;
|
|
118
|
+
|
|
119
|
+
&:hover {
|
|
120
|
+
background: #fff;
|
|
121
|
+
border-color: #e5e7eb;
|
|
122
|
+
}
|
|
123
|
+
`}
|
|
124
|
+
`;
|
|
125
|
+
var DrawerHint = styled.div`
|
|
126
|
+
position: relative;
|
|
127
|
+
|
|
128
|
+
&[data-hint]:not([data-hint=''])::after {
|
|
129
|
+
content: attr(data-hint);
|
|
130
|
+
position: absolute;
|
|
131
|
+
left: 50%;
|
|
132
|
+
top: calc(100% + 6px);
|
|
133
|
+
transform: translateX(-50%) translateY(-2px);
|
|
134
|
+
width: max-content;
|
|
135
|
+
max-width: 220px;
|
|
136
|
+
padding: 6px 10px;
|
|
137
|
+
background: #1f2937;
|
|
138
|
+
color: #fff;
|
|
139
|
+
font-size: 12px;
|
|
140
|
+
line-height: 1.35;
|
|
141
|
+
text-align: center;
|
|
142
|
+
border-radius: 6px;
|
|
143
|
+
opacity: 0;
|
|
144
|
+
pointer-events: none;
|
|
145
|
+
transition:
|
|
146
|
+
opacity 0.12s ease,
|
|
147
|
+
transform 0.12s ease;
|
|
148
|
+
z-index: 20;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
&[data-hint]:not([data-hint=''])::before {
|
|
152
|
+
content: '';
|
|
153
|
+
position: absolute;
|
|
154
|
+
left: 50%;
|
|
155
|
+
top: calc(100% + 1px);
|
|
156
|
+
transform: translateX(-50%);
|
|
157
|
+
border: 5px solid transparent;
|
|
158
|
+
border-bottom-color: #1f2937;
|
|
159
|
+
opacity: 0;
|
|
160
|
+
pointer-events: none;
|
|
161
|
+
transition: opacity 0.12s ease;
|
|
162
|
+
z-index: 20;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
&[data-hint]:not([data-hint='']):hover::after,
|
|
166
|
+
&[data-hint]:not([data-hint='']):hover::before {
|
|
167
|
+
opacity: 1;
|
|
168
|
+
transform: translateX(-50%) translateY(0);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
&[data-hint]:not([data-hint='']):hover::before {
|
|
172
|
+
transform: translateX(-50%);
|
|
173
|
+
}
|
|
174
|
+
`;
|
|
175
|
+
var PanelPlaceholder = styled.div`
|
|
176
|
+
padding: 24px 12px;
|
|
177
|
+
color: #6b7280;
|
|
178
|
+
font-size: 13px;
|
|
179
|
+
line-height: 1.5;
|
|
180
|
+
text-align: center;
|
|
181
|
+
`;
|
|
182
|
+
var DrawerItemIcon = styled.span`
|
|
183
|
+
display: flex;
|
|
184
|
+
flex-shrink: 0;
|
|
185
|
+
align-items: center;
|
|
186
|
+
color: #6b7280;
|
|
187
|
+
`;
|
|
188
|
+
|
|
189
|
+
// src/surface/fonts.ts
|
|
190
|
+
var DOCUMENT_FONTS = [
|
|
191
|
+
{ id: "inter", label: "Inter", stack: "'Inter', sans-serif", gfont: "Inter:wght@400;500;600;700" },
|
|
192
|
+
{ id: "arial", label: "Arial", stack: "Arial, Helvetica, sans-serif" },
|
|
193
|
+
{ id: "calibri", label: "Calibri", stack: "Calibri, Carlito, 'Segoe UI', sans-serif" },
|
|
194
|
+
{ id: "times-new-roman", label: "Times New Roman", stack: "'Times New Roman', Times, serif" },
|
|
195
|
+
{ id: "roboto", label: "Roboto", stack: "'Roboto', sans-serif", gfont: "Roboto:wght@400;500;700" },
|
|
196
|
+
{ id: "open-sans", label: "Open Sans", stack: "'Open Sans', sans-serif", gfont: "Open+Sans:wght@400;500;600;700" },
|
|
197
|
+
{
|
|
198
|
+
id: "montserrat",
|
|
199
|
+
label: "Montserrat",
|
|
200
|
+
stack: "'Montserrat', sans-serif",
|
|
201
|
+
gfont: "Montserrat:wght@400;500;600;700"
|
|
202
|
+
},
|
|
203
|
+
{ id: "lato", label: "Lato", stack: "'Lato', sans-serif", gfont: "Lato:wght@400;700" },
|
|
204
|
+
{ id: "georgia", label: "Georgia", stack: "Georgia, 'Times New Roman', serif" },
|
|
205
|
+
{ id: "helvetica", label: "Helvetica", stack: "'Helvetica Neue', Helvetica, Arial, sans-serif" }
|
|
206
|
+
];
|
|
207
|
+
var byId = new Map(DOCUMENT_FONTS.map((f) => [f.id, f]));
|
|
208
|
+
var primaryFamily = (stack) => stack.split(",")[0].trim().replace(/^['"]|['"]$/g, "");
|
|
209
|
+
function docFontFamilies(id) {
|
|
210
|
+
const font = id ? byId.get(id) : void 0;
|
|
211
|
+
if (!font?.gfont) return null;
|
|
212
|
+
const primary = primaryFamily(font.stack);
|
|
213
|
+
return { primary, alias: `${primary} Doc` };
|
|
214
|
+
}
|
|
215
|
+
function fontStack(id) {
|
|
216
|
+
const font = id ? byId.get(id) : void 0;
|
|
217
|
+
if (!font) return DEFAULT_DOCUMENT_FONT;
|
|
218
|
+
const families = docFontFamilies(id);
|
|
219
|
+
return families ? `'${families.alias}', ${font.stack}` : font.stack;
|
|
220
|
+
}
|
|
221
|
+
function gfontHref(id) {
|
|
222
|
+
const font = id ? byId.get(id) : void 0;
|
|
223
|
+
if (!font?.gfont) return null;
|
|
224
|
+
return `https://fonts.googleapis.com/css2?family=${font.gfont}&display=swap`;
|
|
225
|
+
}
|
|
226
|
+
var EMPTY_THEME = {};
|
|
227
|
+
var DocumentThemeContext = createContext(null);
|
|
228
|
+
function DocumentThemeProvider({ theme, children }) {
|
|
229
|
+
return /* @__PURE__ */ jsx(DocumentThemeContext.Provider, { value: theme ?? EMPTY_THEME, children });
|
|
230
|
+
}
|
|
231
|
+
function useDocumentTheme() {
|
|
232
|
+
return useContext(DocumentThemeContext) ?? EMPTY_THEME;
|
|
233
|
+
}
|
|
234
|
+
function useOptionalDocumentTheme() {
|
|
235
|
+
return useContext(DocumentThemeContext);
|
|
236
|
+
}
|
|
237
|
+
function DocumentPage({ children, fallbackTheme }) {
|
|
238
|
+
const theme = useOptionalDocumentTheme() ?? fallbackTheme ?? {};
|
|
239
|
+
const margins = { ...DEFAULT_PAGE_MARGINS, ...theme.page?.margins ?? {} };
|
|
240
|
+
const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme.colors };
|
|
241
|
+
return /* @__PURE__ */ jsx(
|
|
242
|
+
PageFrame,
|
|
243
|
+
{
|
|
244
|
+
"data-docgen-root": "",
|
|
245
|
+
$width: pageWidthPx(theme.page?.format),
|
|
246
|
+
$padding: marginsToPadding(theme.page?.margins),
|
|
247
|
+
$padTop: margins.top,
|
|
248
|
+
$padRight: margins.right,
|
|
249
|
+
$padLeft: margins.left,
|
|
250
|
+
$font: fontStack(theme.documentFont),
|
|
251
|
+
$brand: colors.brand,
|
|
252
|
+
$text: colors.text,
|
|
253
|
+
$bg: colors.background,
|
|
254
|
+
children
|
|
255
|
+
}
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// src/surface/appearance.ts
|
|
260
|
+
var FONT_WEIGHT = { normal: 400, medium: 500, bold: 700 };
|
|
261
|
+
function appearanceToStyle(a) {
|
|
262
|
+
const style = {};
|
|
263
|
+
if (!a) return style;
|
|
264
|
+
if (a.brand !== void 0) style["--doc-brand"] = a.brand;
|
|
265
|
+
if (a.text !== void 0) {
|
|
266
|
+
style["--doc-text"] = a.text;
|
|
267
|
+
style.color = a.text;
|
|
268
|
+
}
|
|
269
|
+
if (a.background !== void 0) style.background = a.background;
|
|
270
|
+
if (a.fontSize !== void 0) style.fontSize = a.fontSize;
|
|
271
|
+
if (a.fontFamily !== void 0) style.fontFamily = fontStack(a.fontFamily);
|
|
272
|
+
if (a.fontWeight !== void 0) style.fontWeight = FONT_WEIGHT[a.fontWeight];
|
|
273
|
+
if (a.textAlign !== void 0) style.textAlign = a.textAlign;
|
|
274
|
+
return style;
|
|
275
|
+
}
|
|
276
|
+
function useDocumentFont(id) {
|
|
277
|
+
useEffect(() => {
|
|
278
|
+
const href = gfontHref(id);
|
|
279
|
+
if (!href || typeof document === "undefined") return void 0;
|
|
280
|
+
const selector = `[data-docgen-font="${id}"]`;
|
|
281
|
+
if (document.head.querySelector(selector)) return void 0;
|
|
282
|
+
if (typeof fetch === "undefined") {
|
|
283
|
+
const link = document.createElement("link");
|
|
284
|
+
link.rel = "stylesheet";
|
|
285
|
+
link.href = href;
|
|
286
|
+
link.setAttribute("data-docgen-font", id);
|
|
287
|
+
document.head.appendChild(link);
|
|
288
|
+
return void 0;
|
|
289
|
+
}
|
|
290
|
+
const families = docFontFamilies(id);
|
|
291
|
+
const style = document.createElement("style");
|
|
292
|
+
style.setAttribute("data-docgen-font", id);
|
|
293
|
+
document.head.appendChild(style);
|
|
294
|
+
fetch(href).then((res) => {
|
|
295
|
+
if (!res.ok) throw new Error(`gfont css ${res.status}`);
|
|
296
|
+
return res.text();
|
|
297
|
+
}).then((css) => {
|
|
298
|
+
style.textContent = families ? css.split(`font-family: '${families.primary}'`).join(`font-family: '${families.alias}'`) : css;
|
|
299
|
+
}).catch(() => {
|
|
300
|
+
const link = document.createElement("link");
|
|
301
|
+
link.rel = "stylesheet";
|
|
302
|
+
link.href = href;
|
|
303
|
+
link.setAttribute("data-docgen-font", id);
|
|
304
|
+
style.replaceWith(link);
|
|
305
|
+
});
|
|
306
|
+
return void 0;
|
|
307
|
+
}, [id]);
|
|
308
|
+
}
|
|
309
|
+
function BlockShell({ blockKey, appearance, children }) {
|
|
310
|
+
useDocumentFont(appearance?.fontFamily);
|
|
311
|
+
return /* @__PURE__ */ jsx("div", { "data-docgen-block": blockKey, style: appearanceToStyle(appearance), children });
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// src/core/buildConfig.ts
|
|
315
|
+
var blockRenderCache = /* @__PURE__ */ new WeakMap();
|
|
316
|
+
function blockRender(key, Component) {
|
|
317
|
+
let byKey = blockRenderCache.get(Component);
|
|
318
|
+
if (!byKey) {
|
|
319
|
+
byKey = /* @__PURE__ */ new Map();
|
|
320
|
+
blockRenderCache.set(Component, byKey);
|
|
321
|
+
}
|
|
322
|
+
const cached = byKey.get(key);
|
|
323
|
+
if (cached) return cached;
|
|
324
|
+
function Block(props) {
|
|
325
|
+
return createElement(BlockShell, { blockKey: key, appearance: props.appearance }, createElement(Component, props));
|
|
326
|
+
}
|
|
327
|
+
Block.displayName = `DocumentBlock(${key})`;
|
|
328
|
+
byKey.set(key, Block);
|
|
329
|
+
return Block;
|
|
330
|
+
}
|
|
331
|
+
var fallbackPageCache = /* @__PURE__ */ new WeakMap();
|
|
332
|
+
function fallbackPage(theme) {
|
|
333
|
+
const cached = fallbackPageCache.get(theme);
|
|
334
|
+
if (cached) return cached;
|
|
335
|
+
function Page(props) {
|
|
336
|
+
return createElement(DocumentPage, { ...props, fallbackTheme: theme });
|
|
337
|
+
}
|
|
338
|
+
Page.displayName = "DocumentPage(fallback)";
|
|
339
|
+
fallbackPageCache.set(theme, Page);
|
|
340
|
+
return Page;
|
|
341
|
+
}
|
|
342
|
+
function buildConfig(registry, options = {}) {
|
|
343
|
+
const { theme } = options;
|
|
344
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
345
|
+
registry.forEach((entry) => {
|
|
346
|
+
byKey.set(entry.key, entry);
|
|
347
|
+
});
|
|
348
|
+
const components = {};
|
|
349
|
+
const categoryMap = {};
|
|
350
|
+
byKey.forEach((entry, key) => {
|
|
351
|
+
const { fields, defaultProps, component: Component } = entry;
|
|
352
|
+
components[key] = {
|
|
353
|
+
label: entry.label ?? key,
|
|
354
|
+
fields,
|
|
355
|
+
defaultProps,
|
|
356
|
+
...entry.permissions && { permissions: entry.permissions },
|
|
357
|
+
render: blockRender(key, Component)
|
|
358
|
+
};
|
|
359
|
+
const category = entry.category ?? "other";
|
|
360
|
+
if (!categoryMap[category]) categoryMap[category] = [];
|
|
361
|
+
categoryMap[category].push(key);
|
|
362
|
+
});
|
|
363
|
+
const categories = {};
|
|
364
|
+
Object.keys(categoryMap).forEach((name) => {
|
|
365
|
+
categories[name] = { components: categoryMap[name] };
|
|
366
|
+
});
|
|
367
|
+
const root = {
|
|
368
|
+
label: "P\xE1gina",
|
|
369
|
+
fields: {
|
|
370
|
+
placeholder: {
|
|
371
|
+
type: "custom",
|
|
372
|
+
render: () => createElement(PanelPlaceholder, null, "Selecione um bloco para editar suas propriedades.")
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
render: theme ? fallbackPage(theme) : DocumentPage
|
|
376
|
+
};
|
|
377
|
+
return { root, components, categories };
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export { DEFAULT_DOCUMENT_COLORS, DEFAULT_DOCUMENT_FONT, DEFAULT_PAGE_MARGINS, DOCUMENT_FONTS, DocumentPage, DocumentThemeProvider, DrawerCard, DrawerHint, DrawerItemIcon, EditorShell, FONT_WEIGHT, PageFrame, appearanceToStyle, buildConfig, fontStack, gfontHref, marginsToPadding, pageWidthPx, useDocumentFont, useDocumentTheme };
|
|
381
|
+
//# sourceMappingURL=chunk-PLQNNXS2.js.map
|
|
382
|
+
//# sourceMappingURL=chunk-PLQNNXS2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/surface/surface.tsx","../src/surface/fonts.ts","../src/surface/themeContext.tsx","../src/surface/DocumentPage.tsx","../src/surface/appearance.ts","../src/surface/useDocumentFont.ts","../src/surface/BlockShell.tsx","../src/core/buildConfig.ts"],"names":["jsx"],"mappings":"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","file":"chunk-PLQNNXS2.js","sourcesContent":["import styled from 'styled-components';\n\nexport const DEFAULT_DOCUMENT_FONT =\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\";\n\nexport const DEFAULT_DOCUMENT_COLORS = {\n brand: '#005AC3',\n text: '#3F4759',\n background: '#FFFFFF'\n} as const;\n\nexport type PageFormat = 'A4' | 'A5' | 'A3' | 'Letter' | 'Legal';\nexport type PageMargins = { top?: number; right?: number; bottom?: number; left?: number };\nexport type PageOptions = { format?: PageFormat; margins?: PageMargins };\n\nconst PAGE_WIDTH_PX: Record<PageFormat, number> = {\n A4: 794,\n A5: 559,\n A3: 1123,\n Letter: 816,\n Legal: 816\n};\n\nexport const DEFAULT_PAGE_MARGINS: Required<PageMargins> = { top: 24, right: 24, bottom: 24, left: 24 };\n\nexport function pageWidthPx(format: PageFormat = 'A4'): number {\n return PAGE_WIDTH_PX[format];\n}\n\nexport function marginsToPadding(margins?: PageMargins): string {\n const m = { ...DEFAULT_PAGE_MARGINS, ...margins };\n return `${m.top}px ${m.right}px ${m.bottom}px ${m.left}px`;\n}\n\n/** A página do documento — compartilhada pelo editor, viewer e PDF via `root` do Puck. */\nexport const PageFrame = styled.div<{\n $width: number;\n $padding: string;\n $font: string;\n $brand: string;\n $text: string;\n $bg: string;\n $padTop?: number;\n $padRight?: number;\n $padLeft?: number;\n 'data-docgen-root'?: string;\n}>`\n --doc-brand: ${props => props.$brand};\n --doc-text: ${props => props.$text};\n --doc-bg: ${props => props.$bg};\n font-family: ${props => props.$font};\n width: ${props => props.$width}px;\n max-width: 100%;\n min-height: 100%;\n margin: 0 auto;\n padding: ${props => props.$padding};\n background: var(--doc-bg);\n color: var(--doc-text);\n box-sizing: border-box;\n\n &,\n & *,\n & *::before,\n & *::after {\n box-sizing: border-box;\n }\n\n & [data-docgen-block] {\n margin-bottom: 16px;\n }\n\n /* A capa é full-bleed (no preview/PDF ela sai do PageFrame via hoist). No editor\n ela renderiza em fluxo dentro do padding da folha — neutralizamos esse padding\n só pra ela, pra bater com o preview. O bleed vai no wrapper do Puck\n ([data-puck-component]) e não no bloco interno, senão a borda de seleção do Puck\n (desenhada no wrapper) fica inset. No PDF/viewer esse seletor nem existe (hoist). */\n & [data-puck-component]:has([data-docgen-block='Cover']) {\n margin-top: ${props => -(props.$padTop ?? 0)}px;\n margin-left: ${props => -(props.$padLeft ?? 0)}px;\n margin-right: ${props => -(props.$padRight ?? 0)}px;\n width: calc(100% + ${props => (props.$padLeft ?? 0) + (props.$padRight ?? 0)}px);\n }\n`;\n\n/** Chrome do editor: mesa cinza + folha com sombra (só editor). Porquês: docs/architecture.md. */\nexport const EditorShell = styled.div`\n height: 100%;\n\n li[data-puck-layer-tree-id] button > div,\n li[data-puck-layer-tree-id] button > div > div {\n overflow: hidden;\n }\n\n #puck-canvas-root,\n [class*='_PuckCanvas_'] {\n background: #e8e9eb;\n outline: none;\n }\n\n [class*='_PuckCanvas_'][class*='_PuckCanvas_'][class*='_PuckCanvas_'] {\n padding: 0;\n }\n\n #preview-frame {\n display: flex;\n flex-direction: column;\n align-items: center;\n box-sizing: border-box;\n min-height: 100%;\n padding: 32px 16px;\n }\n\n #preview-frame > * {\n flex: 1 0 auto;\n min-height: 0;\n box-shadow: 0 1px 4px rgba(15, 23, 42, 0.14);\n }\n`;\n\n/** Card custom do item no palette (substitui o item padrão do Puck): ícone + nome. */\nexport const DrawerCard = styled.div<{ $disabled?: boolean }>`\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 11px 12px;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n background: #fff;\n cursor: grab;\n font-size: 14px;\n color: #1f2937;\n\n &:hover {\n background: #f3f6fb;\n border-color: #c3c9d2;\n }\n\n ${props =>\n props.$disabled &&\n `\n opacity: 0.45;\n cursor: not-allowed;\n\n &:hover {\n background: #fff;\n border-color: #e5e7eb;\n }\n `}\n`;\n\n/**\n * Tooltip imediato para o card desabilitado do palette (o title nativo demora ~1s).\n * Os seletores de hover repetem `[data-hint]:not([data-hint=''])` para empatar a\n * especificidade da regra base — `&:hover::after` sozinho perde e o tooltip nunca aparece.\n */\nexport const DrawerHint = styled.div`\n position: relative;\n\n &[data-hint]:not([data-hint=''])::after {\n content: attr(data-hint);\n position: absolute;\n left: 50%;\n top: calc(100% + 6px);\n transform: translateX(-50%) translateY(-2px);\n width: max-content;\n max-width: 220px;\n padding: 6px 10px;\n background: #1f2937;\n color: #fff;\n font-size: 12px;\n line-height: 1.35;\n text-align: center;\n border-radius: 6px;\n opacity: 0;\n pointer-events: none;\n transition:\n opacity 0.12s ease,\n transform 0.12s ease;\n z-index: 20;\n }\n\n &[data-hint]:not([data-hint=''])::before {\n content: '';\n position: absolute;\n left: 50%;\n top: calc(100% + 1px);\n transform: translateX(-50%);\n border: 5px solid transparent;\n border-bottom-color: #1f2937;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.12s ease;\n z-index: 20;\n }\n\n &[data-hint]:not([data-hint='']):hover::after,\n &[data-hint]:not([data-hint='']):hover::before {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n\n &[data-hint]:not([data-hint='']):hover::before {\n transform: translateX(-50%);\n }\n`;\n\n/** Mensagem do painel de propriedades quando nenhum bloco está selecionado. */\nexport const PanelPlaceholder = styled.div`\n padding: 24px 12px;\n color: #6b7280;\n font-size: 13px;\n line-height: 1.5;\n text-align: center;\n`;\n\nexport const DrawerItemIcon = styled.span`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n color: #6b7280;\n`;\n","import { DEFAULT_DOCUMENT_FONT } from './surface';\n\nexport type DocumentFont = {\n id: string;\n label: string;\n stack: string;\n /** Família no Google Fonts; ausente = fonte de sistema (nada a carregar). */\n gfont?: string;\n};\n\nexport const DOCUMENT_FONTS: readonly DocumentFont[] = [\n { id: 'inter', label: 'Inter', stack: \"'Inter', sans-serif\", gfont: 'Inter:wght@400;500;600;700' },\n { id: 'arial', label: 'Arial', stack: 'Arial, Helvetica, sans-serif' },\n { id: 'calibri', label: 'Calibri', stack: \"Calibri, Carlito, 'Segoe UI', sans-serif\" },\n { id: 'times-new-roman', label: 'Times New Roman', stack: \"'Times New Roman', Times, serif\" },\n { id: 'roboto', label: 'Roboto', stack: \"'Roboto', sans-serif\", gfont: 'Roboto:wght@400;500;700' },\n { id: 'open-sans', label: 'Open Sans', stack: \"'Open Sans', sans-serif\", gfont: 'Open+Sans:wght@400;500;600;700' },\n {\n id: 'montserrat',\n label: 'Montserrat',\n stack: \"'Montserrat', sans-serif\",\n gfont: 'Montserrat:wght@400;500;600;700'\n },\n { id: 'lato', label: 'Lato', stack: \"'Lato', sans-serif\", gfont: 'Lato:wght@400;700' },\n { id: 'georgia', label: 'Georgia', stack: \"Georgia, 'Times New Roman', serif\" },\n { id: 'helvetica', label: 'Helvetica', stack: \"'Helvetica Neue', Helvetica, Arial, sans-serif\" }\n] as const;\n\nconst byId = new Map(DOCUMENT_FONTS.map(f => [f.id, f]));\n\nconst primaryFamily = (stack: string): string =>\n stack\n .split(',')[0]\n .trim()\n .replace(/^['\"]|['\"]$/g, '');\n\n/**\n * Fontes do Google ganham um alias próprio (`<Família> Doc`) no topo do stack: o app\n * hospedeiro pode ter um @font-face com o mesmo nome apontando pra outros arquivos\n * (ex.: Inter estática do FBO), e o alias garante que o documento use os arquivos do\n * Google nos dois lados — no editor via useDocumentFont (CSS reescrito) e no artifact\n * o alias não resolve e cai na família original do <link> (mesmos arquivos).\n */\nexport function docFontFamilies(id?: string): { primary: string; alias: string } | null {\n const font = id ? byId.get(id) : undefined;\n if (!font?.gfont) return null;\n const primary = primaryFamily(font.stack);\n return { primary, alias: `${primary} Doc` };\n}\n\nexport function fontStack(id?: string): string {\n const font = id ? byId.get(id) : undefined;\n if (!font) return DEFAULT_DOCUMENT_FONT;\n const families = docFontFamilies(id);\n return families ? `'${families.alias}', ${font.stack}` : font.stack;\n}\n\nexport function gfontHref(id?: string): string | null {\n const font = id ? byId.get(id) : undefined;\n if (!font?.gfont) return null;\n return `https://fonts.googleapis.com/css2?family=${font.gfont}&display=swap`;\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport type { Theme } from '../schema/theme';\n\nconst EMPTY_THEME: Theme = {};\n\n/** `null` distingue \"sem provider\" de \"provider com tema vazio\" — ver DocumentPage. */\nconst DocumentThemeContext = createContext<Theme | null>(null);\n\nexport type DocumentThemeProviderProps = {\n theme?: Theme;\n children?: ReactNode;\n};\n\n/**\n * Publica o tema do documento na árvore. Montado por `DocumentEditor` e\n * `DocumentRenderer` — é o canal que mantém o `Config` do Puck estável quando o\n * tema muda (ver docs/theme.md).\n */\nexport function DocumentThemeProvider({ theme, children }: DocumentThemeProviderProps) {\n return <DocumentThemeContext.Provider value={theme ?? EMPTY_THEME}>{children}</DocumentThemeContext.Provider>;\n}\n\n/** Tema do documento; `{}` quando não há provider acima. */\nexport function useDocumentTheme(): Theme {\n return useContext(DocumentThemeContext) ?? EMPTY_THEME;\n}\n\n/** Igual ao `useDocumentTheme`, mas devolve `null` sem provider (uso interno). */\nexport function useOptionalDocumentTheme(): Theme | null {\n return useContext(DocumentThemeContext);\n}\n","import type { ReactNode } from 'react';\nimport type { Theme } from '../schema/theme';\nimport { DEFAULT_DOCUMENT_COLORS, DEFAULT_PAGE_MARGINS, PageFrame, marginsToPadding, pageWidthPx } from './surface';\nimport { fontStack } from './fonts';\nimport { useOptionalDocumentTheme } from './themeContext';\n\nexport type DocumentPageProps = {\n children?: ReactNode;\n /** Usado só quando não há `DocumentThemeProvider` acima (ver `BuildConfigOptions.theme`). */\n fallbackTheme?: Theme;\n};\n\n/**\n * `root.render` do Puck: a folha do documento (largura, margens, fonte e CSS vars\n * de cor). Lê o tema do contexto em vez de recebê-lo por closure — assim o\n * componente tem identidade estável e trocar de tema não remonta os blocos.\n */\nexport function DocumentPage({ children, fallbackTheme }: DocumentPageProps) {\n const theme = useOptionalDocumentTheme() ?? fallbackTheme ?? {};\n const margins = { ...DEFAULT_PAGE_MARGINS, ...(theme.page?.margins ?? {}) };\n const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme.colors };\n\n return (\n <PageFrame\n data-docgen-root=\"\"\n $width={pageWidthPx(theme.page?.format)}\n $padding={marginsToPadding(theme.page?.margins)}\n $padTop={margins.top}\n $padRight={margins.right}\n $padLeft={margins.left}\n $font={fontStack(theme.documentFont)}\n $brand={colors.brand}\n $text={colors.text}\n $bg={colors.background}\n >\n {children}\n </PageFrame>\n );\n}\n","import type { CSSProperties } from 'react';\nimport type { Appearance } from '../schema/appearance';\nimport { fontStack } from './fonts';\n\nexport const FONT_WEIGHT: Record<string, number> = { normal: 400, medium: 500, bold: 700 };\n\n/** Sobrescrita por bloco → estilo do wrapper (cores viram CSS vars locais; não-set herda o tema). */\nexport function appearanceToStyle(a?: Appearance): CSSProperties {\n const style: Record<string, string | number> = {};\n if (!a) return style;\n if (a.brand !== undefined) style['--doc-brand'] = a.brand;\n if (a.text !== undefined) {\n style['--doc-text'] = a.text;\n style.color = a.text;\n }\n if (a.background !== undefined) style.background = a.background;\n if (a.fontSize !== undefined) style.fontSize = a.fontSize;\n if (a.fontFamily !== undefined) style.fontFamily = fontStack(a.fontFamily);\n if (a.fontWeight !== undefined) style.fontWeight = FONT_WEIGHT[a.fontWeight];\n if (a.textAlign !== undefined) style.textAlign = a.textAlign;\n return style as CSSProperties;\n}\n","import { useEffect } from 'react';\nimport { docFontFamilies, gfontHref } from './fonts';\n\n/**\n * Carrega a fonte do documento no app hospedeiro. O CSS do Google é baixado e\n * reescrito pra família alias (`<Família> Doc`, ver docFontFamilies) — assim o\n * canvas do editor usa os MESMOS arquivos do preview mesmo quando o app já tem\n * um @font-face com o nome original. Se o fetch falhar, cai pro <link> direto\n * (família original — comportamento antigo).\n */\nexport function useDocumentFont(id?: string): void {\n useEffect(() => {\n const href = gfontHref(id);\n if (!href || typeof document === 'undefined') return undefined;\n\n const selector = `[data-docgen-font=\"${id}\"]`;\n if (document.head.querySelector(selector)) return undefined;\n\n if (typeof fetch === 'undefined') {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.setAttribute('data-docgen-font', id as string);\n document.head.appendChild(link);\n return undefined;\n }\n\n const families = docFontFamilies(id);\n const style = document.createElement('style');\n style.setAttribute('data-docgen-font', id as string);\n document.head.appendChild(style);\n\n fetch(href)\n .then(res => {\n if (!res.ok) throw new Error(`gfont css ${res.status}`);\n return res.text();\n })\n .then(css => {\n style.textContent = families\n ? css.split(`font-family: '${families.primary}'`).join(`font-family: '${families.alias}'`)\n : css;\n })\n .catch(() => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n link.setAttribute('data-docgen-font', id as string);\n style.replaceWith(link);\n });\n return undefined;\n }, [id]);\n}\n","import type { ReactNode } from 'react';\nimport type { Appearance } from '../schema/appearance';\nimport { appearanceToStyle } from './appearance';\nimport { useDocumentFont } from './useDocumentFont';\n\nexport type BlockShellProps = {\n blockKey: string;\n appearance?: Appearance;\n children?: ReactNode;\n};\n\n/** Wrapper de todo bloco: aplica a aparência local e carrega a Google Font do bloco. */\nexport function BlockShell({ blockKey, appearance, children }: BlockShellProps) {\n useDocumentFont(appearance?.fontFamily);\n\n return (\n <div data-docgen-block={blockKey} style={appearanceToStyle(appearance)}>\n {children}\n </div>\n );\n}\n","import { createElement, type ComponentType } from 'react';\nimport type { ComponentConfig, Config } from '@puckeditor/core';\nimport type { BlockEntry, Registry } from '../blocks/types';\nimport { PanelPlaceholder } from '../surface/surface';\nimport { DocumentPage, type DocumentPageProps } from '../surface/DocumentPage';\nimport type { Theme } from '../schema/theme';\nimport { BlockShell } from '../surface/BlockShell';\n\nexport type BuildConfigOptions = {\n /**\n * Tema aplicado apenas quando NÃO há `DocumentThemeProvider` acima (uso avulso\n * de `buildConfig` + `<Render>`). No editor e no renderer o tema vem do provider:\n * passá-lo aqui troca a identidade de `root.render` a cada mudança e o Puck\n * remonta a árvore inteira. Ver docs/theme.md.\n */\n theme?: Theme;\n};\n\n/**\n * O Puck monta `componentConfig.render` como TIPO de elemento\n * (`<Component {...props}/>`), então uma closure nova por build desmonta e remonta\n * o bloco inteiro — perdendo foco, seleção e estado de editores embutidos. O cache\n * abaixo dá identidade estável por (componente, key). Ver docs/architecture.md.\n */\nconst blockRenderCache = new WeakMap<ComponentType<any>, Map<string, ComponentType<any>>>();\n\nfunction blockRender(key: string, Component: ComponentType<any>): ComponentType<any> {\n let byKey = blockRenderCache.get(Component);\n if (!byKey) {\n byKey = new Map();\n blockRenderCache.set(Component, byKey);\n }\n\n const cached = byKey.get(key);\n if (cached) return cached;\n\n function Block(props: any) {\n return createElement(BlockShell, { blockKey: key, appearance: props.appearance }, createElement(Component, props));\n }\n Block.displayName = `DocumentBlock(${key})`;\n byKey.set(key, Block);\n return Block;\n}\n\nconst fallbackPageCache = new WeakMap<Theme, ComponentType<any>>();\n\nfunction fallbackPage(theme: Theme): ComponentType<any> {\n const cached = fallbackPageCache.get(theme);\n if (cached) return cached;\n\n function Page(props: DocumentPageProps) {\n return createElement(DocumentPage, { ...props, fallbackTheme: theme });\n }\n Page.displayName = 'DocumentPage(fallback)';\n fallbackPageCache.set(theme, Page);\n return Page;\n}\n\n/**\n * Registry → Puck `Config` (mesmo config no editor, viewer e PDF). Replace-by-key;\n * `root.render` embrulha tudo no PageFrame do documento, que lê o tema do contexto.\n */\nexport function buildConfig(registry: Registry, options: BuildConfigOptions = {}): Config {\n const { theme } = options;\n\n const byKey = new Map<string, BlockEntry>();\n registry.forEach(entry => {\n byKey.set(entry.key, entry);\n });\n\n const components: Record<string, ComponentConfig<any>> = {};\n const categoryMap: Record<string, string[]> = {};\n\n byKey.forEach((entry, key) => {\n const { fields, defaultProps, component: Component } = entry;\n\n components[key] = {\n label: entry.label ?? key,\n fields,\n defaultProps,\n ...(entry.permissions && { permissions: entry.permissions }),\n render: blockRender(key, Component as ComponentType<any>)\n } as ComponentConfig<any>;\n\n const category = entry.category ?? 'other';\n if (!categoryMap[category]) categoryMap[category] = [];\n categoryMap[category].push(key);\n });\n\n const categories: NonNullable<Config['categories']> = {};\n Object.keys(categoryMap).forEach(name => {\n categories[name] = { components: categoryMap[name] };\n });\n\n const root: Config['root'] = {\n label: 'Página',\n fields: {\n placeholder: {\n type: 'custom',\n render: () => createElement(PanelPlaceholder, null, 'Selecione um bloco para editar suas propriedades.')\n }\n },\n render: (theme ? fallbackPage(theme) : DocumentPage) as NonNullable<Config['root']>['render']\n };\n\n return { root, components, categories } as Config;\n}\n"]}
|