From bbbf5bdcaeebc2ccca993cd82a8e00db52b99848 Mon Sep 17 00:00:00 2001 From: Christopher Lepski Date: Mon, 11 Aug 2025 14:35:01 +0200 Subject: [PATCH] feat: Add oscd api with plugin state --- packages/core/api/api.ts | 5 +++++ packages/core/api/plugin-state-api.ts | 22 ++++++++++++++++++++++ packages/core/foundation.ts | 2 ++ packages/openscd/src/open-scd.ts | 2 ++ 4 files changed, 31 insertions(+) create mode 100644 packages/core/api/api.ts create mode 100644 packages/core/api/plugin-state-api.ts diff --git a/packages/core/api/api.ts b/packages/core/api/api.ts new file mode 100644 index 0000000000..a7e78aa601 --- /dev/null +++ b/packages/core/api/api.ts @@ -0,0 +1,5 @@ +import { PluginStateApi } from './plugin-state-api.js'; + +export class OscdApi { + protected pluginState = new PluginStateApi(); +} diff --git a/packages/core/api/plugin-state-api.ts b/packages/core/api/plugin-state-api.ts new file mode 100644 index 0000000000..0d1ec546cb --- /dev/null +++ b/packages/core/api/plugin-state-api.ts @@ -0,0 +1,22 @@ +type PluginState = { + [key: string]: unknown +} + +export class PluginStateApi { + private state: PluginState | null = null; + + public setState(state: PluginState): void { + this.state = state; + } + + getState(): PluginState | null { + return this.state; + } + + updateState(partialState: Partial): void { + this.state = { + ...this.state, + ...partialState + }; + } +} diff --git a/packages/core/foundation.ts b/packages/core/foundation.ts index 80bae0d195..a408b03b73 100644 --- a/packages/core/foundation.ts +++ b/packages/core/foundation.ts @@ -66,3 +66,5 @@ export function crossProduct(...arrays: T[][]): T[][] { [[]] ); } + +export { OscdApi } from './api/api.js'; diff --git a/packages/openscd/src/open-scd.ts b/packages/openscd/src/open-scd.ts index 54673ac570..3736d6d176 100644 --- a/packages/openscd/src/open-scd.ts +++ b/packages/openscd/src/open-scd.ts @@ -45,6 +45,7 @@ import type { Plugin as CorePlugin, EditCompletedEvent, } from '@openscd/core'; +import { OscdApi } from '@openscd/core'; import { HistoryState, historyStateEvent } from './addons/History.js'; @@ -431,6 +432,7 @@ export class OpenSCD extends LitElement { .nsdoc=${this.nsdoc} .docs=${this.docs} .locale=${this.locale} + .oscdApi=${new OscdApi()} class="${classMap({ plugin: true, menu: plugin.kind === 'menu',