@compas-oscd/open-scd 0.34.1 → 0.34.3

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 (299) hide show
  1. package/dist/WizardDivider.d.ts +8 -0
  2. package/dist/Wizarding.d.ts +10 -0
  3. package/dist/Wizarding.js.map +1 -1
  4. package/dist/action-icon.d.ts +25 -0
  5. package/dist/action-pane.d.ts +25 -0
  6. package/dist/addons/Editor.d.ts +25 -0
  7. package/dist/addons/History.d.ts +86 -0
  8. package/dist/addons/Layout.d.ts +96 -0
  9. package/dist/addons/Settings.d.ts +68 -0
  10. package/dist/addons/Waiter.d.ts +14 -0
  11. package/dist/addons/Wizards.d.ts +15 -0
  12. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +3 -0
  13. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +2 -0
  14. package/dist/addons/history/get-log-text.d.ts +5 -0
  15. package/dist/addons/menu-tabs/menu-tabs.d.ts +22 -0
  16. package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -0
  17. package/dist/addons/plugin-manager/plugin-manager.d.ts +20 -0
  18. package/dist/filtered-list.d.ts +27 -0
  19. package/dist/finder-list.d.ts +37 -0
  20. package/dist/foundation/compare.d.ts +79 -0
  21. package/dist/foundation/dai.d.ts +30 -0
  22. package/dist/foundation/generators.d.ts +13 -0
  23. package/dist/foundation/ied.d.ts +22 -0
  24. package/dist/foundation/nsd.d.ts +4 -0
  25. package/dist/foundation/nsdoc.d.ts +14 -0
  26. package/dist/foundation/scl.d.ts +1 -0
  27. package/dist/foundation.d.ts +230 -0
  28. package/dist/icons/compare.d.ts +3 -0
  29. package/dist/icons/icons.d.ts +41 -0
  30. package/dist/icons/ied-icons.d.ts +3 -0
  31. package/dist/icons/lnode.d.ts +16 -0
  32. package/dist/open-scd.d.ts +131 -0
  33. package/dist/oscd-filter-button.d.ts +27 -0
  34. package/dist/plain-compare-list.d.ts +36 -0
  35. package/dist/plugin-tag.d.ts +6 -0
  36. package/dist/plugin.d.ts +23 -0
  37. package/dist/plugin.events.d.ts +15 -0
  38. package/dist/plugins.d.ts +3 -0
  39. package/dist/schemas.d.ts +58 -0
  40. package/dist/src/WizardDivider.d.ts +8 -0
  41. package/dist/src/WizardDivider.js.map +1 -0
  42. package/dist/src/Wizarding.d.ts +10 -0
  43. package/dist/src/Wizarding.js.map +1 -0
  44. package/dist/src/action-icon.d.ts +25 -0
  45. package/dist/src/action-icon.js.map +1 -0
  46. package/dist/src/action-pane.d.ts +25 -0
  47. package/dist/src/action-pane.js.map +1 -0
  48. package/dist/src/addons/Editor.d.ts +25 -0
  49. package/dist/src/addons/Editor.js.map +1 -0
  50. package/dist/src/addons/History.d.ts +86 -0
  51. package/dist/src/addons/History.js.map +1 -0
  52. package/dist/src/addons/Layout.d.ts +96 -0
  53. package/dist/src/addons/Layout.js.map +1 -0
  54. package/dist/src/addons/Settings.d.ts +68 -0
  55. package/dist/src/addons/Settings.js.map +1 -0
  56. package/dist/src/addons/Waiter.d.ts +14 -0
  57. package/dist/src/addons/Waiter.js.map +1 -0
  58. package/dist/src/addons/Wizards.d.ts +15 -0
  59. package/dist/src/addons/Wizards.js.map +1 -0
  60. package/dist/src/addons/editor/edit-action-to-v1-converter.d.ts +3 -0
  61. package/dist/src/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  62. package/dist/src/addons/editor/edit-v1-to-v2-converter.d.ts +2 -0
  63. package/dist/src/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  64. package/dist/src/addons/history/get-log-text.d.ts +5 -0
  65. package/dist/src/addons/history/get-log-text.js.map +1 -0
  66. package/dist/src/addons/menu-tabs/menu-tabs.d.ts +22 -0
  67. package/dist/src/addons/menu-tabs/menu-tabs.js.map +1 -0
  68. package/dist/src/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -0
  69. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  70. package/dist/src/addons/plugin-manager/plugin-manager.d.ts +20 -0
  71. package/dist/src/addons/plugin-manager/plugin-manager.js.map +1 -0
  72. package/dist/src/filtered-list.d.ts +27 -0
  73. package/dist/src/filtered-list.js.map +1 -0
  74. package/dist/src/finder-list.d.ts +37 -0
  75. package/dist/src/finder-list.js.map +1 -0
  76. package/dist/src/foundation/compare.d.ts +79 -0
  77. package/dist/src/foundation/compare.js.map +1 -0
  78. package/dist/src/foundation/dai.d.ts +30 -0
  79. package/dist/src/foundation/dai.js.map +1 -0
  80. package/dist/src/foundation/generators.d.ts +13 -0
  81. package/dist/src/foundation/generators.js.map +1 -0
  82. package/dist/src/foundation/ied.d.ts +22 -0
  83. package/dist/src/foundation/ied.js.map +1 -0
  84. package/dist/src/foundation/nsd.d.ts +4 -0
  85. package/dist/src/foundation/nsd.js.map +1 -0
  86. package/dist/src/foundation/nsdoc.d.ts +14 -0
  87. package/dist/src/foundation/nsdoc.js.map +1 -0
  88. package/dist/src/foundation/scl.d.ts +1 -0
  89. package/dist/src/foundation/scl.js.map +1 -0
  90. package/dist/src/foundation.d.ts +230 -0
  91. package/dist/src/foundation.js.map +1 -0
  92. package/dist/src/icons/compare.d.ts +3 -0
  93. package/dist/src/icons/compare.js.map +1 -0
  94. package/dist/src/icons/icons.d.ts +41 -0
  95. package/dist/src/icons/icons.js.map +1 -0
  96. package/dist/src/icons/ied-icons.d.ts +3 -0
  97. package/dist/src/icons/ied-icons.js.map +1 -0
  98. package/dist/src/icons/lnode.d.ts +16 -0
  99. package/dist/src/icons/lnode.js.map +1 -0
  100. package/dist/src/open-scd.d.ts +131 -0
  101. package/dist/src/open-scd.js.map +1 -0
  102. package/dist/src/oscd-filter-button.d.ts +27 -0
  103. package/dist/src/oscd-filter-button.js.map +1 -0
  104. package/dist/src/plain-compare-list.d.ts +36 -0
  105. package/dist/src/plain-compare-list.js.map +1 -0
  106. package/dist/src/plugin-tag.d.ts +6 -0
  107. package/dist/src/plugin-tag.js.map +1 -0
  108. package/dist/src/plugin.d.ts +23 -0
  109. package/dist/src/plugin.events.d.ts +15 -0
  110. package/dist/src/plugin.events.js.map +1 -0
  111. package/dist/src/plugin.js.map +1 -0
  112. package/dist/src/plugins.d.ts +3 -0
  113. package/dist/src/plugins.js.map +1 -0
  114. package/dist/src/schemas.d.ts +58 -0
  115. package/dist/src/schemas.js.map +1 -0
  116. package/dist/src/themes.d.ts +3 -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.map +1 -0
  120. package/dist/src/translations/en.d.ts +963 -0
  121. package/dist/src/translations/en.js.map +1 -0
  122. package/dist/src/translations/loader.d.ts +12 -0
  123. package/dist/src/translations/loader.js.map +1 -0
  124. package/dist/src/wizard-checkbox.d.ts +37 -0
  125. package/dist/src/wizard-checkbox.js.map +1 -0
  126. package/dist/src/wizard-dialog.d.ts +45 -0
  127. package/dist/src/wizard-dialog.js.map +1 -0
  128. package/dist/src/wizard-select.d.ts +31 -0
  129. package/dist/src/wizard-select.js.map +1 -0
  130. package/dist/src/wizard-textfield.d.ts +50 -0
  131. package/dist/src/wizard-textfield.js.map +1 -0
  132. package/dist/src/wizards.d.ts +23 -0
  133. package/dist/src/wizards.js.map +1 -0
  134. package/dist/test/foundation.d.ts +34 -0
  135. package/dist/test/foundation.js +55 -0
  136. package/dist/test/foundation.js.map +1 -0
  137. package/dist/test/mock-editor-logger.d.ts +16 -0
  138. package/dist/test/mock-editor-logger.js +53 -0
  139. package/dist/test/mock-editor-logger.js.map +1 -0
  140. package/dist/test/mock-edits.d.ts +7 -0
  141. package/dist/test/mock-edits.js +12 -0
  142. package/dist/test/mock-edits.js.map +1 -0
  143. package/dist/test/mock-open-scd.d.ts +22 -0
  144. package/dist/test/mock-open-scd.js +53 -0
  145. package/dist/test/mock-open-scd.js.map +1 -0
  146. package/dist/test/mock-plugins.d.ts +33 -0
  147. package/dist/test/mock-plugins.js +239 -0
  148. package/dist/test/mock-plugins.js.map +1 -0
  149. package/dist/test/mock-wizard-editor.d.ts +15 -0
  150. package/dist/test/mock-wizard-editor.js +50 -0
  151. package/dist/test/mock-wizard-editor.js.map +1 -0
  152. package/dist/themes.d.ts +3 -0
  153. package/dist/translations/de.d.ts +2 -0
  154. package/dist/translations/en.d.ts +963 -0
  155. package/dist/translations/loader.d.ts +12 -0
  156. package/dist/wizard-checkbox.d.ts +37 -0
  157. package/dist/wizard-dialog.d.ts +45 -0
  158. package/dist/wizard-select.d.ts +31 -0
  159. package/dist/wizard-textfield.d.ts +50 -0
  160. package/dist/wizards.d.ts +23 -0
  161. package/package.json +42 -22
  162. package/dist/core/api/api.js +0 -7
  163. package/dist/core/api/api.js.map +0 -1
  164. package/dist/core/api/editor/subject.js +0 -22
  165. package/dist/core/api/editor/subject.js.map +0 -1
  166. package/dist/core/api/editor/xml-editor.js +0 -82
  167. package/dist/core/api/editor/xml-editor.js.map +0 -1
  168. package/dist/core/api/plugin-state-api.js +0 -27
  169. package/dist/core/api/plugin-state-api.js.map +0 -1
  170. package/dist/core/foundation/cyrb64.js +0 -26
  171. package/dist/core/foundation/cyrb64.js.map +0 -1
  172. package/dist/core/foundation/deprecated/edit-event.js +0 -44
  173. package/dist/core/foundation/deprecated/edit-event.js.map +0 -1
  174. package/dist/core/foundation/deprecated/editor.js +0 -94
  175. package/dist/core/foundation/deprecated/editor.js.map +0 -1
  176. package/dist/core/foundation/deprecated/history.js +0 -17
  177. package/dist/core/foundation/deprecated/history.js.map +0 -1
  178. package/dist/core/foundation/deprecated/open-event.js +0 -9
  179. package/dist/core/foundation/deprecated/open-event.js.map +0 -1
  180. package/dist/core/foundation/deprecated/settings.js +0 -19
  181. package/dist/core/foundation/deprecated/settings.js.map +0 -1
  182. package/dist/core/foundation/deprecated/validation.js +0 -8
  183. package/dist/core/foundation/deprecated/validation.js.map +0 -1
  184. package/dist/core/foundation/deprecated/waiter.js +0 -12
  185. package/dist/core/foundation/deprecated/waiter.js.map +0 -1
  186. package/dist/core/foundation/edit-completed-event.js +0 -11
  187. package/dist/core/foundation/edit-completed-event.js.map +0 -1
  188. package/dist/core/foundation/edit-event.js +0 -8
  189. package/dist/core/foundation/edit-event.js.map +0 -1
  190. package/dist/core/foundation/edit.js +0 -31
  191. package/dist/core/foundation/edit.js.map +0 -1
  192. package/dist/core/foundation/handle-edit.js +0 -151
  193. package/dist/core/foundation/handle-edit.js.map +0 -1
  194. package/dist/core/foundation/open-event.js +0 -8
  195. package/dist/core/foundation/open-event.js.map +0 -1
  196. package/dist/core/foundation/plugin.js.map +0 -1
  197. package/dist/core/foundation.js +0 -14
  198. package/dist/core/foundation.js.map +0 -1
  199. package/dist/core/locales.js +0 -21
  200. package/dist/core/locales.js.map +0 -1
  201. package/dist/openscd/src/WizardDivider.js.map +0 -1
  202. package/dist/openscd/src/Wizarding.js.map +0 -1
  203. package/dist/openscd/src/action-icon.js.map +0 -1
  204. package/dist/openscd/src/action-pane.js.map +0 -1
  205. package/dist/openscd/src/addons/Editor.js.map +0 -1
  206. package/dist/openscd/src/addons/History.js.map +0 -1
  207. package/dist/openscd/src/addons/Layout.js.map +0 -1
  208. package/dist/openscd/src/addons/Settings.js.map +0 -1
  209. package/dist/openscd/src/addons/Waiter.js.map +0 -1
  210. package/dist/openscd/src/addons/Wizards.js.map +0 -1
  211. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  212. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  213. package/dist/openscd/src/addons/history/get-log-text.js.map +0 -1
  214. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js.map +0 -1
  215. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  216. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js.map +0 -1
  217. package/dist/openscd/src/filtered-list.js.map +0 -1
  218. package/dist/openscd/src/finder-list.js.map +0 -1
  219. package/dist/openscd/src/foundation/compare.js.map +0 -1
  220. package/dist/openscd/src/foundation/dai.js.map +0 -1
  221. package/dist/openscd/src/foundation/generators.js.map +0 -1
  222. package/dist/openscd/src/foundation/ied.js.map +0 -1
  223. package/dist/openscd/src/foundation/nsd.js.map +0 -1
  224. package/dist/openscd/src/foundation/nsdoc.js.map +0 -1
  225. package/dist/openscd/src/foundation/scl.js.map +0 -1
  226. package/dist/openscd/src/foundation.js.map +0 -1
  227. package/dist/openscd/src/icons/compare.js.map +0 -1
  228. package/dist/openscd/src/icons/icons.js.map +0 -1
  229. package/dist/openscd/src/icons/ied-icons.js.map +0 -1
  230. package/dist/openscd/src/icons/lnode.js.map +0 -1
  231. package/dist/openscd/src/open-scd.js.map +0 -1
  232. package/dist/openscd/src/oscd-filter-button.js.map +0 -1
  233. package/dist/openscd/src/plain-compare-list.js.map +0 -1
  234. package/dist/openscd/src/plugin-tag.js.map +0 -1
  235. package/dist/openscd/src/plugin.events.js.map +0 -1
  236. package/dist/openscd/src/plugin.js +0 -2
  237. package/dist/openscd/src/plugin.js.map +0 -1
  238. package/dist/openscd/src/plugins.js.map +0 -1
  239. package/dist/openscd/src/schemas.js.map +0 -1
  240. package/dist/openscd/src/themes.js.map +0 -1
  241. package/dist/openscd/src/translations/de.js.map +0 -1
  242. package/dist/openscd/src/translations/en.js.map +0 -1
  243. package/dist/openscd/src/translations/loader.js.map +0 -1
  244. package/dist/openscd/src/wizard-checkbox.js.map +0 -1
  245. package/dist/openscd/src/wizard-dialog.js.map +0 -1
  246. package/dist/openscd/src/wizard-select.js.map +0 -1
  247. package/dist/openscd/src/wizard-textfield.js.map +0 -1
  248. package/dist/openscd/src/wizards.js.map +0 -1
  249. package/dist/xml/src/foundation.js +0 -67
  250. package/dist/xml/src/foundation.js.map +0 -1
  251. package/dist/xml/src/index.js +0 -2
  252. package/dist/xml/src/index.js.map +0 -1
  253. /package/dist/{openscd/src → src}/WizardDivider.js +0 -0
  254. /package/dist/{openscd/src → src}/Wizarding.js +0 -0
  255. /package/dist/{openscd/src → src}/action-icon.js +0 -0
  256. /package/dist/{openscd/src → src}/action-pane.js +0 -0
  257. /package/dist/{openscd/src → src}/addons/Editor.js +0 -0
  258. /package/dist/{openscd/src → src}/addons/History.js +0 -0
  259. /package/dist/{openscd/src → src}/addons/Layout.js +0 -0
  260. /package/dist/{openscd/src → src}/addons/Settings.js +0 -0
  261. /package/dist/{openscd/src → src}/addons/Waiter.js +0 -0
  262. /package/dist/{openscd/src → src}/addons/Wizards.js +0 -0
  263. /package/dist/{openscd/src → src}/addons/editor/edit-action-to-v1-converter.js +0 -0
  264. /package/dist/{openscd/src → src}/addons/editor/edit-v1-to-v2-converter.js +0 -0
  265. /package/dist/{openscd/src → src}/addons/history/get-log-text.js +0 -0
  266. /package/dist/{openscd/src → src}/addons/menu-tabs/menu-tabs.js +0 -0
  267. /package/dist/{openscd/src → src}/addons/plugin-manager/custom-plugin-dialog.js +0 -0
  268. /package/dist/{openscd/src → src}/addons/plugin-manager/plugin-manager.js +0 -0
  269. /package/dist/{openscd/src → src}/filtered-list.js +0 -0
  270. /package/dist/{openscd/src → src}/finder-list.js +0 -0
  271. /package/dist/{openscd/src → src}/foundation/compare.js +0 -0
  272. /package/dist/{openscd/src → src}/foundation/dai.js +0 -0
  273. /package/dist/{openscd/src → src}/foundation/generators.js +0 -0
  274. /package/dist/{openscd/src → src}/foundation/ied.js +0 -0
  275. /package/dist/{openscd/src → src}/foundation/nsd.js +0 -0
  276. /package/dist/{openscd/src → src}/foundation/nsdoc.js +0 -0
  277. /package/dist/{openscd/src → src}/foundation/scl.js +0 -0
  278. /package/dist/{openscd/src → src}/foundation.js +0 -0
  279. /package/dist/{openscd/src → src}/icons/compare.js +0 -0
  280. /package/dist/{openscd/src → src}/icons/icons.js +0 -0
  281. /package/dist/{openscd/src → src}/icons/ied-icons.js +0 -0
  282. /package/dist/{openscd/src → src}/icons/lnode.js +0 -0
  283. /package/dist/{openscd/src → src}/open-scd.js +0 -0
  284. /package/dist/{openscd/src → src}/oscd-filter-button.js +0 -0
  285. /package/dist/{openscd/src → src}/plain-compare-list.js +0 -0
  286. /package/dist/{openscd/src → src}/plugin-tag.js +0 -0
  287. /package/dist/{openscd/src → src}/plugin.events.js +0 -0
  288. /package/dist/{core/foundation → src}/plugin.js +0 -0
  289. /package/dist/{openscd/src → src}/plugins.js +0 -0
  290. /package/dist/{openscd/src → src}/schemas.js +0 -0
  291. /package/dist/{openscd/src → src}/themes.js +0 -0
  292. /package/dist/{openscd/src → src}/translations/de.js +0 -0
  293. /package/dist/{openscd/src → src}/translations/en.js +0 -0
  294. /package/dist/{openscd/src → src}/translations/loader.js +0 -0
  295. /package/dist/{openscd/src → src}/wizard-checkbox.js +0 -0
  296. /package/dist/{openscd/src → src}/wizard-dialog.js +0 -0
  297. /package/dist/{openscd/src → src}/wizard-select.js +0 -0
  298. /package/dist/{openscd/src → src}/wizard-textfield.js +0 -0
  299. /package/dist/{openscd/src → src}/wizards.js +0 -0
