vobi_document 1.1.0 → 1.1.2

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 (69) hide show
  1. package/dist/blocks.cjs +33 -25
  2. package/dist/blocks.d.cts +14 -1
  3. package/dist/blocks.d.ts +14 -1
  4. package/dist/blocks.js +3 -3
  5. package/dist/{chunk-ERKU5FDV.cjs → chunk-2VZW2MGO.cjs} +20 -2
  6. package/dist/chunk-2VZW2MGO.cjs.map +1 -0
  7. package/dist/{chunk-NDHTMYPA.cjs → chunk-A427FKMP.cjs} +20 -20
  8. package/dist/{chunk-NDHTMYPA.cjs.map → chunk-A427FKMP.cjs.map} +1 -1
  9. package/dist/{chunk-6GRYRVU5.js → chunk-BEG6KN5X.js} +5 -5
  10. package/dist/{chunk-6GRYRVU5.js.map → chunk-BEG6KN5X.js.map} +1 -1
  11. package/dist/{chunk-2EBYURIX.js → chunk-CZB7F2LA.js} +3 -3
  12. package/dist/{chunk-2EBYURIX.js.map → chunk-CZB7F2LA.js.map} +1 -1
  13. package/dist/{chunk-AQ5FAAP6.cjs → chunk-GR76U6FP.cjs} +37 -11
  14. package/dist/chunk-GR76U6FP.cjs.map +1 -0
  15. package/dist/{chunk-KUB3TYG2.cjs → chunk-I22MGPXO.cjs} +22 -7
  16. package/dist/chunk-I22MGPXO.cjs.map +1 -0
  17. package/dist/{chunk-X2BLERM5.cjs → chunk-KALUNX3C.cjs} +35 -27
  18. package/dist/chunk-KALUNX3C.cjs.map +1 -0
  19. package/dist/{chunk-JEVWEGSE.js → chunk-MUSSJOOA.js} +21 -7
  20. package/dist/chunk-MUSSJOOA.js.map +1 -0
  21. package/dist/{chunk-ABIEQHS2.js → chunk-N3IDPT3B.js} +31 -8
  22. package/dist/chunk-N3IDPT3B.js.map +1 -0
  23. package/dist/{chunk-IUDN2CGP.js → chunk-OJZJJEJX.js} +73 -32
  24. package/dist/chunk-OJZJJEJX.js.map +1 -0
  25. package/dist/{chunk-PLQNNXS2.js → chunk-QEWDIL2H.js} +20 -3
  26. package/dist/chunk-QEWDIL2H.js.map +1 -0
  27. package/dist/{chunk-ZXWOZZXO.cjs → chunk-QJ5W5EED.cjs} +4 -4
  28. package/dist/{chunk-ZXWOZZXO.cjs.map → chunk-QJ5W5EED.cjs.map} +1 -1
  29. package/dist/{chunk-HMTCQOEV.js → chunk-QRVQXVZC.js} +23 -15
  30. package/dist/chunk-QRVQXVZC.js.map +1 -0
  31. package/dist/{chunk-KCZKC3OG.js → chunk-QU6XF6OQ.js} +3 -3
  32. package/dist/{chunk-KCZKC3OG.js.map → chunk-QU6XF6OQ.js.map} +1 -1
  33. package/dist/{chunk-MHTTFNK2.cjs → chunk-RZOR3HOA.cjs} +80 -37
  34. package/dist/chunk-RZOR3HOA.cjs.map +1 -0
  35. package/dist/{chunk-U56KVTK5.cjs → chunk-SFKH6QYD.cjs} +8 -8
  36. package/dist/{chunk-U56KVTK5.cjs.map → chunk-SFKH6QYD.cjs.map} +1 -1
  37. package/dist/{chunk-M2TPAU2F.js → chunk-SOIYSSU3.js} +32 -3
  38. package/dist/chunk-SOIYSSU3.js.map +1 -0
  39. package/dist/{chunk-IRFFN74K.cjs → chunk-SP5LCPDG.cjs} +32 -2
  40. package/dist/chunk-SP5LCPDG.cjs.map +1 -0
  41. package/dist/editor.cjs +16 -16
  42. package/dist/editor.js +4 -4
  43. package/dist/index.cjs +132 -108
  44. package/dist/index.d.cts +2 -2
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +12 -12
  47. package/dist/print.cjs +50 -18
  48. package/dist/print.cjs.map +1 -1
  49. package/dist/print.js +37 -5
  50. package/dist/print.js.map +1 -1
  51. package/dist/render.cjs +20 -20
  52. package/dist/render.js +5 -5
  53. package/dist/variables.cjs +41 -25
  54. package/dist/variables.d.cts +34 -2
  55. package/dist/variables.d.ts +34 -2
  56. package/dist/variables.js +4 -4
  57. package/package.json +1 -1
  58. package/dist/chunk-ABIEQHS2.js.map +0 -1
  59. package/dist/chunk-AQ5FAAP6.cjs.map +0 -1
  60. package/dist/chunk-ERKU5FDV.cjs.map +0 -1
  61. package/dist/chunk-HMTCQOEV.js.map +0 -1
  62. package/dist/chunk-IRFFN74K.cjs.map +0 -1
  63. package/dist/chunk-IUDN2CGP.js.map +0 -1
  64. package/dist/chunk-JEVWEGSE.js.map +0 -1
  65. package/dist/chunk-KUB3TYG2.cjs.map +0 -1
  66. package/dist/chunk-M2TPAU2F.js.map +0 -1
  67. package/dist/chunk-MHTTFNK2.cjs.map +0 -1
  68. package/dist/chunk-PLQNNXS2.js.map +0 -1
  69. package/dist/chunk-X2BLERM5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/DocumentRenderer.tsx","../src/render/chrome/covers/primitives.tsx","../src/render/chrome/covers/covers.styles.ts","../src/render/chrome/covers/Model1.tsx","../src/render/chrome/covers/Model2.tsx","../src/render/chrome/covers/Model3.tsx","../src/render/chrome/covers/Model4.tsx","../src/render/chrome/covers/Model5.tsx","../src/render/chrome/covers/index.ts","../src/render/chrome/CoverPage.tsx","../src/render/chrome/icons.tsx","../src/render/chrome/chrome.styles.ts","../src/render/chrome/HeaderBar.tsx","../src/render/chrome/FooterBar.tsx","../src/render/messages.ts"],"names":["jsx","styled","HAIRLINE","Logo","Head","Title","useContext","jsxs","Subtitle","Label","Value","Body","ImageBand"],"mappings":"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","file":"chunk-6GRYRVU5.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { type Data, type Metadata, Render } from '@puckeditor/core';\nimport { buildConfig } from '../core/buildConfig';\nimport type { Registry } from '../blocks/types';\nimport type { Theme } from '../schema/theme';\nimport { useDocumentFont } from '../surface/useDocumentFont';\nimport { DocumentThemeProvider } from '../surface/themeContext';\nimport { CatalogProvider } from '../variables/catalogContext';\nimport { ResolvedProvider } from '../variables/resolvedContext';\nimport { resolveDocumentVariables } from '../variables/resolve';\nimport { extractBindingKeys } from '../variables/bindings';\nimport type {\n ResolvedVariables,\n UnresolvedDisplay,\n VariableContext,\n VariableDef,\n VariableResolver\n} from '../variables/types';\n\nexport type DocumentRendererProps = {\n registry: Registry;\n data: Data;\n theme?: Theme;\n catalog?: VariableDef[];\n /** Live resolution (browser preview). Called in an effect. */\n resolver?: VariableResolver;\n ctx?: VariableContext;\n resolvedVariables?: ResolvedVariables;\n unresolvedDisplay?: UnresolvedDisplay;\n metadata?: Metadata;\n};\n\nexport function DocumentRenderer({\n registry,\n data,\n theme = {},\n catalog = [],\n resolver,\n ctx = {},\n resolvedVariables,\n unresolvedDisplay = 'placeholder',\n metadata\n}: DocumentRendererProps) {\n // Sem `theme`: ele chega pelo DocumentThemeProvider (config estável — ver docs/architecture.md).\n const config = useMemo(() => buildConfig(registry), [registry]);\n const [resolved, setResolved] = useState<ResolvedVariables>(resolvedVariables ?? {});\n\n useDocumentFont(theme.documentFont);\n\n const keysHash = useMemo(() => extractBindingKeys(data).sort().join('|'), [data]);\n const ctxHash = JSON.stringify(ctx);\n\n useEffect(() => {\n if (resolvedVariables || !resolver || keysHash === '') return undefined;\n let active = true;\n resolveDocumentVariables(data, catalog, resolver, ctx).then(next => {\n if (active) setResolved(next);\n });\n return () => {\n active = false;\n };\n // Keyado por keysHash/ctxHash (não por data) — evita refetch por edição.\n }, [resolvedVariables, resolver, catalog, keysHash, ctxHash]);\n\n const effective = resolvedVariables ?? resolved;\n\n return (\n <DocumentThemeProvider theme={theme}>\n <CatalogProvider catalog={catalog}>\n <ResolvedProvider resolved={effective} unresolvedDisplay={unresolvedDisplay}>\n <Render config={config} data={data} metadata={metadata} />\n </ResolvedProvider>\n </CatalogProvider>\n </DocumentThemeProvider>\n );\n}\n","import { createContext, useContext, type ElementType, type KeyboardEvent, type FocusEvent } from 'react';\nimport type { Theme, CoverFields } from '../../../schema/theme';\n\nexport type CoverEditCtx = {\n editable: boolean;\n onFieldChange?: (name: keyof CoverFields, value: string) => void;\n onImagePick?: () => void;\n};\n\nexport const CoverEditContext = createContext<CoverEditCtx>({ editable: false });\n\nexport type CoverTemplateProps = {\n fields: CoverFields;\n theme?: Theme;\n accent: string;\n textColor: string;\n bgColor: string;\n};\n\ntype CoverFieldProps = {\n name: keyof CoverFields;\n value?: string;\n placeholder: string;\n as?: ElementType;\n className?: string;\n};\n\nexport function CoverField({ name, value, placeholder, as: Tag = 'span', className }: CoverFieldProps) {\n const { editable, onFieldChange } = useContext(CoverEditContext);\n if (!editable) return value ? <Tag className={className}>{value}</Tag> : null;\n return (\n <Tag\n className={className}\n data-cover-field={name}\n data-placeholder={placeholder}\n contentEditable\n suppressContentEditableWarning\n onBlur={(e: FocusEvent<HTMLElement>) => onFieldChange?.(name, e.currentTarget.textContent?.trim() ?? '')}\n onKeyDown={(e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLElement).blur();\n }\n }}\n >\n {value}\n </Tag>\n );\n}\n\ntype CoverImageProps = { src?: string; className?: string };\n\nexport function CoverImage({ src, className }: CoverImageProps) {\n const { editable, onImagePick } = useContext(CoverEditContext);\n if (!editable) {\n return src ? (\n <div className={className} data-cover-image>\n <img src={src} alt=\"\" />\n </div>\n ) : null;\n }\n return (\n <div\n className={className}\n data-cover-image\n role=\"button\"\n tabIndex={0}\n onClick={() => onImagePick?.()}\n onKeyDown={(e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onImagePick?.();\n }\n }}\n >\n {src ? <img src={src} alt=\"\" /> : <span>Adicionar imagem</span>}\n </div>\n );\n}\n","import styled from 'styled-components';\n\n// Página A4 inteira; cores/fonte por props (capa é irmã do PageFrame, não herda --doc-*).\nexport const CoverFrame = styled.div<{ $font: string; $bg?: string; $color?: string }>`\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: ${p => p.$font};\n background: ${p => p.$bg ?? '#FFFFFF'};\n color: ${p => p.$color ?? '#111827'};\n overflow-wrap: break-word;\n\n [data-cover-field][contenteditable] {\n cursor: text;\n border-radius: 3px;\n outline: 1px dashed transparent;\n outline-offset: 3px;\n transition: outline-color 0.12s ease;\n }\n [data-cover-field][contenteditable]:hover {\n outline-color: rgba(0, 90, 195, 0.45);\n }\n [data-cover-field][contenteditable]:focus {\n outline: 1px solid rgba(0, 90, 195, 0.8);\n }\n [data-cover-field][contenteditable]:empty::before {\n content: attr(data-placeholder);\n opacity: 0.45;\n font-style: italic;\n }\n [data-cover-image][role='button'] {\n cursor: pointer;\n outline: 1px dashed transparent;\n outline-offset: 3px;\n transition: outline-color 0.12s ease;\n }\n [data-cover-image][role='button']:hover {\n outline-color: rgba(0, 90, 195, 0.45);\n }\n [data-cover-image] img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n`;\n\nexport const FullBleedImage = styled.div<{ $overlay: string; $overlayOpacity?: number }>`\n position: absolute;\n inset: 0;\n\n & > [data-cover-image] {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n }\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n background: ${p => p.$overlay};\n opacity: ${p => p.$overlayOpacity ?? 0.55};\n }\n`;\n\nexport const CoverLogoImg = styled.img`\n max-height: 48px;\n max-width: 160px;\n object-fit: contain;\n`;\n\nexport const LabelSmall = styled.div`\n font-size: 11px;\n letter-spacing: 0.04em;\n opacity: 0.8;\n`;\n","import styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, FullBleedImage, CoverLogoImg } from './covers.styles';\n\nconst HAIRLINE = '#d9d9d9';\n\nconst Chrome = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n padding: 0 7cqw 8cqw;\n`;\n\nconst TopRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 4cqw;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 17cqw;\n max-height: 17cqw;\n`;\n\nconst Company = styled(CoverField)`\n display: block;\n margin-top: 5cqw;\n max-width: 45cqw;\n font-size: 2.94cqw;\n font-weight: 800;\n line-height: 1.15;\n letter-spacing: 0.3cqw;\n text-align: right;\n text-transform: uppercase;\n`;\n\nconst Head = styled.div`\n display: flex;\n flex-direction: column;\n\n &::before,\n &::after {\n content: '';\n width: 19cqw;\n height: 0.9cqw;\n background: ${HAIRLINE};\n }\n &::before {\n margin-bottom: 6cqw;\n }\n &::after {\n margin-top: 6cqw;\n }\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-size: 8.82cqw;\n font-weight: 800;\n line-height: 1.15;\n letter-spacing: 0.88cqw;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 3cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n line-height: 1.3;\n`;\n\nexport function Model1({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={fields.imageUrl ? undefined : bgColor} $color={textColor}>\n {fields.imageUrl ? (\n <FullBleedImage $overlay={accent} $overlayOpacity={0.85}>\n <CoverImage src={fields.imageUrl} />\n </FullBleedImage>\n ) : null}\n <Chrome>\n <TopRow>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : <span />}\n <Company name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </TopRow>\n <Head>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n </Head>\n </Chrome>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst BAND_BG = '#e8ecf1';\nconst HAIRLINE = '#d5dae1';\n\nconst Hairline = styled.div`\n position: absolute;\n left: 4.7%;\n top: 3%;\n height: 94%;\n width: 1px;\n background: ${HAIRLINE};\n`;\n\nconst Logo = styled(CoverLogoImg)`\n position: absolute;\n left: 10.9%;\n top: 6%;\n max-height: 13.6cqw;\n max-width: 32.7cqw;\n`;\n\nconst AccentBar = styled.div<{ $accent: string }>`\n position: absolute;\n left: 4.7%;\n top: 22.3%;\n width: 1.13cqw;\n height: 28.7%;\n background: ${p => p.$accent};\n`;\n\nconst Head = styled.div`\n position: absolute;\n left: 10.9%;\n right: 6%;\n top: 22.3%;\n display: flex;\n flex-direction: column;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-weight: 800;\n font-size: 12.6cqw;\n line-height: 1.2;\n letter-spacing: -0.63cqw;\n text-transform: uppercase;\n`;\n\nconst DateLine = styled(CoverField)`\n display: block;\n margin-top: 3.3cqw;\n font-size: 4.5cqw;\n font-weight: 400;\n`;\n\nconst Band = styled.div`\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 29.2%;\n background: ${BAND_BG};\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 4.3cqw;\n padding-left: 10.9%;\n padding-right: 6%;\n box-sizing: border-box;\n`;\n\nconst Label = styled.div`\n font-size: 2.77cqw;\n font-weight: 400;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 1cqw;\n font-size: 3.4cqw;\n font-weight: 700;\n line-height: 1.3;\n text-transform: uppercase;\n`;\n\nexport function Model2({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showHead = editable || Boolean(fields.title || fields.date);\n const showPrepared = editable || Boolean(fields.preparedFor);\n const showPresented = editable || Boolean(fields.presentedBy);\n const hasBand = showPrepared || showPresented;\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}\n {showHead ? (\n <>\n <AccentBar $accent={accent} />\n <Head data-cover-head>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <DateLine name=\"date\" value={fields.date} placeholder=\"Mês e ano\" />\n </Head>\n </>\n ) : null}\n {hasBand ? (\n <Band data-cover-band>\n {showPrepared ? (\n <div>\n <Label>Preparada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </div>\n ) : null}\n {showPresented ? (\n <div>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </div>\n ) : null}\n </Band>\n ) : null}\n <Hairline />\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst ImageBand = styled.div`\n position: relative;\n width: 100%;\n height: 42.9cqw;\n flex-shrink: 0;\n overflow: hidden;\n background: #1a1a1a;\n\n & > [data-cover-image] {\n position: absolute;\n inset: 0;\n }\n`;\n\nconst Logo = styled(CoverLogoImg)`\n position: absolute;\n top: 1.2cqw;\n right: 5.9cqw;\n max-width: 14.7cqw;\n max-height: 14.7cqw;\n`;\n\nconst Body = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 11.5cqw 9.4cqw 7.35cqw;\n`;\n\nconst DateField = styled(CoverField)`\n display: block;\n font-size: 2.94cqw;\n font-weight: 400;\n opacity: 0.5;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n margin-top: 2.35cqw;\n font-size: 10.6cqw;\n font-weight: 800;\n line-height: 1.2;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 4.7cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n opacity: 0.62;\n`;\n\nconst Parties = styled.div`\n margin-top: 13.8cqw;\n display: flex;\n flex-direction: column;\n gap: 4.7cqw;\n`;\n\nconst Label = styled.div`\n font-size: 3.53cqw;\n font-weight: 600;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 0.7cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n opacity: 0.62;\n`;\n\nexport function Model3({ fields, theme, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPresented = editable || Boolean(fields.presentedBy);\n const showPrepared = editable || Boolean(fields.preparedFor);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <ImageBand>\n {fields.imageUrl ? <CoverImage src={fields.imageUrl} /> : null}\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}\n </ImageBand>\n <Body>\n <DateField name=\"date\" value={fields.date} placeholder=\"Mês e ano\" />\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n {showPresented || showPrepared ? (\n <Parties data-cover-parties>\n {showPresented ? (\n <div>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </div>\n ) : null}\n {showPrepared ? (\n <div>\n <Label>Preparada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </div>\n ) : null}\n </Parties>\n ) : null}\n </Body>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst Body = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 4.12cqw 9.4cqw 0;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 14.7cqw;\n max-height: 14.7cqw;\n`;\n\nconst Head = styled.div`\n margin-top: 23.2cqw;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst DateChip = styled(CoverField)<{ $accent: string }>`\n display: inline-block;\n align-self: flex-start;\n max-width: 100%;\n background: ${p => p.$accent};\n border-radius: 1000px;\n padding: 1.18cqw 2.94cqw;\n font-size: 2.94cqw;\n font-weight: 400;\n letter-spacing: -0.29cqw;\n color: #ffffff;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n align-self: stretch;\n margin-top: 3.5cqw;\n font-size: 14.1cqw;\n font-weight: 300;\n line-height: 1.1;\n letter-spacing: -1.41cqw;\n`;\n\nconst Footer = styled.div`\n margin-top: auto;\n padding-bottom: 11cqw;\n display: flex;\n gap: 6cqw;\n`;\n\nconst Party = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Label = styled.div`\n font-size: 3.53cqw;\n font-weight: 300;\n letter-spacing: -0.35cqw;\n opacity: 0.72;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 1.5cqw;\n font-size: 4.12cqw;\n font-weight: 500;\n letter-spacing: -0.41cqw;\n`;\n\nexport function Model4({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPrepared = editable || Boolean(fields.preparedFor);\n const showPresented = editable || Boolean(fields.presentedBy);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <Body>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : <span />}\n <Head>\n <DateChip name=\"date\" value={fields.date} placeholder=\"Mês e ano\" $accent={accent} />\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n </Head>\n {showPrepared || showPresented ? (\n <Footer data-cover-footer>\n {showPrepared ? (\n <Party>\n <Label>Apresentada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </Party>\n ) : null}\n {showPresented ? (\n <Party>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </Party>\n ) : null}\n </Footer>\n ) : null}\n </Body>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, FullBleedImage, CoverLogoImg } from './covers.styles';\n\nconst Spacer = styled.div`\n height: 24.4cqw;\n flex-shrink: 0;\n`;\n\nconst ImageBand = styled.div`\n position: relative;\n width: 100%;\n height: 64.4cqw;\n flex-shrink: 0;\n overflow: hidden;\n background: #e8eef7;\n`;\n\nconst Bar = styled.div<{ $accent: string }>`\n position: absolute;\n width: 47.9cqw;\n height: 2.06cqw;\n background: ${p => p.$accent};\n`;\n\nconst BarTop = styled(Bar)`\n top: 0;\n right: 0;\n`;\n\nconst BarBottom = styled(Bar)`\n bottom: 0;\n left: 0;\n`;\n\nconst Bottom = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n gap: 7cqw;\n padding: 0 4.7cqw 4cqw 7cqw;\n`;\n\nconst LogoCol = styled.div`\n flex-shrink: 0;\n width: 29.4cqw;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 29.4cqw;\n max-height: 29.4cqw;\n`;\n\nconst TextCol = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-size: 7.06cqw;\n font-weight: 700;\n line-height: 1.2;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 2.47cqw;\n font-size: 2.94cqw;\n font-weight: 400;\n line-height: 1.2;\n opacity: 0.72;\n`;\n\nconst Presented = styled.div`\n margin-top: 3.5cqw;\n font-size: 2.94cqw;\n font-weight: 600;\n line-height: 1.2;\n`;\n\nconst PresentedValue = styled(CoverField)`\n font-weight: 600;\n`;\n\nexport function Model5({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPresented = editable || Boolean(fields.presentedBy);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <Spacer />\n <ImageBand>\n {fields.imageUrl ? (\n <FullBleedImage $overlay={accent} $overlayOpacity={0.5}>\n <CoverImage src={fields.imageUrl} />\n </FullBleedImage>\n ) : null}\n </ImageBand>\n <Bottom>\n <LogoCol>{theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}</LogoCol>\n <TextCol>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n {showPresented ? (\n <Presented>\n Apresentada por:{' '}\n <PresentedValue name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </Presented>\n ) : null}\n </TextCol>\n </Bottom>\n <BarTop $accent={accent} />\n <BarBottom $accent={accent} />\n </CoverFrame>\n );\n}\n","import type { ComponentType } from 'react';\nimport type { Theme } from '../../../schema/theme';\nimport { DEFAULT_DOCUMENT_COLORS } from '../../../surface/surface';\nimport type { CoverTemplateProps } from './primitives';\nimport { Model1 } from './Model1';\nimport { Model2 } from './Model2';\nimport { Model3 } from './Model3';\nimport { Model4 } from './Model4';\nimport { Model5 } from './Model5';\n\nexport const COVER_TEMPLATES: Record<string, ComponentType<CoverTemplateProps>> = {\n 'model-1': Model1,\n 'model-2': Model2,\n 'model-3': Model3,\n 'model-4': Model4,\n 'model-5': Model5\n};\n\nexport const COVER_TEMPLATE_IDS = Object.keys(COVER_TEMPLATES);\n\nexport const resolveCoverAccent = (accent?: string, theme?: Theme): string =>\n accent ?? theme?.colors?.brand ?? DEFAULT_DOCUMENT_COLORS.brand;\n\n// Superfície de cada template: `brand` = capa colorida com texto claro,\n// `background` = capa clara com o texto do documento. É o que define de qual cor do\n// tema o fundo/texto herdam quando o bloco não tem override.\nconst COVER_SURFACES: Record<string, 'brand' | 'background'> = {\n 'model-1': 'brand',\n 'model-2': 'background',\n 'model-3': 'brand',\n 'model-4': 'brand',\n 'model-5': 'background'\n};\n\nconst ON_BRAND_TEXT = '#FFFFFF';\n\nexport type CoverColorOverrides = { accent?: string; textColor?: string; bgColor?: string };\n\nexport type CoverColors = { accent: string; textColor: string; bgColor: string };\n\nexport const resolveCoverColors = (\n templateId: string | undefined,\n { accent, textColor, bgColor }: CoverColorOverrides,\n theme?: Theme\n): CoverColors => {\n const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme?.colors };\n const onBrand = (COVER_SURFACES[templateId ?? ''] ?? COVER_SURFACES['model-1']) === 'brand';\n const resolvedAccent = resolveCoverAccent(accent, theme);\n\n return {\n accent: resolvedAccent,\n textColor: textColor ?? (onBrand ? ON_BRAND_TEXT : colors.text),\n bgColor: bgColor ?? (onBrand ? resolvedAccent : colors.background)\n };\n};\n","import type { CSSProperties } from 'react';\nimport type { CoverFields, Theme } from '../../schema/theme';\nimport { DEFAULT_DOCUMENT_COLORS } from '../../surface/surface';\nimport { COVER_TEMPLATES, resolveCoverColors } from './covers';\n\nexport type CoverPageProps = {\n templateId?: string;\n accent?: string;\n fields?: CoverFields;\n theme?: Theme;\n textColor?: string;\n bgColor?: string;\n};\n\nexport function CoverPage({ templateId, accent, fields, theme, textColor, bgColor }: CoverPageProps) {\n if (!templateId) return null;\n\n // CoverPage é IRMÃO do PageFrame no body (buildDocumentHtml), não descendente —\n // não pode contar com as --doc-* vars setadas lá, precisa das próprias.\n const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme?.colors };\n const vars: CSSProperties = {\n ['--doc-brand' as keyof CSSProperties]: colors.brand,\n ['--doc-text' as keyof CSSProperties]: colors.text,\n ['--doc-bg' as keyof CSSProperties]: colors.background\n } as CSSProperties;\n\n const Template = COVER_TEMPLATES[templateId] ?? COVER_TEMPLATES['model-1'];\n const resolved = resolveCoverColors(templateId, { accent, textColor, bgColor }, theme);\n\n // Layout (width/height/overflow) vem do CSS gerado (buildPageCss.ts): .dg-cover\n // já define width, e o escopo .pagedjs_page_content .dg-cover define height/overflow\n // para a página impressa. Inline aqui só carrega as --doc-* vars.\n return (\n <section className=\"dg-cover\" style={vars}>\n <Template fields={fields ?? {}} theme={theme} {...resolved} />\n </section>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { CompanyInfo } from './types';\n\nconst BOX: { width: number; height: number; 'aria-hidden': true } = { width: 14, height: 14, 'aria-hidden': true };\n\nconst stroke = (inner: string): ReactNode => (\n <svg\n {...BOX}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n // eslint-disable-next-line react/no-danger -- markup estático deste arquivo, nunca entrada do host\n dangerouslySetInnerHTML={{ __html: inner }}\n />\n);\n\nconst brand = (viewBox: string, d: string): ReactNode => (\n <svg {...BOX} viewBox={viewBox} fill=\"currentColor\">\n <path d={d} />\n </svg>\n);\n\nexport const COMPANY_INFO_ICONS: Record<keyof CompanyInfo, ReactNode> = {\n companyName: stroke(\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 cnpj: stroke(\n '<path d=\"M16 10h2\" /><path d=\"M16 14h2\" /><path d=\"M6.17 15a3 3 0 0 1 5.66 0\" /><circle cx=\"9\" cy=\"11\" r=\"2\" /><rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />'\n ),\n phone: stroke(\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 email: stroke(\n '<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 address: stroke(\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 site: stroke(\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 instagram: brand(\n '0 0 448 512',\n '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: brand(\n '0 0 320 512',\n '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 twitter: brand(\n '0 0 512 512',\n 'M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z'\n ),\n linkedin: brand(\n '0 0 448 512',\n 'M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z'\n )\n};\n","import styled from 'styled-components';\n\n// Chrome roda dentro das margin boxes do Paged.js — fora do PageFrame, sem herdar\n// font-family nem --doc-* vars; cada root recebe fonte e cores via props.\n// O Paged.js força `display: block` no filho direto da margin box com especificidade\n// (0,4,0) — por isso o root é block e o layout flex fica num wrapper interno.\n// O fundo da faixa NÃO fica aqui: é pintado na row inteira do Paged.js (corners\n// inclusos) pelo buildPageCss, pra faixa ser full-bleed até as bordas da página.\nexport const HeaderRoot = styled.header<{ $color: string; $font: string }>`\n height: 100%;\n color: ${props => props.$color};\n font-family: ${props => props.$font};\n line-height: 1.5;\n`;\n\nexport const HeaderLayout = styled.div<{ $reverse: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: ${props => (props.$reverse ? 'row-reverse' : 'row')};\n gap: 16px;\n height: 100%;\n padding: 12px 0;\n`;\n\nexport const HeaderInfo = styled.div<{ $alignEnd?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: ${props => (props.$alignEnd ? 'flex-end' : 'flex-start')};\n min-width: 0;\n font-size: 12px;\n text-align: ${props => (props.$alignEnd ? 'right' : 'left')};\n`;\n\n// Ícone fica sempre na borda externa da página: infos à direita (logo left) → texto, ícone.\nexport const InfoLine = styled.span<{ $strong?: boolean; $iconAfter?: boolean }>`\n display: flex;\n flex-direction: ${props => (props.$iconAfter ? 'row-reverse' : 'row')};\n align-items: center;\n gap: 8px;\n height: 22px;\n font-weight: ${props => (props.$strong ? 600 : 400)};\n font-size: ${props => (props.$strong ? '12.5px' : '12px')};\n\n svg {\n flex-shrink: 0;\n }\n`;\n\nexport const HeaderLogo = styled.img`\n max-height: 44px;\n max-width: 180px;\n object-fit: contain;\n`;\n\nexport const FooterRoot = styled.footer<{ $color: string; $font: string }>`\n height: 100%;\n color: ${props => props.$color};\n font-family: ${props => props.$font};\n line-height: 1.5;\n`;\n\nexport const FooterLayout = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: 100%;\n padding: 12px 0;\n`;\n\nexport const FooterInfoRows = styled.div<{ $justify: string }>`\n display: flex;\n align-items: center;\n justify-content: ${props => props.$justify};\n flex-wrap: wrap;\n column-gap: 24px;\n font-size: 12px;\n`;\n\nexport const FooterItem = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 22px;\n white-space: nowrap;\n\n svg {\n flex-shrink: 0;\n }\n`;\n","import type { HeaderConfig } from '../../schema/theme';\nimport type { CompanyInfo } from './types';\nimport { fontStack } from '../../surface/fonts';\nimport { COMPANY_INFO_ICONS } from './icons';\nimport { HeaderInfo, HeaderLayout, HeaderLogo, HeaderRoot, InfoLine } from './chrome.styles';\n\n/** Ordem em que as informações da empresa aparecem no cabeçalho. */\nexport const HEADER_INFO_ORDER: Array<keyof CompanyInfo> = ['companyName', 'cnpj', 'phone', 'email', 'address'];\n\nexport type HeaderBarProps = {\n config?: Partial<HeaderConfig>;\n companyInfo?: CompanyInfo;\n logoUrl?: string;\n documentFont?: string;\n};\n\nexport function HeaderBar({ config, companyInfo = {}, logoUrl, documentFont }: HeaderBarProps) {\n if (!config?.enabled) return null;\n\n const lines = HEADER_INFO_ORDER.filter(\n key => config.info?.[key as keyof NonNullable<HeaderConfig['info']>] && companyInfo[key]\n );\n const logoLeft = config.logoPosition === 'left';\n\n return (\n <HeaderRoot className=\"dg-running-header\" $color={config.color ?? '#3F4759'} $font={fontStack(documentFont)}>\n <HeaderLayout $reverse={logoLeft}>\n <HeaderInfo $alignEnd={logoLeft}>\n {lines.map(key => (\n <InfoLine key={key} $strong={key === 'companyName'} $iconAfter={logoLeft}>\n {COMPANY_INFO_ICONS[key]}\n <span>{companyInfo[key]}</span>\n </InfoLine>\n ))}\n </HeaderInfo>\n {logoUrl ? <HeaderLogo src={logoUrl} alt=\"\" /> : null}\n </HeaderLayout>\n </HeaderRoot>\n );\n}\n","import type { FooterConfig } from '../../schema/theme';\nimport type { CompanyInfo } from './types';\nimport { fontStack } from '../../surface/fonts';\nimport { COMPANY_INFO_ICONS } from './icons';\nimport { FooterInfoRows, FooterItem, FooterLayout, FooterRoot } from './chrome.styles';\n\nexport const FOOTER_INFO_ORDER: Array<keyof CompanyInfo> = [\n 'phone',\n 'site',\n 'instagram',\n 'facebook',\n 'twitter',\n 'linkedin',\n 'email',\n 'address'\n];\n\nconst ALIGNMENT_TO_JUSTIFY: Record<NonNullable<FooterConfig['alignment']>, string> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end'\n};\n\nexport type FooterBarProps = {\n config?: Partial<FooterConfig>;\n companyInfo?: CompanyInfo;\n documentFont?: string;\n};\n\nexport function FooterBar({ config, companyInfo = {}, documentFont }: FooterBarProps) {\n const showBand = Boolean(config?.enabled);\n const showPageNumber = Boolean(config?.pageNumber);\n if (!showBand && !showPageNumber) return null;\n\n const lines = showBand\n ? FOOTER_INFO_ORDER.filter(\n key => config?.info?.[key as keyof NonNullable<FooterConfig['info']>] && companyInfo[key]\n )\n : [];\n const justify = ALIGNMENT_TO_JUSTIFY[config?.alignment ?? 'center'];\n\n return (\n <FooterRoot className=\"dg-running-footer\" $color={config?.color ?? '#3F4759'} $font={fontStack(documentFont)}>\n {showPageNumber ? <span className=\"dg-page-number\" /> : null}\n {showBand ? (\n <FooterLayout>\n {lines.length ? (\n <FooterInfoRows $justify={justify}>\n {lines.map(key => (\n <FooterItem key={key}>\n {COMPANY_INFO_ICONS[key]}\n <span>{companyInfo[key]}</span>\n </FooterItem>\n ))}\n </FooterInfoRows>\n ) : null}\n </FooterLayout>\n ) : null}\n </FooterRoot>\n );\n}\n","/**\n * Protocolo `postMessage` entre o documento gerado (iframe) e o host.\n * Módulo separado do `previewBootstrap` de propósito: o host precisa destas\n * constantes no browser, e o bootstrap só existe no caminho de impressão.\n */\nexport const DG_MESSAGE_SOURCE = 'document-generator';\nexport const DG_READY = 'dg-ready';\nexport const DG_ERROR = 'dg-error';\n"]}
1
+ {"version":3,"sources":["../src/render/DocumentRenderer.tsx","../src/render/chrome/covers/primitives.tsx","../src/render/chrome/covers/covers.styles.ts","../src/render/chrome/covers/Model1.tsx","../src/render/chrome/covers/Model2.tsx","../src/render/chrome/covers/Model3.tsx","../src/render/chrome/covers/Model4.tsx","../src/render/chrome/covers/Model5.tsx","../src/render/chrome/covers/index.ts","../src/render/chrome/CoverPage.tsx","../src/render/chrome/icons.tsx","../src/render/chrome/chrome.styles.ts","../src/render/chrome/HeaderBar.tsx","../src/render/chrome/FooterBar.tsx","../src/render/messages.ts"],"names":["jsx","styled","HAIRLINE","Logo","Head","Title","useContext","jsxs","Subtitle","Label","Value","Body","ImageBand"],"mappings":"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","file":"chunk-BEG6KN5X.js","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { type Data, type Metadata, Render } from '@puckeditor/core';\nimport { buildConfig } from '../core/buildConfig';\nimport type { Registry } from '../blocks/types';\nimport type { Theme } from '../schema/theme';\nimport { useDocumentFont } from '../surface/useDocumentFont';\nimport { DocumentThemeProvider } from '../surface/themeContext';\nimport { CatalogProvider } from '../variables/catalogContext';\nimport { ResolvedProvider } from '../variables/resolvedContext';\nimport { resolveDocumentVariables } from '../variables/resolve';\nimport { extractBindingKeys } from '../variables/bindings';\nimport type {\n ResolvedVariables,\n UnresolvedDisplay,\n VariableContext,\n VariableDef,\n VariableResolver\n} from '../variables/types';\n\nexport type DocumentRendererProps = {\n registry: Registry;\n data: Data;\n theme?: Theme;\n catalog?: VariableDef[];\n /** Live resolution (browser preview). Called in an effect. */\n resolver?: VariableResolver;\n ctx?: VariableContext;\n resolvedVariables?: ResolvedVariables;\n unresolvedDisplay?: UnresolvedDisplay;\n metadata?: Metadata;\n};\n\nexport function DocumentRenderer({\n registry,\n data,\n theme = {},\n catalog = [],\n resolver,\n ctx = {},\n resolvedVariables,\n unresolvedDisplay = 'placeholder',\n metadata\n}: DocumentRendererProps) {\n // Sem `theme`: ele chega pelo DocumentThemeProvider (config estável — ver docs/architecture.md).\n const config = useMemo(() => buildConfig(registry), [registry]);\n const [resolved, setResolved] = useState<ResolvedVariables>(resolvedVariables ?? {});\n\n useDocumentFont(theme.documentFont);\n\n const keysHash = useMemo(() => extractBindingKeys(data).sort().join('|'), [data]);\n const ctxHash = JSON.stringify(ctx);\n\n useEffect(() => {\n if (resolvedVariables || !resolver || keysHash === '') return undefined;\n let active = true;\n resolveDocumentVariables(data, catalog, resolver, ctx).then(next => {\n if (active) setResolved(next);\n });\n return () => {\n active = false;\n };\n // Keyado por keysHash/ctxHash (não por data) — evita refetch por edição.\n }, [resolvedVariables, resolver, catalog, keysHash, ctxHash]);\n\n const effective = resolvedVariables ?? resolved;\n\n return (\n <DocumentThemeProvider theme={theme}>\n <CatalogProvider catalog={catalog}>\n <ResolvedProvider resolved={effective} unresolvedDisplay={unresolvedDisplay}>\n <Render config={config} data={data} metadata={metadata} />\n </ResolvedProvider>\n </CatalogProvider>\n </DocumentThemeProvider>\n );\n}\n","import { createContext, useContext, type ElementType, type KeyboardEvent, type FocusEvent } from 'react';\nimport type { Theme, CoverFields } from '../../../schema/theme';\n\nexport type CoverEditCtx = {\n editable: boolean;\n onFieldChange?: (name: keyof CoverFields, value: string) => void;\n onImagePick?: () => void;\n};\n\nexport const CoverEditContext = createContext<CoverEditCtx>({ editable: false });\n\nexport type CoverTemplateProps = {\n fields: CoverFields;\n theme?: Theme;\n accent: string;\n textColor: string;\n bgColor: string;\n};\n\ntype CoverFieldProps = {\n name: keyof CoverFields;\n value?: string;\n placeholder: string;\n as?: ElementType;\n className?: string;\n};\n\nexport function CoverField({ name, value, placeholder, as: Tag = 'span', className }: CoverFieldProps) {\n const { editable, onFieldChange } = useContext(CoverEditContext);\n if (!editable) return value ? <Tag className={className}>{value}</Tag> : null;\n return (\n <Tag\n className={className}\n data-cover-field={name}\n data-placeholder={placeholder}\n contentEditable\n suppressContentEditableWarning\n onBlur={(e: FocusEvent<HTMLElement>) => onFieldChange?.(name, e.currentTarget.textContent?.trim() ?? '')}\n onKeyDown={(e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLElement).blur();\n }\n }}\n >\n {value}\n </Tag>\n );\n}\n\ntype CoverImageProps = { src?: string; className?: string };\n\nexport function CoverImage({ src, className }: CoverImageProps) {\n const { editable, onImagePick } = useContext(CoverEditContext);\n if (!editable) {\n return src ? (\n <div className={className} data-cover-image>\n <img src={src} alt=\"\" />\n </div>\n ) : null;\n }\n return (\n <div\n className={className}\n data-cover-image\n role=\"button\"\n tabIndex={0}\n onClick={() => onImagePick?.()}\n onKeyDown={(e: KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onImagePick?.();\n }\n }}\n >\n {src ? <img src={src} alt=\"\" /> : <span>Adicionar imagem</span>}\n </div>\n );\n}\n","import styled from 'styled-components';\n\n// Página A4 inteira; cores/fonte por props (capa é irmã do PageFrame, não herda --doc-*).\nexport const CoverFrame = styled.div<{ $font: string; $bg?: string; $color?: string }>`\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-family: ${p => p.$font};\n background: ${p => p.$bg ?? '#FFFFFF'};\n color: ${p => p.$color ?? '#111827'};\n overflow-wrap: break-word;\n\n [data-cover-field][contenteditable] {\n cursor: text;\n border-radius: 3px;\n outline: 1px dashed transparent;\n outline-offset: 3px;\n transition: outline-color 0.12s ease;\n }\n [data-cover-field][contenteditable]:hover {\n outline-color: rgba(0, 90, 195, 0.45);\n }\n [data-cover-field][contenteditable]:focus {\n outline: 1px solid rgba(0, 90, 195, 0.8);\n }\n [data-cover-field][contenteditable]:empty::before {\n content: attr(data-placeholder);\n opacity: 0.45;\n font-style: italic;\n }\n [data-cover-image][role='button'] {\n cursor: pointer;\n outline: 1px dashed transparent;\n outline-offset: 3px;\n transition: outline-color 0.12s ease;\n }\n [data-cover-image][role='button']:hover {\n outline-color: rgba(0, 90, 195, 0.45);\n }\n [data-cover-image] img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n`;\n\nexport const FullBleedImage = styled.div<{ $overlay: string; $overlayOpacity?: number }>`\n position: absolute;\n inset: 0;\n\n & > [data-cover-image] {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #ffffff;\n }\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n background: ${p => p.$overlay};\n opacity: ${p => p.$overlayOpacity ?? 0.55};\n }\n`;\n\nexport const CoverLogoImg = styled.img`\n max-height: 48px;\n max-width: 160px;\n object-fit: contain;\n`;\n\nexport const LabelSmall = styled.div`\n font-size: 11px;\n letter-spacing: 0.04em;\n opacity: 0.8;\n`;\n","import styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, FullBleedImage, CoverLogoImg } from './covers.styles';\n\nconst HAIRLINE = '#d9d9d9';\n\nconst Chrome = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n height: 100%;\n padding: 0 7cqw 8cqw;\n`;\n\nconst TopRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 4cqw;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 17cqw;\n max-height: 17cqw;\n`;\n\nconst Company = styled(CoverField)`\n display: block;\n margin-top: 5cqw;\n max-width: 45cqw;\n font-size: 2.94cqw;\n font-weight: 800;\n line-height: 1.15;\n letter-spacing: 0.3cqw;\n text-align: right;\n text-transform: uppercase;\n`;\n\nconst Head = styled.div`\n display: flex;\n flex-direction: column;\n\n &::before,\n &::after {\n content: '';\n width: 19cqw;\n height: 0.9cqw;\n background: ${HAIRLINE};\n }\n &::before {\n margin-bottom: 6cqw;\n }\n &::after {\n margin-top: 6cqw;\n }\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-size: 8.82cqw;\n font-weight: 800;\n line-height: 1.15;\n letter-spacing: 0.88cqw;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 3cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n line-height: 1.3;\n`;\n\nexport function Model1({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={fields.imageUrl ? undefined : bgColor} $color={textColor}>\n {fields.imageUrl ? (\n <FullBleedImage $overlay={accent} $overlayOpacity={0.85}>\n <CoverImage src={fields.imageUrl} />\n </FullBleedImage>\n ) : null}\n <Chrome>\n <TopRow>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : <span />}\n <Company name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </TopRow>\n <Head>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n </Head>\n </Chrome>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst BAND_BG = '#e8ecf1';\nconst HAIRLINE = '#d5dae1';\n\nconst Hairline = styled.div`\n position: absolute;\n left: 4.7%;\n top: 3%;\n height: 94%;\n width: 1px;\n background: ${HAIRLINE};\n`;\n\nconst Logo = styled(CoverLogoImg)`\n position: absolute;\n left: 10.9%;\n top: 6%;\n max-height: 13.6cqw;\n max-width: 32.7cqw;\n`;\n\nconst AccentBar = styled.div<{ $accent: string }>`\n position: absolute;\n left: 4.7%;\n top: 22.3%;\n width: 1.13cqw;\n height: 28.7%;\n background: ${p => p.$accent};\n`;\n\nconst Head = styled.div`\n position: absolute;\n left: 10.9%;\n right: 6%;\n top: 22.3%;\n display: flex;\n flex-direction: column;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-weight: 800;\n font-size: 12.6cqw;\n line-height: 1.2;\n letter-spacing: -0.63cqw;\n text-transform: uppercase;\n`;\n\nconst DateLine = styled(CoverField)`\n display: block;\n margin-top: 3.3cqw;\n font-size: 4.5cqw;\n font-weight: 400;\n`;\n\nconst Band = styled.div`\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n height: 29.2%;\n background: ${BAND_BG};\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 4.3cqw;\n padding-left: 10.9%;\n padding-right: 6%;\n box-sizing: border-box;\n`;\n\nconst Label = styled.div`\n font-size: 2.77cqw;\n font-weight: 400;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 1cqw;\n font-size: 3.4cqw;\n font-weight: 700;\n line-height: 1.3;\n text-transform: uppercase;\n`;\n\nexport function Model2({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showHead = editable || Boolean(fields.title || fields.date);\n const showPrepared = editable || Boolean(fields.preparedFor);\n const showPresented = editable || Boolean(fields.presentedBy);\n const hasBand = showPrepared || showPresented;\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}\n {showHead ? (\n <>\n <AccentBar $accent={accent} />\n <Head data-cover-head>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <DateLine name=\"date\" value={fields.date} placeholder=\"Mês e ano\" />\n </Head>\n </>\n ) : null}\n {hasBand ? (\n <Band data-cover-band>\n {showPrepared ? (\n <div>\n <Label>Preparada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </div>\n ) : null}\n {showPresented ? (\n <div>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </div>\n ) : null}\n </Band>\n ) : null}\n <Hairline />\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst ImageBand = styled.div`\n position: relative;\n width: 100%;\n height: 42.9cqw;\n flex-shrink: 0;\n overflow: hidden;\n background: #1a1a1a;\n\n & > [data-cover-image] {\n position: absolute;\n inset: 0;\n }\n`;\n\nconst Logo = styled(CoverLogoImg)`\n position: absolute;\n top: 1.2cqw;\n right: 5.9cqw;\n max-width: 14.7cqw;\n max-height: 14.7cqw;\n`;\n\nconst Body = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 11.5cqw 9.4cqw 7.35cqw;\n`;\n\nconst DateField = styled(CoverField)`\n display: block;\n font-size: 2.94cqw;\n font-weight: 400;\n opacity: 0.5;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n margin-top: 2.35cqw;\n font-size: 10.6cqw;\n font-weight: 800;\n line-height: 1.2;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 4.7cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n opacity: 0.62;\n`;\n\nconst Parties = styled.div`\n margin-top: 13.8cqw;\n display: flex;\n flex-direction: column;\n gap: 4.7cqw;\n`;\n\nconst Label = styled.div`\n font-size: 3.53cqw;\n font-weight: 600;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 0.7cqw;\n font-size: 3.53cqw;\n font-weight: 400;\n opacity: 0.62;\n`;\n\nexport function Model3({ fields, theme, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPresented = editable || Boolean(fields.presentedBy);\n const showPrepared = editable || Boolean(fields.preparedFor);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <ImageBand>\n {fields.imageUrl ? <CoverImage src={fields.imageUrl} /> : null}\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}\n </ImageBand>\n <Body>\n <DateField name=\"date\" value={fields.date} placeholder=\"Mês e ano\" />\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n {showPresented || showPrepared ? (\n <Parties data-cover-parties>\n {showPresented ? (\n <div>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </div>\n ) : null}\n {showPrepared ? (\n <div>\n <Label>Preparada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </div>\n ) : null}\n </Parties>\n ) : null}\n </Body>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, CoverLogoImg } from './covers.styles';\n\nconst Body = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 4.12cqw 9.4cqw 0;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 14.7cqw;\n max-height: 14.7cqw;\n`;\n\nconst Head = styled.div`\n margin-top: 23.2cqw;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst DateChip = styled(CoverField)<{ $accent: string }>`\n display: inline-block;\n align-self: flex-start;\n max-width: 100%;\n background: ${p => p.$accent};\n border-radius: 1000px;\n padding: 1.18cqw 2.94cqw;\n font-size: 2.94cqw;\n font-weight: 400;\n letter-spacing: -0.29cqw;\n color: #ffffff;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n align-self: stretch;\n margin-top: 3.5cqw;\n font-size: 14.1cqw;\n font-weight: 300;\n line-height: 1.1;\n letter-spacing: -1.41cqw;\n`;\n\nconst Footer = styled.div`\n margin-top: auto;\n padding-bottom: 11cqw;\n display: flex;\n gap: 6cqw;\n`;\n\nconst Party = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Label = styled.div`\n font-size: 3.53cqw;\n font-weight: 300;\n letter-spacing: -0.35cqw;\n opacity: 0.72;\n`;\n\nconst Value = styled(CoverField)`\n display: block;\n margin-top: 1.5cqw;\n font-size: 4.12cqw;\n font-weight: 500;\n letter-spacing: -0.41cqw;\n`;\n\nexport function Model4({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPrepared = editable || Boolean(fields.preparedFor);\n const showPresented = editable || Boolean(fields.presentedBy);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <Body>\n {theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : <span />}\n <Head>\n <DateChip name=\"date\" value={fields.date} placeholder=\"Mês e ano\" $accent={accent} />\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n </Head>\n {showPrepared || showPresented ? (\n <Footer data-cover-footer>\n {showPrepared ? (\n <Party>\n <Label>Apresentada para</Label>\n <Value name=\"preparedFor\" value={fields.preparedFor} placeholder=\"Nome do cliente\" />\n </Party>\n ) : null}\n {showPresented ? (\n <Party>\n <Label>Apresentada por</Label>\n <Value name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </Party>\n ) : null}\n </Footer>\n ) : null}\n </Body>\n </CoverFrame>\n );\n}\n","import { useContext } from 'react';\nimport styled from 'styled-components';\nimport { fontStack } from '../../../surface/fonts';\nimport { CoverEditContext, CoverField, CoverImage, type CoverTemplateProps } from './primitives';\nimport { CoverFrame, FullBleedImage, CoverLogoImg } from './covers.styles';\n\nconst Spacer = styled.div`\n height: 24.4cqw;\n flex-shrink: 0;\n`;\n\nconst ImageBand = styled.div`\n position: relative;\n width: 100%;\n height: 64.4cqw;\n flex-shrink: 0;\n overflow: hidden;\n background: #e8eef7;\n`;\n\nconst Bar = styled.div<{ $accent: string }>`\n position: absolute;\n width: 47.9cqw;\n height: 2.06cqw;\n background: ${p => p.$accent};\n`;\n\nconst BarTop = styled(Bar)`\n top: 0;\n right: 0;\n`;\n\nconst BarBottom = styled(Bar)`\n bottom: 0;\n left: 0;\n`;\n\nconst Bottom = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n gap: 7cqw;\n padding: 0 4.7cqw 4cqw 7cqw;\n`;\n\nconst LogoCol = styled.div`\n flex-shrink: 0;\n width: 29.4cqw;\n`;\n\nconst Logo = styled(CoverLogoImg)`\n max-width: 29.4cqw;\n max-height: 29.4cqw;\n`;\n\nconst TextCol = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst Title = styled(CoverField)`\n display: block;\n font-size: 7.06cqw;\n font-weight: 700;\n line-height: 1.2;\n text-transform: uppercase;\n`;\n\nconst Subtitle = styled(CoverField)`\n display: block;\n margin-top: 2.47cqw;\n font-size: 2.94cqw;\n font-weight: 400;\n line-height: 1.2;\n opacity: 0.72;\n`;\n\nconst Presented = styled.div`\n margin-top: 3.5cqw;\n font-size: 2.94cqw;\n font-weight: 600;\n line-height: 1.2;\n`;\n\nconst PresentedValue = styled(CoverField)`\n font-weight: 600;\n`;\n\nexport function Model5({ fields, theme, accent, textColor, bgColor }: CoverTemplateProps) {\n const { editable } = useContext(CoverEditContext);\n const showPresented = editable || Boolean(fields.presentedBy);\n return (\n <CoverFrame $font={fontStack(theme?.documentFont)} $bg={bgColor} $color={textColor}>\n <Spacer />\n <ImageBand>\n {fields.imageUrl ? (\n <FullBleedImage $overlay={accent} $overlayOpacity={0.5}>\n <CoverImage src={fields.imageUrl} />\n </FullBleedImage>\n ) : null}\n </ImageBand>\n <Bottom>\n <LogoCol>{theme?.logo?.url ? <Logo src={theme.logo.url} alt=\"\" /> : null}</LogoCol>\n <TextCol>\n <Title name=\"title\" value={fields.title} placeholder=\"Digite o título...\" />\n <Subtitle name=\"subtitle\" value={fields.subtitle} placeholder=\"Digite o subtítulo...\" />\n {showPresented ? (\n <Presented>\n Apresentada por:{' '}\n <PresentedValue name=\"presentedBy\" value={fields.presentedBy} placeholder=\"Nome da empresa\" />\n </Presented>\n ) : null}\n </TextCol>\n </Bottom>\n <BarTop $accent={accent} />\n <BarBottom $accent={accent} />\n </CoverFrame>\n );\n}\n","import type { ComponentType } from 'react';\nimport type { Theme } from '../../../schema/theme';\nimport { DEFAULT_DOCUMENT_COLORS } from '../../../surface/surface';\nimport type { CoverTemplateProps } from './primitives';\nimport { Model1 } from './Model1';\nimport { Model2 } from './Model2';\nimport { Model3 } from './Model3';\nimport { Model4 } from './Model4';\nimport { Model5 } from './Model5';\n\nexport const COVER_TEMPLATES: Record<string, ComponentType<CoverTemplateProps>> = {\n 'model-1': Model1,\n 'model-2': Model2,\n 'model-3': Model3,\n 'model-4': Model4,\n 'model-5': Model5\n};\n\nexport const COVER_TEMPLATE_IDS = Object.keys(COVER_TEMPLATES);\n\nexport const resolveCoverAccent = (accent?: string, theme?: Theme): string =>\n accent ?? theme?.colors?.brand ?? DEFAULT_DOCUMENT_COLORS.brand;\n\n// Superfície de cada template: `brand` = capa colorida com texto claro,\n// `background` = capa clara com o texto do documento. É o que define de qual cor do\n// tema o fundo/texto herdam quando o bloco não tem override.\nconst COVER_SURFACES: Record<string, 'brand' | 'background'> = {\n 'model-1': 'brand',\n 'model-2': 'background',\n 'model-3': 'brand',\n 'model-4': 'brand',\n 'model-5': 'background'\n};\n\nconst ON_BRAND_TEXT = '#FFFFFF';\n\nexport type CoverColorOverrides = { accent?: string; textColor?: string; bgColor?: string };\n\nexport type CoverColors = { accent: string; textColor: string; bgColor: string };\n\nexport const resolveCoverColors = (\n templateId: string | undefined,\n { accent, textColor, bgColor }: CoverColorOverrides,\n theme?: Theme\n): CoverColors => {\n const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme?.colors };\n const onBrand = (COVER_SURFACES[templateId ?? ''] ?? COVER_SURFACES['model-1']) === 'brand';\n const resolvedAccent = resolveCoverAccent(accent, theme);\n\n return {\n accent: resolvedAccent,\n textColor: textColor ?? (onBrand ? ON_BRAND_TEXT : colors.text),\n bgColor: bgColor ?? (onBrand ? resolvedAccent : colors.background)\n };\n};\n","import type { CSSProperties } from 'react';\nimport type { CoverFields, Theme } from '../../schema/theme';\nimport { DEFAULT_DOCUMENT_COLORS } from '../../surface/surface';\nimport { COVER_TEMPLATES, resolveCoverColors } from './covers';\n\nexport type CoverPageProps = {\n templateId?: string;\n accent?: string;\n fields?: CoverFields;\n theme?: Theme;\n textColor?: string;\n bgColor?: string;\n};\n\nexport function CoverPage({ templateId, accent, fields, theme, textColor, bgColor }: CoverPageProps) {\n if (!templateId) return null;\n\n // CoverPage é IRMÃO do PageFrame no body (buildDocumentHtml), não descendente —\n // não pode contar com as --doc-* vars setadas lá, precisa das próprias.\n const colors = { ...DEFAULT_DOCUMENT_COLORS, ...theme?.colors };\n const vars: CSSProperties = {\n ['--doc-brand' as keyof CSSProperties]: colors.brand,\n ['--doc-text' as keyof CSSProperties]: colors.text,\n ['--doc-bg' as keyof CSSProperties]: colors.background\n } as CSSProperties;\n\n const Template = COVER_TEMPLATES[templateId] ?? COVER_TEMPLATES['model-1'];\n const resolved = resolveCoverColors(templateId, { accent, textColor, bgColor }, theme);\n\n // Layout (width/height/overflow) vem do CSS gerado (buildPageCss.ts): .dg-cover\n // já define width, e o escopo .pagedjs_page_content .dg-cover define height/overflow\n // para a página impressa. Inline aqui só carrega as --doc-* vars.\n return (\n <section className=\"dg-cover\" style={vars}>\n <Template fields={fields ?? {}} theme={theme} {...resolved} />\n </section>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { CompanyInfo } from './types';\n\nconst BOX: { width: number; height: number; 'aria-hidden': true } = { width: 14, height: 14, 'aria-hidden': true };\n\nconst stroke = (inner: string): ReactNode => (\n <svg\n {...BOX}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n // eslint-disable-next-line react/no-danger -- markup estático deste arquivo, nunca entrada do host\n dangerouslySetInnerHTML={{ __html: inner }}\n />\n);\n\nconst brand = (viewBox: string, d: string): ReactNode => (\n <svg {...BOX} viewBox={viewBox} fill=\"currentColor\">\n <path d={d} />\n </svg>\n);\n\nexport const COMPANY_INFO_ICONS: Record<keyof CompanyInfo, ReactNode> = {\n companyName: stroke(\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 cnpj: stroke(\n '<path d=\"M16 10h2\" /><path d=\"M16 14h2\" /><path d=\"M6.17 15a3 3 0 0 1 5.66 0\" /><circle cx=\"9\" cy=\"11\" r=\"2\" /><rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />'\n ),\n phone: stroke(\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 email: stroke(\n '<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 address: stroke(\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 site: stroke(\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 instagram: brand(\n '0 0 448 512',\n '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: brand(\n '0 0 320 512',\n '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 twitter: brand(\n '0 0 512 512',\n 'M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z'\n ),\n linkedin: brand(\n '0 0 448 512',\n 'M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z'\n )\n};\n","import styled from 'styled-components';\n\n// Chrome roda dentro das margin boxes do Paged.js — fora do PageFrame, sem herdar\n// font-family nem --doc-* vars; cada root recebe fonte e cores via props.\n// O Paged.js força `display: block` no filho direto da margin box com especificidade\n// (0,4,0) — por isso o root é block e o layout flex fica num wrapper interno.\n// O fundo da faixa NÃO fica aqui: é pintado na row inteira do Paged.js (corners\n// inclusos) pelo buildPageCss, pra faixa ser full-bleed até as bordas da página.\nexport const HeaderRoot = styled.header<{ $color: string; $font: string }>`\n height: 100%;\n color: ${props => props.$color};\n font-family: ${props => props.$font};\n line-height: 1.5;\n`;\n\nexport const HeaderLayout = styled.div<{ $reverse: boolean }>`\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: ${props => (props.$reverse ? 'row-reverse' : 'row')};\n gap: 16px;\n height: 100%;\n padding: 12px 0;\n`;\n\nexport const HeaderInfo = styled.div<{ $alignEnd?: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: ${props => (props.$alignEnd ? 'flex-end' : 'flex-start')};\n min-width: 0;\n font-size: 12px;\n text-align: ${props => (props.$alignEnd ? 'right' : 'left')};\n`;\n\n// Ícone fica sempre na borda externa da página: infos à direita (logo left) → texto, ícone.\nexport const InfoLine = styled.span<{ $strong?: boolean; $iconAfter?: boolean }>`\n display: flex;\n flex-direction: ${props => (props.$iconAfter ? 'row-reverse' : 'row')};\n align-items: center;\n gap: 8px;\n height: 22px;\n font-weight: ${props => (props.$strong ? 600 : 400)};\n font-size: ${props => (props.$strong ? '12.5px' : '12px')};\n\n svg {\n flex-shrink: 0;\n }\n`;\n\nexport const HeaderLogo = styled.img`\n max-height: 44px;\n max-width: 180px;\n object-fit: contain;\n`;\n\nexport const FooterRoot = styled.footer<{ $color: string; $font: string }>`\n height: 100%;\n color: ${props => props.$color};\n font-family: ${props => props.$font};\n line-height: 1.5;\n`;\n\nexport const FooterLayout = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: 100%;\n padding: 12px 0;\n`;\n\nexport const FooterInfoRows = styled.div<{ $justify: string }>`\n display: flex;\n align-items: center;\n justify-content: ${props => props.$justify};\n flex-wrap: wrap;\n column-gap: 24px;\n font-size: 12px;\n`;\n\nexport const FooterItem = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 22px;\n white-space: nowrap;\n\n svg {\n flex-shrink: 0;\n }\n`;\n","import type { HeaderConfig } from '../../schema/theme';\nimport type { CompanyInfo } from './types';\nimport { fontStack } from '../../surface/fonts';\nimport { COMPANY_INFO_ICONS } from './icons';\nimport { HeaderInfo, HeaderLayout, HeaderLogo, HeaderRoot, InfoLine } from './chrome.styles';\n\n/** Ordem em que as informações da empresa aparecem no cabeçalho. */\nexport const HEADER_INFO_ORDER: Array<keyof CompanyInfo> = ['companyName', 'cnpj', 'phone', 'email', 'address'];\n\nexport type HeaderBarProps = {\n config?: Partial<HeaderConfig>;\n companyInfo?: CompanyInfo;\n logoUrl?: string;\n documentFont?: string;\n};\n\nexport function HeaderBar({ config, companyInfo = {}, logoUrl, documentFont }: HeaderBarProps) {\n if (!config?.enabled) return null;\n\n const lines = HEADER_INFO_ORDER.filter(\n key => config.info?.[key as keyof NonNullable<HeaderConfig['info']>] && companyInfo[key]\n );\n const logoLeft = config.logoPosition === 'left';\n\n return (\n <HeaderRoot className=\"dg-running-header\" $color={config.color ?? '#3F4759'} $font={fontStack(documentFont)}>\n <HeaderLayout $reverse={logoLeft}>\n <HeaderInfo $alignEnd={logoLeft}>\n {lines.map(key => (\n <InfoLine key={key} $strong={key === 'companyName'} $iconAfter={logoLeft}>\n {COMPANY_INFO_ICONS[key]}\n <span>{companyInfo[key]}</span>\n </InfoLine>\n ))}\n </HeaderInfo>\n {logoUrl ? <HeaderLogo src={logoUrl} alt=\"\" /> : null}\n </HeaderLayout>\n </HeaderRoot>\n );\n}\n","import type { FooterConfig } from '../../schema/theme';\nimport type { CompanyInfo } from './types';\nimport { fontStack } from '../../surface/fonts';\nimport { COMPANY_INFO_ICONS } from './icons';\nimport { FooterInfoRows, FooterItem, FooterLayout, FooterRoot } from './chrome.styles';\n\nexport const FOOTER_INFO_ORDER: Array<keyof CompanyInfo> = [\n 'phone',\n 'site',\n 'instagram',\n 'facebook',\n 'twitter',\n 'linkedin',\n 'email',\n 'address'\n];\n\nconst ALIGNMENT_TO_JUSTIFY: Record<NonNullable<FooterConfig['alignment']>, string> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end'\n};\n\nexport type FooterBarProps = {\n config?: Partial<FooterConfig>;\n companyInfo?: CompanyInfo;\n documentFont?: string;\n};\n\nexport function FooterBar({ config, companyInfo = {}, documentFont }: FooterBarProps) {\n const showBand = Boolean(config?.enabled);\n const showPageNumber = Boolean(config?.pageNumber);\n if (!showBand && !showPageNumber) return null;\n\n const lines = showBand\n ? FOOTER_INFO_ORDER.filter(\n key => config?.info?.[key as keyof NonNullable<FooterConfig['info']>] && companyInfo[key]\n )\n : [];\n const justify = ALIGNMENT_TO_JUSTIFY[config?.alignment ?? 'center'];\n\n return (\n <FooterRoot className=\"dg-running-footer\" $color={config?.color ?? '#3F4759'} $font={fontStack(documentFont)}>\n {showPageNumber ? <span className=\"dg-page-number\" /> : null}\n {showBand ? (\n <FooterLayout>\n {lines.length ? (\n <FooterInfoRows $justify={justify}>\n {lines.map(key => (\n <FooterItem key={key}>\n {COMPANY_INFO_ICONS[key]}\n <span>{companyInfo[key]}</span>\n </FooterItem>\n ))}\n </FooterInfoRows>\n ) : null}\n </FooterLayout>\n ) : null}\n </FooterRoot>\n );\n}\n","/**\n * Protocolo `postMessage` entre o documento gerado (iframe) e o host.\n * Módulo separado do `previewBootstrap` de propósito: o host precisa destas\n * constantes no browser, e o bootstrap só existe no caminho de impressão.\n */\nexport const DG_MESSAGE_SOURCE = 'document-generator';\nexport const DG_READY = 'dg-ready';\nexport const DG_ERROR = 'dg-error';\n"]}
@@ -1,4 +1,4 @@
1
- import { extractBindingKeys } from './chunk-M2TPAU2F.js';
1
+ import { extractBindingKeys } from './chunk-SOIYSSU3.js';
2
2
 
