@umbraci/jsmind
Version:
jsMind is a pure javascript library for mindmap, it base on html5 canvas. jsMind was released under BSD license, you can embed it in any project, if only you observe the license.
104 lines (103 loc) • 2.6 kB
TypeScript
/**
* Enhanced Plugin Manager
* Manages the lifecycle of enhanced plugins with synchronous initialization,
* preload support, and lifecycle hooks.
*/
export class EnhancedPluginManager {
/**
* @param {import('./jsmind.js').default} jm - jsMind instance
*/
constructor(jm: import("./jsmind.js").default);
jm: import("./jsmind.js").default;
/** @type {Map<string, EnhancedPlugin>} */
plugins: Map<string, EnhancedPlugin>;
/**
* Initialize preload plugins (before core modules)
*/
initPreloadPlugins(): void;
/**
* Initialize normal plugins (after core modules)
*/
initNormalPlugins(): void;
/**
* Internal method: Initialize a single plugin
* @param {PluginDescriptor} descriptor
* @private
*/
private _initPlugin;
/**
* Remove a plugin
* @param {typeof EnhancedPlugin} PluginClass
*/
removePlugin(PluginClass: typeof EnhancedPlugin): void;
/**
* Destroy all plugins
*/
destroyAllPlugins(): void;
/**
* Get plugin instance by name
* @param {string} instanceName
* @returns {EnhancedPlugin | undefined}
*/
getPlugin(instanceName: string): EnhancedPlugin | undefined;
}
/**
* Enhanced Plugin Base Class
* Provides standard interface for enhanced plugins
*/
export class EnhancedPlugin {
/**
* Plugin instance name (must be defined by subclass)
* @type {string}
*/
static instanceName: string;
/**
* Whether to initialize before core modules
* @type {boolean}
*/
static preload: boolean;
/**
* @param {{ jm: import('./jsmind.js').default, pluginOpt: object }} params
*/
constructor({ jm, pluginOpt }: {
jm: import("./jsmind.js").default;
pluginOpt: object;
});
jm: import("./jsmind.js").default;
options: any;
/**
* Called before plugin is removed
* Override this method to clean up resources
*/
beforePluginRemove(): void;
/**
* Called before jsMind instance is destroyed
* Override this method to clean up resources
*/
beforePluginDestroy(): void;
}
/**
* Plugin descriptor
*/
export type PluginDescriptor = {
/**
* - Plugin class
*/
PluginClass: typeof EnhancedPlugin;
/**
* - Plugin instance name
*/
instanceName: string;
/**
* - Whether to preload
*/
preload: boolean;
/**
* - Plugin options
*/
pluginOpt: object;
/**
* - Plugin instance (after initialization)
*/
instance: EnhancedPlugin | null;
};