@@ -0,0 +1,68 @@
1
+ import { TemplateResult, LitElement } from 'lit-element';
2
+ import { Strings } from 'lit-translate';
3
+ import '@material/mwc-button';
4
+ import '@material/mwc-dialog';
5
+ import '@material/mwc-formfield';
6
+ import '@material/mwc-list/mwc-list-item';
7
+ import '@material/mwc-select';
8
+ import '@material/mwc-switch';
9
+ import { Dialog } from '@material/mwc-dialog';
10
+ import { Select } from '@material/mwc-select';
11
+ import { Switch } from '@material/mwc-switch';
12
+ import { Settings } from '@openscd/core/foundation/deprecated/settings.js';
13
+ import { Languages } from '../translations/loader.js';
14
+ import '../WizardDivider.js';
15
+ import { Nsdoc } from '../foundation/nsdoc.js';
16
+ interface LanguageConfig {
17
+ loader(lang: string): Promise<Strings>;
18
+ languages: Languages;
19
+ }
20
+ export declare const defaults: Settings;
21
+ export declare class OscdSettings extends LitElement {
22
+ /** Current [[`Settings`]] in `localStorage`, default to [[`defaults`]]. */
23
+ get settings(): Settings;
24
+ /** Object containing all *.nsdoc files and a function extracting element's label form them*/
25
+ nsdoc: Nsdoc;
26
+ host: HTMLElement;
27
+ nsdUploadButton: boolean;
28
+ languageConfig: LanguageConfig;
29
+ /**
30
+ * Get the versions of the current OpenSCD NSD files.
31
+ * @returns Current version, revision and release for all current OpenSCD NSD files.
32
+ */
33
+ private nsdVersions;
34
+ settingsUI: Dialog;
35
+ languageUI: Select;
36
+ darkThemeUI: Switch;
37
+ modeUI: Switch;
38
+ showiedsUI: Switch;
39
+ private nsdocFileUI;
40
+ private getSetting;
41
+ /** Update the `value` of `setting`, storing to `localStorage`. */
42
+ setSetting<T extends keyof Settings>(setting: T, value: Settings[T]): void;
43
+ /** Remove the `setting` in `localStorage`. */
44
+ removeSetting<T extends keyof Settings>(setting: T): void;
45
+ private onClosing;
46
+ updated(changedProperties: Map<string | number | symbol, unknown>): void;
47
+ private renderFileSelect;
48
+ private uploadNsdocFile;
49
+ private onLoadNsdoc;
50
+ /**
51
+ * Check the equality of two NsdVersions.
52
+ * @param versionA - First version to compare.
53
+ * @param versionB - Second version to compare.
54
+ * @returns Are they equal or not.
55
+ */
56
+ private isEqual;
57
+ /**
58
+ * Render one .nsdoc item in the Settings wizard
59
+ * @param key - The key of the nsdoc file in the settings.
60
+ * @returns a .nsdoc item for the Settings wizard
61
+ */
62
+ private renderNsdocItem;
63
+ private parseToXmlObject;
64
+ connectedCallback(): void;
65
+ render(): TemplateResult;
66
+ static styles: import("lit-element").CSSResult;
67
+ }
68
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../src/addons/Settings.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n html,\n property,\n query,\n TemplateResult,\n customElement,\n LitElement,\n css,\n} from 'lit-element';\nimport { get, translate, registerTranslateConfig, Strings, use } from 'lit-translate';\n\nimport '@material/mwc-button';\nimport '@material/mwc-dialog';\nimport '@material/mwc-formfield';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-select';\nimport '@material/mwc-switch';\n\nimport { Dialog } from '@material/mwc-dialog';\nimport { Select } from '@material/mwc-select';\nimport { Switch } from '@material/mwc-switch';\n\nimport { getTheme } from '../themes.js';\n\nimport { newLogEvent } from '@openscd/core/foundation/deprecated/history.js';\nimport { \n Settings, \n SettingsUIEvent, \n Language,\n NsdVersions,\n NsdVersion,\n LoadNsdocEvent,\n newLoadNsdocEvent\n} from '@openscd/core/foundation/deprecated/settings.js';\nimport { Languages, languages, loader } from '../translations/loader.js';\n\nimport '../WizardDivider.js';\nimport { WizardDialog } from '../wizard-dialog.js';\n\nimport {\n iec6185072,\n iec6185073,\n iec6185074,\n iec6185081,\n} from '../foundation/nsd.js';\nimport { initializeNsdoc, Nsdoc } from '../foundation/nsdoc.js';\n\ninterface LanguageConfig {\n loader(lang: string): Promise<Strings>;\n languages: Languages;\n}\n\nexport const defaults: Settings = {\n language: 'en',\n theme: 'light',\n mode: 'safe',\n showieds: 'off',\n 'IEC 61850-7-2': undefined,\n 'IEC 61850-7-3': undefined,\n 'IEC 61850-7-4': undefined,\n 'IEC 61850-8-1': undefined,\n};\n\n@customElement('oscd-settings')\nexport class OscdSettings extends LitElement {\n /** Current [[`Settings`]] in `localStorage`, default to [[`defaults`]]. */\n @property()\n get settings(): Settings {\n return {\n language: this.getSetting('language'),\n theme: this.getSetting('theme'),\n mode: this.getSetting('mode'),\n showieds: this.getSetting('showieds'),\n 'IEC 61850-7-2': this.getSetting('IEC 61850-7-2'),\n 'IEC 61850-7-3': this.getSetting('IEC 61850-7-3'),\n 'IEC 61850-7-4': this.getSetting('IEC 61850-7-4'),\n 'IEC 61850-8-1': this.getSetting('IEC 61850-8-1'),\n };\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 @property({\n type: Object,\n })\n host!: HTMLElement;\n\n @property({ type: Boolean })\n nsdUploadButton = true;\n\n @property({ type: Object })\n languageConfig: LanguageConfig = { languages, loader };\n\n /**\n * Get the versions of the current OpenSCD NSD files.\n * @returns Current version, revision and release for all current OpenSCD NSD files.\n */\n private async nsdVersions(): Promise<NsdVersions> {\n const [nsd72, nsd73, nsd74, nsd81] = await Promise.all([\n iec6185072,\n iec6185073,\n iec6185074,\n iec6185081,\n ]);\n const [nsd72Ns, nsd73Ns, nsd74Ns, nsd81Ns] = [\n nsd72.querySelector('NS'),\n nsd73.querySelector('NS'),\n nsd74.querySelector('NS'),\n nsd81.querySelector('ServiceNS'),\n ];\n\n return {\n 'IEC 61850-7-2': {\n version: nsd72Ns?.getAttribute('version') ?? undefined,\n revision: nsd72Ns?.getAttribute('revision') ?? undefined,\n release: nsd72Ns?.getAttribute('release') ?? undefined,\n },\n 'IEC 61850-7-3': {\n version: nsd73Ns?.getAttribute('version') ?? undefined,\n revision: nsd73Ns?.getAttribute('revision') ?? undefined,\n release: nsd73Ns?.getAttribute('release') ?? undefined,\n },\n 'IEC 61850-7-4': {\n version: nsd74Ns?.getAttribute('version') ?? undefined,\n revision: nsd74Ns?.getAttribute('revision') ?? undefined,\n release: nsd74Ns?.getAttribute('release') ?? undefined,\n },\n 'IEC 61850-8-1': {\n version: nsd81Ns?.getAttribute('version') ?? undefined,\n revision: nsd81Ns?.getAttribute('revision') ?? undefined,\n release: nsd81Ns?.getAttribute('release') ?? undefined,\n },\n };\n }\n\n @query('#settings')\n settingsUI!: Dialog;\n @query('#language')\n languageUI!: Select;\n @query('#dark')\n darkThemeUI!: Switch;\n @query('#mode')\n modeUI!: Switch;\n @query('#showieds')\n showiedsUI!: Switch;\n\n @query('#nsdoc-file')\n private nsdocFileUI!: HTMLInputElement;\n\n private getSetting<T extends keyof Settings>(setting: T): Settings[T] {\n return (\n <Settings[T] | null>localStorage.getItem(setting) ?? defaults[setting]\n );\n }\n\n /** Update the `value` of `setting`, storing to `localStorage`. */\n setSetting<T extends keyof Settings>(setting: T, value: Settings[T]): void {\n localStorage.setItem(setting, <string>(<unknown>value));\n this.shadowRoot\n ?.querySelector<WizardDialog>('wizard-dialog')\n ?.requestUpdate();\n this.requestUpdate();\n }\n\n /** Remove the `setting` in `localStorage`. */\n removeSetting<T extends keyof Settings>(setting: T): void {\n localStorage.removeItem(setting);\n this.shadowRoot\n ?.querySelector<WizardDialog>('wizard-dialog')\n ?.requestUpdate();\n this.requestUpdate();\n\n this.nsdoc = initializeNsdoc(); // update nsdoc\n }\n\n private onClosing(ae: CustomEvent<{ action: string } | null>): void {\n if (ae.detail?.action === 'reset') {\n Object.keys(this.settings).forEach(item => localStorage.removeItem(item));\n this.requestUpdate('settings');\n } else if (ae.detail?.action === 'save') {\n this.setSetting('language', <Language>this.languageUI.value);\n this.setSetting('theme', this.darkThemeUI.checked ? 'dark' : 'light');\n this.setSetting('mode', this.modeUI.checked ? 'pro' : 'safe');\n this.setSetting('showieds', this.showiedsUI.checked ? 'on' : 'off');\n this.requestUpdate('settings');\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>): void {\n super.updated(changedProperties);\n if (changedProperties.has('settings')) use(this.settings.language);\n }\n\n private renderFileSelect(): TemplateResult {\n return html`\n <input\n id=\"nsdoc-file\"\n accept=\".nsdoc\"\n type=\"file\"\n hidden\n required\n multiple\n @change=\"${(evt: Event) => this.uploadNsdocFile(evt)}}\"\n />\n <mwc-button\n label=\"${translate('settings.selectFileButton')}\"\n id=\"selectFileButton\"\n @click=${() => {\n const input = <HTMLInputElement | null>(\n this.shadowRoot!.querySelector('#nsdoc-file')\n );\n input?.click();\n }}\n >\n </mwc-button>\n `;\n }\n\n private async uploadNsdocFile(evt: Event): Promise<void> {\n const files = Array.from(\n (<HTMLInputElement | null>evt.target)?.files ?? []\n );\n\n if (files.length == 0) return;\n for (const file of files) {\n const text = await file.text();\n this.dispatchEvent(newLoadNsdocEvent(text, file.name));\n }\n\n this.nsdocFileUI.value = '';\n this.requestUpdate();\n }\n\n private async onLoadNsdoc(event: LoadNsdocEvent) {\n const nsdocElement = this.parseToXmlObject(\n event.detail.nsdoc\n ).querySelector('NSDoc');\n\n const id = nsdocElement?.getAttribute('id');\n if (!id) {\n this.dispatchEvent(\n newLogEvent({\n kind: 'error',\n title: get('settings.invalidFileNoIdFound', {\n filename: event.detail.filename,\n }),\n })\n );\n return;\n }\n\n const nsdVersions = await this.nsdVersions();\n const nsdVersion = nsdVersions[id as keyof NsdVersions];\n const nsdocVersion = {\n version: nsdocElement!.getAttribute('version') ?? '',\n revision: nsdocElement!.getAttribute('revision') ?? '',\n release: nsdocElement!.getAttribute('release') ?? '',\n };\n\n if (!this.isEqual(nsdVersion, nsdocVersion)) {\n this.dispatchEvent(\n newLogEvent({\n kind: 'warning',\n title: get('settings.invalidNsdocVersion', {\n id: id,\n filename: event.detail.filename,\n nsdVersion: `${nsdVersion.version}${nsdVersion.revision}${nsdVersion.release}`,\n nsdocVersion: `${nsdocVersion.version}${nsdocVersion.revision}${nsdocVersion.release}`,\n }),\n })\n );\n }\n\n this.setSetting(id as keyof Settings, event.detail.nsdoc);\n this.nsdoc = initializeNsdoc(); // update nsdoc\n }\n\n /**\n * Check the equality of two NsdVersions.\n * @param versionA - First version to compare.\n * @param versionB - Second version to compare.\n * @returns Are they equal or not.\n */\n private isEqual(versionA: NsdVersion, versionB: NsdVersion): boolean {\n return (\n versionA.version == versionB.version &&\n versionA.revision == versionB.revision &&\n versionA.release == versionB.release\n );\n }\n\n /**\n * Render one .nsdoc item in the Settings wizard\n * @param key - The key of the nsdoc file in the settings.\n * @returns a .nsdoc item for the Settings wizard\n */\n private renderNsdocItem<T extends keyof Settings>(key: T): TemplateResult {\n const nsdSetting = this.settings[key];\n let nsdVersion: string | undefined | null;\n let nsdRevision: string | undefined | null;\n let nsdRelease: string | undefined | null;\n\n if (nsdSetting) {\n const nsdoc = this.parseToXmlObject(nsdSetting)!.querySelector('NSDoc');\n nsdVersion = nsdoc?.getAttribute('version');\n nsdRevision = nsdoc?.getAttribute('revision');\n nsdRelease = nsdoc?.getAttribute('release');\n }\n\n return html`<mwc-list-item\n id=${key}\n graphic=\"avatar\"\n hasMeta\n twoline\n .disabled=${!nsdSetting}\n >\n <span>${key}</span>\n ${nsdSetting\n ? html`<span slot=\"secondary\"\n >${nsdVersion}${nsdRevision}${nsdRelease}</span\n >`\n : html``}\n ${nsdSetting\n ? html`<mwc-icon slot=\"graphic\" style=\"color:green;\">done</mwc-icon>`\n : html`<mwc-icon slot=\"graphic\" style=\"color:red;\">close</mwc-icon>`}\n ${nsdSetting\n ? html`<mwc-icon\n id=\"deleteNsdocItem\"\n slot=\"meta\"\n @click=${() => {\n this.removeSetting(key);\n }}\n >delete</mwc-icon\n >`\n : html``}\n </mwc-list-item>`;\n }\n\n private parseToXmlObject(text: string): XMLDocument {\n return new DOMParser().parseFromString(text, 'application/xml');\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n registerTranslateConfig({ loader: this.languageConfig.loader, empty: key => key });\n use(this.settings.language);\n\n if (this.host) {\n this.host!.addEventListener('oscd-settings', (evt: SettingsUIEvent) => {\n evt.detail.show ? this.settingsUI.show() : this.settingsUI.close();\n });\n (<any>this.host).addEventListener('load-nsdoc', (evt: LoadNsdocEvent) =>\n this.onLoadNsdoc(evt)\n );\n }\n }\n\n render(): TemplateResult {\n return html`<mwc-dialog\n id=\"settings\"\n heading=\"${translate('settings.title')}\"\n @closing=${this.onClosing}\n >\n <form>\n <mwc-select\n fixedMenuPosition\n id=\"language\"\n icon=\"language\"\n label=\"${translate('settings.language')}\"\n >\n ${Object.keys(this.languageConfig.languages).map(\n lang =>\n html`<mwc-list-item\n graphic=\"icon\"\n value=\"${lang}\"\n ?selected=${lang === this.settings.language}\n >${translate(`settings.languages.${lang}`)}</mwc-list-item\n >`\n )}\n </mwc-select>\n <mwc-formfield label=\"${translate('settings.dark')}\">\n <mwc-switch\n id=\"dark\"\n ?checked=${this.settings.theme === 'dark'}\n ></mwc-switch>\n </mwc-formfield>\n <mwc-formfield label=\"${translate('settings.mode')}\">\n <mwc-switch\n id=\"mode\"\n ?checked=${this.settings.mode === 'pro'}\n ></mwc-switch>\n </mwc-formfield>\n <mwc-formfield label=\"${translate('settings.showieds')}\">\n <mwc-switch\n id=\"showieds\"\n ?checked=${this.settings.showieds === 'on'}\n ></mwc-switch>\n </mwc-formfield>\n </form>\n <wizard-divider></wizard-divider>\n ${this.nsdUploadButton\n ? html`<section id=\"shownsdbutton\">\n <h3>${translate('settings.loadNsdTranslations')}</h3>\n ${this.renderFileSelect()}\n </section>`\n : html``}\n <mwc-list id=\"nsdocList\">\n ${this.renderNsdocItem('IEC 61850-7-2')}\n ${this.renderNsdocItem('IEC 61850-7-3')}\n ${this.renderNsdocItem('IEC 61850-7-4')}\n ${this.renderNsdocItem('IEC 61850-8-1')}\n </mwc-list>\n <mwc-button slot=\"secondaryAction\" dialogAction=\"close\">\n ${translate('cancel')}\n </mwc-button>\n <mwc-button\n style=\"--mdc-theme-primary: var(--mdc-theme-error)\"\n slot=\"secondaryAction\"\n dialogAction=\"reset\"\n >\n ${translate('reset')}\n </mwc-button>\n <mwc-button\n icon=\"save\"\n trailingIcon\n slot=\"primaryAction\"\n dialogAction=\"save\"\n >\n ${translate('save')}\n </mwc-button>\n </mwc-dialog>\n <slot></slot>\n ${getTheme(this.settings.theme)}`;\n }\n\n static styles = css`\n mwc-top-app-bar-fixed {\n --mdc-theme-text-disabled-on-light: rgba(255, 255, 255, 0.38);\n } /* hack to fix disabled icon buttons rendering black */\n\n mwc-tab {\n background-color: var(--primary);\n --mdc-theme-primary: var(--mdc-theme-on-primary);\n }\n\n input[type='file'] {\n display: none;\n }\n\n mwc-dialog {\n --mdc-dialog-max-width: 98vw;\n }\n\n mwc-dialog > form {\n display: flex;\n flex-direction: column;\n }\n\n mwc-dialog > form > * {\n display: block;\n margin-top: 16px;\n }\n\n mwc-linear-progress {\n position: fixed;\n --mdc-linear-progress-buffer-color: var(--primary);\n --mdc-theme-primary: var(--secondary);\n left: 0px;\n top: 0px;\n width: 100%;\n pointer-events: none;\n z-index: 1000;\n }\n\n tt {\n font-family: 'Roboto Mono', monospace;\n font-weight: 300;\n }\n\n .landing {\n position: absolute;\n text-align: center;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n }\n\n .landing_icon:hover {\n box-shadow: 0 12px 17px 2px rgba(0, 0, 0, 0.14),\n 0 5px 22px 4px rgba(0, 0, 0, 0.12), 0 7px 8px -4px rgba(0, 0, 0, 0.2);\n }\n\n .landing_icon {\n margin: 12px;\n border-radius: 16px;\n width: 160px;\n height: 140px;\n text-align: center;\n color: var(--mdc-theme-on-secondary);\n background: var(--secondary);\n --mdc-icon-button-size: 100px;\n --mdc-icon-size: 100px;\n --mdc-ripple-color: rgba(0, 0, 0, 0);\n box-shadow: rgb(0 0 0 / 14%) 0px 6px 10px 0px,\n rgb(0 0 0 / 12%) 0px 1px 18px 0px, rgb(0 0 0 / 20%) 0px 3px 5px -1px;\n transition: box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .landing_label {\n width: 160px;\n height: 50px;\n margin-top: 100px;\n margin-left: -30px;\n font-family: 'Roboto', sans-serif;\n }\n\n .plugin.menu {\n display: flex;\n }\n\n .plugin.validator {\n display: flex;\n }\n `;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import '@material/mwc-linear-progress';
3
+ export declare class OscdWaiter extends LitElement {
4
+ /** Whether the element is currently waiting for some async work. */
5
+ waiting: boolean;
6
+ private work;
7
+ /** A promise which resolves once all currently pending work is done. */
8
+ workDone: Promise<PromiseSettledResult<void>[]>;
9
+ private onPendingState;
10
+ constructor();
11
+ connectedCallback(): void;
12
+ disconnectedCallback(): void;
13
+ render(): TemplateResult;
14
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Waiter.js","sourceRoot":"","sources":["../../../src/addons/Waiter.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,QAAQ,GAET,MAAM,aAAa,CAAC;AAErB,OAAO,+BAA+B,CAAC;AAKhC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAShC,KAAK,CAAC,cAAc,CAAC,CAAkC;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAlBV,oEAAoE;QAEpE,YAAO,GAAG,KAAK,CAAC;QAER,SAAI,GAAuB,IAAI,GAAG,EAAE,CAAC;QAC7C,wEAAwE;QACxE,aAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAavC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;kBAEG,CAAC,IAAI,CAAC,OAAO;;8BAED,CAAC;IAC7B,CAAC;CACF,CAAA;AArCC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2CACZ;AAHL,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAwCtB;SAxCY,UAAU","sourcesContent":["import {\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from 'lit-element';\n\nimport '@material/mwc-linear-progress';\n\nimport { PendingStateDetail } from '@openscd/core/foundation/deprecated/waiter.js';\n\n@customElement('oscd-waiter')\nexport class OscdWaiter extends LitElement {\n /** Whether the element is currently waiting for some async work. */\n @property({ type: Boolean })\n waiting = false;\n\n private work: Set<Promise<void>> = new Set();\n /** A promise which resolves once all currently pending work is done. */\n workDone = Promise.allSettled(this.work);\n\n private async onPendingState(e: CustomEvent<PendingStateDetail>) {\n this.waiting = true;\n this.work.add(e.detail.promise);\n this.workDone = Promise.allSettled(this.work);\n await e.detail.promise.catch(reason => console.warn(reason));\n this.work.delete(e.detail.promise);\n this.waiting = this.work.size > 0;\n }\n\n constructor() {\n super();\n this.onPendingState = this.onPendingState.bind(this);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('pending-state', this.onPendingState);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('pending-state', this.onPendingState);\n }\n\n render(): TemplateResult {\n return html`<slot></slot>\n <mwc-linear-progress\n .closed=${!this.waiting}\n indeterminate\n ></mwc-linear-progress>`;\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { TemplateResult, LitElement } from 'lit-element';
2
+ import { WizardFactory } from '../foundation.js';
3
+ import '../wizard-dialog.js';
4
+ import { WizardDialog } from '../wizard-dialog.js';
5
+ /** `LitElement` mixin that adds a `workflow` property which [[`Wizard`]]s are
6
+ * queued onto on incoming [[`WizardEvent`]]s, first come first displayed. */
7
+ export declare class OscdWizards extends LitElement {
8
+ host: HTMLElement;
9
+ /** FIFO queue of [[`Wizard`]]s to display. */
10
+ workflow: WizardFactory[];
11
+ wizardUI: WizardDialog;
12
+ private onWizard;
13
+ connectedCallback(): void;
14
+ render(): TemplateResult;
15
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wizards.js","sourceRoot":"","sources":["../../../src/addons/Wizards.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EAEL,KAAK,EACL,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,OAAO,qBAAqB,CAAC;AAG7B;6EAC6E;AAEtE,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QAML,8CAA8C;QAE9C,aAAQ,GAAoB,EAAE,CAAC;IAgCjC,CAAC;IA5BS,QAAQ,CAAC,EAAe;QAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aACtC,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;YACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAC9B,CACF,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE,CAC/C,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAC9B,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;+BACgB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC;IAC3E,CAAC;CACF,CAAA;AApCC;IAHC,QAAQ,CAAC;QACR,IAAI,EAAE,MAAM;KACb,CAAC;yCACiB;AAInB;IADC,KAAK,EAAE;6CACuB;AAEP;IAAvB,KAAK,CAAC,eAAe,CAAC;6CAAyB;AAVrC,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAwCvB;SAxCY,WAAW","sourcesContent":["import {\n html,\n state,\n TemplateResult,\n query,\n customElement,\n LitElement,\n property,\n} from 'lit-element';\nimport { WizardEvent, WizardFactory } from '../foundation.js';\n\nimport '../wizard-dialog.js';\nimport { WizardDialog } from '../wizard-dialog.js';\n\n/** `LitElement` mixin that adds a `workflow` property which [[`Wizard`]]s are\n * queued onto on incoming [[`WizardEvent`]]s, first come first displayed. */\n@customElement('oscd-wizards')\nexport class OscdWizards extends LitElement {\n @property({\n type: Object,\n })\n host!: HTMLElement;\n\n /** FIFO queue of [[`Wizard`]]s to display. */\n @state()\n workflow: WizardFactory[] = [];\n\n @query('wizard-dialog') wizardUI!: WizardDialog;\n\n private onWizard(we: WizardEvent) {\n const wizard = we.detail.wizard;\n if (wizard === null) this.workflow.shift();\n else if (we.detail.subwizard) this.workflow.unshift(wizard);\n else this.workflow.push(wizard);\n this.requestUpdate('workflow');\n this.updateComplete.then(() =>\n this.wizardUI.updateComplete.then(() =>\n this.wizardUI.dialog?.updateComplete.then(() =>\n this.wizardUI.dialog?.focus()\n )\n )\n );\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.host.addEventListener('wizard', this.onWizard.bind(this));\n this.host.addEventListener('editor-action', () =>\n this.wizardUI.requestUpdate()\n );\n }\n\n render(): TemplateResult {\n return html`<slot></slot>\n <wizard-dialog .wizard=${this.workflow[0]?.() ?? []}></wizard-dialog>`;\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { EditorAction } from '@openscd/core/foundation/deprecated/editor.js';
2
+ import { Edit } from '@openscd/core';
3
+ export declare function convertEditActiontoV1(action: EditorAction): Edit;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-action-to-v1-converter.js","sourceRoot":"","sources":["../../../../src/addons/editor/edit-action-to-v1-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Create,\n Delete,\n EditorAction,\n isCreate,\n isDelete,\n isMove,\n isReplace,\n isSimple,\n isUpdate,\n Move,\n Replace,\n SimpleAction,\n Update\n} from '@openscd/core/foundation/deprecated/editor.js';\nimport { Edit, Insert, Remove, Update as UpdateV2 } from '@openscd/core';\nimport { getReference, SCLTag } from '../../foundation.js';\n\n\nexport function convertEditActiontoV1(action: EditorAction): Edit {\n if (isSimple(action)) {\n return convertSimpleAction(action);\n } else {\n return action.actions.map(convertSimpleAction);\n }\n}\n\nfunction convertSimpleAction(action: SimpleAction): Edit {\n if (isCreate(action)) {\n return convertCreate(action);\n } else if (isDelete(action)) {\n return convertDelete(action);\n } else if (isUpdate(action)) {\n return convertUpdate(action);\n } else if (isMove(action)) {\n return convertMove(action);\n } else if (isReplace(action)) {\n return convertReplace(action);\n }\n\n throw new Error('Unknown action type');\n}\n\nfunction convertCreate(action: Create): Insert {\n let reference: Node | null = null;\n if (\n action.new.reference === undefined &&\n action.new.element instanceof Element &&\n action.new.parent instanceof Element\n ) {\n reference = getReference(\n action.new.parent,\n <SCLTag>action.new.element.tagName\n );\n } else {\n reference = action.new.reference ?? null; \n }\n\n return {\n parent: action.new.parent,\n node: action.new.element,\n reference\n };\n}\n\nfunction convertDelete(action: Delete): Remove {\n return {\n node: action.old.element\n };\n}\n\nfunction convertUpdate(action: Update): UpdateV2 {\n const oldAttributesToRemove: Record<string, string | null> = {};\n Array.from(action.element.attributes).forEach(attr => {\n oldAttributesToRemove[attr.name] = null;\n });\n\n const attributes = {\n ...oldAttributesToRemove,\n ...action.newAttributes\n };\n\n return {\n element: action.element,\n attributes\n };\n}\n\nfunction convertMove(action: Move): Insert {\n if (action.new.reference === undefined) {\n action.new.reference = getReference(\n action.new.parent,\n <SCLTag>action.old.element.tagName\n );\n }\n\n return {\n parent: action.new.parent,\n node: action.old.element,\n reference: action.new.reference ?? null\n }\n}\n\nfunction convertReplace(action: Replace): Edit {\n const oldChildren = action.old.element.children;\n // We have to clone the children, because otherwise undoing the action would remove the children from the old element, because append removes the old parent\n const copiedChildren = Array.from(oldChildren).map(e => e.cloneNode(true));\n\n const newNode = action.new.element.cloneNode(true) as Element;\n newNode.append(...Array.from(copiedChildren));\n const parent = action.old.element.parentElement;\n\n if (!parent) {\n throw new Error('Replace action called without parent in old element');\n }\n\n const reference = action.old.element.nextSibling;\n\n const remove: Remove = { node: action.old.element };\n const insert: Insert = {\n parent,\n node: newNode,\n reference\n };\n\n return [\n remove,\n insert\n ];\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { Edit, EditV2 } from '@openscd/core';
2
+ export declare function convertEditV1toV2(edit: Edit): EditV2;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-v1-to-v2-converter.js","sourceRoot":"","sources":["../../../../src/addons/editor/edit-v1-to-v2-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAE5G,MAAM,UAAU,iBAAiB,CAAC,IAAU;IAC1C,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;KACpC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,IAAc,CAAC;KACvB;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,IAAc,CAAC;KACvB;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;KAC5B;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;KACtC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAA2C,EAAE,CAAC;IAC9D,MAAM,YAAY,GAEd,EAAE,CAAC;IAEP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACvD,IAAI,YAAY,CAAC,KAAM,CAAC,EAAE;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,EAAE;gBAAE,OAAO;YAEhB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;gBACrB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aACvB;YACD,YAAY,CAAC,EAAE,CAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;SACtC;;YAAM,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC","sourcesContent":["import { Edit, EditV2, isComplex, isInsert, isNamespaced, isRemove, isUpdate, Update } from '@openscd/core';\n\nexport function convertEditV1toV2(edit: Edit): EditV2 {\n if (isComplex(edit)) {\n return edit.map(convertEditV1toV2);\n } else if (isRemove(edit)) {\n return edit as EditV2;\n } else if (isInsert(edit)) {\n return edit as EditV2;\n } else if (isUpdate(edit)) {\n return convertUpdate(edit);\n } else {\n throw new Error('Unknown edit type');\n }\n}\n\nfunction convertUpdate(edit: Update): EditV2 {\n const attributes: Partial<Record<string, string | null>> = {};\n const attributesNS: Partial<\n Record<string, Partial<Record<string, string | null>>>\n > = {};\n\n Object.entries(edit.attributes).forEach(([key, value]) => {\n if (isNamespaced(value!)) {\n const ns = value.namespaceURI;\n if (!ns) return;\n\n if (!attributesNS[ns]) {\n attributesNS[ns] = {};\n }\n attributesNS[ns]![key] = value.value;\n } else attributes[key] = value;\n });\n\n return { element: edit.element, attributes, attributesNS };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { EditV2 } from '@openscd/core';
2
+ export declare const getLogText: (edit: EditV2) => {
3
+ title: string;
4
+ message?: string;
5
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-log-text.js","sourceRoot":"","sources":["../../../../src/addons/history/get-log-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAuC,EAAE;IAC9E,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;KACnD;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC,CAAA","sourcesContent":["import {\n EditV2,\n isInsertV2,\n isRemoveV2,\n isSetAttributesV2,\n isSetTextContentV2,\n isComplexV2\n} from '@openscd/core';\nimport { get } from 'lit-translate';\n\nexport const getLogText = (edit: EditV2): { title: string, message?: string } => {\n if (isInsertV2(edit)) {\n const name = edit.node instanceof Element ?\n edit.node.tagName :\n get('editing.node');\n return { title: get('editing.created', { name }) };\n } else if (isSetAttributesV2(edit) || isSetTextContentV2(edit)) {\n const name = edit.element.tagName;\n return { title: get('editing.updated', { name }) };\n } else if (isRemoveV2(edit)) {\n const name = edit.node instanceof Element ?\n edit.node.tagName :\n get('editing.node');\n return { title: get('editing.deleted', { name }) };\n } else if (isComplexV2(edit)) {\n const message = edit.map(e => getLogText(e)).map(({ title }) => title).join(', ');\n return { title: get('editing.complex'), message };\n }\n \n return { title: '' };\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import '@material/mwc-list';
3
+ import '@material/mwc-tab';
4
+ import '@material/mwc-tab-bar';
5
+ import '@material/mwc-button';
6
+ import { Plugin } from "../../plugin.js";
7
+ export declare class OscdMenuTabs extends LitElement {
8
+ editors: Plugin[];
9
+ _activeEditor: Plugin | undefined;
10
+ get activeEditor(): Plugin | undefined;
11
+ set activeEditor(editor: Plugin | undefined);
12
+ private activeTabIndex;
13
+ render(): TemplateResult;
14
+ static styles: import("lit-element").CSSResult;
15
+ private handleActivatedEditorTab;
16
+ private dispatchActivateEditor;
17
+ }
18
+ export declare const TabActivatedEventKey = "oscd-editor-tab-activated";
19
+ export type TabActivatedEvent = CustomEvent<TabActivatedEventDetail>;
20
+ export type TabActivatedEventDetail = {
21
+ editor: Plugin;
22
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-tabs.js","sourceRoot":"","sources":["../../../../src/addons/menu-tabs/menu-tabs.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,QAAQ,EAER,KAAK,EAEL,GAAG,EACJ,MAAM,aAAa,CAAC;AAErB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAQvB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAEsB,YAAO,GAAa,EAAE,CAAC;QAUjC,mBAAc,GAAG,CAAC,CAAC;IAqCtC,CAAC;IA7C6B,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,CAAC,MAA0B;QACzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;QAClG,IAAI,CAAC,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAAA,CAAC;IAIF,MAAM;QACJ,IAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAC;YAAE,OAAO,IAAI,CAAA,EAAE,CAAC;SAAE;QAE/C,OAAO,IAAI,CAAA;;+BAEgB,IAAI,CAAC,wBAAwB;sBACtC,IAAI,CAAC,cAAc;;UAE9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,SAAS,CAAG;;KAEpC,CAAA;IACH,CAAC;IASO,wBAAwB,CAAC,CAAc;QAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,sBAAsB,CAAE,MAAc;QAC5C,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,oBAAoB,EAAE;YACrD,MAAM,EAAE,EAAE,MAAM,EAAE;YAClB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC;;AArBM,mBAAM,GAAG,GAAG,CAAA;;;;;GAKlB,CAAA;AA9B0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;6CAAwB;AAEtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAAkD;AAQpE;IAAR,KAAK,EAAE;oDAA4B;AAZzB,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CAiDxB;SAjDY,YAAY;AAmDzB,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAU;IACvC,OAAO,IAAI,CAAA;qBACQ,IAAI,SAAS,IAAI,IAAI,MAAM;GAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAA","sourcesContent":["import {\n customElement,\n html,\n LitElement,\n property,\n query,\n state,\n TemplateResult,\n css\n} from 'lit-element';\n\nimport '@material/mwc-list';\nimport '@material/mwc-tab';\nimport '@material/mwc-tab-bar';\nimport '@material/mwc-button';\n\nimport {\n Plugin,\n} from \"../../plugin.js\"\n\n\n@customElement('oscd-menu-tabs')\nexport class OscdMenuTabs extends LitElement {\n\n @property({ type: Array }) editors: Plugin[] = [];\n _activeEditor: Plugin | undefined;\n @property({ type: Object }) get activeEditor() { return this._activeEditor; }\n set activeEditor(editor: Plugin | undefined) {\n this._activeEditor = editor;\n const editorIndex = this.editors.findIndex(e => e.name === editor?.name && e.src === editor?.src);\n this.activeTabIndex = editorIndex > -1 ? editorIndex : 0;\n this.requestUpdate();\n };\n\n @state() private activeTabIndex = 0;\n\n render(){\n if(this.editors.length === 0){ return html``; }\n\n return html`\n <mwc-tab-bar\n @MDCTabBar:activated=${this.handleActivatedEditorTab}\n activeIndex=${this.activeTabIndex}\n >\n ${ this.editors.map( EditorTab ) }\n </mwc-tab-bar>\n `\n }\n\n static styles = css`\n mwc-tab {\n background-color: var(--primary);\n --mdc-theme-primary: var(--mdc-theme-on-primary);\n }\n `\n\n private handleActivatedEditorTab(e: CustomEvent): void {\n const tabIndex = e.detail.index;\n const editor = this.editors[tabIndex];\n this.activeTabIndex = tabIndex;\n this.dispatchActivateEditor(editor);\n }\n\n private dispatchActivateEditor( editor: Plugin ){\n const newEvent = new CustomEvent(TabActivatedEventKey, {\n detail: { editor },\n composed: true,\n bubbles: true\n })\n this.dispatchEvent(newEvent)\n }\n}\n\nfunction EditorTab({ name, icon }: Plugin): TemplateResult {\n return html`\n <mwc-tab label=${name} icon=${icon || 'edit'}> </mwc-tab>\n `;\n}\n\nexport const TabActivatedEventKey = 'oscd-editor-tab-activated'\nexport type TabActivatedEvent = CustomEvent<TabActivatedEventDetail>;\nexport type TabActivatedEventDetail = { editor: Plugin }\n"]}
@@ -0,0 +1,28 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import type { Button } from '@material/mwc-button';
3
+ import type { Dialog } from '@material/mwc-dialog';
4
+ import { List } from '@material/mwc-list';
5
+ import type { Select } from '@material/mwc-select';
6
+ import type { Switch } from '@material/mwc-switch';
7
+ import type { TextField } from '@material/mwc-textfield';
8
+ import '@material/mwc-dialog';
9
+ import '@material/mwc-drawer';
10
+ import '@material/mwc-list';
11
+ import '@material/mwc-select';
12
+ import '@material/mwc-switch';
13
+ import '@material/mwc-textfield';
14
+ export declare class OscdCustomPluginDialog extends LitElement {
15
+ dialog: Dialog;
16
+ pluginSrcInput: TextField;
17
+ pluginNameInput: TextField;
18
+ pluginKindList: List;
19
+ requireDoc: Switch;
20
+ positionList: Select;
21
+ addButton: Button;
22
+ render(): TemplateResult;
23
+ static styles: import("lit-element").CSSResult;
24
+ close(): void;
25
+ show(): void;
26
+ get open(): boolean;
27
+ private handleAddPlugin;
28
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-plugin-dialog.js","sourceRoot":"","sources":["../../../../src/addons/plugin-manager/custom-plugin-dialog.ts"],"names":[],"mappings":";AACA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,KAAK,EAEL,GAAG,GACJ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,YAAY,EAEb,MAAM,iBAAiB,CAAC;AAUzB,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AAI1B,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,UAAU;IAUpD,MAAM;QACJ,OAAO,IAAI,CAAA;yCAC0B,GAAG,CAAC,qBAAqB,CAAC;;;cAGrD,GAAG,CAAC,qBAAqB,CAAC;;;qBAGnB,GAAG,CAAC,kBAAkB,CAAC;sBACtB,GAAG,CAAC,wBAAwB,CAAC;;;;;;;;;;;;gBAYnC,GAAG,CAAC,gBAAgB,CAAC;;kBAEnB,WAAW,CAAC,QAAQ,CAAC;;;;gBAIvB,GAAG,CAAC,cAAc,CAAC;;gBAEnB,WAAW,CAAC,MAAM,CAAC;;;;;;yBAMV,GAAG,CAAC,oBAAoB,CAAC;;;;;kBAKhC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAC/B,QAAQ,CAAC,EAAE,CACT,IAAI,CAAA,yBAAyB,QAAQ;yBAChC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;sBAC7B,CACL;;;;;;;;;;;;;;;;;;;;gBAoBD,GAAG,CAAC,mBAAmB,CAAC;;kBAEtB,WAAW,CAAC,WAAW,CAAC;;;;;qBAKrB,GAAG,CAAC,iBAAiB,CAAC;sBACrB,GAAG,CAAC,uBAAuB,CAAC;;;;;;;;;;mBAU/B,GAAG,CAAC,QAAQ,CAAC;;;;;;mBAMb,GAAG,CAAC,KAAK,CAAC;;mBAEV,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;;;KAG1C,CAAC;IACJ,CAAC;IAmBM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;IACzB,CAAC;IAEO,eAAe;QAErB,IACE,CAAC,CACC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YACpC,IAAI,CAAC,cAAc,CAAC,QAAQ;YAC5B,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3B;YAED,OAAO;QAET,IAAI,CAAC,aAAa,CAChB,yBAAyB,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;YAC9B,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;YAChC,IAAI,EAAyB,IAAI,CAAC,cAAc,CAAC,QAAS,CAAC,KAAK;YAChE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;YACnC,QAAQ,EAAgB,IAAI,CAAC,YAAY,CAAC,KAAK;YAC/C,MAAM,EAAE,IAAI;YACZ,iEAAiE;YACjE,eAAe,EAAE,KAAK;SACvB,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;;AAzDM,6BAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;GAelB,CAAA;AAxHiB;IAAjB,KAAK,CAAC,SAAS,CAAC;sDAAgB;AACP;IAAzB,KAAK,CAAC,iBAAiB,CAAC;8DAA2B;AACzB;IAA1B,KAAK,CAAC,kBAAkB,CAAC;+DAA4B;AAC5B;IAAzB,KAAK,CAAC,iBAAiB,CAAC;8DAAsB;AACzB;IAArB,KAAK,CAAC,aAAa,CAAC;0DAAoB;AACjB;IAAvB,KAAK,CAAC,eAAe,CAAC;4DAAsB;AACxB;IAApB,KAAK,CAAC,YAAY,CAAC;yDAAmB;AAR5B,sBAAsB;IADlC,aAAa,CAAC,2BAA2B,CAAC;GAC9B,sBAAsB,CAsKlC;SAtKY,sBAAsB","sourcesContent":["\nimport {\n customElement,\n html,\n LitElement,\n query,\n TemplateResult,\n css,\n} from 'lit-element';\nimport { get } from 'lit-translate';\nimport {\n newAddExternalPluginEvent,\n pluginIcons\n} from '../../open-scd.js';\n\nimport {\n MenuPosition,\n menuPosition,\n PluginKind\n} from \"../../plugin.js\";\n\nimport type { Button } from '@material/mwc-button';\nimport type { Dialog } from '@material/mwc-dialog';\nimport { List } from '@material/mwc-list';\nimport type { ListItem } from '@material/mwc-list/mwc-list-item';\nimport type { Select } from '@material/mwc-select';\nimport type { Switch } from '@material/mwc-switch';\nimport type { TextField } from '@material/mwc-textfield';\n\nimport '@material/mwc-dialog';\nimport '@material/mwc-drawer';\nimport '@material/mwc-list';\nimport '@material/mwc-select';\nimport '@material/mwc-switch';\nimport '@material/mwc-textfield';\n\n\n@customElement('oscd-custom-plugin-dialog')\nexport class OscdCustomPluginDialog extends LitElement {\n\n @query('#dialog') dialog!: Dialog\n @query('#pluginSrcInput') pluginSrcInput!: TextField\n @query('#pluginNameInput') pluginNameInput!: TextField\n @query('#pluginKindList') pluginKindList!: List\n @query('#requireDoc') requireDoc!: Switch\n @query('#positionList') positionList!: Select\n @query('#addButton') addButton!: Button\n\n render(): TemplateResult {\n return html`\n <mwc-dialog id=\"dialog\" heading=\"${get('plugins.add.heading')}\">\n <div style=\"display: flex; flex-direction: column; row-gap: 8px;\">\n <p style=\"color:var(--mdc-theme-error);\">\n ${get('plugins.add.warning')}\n </p>\n <mwc-textfield\n label=\"${get('plugins.add.name')}\"\n helper=\"${get('plugins.add.nameHelper')}\"\n required\n id=\"pluginNameInput\"\n ></mwc-textfield>\n <mwc-list id=\"pluginKindList\">\n <mwc-radio-list-item\n id=\"editor\"\n value=\"editor\"\n hasMeta\n selected\n left\n >\n ${get('plugins.editor')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['editor']}\n </mwc-icon>\n </mwc-radio-list-item>\n <mwc-radio-list-item value=\"menu\" hasMeta left>\n ${get('plugins.menu')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['menu']}\n </mwc-icon>\n </mwc-radio-list-item>\n <div id=\"menudetails\">\n <mwc-formfield\n id=\"enabledefault\"\n label=\"${get('plugins.requireDoc')}\"\n >\n <mwc-switch id=\"requireDoc\" checked></mwc-switch>\n </mwc-formfield>\n <mwc-select id=\"positionList\" value=\"middle\" fixedpositionList>\n ${Object.values(menuPosition).map(\n menutype =>\n html`<mwc-list-item value=\"${menutype}\"\n >${get('plugins.' + menutype)}</mwc-list-item\n >`\n )}\n </mwc-select>\n </div>\n <style>\n #menudetails {\n display: none;\n padding: 20px;\n padding-left: 50px;\n }\n #pluginKindList [value=\"menu\"][selected] ~ #menudetails {\n display: grid;\n }\n #enabledefault {\n padding-bottom: 20px;\n }\n #positionList {\n max-width: 250px;\n }\n </style>\n <mwc-radio-list-item id=\"validator\" value=\"validator\" hasMeta left>\n ${get('plugins.validator')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['validator']}\n </mwc-icon>\n </mwc-radio-list-item>\n </mwc-list>\n <mwc-textfield\n label=\"${get('plugins.add.src')}\"\n helper=\"${get('plugins.add.srcHelper')}\"\n placeholder=\"http://example.com/plugin.js\"\n type=\"url\"\n required\n id=\"pluginSrcInput\">\n </mwc-textfield>\n </div>\n <mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"close\"\n label=\"${get('cancel')}\">\n </mwc-button>\n <mwc-button\n id=\"addButton\"\n slot=\"primaryAction\"\n icon=\"add\"\n label=\"${get('add')}\"\n trailingIcon\n @click=${() => this.handleAddPlugin()}>\n </mwc-button>\n </mwc-dialog>\n `;\n }\n\n static styles = css`\n\n mwc-dialog {\n --mdc-dialog-max-width: 98vw;\n }\n\n mwc-dialog > form {\n display: flex;\n flex-direction: column;\n }\n\n mwc-dialog > form > * {\n display: block;\n margin-top: 16px;\n }\n `\n\n public close(){\n this.dialog.close()\n }\n\n public show(){\n this.dialog.show()\n }\n\n get open(){\n return this.dialog.open\n }\n\n private handleAddPlugin() {\n\n if (\n !(\n this.pluginSrcInput.checkValidity() &&\n this.pluginNameInput.checkValidity() &&\n this.pluginKindList.selected &&\n this.requireDoc &&\n this.positionList.selected\n )\n )\n return;\n\n this.dispatchEvent(\n newAddExternalPluginEvent({\n src: this.pluginSrcInput.value,\n name: this.pluginNameInput.value,\n kind: <PluginKind>(<ListItem>this.pluginKindList.selected).value,\n requireDoc: this.requireDoc.checked,\n position: <MenuPosition>this.positionList.value,\n active: true,\n // this is an added plugin and will be remove by reset either way\n activeByDefault: false,\n })\n );\n\n this.requestUpdate();\n this.dialog.close();\n }\n\n}\n\n\n"]}
@@ -0,0 +1,20 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import type { Dialog } from '@material/mwc-dialog';
3
+ import '@material/mwc-dialog';
4
+ import '@material/mwc-list';
5
+ import type { List } from '@material/mwc-list';
6
+ import { Plugin } from "../../plugin.js";
7
+ export declare class OscdPluginManager extends LitElement {
8
+ /** The plugins to render the layout. */
9
+ plugins: Plugin[];
10
+ root: Dialog;
11
+ pluginList: List;
12
+ render(): TemplateResult;
13
+ static styles: import("lit-element").CSSResult;
14
+ show(): void;
15
+ private generateEditorListItems;
16
+ private generateMenuListItems;
17
+ private generateValidatorListItems;
18
+ private dispatchOpenCustomPluginDialogEvent;
19
+ private renderPluginListItem;
20
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-manager.js","sourceRoot":"","sources":["../../../../src/addons/plugin-manager/plugin-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n html,\n LitElement,\n property,\n query,\n TemplateResult,\n css\n} from 'lit-element';\nimport { get } from 'lit-translate';\n\nimport type { ActionDetail } from '@material/mwc-list';\nimport type { MultiSelectedEvent } from '@material/mwc-list/mwc-list-foundation.js';\nimport type { Dialog } from '@material/mwc-dialog';\nimport '@material/mwc-dialog';\nimport '@material/mwc-list';\nimport type {List} from '@material/mwc-list';\n\nimport {\n newResetPluginsEvent,\n newSetPluginsEvent,\n pluginIcons\n} from '../../open-scd.js';\n\nimport {\n MenuPosition,\n Plugin,\n} from \"../../plugin.js\";\n\n@customElement('oscd-plugin-manager')\nexport class OscdPluginManager extends LitElement {\n\n /** The plugins to render the layout. */\n @property({ type: Array }) plugins: Plugin[] = [];\n @query('#plugin-manager-root') root!: Dialog\n @query('#pluginList') pluginList!: List\n\n render(): TemplateResult {\n return html`\n <mwc-dialog\n stacked\n id=\"plugin-manager-root\"\n heading=\"${get('plugins.heading')}\"\n >\n <mwc-list\n id=\"pluginList\"\n multi\n @selected=${(e: MultiSelectedEvent) => {\n const selectedPlugins = this.pluginList.items\n .filter((item, index) => e.detail.index.has(index))\n // @ts-expect-error: we add plugin to the list item\n .map(item => item.plugin) as Plugin[]\n\n this.dispatchEvent(newSetPluginsEvent(selectedPlugins))\n }}\n >\n <mwc-list-item graphic=\"avatar\" noninteractive>\n <strong>${get(`plugins.editor`)}</strong>\n <mwc-icon slot=\"graphic\" class=\"inverted\">\n ${pluginIcons['editor']}\n </mwc-icon>\n </mwc-list-item>\n\n <li divider role=\"separator\"></li>\n\n ${this.generateEditorListItems()}\n\n <mwc-list-item graphic=\"avatar\" noninteractive>\n <strong>${get(`plugins.menu`)}</strong>\n <mwc-icon slot=\"graphic\" class=\"inverted\">\n <strong>${pluginIcons['menu']}</strong></mwc-icon>\n </mwc-list-item>\n <li divider role=\"separator\"></li>\n\n ${this.generateMenuListItems('top')}\n\n <li divider role=\"separator\" inset></li>\n\n ${this.generateValidatorListItems()}\n\n <li divider role=\"separator\" inset></li>\n\n ${this.generateMenuListItems('middle')}\n\n <li divider role=\"separator\" inset></li>\n\n ${this.generateMenuListItems('bottom')}\n\n </mwc-list>\n <mwc-button\n slot=\"secondaryAction\"\n icon=\"refresh\"\n label=\"${get('reset')}\"\n @click=${async () => {\n this.dispatchEvent(newResetPluginsEvent());\n this.requestUpdate();\n }}\n style=\"--mdc-theme-primary: var(--mdc-theme-error)\"\n >\n </mwc-button>\n <mwc-button\n slot=\"secondaryAction\"\n icon=\"\"\n label=\"${get('close')}\"\n dialogAction=\"close\">\n </mwc-button>\n <mwc-button\n outlined\n trailingIcon\n slot=\"primaryAction\"\n icon=\"library_add\"\n label=\"${get('plugins.add.heading')}&hellip;\"\n @click=${() => this.dispatchOpenCustomPluginDialogEvent()}>\n </mwc-button>\n </mwc-dialog>\n `;\n }\n\n static styles = css`\n mwc-dialog {\n --mdc-dialog-max-width: 98vw;\n }\n `\n\n public show(){\n this.root.show()\n }\n\n\n private generateEditorListItems(): TemplateResult[] {\n return this.plugins\n .filter(p => p.kind === 'editor')\n .map(this.renderPluginListItem)\n }\n\n private generateMenuListItems(position: MenuPosition): TemplateResult[] {\n return this.plugins\n .filter(p => p.kind === 'menu' && p.position === position)\n .map(this.renderPluginListItem)\n }\n\n private generateValidatorListItems(): TemplateResult[] {\n return this.plugins\n .filter(p => p.kind === 'validator')\n .map(this.renderPluginListItem)\n }\n\n private dispatchOpenCustomPluginDialogEvent(): void {\n const event = new CustomEvent('open-plugin-download', {\n bubbles: true,\n composed: true,\n });\n\n this.dispatchEvent(event);\n }\n\n private renderPluginListItem(plugin?: Plugin): TemplateResult {\n if(!plugin){ return html`` }\n\n return html`\n <mwc-check-list-item\n class=\"${plugin.official ? 'official' : 'external'}\"\n value=\"${plugin.src}\"\n .plugin=${plugin}\n ?selected=${plugin.active}\n @request-selected=${(e: CustomEvent<{source: string}>) => {\n if(e.detail.source !== 'interaction'){\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n return false;\n }\n }}\n hasMeta\n left\n >\n <mwc-icon slot=\"meta\">\n ${plugin.icon || pluginIcons[plugin.kind]}\n </mwc-icon>\n ${plugin.name}\n </mwc-check-list-item>\n\n `;\n }\n\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { TemplateResult } from 'lit-element';
2
+ import '@material/mwc-checkbox';
3
+ import '@material/mwc-formfield';
4
+ import '@material/mwc-textfield';
5
+ import { ListBase } from '@material/mwc-list/mwc-list-base';
6
+ import { TextField } from '@material/mwc-textfield';
7
+ /**
8
+ * A mwc-list with mwc-textfield that filters the list items for given or separated terms
9
+ */
10
+ export declare class FilteredList extends ListBase {
11
+ /** search mwc-textfield label property */
12
+ searchFieldLabel?: string;
13
+ /** Whether the check all option (checkbox next to search text field) is activated */
14
+ disableCheckAll: boolean;
15
+ private get existCheckListItem();
16
+ private get isAllSelected();
17
+ private get isSomeSelected();
18
+ searchField: TextField;
19
+ private onCheckAll;
20
+ onFilterInput(): void;
21
+ protected onListItemConnected(e: CustomEvent): void;
22
+ protected update(changedProperties: Map<string | number | symbol, unknown>): void;
23
+ constructor();
24
+ private renderCheckAll;
25
+ render(): TemplateResult;
26
+ static styles: import("lit-element").CSSResult;
27
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtered-list.js","sourceRoot":"","sources":["../../src/filtered-list.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n customElement,\n html,\n property,\n query,\n state,\n TemplateResult,\n unsafeCSS,\n} from 'lit-element';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-checkbox';\nimport '@material/mwc-formfield';\nimport '@material/mwc-textfield';\nimport { CheckListItem } from '@material/mwc-list/mwc-check-list-item';\nimport { List } from '@material/mwc-list';\nimport { ListBase } from '@material/mwc-list/mwc-list-base';\nimport { ListItemBase } from '@material/mwc-list/mwc-list-item-base';\nimport { TextField } from '@material/mwc-textfield';\n\nfunction slotItem(item: Element): Element {\n if (!item.closest('filtered-list') || !item.parentElement) return item;\n if (item.parentElement instanceof FilteredList) return item;\n return slotItem(item.parentElement);\n}\n\nfunction hideFiltered(item: ListItemBase, searchText: string): void {\n const itemInnerText = item.innerText + '\\n';\n const childInnerText = Array.from(item.children)\n .map(child => (<HTMLElement>child).innerText)\n .join('\\n');\n const value = item.value;\n\n const filterTarget: string = (\n itemInnerText +\n childInnerText +\n value\n ).toUpperCase();\n\n const terms: string[] = searchText\n .toUpperCase()\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .trim()\n .split(/\\s+/g);\n\n (terms.length === 1 && terms[0] === '') ||\n terms.every(term => {\n // regexp escape\n const reTerm = new RegExp(\n `*${term}*`.replace(/\\*/g, '.*').replace(/\\?/g, '.{1}'),\n 'i'\n );\n return reTerm.test(filterTarget);\n })\n ? slotItem(item).classList.remove('hidden')\n : slotItem(item).classList.add('hidden');\n}\n\n/**\n * A mwc-list with mwc-textfield that filters the list items for given or separated terms\n */\n@customElement('filtered-list')\nexport class FilteredList extends ListBase {\n /** search mwc-textfield label property */\n @property({ type: String })\n searchFieldLabel?: string;\n /** Whether the check all option (checkbox next to search text field) is activated */\n @property({ type: Boolean })\n disableCheckAll = false;\n\n @state()\n private get existCheckListItem(): boolean {\n return this.items.some(item => item instanceof CheckListItem);\n }\n\n @state()\n private get isAllSelected(): boolean {\n return this.items\n .filter(item => !item.disabled)\n .filter(item => item instanceof CheckListItem)\n .every(checkItem => checkItem.selected);\n }\n\n @state()\n private get isSomeSelected(): boolean {\n return this.items\n .filter(item => !item.disabled)\n .filter(item => item instanceof CheckListItem)\n .some(checkItem => checkItem.selected);\n }\n\n @query('mwc-textfield') searchField!: TextField;\n\n private onCheckAll(): void {\n const select = !this.isAllSelected;\n this.items\n .filter(item => !item.disabled && !item.classList.contains('hidden'))\n .forEach(item => (item.selected = select));\n }\n\n onFilterInput(): void {\n Array.from(\n this.querySelectorAll(\n 'mwc-list-item, mwc-check-list-item, mwc-radio-list-item'\n )\n ).forEach(item =>\n hideFiltered(item as ListItemBase, this.searchField.value)\n );\n }\n\n protected onListItemConnected(e: CustomEvent): void {\n super.onListItemConnected(e);\n this.requestUpdate();\n }\n\n protected update(\n changedProperties: Map<string | number | symbol, unknown>\n ): void {\n super.update(changedProperties);\n // regenerate filtering of text\n this.onFilterInput();\n }\n\n constructor() {\n super();\n this.addEventListener('selected', () => {\n this.requestUpdate();\n });\n }\n\n private renderCheckAll(): TemplateResult {\n return this.existCheckListItem && !this.disableCheckAll\n ? html`<mwc-formfield class=\"checkall\"\n ><mwc-checkbox\n ?indeterminate=${!this.isAllSelected && this.isSomeSelected}\n ?checked=${this.isAllSelected}\n @change=${() => {\n this.onCheckAll();\n }}\n ></mwc-checkbox\n ></mwc-formfield>`\n : html``;\n }\n\n render(): TemplateResult {\n return html`<div id=\"tfcontainer\">\n <abbr title=\"${this.searchFieldLabel ?? get('filter')}\"\n ><mwc-textfield\n label=\"${this.searchFieldLabel ?? ''}\"\n iconTrailing=\"search\"\n outlined\n @input=${() => this.onFilterInput()}\n ></mwc-textfield\n ></abbr>\n ${this.renderCheckAll()}\n </div>\n ${super.render()}`;\n }\n\n static styles = css`\n ${unsafeCSS(List.styles)}\n\n #tfcontainer {\n display: flex;\n flex: auto;\n }\n\n ::slotted(.hidden) {\n display: none;\n }\n\n abbr {\n display: flex;\n flex: auto;\n margin: 8px;\n text-decoration: none;\n border-bottom: none;\n }\n\n mwc-textfield {\n width: 100%;\n --mdc-shape-small: 28px;\n }\n\n mwc-formfield.checkall {\n padding-right: 8px;\n }\n\n .mdc-list {\n padding-inline-start: 0px;\n }\n `;\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import { LitElement, TemplateResult } from 'lit-element';
2
+ import '@material/mwc-icon';
3
+ import '@material/mwc-list';
4
+ import '@material/mwc-list/mwc-list-item';
5
+ import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';
6
+ import './filtered-list.js';
7
+ export type Selection = {
8
+ [name: string]: Selection;
9
+ };
10
+ export type Path = string[];
11
+ export interface Directory {
12
+ path: Path;
13
+ header?: TemplateResult;
14
+ entries: string[];
15
+ }
16
+ export declare class FinderList extends LitElement {
17
+ selection: Selection;
18
+ multi: boolean;
19
+ get depth(): number;
20
+ get paths(): Path[];
21
+ set paths(paths: Path[]);
22
+ get path(): Path;
23
+ set path(path: Path);
24
+ read: (path: Path) => Promise<Directory>;
25
+ loaded: Promise<void>;
26
+ getTitle(path: string[]): string;
27
+ getDisplayString(entry: string, path: string[]): string;
28
+ container: Element;
29
+ private getPaths;
30
+ multiSelect(event: SingleSelectedEvent, path: Path, clicked: string): void;
31
+ singleSelect(event: SingleSelectedEvent, path: Path, clicked: string): void;
32
+ select(event: SingleSelectedEvent, path: Path): Promise<void>;
33
+ renderDirectory(path: Path, entries: string[]): TemplateResult;
34
+ renderColumn(column: number): Promise<TemplateResult>;
35
+ render(): TemplateResult;
36
+ static styles: import("lit-element").CSSResult;
37
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finder-list.js","sourceRoot":"","sources":["../../src/finder-list.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n customElement,\n html,\n LitElement,\n property,\n query,\n TemplateResult,\n} from 'lit-element';\nimport { until } from 'lit-html/directives/until';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-list-item';\nimport { List } from '@material/mwc-list';\nimport { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';\nimport { ListItem } from '@material/mwc-list/mwc-list-item';\n\nimport './filtered-list.js';\nimport { depth } from './foundation.js';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nexport type Selection = { [name: string]: Selection };\n\nexport type Path = string[];\nexport interface Directory {\n path: Path;\n header?: TemplateResult;\n entries: string[];\n}\n\nconst waitingList = html`<div class=\"column\">\n <mwc-list\n ><mwc-list-item noninteractive hasMeta\n >${get('loading')}<mwc-icon slot=\"meta\">pending</mwc-icon></mwc-list-item\n ></mwc-list\n >\n</div>`;\n\n@customElement('finder-list')\nexport class FinderList extends LitElement {\n @property({ type: Object })\n selection: Selection = {};\n\n @property({ type: Boolean })\n multi = false;\n\n @property({ type: Number })\n get depth(): number {\n return depth(this.selection);\n }\n\n @property({ type: Array })\n get paths(): Path[] {\n return this.getPaths();\n }\n set paths(paths: Path[]) {\n const selection: Selection = {};\n for (const path of paths) {\n let i = selection;\n for (const name of path) {\n if (!Object.prototype.hasOwnProperty.call(i, name)) i[name] = {};\n i = i[name];\n }\n }\n this.selection = selection;\n }\n\n @property({ type: Array })\n get path(): Path {\n return this.paths[0] ?? [];\n }\n set path(path: Path) {\n this.paths = [path];\n }\n\n @property({ attribute: false })\n read: (path: Path) => Promise<Directory> = async path => {\n return {\n path,\n header: html`<h2>${'/' + path.join('/')}</h2>`,\n entries: [],\n };\n };\n\n @property({ attribute: false })\n loaded: Promise<void> = Promise.resolve();\n\n getTitle(path: string[]): string {\n return path.join('/');\n }\n\n getDisplayString(entry: string, path: string[]): string {\n return entry;\n }\n\n @query('div')\n container!: Element;\n\n private getPaths(depth?: number): Path[] {\n let paths: Path[] = Object.keys(this.selection).map(key => [key]);\n\n let i = depth ?? this.depth - 1;\n while (i-- > 0) {\n paths = paths.flatMap(path => {\n let dir = this.selection;\n for (const entry of path) dir = dir[entry]; // recursive descent\n const newPaths = Object.keys(dir).map(entry => path.concat(entry));\n return newPaths.length === 0 ? [path] : newPaths;\n });\n }\n\n return depth === undefined\n ? paths\n : paths.filter(path => path.length > depth);\n }\n\n multiSelect(event: SingleSelectedEvent, path: Path, clicked: string): void {\n let dir = this.selection;\n for (const entry of path) dir = dir[entry]; // recursive descent\n\n if (dir && dir[clicked]) delete dir[clicked];\n // deselect if selected\n else dir[clicked] = {}; // select otherwise\n }\n\n singleSelect(event: SingleSelectedEvent, path: Path, clicked: string): void {\n if (this.path[path.length] === clicked) this.path = path;\n // deselect if selected\n else this.path = path.concat(clicked); // select otherwise\n }\n\n async select(event: SingleSelectedEvent, path: Path): Promise<void> {\n const clicked = (<ListItem>(<List>event.target).selected).value;\n\n if (this.multi) this.multiSelect(event, path, clicked);\n else this.singleSelect(event, path, clicked);\n\n this.requestUpdate();\n await this.updateComplete;\n await new Promise(resolve => setTimeout(resolve, 250));\n this.container.scrollLeft = 1000 * this.depth;\n }\n\n renderDirectory(path: Path, entries: string[]): TemplateResult {\n return html`<filtered-list\n @selected=${(e: SingleSelectedEvent) => this.select(e, path)}\n searchFieldLabel=\"${this.getTitle(path)}\"\n >\n ${entries.map(\n entry =>\n html`<mwc-list-item\n value=\"${entry}\"\n ?activated=${this.getPaths(path.length)\n .map(p => JSON.stringify(p))\n .includes(JSON.stringify(path.concat(entry)))}\n >${this.getDisplayString(entry, path)}</mwc-list-item\n >`\n )}\n </filtered-list>`;\n }\n\n async renderColumn(column: number): Promise<TemplateResult> {\n const paths = this.getPaths(column);\n\n const dirs = paths.map(path => this.read(path));\n const lists: TemplateResult[] = [];\n\n for await (const { header, entries, path } of dirs) {\n if (header || entries.length > 0)\n lists.push(\n html`${ifDefined(header)} ${this.renderDirectory(path, entries)}`\n );\n }\n\n if (lists.length === 0) return html``;\n return html`<div class=\"column\">${lists}</div>`;\n }\n\n render(): TemplateResult {\n const columns = new Array(this.depth)\n .fill(0)\n .map((_, index) => this.renderColumn(index));\n this.loaded = Promise.allSettled(columns).then();\n return html`<div class=\"pane\">\n ${columns.map(column => until(column, waitingList))}\n </div>`;\n }\n\n static styles = css`\n div.pane {\n display: flex;\n flex-direction: row;\n overflow: auto;\n }\n\n h2 {\n color: var(--mdc-theme-primary);\n }\n\n section {\n display: flex;\n flex-direction: column;\n width: max-content;\n }\n\n section > mwc-list {\n margin-top: 76px;\n }\n\n a {\n font-weight: 600;\n font-variant: small-caps;\n text-transform: lowercase;\n text-decoration: none;\n color: var(--mdc-theme-primary);\n }\n\n a:link {\n color: var(--mdc-theme-error);\n }\n\n a:visited {\n color: var(--mdc-theme-secondary);\n }\n `;\n}\n"]}
@@ -0,0 +1,79 @@
1
+ import { TemplateResult } from 'lit-element';
2
+ import '@material/mwc-list';
3
+ import '@material/mwc-list/mwc-list-item';
4
+ import '@material/mwc-icon';
5
+ export type DiffType = 'Element' | 'Attribute' | 'Content';
6
+ export type Diff<T> = {
7
+ type: DiffType;
8
+ oldValue: T;
9
+ newValue: null;
10
+ } | {
11
+ type: DiffType;
12
+ oldValue: null;
13
+ newValue: T;
14
+ } | {
15
+ type: DiffType;
16
+ oldValue: T;
17
+ newValue: T;
18
+ };
19
+ /**
20
+ * Type to filter out a difference based on `tagName`.`attributeName`
21
+ *
22
+ * The matcher can be a boolean or a `consumer` that returns a boolean
23
+ */
24
+ export interface DiffFilter<T> {
25
+ [selector: string]: DiffFilterSelector<T>;
26
+ }
27
+ interface DiffFilterSelector<T> {
28
+ full?: DiffFilterConsumer<T>;
29
+ attributes?: {
30
+ [name: string]: DiffFilterConsumer<T>;
31
+ };
32
+ }
33
+ /**
34
+ * Consumer to match if a diff should be filtered out.
35
+ */
36
+ type DiffFilterConsumer<T> = boolean | ((value: T | null) => boolean);
37
+ /**
38
+ * Check if there are any attribute values changed between the two elements.
39
+ *
40
+ * @param elementToBeCompared - The element to check for differences.
41
+ * @param elementToCompareAgainst - The element used to check against.
42
+ */
43
+ export declare function diffSclAttributes(elementToBeCompared: Element, elementToCompareAgainst: Element, filterToIgnore: DiffFilter<Element>, searchElementToBeCompared: Element): [string, Diff<string>][];
44
+ /**
45
+ * Function to retrieve the identity to compare 2 children on the same level.
46
+ * This means we only need to last part of the Identity string to compare the children.
47
+ *
48
+ * @param element - The element to retrieve the identity from.
49
+ */
50
+ export declare function identityForCompare(element: Element): string | number;
51
+ /**
52
+ * Custom method for comparing to check if 2 elements are the same. Because they are on the same level
53
+ * we don't need to compare the full identity, we just compare the part of the Element itself.
54
+ *
55
+ * <b>Remark</b>Private elements are already filtered out, so we don't need to bother them.
56
+ *
57
+ * @param newValue - The new element to compare with the old element.
58
+ * @param oldValue - The old element to which the new element is compared.
59
+ */
60
+ export declare function isSame(newValue: Element, oldValue: Element): boolean;
61
+ /**
62
+ * List of all differences between children elements that both old and new element have.
63
+ * The list contains children both elements have and children that were added or removed
64
+ * from the new element.
65
+ * <b>Remark</b>: Private elements are ignored.
66
+ *
67
+ * @param elementToBeCompared - The element to check for differences.
68
+ * @param elementToCompareAgainst - The element used to check against.
69
+ */
70
+ export declare function diffSclChilds(elementToBeCompared: Element, elementToCompareAgainst: Element, filterToIgnore: DiffFilter<Element>, searchElementToBeCompared: Element, searchElementToCompareAgainst: Element): Diff<Element>[];
71
+ /**
72
+ * Generate HTML (TemplateResult) containing all the differences between the two elements passed.
73
+ * If null is returned there are no differences between the two elements.
74
+ *
75
+ * @param elementToBeCompared - The element to check for differences.
76
+ * @param elementToCompareAgainst - The element used to check against.
77
+ */
78
+ export declare function renderDiff(elementToBeCompared: Element, elementToCompareAgainst: Element, filterToIgnore?: DiffFilter<Element>): TemplateResult | null;
79
+ export {};