3
3
  // src/variables/format.ts
4
4
  var brl = new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL" });
@@ -86,5 +86,5 @@ async function resolveDocumentVariables(node, catalog, resolver, ctx) {
86
86
  }
87
87
 
88
88
  export { formatResolvedValues, formatValue, resolveDocumentVariables };
89
- //# sourceMappingURL=chunk-2EBYURIX.js.map
90
- //# sourceMappingURL=chunk-2EBYURIX.js.map
89
+ //# sourceMappingURL=chunk-CZB7F2LA.js.map
90
+ //# sourceMappingURL=chunk-CZB7F2LA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/variables/format.ts","../src/variables/resolve.ts"],"names":[],"mappings":"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","file":"chunk-2EBYURIX.js","sourcesContent":["import type { VariableType } from './types';\n\nconst brl = new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' });\nconst decimal = new Intl.NumberFormat('pt-BR');\nconst date = new Intl.DateTimeFormat('pt-BR');\n\nfunction toNumber(value: unknown): number | null {\n const n = typeof value === 'string' ? Number(value) : (value as number);\n return typeof n === 'number' && Number.isFinite(n) ? n : null;\n}\n\n// `YYYY-MM-DD` e o timestamp de meia-noite UTC que o Sequelize serializa para colunas DATE.\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T00:00(?::00(?:\\.000)?)?Z)?$/;\n\nconst DIGITS = /\\D/g;\nconst CPF = /^(\\d{3})(\\d{3})(\\d{3})(\\d{2})$/;\nconst CNPJ = /^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/;\nconst PHONE = /^(?:55)?(\\d{2})(\\d{4,5})(\\d{4})$/;\nconst ZIPCODE = /^(\\d{5})(\\d{3})$/;\n\n// Só-data é parseada como data LOCAL — new Date(string) seria UTC e voltaria um dia (docs/variables.md).\nfunction toDate(raw: unknown): Date {\n if (raw instanceof Date) return raw;\n const match = DATE_ONLY.exec(String(raw));\n if (match) return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n return new Date(raw as string);\n}\n\n// Documento e telefone chegam crus do banco, com ou sem máscara. Sem match, devolve o\n// valor original — melhor exibir o cru do que esconder o dado.\nfunction toDocument(raw: string): string {\n const digits = raw.replace(DIGITS, '');\n const cpf = CPF.exec(digits);\n if (cpf) return `${cpf[1]}.${cpf[2]}.${cpf[3]}-${cpf[4]}`;\n const cnpj = CNPJ.exec(digits);\n if (cnpj) return `${cnpj[1]}.${cnpj[2]}.${cnpj[3]}/${cnpj[4]}-${cnpj[5]}`;\n return raw;\n}\n\n// DDI 55 é descartado na máscara: telefone gravado com e sem DDI aparece igual.\nfunction toPhone(raw: string): string {\n const match = PHONE.exec(raw.replace(DIGITS, ''));\n return match ? `(${match[1]}) ${match[2]}-${match[3]}` : raw;\n}\n\nfunction toZipcode(raw: string): string {\n const match = ZIPCODE.exec(raw.replace(DIGITS, ''));\n return match ? `${match[1]}-${match[2]}` : raw;\n}\n\n/** Format a raw resolved value by its catalog type, pt-BR. preview == PDF. */\nexport function formatValue(type: VariableType, raw: unknown): string {\n if (raw === null || raw === undefined) return '';\n\n switch (type) {\n case 'currency': {\n const n = toNumber(raw);\n return n === null ? '' : brl.format(n);\n }\n case 'number': {\n const n = toNumber(raw);\n return n === null ? '' : decimal.format(n);\n }\n case 'date': {\n const d = toDate(raw);\n return Number.isNaN(d.getTime()) ? '' : date.format(d);\n }\n case 'document':\n return toDocument(String(raw));\n case 'phone':\n return toPhone(String(raw));\n case 'zipcode':\n return toZipcode(String(raw));\n case 'boolean':\n return raw ? 'Sim' : 'Não';\n case 'string':\n default:\n return String(raw);\n }\n}\n","import { extractBindingKeys } from './bindings';\nimport { formatValue } from './format';\nimport type { ResolvedVariables, VariableContext, VariableDef, VariableResolver } from './types';\n\n/**\n * Formata valores crus por tipo do catálogo. Keys sem valor ficam FORA do mapa\n * (`undefined` = \"não resolvida\" — ver docs/variables.md).\n */\nexport function formatResolvedValues(defs: VariableDef[], raw: Record<string, unknown>): ResolvedVariables {\n const resolved: ResolvedVariables = {};\n defs.forEach(def => {\n const value = def.key in raw ? raw[def.key] : def.default;\n if (value === undefined || value === null) return;\n const formatted = formatValue(def.type, value);\n if (formatted !== '') resolved[def.key] = formatted;\n });\n return resolved;\n}\n\n/** Resolve os bindings de `node` em strings pt-BR formatadas (preview == PDF). */\nexport async function resolveDocumentVariables(\n node: unknown,\n catalog: VariableDef[],\n resolver: VariableResolver,\n ctx: VariableContext\n): Promise<ResolvedVariables> {\n const keys = extractBindingKeys(node);\n if (keys.length === 0) return {};\n\n const raw = await resolver(keys, ctx);\n const byKey = new Map(catalog.map(def => [def.key, def]));\n const defs = keys.map(key => byKey.get(key) ?? { key, label: key, type: 'string' as const, model: 'outros' });\n return formatResolvedValues(defs, raw);\n}\n"]}
1
+ {"version":3,"sources":["../src/variables/format.ts","../src/variables/resolve.ts"],"names":[],"mappings":"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","file":"chunk-CZB7F2LA.js","sourcesContent":["import type { VariableType } from './types';\n\nconst brl = new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' });\nconst decimal = new Intl.NumberFormat('pt-BR');\nconst date = new Intl.DateTimeFormat('pt-BR');\n\nfunction toNumber(value: unknown): number | null {\n const n = typeof value === 'string' ? Number(value) : (value as number);\n return typeof n === 'number' && Number.isFinite(n) ? n : null;\n}\n\n// `YYYY-MM-DD` e o timestamp de meia-noite UTC que o Sequelize serializa para colunas DATE.\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})(?:T00:00(?::00(?:\\.000)?)?Z)?$/;\n\nconst DIGITS = /\\D/g;\nconst CPF = /^(\\d{3})(\\d{3})(\\d{3})(\\d{2})$/;\nconst CNPJ = /^(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})$/;\nconst PHONE = /^(?:55)?(\\d{2})(\\d{4,5})(\\d{4})$/;\nconst ZIPCODE = /^(\\d{5})(\\d{3})$/;\n\n// Só-data é parseada como data LOCAL — new Date(string) seria UTC e voltaria um dia (docs/variables.md).\nfunction toDate(raw: unknown): Date {\n if (raw instanceof Date) return raw;\n const match = DATE_ONLY.exec(String(raw));\n if (match) return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n return new Date(raw as string);\n}\n\n// Documento e telefone chegam crus do banco, com ou sem máscara. Sem match, devolve o\n// valor original — melhor exibir o cru do que esconder o dado.\nfunction toDocument(raw: string): string {\n const digits = raw.replace(DIGITS, '');\n const cpf = CPF.exec(digits);\n if (cpf) return `${cpf[1]}.${cpf[2]}.${cpf[3]}-${cpf[4]}`;\n const cnpj = CNPJ.exec(digits);\n if (cnpj) return `${cnpj[1]}.${cnpj[2]}.${cnpj[3]}/${cnpj[4]}-${cnpj[5]}`;\n return raw;\n}\n\n// DDI 55 é descartado na máscara: telefone gravado com e sem DDI aparece igual.\nfunction toPhone(raw: string): string {\n const match = PHONE.exec(raw.replace(DIGITS, ''));\n return match ? `(${match[1]}) ${match[2]}-${match[3]}` : raw;\n}\n\nfunction toZipcode(raw: string): string {\n const match = ZIPCODE.exec(raw.replace(DIGITS, ''));\n return match ? `${match[1]}-${match[2]}` : raw;\n}\n\n/** Format a raw resolved value by its catalog type, pt-BR. preview == PDF. */\nexport function formatValue(type: VariableType, raw: unknown): string {\n if (raw === null || raw === undefined) return '';\n\n switch (type) {\n case 'currency': {\n const n = toNumber(raw);\n return n === null ? '' : brl.format(n);\n }\n case 'number': {\n const n = toNumber(raw);\n return n === null ? '' : decimal.format(n);\n }\n case 'date': {\n const d = toDate(raw);\n return Number.isNaN(d.getTime()) ? '' : date.format(d);\n }\n case 'document':\n return toDocument(String(raw));\n case 'phone':\n return toPhone(String(raw));\n case 'zipcode':\n return toZipcode(String(raw));\n case 'boolean':\n return raw ? 'Sim' : 'Não';\n case 'string':\n default:\n return String(raw);\n }\n}\n","import { extractBindingKeys } from './bindings';\nimport { formatValue } from './format';\nimport type { ResolvedVariables, VariableContext, VariableDef, VariableResolver } from './types';\n\n/**\n * Formata valores crus por tipo do catálogo. Keys sem valor ficam FORA do mapa\n * (`undefined` = \"não resolvida\" — ver docs/variables.md).\n */\nexport function formatResolvedValues(defs: VariableDef[], raw: Record<string, unknown>): ResolvedVariables {\n const resolved: ResolvedVariables = {};\n defs.forEach(def => {\n const value = def.key in raw ? raw[def.key] : def.default;\n if (value === undefined || value === null) return;\n const formatted = formatValue(def.type, value);\n if (formatted !== '') resolved[def.key] = formatted;\n });\n return resolved;\n}\n\n/** Resolve os bindings de `node` em strings pt-BR formatadas (preview == PDF). */\nexport async function resolveDocumentVariables(\n node: unknown,\n catalog: VariableDef[],\n resolver: VariableResolver,\n ctx: VariableContext\n): Promise<ResolvedVariables> {\n const keys = extractBindingKeys(node);\n if (keys.length === 0) return {};\n\n const raw = await resolver(keys, ctx);\n const byKey = new Map(catalog.map(def => [def.key, def]));\n const defs = keys.map(key => byKey.get(key) ?? { key, label: key, type: 'string' as const, model: 'outros' });\n return formatResolvedValues(defs, raw);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkIRFFN74K_cjs = require('./chunk-IRFFN74K.cjs');
3
+ var chunkSP5LCPDG_cjs = require('./chunk-SP5LCPDG.cjs');
4
4
  var zod = require('zod');
5
5
  var react = require('react');
6
6
  var styled = require('styled-components');
@@ -31,9 +31,11 @@ var variableDefSchema = zod.z.object({
31
31
  var variableCatalogSchema = zod.z.object({
32
32
  catalog: zod.z.array(variableDefSchema).default([])
33
33
  }).strict();
34
+ var VARIABLE_MENU_WIDTH = 260;
35
+ var VARIABLE_MENU_MAX_HEIGHT = 320;
34
36
  var Panel = styled__default.default.div`
35
- width: 260px;
36
- max-height: 320px;
37
+ width: ${VARIABLE_MENU_WIDTH}px;
38
+ max-height: ${(props) => props.$maxHeight}px;
37
39
  overflow: auto;
38
40
  background: #fff;
39
41
  border: 1px solid #e5e7eb;
@@ -114,11 +116,11 @@ function groupBy(defs) {
114
116
  });
115
117
  return [...map.entries()];
116
118
  }
117
- function VariableMenu({ accept, model, onPick }) {
118
- const catalog = chunkIRFFN74K_cjs.useCatalog();
119
- const translator = chunkIRFFN74K_cjs.useTranslator();
120
- const preview = chunkIRFFN74K_cjs.useResolvedVariables();
121
- const ensureResolved = chunkIRFFN74K_cjs.useEnsureResolved();
119
+ function VariableMenu({ accept, model, onPick, maxHeight = VARIABLE_MENU_MAX_HEIGHT }) {
120
+ const catalog = chunkSP5LCPDG_cjs.useCatalog();
121
+ const translator = chunkSP5LCPDG_cjs.useTranslator();
122
+ const preview = chunkSP5LCPDG_cjs.useResolvedVariables();
123
+ const ensureResolved = chunkSP5LCPDG_cjs.useEnsureResolved();
122
124
  const [query, setQuery] = react.useState("");
123
125
  const [loading, setLoading] = react.useState(true);
124
126
  const searchRef = react.useRef(null);
@@ -143,7 +145,7 @@ function VariableMenu({ accept, model, onPick }) {
143
145
  (def) => (!accept || accept.includes(def.type)) && (!model || def.model === model) && (!q || matchesQuery(def))
144
146
  );
145
147
  }, [catalog, accept, model, query]);
146
- return /* @__PURE__ */ jsxRuntime.jsxs(Panel, { children: [
148
+ return /* @__PURE__ */ jsxRuntime.jsxs(Panel, { $maxHeight: maxHeight, children: [
147
149
  /* @__PURE__ */ jsxRuntime.jsx(Search, { ref: searchRef, placeholder: "Inserir vari\xE1vel", value: query, onChange: (e) => setQuery(e.target.value) }),
148
150
  options.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(Empty, { children: "Nenhuma vari\xE1vel" }),
149
151
  groupBy(options).map(([groupName, defs]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -160,9 +162,33 @@ function VariableMenu({ accept, model, onPick }) {
160
162
  ] });
161
163
  }
162
164
 
165
+ // src/variables/menuPlacement.ts
166
+ var GAP = 6;
167
+ var MARGIN = 8;
168
+ var MIN_HEIGHT = 160;
169
+ var clamp = (value, min, max) => Math.min(Math.max(value, min), Math.max(min, max));
170
+ var placeVariableMenu = (anchor, viewport, options = {}) => {
171
+ const { width = VARIABLE_MENU_WIDTH, maxHeight = VARIABLE_MENU_MAX_HEIGHT, minHeight = MIN_HEIGHT } = options;
172
+ const spaceBelow = viewport.height - anchor.bottom - GAP - MARGIN;
173
+ const spaceAbove = anchor.top - GAP - MARGIN;
174
+ const openUp = spaceBelow < Math.min(maxHeight, minHeight) && spaceAbove > spaceBelow;
175
+ const available = openUp ? spaceAbove : spaceBelow;
176
+ const height = clamp(Math.min(maxHeight, available), Math.min(minHeight, maxHeight), maxHeight);
177
+ const top = openUp ? anchor.top - GAP - height : anchor.bottom + GAP;
178
+ return {
179
+ top: clamp(top, MARGIN, viewport.height - height - MARGIN),
180
+ left: clamp(anchor.left, MARGIN, viewport.width - width - MARGIN),
181
+ maxHeight: height,
182
+ placement: openUp ? "top" : "bottom"
183
+ };
184
+ };
185
+
186
+ exports.VARIABLE_MENU_MAX_HEIGHT = VARIABLE_MENU_MAX_HEIGHT;
187
+ exports.VARIABLE_MENU_WIDTH = VARIABLE_MENU_WIDTH;
163
188
  exports.VariableMenu = VariableMenu;
189
+ exports.placeVariableMenu = placeVariableMenu;
164
190
  exports.variableCatalogSchema = variableCatalogSchema;
165
191
  exports.variableDefSchema = variableDefSchema;
166
192
  exports.variableTypeSchema = variableTypeSchema;
167
- //# sourceMappingURL=chunk-AQ5FAAP6.cjs.map
168
- //# sourceMappingURL=chunk-AQ5FAAP6.cjs.map
193
+ //# sourceMappingURL=chunk-GR76U6FP.cjs.map
194
+ //# sourceMappingURL=chunk-GR76U6FP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/variables/schema.ts","../src/variables/VariableMenu.tsx","../src/variables/menuPlacement.ts"],"names":["z","styled","useCatalog","useTranslator","useResolvedVariables","useEnsureResolved","useState","useRef","useEffect","useMemo","jsxs","jsx"],"mappings":"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","file":"chunk-GR76U6FP.cjs","sourcesContent":["import { z } from 'zod';\nimport type { VariableCatalog, VariableDef, VariableType } from './types';\n\ntype Schema<T> = z.ZodType<T, z.ZodTypeDef, unknown>;\n\nexport const variableTypeSchema: Schema<VariableType> = z.enum([\n 'string',\n 'number',\n 'date',\n 'currency',\n 'boolean',\n 'document',\n 'phone',\n 'zipcode'\n]);\n\nexport const variableDefSchema: Schema<VariableDef> = z\n .object({\n key: z.string().min(1),\n label: z.string().min(1),\n fullLabel: z.string().optional(),\n type: variableTypeSchema,\n model: z.string().min(1),\n default: z.unknown().optional()\n })\n .strict();\n\nexport const variableCatalogSchema: Schema<VariableCatalog> = z\n .object({\n catalog: z.array(variableDefSchema).default([])\n })\n .strict();\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { useCatalog, useTranslator } from './catalogContext';\nimport { useEnsureResolved, useResolvedVariables } from './resolvedContext';\nimport type { VariableDef, VariableType } from './types';\n\ntype Props = {\n accept?: VariableType[];\n model?: string;\n onPick: (def: VariableDef) => void;\n /** Altura máxima do painel em px. O host reduz quando não há espaço na viewport. */\n maxHeight?: number;\n};\n\nexport const VARIABLE_MENU_WIDTH = 260;\nexport const VARIABLE_MENU_MAX_HEIGHT = 320;\n\nconst Panel = styled.div<{ $maxHeight: number }>`\n width: ${VARIABLE_MENU_WIDTH}px;\n max-height: ${props => props.$maxHeight}px;\n overflow: auto;\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n box-shadow: 0 12px 32px rgba(17, 24, 39, 0.16);\n padding: 6px;\n`;\n\nconst Search = styled.input`\n width: 100%;\n padding: 9px 10px;\n margin-bottom: 4px;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 13px;\n color: #111827;\n\n &::placeholder {\n color: #9aa3af;\n }\n &:focus {\n outline: none;\n border-color: #1a56db;\n }\n`;\n\nconst GroupLabel = styled.div`\n padding: 10px 10px 4px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: #9aa3af;\n`;\n\nconst Option = styled.button`\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 100%;\n padding: 7px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n cursor: pointer;\n text-align: left;\n\n &:hover {\n background: #f3f6fb;\n }\n`;\n\nconst OptionLabel = styled.span`\n color: #1f2937;\n font-size: 13px;\n font-weight: 500;\n`;\n\nconst OptionValue = styled.span`\n color: #9aa3af;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst Missing = styled.span`\n color: #e02424;\n font-size: 12px;\n font-style: italic;\n`;\n\nconst Empty = styled.div`\n padding: 14px 10px;\n color: #9aa3af;\n text-align: center;\n font-size: 13px;\n`;\n\nfunction groupBy(defs: VariableDef[]): [string, VariableDef[]][] {\n const map = new Map<string, VariableDef[]>();\n defs.forEach(def => {\n const list = map.get(def.model ?? 'outros') ?? [];\n list.push(def);\n map.set(def.model ?? 'outros', list);\n });\n return [...map.entries()];\n}\n\nexport function VariableMenu({ accept, model, onPick, maxHeight = VARIABLE_MENU_MAX_HEIGHT }: Props) {\n const catalog = useCatalog();\n const translator = useTranslator();\n const preview = useResolvedVariables();\n const ensureResolved = useEnsureResolved();\n const [query, setQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const searchRef = useRef<HTMLInputElement>(null);\n const catalogRef = useRef(catalog);\n catalogRef.current = catalog;\n\n useEffect(() => {\n searchRef.current?.focus();\n }, []);\n\n useEffect(() => {\n let active = true;\n ensureResolved(catalogRef.current.map(def => def.key)).finally(() => {\n if (active) setLoading(false);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const options = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matchesQuery = (def: VariableDef) =>\n def.label.toLowerCase().includes(q) || Boolean(def.fullLabel?.toLowerCase().includes(q));\n return catalog.filter(\n def => (!accept || accept.includes(def.type)) && (!model || def.model === model) && (!q || matchesQuery(def))\n );\n }, [catalog, accept, model, query]);\n\n return (\n <Panel $maxHeight={maxHeight}>\n <Search ref={searchRef} placeholder=\"Inserir variável\" value={query} onChange={e => setQuery(e.target.value)} />\n {options.length === 0 && <Empty>Nenhuma variável</Empty>}\n {groupBy(options).map(([groupName, defs]) => (\n <div key={groupName}>\n <GroupLabel>{translator[groupName] ?? groupName}</GroupLabel>\n {defs.map(def => {\n const value = preview[def.key];\n return (\n <Option key={def.key} type=\"button\" onMouseDown={e => e.preventDefault()} onClick={() => onPick(def)}>\n <OptionLabel>{def.label}</OptionLabel>\n {value ? <OptionValue>{value}</OptionValue> : null}\n {!value && !loading ? <Missing>Dado não informado</Missing> : null}\n </Option>\n );\n })}\n </div>\n ))}\n </Panel>\n );\n}\n","import { VARIABLE_MENU_MAX_HEIGHT, VARIABLE_MENU_WIDTH } from './VariableMenu';\n\n/** Retângulo da âncora em coordenadas de viewport (o que `getBoundingClientRect` devolve). */\nexport type MenuAnchor = { top: number; bottom: number; left: number };\n\nexport type MenuViewport = { width: number; height: number };\n\nexport type MenuPlacement = { top: number; left: number; maxHeight: number; placement: 'top' | 'bottom' };\n\nconst GAP = 6;\nconst MARGIN = 8;\nconst MIN_HEIGHT = 160;\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), Math.max(min, max));\n\n/**\n * Posiciona o menu de variáveis (`position: fixed`) ancorado no cursor: abre para baixo quando cabe,\n * inverte para cima quando não cabe, e encolhe `maxHeight` ao espaço disponível.\n * Sem isso o menu aberto no fim da página fica cortado pela viewport — ver docs/variables.md.\n */\nexport const placeVariableMenu = (\n anchor: MenuAnchor,\n viewport: MenuViewport,\n options: { width?: number; maxHeight?: number; minHeight?: number } = {}\n): MenuPlacement => {\n const { width = VARIABLE_MENU_WIDTH, maxHeight = VARIABLE_MENU_MAX_HEIGHT, minHeight = MIN_HEIGHT } = options;\n\n const spaceBelow = viewport.height - anchor.bottom - GAP - MARGIN;\n const spaceAbove = anchor.top - GAP - MARGIN;\n const openUp = spaceBelow < Math.min(maxHeight, minHeight) && spaceAbove > spaceBelow;\n\n const available = openUp ? spaceAbove : spaceBelow;\n const height = clamp(Math.min(maxHeight, available), Math.min(minHeight, maxHeight), maxHeight);\n const top = openUp ? anchor.top - GAP - height : anchor.bottom + GAP;\n\n return {\n top: clamp(top, MARGIN, viewport.height - height - MARGIN),\n left: clamp(anchor.left, MARGIN, viewport.width - width - MARGIN),\n maxHeight: height,\n placement: openUp ? 'top' : 'bottom'\n };\n};\n"]}
@@ -1,15 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunkIRFFN74K_cjs = require('./chunk-IRFFN74K.cjs');
3
+ var chunkSP5LCPDG_cjs = require('./chunk-SP5LCPDG.cjs');
4
4
 
5
5
  // src/variables/variableHtml.ts
6
6
  var NOT_INFORMED_LABEL = "N\xE3o informado";
7
7
  var CHIP_CLASS = "dg-var";
8
8
  var INVALID_CHIP_CLASS = "dg-var--invalid";
9
+ var EMPTY_CHIP_CLASS = "dg-var--empty";
9
10
  var INVALID_ICON = "\u26A0 ";
10
11
  var VAR_SPAN_REGEX = /<span([^>]*\bdata-var-key="([^"]+)"[^>]*)>([\s\S]*?)<\/span>/g;
11
12
  var buildVariableChipHtml = (def) => `<span class="${CHIP_CLASS}" data-var-key="${def.key}" contenteditable="false">${def.fullLabel || def.label || def.key}</span>`;
12
13
  var stripAttr = (attrs, name) => attrs.replace(new RegExp(`\\s*${name}="[^"]*"`, "gi"), "");
14
+ var removeClass = (attrs, className) => {
15
+ const current = attrs.match(/class="([^"]*)"/);
16
+ if (!current) return attrs;
17
+ const classes = current[1].split(/\s+/).filter(Boolean);
18
+ if (!classes.includes(className)) return attrs;
19
+ const kept = classes.filter((name) => name !== className);
20
+ return kept.length ? attrs.replace(/class="[^"]*"/, `class="${kept.join(" ")}"`) : stripAttr(attrs, "class");
21
+ };
13
22
  var ensureClass = (attrs, className) => {
14
23
  const current = attrs.match(/class="([^"]*)"/);
15
24
  if (!current) return `${attrs} class="${className}"`;
@@ -27,7 +36,10 @@ var resolveWithRegex = (html, resolved, keepChip, knownKeys, knownDefs, unresolv
27
36
  if (raw === void 0 && unresolved === "label")
28
37
  return `<span${ensureClass(cleanAttrs, CHIP_CLASS)}>${label}</span>`;
29
38
  const value = raw !== void 0 ? String(raw) : NOT_INFORMED_LABEL;
30
- if (keepChip) return `<span${cleanAttrs}>${value}</span>`;
39
+ if (keepChip) {
40
+ const withBadge = raw === void 0 ? ensureClass(cleanAttrs, EMPTY_CHIP_CLASS) : removeClass(cleanAttrs, EMPTY_CHIP_CLASS);
41
+ return `<span${withBadge}>${value}</span>`;
42
+ }
31
43
  const markerAttrs = stripAttr(cleanAttrs, "class");
32
44
  const def = knownDefs?.get(key);
33
45
  const withType = def?.type ? `${markerAttrs} data-var-type="${def.type}"` : markerAttrs;
@@ -51,14 +63,15 @@ var markInvalid = (doc, chip) => {
51
63
  }
52
64
  };
53
65
  var collectVariableIssues = (data, catalog = [], resolved = {}) => {
54
- const keys = chunkIRFFN74K_cjs.extractBindingKeys(data);
66
+ const keys = chunkSP5LCPDG_cjs.extractBindingKeys(data);
67
+ const chipLabels = chunkSP5LCPDG_cjs.extractBindingLabels(data);
55
68
  const byKey = new Map(catalog.map((item) => [item.key, item]));
56
69
  const unknown = [];
57
70
  const unresolved = [];
58
71
  keys.forEach((key) => {
59
72
  const item = byKey.get(key);
60
- if (!item) unknown.push(key);
61
- else if (resolved[key] === void 0) unresolved.push(item.label || key);
73
+ if (!item) unknown.push(chipLabels[key] || key);
74
+ else if (resolved[key] === void 0) unresolved.push(item.fullLabel || item.label || chipLabels[key] || key);
62
75
  });
63
76
  return { unknown, unresolved, hasIssues: unknown.length > 0 || unresolved.length > 0 };
64
77
  };
@@ -83,6 +96,7 @@ var resolveVariableHtml = (html, resolved = {}, { keepChip = true, catalog, unre
83
96
  return;
84
97
  }
85
98
  setChipText(doc, chip, value !== void 0 ? String(value) : NOT_INFORMED_LABEL);
99
+ chip.classList.toggle(EMPTY_CHIP_CLASS, keepChip && value === void 0);
86
100
  if (!keepChip) {
87
101
  chip.removeAttribute("class");
88
102
  const def = knownDefs?.get(key);
@@ -93,10 +107,11 @@ var resolveVariableHtml = (html, resolved = {}, { keepChip = true, catalog, unre
93
107
  };
94
108
 
95
109
  exports.CHIP_CLASS = CHIP_CLASS;
110
+ exports.EMPTY_CHIP_CLASS = EMPTY_CHIP_CLASS;
96
111
  exports.INVALID_CHIP_CLASS = INVALID_CHIP_CLASS;
97
112
  exports.NOT_INFORMED_LABEL = NOT_INFORMED_LABEL;
98
113
  exports.buildVariableChipHtml = buildVariableChipHtml;
99
114
  exports.collectVariableIssues = collectVariableIssues;
100
115
  exports.resolveVariableHtml = resolveVariableHtml;
101
- //# sourceMappingURL=chunk-KUB3TYG2.cjs.map
102
- //# sourceMappingURL=chunk-KUB3TYG2.cjs.map
116
+ //# sourceMappingURL=chunk-I22MGPXO.cjs.map
117
+ //# sourceMappingURL=chunk-I22MGPXO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/variables/variableHtml.ts"],"names":["extractBindingKeys","extractBindingLabels"],"mappings":";;;;;AAGO,IAAM,kBAAA,GAAqB;AAC3B,IAAM,UAAA,GAAa;AACnB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,gBAAA,GAAmB;AAChC,IAAM,YAAA,GAAe,SAAA;AAErB,IAAM,cAAA,GAAiB,+DAAA;AAGhB,IAAM,qBAAA,GAAwB,CAAC,GAAA,KACpC,CAAA,aAAA,EAAgB,UAAU,CAAA,gBAAA,EAAmB,GAAA,CAAI,GAAG,CAAA,0BAAA,EAClD,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,KAAA,IAAS,IAAI,GACpC,CAAA,OAAA;AAIF,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,IAAA,KAAyB,KAAA,CAAM,OAAA,CAAQ,IAAI,MAAA,CAAO,CAAA,IAAA,EAAO,IAAI,CAAA,QAAA,CAAA,EAAY,IAAI,GAAG,EAAE,CAAA;AAEpH,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,SAAA,KAA8B;AAChE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,iBAAiB,CAAA;AAC7C,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,EAAA,MAAM,OAAA,GAAU,QAAQ,CAAC,CAAA,CAAE,MAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,SAAS,GAAG,OAAO,KAAA;AACzC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,CAAA,IAAA,KAAQ,SAAS,SAAS,CAAA;AACtD,EAAA,OAAO,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,iBAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA,GAAI,SAAA,CAAU,OAAO,OAAO,CAAA;AAC7G,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,SAAA,KAA8B;AAChE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,iBAAiB,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,CAAA,EAAG,KAAK,WAAW,SAAS,CAAA,CAAA,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,QAAQ,CAAC,CAAA,CAAE,MAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,KAAA;AACxC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,eAAA,EAAiB,CAAA,OAAA,EAAU,CAAC,GAAG,OAAA,EAAS,SAAS,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AACtF,CAAA;AAGA,IAAM,gBAAA,GAAmB,CACvB,IAAA,EACA,QAAA,EACA,UACA,SAAA,EACA,SAAA,EACA,UAAA,KAEA,IAAA,CAAK,QAAQ,cAAA,EAAgB,CAAC,MAAA,EAAQ,KAAA,EAAe,KAAa,KAAA,KAAkB;AAClF,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,EAAO,iBAAiB,CAAA;AAErD,EAAA,IAAI,aAAa,UAAA,KAAe,OAAA,IAAW,CAAC,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,YAAY,IAAI,KAAA,GAAQ,CAAA,EAAG,YAAY,CAAA,EAAG,KAAK,CAAA,CAAA;AAC7E,IAAA,OAAO,QAAQ,WAAA,CAAY,UAAA,EAAY,kBAAkB,CAAC,IAAI,IAAI,CAAA,OAAA,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,GAAA,GAAM,SAAS,GAAG,CAAA;AACxB,EAAA,IAAI,GAAA,KAAQ,UAAa,UAAA,KAAe,OAAA;AACtC,IAAA,OAAO,QAAQ,WAAA,CAAY,UAAA,EAAY,UAAU,CAAC,IAAI,KAAK,CAAA,OAAA,CAAA;AAE7D,EAAA,MAAM,KAAA,GAAQ,GAAA,KAAQ,MAAA,GAAY,MAAA,CAAO,GAAG,CAAA,GAAI,kBAAA;AAChD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,SAAA,GACJ,QAAQ,MAAA,GAAY,WAAA,CAAY,YAAY,gBAAgB,CAAA,GAAI,WAAA,CAAY,UAAA,EAAY,gBAAgB,CAAA;AAC1G,IAAA,OAAO,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA,OAAA,CAAA;AAAA,EACnC;AACA,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,UAAA,EAAY,OAAO,CAAA;AACjD,EAAA,MAAM,GAAA,GAAM,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,KAAK,IAAA,GAAO,CAAA,EAAG,WAAW,CAAA,gBAAA,EAAmB,GAAA,CAAI,IAAI,CAAA,CAAA,CAAA,GAAM,WAAA;AAC5E,EAAA,OAAO,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,OAAA,CAAA;AAClC,CAAC,CAAA;AAEH,IAAM,WAAA,GAAc,CAAC,GAAA,EAAe,IAAA,EAAe,KAAA,KAAwB;AACzE,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AAC9D,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,OAAO,OAAO,QAAA,EAAS,EAAG,KAAA,CAAM,IAAA,CAAK,OAAO,WAAW,CAAA;AACvD,EAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,cAAA,CAAe,KAAK,CAAC,CAAA;AAC1C,IAAA;AAAA,EACF;AACA,EAAA,KAAA,CAAM,CAAC,EAAE,SAAA,GAAY,KAAA;AACrB,EAAA,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAQ,IAAA,CAAK,UAAA,EAAY,WAAA,CAAY,IAAI,CAAC,CAAA;AACnE,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,GAAA,EAAe,IAAA,KAAwB;AAC1D,EAAA,IAAA,CAAK,SAAA,CAAU,IAAI,kBAAkB,CAAA;AACrC,EAAA,IAAI,EAAE,IAAA,CAAK,WAAA,IAAe,EAAA,EAAI,UAAA,CAAW,YAAY,CAAA,EAAG;AACtD,IAAA,IAAA,CAAK,aAAa,GAAA,CAAI,cAAA,CAAe,YAAY,CAAA,EAAG,KAAK,UAAU,CAAA;AAAA,EACrE;AACF,CAAA;AAGO,IAAM,qBAAA,GAAwB,CACnC,IAAA,EACA,OAAA,GAAyB,EAAC,EAC1B,QAAA,GAA8B,EAAC,KACqC;AACpE,EAAA,MAAM,IAAA,GAAOA,qCAAmB,IAAI,CAAA;AACpC,EAAA,MAAM,UAAA,GAAaC,uCAAqB,IAAI,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,KAAQ,CAAC,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA;AAC3D,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,EAAM,OAAA,CAAQ,KAAK,UAAA,CAAW,GAAG,KAAK,GAAG,CAAA;AAAA,SAAA,IACrC,QAAA,CAAS,GAAG,CAAA,KAAM,MAAA,EAAW,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,KAAA,IAAS,UAAA,CAAW,GAAG,KAAK,GAAG,CAAA;AAAA,EAC9G,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,SAAS,UAAA,EAAY,SAAA,EAAW,QAAQ,MAAA,GAAS,CAAA,IAAK,UAAA,CAAW,MAAA,GAAS,CAAA,EAAE;AACvF;AASO,IAAM,mBAAA,GAAsB,CACjC,IAAA,EACA,QAAA,GAA8B,EAAC,EAC/B,EAAE,QAAA,GAAW,IAAA,EAAM,OAAA,EAAS,UAAA,GAAa,aAAA,EAAc,GAAoB,EAAC,KACjE;AACX,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,QAAQ,cAAc,CAAA,GAAI,GAAG,OAAO,IAAA;AACtD,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,IAAA,KAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI,IAAA;AACrE,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,KAAQ,CAAC,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AAC7E,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA;AACvB,IAAA,OAAO,iBAAiB,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,WAAW,UAAU,CAAA;AAEpF,EAAA,MAAM,MAAM,IAAI,SAAA,EAAU,CAAE,eAAA,CAAgB,MAAM,WAAW,CAAA;AAE7D,EAAA,GAAA,CAAI,IAAA,CAAK,gBAAA,CAAiB,gBAAgB,CAAA,CAAE,QAAQ,CAAA,IAAA,KAAQ;AAC1D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,IAAK,EAAA;AACjD,IAAA,MAAM,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,aAAa,UAAA,KAAe,OAAA,GAAU,CAAC,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAC5E,IAAA,IAAA,CAAK,gBAAgB,iBAAiB,CAAA;AAEtC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,UAAA,KAAe,OAAA,EAAS;AACjD,MAAA,IAAA,CAAK,SAAA,CAAU,IAAI,UAAU,CAAA;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,WAAA,CAAY,KAAK,IAAA,EAAM,KAAA,KAAU,SAAY,MAAA,CAAO,KAAK,IAAI,kBAAkB,CAAA;AAC/E,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,gBAAA,EAAkB,QAAA,IAAY,UAAU,MAAS,CAAA;AACvE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,SAAA,EAAW,GAAA,CAAI,GAAG,CAAA;AAC9B,MAAA,IAAI,KAAK,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAI,IAAI,CAAA;AAAA,IAC5D;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,IAAI,IAAA,CAAK,SAAA;AAClB","file":"chunk-I22MGPXO.cjs","sourcesContent":["import { extractBindingKeys, extractBindingLabels } from './bindings';\nimport type { ResolvedVariables, UnresolvedDisplay, VariableDef } from './types';\n\nexport const NOT_INFORMED_LABEL = 'Não informado';\nexport const CHIP_CLASS = 'dg-var';\nexport const INVALID_CHIP_CLASS = 'dg-var--invalid';\nexport const EMPTY_CHIP_CLASS = 'dg-var--empty';\nconst INVALID_ICON = '⚠ ';\n\nconst VAR_SPAN_REGEX = /<span([^>]*\\bdata-var-key=\"([^\"]+)\"[^>]*)>([\\s\\S]*?)<\\/span>/g;\n\n/** Markup canônico do chip de variável — editores de host inserem por aqui. */\nexport const buildVariableChipHtml = (def: { key: string; label?: string; fullLabel?: string }): string =>\n `<span class=\"${CHIP_CLASS}\" data-var-key=\"${def.key}\" contenteditable=\"false\">${\n def.fullLabel || def.label || def.key\n }</span>`;\n\ntype ResolveOptions = { keepChip?: boolean; catalog?: VariableDef[]; unresolved?: UnresolvedDisplay };\n\nconst stripAttr = (attrs: string, name: string): string => attrs.replace(new RegExp(`\\\\s*${name}=\"[^\"]*\"`, 'gi'), '');\n\nconst removeClass = (attrs: string, className: string): string => {\n const current = attrs.match(/class=\"([^\"]*)\"/);\n if (!current) return attrs;\n const classes = current[1].split(/\\s+/).filter(Boolean);\n if (!classes.includes(className)) return attrs;\n const kept = classes.filter(name => name !== className);\n return kept.length ? attrs.replace(/class=\"[^\"]*\"/, `class=\"${kept.join(' ')}\"`) : stripAttr(attrs, 'class');\n};\n\nconst ensureClass = (attrs: string, className: string): string => {\n const current = attrs.match(/class=\"([^\"]*)\"/);\n if (!current) return `${attrs} class=\"${className}\"`;\n const classes = current[1].split(/\\s+/).filter(Boolean);\n if (classes.includes(className)) return attrs;\n return attrs.replace(/class=\"[^\"]*\"/, `class=\"${[...classes, className].join(' ')}\"`);\n};\n\n// Fallback sem DOMParser (fila de PDF) — deve espelhar o caminho DOM (docs/variables.md).\nconst resolveWithRegex = (\n html: string,\n resolved: ResolvedVariables,\n keepChip: boolean,\n knownKeys: Set<string> | null,\n knownDefs: Map<string, VariableDef> | null,\n unresolved: UnresolvedDisplay\n): string =>\n html.replace(VAR_SPAN_REGEX, (_match, attrs: string, key: string, label: string) => {\n const cleanAttrs = stripAttr(attrs, 'contenteditable');\n\n if (knownKeys && unresolved !== 'label' && !knownKeys.has(key)) {\n const text = label.startsWith(INVALID_ICON) ? label : `${INVALID_ICON}${label}`;\n return `<span${ensureClass(cleanAttrs, INVALID_CHIP_CLASS)}>${text}</span>`;\n }\n\n const raw = resolved[key];\n if (raw === undefined && unresolved === 'label')\n return `<span${ensureClass(cleanAttrs, CHIP_CLASS)}>${label}</span>`;\n\n const value = raw !== undefined ? String(raw) : NOT_INFORMED_LABEL;\n if (keepChip) {\n const withBadge =\n raw === undefined ? ensureClass(cleanAttrs, EMPTY_CHIP_CLASS) : removeClass(cleanAttrs, EMPTY_CHIP_CLASS);\n return `<span${withBadge}>${value}</span>`;\n }\n const markerAttrs = stripAttr(cleanAttrs, 'class');\n const def = knownDefs?.get(key);\n const withType = def?.type ? `${markerAttrs} data-var-type=\"${def.type}\"` : markerAttrs;\n return `<span${withType}>${value}</span>`;\n });\n\nconst setChipText = (doc: Document, chip: Element, value: string): void => {\n const walker = doc.createTreeWalker(chip, NodeFilter.SHOW_TEXT);\n const nodes: Node[] = [];\n while (walker.nextNode()) nodes.push(walker.currentNode);\n if (!nodes.length) {\n chip.appendChild(doc.createTextNode(value));\n return;\n }\n nodes[0].nodeValue = value;\n nodes.slice(1).forEach(node => node.parentNode?.removeChild(node));\n};\n\nconst markInvalid = (doc: Document, chip: Element): void => {\n chip.classList.add(INVALID_CHIP_CLASS);\n if (!(chip.textContent ?? '').startsWith(INVALID_ICON)) {\n chip.insertBefore(doc.createTextNode(INVALID_ICON), chip.firstChild);\n }\n};\n\n/** Classifica os chips do documento em `unknown` (fora do catálogo) e `unresolved` (sem valor). */\nexport const collectVariableIssues = (\n data: unknown,\n catalog: VariableDef[] = [],\n resolved: ResolvedVariables = {}\n): { unknown: string[]; unresolved: string[]; hasIssues: boolean } => {\n const keys = extractBindingKeys(data);\n const chipLabels = extractBindingLabels(data);\n const byKey = new Map(catalog.map(item => [item.key, item]));\n const unknown: string[] = [];\n const unresolved: string[] = [];\n keys.forEach(key => {\n const item = byKey.get(key);\n if (!item) unknown.push(chipLabels[key] || key);\n else if (resolved[key] === undefined) unresolved.push(item.fullLabel || item.label || chipLabels[key] || key);\n });\n return { unknown, unresolved, hasIssues: unknown.length > 0 || unresolved.length > 0 };\n};\n\n/**\n * Resolve os chips de variável de um HTML: valor, \"Não informado\" ou inválido (⚠).\n * `keepChip: false` (render/PDF) mantém um span marcador (data-var-key/data-var-type, sem class).\n * `unresolved: 'label'` (contexto de template) preserva o chip (texto + class) e não marca chip fora do\n * catálogo como inválido — o template não está ligado a um documento, então \"key desconhecida\" ali é ruído.\n * Ver docs/variables.md.\n */\nexport const resolveVariableHtml = (\n html: string,\n resolved: ResolvedVariables = {},\n { keepChip = true, catalog, unresolved = 'placeholder' }: ResolveOptions = {}\n): string => {\n if (!html || html.indexOf('data-var-key') < 0) return html;\n const knownKeys = catalog ? new Set(catalog.map(item => item.key)) : null;\n const knownDefs = catalog ? new Map(catalog.map(item => [item.key, item])) : null;\n if (typeof DOMParser === 'undefined')\n return resolveWithRegex(html, resolved, keepChip, knownKeys, knownDefs, unresolved);\n\n const doc = new DOMParser().parseFromString(html, 'text/html');\n\n doc.body.querySelectorAll('[data-var-key]').forEach(chip => {\n const key = chip.getAttribute('data-var-key') ?? '';\n const value = resolved[key];\n const unknown = knownKeys && unresolved !== 'label' ? !knownKeys.has(key) : false;\n chip.removeAttribute('contenteditable');\n\n if (unknown) {\n markInvalid(doc, chip);\n return;\n }\n if (value === undefined && unresolved === 'label') {\n chip.classList.add(CHIP_CLASS);\n return;\n }\n setChipText(doc, chip, value !== undefined ? String(value) : NOT_INFORMED_LABEL);\n chip.classList.toggle(EMPTY_CHIP_CLASS, keepChip && value === undefined);\n if (!keepChip) {\n chip.removeAttribute('class');\n const def = knownDefs?.get(key);\n if (def?.type) chip.setAttribute('data-var-type', def.type);\n }\n });\n return doc.body.innerHTML;\n};\n"]}