Skip to main content Link Search Menu Expand Document (external link)

Canvas overview

Added in v1.0.0


Table of contents


accessors

get

Signature

export declare const get: Effect.Effect<Option.Option<Canvas>, never, Plugin.Plugin>

Added in v1.0.0

prop

Signature

export declare const prop: <K extends keyof Canvas>(key: K) => Effect.Effect<Canvas[K], never, Canvas>

Added in v1.0.0

commands

addCommand

Signature

export declare const addCommand: <R, E>(
  command: Plugin.Command<R, E>
) => Effect.Effect<void, never, Plugin.Plugin | Scope.Scope | Exclude<R, Canvas>>

Added in v1.0.0

models

BBox (interface)

Signature

export interface BBox {
  maxX: number
  maxY: number
  minX: number
  minY: number
}

Added in v1.0.0

Canvas (interface)

Signature

export interface Canvas {
  readonly _: unique symbol

  readonly getData: () => CanvasData
  readonly createTextNode: (args: {
    pos: Obsidian.Point
    text?: string
    size?: Size
    focus?: boolean
  }) => CanvasTextNode

  readonly: boolean
  view: Obsidian.MarkdownView
  x: number
  y: number
  nodes: Map<string, CanvasNode>
  edges: Map<string, CanvasEdge>
  nodeInteractionLayer: CanvasInteractionLayer
  selection: Set<CanvasNode>
  menu: CanvasMenu
  wrapperEl: HTMLElement
  history: any
  requestPushHistory: any
  nodeIndex: any

  deselectAll(): void
  getContainingNodes(coords: BBox): Array<CanvasNode>
  getEdgesForNode(node: CanvasNode): Array<CanvasEdge>
  getViewportNodes(): Array<CanvasNode>
  importData(data: CanvasData): void
  panTo(x: number, y: number): void
  panIntoView(bbox: BBox): void
  requestFrame(): void
  requestSave(save?: boolean, triggerBySelf?: boolean): void
  select(nodes: CanvasNode): void
  selectOnly(nodes: CanvasNode): void
  showQuickSettingsMenu(menu: Obsidian.Menu): void
  zoomToSelection(): void
}

Added in v1.0.0

CanvasEdge (interface)

Signature

export interface CanvasEdge {
  id: string

  label: string | undefined
  lineStartGroupEl: SVGGElement
  lineEndGroupEl: SVGGElement
  lineGroupEl: SVGGElement

  path: {
    display: SVGPathElement
    interaction: SVGPathElement
  }

  from: {
    side: "left" | "right" | "top" | "bottom"
    node: CanvasNode
  }

  to: {
    side: "left" | "right" | "top" | "bottom"
    node: CanvasNode
  }

  canvas: Canvas
  bbox: BBox

  unknownData: CanvasNodeUnknownData
}

Added in v1.0.0

CanvasFileNode (interface)

Signature

export interface CanvasFileNode extends CanvasNode {
  file: Obsidian.TFile
}

Added in v1.0.0

CanvasGroupNode (interface)

Signature

export interface CanvasGroupNode extends CanvasNode {
  label: string
}

Added in v1.0.0

CanvasInteractionLayer (interface)

Signature

export interface CanvasInteractionLayer {
  interactionEl: HTMLElement
  canvas: Canvas
  target: CanvasNode | null

  render(): void

  setTarget(target: CanvasNode | null): void
}

Added in v1.0.0

CanvasLinkNode (interface)

Signature

export interface CanvasLinkNode extends CanvasNode {
  url: string
}

Added in v1.0.0

CanvasMenu (interface)

Signature

export interface CanvasMenu {
  containerEl: HTMLElement
  menuEl: HTMLElement
  canvas: Canvas
  selection: CanvasSelection

  render(): void

  updateZIndex(): void
}

Added in v1.0.0

CanvasNode (interface)

Signature

export interface CanvasNode {
  id: string

  x: number
  y: number
  width: number
  height: number
  zIndex: number
  bbox: BBox
  unknownData: CanvasNodeUnknownData
  renderedZIndex: number
  color: string

  headerComponent: Obsidian.Component

  nodeEl: HTMLElement
  labelEl: HTMLElement
  contentEl: HTMLElement
  containerEl: HTMLElement

  canvas: Canvas
  app: Obsidian.App

  getBBox(containing?: boolean): BBox
  getData: () => AllCanvasNodeData
  moveTo({ x, y }: { x: number; y: number }): void
  setColor: (color: string) => void
  render(): void

  readonly [key: string]: any
}

Added in v1.0.0

CanvasNodeUnknownData (interface)

Signature

export interface CanvasNodeUnknownData {
  id: string
  collapsed: boolean
  [key: string]: any
}

Added in v1.0.0

CanvasSelection (interface)

Signature

export interface CanvasSelection {
  selectionEl: HTMLElement
  resizerEls: HTMLElement
  canvas: Canvas
  bbox: BBox | undefined

  render(): void

  hide(): void

  onResizePointerDown(e: PointerEvent, direction: CanvasDirection): void

  update(bbox: BBox): void
}

Added in v1.0.0

CanvasTextNode (interface)

Signature

export interface CanvasTextNode extends CanvasNode {
  text: string
  child: any
}

Added in v1.0.0

Size (interface)

Signature

export interface Size {
  readonly height: number
  readonly width: number
}

Added in v1.0.0

ops

createEdge

Signature

export declare const createEdge: (options: {
  readonly from: CanvasNode
  readonly fromSide?: NodeSide
  readonly to: CanvasNode
  readonly toSide?: NodeSide
}) => Effect.Effect<void, never, Canvas>

Added in v1.0.0

nodeChanges

Signature

export declare const nodeChanges: (canvas: Canvas) => Stream.Stream<number>

Added in v1.0.0

onActive

Signature

export declare const onActive: <R, E>(
  effect: Effect.Effect<void, E, R>
) => Effect.Effect<void, never, Plugin.Plugin | Scope.Scope | Exclude<Exclude<R, Scope.Scope>, Canvas>>

Added in v1.0.0

onNodeChanges

Signature

export declare const onNodeChanges: <R, E>(
  effect: Effect.Effect<void, E, R>
) => Effect.Effect<void, never, Plugin.Plugin | Scope.Scope | Exclude<R, Canvas>>

Added in v1.0.0

selectedNode

Signature

export declare const selectedNode: Effect.Effect<Option.Option<CanvasNode>, never, Canvas>

Added in v1.0.0

tags

Canvas

Signature

export declare const Canvas: Context.Tag<Canvas, Canvas>

Added in v1.0.0