@omicronenergy/oscd-shell 0.0.13 → 0.0.15

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 (36) hide show
  1. package/dist/landing-page/landing-page.js +3 -2
  2. package/dist/landing-page/landing-page.js.map +1 -1
  3. package/dist/landing-page/landing-page.spec.js +4 -2
  4. package/dist/landing-page/landing-page.spec.js.map +1 -1
  5. package/dist/locales/de.d.ts +8 -0
  6. package/dist/locales/de.js +9 -0
  7. package/dist/locales/de.js.map +1 -1
  8. package/dist/menus/files-menu.js +4 -5
  9. package/dist/menus/files-menu.js.map +1 -1
  10. package/dist/menus/plugins-menu.d.ts +6 -3
  11. package/dist/menus/plugins-menu.js +40 -6
  12. package/dist/menus/plugins-menu.js.map +1 -1
  13. package/dist/menus/plugins-menu.spec.js +1 -0
  14. package/dist/menus/plugins-menu.spec.js.map +1 -1
  15. package/dist/oscd-shell-design-tokens.js +139 -64
  16. package/dist/oscd-shell-design-tokens.js.map +1 -1
  17. package/dist/oscd-shell.d.ts +31 -22
  18. package/dist/oscd-shell.js +136 -73
  19. package/dist/oscd-shell.js.map +1 -1
  20. package/dist/side-panel/build-tree-nodes.spec.d.ts +1 -0
  21. package/dist/side-panel/build-tree-nodes.spec.js +50 -0
  22. package/dist/side-panel/build-tree-nodes.spec.js.map +1 -0
  23. package/dist/side-panel/editor-plugins-panel.d.ts +79 -7
  24. package/dist/side-panel/editor-plugins-panel.js +829 -92
  25. package/dist/side-panel/editor-plugins-panel.js.map +1 -1
  26. package/dist/side-panel/editor-plugins-panel.spec.js +469 -24
  27. package/dist/side-panel/editor-plugins-panel.spec.js.map +1 -1
  28. package/dist/utils/plugin-utils.d.ts +29 -5
  29. package/dist/utils/plugin-utils.js +73 -14
  30. package/dist/utils/plugin-utils.js.map +1 -1
  31. package/dist/utils/plugin-utils.spec.js +113 -4
  32. package/dist/utils/plugin-utils.spec.js.map +1 -1
  33. package/dist/utils/testing/plugin-helpers.d.ts +7 -3
  34. package/dist/utils/testing/plugin-helpers.js +21 -9
  35. package/dist/utils/testing/plugin-helpers.js.map +1 -1
  36. package/package.json +37 -38
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable import-x/no-extraneous-dependencies */
2
2
  import { waitUntil } from '@open-wc/testing';
