ETS-backed registry for extension-owned panels in the editor.
Extensions register panels with structured content blocks (tables, key-value pairs, text, trees, progress bars). The Layer 2 emit pipeline reads this registry and encodes the content for the frontend, which renders it with native widgets.
Summary
Types
A content block in a panel.
A registered panel entry.
Panel position in the editor layout.
Panel size specification.
Types
@type content_block() :: {:text, String.t()} | {:styled_text, [{String.t(), non_neg_integer(), keyword()}]} | {:table, map()} | {:key_value, [{String.t(), String.t()}]} | {:separator} | {:progress, map()} | {:tree, map()}
A content block in a panel.
@type entry() :: %{ extension: atom(), panel_id: term(), title: String.t(), position: position(), size: size(), visible: boolean(), content: [content_block()] }
A registered panel entry.
@type position() :: :bottom | :right | :float
Panel position in the editor layout.
@type size() :: {:percent, 1..100} | {:lines, pos_integer()}
Panel size specification.
@type table() :: atom()
Functions
@spec all() :: [entry()]
@spec empty?() :: boolean()
@spec remove_all(atom()) :: :ok
@spec start_link(keyword()) :: GenServer.on_start()
@spec unregister_source(Minga.Extension.ContributionCleanup.contribution_source()) :: :ok
@spec visible() :: [entry()]