@compas-oscd/open-scd 0.34.5 → 0.34.7
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.
- package/dist/WizardDivider.d.ts +8 -0
- package/dist/WizardDivider.js +37 -0
- package/dist/WizardDivider.js.map +1 -0
- package/dist/Wizarding.d.ts +10 -0
- package/dist/Wizarding.js +38 -0
- package/dist/Wizarding.js.map +1 -0
- package/dist/action-icon.d.ts +25 -0
- package/dist/action-icon.js +220 -0
- package/dist/action-icon.js.map +1 -0
- package/dist/action-pane.d.ts +25 -0
- package/dist/action-pane.js +176 -0
- package/dist/action-pane.js.map +1 -0
- package/dist/addons/Editor.d.ts +25 -0
- package/dist/addons/Editor.js +106 -0
- package/dist/addons/Editor.js.map +1 -0
- package/dist/addons/History.d.ts +93 -0
- package/dist/addons/History.js +491 -0
- package/dist/addons/History.js.map +1 -0
- package/dist/addons/Layout.d.ts +96 -0
- package/dist/addons/Layout.js +619 -0
- package/dist/addons/Layout.js.map +1 -0
- package/dist/addons/Settings.d.ts +68 -0
- package/dist/addons/Settings.js +465 -0
- package/dist/addons/Settings.js.map +1 -0
- package/dist/addons/Waiter.d.ts +14 -0
- package/dist/addons/Waiter.js +45 -0
- package/dist/addons/Waiter.js.map +1 -0
- package/dist/addons/Wizards.d.ts +15 -0
- package/dist/addons/Wizards.js +48 -0
- package/dist/addons/Wizards.js.map +1 -0
- package/dist/addons/editor/edit-action-to-v1-converter.d.ts +3 -0
- package/dist/addons/editor/edit-action-to-v1-converter.js +96 -0
- package/dist/addons/editor/edit-action-to-v1-converter.js.map +1 -0
- package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +2 -0
- package/dist/addons/editor/edit-v1-to-v2-converter.js +37 -0
- package/dist/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
- package/dist/addons/history/get-log-text.d.ts +5 -0
- package/dist/addons/history/get-log-text.js +26 -0
- package/dist/addons/history/get-log-text.js.map +1 -0
- package/dist/addons/menu-tabs/menu-tabs.d.ts +22 -0
- package/dist/addons/menu-tabs/menu-tabs.js +74 -0
- package/dist/addons/menu-tabs/menu-tabs.js.map +1 -0
- package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -0
- package/dist/addons/plugin-manager/custom-plugin-dialog.js +177 -0
- package/dist/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
- package/dist/addons/plugin-manager/plugin-manager.d.ts +20 -0
- package/dist/addons/plugin-manager/plugin-manager.js +165 -0
- package/dist/addons/plugin-manager/plugin-manager.js.map +1 -0
- package/dist/filtered-list.d.ts +27 -0
- package/dist/filtered-list.js +168 -0
- package/dist/filtered-list.js.map +1 -0
- package/dist/finder-list.d.ts +37 -0
- package/dist/finder-list.js +207 -0
- package/dist/finder-list.js.map +1 -0
- package/dist/foundation/compare.d.ts +79 -0
- package/dist/foundation/compare.js +273 -0
- package/dist/foundation/compare.js.map +1 -0
- package/dist/foundation/dai.d.ts +30 -0
- package/dist/foundation/dai.js +127 -0
- package/dist/foundation/dai.js.map +1 -0
- package/dist/foundation/generators.d.ts +13 -0
- package/dist/foundation/generators.js +67 -0
- package/dist/foundation/generators.js.map +1 -0
- package/dist/foundation/ied.d.ts +22 -0
- package/dist/foundation/ied.js +84 -0
- package/dist/foundation/ied.js.map +1 -0
- package/dist/foundation/nsd.d.ts +4 -0
- package/dist/foundation/nsd.js +13 -0
- package/dist/foundation/nsd.js.map +1 -0
- package/dist/foundation/nsdoc.d.ts +14 -0
- package/dist/foundation/nsdoc.js +180 -0
- package/dist/foundation/nsdoc.js.map +1 -0
- package/dist/foundation/scl.d.ts +1 -0
- package/dist/foundation/scl.js +64 -0
- package/dist/foundation/scl.js.map +1 -0
- package/dist/foundation.d.ts +230 -0
- package/dist/foundation.js +1922 -0
- package/dist/foundation.js.map +1 -0
- package/dist/icons/compare.d.ts +3 -0
- package/dist/icons/compare.js +11 -0
- package/dist/icons/compare.js.map +1 -0
- package/dist/icons/icons.d.ts +41 -0
- package/dist/icons/icons.js +611 -0
- package/dist/icons/icons.js.map +1 -0
- package/dist/icons/ied-icons.d.ts +3 -0
- package/dist/icons/ied-icons.js +11 -0
- package/dist/icons/ied-icons.js.map +1 -0
- package/dist/icons/lnode.d.ts +16 -0
- package/dist/icons/lnode.js +50 -0
- package/dist/icons/lnode.js.map +1 -0
- package/dist/open-scd.d.ts +131 -0
- package/dist/open-scd.js +483 -0
- package/dist/open-scd.js.map +1 -0
- package/dist/oscd-filter-button.d.ts +27 -0
- package/dist/oscd-filter-button.js +89 -0
- package/dist/oscd-filter-button.js.map +1 -0
- package/dist/plain-compare-list.d.ts +36 -0
- package/dist/plain-compare-list.js +132 -0
- package/dist/plain-compare-list.js.map +1 -0
- package/dist/plugin-tag.d.ts +6 -0
- package/dist/plugin-tag.js +23 -0
- package/dist/plugin-tag.js.map +1 -0
- package/dist/plugin.d.ts +23 -0
- package/dist/plugin.events.d.ts +15 -0
- package/dist/plugin.events.js +12 -0
- package/dist/plugin.events.js.map +1 -0
- package/dist/plugin.js +2 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins.d.ts +3 -0
- package/dist/plugins.js +256 -0
- package/dist/plugins.js.map +1 -0
- package/dist/schemas.d.ts +58 -0
- package/dist/schemas.js +9325 -0
- package/dist/schemas.js.map +1 -0
- package/dist/themes.d.ts +3 -0
- package/dist/themes.js +122 -0
- package/dist/themes.js.map +1 -0
- package/dist/translations/de.d.ts +2 -0
- package/dist/translations/de.js +954 -0
- package/dist/translations/de.js.map +1 -0
- package/dist/translations/en.d.ts +963 -0
- package/dist/translations/en.js +950 -0
- package/dist/translations/en.js.map +1 -0
- package/dist/translations/loader.d.ts +12 -0
- package/dist/translations/loader.js +10 -0
- package/dist/translations/loader.js.map +1 -0
- package/dist/wizard-checkbox.d.ts +37 -0
- package/dist/wizard-checkbox.js +152 -0
- package/dist/wizard-checkbox.js.map +1 -0
- package/dist/wizard-dialog.d.ts +45 -0
- package/dist/wizard-dialog.js +374 -0
- package/dist/wizard-dialog.js.map +1 -0
- package/dist/wizard-select.d.ts +31 -0
- package/dist/wizard-select.js +115 -0
- package/dist/wizard-select.js.map +1 -0
- package/dist/wizard-textfield.d.ts +50 -0
- package/dist/wizard-textfield.js +191 -0
- package/dist/wizard-textfield.js.map +1 -0
- package/dist/wizards.d.ts +23 -0
- package/dist/wizards.js +196 -0
- package/dist/wizards.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement, html, LitElement, query, css, } from 'lit-element';
|
|
3
|
+
import { get } from 'lit-translate';
|
|
4
|
+
import { newAddExternalPluginEvent, pluginIcons } from '../../open-scd.js';
|
|
5
|
+
import { menuPosition } from "../../plugin.js";
|
|
6
|
+
import '@material/mwc-dialog';
|
|
7
|
+
import '@material/mwc-drawer';
|
|
8
|
+
import '@material/mwc-list';
|
|
9
|
+
import '@material/mwc-select';
|
|
10
|
+
import '@material/mwc-switch';
|
|
11
|
+
import '@material/mwc-textfield';
|
|
12
|
+
let OscdCustomPluginDialog = class OscdCustomPluginDialog extends LitElement {
|
|
13
|
+
render() {
|
|
14
|
+
return html `
|
|
15
|
+
<mwc-dialog id="dialog" heading="${get('plugins.add.heading')}">
|
|
16
|
+
<div style="display: flex; flex-direction: column; row-gap: 8px;">
|
|
17
|
+
<p style="color:var(--mdc-theme-error);">
|
|
18
|
+
${get('plugins.add.warning')}
|
|
19
|
+
</p>
|
|
20
|
+
<mwc-textfield
|
|
21
|
+
label="${get('plugins.add.name')}"
|
|
22
|
+
helper="${get('plugins.add.nameHelper')}"
|
|
23
|
+
required
|
|
24
|
+
id="pluginNameInput"
|
|
25
|
+
></mwc-textfield>
|
|
26
|
+
<mwc-list id="pluginKindList">
|
|
27
|
+
<mwc-radio-list-item
|
|
28
|
+
id="editor"
|
|
29
|
+
value="editor"
|
|
30
|
+
hasMeta
|
|
31
|
+
selected
|
|
32
|
+
left
|
|
33
|
+
>
|
|
34
|
+
${get('plugins.editor')}
|
|
35
|
+
<mwc-icon slot="meta">
|
|
36
|
+
${pluginIcons['editor']}
|
|
37
|
+
</mwc-icon>
|
|
38
|
+
</mwc-radio-list-item>
|
|
39
|
+
<mwc-radio-list-item value="menu" hasMeta left>
|
|
40
|
+
${get('plugins.menu')}
|
|
41
|
+
<mwc-icon slot="meta">
|
|
42
|
+
${pluginIcons['menu']}
|
|
43
|
+
</mwc-icon>
|
|
44
|
+
</mwc-radio-list-item>
|
|
45
|
+
<div id="menudetails">
|
|
46
|
+
<mwc-formfield
|
|
47
|
+
id="enabledefault"
|
|
48
|
+
label="${get('plugins.requireDoc')}"
|
|
49
|
+
>
|
|
50
|
+
<mwc-switch id="requireDoc" checked></mwc-switch>
|
|
51
|
+
</mwc-formfield>
|
|
52
|
+
<mwc-select id="positionList" value="middle" fixedpositionList>
|
|
53
|
+
${Object.values(menuPosition).map(menutype => html `<mwc-list-item value="${menutype}"
|
|
54
|
+
>${get('plugins.' + menutype)}</mwc-list-item
|
|
55
|
+
>`)}
|
|
56
|
+
</mwc-select>
|
|
57
|
+
</div>
|
|
58
|
+
<style>
|
|
59
|
+
#menudetails {
|
|
60
|
+
display: none;
|
|
61
|
+
padding: 20px;
|
|
62
|
+
padding-left: 50px;
|
|
63
|
+
}
|
|
64
|
+
#pluginKindList [value="menu"][selected] ~ #menudetails {
|
|
65
|
+
display: grid;
|
|
66
|
+
}
|
|
67
|
+
#enabledefault {
|
|
68
|
+
padding-bottom: 20px;
|
|
69
|
+
}
|
|
70
|
+
#positionList {
|
|
71
|
+
max-width: 250px;
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
74
|
+
<mwc-radio-list-item id="validator" value="validator" hasMeta left>
|
|
75
|
+
${get('plugins.validator')}
|
|
76
|
+
<mwc-icon slot="meta">
|
|
77
|
+
${pluginIcons['validator']}
|
|
78
|
+
</mwc-icon>
|
|
79
|
+
</mwc-radio-list-item>
|
|
80
|
+
</mwc-list>
|
|
81
|
+
<mwc-textfield
|
|
82
|
+
label="${get('plugins.add.src')}"
|
|
83
|
+
helper="${get('plugins.add.srcHelper')}"
|
|
84
|
+
placeholder="http://example.com/plugin.js"
|
|
85
|
+
type="url"
|
|
86
|
+
required
|
|
87
|
+
id="pluginSrcInput">
|
|
88
|
+
</mwc-textfield>
|
|
89
|
+
</div>
|
|
90
|
+
<mwc-button
|
|
91
|
+
slot="secondaryAction"
|
|
92
|
+
dialogAction="close"
|
|
93
|
+
label="${get('cancel')}">
|
|
94
|
+
</mwc-button>
|
|
95
|
+
<mwc-button
|
|
96
|
+
id="addButton"
|
|
97
|
+
slot="primaryAction"
|
|
98
|
+
icon="add"
|
|
99
|
+
label="${get('add')}"
|
|
100
|
+
trailingIcon
|
|
101
|
+
@click=${() => this.handleAddPlugin()}>
|
|
102
|
+
</mwc-button>
|
|
103
|
+
</mwc-dialog>
|
|
104
|
+
`;
|
|
105
|
+
}
|
|
106
|
+
close() {
|
|
107
|
+
this.dialog.close();
|
|
108
|
+
}
|
|
109
|
+
show() {
|
|
110
|
+
this.dialog.show();
|
|
111
|
+
}
|
|
112
|
+
get open() {
|
|
113
|
+
return this.dialog.open;
|
|
114
|
+
}
|
|
115
|
+
handleAddPlugin() {
|
|
116
|
+
if (!(this.pluginSrcInput.checkValidity() &&
|
|
117
|
+
this.pluginNameInput.checkValidity() &&
|
|
118
|
+
this.pluginKindList.selected &&
|
|
119
|
+
this.requireDoc &&
|
|
120
|
+
this.positionList.selected))
|
|
121
|
+
return;
|
|
122
|
+
this.dispatchEvent(newAddExternalPluginEvent({
|
|
123
|
+
src: this.pluginSrcInput.value,
|
|
124
|
+
name: this.pluginNameInput.value,
|
|
125
|
+
kind: this.pluginKindList.selected.value,
|
|
126
|
+
requireDoc: this.requireDoc.checked,
|
|
127
|
+
position: this.positionList.value,
|
|
128
|
+
active: true,
|
|
129
|
+
// this is an added plugin and will be remove by reset either way
|
|
130
|
+
activeByDefault: false,
|
|
131
|
+
}));
|
|
132
|
+
this.requestUpdate();
|
|
133
|
+
this.dialog.close();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
OscdCustomPluginDialog.styles = css `
|
|
137
|
+
|
|
138
|
+
mwc-dialog {
|
|
139
|
+
--mdc-dialog-max-width: 98vw;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
mwc-dialog > form {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
mwc-dialog > form > * {
|
|
148
|
+
display: block;
|
|
149
|
+
margin-top: 16px;
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
__decorate([
|
|
153
|
+
query('#dialog')
|
|
154
|
+
], OscdCustomPluginDialog.prototype, "dialog", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
query('#pluginSrcInput')
|
|
157
|
+
], OscdCustomPluginDialog.prototype, "pluginSrcInput", void 0);
|
|
158
|
+
__decorate([
|
|
159
|
+
query('#pluginNameInput')
|
|
160
|
+
], OscdCustomPluginDialog.prototype, "pluginNameInput", void 0);
|
|
161
|
+
__decorate([
|
|
162
|
+
query('#pluginKindList')
|
|
163
|
+
], OscdCustomPluginDialog.prototype, "pluginKindList", void 0);
|
|
164
|
+
__decorate([
|
|
165
|
+
query('#requireDoc')
|
|
166
|
+
], OscdCustomPluginDialog.prototype, "requireDoc", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
query('#positionList')
|
|
169
|
+
], OscdCustomPluginDialog.prototype, "positionList", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
query('#addButton')
|
|
172
|
+
], OscdCustomPluginDialog.prototype, "addButton", void 0);
|
|
173
|
+
OscdCustomPluginDialog = __decorate([
|
|
174
|
+
customElement('oscd-custom-plugin-dialog')
|
|
175
|
+
], OscdCustomPluginDialog);
|
|
176
|
+
export { OscdCustomPluginDialog };
|
|
177
|
+
//# sourceMappingURL=custom-plugin-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-plugin-dialog.js","sourceRoot":"","sources":["../../../src/addons/plugin-manager/custom-plugin-dialog.ts"],"names":[],"mappings":"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","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,165 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement, html, LitElement, property, query, css } from 'lit-element';
|
|
3
|
+
import { get } from 'lit-translate';
|
|
4
|
+
import '@material/mwc-dialog';
|
|
5
|
+
import '@material/mwc-list';
|
|
6
|
+
import { newResetPluginsEvent, newSetPluginsEvent, pluginIcons } from '../../open-scd.js';
|
|
7
|
+
let OscdPluginManager = class OscdPluginManager extends LitElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
/** The plugins to render the layout. */
|
|
11
|
+
this.plugins = [];
|
|
12
|
+
}
|
|
13
|
+
render() {
|
|
14
|
+
return html `
|
|
15
|
+
<mwc-dialog
|
|
16
|
+
stacked
|
|
17
|
+
id="plugin-manager-root"
|
|
18
|
+
heading="${get('plugins.heading')}"
|
|
19
|
+
>
|
|
20
|
+
<mwc-list
|
|
21
|
+
id="pluginList"
|
|
22
|
+
multi
|
|
23
|
+
@selected=${(e) => {
|
|
24
|
+
const selectedPlugins = this.pluginList.items
|
|
25
|
+
.filter((item, index) => e.detail.index.has(index))
|
|
26
|
+
// @ts-expect-error: we add plugin to the list item
|
|
27
|
+
.map(item => item.plugin);
|
|
28
|
+
this.dispatchEvent(newSetPluginsEvent(selectedPlugins));
|
|
29
|
+
}}
|
|
30
|
+
>
|
|
31
|
+
<mwc-list-item graphic="avatar" noninteractive>
|
|
32
|
+
<strong>${get(`plugins.editor`)}</strong>
|
|
33
|
+
<mwc-icon slot="graphic" class="inverted">
|
|
34
|
+
${pluginIcons['editor']}
|
|
35
|
+
</mwc-icon>
|
|
36
|
+
</mwc-list-item>
|
|
37
|
+
|
|
38
|
+
<li divider role="separator"></li>
|
|
39
|
+
|
|
40
|
+
${this.generateEditorListItems()}
|
|
41
|
+
|
|
42
|
+
<mwc-list-item graphic="avatar" noninteractive>
|
|
43
|
+
<strong>${get(`plugins.menu`)}</strong>
|
|
44
|
+
<mwc-icon slot="graphic" class="inverted">
|
|
45
|
+
<strong>${pluginIcons['menu']}</strong></mwc-icon>
|
|
46
|
+
</mwc-list-item>
|
|
47
|
+
<li divider role="separator"></li>
|
|
48
|
+
|
|
49
|
+
${this.generateMenuListItems('top')}
|
|
50
|
+
|
|
51
|
+
<li divider role="separator" inset></li>
|
|
52
|
+
|
|
53
|
+
${this.generateValidatorListItems()}
|
|
54
|
+
|
|
55
|
+
<li divider role="separator" inset></li>
|
|
56
|
+
|
|
57
|
+
${this.generateMenuListItems('middle')}
|
|
58
|
+
|
|
59
|
+
<li divider role="separator" inset></li>
|
|
60
|
+
|
|
61
|
+
${this.generateMenuListItems('bottom')}
|
|
62
|
+
|
|
63
|
+
</mwc-list>
|
|
64
|
+
<mwc-button
|
|
65
|
+
slot="secondaryAction"
|
|
66
|
+
icon="refresh"
|
|
67
|
+
label="${get('reset')}"
|
|
68
|
+
@click=${async () => {
|
|
69
|
+
this.dispatchEvent(newResetPluginsEvent());
|
|
70
|
+
this.requestUpdate();
|
|
71
|
+
}}
|
|
72
|
+
style="--mdc-theme-primary: var(--mdc-theme-error)"
|
|
73
|
+
>
|
|
74
|
+
</mwc-button>
|
|
75
|
+
<mwc-button
|
|
76
|
+
slot="secondaryAction"
|
|
77
|
+
icon=""
|
|
78
|
+
label="${get('close')}"
|
|
79
|
+
dialogAction="close">
|
|
80
|
+
</mwc-button>
|
|
81
|
+
<mwc-button
|
|
82
|
+
outlined
|
|
83
|
+
trailingIcon
|
|
84
|
+
slot="primaryAction"
|
|
85
|
+
icon="library_add"
|
|
86
|
+
label="${get('plugins.add.heading')}…"
|
|
87
|
+
@click=${() => this.dispatchOpenCustomPluginDialogEvent()}>
|
|
88
|
+
</mwc-button>
|
|
89
|
+
</mwc-dialog>
|
|
90
|
+
`;
|
|
91
|
+
}
|
|
92
|
+
show() {
|
|
93
|
+
this.root.show();
|
|
94
|
+
}
|
|
95
|
+
generateEditorListItems() {
|
|
96
|
+
return this.plugins
|
|
97
|
+
.filter(p => p.kind === 'editor')
|
|
98
|
+
.map(this.renderPluginListItem);
|
|
99
|
+
}
|
|
100
|
+
generateMenuListItems(position) {
|
|
101
|
+
return this.plugins
|
|
102
|
+
.filter(p => p.kind === 'menu' && p.position === position)
|
|
103
|
+
.map(this.renderPluginListItem);
|
|
104
|
+
}
|
|
105
|
+
generateValidatorListItems() {
|
|
106
|
+
return this.plugins
|
|
107
|
+
.filter(p => p.kind === 'validator')
|
|
108
|
+
.map(this.renderPluginListItem);
|
|
109
|
+
}
|
|
110
|
+
dispatchOpenCustomPluginDialogEvent() {
|
|
111
|
+
const event = new CustomEvent('open-plugin-download', {
|
|
112
|
+
bubbles: true,
|
|
113
|
+
composed: true,
|
|
114
|
+
});
|
|
115
|
+
this.dispatchEvent(event);
|
|
116
|
+
}
|
|
117
|
+
renderPluginListItem(plugin) {
|
|
118
|
+
if (!plugin) {
|
|
119
|
+
return html ``;
|
|
120
|
+
}
|
|
121
|
+
return html `
|
|
122
|
+
<mwc-check-list-item
|
|
123
|
+
class="${plugin.official ? 'official' : 'external'}"
|
|
124
|
+
value="${plugin.src}"
|
|
125
|
+
.plugin=${plugin}
|
|
126
|
+
?selected=${plugin.active}
|
|
127
|
+
@request-selected=${(e) => {
|
|
128
|
+
if (e.detail.source !== 'interaction') {
|
|
129
|
+
e.preventDefault();
|
|
130
|
+
e.stopPropagation();
|
|
131
|
+
e.stopImmediatePropagation();
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}}
|
|
135
|
+
hasMeta
|
|
136
|
+
left
|
|
137
|
+
>
|
|
138
|
+
<mwc-icon slot="meta">
|
|
139
|
+
${plugin.icon || pluginIcons[plugin.kind]}
|
|
140
|
+
</mwc-icon>
|
|
141
|
+
${plugin.name}
|
|
142
|
+
</mwc-check-list-item>
|
|
143
|
+
|
|
144
|
+
`;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
OscdPluginManager.styles = css `
|
|
148
|
+
mwc-dialog {
|
|
149
|
+
--mdc-dialog-max-width: 98vw;
|
|
150
|
+
}
|
|
151
|
+
`;
|
|
152
|
+
__decorate([
|
|
153
|
+
property({ type: Array })
|
|
154
|
+
], OscdPluginManager.prototype, "plugins", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
query('#plugin-manager-root')
|
|
157
|
+
], OscdPluginManager.prototype, "root", void 0);
|
|
158
|
+
__decorate([
|
|
159
|
+
query('#pluginList')
|
|
160
|
+
], OscdPluginManager.prototype, "pluginList", void 0);
|
|
161
|
+
OscdPluginManager = __decorate([
|
|
162
|
+
customElement('oscd-plugin-manager')
|
|
163
|
+
], OscdPluginManager);
|
|
164
|
+
export { OscdPluginManager };
|
|
165
|
+
//# sourceMappingURL=plugin-manager.js.map
|
|
@@ -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')}…\"\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,168 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { css, customElement, html, property, query, state, unsafeCSS, } from 'lit-element';
|
|
3
|
+
import { get } from 'lit-translate';
|
|
4
|
+
import '@material/mwc-checkbox';
|
|
5
|
+
import '@material/mwc-formfield';
|
|
6
|
+
import '@material/mwc-textfield';
|
|
7
|
+
import { CheckListItem } from '@material/mwc-list/mwc-check-list-item';
|
|
8
|
+
import { List } from '@material/mwc-list';
|
|
9
|
+
import { ListBase } from '@material/mwc-list/mwc-list-base';
|
|
10
|
+
function slotItem(item) {
|
|
11
|
+
if (!item.closest('filtered-list') || !item.parentElement)
|
|
12
|
+
return item;
|
|
13
|
+
if (item.parentElement instanceof FilteredList)
|
|
14
|
+
return item;
|
|
15
|
+
return slotItem(item.parentElement);
|
|
16
|
+
}
|
|
17
|
+
function hideFiltered(item, searchText) {
|
|
18
|
+
const itemInnerText = item.innerText + '\n';
|
|
19
|
+
const childInnerText = Array.from(item.children)
|
|
20
|
+
.map(child => child.innerText)
|
|
21
|
+
.join('\n');
|
|
22
|
+
const value = item.value;
|
|
23
|
+
const filterTarget = (itemInnerText +
|
|
24
|
+
childInnerText +
|
|
25
|
+
value).toUpperCase();
|
|
26
|
+
const terms = searchText
|
|
27
|
+
.toUpperCase()
|
|
28
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
29
|
+
.trim()
|
|
30
|
+
.split(/\s+/g);
|
|
31
|
+
(terms.length === 1 && terms[0] === '') ||
|
|
32
|
+
terms.every(term => {
|
|
33
|
+
// regexp escape
|
|
34
|
+
const reTerm = new RegExp(`*${term}*`.replace(/\*/g, '.*').replace(/\?/g, '.{1}'), 'i');
|
|
35
|
+
return reTerm.test(filterTarget);
|
|
36
|
+
})
|
|
37
|
+
? slotItem(item).classList.remove('hidden')
|
|
38
|
+
: slotItem(item).classList.add('hidden');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A mwc-list with mwc-textfield that filters the list items for given or separated terms
|
|
42
|
+
*/
|
|
43
|
+
let FilteredList = class FilteredList extends ListBase {
|
|
44
|
+
get existCheckListItem() {
|
|
45
|
+
return this.items.some(item => item instanceof CheckListItem);
|
|
46
|
+
}
|
|
47
|
+
get isAllSelected() {
|
|
48
|
+
return this.items
|
|
49
|
+
.filter(item => !item.disabled)
|
|
50
|
+
.filter(item => item instanceof CheckListItem)
|
|
51
|
+
.every(checkItem => checkItem.selected);
|
|
52
|
+
}
|
|
53
|
+
get isSomeSelected() {
|
|
54
|
+
return this.items
|
|
55
|
+
.filter(item => !item.disabled)
|
|
56
|
+
.filter(item => item instanceof CheckListItem)
|
|
57
|
+
.some(checkItem => checkItem.selected);
|
|
58
|
+
}
|
|
59
|
+
onCheckAll() {
|
|
60
|
+
const select = !this.isAllSelected;
|
|
61
|
+
this.items
|
|
62
|
+
.filter(item => !item.disabled && !item.classList.contains('hidden'))
|
|
63
|
+
.forEach(item => (item.selected = select));
|
|
64
|
+
}
|
|
65
|
+
onFilterInput() {
|
|
66
|
+
Array.from(this.querySelectorAll('mwc-list-item, mwc-check-list-item, mwc-radio-list-item')).forEach(item => hideFiltered(item, this.searchField.value));
|
|
67
|
+
}
|
|
68
|
+
onListItemConnected(e) {
|
|
69
|
+
super.onListItemConnected(e);
|
|
70
|
+
this.requestUpdate();
|
|
71
|
+
}
|
|
72
|
+
update(changedProperties) {
|
|
73
|
+
super.update(changedProperties);
|
|
74
|
+
// regenerate filtering of text
|
|
75
|
+
this.onFilterInput();
|
|
76
|
+
}
|
|
77
|
+
constructor() {
|
|
78
|
+
super();
|
|
79
|
+
/** Whether the check all option (checkbox next to search text field) is activated */
|
|
80
|
+
this.disableCheckAll = false;
|
|
81
|
+
this.addEventListener('selected', () => {
|
|
82
|
+
this.requestUpdate();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
renderCheckAll() {
|
|
86
|
+
return this.existCheckListItem && !this.disableCheckAll
|
|
87
|
+
? html `<mwc-formfield class="checkall"
|
|
88
|
+
><mwc-checkbox
|
|
89
|
+
?indeterminate=${!this.isAllSelected && this.isSomeSelected}
|
|
90
|
+
?checked=${this.isAllSelected}
|
|
91
|
+
@change=${() => {
|
|
92
|
+
this.onCheckAll();
|
|
93
|
+
}}
|
|
94
|
+
></mwc-checkbox
|
|
95
|
+
></mwc-formfield>`
|
|
96
|
+
: html ``;
|
|
97
|
+
}
|
|
98
|
+
render() {
|
|
99
|
+
return html `<div id="tfcontainer">
|
|
100
|
+
<abbr title="${this.searchFieldLabel ?? get('filter')}"
|
|
101
|
+
><mwc-textfield
|
|
102
|
+
label="${this.searchFieldLabel ?? ''}"
|
|
103
|
+
iconTrailing="search"
|
|
104
|
+
outlined
|
|
105
|
+
@input=${() => this.onFilterInput()}
|
|
106
|
+
></mwc-textfield
|
|
107
|
+
></abbr>
|
|
108
|
+
${this.renderCheckAll()}
|
|
109
|
+
</div>
|
|
110
|
+
${super.render()}`;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
FilteredList.styles = css `
|
|
114
|
+
${unsafeCSS(List.styles)}
|
|
115
|
+
|
|
116
|
+
#tfcontainer {
|
|
117
|
+
display: flex;
|
|
118
|
+
flex: auto;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
::slotted(.hidden) {
|
|
122
|
+
display: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
abbr {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex: auto;
|
|
128
|
+
margin: 8px;
|
|
129
|
+
text-decoration: none;
|
|
130
|
+
border-bottom: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
mwc-textfield {
|
|
134
|
+
width: 100%;
|
|
135
|
+
--mdc-shape-small: 28px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
mwc-formfield.checkall {
|
|
139
|
+
padding-right: 8px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.mdc-list {
|
|
143
|
+
padding-inline-start: 0px;
|
|
144
|
+
}
|
|
145
|
+
`;
|
|
146
|
+
__decorate([
|
|
147
|
+
property({ type: String })
|
|
148
|
+
], FilteredList.prototype, "searchFieldLabel", void 0);
|
|
149
|
+
__decorate([
|
|
150
|
+
property({ type: Boolean })
|
|
151
|
+
], FilteredList.prototype, "disableCheckAll", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
state()
|
|
154
|
+
], FilteredList.prototype, "existCheckListItem", null);
|
|
155
|
+
__decorate([
|
|
156
|
+
state()
|
|
157
|
+
], FilteredList.prototype, "isAllSelected", null);
|
|
158
|
+
__decorate([
|
|
159
|
+
state()
|
|
160
|
+
], FilteredList.prototype, "isSomeSelected", null);
|
|
161
|
+
__decorate([
|
|
162
|
+
query('mwc-textfield')
|
|
163
|
+
], FilteredList.prototype, "searchField", void 0);
|
|
164
|
+
FilteredList = __decorate([
|
|
165
|
+
customElement('filtered-list')
|
|
166
|
+
], FilteredList);
|
|
167
|
+
export { FilteredList };
|
|
168
|
+
//# sourceMappingURL=filtered-list.js.map
|
|
@@ -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
|
+
}
|