3
+ import { flattenPluginEntries } from '../plugin-utils.js';
3
4
  export const sampleMenuPlugins = [
4
5
  {
5
6
  name: 'Test Menu Plugin',
@@ -15,10 +16,16 @@ export const sampleMenuPlugins = [
15
16
  requireDoc: false,
16
17
  },
17
18
  {
18
- name: 'Test Menu Plugin 3',
19
- src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin3%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',
19
+ name: 'Test Menu Group 1',
20
20
  icon: 'margin',
21
- requireDoc: false,
21
+ plugins: [
22
+ {
23
+ name: 'Test Menu Plugin 3',
24
+ src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin3%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',
25
+ icon: 'margin',
26
+ requireDoc: false,
27
+ },
28
+ ],
22
29
  },
23
30
  ];
24
31
  export const sampleEditorPlugins = [
@@ -34,11 +41,14 @@ export const sampleEditorPlugins = [
34
41
  icon: 'coronavirus',
35
42
  },
36
43
  ];
44
+ export function findPluginByTagName(pluginSet, tagName) {
45
+ return flattenPluginEntries(pluginSet).find(plugin => plugin.tagName === tagName);
46
+ }
37
47
  export const isPluginInstanciated = (pluginTagName, shell) => !!shell.registry?.get(pluginTagName) &&
38
48
  !!shell.shadowRoot?.querySelector(pluginTagName);
39
- export const waitForPluginInstanciation = async (plugin, shell) => waitUntil(() => isPluginInstanciated(plugin.tagName, shell), `Plugin: "${plugin.name}" <${plugin.tagName}> failed to load.
40
- CustomElements Registered: ${shell.registry?.get(plugin.tagName) ? 'Yes' : 'No (at least not in the OscdShell registry)'},
41
- Found in DOM: ${shell.shadowRoot?.querySelector(plugin.tagName) ? 'Yes' : 'No'},
49
+ export const waitForPluginInstanciation = async (plugin, shell) => waitUntil(() => isPluginInstanciated(plugin.tagName, shell), `Plugin: "${plugin.name}" <${plugin.tagName}> failed to load.
50
+ CustomElements Registered: ${shell.registry?.get(plugin.tagName) ? 'Yes' : 'No (at least not in the OscdShell registry)'},
51
+ Found in DOM: ${shell.shadowRoot?.querySelector(plugin.tagName) ? 'Yes' : 'No'},
42
52
  requiresDoc?: ${plugin.requireDoc}
43
53
  loadedDocName?: ${shell.docName}`);
44
54
  export const waitForPluginsToInstantiate = async (plugins, shell) => await Promise.all(plugins.map(plugin => waitForPluginInstanciation(plugin, shell)));
@@ -54,13 +64,15 @@ export const waitForPluginsToInstantiate = async (plugins, shell) => await Promi
54
64
  */
55
65
  export const waitForAllPluginsToInstantiate = async (shell) => {
56
66
  const docLoaded = !!shell.docName;
57
- const editorPlugin = shell.plugins.editor.find(editor => editor.tagName === shell.editor);
58
- const menuPlugins = shell.plugins.menu.filter(plugin => !plugin.requireDoc || docLoaded);
67
+ const editorPlugin = docLoaded && shell.selectedEditor
68
+ ? findPluginByTagName(shell.plugins.editor, shell.selectedEditor.tagName)
69
+ : undefined;
70
+ const menuPlugins = flattenPluginEntries(shell.plugins.menu).filter(plugin => !plugin.requireDoc || docLoaded);
59
71
  const backgroundPlugins = shell.plugins.background.filter(plugin => !plugin.requireDoc || docLoaded);
60
72
  const allPlugins = [
61
73
  ...menuPlugins,
62
74
  ...backgroundPlugins,
63
- ...(docLoaded && editorPlugin ? [editorPlugin] : []),
75
+ ...(editorPlugin ? [editorPlugin] : []),
64
76
  ];
65
77
  return allPlugins.length > 0
66
78
  ? waitForPluginsToInstantiate(allPlugins, shell)
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-helpers.js","sourceRoot":"","sources":["../../../src/utils/testing/plugin-helpers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,CAAC,MAAM,iBAAiB,GAGvB;IACL;QACE,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,EAAE,EAAE,EAAE,uBAAuB,EAAE;QAC7C,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,KAAK;KAClB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,GAAG,EAAE,6MAA6M;QAClN,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,KAAK;KAClB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,GAAG,EAAE,6MAA6M;QAClN,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,KAAK;KAClB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAGzB;IACL;QACE,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE,EAAE,EAAE,EAAE,yBAAyB,EAAE;QAC/C,GAAG,EAAE,8PAA8P;QACnQ,IAAI,EAAE,aAAa;KACpB;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,GAAG,EAAE,8PAA8P;QACnQ,IAAI,EAAE,aAAa;KACpB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,aAAqB,EACrB,KAAgB,EACP,EAAE,CACX,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC7C,MAAmB,EACnB,KAAgB,EACD,EAAE,CACjB,SAAS,CACP,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EACjD,YAAY,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,OAAO;mCACZ,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,6CAA6C;sBACxG,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;sBAC9D,MAAM,CAAC,UAAU;wBACf,KAAK,CAAC,OAAO,EAAE,CACpC,CAAC;AAEJ,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,OAAsB,EACtB,KAAgB,EAChB,EAAE,CACF,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CACjE,CAAC;AAEJ;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,KAAgB,EAAE,EAAE;IACvE,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAElC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,CAC1C,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAC1C,CAAC;IACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CACvD,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAC1C,CAAC;IAEF,MAAM,UAAU,GAAkB;QAChC,GAAG,WAAW;QACd,GAAG,iBAAiB;QACpB,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;IAEF,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,2BAA2B,CAAC,UAAU,EAAE,KAAK,CAAC;QAChD,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAgB,EAChB,OAAe,EACf,WAAqC,EACrC,EAAE;IACF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC","sourcesContent":["/* eslint-disable import-x/no-extraneous-dependencies */\nimport { waitUntil } from '@open-wc/testing';\nimport { OscdShell, PluginEntry } from '../../oscd-shell.js';\n\nexport const sampleMenuPlugins: (Omit<PluginEntry, 'tagName'> & {\n tagName?: string;\n src?: string;\n})[] = [\n {\n name: 'Test Menu Plugin',\n translations: { de: 'Test Menu Erweiterung' },\n tagName: 'test-menu-plugin1',\n icon: 'margin',\n requireDoc: false,\n },\n {\n name: 'Test Menu Plugin 2',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin2%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',\n icon: 'margin',\n requireDoc: false,\n },\n {\n name: 'Test Menu Plugin 3',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin3%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',\n icon: 'margin',\n requireDoc: false,\n },\n];\n\nexport const sampleEditorPlugins: (Omit<PluginEntry, 'tagName'> & {\n tagName?: string;\n src?: string;\n})[] = [\n {\n name: 'Test Editor Plugin',\n translations: { de: 'Test Editor Erweiterung' },\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestEditorPlugin%20extends%20HTMLElement%20%7B%0D%0A%20%20constructor%20%28%29%20%7B%20super%28%29%3B%20this.innerHTML%20%3D%20%60%3Cp%3ETest%20Editor%20Plugin%3C%2Fp%3E%60%3B%20%7D%0D%0A%7D',\n icon: 'coronavirus',\n },\n {\n name: 'Test Editor Plugin 2',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestEditorPlugin%20extends%20HTMLElement%20%7B%0D%0A%20%20constructor%20%28%29%20%7B%20super%28%29%3B%20this.innerHTML%20%3D%20%60%3Cp%3ETest%20Editor%20Plugin%3C%2Fp%3E%60%3B%20%7D%0D%0A%7D',\n icon: 'coronavirus',\n },\n];\n\nexport const isPluginInstanciated = (\n pluginTagName: string,\n shell: OscdShell,\n): boolean =>\n !!shell.registry?.get(pluginTagName) &&\n !!shell.shadowRoot?.querySelector(pluginTagName);\n\nexport const waitForPluginInstanciation = async (\n plugin: PluginEntry,\n shell: OscdShell,\n): Promise<void> =>\n waitUntil(\n () => isPluginInstanciated(plugin.tagName, shell),\n `Plugin: \"${plugin.name}\" <${plugin.tagName}> failed to load. \n CustomElements Registered: ${shell.registry?.get(plugin.tagName) ? 'Yes' : 'No (at least not in the OscdShell registry)'}, \n Found in DOM: ${shell.shadowRoot?.querySelector(plugin.tagName) ? 'Yes' : 'No'}, \n requiresDoc?: ${plugin.requireDoc}\n loadedDocName?: ${shell.docName}`,\n );\n\nexport const waitForPluginsToInstantiate = async (\n plugins: PluginEntry[],\n shell: OscdShell,\n) =>\n await Promise.all(\n plugins.map(plugin => waitForPluginInstanciation(plugin, shell)),\n );\n\n/**\n * Convienience function to wait for all applicable plugins to instantiate.\n * If a document is loaded, all plugins are waited for. If no document is loaded,\n * only plugins that do not require a document are waited for.\n * If no document is loaded, only menu and background plugins are considered, as\n * the landing page does not have an editor.\n *\n * @param shell - The instance of the OscdShell to check for plugin instantiation.\n * @returns Empty Promise that resolves when all applicable plugins have been instantiated.\n */\nexport const waitForAllPluginsToInstantiate = async (shell: OscdShell) => {\n const docLoaded = !!shell.docName;\n\n const editorPlugin = shell.plugins.editor.find(\n editor => editor.tagName === shell.editor,\n );\n\n const menuPlugins = shell.plugins.menu.filter(\n plugin => !plugin.requireDoc || docLoaded,\n );\n const backgroundPlugins = shell.plugins.background.filter(\n plugin => !plugin.requireDoc || docLoaded,\n );\n\n const allPlugins: PluginEntry[] = [\n ...menuPlugins,\n ...backgroundPlugins,\n ...(docLoaded && editorPlugin ? [editorPlugin] : []),\n ];\n\n return allPlugins.length > 0\n ? waitForPluginsToInstantiate(allPlugins, shell)\n : Promise.resolve();\n};\n\nexport const registerPlugin = (\n shell: OscdShell,\n tagName: string,\n pluginClass: CustomElementConstructor,\n) => {\n if (!shell.registry?.get(tagName)) {\n shell.registry?.define(tagName, pluginClass);\n }\n};\n"]}
1
+ {"version":3,"file":"plugin-helpers.js","sourceRoot":"","sources":["../../../src/utils/testing/plugin-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import-x/no-extraneous-dependencies */\nimport { waitUntil } from '@open-wc/testing';\nimport { OscdShell, PluginEntry, PluginGroup } from '../../oscd-shell.js';\nimport { flattenPluginEntries } from '../plugin-utils.js';\n\nexport const sampleMenuPlugins: (\n | PluginGroup<\n Omit<PluginEntry, 'tagName'> & {\n tagName?: string;\n src?: string;\n }\n >\n | (Omit<PluginEntry, 'tagName'> & {\n tagName?: string;\n src?: string;\n })\n)[] = [\n {\n name: 'Test Menu Plugin',\n translations: { de: 'Test Menu Erweiterung' },\n tagName: 'test-menu-plugin1',\n icon: 'margin',\n requireDoc: false,\n },\n {\n name: 'Test Menu Plugin 2',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin2%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',\n icon: 'margin',\n requireDoc: false,\n },\n {\n name: 'Test Menu Group 1',\n icon: 'margin',\n plugins: [\n {\n name: 'Test Menu Plugin 3',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestStrMenuPlugin3%20extends%20HTMLElement%20%7B%0D%0A%20%20async%20run%28%29%20%7B%0D%0A%20%20%20%20return%20true%3B%0D%0A%20%20%7D%0D%0A%7D',\n icon: 'margin',\n requireDoc: false,\n },\n ],\n },\n];\n\nexport const sampleEditorPlugins: (Omit<PluginEntry, 'tagName'> & {\n tagName?: string;\n src?: string;\n})[] = [\n {\n name: 'Test Editor Plugin',\n translations: { de: 'Test Editor Erweiterung' },\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestEditorPlugin%20extends%20HTMLElement%20%7B%0D%0A%20%20constructor%20%28%29%20%7B%20super%28%29%3B%20this.innerHTML%20%3D%20%60%3Cp%3ETest%20Editor%20Plugin%3C%2Fp%3E%60%3B%20%7D%0D%0A%7D',\n icon: 'coronavirus',\n },\n {\n name: 'Test Editor Plugin 2',\n src: 'data:text/javascript;charset=utf-8,export%20default%20class%20TestEditorPlugin%20extends%20HTMLElement%20%7B%0D%0A%20%20constructor%20%28%29%20%7B%20super%28%29%3B%20this.innerHTML%20%3D%20%60%3Cp%3ETest%20Editor%20Plugin%3C%2Fp%3E%60%3B%20%7D%0D%0A%7D',\n icon: 'coronavirus',\n },\n];\n\nexport function findPluginByTagName(\n pluginSet: (PluginEntry | PluginGroup<PluginEntry>)[],\n tagName: string,\n): PluginEntry | undefined {\n return flattenPluginEntries(pluginSet).find(\n plugin => plugin.tagName === tagName,\n );\n}\n\nexport const isPluginInstanciated = (\n pluginTagName: string,\n shell: OscdShell,\n): boolean =>\n !!shell.registry?.get(pluginTagName) &&\n !!shell.shadowRoot?.querySelector(pluginTagName);\n\nexport const waitForPluginInstanciation = async (\n plugin: PluginEntry,\n shell: OscdShell,\n): Promise<void> =>\n waitUntil(\n () => isPluginInstanciated(plugin.tagName, shell),\n `Plugin: \"${plugin.name}\" <${plugin.tagName}> failed to load.\n CustomElements Registered: ${shell.registry?.get(plugin.tagName) ? 'Yes' : 'No (at least not in the OscdShell registry)'},\n Found in DOM: ${shell.shadowRoot?.querySelector(plugin.tagName) ? 'Yes' : 'No'},\n requiresDoc?: ${plugin.requireDoc}\n loadedDocName?: ${shell.docName}`,\n );\n\nexport const waitForPluginsToInstantiate = async (\n plugins: PluginEntry[],\n shell: OscdShell,\n) =>\n await Promise.all(\n plugins.map(plugin => waitForPluginInstanciation(plugin, shell)),\n );\n\n/**\n * Convienience function to wait for all applicable plugins to instantiate.\n * If a document is loaded, all plugins are waited for. If no document is loaded,\n * only plugins that do not require a document are waited for.\n * If no document is loaded, only menu and background plugins are considered, as\n * the landing page does not have an editor.\n *\n * @param shell - The instance of the OscdShell to check for plugin instantiation.\n * @returns Empty Promise that resolves when all applicable plugins have been instantiated.\n */\nexport const waitForAllPluginsToInstantiate = async (shell: OscdShell) => {\n const docLoaded = !!shell.docName;\n\n const editorPlugin =\n docLoaded && shell.selectedEditor\n ? findPluginByTagName(shell.plugins.editor, shell.selectedEditor.tagName)\n : undefined;\n\n const menuPlugins = flattenPluginEntries(shell.plugins.menu).filter(\n plugin => !plugin.requireDoc || docLoaded,\n );\n const backgroundPlugins = shell.plugins.background.filter(\n plugin => !plugin.requireDoc || docLoaded,\n );\n\n const allPlugins: PluginEntry[] = [\n ...menuPlugins,\n ...backgroundPlugins,\n ...(editorPlugin ? [editorPlugin] : []),\n ];\n\n return allPlugins.length > 0\n ? waitForPluginsToInstantiate(allPlugins, shell)\n : Promise.resolve();\n};\n\nexport const registerPlugin = (\n shell: OscdShell,\n tagName: string,\n pluginClass: CustomElementConstructor,\n) => {\n if (!shell.registry?.get(tagName)) {\n shell.registry?.define(tagName, pluginClass);\n }\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omicronenergy/oscd-shell",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "The shell component of OpenSCD, where plugins are loaded and the application is initialized.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,71 +51,70 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@lit/localize": "^0.12.2",
54
- "@omicronenergy/oscd-background-editv1": "^0.0.6",
55
- "@omicronenergy/oscd-editor": "^1.7.1",
56
- "@omicronenergy/oscd-editor-source": "^0.0.1",
54
+ "@omicronenergy/oscd-background-editv1": "^0.0.7",
55
+ "@omicronenergy/oscd-editor-source": "^0.0.5",
57
56
  "@omicronenergy/oscd-menu-commons": "^0.0.1",
58
57
  "@omicronenergy/oscd-menu-open": "^0.0.6",
59
58
  "@omicronenergy/oscd-menu-save": "^0.0.2",
60
- "@omicronenergy/oscd-test-utils": "^0.0.8",
61
- "@omicronenergy/oscd-ui": "^0.0.9",
59
+ "@omicronenergy/oscd-test-utils": "^0.0.11",
60
+ "@omicronenergy/oscd-ui": "^0.0.19",
62
61
  "@open-wc/scoped-elements": "^3.0.6",
63
62
  "@openscd/oscd-api": "^0.1.6",
63
+ "@openscd/oscd-editor": "^1.8.0",
64
64
  "@webcomponents/scoped-custom-element-registry": "^0.0.10",
65
- "lit": "^3.3.1",
65
+ "lit": "^3.3.2",
66
66
  "tslib": "^2.8.1"
67
67
  },
68
68
  "devDependencies": {
69
- "@commitlint/cli": "^19.8.1",
70
- "@commitlint/config-conventional": "^19.8.1",
71
- "@custom-elements-manifest/analyzer": "^0.10.5",
72
- "@eslint/eslintrc": "^3.3.1",
73
- "@eslint/js": "^9.34.0",
74
- "@lit/localize-tools": "^0.8.0",
69
+ "@commitlint/cli": "^20.5.0",
70
+ "@commitlint/config-conventional": "^20.5.0",
71
+ "@custom-elements-manifest/analyzer": "^0.11.0",
72
+ "@eslint/eslintrc": "^3.3.5",
73
+ "@eslint/js": "~9.34.0",
74
+ "@lit/localize-tools": "^0.8.1",
75
75
  "@open-wc/dev-server-hmr": "^0.2.0",
76
76
  "@open-wc/eslint-config": "^13.0.0",
77
- "@open-wc/testing": "^4.0.0",
78
- "@rollup/plugin-node-resolve": "^16.0.1",
79
- "@rollup/plugin-typescript": "^12.1.4",
77
+ "@open-wc/testing": "^5.0.0",
78
+ "@rollup/plugin-node-resolve": "^16.0.3",
79
+ "@rollup/plugin-typescript": "^12.3.0",
80
80
  "@types/mocha": "^10.0.10",
81
- "@typescript-eslint/eslint-plugin": "^8.41.0",
82
- "@typescript-eslint/parser": "^8.41.0",
81
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
82
+ "@typescript-eslint/parser": "^8.58.0",
83
83
  "@ungap/structured-clone": "^1.3.0",
84
84
  "@web/dev-server": "^0.4.6",
85
85
  "@web/dev-server-polyfill": "^1.0.6",
86
- "@web/rollup-plugin-html": "^2.3.0",
87
- "@web/rollup-plugin-import-meta-assets": "^2.3.0",
88
- "@web/test-runner": "0.20.2",
86
+ "@web/rollup-plugin-html": "^3.1.0",
87
+ "@web/rollup-plugin-import-meta-assets": "^2.3.3",
88
+ "@web/test-runner": "^1.0.0",
89
89
  "@web/test-runner-commands": "^0.9.0",
90
- "@web/test-runner-playwright": "0.11.1",
91
- "@web/test-runner-visual-regression": "0.9.0",
90
+ "@web/test-runner-playwright": "^0.11.1",
91
+ "@web/test-runner-visual-regression": "^0.10.0",
92
92
  "concurrently": "^9.2.1",
93
- "eslint": "^9.34.0",
93
+ "eslint": "~9.34.0",
94
94
  "eslint-config-prettier": "^10.1.8",
95
- "eslint-plugin-html": "^8.1.3",
96
- "eslint-plugin-lit": "^2.1.1",
95
+ "eslint-plugin-html": "^8.1.4",
96
+ "eslint-plugin-lit": "^2.2.1",
97
97
  "eslint-plugin-lit-a11y": "^5.1.1",
98
98
  "eslint-plugin-no-only-tests": "^3.3.0",
99
- "eslint-plugin-prettier": "^5.5.4",
100
- "eslint-plugin-tsdoc": "^0.4.0",
101
- "eslint-plugin-wc": "^3.0.1",
99
+ "eslint-plugin-prettier": "^5.5.5",
100
+ "eslint-plugin-tsdoc": "^0.5.2",
101
+ "eslint-plugin-wc": "^3.1.0",
102
102
  "gh-pages": "^6.3.0",
103
103
  "husky": "^9.1.7",
104
- "lint-staged": "^16.1.5",
104
+ "lint-staged": "^16.4.0",
105
105
  "pixelmatch": "^7.1.0",
106
106
  "pngjs": "^7.0.0",
107
- "prettier": "^3.6.2",
108
- "rimraf": "^6.0.1",
109
- "rollup": "^4.49.0",
107
+ "prettier": "^3.8.1",
108
+ "rimraf": "^6.1.3",
109
+ "rollup": "^4.60.1",
110
110
  "rollup-plugin-copy": "^3.5.0",
111
- "sinon": "^21.0.0",
112
- "tsdoc": "^0.0.4",
113
- "typedoc": "^0.28.11",
114
- "typescript": "^5.9.2"
111
+ "sinon": "^21.0.3",
112
+ "typedoc": "^0.28.18",
113
+ "typescript": "^6.0.2"
115
114
  },
116
115
  "overrides": {
117
116
  "@web/test-runner-playwright": {
118
- "playwright": "1.54.1"
117
+ "playwright": "1.59.1"
119
118
  }
120
119
  },
121
120
  "customElements": "custom-elements.json",