or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

activity-events.mdassets.mdcode-generation.mdcomponent-metadata.mddrag-drop.mdeditor-config.mdindex.mdmodels.mdplugins.mdschemas.mdshell-api.mdshell-enums.mdvalue-types.md
tile.json

plugins.mddocs/

Plugin System

Comprehensive plugin architecture with metadata, registration, and lifecycle management for extending editor functionality.

Capabilities

Plugin Definition

Core plugin interface and metadata.

/**
 * Plugin function interface
 */
interface IPublicTypePlugin {
  /** Plugin initialization function */
  (ctx: IPublicModelPluginContext, options?: any): void;
  /** Plugin name */
  pluginName?: string;
  /** Plugin metadata */
  meta?: IPublicTypePluginMeta;
}

/**
 * Plugin metadata definition
 */
interface IPublicTypePluginMeta {
  /** Plugin dependencies */
  dependencies?: string[];
  /** Compatible engine versions */
  engines?: Record<string, string>;
  /** Preference declarations */
  preferenceDeclaration?: IPublicTypePluginDeclaration;
  /** Event prefix for plugin events */
  eventPrefix?: string;
  /** Command scope for plugin commands */
  commandScope?: string;
}

Plugin Registration

Plugin registration and lifecycle management.

/**
 * Plugin registration options
 */
interface IPublicTypePluginRegisterOptions {
  /** Plugin registration level */
  level?: IPublicEnumPluginRegisterLevel;
  /** Plugin configuration */
  config?: Record<string, any>;
  /** Plugin dependencies override */
  dependencies?: string[];
  /** Auto-start plugin */
  autoStart?: boolean;
}

/**
 * Plugin registration levels
 */
enum IPublicEnumPluginRegisterLevel {
  /** System level plugins */
  System = 1,
  /** Editor level plugins */
  Editor = 2,
  /** Project level plugins */
  Project = 3,
  /** User level plugins */
  User = 4
}

Usage Examples:

import { IPublicTypePlugin, IPublicModelPluginContext } from "@alilc/lowcode-types";

// Simple plugin example
const loggerPlugin: IPublicTypePlugin = (ctx: IPublicModelPluginContext) => {
  ctx.logger.info('Logger plugin initialized');
  
  // Register a command
  ctx.registerCommand({
    name: 'logger.clear',
    handler: () => {
      ctx.logger.info('Log cleared');
    }
  });
  
  // Listen to events
  ctx.event.on('node.add', (node) => {
    ctx.logger.info('Node added:', node.componentName);
  });
};

loggerPlugin.pluginName = 'Logger';
loggerPlugin.meta = {
  dependencies: [],
  engines: {
    lowcode: '^1.0.0'
  }
};

// Complex plugin with skeleton integration
const toolbarPlugin: IPublicTypePlugin = (ctx: IPublicModelPluginContext, options) => {
  const { skeleton } = ctx;
  
  // Add toolbar button
  skeleton.add({
    area: 'toolbar',
    name: 'save-button',
    content: {
      icon: 'save',
      title: 'Save',
      onClick: () => {
        ctx.event.emit('project.save');
      }
    }
  });
  
  // Register hotkey
  ctx.hotkey.bind('cmd+s', () => {
    ctx.event.emit('project.save');
  });
};

toolbarPlugin.pluginName = 'Toolbar';

Plugin Context

Context interface provided to plugins for accessing editor functionality.

/**
 * Plugin context interface
 */
interface IPublicModelPluginContext {
  /** Plugin name */
  name: string;
  /** Editor instance */
  editor: IPublicModelEditor;
  /** Plugin logger */
  logger: IPublicApiLogger;
  /** Plugin preferences */
  preference: IPublicModelPreference;
  /** Event system */
  event: IPublicApiEvent;
  /** Skeleton API */
  skeleton: IPublicApiSkeleton;
  /** Hotkey API */
  hotkey: IPublicApiHotkey;
  /** Material API */
  material: IPublicApiMaterial;
  /** Project API */
  project: IPublicApiProject;
  /** Register command */
  registerCommand(command: IPublicTypeCommand): void;
  /** Unregister command */
  unregisterCommand(name: string): void;
}

Plugin Instance

Runtime plugin instance management.

/**
 * Plugin instance interface
 */
interface IPublicModelPluginInstance {
  /** Plugin name */
  name: string;
  /** Plugin function */
  plugin: IPublicTypePlugin;
  /** Plugin options */
  options?: any;
  /** Plugin context */
  context: IPublicModelPluginContext;
  /** Plugin status */
  status: 'registered' | 'initialized' | 'destroyed';
  /** Initialize plugin */
  init(): void;
  /** Destroy plugin */
  destroy(): void;
  /** Check if plugin is enabled */
  isEnabled(): boolean;
  /** Enable plugin */
  enable(): void;
  /** Disable plugin */
  disable(): void;
}