@lvce-editor/api 8.55.0 → 8.57.0

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.
@@ -37,6 +37,7 @@ export declare const commandMap: {
37
37
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': () => import("../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts").SourceControlProviderRegistrySnapshot;
38
38
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
39
39
  'ExtensionApi.getViewActions': (uid: number) => Promise<readonly import("../View/View.ts").ViewAction[]>;
40
+ 'ExtensionApi.getViewActionsDom': (uid: number) => readonly import("@lvce-editor/virtual-dom-worker").VirtualDomNode[] | undefined;
40
41
  'ExtensionApi.getViewMenuEntries': (uid: number, menuId: string) => Promise<readonly import("../View/View.ts").MenuEntry[]>;
41
42
  'ExtensionApi.getViewRegistrySnapshot': () => import("../View/View.ts").ViewRegistrySnapshot;
42
43
  'ExtensionApi.renderViewInstance': (uid: number) => Promise<import("../View/View.ts").ViewRenderResult>;
@@ -36,6 +36,7 @@ export declare const commandMap: {
36
36
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': () => import("../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts").SourceControlProviderRegistrySnapshot;
37
37
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
38
38
  'ExtensionApi.getViewActions': (uid: number) => Promise<readonly import("../View/View.ts").ViewAction[]>;
39
+ 'ExtensionApi.getViewActionsDom': (uid: number) => readonly import("@lvce-editor/virtual-dom-worker").VirtualDomNode[] | undefined;
39
40
  'ExtensionApi.getViewMenuEntries': (uid: number, menuId: string) => Promise<readonly import("../View/View.ts").MenuEntry[]>;
40
41
  'ExtensionApi.getViewRegistrySnapshot': () => import("../View/View.ts").ViewRegistrySnapshot;
41
42
  'ExtensionApi.renderViewInstance': (uid: number) => Promise<import("../View/View.ts").ViewRenderResult>;
@@ -8,7 +8,7 @@ import { executeLanguageProvider, executeOrganizeImportsProvider } from "../Lang
8
8
  import { getLanguageServerRegistrySnapshot } from "../LanguageServer/LanguageServer.js";
9
9
  import { getOutputChannelRegistrySnapshot } from "../OutputChannel/OutputChannel.js";
10
10
  import { executeSourceControlAcceptInput, executeSourceControlAdd, executeSourceControlDiscard, executeSourceControlGenerateCommitMessage, executeSourceControlGetBadgeCount, executeSourceControlGetChangedFiles, executeSourceControlGetFeatures, executeSourceControlGetFileBefore, executeSourceControlGetFileDecorations, executeSourceControlGetGroups, executeSourceControlIsActive, getSourceControlProviderRegistrySnapshot, } from "../SourceControl/SourceControl.js";
11
- import { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewActions, getViewMenuEntries, getViewRegistrySnapshot, renderViewInstance, saveViewInstanceState, } from "../ViewRegistry/ViewRegistry.js";
11
+ import { createViewInstance, dispatchViewEvent, disposeViewInstance, executeViewProvider, getViewActions, getViewActionsDom, getViewMenuEntries, getViewRegistrySnapshot, renderViewInstance, saveViewInstanceState, } from "../ViewRegistry/ViewRegistry.js";
12
12
  export const commandMap = {
13
13
  'ExtensionApi.createViewInstance': createViewInstance,
14
14
  'ExtensionApi.dispatchViewEvent': dispatchViewEvent,
@@ -43,6 +43,7 @@ export const commandMap = {
43
43
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': getSourceControlProviderRegistrySnapshot,
44
44
  'ExtensionApi.getStatusBarItems': getStatusBarItems,
45
45
  'ExtensionApi.getViewActions': getViewActions,
46
+ 'ExtensionApi.getViewActionsDom': getViewActionsDom,
46
47
  'ExtensionApi.getViewMenuEntries': getViewMenuEntries,
47
48
  'ExtensionApi.getViewRegistrySnapshot': getViewRegistrySnapshot,
48
49
  'ExtensionApi.renderViewInstance': renderViewInstance,
@@ -38,6 +38,7 @@ export declare const commandMap: {
38
38
  'ExtensionApi.getSourceControlProviderRegistrySnapshot': () => import("../SourceControlProviderRegistrySnapshot/SourceControlProviderRegistrySnapshot.ts").SourceControlProviderRegistrySnapshot;
39
39
  'ExtensionApi.getStatusBarItems': () => readonly import("../StatusBarItem/StatusBarItem.ts").StatusBarItem[];
40
40
  'ExtensionApi.getViewActions': (uid: number) => Promise<readonly import("../View/View.ts").ViewAction[]>;
41
+ 'ExtensionApi.getViewActionsDom': (uid: number) => readonly import("@lvce-editor/virtual-dom-worker").VirtualDomNode[] | undefined;
41
42
  'ExtensionApi.getViewMenuEntries': (uid: number, menuId: string) => Promise<readonly import("../View/View.ts").MenuEntry[]>;
42
43
  'ExtensionApi.getViewRegistrySnapshot': () => import("../View/View.ts").ViewRegistrySnapshot;
43
44
  'ExtensionApi.renderViewInstance': (uid: number) => Promise<import("../View/View.ts").ViewRenderResult>;
@@ -8,6 +8,8 @@ export interface ViewContext {
8
8
  readonly viewId: string;
9
9
  }
10
10
  export interface ViewEvent {
11
+ readonly args?: readonly unknown[];
12
+ readonly handler?: string;
11
13
  readonly name?: string;
12
14
  readonly type: string;
13
15
  readonly value?: unknown;
@@ -49,6 +51,7 @@ export interface VirtualDomViewInstance {
49
51
  readonly handleEvent?: (event: ViewEvent) => unknown;
50
52
  readonly render: () => readonly VirtualDomNode[] | Promise<readonly VirtualDomNode[]>;
51
53
  readonly renderActions?: () => readonly ViewAction[] | Promise<readonly ViewAction[]>;
54
+ readonly renderActionsDom?: () => readonly VirtualDomNode[];
52
55
  readonly renderFocus?: (oldContext: Readonly<Record<string, boolean>>, newContext: Readonly<Record<string, boolean>>) => string | Promise<string>;
53
56
  readonly renderScrollPosition?: () => readonly [] | ViewScrollPosition | Promise<readonly [] | ViewScrollPosition>;
54
57
  readonly renderSelections?: () => readonly ViewSelection[] | Promise<readonly ViewSelection[]>;
@@ -1,3 +1,4 @@
1
+ import { type VirtualDomNode } from '@lvce-editor/virtual-dom-worker';
1
2
  import type { Disposable } from '../Disposable/Disposable.ts';
2
3
  import type { MenuEntry, View, ViewAction, ViewContext, ViewEvent, ViewRegistrySnapshot, ViewRenderResult } from '../View/View.ts';
3
4
  export declare const registerView: <State>(view: View<State>) => Disposable;
@@ -9,5 +10,6 @@ export declare const disposeViewInstance: (uid: number) => Promise<void>;
9
10
  export declare const saveViewInstanceState: (uid: number) => Promise<unknown>;
10
11
  export declare const getViewMenuEntries: (uid: number, menuId: string) => Promise<readonly MenuEntry[]>;
11
12
  export declare const getViewActions: (uid: number) => Promise<readonly ViewAction[]>;
13
+ export declare const getViewActionsDom: (uid: number) => readonly VirtualDomNode[] | undefined;
12
14
  export declare const getViewRegistrySnapshot: () => ViewRegistrySnapshot;
13
15
  export declare const resetViewRegistry: () => void;
@@ -470,7 +470,14 @@ export const dispatchViewEvent = async (uid, event) => {
470
470
  const instanceUids = instanceUidsByView[contextViewIds[uid]];
471
471
  instanceUids.delete(uid);
472
472
  instanceUids.add(uid);
473
- if (typeof instance.handleEvent === 'function') {
473
+ if (event.handler) {
474
+ const handler = instance[event.handler];
475
+ if (typeof handler !== 'function') {
476
+ throw new TypeError(`view event handler ${event.handler} is not a function`);
477
+ }
478
+ await Reflect.apply(handler, instance, event.args || []);
479
+ }
480
+ else if (typeof instance.handleEvent === 'function') {
474
481
  await instance.handleEvent(event);
475
482
  }
476
483
  const result = await renderPatches(uid, instance);
@@ -521,6 +528,17 @@ export const getViewActions = async (uid) => {
521
528
  }
522
529
  return normalizeViewActions(await instance.renderActions());
523
530
  };
531
+ export const getViewActionsDom = (uid) => {
532
+ const instance = getVirtualDomInstance(uid);
533
+ if (typeof instance.renderActionsDom !== 'function') {
534
+ return undefined;
535
+ }
536
+ const dom = instance.renderActionsDom();
537
+ if (!Array.isArray(dom)) {
538
+ throw new TypeError('view renderActionsDom result must be an array');
539
+ }
540
+ return dom;
541
+ };
524
542
  export const getViewRegistrySnapshot = () => {
525
543
  return {
526
544
  views: Object.values(views).map(toRegisteredView),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/api",
3
- "version": "8.55.0",
3
+ "version": "8.57.0",
4
4
  "description": "Tree-shakeable extension API for Lvce Editor extensions.",
5
5
  "keywords": [
6
6
  "lvce-editor",