43 lines
2.0 KiB
Markdown
43 lines
2.0 KiB
Markdown
# @wrnexus/block-editor
|
|
|
|
Reusable editor state, DOM surfaces, inspector drafts, clipboard-download UI,
|
|
selection actions, and explicit block/preset composition.
|
|
|
|
## Configure a builder
|
|
|
|
```ts
|
|
import { createBuilderKit, createBlockEditorState, mountBlockCanvas } from "@wrnexus/block-editor";
|
|
import { emailEditorBlocks } from "@wrnexus/email-renderer/create";
|
|
import { emailPresets } from "@wrnexus/email-renderer/presets";
|
|
|
|
const builder = createBuilderKit({
|
|
blocks: [...emailEditorBlocks, myTrustedBlockDefinition],
|
|
presets: [...emailPresets, myTrustedSectionPreset],
|
|
});
|
|
|
|
const palette = builder.blocks(); // manifests: name, icon, category, schemas
|
|
const presets = builder.presets();
|
|
const node = builder.createBlock("custom.my-block", { id: () => crypto.randomUUID() });
|
|
```
|
|
|
|
Definitions use `defineBlock` from `@wrnexus/blocks`: manifest, create,
|
|
renderers, textRenderer, inspector controls, and migrations. Presets have
|
|
`id`, localized `name`, `icon`, and `create({ id })`. Registration is
|
|
explicit and frozen; duplicates and invalid created trees throw before insertion.
|
|
Factories must return schema-valid instances. Placement still goes through the
|
|
document-kind command validator; kit validation is not publish authorization.
|
|
|
|
Use the same trusted definitions in your document kind and server renderer.
|
|
Adding a block to a palette alone does not enable its rendering or publishing.
|
|
The built-in email production adapter currently uses its core email kind; custom
|
|
email target composition and a complete high-level editor component remain work
|
|
in progress.
|
|
|
|
The package exports `InspectorDrafts`, `builderOutlineLabel`,
|
|
`builderDragAnnouncement`, `updateBuilderCanvas`, `showBuilderBlockActions`,
|
|
`editBuilderText`, `showImageFallbacks`, and `offerBuilderDownload`.
|
|
These are low-level reusable surfaces, not a drop-in complete studio yet.
|
|
The host owns authenticated load/save/render/asset service callbacks.
|
|
`createBlockEditorState` uses validated commands; host applications must actually
|
|
wire it rather than assuming all application mutations already use that state.
|