@compas-oscd/open-scd 0.34.2 → 0.34.4

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 (160) hide show
  1. package/dist/src/WizardDivider.d.ts +8 -0
  2. package/dist/src/WizardDivider.js +37 -0
  3. package/dist/src/WizardDivider.js.map +1 -0
  4. package/dist/src/Wizarding.d.ts +10 -0
  5. package/dist/src/Wizarding.js +38 -0
  6. package/dist/src/Wizarding.js.map +1 -0
  7. package/dist/src/action-icon.d.ts +25 -0
  8. package/dist/src/action-icon.js +220 -0
  9. package/dist/src/action-icon.js.map +1 -0
  10. package/dist/src/action-pane.d.ts +25 -0
  11. package/dist/src/action-pane.js +176 -0
  12. package/dist/src/action-pane.js.map +1 -0
  13. package/dist/src/addons/Editor.d.ts +25 -0
  14. package/dist/src/addons/Editor.js +106 -0
  15. package/dist/src/addons/Editor.js.map +1 -0
  16. package/dist/src/addons/History.d.ts +93 -0
  17. package/dist/src/addons/History.js +491 -0
  18. package/dist/src/addons/History.js.map +1 -0
  19. package/dist/src/addons/Layout.d.ts +96 -0
  20. package/dist/src/addons/Layout.js +619 -0
  21. package/dist/src/addons/Layout.js.map +1 -0
  22. package/dist/src/addons/Settings.d.ts +68 -0
  23. package/dist/src/addons/Settings.js +465 -0
  24. package/dist/src/addons/Settings.js.map +1 -0
  25. package/dist/src/addons/Waiter.d.ts +14 -0
  26. package/dist/src/addons/Waiter.js +45 -0
  27. package/dist/src/addons/Waiter.js.map +1 -0
  28. package/dist/src/addons/Wizards.d.ts +15 -0
  29. package/dist/src/addons/Wizards.js +48 -0
  30. package/dist/src/addons/Wizards.js.map +1 -0
  31. package/dist/src/addons/editor/edit-action-to-v1-converter.d.ts +3 -0
  32. package/dist/src/addons/editor/edit-action-to-v1-converter.js +96 -0
  33. package/dist/src/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  34. package/dist/src/addons/editor/edit-v1-to-v2-converter.d.ts +2 -0
  35. package/dist/src/addons/editor/edit-v1-to-v2-converter.js +37 -0
  36. package/dist/src/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  37. package/dist/src/addons/history/get-log-text.d.ts +5 -0
  38. package/dist/src/addons/history/get-log-text.js +26 -0
  39. package/dist/src/addons/history/get-log-text.js.map +1 -0
  40. package/dist/src/addons/menu-tabs/menu-tabs.d.ts +22 -0
  41. package/dist/src/addons/menu-tabs/menu-tabs.js +74 -0
  42. package/dist/src/addons/menu-tabs/menu-tabs.js.map +1 -0
  43. package/dist/src/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -0
  44. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js +177 -0
  45. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  46. package/dist/src/addons/plugin-manager/plugin-manager.d.ts +20 -0
  47. package/dist/src/addons/plugin-manager/plugin-manager.js +165 -0
  48. package/dist/src/addons/plugin-manager/plugin-manager.js.map +1 -0
  49. package/dist/src/filtered-list.d.ts +27 -0
  50. package/dist/src/filtered-list.js +168 -0
  51. package/dist/src/filtered-list.js.map +1 -0
  52. package/dist/src/finder-list.d.ts +37 -0
  53. package/dist/src/finder-list.js +207 -0
  54. package/dist/src/finder-list.js.map +1 -0
  55. package/dist/src/foundation/compare.d.ts +79 -0
  56. package/dist/src/foundation/compare.js +273 -0
  57. package/dist/src/foundation/compare.js.map +1 -0
  58. package/dist/src/foundation/dai.d.ts +30 -0
  59. package/dist/src/foundation/dai.js +127 -0
  60. package/dist/src/foundation/dai.js.map +1 -0
  61. package/dist/src/foundation/generators.d.ts +13 -0
  62. package/dist/src/foundation/generators.js +67 -0
  63. package/dist/src/foundation/generators.js.map +1 -0
  64. package/dist/src/foundation/ied.d.ts +22 -0
  65. package/dist/src/foundation/ied.js +84 -0
  66. package/dist/src/foundation/ied.js.map +1 -0
  67. package/dist/src/foundation/nsd.d.ts +4 -0
  68. package/dist/src/foundation/nsd.js +13 -0
  69. package/dist/src/foundation/nsd.js.map +1 -0
  70. package/dist/src/foundation/nsdoc.d.ts +14 -0
  71. package/dist/src/foundation/nsdoc.js +180 -0
  72. package/dist/src/foundation/nsdoc.js.map +1 -0
  73. package/dist/src/foundation/scl.d.ts +1 -0
  74. package/dist/src/foundation/scl.js +64 -0
  75. package/dist/src/foundation/scl.js.map +1 -0
  76. package/dist/src/foundation.d.ts +230 -0
  77. package/dist/src/foundation.js +1922 -0
  78. package/dist/src/foundation.js.map +1 -0
  79. package/dist/src/icons/compare.d.ts +3 -0
  80. package/dist/src/icons/compare.js +11 -0
  81. package/dist/src/icons/compare.js.map +1 -0
  82. package/dist/src/icons/icons.d.ts +41 -0
  83. package/dist/src/icons/icons.js +611 -0
  84. package/dist/src/icons/icons.js.map +1 -0
  85. package/dist/src/icons/ied-icons.d.ts +3 -0
  86. package/dist/src/icons/ied-icons.js +11 -0
  87. package/dist/src/icons/ied-icons.js.map +1 -0
  88. package/dist/src/icons/lnode.d.ts +16 -0
  89. package/dist/src/icons/lnode.js +50 -0
  90. package/dist/src/icons/lnode.js.map +1 -0
  91. package/dist/src/open-scd.d.ts +131 -0
  92. package/dist/src/open-scd.js +483 -0
  93. package/dist/src/open-scd.js.map +1 -0
  94. package/dist/src/oscd-filter-button.d.ts +27 -0
  95. package/dist/src/oscd-filter-button.js +89 -0
  96. package/dist/src/oscd-filter-button.js.map +1 -0
  97. package/dist/src/plain-compare-list.d.ts +36 -0
  98. package/dist/src/plain-compare-list.js +132 -0
  99. package/dist/src/plain-compare-list.js.map +1 -0
  100. package/dist/src/plugin-tag.d.ts +6 -0
  101. package/dist/src/plugin-tag.js +23 -0
  102. package/dist/src/plugin-tag.js.map +1 -0
  103. package/dist/src/plugin.d.ts +23 -0
  104. package/dist/src/plugin.events.d.ts +15 -0
  105. package/dist/src/plugin.events.js +12 -0
  106. package/dist/src/plugin.events.js.map +1 -0
  107. package/dist/src/plugin.js +2 -0
  108. package/dist/src/plugin.js.map +1 -0
  109. package/dist/src/plugins.d.ts +3 -0
  110. package/dist/src/plugins.js +256 -0
  111. package/dist/src/plugins.js.map +1 -0
  112. package/dist/src/schemas.d.ts +58 -0
  113. package/dist/src/schemas.js +9325 -0
  114. package/dist/src/schemas.js.map +1 -0
  115. package/dist/src/themes.d.ts +3 -0
  116. package/dist/src/themes.js +122 -0
  117. package/dist/src/themes.js.map +1 -0
  118. package/dist/src/translations/de.d.ts +2 -0
  119. package/dist/src/translations/de.js +954 -0
  120. package/dist/src/translations/de.js.map +1 -0
  121. package/dist/src/translations/en.d.ts +963 -0
  122. package/dist/src/translations/en.js +950 -0
  123. package/dist/src/translations/en.js.map +1 -0
  124. package/dist/src/translations/loader.d.ts +12 -0
  125. package/dist/src/translations/loader.js +10 -0
  126. package/dist/src/translations/loader.js.map +1 -0
  127. package/dist/src/wizard-checkbox.d.ts +37 -0
  128. package/dist/src/wizard-checkbox.js +152 -0
  129. package/dist/src/wizard-checkbox.js.map +1 -0
  130. package/dist/src/wizard-dialog.d.ts +45 -0
  131. package/dist/src/wizard-dialog.js +374 -0
  132. package/dist/src/wizard-dialog.js.map +1 -0
  133. package/dist/src/wizard-select.d.ts +31 -0
  134. package/dist/src/wizard-select.js +115 -0
  135. package/dist/src/wizard-select.js.map +1 -0
  136. package/dist/src/wizard-textfield.d.ts +50 -0
  137. package/dist/src/wizard-textfield.js +191 -0
  138. package/dist/src/wizard-textfield.js.map +1 -0
  139. package/dist/src/wizards.d.ts +23 -0
  140. package/dist/src/wizards.js +196 -0
  141. package/dist/src/wizards.js.map +1 -0
  142. package/dist/test/foundation.d.ts +34 -0
  143. package/dist/test/foundation.js +55 -0
  144. package/dist/test/foundation.js.map +1 -0
  145. package/dist/test/mock-editor-logger.d.ts +16 -0
  146. package/dist/test/mock-editor-logger.js +53 -0
  147. package/dist/test/mock-editor-logger.js.map +1 -0
  148. package/dist/test/mock-edits.d.ts +7 -0
  149. package/dist/test/mock-edits.js +12 -0
  150. package/dist/test/mock-edits.js.map +1 -0
  151. package/dist/test/mock-open-scd.d.ts +22 -0
  152. package/dist/test/mock-open-scd.js +53 -0
  153. package/dist/test/mock-open-scd.js.map +1 -0
  154. package/dist/test/mock-plugins.d.ts +33 -0
  155. package/dist/test/mock-plugins.js +239 -0
  156. package/dist/test/mock-plugins.js.map +1 -0
  157. package/dist/test/mock-wizard-editor.d.ts +15 -0
  158. package/dist/test/mock-wizard-editor.js +50 -0
  159. package/dist/test/mock-wizard-editor.js.map +1 -0
  160. package/package.json +42 -22
