Composition / foldkit-composition/foldkit

Renderer

namespace · packages/composition/src/foldkit/index.ts:463

const Renderer = { make, forMessages, render, fields }

Its type

interface Renderer<Blocks extends AnyBlock, Message> {
  readonly _tag: 'Renderer'
  readonly catalog: Catalog<Blocks>
  readonly entries: Entries<Blocks, Message>
  readonly dispatches: boolean
}

In the guides

Members

Renderer.make

const · packages/composition/src/foldkit/index.ts:468

make: <Blocks extends AnyBlock>(
  catalog: Catalog<Blocks, unknown>,
  entries: NoInfer<Entries<Blocks, never>>,
) => Renderer<Blocks, never>

A Renderer whose views dispatch no Message: what a static page, a static region, or an editor's canvas draws. Its views' on(event) gives nothing.

Renderer.forMessages

function · packages/composition/src/foldkit/index.ts:473

forMessages<Message>(): {
  make: <Blocks extends AnyBlock>(
    catalog: Catalog<Blocks, NoInfer<Message>>,
    entries: NoInfer<Entries<Blocks, Message>>,
  ) => Renderer<Blocks, Message>
}

A Renderer whose views may dispatch the application's Messages. Every Message the Catalog's actions make must be one of them.

Renderer.render

function · packages/composition/src/foldkit/index.ts:339

render<Blocks extends AnyBlock, Message, Into = Message>(
  renderer: Renderer<Blocks, Message>,
  document: Document,
  given: HtmlBuilder<[Message] extends [never] ? Into : Message>,
  options?: {
    readonly mode?: Mode
    readonly selected?: Option.Option<NodeId>
    readonly hovered?: Option.Option<NodeId>
    readonly context?: Readonly<Record<string, unknown>> | undefined
    readonly data?: Readonly<Record<string, unknown>> | undefined
    readonly drop?: Option.Option<{
      readonly id: NodeId
      readonly zone: 'before' | 'inside' | 'after'
      readonly region?: Option.Option<string>
    }>
    readonly editing?: Option.Option<Editing>
  },
): ReadonlyArray<Html>

Draws a Document's roots. Nothing stored makes it throw: a node whose Block the Catalog lacks, whose props do not decode, that is missing or reached again, or whose view throws is a placeholder, which is nothing in view mode and a labelled box in edit mode.

Renderer.fields

function · packages/composition/src/foldkit/index.ts:485

fields<Blocks extends AnyBlock, Message>(
  renderer: Renderer<Blocks, Message>,
  document: Document,
  id: NodeId,
): ReadonlyArray<string>

The text props a node's view draws with field, in the order drawn: what an editor may edit in place. Empty for a node the page does not hold, or whose view draws none. It draws the node and what it holds, inert, to see.