@eclipse-lyra/core 0.7.15 → 0.7.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/api/index.js +17 -13
  2. package/dist/api/services.d.ts +1 -0
  3. package/dist/api/services.d.ts.map +1 -1
  4. package/dist/{config-C8viItpG.js → config-CTHJsmbF.js} +16 -6
  5. package/dist/config-CTHJsmbF.js.map +1 -0
  6. package/dist/core/apploader.d.ts +6 -0
  7. package/dist/core/apploader.d.ts.map +1 -1
  8. package/dist/core/contribution-mapping.d.ts +68 -0
  9. package/dist/core/contribution-mapping.d.ts.map +1 -0
  10. package/dist/core/contributionregistry.d.ts +12 -0
  11. package/dist/core/contributionregistry.d.ts.map +1 -1
  12. package/dist/core/ui-ids.d.ts +11 -0
  13. package/dist/core/ui-ids.d.ts.map +1 -0
  14. package/dist/{icon-DN6fp0dg.js → icon-C3H7IMWU.js} +135 -14
  15. package/dist/icon-C3H7IMWU.js.map +1 -0
  16. package/dist/index.js +17 -13
  17. package/dist/{nocontent-BhrN6yxJ.js → nocontent-TgnGDnXO.js} +2 -2
  18. package/dist/{nocontent-BhrN6yxJ.js.map → nocontent-TgnGDnXO.js.map} +1 -1
  19. package/dist/parts/index.js +1 -1
  20. package/dist/{resizable-grid-CIgUY5TR.js → resizable-grid-B6j8J49V.js} +13 -2
  21. package/dist/resizable-grid-B6j8J49V.js.map +1 -0
  22. package/dist/widgets/index.js +2 -2
  23. package/package.json +1 -1
  24. package/src/api/services.ts +6 -0
  25. package/src/contributions/default-ui-contributions.ts +14 -2
  26. package/src/core/apploader.ts +28 -7
  27. package/src/core/contribution-mapping.ts +142 -0
  28. package/src/core/contributionregistry.ts +44 -8
  29. package/src/core/ui-ids.ts +14 -0
  30. package/dist/config-C8viItpG.js.map +0 -1
  31. package/dist/icon-DN6fp0dg.js.map +0 -1
  32. package/dist/resizable-grid-CIgUY5TR.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-DN6fp0dg.js","sources":["../src/core/di.ts","../src/core/toast.ts","../src/core/logger.ts","../src/core/contributionregistry.ts","../src/core/appstate.ts","../src/core/commandregistry.ts","../src/core/signals.ts","../src/widgets/widget.ts","../src/widgets/icon.ts"],"sourcesContent":["export class DependencyContext {\n private variables: any;\n private proxy: any;\n private children: DependencyContext[] = [];\n private parent?: DependencyContext;\n\n constructor(variables: any) {\n this.variables = variables\n // @ts-ignore\n this.proxy = new Proxy(variables, this)\n }\n\n get(target: any, prop: string): any {\n return target[prop] || this.parent?.getProxy()[prop];\n }\n\n set(target: any, prop: string, value: any) {\n target[prop] = value;\n }\n\n put(prop: string, value: any) {\n this.variables[prop] = value;\n }\n\n public getProxy() {\n return this.proxy;\n }\n\n public createChild(variables: any = {}): DependencyContext {\n const child = new DependencyContext(variables)\n child.parent = this\n this.children.push(child)\n return child\n }\n\n getChildren() {\n return this.children;\n }\n\n getParent() {\n return this.parent;\n }\n\n destroy() {\n const index = this.parent?.children.indexOf(this)\n if (index !== undefined && index >= 0) {\n this.parent?.children.splice(index, 1)\n }\n this.parent = undefined\n }\n}\n\nexport const rootContext = new DependencyContext({});\nexport const uiContext = rootContext.createChild({});","import Toastify from 'toastify-js';\nimport 'toastify-js/src/toastify.css';\n\nconst DURATION = 4000;\nconst BASE = { duration: DURATION, gravity: 'bottom' as const, position: 'right' as const, close: true };\n\nconst show = (msg: string, style: { background: string; color: string }) => {\n Toastify({ ...BASE, text: msg, style }).showToast();\n};\n\nexport const toastInfo = (msg: string) => {\n show(msg, { background: 'var(--wa-color-brand-50)', color: 'var(--wa-color-brand-on)' });\n};\n\nexport const toastError = (msg: string) => {\n show(msg, { background: 'var(--wa-color-danger-50)', color: 'var(--wa-color-danger-on)' });\n};\n\nexport const toastWarning = (msg: string) => {\n show(msg, { background: 'var(--wa-color-warning-50)', color: 'var(--wa-color-warning-on)' });\n};\n","import { rootContext } from './di';\n\nexport type LogLevel = 'info' | 'warning' | 'error' | 'debug';\n\nconst LogLevelPriority: Record<LogLevel, number> = {\n 'debug': 0,\n 'info': 1,\n 'warning': 2,\n 'error': 3,\n};\n\n// Global log level filter\nlet globalLogLevel: LogLevel = 'debug';\n\n// Store original console methods before any interception\nconst originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: console.debug.bind(console)\n};\n\n// Log handler type\ntype LogHandler = (source: string, message: string, level: LogLevel) => void;\n\n// Registered log handler (set by UI components like log-terminal)\nlet logHandler: LogHandler | null = null;\n\n// Message buffer for logs that occur before handler is registered\nconst messageBuffer: Array<{source: string, message: string, level: LogLevel}> = [];\n\n// Format console arguments\nfunction formatArg(arg: any): string {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'string') return arg;\n if (typeof arg === 'number' || typeof arg === 'boolean') return String(arg);\n if (arg instanceof Error) return `${arg.name}: ${arg.message}`;\n \n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n}\n\n/**\n * Global logger utility for logging messages\n */\nexport class Logger {\n constructor(private source: string) {}\n\n info(message: string) {\n this.log(message, 'info');\n }\n\n warning(message: string) {\n this.log(message, 'warning');\n }\n\n warn(message: string) {\n this.log(message, 'warning');\n }\n\n error(message: string) {\n this.log(message, 'error');\n }\n\n debug(message: string) {\n this.log(message, 'debug');\n }\n\n private log(message: string, level: LogLevel) {\n dispatch(this.source, message, level);\n }\n}\n\n/**\n * Check if a log level should be displayed based on current filter\n */\nfunction shouldLog(level: LogLevel): boolean {\n return LogLevelPriority[level] >= LogLevelPriority[globalLogLevel];\n}\n\n/**\n * Dispatch a log message to the registered handler (or buffer it if no handler registered)\n */\nfunction dispatch(source: string, message: string, level: LogLevel) {\n if (!shouldLog(level)) {\n return;\n }\n\n if (logHandler) {\n logHandler(source, message, level);\n } else {\n // Buffer the message until handler is registered\n messageBuffer.push({ source, message, level });\n // Also log to console as fallback\n originalConsole[level === 'error' ? 'error' : level === 'warning' ? 'warn' : level === 'debug' ? 'debug' : 'log'](\n `[${source}] ${message}`\n );\n }\n}\n\n/**\n * Initialize console interception globally\n * Note: This is called automatically when the logger module is imported\n */\nexport function initializeConsoleInterception() {\n console.log = function(...args: any[]) {\n originalConsole.log.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.info = function(...args: any[]) {\n originalConsole.info.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'info');\n };\n \n console.warn = function(...args: any[]) {\n originalConsole.warn.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'warning');\n };\n \n console.error = function(...args: any[]) {\n originalConsole.error.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'error');\n };\n \n console.debug = function(...args: any[]) {\n originalConsole.debug.apply(console, args);\n dispatch('Console', args.map(a => formatArg(a)).join(' '), 'debug');\n };\n}\n\n// Auto-initialize console interception when this module is imported\ninitializeConsoleInterception();\n\n/**\n * Register a handler to receive log messages\n * Also flushes any buffered messages to the new handler\n */\nexport function registerLogHandler(handler: LogHandler) {\n logHandler = handler;\n \n // Flush buffered messages\n while (messageBuffer.length > 0) {\n const msg = messageBuffer.shift();\n if (msg) {\n handler(msg.source, msg.message, msg.level);\n }\n }\n}\n\n/**\n * Unregister the current log handler\n */\nexport function unregisterLogHandler() {\n logHandler = null;\n}\n\n/**\n * Create a logger instance for a specific source\n */\nexport function createLogger(source: string): Logger {\n return new Logger(source);\n}\n\n/**\n * Set the global log level filter\n */\nexport function setLogLevel(level: LogLevel) {\n globalLogLevel = level;\n}\n\n/**\n * Default logger instance for backward compatibility\n * This provides a simple logger similar to the old logging.ts\n */\nconst defaultLogger = createLogger('System');\n\n// Register default logger in DI container for backward compatibility\nrootContext.put('logger', defaultLogger);\n\nexport default defaultLogger;\n\n","import {Signal} from \"@lit-labs/signals\";\nimport {TemplateResult} from \"lit\";\nimport {publish} from \"./events\";\nimport {rootContext} from \"./di\";\n\nexport const TOPIC_CONTRIBUTEIONS_CHANGED = \"events/contributionregistry/contributionsChanged\"\n\nexport interface ContributionChangeEvent {\n target: string;\n contributions: Contribution[];\n}\n\nexport interface Contribution {\n target?: string;\n label: string;\n icon?: string;\n slot?: string;\n}\n\nexport interface CommandContribution extends Contribution {\n command: string;\n params?: Record<string, any>;\n showLabel?: boolean;\n disabled?: (() => boolean) | Signal.Computed<boolean>;\n}\n\nexport interface HTMLContribution extends Contribution {\n component: string | (() => TemplateResult)\n}\n\nexport interface TabContribution extends Contribution {\n name: string;\n editorId?: string;\n closable?: boolean;\n noOverflow?: boolean;\n /** When true or omitted, a lyra-toolbar is rendered for this tab; when false, no toolbar is shown. */\n toolbar?: boolean;\n /** When true or omitted, a contextmenu is rendered for this tab; when false, no context menu is shown. */\n contextMenu?: boolean;\n component?: (id: string) => TemplateResult;\n}\n\nexport interface IconContribution extends Contribution {\n mappings: Record<string, string>;\n priority?: number;\n}\n\nexport interface LayoutContribution extends Contribution {\n id: string;\n name: string;\n /** Optional icon name (e.g. Font Awesome) for the layout switcher. */\n icon?: string;\n component: string | { tag: string; attributes?: Record<string, string> } | (() => TemplateResult);\n onShow?: () => void | Promise<void>;\n}\n\nclass ContributionRegistry {\n private contributions: Map<string, Contribution[]> = new Map();\n\n registerContribution<T extends Contribution>(target: string, contribution: T) {\n const targetSlot = this.getContributions(target)!\n if (\"command\" in contribution) {\n const cmd = contribution as unknown as CommandContribution\n if (cmd.disabled instanceof Function) {\n cmd.disabled = new Signal.Computed<boolean>(cmd.disabled)\n }\n }\n targetSlot.push(contribution);\n publish(TOPIC_CONTRIBUTEIONS_CHANGED, { target, contributions: targetSlot } as ContributionChangeEvent)\n }\n\n getContributions<T extends Contribution>(target: string): T[] {\n if (!this.contributions.has(target)) {\n this.contributions.set(target, [])\n }\n return this.contributions.get(target)! as T[]\n }\n}\n\nexport const contributionRegistry = new ContributionRegistry()\nrootContext.put(\"contributionRegistry\", contributionRegistry)","import { signal } from '@lit-labs/signals';\nimport { LyraPart } from \"../parts/part\";\n\nexport const EMPTY_SIGNALPORT = {} as any\n\nexport const activePartSignal = signal<LyraPart>(null as unknown as LyraPart)\nexport const activeEditorSignal = signal<LyraPart>(null as unknown as LyraPart)\n\nexport const partDirtySignal = signal<LyraPart>(null as unknown as LyraPart)\n\nexport const activeTasksSignal = signal<number>(0)\n\nexport const activeSelectionSignal = signal<any>(undefined)\n\nexport const perspectiveSwitchedSignal = signal<{name: string, timestamp: number}>({name: '', timestamp: 0})","import logger from \"./logger\";\nimport { publish } from \"./events\";\nimport { CommandContribution, Contribution, contributionRegistry } from \"./contributionregistry\";\nimport { rootContext } from \"./di\";\nimport { activePartSignal, activeEditorSignal } from \"./appstate\";\n\nexport const TOPIC_COMMAND_REGISTERED = \"events/commandregistry/commandRegistered\";\n\nexport interface Parameter {\n name: string;\n description: string;\n type?: string;\n required: boolean;\n allowedValues?: string[];\n}\n\nexport interface Variable {\n name: string;\n description: string;\n type?: string;\n}\n\nexport interface LLMOptions {\n prompt?: string;\n model?: string;\n}\n\nexport class Command {\n id: string;\n name: string;\n description: string;\n icon?: string;\n keyBinding?: string;\n parameters?: Parameter[];\n output?: Variable[];\n llm?: LLMOptions;\n\n constructor(id: string, name: string, description: string, parameters?: Parameter[], output?: Variable[]) {\n this.id = id;\n this.name = name;\n this.description = description;\n this.parameters = parameters || [];\n this.output = output || [];\n }\n}\n\nexport interface ExecutionContext {\n [key: string]: any;\n\n params?: ExecuteParams;\n activePart?: any;\n activeEditor?: any;\n}\n\nexport interface ExecuteParams {\n [key: string]: any;\n}\n\nexport interface Handler {\n canExecute?: (context: ExecutionContext) => boolean;\n execute: (context: ExecutionContext) => any;\n ranking?: number; // Higher ranking = higher priority (default: 0)\n}\n\nexport interface Commands {\n [commandId: string]: Command\n}\n\nexport class CommandStack {\n //private stack: any[] = []\n\n public async execute(commandId: any, context: ExecutionContext) {\n return commandRegistry.execute(commandId, context);\n }\n\n public async undo() {\n // TODO undo last command on stack\n }\n\n public async redo() {\n // TODO redo last command on stack\n }\n}\n\nexport class CommandRegistry {\n private commands: Commands = {};\n private handlers: Map<string, Handler[]> = new Map();\n\n registerHandler(commandId: string, handler: Handler) {\n if (!this.handlers.has(commandId)) {\n this.handlers.set(commandId, []);\n }\n const handlerList = this.handlers.get(commandId) as Handler[];\n handlerList.push(handler);\n // Sort by ranking (higher ranking first), default ranking is 0\n handlerList.sort((a, b) => (b.ranking ?? 0) - (a.ranking ?? 0));\n }\n\n getHandler(commandId: string): Handler[] | undefined {\n return this.handlers.get(commandId)\n }\n\n /**\n * Creates an ExecutionContext with the current application state\n * \n * @param params Optional command parameters\n * @returns ExecutionContext with captured application state\n */\n createExecutionContext(params?: ExecuteParams): ExecutionContext {\n const context: ExecutionContext = {\n params: params || {},\n activePart: activePartSignal.get(),\n activeEditor: activeEditorSignal.get()\n };\n\n return context;\n }\n\n execute(commandId: string, context: ExecutionContext = {}) {\n const handlers = this.getHandler(commandId);\n\n if (!handlers) {\n logger.debug(`[CommandRegistry] No handlers registered for command: ${commandId}`);\n throw new Error(`No handlers registered for command: ${commandId}`);\n }\n\n const command = this.getCommand(commandId);\n const paramsStr = context.params ? ` params: ${JSON.stringify(context.params)}` : '';\n logger.debug(`[CommandRegistry] Executing command: ${commandId}${command ? ` (${command.name})` : ''}${paramsStr}`);\n\n // Handlers are already sorted by ranking, so iterate in order\n for (const handler of handlers) {\n if (handler.canExecute === undefined || handler.canExecute(context)) {\n try {\n const result: any | Promise<any> = handler.execute(context);\n logger.debug(`[CommandRegistry] Command executed successfully: ${commandId} (result: ${result})`);\n return result;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n logger.error(`[CommandRegistry] Command execution failed: ${commandId} - ${errorMsg}`);\n throw error;\n }\n }\n }\n logger.error(`[CommandRegistry] No handler found to execute command: ${commandId}`);\n }\n\n createAndRegisterCommand(id: string, name: string, description: string, parameters: Parameter[], handler?: Handler) {\n const command = new Command(id, name, description, parameters);\n this.registerCommand(command)\n if (handler) {\n this.registerHandler(id, handler)\n }\n }\n\n registerCommand(command: Command): void {\n this.commands[command.id] = command;\n logger.debug(`Command registered: ${command.id}`);\n publish(TOPIC_COMMAND_REGISTERED, command);\n }\n\n hasCommand(commandId: string): boolean {\n return commandId in this.commands\n }\n\n listCommands(context?: ExecutionContext): Commands {\n if (context) {\n // filter by commands which have at least one executable handler\n return Object.values(this.commands).filter(command => {\n const handlers = commandRegistry.getHandler(command.id) || []\n return handlers.some(handler => handler.canExecute === undefined || handler.canExecute(context))\n }).reduce((acc: any, command) => {\n acc[command.id] = command\n return acc\n }, {})\n }\n return this.commands\n }\n\n getCommand(commandId: string): Command {\n return <Command>this.commands[commandId]\n }\n\n registerAll(options: RegisterOptions) {\n const commandId = options.command.id\n this.registerCommand(options.command)\n if (options.handler) {\n this.registerHandler(commandId, options.handler)\n }\n if (options.contribution && options.contribution.target) {\n contributionRegistry.registerContribution(options.contribution.target, {\n command: commandId,\n ...options.contribution\n } as CommandContribution)\n }\n }\n}\n\nexport const commandRegistry = new CommandRegistry();\nrootContext.put(\"commandRegistry\", commandRegistry);\n\nexport interface RegisterOptions {\n command: Command,\n handler?: Handler,\n contribution?: Contribution & Partial<Pick<CommandContribution, 'disabled'>>\n}\n\nexport const registerAll = (options: RegisterOptions) => {\n commandRegistry.registerAll(options);\n}","import {Signal} from \"@lit-labs/signals\";\n\nexport const watchSignal = (signal: Signal.State<any> | Signal.Computed<any>, callback: (value: any) => void): (() => void) => {\n const watcher = new Signal.subtle.Watcher(async () => {\n try {\n await 0;\n callback(signal.get());\n } finally {\n watcher.watch(signal);\n }\n });\n watcher.watch(signal);\n signal.get();\n \n return () => {\n watcher.unwatch(signal);\n };\n}\n","import {LitElement, PropertyValues} from \"lit\";\nimport {subscribe as event_subscribe, unsubscribe as event_unsubscribe, type SubscriptionToken} from \"../core/events\";\nimport {toastError, toastInfo} from \"../core/toast\";\nimport {commandRegistry, ExecuteParams} from \"../core/commandregistry\";\nimport {Signal, SignalWatcher} from \"@lit-labs/signals\";\nimport {watchSignal} from \"../core/signals\";\n\nObject.defineProperty(LitElement.prototype, \"model\", {\n enumerable: true,\n configurable: true,\n writable: true\n});\n\nconst LyraWidgetBase = SignalWatcher(LitElement) as unknown as typeof LitElement;\n\nexport abstract class LyraWidget extends LyraWidgetBase {\n private signalCleanups = new Set<() => void>();\n private eventSubscriptions = new Set<SubscriptionToken>();\n\n connectedCallback() {\n super.connectedCallback();\n this.doBeforeUI()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.eventSubscriptions.forEach(token => event_unsubscribe(token));\n this.eventSubscriptions.clear();\n this.signalCleanups.forEach(cleanup => cleanup());\n this.signalCleanups.clear();\n }\n\n protected subscribe(topic: string, callback: Function): void {\n const token = event_subscribe(topic, callback.bind(this));\n this.eventSubscriptions.add(token);\n }\n\n protected showInfo(msg: string) {\n toastInfo(msg)\n }\n\n protected showError(msg: string) {\n toastError(msg)\n }\n\n protected nobubble(wrap: (event: Event) => void) {\n return (event: Event) => {\n event.stopPropagation();\n wrap.bind(this)(event);\n };\n }\n\n protected command(command: string, state: {} = {}) {\n return () => {\n this.executeCommand(command, state)\n };\n }\n\n protected executeCommand(command: string, params: ExecuteParams) {\n const execContext = commandRegistry.createExecutionContext(params);\n commandRegistry.execute(command, execContext);\n }\n\n protected watch(signal: Signal.State<any> | Signal.Computed<any>, callback: (value: any) => void): void {\n const cleanup = watchSignal(signal as Signal.State<any>, callback.bind(this));\n this.signalCleanups.add(cleanup);\n }\n\n protected firstUpdated(_changedProperties: PropertyValues) {\n super.firstUpdated(_changedProperties);\n this.doInitUI()\n }\n\n protected updateIdle() {\n requestIdleCallback(() => this.requestUpdate())\n }\n\n public updateLater() {\n requestAnimationFrame(() => this.requestUpdate())\n }\n\n protected doBeforeUI() {\n }\n\n protected doInitUI() {\n }\n\n withRefresh(callback: () => void) {\n callback()\n this.updateLater()\n }\n}\n","import {customElement, property} from 'lit/decorators.js'\nimport {html, nothing, css} from 'lit';\n\nimport {LyraWidget} from \"./widget\";\n\n@customElement('lyra-icon')\nexport class LyraIcon extends LyraWidget {\n\n @property()\n name?: string;\n\n @property()\n family?: string = \"regular\";\n\n @property()\n variant?: string;\n\n @property()\n label?: string;\n\n render() {\n if (!this.name) {\n return \"\"\n }\n const parts = this.name.trim().split(/ +/)\n const iconName = parts.pop()\n const library = parts.pop()\n return html`\n <wa-icon library=\"${library || nothing}\" variant=\"${this.variant || nothing}\"\n family=\"${this.family || nothing}\" name=${iconName} label=\"${this.label || this.name || nothing}\"></wa-icon>`\n }\n\n static styles = css`\n :host {\n display: contents;\n }\n `\n}\n"],"names":["logger","signal","event_unsubscribe","event_subscribe"],"mappings":"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"}