@compas-oscd/open-scd 0.34.16 → 0.34.18

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 (250) hide show
  1. package/dist/WizardDivider.d.ts +8 -8
  2. package/dist/WizardDivider.js +26 -26
  3. package/dist/Wizarding.js +36 -36
  4. package/dist/Wizarding.js.map +1 -1
  5. package/dist/action-icon.d.ts +25 -25
  6. package/dist/action-icon.js +51 -51
  7. package/dist/action-pane.d.ts +25 -25
  8. package/dist/action-pane.js +86 -86
  9. package/dist/addons/Editor.d.ts +25 -25
  10. package/dist/addons/Editor.js +105 -105
  11. package/dist/addons/Editor.js.map +1 -1
  12. package/dist/addons/History.d.ts +86 -93
  13. package/dist/addons/History.js +301 -302
  14. package/dist/addons/History.js.map +1 -1
  15. package/dist/addons/Layout.d.ts +96 -96
  16. package/dist/addons/Layout.js +448 -448
  17. package/dist/addons/Layout.js.map +1 -1
  18. package/dist/addons/Settings.d.ts +68 -68
  19. package/dist/addons/Settings.js +272 -272
  20. package/dist/addons/Settings.js.map +1 -1
  21. package/dist/addons/Waiter.d.ts +14 -14
  22. package/dist/addons/Waiter.js +40 -40
  23. package/dist/addons/Waiter.js.map +1 -1
  24. package/dist/addons/Wizards.d.ts +15 -15
  25. package/dist/addons/Wizards.js +46 -46
  26. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +3 -3
  27. package/dist/addons/editor/edit-action-to-v1-converter.js +95 -95
  28. package/dist/addons/editor/edit-action-to-v1-converter.js.map +1 -1
  29. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +2 -2
  30. package/dist/addons/editor/edit-v1-to-v2-converter.js +36 -36
  31. package/dist/addons/editor/edit-v1-to-v2-converter.js.map +1 -1
  32. package/dist/addons/history/get-log-text.d.ts +5 -5
  33. package/dist/addons/history/get-log-text.js +25 -25
  34. package/dist/addons/history/get-log-text.js.map +1 -1
  35. package/dist/addons/menu-tabs/menu-tabs.d.ts +22 -22
  36. package/dist/addons/menu-tabs/menu-tabs.js +59 -59
  37. package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -28
  38. package/dist/addons/plugin-manager/custom-plugin-dialog.js +71 -71
  39. package/dist/addons/plugin-manager/plugin-manager.d.ts +20 -20
  40. package/dist/addons/plugin-manager/plugin-manager.js +77 -77
  41. package/dist/core/api/api.js +7 -0
  42. package/dist/core/api/api.js.map +1 -0
  43. package/dist/core/api/editor/subject.js +22 -0
  44. package/dist/core/api/editor/subject.js.map +1 -0
  45. package/dist/core/api/editor/xml-editor.js +82 -0
  46. package/dist/core/api/editor/xml-editor.js.map +1 -0
  47. package/dist/core/api/plugin-state-api.js +27 -0
  48. package/dist/core/api/plugin-state-api.js.map +1 -0
  49. package/dist/core/foundation/cyrb64.js +26 -0
  50. package/dist/core/foundation/cyrb64.js.map +1 -0
  51. package/dist/core/foundation/deprecated/edit-event.js +44 -0
  52. package/dist/core/foundation/deprecated/edit-event.js.map +1 -0
  53. package/dist/core/foundation/deprecated/editor.js +94 -0
  54. package/dist/core/foundation/deprecated/editor.js.map +1 -0
  55. package/dist/core/foundation/deprecated/history.js +17 -0
  56. package/dist/core/foundation/deprecated/history.js.map +1 -0
  57. package/dist/core/foundation/deprecated/open-event.js +9 -0
  58. package/dist/core/foundation/deprecated/open-event.js.map +1 -0
  59. package/dist/core/foundation/deprecated/settings.js +19 -0
  60. package/dist/core/foundation/deprecated/settings.js.map +1 -0
  61. package/dist/core/foundation/deprecated/validation.js +8 -0
  62. package/dist/core/foundation/deprecated/validation.js.map +1 -0
  63. package/dist/core/foundation/deprecated/waiter.js +12 -0
  64. package/dist/core/foundation/deprecated/waiter.js.map +1 -0
  65. package/dist/core/foundation/edit-completed-event.js +11 -0
  66. package/dist/core/foundation/edit-completed-event.js.map +1 -0
  67. package/dist/core/foundation/edit-event.js +8 -0
  68. package/dist/core/foundation/edit-event.js.map +1 -0
  69. package/dist/core/foundation/edit.js +31 -0
  70. package/dist/core/foundation/edit.js.map +1 -0
  71. package/dist/core/foundation/handle-edit.js +151 -0
  72. package/dist/core/foundation/handle-edit.js.map +1 -0
  73. package/dist/core/foundation/open-event.js +8 -0
  74. package/dist/core/foundation/open-event.js.map +1 -0
  75. package/dist/core/foundation/plugin.js +2 -0
  76. package/dist/core/foundation/plugin.js.map +1 -0
  77. package/dist/core/foundation.js +14 -0
  78. package/dist/core/foundation.js.map +1 -0
  79. package/dist/core/locales.js +21 -0
  80. package/dist/core/locales.js.map +1 -0
  81. package/dist/filtered-list.d.ts +27 -27
  82. package/dist/filtered-list.js +118 -118
  83. package/dist/finder-list.d.ts +37 -37
  84. package/dist/finder-list.js +153 -153
  85. package/dist/foundation/compare.d.ts +79 -79
  86. package/dist/foundation/compare.js +216 -216
  87. package/dist/foundation/dai.d.ts +30 -30
  88. package/dist/foundation/dai.js +126 -126
  89. package/dist/foundation/generators.d.ts +13 -13
  90. package/dist/foundation/generators.js +66 -66
  91. package/dist/foundation/ied.d.ts +22 -22
  92. package/dist/foundation/ied.js +83 -83
  93. package/dist/foundation/ied.js.map +1 -1
  94. package/dist/foundation/nsd.d.ts +4 -4
  95. package/dist/foundation/nsd.js +12 -12
  96. package/dist/foundation/nsdoc.d.ts +14 -14
  97. package/dist/foundation/nsdoc.js +178 -178
  98. package/dist/foundation/scl.d.ts +1 -1
  99. package/dist/foundation/scl.js +63 -63
  100. package/dist/foundation.d.ts +230 -230
  101. package/dist/foundation.js +1921 -1921
  102. package/dist/foundation.js.map +1 -1
  103. package/dist/icons/compare.d.ts +3 -3
  104. package/dist/icons/compare.js +4 -4
  105. package/dist/icons/icons.d.ts +41 -41
  106. package/dist/icons/icons.js +92 -92
  107. package/dist/icons/ied-icons.d.ts +3 -3
  108. package/dist/icons/ied-icons.js +4 -4
  109. package/dist/icons/lnode.d.ts +16 -16
  110. package/dist/icons/lnode.js +17 -17
  111. package/dist/open-scd.d.ts +131 -131
  112. package/dist/open-scd.js +438 -438
  113. package/dist/open-scd.js.map +1 -1
  114. package/dist/openscd/src/WizardDivider.js +37 -0
  115. package/dist/openscd/src/WizardDivider.js.map +1 -0
  116. package/dist/openscd/src/Wizarding.js +38 -0
  117. package/dist/openscd/src/Wizarding.js.map +1 -0
  118. package/dist/openscd/src/action-icon.js +220 -0
  119. package/dist/openscd/src/action-icon.js.map +1 -0
  120. package/dist/openscd/src/action-pane.js +176 -0
  121. package/dist/openscd/src/action-pane.js.map +1 -0
  122. package/dist/openscd/src/addons/Editor.js +106 -0
  123. package/dist/openscd/src/addons/Editor.js.map +1 -0
  124. package/dist/openscd/src/addons/History.js +490 -0
  125. package/dist/openscd/src/addons/History.js.map +1 -0
  126. package/dist/openscd/src/addons/Layout.js +619 -0
  127. package/dist/openscd/src/addons/Layout.js.map +1 -0
  128. package/dist/openscd/src/addons/Settings.js +465 -0
  129. package/dist/openscd/src/addons/Settings.js.map +1 -0
  130. package/dist/openscd/src/addons/Waiter.js +45 -0
  131. package/dist/openscd/src/addons/Waiter.js.map +1 -0
  132. package/dist/openscd/src/addons/Wizards.js +48 -0
  133. package/dist/openscd/src/addons/Wizards.js.map +1 -0
  134. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js +96 -0
  135. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  136. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js +37 -0
  137. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  138. package/dist/openscd/src/addons/history/get-log-text.js +26 -0
  139. package/dist/openscd/src/addons/history/get-log-text.js.map +1 -0
  140. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js +74 -0
  141. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js.map +1 -0
  142. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js +177 -0
  143. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  144. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js +165 -0
  145. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js.map +1 -0
  146. package/dist/openscd/src/filtered-list.js +168 -0
  147. package/dist/openscd/src/filtered-list.js.map +1 -0
  148. package/dist/openscd/src/finder-list.js +207 -0
  149. package/dist/openscd/src/finder-list.js.map +1 -0
  150. package/dist/openscd/src/foundation/compare.js +273 -0
  151. package/dist/openscd/src/foundation/compare.js.map +1 -0
  152. package/dist/openscd/src/foundation/dai.js +127 -0
  153. package/dist/openscd/src/foundation/dai.js.map +1 -0
  154. package/dist/openscd/src/foundation/generators.js +67 -0
  155. package/dist/openscd/src/foundation/generators.js.map +1 -0
  156. package/dist/openscd/src/foundation/ied.js +84 -0
  157. package/dist/openscd/src/foundation/ied.js.map +1 -0
  158. package/dist/openscd/src/foundation/nsd.js +13 -0
  159. package/dist/openscd/src/foundation/nsd.js.map +1 -0
  160. package/dist/openscd/src/foundation/nsdoc.js +180 -0
  161. package/dist/openscd/src/foundation/nsdoc.js.map +1 -0
  162. package/dist/openscd/src/foundation/scl.js +64 -0
  163. package/dist/openscd/src/foundation/scl.js.map +1 -0
  164. package/dist/openscd/src/foundation.js +1922 -0
  165. package/dist/openscd/src/foundation.js.map +1 -0
  166. package/dist/openscd/src/icons/compare.js +11 -0
  167. package/dist/openscd/src/icons/compare.js.map +1 -0
  168. package/dist/openscd/src/icons/icons.js +611 -0
  169. package/dist/openscd/src/icons/icons.js.map +1 -0
  170. package/dist/openscd/src/icons/ied-icons.js +11 -0
  171. package/dist/openscd/src/icons/ied-icons.js.map +1 -0
  172. package/dist/openscd/src/icons/lnode.js +50 -0
  173. package/dist/openscd/src/icons/lnode.js.map +1 -0
  174. package/dist/openscd/src/open-scd.js +483 -0
  175. package/dist/openscd/src/open-scd.js.map +1 -0
  176. package/dist/openscd/src/oscd-filter-button.js +89 -0
  177. package/dist/openscd/src/oscd-filter-button.js.map +1 -0
  178. package/dist/openscd/src/plain-compare-list.js +132 -0
  179. package/dist/openscd/src/plain-compare-list.js.map +1 -0
  180. package/dist/openscd/src/plugin-tag.js +23 -0
  181. package/dist/openscd/src/plugin-tag.js.map +1 -0
  182. package/dist/openscd/src/plugin.events.js +12 -0
  183. package/dist/openscd/src/plugin.events.js.map +1 -0
  184. package/dist/openscd/src/plugin.js +2 -0
  185. package/dist/openscd/src/plugin.js.map +1 -0
  186. package/dist/openscd/src/plugins.js +256 -0
  187. package/dist/openscd/src/plugins.js.map +1 -0
  188. package/dist/openscd/src/schemas.js +9325 -0
  189. package/dist/openscd/src/schemas.js.map +1 -0
  190. package/dist/openscd/src/themes.js +122 -0
  191. package/dist/openscd/src/themes.js.map +1 -0
  192. package/dist/openscd/src/translations/de.js +954 -0
  193. package/dist/openscd/src/translations/de.js.map +1 -0
  194. package/dist/openscd/src/translations/en.js +950 -0
  195. package/dist/openscd/src/translations/en.js.map +1 -0
  196. package/dist/openscd/src/translations/loader.js +10 -0
  197. package/dist/openscd/src/translations/loader.js.map +1 -0
  198. package/dist/openscd/src/wizard-checkbox.js +152 -0
  199. package/dist/openscd/src/wizard-checkbox.js.map +1 -0
  200. package/dist/openscd/src/wizard-dialog.js +374 -0
  201. package/dist/openscd/src/wizard-dialog.js.map +1 -0
  202. package/dist/openscd/src/wizard-select.js +115 -0
  203. package/dist/openscd/src/wizard-select.js.map +1 -0
  204. package/dist/openscd/src/wizard-textfield.js +191 -0
  205. package/dist/openscd/src/wizard-textfield.js.map +1 -0
  206. package/dist/openscd/src/wizards.js +196 -0
  207. package/dist/openscd/src/wizards.js.map +1 -0
  208. package/dist/oscd-filter-button.d.ts +27 -27
  209. package/dist/oscd-filter-button.js +59 -59
  210. package/dist/plain-compare-list.d.ts +36 -36
  211. package/dist/plain-compare-list.js +70 -70
  212. package/dist/plugin-tag.d.ts +6 -6
  213. package/dist/plugin-tag.js +22 -22
  214. package/dist/plugin.d.ts +23 -23
  215. package/dist/plugin.events.d.ts +15 -15
  216. package/dist/plugin.events.js +11 -11
  217. package/dist/plugin.js +1 -1
  218. package/dist/plugin.js.map +1 -1
  219. package/dist/plugins.d.ts +3 -3
  220. package/dist/plugins.js +255 -255
  221. package/dist/schemas.d.ts +58 -58
  222. package/dist/schemas.js +59 -59
  223. package/dist/themes.d.ts +3 -3
  224. package/dist/themes.js +13 -13
  225. package/dist/themes.js.map +1 -1
  226. package/dist/translations/de.d.ts +2 -2
  227. package/dist/translations/de.js +952 -952
  228. package/dist/translations/en.d.ts +963 -963
  229. package/dist/translations/en.js +948 -948
  230. package/dist/translations/loader.d.ts +12 -12
  231. package/dist/translations/loader.js +9 -9
  232. package/dist/translations/loader.js.map +1 -1
  233. package/dist/wizard-checkbox.d.ts +37 -37
  234. package/dist/wizard-checkbox.js +130 -130
  235. package/dist/wizard-dialog.d.ts +45 -45
  236. package/dist/wizard-dialog.js +235 -235
  237. package/dist/wizard-dialog.js.map +1 -1
  238. package/dist/wizard-select.d.ts +31 -31
  239. package/dist/wizard-select.js +102 -102
  240. package/dist/wizard-textfield.d.ts +50 -50
  241. package/dist/wizard-textfield.js +162 -162
  242. package/dist/wizards.d.ts +23 -23
  243. package/dist/wizards.js +148 -148
  244. package/dist/wizards.js.map +1 -1
  245. package/dist/xml/src/foundation.js +67 -0
  246. package/dist/xml/src/foundation.js.map +1 -0
  247. package/dist/xml/src/index.js +2 -0
  248. package/dist/xml/src/index.js.map +1 -0
  249. package/package.json +29 -127
  250. package/dist/Wizarding.d.ts +0 -10
