@compas-oscd/open-scd 0.34.13 → 0.34.14

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 (142) hide show
  1. package/package.json +1 -1
  2. package/dist/src/WizardDivider.d.ts +0 -8
  3. package/dist/src/WizardDivider.js +0 -37
  4. package/dist/src/WizardDivider.js.map +0 -1
  5. package/dist/src/Wizarding.d.ts +0 -10
  6. package/dist/src/Wizarding.js +0 -38
  7. package/dist/src/Wizarding.js.map +0 -1
  8. package/dist/src/action-icon.d.ts +0 -25
  9. package/dist/src/action-icon.js +0 -220
  10. package/dist/src/action-icon.js.map +0 -1
  11. package/dist/src/action-pane.d.ts +0 -25
  12. package/dist/src/action-pane.js +0 -176
  13. package/dist/src/action-pane.js.map +0 -1
  14. package/dist/src/addons/Editor.d.ts +0 -25
  15. package/dist/src/addons/Editor.js +0 -106
  16. package/dist/src/addons/Editor.js.map +0 -1
  17. package/dist/src/addons/History.d.ts +0 -93
  18. package/dist/src/addons/History.js +0 -491
  19. package/dist/src/addons/History.js.map +0 -1
  20. package/dist/src/addons/Layout.d.ts +0 -96
  21. package/dist/src/addons/Layout.js +0 -619
  22. package/dist/src/addons/Layout.js.map +0 -1
  23. package/dist/src/addons/Settings.d.ts +0 -68
  24. package/dist/src/addons/Settings.js +0 -465
  25. package/dist/src/addons/Settings.js.map +0 -1
  26. package/dist/src/addons/Waiter.d.ts +0 -14
  27. package/dist/src/addons/Waiter.js +0 -45
  28. package/dist/src/addons/Waiter.js.map +0 -1
  29. package/dist/src/addons/Wizards.d.ts +0 -15
  30. package/dist/src/addons/Wizards.js +0 -48
  31. package/dist/src/addons/Wizards.js.map +0 -1
  32. package/dist/src/addons/editor/edit-action-to-v1-converter.d.ts +0 -3
  33. package/dist/src/addons/editor/edit-action-to-v1-converter.js +0 -96
  34. package/dist/src/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  35. package/dist/src/addons/editor/edit-v1-to-v2-converter.d.ts +0 -2
  36. package/dist/src/addons/editor/edit-v1-to-v2-converter.js +0 -37
  37. package/dist/src/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  38. package/dist/src/addons/history/get-log-text.d.ts +0 -5
  39. package/dist/src/addons/history/get-log-text.js +0 -26
  40. package/dist/src/addons/history/get-log-text.js.map +0 -1
  41. package/dist/src/addons/menu-tabs/menu-tabs.d.ts +0 -22
  42. package/dist/src/addons/menu-tabs/menu-tabs.js +0 -74
  43. package/dist/src/addons/menu-tabs/menu-tabs.js.map +0 -1
  44. package/dist/src/addons/plugin-manager/custom-plugin-dialog.d.ts +0 -28
  45. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js +0 -177
  46. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  47. package/dist/src/addons/plugin-manager/plugin-manager.d.ts +0 -20
  48. package/dist/src/addons/plugin-manager/plugin-manager.js +0 -165
  49. package/dist/src/addons/plugin-manager/plugin-manager.js.map +0 -1
  50. package/dist/src/filtered-list.d.ts +0 -27
  51. package/dist/src/filtered-list.js +0 -168
  52. package/dist/src/filtered-list.js.map +0 -1
  53. package/dist/src/finder-list.d.ts +0 -37
  54. package/dist/src/finder-list.js +0 -207
  55. package/dist/src/finder-list.js.map +0 -1
  56. package/dist/src/foundation/compare.d.ts +0 -79
  57. package/dist/src/foundation/compare.js +0 -273
  58. package/dist/src/foundation/compare.js.map +0 -1
  59. package/dist/src/foundation/dai.d.ts +0 -30
  60. package/dist/src/foundation/dai.js +0 -127
  61. package/dist/src/foundation/dai.js.map +0 -1
  62. package/dist/src/foundation/generators.d.ts +0 -13
  63. package/dist/src/foundation/generators.js +0 -67
  64. package/dist/src/foundation/generators.js.map +0 -1
  65. package/dist/src/foundation/ied.d.ts +0 -22
  66. package/dist/src/foundation/ied.js +0 -84
  67. package/dist/src/foundation/ied.js.map +0 -1
  68. package/dist/src/foundation/nsd.d.ts +0 -4
  69. package/dist/src/foundation/nsd.js +0 -13
  70. package/dist/src/foundation/nsd.js.map +0 -1
  71. package/dist/src/foundation/nsdoc.d.ts +0 -14
  72. package/dist/src/foundation/nsdoc.js +0 -180
  73. package/dist/src/foundation/nsdoc.js.map +0 -1
  74. package/dist/src/foundation/scl.d.ts +0 -1
  75. package/dist/src/foundation/scl.js +0 -64
  76. package/dist/src/foundation/scl.js.map +0 -1
  77. package/dist/src/foundation.d.ts +0 -230
  78. package/dist/src/foundation.js +0 -1922
  79. package/dist/src/foundation.js.map +0 -1
  80. package/dist/src/icons/compare.d.ts +0 -3
  81. package/dist/src/icons/compare.js +0 -11
  82. package/dist/src/icons/compare.js.map +0 -1
  83. package/dist/src/icons/icons.d.ts +0 -41
  84. package/dist/src/icons/icons.js +0 -611
  85. package/dist/src/icons/icons.js.map +0 -1
  86. package/dist/src/icons/ied-icons.d.ts +0 -3
  87. package/dist/src/icons/ied-icons.js +0 -11
  88. package/dist/src/icons/ied-icons.js.map +0 -1
  89. package/dist/src/icons/lnode.d.ts +0 -16
  90. package/dist/src/icons/lnode.js +0 -50
  91. package/dist/src/icons/lnode.js.map +0 -1
  92. package/dist/src/open-scd.d.ts +0 -131
  93. package/dist/src/open-scd.js +0 -483
  94. package/dist/src/open-scd.js.map +0 -1
  95. package/dist/src/oscd-filter-button.d.ts +0 -27
  96. package/dist/src/oscd-filter-button.js +0 -89
  97. package/dist/src/oscd-filter-button.js.map +0 -1
  98. package/dist/src/plain-compare-list.d.ts +0 -36
  99. package/dist/src/plain-compare-list.js +0 -132
  100. package/dist/src/plain-compare-list.js.map +0 -1
  101. package/dist/src/plugin-tag.d.ts +0 -6
  102. package/dist/src/plugin-tag.js +0 -23
  103. package/dist/src/plugin-tag.js.map +0 -1
  104. package/dist/src/plugin.d.ts +0 -23
  105. package/dist/src/plugin.events.d.ts +0 -15
  106. package/dist/src/plugin.events.js +0 -12
  107. package/dist/src/plugin.events.js.map +0 -1
  108. package/dist/src/plugin.js +0 -2
  109. package/dist/src/plugin.js.map +0 -1
  110. package/dist/src/plugins.d.ts +0 -3
  111. package/dist/src/plugins.js +0 -256
  112. package/dist/src/plugins.js.map +0 -1
  113. package/dist/src/schemas.d.ts +0 -58
  114. package/dist/src/schemas.js +0 -9325
  115. package/dist/src/schemas.js.map +0 -1
  116. package/dist/src/themes.d.ts +0 -3
  117. package/dist/src/themes.js +0 -122
  118. package/dist/src/themes.js.map +0 -1
  119. package/dist/src/translations/de.d.ts +0 -2
  120. package/dist/src/translations/de.js +0 -954
  121. package/dist/src/translations/de.js.map +0 -1
  122. package/dist/src/translations/en.d.ts +0 -963
  123. package/dist/src/translations/en.js +0 -950
  124. package/dist/src/translations/en.js.map +0 -1
  125. package/dist/src/translations/loader.d.ts +0 -12
  126. package/dist/src/translations/loader.js +0 -10
  127. package/dist/src/translations/loader.js.map +0 -1
  128. package/dist/src/wizard-checkbox.d.ts +0 -37
  129. package/dist/src/wizard-checkbox.js +0 -152
  130. package/dist/src/wizard-checkbox.js.map +0 -1
  131. package/dist/src/wizard-dialog.d.ts +0 -45
  132. package/dist/src/wizard-dialog.js +0 -374
  133. package/dist/src/wizard-dialog.js.map +0 -1
  134. package/dist/src/wizard-select.d.ts +0 -31
  135. package/dist/src/wizard-select.js +0 -115
  136. package/dist/src/wizard-select.js.map +0 -1
  137. package/dist/src/wizard-textfield.d.ts +0 -50
  138. package/dist/src/wizard-textfield.js +0 -191
  139. package/dist/src/wizard-textfield.js.map +0 -1
  140. package/dist/src/wizards.d.ts +0 -23
  141. package/dist/src/wizards.js +0 -196
  142. package/dist/src/wizards.js.map +0 -1
