API pública
Tudo abaixo vem de json-pdf-designer. O subconjunto de geração/
vínculos/paleta de cor/tipos também está disponível sem React em
json-pdf-designer/server — veja Uso só no servidor.
O preview do PDF mora num terceiro entry point,
json-pdf-designer/preview — listado no fim desta página.
// O componente preset
Designer // canvas React completo (toolbar + lista + réguas + zoom + faixas)
type DesignerProps
// Composição — monte o seu próprio layout de editor (ver "Compondo o Designer")
DesignerProvider // guarda todo o estado; toda peça abaixo precisa dele por cima
type DesignerProviderProps
// As 10 peças posicionáveis. A DesignerSidebar é conveniência: compõe as sete
// peças de conteúdo com o gate de aba que o <Designer> usa.
DesignerCanvas, DesignerTabBar, DesignerFieldList, DesignerToolbar, DesignerPageSettings,
DesignerPropertyPanel, DesignerFilterPanel, DesignerBindingEditor, DesignerInspector, DesignerSidebar
type DesignerCanvasProps, DesignerTabBarProps, DesignerFieldListProps, DesignerToolbarProps,
DesignerPageSettingsProps, DesignerPropertyPanelProps, DesignerFilterPanelProps,
DesignerBindingEditorProps, DesignerInspectorProps, DesignerSidebarProps
type TabGate // whenTab: uma chave de aba, um array delas, ou undefined (= sempre renderiza)
// Os 10 hooks. Cinco acessores (o value do contexto cru) e cinco seletores
// (derivados, pra cada peça pagar só pelo que ela lê). Fora de um
// <DesignerProvider> eles LANÇAM, nomeando o provider — nunca devolvem null calados.
useDesignerData, useDesignerActions, useDesignerSelection, useDesignerUi, useDesignerConfig
useDesignerSelectedSchema, useDesignerFieldListSchemas, useDesignerBulkEdit,
useDesignerTabWarnings, useDesignerFilterColumns
type DesignerDataValue, DesignerActionsValue, DesignerSelectionValue,
DesignerUiValue, DesignerConfigValue
// Registry de primitivos — troque os componentes que o editor renderiza POR
// DENTRO (ver "Customizando os componentes"). 12 slots: Button, Input,
// ColorInput, Select, Textarea, Checkbox, Modal, Card, CardHeader, CardTitle,
// Badge, TabPanel.
UiComponentsProvider // <Designer components={...}> é açúcar pra isto
useUiComponents() // como uma peça sua resolve o conjunto atual
defaultUiComponents // os nossos — `{ Modal: defaultUiComponents.Modal }` pra voltar
type UiComponents, type UiComponentsOverride, type UiComponentsProviderProps
// Idioma da UI (ver "Idioma da UI")
I18nProvider, useT, useLocale, withInlineCode
type Locale, type Dict
// UI pronta (opcional — ver "Componentes de UI prontos")
Button, Card, CardHeader, CardTitle, Badge, TabPanel, Modal, Input, ColorInput, Textarea, Select
Checkbox, PalettePicker, PaletteSwatches, MaterialIcon, CollapsibleSection, ClearFieldButton
type BadgeProps, ButtonProps, CardProps, CardTitleProps, CheckboxProps, ClearFieldButtonProps,
CollapsibleSectionProps, ColorInputProps, InputProps, MaterialIconProps, ModalProps,
PaletteGroup, PaletteGroupItem, PalettePickerProps, PaletteSwatchesProps, SelectProps,
TabPanelProps, TextareaProps
type ClassValue, LabeledParts, PartStyle // a API de estilo: a entrada do cx, e todo valor de `parts`
// Os 20 ícones — funções simples (sem ref), props são IconProps = SVGAttributes
IconPlus, IconX, IconTrash, IconPencil, IconGrip, IconLink, IconMinus, IconArrowsHorizontal,
IconArrowsVertical, IconChevronLeft, IconChevronRight, IconDots, IconUpload, IconLock,
IconLockOpen, IconBringToFront, IconSendToBack, IconRefresh, IconDownload, IconFolderUp,
IconAlertTriangle
type IconProps
// Geração (também em json-pdf-designer/server, exceto downloadPdf)
generatePdf(template, data, bindings, { fontBytes?, maxPages? }) => Promise<Uint8Array>
downloadPdf(bytes, filename?) // só navegador (document/Blob) — não está no /server
normalizeFontBytes(bytes) // detecta WOFF/WOFF2 e descomprime
// Vínculos (também em json-pdf-designer/server)
buildInputs(data, bindings) // resolve todos os vínculos de uma vez
renderTemplate(template, data) // resolve um template livre "{token}"
resolveToken(token, data) // resolve um token/função isolado
rowsFromArrayBinding(list, columns) // array de objetos -> linhas de tabela
columnLabel(col), columnKey(col)
// Coluna de tabela: token sempre, rótulo separado da referência
tokenFor(key) => string // "id" -> "{[id]}"; a regra única
segmentFor(key) => string // o segmento sozinho: "[id]"
columnFormulaFor(content, columns, i) // a MESMA precedência que o PDF usa
makeBoundTable(nextY, path, columns, t?) // { schema, binding } já com token
normalizeTableColumns(template, bindings) // chave crua -> {label, formula}; idempotente
describeBinding(b, t?), describeBindingShort(b, t?) // t: Dict, pra exibição na UI — default inglês
CUSTOM_FIELD_FUNCTIONS // lista das funções disponíveis (pra UI própria)
resolveChartItems(binding, data) // vínculo "chart" -> [{label, value}] cru
aggregateChartItems(items, topN?, sortBy?, palette?) // agrupa nos topN maiores + "Outros" (com cor)
resolveKpiValue(binding, data) // vínculo "kpi" -> um número agregado só
// Paletas de cores do gráfico (também em json-pdf-designer/server)
CHART_COLORS, CHART_OTHER_COLOR, CHART_PALETTES, CHART_PALETTE_LABELS,
CHART_PALETTE_NAMES, CHART_PALETTE_SIZE, resolveChartPalette, resolveChartColors
type ChartPaletteName, type ChartPresetName
// Ícones do KPI (também em json-pdf-designer/server)
MATERIAL_ICON_GRID, MATERIAL_ICON_PATHS, MATERIAL_ICON_LABELS, MATERIAL_ICON_NAMES,
materialIconLabels(locale) // rótulos de busca de ícone em inglês ou português
type MaterialIconName
// Fábricas de schema (também em json-pdf-designer/server)
makeChartSchema(nextY, t?), makeKpiSchema(nextY, t?), makeSectionColumnPair(sectionId, column, x, y, t?)
// Zonas — cabeçalho/rodapé/margem (também em json-pdf-designer/server)
classifyZone(schema, page, bands) => Zone // "header" | "footer" | "marginLeft" | "marginRight" | "body"
isRedZone(zone), clampToZone(...)
// Unidades (também em json-pdf-designer/server)
mmToPx, pxToMm, mmToPt
// Página — tamanho e orientação (também em json-pdf-designer/server)
PAGE_SIZE_PRESETS // A4/A3/A5/Carta/Ofício, sempre em retrato
orientationOf(page), applyOrientation(page, orientation), matchPreset(page)
// Versão do formato de template (também em json-pdf-designer/server)
migrateTemplate(input) => Template // normaliza template vindo de banco/arquivo/API
CURRENT_TEMPLATE_VERSION // versão de formato que este build escreve
// Erros de geração, como classes (todas também em json-pdf-designer/server) — ver Modos de falha
PdfGenerationError // base abstrata; ninguém lança ela direto
PageLimitError, PaginationStalledError // paginação: páginas demais / passada que não consumiu nada
InvalidPageSizeError // width/height não são dois números finitos > 0
UnsupportedGlyphError // caractere sem glifo na fonte
Woff2SupportMissingError, FontDecompressFailedError, FontDecompressTimeoutError
ImageUploadTooLargeError, ImageUploadUnreadableError // recusados no upload
ImageTooLargeError, TooManyImagesError, UnsupportedImageFormatError
ImageUnreadableError, BackgroundImageUnreadableError
TemplateNotAnObjectError, TemplateVersionInvalidError, TemplateVersionTooNewError
TemplateMigrationMissingError // lacuna nossa entre duas versões
isPdfError(err) => err is AnyPdfError // estreita unknown; te dá code + blame
PDF_ERROR_CODES // os 18 códigos, como tupla const
type PdfErrorCode, PdfErrorBlame, AnyPdfError
DEFAULT_MAX_PAGES // 5000
// Transformar um erro capturado em texto que alguém lê (também em json-pdf-designer/server)
describePdfError(err, dict) => PdfProblem | null // null quando o erro não é nosso
type PdfProblem // { code, blame, title, action?, field?, detail }
type PdfProblemCode // PdfErrorCode | "expression" — 19 membros
ExpressionError // base dos dois abaixo; hierarquia própria
ExpressionSyntaxError, ExpressionDepthError
// Zoom do canvas — contexto PRÓPRIO, então só quem lê re-renderiza
useDesignerZoom() // { zoom, min, max, step, setZoom, zoomIn, zoomOut, reset, fitWidth, fitHeight, viewportRef }
clampZoom(n), ZOOM_MIN, ZOOM_MAX, ZOOM_STEP // os limites que o canvas usa; clampZoom transforma NaN em 1
type DesignerZoomValue
// <DesignerCanvas hideZoombar /> tira a barra padrão — ver Compondo o Designer
// Validação de expressão (também em json-pdf-designer/server) — ver Visibilidade condicional
expressionError(source) => string | null // uma expressão: o erro de sintaxe, ou null
templateExpressionErrors(template) // todo {...} ruim de um template, com a mensagem
expressionErrors(schema, binding) // toda expressão que um campo carrega
suspiciousOperator(source) // operador de um lado só: sintaxe válida, quase certamente engano
templateSuspiciousOperators(template) // o mesmo, token a token
suggestAt(text, caret), applySuggestion(text, caret, s), insertAtCaret(text, caret, insert), wordAtCaret(text, caret), ALL_SUGGESTIONS
tokenAtCaret(template, caret), braceError(template, t?) // o {...} em que o caret está; chave desbalanceada
fieldWarning(schema, binding, t?) // a mensagem de alerta do editor pra um campo
dictFor(locale) // dicionário de tradução como valor, pro `t` acima
filterIncomplete(binding)
type SchemaExpressionError
// Tipos (também em json-pdf-designer/server)
Template, TemplatePage, TemplateVersion, Schema, TextSchema, TableSchema, TableColumnStyle, TableCornerRadii,
ImageSchema, SectionSchema, ChartSchema, KpiSchema, KpiIcon, KpiElementKey, KpiElementOffset,
BaseSchema, PageSize, Binding, KpiAggregation, TableColumn, DataSourceOption,
SectionColumnDragPayload, Zone, Bands, GeneratePdfOptions, Orientation
json-pdf-designer/preview
Entry point separado pra tudo que usa pdf.js. O pdfjs-dist é peer
dependency opcional (~35MB instalado), então nada alcançável a partir do
entry principal ou do /server o importa — só este. Rode
npm install pdfjs-dist se você importar daqui.
PdfPreview // um <canvas> por página, renderiza os bytes gerados
PdfPreviewModal // modal completo em volta do PdfPreview (botão baixar/fechar)
configurePdfWorker(url) // self-host do worker do pdf.js em vez do CDN padrão
É o entry point inteiro — renderizar o preview é a única coisa pra que o pacote usa pdf.js. Ver Componentes de UI prontos.