IC Framework Reference

API reference for the IC MATLAB-Svelte component framework. Generated 2026-04-01T10:29:56

# Core

# ic.Frame

Root of the IC component tree. Every IC application starts with a single Frame. The Frame owns the ic.core.View bridge and the component registry. Components are added via ic.core.Container.addChild, which serializes their definition and sends it over the frontend. Frames also handle theming via their Theme and ic.FrameColorScheme properties, and styling for all components of a given type via the globalStyle method

# View  :  ic.core.View

Bridge that wraps uihtml and handles MATLAB↔JS communication

# Registry  =  dictionary( string.empty(), ic.core.ComponentBase.empty() )

Id to component dictionary for O(1) event dispatch from the frontend

# GlobalStyles  =  configureDictionary( "string", "dictionary" )

Dictionary mapping component type to style rules applied to all the children of that type

# Logger  :  ic.core.Logger

Collects frontend log entries

# Theme  :  ic.style.Theme  =  ic.style.Theme()

Theme tokens synced to the frontend

# ColorScheme  :  string "light" | "dark"  =  "light"

Active color scheme

# Debug  :  logical  =  false

When true, the frontend forwards log entries to MATLAB and prints them in the command window

# LogLevel  :  string "debug" | "info" | "warn" | "error"  =  "debug"

Minimum severity that the ic.core.Logger accepts (used when Debug is true)

# Position  :  double

Position of the underlying uihtml container, in current Units

# Visible  :  matlab.lang.OnOffSwitchState

Whether the frame is visible

# Units  :  string

Coordinate units for Position

# Layout  :  matlab.ui.layout.GridLayoutOptions

Grid layout options when placed inside a uigridlayout

# UIParent  :  matlab.ui.container.Container

Parent uicontainer or uifigure

# isAttached(~)  →  tf
True
# theme(name: string, value: string)

Set one or more ic.style.Theme properties by name.

  • If a scalar value is applied, it will impact the active ColorScheme only
  • If a two-element array is set, it sets both [light, dark]
f.theme("primary", "#ff6600")
f.theme("primary-foreground", ["#000", "#fff"])
f.theme("Muted", "#eee", "border", "#ccc")
# globalStyle(componentType: string, selector: string, varargin)

Apply CSS styles to every instance of a component type. Setting a property to "" removes it.

f.globalStyle("ic.Button", ".ic-btn", "backgroundColor", "#000")
f.globalStyle("ic.Button", ".ic-btn__label", struct("color", "red"))
# clearGlobalStyle(componentType: string, selector: string)

Remove styles for a specific selector on a component type.

# clearGlobalStyles(componentType: string)

Remove all styles for every selector on a component type.

# clearAllGlobalStyles()

Remove every global style rule across all component types.

# logs()  →  logger

Return the logger instance for log inspection.

The ic.core.Logger that collects frontend log entries
# onLog(data)

Handle incoming log events from the frontend.

# send(evt)

Forward events to the ic.core.View for transmission via uihtml.

# registerSubtree(component)

Add a component and its descendants to the registry.

# deregisterSubtree(component)

Remove a component and its descendants from the registry.

# sendReactiveProperty(propertyName)

Publish the current value of a reactive property to the frontend.

# registerDescendant(component)

Add a component to the id→component registry for O(1) event routing.

# deregisterDescendant(id)

Remove a component from the registry.

# ic.core.ComponentBase

< [ handle, matlab.mixin.Heterogeneous, ic.mixin.Publishable, ic.mixin.Reactive]

Abstract root of the IC class hierarchy; shared by all components and the ic.Frame. Defines the common ID property and the publish() method for sending events to the frontend.

# ID  :  string

Unique identifier; used as the HTMLElement id in the DOM and as the Registry key on the frontend to enable event routing and state management for the component.

# getComponentDefinition()  →  definition

Serialize this component's schema for the JS Factory. the returned struct is sent as the payload of every @insert event and tells the frontend which Svelte component to mount, which props/events/methods to wire, and which mixin capabilities are active.

Struct with fields: id, type, mixins, props, events, methods

# ic.core.Component

Concrete base for all IC UI components. The constructor accepts a property struct from the subclass arguments block so every subclass gets a name-value constructor for free Components are inserted into the view into ic.core.Containers by setting their Parent and Target properties.

# Parent  =  [ ]

Owning container; empty until the component is inserted into a container. Set in ic.core.Container.insertChild and ic.core.Container.addStaticChild to establish the parent-child relationship.

# Target  :  string  =  string.empty()

Slot name within the parent container ("default" or a named target). Set in ic.core.Container.insertChild and ic.core.Container.addStaticChild to specify the target slot for this child component

# send(evt)

Delegate an event up the parent chain towards the view. If not yet attached, the event is buffered in ic.core.ComponentBase.Queue and delivered automatically by ic.core.Container.insertChild when the component is added.

# sendReactiveProperty(propertyName)

Publish a @prop/<Name> event to push a reactive property value to the frontend. This method is called automatically by the PostSet listener wired by ic.mixin.Reactive.setupReactivity(). Since the @insert event triggers the initial sync of all reactive properties when a component is added to a container, this method does nothing if the component is not yet attached to a container.

# ic.core.ComponentContainer

Base class for components that are themselves containers. Combines ic.core.Component (can be inserted into a parent) with ic.core.Container (can hold child components of its own)

# flush()  →  queue

ic.mixin.Publishable.flush queued events for this component, then cascade into all children. Ensures the entire component subtree is delivered in the correct order (parent before children) when ic.core.Container.insertChild flushes the events upstream.

# getComponentDefinition()  →  definition

Extend the base component definition with static children. static children are registered via ic.core.Container.addStaticChild in the MATLAB constructor and pre-rendered in the Svelte template.

# ic.core.Container

Abstract base for objects that hold ic.core.Component children. Manages a Children array and one or more target slots.Target slots are named insertion points that correspond to named Svelte slot positions in its template

# Children  :  ic.core.Component

Array of all components currently held by this container (all slots combined)

# PreviousTargets  :  string  =  "default"

Snapshot of Targets before the last change

# addChild(child: ic.core.Component, target: string)

Validate and insert child into the given target slot.

# removeChild(child: ic.core.Component)

Remove child from this container.

# getChildrenInTarget(target: string)  →  children

Return the subset of Children assigned to the given target slot.

An ic.core.Component array with the children in the specified slot
# moveChild(child: ic.core.Component, index)

Move child to a new position within its target slot.

panel.moveChild(btn, 1);        % move to first position
panel.moveChild(btn, "end");    % move to last position
# moveChildBefore(child: ic.core.Component, referenceChild: ic.core.Component)

Move child to the position immediately before referenceChild. Both children must be in the same target slot.

# moveChildAfter(child: ic.core.Component, referenceChild: ic.core.Component)

Move child to the position immediately after referenceChild. Both children must be in the same target slot.

# swapChildren(child1: ic.core.Component, child2: ic.core.Component)

Swap the positions of two children within their shared target slot.Both children must be in the same target slot.

# insertChild(child: ic.core.Component, target: string)

Raw child insertion without validation. Handles both fresh inserts and reparenting.

# addStaticChild(child: ic.core.Component, target: string)

Declare a child that is pre-rendered in the Svelte template. Static children are "pre-known" subelements of their container, and have their definitions already included in the parent's insertion payload via ic.core.ComponentBase.getComponentDefinition

# onTargetsChanged(~, ~)

Removes children in slots that were removed.

# safeRemoveChild(container, child)

Guards against cascading deletes where the container is also being destroyed.

# ic.core.View

< [ matlab.ui.componentcontainer.ComponentContainer]

Uihtml bridge between the MATLAB component tree and the Svelte frontend. Created and owned by ic.Frame, users never instantiate View directly.

Wraps a uihtml element that serves front/dist/index.html over a local HTTPS server, and opens it in an <iframe> inside a uifigure. Communication uses two named event channels:

  • MATLAB → JS: components propagate their ic.event.JsEvent up the tree until the view, responsible for calling sendEventToHTMLSource(h, "ic", payload)
  • JS → MATLAB: uihtmls HTMLEventReceivedFcn captures frontend events and routes them to the appropriate component handler via ic.Frame.Registry lookup.

Before each send, ic.AssetRegistry.activate is called so that asset deduplication (hash-only stubs for repeated assets) is tracked for each view instance

# Frame

The ic.Frame instance that owns this view

# setup()

Create the uigridlayout and uihtml elements and wire the event callback.

# update(~)

Required by matlab.ui.componentcontainer.ComponentContainer. Intentionally empty.

# send(events: ic.event.JsEvent)

Send one or more events to the Svelte frontend. Before the frontend signals readiness, events are queued locally and flushed once the @ready handshake completes. After that, events are sent directly.

# onHTMLEvent(evt)

Route raw HTMLEventReceivedFcn events to the appropriate handler.

# onReady()

Called when the frontend signals that it is fully initialized and ready to receive events. Flushes all pending events.

# onReceive(raw)

Parse and dispatch incoming events from the Svelte frontend to their respective MATLAB component handlers

# ic.core.Logger

< [ handle]

Circular log buffer for frontend log entries. Owned by ic.Frame and populated by @log events sent by the Svelte logger. Logging is opt-in: entries are only collected when ic.Frame.Debug is true. when ic.Frame.Debug is false, the Svelte logger discards entries immediately Log levels in ascending priority: debug < info < warn < error.

# LevelPriority  =  dictionary( [ "debug", "info", "warn", "error" ], [ 1, 2, 3, 4 ] )

Priority weights for the four log levels; used for threshold comparison

# Buffer  =  struct( 'level', { }, 'source', { }, 'message', { }, 'context', { }, 'timestamp', { } )

Circular buffer of log entry structs

# BufferSize  :  double  =  1000

Maximum number of entries to retain. Oldest is dropped when this limit is hit

# LogLevel  :  string  =  "debug"

Minimum log level. Entries with a lower priority are discarded and not stored in the buffer

# setLogLevel(level: string)

Set the minimum level. Entries below this level are ignored and not stored in the buffer.

# add(data: struct)  →  added

Add a log entry received from the Svelte frontend. The entry is silently dropped if its level is below the set LogLevel.

A logical value of true if the entry was stored, or false if it was filtered out
# all()  →  logs

Return all stored log entries as a MATLAB table.

Table with columns: level, source, message, context, timestamp
# filter(options.Level: string, options.Source: string, options.Since, options.Contains: string, options.Limit: double)  →  logs

Return log entries matching the specified criteria (all criteria are ANDed).

Table subset matching all specified filters
frame.Logger.filter(Level="warn");
frame.Logger.filter(Source="Bridge", Since=minutes(5));
frame.Logger.filter(Contains="failed", Limit=10);
# show(n: double)

Print the n most recent log entries to the command window. Each entry is formatted as: HH:mm:ss.SSS [LEVEL] [source] message. Structured context fields are printed indented below the message.

# clear()

Empty the log buffer

# printEntry(~, entry)

Format and print a single log entry to the command window. format: HH:mm:ss.SSS [LEVEL] [source] message structured context fields are printed indented below the message.

# Reactivity & Events

# ic.mixin.Reactive

< [ handle]

Automatic bidirectional synchronization of properties and events with the frontend. Properties marked with Description = "Reactive" and SetObservable publish changes via events to the view, and subscribe to changes from the view. The view debounces property changes at 50ms to avoid flooding the communication channel, so rapid changes in the frontend only trigger one update. Events marked with Description="Reactive" are forwarded from the frontend, and reach the component as a ic.event.MEvent. One important property of events is that the view only starts publishing them once a MATLAB listener is attached, and they stop being published when the last listener is removed.

# ReactivePropListeners  =  dictionary( string.empty(), event.listener.empty() )

PostSet listeners for reactive properties, keyed by property name

# ReactiveEventListenerCount  =  dictionary( string.empty(), double.empty() )

Reference count of MATLAB listeners per reactive event, used for lazy activation

# addlistener(varargin)  →  l

Overrides MATALBs addlistener to track reactive event listeners.

# setupReactivity()

Introspects the class metadata and wires up all reactive properties and events

# sendReactiveProperty(propertyName)

Publishes the property with the current value to the view.

# subscribeToReactiveProperty(propertyName)

Subscribes to property events from the view and sets the property silently (without echoing back).

# isReactiveMethod(methodName)  →  tf

Returns whether the specified method is marked as reactive (Description="Reactive").

# gatherReactiveDefinition()  →  props, events, methods

Collects reactive properties, events, and methods into struct arrays for serialization in the component definition payload.

# onReactiveListenerRemoved(eventName)

Decrements the listener count and publishes an event when the last MATLAB listener for a reactive event is removed.

# isReactiveEvent(eventName)  →  tf

Returns whether the specified event is marked as reactive (Description="Reactive").

# ic.mixin.Publishable

< [ handle]

Base class establishing the communication layer for exchanging events with the frontend. Components can publish events to the view, subscribe to events from the view, and queue events until the component is attached

# Queue  =  ic.event.JsEvent.empty()

Queued ic.event.JsEvent objects awaiting attachment to a view

# Subscriptions  =  dictionary( string.empty(), function_handle.empty() )

Map of event names to their callback handlers

# publish(name: string, data)  →  promise

Sends a named event with data to the frontend view.

The name of the event is converted to camelCase before dispatch

When called with an output argument, am ic.async.Promise that resolves with the view response
# subscribe(name: string, callback: function_handle)

Registers a callback for events with the given name

# unsubscribe(name: string)

Stops listening to events with the specified name.

# flush()  →  queue

Sends all queued events to the parent component and clears the queue. If and when the component is linked to a ic.core.View, the events will reach the frontend

The flushed ic.event.JsEvent array
# resolveAndUnsubscribe(promise, name, evtData)

Resolves a publish promise and removes the @resp subscription.

# ic.event.MEvent

< [ event.EventData]

Event data wrapper for frontend-originated component events. When a reactive event fires on the Svelte side, ic.mixin.Reactive re-notifies it as a MATLAB event via notify().

# Data

Payload delivered by the frontend event

# ic.event.JsEvent

< [ handle, matlab.mixin.Heterogeneous]

Wire-format event for all MATLAB-to-Svelte communication. Carries information about the component publishing the event, the event name, payload data.

# ComponentID  :  string

Target component ic.core.ComponentBase.ID

# Name  :  string

Event name

# Data

Event payload

# Id  :  string

Unique event identifier (uuid), used for request/response correlation when the frontend responds to this event.

# jsonencode(varargin)  →  json

Encode as JSON string; arrays produce a JSON array. Data is assigned after the struct to avoid field-name restrictions when Data differs across elements.

# ic.event.TransportData

Protocol superclass for objects that cross the MATLAB → JS bridge. subclasses implement toStruct() to produce a plain struct, cell, or scalar that ic.utils.toTransport can convert to a bridge-ready payload without calling jsonencode

Transport data

# ic.utils.toTransport

Recursively convert MATLAB data to bridge-ready form. Walks any MATLAB value and produces structs/cells with char/double/logical leaves that sendEventToHTMLSource can transmit directly as JS objects.

Conversion rules:

  • ic.event.TransportData → call toStruct(), recurse result
  • Struct → recurse each field
  • Cell → recurse each element
  • String scalar → char
  • String array → cell of char
  • String.empty → [] (JS null)
  • Inf scalar → [] (JS null)
  • Containers.Map→ struct (hyphens → underscores in keys)
  • Table → cell array of row structs (recurse cell values)
  • Datetime → char
  • Categorical → char
  • Everything else (double, logical, char, uint8, …) → pass through

# Async

# ic.async.Promise

< [ handle]

Represents a pending value from a client-side method call or request. Users can check if the promise has fulfilled withisResolved and get the value with get. The promise fulfills when the client responds to the request, and the resolved value is passed to any callbacks registered with then. Users can also block execution until fulfillment with wait, which polls the promise's status until it fulfills or a timeout elapses

# Value

Resolved value; empty until the promise fulfills

# Fullfilled  :  logical  =  false

Whether the promise has fulfilled (resolved to a value)

# isResolved()  →  tf

Return true if the promise has fulfilled.

Logical
# get()  →  value

Return the resolved value, or empty if not yet fulfilled.

Resolved value, or [] if still pending

Check isResolved before calling get to distinguish a fulfilled empty value from a still pending promise.

# resolve(value)

Fulfill the promise with the given value. if value is another promise, waits for that promise to resolve first.

# then(callback: function_handle)  →  other

Register a callback to run when the promise fulfills If the promise was already fulfilled, the callback runs immediately.

A new ic.async.Promise that resolves to the callback's return value
p = comp.focus();
p.then(@(res) disp(res.Data));
result = p.then(@(x) x * 2).then(@(x) x + 1);
# wait(maxTime: double, interval: double)

Block execution until the promise fulfills or the timeout elapses.

p = comp.focus().wait(2);
if p.isResolved(), disp(p.get()); end
# all(promises: ic.async.Promise)

Return a new promise that fulfills when all input promises have fulfilled.

ic.async.Promise resolving to a cell array of each promise's value
p1 = comp1.focus();
p2 = comp2.focus();
ic.async.Promise.all(p1, p2).wait();
# PromiseFullfilled

Fires when the promise fulfills

# ic.async.Resolution

Result of a client-side request. The MATLAB mirror of the TypeScript type Resolution = {success: boolean, data: unknown}.

# Success  :  logical

Whether the view processed the event successfully

# Data

Value returned by the view, or error message if Success is false

# Mixins

# ic.mixin.Stylable

< [ handle]

Dynamic CSS styling capabilities for components. Styles are scoped to the component wrapper DOM element (tagged with its ic.core.ComponentBase.ID). Internally, it uses constructable stylesheets (CSSStyleSheet) for performant rule injection. Note that styles shouldn't be applied to the wrapper element itself. Instead, children or descendants should be targeted via selectors All style operations are accessed through the css property, which returns a ic.mixin.StyleBuilder instance.

# css

Util ic.mixin.StyleBuilder class that simplifies common style update patterns with a fluent syntax

Styles

# ic.mixin.StyleBuilder

< [ handle]

Fluent builder for applying CSS styles and keyframes to components. All style operations (set, get, clear) and keyframe definitions are accessed through this class via the ic.mixin.Stylable.css property.

# Component