@@ -1,191 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { customElement, html, state, property, query, } from 'lit-element';
3
- import { get } from 'lit-translate';
4
- import '@material/mwc-icon-button';
5
- import '@material/mwc-list/mwc-list-item';
6
- import '@material/mwc-menu';
7
- import '@material/mwc-switch';
8
- import { TextField } from '@material/mwc-textfield';
9
- /** A potentially `nullable` `TextField` that allows for selection of an SI
10
- * `multiplier` if an SI `unit` is given.
11
- *
12
- * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
13
- let WizardTextField = class WizardTextField extends TextField {
14
- get multiplier() {
15
- if (this.unit == '')
16
- return null;
17
- return (this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null);
18
- }
19
- set multiplier(value) {
20
- const index = this.multipliers.indexOf(value);
21
- if (index >= 0)
22
- this.multiplierIndex = index;
23
- this.suffix = (this.multiplier ?? '') + this.unit;
24
- }
25
- get null() {
26
- return this.nullable && this.isNull;
27
- }
28
- set null(value) {
29
- if (!this.nullable || value === this.isNull)
30
- return;
31
- this.isNull = value;
32
- if (this.null)
33
- this.disable();
34
- else
35
- this.enable();
36
- }
37
- /** Replacement for `value`, can only be `null` if [[`nullable`]]. */
38
- get maybeValue() {
39
- return this.null ? null : this.value;
40
- }
41
- set maybeValue(value) {
42
- if (value === null)
43
- this.null = true;
44
- else {
45
- this.null = false;
46
- this.value = value;
47
- }
48
- }
49
- selectMultiplier(se) {
50
- this.multiplier = this.multipliers[se.detail.index];
51
- }
52
- enable() {
53
- if (this.nulled === null)
54
- return;
55
- this.value = this.nulled;
56
- this.nulled = null;
57
- this.helperPersistent = false;
58
- this.disabled = false;
59
- }
60
- disable() {
61
- if (this.nulled !== null)
62
- return;
63
- this.nulled = this.value;
64
- this.value = this.defaultValue;
65
- this.helperPersistent = true;
66
- this.disabled = true;
67
- }
68
- async firstUpdated() {
69
- await super.firstUpdated();
70
- if (this.multiplierMenu)
71
- this.multiplierMenu.anchor =
72
- this.multiplierButton ?? null;
73
- }
74
- checkValidity() {
75
- if (this.reservedValues &&
76
- this.reservedValues.some(array => array === this.value)) {
77
- this.setCustomValidity(get('textfield.unique'));
78
- return false;
79
- }
80
- this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM
81
- return super.checkValidity();
82
- }
83
- constructor() {
84
- super();
85
- /** Whether [[`maybeValue`]] may be `null` */
86
- this.nullable = false;
87
- /** Selectable SI multipliers for a non-empty [[`unit`]]. */
88
- this.multipliers = [null, ''];
89
- this.multiplierIndex = 0;
90
- /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].
91
- * Overrides `suffix`. */
92
- this.unit = '';
93
- this.isNull = false;
94
- /** The default `value` displayed if [[`maybeValue`]] is `null`. */
95
- this.defaultValue = '';
96
- /** Additional values that cause validation to fail. */
97
- this.reservedValues = [];
98
- // FIXME: workaround to allow disable of the whole component - need basic refactor
99
- this.disabledSwitch = false;
100
- this.nulled = null;
101
- this.disabledSwitch = this.hasAttribute('disabled');
102
- }
103
- renderUnitSelector() {
104
- if (this.multipliers.length && this.unit)
105
- return html `<div style="position:relative;">
106
- <mwc-icon-button
107
- style="margin:5px;"
108
- icon="more"
109
- ?disabled=${this.null || this.disabledSwitch}
110
- @click=${() => this.multiplierMenu?.show()}
111
- ></mwc-icon-button>
112
- <mwc-menu
113
- @selected=${this.selectMultiplier}
114
- fixed
115
- .anchor=${this.multiplierButton ?? null}
116
- >${this.renderMulplierList()}</mwc-menu
117
- >
118
- </div>`;
119
- else
120
- return html ``;
121
- }
122
- renderMulplierList() {
123
- return html `${this.multipliers.map(multiplier => html `<mwc-list-item ?selected=${multiplier === this.multiplier}
124
- >${multiplier === null
125
- ? get('textfield.noMultiplier')
126
- : multiplier}</mwc-list-item
127
- >`)}`;
128
- }
129
- renderSwitch() {
130
- if (this.nullable) {
131
- return html `<mwc-switch
132
- style="margin-left: 12px;"
133
- ?checked=${!this.null}
134
- ?disabled=${this.disabledSwitch}
135
- @change=${() => {
136
- this.null = !this.nullSwitch.checked;
137
- }}
138
- ></mwc-switch>`;
139
- }
140
- return html ``;
141
- }
142
- render() {
143
- return html `
144
- <div style="display: flex; flex-direction: row;">
145
- <div style="flex: auto;">${super.render()}</div>
146
- ${this.renderUnitSelector()}
147
- <div style="display: flex; align-items: center; height: 56px;">
148
- ${this.renderSwitch()}
149
- </div>
150
- </div>
151
- `;
152
- }
153
- };
154
- __decorate([
155
- property({ type: Boolean })
156
- ], WizardTextField.prototype, "nullable", void 0);
157
- __decorate([
158
- property({ type: Array })
159
- ], WizardTextField.prototype, "multipliers", void 0);
160
- __decorate([
161
- property({ type: String })
162
- ], WizardTextField.prototype, "multiplier", null);
163
- __decorate([
164
- property({ type: String })
165
- ], WizardTextField.prototype, "unit", void 0);
166
- __decorate([
167
- state()
168
- ], WizardTextField.prototype, "null", null);
169
- __decorate([
170
- property({ type: String })
171
- ], WizardTextField.prototype, "maybeValue", null);
172
- __decorate([
173
- property({ type: String })
174
- ], WizardTextField.prototype, "defaultValue", void 0);
175
- __decorate([
176
- property({ type: Array })
177
- ], WizardTextField.prototype, "reservedValues", void 0);
178
- __decorate([
179
- query('mwc-switch')
180
- ], WizardTextField.prototype, "nullSwitch", void 0);
181
- __decorate([
182
- query('mwc-menu')
183
- ], WizardTextField.prototype, "multiplierMenu", void 0);
184
- __decorate([
185
- query('mwc-icon-button')
186
- ], WizardTextField.prototype, "multiplierButton", void 0);
187
- WizardTextField = __decorate([
188
- customElement('wizard-textfield')
189
- ], WizardTextField);
190
- export { WizardTextField };
191
- //# sourceMappingURL=wizard-textfield.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard-textfield.js","sourceRoot":"","sources":["../../src/wizard-textfield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n} from 'lit-element';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon-button';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-menu';\nimport '@material/mwc-switch';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { Menu } from '@material/mwc-menu';\nimport { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';\nimport { Switch } from '@material/mwc-switch';\nimport { TextField } from '@material/mwc-textfield';\n\n/** A potentially `nullable` `TextField` that allows for selection of an SI\n * `multiplier` if an SI `unit` is given.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-textfield')\nexport class WizardTextField extends TextField {\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n /** Selectable SI multipliers for a non-empty [[`unit`]]. */\n @property({ type: Array })\n multipliers = [null, ''];\n private multiplierIndex = 0;\n @property({ type: String })\n get multiplier(): string | null {\n if (this.unit == '') return null;\n return (\n this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null\n );\n }\n set multiplier(value: string | null) {\n const index = this.multipliers.indexOf(value);\n if (index >= 0) this.multiplierIndex = index;\n this.suffix = (this.multiplier ?? '') + this.unit;\n }\n /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].\n * Overrides `suffix`. */\n @property({ type: String })\n unit = '';\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-switch') nullSwitch?: Switch;\n @query('mwc-menu') multiplierMenu?: Menu;\n @query('mwc-icon-button') multiplierButton?: IconButton;\n\n private nulled: string | null = null;\n\n private selectMultiplier(se: SingleSelectedEvent): void {\n this.multiplier = this.multipliers[se.detail.index];\n }\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.helperPersistent = false;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.helperPersistent = true;\n this.disabled = true;\n }\n\n async firstUpdated(): Promise<void> {\n await super.firstUpdated();\n if (this.multiplierMenu)\n this.multiplierMenu.anchor =\n (this.multiplierButton as HTMLElement) ?? null;\n }\n\n checkValidity(): boolean {\n if (\n this.reservedValues &&\n this.reservedValues.some(array => array === this.value)\n ) {\n this.setCustomValidity(get('textfield.unique'));\n return false;\n }\n this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM\n return super.checkValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderUnitSelector(): TemplateResult {\n if (this.multipliers.length && this.unit)\n return html`<div style=\"position:relative;\">\n <mwc-icon-button\n style=\"margin:5px;\"\n icon=\"more\"\n ?disabled=${this.null || this.disabledSwitch}\n @click=${() => this.multiplierMenu?.show()}\n ></mwc-icon-button>\n <mwc-menu\n @selected=${this.selectMultiplier}\n fixed\n .anchor=${this.multiplierButton ?? null}\n >${this.renderMulplierList()}</mwc-menu\n >\n </div>`;\n else return html``;\n }\n\n renderMulplierList(): TemplateResult {\n return html`${this.multipliers.map(\n multiplier =>\n html`<mwc-list-item ?selected=${multiplier === this.multiplier}\n >${multiplier === null\n ? get('textfield.noMultiplier')\n : multiplier}</mwc-list-item\n >`\n )}`;\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <div style=\"flex: auto;\">${super.render()}</div>\n ${this.renderUnitSelector()}\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1,23 +0,0 @@
1
- import '@material/mwc-icon';
2
- import '@material/mwc-list';
3
- import '@material/mwc-list/mwc-check-list-item';
4
- import '@material/mwc-list/mwc-list-item';
5
- import { Wizard } from './foundation.js';
6
- interface MergeOptions {
7
- title?: string;
8
- selected?: (diff: Diff<Element | string>) => boolean;
9
- disabled?: (diff: Diff<Element | string>) => boolean;
10
- auto?: (sink: Element, source: Element) => boolean;
11
- }
12
- export type Diff<T> = {
13
- ours: T;
14
- theirs: null;
15
- } | {
16
- ours: null;
17
- theirs: T;
18
- } | {
19
- ours: T;
20
- theirs: T;
21
- };
22
- export declare function mergeWizard(sink: Element, source: Element, options?: MergeOptions): Wizard;
23
- export {};
@@ -1,196 +0,0 @@
1
- import { html } from 'lit-element';
2
- import { repeat } from 'lit-html/directives/repeat';
3
- import { get } from 'lit-translate';
4
- import '@material/mwc-icon';
5
- import '@material/mwc-list';
6
- import '@material/mwc-list/mwc-check-list-item';
7
- import '@material/mwc-list/mwc-list-item';
8
- import { identity, isEqual, isSame, newWizardEvent, } from './foundation.js';
9
- function describe(element) {
10
- const id = identity(element);
11
- return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');
12
- }
13
- function mergeWizardAction(attrDiffs, childDiffs, sink, source, options) {
14
- return (_, wizard) => {
15
- const actions = [];
16
- const checkList = wizard.shadowRoot.querySelector('mwc-list');
17
- const selectedAttrDiffs = checkList.selected
18
- .filter(item => item.classList.contains('attr'))
19
- .map(item => attrDiffs[item.value]);
20
- const newSink = sink.cloneNode(false);
21
- const parent = selectedAttrDiffs.length ? newSink : sink;
22
- if (selectedAttrDiffs.length) {
23
- if (sink.childElementCount === 0)
24
- newSink.textContent = sink.textContent;
25
- for (const [name, diff] of selectedAttrDiffs)
26
- if (name === 'value') {
27
- newSink.textContent = diff.theirs;
28
- }
29
- else if (diff.theirs === null)
30
- newSink.removeAttribute(name);
31
- else
32
- newSink.setAttribute(name, diff.theirs);
33
- actions.push({ old: { element: sink }, new: { element: newSink } });
34
- }
35
- let acted = false;
36
- const selectedChildDiffs = checkList.selected
37
- .filter(item => item.classList.contains('child'))
38
- .map(item => childDiffs[item.value]);
39
- if (selectedChildDiffs.length) {
40
- for (const diff of selectedChildDiffs)
41
- if (!diff.ours)
42
- actions.push({
43
- new: { parent, element: diff.theirs },
44
- });
45
- else if (!diff.theirs)
46
- actions.push({
47
- old: {
48
- parent,
49
- element: diff.ours,
50
- reference: diff.ours.nextSibling,
51
- },
52
- });
53
- else {
54
- acted = true;
55
- wizard.dispatchEvent(newWizardEvent(mergeWizard(diff.ours, diff.theirs, {
56
- ...options,
57
- title: undefined,
58
- })));
59
- }
60
- }
61
- if (actions.length === 0 && !acted)
62
- wizard.dispatchEvent(newWizardEvent());
63
- return [
64
- {
65
- actions,
66
- title: get('merge.log', {
67
- sink: describe(sink),
68
- source: describe(source),
69
- tag: sink.tagName,
70
- }),
71
- },
72
- ];
73
- };
74
- }
75
- export function mergeWizard(sink, source, options) {
76
- const attrDiffs = [];
77
- const ourText = sink.textContent ?? '';
78
- const theirText = source.textContent ?? '';
79
- if (sink.childElementCount === 0 &&
80
- source.childElementCount === 0 &&
81
- theirText !== ourText)
82
- attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);
83
- const attributeNames = new Set(source.getAttributeNames().concat(sink.getAttributeNames()));
84
- for (const name of attributeNames)
85
- if (source.getAttribute(name) !== sink.getAttribute(name))
86
- attrDiffs.push([
87
- name,
88
- {
89
- theirs: source.getAttribute(name),
90
- ours: sink.getAttribute(name),
91
- },
92
- ]);
93
- const childDiffs = [];
94
- const ourChildren = Array.from(sink.children);
95
- const theirChildren = Array.from(source.children);
96
- theirChildren.forEach(theirs => {
97
- const twinIndex = ourChildren.findIndex(ourChild => isSame(theirs, ourChild));
98
- const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;
99
- if (ours)
100
- ourChildren.splice(twinIndex, 1);
101
- if (ours && isEqual(theirs, ours))
102
- return;
103
- if (!ours || !isEqual(theirs, ours))
104
- childDiffs.push({ theirs, ours });
105
- });
106
- ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));
107
- return [
108
- {
109
- title: options?.title ??
110
- get('merge.defaultTitle', {
111
- sink: describe(sink),
112
- source: describe(source),
113
- tag: sink.tagName,
114
- }),
115
- primary: {
116
- label: get('merge.title'),
117
- icon: 'merge_type',
118
- action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),
119
- auto: options?.auto?.(sink, source) ?? false,
120
- },
121
- content: [
122
- html `
123
- <mwc-list multi>
124
- ${repeat(attrDiffs, e => e, ([name, diff], index) => html `<mwc-check-list-item
125
- value=${index}
126
- class="attr"
127
- twoline
128
- left
129
- hasMeta
130
- .selected=${options?.selected?.(diff) ?? false}
131
- .disabled=${options?.disabled?.(diff) ?? false}
132
- style="--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours
133
- ? diff.theirs
134
- ? 'secondary'
135
- : 'error'
136
- : 'primary'});"
137
- >
138
- <span>${name}</span>
139
- <span slot="secondary"
140
- >${diff.ours ?? ''}
141
- ${diff.ours && diff.theirs ? html `&cularr;` : ' '}
142
- ${diff.theirs ?? ''}</span
143
- >
144
- <mwc-icon slot="meta"
145
- >${diff.ours
146
- ? diff.theirs
147
- ? 'edit'
148
- : 'delete'
149
- : 'add'}</mwc-icon
150
- >
151
- </mwc-check-list-item>`)}
152
- ${childDiffs.length
153
- ? html `<mwc-list-item noninteractive
154
- >${get('merge.children')}</mwc-list-item
155
- >
156
- <li padded divider role="separator"></li>`
157
- : ''}
158
- ${repeat(childDiffs, e => e, (diff, index) => html `<mwc-check-list-item
159
- value=${index}
160
- class="child"
161
- twoline
162
- left
163
- hasMeta
164
- .selected=${options?.selected?.(diff) ?? false}
165
- .disabled=${options?.disabled?.(diff) ?? false}
166
- style="--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours
167
- ? diff.theirs
168
- ? 'secondary'
169
- : 'error'
170
- : 'primary'});"
171
- >
172
- <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>
173
- <span slot="secondary"
174
- >${diff.ours ? describe(diff.ours) : ''}
175
- ${diff.ours &&
176
- diff.theirs &&
177
- describe(diff.ours) + describe(diff.theirs)
178
- ? html `&cularr;`
179
- : ' '}
180
- ${diff.theirs ? describe(diff.theirs) : ''}</span
181
- >
182
- <mwc-icon slot="meta"
183
- >${diff.ours
184
- ? diff.theirs
185
- ? 'merge_type'
186
- : 'delete'
187
- : 'add'}</mwc-icon
188
- >
189
- </mwc-check-list-item>`)}
190
- </mwc-list>
191
- `,
192
- ],
193
- },
194
- ];
195
- }
196
- //# sourceMappingURL=wizards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizards.js","sourceRoot":"","sources":["../../src/wizards.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-check-list-item';\nimport '@material/mwc-list/mwc-list-item';\nimport { ListItem } from '@material/mwc-list/mwc-list-item';\n\nimport {\n identity,\n isEqual,\n isSame,\n newWizardEvent,\n Wizard,\n WizardActor,\n} from './foundation.js';\nimport { EditorAction, SimpleAction } from '@openscd/core/foundation/deprecated/editor.js';\ninterface MergeOptions {\n title?: string;\n selected?: (diff: Diff<Element | string>) => boolean;\n disabled?: (diff: Diff<Element | string>) => boolean;\n auto?: (sink: Element, source: Element) => boolean;\n}\n\nexport type Diff<T> =\n | { ours: T; theirs: null }\n | { ours: null; theirs: T }\n | { ours: T; theirs: T };\n\nfunction describe(element: Element): string {\n const id = identity(element);\n\n return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');\n}\n\nfunction mergeWizardAction(\n attrDiffs: [string, Diff<string>][],\n childDiffs: Diff<Element>[],\n sink: Element,\n source: Element,\n options?: MergeOptions\n): WizardActor {\n return (_, wizard: Element): EditorAction[] => {\n const actions: SimpleAction[] = [];\n const checkList = wizard.shadowRoot!.querySelector('mwc-list')!;\n\n const selectedAttrDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('attr'))\n .map(item => attrDiffs[item.value as unknown as number]);\n\n const newSink = <Element>sink.cloneNode(false);\n const parent = selectedAttrDiffs.length ? newSink : sink;\n if (selectedAttrDiffs.length) {\n if (sink.childElementCount === 0) newSink.textContent = sink.textContent;\n for (const [name, diff] of selectedAttrDiffs)\n if (name === 'value') {\n newSink.textContent = diff.theirs;\n } else if (diff.theirs === null) newSink.removeAttribute(name);\n else newSink.setAttribute(name, diff.theirs);\n actions.push({ old: { element: sink }, new: { element: newSink } });\n }\n\n let acted = false;\n\n const selectedChildDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('child'))\n .map(item => childDiffs[item.value as unknown as number]);\n if (selectedChildDiffs.length) {\n for (const diff of selectedChildDiffs)\n if (!diff.ours)\n actions.push({\n new: { parent, element: diff.theirs },\n });\n else if (!diff.theirs)\n actions.push({\n old: {\n parent,\n element: diff.ours,\n reference: diff.ours.nextSibling,\n },\n });\n else {\n acted = true;\n wizard.dispatchEvent(\n newWizardEvent(\n mergeWizard(diff.ours, diff.theirs, {\n ...options,\n title: undefined,\n })\n )\n );\n }\n }\n\n if (actions.length === 0 && !acted) wizard.dispatchEvent(newWizardEvent());\n\n return [\n {\n actions,\n title: get('merge.log', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n },\n ];\n };\n}\n\nexport function mergeWizard(\n sink: Element,\n source: Element,\n options?: MergeOptions\n): Wizard {\n const attrDiffs: [string, Diff<string>][] = [];\n const ourText = sink.textContent ?? '';\n const theirText = source.textContent ?? '';\n\n if (\n sink.childElementCount === 0 &&\n source.childElementCount === 0 &&\n theirText !== ourText\n )\n attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);\n\n const attributeNames = new Set(\n source.getAttributeNames().concat(sink.getAttributeNames())\n );\n\n for (const name of attributeNames)\n if (source.getAttribute(name) !== sink.getAttribute(name))\n attrDiffs.push([\n name,\n <Diff<string>>{\n theirs: source.getAttribute(name),\n ours: sink.getAttribute(name),\n },\n ]);\n\n const childDiffs: Diff<Element>[] = [];\n const ourChildren = Array.from(sink.children);\n const theirChildren = Array.from(source.children);\n\n theirChildren.forEach(theirs => {\n const twinIndex = ourChildren.findIndex(ourChild =>\n isSame(theirs, ourChild)\n );\n const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;\n\n if (ours) ourChildren.splice(twinIndex, 1);\n if (ours && isEqual(theirs, ours)) return;\n\n if (!ours || !isEqual(theirs, ours)) childDiffs.push({ theirs, ours });\n });\n\n ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));\n\n return [\n {\n title:\n options?.title ??\n get('merge.defaultTitle', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n primary: {\n label: get('merge.title'),\n icon: 'merge_type',\n action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),\n auto: options?.auto?.(sink, source) ?? false,\n },\n content: [\n html`\n <mwc-list multi>\n ${repeat(\n attrDiffs,\n e => e,\n ([name, diff], index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"attr\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${name}</span>\n <span slot=\"secondary\"\n >${diff.ours ?? ''}\n ${diff.ours && diff.theirs ? html`&cularr;` : ' '}\n ${diff.theirs ?? ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'edit'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n ${childDiffs.length\n ? html`<mwc-list-item noninteractive\n >${get('merge.children')}</mwc-list-item\n >\n <li padded divider role=\"separator\"></li>`\n : ''}\n ${repeat(\n childDiffs,\n e => e,\n (diff, index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"child\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>\n <span slot=\"secondary\"\n >${diff.ours ? describe(diff.ours) : ''}\n ${diff.ours &&\n diff.theirs &&\n describe(diff.ours) + describe(diff.theirs)\n ? html`&cularr;`\n : ' '}\n ${diff.theirs ? describe(diff.theirs) : ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'merge_type'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n </mwc-list>\n `,\n ],\n },\n ];\n}\n"]}