@compas-oscd/open-scd 0.34.48 → 0.34.50
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/README.md +2 -0
- package/dist/filtered-list.d.ts +2 -0
- package/dist/filtered-list.js +6 -0
- package/dist/filtered-list.js.map +1 -1
- package/dist/test-helper/foundation.d.ts +34 -0
- package/dist/test-helper/foundation.js +55 -0
- package/dist/test-helper/foundation.js.map +1 -0
- package/dist/test-helper/index.d.ts +6 -0
- package/dist/test-helper/index.js +7 -0
- package/dist/test-helper/index.js.map +1 -0
- package/dist/test-helper/mock-editor-logger.d.ts +16 -0
- package/dist/test-helper/mock-editor-logger.js +53 -0
- package/dist/test-helper/mock-editor-logger.js.map +1 -0
- package/dist/test-helper/mock-edits.d.ts +7 -0
- package/dist/test-helper/mock-edits.js +12 -0
- package/dist/test-helper/mock-edits.js.map +1 -0
- package/dist/test-helper/mock-open-scd.d.ts +22 -0
- package/dist/test-helper/mock-open-scd.js +53 -0
- package/dist/test-helper/mock-open-scd.js.map +1 -0
- package/dist/test-helper/mock-plugins.d.ts +33 -0
- package/dist/test-helper/mock-plugins.js +239 -0
- package/dist/test-helper/mock-plugins.js.map +1 -0
- package/dist/test-helper/mock-wizard-editor.d.ts +15 -0
- package/dist/test-helper/mock-wizard-editor.js +50 -0
- package/dist/test-helper/mock-wizard-editor.js.map +1 -0
- package/dist/translations/de.js +1 -1
- package/dist/translations/de.js.map +1 -1
- package/dist/translations/en.js +1 -1
- package/dist/translations/en.js.map +1 -1
- package/dist/wizard-textfield.d.ts +1 -0
- package/dist/wizard-textfield.js +5 -0
- package/dist/wizard-textfield.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
Open Substation Communication Designer is an editor for SCL files as described in `IEC 61850-6`.
|
|
9
9
|
|
|
10
|
+
This package is published to npm as `@compas-oscd/open-scd`.
|
|
11
|
+
|
|
10
12
|
> Try it out at [openscd.github.io](https://openscd.github.io)!
|
|
11
13
|
|
|
12
14
|
Make sure your web browser has enough free memory! If needed, disable plug-ins and close unused browser tabs.
|
package/dist/filtered-list.d.ts
CHANGED
|
@@ -23,8 +23,10 @@ export declare class FilteredList extends LitElement {
|
|
|
23
23
|
list: List;
|
|
24
24
|
get items(): ListItemBase[];
|
|
25
25
|
get selected(): ListItemBase | ListItemBase[] | null;
|
|
26
|
+
get index(): import("@material/mwc-list").MWCListIndex;
|
|
26
27
|
private onCheckAll;
|
|
27
28
|
onFilterInput(): void;
|
|
29
|
+
layout(updateItems?: boolean): void;
|
|
28
30
|
protected update(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
29
31
|
constructor();
|
|
30
32
|
protected firstUpdated(_changedProperties: PropertyValues): void;
|
package/dist/filtered-list.js
CHANGED
|
@@ -62,6 +62,9 @@ let FilteredList = class FilteredList extends LitElement {
|
|
|
62
62
|
get selected() {
|
|
63
63
|
return this.list.selected;
|
|
64
64
|
}
|
|
65
|
+
get index() {
|
|
66
|
+
return this.list.index;
|
|
67
|
+
}
|
|
65
68
|
onCheckAll() {
|
|
66
69
|
const select = !this.isAllSelected;
|
|
67
70
|
this.items
|
|
@@ -71,6 +74,9 @@ let FilteredList = class FilteredList extends LitElement {
|
|
|
71
74
|
onFilterInput() {
|
|
72
75
|
Array.from(this.querySelectorAll('mwc-list-item, mwc-check-list-item, mwc-radio-list-item')).forEach(item => hideFiltered(item, this.searchField.value));
|
|
73
76
|
}
|
|
77
|
+
layout(updateItems) {
|
|
78
|
+
this.list.layout(updateItems);
|
|
79
|
+
}
|
|
74
80
|
update(changedProperties) {
|
|
75
81
|
super.update(changedProperties);
|
|
76
82
|
// regenerate filtering of text
|
|
@@ -1 +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 LitElement,\n property,\n PropertyValues,\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 '@material/mwc-list';\nimport { CheckListItem } from '@material/mwc-list/mwc-check-list-item';\nimport { List } from '@material/mwc-list';\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 LitElement {\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 @property({ type: Boolean })\n multi = false;\n @property({ type: Boolean })\n activatable = 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 @query('mwc-list') list!: List;\n\n get items() {\n return this.list?.items ?? [];\n }\n\n get selected() {\n return this.list.selected;\n }\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 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 protected firstUpdated(_changedProperties: PropertyValues): void {\n this.requestUpdate();\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 <mwc-list\n .multi=${this.multi}\n .activatable=${this.activatable}>\n <slot></slot>\n </mwc-list>`;\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"]}
|
|
1
|
+
{"version":3,"file":"filtered-list.js","sourceRoot":"","sources":["../src/filtered-list.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,GAAG,EACH,aAAa,EACb,IAAI,EACJ,UAAU,EACV,QAAQ,EAER,KAAK,EACL,KAAK,EAEL,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,wBAAwB,CAAC;AAChC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AACjC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAI1C,SAAS,QAAQ,CAAC,IAAa;IAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACvE,IAAI,IAAI,CAAC,aAAa,YAAY,YAAY;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,IAAkB,EAAE,UAAkB;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC7C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAe,KAAM,CAAC,SAAS,CAAC;SAC5C,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAW,CAC3B,aAAa;QACb,cAAc;QACd,KAAK,CACN,CAAC,WAAW,EAAE,CAAC;IAEhB,MAAM,KAAK,GAAa,UAAU;SAC/B,WAAW,EAAE;SACb,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,IAAI,EAAE;SACN,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACjB,gBAAgB;YAChB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EACvD,GAAG,CACJ,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC,CAAC;QACA,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAc1C,IAAY,kBAAkB;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,aAAa,CAAC,CAAC;IAChE,CAAC;IAGD,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,aAAa,CAAC;aAC7C,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAGD,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,aAAa,CAAC;aAC7C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAKD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,UAAU;QAChB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACnC,IAAI,CAAC,KAAK;aACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACpE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa;QACX,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,gBAAgB,CACnB,yDAAyD,CAC1D,CACF,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACf,YAAY,CAAC,IAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAqB;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAES,MAAM,CACd,iBAAyD;QAEzD,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,+BAA+B;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QA3EV,qFAAqF;QAErF,oBAAe,GAAG,KAAK,CAAC;QAGxB,UAAK,GAAG,KAAK,CAAC;QAEd,gBAAW,GAAG,KAAK,CAAC;QAqElB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAES,YAAY,CAAC,kBAAkC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,eAAe;YACrD,CAAC,CAAC,IAAI,CAAA;;6BAEiB,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc;uBAChD,IAAI,CAAC,aAAa;sBACnB,GAAG,EAAE;gBACb,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;;0BAEa;YACpB,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC;IACb,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;uBACQ,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,QAAQ,CAAC;;qBAExC,IAAI,CAAC,gBAAgB,IAAI,EAAE;;;qBAG3B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;UAGrC,IAAI,CAAC,cAAc,EAAE;;;iBAGd,IAAI,CAAC,KAAK;uBACJ,IAAI,CAAC,WAAW;;kBAErB,CAAC;IACjB,CAAC;;AAEM,mBAAM,GAAG,GAAG,CAAA;MACf,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BzB,CAAC;AAvJF;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACD;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qDACJ;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2CACd;AAEd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iDACR;AAGpB;IADC,KAAK,EAAE;sDAGP;AAGD;IADC,KAAK,EAAE;iDAMP;AAGD;IADC,KAAK,EAAE;kDAMP;AAEuB;IAAvB,KAAK,CAAC,eAAe,CAAC;iDAAyB;AAC7B;IAAlB,KAAK,CAAC,UAAU,CAAC;0CAAa;AAnCpB,YAAY;IADxB,aAAa,CAAC,eAAe,CAAC;GAClB,YAAY,CA2JxB;SA3JY,YAAY","sourcesContent":["import {\n css,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\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 '@material/mwc-list';\nimport { CheckListItem } from '@material/mwc-list/mwc-check-list-item';\nimport { List } from '@material/mwc-list';\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 LitElement {\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 @property({ type: Boolean })\n multi = false;\n @property({ type: Boolean })\n activatable = 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 @query('mwc-list') list!: List;\n\n get items() {\n return this.list?.items ?? [];\n }\n\n get selected() {\n return this.list.selected;\n }\n\n get index() {\n return this.list.index;\n }\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 layout(updateItems?: boolean): void {\n this.list.layout(updateItems);\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 protected firstUpdated(_changedProperties: PropertyValues): void {\n this.requestUpdate();\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 <mwc-list\n .multi=${this.multi}\n .activatable=${this.activatable}>\n <slot></slot>\n </mwc-list>`;\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,34 @@
|
|
|
1
|
+
import { Arbitrary } from 'fast-check';
|
|
2
|
+
export declare function invertedRegex(re: RegExp, minLength?: number, maxLength?: number): Arbitrary<string>;
|
|
3
|
+
export declare function regexString(re: RegExp, minLength?: number, maxLength?: number): Arbitrary<string>;
|
|
4
|
+
export declare function ipV6(): Arbitrary<string>;
|
|
5
|
+
export declare function MAC(): Arbitrary<string>;
|
|
6
|
+
export declare function ipV6SubNet(): Arbitrary<string>;
|
|
7
|
+
export declare const regExp: {
|
|
8
|
+
tIEDName: RegExp;
|
|
9
|
+
tLDInst: RegExp;
|
|
10
|
+
tPrefix: RegExp;
|
|
11
|
+
tLNClass: RegExp;
|
|
12
|
+
tLNInst: RegExp;
|
|
13
|
+
decimal: RegExp;
|
|
14
|
+
unsigned: RegExp;
|
|
15
|
+
tName: RegExp;
|
|
16
|
+
desc: RegExp;
|
|
17
|
+
IPv4: RegExp;
|
|
18
|
+
IPv6: RegExp;
|
|
19
|
+
MAC: RegExp;
|
|
20
|
+
OSI: RegExp;
|
|
21
|
+
OSIAPi: RegExp;
|
|
22
|
+
OSIid: RegExp;
|
|
23
|
+
token: RegExp;
|
|
24
|
+
tAsciName: RegExp;
|
|
25
|
+
tRestrName1stL: RegExp;
|
|
26
|
+
abstractDataAttributeName: RegExp;
|
|
27
|
+
lnClass: RegExp;
|
|
28
|
+
};
|
|
29
|
+
export declare const inverseRegExp: {
|
|
30
|
+
unsigned: RegExp;
|
|
31
|
+
decimal: RegExp;
|
|
32
|
+
integer: RegExp;
|
|
33
|
+
uint: RegExp;
|
|
34
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* eslint-disable no-control-regex */
|
|
2
|
+
import fc, { array, hexaString, integer, tuple } from 'fast-check';
|
|
3
|
+
import { patterns } from '../foundation.js';
|
|
4
|
+
export function invertedRegex(re, minLength = 0, maxLength) {
|
|
5
|
+
return fc
|
|
6
|
+
.string({ minLength, maxLength: maxLength ?? 2 * minLength + 10 })
|
|
7
|
+
.filter(char => !re.test(char));
|
|
8
|
+
}
|
|
9
|
+
export function regexString(re, minLength = 0, maxLength) {
|
|
10
|
+
return fc
|
|
11
|
+
.string({ minLength, maxLength: maxLength ?? 2 * minLength + 10 })
|
|
12
|
+
.filter(char => re.test(char));
|
|
13
|
+
}
|
|
14
|
+
export function ipV6() {
|
|
15
|
+
const h16Arb = hexaString({ minLength: 1, maxLength: 4 });
|
|
16
|
+
const ls32Arb = tuple(h16Arb, h16Arb).map(([a, b]) => `${a}:${b}`);
|
|
17
|
+
return tuple(array(h16Arb, { minLength: 6, maxLength: 6 }), ls32Arb).map(([eh, l]) => `${eh.join(':')}:${l}`);
|
|
18
|
+
}
|
|
19
|
+
export function MAC() {
|
|
20
|
+
const h16Arb = hexaString({ minLength: 2, maxLength: 2 });
|
|
21
|
+
const ls32Arb = tuple(h16Arb, h16Arb).map(([a, b]) => `${a}-${b}`);
|
|
22
|
+
return tuple(array(h16Arb, { minLength: 4, maxLength: 4 }), ls32Arb).map(([eh, l]) => `${eh.join('-')}-${l}`);
|
|
23
|
+
}
|
|
24
|
+
export function ipV6SubNet() {
|
|
25
|
+
return integer({ min: 1, max: 127 }).map(num => `/${num}`);
|
|
26
|
+
}
|
|
27
|
+
export const regExp = {
|
|
28
|
+
tIEDName: /^[A-Za-z][0-9A-Za-z_]*$/,
|
|
29
|
+
tLDInst: /^[A-Za-z][0-9A-Za-z_]*$/,
|
|
30
|
+
tPrefix: /^[A-Za-z][0-9A-Za-z_]*$/,
|
|
31
|
+
tLNClass: /^[A-Z]{1,4}$/,
|
|
32
|
+
tLNInst: /^[0-9]{0,12}$/,
|
|
33
|
+
decimal: new RegExp(`^${patterns.decimal}$`),
|
|
34
|
+
unsigned: new RegExp(`^${patterns.unsigned}$`),
|
|
35
|
+
tName: new RegExp(`^${patterns.normalizedString}$`),
|
|
36
|
+
desc: new RegExp(`^${patterns.normalizedString}$`),
|
|
37
|
+
IPv4: /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/,
|
|
38
|
+
IPv6: /^([0-9A-F]{2}-){5}[0-9A-F]{2}$/,
|
|
39
|
+
MAC: /^([0-9A-F]{2}-){5}[0-9A-F]{2}$/,
|
|
40
|
+
OSI: /^[0-9A-F]+$/,
|
|
41
|
+
OSIAPi: /^[0-9\u002C]+$/,
|
|
42
|
+
OSIid: /^[0-9]+$/,
|
|
43
|
+
token: new RegExp('^' + patterns.nmToken + '$'),
|
|
44
|
+
tAsciName: /^[A-Za-z][0-9A-Za-z_]$/,
|
|
45
|
+
tRestrName1stL: /^[a-z][0-9A-Za-z]*$/,
|
|
46
|
+
abstractDataAttributeName: /^((T)|(Test)|(Check)|(SIUnit)|(Open)|(SBO)|(SBOw)|(Cancel)|[a-z][0-9A-Za-z]*)$/,
|
|
47
|
+
lnClass: /^(LLN0)|[A-Z]{4,4}$/,
|
|
48
|
+
};
|
|
49
|
+
export const inverseRegExp = {
|
|
50
|
+
unsigned: /[^0-9.+]|.[^0-9.]/,
|
|
51
|
+
decimal: /[^0-9.+-]|.[^0-9.]/,
|
|
52
|
+
integer: /[^0-9+-]/,
|
|
53
|
+
uint: /[^0-9+]/,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=foundation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../src/test-helper/foundation.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-control-regex */\n\nimport fc, { Arbitrary, array, hexaString, integer, tuple } from 'fast-check';\nimport { patterns } from '../foundation.js';\n\nexport function invertedRegex(\n re: RegExp,\n minLength = 0,\n maxLength?: number\n): Arbitrary<string> {\n return fc\n .string({ minLength, maxLength: maxLength ?? 2 * minLength + 10 })\n .filter(char => !re.test(char));\n}\n\nexport function regexString(\n re: RegExp,\n minLength = 0,\n maxLength?: number\n): Arbitrary<string> {\n return fc\n .string({ minLength, maxLength: maxLength ?? 2 * minLength + 10 })\n .filter(char => re.test(char));\n}\n\nexport function ipV6(): Arbitrary<string> {\n const h16Arb = hexaString({ minLength: 1, maxLength: 4 });\n const ls32Arb = tuple(h16Arb, h16Arb).map(([a, b]) => `${a}:${b}`);\n return tuple(array(h16Arb, { minLength: 6, maxLength: 6 }), ls32Arb).map(\n ([eh, l]) => `${eh.join(':')}:${l}`\n );\n}\n\nexport function MAC(): Arbitrary<string> {\n const h16Arb = hexaString({ minLength: 2, maxLength: 2 });\n const ls32Arb = tuple(h16Arb, h16Arb).map(([a, b]) => `${a}-${b}`);\n return tuple(array(h16Arb, { minLength: 4, maxLength: 4 }), ls32Arb).map(\n ([eh, l]) => `${eh.join('-')}-${l}`\n );\n}\n\nexport function ipV6SubNet(): Arbitrary<string> {\n return integer({ min: 1, max: 127 }).map(num => `/${num}`);\n}\n\nexport const regExp = {\n tIEDName: /^[A-Za-z][0-9A-Za-z_]*$/,\n tLDInst: /^[A-Za-z][0-9A-Za-z_]*$/,\n tPrefix: /^[A-Za-z][0-9A-Za-z_]*$/,\n tLNClass: /^[A-Z]{1,4}$/,\n tLNInst: /^[0-9]{0,12}$/,\n decimal: new RegExp(`^${patterns.decimal}$`),\n unsigned: new RegExp(`^${patterns.unsigned}$`),\n tName: new RegExp(`^${patterns.normalizedString}$`),\n desc: new RegExp(`^${patterns.normalizedString}$`),\n IPv4: /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/,\n IPv6: /^([0-9A-F]{2}-){5}[0-9A-F]{2}$/,\n MAC: /^([0-9A-F]{2}-){5}[0-9A-F]{2}$/,\n OSI: /^[0-9A-F]+$/,\n OSIAPi: /^[0-9\\u002C]+$/,\n OSIid: /^[0-9]+$/,\n token: new RegExp('^' + patterns.nmToken + '$'),\n tAsciName: /^[A-Za-z][0-9A-Za-z_]$/,\n tRestrName1stL: /^[a-z][0-9A-Za-z]*$/,\n abstractDataAttributeName:\n /^((T)|(Test)|(Check)|(SIUnit)|(Open)|(SBO)|(SBOw)|(Cancel)|[a-z][0-9A-Za-z]*)$/,\n lnClass: /^(LLN0)|[A-Z]{4,4}$/,\n};\n\nexport const inverseRegExp = {\n unsigned: /[^0-9.+]|.[^0-9.]/,\n decimal: /[^0-9.+-]|.[^0-9.]/,\n integer: /[^0-9+-]/,\n uint: /[^0-9+]/,\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test-helper/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './foundation.js';\nexport * from './mock-open-scd.js';\nexport * from './mock-edits.js';\nexport * from './mock-plugins.js';\nexport * from './mock-wizard-editor.js';\nexport * from './mock-editor-logger.js';\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit-element';
|
|
2
|
+
import '../addons/Editor.js';
|
|
3
|
+
import '../addons/History.js';
|
|
4
|
+
import { OscdEditor } from '../addons/Editor.js';
|
|
5
|
+
import { OscdHistory } from '../addons/History.js';
|
|
6
|
+
import { XMLEditor } from '@openscd/oscd-editor';
|
|
7
|
+
export declare class MockEditorLogger extends LitElement {
|
|
8
|
+
doc: XMLDocument;
|
|
9
|
+
docName: string;
|
|
10
|
+
docId: string;
|
|
11
|
+
editCount: number;
|
|
12
|
+
history: OscdHistory;
|
|
13
|
+
editor: OscdEditor;
|
|
14
|
+
xmlEditor: XMLEditor;
|
|
15
|
+
render(): TemplateResult;
|
|
16
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, customElement, property, state, html, query, } from 'lit-element';
|
|
3
|
+
import '../addons/Editor.js';
|
|
4
|
+
import '../addons/History.js';
|
|
5
|
+
import { XMLEditor } from '@openscd/oscd-editor';
|
|
6
|
+
let MockEditorLogger = class MockEditorLogger extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.docName = 'test';
|
|
10
|
+
this.docId = 'test';
|
|
11
|
+
this.editCount = -1;
|
|
12
|
+
this.xmlEditor = new XMLEditor();
|
|
13
|
+
}
|
|
14
|
+
render() {
|
|
15
|
+
return html ` <oscd-history .host=${this} .editCount=${this.editCount} .editor=${this.xmlEditor}>
|
|
16
|
+
<oscd-editor
|
|
17
|
+
.doc=${this.doc}
|
|
18
|
+
.docName=${this.docName}
|
|
19
|
+
.docId=${this.docId}
|
|
20
|
+
.host=${this}
|
|
21
|
+
.editCount=${this.editCount}
|
|
22
|
+
.editor=${this.xmlEditor}
|
|
23
|
+
>
|
|
24
|
+
</oscd-editor>
|
|
25
|
+
</oscd-history>`;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
__decorate([
|
|
29
|
+
property({ type: Object })
|
|
30
|
+
], MockEditorLogger.prototype, "doc", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
property({ type: String })
|
|
33
|
+
], MockEditorLogger.prototype, "docName", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
property({ type: String })
|
|
36
|
+
], MockEditorLogger.prototype, "docId", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
state()
|
|
39
|
+
], MockEditorLogger.prototype, "editCount", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
query('oscd-history')
|
|
42
|
+
], MockEditorLogger.prototype, "history", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
query('oscd-editor')
|
|
45
|
+
], MockEditorLogger.prototype, "editor", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
state()
|
|
48
|
+
], MockEditorLogger.prototype, "xmlEditor", void 0);
|
|
49
|
+
MockEditorLogger = __decorate([
|
|
50
|
+
customElement('mock-editor-logger')
|
|
51
|
+
], MockEditorLogger);
|
|
52
|
+
export { MockEditorLogger };
|
|
53
|
+
//# sourceMappingURL=mock-editor-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-editor-logger.js","sourceRoot":"","sources":["../../src/test-helper/mock-editor-logger.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,KAAK,GAEN,MAAM,aAAa,CAAC;AAErB,OAAO,qBAAqB,CAAC;AAC7B,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAG1C,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QAGuB,YAAO,GAAG,MAAM,CAAC;QAEjB,UAAK,GAAG,MAAM,CAAC;QAG3C,cAAS,GAAG,CAAC,CAAC,CAAC;QASf,cAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAe9B,CAAC;IAbC,MAAM;QACJ,OAAO,IAAI,CAAA,wBAAwB,IAAI,eAAe,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,SAAS;;eAEnF,IAAI,CAAC,GAAG;mBACJ,IAAI,CAAC,OAAO;iBACd,IAAI,CAAC,KAAK;gBACX,IAAI;qBACC,IAAI,CAAC,SAAS;kBACjB,IAAI,CAAC,SAAS;;;oBAGZ,CAAC;IACnB,CAAC;CACF,CAAA;AA/B6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAmB;AAElB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAkB;AAEjB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CAAgB;AAG3C;IADC,KAAK,EAAE;mDACO;AAGf;IADC,KAAK,CAAC,cAAc,CAAC;iDACA;AAGtB;IADC,KAAK,CAAC,aAAa,CAAC;gDACD;AAGpB;IADC,KAAK,EAAE;mDACoB;AAjBjB,gBAAgB;IAD5B,aAAa,CAAC,oBAAoB,CAAC;GACvB,gBAAgB,CAgC5B;SAhCY,gBAAgB","sourcesContent":["import {\n LitElement,\n customElement,\n property,\n state,\n html,\n query,\n TemplateResult,\n} from 'lit-element';\n\nimport '../addons/Editor.js';\nimport '../addons/History.js';\nimport { OscdEditor } from '../addons/Editor.js';\nimport { OscdHistory } from '../addons/History.js';\nimport { XMLEditor } from '@openscd/oscd-editor';\n\n@customElement('mock-editor-logger')\nexport class MockEditorLogger extends LitElement {\n @property({ type: Object }) doc!: XMLDocument;\n\n @property({ type: String }) docName = 'test';\n\n @property({ type: String }) docId = 'test';\n\n @state()\n editCount = -1;\n\n @query('oscd-history')\n history!: OscdHistory;\n\n @query('oscd-editor')\n editor!: OscdEditor;\n\n @state()\n xmlEditor = new XMLEditor();\n\n render(): TemplateResult {\n return html` <oscd-history .host=${this} .editCount=${this.editCount} .editor=${this.xmlEditor}>\n <oscd-editor\n .doc=${this.doc}\n .docName=${this.docName}\n .docId=${this.docId}\n .host=${this}\n .editCount=${this.editCount}\n .editor=${this.xmlEditor}\n >\n </oscd-editor>\n </oscd-history>`;\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const element = document.createElement('test-element');
|
|
2
|
+
const parent = document.createElement('test-parent');
|
|
3
|
+
const reference = document.createElement('test-sibling');
|
|
4
|
+
parent.appendChild(element);
|
|
5
|
+
parent.appendChild(reference);
|
|
6
|
+
export const mockEdits = {
|
|
7
|
+
insert: () => ({ parent, node: element, reference }),
|
|
8
|
+
remove: () => ({ node: element }),
|
|
9
|
+
update: () => ({ element, attributes: { test: 'value' } }),
|
|
10
|
+
complex: () => [mockEdits.insert(), mockEdits.remove(), mockEdits.update()],
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=mock-edits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-edits.js","sourceRoot":"","sources":["../../src/test-helper/mock-edits.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAEzD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5B,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAE9B,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC5D,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzC,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IAClE,OAAO,EAAE,GAAW,EAAE,CAAC,CAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,CAAE;CACtF,CAAA","sourcesContent":["import { Edit, Insert, Remove, Update } from '@openscd/core';\n\n\nconst element = document.createElement('test-element');\nconst parent = document.createElement('test-parent');\nconst reference = document.createElement('test-sibling');\n\nparent.appendChild(element);\nparent.appendChild(reference);\n\nexport const mockEdits = {\n insert: (): Insert => ({ parent, node: element, reference }),\n remove: (): Remove => ({ node: element }),\n update: (): Update => ({ element, attributes: { test: 'value' } }),\n complex: (): Edit[] => [ mockEdits.insert(), mockEdits.remove(), mockEdits.update() ],\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TemplateResult } from 'lit-element';
|
|
2
|
+
import { OscdWizards } from '../addons/Wizards.js';
|
|
3
|
+
import { WizardFactory } from '../foundation.js';
|
|
4
|
+
import { OpenSCD } from '../open-scd.js';
|
|
5
|
+
import { WizardDialog } from '../wizard-dialog.js';
|
|
6
|
+
import { OscdHistory } from '../addons/History.js';
|
|
7
|
+
import { OscdLayout } from '../addons/Layout.js';
|
|
8
|
+
import { Plugin } from '../plugin.js';
|
|
9
|
+
export declare class MockOpenSCD extends OpenSCD {
|
|
10
|
+
mockPlugins: Plugin[];
|
|
11
|
+
_plugins: Array<HTMLElement>;
|
|
12
|
+
wizards: OscdWizards;
|
|
13
|
+
historyAddon: OscdHistory;
|
|
14
|
+
layout: OscdLayout;
|
|
15
|
+
renderHosting(): TemplateResult;
|
|
16
|
+
render(): TemplateResult;
|
|
17
|
+
protected getBuiltInPlugins(): Plugin[];
|
|
18
|
+
getPlugin<T extends HTMLElement>(name: string): T | undefined;
|
|
19
|
+
getActivePlugin<T extends HTMLElement>(): T;
|
|
20
|
+
get wizardUI(): WizardDialog;
|
|
21
|
+
get workflow(): WizardFactory[];
|
|
22
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement, html, queryAssignedNodes, query, property } from 'lit-element';
|
|
3
|
+
import { OpenSCD } from '../open-scd.js';
|
|
4
|
+
let MockOpenSCD = class MockOpenSCD extends OpenSCD {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.mockPlugins = [];
|
|
8
|
+
}
|
|
9
|
+
renderHosting() {
|
|
10
|
+
return html `<slot></slot>`;
|
|
11
|
+
}
|
|
12
|
+
render() {
|
|
13
|
+
return html `
|
|
14
|
+
${this.renderHosting()}
|
|
15
|
+
${super.render()}
|
|
16
|
+
`;
|
|
17
|
+
}
|
|
18
|
+
getBuiltInPlugins() {
|
|
19
|
+
return this.mockPlugins;
|
|
20
|
+
}
|
|
21
|
+
getPlugin(name) {
|
|
22
|
+
return this._plugins.find(p => p.tagName.toLowerCase() === name.toLowerCase());
|
|
23
|
+
}
|
|
24
|
+
getActivePlugin() {
|
|
25
|
+
return this._plugins[0];
|
|
26
|
+
}
|
|
27
|
+
get wizardUI() {
|
|
28
|
+
return this.wizards.wizardUI;
|
|
29
|
+
}
|
|
30
|
+
get workflow() {
|
|
31
|
+
return this.wizards.workflow;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
__decorate([
|
|
35
|
+
property({ attribute: false })
|
|
36
|
+
], MockOpenSCD.prototype, "mockPlugins", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
queryAssignedNodes()
|
|
39
|
+
], MockOpenSCD.prototype, "_plugins", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
query('oscd-wizards')
|
|
42
|
+
], MockOpenSCD.prototype, "wizards", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
query('oscd-history')
|
|
45
|
+
], MockOpenSCD.prototype, "historyAddon", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
query('oscd-layout')
|
|
48
|
+
], MockOpenSCD.prototype, "layout", void 0);
|
|
49
|
+
MockOpenSCD = __decorate([
|
|
50
|
+
customElement('mock-open-scd')
|
|
51
|
+
], MockOpenSCD);
|
|
52
|
+
export { MockOpenSCD };
|
|
53
|
+
//# sourceMappingURL=mock-open-scd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-open-scd.js","sourceRoot":"","sources":["../../src/test-helper/mock-open-scd.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAEb,IAAI,EACJ,kBAAkB,EAClB,KAAK,EACL,QAAQ,EACT,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQlC,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,OAAO;IAAjC;;QAGL,gBAAW,GAAa,EAAE,CAAA;IAgD5B,CAAC;IAlCC,aAAa;QACX,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,aAAa,EAAE;QACpB,KAAK,CAAC,MAAM,EAAE;KACjB,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAID,SAAS,CAAwB,IAAY;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACnC,CAAC;IACrB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAO,CAAC;IAChC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;CACF,CAAA;AAhDC;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gDACL;AAG1B;IADC,kBAAkB,EAAE;6CACS;AAG9B;IADC,KAAK,CAAC,cAAc,CAAC;4CACA;AAGtB;IADC,KAAK,CAAC,cAAc,CAAC;iDACK;AAG3B;IADC,KAAK,CAAC,aAAa,CAAC;2CACD;AAfT,WAAW;IADvB,aAAa,CAAC,eAAe,CAAC;GAClB,WAAW,CAmDvB;SAnDY,WAAW","sourcesContent":["import {\n customElement,\n TemplateResult,\n html,\n queryAssignedNodes,\n query,\n property\n} from 'lit-element';\nimport { OscdWizards } from '../addons/Wizards.js';\nimport { WizardFactory } from '../foundation.js';\nimport { OpenSCD } from '../open-scd.js';\nimport { WizardDialog } from '../wizard-dialog.js';\nimport { OscdHistory } from '../addons/History.js';\nimport { OscdLayout } from '../addons/Layout.js';\n// import type { Plugin } from '@openscd/core';\nimport { Plugin } from '../plugin.js';\n\n@customElement('mock-open-scd')\nexport class MockOpenSCD extends OpenSCD {\n\n @property({ attribute: false })\n mockPlugins: Plugin[] = []\n\n @queryAssignedNodes()\n _plugins!: Array<HTMLElement>;\n\n @query('oscd-wizards')\n wizards!: OscdWizards;\n\n @query('oscd-history')\n historyAddon!: OscdHistory;\n\n @query('oscd-layout')\n layout!: OscdLayout;\n\n renderHosting(): TemplateResult {\n return html`<slot></slot>`;\n }\n\n render(): TemplateResult {\n return html`\n ${this.renderHosting()}\n ${super.render()}\n `;\n }\n\n protected getBuiltInPlugins(): Plugin[]{\n return this.mockPlugins;\n }\n\n\n\n getPlugin<T extends HTMLElement>(name: string): T | undefined {\n return this._plugins.find(\n p => p.tagName.toLowerCase() === name.toLowerCase()\n ) as T | undefined;\n }\n\n getActivePlugin<T extends HTMLElement>(): T {\n return this._plugins[0]! as T;\n }\n\n get wizardUI(): WizardDialog {\n return this.wizards.wizardUI;\n }\n\n get workflow(): WizardFactory[] {\n return this.wizards.workflow;\n }\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const officialPlugins: ({
|
|
2
|
+
name: string;
|
|
3
|
+
src: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
default: boolean;
|
|
6
|
+
kind: string;
|
|
7
|
+
requireDoc: boolean;
|
|
8
|
+
position?: undefined;
|
|
9
|
+
} | {
|
|
10
|
+
name: string;
|
|
11
|
+
src: string;
|
|
12
|
+
icon: string;
|
|
13
|
+
default: boolean;
|
|
14
|
+
kind: string;
|
|
15
|
+
requireDoc: boolean;
|
|
16
|
+
position: string;
|
|
17
|
+
} | {
|
|
18
|
+
name: string;
|
|
19
|
+
src: string;
|
|
20
|
+
icon: string;
|
|
21
|
+
default: boolean;
|
|
22
|
+
kind: string;
|
|
23
|
+
requireDoc?: undefined;
|
|
24
|
+
position?: undefined;
|
|
25
|
+
} | {
|
|
26
|
+
name: string;
|
|
27
|
+
src: string;
|
|
28
|
+
default: boolean;
|
|
29
|
+
kind: string;
|
|
30
|
+
requireDoc: boolean;
|
|
31
|
+
position: string;
|
|
32
|
+
icon?: undefined;
|
|
33
|
+
})[];
|