The ic.mixin.Stylable component this builder operates on

# style(selector: string, varargin)

Applies CSS styles to elements matching the CSS selector. Styles are merged with any existing styles for the selector, and properties set to "" are removed. The complete style object for the selector is published to the view on each update, so it's recommended to batch multiple style changes together by passing an object or using the fluent helpers. The selector should target children or descendants of the component wrapper, not the wrapper itself. For example, to set styles on all direct children, use "> *". See the CSS selector reference for more details and examples

The builder itself, for chaining
comp.css.style("> *", "width", "100%")
comp.css.style(".label", "color", "red")
comp.css.style("> *", struct("flex", "1", "margin", "5px"))
# vars(selector: string, name: string, value: string)

Sets CSS custom properties (variables) on the given selector. unlike style(), this method accepts property names with -- prefixes that are not valid MATLAB struct field names. Names are used as-is with no camelCase conversion. The -- prefix is added automatically if not already present.

The builder itself, for chaining
comp.css.vars("> *", "--ic-font-size", "14px")
comp.css.vars("", "--my-color", "red", "--my-gap", "8px")
# getStyle(selector: string)  →  styles

Returns the current styles for a selector.

The style struct, or an empty struct if none set
# clearStyle(selector: string)

Removes all styles for a specific selector.

# clearStyles()

Removes all dynamic styles for the component

# getAllStyles()  →  result

Returns all dynamic styles as an object mapping selectors to their style structs.

A containers.Map mapping selectors to style structs
# keyframes(name: string, varargin)

Defines a CSS @keyframes animation. The keyframe is not scoped, (global), so in theory any component can reuse it

Frames can be specified as a struct-of-structs or as alternating stop-name / properties-struct pairs:

comp.css.keyframes("fadeIn", struct( ...
    "from", struct("opacity", "0"), ...
    "to",   struct("opacity", "1")))
comp.css.keyframes("slide", ...
    "0%",   struct("transform", "translateX(0)"), ...
    "100%", struct("transform", "translateX(100px)"))
comp.css.style("> *", "animationName", "fadeIn", "animationDuration", "1s")
# removeKeyframes(name: string)

Removes a previously defined @keyframes animation.

# fillWidth()

Sets width to 100%.

# fillHeight()

Sets height to 100%.

# fill()

Sets both width and height to 100%.

# width(value)

Sets the component width, in pixels or as a CSS size string.

# height(value)

Sets the component height, in pixels or as a CSS size string.

# minWidth(value)

Sets the minimum width, in pixels or as a CSS size string.

# minHeight(value)

Sets the minimum height, in pixels or as a CSS size string.

# maxWidth(value)

Sets the maximum width, in pixels or as a CSS size string.

# maxHeight(value)

Sets the maximum height, in pixels or as a CSS size string.

# flex(grow: double, shrink: double, basis)

Sets the flex shorthand (grow, shrink, basis).

# flexGrow(value: double)

Sets how much the item grows relative to siblings.

# flexShrink(value: double)

Sets how much the item shrinks relative to siblings.

# flexBasis(value)

Sets the initial main size before growing/shrinking.

# alignSelf(value: string)

Overrides the parent's align-items for this component.

# margin(value)

Sets the component margin, in pixels or as a CSS spacing string.

# padding(value)

Sets the component padding, in pixels or as a CSS spacing string.

# hide()

Hides the component (display: none).

# show(displayType: string)

Shows the component with the specified display type.

# invisible()

Makes the component invisible but preserves its layout space.

# visible()

Makes the component visible.

# opacity(value: double)

Sets the component opacity (0 = transparent, 1 = opaque).

# position(type: string)

Sets the CSS positioning type.

# zIndex(value: double)

Sets the z-index (stacking order).

# overflow(value: string)

Sets overflow behavior for both axes.

# overflowX(value: string)

Sets horizontal overflow behavior.

# overflowY(value: string)

Sets vertical overflow behavior.

# toCssValue(value)  →  css
# toSpacingValue(value)  →  css

# ic.check.CssValidators

Static validation functions for CSS-related properties.

# mustBeGridTemplate(value)

Validate grid-template-columns/rows values. Accepts a numeric array (pixel values) or a string (CSS syntax).

# mustBeGap(value)

Validate gap values (row-gap, column-gap). Accepts a number (pixels), a 1–2 element numeric array, or a string.

# mustBeSpacing(value)

Validate spacing values (padding, margin). Accepts a number (pixels), a 1–4 element numeric array (CSS shorthand), or a string.

# mustBeSize(value)

Validate size values (width, height, icon size). Accepts a non-negative scalar (pixels) or a string (CSS value).

# ic.mixin.Effectable

< [ handle]

Cross-component reactive expressions that run on the frontend.

Effects track property reads and re-run automatically when dependencies change. the frontend counterpart compiles expressions into Svelte 5 $effect() runes with reactive component proxies exposing properties, methods, the component's root DOM element, and other metadata

# jsEffect(varargin)  →  effect

Creates a reactive expression that runs on the frontend and evaluates with all the components passed as arguments. The expression is the last argument and must be an arrow function whose parameters correspond positionally to the component arguments, and whose body contains the reactive code to run on the frontend. The effect automatically tracks property reads on the component proxies and re-runs whenever those properties change. In Javascript, each component proxy in the expression provides: .props - reactive properties .methods - callable methods .el - root DOM element .id - component unique ID .type - MATLAB class type

A ic.effect.JsEffect handle whose remove() method destroys the effect
e = slider.jsEffect(progress, ...
    "(s, p) => { p.props.value = s.props.value }");

e.remove();

Effect utils

# ic.effect.JsEffect

< [ handle]

Handle to a frontend reactive effect created via ic.core.ComponentBase.jsEffect()

# ID  :  string

Unique identifier for this effect

# Owner  :  ic.core.ComponentBase

The component that owns this effect

# IsRemoved  :  logical  =  false

Boolean flag that indicates whether this effect has been removed from the frontend effect manager.

# remove()

Stop and remove this effect from the frontend effect manager.

# ic.utils.bind

Create a one-way property binding between two components. wraps ic.mixin.Effectable.jsEffect with a concise source→target expression.

effect = ic.utils.bind(slider, "value", progress, "value")
effect = ic.utils.bind(slider, "value", label, "text", "x + '%'")

# ic.mixin.Keyable

< [ handle]

Keyboard shortcut registration for components. allows registering keyboard shortcuts via onKey and receiving callbacks when the shortcut is pressed while the component has focus. each registration returns a ic.key.KeyBinding handle for independent removal

# onKey(shortcut: string, callback: function_handle, opts.PreventDefault: logical, opts.StopPropagation: logical)  →  binding

Register a keyboard shortcut with a callback. multiple callbacks can be registered for the same shortcut; each is invoked independently when the shortcut matches.

A ic.key.KeyBinding handle whose remove() method unregisters this specific callback
k = comp.onKey("Ctrl+S", @(src, data) disp(data));
k = comp.onKey("Ctrl+Enter", @(src, data) compile(), ...
    "PreventDefault", true);
k.remove();
# clearKeys()

Remove all keyboard shortcut bindings

# removeKeyBinding(bindingId)

Remove a specific binding by ID. called by ic.key.KeyBinding.remove

# handleKeyPressed(data)

Route incoming @keyPressed to all callbacks matching the shortcut

Key utils

# ic.key.KeyBinding

< [ handle]

Handle to a registered keyboard shortcut created via ic.mixin.Keyable.onKey

# Shortcut  :  string

The shortcut string this binding listens for

# Owner

The component that owns this binding

# BindingId  :  string

Unique identifier for this binding

# IsRemoved  :  logical  =  false

Whether this binding has been removed

# remove()

Unregister this keyboard shortcut binding. if this was the last callback for the shortcut, the frontend listener is also removed

# ic.mixin.Requestable

< [ handle]

Frontend-initiated request/response communication. Enables the Svelte frontend to send named requests to MATLAB and receive responses asynchronously. Used for load-on-demand patterns where the frontend pulls data (e.g., lazy loading of ic.VirtualTree). Internally subscribes to a request event with a unique name, and on receiving, publishes a response event with the same unique ID

# onRequest(name: string, callback: function_handle)

Registers a handler for frontend requests.

# handleFrontendRequest(payload, callback)

Processes an incoming request and sends the response back.

# ic.mixin.Registrable

< [ handle]

Tree-walking registration and deregistration of components in the ic.Frame registry. When a component is inserted into or removed from a container, this mixin recursively registers or deregisters the subtree for O(1) event dispatch.

# registerSubtree(component)

Registers a component and all its descendants in the ic.Frame registry.

# deregisterSubtree(component)

Removes a component and all its descendants from the ic.Frame registry.

# registerSubtreeWithFrame(component, frame)

Recursively registers a component and its descendants using the given ic.Frame.

# deregisterSubtreeWithFrame(component, frame)

Recursively deregisters a component and its descendants using the given ic.Frame.

# ic.mixin.AllowsOverlay

< [ handle]

Grants a container the ability to host overlay components in the "overlay" target.

# addOverlay(child: ic.core.Component)

Inserts a child into the implicit "overlay" target. Only components inheriting ic.mixin.Overlay are accepted.

# ic.mixin.Overlay

< [ handle]

Mixin identifying components that can be added via ic.mixin.AllowsOverlay.addOverlay.

# Assets

# ic.Asset

Universal source type for icons, images, and files. Accepts a:

  • Lucide icon name
  • A local file path
  • A HTTP/HTTPS URL

Any of these types are automatically detected when constructing from a string, so components that type a property as ic.Asset get implicit string conversion. Assets from urls or files are hashed and cached in the ic.AssetRegistry to avoid redundant uploads to the frontend. If an asset has been sent before (hash match), only the hash is sent to the frontend; otherwise, the raw bytes are sent along with the hash and MIME type.

# jsonencode(varargin)  →  json
# cachedUrlDownload(url)  →  raw, ext, hash

Download a URL and return its bytes; caches by URL to skip repeated HTTP requests.

# readFile(path)  →  raw, ext

Read a local file into raw bytes.

# downloadUrl(url)  →  raw, ext

Download a URL to a temp file and return raw bytes.

# computeHash(data)  →  h

Compute a pure-MATLAB fingerprint for deduplication (no Java dependency).

# mimeFromExt(ext)  →  mime

Map a file extension to a MIME type string; falls back to "application/octet-stream".

# ic.AssetRegistry

< [ handle]

Per-view (uihtml) asset deduplication tracker. tracks which ic.Asset hashes have been sent to each ic.core.View so that repeated references only transmit a {hash} stub instead of the full base64 payload. The ic.core.View is responsible for activating the registry before encoding assets and for ensuring that view references in the registry are properly cleaned up on destruction.

# Instance  =  ic.AssetRegistry()

Singleton instance

# ViewMap

Map from double(view) → containers.Map of sent hashes for that view

# CurrentSent

Handle ref to the currently active view's sent-hash map

# UrlCache

Shared URL download cache: URL string → struct(raw, ext, hash)

# cleanup(key)

Remove a destroyed view's sent-hash map.

# getInstance()  →  r

Return the singleton instance.

# activate(view)

Set the active view for the current encoding pass. creates the view's sent-hash map on first call and registers a cleanup listener for when the view is destroyed.

# getUrlCache()  →  m

Return the shared URL download cache (handle ref, safe to write to).

# hasSent(hash)  →  tf

Return true if this hash has already been sent to the active view.

# markSent(hash)

Record that this hash has been sent to the active view.

Asset validation

# ic.assets.mustBeIcon

Validate that an asset is a valid icon source. Accepts empty (no icon), name (Lucide), or file/url with .svg extension.

# ic.assets.mustBeIconOrImage

Validate that an asset is a valid icon or image. Accepts anything that passes ic.assets.mustBeIcon or ic.assets.mustBeImage

# ic.assets.mustBeImage

Validate that an asset is a valid image source. Accepts empty (no image), file (must have image extension), or url

# ic.assets.mustBePdf

Validate that an asset is a valid PDF source. Accepts empty (no document), file (must be .pdf), or url

# Theming

# ic.style.Theme

CSS custom property values with light/dark scheme support. Changes to Theme properties trigger a event on the owning ic.Frame, which sends the updated theme to the frontend to update the CSS variables. The frontend applies the appropriate value from each [light, dark] pair based on the current color scheme.

# Background  :  string  =  [ "#f8fafc", "#0f172a" ]

Page and component background color

# Foreground  :  string  =  [ "#0f172a", "#f1f5f9" ]

Default text color

# Primary  :  string  =  [ "#2563eb", "#3b82f6" ]

Main brand/action color

# PrimaryForeground  :  string  =  [ "#ffffff", "#ffffff" ]

Text on primary backgrounds

# Secondary  :  string  =  [ "#e2e8f0", "#1e293b" ]

Alternative action color

# SecondaryForeground  :  string  =  [ "#0f172a", "#f1f5f9" ]

Text on secondary backgrounds

# Muted  :  string  =  [ "#f1f5f9", "#1e293b" ]

Subtle background for less prominent elements

# MutedForeground  :  string  =  [ "#64748b", "#94a3b8" ]

Text on muted backgrounds

# Accent  :  string  =  [ "#dbeafe", "#1e3a5f" ]

Highlight/emphasis color

# AccentForeground  :  string  =  [ "#1e40af", "#93c5fd" ]

Text on accent backgrounds

# Destructive  :  string  =  [ "#dc2626", "#ef4444" ]

Error/danger color

# DestructiveForeground  :  string  =  [ "#ffffff", "#ffffff" ]

Text on destructive backgrounds

# Success  :  string  =  [ "#16a34a", "#22c55e" ]

Positive/success color

# SuccessForeground  :  string  =  [ "#ffffff", "#ffffff" ]

Text on success backgrounds

# Warning  :  string  =  [ "#d97706", "#f59e0b" ]

Caution/warning color

# WarningForeground  :  string  =  [ "#ffffff", "#18181b" ]

Text on warning backgrounds

# Info  :  string  =  [ "#0284c7", "#38bdf8" ]

Informational color

# InfoForeground  :  string  =  [ "#ffffff", "#18181b" ]

Text on info backgrounds

# Border  :  string  =  [ "#cbd5e1", "#334155" ]

Default border color

# Input  :  string  =  [ "#cbd5e1", "#475569" ]

Input field border color

# Ring  :  string  =  [ "#2563eb", "#3b82f6" ]

Focus ring color

# Radius  :  string  =  "0.375rem"

Default border radius

# ActiveScheme  :  string "light" | "dark"  =  "light"

Current color scheme

# jsonencode(varargin)  →  css

Serialize as CSS custom properties in JSON form. color properties are sent as [light, dark] arrays; the frontend selects the value based on the active color scheme.

# Utilities

# ic.utils.toCamelCase

Convert a string to camelCase.

# ic.utils.toKebabCase

Convert camelCase or PascalCase strings to kebab-case.

# ic.utils.toPascalCase

Convert a string to PascalCase.

# ic.utils.toSnakeCase

Convert a string to snake_case.

# Form Components

# ic.Button

Interactive button component that can be clicked to trigger actions

# Label  :  string  =  "Click me"

Text label of the button

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Fill  :  string "solid" | "outline" | "ghost"  =  "solid"

Fill style of the button

# Shape  :  string "default" | "pill" | "square"  =  "default"

Shape style of the button

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the button, as a function of the text font size

# Disabled  :  logical  =  false

Whether the button is disabled and cannot be interacted with

# IconPosition  :  string "left" | "right"  =  "left"

Position of the icon relative to the label (see Icon)

# Icon

Child icon, either an ic.Icon or ic.Image

# focus()  →  out

Programmatically focus the button

# Clicked

Event triggered when the button is clicked

timestamp char datetime of the click event

# ic.SplitButton

Button with a dropdown for additional actions. Displays a main button with a chevron trigger that opens a dropdown listing all items with optional icons/images and descriptions.

# Items  :  string  =  "Action"

List of labels for each action. The first item is considered the "main" action and is triggered when the main button (not the chevron) is clicked

# ItemDescriptions  :  string  =  string.empty

Optional descriptions shown below each item label in the dropdown

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Fill  :  string "solid" | "outline" | "ghost"  =  "solid"

Fill style of the button

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimensions of the button relative to the component font size

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# SplitDirection  :  string "right" | "bottom"  =  "right"

Layout of the split button and dropdown chevron

# MainIcon  :  ic.Icon

The icon of the main action button

# setIcon(item: string, icon: ic.Icon)

Set, replace or remove the icon for a dropdown item

btn = ic.SplitButton("Items", ["New", "Edit", "Delete"]);
btn.setIcon("Edit", "star");
# getIcon(item: string)  →  icon

Get the icon for a dropdown item

The ic.Icon object for the item, or empty if there is no icon
# focus()  →  out

Programmatically focus the main button

# ItemSelected

Triggered when an item is selected (the main button or an item in the dropdown)

index double index of the selected item in #ic.SplitButton.Items
label char label text of the selected item
# Opened

Fires when the dropdown opens

# Closed

Fires when the dropdown closes

# ic.InputText

Single-line text input field with optional prefix/suffix, validation, and character counter

# Value  :  string  =  ""

Current text content

# Placeholder  :  string  =  ""

Ghost text when displayed on an empty input

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the input relative to the text font size

# Disabled  :  logical  =  false

Whether the input is disabled and cannot be interacted with

# Readonly  :  logical  =  false

Whether the input is read-only

# Invalid  :  logical  =  false

Whether the input is in an invalid state. When true, the input box will be styled with error colors and the ErrorMessage will be displayed if set.

# ErrorMessage  :  string  =  ""

Error message displayed below the input when invalid

# HelperText  :  string  =  ""

Helper text displayed below the input

# Prefix  :  string  =  ""

Text or symbol displayed before the input

# Suffix  :  string  =  ""

Text or symbol displayed after the input

# Clearable  :  logical  =  false

Whether to show a clear button on the input box to remove the contents

# MaxLength  :  double  =  0

Maximum number of characters allowed (0 = unlimited)

# ShowCounter  :  logical  =  false

Whether to display character count (requires MaxLength to be defined different from 0)

# focus()  →  out

Programmatically focus the input

# blur()  →  out

Programmatically blur (unfocus) the input

# selectAll()  →  out