@@ -1,24 +1,24 @@
1
- import { __decorate } from "tslib";
2
- import { customElement, css, queryAll, LitElement, property, state, TemplateResult, html, query, } from 'lit-element';
3
- import { ifDefined } from 'lit-html/directives/if-defined';
4
- import { get } from 'lit-translate';
5
- import '@material/mwc-button';
6
- import '@material/mwc-dialog';
7
- import '@material/mwc-icon-button';
8
- import '@material/mwc-icon-button-toggle';
9
- import '@material/mwc-menu';
10
- import { Dialog } from '@material/mwc-dialog';
11
- import { formatXml } from '@openscd/xml';
12
- import 'ace-custom-element';
13
- import './wizard-checkbox.js';
14
- import './wizard-textfield.js';
15
- import './wizard-select.js';
16
- import { newActionEvent, } from '@compas-oscd/core/foundation/deprecated/editor.js';
17
- import { newWizardEvent, wizardInputSelector, isWizardFactory, checkValidity, reportValidity, identity, } from './foundation.js';
18
- function renderWizardInput(input) {
19
- if (input instanceof TemplateResult)
20
- return input;
21
- if (input.kind === 'Checkbox')
1
+ import { __decorate } from "tslib";
2
+ import { customElement, css, queryAll, LitElement, property, state, TemplateResult, html, query, } from 'lit-element';
3
+ import { ifDefined } from 'lit-html/directives/if-defined';
4
+ import { get } from 'lit-translate';
5
+ import '@material/mwc-button';
6
+ import '@material/mwc-dialog';
7
+ import '@material/mwc-icon-button';
8
+ import '@material/mwc-icon-button-toggle';
9
+ import '@material/mwc-menu';
10
+ import { Dialog } from '@material/mwc-dialog';
11
+ import { formatXml } from '@openscd/xml';
12
+ import 'ace-custom-element';
13
+ import './wizard-checkbox.js';
14
+ import './wizard-textfield.js';
15
+ import './wizard-select.js';
16
+ import { newActionEvent, } from '@openscd/core/foundation/deprecated/editor.js';
17
+ import { newWizardEvent, wizardInputSelector, isWizardFactory, checkValidity, reportValidity, identity, } from './foundation.js';
18
+ function renderWizardInput(input) {
19
+ if (input instanceof TemplateResult)
20
+ return input;
21
+ if (input.kind === 'Checkbox')
22
22
  return html `<wizard-checkbox
23
23
  ?nullable=${input.nullable}
24
24
  ?defaultChecked=${input.default}
@@ -26,8 +26,8 @@ function renderWizardInput(input) {
26
26
  label="${input.label}"
27
27
  helper="${ifDefined(input.helper)}"
28
28
  .maybeValue=${input.maybeValue}
29
- ></wizard-checkbox>`;
30
- if (input.kind === 'Select')
29
+ ></wizard-checkbox>`;
30
+ if (input.kind === 'Select')
31
31
  return html `<wizard-select
32
32
  ?nullable=${input.nullable}
33
33
  ?dialogInitialFocus=${input.dialogInitialFocus}
@@ -37,7 +37,7 @@ function renderWizardInput(input) {
37
37
  validationMessage="${ifDefined(input.valadationMessage)}"
38
38
  .maybeValue=${input.maybeValue}
39
39
  >${input.values.map(value => html `<mwc-list-item value="${value}">${value}</mwc-list-item>`)}</wizard-select
40
- >`;
40
+ >`;
41
41
  return html `<wizard-textfield
42
42
  ?nullable=${input.nullable}
43
43
  ?required=${input.required}
@@ -58,156 +58,156 @@ function renderWizardInput(input) {
58
58
  type="${ifDefined(input.type)}"
59
59
  min="${ifDefined(input.min)}"
60
60
  max="${ifDefined(input.max)}"
61
- ></wizard-textfield>`;
62
- }
63
- function dialogInputs(dialog) {
64
- return Array.from(dialog?.querySelectorAll(wizardInputSelector) ?? []);
65
- }
66
- function dialogValid(dialog) {
67
- return dialogInputs(dialog).every(checkValidity);
68
- }
69
- function codeAction(element) {
70
- return inputs => {
71
- const text = inputs[0].value;
72
- if (!text || !element.parentElement)
73
- return [];
74
- const desc = {
75
- parent: element.parentElement,
76
- reference: element.nextSibling,
77
- element,
78
- };
79
- const del = {
80
- old: desc,
81
- checkValidity: () => true,
82
- };
83
- const cre = {
84
- new: {
85
- ...desc,
86
- element: new DOMParser().parseFromString(text, 'application/xml')
87
- .documentElement,
88
- },
89
- checkValidity: () => true,
90
- };
91
- return [
92
- {
93
- actions: [del, cre],
94
- title: get('code.log', {
95
- id: identity(element),
96
- }),
97
- },
98
- ];
99
- };
100
- }
101
- /** A wizard style dialog consisting of several pages commiting some
102
- * [[`EditorAction`]] on completion and aborting on dismissal. */
103
- let WizardDialog = class WizardDialog extends LitElement {
104
- /** The `Dialog` showing the active [[`WizardPage`]]. */
105
- get dialog() {
106
- return this.dialogs[this.pageIndex];
107
- }
108
- get code() {
109
- return ((this.dialog?.querySelector('mwc-icon-button-toggle')?.on ?? false) &&
110
- localStorage.getItem('mode') === 'pro');
111
- }
112
- /** Checks the inputs of all [[`WizardPage`]]s for validity. */
113
- checkValidity() {
114
- return Array.from(this.inputs).every(checkValidity);
115
- }
116
- get firstInvalidPage() {
117
- return Array.from(this.dialogs).findIndex(dialog => !dialogValid(dialog));
118
- }
119
- prev() {
120
- if (this.pageIndex <= 0)
121
- return;
122
- this.pageIndex--;
123
- this.dialog?.show();
124
- }
125
- async next() {
126
- if (dialogValid(this.dialog)) {
127
- if (this.wizard.length > this.pageIndex + 1)
128
- this.pageIndex++;
129
- this.dialog?.show();
130
- }
131
- else {
132
- this.dialog?.show();
133
- await this.dialog?.updateComplete;
134
- dialogInputs(this.dialog).map(reportValidity);
135
- }
136
- }
137
- /** Commits `action` if all inputs are valid, reports validity otherwise. */
138
- async act(action, primary = true) {
139
- if (action === undefined)
140
- return false;
141
- const wizardInputs = Array.from(this.inputs);
142
- const wizardList = (this.dialog?.querySelector('filtered-list,mwc-list'));
143
- if (!this.checkValidity()) {
144
- this.pageIndex = this.firstInvalidPage;
145
- wizardInputs.map(reportValidity);
146
- return false;
147
- }
148
- const wizardActions = action(wizardInputs, this, wizardList);
149
- if (wizardActions.length > 0) {
150
- if (primary)
151
- this.wizard[this.pageIndex].primary = undefined;
152
- else
153
- this.wizard[this.pageIndex].secondary = undefined;
154
- this.dispatchEvent(newWizardEvent());
155
- }
156
- wizardActions.forEach(wa => isWizardFactory(wa)
157
- ? this.dispatchEvent(newWizardEvent(wa))
158
- : this.dispatchEvent(newActionEvent(wa)));
159
- return true;
160
- }
161
- /** Triggers menu action callback */
162
- async menuAct(action) {
163
- if (!action)
164
- return;
165
- action(this);
166
- }
167
- onClosed(ae) {
168
- if (!(ae.target instanceof Dialog && ae.detail?.action))
169
- return;
170
- if (ae.detail.action === 'close')
171
- this.dispatchEvent(newWizardEvent());
172
- else if (ae.detail.action === 'prev')
173
- this.prev();
174
- else if (ae.detail.action === 'next')
175
- this.next();
176
- }
177
- constructor() {
178
- super();
179
- /** The [[`Wizard`]] implemented by this dialog. */
180
- this.wizard = [];
181
- /** Index of the currently active [[`WizardPage`]] */
182
- this.pageIndex = 0;
183
- this.act = this.act.bind(this);
184
- this.renderPage = this.renderPage.bind(this);
185
- }
186
- updated(changedProperties) {
187
- if (changedProperties.has('wizard')) {
188
- this.pageIndex = 0;
189
- while (this.wizard.findIndex(page => page.initial) > this.pageIndex &&
190
- dialogValid(this.dialog)) {
191
- this.dialog?.close();
192
- this.next();
193
- }
194
- this.dialog?.show();
195
- }
196
- if (this.wizard[this.pageIndex]?.primary?.auto) {
197
- this.updateComplete.then(() => this.act(this.wizard[this.pageIndex].primary.action));
198
- }
199
- if (this.actionsMenu)
200
- this.actionsMenu.anchor = this.menuButton;
201
- }
202
- renderMenu(page) {
203
- const someIconsDefined = page.menuActions?.some(menuAction => menuAction.icon);
61
+ ></wizard-textfield>`;
62
+ }
63
+ function dialogInputs(dialog) {
64
+ return Array.from(dialog?.querySelectorAll(wizardInputSelector) ?? []);
65
+ }
66
+ function dialogValid(dialog) {
67
+ return dialogInputs(dialog).every(checkValidity);
68
+ }
69
+ function codeAction(element) {
70
+ return inputs => {
71
+ const text = inputs[0].value;
72
+ if (!text || !element.parentElement)
73
+ return [];
74
+ const desc = {
75
+ parent: element.parentElement,
76
+ reference: element.nextSibling,
77
+ element,
78
+ };
79
+ const del = {
80
+ old: desc,
81
+ checkValidity: () => true,
82
+ };
83
+ const cre = {
84
+ new: {
85
+ ...desc,
86
+ element: new DOMParser().parseFromString(text, 'application/xml')
87
+ .documentElement,
88
+ },
89
+ checkValidity: () => true,
90
+ };
91
+ return [
92
+ {
93
+ actions: [del, cre],
94
+ title: get('code.log', {
95
+ id: identity(element),
96
+ }),
97
+ },
98
+ ];
99
+ };
100
+ }
101
+ /** A wizard style dialog consisting of several pages commiting some
102
+ * [[`EditorAction`]] on completion and aborting on dismissal. */
103
+ let WizardDialog = class WizardDialog extends LitElement {
104
+ /** The `Dialog` showing the active [[`WizardPage`]]. */
105
+ get dialog() {
106
+ return this.dialogs[this.pageIndex];
107
+ }
108
+ get code() {
109
+ return ((this.dialog?.querySelector('mwc-icon-button-toggle')?.on ?? false) &&
110
+ localStorage.getItem('mode') === 'pro');
111
+ }
112
+ /** Checks the inputs of all [[`WizardPage`]]s for validity. */
113
+ checkValidity() {
114
+ return Array.from(this.inputs).every(checkValidity);
115
+ }
116
+ get firstInvalidPage() {
117
+ return Array.from(this.dialogs).findIndex(dialog => !dialogValid(dialog));
118
+ }
119
+ prev() {
120
+ if (this.pageIndex <= 0)
121
+ return;
122
+ this.pageIndex--;
123
+ this.dialog?.show();
124
+ }
125
+ async next() {
126
+ if (dialogValid(this.dialog)) {
127
+ if (this.wizard.length > this.pageIndex + 1)
128
+ this.pageIndex++;
129
+ this.dialog?.show();
130
+ }
131
+ else {
132
+ this.dialog?.show();
133
+ await this.dialog?.updateComplete;
134
+ dialogInputs(this.dialog).map(reportValidity);
135
+ }
136
+ }
137
+ /** Commits `action` if all inputs are valid, reports validity otherwise. */
138
+ async act(action, primary = true) {
139
+ if (action === undefined)
140
+ return false;
141
+ const wizardInputs = Array.from(this.inputs);
142
+ const wizardList = (this.dialog?.querySelector('filtered-list,mwc-list'));
143
+ if (!this.checkValidity()) {
144
+ this.pageIndex = this.firstInvalidPage;
145
+ wizardInputs.map(reportValidity);
146
+ return false;
147
+ }
148
+ const wizardActions = action(wizardInputs, this, wizardList);
149
+ if (wizardActions.length > 0) {
150
+ if (primary)
151
+ this.wizard[this.pageIndex].primary = undefined;
152
+ else
153
+ this.wizard[this.pageIndex].secondary = undefined;
154
+ this.dispatchEvent(newWizardEvent());
155
+ }
156
+ wizardActions.forEach(wa => isWizardFactory(wa)
157
+ ? this.dispatchEvent(newWizardEvent(wa))
158
+ : this.dispatchEvent(newActionEvent(wa)));
159
+ return true;
160
+ }
161
+ /** Triggers menu action callback */
162
+ async menuAct(action) {
163
+ if (!action)
164
+ return;
165
+ action(this);
166
+ }
167
+ onClosed(ae) {
168
+ if (!(ae.target instanceof Dialog && ae.detail?.action))
169
+ return;
170
+ if (ae.detail.action === 'close')
171
+ this.dispatchEvent(newWizardEvent());
172
+ else if (ae.detail.action === 'prev')
173
+ this.prev();
174
+ else if (ae.detail.action === 'next')
175
+ this.next();
176
+ }
177
+ constructor() {
178
+ super();
179
+ /** The [[`Wizard`]] implemented by this dialog. */
180
+ this.wizard = [];
181
+ /** Index of the currently active [[`WizardPage`]] */
182
+ this.pageIndex = 0;
183
+ this.act = this.act.bind(this);
184
+ this.renderPage = this.renderPage.bind(this);
185
+ }
186
+ updated(changedProperties) {
187
+ if (changedProperties.has('wizard')) {
188
+ this.pageIndex = 0;
189
+ while (this.wizard.findIndex(page => page.initial) > this.pageIndex &&
190
+ dialogValid(this.dialog)) {
191
+ this.dialog?.close();
192
+ this.next();
193
+ }
194
+ this.dialog?.show();
195
+ }
196
+ if (this.wizard[this.pageIndex]?.primary?.auto) {
197
+ this.updateComplete.then(() => this.act(this.wizard[this.pageIndex].primary.action));
198
+ }
199
+ if (this.actionsMenu)
200
+ this.actionsMenu.anchor = this.menuButton;
201
+ }
202
+ renderMenu(page) {
203
+ const someIconsDefined = page.menuActions?.some(menuAction => menuAction.icon);
204
204
  return html ` <mwc-icon-button
205
205
  icon="more_vert"
206
- @click=${() => {
207
- if (!this.actionsMenu.open)
208
- this.actionsMenu.show();
209
- else
210
- this.actionsMenu.close();
206
+ @click=${() => {
207
+ if (!this.actionsMenu.open)
208
+ this.actionsMenu.show();
209
+ else
210
+ this.actionsMenu.close();
211
211
  }}
212
212
  ></mwc-icon-button>
213
213
  <mwc-menu class="actions-menu" corner="BOTTOM_RIGHT" menuCorner="END">
@@ -216,46 +216,46 @@ let WizardDialog = class WizardDialog extends LitElement {
216
216
  @click=${() => this.menuAct(menuAction.action)}
217
217
  >
218
218
  <span>${menuAction.label}</span>
219
- ${menuAction.icon
220
- ? html `<mwc-icon slot="graphic">${menuAction.icon}</mwc-icon>`
219
+ ${menuAction.icon
220
+ ? html `<mwc-icon slot="graphic">${menuAction.icon}</mwc-icon>`
221
221
  : html ``}
222
222
  </mwc-list-item>`)}
223
- </mwc-menu>`;
224
- }
225
- renderPage(page, index) {
226
- const isProMode = localStorage.getItem('mode') === 'pro';
227
- const hasPageElement = Boolean(page.element);
228
- const showCodeToggleButton = hasPageElement && isProMode;
229
- let extraWidth = 0;
230
- if (showCodeToggleButton && page.menuActions) {
231
- extraWidth = 96;
232
- }
233
- else if (showCodeToggleButton || page.menuActions) {
234
- extraWidth = 48;
235
- }
236
- else {
237
- extraWidth = 0;
238
- }
223
+ </mwc-menu>`;
224
+ }
225
+ renderPage(page, index) {
226
+ const isProMode = localStorage.getItem('mode') === 'pro';
227
+ const hasPageElement = Boolean(page.element);
228
+ const showCodeToggleButton = hasPageElement && isProMode;
229
+ let extraWidth = 0;
230
+ if (showCodeToggleButton && page.menuActions) {
231
+ extraWidth = 96;
232
+ }
233
+ else if (showCodeToggleButton || page.menuActions) {
234
+ extraWidth = 48;
235
+ }
236
+ else {
237
+ extraWidth = 0;
238
+ }
239
239
  return html `<mwc-dialog
240
240
  defaultAction="next"
241
241
  heading=${page.title}
242
242
  @closed=${this.onClosed}
243
243
  style="--mdc-dialog-min-width:calc(100% + ${extraWidth}px)"
244
244
  >
245
- ${showCodeToggleButton || page.menuActions
245
+ ${showCodeToggleButton || page.menuActions
246
246
  ? html `<nav>
247
- ${showCodeToggleButton
247
+ ${showCodeToggleButton
248
248
  ? html `<mwc-icon-button-toggle
249
249
  onicon="code"
250
250
  officon="code_off"
251
251
  @click=${() => this.requestUpdate()}
252
- ></mwc-icon-button-toggle>`
252
+ ></mwc-icon-button-toggle>`
253
253
  : ''}
254
254
  ${page.menuActions ? this.renderMenu(page) : ''}
255
- </nav>`
255
+ </nav>`
256
256
  : ''}
257
257
  <div id="wizard-content">
258
- ${this.code && page.element
258
+ ${this.code && page.element
259
259
  ? html `<ace-editor
260
260
  base-path="/public/ace"
261
261
  wrap
@@ -264,61 +264,61 @@ let WizardDialog = class WizardDialog extends LitElement {
264
264
  theme="ace/theme/solarized_${localStorage.getItem('theme')}"
265
265
  mode="ace/mode/xml"
266
266
  value="${formatXml(new XMLSerializer().serializeToString(page.element))}"
267
- ></ace-editor>`
267
+ ></ace-editor>`
268
268
  : page.content?.map(renderWizardInput)}
269
269
  </div>
270
- ${index > 0
270
+ ${index > 0
271
271
  ? html `<mwc-button
272
272
  slot="secondaryAction"
273
273
  dialogAction="prev"
274
274
  icon="navigate_before"
275
275
  label=${this.wizard?.[index - 1].title}
276
- ></mwc-button>`
276
+ ></mwc-button>`
277
277
  : html ``}
278
- ${page.secondary
278
+ ${page.secondary
279
279
  ? html `<mwc-button
280
280
  slot="secondaryAction"
281
281
  @click=${() => this.act(page.secondary?.action, false)}
282
282
  icon="${page.secondary.icon}"
283
283
  label="${page.secondary.label}"
284
- ></mwc-button>`
284
+ ></mwc-button>`
285
285
  : html `<mwc-button
286
286
  slot="secondaryAction"
287
287
  dialogAction="close"
288
288
  label="${get('close')}"
289
289
  style="--mdc-theme-primary: var(--mdc-theme-error)"
290
290
  ></mwc-button>`}
291
- ${this.code && page.element
291
+ ${this.code && page.element
292
292
  ? html `<mwc-button
293
293
  slot="primaryAction"
294
294
  @click=${() => this.act(codeAction(page.element))}
295
295
  icon="code"
296
296
  label="${get('save')}"
297
297
  trailingIcon
298
- ></mwc-button>`
299
- : page.primary
298
+ ></mwc-button>`
299
+ : page.primary
300
300
  ? html `<mwc-button
301
301
  slot="primaryAction"
302
302
  @click=${() => this.act(page.primary?.action)}
303
303
  icon="${page.primary.icon}"
304
304
  label="${page.primary.label}"
305
305
  trailingIcon
306
- ></mwc-button>`
307
- : index + 1 < (this.wizard?.length ?? 0)
306
+ ></mwc-button>`
307
+ : index + 1 < (this.wizard?.length ?? 0)
308
308
  ? html `<mwc-button
309
309
  slot="primaryAction"
310
310
  dialogAction="next"
311
311
  icon="navigate_next"
312
312
  label=${this.wizard?.[index + 1].title}
313
313
  trailingicon
314
- ></mwc-button>`
314
+ ></mwc-button>`
315
315
  : html ``}
316
- </mwc-dialog>`;
317
- }
318
- render() {
319
- return html `${this.wizard.map(this.renderPage)}`;
320
- }
321
- };
316
+ </mwc-dialog>`;
317
+ }
318
+ render() {
319
+ return html `${this.wizard.map(this.renderPage)}`;
320
+ }
321
+ };
322
322
  WizardDialog.styles = css `
323
323
  mwc-dialog {
324
324
  --mdc-dialog-max-width: 92vw;
@@ -348,27 +348,27 @@ WizardDialog.styles = css `
348
348
  *[iconTrailing='search'] {
349
349
  --mdc-shape-small: 28px;
350
350
  }
351
- `;
352
- __decorate([
353
- property({ type: Array })
354
- ], WizardDialog.prototype, "wizard", void 0);
355
- __decorate([
356
- state()
357
- ], WizardDialog.prototype, "pageIndex", void 0);
358
- __decorate([
359
- queryAll('mwc-dialog')
360
- ], WizardDialog.prototype, "dialogs", void 0);
361
- __decorate([
362
- queryAll(wizardInputSelector)
363
- ], WizardDialog.prototype, "inputs", void 0);
364
- __decorate([
365
- query('.actions-menu')
366
- ], WizardDialog.prototype, "actionsMenu", void 0);
367
- __decorate([
368
- query('mwc-icon-button[icon="more_vert"]')
369
- ], WizardDialog.prototype, "menuButton", void 0);
370
- WizardDialog = __decorate([
371
- customElement('wizard-dialog')
372
- ], WizardDialog);
373
- export { WizardDialog };
351
+ `;
352
+ __decorate([
353
+ property({ type: Array })
354
+ ], WizardDialog.prototype, "wizard", void 0);
355
+ __decorate([
356
+ state()
357
+ ], WizardDialog.prototype, "pageIndex", void 0);
358
+ __decorate([
359
+ queryAll('mwc-dialog')
360
+ ], WizardDialog.prototype, "dialogs", void 0);
361
+ __decorate([
362
+ queryAll(wizardInputSelector)
363
+ ], WizardDialog.prototype, "inputs", void 0);
364
+ __decorate([
365
+ query('.actions-menu')
366
+ ], WizardDialog.prototype, "actionsMenu", void 0);
367
+ __decorate([
368
+ query('mwc-icon-button[icon="more_vert"]')
369
+ ], WizardDialog.prototype, "menuButton", void 0);
370
+ WizardDialog = __decorate([
371
+ customElement('wizard-dialog')
372
+ ], WizardDialog);
373
+ export { WizardDialog };
374
374
  //# sourceMappingURL=wizard-dialog.js.map