@@ -0,0 +1,491 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, state, property, query, customElement, LitElement, } from 'lit-element';
3
+ import { get } from 'lit-translate';
4
+ import '@material/mwc-button';
5
+ import '@material/mwc-dialog';
6
+ import '@material/mwc-icon';
7
+ import '@material/mwc-icon-button';
8
+ import '@material/mwc-icon-button-toggle';
9
+ import '@material/mwc-list';
10
+ import '@material/mwc-list/mwc-list-item';
11
+ import '@material/mwc-snackbar';
12
+ import '../filtered-list.js';
13
+ import { getFilterIcon, iconColors } from '../icons/icons.js';
14
+ import { getLogText } from './history/get-log-text.js';
15
+ export const historyStateEvent = 'history-state';
16
+ const icons = {
17
+ info: 'info',
18
+ warning: 'warning',
19
+ error: 'report',
20
+ };
21
+ function getPluginName(src) {
22
+ let storedPluginsString = localStorage.getItem('plugins');
23
+ if (!storedPluginsString) {
24
+ storedPluginsString = '[]';
25
+ }
26
+ const storedPlugins = JSON.parse(storedPluginsString);
27
+ const wantedPlugin = storedPlugins.find((p) => p.src === src);
28
+ if (!wantedPlugin) {
29
+ return `pluginnotfound: ${src} in ${storedPluginsString}`;
30
+ }
31
+ const name = wantedPlugin.name;
32
+ if (!name) {
33
+ return `pluginhasnoname:${src}`;
34
+ }
35
+ return name;
36
+ }
37
+ export var HistoryUIKind;
38
+ (function (HistoryUIKind) {
39
+ HistoryUIKind["log"] = "log";
40
+ HistoryUIKind["history"] = "history";
41
+ HistoryUIKind["diagnostic"] = "diagnostic";
42
+ })(HistoryUIKind || (HistoryUIKind = {}));
43
+ export function newHistoryUIEvent(show, kind, eventInitDict) {
44
+ return new CustomEvent('history-dialog-ui', {
45
+ bubbles: true,
46
+ composed: true,
47
+ ...eventInitDict,
48
+ detail: {
49
+ show,
50
+ kind,
51
+ ...eventInitDict?.detail,
52
+ },
53
+ });
54
+ }
55
+ export function newEmptyIssuesEvent(pluginSrc, eventInitDict) {
56
+ return new CustomEvent('empty-issues', {
57
+ bubbles: true,
58
+ composed: true,
59
+ ...eventInitDict,
60
+ detail: { pluginSrc, ...eventInitDict?.detail },
61
+ });
62
+ }
63
+ let OscdHistory = class OscdHistory extends LitElement {
64
+ onIssue(de) {
65
+ const issues = this.diagnoses.get(de.detail.validatorId);
66
+ if (!issues)
67
+ this.diagnoses.set(de.detail.validatorId, [de.detail]);
68
+ else
69
+ issues?.push(de.detail);
70
+ this.latestIssue = de.detail;
71
+ this.issueUI.close();
72
+ this.issueUI.show();
73
+ }
74
+ undo() {
75
+ this.editor.undo();
76
+ }
77
+ redo() {
78
+ this.editor.redo();
79
+ }
80
+ onReset() {
81
+ this.log = [];
82
+ this.editor.reset();
83
+ this.updateHistory();
84
+ }
85
+ onInfo(detail) {
86
+ const entry = {
87
+ time: new Date(),
88
+ ...detail,
89
+ };
90
+ this.log.push(entry);
91
+ if (!this.logUI.open) {
92
+ const ui = {
93
+ error: this.errorUI,
94
+ warning: this.warningUI,
95
+ info: this.infoUI,
96
+ }[detail.kind];
97
+ ui.close();
98
+ ui.show();
99
+ }
100
+ if (detail.kind == 'error') {
101
+ this.errorUI.close(); // hack to reset timeout
102
+ this.errorUI.show();
103
+ }
104
+ this.requestUpdate('log', []);
105
+ }
106
+ onLog(le) {
107
+ switch (le.detail.kind) {
108
+ case 'reset':
109
+ this.onReset();
110
+ break;
111
+ case 'action':
112
+ // No longer needed
113
+ break;
114
+ default:
115
+ this.onInfo(le.detail);
116
+ break;
117
+ }
118
+ }
119
+ historyUIHandler(e) {
120
+ const ui = {
121
+ log: this.logUI,
122
+ history: this.historyUI,
123
+ diagnostic: this.diagnosticUI,
124
+ }[e.detail.kind];
125
+ if (e.detail.show)
126
+ ui.show();
127
+ else
128
+ ui.close();
129
+ }
130
+ emptyIssuesHandler(e) {
131
+ if (this.diagnoses.get(e.detail.pluginSrc))
132
+ this.diagnoses.get(e.detail.pluginSrc).length = 0;
133
+ }
134
+ handleKeyPress(e) {
135
+ const ctrlAnd = (key) => e.key === key && e.ctrlKey;
136
+ if (ctrlAnd('y'))
137
+ this.redo();
138
+ if (ctrlAnd('z'))
139
+ this.undo();
140
+ if (ctrlAnd('l'))
141
+ this.logUI.open ? this.logUI.close() : this.logUI.show();
142
+ if (ctrlAnd('d'))
143
+ this.diagnosticUI.open
144
+ ? this.diagnosticUI.close()
145
+ : this.diagnosticUI.show();
146
+ }
147
+ updateHistory() {
148
+ const { past, future } = this.editor;
149
+ const activeIndex = past.length - 1;
150
+ const allEntries = [...past, ...future];
151
+ this.history = allEntries.map((e, index) => {
152
+ const { title, message } = getLogText(e.redo);
153
+ return {
154
+ isActive: index === activeIndex,
155
+ time: e.time,
156
+ title: e.title ?? title,
157
+ message
158
+ };
159
+ });
160
+ }
161
+ constructor() {
162
+ super();
163
+ /** All [[`LogEntry`]]s received so far through [[`LogEvent`]]s. */
164
+ this.log = [];
165
+ this.diagnoses = new Map();
166
+ this.history = [];
167
+ this.unsubscribers = [];
168
+ this.undo = this.undo.bind(this);
169
+ this.redo = this.redo.bind(this);
170
+ this.onLog = this.onLog.bind(this);
171
+ this.onIssue = this.onIssue.bind(this);
172
+ this.historyUIHandler = this.historyUIHandler.bind(this);
173
+ this.emptyIssuesHandler = this.emptyIssuesHandler.bind(this);
174
+ this.handleKeyPress = this.handleKeyPress.bind(this);
175
+ document.onkeydown = this.handleKeyPress;
176
+ }
177
+ connectedCallback() {
178
+ super.connectedCallback();
179
+ this.unsubscribers.push(this.editor.subscribe(e => this.updateHistory()), this.editor.subscribeUndoRedo(e => this.updateHistory()));
180
+ this.host.addEventListener('log', this.onLog);
181
+ this.host.addEventListener('issue', this.onIssue);
182
+ this.host.addEventListener('history-dialog-ui', this.historyUIHandler);
183
+ this.host.addEventListener('empty-issues', this.emptyIssuesHandler);
184
+ this.diagnoses.clear();
185
+ }
186
+ disconnectedCallback() {
187
+ this.unsubscribers.forEach(u => u());
188
+ }
189
+ renderLogEntry(entry, index, log) {
190
+ return html ` <abbr title="${entry.title}">
191
+ <mwc-list-item
192
+ class="${entry.kind}"
193
+ graphic="icon"
194
+ ?twoline=${!!entry.message}
195
+ >
196
+ <span>
197
+ <!-- FIXME: replace tt with mwc-chip asap -->
198
+ <tt>${entry.time?.toLocaleString()}</tt>
199
+ ${entry.title}</span
200
+ >
201
+ <span slot="secondary">${entry.message}</span>
202
+ <mwc-icon
203
+ slot="graphic"
204
+ style="--mdc-theme-text-icon-on-background:var(${iconColors[entry.kind]})"
205
+ >${icons[entry.kind]}</mwc-icon
206
+ >
207
+ </mwc-list-item></abbr
208
+ >`;
209
+ }
210
+ renderHistoryEntry(entry) {
211
+ return html ` <abbr title="${entry.title}">
212
+ <mwc-list-item
213
+ ?twoline=${!!entry.message}
214
+ ?activated=${entry.isActive}
215
+ >
216
+ <span>
217
+ <tt>${this.formatTime(entry.time)}</tt>
218
+ ${entry.title}
219
+ </span>
220
+ <span slot="secondary">${entry.message}</span>
221
+ </mwc-list-item>
222
+ </abbr>`;
223
+ }
224
+ formatTime(time) {
225
+ const date = new Date(time);
226
+ const hours = date.getHours();
227
+ const minutes = date.getMinutes();
228
+ return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
229
+ }
230
+ renderLog() {
231
+ if (this.log.length > 0)
232
+ return this.log.slice().reverse().map(this.renderLogEntry, this);
233
+ else
234
+ return html `<mwc-list-item disabled graphic="icon">
235
+ <span>${get('log.placeholder')}</span>
236
+ <mwc-icon slot="graphic">info</mwc-icon>
237
+ </mwc-list-item>`;
238
+ }
239
+ renderHistory() {
240
+ if (this.history.length > 0)
241
+ return this.history.slice().reverse().map(e => this.renderHistoryEntry(e));
242
+ else
243
+ return html `<mwc-list-item disabled graphic="icon">
244
+ <span>${get('history.placeholder')}</span>
245
+ <mwc-icon slot="graphic">info</mwc-icon>
246
+ </mwc-list-item>`;
247
+ }
248
+ renderIssueEntry(issue) {
249
+ return html ` <abbr title="${issue.title + '\n' + issue.message}"
250
+ ><mwc-list-item ?twoline=${!!issue.message}>
251
+ <span> ${issue.title}</span>
252
+ <span slot="secondary">${issue.message}</span>
253
+ </mwc-list-item></abbr
254
+ >`;
255
+ }
256
+ renderValidatorsIssues(issues) {
257
+ if (issues.length === 0)
258
+ return [html ``];
259
+ return [
260
+ html `
261
+ <mwc-list-item noninteractive>
262
+ ${getPluginName(issues[0].validatorId)}
263
+ </mwc-list-item>
264
+ `,
265
+ html `<li divider padded role="separator"></li>`,
266
+ ...issues.map(issue => this.renderIssueEntry(issue)),
267
+ ];
268
+ }
269
+ renderIssues() {
270
+ const issueItems = [];
271
+ this.diagnoses.forEach(issues => {
272
+ this.renderValidatorsIssues(issues).forEach(issueItem => issueItems.push(issueItem));
273
+ });
274
+ return issueItems.length
275
+ ? issueItems
276
+ : html `<mwc-list-item disabled graphic="icon">
277
+ <span>${get('diag.placeholder')}</span>
278
+ <mwc-icon slot="graphic">info</mwc-icon>
279
+ </mwc-list-item>`;
280
+ }
281
+ renderFilterButtons() {
282
+ return Object.keys(icons).map(kind => html `<mwc-icon-button-toggle id="${kind}filter" on
283
+ >${getFilterIcon(kind, false)}
284
+ ${getFilterIcon(kind, true)}</mwc-icon-button-toggle
285
+ >`);
286
+ }
287
+ renderLogDialog() {
288
+ return html ` <mwc-dialog id="log" heading="${get('log.name')}">
289
+ ${this.renderFilterButtons()}
290
+ <mwc-list id="content" wrapFocus>${this.renderLog()}</mwc-list>
291
+ <mwc-button slot="primaryAction" dialogaction="close"
292
+ >${get('close')}</mwc-button
293
+ >
294
+ </mwc-dialog>`;
295
+ }
296
+ renderHistoryUI() {
297
+ return html ` <mwc-dialog id="history" heading="${get('history.name')}">
298
+ <mwc-list id="content" wrapFocus>${this.renderHistory()}</mwc-list>
299
+ <mwc-button
300
+ icon="undo"
301
+ label="${get('undo')}"
302
+ ?disabled=${!this.editor.canUndo}
303
+ @click=${this.undo}
304
+ slot="secondaryAction"
305
+ ></mwc-button>
306
+ <mwc-button
307
+ icon="redo"
308
+ label="${get('redo')}"
309
+ ?disabled=${!this.editor.canRedo}
310
+ @click=${this.redo}
311
+ slot="secondaryAction"
312
+ ></mwc-button>
313
+ <mwc-button slot="primaryAction" dialogaction="close"
314
+ >${get('close')}</mwc-button
315
+ >
316
+ </mwc-dialog>`;
317
+ }
318
+ render() {
319
+ return html `<slot></slot>
320
+ <style>
321
+ #log > mwc-icon-button-toggle {
322
+ position: absolute;
323
+ top: 8px;
324
+ right: 14px;
325
+ }
326
+ #log > mwc-icon-button-toggle:nth-child(2) {
327
+ right: 62px;
328
+ }
329
+ #log > mwc-icon-button-toggle:nth-child(3) {
330
+ right: 110px;
331
+ }
332
+ #log > mwc-icon-button-toggle:nth-child(4) {
333
+ right: 158px;
334
+ }
335
+ #content mwc-list-item.info,
336
+ #content mwc-list-item.warning,
337
+ #content mwc-list-item.error {
338
+ display: none;
339
+ }
340
+ #infofilter[on] ~ #content mwc-list-item.info {
341
+ display: flex;
342
+ }
343
+ #warningfilter[on] ~ #content mwc-list-item.warning {
344
+ display: flex;
345
+ }
346
+ #errorfilter[on] ~ #content mwc-list-item.error {
347
+ display: flex;
348
+ }
349
+
350
+ #infofilter[on] {
351
+ color: var(--cyan);
352
+ }
353
+
354
+ #warningfilter[on] {
355
+ color: var(--yellow);
356
+ }
357
+
358
+ #errorfilter[on] {
359
+ color: var(--red);
360
+ }
361
+
362
+ #actionfilter[on] {
363
+ color: var(--blue);
364
+ }
365
+
366
+ #log,
367
+ #history {
368
+ --mdc-dialog-min-width: 92vw;
369
+ }
370
+
371
+ #log > #filterContainer {
372
+ position: absolute;
373
+ top: 14px;
374
+ right: 14px;
375
+ }
376
+ </style>
377
+ ${this.renderLogDialog()} ${this.renderHistoryUI()}
378
+ <mwc-dialog id="diagnostic" heading="${get('diag.name')}">
379
+ <filtered-list id="content" wrapFocus>
380
+ ${this.renderIssues()}
381
+ </filtered-list>
382
+ <mwc-button slot="primaryAction" dialogaction="close">
383
+ ${get('close')}
384
+ </mwc-button>
385
+ </mwc-dialog>
386
+
387
+ <mwc-snackbar
388
+ id="info"
389
+ timeoutMs="4000"
390
+ labelText="${this.log
391
+ .slice()
392
+ .reverse()
393
+ .find(le => le.kind === 'info')?.title ??
394
+ get('log.snackbar.placeholder')}"
395
+ >
396
+ <mwc-icon-button icon="close" slot="dismiss"></mwc-icon-button>
397
+ </mwc-snackbar>
398
+ <mwc-snackbar
399
+ id="warning"
400
+ timeoutMs="6000"
401
+ labelText="${this.log
402
+ .slice()
403
+ .reverse()
404
+ .find(le => le.kind === 'warning')?.title ??
405
+ get('log.snackbar.placeholder')}"
406
+ >
407
+ <mwc-button
408
+ slot="action"
409
+ icon="history"
410
+ @click=${() => this.logUI.show()}
411
+ >${get('log.snackbar.show')}</mwc-button
412
+ >
413
+ <mwc-icon-button icon="close" slot="dismiss"></mwc-icon-button>
414
+ </mwc-snackbar>
415
+ <mwc-snackbar
416
+ id="error"
417
+ timeoutMs="10000"
418
+ labelText="${this.log
419
+ .slice()
420
+ .reverse()
421
+ .find(le => le.kind === 'error')?.title ??
422
+ get('log.snackbar.placeholder')}"
423
+ >
424
+ <mwc-button
425
+ slot="action"
426
+ icon="history"
427
+ @click=${() => this.logUI.show()}
428
+ >${get('log.snackbar.show')}</mwc-button
429
+ >
430
+ <mwc-icon-button icon="close" slot="dismiss"></mwc-icon-button>
431
+ </mwc-snackbar>
432
+ <mwc-snackbar
433
+ id="issue"
434
+ timeoutMs="10000"
435
+ labelText="${this.latestIssue?.title ??
436
+ get('log.snackbar.placeholder')}"
437
+ >
438
+ <mwc-button
439
+ slot="action"
440
+ icon="rule"
441
+ @click=${() => this.diagnosticUI.show()}
442
+ >${get('log.snackbar.show')}</mwc-button
443
+ >
444
+ <mwc-icon-button icon="close" slot="dismiss"></mwc-icon-button>
445
+ </mwc-snackbar>`;
446
+ }
447
+ };
448
+ __decorate([
449
+ property({ type: Array })
450
+ ], OscdHistory.prototype, "log", void 0);
451
+ __decorate([
452
+ property({ type: Object })
453
+ ], OscdHistory.prototype, "editor", void 0);
454
+ __decorate([
455
+ property()
456
+ ], OscdHistory.prototype, "diagnoses", void 0);
457
+ __decorate([
458
+ property({ type: Object })
459
+ ], OscdHistory.prototype, "host", void 0);
460
+ __decorate([
461
+ state()
462
+ ], OscdHistory.prototype, "latestIssue", void 0);
463
+ __decorate([
464
+ state()
465
+ ], OscdHistory.prototype, "history", void 0);
466
+ __decorate([
467
+ query('#log')
468
+ ], OscdHistory.prototype, "logUI", void 0);
469
+ __decorate([
470
+ query('#history')
471
+ ], OscdHistory.prototype, "historyUI", void 0);
472
+ __decorate([
473
+ query('#diagnostic')
474
+ ], OscdHistory.prototype, "diagnosticUI", void 0);
475
+ __decorate([
476
+ query('#error')
477
+ ], OscdHistory.prototype, "errorUI", void 0);
478
+ __decorate([
479
+ query('#warning')
480
+ ], OscdHistory.prototype, "warningUI", void 0);
481
+ __decorate([
482
+ query('#info')
483
+ ], OscdHistory.prototype, "infoUI", void 0);
484
+ __decorate([
485
+ query('#issue')
486
+ ], OscdHistory.prototype, "issueUI", void 0);
487
+ OscdHistory = __decorate([
488
+ customElement('oscd-history')
489
+ ], OscdHistory);
490
+ export { OscdHistory };
491
+ //# sourceMappingURL=History.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"History.js","sourceRoot":"","sources":["../../../src/addons/History.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n state,\n property,\n query,\n TemplateResult,\n customElement,\n LitElement,\n} from 'lit-element';\n\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-button';\nimport '@material/mwc-dialog';\nimport '@material/mwc-icon';\nimport '@material/mwc-icon-button';\nimport '@material/mwc-icon-button-toggle';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-snackbar';\nimport { Dialog } from '@material/mwc-dialog';\nimport { Snackbar } from '@material/mwc-snackbar';\n\nimport '../filtered-list.js';\n\nimport {\n InfoDetail,\n InfoEntry,\n IssueDetail,\n IssueEvent,\n LogEntry,\n LogEntryType,\n LogEvent,\n} from '@openscd/core/foundation/deprecated/history.js';\n\nimport { getFilterIcon, iconColors } from '../icons/icons.js';\n\nimport { Plugin } from '../plugin.js';\nimport { XMLEditor } from '@openscd/core';\n\nimport { getLogText } from './history/get-log-text.js';\n\ninterface HistoryItem {\n title: string;\n message?: string;\n time: number;\n isActive: boolean;\n}\n\nexport const historyStateEvent = 'history-state';\nexport interface HistoryState {\n editCount: number;\n canUndo: boolean;\n canRedo: boolean;\n}\nexport type HistoryStateEvent = CustomEvent<HistoryState>;\n\nconst icons = {\n info: 'info',\n warning: 'warning',\n error: 'report',\n};\n\nfunction getPluginName(src: string): string {\n\n let storedPluginsString = localStorage.getItem('plugins');\n if(!storedPluginsString) {\n storedPluginsString = '[]';\n }\n\n const storedPlugins = JSON.parse(storedPluginsString) as Plugin[];\n const wantedPlugin = storedPlugins.find((p: Plugin) => p.src === src);\n\n if(!wantedPlugin) {\n return `pluginnotfound: ${src} in ${storedPluginsString}`;\n }\n\n const name = wantedPlugin.name;\n\n if(!name){\n return `pluginhasnoname:${src}`;\n }\n\n return name;\n\n}\n\nexport enum HistoryUIKind {\n log = 'log',\n history = 'history',\n diagnostic = 'diagnostic',\n}\nexport interface HistoryUIDetail {\n show: boolean;\n kind: HistoryUIKind;\n}\n\nexport type HistoryUIEvent = CustomEvent<HistoryUIDetail>;\n\nexport function newHistoryUIEvent(\n show: boolean,\n kind: HistoryUIKind,\n eventInitDict?: CustomEventInit<Partial<HistoryUIDetail>>\n): HistoryUIEvent {\n return new CustomEvent<HistoryUIDetail>('history-dialog-ui', {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n detail: {\n show,\n kind,\n ...eventInitDict?.detail,\n },\n });\n}\n\nexport interface EmptyIssuesDetail {\n pluginSrc: string;\n}\n\nexport type EmptyIssuesEvent = CustomEvent<EmptyIssuesDetail>;\n\nexport function newEmptyIssuesEvent(\n pluginSrc: string,\n eventInitDict?: CustomEventInit<Partial<EmptyIssuesDetail>>\n): EmptyIssuesEvent {\n return new CustomEvent<EmptyIssuesDetail>('empty-issues', {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n detail: { pluginSrc, ...eventInitDict?.detail },\n });\n}\n\n@customElement('oscd-history')\nexport class OscdHistory extends LitElement {\n /** All [[`LogEntry`]]s received so far through [[`LogEvent`]]s. */\n @property({ type: Array })\n log: InfoEntry[] = [];\n\n /** XML Editor to apply changes to the scd */\n @property({ type: Object }) editor!: XMLEditor;\n\n @property()\n diagnoses = new Map<string, IssueDetail[]>();\n\n @property({ type: Object })\n host!: HTMLElement;\n\n @state()\n latestIssue!: IssueDetail;\n\n @state()\n history: HistoryItem[] = [];\n\n @query('#log') logUI!: Dialog;\n @query('#history') historyUI!: Dialog;\n @query('#diagnostic') diagnosticUI!: Dialog;\n @query('#error') errorUI!: Snackbar;\n @query('#warning') warningUI!: Snackbar;\n @query('#info') infoUI!: Snackbar;\n @query('#issue') issueUI!: Snackbar;\n\n private unsubscribers: (() => any)[] = [];\n\n private onIssue(de: IssueEvent): void {\n const issues = this.diagnoses.get(de.detail.validatorId);\n\n if (!issues) this.diagnoses.set(de.detail.validatorId, [de.detail]);\n else issues?.push(de.detail);\n\n this.latestIssue = de.detail;\n this.issueUI.close();\n this.issueUI.show();\n }\n\n undo(): void {\n this.editor.undo();\n }\n redo(): void {\n this.editor.redo();\n }\n\n private onReset() {\n this.log = [];\n this.editor.reset();\n this.updateHistory();\n }\n\n private onInfo(detail: InfoDetail) {\n const entry: InfoEntry = {\n time: new Date(),\n ...detail,\n };\n\n this.log.push(entry);\n if (!this.logUI.open) {\n const ui = {\n error: this.errorUI,\n warning: this.warningUI,\n info: this.infoUI,\n }[detail.kind];\n\n ui.close();\n ui.show();\n }\n if (detail.kind == 'error') {\n this.errorUI.close(); // hack to reset timeout\n this.errorUI.show();\n }\n this.requestUpdate('log', []);\n }\n\n private onLog(le: LogEvent): void {\n switch (le.detail.kind) {\n case 'reset':\n this.onReset();\n break;\n case 'action':\n // No longer needed\n break;\n default:\n this.onInfo(le.detail);\n break;\n }\n }\n\n private historyUIHandler(e: HistoryUIEvent): void {\n const ui = {\n log: this.logUI,\n history: this.historyUI,\n diagnostic: this.diagnosticUI,\n }[e.detail.kind];\n\n if (e.detail.show) ui.show();\n else ui.close();\n }\n\n private emptyIssuesHandler(e: EmptyIssuesEvent): void {\n if (this.diagnoses.get(e.detail.pluginSrc))\n this.diagnoses.get(e.detail.pluginSrc)!.length = 0;\n }\n\n private handleKeyPress(e: KeyboardEvent): void {\n const ctrlAnd = (key: string) => e.key === key && e.ctrlKey;\n\n if (ctrlAnd('y')) this.redo();\n if (ctrlAnd('z')) this.undo();\n if (ctrlAnd('l')) this.logUI.open ? this.logUI.close() : this.logUI.show();\n if (ctrlAnd('d'))\n this.diagnosticUI.open\n ? this.diagnosticUI.close()\n : this.diagnosticUI.show();\n }\n\n private updateHistory(): void {\n const { past, future } = this.editor;\n\n const activeIndex = past.length - 1;\n const allEntries = [ ...past, ...future ];\n\n this.history = allEntries.map((e, index) => {\n const { title, message } = getLogText(e.redo as any);\n\n return {\n isActive: index === activeIndex,\n time: e.time,\n title: e.title ?? title,\n message\n };\n });\n }\n\n constructor() {\n super();\n this.undo = this.undo.bind(this);\n this.redo = this.redo.bind(this);\n this.onLog = this.onLog.bind(this);\n this.onIssue = this.onIssue.bind(this);\n this.historyUIHandler = this.historyUIHandler.bind(this);\n this.emptyIssuesHandler = this.emptyIssuesHandler.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n document.onkeydown = this.handleKeyPress;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this.unsubscribers.push(\n this.editor.subscribe(e => this.updateHistory()),\n this.editor.subscribeUndoRedo(e => this.updateHistory())\n );\n\n this.host.addEventListener('log', this.onLog);\n this.host.addEventListener('issue', this.onIssue);\n this.host.addEventListener('history-dialog-ui', this.historyUIHandler);\n this.host.addEventListener('empty-issues', this.emptyIssuesHandler);\n this.diagnoses.clear();\n }\n\n disconnectedCallback(): void {\n this.unsubscribers.forEach(u => u());\n }\n\n renderLogEntry(\n entry: InfoEntry,\n index: number,\n log: LogEntry[]\n ): TemplateResult {\n return html` <abbr title=\"${entry.title}\">\n <mwc-list-item\n class=\"${entry.kind}\"\n graphic=\"icon\"\n ?twoline=${!!entry.message}\n >\n <span>\n <!-- FIXME: replace tt with mwc-chip asap -->\n <tt>${entry.time?.toLocaleString()}</tt>\n ${entry.title}</span\n >\n <span slot=\"secondary\">${entry.message}</span>\n <mwc-icon\n slot=\"graphic\"\n style=\"--mdc-theme-text-icon-on-background:var(${iconColors[\n entry.kind\n ]})\"\n >${icons[entry.kind]}</mwc-icon\n >\n </mwc-list-item></abbr\n >`;\n }\n\n renderHistoryEntry(\n entry: HistoryItem\n ): TemplateResult {\n return html` <abbr title=\"${entry.title}\">\n <mwc-list-item\n ?twoline=${!!entry.message}\n ?activated=${entry.isActive}\n >\n <span>\n <tt>${this.formatTime(entry.time)}</tt>\n ${entry.title}\n </span>\n <span slot=\"secondary\">${entry.message}</span>\n </mwc-list-item>\n </abbr>`;\n }\n\n private formatTime(time: number): string {\n const date = new Date(time);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`\n }\n\n private renderLog(): TemplateResult[] | TemplateResult {\n if (this.log.length > 0)\n return this.log.slice().reverse().map(this.renderLogEntry, this);\n else\n return html`<mwc-list-item disabled graphic=\"icon\">\n <span>${get('log.placeholder')}</span>\n <mwc-icon slot=\"graphic\">info</mwc-icon>\n </mwc-list-item>`;\n }\n\n private renderHistory(): TemplateResult[] | TemplateResult {\n if (this.history.length > 0)\n return this.history.slice().reverse().map(e => this.renderHistoryEntry(e));\n else\n return html`<mwc-list-item disabled graphic=\"icon\">\n <span>${get('history.placeholder')}</span>\n <mwc-icon slot=\"graphic\">info</mwc-icon>\n </mwc-list-item>`;\n }\n\n protected renderIssueEntry(issue: IssueDetail): TemplateResult {\n return html` <abbr title=\"${issue.title + '\\n' + issue.message}\"\n ><mwc-list-item ?twoline=${!!issue.message}>\n <span> ${issue.title}</span>\n <span slot=\"secondary\">${issue.message}</span>\n </mwc-list-item></abbr\n >`;\n }\n\n renderValidatorsIssues(issues: IssueDetail[]): TemplateResult[] {\n if (issues.length === 0) return [html``];\n return [\n html`\n <mwc-list-item noninteractive>\n ${getPluginName(issues[0].validatorId)}\n </mwc-list-item>\n `,\n html`<li divider padded role=\"separator\"></li>`,\n ...issues.map(issue => this.renderIssueEntry(issue)),\n ];\n }\n\n private renderIssues(): TemplateResult[] | TemplateResult {\n const issueItems: TemplateResult[] = [];\n\n this.diagnoses.forEach(issues => {\n this.renderValidatorsIssues(issues).forEach(issueItem =>\n issueItems.push(issueItem)\n );\n });\n\n return issueItems.length\n ? issueItems\n : html`<mwc-list-item disabled graphic=\"icon\">\n <span>${get('diag.placeholder')}</span>\n <mwc-icon slot=\"graphic\">info</mwc-icon>\n </mwc-list-item>`;\n }\n\n private renderFilterButtons() {\n return (<LogEntryType[]>Object.keys(icons)).map(\n kind => html`<mwc-icon-button-toggle id=\"${kind}filter\" on\n >${getFilterIcon(kind, false)}\n ${getFilterIcon(kind, true)}</mwc-icon-button-toggle\n >`\n );\n }\n\n private renderLogDialog(): TemplateResult {\n return html` <mwc-dialog id=\"log\" heading=\"${get('log.name')}\">\n ${this.renderFilterButtons()}\n <mwc-list id=\"content\" wrapFocus>${this.renderLog()}</mwc-list>\n <mwc-button slot=\"primaryAction\" dialogaction=\"close\"\n >${get('close')}</mwc-button\n >\n </mwc-dialog>`;\n }\n\n private renderHistoryUI(): TemplateResult {\n return html` <mwc-dialog id=\"history\" heading=\"${get('history.name')}\">\n <mwc-list id=\"content\" wrapFocus>${this.renderHistory()}</mwc-list>\n <mwc-button\n icon=\"undo\"\n label=\"${get('undo')}\"\n ?disabled=${!this.editor.canUndo}\n @click=${this.undo}\n slot=\"secondaryAction\"\n ></mwc-button>\n <mwc-button\n icon=\"redo\"\n label=\"${get('redo')}\"\n ?disabled=${!this.editor.canRedo}\n @click=${this.redo}\n slot=\"secondaryAction\"\n ></mwc-button>\n <mwc-button slot=\"primaryAction\" dialogaction=\"close\"\n >${get('close')}</mwc-button\n >\n </mwc-dialog>`;\n }\n\n render(): TemplateResult {\n return html`<slot></slot>\n <style>\n #log > mwc-icon-button-toggle {\n position: absolute;\n top: 8px;\n right: 14px;\n }\n #log > mwc-icon-button-toggle:nth-child(2) {\n right: 62px;\n }\n #log > mwc-icon-button-toggle:nth-child(3) {\n right: 110px;\n }\n #log > mwc-icon-button-toggle:nth-child(4) {\n right: 158px;\n }\n #content mwc-list-item.info,\n #content mwc-list-item.warning,\n #content mwc-list-item.error {\n display: none;\n }\n #infofilter[on] ~ #content mwc-list-item.info {\n display: flex;\n }\n #warningfilter[on] ~ #content mwc-list-item.warning {\n display: flex;\n }\n #errorfilter[on] ~ #content mwc-list-item.error {\n display: flex;\n }\n\n #infofilter[on] {\n color: var(--cyan);\n }\n\n #warningfilter[on] {\n color: var(--yellow);\n }\n\n #errorfilter[on] {\n color: var(--red);\n }\n\n #actionfilter[on] {\n color: var(--blue);\n }\n\n #log,\n #history {\n --mdc-dialog-min-width: 92vw;\n }\n\n #log > #filterContainer {\n position: absolute;\n top: 14px;\n right: 14px;\n }\n </style>\n ${this.renderLogDialog()} ${this.renderHistoryUI()}\n <mwc-dialog id=\"diagnostic\" heading=\"${get('diag.name')}\">\n <filtered-list id=\"content\" wrapFocus>\n ${this.renderIssues()}\n </filtered-list>\n <mwc-button slot=\"primaryAction\" dialogaction=\"close\">\n ${get('close')}\n </mwc-button>\n </mwc-dialog>\n\n <mwc-snackbar\n id=\"info\"\n timeoutMs=\"4000\"\n labelText=\"${this.log\n .slice()\n .reverse()\n .find(le => le.kind === 'info')?.title ??\n get('log.snackbar.placeholder')}\"\n >\n <mwc-icon-button icon=\"close\" slot=\"dismiss\"></mwc-icon-button>\n </mwc-snackbar>\n <mwc-snackbar\n id=\"warning\"\n timeoutMs=\"6000\"\n labelText=\"${this.log\n .slice()\n .reverse()\n .find(le => le.kind === 'warning')?.title ??\n get('log.snackbar.placeholder')}\"\n >\n <mwc-button\n slot=\"action\"\n icon=\"history\"\n @click=${() => this.logUI.show()}\n >${get('log.snackbar.show')}</mwc-button\n >\n <mwc-icon-button icon=\"close\" slot=\"dismiss\"></mwc-icon-button>\n </mwc-snackbar>\n <mwc-snackbar\n id=\"error\"\n timeoutMs=\"10000\"\n labelText=\"${this.log\n .slice()\n .reverse()\n .find(le => le.kind === 'error')?.title ??\n get('log.snackbar.placeholder')}\"\n >\n <mwc-button\n slot=\"action\"\n icon=\"history\"\n @click=${() => this.logUI.show()}\n >${get('log.snackbar.show')}</mwc-button\n >\n <mwc-icon-button icon=\"close\" slot=\"dismiss\"></mwc-icon-button>\n </mwc-snackbar>\n <mwc-snackbar\n id=\"issue\"\n timeoutMs=\"10000\"\n labelText=\"${this.latestIssue?.title ??\n get('log.snackbar.placeholder')}\"\n >\n <mwc-button\n slot=\"action\"\n icon=\"rule\"\n @click=${() => this.diagnosticUI.show()}\n >${get('log.snackbar.show')}</mwc-button\n >\n <mwc-icon-button icon=\"close\" slot=\"dismiss\"></mwc-icon-button>\n </mwc-snackbar>`;\n }\n}\n\ndeclare global {\n interface ElementEventMap {\n 'history-dialog-ui': CustomEvent<HistoryUIDetail>;\n 'empty-issues': CustomEvent<EmptyIssuesDetail>;\n }\n}\n"]}
@@ -0,0 +1,96 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import { XMLEditor } from '@openscd/core';
3
+ import { MenuItem } from '../open-scd.js';
4
+ import { Plugin } from "../plugin.js";
5
+ import type { Drawer } from '@material/mwc-drawer';
6
+ import { List } from '@material/mwc-list';
7
+ import '@material/mwc-drawer';
8
+ import '@material/mwc-list';
9
+ import '@material/mwc-dialog';
10
+ import '@material/mwc-switch';
11
+ import '@material/mwc-select';
12
+ import '@material/mwc-textfield';
13
+ import { OscdPluginManager } from "./plugin-manager/plugin-manager.js";
14
+ import "./plugin-manager/plugin-manager.js";
15
+ import { OscdCustomPluginDialog } from "./plugin-manager/custom-plugin-dialog.js";
16
+ import "./plugin-manager/custom-plugin-dialog.js";
17
+ import "./menu-tabs/menu-tabs.js";
18
+ export declare class OscdLayout extends LitElement {
19
+ /** The `XMLDocument` to be edited */
20
+ doc: XMLDocument | null;
21
+ /** The name of the current [[`doc`]] */
22
+ docName: string;
23
+ /** Index of the last [[`EditorAction`]] applied. */
24
+ editCount: number;
25
+ /** XML Editor to apply changes to the scd */
26
+ editor: XMLEditor;
27
+ /** The plugins to render the layout. */
28
+ plugins: Plugin[];
29
+ /** The open-scd host element */
30
+ host: HTMLElement;
31
+ validated: Promise<void>;
32
+ shouldValidate: boolean;
33
+ activeEditor: Plugin | undefined;
34
+ menuUI: Drawer;
35
+ menuContent: List;
36
+ pluginUI: OscdPluginManager;
37
+ pluginList: List;
38
+ pluginDownloadUI: OscdCustomPluginDialog;
39
+ render(): TemplateResult;
40
+ private renderPlugging;
41
+ private getMenuContent;
42
+ /** Renders the "Add Custom Plug-in" UI*/
43
+ protected renderDownloadUI(): TemplateResult;
44
+ /**
45
+ * Renders the plug-in management UI (turning plug-ins on/off)
46
+ */
47
+ protected renderPluginUI(): TemplateResult;
48
+ get validators(): Plugin[];
49
+ get menuEntries(): Plugin[];
50
+ get topMenu(): Plugin[];
51
+ get middleMenu(): Plugin[];
52
+ get bottomMenu(): Plugin[];
53
+ get menu(): (MenuItem | 'divider')[];
54
+ get editors(): Plugin[];
55
+ private handleKeyPress;
56
+ connectedCallback(): void;
57
+ private generateMenu;
58
+ private generateValidatorMenus;
59
+ private renderMenuItem;
60
+ protected renderActionItem(me: MenuItem | 'divider'): TemplateResult;
61
+ private renderEditorTab;
62
+ /** Renders top bar which features icon buttons for undo, redo, log, scl history and diagnostics*/
63
+ protected renderHeader(): TemplateResult;
64
+ /**
65
+ * Renders the title section in the top bar
66
+ * Make sure to use slot="title" for the returned template
67
+ */
68
+ protected renderTitle(): TemplateResult;
69
+ /**
70
+ * Renders the action items for the top bar
71
+ * Make sure to use slot="actionItems" for each element
72
+ */
73
+ protected renderActionItems(): TemplateResult;
74
+ protected renderMenuContent(): TemplateResult;
75
+ /**
76
+ * Renders a drawer toolbar featuring the scl filename, enabled menu plugins,
77
+ * settings, help, scl history and plug-ins management
78
+ */
79
+ protected renderAside(): TemplateResult;
80
+ private calcActiveEditors;
81
+ /** Renders the enabled editor plugins and a tab bar to switch between them*/
82
+ protected renderContent(): TemplateResult;
83
+ private handleEditorTabActivated;
84
+ private handleActivateEditorByEvent;
85
+ private handleRunMenuByEvent;
86
+ /**
87
+ * Renders the landing buttons (open project and new project)
88
+ * it no document loaded we display the menu item that are in the position
89
+ * 'top' and are not disabled
90
+ *
91
+ * To enable replacement of this part we have to convert it to either an addon
92
+ * or a plugin
93
+ */
94
+ protected renderLanding(): TemplateResult;
95
+ static styles: import("lit-element").CSSResult;
96
+ }