Select all text the in the input

# clear()  →  out

Remove all text from the input

# ValueChanged

Triggered when the value changes on user input

value char current text content
# Submitted

Fires when the Enter key is pressed

value char current text content at the time of submission

# ic.Password

Masked text input with visibility toggle.

# Value  :  string  =  ""

Current text value of the password input

# Placeholder  :  string  =  ""

Ghost text displayed when the Value is empty

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the input relative to the text font size

# Disabled  :  logical  =  false

Whether the input is disabled and cannot be interacted with

# Readonly  :  logical  =  false

Whether the input is read-only

# Invalid  :  logical  =  false

Whether the input is in an invalid state. When true, the input will be styled with error colors and the ErrorMessage will be displayed below the input.

# ErrorMessage  :  string  =  ""

Error message displayed below the input when invalid

# HelperText  :  string  =  ""

Helper text displayed below the input

# ShowToggle  :  logical  =  true

Whether to show the visibility toggle button that allows the user to switch between masked and unmasked input

# focus()  →  out

Programmatically focus the input

# blur()  →  out

Programmatically blur (unfocus) the input

# selectAll()  →  out

Select all text in the input

# clear()  →  out

Clear the input value

# ValueChanged

Triggered when the value changes

value char current text content
# Submitted

Fires when the Enter key is pressed

value char current text content at the time of submission

# ic.TextArea

Multi-line text input field. Supports validation states, character counting, and auto-resize to fit content

# Value  :  string  =  ""

Current text value of the textarea

# Placeholder  :  string  =  ""

Ghost placeholder text when textarea is empty

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the textarea relative to the component font size

# Disabled  :  logical  =  false

Whether the textarea is disabled and cannot be interacted with

# Readonly  :  logical  =  false

Whether the textarea is read-only and cannot be edited

# Invalid  :  logical  =  false

Whether the textarea is in an invalid state, which will trigger error styling and display the ErrorMessage

# ErrorMessage  :  string  =  ""

Error message displayed below the textarea when Invalid is true

# HelperText  :  string  =  ""

Additional text displayed below the textarea

# Rows  :  double  =  4

Number of visible text rows

# Resize  :  string "vertical" | "horizontal" | "both" | "none"  =  "vertical"

Resize behavior of the textarea

# AutoResize  :  logical  =  false

Whether the textarea auto-grows to fit content, increasing the number of rows as it needs

# MaxLength  :  double  =  0

Maximum number of characters allowed (0 for unlimited)

# ShowCounter  :  logical  =  false

Whether to display the character count. It requires MaxLength to be set to a positive integer to show the count of current/total characters.

# focus()  →  out

Programmatically focus the textarea

# blur()  →  out

Programmatically blur (unfocus) the textarea

# selectAll()  →  out

Select all text in the textarea

# clear()  →  out

Clear the textarea value

# ValueChanged

Triggered when the current value changes

# Submitted

Fires on Ctrl+Enter / Cmd+Enter

# ic.Select

Single-value dropdown selector. Displays a trigger field that opens a scrollable dropdown list. Supports search filtering, clearable selection, and keyboard navigation.

# Items  :  string  =  [ "Option 1", "Option 2", "Option 3" ]

List of selectable options

# Value  :  string  =  string.empty

Currently selected item from Items, or string.empty if no selection

# Placeholder  :  string  =  "Select..."

Ghost text shown when no value is selected

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Invalid  :  logical  =  false

Whether the control is in an invalid state, in which case it is highlighted with an error color and the ErrorMessage text is shown

# ErrorMessage  :  string  =  ""

Error text shown below the field when Invalid is true

# HelperText  :  string  =  ""

Text shown below the field

# Clearable  :  logical  =  false

Whether a "x" clear button is shown in the trigger field to clear the selection

# Searchable  :  logical  =  false

Whether the search input can be used to filter the dropdown options

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the control relative to the component font size

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# MaxPopupHeight  :  double  =  200

Maximum height of the popup dropdown list, in pixels. If the content exceeds this height, the dropdown becomes scrollable.

# focus()  →  out

Programmatically focus the trigger field

# clear()  →  out

Programmatically clear the selected value

# open()  →  out

Programmatically open the dropdown

# close()  →  out

Programmatically close the dropdown

# ValueChanged

Triggered when the user selects or clears a value

# Opened

Fires when the dropdown opens

# Closed

Fires when the dropdown closes

# ic.MultiSelect

Multi-value dropdown selector with tags. Provides a searchable dropdown with checkboxes for item selection. Selected items are then displayed as closable tags inside the input field.

# Items  :  string  =  [ "Option 1", "Option 2", "Option 3" ]

List of selectable options that will appear in the dropdown. They should be unique

# Value  :  string  =  string.empty

List of currently selected items

# Placeholder  :  string  =  "Select..."

Ghost text shown when no items are selected

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Clearable  :  logical  =  false

Whether a closing "x" button should appear on the input field to clear all selected values at once

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the input field and tags relative to the text font size

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# MaxPopupHeight  :  double  =  200

Maximum height of the dropdown popup, in pixels. Content that exceeds this height will be scrollable

# MaxSelectedItems  :  double  =  Inf

Maximum number of selectable items (Inf = unlimited)

# focus()  →  out

Programmatically focus the input field

# clear()  →  out

Programmatically clear all selected values

# open()  →  out

Programmatically open the dropdown

# close()  →  out

Programmatically close the dropdown

# ValueChanged

Triggered when the user changes the selection

# Opened

Fires when the dropdown opens

# Closed

Fires when the dropdown closes

# ic.TreeSelect

Hierarchical multi-value selector with cascading menus. Opens cascading sub-menus for hierarchical item selection; and displays selected items as closable tags inside the input field.

# Placeholder  :  string  =  "Select..."

Text shown when no items are selected

# Clearable  :  logical  =  false

Whether an "x" icon appears on the input field, allowing the user to clear all selected items with one click

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the component relative to the font size

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# MaxPopupHeight  =  200

Maximum height of the dropdown, in pixels or as a CSS string. Content that exceeds this height will cause the dropdown to scroll.

# MaxPanelWidth  =  240

Maximum width of each cascade panel, in pixels or as a CSS string. Panels that exceed this width will truncate content with an ellipsis.

# OpenOnHover  :  logical  =  false

Whether hovering a folder row auto-opens its sub-panel

# focus()  →  out

Programmatically focus the input field

# open()  →  out

Programmatically open the dropdown

# close()  →  out

Programmatically close the dropdown

# Opened

Fires when the dropdown opens

# Closed

Fires when the dropdown closes

# ic.SearchBar

Tag-based search input. Displays a search field where typing the separator character converts the typed text into a tag. Tags can have icons assigned via prefix triggers: if the text starts with a trigger string, it is stripped and the corresponding icon is shown.

# Value  :  string  =  string.empty

Current tags as a string array

# Separator  :  string  =  ","

Character that triggers closing a tag and starting a new one

# Placeholder  :  string  =  "Search..."

Ghost text shown when there are no tags and the input is empty

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Clearable  :  logical  =  false

Whether to display a "x" close button in the input field to remove all tags at once

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimensions of the control relative to the component font size

# Variant  :  string "primary" | "secondary"  =  "primary"

Visual style variant

# IconTriggers  :  containers.Map

Map of prefix strings to Lucide icon names. If the user types a tag that starts with one of the prefix strings, that prefix is stripped and the corresponding icon is shown in the tag

# focus()  →  out

Programmatically focus the search input

# clear()  →  out

Programmatically clear all tags

# ValueChanged

Triggered when the tag list changes

# Submitted

Fires when Enter is pressed

# ic.Checkbox

Simple toggle checkbox

# Value  :  matlab.lang.OnOffSwitchState  =  "off"

Checkbox state (on or off)

# Label  :  string  =  ""

Text label displayed next to the checkbox

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the checkbox relative to the text font size

# Disabled  :  logical  =  false

Whether the checkbox is disabled and cannot be interacted with

# Indeterminate  :  logical  =  false

When true, the checkbox is in an indeterminate state (neither on nor off) and displays a dash instead of a checkmark

# LabelPosition  :  string "right" | "left"  =  "right"

Position of the label relative to the checkbox

# Icon

ic.Icon displayed when the checkbox is selected (Value is "on")

# focus()  →  out

Programmatically focus the checkbox

# ValueChanged

Triggered when the user toggles the checkbox

value char current checkbox state ('on' or 'off')

# ic.Switch

Switch slider that maintains on/off state

# Value  :  matlab.lang.OnOffSwitchState  =  "off"

Switch state

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Shape  :  string "square" | "pill"  =  "square"

Shape of the switch track and thumb

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the switch relative to the component font size

# ShowLabel  :  logical  =  false

Whether to display the on/off state label next to the switch

# Disabled  :  logical  =  false

Whether the switch is disabled and cannot be interacted with

# focus()  →  out

Programmatically focus the switch

# ValueChanged

Triggered when the user toggles the switch

value char current switch state ('on' or 'off')

# ic.ToggleButton

Latching button that maintains on/off state

# Label  :  string  =  ""

Text label of the button

# Value  :  matlab.lang.OnOffSwitchState  =  "off"

Toggle state

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the button relative to the component font size

# Disabled  :  logical  =  false

Whether the button is disabled and cannot be interacted with

# focus()  →  out

Programmatically focus the button

# ValueChanged

Triggered when the user toggles the button

