@compas-oscd/open-scd 0.34.13 → 0.34.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 (178) hide show
  1. package/dist/addons/Editor.d.ts +2 -2
  2. package/dist/addons/Editor.js +4 -4
  3. package/dist/addons/Editor.js.map +1 -1
  4. package/dist/addons/History.d.ts +2 -2
  5. package/dist/addons/History.js.map +1 -1
  6. package/dist/addons/Layout.d.ts +1 -1
  7. package/dist/addons/Layout.js +2 -2
  8. package/dist/addons/Layout.js.map +1 -1
  9. package/dist/addons/Settings.d.ts +1 -1
  10. package/dist/addons/Settings.js +2 -2
  11. package/dist/addons/Settings.js.map +1 -1
  12. package/dist/addons/Waiter.js.map +1 -1
  13. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +2 -2
  14. package/dist/addons/editor/edit-action-to-v1-converter.js +1 -1
  15. package/dist/addons/editor/edit-action-to-v1-converter.js.map +1 -1
  16. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +1 -1
  17. package/dist/addons/editor/edit-v1-to-v2-converter.js +1 -1
  18. package/dist/addons/editor/edit-v1-to-v2-converter.js.map +1 -1
  19. package/dist/addons/history/get-log-text.d.ts +1 -1
  20. package/dist/addons/history/get-log-text.js +1 -1
  21. package/dist/addons/history/get-log-text.js.map +1 -1
  22. package/dist/foundation/ied.d.ts +1 -1
  23. package/dist/foundation/ied.js.map +1 -1
  24. package/dist/foundation.d.ts +1 -1
  25. package/dist/foundation.js.map +1 -1
  26. package/dist/open-scd.d.ts +2 -2
  27. package/dist/open-scd.js +4 -4
  28. package/dist/open-scd.js.map +1 -1
  29. package/dist/plugin.d.ts +1 -1
  30. package/dist/plugin.js.map +1 -1
  31. package/dist/themes.d.ts +1 -1
  32. package/dist/themes.js.map +1 -1
  33. package/dist/translations/loader.js.map +1 -1
  34. package/dist/wizard-dialog.js +1 -1
  35. package/dist/wizard-dialog.js.map +1 -1
  36. package/dist/wizards.js.map +1 -1
  37. package/package.json +2 -2
  38. package/dist/src/WizardDivider.d.ts +0 -8
  39. package/dist/src/WizardDivider.js +0 -37
  40. package/dist/src/WizardDivider.js.map +0 -1
  41. package/dist/src/Wizarding.d.ts +0 -10
  42. package/dist/src/Wizarding.js +0 -38
  43. package/dist/src/Wizarding.js.map +0 -1
  44. package/dist/src/action-icon.d.ts +0 -25
  45. package/dist/src/action-icon.js +0 -220
  46. package/dist/src/action-icon.js.map +0 -1
  47. package/dist/src/action-pane.d.ts +0 -25
  48. package/dist/src/action-pane.js +0 -176
  49. package/dist/src/action-pane.js.map +0 -1
  50. package/dist/src/addons/Editor.d.ts +0 -25
  51. package/dist/src/addons/Editor.js +0 -106
  52. package/dist/src/addons/Editor.js.map +0 -1
  53. package/dist/src/addons/History.d.ts +0 -93
  54. package/dist/src/addons/History.js +0 -491
  55. package/dist/src/addons/History.js.map +0 -1
  56. package/dist/src/addons/Layout.d.ts +0 -96
  57. package/dist/src/addons/Layout.js +0 -619
  58. package/dist/src/addons/Layout.js.map +0 -1
  59. package/dist/src/addons/Settings.d.ts +0 -68
  60. package/dist/src/addons/Settings.js +0 -465
  61. package/dist/src/addons/Settings.js.map +0 -1
  62. package/dist/src/addons/Waiter.d.ts +0 -14
  63. package/dist/src/addons/Waiter.js +0 -45
  64. package/dist/src/addons/Waiter.js.map +0 -1
  65. package/dist/src/addons/Wizards.d.ts +0 -15
  66. package/dist/src/addons/Wizards.js +0 -48
  67. package/dist/src/addons/Wizards.js.map +0 -1
  68. package/dist/src/addons/editor/edit-action-to-v1-converter.d.ts +0 -3
  69. package/dist/src/addons/editor/edit-action-to-v1-converter.js +0 -96
  70. package/dist/src/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  71. package/dist/src/addons/editor/edit-v1-to-v2-converter.d.ts +0 -2
  72. package/dist/src/addons/editor/edit-v1-to-v2-converter.js +0 -37
  73. package/dist/src/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  74. package/dist/src/addons/history/get-log-text.d.ts +0 -5
  75. package/dist/src/addons/history/get-log-text.js +0 -26
  76. package/dist/src/addons/history/get-log-text.js.map +0 -1
  77. package/dist/src/addons/menu-tabs/menu-tabs.d.ts +0 -22
  78. package/dist/src/addons/menu-tabs/menu-tabs.js +0 -74
  79. package/dist/src/addons/menu-tabs/menu-tabs.js.map +0 -1
  80. package/dist/src/addons/plugin-manager/custom-plugin-dialog.d.ts +0 -28
  81. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js +0 -177
  82. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  83. package/dist/src/addons/plugin-manager/plugin-manager.d.ts +0 -20
  84. package/dist/src/addons/plugin-manager/plugin-manager.js +0 -165
  85. package/dist/src/addons/plugin-manager/plugin-manager.js.map +0 -1
  86. package/dist/src/filtered-list.d.ts +0 -27
  87. package/dist/src/filtered-list.js +0 -168
  88. package/dist/src/filtered-list.js.map +0 -1
  89. package/dist/src/finder-list.d.ts +0 -37
  90. package/dist/src/finder-list.js +0 -207
  91. package/dist/src/finder-list.js.map +0 -1
  92. package/dist/src/foundation/compare.d.ts +0 -79
  93. package/dist/src/foundation/compare.js +0 -273
  94. package/dist/src/foundation/compare.js.map +0 -1
  95. package/dist/src/foundation/dai.d.ts +0 -30
  96. package/dist/src/foundation/dai.js +0 -127
  97. package/dist/src/foundation/dai.js.map +0 -1
  98. package/dist/src/foundation/generators.d.ts +0 -13
  99. package/dist/src/foundation/generators.js +0 -67
  100. package/dist/src/foundation/generators.js.map +0 -1
  101. package/dist/src/foundation/ied.d.ts +0 -22
  102. package/dist/src/foundation/ied.js +0 -84
  103. package/dist/src/foundation/ied.js.map +0 -1
  104. package/dist/src/foundation/nsd.d.ts +0 -4
  105. package/dist/src/foundation/nsd.js +0 -13
  106. package/dist/src/foundation/nsd.js.map +0 -1
  107. package/dist/src/foundation/nsdoc.d.ts +0 -14
  108. package/dist/src/foundation/nsdoc.js +0 -180
  109. package/dist/src/foundation/nsdoc.js.map +0 -1
  110. package/dist/src/foundation/scl.d.ts +0 -1
  111. package/dist/src/foundation/scl.js +0 -64
  112. package/dist/src/foundation/scl.js.map +0 -1
  113. package/dist/src/foundation.d.ts +0 -230
  114. package/dist/src/foundation.js +0 -1922
  115. package/dist/src/foundation.js.map +0 -1
  116. package/dist/src/icons/compare.d.ts +0 -3
  117. package/dist/src/icons/compare.js +0 -11
  118. package/dist/src/icons/compare.js.map +0 -1
  119. package/dist/src/icons/icons.d.ts +0 -41
  120. package/dist/src/icons/icons.js +0 -611
  121. package/dist/src/icons/icons.js.map +0 -1
  122. package/dist/src/icons/ied-icons.d.ts +0 -3
  123. package/dist/src/icons/ied-icons.js +0 -11
  124. package/dist/src/icons/ied-icons.js.map +0 -1
  125. package/dist/src/icons/lnode.d.ts +0 -16
  126. package/dist/src/icons/lnode.js +0 -50
  127. package/dist/src/icons/lnode.js.map +0 -1
  128. package/dist/src/open-scd.d.ts +0 -131
  129. package/dist/src/open-scd.js +0 -483
  130. package/dist/src/open-scd.js.map +0 -1
  131. package/dist/src/oscd-filter-button.d.ts +0 -27
  132. package/dist/src/oscd-filter-button.js +0 -89
  133. package/dist/src/oscd-filter-button.js.map +0 -1
  134. package/dist/src/plain-compare-list.d.ts +0 -36
  135. package/dist/src/plain-compare-list.js +0 -132
  136. package/dist/src/plain-compare-list.js.map +0 -1
  137. package/dist/src/plugin-tag.d.ts +0 -6
  138. package/dist/src/plugin-tag.js +0 -23
  139. package/dist/src/plugin-tag.js.map +0 -1
  140. package/dist/src/plugin.d.ts +0 -23
  141. package/dist/src/plugin.events.d.ts +0 -15
  142. package/dist/src/plugin.events.js +0 -12
  143. package/dist/src/plugin.events.js.map +0 -1
  144. package/dist/src/plugin.js +0 -2
  145. package/dist/src/plugin.js.map +0 -1
  146. package/dist/src/plugins.d.ts +0 -3
  147. package/dist/src/plugins.js +0 -256
  148. package/dist/src/plugins.js.map +0 -1
  149. package/dist/src/schemas.d.ts +0 -58
  150. package/dist/src/schemas.js +0 -9325
  151. package/dist/src/schemas.js.map +0 -1
  152. package/dist/src/themes.d.ts +0 -3
  153. package/dist/src/themes.js +0 -122
  154. package/dist/src/themes.js.map +0 -1
  155. package/dist/src/translations/de.d.ts +0 -2
  156. package/dist/src/translations/de.js +0 -954
  157. package/dist/src/translations/de.js.map +0 -1
  158. package/dist/src/translations/en.d.ts +0 -963
  159. package/dist/src/translations/en.js +0 -950
  160. package/dist/src/translations/en.js.map +0 -1
  161. package/dist/src/translations/loader.d.ts +0 -12
  162. package/dist/src/translations/loader.js +0 -10
  163. package/dist/src/translations/loader.js.map +0 -1
  164. package/dist/src/wizard-checkbox.d.ts +0 -37
  165. package/dist/src/wizard-checkbox.js +0 -152
  166. package/dist/src/wizard-checkbox.js.map +0 -1
  167. package/dist/src/wizard-dialog.d.ts +0 -45
  168. package/dist/src/wizard-dialog.js +0 -374
  169. package/dist/src/wizard-dialog.js.map +0 -1
  170. package/dist/src/wizard-select.d.ts +0 -31
  171. package/dist/src/wizard-select.js +0 -115
  172. package/dist/src/wizard-select.js.map +0 -1
  173. package/dist/src/wizard-textfield.d.ts +0 -50
  174. package/dist/src/wizard-textfield.js +0 -191
  175. package/dist/src/wizard-textfield.js.map +0 -1
  176. package/dist/src/wizards.d.ts +0 -23
  177. package/dist/src/wizards.js +0 -196
  178. package/dist/src/wizards.js.map +0 -1