value char current toggle state after the click ('on' or 'off)

# ic.RadioButton

Single-select radio group

# Items  :  string  =  [ "Option 1", "Option 2", "Option 3" ]

Labels for each radio option

# Value  :  string  =  "Option 1"

Currently selected item

# Label  :  string  =  ""

Optional group label displayed above the options

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the radio buttons relative to the text font size

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# LabelPosition  :  string "right" | "left"  =  "right"

Position of each row label relative to its button

# Orientation  :  string "vertical" | "horizontal"  =  "vertical"

Layout direction of the radio group

# setIcon(item: string, icon: ic.Icon)

Set or replace the icon for a radio item

rb = ic.RadioButton("Items", ["A", "B", "C"]);
icon = ic.Icon("Source", "star");
rb.setIcon("B", icon);
# getIcon(item: string)  →  icon

Get the icon for a radio item

The ic.Icon currently set for the item, or an empty value if no icon is set
# focus()  →  out

Programmatically focus the radio group

# ValueChanged

Triggered when the user selects a different option

value char label of the newly selected item

# ic.SegmentedButton

Group of connected toggle segments, from which one or more can be selected

# Items  :  string  =  [ "Option 1", "Option 2", "Option 3" ]

Text labels for each segment

# Value  :  string  =  "Option 1"

List of currently selected items (in Items)

# Multiselect  :  logical  =  false

Whether multiple segments can be selected at the same time

# ShowLabels  :  logical  =  true

Whether to display text labels. If disabled, only the icons will be shown

# Variant  :  string "primary" | "secondary" | "destructive"  =  "primary"

Visual style variant

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the segments relative to the component font size

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# IconPosition  :  string "left" | "right"  =  "left"

Position of the icon relative to the text label of each toggle segment

# setIcon(item: string, icon: ic.Icon)

Set, replace or remove the icon for a segment

sb = ic.SegmentedButton("Items", ["Bold", "Italic", "Underline"]);
sb.setIcon("Bold", ic.Icon("bold"));
# getIcon(item: string)  →  icon

Get the icon for a segment

The ic.Icon object in the segment, or empty if there is no icon
# onMultiselectChanged()
# focus()  →  out

Programmatically focus the segmented button

# ValueChanged

Triggered when the user selects or deselects a segment

# ic.Slider

Numeric slider input control

# Value  :  double  =  0

Current value of the slider

# Min  :  double  =  0

Minimum value achieved when the thumb is at the leftmost (or bottommost) position

# Max  :  double  =  100

Maximum value achieved when the thumb is at the rightmost (or topmost) position

# Step  :  double  =  1

Step increment for snapping the thumb

# Disabled  :  logical  =  false

Whether the slider is disabled and cannot be interacted with

# Orientation  :  string "horizontal" | "vertical"  =  "horizontal"

Layout direction of the slider

# ShowValue  :  logical  =  false

Whether to display a text label with the current value of the slider thumb

# LabelPosition  :  string "top" | "bottom" | "left" | "right"  =  "top"

Position of the value label relative to the slider (if ShowValue is true)

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the slider track and thumb relative to the component font size

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Color variant of the slider

# Thumb  :  string "fader" | "circle" | "square"  =  "fader"

Style of the slider thumb

# ShowTicks  :  logical  =  false

Whether to display graduation tick marks along the slider track

# TickInterval  :  double  =  0

Spacing between tick marks. If the interval is 0, tick marks automatically align with the step increments.

# focus()  →  out

Programmatically focus the slider thumb

# ValueChanging

Triggered continuously while the user interacts with the slider (drag or keyboard)

value double current slider value

# ic.RangeSlider

Dual-thumb slider for selecting a numeric range (see also: ic.Slider)

# Low  :  double  =  0

Current lower value of the selected range

# High  :  double  =  100

Current upper value of the selected range

# Min  :  double  =  0

Minimum value of the track

# Max  :  double  =  100

Maximum value of the track

# Step  :  double  =  1

Step increment for snapping the thumbs

# Disabled  :  logical  =  false

Whether the range slider is disabled and cannot be interacted with

# Orientation  :  string "horizontal" | "vertical"  =  "horizontal"

Layout direction of the slider

# ShowValue  :  logical  =  false

Whether to display a label with the current value(s) of the slider thumbs

# LabelPosition  :  string "top" | "bottom" | "side"  =  "top"

Position of the value labels relative to the slider

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimensions of the slider track and thumbs relative to the component font size

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Color variant of the slider

# Thumb  :  string "fader" | "circle" | "square"  =  "fader"

Style of the slider thumb

# ShowTicks  :  logical  =  false

Whether to display graduation tick marks along the slider track

# TickInterval  :  double  =  0

Spacing between tick marks (if 0, they automatically align with the step increments)

# focus()  →  out

Programmatically focus the low thumb

# LowChanging

Event triggered when the low thumb value is changing

value double current low thumb value
# HighChanging

Event triggered when the high thumb value is changing

value double current high thumb value

# ic.Knob

Rotary knob input control.

# Value  :  double  =  0

Current value of the knob

# Min  :  double  =  0

Minimum value

# Max  :  double  =  100

Maximum value

# Step  :  double  =  1

Step increment

# Disabled  :  logical  =  false

Whether the knob is disabled and cannot be interacted with

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the knob relative to the text font size

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Color variant of the knob

# ShowValue  :  logical  =  false

Whether to display the current value in text form

# ShowTrack  :  logical  =  true

Whether to display an arc ring along the knob from the Min position to the current value

# ShowTicks  :  logical  =  false

Whether to display graduation tick marks. Ticks are evenly spaced between the Min and Max values, with a total count specified by TickCount

# TickCount  :  double  =  12

Number of tick marks to display if ShowTicks is true

# LabelFormat  :  string  =  "%d"

Sprintf-style format string for the value label

# LabelPosition  :  string "inside" | "bottom"  =  "bottom"

Position of the value label relative to the knob

# focus()  →  out

Programmatically focus the knob

# ValueChanging

Triggers continuously while the user interacts with the knob (drag or keyboard)

value double current knob value

# ic.ColorPicker

Color selection control. Displays a colored swatch that opens a popup editor with a hue slider, an alpha slider, and optional preset color swatches.

# Value  :  string  =  "#3b82f6"

Current color value as a string

# ShowAlpha  :  logical  =  false

Whether to show the alpha slider and include alpha in the Value

# Format  :  string "hex" | "rgb" | "hsl"  =  "hex"

Display format for the color value

# ShowLabel  :  logical  =  false

Whether to display the color value in text form next to the swatch

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the swatch trigger, relative to its font size

# Presets  :  string  =  string.empty

List of preset colors to show as additional swatches in the popup editor. Each color should be a valid CSS color string

# PopupPosition  :  string "bottom" | "top" | "left" | "right" | "best"  =  "best"

Position where the popup opens relative to the swatch. If "best", the position will be automatically chosen to fit within the viewport.

# focus()  →  out

Programmatically focus the swatch trigger

# ValueChanging

Triggered while the color value is being changed (this differs from Value in that it is not debounced, so it fires on every change as the user drags the sliders in the editor)

value char current color string in the active format
# Opened

Fires when the color editor popup opens

# Closed

Fires when the color editor popup closes

# Display Components

# ic.Label

Displays text with configurable typography and styling options

# Text  :  string  =  ""

The text content to display

# Variant  :  string "body" | "heading" | "caption" | "code" | "overline"  =  "body"

Semantic variant that determines the default styling of the label

# Size  :  string "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl"  =  "md"

Text size, scaling the base font size of the label (i.e "xs" applies a 0.625 scaling factor to the base font size, "lg" applies a 1 scaling factor, etc.)

# Weight  :  string "normal" | "medium" | "semibold" | "bold"  =  "normal"

Font weight

# Align  :  string "left" | "center" | "right"  =  "left"

Text alignment within the label

# Color  :  string "default" | "muted" | "primary" | "destructive" | "success" | "warning"  =  "default"

Text color specified as a semantic color name

# Truncate  :  logical  =  false

Whether to truncate overflowing text with ellipsis

# Selectable  :  logical  =  true

Whether the text can be selected and copied

# ic.Icon

Display an SVG icon read from an ic.Asset.

# Source  :  ic.Asset  =  ic.Asset( "info" )

Icon asset source

# Size  =  16

Size of the icon, in pixels or CSS string. The size is applied to both the width and height of the icon

# Color  :  string  =  ""

Color of the icon, used for the stroke of line icons and the fill of solid icons. Can be any CSS color string. An empty string means to inherit the color from the parent container

# StrokeWidth  :  double  =  2

Stroke width for line icons, in pixels

# list()  →  names

Returns all available Lucide icon names.

names = ic.Icon.list()           % all ~1900 icons
names(contains(names, "arrow"))  % filter by keyword
# browse()

Opens the Lucide icon gallery in the browser.

ic.Icon.browse()
# gallery()  →  fig

Display all available Lucide icons in a paginated gallery.

fig = ic.Icon.gallery()
# lucideDir()  →  p

Locates the lucide-static icons directory relative to this file

# ic.Image

Displays a raster or vector image in any of the following formats: PNG, JPG, GIF, WebP, SVG, BMP.

# Source  :  ic.Asset  =  ic.Asset()

Image asset source

# Width  =  "auto"

Width of the image, in pixels or as a CSS string

# Height  =  "auto"

Height of the image, in pixels or as a CSS string

# ObjectFit  :  string "contain" | "cover" | "fill" | "none" | "scale-down"  =  "contain"

Way in which the image fills its container. See the Mozilla Developer documentation for details

# BorderRadius  =  2

Corner rounding radius, in pixels or as a CSS string

# Opacity  :  double  =  1

Image opacity, between 0 (fully transparent) and 1 (fully opaque)

# Clicked

Triggered when the image is clicked

# Loaded

Triggered when the image finishes loading successfully

# Error

Triggered when the image fails to load

# ic.ProgressBar

Linear progress indicator to indicate the completion

# Value  :  double  =  0

Current value of the progress, clipped to the range defined by Min and Max

# Min  :  double  =  0

Minimum value of the range, representing 0% fill of the progress bar

# Max  :  double  =  100

Maximum value of the range, representing 100% fill of the progress bar

# Indeterminate  :  logical  =  false

Whether progress is indeterminate (unknown value). If true, shows an infinite loading animation instead of a finite progress

# Striped  :  logical  =  false

Whether to show diagonal stripes pattern in the progress bar

# Animated  :  logical  =  false

Whether stripes should animate (only applies when Striped is set to true)

# Size  :  string "sm" | "md" | "lg"  =  "md"

Height size of the progress bar, relative to the font size

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive" | "gradient"  =  "primary"

Color scheme of the progress bar

# Gradient  :  struct  =  struct( 'color', { '#ef4444', '#f59e0b', '#22c55e' }, 'stop', { 0, 50, 100 } )

Color gradient stops for progressbar, specified as a struct array with fields: color (CSS color string) and stop (numeric percentage). Only applies when Variant is set to "gradient"

# ShowLabel  :  logical  =  false

Whether to display a label with the progress.

Label formatting and position can be customized with the LabelFormat and LabelPosition properties

# LabelFormat  :  string  =  "%d%%"

Sprintf-style format for the label.

Supports %d (integer), %f (float), %.Nf (N decimals), %% (literal %)

# LabelPosition  :  string "left" | "right"  =  "right"

Position of the label relative to the progress bar.

When the Orientation is set to "vertical", the value of the position will be mapped such that "left" is "top" and "right" is "bottom"

# Orientation  :  string "horizontal" | "vertical"  =  "horizontal"

Layout direction of the progress bar

# styleTrack(varargin)

Convenience method to apply CSS styles directly to the progress track (background portion). See ic.mixin.Styleable for more details on how to specify styles.

pb.styleTrack("backgroundColor", "#e5e7eb");
# styleBar(varargin)

Convenience method to apply CSS styles directly to the progress bar (filled portion). See ic.mixin.Styleable for more details on how to specify styles.

pb.styleBar("backgroundColor", "linear-gradient(to right, #ef4444, #f59e0b, #22c55e)");

# ic.CircularProgressBar

Circular progress indicator to indicate progress

# Value  :  double  =  0

Current value of the progress, clipped to the range defined by Min and Max

# Min  :  double  =  0

Minimum value of the range, representing 0% fill of the progress bar

# Max  :  double  =  100

Maximum value of the range, representing 100% fill of the progress bar

# Indeterminate  :  logical  =  false

Whether progress is indeterminate (unknown value). If true, shows an infinite spinning animation instead of a finite progress

# Size  :  string "sm" | "md" | "lg"  =  "md"

Overall diameter of the circular progress bar, relative to the font size of the component

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive" | "gradient"  =  "primary"

Color variant of the progress arc

# Gradient  :  struct  =  struct( 'color', { '#ef4444', '#f59e0b', '#22c55e' }, 'stop', { 0, 50, 100 } )

Color gradient stops for progress arc, specified as a struct array with fields: color (CSS color string) and stop (numeric percentage). Only applies when Variant is set to "gradient"

# ShowLabel  :  logical  =  false

Whether to display the progress value as a label in the center of the circle

Label formatting can be customized with the LabelFormat property

# LabelFormat  :  string  =  "%d%%"

Sprintf-style format for the label

Supports %d (integer), %f (float), %.Nf (N decimals), %% (literal %)

# StrokeWidth  :  double  =  4

Thickness of the progress arc, in SVG units (the viewBox of the circular progress is 100x100, so a StrokeWidth of 10 means the arc thickness is 10% of the diameter)

# LineCap  :  string "butt" | "round" | "square"  =  "butt"

Shape of the arc endpoints

# ShowTicks  :  logical  =  false

Whether to show graduation tick marks around the ring

Tick marks will be evenly spaced along the circumference of the circle, and the number of ticks can be configured with the TickCount property

# TickCount  :  double  =  12

Number of tick marks around the ring

# StartAngle  :  double  =  0

Angle at which the arc begins, in degrees. The angle is measured clockwise from top (i.e. 0 degrees means the arc starts at 12 o'clock)

# SweepAngle  :  double  =  360

How many degrees the arc spans, in degrees. For example, a SweepAngle of 180 means the arc will span half the circle (e.g. from 12 o'clock to 6 o'clock if StartAngle is 0)

# styleTrack(varargin)

Convenience method to apply CSS styles directly to the progress track (background portion). See ic.mixin.Styleable for more details on how to specify styles.

# styleBar(varargin)

Convenience method to apply CSS styles directly to the progress bar (arc portion). See ic.mixin.Styleable for more details on how to specify styles.

# styleLabel(varargin)

Convenience method to apply CSS styles directly to the label. See ic.mixin.Styleable for more details on how to specify styles.

# ic.Spinner

Animated loading indicator with multiple style variants.

# Kind  :  string "bars" | "dots-wave" | "dots-line" | "ring" | "pulse" | "orbit" | "grid" | "dual-ring" | "cube"  =  "ring"

Animation style of the spinner

# Size  :  string "sm" | "md" | "lg"  =  "md"

Overall size of the spinner, relative to the font size of the component

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Color scheme used for the spinner

# Speed  :  string "slow" | "normal" | "fast"  =  "normal"

Animation speed

# Layout Components

# ic.FlexContainer

Flexbox layout container for arranging child components in a single axis

# Direction  :  string "row" | "column" | "row-reverse" | "column-reverse"  =  "row"

Main axis direction for laying out children

# Wrap  :  string "nowrap" | "wrap" | "wrap-reverse"  =  "nowrap"

Whether children wrap to new lines when they overflow the main axis

# JustifyContent  :  string "start" | "center" | "end" | "space-between" | "space-around" | "space-evenly"  =  "start"

Alignment of children along the main axis

# AlignItems  :  string "start" | "center" | "end" | "stretch" | "baseline"  =  "stretch"

Alignment of children along the cross axis

# Gap  =  8

Spacing between child elements, in pixels or as a CSS string

# Padding  =  0

Internal padding, in pixels or as a CSS string

# ic.GridContainer

Css grid layout container for arranging child components in a two-dimensional grid

# Columns  =  "1fr"

Column track sizes as a CSS grid-template-columns string

# Rows  =  "auto"

Row track sizes as a CSS grid-template-rows string

# Gap  =  8

Spacing between grid cells, in pixels or as a CSS string

# AlignItems  :  string "start" | "center" | "end" | "stretch" | "baseline"  =  "stretch"

Vertical alignment of items within their grid cells

# JustifyItems  :  string "start" | "center" | "end" | "stretch"  =  "stretch"

Horizontal alignment of items within their grid cells

# AutoFlow  :  string "row" | "column" | "dense" | "row-dense" | "column-dense"  =  "row"

Auto-placement algorithm used when items are not explicitly positioned

# Padding  =  0

Internal padding, in pixels or as a CSS string

# ic.Splitter

Resizable split pane container. Divides space into resizable panes separated by draggable gutters. Use addPane to create panes, then configure the panes properties individually

# Direction  :  string "horizontal" | "vertical"  =  "horizontal"

Split orientation

# GutterSize  :  double  =  5

Size of the draggable gutter between panes, in pixels

# Disabled  :  logical  =  false

Whether resizing is disabled

# Sizes

Current percentage sizes of all panes

# Panes

Array of ic.SplitterPane children

# addPane(props)  →  pane

Add a new pane to the splitter.

The created ic.SplitterPane
p = splitter.addPane(Size=40, MinSize=10);
p.addChild(ic.Label(Text="Content"));
# collapsePane(index: double, direction: string)  →  out

Collapse the pane at the given index

# generatePaneTargets(~, numPanes)  →  targets
# Resized

Fires after pane sizes change

# ic.SplitterPane

Single pane within an ic.Splitter container. Holds sizing constraints and user content for one pane. Create panes via ic.Splitter.addPane, not directly.

# Size  :  double  =  NaN

Percentage size of this pane (0-100). NaN means the size is auto-distributed among remaining panes

# MinSize  :  double  =  0

Minimum percentage size that this pane can be resized to

# MaxSize  :  double  =  100

Maximum percentage size that this pane can be resized to

# SnapSize  :  double  =  0

Snap threshold percentage. When the pane is dragged within MinSize + SnapSize, it snaps to its minimum

# collapse(direction: string)

Collapse this pane to its minimum size.

# ic.TabContainer

Tabbed container with closable, renamable, and reorderable tabs.

# TabOverflow  :  string "scroll" | "wrap" | "menu"  =  "scroll"

How tabs behave when they overflow the tab bar. When "scroll", tab headers remain in a single line and can be scrolled; when "wrap", the tab header bar is wrapped to multiple lines; "menu" makes overflowed tabs are collapsed into a dropdown menu.

# Disabled  :  logical  =  false

Whether all tab interactions are disabled

# DragEnabled  :  logical  =  true

Whether tabs can be reordered via drag-and-drop

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the tab headers relative to the component font size

# SelectedTab  :  string  =  ""

Target string of the currently selected tab (e.g. "tab-0"). Set by the framework when the user clicks a tab

# Tabs

Array of ic.tab.Tab children (read-only)

# Panels

Array of ic.tab.TabPanel children (read-only)

# Selected

The currently selected Tab handle, or empty if none. Use selectTab() to programmatically select a tab.

# NextTabIndex  :  double  =  0

Monotonic counter

# IsRemovingTab  :  logical  =  false

Guard flag: prevents handleTabDestroyed from duplicating cleanup that removeTab already handles.

# addTab(name: string, props.Closable: logical, props.Disabled: logical, props.Icon: ic.Asset)  →  panel, tab

Add a new tab to the container.

The ic.tab.TabPanel (content area) and ic.tab.Tab (header)
tc = ic.TabContainer();
[panel, tab] = tc.addTab("Home", Icon="home", Closable=true);
panel.addChild(ic.Button(Label="Click me"));
# removeTab(tabOrTarget)

Remove and delete a tab from the container. Accepts a ic.tab.Tab handle or a target string

tc.removeTab(tab);
tc.removeTab("tab-2");
# selectTab(tab: ic.tab.Tab)

Programmatically select a tab

tc.selectTab(t2);
# handleTabDestroyed(tab)
# findTabByTarget(target)  →  tab
# ValueChanged

Fires when the selected tab changes

value char target string of the newly selected tab (e.g. 'tab-0')
# TabClosed

Fires when a tab's close button is clicked. The tab is automatically deleted after this event

value char target string of the closed tab
# TabReordered

Fires when tabs are reordered via drag-and-drop

# TabRenamed

Fires when a tab label is edited via double-click

value struct struct with fields 'target' (char) and 'label' (char)

# ic.tab.Tab

Header configuration for a tab within an ic.TabContainer or ic.TileLayout. Tab is not a container, it simply holds the reactive properties for its tab header (label, icon, closable, disabled) and a reference to its paired ic.tab.TabPanel. Create tabs via ic.TabContainer.addTab or ic.TileLayout.addTab, not directly.

# Label  :  string  =  ""

Text displayed in the tab header

# Closable  :  logical  =  false

Whether the tab shows a close button

# Disabled  :  logical  =  false

Whether the tab is disabled and cannot be selected

# Icon  :  ic.Asset  =  ic.Asset.empty

Icon displayed before the label

# Editable  :  logical  =  false

Whether the tab label can be renamed by double-clicking on it

# Panel

Reference to the paired ic.tab.TabPanel

# ic.tab.TabPanel

Content container for a tab within an ic.TabContainer or ic.TileLayout. Add child components to the panel returned by ic.TabContainer.addTab or ic.TileLayout.addTab.

# ic.TileLayout

Tiling tab layout with draggable split areas. A VSCode-style layout where tabs can be dragged to edges to create new split areas. Each area is a tab group with its own selection.

# GutterSize  :  double  =  3

Size of the resize gutter between groups, in pixels

# Size  :  string "sm" | "md" | "lg"  =  "sm"

Dimension of the tab headers relative to the component font size

# Disabled  :  logical  =  false

Whether all interactions are disabled

# DragEnabled  :  logical  =  true

Whether tabs can be dragged between groups

# Tabs

Array of ic.tab.Tab children

# Panels

Array of ic.tab.TabPanel children

# NextTabIndex  :  double  =  0

Monotonic counter

# IsRemovingTab  :  logical  =  false

Guard flag: prevents handleTabDestroyed from duplicating cleanup that removeTab already handles.

# addTab(name: string, props.Closable: logical, props.Disabled: logical, props.Icon: ic.Asset)  →  panel, tab

Add a new tab to the layout.

The ic.tab.TabPanel (content area) and ic.tab.Tab (header)
tl = ic.TileLayout();
[panel, tab] = tl.addTab("Home", Icon="home", Closable=true);
panel.addChild(ic.Button(Label="Click me"));
# removeTab(tabOrTarget)

Remove and delete a tab from the layout. Accepts a Tab handle or a target string (e.g. "tab-0").

# handleTabDestroyed(tab)
# findTabByTarget(target)  →  tab
# TabClosed

Fires when a tab's close button is clicked. The tab is automatically deleted after this event

value char target string of the closed tab
# TabMoved

Fires when a tab is moved between groups via drag-and-drop

value struct struct with fields 'tab' (char), 'fromGroup' (char), and 'toGroup' (char)
# LayoutChanged

Fires on any layout change (split, merge, resize, or move)

value char JSON string representing the current split tree

# ic.Accordion

Collapsible panel container with expandable sections. Each section is an AccordionPanel with its own Label, Icon, and Open state. Panels are added via addPanel and hold child components in their content area.

# Multiple  :  logical  =  true

Whether multiple panels can be open at the same time. When false, opening a panel closes any other open panel

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the panel headers relative to the component font size

# Disabled  :  logical  =  false

Whether all panel interactions are disabled

# Panels

Array of ic.accordion.AccordionPanel children

# NextPanelIndex  :  double  =  0

Monotonic counter

# IsRemovingPanel  :  logical  =  false

Guard flag: prevents handlePanelDestroyed from duplicating cleanup that removePanel already handles.

# addPanel(name: string, props.Open: logical, props.Disabled: logical, props.Icon: ic.Asset)  →  panel

Add a new panel to the accordion.

The created ic.accordion.AccordionPanel
acc = ic.Accordion();
p = acc.addPanel("General", Icon="settings", Open=true);
p.addChild(ic.InputText(Placeholder="Name"));
# removePanel(panelOrTarget)

Remove and delete a panel from the accordion.

acc.removePanel(p);
# expandAll()

Open all panels

# collapseAll()

Close all panels

# handlePanelDestroyed(panel)
# findPanelByTarget(target)  →  panel
# PanelToggled

Fires when a panel is opened or closed by the user

value struct struct with fields 'target' (char) and 'open' (logical)

# ic.accordion.AccordionPanel

Collapsible content panel within an ic.Accordion. Holds the header configuration (label, icon and open state) and acts as a container for child components. Create panels via ic.Accordion.addPanel, not directly.

# Label  :  string  =  ""

Text displayed in the panel header

# Icon  :  ic.Asset  =  ic.Asset.empty

Icon displayed before the label

# Open  :  logical  =  false

Whether the panel content is expanded

# Disabled  :  logical  =  false

Whether the panel is disabled and cannot be toggled

# Overlay Components

# ic.Dialog

Modal overlay with a title, content body, and action buttons. The dialog auto-deletes after submit or close when DestroyOnClose is true.

# Title  :  string  =  ""

Heading text displayed in the dialog header

# Open  :  logical  =  false

Whether the dialog is visible

# Size  :  string "sm" | "md" | "lg" | "xl"  =  "md"

Maximum width of the dialog, relative to the component font size

# Closable  :  logical  =  true

Whether the close button and Escape key are enabled to close and delete the dialog

# CloseOnBackdropClick  :  logical  =  true

Whether clicking the backdrop closes the dialog

# SubmitLabel  :  string  =  "OK"

Text for the submit button. Set to "" to hide the button

# CancelLabel  :  string  =  "Cancel"

Text for the cancel button. Set to "" to hide the button

# DestroyOnClose  :  logical  =  true

Whether the dialog is automatically deleted after the Submitted or Closed event fires

# open()

Programmatically open the dialog

# close()

Programmatically close the dialog

# bindOpen(component, event: string)  →  effect

Utility function to wire a DOM event on a component to open the dialog

# bindSubmit(component, event: string)  →  effect

Utility function to wire a DOM event on a component to trigger the submit action

# bindClose(component, event: string)  →  effect

Utility function to wire a DOM event on a component to close the dialog

# autoDestroy()
# Submitted

Fires when the user clicks the submit button

# Closed

Fires when the user dismisses the dialog (cancel button, close button, Escape, or backdrop click)

# ic.Drawer

ic.mixin.Overlay slide-in panel with a title bar, content body, and optional backdrop.

ic.mixin.Overlay

# Title  :  string  =  ""

Heading text displayed in the drawer header

# Open  :  logical  =  false

Whether the drawer is visible

# Side  :  string "left" | "right" | "top" | "bottom"  =  "right"

Edge from which the drawer slides in

# Size  :  string "sm" | "md" | "lg" | "xl" | "full"  =  "md"

Panel dimension (width or height, depending on Side) relative to the font size of the component. "full" makes the drawer take the entire width/height of the viewport.

# Closable  :  logical  =  true

Whether the close button and Escape key to close the panel are enabled

# Overlay  :  logical  =  true

Whether to show a backdrop behind the panel

# CloseOnBackdropClick  :  logical  =  true

Whether clicking the backdrop closes the drawer

# open()

Programmatically open the drawer

# close()

Programmatically close the drawer without firing the Closed event

# bindOpen(component, event: string)  →  effect

Utility function to wire a DOM event on a component to open the drawer

Uses ic.mixin.Effectable.jsEffect under the hood to inject a JavaScript event listener on the specified component that sets the drawer's open prop to true when triggered

# bindClose(component, event: string)  →  effect

Utility function to wire a DOM event on a component to close the drawer. See bindOpen for details on how this function works under the hood

# Closed

Fires when the user dismisses the drawer (close button, Escape, or backdrop click)

# ic.Popover

Floating panel anchored to a trigger component. The popover opens when the user clicks the trigger and closes on click-outside or presses Escape. Add children to the panel via the ic.popover.Panel returned by the Popover's Panel property.

# Open  :  logical  =  false

Whether the panel is visible

# Side  :  string "top" | "right" | "bottom" | "left"  =  "bottom"

Edge of the trigger where the panel appears

# Align  :  string "start" | "center" | "end"  =  "center"

Alignment of the panel along the side axis

# Offset  :  double  =  4

Gap in pixels between trigger and panel

# AvoidCollisions  :  logical  =  true

Whether to reposition the panel to stay within the viewport

# Trigger

The trigger component that anchors the popover

# Panel

The content panel container

# IsDeleting  :  logical  =  false

Internal flag used during deletion

# open()

Programmatically open the popover

# close()

Programmatically close the popover without firing the Closed event

# bindClose(component, event: string)  →  effect

Utility function to wire a DOM event on a component to close the popover and fire the Closed event.

# Opened

Fires when the panel becomes visible via user click on the trigger

# Closed

Fires when the panel is dismissed (click-outside, Escape, or bindClose)

# ic.popover.Panel

Content container for an ic.Popover. Add child components here via ic.core.ComponentContainer.addChild. Created automatically by the Popover constructor.

# ic.Toast

Ephemeral notification message. Displays a brief message that auto-dismisses after Duration seconds. The toast auto-deletes when closed (either by timeout, close button, or dismiss).

# Value  :  string  =  ""

Message text displayed in the toast

# Variant  :  string "primary" | "success" | "warning" | "destructive" | "info"  =  "primary"

Visual style variant

# Duration  :  double  =  3

Seconds until auto-dismiss (use 0 for a persistent toast that must be dismissed manually)

# Position  :  string "top" | "bottom"  =  "bottom"

Vertical position on screen

# Closable  :  logical  =  true

Whether to show the close button

# Icon  :  ic.Asset  =  ic.Asset.empty

Custom icon displayed before the message. When empty, a default icon is shown based on the variant

# ClosedListener  :  event.listener
# dismiss()  →  out

Programmatically dismiss and remove the toast

t = ic.Toast("Value", "Data saved successfully!", "Variant", "success");
frame.addChild(t);
pause(2);
t.dismiss();
# Closed

Fires when the toast is dismissed (timeout, close button, or programmatic dismiss). The toast is automatically deleted after this event

# Menu

# ic.mixin.HasContextMenu

< [ handle]

Mixin that adds a ContextMenuAction event to a component. Any component inheriting this mixin gets the event bridged automatically by the IC framework. The event payload varies by consumer

# ContextMenuAction

Fires when the user clicks a context menu item.

item char the Key of the selected #ic.menu.Item, or "key:value" for #ic.menu.ColorEntry / #ic.menu.TextEntry

# ic.menu.Entry

< [ matlab.mixin.Heterogeneous, matlab.mixin.SetGetExactNames, ic.event.TransportData]

Abstract base class for context menu entries. Enables heterogeneous arrays so different entry types can be mixed.

# jsonencode(varargin)  →  json

Serialize the entry array to JSON via struct conversion

# getDefaultScalarElement()  →  obj

# ic.menu.Item

Clickable leaf action in a context menu. When clicked, the parent component's ic.mixin.HasContextMenu.ContextMenuAction event fires with the key in its payload.

# Key  :  string

Unique action identifier, returned in the ic.mixin.HasContextMenu.ContextMenuAction event payload

# Label  :  string  =  ""

Display text shown in the menu

# Icon  :  ic.Asset  =  ic.Asset.empty

Icon displayed before the label

# Disabled  :  logical  =  false

Whether the item is grayed out and cannot be clicked

# Shortcut  :  string  =  ""

Display-only keyboard shortcut hint shown on the right side of the item

# ic.menu.Folder

Submenu container in a context menu. Displays a label that expands into a nested list of child entries on hover.

# Label  :  string  =  ""

Display text for the submenu trigger

# Icon  :  ic.Asset  =  ic.Asset.empty

Icon displayed before the label

# Children  :  ic.menu.Entry  =  ic.menu.Entry.empty

Nested menu entries displayed when the folder is expanded

# Disabled  :  logical  =  false

Whether the folder is grayed out and cannot be expanded

# ic.menu.Separator

Visual divider line in a context menu.

# ic.menu.ColorEntry

Inline color picker in a context menu. Displays a color swatch next to a label. The picked color is returned as "key: #hex" in the ContextMenuAction event payload.

# Key  :  string

Unique action identifier. The ic.mixin.hasContextMenu.ContextMenuAction payload contains an entry with Key=value

# Label  :  string  =  ""

Display text shown next to the color swatch

# Value  :  string  =  "#000000"

Color value as a hex string

# ic.menu.TextEntry

Inline text input in a context menu. Displays a text field next to a label. The entered text is returned as "key:value" in the ic.mixin.HasContextMenu.ContextMenuAction event payload when the user presses Enter or the input loses focus.

# Key  :  string

Unique action identifier. The ic.mixin.HasContextMenu.ContextMenuAction payload contains a field with Key= value

# Label  :  string  =  ""

Display text shown next to the input

# Value  :  string  =  ""

Initial text value

# Placeholder  :  string  =  ""

Ghost text shown when the input is empty

# Panel

# ic.Panel

Simple container for grouping child components.

# Renderers

# ic.Markdown

Renders Markdown text as formatted HTML using markdown-it v14.

# Value  :  string  =  ""

Markdown source text

# Height  =  "100%"

Height of the container, in pixels or as a CSS size string

# LineWrapping  :  logical  =  true

Whether to soft-wrap long lines (false = horizontal scroll)

# Sanitize  :  logical  =  true

Whether to strip raw HTML tags from the rendered output

# CodeHighlight  :  logical  =  true

Syntax highlighting in fenced code blocks (uses highlight.js v11)

# Math  :  logical  =  false

KaTeX v0.16 math rendering: $inline$ and $$block$$

# TaskLists  :  logical  =  true

GitHub-style task lists: - [x] done (uses markdown-it-task-lists internally)

# Footnotes  :  logical  =  true

Footnote syntax: [^1] (uses markdown-it-footnote internally)

# SubSuperscript  :  logical  =  true

Subscript H~2~O and superscript x^2^ (uses markdown-it-sub and markdown-it-sup internally)

# Emoji  :  logical  =  true

Emoji shortcodes: :smile: →  (uses markdown-it-emoji internally)

# Containers  :  logical  =  true

Admonition blocks: :::warning (uses markdown-it-container internally)

# Mark  :  logical  =  true

Highlighted text: ==marked== (uses markdown-it-mark internally)

# DefinitionLists  :  logical  =  true

Definition list syntax: Term\n: Definition (uses markdown-it-deflist internally)

# Abbreviations  :  logical  =  true

Abbreviation tooltips: *[HTML]: Hyper Text Markup Language (uses markdown-it-abbr)

# Insert  :  logical  =  true

Underlined/inserted text: ++inserted++ (uses markdown-it-ins internally)

# HeadingAnchors  :  logical  =  true

Auto-generate id anchors on headings (uses markdown-it-anchor internally)

# Attributes  :  logical  =  false

Custom classes/attributes: {.class #id attr=val} (uses markdown-it-attrs internally)

# TableOfContents  :  logical  =  false

Render a table of contents via [[toc]] (uses markdown-it-table-of-contents internally)

# Mermaid  :  logical  =  false

Render ```mermaid code blocks as diagrams (uses Mermaid.js v10 internally)

# handleFetchImage(~, data)  →  result

Resolve an image URL or local file path as an ic.Asset.

# ic.Latex

Renders LaTeX markup as formatted PDF pages. Compilation happens client-side via SwiftLaTeX's PdfTeX WASM engine (no internet required). Images referenced in the source are resolved by MATLAB and embedded as a binary ic.Asset

Bundled packages:

  • Math: amsmath, amssymb, mathtools, bm, xfrac, eucal, eufrak
  • Structure: geometry, fancyhdr, enumitem, booktabs, multicol, tabularx, caption, subcaption, longtable, lscape
  • Graphics: tikz (+pgf, shapes, positioning, arrows), graphicx, xcolor
  • Listings: listings (+lstlang1/2/3)
  • Refs: hyperref, nameref, url, backref
  • Utils: etoolbox, calc, xparse, expl3, verbatim, makeidx
  • Classes: article, report, book, letter, proc, slides

Packages not in this list are not available and compilation will fail with "File 'xxx.sty' not found"

# Value  :  string  =  ""

Source text that will be compiled as LaTeX

# Height  =  "100%"

Height of the container, in pixels or as a CSS size string

# ToolbarOnHover  :  logical  =  true

Whether to show the zoom/export toolbar on mouse hover

# PageGap  :  double  =  16

Vertical gap between rendered pages, in pixels

# RenderOnChange  :  logical  =  true

Whether to automatically re-render when Value changes

# NumPages  :  double  =  0

Total number of rendered pages (set by the view after compilation)

# zoomIn()  →  out

Increase zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# zoomOut()  →  out

Decrease zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# resetView()  →  out

Reset to initial zoom level

A ic.async.Promise with the fulfillment status from the view
# scrollToPage(pageNum: double)  →  out

Scroll to a specific page number

A ic.async.Promise with the fulfillment status from the view
# exportPdf(filepath: string)  →  out

Save the compiled PDF to a file, or open a save dialog if no path is given

A ic.async.Promise with the fulfillment status from the view
l.exportPdf("output.pdf")  % save to path
l.exportPdf()              % open save dialog
# render()  →  out

Trigger a render of the current Value

A ic.async.Promise with the fulfillment status from the view
# handleResolveImages(data)  →  result

Resolve image files requested by the LaTeX WASM compiler. returns ic.Asset objects

# handleSavePdf(~, data)  →  result
# Compiled

Fires after successful compilation

value struct compilation result. value.numPages (double) is the page count
# Error

Fires when compilation fails

value struct error details: value.message (char) is the error message

# ic.Typst

Renders Typst markup as formatted SVG pages. Compilation happens client-side via typst.ts v0.7 WASM. Typst Universe packages are downloaded by MATLAB on demand as they appear in the value. Images referenced in the source are resolved by MATLAB and embedded as binary ic.Asset.

# Value  :  string  =  ""

Typst source text

# Height  =  "100%"

Height of the container, in pixels or as a CSS size string

# ToolbarOnHover  :  logical  =  true

Whether to show the zoom/export toolbar on mouse hover

# PageWidth  :  string  =  ""

Typst page width override (e.g. "210mm", "8.5in"); empty = Typst default

# PageHeight  :  string  =  ""

Typst page height override (e.g. "297mm", "11in"); empty = Typst default

# PageMargin  :  string  =  ""

Typst page margin override (e.g. "1cm", "(x: 1cm, y: 2cm)")

# FontSize  :  string  =  ""

Base font size override (e.g. "11pt", "14pt")

# FontFamily  :  string  =  ""

Font family name override (must be available in the WASM renderer)

# PageGap  :  double  =  16

Vertical gap between rendered pages, in pixels

# Packages  :  string  =  string.empty

Typst Universe packages to pre-load, as version-pinned spec strings (e.g. "@preview/cetz:0.3.4").

Packages referenced via #import in the source are detected automatically; use this property for transitive dependencies or pre-warming.

# RenderOnChange  :  logical  =  true

Whether to automatically re-render when Value changes

# NumPages  :  double  =  0

Total number of rendered pages (set by the view after compilation)

# PackageCache
# PackageDeps

Containers.Map: "ns/name/ver" → base64 tar.gz string

# zoomIn()  →  out

Increase zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# zoomOut()  →  out

Decrease zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# resetView()  →  out

Reset to initial zoom level

A ic.async.Promise with the fulfillment status from the view
# scrollToPage(pageNum: double)  →  out

Scroll to a specific page number

A ic.async.Promise with the fulfillment status from the view
# exportPdf(filepath: string)  →  out

Compile to PDF and save to a file, or open a save dialog if no path is given

A ic.async.Promise with the fulfillment status from the view
t.exportPdf("output.pdf")  % save to path
t.exportPdf()              % open save dialog
# render()  →  out

Trigger a render of the current Value

A ic.async.Promise with the fulfillment status from the view
# scanImportsFromTarGz(tarGzFile)  →  deps

Extract a tar.gz and scan .typ files for #import "@ns/pkg:ver". Returns a cell array of structs with namespace, name, version.

# handleResolveImages(data)  →  result

Resolve image files requested by the Typst WASM compiler. returns ic.Asset objects

# handleResolvePackages(data)  →  result

Resolve Typst universe packages including transitive deps. Downloads tar.gz from the CDN, scans .typ files for #import statements, and recursively resolves dependencies.

# resolvePackageTree(initialSpecs)  →  outSpecs, outTarballs, outErrors

BFS resolution of packages and their transitive dependencies.

# handleSavePdf(~, data)  →  result
# Compiled

Fires after successful compilation

value struct compilation result. value.numPages (double) is the page count
# Error

Fires when compilation fails

value struct error details. value.message (char) is the error message

# ic.Mermaid

Interactive diagram renderer using Mermaid.js v10. Renders diagram definitions as interactive SVGs with pan/zoom. Supports all Mermaid diagram types: flowcharts, sequence, class, state, ER, Gantt, pie, and more. Colors derive from IC theme variables automatically. All rendering is client-side.

# Value  :  string  =  ""

Mermaid diagram definition text

# Height  =  "100%"

Height of the container, in pixels or as a CSS size string

# ToolbarOnHover  :  logical  =  true

Whether to show the zoom/reset toolbar on mouse hover

# HtmlLabels  :  logical  =  true

Whether to use HTML labels in nodes for richer text wrapping

# Wrap  :  logical  =  true

Whether to auto-wrap long text in nodes and messages

# DarkMode  :  logical  =  false

Whether to use Mermaid's dark color scheme

# Config  =  struct()

Diagram-specific Mermaid configuration.

# RenderOnChange  :  logical  =  true

Whether to automatically re-render when Value changes

# zoomIn()  →  out

Increase zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# zoomOut()  →  out

Decrease zoom level by one step

A ic.async.Promise with the fulfillment status from the view
# resetView()  →  out

Reset pan and zoom to the initial state

A ic.async.Promise with the fulfillment status from the view
# render()  →  out

Programmatically trigger a render of the current Value

A ic.async.Promise with the fulfillment status from the view

Mermaid Configs

# ic.mermaid.FlowchartConfig

Configuration for Mermaid flowchart diagrams. Pass an instance to ic.Mermaid.Config to customize layout and appearance.

# NodeSpacing  :  double  =  50

Horizontal gap between nodes on the same level, in pixels

# RankSpacing  :  double  =  50

Vertical gap between nodes on different levels, in pixels

# Curve  :  string "basis" | "linear" | "rounded" | "monotoneX"  =  "rounded"

Edge drawing style

# Padding  :  double  =  15

Space between label text and node border, in pixels

# DiagramPadding  :  double  =  20

Padding around the entire diagram, in pixels

# WrappingWidth  :  double  =  200

Maximum text width before wrapping inside nodes, in pixels

# jsonencode(varargin)  →  json

# ic.mermaid.GanttConfig

Configuration for Mermaid Gantt chart diagrams. Pass an instance to ic.Mermaid.Config to customize layout and appearance.

# BarHeight  :  double  =  20

Height of task bars, in pixels

# BarGap  :  double  =  4

Gap between task bars, in pixels

# TopPadding  :  double  =  50

Space above the chart area, in pixels

# LeftPadding  :  double  =  75

Space reserved for section labels on the left, in pixels

# RightPadding  :  double  =  75

Space reserved for section labels on the right, in pixels

# FontSize  :  double  =  11

Font size for text in the chart, in pixels

# SectionFontSize  :  double  =  11

Font size for section labels, in pixels

# AxisFormat  :  string  =  "%Y-%m-%d"

D3 time format string for the x-axis labels

# TopAxis  :  logical  =  false

Whether to show date labels on the top axis instead of the bottom

# DisplayMode  :  string "" | "compact"  =  ""

Row packing mode: "" for default, "compact" to pack tasks on fewer rows

# Weekday  :  string "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday"  =  "sunday"

Which day starts the week for week-based intervals

# jsonencode(varargin)  →  json

# ic.mermaid.SequenceConfig

Configuration for Mermaid sequence diagrams. Pass an instance to ic.Mermaid.Config to customize layout and appearance.

# ActorMargin  :  double  =  50

Horizontal gap between actor boxes, in pixels

# MessageMargin  :  double  =  35

Vertical gap between messages, in pixels

# MirrorActors  :  logical  =  true

Whether to repeat actor boxes at the bottom of the diagram

# ShowSequenceNumbers  :  logical  =  false

Whether to number each message arrow

# RightAngles  :  logical  =  false

Whether to use square corners instead of curved arrows

# Wrap  :  logical  =  false

Whether to auto-wrap long message text

# HideUnusedParticipants  :  logical  =  false

Whether to hide actors with no messages

# ActivationWidth  :  double  =  10

Width of activation rectangles, in pixels

# NoteMargin  :  double  =  10

Margin around note boxes, in pixels

# MessageAlign  :  string "left" | "center" | "right"  =  "center"

Text alignment for multiline messages

# NoteAlign  :  string "left" | "center" | "right"  =  "center"

Text alignment for notes

# Width  :  double  =  150

Width of actor boxes, in pixels

# Height  :  double  =  50

Height of actor boxes, in pixels

# jsonencode(varargin)  →  json

# ic.PDFViewer

PDF viewer with zoom and page navigation controls, powered by pdf.js v4. Accepts a local file path or URL as Value. The toolbar can be fixed or shown only on hover.

# Value  :  ic.Asset  =  ic.Asset()

PDF source as a file path or URL

# ToolbarMode  :  string "toolbar" | "hover"  =  "toolbar"

Toolbar display mode: "toolbar" (always visible) or "hover" (appears on mouse hover)

# ShowZoomControls  :  logical  =  true

Whether to show zoom in/out buttons and zoom percentage

# ShowPageControls  :  logical  =  true

Whether to show page navigation buttons and page indicator

# ShowFitButton  :  logical  =  true

Whether to show the fit-to-width button

# ShowRotateButton  :  logical  =  false

Whether to show the rotate button

# Page  :  double  =  1

Current page number

# Zoom  :  double  =  100

Zoom level as a percentage (100 = actual size)

# Height  =  "100%"

Height of the viewer, in pixels or as a CSS size string

# NumPages  :  double  =  0

Total number of pages in the document (set by the view after loading)

# nextPage()  →  out

Navigate to the next page

A ic.async.Promise with the fulfillment status from the view
# previousPage()  →  out

Navigate to the previous page

A ic.async.Promise with the fulfillment status from the view
# zoomIn()  →  out

Increase zoom level by 25%

A ic.async.Promise with the fulfillment status from the view
# zoomOut()  →  out

Decrease zoom level by 25%

A ic.async.Promise with the fulfillment status from the view
# fitWidth()  →  out

Fit the page width to the viewer width

A ic.async.Promise with the fulfillment status from the view
# fitPage()  →  out

Fit the entire page within the viewer

A ic.async.Promise with the fulfillment status from the view
# PageChanged

Fires when the user navigates to a different page

value double the new page number
# ZoomChanged

Fires when the user changes the zoom level

value double the new zoom level as a percentage
# Loaded

Fires when the PDF document finishes loading

numPages double total number of pages in the document
# Error

Fires when the PDF document fails to load

error char error message string

# Editors

# ic.CodeEditor

Code editor with syntax highlighting. Powered by CodeMirror 6 Supports Matlab, JavaScript, Markdown, CSS, Typst, LaTeX, and plain (no highlighting) text languages. The editor can be configured with features like line numbers, line wrapping, bracket matching, code folding, multiple selections, and more,

# Value  :  string  =  ""

Editor text content

# Language  :  string "matlab" | "javascript" | "markdown" | "css" | "typst" | "latex" | "plain"  =  "matlab"

Syntax language for highlighting

# Height  =  "100%"

Editor heigh, as a pixel value or a CSS string

# ZebraStripes  :  logical  =  false

Display alternating line backgrounds. The amount of lines between stripes can be configured with ZebraStripeStep

# LineNumbers  :  logical  =  true

Whether to show line numbers in the gutter

# LineWrapping  :  logical  =  false

Enable wrapping long lines onto multiple visual lines

# HighlightActiveLine  :  logical  =  true

Whether to highlight the line with the cursor

# ReadOnly  :  logical  =  false

Whether the user is blocked from interacting with the editor

# TabSize  :  double  =  4

Number of white spaces per tab stop

# Placeholder  :  string  =  ""

Ghost text shown when the editor is empty

# FontSize  :  double  =  0

Editor font size in pixels (0 for default)

# BracketMatching  :  logical  =  true

Whether to highlight the matching bracket of the one next to the cursor

# CodeFolding  :  logical  =  false

Display code folds in the gutter and enable fold commands

# ShowSearch  :  logical  =  false

Open the search panel. Can also be triggered by Ctrl+F / Cmd+F when the editor is focused

# HighlightSelectionMatches  :  logical  =  false

Highlight other occurrences of selected text

# CloseBrackets  :  logical  =  false

Automatically close brackets and quotes after typing the opening character

# AllowMultipleSelections  :  logical  =  false

Whether to allow multiple cursors for editing multiple selections at once

# ZebraStripeStep  :  double  =  2

Amount of lines between stripes

# UneditableLines  :  double  =  [ ]

Line numbers locked from editing. Adding new lines above or below will adjust the line numbers accordingly, so the user will not be able to directly edit these lines

# HighlightedLines  :  double  =  [ ]

Line numbers with a highlighted background

# Rulers  :  double  =  [ ]

Column positions for vertical ruler lines

# IndentGuides  :  logical  =  false

Whether to show vertical indent guide lines on code blocks

# ScrollPastEnd  :  logical  =  false

Allow scrolling beyond the last line

# ShowStatusBar  :  logical  =  true

Display a custom status bar at the bottom of the editor showing the current cursor position and the editor language

# LineCount  :  double  =  0

Total number of lines in the document

# CursorLine  :  double  =  1

Current cursor line

# CursorColumn  :  double  =  1

Current cursor column

# SelectionCount  :  double  =  1

Number of active selections

# focus()  →  out

Give keyboard focus to the editor

# blur()  →  out

Remove keyboard focus from the editor

# gotoLine(line: double)  →  out

Move the cursor to the beginning of the specified line

# setSelection(fromLine: double, fromCol: double, toLine: double, toCol: double)  →  out

Set the cursorselection range (square like - fromLine:fromCol to toLine:toCol)

# getSelection()  →  out

Get the text in the current selection

# replaceSelection(text: string)  →  out

Replace the contents of the current selection with text

# undo()  →  out

Undo the last edit. Can be triggered by Ctrl+Z / Cmd+Z when the editor is focused

# redo()  →  out

Redo the last undone edit. Can be triggered by Ctrl+Y / Cmd+Shift+Z when the editor is focused

# foldAll()  →  out

Fold all collapsible blocks of code

# unfoldAll()  →  out

Unfold all collapsed blocks of code

# scrollToLine(line: double)  →  out

Scroll the viewport the specified line

# ValueChanged

Triggered when the document content changes

# SelectionChanged

Fires when the cursor or selection moves

# FocusChanged

Fires when the editor gains or loses focus

# ic.RichEditor

Rich wysiwyg text editor powered by TipTap. Use the toolbar or markdown syntax for formatting. Type a slash (/) to see the list of available content blocks, including headings, lists, tables, callouts, and more. Equations (inside $...$ or $$...$$) are rendered using KaTeX. Code blocks support syntax highlighting for many programming languages. Links will be automatically detected and can be opened in the system web browser. Images can be inserted from the local file system or by pasting a URL, and will be fetched by MatLab and embedded as base64-encoded data URIs.

# Value  :  string  =  ""

Content of the editor as an HTML string

# Height  =  "100%"

> container height, in pixels or as a CSS string

# ReadOnly  :  logical  =  false

Whether the user is blocked from editing the content

# Placeholder  :  string  =  ""

Ghost text displayed when editor is empty

# Disabled  :  logical  =  false

Disable interaction and impede focus

# ShowToolbar  :  logical  =  true

Show/hide the fixed top toolbar with the most common formatting options

# ShowToc  :  logical  =  true

Show/hide the table of contents on the sidebar

# FocusMode  :  logical  =  false

When enabled, the editor will dim all but the current line or block to help focus

# MaxLength  :  double  =  Inf

Content character limit (Inf = unlimited)

# WordCount  :  double  =  0

Total word count

# CharacterCount  :  double  =  0

Total character count

# IsFocused  :  logical  =  false

Whether the editor has keyboard focus

# focus()  →  out

Give keyboard focus to the editor

# blur()  →  out

Remove keyboard focus from the editor

# clear()  →  out

Clear all editor content

# insertContent(html: string)  →  out

Insert HTML at the current cursor position

# getMarkdown()  →  out

Convert current content to Markdown

An ic.Promise that resolves to the Markdown string
# exportPdf(filepath: string)  →  out

Export the editor content as a PDF file. If a filepath is provided, the PDF will be saved to that location. If no filepath is provided, a save dialog will prompt the user to choose a location.

# handleBrowseImage(~)  →  result

Open a file dialog to select an image and return as ic.Asset.

# handleSavePdf(~, data)  →  result

Save the provided base64-encoded PDF content to a file. Will open a save dialog if no filepath is provided.

# handleFetchImage(~, data)  →  result

Resolve an image URL or local file path as an ic.Asset.

# ValueChanged

Triggered when content change

# FocusChanged

Fires when focus state changes

# Submitted

Triggered when the user submits the editor content (Ctrl+Enter / Cmd+Enter)

# Tree

# ic.TreeBase

Abstract base for tree-backed components. Provides shared tree node management, incremental node operations, and expand/collapse control

# Items  :  ic.tree.Node  =  ic.tree.Node.empty

Root tree node(s) that define the hierarchical structure

# Disabled  :  logical  =  false

Whether the whole tree view is disabled

# MaxSelectedItems  :  double  =  Inf

Maximum number of nodes that can be selected simultaneously (Inf = unlimited)

# Selection

Currently selected nodes as an array of ic.tree.Node handles

# addNode(parent: ic.tree.Node, label: string, opts.Icon: ic.Asset, opts.Data: struct)  →  child, out

Add a child node to the tree incrementally.

The new child ic.tree.Node and a ic.async.Promise with the fulfillment status from the view
[root, ~] = t.addNode(ic.tree.Node.empty, "Root");
[child, ~] = t.addNode(root, "Child", Icon="file");
# removeNode(node: ic.tree.Node)  →  out

Remove a node from the tree incrementally

A ic.async.Promise with the fulfillment status from the view
# updateNode(node: ic.tree.Node, opts.Label: string, opts.Icon, opts.Data: struct)  →  out

Update a node's label, icon, or data incrementally

A ic.async.Promise with the fulfillment status from the view
# clearSelection()  →  out

Clear all selected items

A ic.async.Promise with the fulfillment status from the view
# expandNode(node: ic.tree.Node)  →  out

Programmatically expand a folder node

A ic.async.Promise with the fulfillment status from the view
# collapseNode(node: ic.tree.Node)  →  out

Programmatically collapse a folder node

A ic.async.Promise with the fulfillment status from the view
# expandAll()  →  out

Expand all folder nodes

A ic.async.Promise with the fulfillment status from the view
# collapseAll()  →  out

Collapse all folder nodes

A ic.async.Promise with the fulfillment status from the view
# ValueChanged

Fires when the user changes the selection

# SelectionChanged

Fires when the user changes the selection. This method is a non-reactive convenience event dispatched that listens to ValueChanged and dispatches the resolved Node handles of the current selection.

# ic.tree.Node

Tree node for hierarchical data structures. Nodes form a tree via the Children property. Children nodes can be added, searched, and removed. These methods use Positional keys, that are strings that represent the path to a node in the tree with indices separated by dashes. For example, "1-2-3" for the third child of the second child of the first root node)

# Label  :  string

Display text for this node

# Icon  :  ic.Asset  =  ic.Asset()

Icon to be displayed before the label

# Children  :  ic.tree.Node  =  ic.tree.Node.empty

Child nodes

# Data  :  struct

Arbitrary payload struct

# add(label: string, opts.Icon: ic.Asset, opts.Data: struct)  →  child

Create and attach a child node, returning it

The newly created child ic.tree.Node
fruits = ic.tree.Node("Fruits");
citrus = fruits.add("Citrus", Icon="citrus");
citrus.add("Orange");
citrus.add("Lemon");
# find(label: string)  →  node

Recursive search by label

The first ic.tree.Node with a matching label, or empty if not found. Note that labels are not guaranteed to be unique.
node = tree.find("Target Label");
# remove(key: string)  →  node

Remove a node by positional key, returning it

The removed ic.tree.Node
removedNode = tree.remove("1-2-3");
# resolve(key: string)  →  node

Find a node by positional key

The ic.tree.Node at the specified key
node = tree.resolve("1-2-3");
# jsonencode(varargin)  →  json
# keyOf(target: ic.tree.Node)  →  key

Find the positional key of a node

The positional key of the first occurrence of the target node
tree = ic.tree.Node("Root");
child = tree.add("Child");
key = tree.keyOf(child);

# ic.Tree

Vertical tree view for displaying hierarchical data. Renders items as an indented tree with expand/collapse. Optionally supports multi-selection with checkboxes. Items are ic.tree.Node objects, and they are classified as folders if they have non-empty ic.tree.Node.Children arrays; and leafs otherwise

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the control, relative to its font size

# Selectable  :  logical  =  true

Whether checkboxes are shown for selection

# Height  =  400

Height of the tree, in pixels or a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines between nodes

# LazyLoad  :  logical  =  true

When true, child nodes are only rendered when their parent is expanded; when false, all nodes are pre-rendered in the DOM

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# focus()  →  out

Programmatically focus the tree container

A ic.async.Promise with the fulfillment status from the view

# ic.FilterTree

Tree with client-side tag-based filtering. Displays a ic.SearchBar above a ic.Tree view. Typing filter tags narrows the visible tree using prefix-based operators: (none)=contains, |=OR, ~=NOT, :=folder-only, @=leaf-only, ==exact, /=ancestor path, ^=starts-with. {/superclass}

# Placeholder  :  string  =  "Search..."

Ghost text shown in the search bar when empty

# Clearable  :  logical  =  true

Whether to display an "x" button to clear the search input when pressed

# Selectable  :  logical  =  true

Whether tree items can be selected

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the control relative to its font size

# Height  =  400

Height of the tree panel, in pixels or a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines

# LazyLoad  :  logical  =  true

When true, child nodes rendered on demand

# CaseSensitive  :  logical  =  false

Whether filtering is case-sensitive

# AutoExpand  :  logical  =  true

Auto-expand ancestors of matching nodes during filter

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# SearchValue  :  string  =  string.empty

Active filter tags as a string array. Each tag is an optional operator prefix followed by a search term. See ic.FilterTree for supported operators.

# focus()  →  out

Programmatically focus the search input

A ic.async.Promise with the fulfillment status from the view
# clearSearch()  →  out

Programmatically clear all filter tags

A ic.async.Promise with the fulfillment status from the view
# SearchChanged

Fires when the filter tags change

# ic.VirtualTree

Virtual-scrolling tree for massive datasets. Renders only the visible rows in the DOM using fixed-height virtual scrolling. MATLAB owns the full tree; the frontend fetches data on demand via the request/response protocol, requesting root stubs and child chunks as folders are expanded or the user scrolls.

# Disabled  :  logical  =  false

Whether the tree is disabled and cannot be interacted with

# Selectable  :  logical  =  true

Whether items can be selected

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the tree relative to its font size

# Height  =  400

Height of the tree, in pixels or as a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines

# MaxSelectedItems  :  double  =  Inf

Maximum number of selectable items (Inf = unlimited)

# Placeholder  :  string  =  "Loading..."

Ghost text shown while loading

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# Items  :  ic.tree.Node  =  ic.tree.Node.empty

Root tree nodes that form the basis of the tree structure

# Selection

Currently selected nodes as an array of ic.tree.Node handles

# focus()  →  out

Programmatically focus the tree container

A ic.async.Promise with the fulfillment status from the view
# clearSelection()  →  out

Clear all selected items

A ic.async.Promise with the fulfillment status from the view
# expandNode(node: ic.tree.Node)  →  out
A ic.async.Promise with the fulfillment status from the view

Programmatically expand a folder node

# collapseNode(node: ic.tree.Node)  →  out

Programmatically collapse a folder node

A ic.async.Promise with the fulfillment status from the view
# expandAll()  →  out

Expand all folder nodes

A ic.async.Promise with the fulfillment status from the view
# collapseAll()  →  out

Collapse all folder nodes

A ic.async.Promise with the fulfillment status from the view
# handleGetRoots()  →  result
# handleGetChildren(data)  →  result
# serializeLevel(~, nodes: ic.tree.Node, parentKey: string, offset: double)  →  stubs
# ValueChanged

Fires when the user changes the selection

# SelectionChanged

Fires when the user changes the selection. This event is a non-reactive convenience event dispatched with the resolved selection from ValueChanged

# ic.VirtualFilterTree

Virtual-scrolling tree with MATLAB-side tag-based filtering. See ic.FilterTree for the same component with client-side filtering. VirtualFilterTree adds support for larger trees by rendering only visible nodes and serving tree data on demand via request handlers

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Selectable  :  logical  =  true

Whether items can be selected

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the control relative to its font size

# Height  =  400

Height of the tree, in pixels or a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines

# MaxSelectedItems  :  double  =  Inf

Maximum number of selectable items (Inf = unlimited)

# Placeholder  :  string  =  "Loading..."

Text shown while loading new rows

# SearchPlaceholder  :  string  =  "Search..."

Ghost text shown in the search bar when empty

# Clearable  :  logical  =  true

Whether to display an "x" button to clear the search input when pressed

# CaseSensitive  :  logical  =  false

Whether filtering is case-sensitive

# AutoExpand  :  logical  =  true

Auto-expand ancestors of matches in filtered view

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# SearchValue  :  string  =  string.empty

Active filter tags as a string array. Each tag is an optional operator prefix followed by a search term. See ic.FilterTree for supported operators.

# Items  :  ic.tree.Node  =  ic.tree.Node.empty

Tree nodes. These are not reactive

# FilterActive_  :  logical  =  false
# FilterRoots_  =  [ ]
# FilterChildMap

Struct array of VirtualNode stubs

# FilterExpandKeys  =  { }

Containers.Map: parentKey → struct array of child stubs

# Selection

Currently selected nodes (user-facing API)

# focus()  →  out

Programmatically focus the search input

A ic.async.Promise with the fulfillment status from the view
# clearSelection()  →  out

Clear all selected items

A ic.async.Promise with the fulfillment status from the view
# clearSearch()  →  out

Programmatically clear all filter tags

A ic.async.Promise with the fulfillment status from the view
# expandNode(node: ic.tree.Node)  →  out

Programmatically expand a folder node

A ic.async.Promise with the fulfillment status from the view
# collapseNode(node: ic.tree.Node)  →  out

Programmatically collapse a folder node

A ic.async.Promise with the fulfillment status from the view
# expandAll()  →  out

Expand all folder nodes

A ic.async.Promise with the fulfillment status from the view
# collapseAll()  →  out

Collapse all folder nodes

A ic.async.Promise with the fulfillment status from the view
# handleGetRoots()  →  result
# handleGetChildren(data)  →  result
# handleFilter(data)  →  result

Walk the full tree applying filter logic, cache results, and return a summary (not the full tree).

# handleClearFilter()  →  result

Clear the filter cache, reverting to full Items tree.

# serializeLevel(~, nodes: ic.tree.Node, parentKey: string, offset: double)  →  stubs
# buildFilterStubs(nodes)  →  stubs

Flatten nested filter struct into VirtualNode stubs. Populates FilterChildMap and FilterExpandKeys as side effects.

# paginateStubs(~, stubs, offset, count)  →  result

Return a paginated slice of a stub array.

# filterNodes(nodes, groups, cs, ancestorPath, parentKey)  →  result

Recursively filter nodes, preserving positional keys. Returns struct array in TreeNode format (key, name, icon, children).

# matchNodeMATLAB(~, name, isFolder, ancestorPath, groups, cs)  →  tf

MATLAB-side implementation of filter matching logic.

# ValueChanged

Fires when the user changes the selection

value cell positional key strings of selected nodes, or empty if cleared
# SearchChanged

Fires when the filter tags change

value cell current filter tags
# SelectionChanged

Fires when the user changes the selection (non-reactive). dispatches the resolved Node handles from ValueChanged

# ic.TreeTable

Hierarchical tree with aligned table columns. Folder nodes render as full-width expand/collapse rows; leaf nodes render per-column cells

# Columns  :  ic.table.Column  =  ic.table.Column.empty

Column definitions that control how each data field is displayed, sorted, and filtered

# ExpanderColumn  :  string  =  ""

Field name of the column with tree indentation ("" = first)

# Selectable  :  logical  =  true

Whether nodes can be selected

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the tree table relative to its font size

# Height  =  400

Height of the container, in pixels or as a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines

# Striped  :  logical  =  false

Whether to show alternating row colors

# LazyLoad  :  logical  =  true

When true, children only render when their parent is expanded

# SortField  :  string  =  ""

Currently sorted column field ("" = no sort)

# SortDirection  :  string "none" | "asc" | "desc"  =  "none"

Sort direction

# Filters  :  struct  =  struct()

Active column filters

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# autoInferColumns()

Auto-infer columns from first leaf's Data when Columns is empty.

# handleCellEdited(data)

Update Node.Data or Node.Label and fire CellEdited event.

# handleColumnResized(data)
# dispatchCellAction(data)
# focus()  →  out

Programmatically focus the tree table container

A ic.async.Promise with the fulfillment status from the view
# editCell(node: ic.tree.Node, field: string, value)  →  out

Programmatically edit a leaf cell

A ic.async.Promise with the fulfillment status from the view
# SortChanged

Fires when the user clicks a sortable column header

field char field name of the sorted column
direction char sort direction ('asc' or 'desc')
# FilterChanged

Fires when the user changes a column filter

field char field name of the filtered column
value any the filter value (type depends on column type)
# CellClicked

Fires when the user clicks a leaf cell

key char positional key string of the clicked node
field char column field name
# CellEdited

Fires when the user edits a cell value inline (non-reactive, dispatched from MATLAB)

key char positional key string of the edited node
field char field name of the edited column
oldValue any previous cell value
newValue any new cell value after editing
# ColumnResized

Fires when the user finishes resizing a column (non-reactive, dispatched from MATLAB)

field char field name of the resized column
width double new column width in pixels

# ic.VirtualTreeTable

Virtual-scrolling tree table for large datasets. Combines a tree with table columns, virtual scrolling, and on-demand data fetching. Only visible rows exist in the DOM. MATLAB owns the full tree; the frontend fetches data on demand via the request/response protocol, requesting root stubs and child chunks as folders are expanded or the user scrolls

# Columns  :  ic.table.Column  =  ic.table.Column.empty

Column definitions

# LeafContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for leaf nodes

# FolderContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries for folder nodes

# ExpanderColumn  :  string  =  ""

Field name of the column with tree indentation ("" = first)

# Disabled  :  logical  =  false

Whether the control is disabled and cannot be interacted with

# Selectable  :  logical  =  true

Whether nodes can be selected

# Size  :  string "sm" | "md" | "lg"  =  "md"

Size of the control relative to its font size

# Height  =  400

Height of the container, in pixels or as a CSS size string

# ShowLine  :  logical  =  true

Whether to display tree connector lines

# Striped  :  logical  =  false

Whether to show alternating row colors

# MaxSelectedItems  :  double  =  Inf

Maximum number of selectable items (Inf = unlimited)

# Placeholder  :  string  =  "Loading..."

Text shown while loading new nodes

# SortField  :  string  =  ""

Currently sorted column field ("" = no sort)

# SortDirection  :  string "none" | "asc" | "desc"  =  "none"

Sort direction

# Filters  :  struct  =  struct()

Active column filters

# Items  :  ic.tree.Node  =  ic.tree.Node.empty

Tree nodes, pulled into the view on demand

# Selection

Currently selected ic.tree.Node handles

# ViewTree

Sorted + filtered tree: struct array {node, children} node = ic.tree.Node handle, children = same struct (recursive)

# ViewKeyMap

Map: view positional key (char) -> ic.tree.Node handle

# InCellEdit  :  logical  =  false

Guard flag: when true, recomputeView skips selection clear

# ViewListeners  :  event.listener

PostSet listener handles

# focus()  →  out

Programmatically focus the tree table container

A ic.async.Promise with the fulfillment status from the view
# clearSelection()  →  out

Clear all selected items

A ic.async.Promise with the fulfillment status from the view
# expandNode(node: ic.tree.Node)  →  out

Programmatically expand a folder node

A ic.async.Promise with the fulfillment status from the view
# collapseNode(node: ic.tree.Node)  →  out

Programmatically collapse a folder node

A ic.async.Promise with the fulfillment status from the view
# expandAll()  →  out

Expand all folder nodes

A ic.async.Promise with the fulfillment status from the view
# collapseAll()  →  out

Collapse all folder nodes

A ic.async.Promise with the fulfillment status from the view
# editCell(node: ic.tree.Node, field: string, value)  →  out

Programmatically edit a leaf cell. Prefer this method to directly editing the Items, as it triggers a view recompute if the cell is in the viewport

A ic.async.Promise with the fulfillment status from the view
# refresh()  →  out

Manually force a recompute of the view

A ic.async.Promise with the fulfillment status from the view
# recomputeView()

Build sorted + filtered tree projection.

# buildViewTree(nodes)  →  viewNodes

Recursively build sorted + filtered view tree.

# sortViewLevel(viewNodes)  →  sorted

Sort a single level of view nodes by the current sort field.

# passesFilters(node, activeFields)  →  tf

Test a leaf node against all active column filters.

# handleGetRoots()  →  result
# handleGetChildren(data)  →  result
# serializeLevel(viewNodes, parentKey: string, offset: double)  →  stubs

Serialize view nodes to lightweight stubs for the frontend. Leaf stubs include a .data field with column values.

# resolveViewNode(key)  →  viewNode

Navigate ViewTree by positional key (e.g. "1-2-3").

# handleCellEdited(data)
# handleColumnResized(data)
# dispatchCellAction(data)
# getExpanderField()  →  expander

Get the effective expander column field name.

# getActiveFilterFields()  →  fields

Get the list of fields with active (non-empty) filters.

# viewKeyOf(targetNode)  →  key

Find the view tree positional key for a node handle.

# countNodes(viewNodes)  →  n

Count total nodes in the view tree (recursive).

# buildKeyMap(viewNodes, parentKey)

Populate ViewKeyMap by walking the view tree.

# collectFolderKeys(viewNodes, parentKey)  →  keys

Collect all folder positional keys from the view tree.

# ValueChanged

Fires when the user changes the selection

value cell positional key strings of selected nodes, or empty if cleared
# SortChanged

Fires when the user clicks a sortable column header

field char field name of the sorted column
direction char sort direction ('asc' or 'desc')
# FilterChanged

Fires when the user changes a column filter

field char field name of the filtered column
value any the filter value (type depends on column type)
filters struct all current active filters
# CellClicked

Fires when the user clicks a leaf cell

key char positional key string of the clicked node
field char column field name
# SelectionChanged

Fires when the user changes the selection (non-reactive). dispatches the resolved Node handles from ValueChanged

# CellEdited

Fires when the user edits a cell value inline (non-reactive, dispatched from MATLAB)

key char positional key string of the edited node
field char field name of the edited column
oldValue any previous cell value
newValue any new cell value after editing
# ColumnResized

Fires when the user finishes resizing a column (non-reactive, dispatched from MATLAB)

field char field name of the resized column
width double new column width in pixels

# Table

# ic.TableBase

Abstract base for table components. Provides shared column configuration, sorting, filtering, row selection, and cell interaction for ic.Table and ic.VirtualTable

# Columns  :  ic.table.Column  =  ic.table.Column.empty

Column definitions that control how each data field is displayed, sorted, and filtered

# Disabled  :  logical  =  false

Whether all table interactions are disabled

# Size  :  string "sm" | "md" | "lg"  =  "md"

Dimension of the table rows and text relative to the component font size

# Height  =  "auto"

Height of the table, in pixels or as a CSS string

# Selectable  :  logical  =  false

Whether rows, columns, and cells can be selected by clicking on them (rows can only be selected if ShowRowNumbers is true)

# ShowRowNumbers  :  logical  =  false

Whether to show a row number column on the left edge

# Striped  :  logical  =  false

Whether to alternate row background colors for readability

# SortField  :  string  =  ""

Field name of the currently sorted column ("" means no sort active)

# SortDirection  :  string "none" | "asc" | "desc"  =  "none"

Direction of the current sort

# Selection  :  struct  =  struct( 'type', 'none', 'value', [ ] )

Current selection state as a struct with fields 'type' ("none", "row", "column", or "cell") and 'value'

# Filters  :  struct  =  struct()

Active column filters as a struct mapping field names to filter values

# dispatchCellAction(data)

Route a cell action to the column's OnCellAction callback

# handleColumnResized(data)

Update column Width and fire ColumnResized event

# handleCellEdited(data)

Update Data silently and fire CellEdited event

# focus()  →  out

Programmatically focus the table container

# clearSelection()  →  out

Clear the current selection

# scrollToRow(rowKey: string)  →  out

Scroll to a specific row by key.

# focusCell(rowIndex: double, field: string)  →  out

Scroll to and focus a specific cell

# SelectionChanged

Fires when the user changes the selection (row, column, or cell click)

selection struct struct with fields 'type' (char) and 'value'
# SortChanged

Fires when the user clicks a sortable column header

field char field name of the sorted column
direction char sort direction ('asc' or 'desc')
# FilterChanged

Fires when the user changes a column filter

field char field name of the filtered column
value any the filter value (type depends on column type)
filters struct full filters state after the change
# CellClicked

Fires when the user clicks any cell

field char column field name
rowIndex double row index
value any cell value
rowData struct full row data
# RowClicked

Fires when the user clicks any row

rowIndex double row index
rowData struct full row data
# ColumnClicked

Fires when the user clicks a column header

field char field name of the clicked column
column struct column definition
# ColumnResized

Fires when the user finishes resizing a column

field char field name of the resized column
width double new column width in pixels
# CellEdited

Fires when the user edits a cell value inline (non-reactive, dispatched from MATLAB)

field char field name of the edited column
rowIndex double row index
oldValue any previous cell value
newValue any new cell value after editing

# ic.Table

Flat data table with rich column types. Suitable for small-to-medium datasets (up to ~5000 rows). For larger datasets, use ic.VirtualTable which virtualizes scrolling and performs server-side sort/filter.

Avoid modifying the Data property directly for large tables, as it triggers a full re-render. Instead, use the editCell, removeRow, and removeColumn methods which update the data more efficiently and preserve selection state.

# Data  :  table  =  table()

The table data as a MATLAB table. Columns are auto-inferred on first assignment if ic.TableBase.Columns is empty

# removeRow(rowIndex: double)  →  out

Remove one or more rows by index. Multiple indices can be passed to batch removals into a single message to the view.

tbl.removeRow(3)
tbl.removeRow(1, 4, 7)
# removeColumn(field: string)  →  out

Remove one or more columns by field name. Multiple field names can be passed to batch removals into a single message to the view.

tbl.removeColumn("Price")
tbl.removeColumn("Price", "Volume", "Sector")
# editCell(rowIndex: double, field: string, value)  →  out

Update one or more cell values programmatically. Multiple edits can be batched into a single message to the view by passing repeating (rowIndex, field, value) triplets.

tbl.editCell(1, "Price", 42.5)
tbl.editCell(1, "Price", 42.5, 2, "Price", 99.0, 3, "Name", "Foo")

# ic.VirtualTable

Virtual-scrolling table for large datasets. Only visible rows exist in the DOM (~30-40 elements). The frontend fetches rows on demand via the request/response protocol. Sorting and filtering are performed server-side in MATLAB via the column's filterColumn and sortKey methods.

# Data  :  table  =  table()

The full dataset as a MATLAB table. Its not reactive and never published to the frontend. The view fetches slices on demand as the user scrolls and interacts with the table

# ViewIndices  :  double  =  [ ]

Sorted + filtered row indices into Data

# InCellEdit  :  logical  =  false

Guard flag: when true, set.Data skips selection clear + recompute

# ViewListeners  :  event.listener

PostSet listener handles

# handleCellEdited(evtData)

Update Data when a cell is edited in the view, then conditionally recompute

# removeRow(rowIndex: double)  →  out

Remove a row by its index

# removeColumn(field: string)  →  out

Remove a column by field name

# editCell(rowIndex: double, field: string, value)  →  out

Update a single cell value programmatically

# refresh()  →  out

Manually force to recompute the view

# testFilter(~, colDef, value, filterValue)  →  tf

Check if a single scalar value passes a filter

# recomputeView()

Rebuild sorted + filtered index array

# handleGetRows(data)  →  result

Return a chunk of rows from the current view

Columns

# ic.table.Column

< [ matlab.mixin.Heterogeneous, ic.event.TransportData]

Definition of a single table column. Specifies how a data field is displayed, including its header text, cell renderer, width, sort/filter behavior, alignment, and type-specific configuration

# Field  :  string

Data field name (table variable name or struct field name) that this column reads from

# Header  :  string  =  ""

Display text in the column header. Defaults to Field if empty

# Type  :  string "text" | "number" | "boolean" | "progressbar" | "sparkline" | "image" | "enum" | "rating" | "date" | "button" | "color"  =  "text"

Cell renderer type that determines how values are displayed

# Width  =  ""

Column width, in pixels or as a CSS string. If empty, width is automatic based on content.

# MinWidth  :  double  =  0

Minimum column width in pixels (0 = no minimum)

# Sortable  :  logical  =  false

Whether clicking the header sorts the table by this column

# Filterable  :  logical  =  false

Whether the header shows a filter button

# Resizable  :  logical  =  true

Whether the column can be resized by dragging one of its header edges

# Align  :  string "left" | "center" | "right" | "auto"  =  "auto"

Cell text alignment. "auto" infers from the column Type (e.g. numbers align right)

# Pinned  :  string "none" | "left" | "right"  =  "none"

Pin the column to the left or right edge of the table, so that it remains visible when horizontally scrolling

# Visible  :  logical  =  true

Whether this column is visible

# Editable  :  logical  =  false

Whether cells in this column can be edited inline by double-clicking

# Config  :  struct  =  struct()

Type-specific configuration struct. Prefer using typed subclasses instead of setting this directly

# OnCellAction  :  function_handle  =  function_handle.empty

Callback invoked when a cell action is triggered. The callback signature should be @(column, rowIndex, data) callback(column, rowIndex, data)

# ContextMenu  :  ic.menu.Entry  =  ic.menu.Entry.empty

Context menu entries shown on right-click in this column's cells

# jsonencode(varargin)  →  json
# initFromOpts(type, opts)

Set common + type-specific properties, lock Type. Used by typed subclass constructors

# buildConfig()  →  cfg

Return type-specific config struct for JSON. Subclasses override to construct config from named properties

# coerceEditValue(~, rawValue, colData)  →  val

Convert a raw JSON edit value to the column's MATLAB type. Subclasses override for type-specific conversions (e.g. datetime)

# filterColumn(~, columnData, ~)  →  mask

Server-side filter: return logical mask over the column data. Base returns all-true (unsupported column type). Subclasses override for type-specific logic

# sortKey(~, columnData)  →  keys

Server-side sort key extraction. Returns a vector suitable for MATLAB's sort(). Subclasses override when sort order differs from natural order

# getDefaultScalarElement()  →  obj
# fromTable(t: table)  →  cols

Auto-infer typed columns from a MATLAB table.

An array of ic.table.Column objects with Field set to the table variable names, and Type inferred from the variable data type
cols = ic.table.Column.fromTable(myTable);
# fromStruct(s: struct)  →  cols

Auto-infer text columns from a struct's field names.

cols = ic.table.Column.fromStruct(struct('name', "A", 'age', 30));

# ic.table.TextColumn

Text column that displays cell values as plain or rich text.

# RichText  :  logical  =  false

Enable bold and _italic_ inline Markdown formatting

# Placeholder  :  string  =  ""

Ghost fallback text shown when the cell value is empty

# Transform  :  string "none" | "uppercase" | "lowercase" | "capitalize"  =  "none"

CSS text-transform applied to the displayed text

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Case-insensitive substring match

# ic.table.NumberColumn

Numeric column with formatting, prefix/suffix, and conditional coloring.

# Decimals  :  double  =  -1

Number of decimal places to display (-1 = auto, no rounding)

# Prefix  :  string  =  ""

String prepended to the formatted number

# Suffix  :  string  =  ""

String appended to the formatted number

# ThousandsSeparator  :  logical  =  false

Whether to add comma separators for thousands

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional background color rules evaluated against the cell value

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Range check: filterValue has optional .min and .max

# ic.table.BooleanColumn

Boolean column that displays logical values as checkboxes, text, or numeric indicators.

# DisplayMode  :  string "checkbox" | "text" | "numeric"  =  "checkbox"

Visual representation of the boolean value

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional background color rules. Evaluates true=1, false=0 against the rules

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Exact match: filterValue is a logical scalar

# ic.table.EnumColumn

Categorical column with a fixed set of values displayed as colored tag pills.

# Items  :  string  =  string.empty

Ordered set of allowed values. Item order defines sorting priority

# Colors  :  string  =  string.empty

Hex color per item, parallel to Items. An empty value or missing color means "default text color

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Membership check: filterValue is a string/cell array of selected items

# sortKey(columnData)  →  keys

Sort by ordinal position in Items (first = lowest)

# ic.table.ButtonColumn

Interactive button column that renders one or more clickable buttons per cell. Button clicks are routed to the column's OnCellAction callback.

# Buttons  :  ic.table.CellButton  =  ic.table.CellButton.empty

Array of ic.table.CellButton definitions rendered in each cell

# buildConfig()  →  cfg

# ic.table.CellButton

Definition of a single button inside a ic.table.ButtonColumn cell. When clicked, the button's Key is passed to the column's ic.TableBase.OnCellAction callback via the data.action field.

# Key  :  string

Unique action identifier passed in the ic.TableBase.OnCellAction callback

# Label  :  string  =  ""

Button text

# Icon  :  ic.Asset  =  ic.Asset.empty

Icon displayed in the button

# Tooltip  :  string  =  ""

Text displayed on hover

# Variant  :  string "default" | "primary" | "destructive"  =  "default"

Visual style variant

# Disabled  :  logical  =  false

Whether the button is disabled

# ic.table.ColorColumn

Color swatch column with inline color-picker editing. Displays cell values as colored swatches. When Editable, double-clicking opens a color picker popup.

# Format  :  string "hex" | "rgb" | "hsl"  =  "hex"

Output color string format

# ShowAlpha  :  logical  =  false

Whether to show the alpha slider in the inline editor

# Presets  :  string  =  string.empty

Optional preset color swatches shown below the picker

# buildConfig()  →  cfg

# ic.table.ColorRule

Conditional color rule for table columns. Defines a comparison condition that is evaluated for all the cells in the column. When the condition is met, the specified color is applied. When multiple rules are defined on a column (as an array of ic.table.ColorRule), the first successful rule for a specific cell wins (early return)

# Operator  :  string ">" | ">=" | "<" | "<=" | "==" | "~=" | "between"  =  ">"

Comparison operator

# Value  =  0

Threshold value. Scalar for most operators, or [lo hi] for "between"

# Color  :  string  =  ""

Hex color string applied when the condition matches

# ic.table.DateColumn

Date/datetime column with format presets and chronological sorting.

# Format  :  string "short" | "long" | "numeric" | "iso" | "datetime" | "time"  =  "short"

Display format preset

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional background color rules evaluated against the date value

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Date range check: filterValue has optional .min and .max (ISO strings)

# coerceEditValue(~, rawValue, colData)  →  val

# ic.table.ImageColumn

Image column that displays cell values as thumbnails with a hover preview popup. Cell data must be an ic.Asset (file or URL) per row.

# PopupWidth  :  double  =  200

Width of the hover preview popup, in pixels

# PopupHeight  :  double  =  150

Height of the hover preview popup, in pixels

# ObjectFit  :  string "contain" | "cover" | "fill" | "none" | "scale-down"  =  "contain"

CSS object-fit for the preview image

# buildConfig()  →  cfg

# ic.table.ProgressBarColumn

Inline progress bar column for numeric values within a range.

# Min  :  double  =  0

Minimum value of the range (maps to 0% fill)

# Max  :  double  =  100

Maximum value of the range (maps to 100% fill)

# ShowLabel  :  logical  =  false

Whether to display the formatted value next to the bar

# LabelFormat  :  string  =  "%d%%"

Sprintf-style format for the label (supports %d, %f, %.Nf, %% for literal %)

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Bar fill color variant

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional bar color rules evaluated against the cell value. First matching rule wins

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Range check (same as NumberColumn)

# ic.table.RatingColumn

Star-rating column for bounded numeric values.

# MaxStars  :  double  =  5

Maximum number of stars

# AllowHalf  :  logical  =  true

Whether to display half-star increments

# Color  :  string  =  "#f59e0b"

Hex color for filled stars

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional background color rules evaluated against the numeric rating

# buildConfig()  →  cfg
# filterColumn(~, columnData, filterValue)  →  mask

Range check (same as NumberColumn)

# ic.table.SparklineColumn

Inline sparkline (mini line chart) column for numeric array data. Cell data must be a numeric vector per row.

# LineWidth  :  double  =  1.5

Stroke width of the line, in pixels

# FillArea  :  logical  =  false

Whether to fill the area under the line

# ShowEndDot  :  logical  =  true

Whether to show a dot at the last data point

# ShowLabel  :  logical  =  false

Whether to show the metric value beside the sparkline

# Metric  :  string "total" | "relative"  =  "total"

Metric that the rest of the properties operate on. "total" uses the last value; "relative" uses the percentage change from first to last

# Variant  :  string "primary" | "secondary" | "success" | "warning" | "destructive"  =  "primary"

Line color variant

# ColorRules  :  ic.table.ColorRule  =  ic.table.ColorRule.empty

Conditional color rules evaluated against the metric value

# buildConfig()  →  cfg
# filterColumn(columnData, filterValue)  →  mask

Extract metric value per row, then range check

# sortKey(columnData)  →  keys

Sort by metric value

# extractMetric(columnData)  →  values

Extract the metric value from each sparkline cell

# Tweakpane

# ic.TweakPane

Compact parameter control panel powered by Tweakpane v4. add blades to build a live inspector: sliders, checkboxes, color pickers, folders, tabs, and more. all blade types are in the ic.tp.* namespace.

# Title  :  string  =  ""

Optional title displayed at the top of the pane

# Expanded  :  logical  =  true

Whether the pane is expanded

# addSlider(props)  →  blade

Add a numeric slider blade

The new ic.tp.Slider
# addCheckbox(props)  →  blade

Add a boolean checkbox blade

The new ic.tp.Checkbox
# addText(props)  →  blade

Add a text input blade

The new ic.tp.Text
# addColor(props)  →  blade

Add a color picker blade

The new ic.tp.Color
# addPoint(props)  →  blade

Add a 2D/3D/4D point input blade

The new ic.tp.Point
# addList(props)  →  blade

Add a dropdown list blade

The new ic.tp.List
# addButton(props)  →  blade

Add a clickable button blade

The new ic.tp.Button
# addSeparator(props)  →  blade

Add a visual separator

The new ic.tp.Separator
# addMonitor(props)  →  blade

Add a read-only value monitor blade

The new ic.tp.Monitor
# addFolder(props)  →  blade

Add a collapsible folder container

The new ic.tp.Folder
# addTabGroup(props)  →  blade

Add a tab group container

The new ic.tp.TabGroup
# addIntervalSlider(props)  →  blade

Add a dual-handle range slider

The new ic.tp.IntervalSlider
# addFpsGraph(props)  →  blade

Add an FPS graph blade

The new ic.tp.FpsGraph
# addRadioGrid(props)  →  blade

Add a grid of radio buttons

The new ic.tp.RadioGrid
# addButtonGrid(props)  →  blade

Add a grid of buttons

The new ic.tp.ButtonGrid
# addCubicBezier(props)  →  blade

Add a cubic bezier curve editor

The new ic.tp.CubicBezier
# addRing(props)  →  blade

Add a radial dial blade

The new ic.tp.Ring
# addWheel(props)  →  blade

Add a jog wheel blade

The new ic.tp.Wheel
# addRotation(props)  →  blade

Add a 3D rotation input blade

The new ic.tp.Rotation
# addTextarea(props)  →  blade

Add a multi-line text input blade

The new ic.tp.Textarea
# addImage(props)  →  blade

Add a read-only image display blade

The new ic.tp.Image
# insertBlade(blade)

Assigns index, target, and registers child

# ic.tp.Blade

Abstract base for all TweakPane leaf controls.

# Label  :  string  =  ""

Display label shown next to the control

# Disabled  :  logical  =  false

Whether this blade is disabled

# Hidden  :  logical  =  false

Whether this blade is hidden

# ic.tp.ContainerBlade

Abstract base for TweakPane structural containers

# Label  :  string  =  ""

Display label for this container blade

# Disabled  :  logical  =  false

Whether this container is disabled

# Hidden  :  logical  =  false

Whether this container is hidden

# addSlider(props)  →  blade

Add a numeric slider blade

The new ic.tp.Slider
# addCheckbox(props)  →  blade

Add a boolean checkbox blade

The new ic.tp.Checkbox
# addText(props)  →  blade

Add a text input blade

The new ic.tp.Text
# addColor(props)  →  blade

Add a color picker blade

The new ic.tp.Color
# addPoint(props)  →  blade

Add a 2D/3D/4D point input blade

The new ic.tp.Point
# addList(props)  →  blade

Add a dropdown list blade

The new ic.tp.List
# addButton(props)  →  blade

Add a clickable button blade

The new ic.tp.Button
# addSeparator(props)  →  blade

Add a visual separator

The new ic.tp.Separator
# addMonitor(props)  →  blade

Add a read-only value monitor blade

The new ic.tp.Monitor
# addFolder(props)  →  blade

Add a collapsible folder container

The new ic.tp.Folder
# addTabGroup(props)  →  blade

Add a tab group container

The new ic.tp.TabGroup
# addIntervalSlider(props)  →  blade

Add a dual-handle range slider

The new ic.tp.IntervalSlider
# addFpsGraph(props)  →  blade

Add an FPS graph blade

The new ic.tp.FpsGraph
# addRadioGrid(props)  →  blade

Add a grid of radio buttons

The new ic.tp.RadioGrid
# addButtonGrid(props)  →  blade

Add a grid of buttons

The new ic.tp.ButtonGrid
# addCubicBezier(props)  →  blade

Add a cubic bezier curve editor

The new ic.tp.CubicBezier
# addRing(props)  →  blade

Add a radial dial blade

The new ic.tp.Ring
# addWheel(props)  →  blade

Add a jog wheel blade

The new ic.tp.Wheel
# addRotation(props)  →  blade

Add a 3D rotation input blade

The new ic.tp.Rotation
# addTextarea(props)  →  blade

Add a multi-line text input blade

The new ic.tp.Textarea
# addImage(props)  →  blade

Add a read-only image display blade

The new ic.tp.Image
# insertBlade(blade)

Assigns index, target, and registers child

# ic.tp.Folder

Collapsible folder container for TweakPane. Can hold any blade type, including nested folders.

# Expanded  :  logical  =  true

Whether the folder is open

# ic.tp.TabGroup

Tab container blade for TweakPane. add pages via addTabPage. each page can hold its own set of blades.

# NextPageIndex  :  double  =  0

Monotonic counter for tab page indices

# addTabPage(props)  →  page

Add a tab page to this group

The new ic.tp.TabPage
tabs = pane.addTabGroup();
general = tabs.addTabPage(Label="General");
general.addSlider(Label="Speed", Min=0, Max=100);
advanced = tabs.addTabPage(Label="Advanced");

# ic.tp.TabPage

A single tab page within a ic.tp.TabGroup.

# ic.tp.Separator

Visual divider blade for TweakPane

# ic.tp.Button

Action button blade for TweakPane

# Clicked

Fires when the button is clicked

# ic.tp.ButtonGrid

Grid of buttons blade for TweakPane. Uses @tweakpane/plugin-essentials

# Items  :  string  =  string.empty

Button labels

# Columns  :  double  =  2

Number of grid columns

# Clicked

Fires when any button in the grid is clicked

value char label of the clicked button

# ic.tp.Checkbox

Boolean toggle blade for TweakPane.

# Value  :  logical  =  false

Checked state

# ValueChanged

Fires when the user toggles the checkbox

value logical new checked state

# ic.tp.Color

Color picker blade for TweakPane

# Value  :  string  =  "#3b82f6"

Hex color string

# ShowAlpha  :  logical  =  false

Whether to show the alpha channel slider

# ValueChanging

Fires continuously while the color picker is open

value char current hex color string
# ValueChanged

Fires when the color is committed (picker closed)

value char committed hex color string

# ic.tp.CubicBezier

Cubic bezier curve editor blade for TweakPane. uses @tweakpane/plugin-essentials.

# Value  :  struct  =  struct( 'x1', 0, 'y1', 0, 'x2', 1, 'y2', 1 )

Bezier control points as a struct with fields x1, y1, x2, y2

# ValueChanged

Fires when the curve changes

value struct control points with value.x1, value.y1, value.x2, value.y2 as doubles

# ic.tp.FpsGraph

Auto-updating FPS graph blade for TweakPane. Measures and plots the uihtml iframe frame rate. uses @tweakpane/plugin-essentials.

# ic.tp.Image

Read-only image display blade for TweakPane.

# Source  :  ic.Asset

Image source

# Height  :  double  =  100

Display height in pixels

# ObjectFit  :  string "contain" | "cover" | "fill"  =  "contain"

CSS object-fit mode controlling how the image fills the display area

# Clicked

Fires when the image is clicked

# ic.tp.IntervalSlider

Dual-handle range slider blade for TweakPane. uses @tweakpane/plugin-essentials.

# Value  :  struct  =  struct( 'min', 0, 'max', 100 )

Selected range as a struct with fields min and max

# Min  :  double  =  0

Absolute minimum of the range

# Max  :  double  =  100

Absolute maximum of the range

# ValueChanged

Fires when the range changes

value struct selected range with value.min and value.max as doubles

# ic.tp.List

Dropdown select blade for TweakPane.

# Value  :  string  =  ""

Currently selected item

# Items  :  string  =  string.empty

List of selectable options

# ValueChanged

Fires when the selection changes

value char selected item

# ic.tp.Monitor

Read-only value display blade for TweakPane. Push updates to the Value property to update the display

# Value  =  0

The monitored value (number, string, or boolean)

# View  :  string "text" | "graph"  =  "text"

Display mode: "text" shows the current Value; "graph" shows a scrolling history plot whose last value updates at a constant polling Interval

# GraphMin  :  double  =  -1

Minimum of the graph y-axis (only applies when View is "graph")

# GraphMax  :  double  =  1

Maximum of the graph y-axis (only applies when View is "graph")

# BufferSize  :  double  =  64

Number of samples retained in the graph buffer (only applies when View is "graph")

# Interval  :  double  =  200

Polling interval in milliseconds for updating the graph (only applies when View is "graph")

# ic.tp.Point

2D/3D/4D point input blade for TweakPane. dimensionality is auto-detected from the struct fields in Value.

# Value  :  struct  =  struct( 'x', 0, 'y', 0 )

Point coordinates: {x,y} for 2D, {x,y,z} for 3D, {x,y,z,w} for 4D

# ValueChanged

Fires when any coordinate changes

value struct coordinate struct matching the Value fields (x, y[, z[, w]])

# ic.tp.RadioGrid

Grid of radio buttons blade for TweakPane. uses @tweakpane/plugin-essentials.

# Value  :  string  =  ""

Currently selected item

# Items  :  string  =  string.empty

List of options displayed as radio buttons

# Columns  :  double  =  2

Number of grid columns

# ValueChanged

Fires when the selection changes

value char selected item

# ic.tp.Ring

Radial dial blade for TweakPane, ideal for angles and headings. uses @tweakpane/plugin-camerakit.

# Value  :  double  =  0

Current numeric value

# Min  :  double  =  0

Minimum value

# Max  :  double  =  360

Maximum value

# Step  :  double  =  1

Step increment

# Wide  :  logical  =  false

Hide the text input and widen the ring display

# Series  :  double "0" | "1" | "2"  =  0

Visual style variant (0, 1, or 2)

# ValueChanging

Fires continuously during drag

value double current value
# ValueChanged

Fires when drag ends or value commits

value double committed value

# ic.tp.Rotation

3D rotation input blade for TweakPane. supports Euler angles (Value has fields x, y, z) and quaternions (x, y, z, w). uses @0b5vr/tweakpane-plugin-rotation.

# Value  :  struct  =  struct( 'x', 0, 'y', 0, 'z', 0 )

Rotation as a struct: {x,y,z} for Euler mode, {x,y,z,w} for Quaternion mode

# Mode  :  string "euler" | "quaternion"  =  "euler"

Rotation representation: Euler or Quaternion

# Order  :  string "XYZ" | "YXZ" | "ZXY" | "ZYX" | "YZX" | "XZY"  =  "XYZ"

Euler axis order (only applies when Mode = "euler")

# Unit  :  string "rad" | "deg" | "turn"  =  "deg"

Angular unit (only applies when Mode = "euler")

# Picker  :  string "inline" | "popup"  =  "inline"

Display style for the 3D gizmo

# ValueChanged

Fires when the rotation changes

value struct rotation struct matching Value fields (x, y, z; plus w for quaternion mode)

# ic.tp.Slider

Numeric slider blade for TweakPane.

# Value  :  double  =  0

Current numeric value

# Min  :  double  =  0

Minimum value

# Max  :  double  =  100

Maximum value

# Step  :  double  =  1

Step increment

# ValueChanging

Fires continuously during slider drag

value double current value
# ValueChanged

Fires when drag ends or value commits

value double committed value

# ic.tp.Text

String input blade for TweakPane.

# Value  :  string  =  ""

Current text value

# ValueChanged

Fires on each keystroke

value char current text
# Submitted

Fires when Enter is pressed

value char submitted text

# ic.tp.Textarea

Multi-line text input blade for TweakPane. uses @pangenerator/tweakpane-textarea-plugin.

# Value  :  string  =  ""

Current text value (may contain newlines)

# Rows  :  double  =  3

Number of visible text rows

# Placeholder  :  string  =  ""

Ghost text shown when the field is empty

# ValueChanged

Fires on each text change

value char current text content

# ic.tp.Wheel

Jog wheel blade for TweakPane, for fine-grained unbounded adjustment. uses @tweakpane/plugin-camerakit.

# Value  :  double  =  0

Current numeric value

# Amount  :  double  =  1

Value change per pixel of wheel movement

# ValueChanging

Fires continuously during wheel interaction

value double current value
# ValueChanged

Fires when wheel interaction ends

value double committed value