@@ -1,483 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { customElement, html, LitElement, property, state, } from 'lit-element';
3
- import { classMap } from 'lit-html/directives/class-map';
4
- import '@material/mwc-icon';
5
- import '@material/mwc-icon-button';
6
- import '@material/mwc-linear-progress';
7
- import '@material/mwc-list';
8
- import '@material/mwc-list/mwc-list-item';
9
- import '@material/mwc-tab';
10
- import '@material/mwc-tab-bar';
11
- import '@material/mwc-top-app-bar-fixed';
12
- import '@material/mwc-drawer';
13
- import '@material/mwc-button';
14
- import '@material/mwc-dialog';
15
- import '@material/mwc-formfield';
16
- import '@material/mwc-list/mwc-check-list-item';
17
- import '@material/mwc-list/mwc-radio-list-item';
18
- import '@material/mwc-select';
19
- import '@material/mwc-switch';
20
- import '@material/mwc-textfield';
21
- import { newOpenDocEvent } from '@openscd/core/foundation/deprecated/open-event.js';
22
- import { newPendingStateEvent } from '@openscd/core/foundation/deprecated/waiter.js';
23
- import './addons/Settings.js';
24
- import './addons/Waiter.js';
25
- import './addons/Wizards.js';
26
- import './addons/Editor.js';
27
- import './addons/History.js';
28
- import './addons/Layout.js';
29
- import { officialPlugins as builtinPlugins } from './plugins.js';
30
- import { initializeNsdoc } from './foundation/nsdoc.js';
31
- import { OscdApi, XMLEditor } from '@openscd/core';
32
- import { newConfigurePluginEvent } from './plugin.events.js';
33
- import { newLogEvent } from '@openscd/core/foundation/deprecated/history';
34
- import { pluginTag } from './plugin-tag.js';
35
- /** The `<open-scd>` custom element is the main entry point of the
36
- * Open Substation Configuration Designer. */
37
- let OpenSCD = class OpenSCD extends LitElement {
38
- constructor() {
39
- super(...arguments);
40
- this.doc = null;
41
- /** The name of the current [[`doc`]] */
42
- this.docName = '';
43
- /** The UUID of the current [[`doc`]] */
44
- this.docId = '';
45
- this.editor = new XMLEditor();
46
- /** Object containing all *.nsdoc files and a function extracting element's label form them*/
47
- this.nsdoc = initializeNsdoc();
48
- this.currentSrc = '';
49
- this.storedPlugins = [];
50
- this.editCount = -1;
51
- this.unsubscribers = [];
52
- /**
53
- * @prop {PluginSet} plugins - Set of plugins that are used by OpenSCD
54
- */
55
- this.plugins = { menu: [], editor: [] };
56
- this.loadedPlugins = new Set();
57
- // PLUGGING INTERFACES
58
- this.pluginTags = new Map();
59
- }
60
- render() {
61
- return html `<oscd-waiter>
62
- <oscd-settings .host=${this}>
63
- <oscd-wizards .host=${this}>
64
- <oscd-history
65
- .host=${this}
66
- .editor=${this.editor}
67
- >
68
- <oscd-editor
69
- .doc=${this.doc}
70
- .docName=${this.docName}
71
- .docId=${this.docId}
72
- .host=${this}
73
- .editCount=${this.editCount}
74
- .editor=${this.editor}
75
- >
76
- <oscd-layout
77
- @add-external-plugin=${this.handleAddExternalPlugin}
78
- @oscd-configure-plugin=${this.handleConfigurationPluginEvent}
79
- @set-plugins=${(e) => this.setPlugins(e.detail.selectedPlugins)}
80
- .host=${this}
81
- .doc=${this.doc}
82
- .docName=${this.docName}
83
- .editCount=${this.editCount}
84
- .plugins=${this.storedPlugins}
85
- .editor=${this.editor}
86
- >
87
- </oscd-layout>
88
- </oscd-editor>
89
- </oscd-history>
90
- </oscd-wizards>
91
- </oscd-settings>
92
- </oscd-waiter>`;
93
- }
94
- /** The current file's URL. `blob:` URLs are *revoked after parsing*! */
95
- get src() {
96
- return this.currentSrc;
97
- }
98
- set src(value) {
99
- this.currentSrc = value;
100
- this.dispatchEvent(newPendingStateEvent(this.loadDoc(value)));
101
- }
102
- /** Loads and parses an `XMLDocument` after [[`src`]] has changed. */
103
- async loadDoc(src) {
104
- const response = await fetch(src);
105
- const text = await response.text();
106
- if (!text)
107
- return;
108
- const doc = new DOMParser().parseFromString(text, 'application/xml');
109
- const docName = src;
110
- this.dispatchEvent(newOpenDocEvent(doc, docName));
111
- if (src.startsWith('blob:'))
112
- URL.revokeObjectURL(src);
113
- }
114
- /**
115
- *
116
- * @deprecated Use `handleConfigurationPluginEvent` instead
117
- */
118
- handleAddExternalPlugin(e) {
119
- this.addExternalPlugin(e.detail.plugin);
120
- const { name, kind } = e.detail.plugin;
121
- const event = newConfigurePluginEvent(name, kind, e.detail.plugin);
122
- this.handleConfigurationPluginEvent(event);
123
- }
124
- handleConfigurationPluginEvent(e) {
125
- const { name, kind, config } = e.detail;
126
- const hasPlugin = this.hasPlugin(name, kind);
127
- const hasConfig = config !== null;
128
- const isChangeEvent = hasPlugin && hasConfig;
129
- const isRemoveEvent = hasPlugin && !hasConfig;
130
- const isAddEvent = !hasPlugin && hasConfig;
131
- // the `&& config`is only because typescript
132
- // cannot infer that `isChangeEvent` and `isAddEvent` implies `config !== null`
133
- if (isChangeEvent && config) {
134
- this.changePlugin(config);
135
- }
136
- else if (isRemoveEvent) {
137
- this.removePlugin(name, kind);
138
- }
139
- else if (isAddEvent && config) {
140
- this.addPlugin(config);
141
- }
142
- else {
143
- const event = newLogEvent({
144
- kind: "error",
145
- title: "Invalid plugin configuration event",
146
- message: JSON.stringify({ name, kind, config }),
147
- });
148
- this.dispatchEvent(event);
149
- }
150
- }
151
- connectedCallback() {
152
- super.connectedCallback();
153
- this.loadPlugins();
154
- this.unsubscribers.push(this.editor.subscribe(e => this.editCount++), this.editor.subscribeUndoRedo(e => this.editCount++));
155
- // TODO: let Lit handle the event listeners, move to render()
156
- this.addEventListener('reset-plugins', this.resetPlugins);
157
- }
158
- disconnectedCallback() {
159
- this.unsubscribers.forEach(u => u());
160
- }
161
- /**
162
- *
163
- * @param name
164
- * @param kind
165
- * @returns the index of the plugin in the stored plugin list
166
- */
167
- findPluginIndex(name, kind) {
168
- return this.storedPlugins.findIndex(p => p.name === name && p.kind === kind);
169
- }
170
- hasPlugin(name, kind) {
171
- return this.findPluginIndex(name, kind) > -1;
172
- }
173
- removePlugin(name, kind) {
174
- const newPlugins = this.storedPlugins.filter(p => p.name !== name || p.kind !== kind);
175
- this.updateStoredPlugins(newPlugins);
176
- }
177
- addPlugin(plugin) {
178
- const newPlugins = [...this.storedPlugins, plugin];
179
- this.updateStoredPlugins(newPlugins);
180
- }
181
- /**
182
- *
183
- * @param plugin
184
- * @throws if the plugin is not found
185
- */
186
- changePlugin(plugin) {
187
- const storedPlugins = this.storedPlugins;
188
- const { name, kind } = plugin;
189
- const pluginIndex = this.findPluginIndex(name, kind);
190
- if (pluginIndex < 0) {
191
- const event = newLogEvent({
192
- kind: "error",
193
- title: "Plugin not found, stopping change process",
194
- message: JSON.stringify({ name, kind }),
195
- });
196
- this.dispatchEvent(event);
197
- return;
198
- }
199
- const pluginToChange = storedPlugins[pluginIndex];
200
- const changedPlugin = { ...pluginToChange, ...plugin };
201
- const newPlugins = [...storedPlugins];
202
- newPlugins.splice(pluginIndex, 1, changedPlugin);
203
- // this.storePlugins(newPlugins);
204
- this.updateStoredPlugins(newPlugins);
205
- }
206
- resetPlugins() {
207
- const builtInPlugins = this.getBuiltInPlugins();
208
- const allPlugins = [...builtInPlugins, ...this.parsedPlugins];
209
- const newPluginConfigs = allPlugins.map(plugin => {
210
- return {
211
- ...plugin,
212
- active: plugin.activeByDefault ?? false,
213
- };
214
- });
215
- this.storePlugins(newPluginConfigs);
216
- }
217
- get parsedPlugins() {
218
- const menuPlugins = this.plugins.menu.map((plugin) => {
219
- let newPosition = plugin.position;
220
- if (typeof plugin.position === 'number') {
221
- newPosition = undefined;
222
- }
223
- return {
224
- ...plugin,
225
- position: newPosition,
226
- kind: 'menu',
227
- active: plugin.active ?? false,
228
- };
229
- });
230
- const editorPlugins = this.plugins.editor.map((plugin) => {
231
- const editorPlugin = {
232
- ...plugin,
233
- position: undefined,
234
- kind: 'editor',
235
- active: plugin.active ?? false,
236
- };
237
- return editorPlugin;
238
- });
239
- const allPlugnis = [...menuPlugins, ...editorPlugins];
240
- return allPlugnis;
241
- }
242
- updateStoredPlugins(newPlugins) {
243
- //
244
- // Generate content of each plugin
245
- //
246
- const plugins = newPlugins.map(plugin => {
247
- const isInstalled = plugin.src && plugin.active;
248
- if (!isInstalled) {
249
- return plugin;
250
- }
251
- return this.addContent(plugin);
252
- });
253
- //
254
- // Merge built-in plugins
255
- //
256
- const mergedPlugins = plugins.map(plugin => {
257
- const isBuiltIn = !plugin?.official;
258
- if (!isBuiltIn) {
259
- return plugin;
260
- }
261
- ;
262
- const builtInPlugin = [...this.getBuiltInPlugins(), ...this.parsedPlugins]
263
- .find(p => p.src === plugin.src);
264
- return {
265
- ...builtInPlugin,
266
- ...plugin,
267
- };
268
- });
269
- this.storePlugins(mergedPlugins);
270
- }
271
- storePlugins(plugins) {
272
- this.storedPlugins = plugins;
273
- const pluginConfigs = JSON.stringify(plugins.map(withoutContent));
274
- localStorage.setItem('plugins', pluginConfigs);
275
- }
276
- getPluginConfigsFromLocalStorage() {
277
- const pluginsConfigStr = localStorage.getItem('plugins') ?? '[]';
278
- return JSON.parse(pluginsConfigStr);
279
- }
280
- get locale() {
281
- return navigator.language || 'en-US';
282
- }
283
- get docs() {
284
- const docs = {};
285
- if (this.doc) {
286
- docs[this.docName] = this.doc;
287
- }
288
- return docs;
289
- }
290
- setPlugins(selectedPlugins) {
291
- const newPlugins = this.storedPlugins.map((storedPlugin) => {
292
- const isSelected = selectedPlugins.some((selectedPlugin) => {
293
- return selectedPlugin.name === storedPlugin.name
294
- && selectedPlugin.src === storedPlugin.src;
295
- });
296
- return {
297
- ...storedPlugin,
298
- active: isSelected
299
- };
300
- });
301
- this.updateStoredPlugins(newPlugins);
302
- }
303
- loadPlugins() {
304
- const localPluginConfigs = this.getPluginConfigsFromLocalStorage();
305
- const overwritesOfBultInPlugins = localPluginConfigs.filter((p) => {
306
- return this.getBuiltInPlugins().some(b => b.src === p.src);
307
- });
308
- const userInstalledPlugins = localPluginConfigs.filter((p) => {
309
- return !this.getBuiltInPlugins().some(b => b.src === p.src);
310
- });
311
- const mergedBuiltInPlugins = this.getBuiltInPlugins().map((builtInPlugin) => {
312
- let overwrite = overwritesOfBultInPlugins.find(p => p.src === builtInPlugin.src);
313
- const mergedPlugin = {
314
- ...builtInPlugin,
315
- ...overwrite,
316
- active: overwrite?.active ?? builtInPlugin.activeByDefault,
317
- };
318
- return mergedPlugin;
319
- });
320
- const mergedPlugins = [...mergedBuiltInPlugins, ...userInstalledPlugins];
321
- this.updateStoredPlugins(mergedPlugins);
322
- }
323
- async addExternalPlugin(plugin) {
324
- if (this.storedPlugins.some(p => p.src === plugin.src))
325
- return;
326
- const newPlugins = this.storedPlugins;
327
- newPlugins.push(plugin);
328
- this.storePlugins(newPlugins);
329
- }
330
- getBuiltInPlugins() {
331
- return builtinPlugins;
332
- }
333
- addContent(plugin) {
334
- const tag = this.pluginTag(plugin.src);
335
- if (!this.loadedPlugins.has(tag)) {
336
- this.loadedPlugins.add(tag);
337
- import(plugin.src).then((mod) => {
338
- customElements.define(tag, mod.default);
339
- });
340
- }
341
- return {
342
- ...plugin,
343
- content: () => {
344
- return staticTagHtml `<${tag}
345
- .doc=${this.doc}
346
- .docName=${this.docName}
347
- .editCount=${this.editCount}
348
- .plugins=${this.storedPlugins}
349
- .docId=${this.docId}
350
- .pluginId=${plugin.src}
351
- .nsdoc=${this.nsdoc}
352
- .docs=${this.docs}
353
- .locale=${this.locale}
354
- .oscdApi=${new OscdApi(tag)}
355
- .editor=${this.editor}
356
- class="${classMap({
357
- plugin: true,
358
- menu: plugin.kind === 'menu',
359
- validator: plugin.kind === 'validator',
360
- editor: plugin.kind === 'editor',
361
- })}"
362
- ></${tag}>`;
363
- },
364
- };
365
- }
366
- pluginTag(uri) {
367
- if (!this.pluginTags.has(uri)) {
368
- const tag = pluginTag(uri);
369
- this.pluginTags.set(uri, tag);
370
- }
371
- return this.pluginTags.get(uri);
372
- }
373
- };
374
- __decorate([
375
- property({ attribute: false })
376
- ], OpenSCD.prototype, "doc", void 0);
377
- __decorate([
378
- property({ type: String })
379
- ], OpenSCD.prototype, "docName", void 0);
380
- __decorate([
381
- property({ type: String })
382
- ], OpenSCD.prototype, "docId", void 0);
383
- __decorate([
384
- property({ attribute: false })
385
- ], OpenSCD.prototype, "nsdoc", void 0);
386
- __decorate([
387
- property({ type: String })
388
- ], OpenSCD.prototype, "src", null);
389
- __decorate([
390
- state()
391
- ], OpenSCD.prototype, "storedPlugins", void 0);
392
- __decorate([
393
- state()
394
- ], OpenSCD.prototype, "editCount", void 0);
395
- __decorate([
396
- property({ type: Object })
397
- ], OpenSCD.prototype, "plugins", void 0);
398
- __decorate([
399
- state()
400
- ], OpenSCD.prototype, "loadedPlugins", void 0);
401
- __decorate([
402
- state()
403
- ], OpenSCD.prototype, "pluginTags", void 0);
404
- OpenSCD = __decorate([
405
- customElement('open-scd')
406
- ], OpenSCD);
407
- export { OpenSCD };
408
- export function newResetPluginsEvent() {
409
- return new CustomEvent('reset-plugins', { bubbles: true, composed: true });
410
- }
411
- export function newAddExternalPluginEvent(plugin) {
412
- return new CustomEvent('add-external-plugin', {
413
- bubbles: true,
414
- composed: true,
415
- detail: { plugin },
416
- });
417
- }
418
- export function newSetPluginsEvent(selectedPlugins) {
419
- return new CustomEvent('set-plugins', {
420
- bubbles: true,
421
- composed: true,
422
- detail: { selectedPlugins },
423
- });
424
- }
425
- /**
426
- * This is a template literal tag function. See:
427
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates
428
- *
429
- * Passes its arguments to LitElement's `html` tag after combining the first and
430
- * last expressions with the first two and last two static strings.
431
- * Throws unless the first and last expressions are identical strings.
432
- *
433
- * We need this to get around the expression location limitations documented in
434
- * https://lit.dev/docs/templates/expressions/#expression-locations
435
- *
436
- * After upgrading to Lit 2 we can use their static HTML functions instead:
437
- * https://lit.dev/docs/api/static-html/
438
- */
439
- function staticTagHtml(oldStrings, ...oldArgs) {
440
- const args = [...oldArgs];
441
- const firstArg = args.shift();
442
- const lastArg = args.pop();
443
- if (firstArg !== lastArg)
444
- throw new Error(`Opening tag <${firstArg}> does not match closing tag </${lastArg}>.`);
445
- const strings = [...oldStrings];
446
- const firstString = strings.shift();
447
- const secondString = strings.shift();
448
- const lastString = strings.pop();
449
- const penultimateString = strings.pop();
450
- strings.unshift(`${firstString}${firstArg}${secondString}`);
451
- strings.push(`${penultimateString}${lastArg}${lastString}`);
452
- return html(strings, ...args);
453
- }
454
- function withoutContent(plugin) {
455
- return { ...plugin, content: undefined };
456
- }
457
- export const pluginIcons = {
458
- editor: 'tab',
459
- menu: 'play_circle',
460
- validator: 'rule_folder',
461
- top: 'play_circle',
462
- middle: 'play_circle',
463
- bottom: 'play_circle',
464
- };
465
- const menuOrder = [
466
- 'editor',
467
- 'top',
468
- 'validator',
469
- 'middle',
470
- 'bottom',
471
- ];
472
- function menuCompare(a, b) {
473
- if (a.kind === b.kind && a.position === b.position)
474
- return 0;
475
- const earlier = menuOrder.find(kind => [a.kind, b.kind, a.position, b.position].includes(kind));
476
- return [a.kind, a.position].includes(earlier) ? -1 : 1;
477
- }
478
- function compareNeedsDoc(a, b) {
479
- if (a.requireDoc === b.requireDoc)
480
- return 0;
481
- return a.requireDoc ? 1 : -1;
482
- }
483
- //# sourceMappingURL=open-scd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open-scd.js","sourceRoot":"","sources":["../../src/open-scd.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,KAAK,GAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,oBAAoB,CAAC;AAC5B,OAAO,2BAA2B,CAAC;AACnC,OAAO,+BAA+B,CAAC;AACvC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,kCAAkC,CAAC;AAC1C,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,iCAAiC,CAAC;AACzC,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AACjC,OAAO,wCAAwC,CAAC;AAChD,OAAO,wCAAwC,CAAC;AAChD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,OAAO,sBAAsB,CAAC;AAC9B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,oBAAoB,CAAC;AAI5B,OAAO,EAAE,eAAe,IAAI,cAAc,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,eAAe,EAAS,MAAM,uBAAuB,CAAC;AAM/D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAA+C,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;6CAC6C;AAEtC,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,UAAU;IAAhC;;QAuCL,QAAG,GAAuB,IAAI,CAAC;QAC/B,wCAAwC;QACZ,YAAO,GAAG,EAAE,CAAC;QACzC,wCAAwC;QACZ,UAAK,GAAG,EAAE,CAAC;QAEvC,WAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAEzB,6FAA6F;QAE7F,UAAK,GAAU,eAAe,EAAE,CAAC;QAEzB,eAAU,GAAG,EAAE,CAAC;QAYP,kBAAa,GAAa,EAAE,CAAC;QAE7B,cAAS,GAAG,CAAC,CAAC,CAAC;QAExB,kBAAa,GAAkB,EAAE,CAAC;QAkJ1C;;WAEG;QACyB,YAAO,GAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAkLzD,kBAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnD,sBAAsB;QACL,eAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAY1D,CAAC;IAvZC,MAAM;QACJ,OAAO,IAAI,CAAA;6BACc,IAAI;8BACH,IAAI;;oBAEd,IAAI;sBACF,IAAI,CAAC,MAAM;;;qBAGZ,IAAI,CAAC,GAAG;yBACJ,IAAI,CAAC,OAAO;uBACd,IAAI,CAAC,KAAK;sBACX,IAAI;2BACC,IAAI,CAAC,SAAS;wBACjB,IAAI,CAAC,MAAM;;;uCAGI,IAAI,CAAC,uBAAuB;yCAC1B,IAAI,CAAC,8BAA8B;+BAC5C,CAAC,CAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAE;wBAC1E,IAAI;uBACL,IAAI,CAAC,GAAG;2BACJ,IAAI,CAAC,OAAO;6BACV,IAAI,CAAC,SAAS;2BAChB,IAAI,CAAC,aAAa;0BACnB,IAAI,CAAC,MAAM;;;;;;;mBAOlB,CAAC;IAClB,CAAC;IAiBD,wEAAwE;IAExE,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAQD,qEAAqE;IAC7D,KAAK,CAAC,OAAO,CAAC,GAAW;QAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QAElD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,uBAAuB,CAAC,CAAyB;QACtD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;QAEpC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,EAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEjE,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAGM,8BAA8B,CAAC,CAAuB;QAC3D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;QAClC,MAAM,aAAa,GAAG,SAAS,IAAI,SAAS,CAAC;QAC7C,MAAM,aAAa,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC;QAC9C,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC;QAE3C,4CAA4C;QAC5C,+EAA+E;QAC/E,IAAG,aAAa,IAAI,MAAM,EAAC;YACzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAE3B;aAAK,IAAG,aAAa,EAAC;YACrB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAE/B;aAAK,IAAG,UAAU,IAAI,MAAM,EAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAExB;aAAI;YACH,MAAM,KAAK,GAAG,WAAW,CAAC;gBACxB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,oCAAoC;gBAC3C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC;aAC9C,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC3B;IACH,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAC5C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CACrD,CAAC;QAEF,6DAA6D;QAC7D,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAGD;;;;;OAKG;IACK,eAAe,CAAC,IAAY,EAAE,IAAgB;QACpD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/E,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,IAAgB;QAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,IAAgB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CACxC,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEO,SAAS,CAAC,MAAc;QAC9B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACK,YAAY,CAAC,MAAc;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,MAAM,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAErD,IAAG,WAAW,GAAG,CAAC,EAAE;YAClB,MAAM,KAAK,GAAG,WAAW,CAAC;gBACxB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,2CAA2C;gBAClD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;aACtC,CAAC,CAAA;YACF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;SACR;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;QACjD,MAAM,aAAa,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,MAAM,EAAC,CAAA;QACpD,MAAM,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC,CAAA;QACrC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;QAEhD,iCAAiC;QACjC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEO,YAAY;QAClB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC/C,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;QAE7D,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC/C,OAAO;gBACL,GAAG,MAAM;gBACT,MAAM,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK;aACxC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;IACrC,CAAC;IAMD,IAAI,aAAa;QACf,MAAM,WAAW,GAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7D,IAAI,WAAW,GAA6B,MAAM,CAAC,QAAwB,CAAC;YAC5E,IAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACtC,WAAW,GAAG,SAAS,CAAA;aACxB;YAED,OAAO;gBACH,GAAG,MAAM;gBACT,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,MAAoB;gBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;aAC/B,CAAA;QACH,CAAC,CAAC,CAAA;QAEJ,MAAM,aAAa,GAAa,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACjE,MAAM,YAAY,GAAW;gBAC3B,GAAG,MAAM;gBACT,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,QAAsB;gBAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;aAC/B,CAAA;YACD,OAAO,YAAY,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,CAAA;QACrD,OAAO,UAAU,CAAA;IACnB,CAAC;IAIO,mBAAmB,CAAC,UAAoB;QAC9C,EAAE;QACF,kCAAkC;QAClC,EAAE;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACtC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAA;YAC/C,IAAG,CAAC,WAAW,EAAE;gBAAE,OAAO,MAAM,CAAA;aAAE;YAElC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,EAAE;QACF,yBAAyB;QACzB,EAAE;QACF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAA;YACnC,IAAI,CAAC,SAAS,EAAC;gBAAE,OAAO,MAAM,CAAA;aAAE;YAAA,CAAC;YAEjC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;iBACvE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;YAEjC,OAAe;gBACb,GAAG,aAAa;gBAChB,GAAG,MAAM;aACV,CAAC;QACN,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,OAAiB;QACpC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;QACjE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACjD,CAAC;IACO,gCAAgC;QACtC,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAa,CAAA;IACjD,CAAC;IAGD,IAAc,MAAM;QAClB,OAAO,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC;IACvC,CAAC;IAED,IAAI,IAAI;QACN,MAAM,IAAI,GAAgC,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,eAAyB;QAE1C,MAAM,UAAU,GAAa,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YACnE,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAE,CAAC,cAAc,EAAE,EAAE;gBAC1D,OAAO,cAAc,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;uBACzC,cAAc,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAA;YAChD,CAAC,CAAC,CAAA;YACF,OAAO;gBACL,GAAG,YAAY;gBACf,MAAM,EAAE,UAAU;aACnB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEO,WAAW;QACjB,MAAM,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,EAAE,CAAA;QAElE,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAChE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3D,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAC1E,IAAI,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAAC,CAAA;YAEhF,MAAM,YAAY,GAAW;gBAC3B,GAAG,aAAa;gBAChB,GAAG,SAAS;gBACZ,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,aAAa,CAAC,eAAe;aAC3D,CAAA;YAED,OAAO,YAAY,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,CAAC,GAAG,oBAAoB,EAAE,GAAG,oBAAoB,CAAC,CAAA;QAExE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;IACzC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,MAA+B;QAE/B,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO;QAE/D,MAAM,UAAU,GAA8B,IAAI,CAAC,aAAa,CAAC;QACjE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAES,iBAAiB;QACzB,OAAO,cAAc,CAAA;IACvB,CAAC;IAEO,UAAU,CAAC,MAA+B;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;SACH;QACD,OAAO;YACL,GAAG,MAAM;YACT,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,aAAa,CAAA,IAAI,GAAG;mBAChB,IAAI,CAAC,GAAG;uBACJ,IAAI,CAAC,OAAO;yBACV,IAAI,CAAC,SAAS;uBAChB,IAAI,CAAC,aAAa;qBACpB,IAAI,CAAC,KAAK;wBACP,MAAM,CAAC,GAAG;qBACb,IAAI,CAAC,KAAK;oBACX,IAAI,CAAC,IAAI;sBACP,IAAI,CAAC,MAAM;uBACV,IAAI,OAAO,CAAC,GAAG,CAAC;sBACjB,IAAI,CAAC,MAAM;qBACZ,QAAQ,CAAC;oBAChB,MAAM,EAAE,IAAI;oBACZ,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,MAAM;oBAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,WAAW;oBACtC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ;iBACjC,CAAC;eACC,GAAG,GAAG,CAAA;YACb,CAAC;SACJ,CAAC;IACJ,CAAC;IAOO,SAAS,CAAC,GAAW;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACnC,CAAC;CAGF,CAAA;AAlXC;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oCACA;AAEH;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAc;AAEb;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sCAAY;AAMvC;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;sCACE;AAKjC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kCAG1B;AAOQ;IAAR,KAAK,EAAE;8CAAsC;AAErC;IAAR,KAAK,EAAE;0CAAwB;AAuJJ;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAA+C;AAkLjE;IAAR,KAAK,EAAE;8CAA2C;AAG1C;IAAR,KAAK,EAAE;2CAAgD;AA7Y7C,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAyZnB;SAzZY,OAAO;AA0bpB,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAQD,MAAM,UAAU,yBAAyB,CACvC,MAA+B;IAE/B,OAAO,IAAI,WAAW,CAA0B,qBAAqB,EAAE;QACrE,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,MAAM,EAAE;KACnB,CAAC,CAAC;AACL,CAAC;AAQD,MAAM,UAAU,kBAAkB,CAAC,eAAyB;IAC1D,OAAO,IAAI,WAAW,CAAmB,aAAa,EAAE;QACtD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,eAAe,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AAKD;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CACpB,UAAiC,EACjC,GAAG,OAAkB;IAErB,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAI,QAAQ,KAAK,OAAO;QACtB,MAAM,IAAI,KAAK,CACb,gBAAgB,QAAQ,kCAAkC,OAAO,IAAI,CACtE,CAAC;IAEJ,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAiC,CAAC;IAChE,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAExC,OAAO,CAAC,OAAO,CAAC,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;IAE5D,OAAO,IAAI,CAAuB,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACtD,CAAC;AAGD,SAAS,cAAc,CACrB,MAAS;IAET,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAA8C;IACpE,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,aAAa;IACxB,GAAG,EAAE,aAAa;IAClB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,SAAS,GAAkC;IAC/C,QAAQ;IACR,KAAK;IACL,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACvC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxD,CAAC;IACF,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["import {\n customElement,\n html,\n LitElement,\n property,\n state,\n TemplateResult,\n} from 'lit-element';\nimport { classMap } from 'lit-html/directives/class-map';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-icon-button';\nimport '@material/mwc-linear-progress';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-tab';\nimport '@material/mwc-tab-bar';\nimport '@material/mwc-top-app-bar-fixed';\nimport '@material/mwc-drawer';\nimport '@material/mwc-button';\nimport '@material/mwc-dialog';\nimport '@material/mwc-formfield';\nimport '@material/mwc-list/mwc-check-list-item';\nimport '@material/mwc-list/mwc-radio-list-item';\nimport '@material/mwc-select';\nimport '@material/mwc-switch';\nimport '@material/mwc-textfield';\n\nimport { newOpenDocEvent } from '@openscd/core/foundation/deprecated/open-event.js';\nimport { newPendingStateEvent } from '@openscd/core/foundation/deprecated/waiter.js';\n\nimport './addons/Settings.js';\nimport './addons/Waiter.js';\nimport './addons/Wizards.js';\nimport './addons/Editor.js';\nimport './addons/History.js';\nimport './addons/Layout.js';\n\nimport { ActionDetail } from '@material/mwc-list';\n\nimport { officialPlugins as builtinPlugins } from './plugins.js';\nimport { initializeNsdoc, Nsdoc } from './foundation/nsdoc.js';\nimport type {\n PluginSet,\n Plugin as CorePlugin,\n EditCompletedEvent,\n} from '@openscd/core';\nimport { OscdApi, XMLEditor } from '@openscd/core';\n\nimport { InstalledOfficialPlugin, MenuPosition, PluginKind, Plugin } from \"./plugin.js\"\nimport { ConfigurePluginEvent, ConfigurePluginDetail, newConfigurePluginEvent } from './plugin.events.js';\nimport { newLogEvent } from '@openscd/core/foundation/deprecated/history';\nimport { pluginTag } from './plugin-tag.js';\n\n\n\n/** The `<open-scd>` custom element is the main entry point of the\n * Open Substation Configuration Designer. */\n@customElement('open-scd')\nexport class OpenSCD extends LitElement {\n\n render(): TemplateResult {\n return html`<oscd-waiter>\n <oscd-settings .host=${this}>\n <oscd-wizards .host=${this}>\n <oscd-history\n .host=${this}\n .editor=${this.editor}\n >\n <oscd-editor\n .doc=${this.doc}\n .docName=${this.docName}\n .docId=${this.docId}\n .host=${this}\n .editCount=${this.editCount}\n .editor=${this.editor}\n >\n <oscd-layout\n @add-external-plugin=${this.handleAddExternalPlugin}\n @oscd-configure-plugin=${this.handleConfigurationPluginEvent}\n @set-plugins=${ (e: SetPluginsEvent) => this.setPlugins(e.detail.selectedPlugins) }\n .host=${this}\n .doc=${this.doc}\n .docName=${this.docName}\n .editCount=${this.editCount}\n .plugins=${this.storedPlugins}\n .editor=${this.editor}\n >\n </oscd-layout>\n </oscd-editor>\n </oscd-history>\n </oscd-wizards>\n </oscd-settings>\n </oscd-waiter>`;\n }\n\n\n @property({ attribute: false })\n doc: XMLDocument | null = null;\n /** The name of the current [[`doc`]] */\n @property({ type: String }) docName = '';\n /** The UUID of the current [[`doc`]] */\n @property({ type: String }) docId = '';\n\n editor = new XMLEditor();\n\n /** Object containing all *.nsdoc files and a function extracting element's label form them*/\n @property({ attribute: false })\n nsdoc: Nsdoc = initializeNsdoc();\n\n private currentSrc = '';\n /** The current file's URL. `blob:` URLs are *revoked after parsing*! */\n @property({ type: String })\n get src(): string {\n return this.currentSrc;\n }\n\n set src(value: string) {\n this.currentSrc = value;\n this.dispatchEvent(newPendingStateEvent(this.loadDoc(value)));\n }\n\n @state() private storedPlugins: Plugin[] = [];\n\n @state() private editCount = -1;\n\n private unsubscribers: (() => any)[] = [];\n\n /** Loads and parses an `XMLDocument` after [[`src`]] has changed. */\n private async loadDoc(src: string): Promise<void> {\n const response = await fetch(src);\n const text = await response.text();\n if (!text) return;\n\n const doc = new DOMParser().parseFromString(text, 'application/xml');\n const docName = src;\n this.dispatchEvent(newOpenDocEvent(doc, docName));\n\n if (src.startsWith('blob:')) URL.revokeObjectURL(src);\n }\n\n /**\n *\n * @deprecated Use `handleConfigurationPluginEvent` instead\n */\n public handleAddExternalPlugin(e: AddExternalPluginEvent){\n this.addExternalPlugin(e.detail.plugin);\n const {name, kind} = e.detail.plugin\n\n const event = newConfigurePluginEvent(name,kind, e.detail.plugin)\n\n this.handleConfigurationPluginEvent(event)\n }\n\n\n public handleConfigurationPluginEvent(e: ConfigurePluginEvent){\n const { name, kind, config } = e.detail;\n\n const hasPlugin = this.hasPlugin(name, kind);\n const hasConfig = config !== null;\n const isChangeEvent = hasPlugin && hasConfig;\n const isRemoveEvent = hasPlugin && !hasConfig;\n const isAddEvent = !hasPlugin && hasConfig;\n\n // the `&& config`is only because typescript\n // cannot infer that `isChangeEvent` and `isAddEvent` implies `config !== null`\n if(isChangeEvent && config){\n this.changePlugin(config);\n\n }else if(isRemoveEvent){\n this.removePlugin(name, kind);\n\n }else if(isAddEvent && config){\n this.addPlugin(config);\n\n }else{\n const event = newLogEvent({\n kind: \"error\",\n title: \"Invalid plugin configuration event\",\n message: JSON.stringify({name, kind, config}),\n });\n this.dispatchEvent(event);\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.loadPlugins();\n\n this.unsubscribers.push(\n this.editor.subscribe(e => this.editCount++),\n this.editor.subscribeUndoRedo(e => this.editCount++)\n );\n\n // TODO: let Lit handle the event listeners, move to render()\n this.addEventListener('reset-plugins', this.resetPlugins);\n }\n\n disconnectedCallback(): void {\n this.unsubscribers.forEach(u => u());\n }\n\n\n /**\n *\n * @param name\n * @param kind\n * @returns the index of the plugin in the stored plugin list\n */\n private findPluginIndex(name: string, kind: PluginKind): number {\n return this.storedPlugins.findIndex(p => p.name === name && p.kind === kind);\n }\n\n private hasPlugin(name: string, kind: PluginKind): boolean {\n return this.findPluginIndex(name, kind) > -1;\n }\n\n private removePlugin(name: string, kind: PluginKind) {\n const newPlugins = this.storedPlugins.filter(\n p => p.name !== name || p.kind !== kind\n );\n this.updateStoredPlugins(newPlugins);\n }\n\n private addPlugin(plugin: Plugin) {\n const newPlugins = [...this.storedPlugins, plugin];\n this.updateStoredPlugins(newPlugins);\n }\n\n /**\n *\n * @param plugin\n * @throws if the plugin is not found\n */\n private changePlugin(plugin: Plugin) {\n const storedPlugins = this.storedPlugins;\n const {name, kind} = plugin;\n const pluginIndex = this.findPluginIndex(name, kind);\n\n if(pluginIndex < 0) {\n const event = newLogEvent({\n kind: \"error\",\n title: \"Plugin not found, stopping change process\",\n message: JSON.stringify({name, kind}),\n })\n this.dispatchEvent(event);\n return;\n }\n\n const pluginToChange = storedPlugins[pluginIndex]\n const changedPlugin = {...pluginToChange, ...plugin}\n const newPlugins = [...storedPlugins]\n newPlugins.splice(pluginIndex, 1, changedPlugin)\n\n // this.storePlugins(newPlugins);\n this.updateStoredPlugins(newPlugins);\n }\n\n private resetPlugins(): void {\n const builtInPlugins = this.getBuiltInPlugins()\n const allPlugins = [...builtInPlugins, ...this.parsedPlugins]\n\n const newPluginConfigs = allPlugins.map(plugin => {\n return {\n ...plugin,\n active: plugin.activeByDefault ?? false,\n }\n })\n\n this.storePlugins(newPluginConfigs)\n }\n\n /**\n * @prop {PluginSet} plugins - Set of plugins that are used by OpenSCD\n */\n @property({ type: Object }) plugins: PluginSet = { menu: [], editor: [] };\n get parsedPlugins(): Plugin[] {\n const menuPlugins: Plugin[] = this.plugins.menu.map((plugin) => {\n let newPosition: MenuPosition | undefined = plugin.position as MenuPosition;\n if(typeof plugin.position === 'number') {\n newPosition = undefined\n }\n\n return {\n ...plugin,\n position: newPosition,\n kind: 'menu' as PluginKind,\n active: plugin.active ?? false,\n }\n })\n\n const editorPlugins: Plugin[] = this.plugins.editor.map((plugin) => {\n const editorPlugin: Plugin = {\n ...plugin,\n position: undefined,\n kind: 'editor' as PluginKind,\n active: plugin.active ?? false,\n }\n return editorPlugin\n })\n\n const allPlugnis = [...menuPlugins, ...editorPlugins]\n return allPlugnis\n }\n\n\n\n private updateStoredPlugins(newPlugins: Plugin[]) {\n //\n // Generate content of each plugin\n //\n const plugins = newPlugins.map(plugin => {\n const isInstalled = plugin.src && plugin.active\n if(!isInstalled) { return plugin }\n\n return this.addContent(plugin)\n })\n\n //\n // Merge built-in plugins\n //\n const mergedPlugins = plugins.map(plugin => {\n const isBuiltIn = !plugin?.official\n if (!isBuiltIn){ return plugin };\n\n const builtInPlugin = [...this.getBuiltInPlugins(), ...this.parsedPlugins]\n .find(p => p.src === plugin.src);\n\n return <Plugin>{\n ...builtInPlugin,\n ...plugin,\n };\n })\n this.storePlugins(mergedPlugins);\n }\n\n private storePlugins(plugins: Plugin[]) {\n this.storedPlugins = plugins\n const pluginConfigs = JSON.stringify(plugins.map(withoutContent))\n localStorage.setItem('plugins', pluginConfigs);\n }\n private getPluginConfigsFromLocalStorage(): Plugin[] {\n const pluginsConfigStr = localStorage.getItem('plugins') ?? '[]'\n return JSON.parse(pluginsConfigStr) as Plugin[]\n }\n\n\n protected get locale(): string {\n return navigator.language || 'en-US';\n }\n\n get docs(): Record<string, XMLDocument> {\n const docs: Record<string, XMLDocument> = {};\n\n if (this.doc) {\n docs[this.docName] = this.doc;\n }\n\n return docs;\n }\n\n private setPlugins(selectedPlugins: Plugin[]) {\n\n const newPlugins: Plugin[] = this.storedPlugins.map((storedPlugin) => {\n const isSelected = selectedPlugins.some( (selectedPlugin) => {\n return selectedPlugin.name === storedPlugin.name\n && selectedPlugin.src === storedPlugin.src\n })\n return {\n ...storedPlugin,\n active: isSelected\n }\n })\n\n this.updateStoredPlugins(newPlugins);\n }\n\n private loadPlugins(){\n const localPluginConfigs = this.getPluginConfigsFromLocalStorage()\n\n const overwritesOfBultInPlugins = localPluginConfigs.filter((p) => {\n return this.getBuiltInPlugins().some(b => b.src === p.src)\n })\n\n const userInstalledPlugins = localPluginConfigs.filter((p) => {\n return !this.getBuiltInPlugins().some(b => b.src === p.src)\n })\n const mergedBuiltInPlugins = this.getBuiltInPlugins().map((builtInPlugin) => {\n let overwrite = overwritesOfBultInPlugins.find(p => p.src === builtInPlugin.src)\n\n const mergedPlugin: Plugin = {\n ...builtInPlugin,\n ...overwrite,\n active: overwrite?.active ?? builtInPlugin.activeByDefault,\n }\n\n return mergedPlugin\n })\n\n const mergedPlugins = [...mergedBuiltInPlugins, ...userInstalledPlugins]\n\n this.updateStoredPlugins(mergedPlugins)\n }\n\n private async addExternalPlugin(\n plugin: Omit<Plugin, 'content'>\n ): Promise<void> {\n if (this.storedPlugins.some(p => p.src === plugin.src)) return;\n\n const newPlugins: Omit<Plugin, 'content'>[] = this.storedPlugins;\n newPlugins.push(plugin);\n this.storePlugins(newPlugins);\n }\n\n protected getBuiltInPlugins(): CorePlugin[] {\n return builtinPlugins\n }\n\n private addContent(plugin: Omit<Plugin, 'content'>): Plugin {\n const tag = this.pluginTag(plugin.src);\n\n if (!this.loadedPlugins.has(tag)) {\n this.loadedPlugins.add(tag);\n import(plugin.src).then((mod) => {\n customElements.define(tag, mod.default)\n })\n }\n return {\n ...plugin,\n content: () => {\n return staticTagHtml`<${tag}\n .doc=${this.doc}\n .docName=${this.docName}\n .editCount=${this.editCount}\n .plugins=${this.storedPlugins}\n .docId=${this.docId}\n .pluginId=${plugin.src}\n .nsdoc=${this.nsdoc}\n .docs=${this.docs}\n .locale=${this.locale}\n .oscdApi=${new OscdApi(tag)}\n .editor=${this.editor}\n class=\"${classMap({\n plugin: true,\n menu: plugin.kind === 'menu',\n validator: plugin.kind === 'validator',\n editor: plugin.kind === 'editor',\n })}\"\n ></${tag}>`\n },\n };\n }\n\n @state() private loadedPlugins = new Set<string>();\n\n // PLUGGING INTERFACES\n @state() private pluginTags = new Map<string, string>();\n\n private pluginTag(uri: string): string {\n if (!this.pluginTags.has(uri)) {\n const tag = pluginTag(uri);\n this.pluginTags.set(uri, tag);\n }\n\n return this.pluginTags.get(uri)!;\n }\n\n\n}\n\ndeclare global {\n interface ElementEventMap {\n 'reset-plugins': CustomEvent;\n 'add-external-plugin': CustomEvent<AddExternalPluginDetail>;\n 'set-plugins': CustomEvent<SetPluginsDetail>;\n }\n}\n\n\n// HOSTING INTERFACES\n\nexport interface MenuItem {\n icon: string;\n name: string;\n src?: string;\n hint?: string;\n actionItem?: boolean;\n action?: (event: CustomEvent<ActionDetail>) => void;\n disabled?: () => boolean;\n content: () => TemplateResult;\n kind: string;\n}\n\nexport interface Validator {\n validate: () => Promise<void>;\n}\n\nexport interface MenuPlugin {\n run: () => Promise<void>;\n}\n\nexport function newResetPluginsEvent(): CustomEvent {\n return new CustomEvent('reset-plugins', { bubbles: true, composed: true });\n}\n\nexport interface AddExternalPluginDetail {\n plugin: Omit<Plugin, 'content'>;\n}\n\nexport type AddExternalPluginEvent = CustomEvent<AddExternalPluginDetail>;\n\nexport function newAddExternalPluginEvent(\n plugin: Omit<Plugin, 'content'>\n): AddExternalPluginEvent {\n return new CustomEvent<AddExternalPluginDetail>('add-external-plugin', {\n bubbles: true,\n composed: true,\n detail: { plugin },\n });\n}\n\nexport interface SetPluginsDetail {\n selectedPlugins: Plugin[];\n}\n\nexport type SetPluginsEvent = CustomEvent<SetPluginsDetail>;\n\nexport function newSetPluginsEvent(selectedPlugins: Plugin[]): SetPluginsEvent {\n return new CustomEvent<SetPluginsDetail>('set-plugins', {\n bubbles: true,\n composed: true,\n detail: { selectedPlugins },\n });\n}\n\n\n\n\n/**\n * This is a template literal tag function. See:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates\n *\n * Passes its arguments to LitElement's `html` tag after combining the first and\n * last expressions with the first two and last two static strings.\n * Throws unless the first and last expressions are identical strings.\n *\n * We need this to get around the expression location limitations documented in\n * https://lit.dev/docs/templates/expressions/#expression-locations\n *\n * After upgrading to Lit 2 we can use their static HTML functions instead:\n * https://lit.dev/docs/api/static-html/\n */\nfunction staticTagHtml(\n oldStrings: ReadonlyArray<string>,\n ...oldArgs: unknown[]\n): TemplateResult {\n const args = [...oldArgs];\n const firstArg = args.shift();\n const lastArg = args.pop();\n\n if (firstArg !== lastArg)\n throw new Error(\n `Opening tag <${firstArg}> does not match closing tag </${lastArg}>.`\n );\n\n const strings = [...oldStrings] as string[] & { raw: string[] };\n const firstString = strings.shift();\n const secondString = strings.shift();\n\n const lastString = strings.pop();\n const penultimateString = strings.pop();\n\n strings.unshift(`${firstString}${firstArg}${secondString}`);\n strings.push(`${penultimateString}${lastArg}${lastString}`);\n\n return html(<TemplateStringsArray>strings, ...args);\n}\n\n\nfunction withoutContent<P extends Plugin | InstalledOfficialPlugin>(\n plugin: P\n): P {\n return { ...plugin, content: undefined };\n}\n\nexport const pluginIcons: Record<PluginKind | MenuPosition, string> = {\n editor: 'tab',\n menu: 'play_circle',\n validator: 'rule_folder',\n top: 'play_circle',\n middle: 'play_circle',\n bottom: 'play_circle',\n};\n\nconst menuOrder: (PluginKind | MenuPosition)[] = [\n 'editor',\n 'top',\n 'validator',\n 'middle',\n 'bottom',\n];\n\nfunction menuCompare(a: Plugin, b: Plugin): -1 | 0 | 1 {\n if (a.kind === b.kind && a.position === b.position) return 0;\n const earlier = menuOrder.find(kind =>\n [a.kind, b.kind, a.position, b.position].includes(kind)\n );\n return [a.kind, a.position].includes(earlier) ? -1 : 1;\n}\n\nfunction compareNeedsDoc(a: Plugin, b: Plugin): -1 | 0 | 1 {\n if (a.requireDoc === b.requireDoc) return 0;\n return a.requireDoc ? 1 : -1;\n}\n\n"]}
@@ -1,27 +0,0 @@
1
- import { TemplateResult } from 'lit-element';
2
- import '@material/mwc-icon-button';
3
- import '@material/mwc-dialog';
4
- import './filtered-list.js';
5
- import { FilteredList } from './filtered-list.js';
6
- /**
7
- * A mwc-list with mwc-textfield that filters the list items for given or separated terms
8
- */
9
- export declare class FilterButton extends FilteredList {
10
- header: TemplateResult | string;
11
- icon: string;
12
- disabled: boolean;
13
- private filterDialog;
14
- private toggleList;
15
- private onClosing;
16
- render(): TemplateResult;
17
- static styles: import("lit-element").CSSResult;
18
- }
19
- export interface SelectedItemsChangedDetail {
20
- selectedItems: string[];
21
- }
22
- export type SelectedItemsChangedEvent = CustomEvent<SelectedItemsChangedDetail>;
23
- declare global {
24
- interface ElementEventMap {
25
- ['selected-items-changed']: SelectedItemsChangedEvent;
26
- }
27
- }
@@ -1,89 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { css, customElement, html, property, query, unsafeCSS, } from 'lit-element';
3
- import { get } from 'lit-translate';
4
- import '@material/mwc-icon-button';
5
- import '@material/mwc-dialog';
6
- import './filtered-list.js';
7
- import { FilteredList } from './filtered-list.js';
8
- /**
9
- * A mwc-list with mwc-textfield that filters the list items for given or separated terms
10
- */
11
- let FilterButton = class FilterButton extends FilteredList {
12
- constructor() {
13
- super(...arguments);
14
- this.disabled = false;
15
- }
16
- toggleList() {
17
- this.filterDialog.show();
18
- }
19
- onClosing() {
20
- const selectedItems = [];
21
- if (this.selected) {
22
- if (this.selected instanceof Array) {
23
- this.selected.forEach(item => selectedItems.push(item.value));
24
- }
25
- else {
26
- selectedItems.push(this.selected.value);
27
- }
28
- this.dispatchEvent(newSelectedItemsChangedEvent(selectedItems));
29
- }
30
- }
31
- render() {
32
- return html `
33
- <mwc-icon-button
34
- icon="${this.icon}"
35
- @click="${this.toggleList}"
36
- ?disabled="${this.disabled}"
37
- >
38
- <slot name="icon"></slot>
39
- </mwc-icon-button>
40
- <mwc-dialog
41
- id="filterDialog"
42
- heading="${this.header ? this.header : get('filter')}"
43
- scrimClickAction=""
44
- @closing="${() => this.onClosing()}"
45
- >
46
- ${super.render()}
47
- <mwc-button slot="primaryAction" dialogAction="close">
48
- ${get('close')}
49
- </mwc-button>
50
- </mwc-dialog>
51
- `;
52
- }
53
- };
54
- FilterButton.styles = css `
55
- ${unsafeCSS(FilteredList.styles)}
56
-
57
- mwc-icon-button {
58
- color: var(--mdc-theme-on-surface);
59
- }
60
-
61
- mwc-dialog {
62
- --mdc-dialog-max-height: calc(100vh - 150px);
63
- }
64
- `;
65
- __decorate([
66
- property()
67
- ], FilterButton.prototype, "header", void 0);
68
- __decorate([
69
- property()
70
- ], FilterButton.prototype, "icon", void 0);
71
- __decorate([
72
- property({ type: Boolean })
73
- ], FilterButton.prototype, "disabled", void 0);
74
- __decorate([
75
- query('#filterDialog')
76
- ], FilterButton.prototype, "filterDialog", void 0);
77
- FilterButton = __decorate([
78
- customElement('oscd-filter-button')
79
- ], FilterButton);
80
- export { FilterButton };
81
- function newSelectedItemsChangedEvent(selectedItems, eventInitDict) {
82
- return new CustomEvent('selected-items-changed', {
83
- bubbles: true,
84
- composed: true,
85
- ...eventInitDict,
86
- detail: { selectedItems, ...eventInitDict?.detail },
87
- });
88
- }
89
- //# sourceMappingURL=oscd-filter-button.js.map