From d032a03a5a2c235b006fe20ec40daee565b63056 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Wed, 4 Mar 2026 16:26:17 +0100 Subject: [PATCH 1/4] feat: replace material-web with oscd-ui --- components/add-data-object-dialog.spec.ts | 7 +- components/add-data-object-dialog.ts | 70 +- components/delete-lnodetype-dialog.spec.ts | 10 +- components/delete-lnodetype-dialog.ts | 26 +- components/lnodetype-sidebar.ts | 56 +- components/settings-dialog.spec.ts | 6 +- components/settings-dialog.ts | 42 +- package-lock.json | 1244 ++------------------ package.json | 26 +- rollup.config.js | 6 +- scl-template-update.spec.ts | 141 ++- scl-template-update.ts | 130 +- tsconfig.json | 4 +- 13 files changed, 367 insertions(+), 1401 deletions(-) diff --git a/components/add-data-object-dialog.spec.ts b/components/add-data-object-dialog.spec.ts index 7a691f5..7f9aa23 100644 --- a/components/add-data-object-dialog.spec.ts +++ b/components/add-data-object-dialog.spec.ts @@ -44,9 +44,10 @@ describe('AddDataObjectDialog', () => { it('renders dialog', () => { expect(dialog.createDOdialog.open).to.be.false; dialog.show(); - expect(dialog.shadowRoot?.querySelector('md-dialog')).to.exist; - expect(dialog.shadowRoot?.querySelector('md-filled-select')).to.exist; - expect(dialog.shadowRoot?.querySelector('md-outlined-text-field')).to.exist; + expect(dialog.shadowRoot?.querySelector('oscd-dialog')).to.exist; + expect(dialog.shadowRoot?.querySelector('oscd-filled-select')).to.exist; + expect(dialog.shadowRoot?.querySelector('oscd-outlined-text-field')).to + .exist; cdClasses.forEach(cdClass => { expect(dialog.shadowRoot?.textContent).to.include(cdClass); }); diff --git a/components/add-data-object-dialog.ts b/components/add-data-object-dialog.ts index 6e1a3bf..f5adc37 100644 --- a/components/add-data-object-dialog.ts +++ b/components/add-data-object-dialog.ts @@ -3,12 +3,11 @@ import { LitElement, html, css } from 'lit'; import { property, state, query } from 'lit/decorators.js'; import { Tree, TreeNode } from '@openenergytools/tree-grid'; import { ScopedElementsMixin } from '@open-wc/scoped-elements/lit-element.js'; -import { MdDialog } from '@scopedelement/material-web/dialog/MdDialog.js'; -import { MdOutlinedTextField } from '@scopedelement/material-web/textfield/MdOutlinedTextField.js'; -import { MdFilledSelect } from '@scopedelement/material-web/select/MdOutlineSelect.js'; -import { MdSelectOption } from '@scopedelement/material-web/select/MdSelectOption.js'; -import { MdOutlinedButton } from '@scopedelement/material-web/button/outlined-button.js'; -import { MdTextButton } from '@scopedelement/material-web/button/text-button.js'; +import { OscdDialog } from '@omicronenergy/oscd-ui/dialog/OscdDialog.js'; +import { OscdOutlinedTextField } from '@omicronenergy/oscd-ui/textfield/OscdOutlinedTextField.js'; +import { OscdFilledSelect } from '@omicronenergy/oscd-ui/select/OscdFilledSelect.js'; +import { OscdSelectOption } from '@omicronenergy/oscd-ui/select/OscdSelectOption.js'; +import { OscdTextButton } from '@omicronenergy/oscd-ui/button/OscdTextButton.js'; import { debounce } from '../utils/debounce.js'; // eslint-disable-next-line no-shadow @@ -23,16 +22,15 @@ const firstTextBlockRegExp = /[A-Za-z]+/; export class AddDataObjectDialog extends ScopedElementsMixin(LitElement) { static scopedElements = { - 'md-outlined-button': MdOutlinedButton, - 'md-dialog': MdDialog, - 'md-outlined-text-field': MdOutlinedTextField, - 'md-text-button': MdTextButton, - 'md-select-option': MdSelectOption, - 'md-filled-select': MdFilledSelect, + 'oscd-dialog': OscdDialog, + 'oscd-outlined-text-field': OscdOutlinedTextField, + 'oscd-text-button': OscdTextButton, + 'oscd-select-option': OscdSelectOption, + 'oscd-filled-select': OscdFilledSelect, }; static styles = css` - md-dialog { + oscd-dialog { min-width: 350px; } .dialog-content { @@ -41,11 +39,11 @@ export class AddDataObjectDialog extends ScopedElementsMixin(LitElement) { gap: 16px; margin-top: 8px; } - md-filled-select, - md-outlined-text-field { + oscd-filled-select, + oscd-outlined-text-field { width: 100%; } - md-text-button { + oscd-text-button { text-transform: uppercase; } `; @@ -69,17 +67,17 @@ export class AddDataObjectDialog extends ScopedElementsMixin(LitElement) { @state() errorText = ''; - @query('md-dialog') - createDOdialog!: MdDialog; + @query('oscd-dialog') + createDOdialog!: OscdDialog; @query('#cdc-type') - cdcType!: MdFilledSelect; + cdcType!: OscdFilledSelect; @query('#do-name') - doName!: MdOutlinedTextField; + doName!: OscdOutlinedTextField; @query('#namespace') - namespace!: MdOutlinedTextField; + namespace!: OscdOutlinedTextField; private namespaceDefaultValue = 'User-Defined'; @@ -251,7 +249,7 @@ export class AddDataObjectDialog extends ScopedElementsMixin(LitElement) { /* eslint-disable class-methods-use-this */ private resetErrorText(e: Event): void { - const target = e.target as MdOutlinedTextField; + const target = e.target as OscdOutlinedTextField; if (target.errorText && target.checkValidity()) { target.errorText = ''; target.error = false; @@ -260,7 +258,7 @@ export class AddDataObjectDialog extends ScopedElementsMixin(LitElement) { render() { return html` - +
Add Data Object
- ${this.cdClasses.map( cdClass => - html`${cdClass}${cdClass}` )} - - + - + + >
- CloseClose - AddAdd
-
+ `; } } diff --git a/components/delete-lnodetype-dialog.spec.ts b/components/delete-lnodetype-dialog.spec.ts index 18039a6..824f803 100644 --- a/components/delete-lnodetype-dialog.spec.ts +++ b/components/delete-lnodetype-dialog.spec.ts @@ -40,8 +40,9 @@ describe('DeleteDialog', () => { await deleteDialog.updateComplete; await deleteDialog.dialog.updateComplete; - const buttons = - deleteDialog.shadowRoot?.querySelectorAll('md-outlined-button'); + const buttons = deleteDialog.shadowRoot?.querySelectorAll( + 'oscd-outlined-button' + ); const deleteButton = Array.from(buttons || []).find( btn => btn.textContent?.trim() === 'Delete' ) as HTMLElement; @@ -75,8 +76,9 @@ describe('DeleteDialog', () => { deleteDialog.show(); await deleteDialog.updateComplete; - const buttons = - deleteDialog.shadowRoot?.querySelectorAll('md-outlined-button'); + const buttons = deleteDialog.shadowRoot?.querySelectorAll( + 'oscd-outlined-button' + ); const cancelButton = Array.from(buttons || []).find( btn => btn.textContent?.trim() === 'Cancel' ) as HTMLElement; diff --git a/components/delete-lnodetype-dialog.ts b/components/delete-lnodetype-dialog.ts index 62ab811..3ee7a90 100644 --- a/components/delete-lnodetype-dialog.ts +++ b/components/delete-lnodetype-dialog.ts @@ -2,13 +2,13 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements/lit-element.js'; import { LitElement, html, css } from 'lit'; import { query, property } from 'lit/decorators.js'; -import { MdDialog } from '@scopedelement/material-web/dialog/dialog.js'; -import { MdOutlinedButton } from '@scopedelement/material-web/button/MdOutlinedButton.js'; +import { OscdDialog } from '@omicronenergy/oscd-ui/dialog/OscdDialog.js'; +import { OscdOutlinedButton } from '@omicronenergy/oscd-ui/button/OscdOutlinedButton.js'; export class DeleteDialog extends ScopedElementsMixin(LitElement) { static scopedElements = { - 'md-dialog': MdDialog, - 'md-outlined-button': MdOutlinedButton, + 'oscd-dialog': OscdDialog, + 'oscd-outlined-button': OscdOutlinedButton, }; @property() @@ -17,8 +17,8 @@ export class DeleteDialog extends ScopedElementsMixin(LitElement) { @property() lnodeTypeId: string = ''; - @query('md-dialog') - dialog!: MdDialog; + @query('oscd-dialog') + dialog!: OscdDialog; get open() { return this.dialog?.open ?? false; @@ -43,23 +43,25 @@ export class DeleteDialog extends ScopedElementsMixin(LitElement) { render() { return html` - +
Confirm delete
Are you sure you want to delete Logical Node Type ${this.lnodeTypeId}? This action may have severe consequences.
- CancelCancel - DeleteDelete
-
+ `; } diff --git a/components/lnodetype-sidebar.ts b/components/lnodetype-sidebar.ts index 7e499fb..85649a1 100644 --- a/components/lnodetype-sidebar.ts +++ b/components/lnodetype-sidebar.ts @@ -3,17 +3,17 @@ import { LitElement, html, css } from 'lit'; import { property, state } from 'lit/decorators.js'; import { ScopedElementsMixin } from '@open-wc/scoped-elements/lit-element.js'; -import { MdOutlinedButton } from '@scopedelement/material-web/button/outlined-button.js'; -import { MdOutlinedTextField } from '@scopedelement/material-web/textfield/MdOutlinedTextField.js'; -import { MdList } from '@scopedelement/material-web/list/MdList.js'; -import { MdListItem } from '@scopedelement/material-web/list/MdListItem.js'; +import { OscdFilledButton } from '@omicronenergy/oscd-ui/button/OscdFilledButton.js'; +import { OscdOutlinedTextField } from '@omicronenergy/oscd-ui/textfield/OscdOutlinedTextField.js'; +import { OscdList } from '@omicronenergy/oscd-ui/list/OscdList.js'; +import { OscdListItem } from '@omicronenergy/oscd-ui/list/OscdListItem.js'; export class LNodeTypeSidebar extends ScopedElementsMixin(LitElement) { static scopedElements = { - 'md-outlined-button': MdOutlinedButton, - 'md-outlined-textfield': MdOutlinedTextField, - 'md-list': MdList, - 'md-list-item': MdListItem, + 'oscd-filled-button': OscdFilledButton, + 'oscd-outlined-textfield': OscdOutlinedTextField, + 'oscd-list': OscdList, + 'oscd-list-item': OscdListItem, }; @property({ type: Array }) @@ -88,13 +88,13 @@ export class LNodeTypeSidebar extends ScopedElementsMixin(LitElement) { render() { return html``; } updated(changedProperties: Map) { super.updated?.(changedProperties); - // Scroll md-list to top when lNodeTypes changes + // Scroll oscd-list to top when lNodeTypes changes if (changedProperties.has('lNodeTypes')) { - const mdList = this.renderRoot.querySelector('md-list'); - if (mdList) mdList.scrollTop = 0; + const oscdList = this.renderRoot.querySelector('oscd-list'); + if (oscdList) oscdList.scrollTop = 0; } } @@ -144,33 +144,33 @@ export class LNodeTypeSidebar extends ScopedElementsMixin(LitElement) { overflow: hidden; background-color: #fcf6e5; } - md-list { + oscd-list { min-height: 0; max-height: calc(100vh - var(--header-height) - 1rem - 134px); overflow-y: auto; scrollbar-width: thin; padding: 0; } - md-list::-webkit-scrollbar { + oscd-list::-webkit-scrollbar { width: 8px; } - md-list::-webkit-scrollbar-thumb { + oscd-list::-webkit-scrollbar-thumb { border-radius: 4px; } - md-list::-webkit-scrollbar-track { + oscd-list::-webkit-scrollbar-track { background: transparent; } - md-list-item { + oscd-list-item { box-sizing: border-box; } - md-list-item[selected] { + oscd-list-item[selected] { background: var(--md-sys-color-primary); } - md-list-item[selected] span[slot='headline'], - md-list-item[selected] span[slot='supporting-text'] { + oscd-list-item[selected] span[slot='headline'], + oscd-list-item[selected] span[slot='supporting-text'] { color: var(--md-sys-color-on-primary, #ffffff); } - md-outlined-textfield { + oscd-outlined-textfield { width: 100%; } .actions { diff --git a/components/settings-dialog.spec.ts b/components/settings-dialog.spec.ts index a30a814..b404251 100644 --- a/components/settings-dialog.spec.ts +++ b/components/settings-dialog.spec.ts @@ -7,7 +7,7 @@ describe('SettingsDialog', () => { let element: SettingsDialog; const getRadio = (value: 'update' | 'swap') => - element.shadowRoot!.querySelector(`md-radio[value="${value}"]`) as any; + element.shadowRoot!.querySelector(`oscd-radio[value="${value}"]`) as any; beforeEach(async () => { localStorage.clear(); @@ -53,7 +53,7 @@ describe('SettingsDialog', () => { await element.updateComplete; const confirmButton = element.shadowRoot!.querySelector( - 'md-text-button:last-child' + 'oscd-text-button:last-child' ) as any; confirmButton.click(); @@ -68,7 +68,7 @@ describe('SettingsDialog', () => { await element.updateComplete; const cancelButton = element.shadowRoot!.querySelector( - 'md-text-button:first-child' + 'oscd-text-button:first-child' ) as any; cancelButton.click(); diff --git a/components/settings-dialog.ts b/components/settings-dialog.ts index a53a047..fa57567 100644 --- a/components/settings-dialog.ts +++ b/components/settings-dialog.ts @@ -2,9 +2,9 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements/lit-element.js'; import { LitElement, html, css } from 'lit'; import { query, state } from 'lit/decorators.js'; -import { MdDialog } from '@scopedelement/material-web/dialog/dialog.js'; -import { MdTextButton } from '@scopedelement/material-web/button/text-button.js'; -import { MdRadio } from '@scopedelement/material-web/radio/radio.js'; +import { OscdDialog } from '@omicronenergy/oscd-ui/dialog/OscdDialog.js'; +import { OscdTextButton } from '@omicronenergy/oscd-ui/button/OscdTextButton.js'; +import { OscdRadio } from '@omicronenergy/oscd-ui/radio/OscdRadio.js'; import { TEMPLATE_UPDATE_SETTING_STORAGE_KEY } from '../foundation/constants.js'; // eslint-disable-next-line no-shadow @@ -15,13 +15,13 @@ export enum UpdateSetting { export class SettingsDialog extends ScopedElementsMixin(LitElement) { static scopedElements = { - 'md-dialog': MdDialog, - 'md-text-button': MdTextButton, - 'md-radio': MdRadio, + 'oscd-dialog': OscdDialog, + 'oscd-text-button': OscdTextButton, + 'oscd-radio': OscdRadio, }; - @query('md-dialog') - dialog!: MdDialog; + @query('oscd-dialog') + dialog!: OscdDialog; @state() private updateSetting: UpdateSetting = UpdateSetting.Update; @@ -63,7 +63,7 @@ export class SettingsDialog extends ScopedElementsMixin(LitElement) { } private handleRadioChange(event: Event) { - const target = event.target as MdRadio; + const target = event.target as OscdRadio; if (target.checked) { this.updateSetting = target.value as UpdateSetting; } @@ -81,44 +81,44 @@ export class SettingsDialog extends ScopedElementsMixin(LitElement) { render() { return html` - this.dialog?.close()}> + this.dialog?.close()}>
LNodeType update behaviour
- + Cancel - - + + Save - +
-
+ `; } static styles = css` - md-dialog { + oscd-dialog { --md-dialog-container-max-width: 400px; } @@ -147,7 +147,7 @@ export class SettingsDialog extends ScopedElementsMixin(LitElement) { flex: 1; } - md-text-button { + oscd-text-button { text-transform: uppercase; } `; diff --git a/package-lock.json b/package-lock.json index dc61bb2..0309c55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { + "@omicronenergy/oscd-ui": "^0.0.11", "@open-wc/scoped-elements": "^3.0.5", - "@openenergytools/open-scd-core": "0.0.5", "@openenergytools/tree-grid": "1.0.1", + "@openscd/oscd-api": "^0.1.6", "@openscd/scl-lib": "2.0.0", - "@scopedelement/material-web": "^3.8.0", "lit": "^3.0.0" }, "devDependencies": { @@ -2023,978 +2023,11 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", - "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", "license": "BSD-3-Clause" }, - "node_modules/@lit/localize": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@lit/localize/-/localize-0.11.4.tgz", - "integrity": "sha512-RRIwIX2tAm3+DuEndoXSJrFjGrAK5cb5IXo5K6jcJ6sbgD829B8rSqHC5MaKVUmXTVLIR1bk5IZOZDf9wFereA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.4.0", - "lit": "^2.3.0" - } - }, - "node_modules/@lit/localize/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@lit/localize/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@lit/reactive-element": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", - "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" - } - }, - "node_modules/@material/animation": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-GBuR4VmcTQW1D0lPXEosf5Giho72LLbyGIydWGtaEUtLJoive/D9kFkwTN4Fsyt9Kkl7hbhs35vrNe6QkAH4/Q==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/base": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-UJKbXwZtkrA3sfQDmj8Zbw1Q3Tqtl6KdfVFws95Yf7TCUgTFzbZI/FSx1w7dVugQPOEnIBuZnzqZam/MtHkx4w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/button": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-IPBAByKpQjrWNVmAWx5VCTCLnOw4ymbLsbHmBkLiDgcLPs1EtwYnKKIwQ+/t3bV02OShUdMiyboL8V/C0gMS1A==", - "license": "MIT", - "dependencies": { - "@material/density": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/shape": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/tokens": "14.0.0-canary.53b3cad2f.0", - "@material/touch-target": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/density": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-Eh/vZ3vVyqtpylg5Ci33qlgtToS4H1/ppd450Ib3tcdISIoodgijYY0w4XsRvrnZgbI/h/1STFdLxdzS0UNuFw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dialog": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-yiG2nlVKTW0Ro3CF8Z/MVpTwSyG/8Kio3AaTUbeQdbjt5r692s4x5Yhd8m1IjEQKUeulY4CndvIbCUwZ8/G2PA==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/button": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/icon-button": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/shape": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/tokens": "14.0.0-canary.53b3cad2f.0", - "@material/touch-target": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dom": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-aR+rfncF6oi2ivdOlKSJI4UXwNzWV5rXM88MLDoSJF1D7lXxhAKhge+tMUBodWGV/q0+FnXLuVAa0WYTrKjo+A==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/drawer": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-MXzRGq7NoONgbHa+AhAu4HvOUA9V37nSsY4g4Alita08UqRAvvFFr4K1CF9GI2K9pLCpyQv1UbN0Lw5b78HrVQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/list": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/shape": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/elevation": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-3h+EkR588RMZ5TSNQ4UeXD1FOBnL3ABQix0DQIGwtNJCqSMoPndT/oJEFvwQbTkZNDbFIKN9p1Q7/KuFPVY8Pw==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/feature-targeting": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-fn7Af3PRyARtNeYqtjxXmE3Y/dCpnpQVWWys57MqiGR/nvc6qpgOfJ6rOdcu/MrOysOE/oebTUDmDnTmwpe9Hw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/focus-ring": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-exPX5VrjQimipBwgcFDGRiEE783sOBgpkFui59A6i6iGvS2UrLHlYY2E65fyyyQnD1f/rv4Po1OOnCesE1kulg==", - "license": "MIT", - "dependencies": { - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0" - } - }, - "node_modules/@material/icon-button": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-BFdj3CP0JXHC/F2bDmpmzWhum4fkzIDgCCavvnpE/KcCbr0AaoSULRde+LtqvbdLIYW20cXhvjinIOlRhSOshA==", - "license": "MIT", - "dependencies": { - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/density": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/touch-target": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/list": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-mkMpltSKAYLBtFnTTCk/mQIDzwxF/VLh1gh59ehOtmRXt7FvTz83RoAa4tqe53hpVrbX4HoLDBu+vILhq/wkjw==", - "license": "MIT", - "dependencies": { - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/density": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/shape": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/mwc-base": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.27.0.tgz", - "integrity": "sha512-oCWWtjbyQ52AaUbzINLGBKScIPyqhps2Y7c8t6Gu6fcFeDxhKXMV1Cqvtj/OMhtAt53XjHfD2XruWwYv3cYYUA==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/base": "=14.0.0-canary.53b3cad2f.0", - "@material/dom": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-base/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-base/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-button": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.27.0.tgz", - "integrity": "sha512-t5m2zfE93RNKHMjdsU67X6csFzuSG08VJKKvXVQ+BriGE3xBgzY5nZdmZXomFpaWjDENPAlyS4ppCFm6o+DILw==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-icon": "^0.27.0", - "@material/mwc-ripple": "^0.27.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-button/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-button/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-checkbox": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.27.0.tgz", - "integrity": "sha512-EY0iYZLwo8qaqMwR5da4fdn0xI0BZNAvKTcwoubYWpDDHlGxDcqwvjp/40ChGo3Q/zv8/4/A0Qp7cwapI82EkA==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/mwc-ripple": "^0.27.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-checkbox/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-checkbox/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-dialog": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.27.0.tgz", - "integrity": "sha512-rkOEmCroVs0wBQbj87vH79SvSHHZ61QRCTUYsU2rHGZCvdzlmvHjWdoyKjJER6WwwM3rrT8xthfecmjICI28CA==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/dialog": "=14.0.0-canary.53b3cad2f.0", - "@material/dom": "=14.0.0-canary.53b3cad2f.0", - "@material/mwc-base": "^0.27.0", - "@material/mwc-button": "^0.27.0", - "blocking-elements": "^0.1.0", - "lit": "^2.0.0", - "tslib": "^2.0.1", - "wicg-inert": "^3.0.0" - } - }, - "node_modules/@material/mwc-dialog/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-dialog/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-drawer": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.27.0.tgz", - "integrity": "sha512-dy/uwt+aI5aiUDqFcT6Z4GhGmLZR7fu3HMkfqtQDwoJShxnf5hHwk18fiD1VHHCDf9CZ5wjl7ug4fjpcs9r18A==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/drawer": "=14.0.0-canary.53b3cad2f.0", - "@material/mwc-base": "^0.27.0", - "blocking-elements": "^0.1.0", - "lit": "^2.0.0", - "tslib": "^2.0.1", - "wicg-inert": "^3.0.0" - } - }, - "node_modules/@material/mwc-drawer/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-drawer/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-icon": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.27.0.tgz", - "integrity": "sha512-Sul44I37M9Ewynn0A9DjkEBrmll2VtNbth6Pxj7I1A/EAwEfaCrPvryyGqfIu1T2hTsRcaojzQx6QjF+B5QW9A==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-icon-button": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.27.0.tgz", - "integrity": "sha512-wReiPa1UkLaCSPtpkAs1OGKEBtvqPnz9kzuY+RvN5ZQnpo3Uh7n3plHV4y/stsUBfrWtBCcOgYnCdNRaR/r2nQ==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-ripple": "^0.27.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-icon-button/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-icon-button/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-icon/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-icon/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-list": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.27.0.tgz", - "integrity": "sha512-oAhNQsBuAOgF3ENOIY8PeWjXsl35HoYaUkl0ixBQk8jJP2HIEf+MdbS5688y/UXxFbSjr0m//LfwR5gauEashg==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/base": "=14.0.0-canary.53b3cad2f.0", - "@material/dom": "=14.0.0-canary.53b3cad2f.0", - "@material/list": "=14.0.0-canary.53b3cad2f.0", - "@material/mwc-base": "^0.27.0", - "@material/mwc-checkbox": "^0.27.0", - "@material/mwc-radio": "^0.27.0", - "@material/mwc-ripple": "^0.27.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-list/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-list/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-radio": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.27.0.tgz", - "integrity": "sha512-+rSO9a373BgyMgQOM0Z8vVkuieobBylPJ8qpltytM+yGPj8+n+MtwRZyg+ry3WwEjYYDMP6GxZPHwLgWs6lMpQ==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/mwc-ripple": "^0.27.0", - "@material/radio": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-radio/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-radio/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-ripple": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.27.0.tgz", - "integrity": "sha512-by0O8d8g3Rd96/sUB8hxy6MrDx1QTstqOsA64vqypWd526hMTBGRik08jTNap5sVIyrN9Vq17jb4NJLWQLnNHQ==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/dom": "=14.0.0-canary.53b3cad2f.0", - "@material/mwc-base": "^0.27.0", - "@material/ripple": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-ripple/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-ripple/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.27.0.tgz", - "integrity": "sha512-BhX6hZYjPL+d3Gcl6rVHNPiEAudgMHA+7mHo2keqbIiFRLKa2CU+omHZO/82+EBan/TPL6ZK39Oki8aIaAJcRQ==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/mwc-ripple": "^0.27.0", - "@material/mwc-tab-indicator": "^0.27.0", - "@material/tab": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-tab-bar": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.27.0.tgz", - "integrity": "sha512-CqRZ38m8kOfSJo87Ek61eubO8AGR10Dp12c3pCyyy6mtK/0FSY+rfcmnMPxEzkxREqUnQPgw9lhqmGZXBSqzZQ==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/mwc-tab": "^0.27.0", - "@material/mwc-tab-scroller": "^0.27.0", - "@material/tab": "=14.0.0-canary.53b3cad2f.0", - "@material/tab-bar": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-tab-bar/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab-bar/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab-indicator": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.27.0.tgz", - "integrity": "sha512-bdE5mYP2ze/8d8cGTTJUS0+ByzEK5tmWsXfphFr/Dyy9b+gOnIOt1iX8tmKTOpbYKsV43LxtSkumhTTPDXEJLg==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/tab-indicator": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-tab-indicator/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab-indicator/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab-scroller": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.27.0.tgz", - "integrity": "sha512-WL/CYVx1cHjC1a/STIB/BaBfxGz3Rz4szNNX35FkYzm6GSGxUNkXZfKOAK7R8RdZOAETa8Gy5tTEhKZKKJ/aUA==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/dom": "=14.0.0-canary.53b3cad2f.0", - "@material/mwc-base": "^0.27.0", - "@material/tab-scroller": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-tab-scroller/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab-scroller/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-tab/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-top-app-bar": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.27.0.tgz", - "integrity": "sha512-vHn10exeDhUVFpo4TgBsS8pta4AxZtjuuxrYFHMYxceGifEATvGbYoPyw1x7cCMcXMMIITElgfCURAbCmn3BgA==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-base": "^0.27.0", - "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-top-app-bar-fixed": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.27.0.tgz", - "integrity": "sha512-kU1RKmx8U7YCbsBuAXfNLtu+V/Jwos+o2mSY94tZpv36dIsvcsGQ4pB2zW0EaU8g9bQVdwLMVxj4oooxSmbZXw==", - "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", - "license": "Apache-2.0", - "dependencies": { - "@material/mwc-top-app-bar": "^0.27.0", - "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-top-app-bar-fixed/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-top-app-bar-fixed/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-top-app-bar/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/mwc-top-app-bar/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@material/radio": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-V/AgWEOuHFoh9d4Gq1rqBZnKSGtMLQNh23Bwrv0c1FhPqFvUpwt9jR3SVwhJk5gvQQWGy9p3iiGc9QCJ+0+P8Q==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/density": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/touch-target": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/ripple": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-6g2G62vd8DsMuIUSXlRrzb98qkZ4o8ZREknNwNP2zaLQEOkJ//4j9HaqDt98/3LIjUTY9UIVFTQENiMmlwKHYQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/rtl": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-f08LT0HSa0WYU+4Jz/tbm1TQ9Fcf2k+H6dPPYv0J1sZmX6hMgCEmNiUdUFLQFvszoXx2XrRi1/hIFjbz2e69Yg==", - "license": "MIT", - "dependencies": { - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/shape": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-RyjInLCNe+nI/ulKea0ZLHphXQDiDqYazS25SRn18g8Hoa5qGNaY5oOBncDXUYn3jm5oI5kFc9oif//kulkbjg==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/tab/-/tab-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-Vmjugm9TBF906pNE2kORSDcMUYXQXV+uspFdbyoSH3hVOTjX+Bw+ODL9agW+pDsJRqGMLO/BAoZ0YQDCrCNX/A==", - "license": "MIT", - "dependencies": { - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/tab-indicator": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-bar": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-qLTxl0SWwSpsWBV5o7fMO4HaA3NSCTroM+qkUJYNq7lumMXxax8XP6+GvgbXXfsF1K6VqwSPJHnFt5g1kvtBOA==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/density": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/tab": "14.0.0-canary.53b3cad2f.0", - "@material/tab-indicator": "14.0.0-canary.53b3cad2f.0", - "@material/tab-scroller": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-indicator": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-CMh5MuQamk10oYs0NpQwJ+JLPcY+WftU1b2NpAxbke+6yaV0XrcEkymSfHDkMB5itDvtpXR4fe2Yw9wO8gvcgg==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tab-scroller": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-eJJWfNDSdjrRVNHkSecblN26PtM8rTeK2FqcZh3iCYRZ74ywhKmHF+elrM2KRH8ez+u/YcZoQacgS8rX3v6ygw==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/dom": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/tab": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/theme": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-S06XAevDCDWMe+GgsEpITMS07imUidzadNaTbJsqssFajBLr53QWVZsG84BpjXKXoYvyEJvb0hX5U0lq6ip9UQ==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/tokens": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-myHFB7vac8zErA3qgkqmV+kpE+i9JEwc/6Yf0MOumDSpylJGw28QikpNC6eAVBK2EmPQTaFn20mqUxyud8dGqw==", - "license": "MIT", - "dependencies": { - "@material/elevation": "14.0.0-canary.53b3cad2f.0" - } - }, - "node_modules/@material/top-app-bar": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-9vPLLxUbNrWNCPGHoIeIUtyXWQUNh+yQwnkTYVkVAVEb1CsWb2D+/NefytfvyFtXWBFQLybAeG5RH0ZqdcgQBQ==", - "license": "MIT", - "dependencies": { - "@material/animation": "14.0.0-canary.53b3cad2f.0", - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/elevation": "14.0.0-canary.53b3cad2f.0", - "@material/ripple": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "@material/shape": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "@material/typography": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/touch-target": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-d83e5vbqoLyL542yOTTp4TLVltddWiqbI/j1w/D9ipE30YKfe2EDN+CNJc32Zufh5IUfK41DsZdrN8fI9cL99A==", - "license": "MIT", - "dependencies": { - "@material/base": "14.0.0-canary.53b3cad2f.0", - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/rtl": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/typography": { - "version": "14.0.0-canary.53b3cad2f.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.53b3cad2f.0.tgz", - "integrity": "sha512-9J0k2fq7uyHsRzRqJDJLGmg3YzRpfRPtFDVeUH/xBcYoqpZE7wYw5Mb7s/l8eP626EtR7HhXhSPjvRTLA6NIJg==", - "license": "MIT", - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", - "@material/theme": "14.0.0-canary.53b3cad2f.0", - "tslib": "^2.1.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3030,6 +2063,39 @@ "node": ">= 8" } }, + "node_modules/@omicronenergy/oscd-material-web-base": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@omicronenergy/oscd-material-web-base/-/oscd-material-web-base-2.4.1.tgz", + "integrity": "sha512-hL+Vg3TYyZqnha+7NLdX1Rqvl9a7jyx9tt54YD3viZbJRbGggqUeQBwNkvpAA94958nhcjszvY+T/LjtplsO+Q==", + "license": "Apache-2.0", + "workspaces": [ + "catalog" + ], + "dependencies": { + "@open-wc/scoped-elements": "^3.0.6", + "lit": "^3.3.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@omicronenergy/oscd-ui": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@omicronenergy/oscd-ui/-/oscd-ui-0.0.11.tgz", + "integrity": "sha512-ov96xK+pKvjf040Fmp7vUXZu+TRhBcHjIyCNq4WvC+VoPCVopIGC68ev0AuuRuqnrxl/goPvuJUtTylcVhIOzg==", + "license": "Apache-2.0", + "dependencies": { + "@omicronenergy/oscd-material-web-base": "^2.4.0", + "@open-wc/scoped-elements": "^3.0.5", + "@webcomponents/scoped-custom-element-registry": "^0.0.10", + "lit": "^3.3.0", + "tslib": "^2.8.1" + } + }, + "node_modules/@omicronenergy/oscd-ui/node_modules/@webcomponents/scoped-custom-element-registry": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.10.tgz", + "integrity": "sha512-wP4LF28aysE2Pq3NQRNQxko7Q0vOOwcoOSMg8FFI4S6z76UuXkYIc5ndC31dJMwso1/vSteL75LW2CEKedAJbA==", + "license": "BSD-3-Clause" + }, "node_modules/@open-wc/building-rollup": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@open-wc/building-rollup/-/building-rollup-2.2.3.tgz", @@ -3177,9 +2243,10 @@ "dev": true }, "node_modules/@open-wc/dedupe-mixin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.4.0.tgz", - "integrity": "sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-2.0.1.tgz", + "integrity": "sha512-+R4VxvceUxHAUJXJQipkkoV9fy10vNo+OnUnGKZnVmcwxMl460KLzytnUM4S35SI073R0yZQp9ra0MbPUwVcEA==", + "license": "MIT" }, "node_modules/@open-wc/eslint-config": { "version": "8.0.2", @@ -3206,12 +2273,12 @@ } }, "node_modules/@open-wc/scoped-elements": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-3.0.5.tgz", - "integrity": "sha512-q4U+hFTQQRyorJILOpmBm6PY2hgjCnQe214nXJNjbJMQ9EvT55oyZ7C8BY5aFYJkytUyBoawlMpZt4F2xjdzHw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-3.0.6.tgz", + "integrity": "sha512-w1ayJaUUmBw8tALtqQ6cBueld+op+bufujzbrOdH0uCTXnSQkONYZzOH+9jyQ8auVgKLqcxZ8oU6SzfqQhQkPg==", "license": "MIT", "dependencies": { - "@open-wc/dedupe-mixin": "^1.4.0", + "@open-wc/dedupe-mixin": "^2.0.0", "lit": "^3.0.0" } }, @@ -3253,49 +2320,6 @@ "lit-html": "^2.0.0 || ^3.0.0" } }, - "node_modules/@openenergytools/open-scd-core": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@openenergytools/open-scd-core/-/open-scd-core-0.0.5.tgz", - "integrity": "sha512-jkZH5zQi87bhyeo4oDFTwr6hM0F1oEGT58R/Tq4ii0FJHE5SWinraoufwaClWE+U2DaBuj440tIssCZTY9cw3A==", - "license": "Apache-2.0", - "dependencies": { - "@lit/localize": "^0.11.4", - "@material/mwc-button": "^0.27.0", - "@material/mwc-dialog": "^0.27.0", - "@material/mwc-drawer": "^0.27.0", - "@material/mwc-icon": "^0.27.0", - "@material/mwc-icon-button": "^0.27.0", - "@material/mwc-list": "^0.27.0", - "@material/mwc-tab-bar": "^0.27.0", - "@material/mwc-top-app-bar-fixed": "^0.27.0", - "@openenergytools/xml-lib": "1.2.2", - "ace-builds": "1.36.3", - "ace-custom-element": "1.6.5", - "lit": "2.4.0" - } - }, - "node_modules/@openenergytools/open-scd-core/node_modules/lit": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.4.0.tgz", - "integrity": "sha512-fdgzxEtLrZFQU/BqTtxFQCLwlZd9bdat+ltzSFjvWkZrs7eBmeX0L5MHUMb3kYIkuS8Xlfnii/iI5klirF8/Xg==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.4.0", - "lit-element": "^3.2.0", - "lit-html": "^2.4.0" - } - }, - "node_modules/@openenergytools/open-scd-core/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, "node_modules/@openenergytools/tree-grid": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@openenergytools/tree-grid/-/tree-grid-1.0.1.tgz", @@ -3324,42 +2348,10 @@ "tslib": "^2.4.0" } }, - "node_modules/@openenergytools/xml-lib": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@openenergytools/xml-lib/-/xml-lib-1.2.2.tgz", - "integrity": "sha512-ZaxaEM8/xDojPQVbz1pJSDjEQO+V4m29DT1plAmYW/HDCTnnjKjF1bZvwTlfSaqxlLsswPkUdngOxX0iNis04Q==", - "license": "Apache-2.0", - "dependencies": { - "fast-check": "^3.22.0", - "lit": "^2.2.7" - } - }, - "node_modules/@openenergytools/xml-lib/node_modules/lit": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", - "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@openenergytools/xml-lib/node_modules/lit-element": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", - "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, "node_modules/@openscd/oscd-api": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@openscd/oscd-api/-/oscd-api-0.1.5.tgz", - "integrity": "sha512-SPm79bIqhSSxYMfnHIIwfuNpQa+UyJPY4Gxl6MVjHLY1jOkhevL+k/FfI4g08v3RdMG/+2MYu6ZxpB4zuQU5ZQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@openscd/oscd-api/-/oscd-api-0.1.6.tgz", + "integrity": "sha512-AqoHwQPsyiKxR8OVV3nOGgMMeiXgt2WAODZVcW0zLy7pLcZAROVzbvindiX3s09FuEOFY7UMyozmDmk1UXZJHg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.1" @@ -3374,6 +2366,15 @@ "@openscd/oscd-api": "0.1.5" } }, + "node_modules/@openscd/scl-lib/node_modules/@openscd/oscd-api": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@openscd/oscd-api/-/oscd-api-0.1.5.tgz", + "integrity": "sha512-SPm79bIqhSSxYMfnHIIwfuNpQa+UyJPY4Gxl6MVjHLY1jOkhevL+k/FfI4g08v3RdMG/+2MYu6ZxpB4zuQU5ZQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.1" + } + }, "node_modules/@puppeteer/browsers": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", @@ -3916,20 +2917,6 @@ "win32" ] }, - "node_modules/@scopedelement/material-web": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@scopedelement/material-web/-/material-web-3.8.0.tgz", - "integrity": "sha512-YnazNFFX2LO6NubdE6Vg4pYXJRukXdbbDUEpOUo3tnN8b0/Uscl2xUjz4Afuk8ruisGEsWLBRCCIY8soIL+8LQ==", - "license": "Apache-2.0", - "workspaces": [ - "catalog" - ], - "dependencies": { - "@open-wc/scoped-elements": "^3.0.5", - "lit": "^3.0.0", - "tslib": "^2.4.0" - } - }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -5535,18 +4522,6 @@ "node": ">= 0.6" } }, - "node_modules/ace-builds": { - "version": "1.36.3", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.36.3.tgz", - "integrity": "sha512-YcdwV2IIaJSfjkWAR1NEYN5IxBiXefTgwXsJ//UlaFrjXDX5hQpvPFvEePHz2ZBUfvO54RjHeRUQGX8MS5HaMQ==", - "license": "BSD-3-Clause" - }, - "node_modules/ace-custom-element": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", - "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==", - "license": "Apache-2.0" - }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -6058,12 +5033,6 @@ "node": ">=8" } }, - "node_modules/blocking-elements": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", - "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==", - "license": "Apache-2.0" - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -8438,28 +7407,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-check": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", - "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT", - "dependencies": { - "pure-rand": "^6.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -10817,40 +9764,40 @@ } }, "node_modules/lit": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", - "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", "license": "BSD-3-Clause", "dependencies": { - "@lit/reactive-element": "^2.0.4", - "lit-element": "^4.1.0", - "lit-html": "^3.2.0" + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" } }, "node_modules/lit-element": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", - "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0", - "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.2.0" + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" } }, "node_modules/lit-element/node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0" + "@lit-labs/ssr-dom-shim": "^1.5.0" } }, "node_modules/lit-element/node_modules/lit-html": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -10860,24 +9807,25 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" } }, "node_modules/lit/node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", "license": "BSD-3-Clause", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.2.0" + "@lit-labs/ssr-dom-shim": "^1.5.0" } }, "node_modules/lit/node_modules/lit-html": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", - "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", "license": "BSD-3-Clause", "dependencies": { "@types/trusted-types": "^2.0.2" @@ -12360,22 +11308,6 @@ } } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", @@ -14513,12 +13445,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wicg-inert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.3.tgz", - "integrity": "sha512-5L0PKK7iP+0Q/jv2ccgmkz/pfXbumZtlEyWS/xnX+L+Og3f7WjL4+iEs18k4IuldOX3PgGpza3qGndL9xUBjCQ==", - "license": "W3C-20150513" - }, "node_modules/wordwrapjs": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", diff --git a/package.json b/package.json index 4886eeb..667155f 100644 --- a/package.json +++ b/package.json @@ -4,29 +4,38 @@ "license": "Apache-2.0", "author": "CoMPAS", "version": "0.0.0", + "type": "module", + "exports": { + ".": "./dist/scl-template-update.js" + }, + "files": [ + "dist/", + "!dist/**/*.spec.*", + "!dist/**/*.testfiles.*", + "!dist/__snapshots__" + ], "scripts": { "prepare": "npm run build", "lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore", "format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore", "test": "npm run compile && wtr --coverage", "test:watch": "npm run compile && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch --coverage\"", - "compile": "tsc", - "build": "rimraf dist && rollup -c rollup.config.js", + "compile": "rimraf dist && tsc", + "build": "npm run compile && rollup -c rollup.config.js", "start:build": "web-dev-server --root-dir dist --app-index index.html --open", "analyze": "cem analyze --litelement", "start": "npm run compile && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"", "deploy": "npm run build && gh-pages --dist dist --branch deploy" }, "dependencies": { - "@openenergytools/tree-grid": "1.0.1", - "@scopedelement/material-web": "^3.8.0", - "@openenergytools/open-scd-core": "0.0.5", + "@omicronenergy/oscd-ui": "^0.0.11", "@open-wc/scoped-elements": "^3.0.5", + "@openenergytools/tree-grid": "1.0.1", + "@openscd/oscd-api": "^0.1.6", "@openscd/scl-lib": "2.0.0", "lit": "^3.0.0" }, "devDependencies": { - "@rollup/plugin-typescript": "^11.1.2", "@babel/preset-env": "^7.16.4", "@custom-elements-manifest/analyzer": "^0.4.17", "@open-wc/building-rollup": "^2.0.2", @@ -34,12 +43,13 @@ "@open-wc/testing": "^4.0.0", "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-node-resolve": "^13.0.6", + "@rollup/plugin-typescript": "^11.1.2", + "@types/mocha": "^10.0.10", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", "@web/dev-server": "^0.4.6", - "@web/rollup-plugin-import-meta-assets": "^1.0.7", "@web/dev-server-polyfill": "^1.0.4", - "@types/mocha": "^10.0.10", + "@web/rollup-plugin-import-meta-assets": "^1.0.7", "@web/test-runner": "^0.19.0", "babel-plugin-template-html-minifier": "^4.1.0", "concurrently": "^5.3.0", diff --git a/rollup.config.js b/rollup.config.js index 7297338..94b0040 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -11,5 +11,9 @@ export default { dir: 'dist', }, preserveEntrySignatures: 'strict', - plugins: [nodeResolve(), typescript(), importMetaAssets()], + plugins: [ + nodeResolve(), + typescript(), + importMetaAssets() + ], }; diff --git a/scl-template-update.spec.ts b/scl-template-update.spec.ts index e77848f..a1005c1 100644 --- a/scl-template-update.spec.ts +++ b/scl-template-update.spec.ts @@ -1,11 +1,8 @@ -/* eslint-disable import/no-duplicates */ /* eslint-disable no-unused-expressions */ import { fixture, expect, html, waitUntil } from '@open-wc/testing'; import { restore, SinonSpy, spy } from 'sinon'; -import '@openenergytools/open-scd-core/open-scd.js'; -import { OpenSCD } from '@openenergytools/open-scd-core/open-scd.js'; -import { Insert, newOpenEvent, Remove } from '@openenergytools/open-scd-core'; +import { Insert, Remove } from '@openscd/oscd-api'; import { extension, @@ -15,43 +12,24 @@ import { nsdSpeced, customDataObjectInvalidCDC, } from './scl-template-update.testfiles.js'; -import './scl-template-update.js'; import NsdTemplateUpdated from './scl-template-update.js'; -const plugins = { - editor: [ - { - name: 'Update Template', - translations: { - de: 'Update Template', - }, - icon: 'edit', - active: true, - requireDoc: false, - src: '/dist/scl-template-update.js', - }, - ], -}; +customElements.define('scl-template-update', NsdTemplateUpdated); describe('NsdTemplateUpdater', () => { - let openSCD: OpenSCD; let element: NsdTemplateUpdated; beforeEach(async () => { - openSCD = await fixture( - html`` + element = await fixture( + html`` ); - await new Promise(res => { - setTimeout(res, 200); - }); - element = openSCD.shadowRoot?.querySelector( - 'oscd-p837a28e71799d7bc' - ) as NsdTemplateUpdated; }); it('shows notification without loaded doc', () => { expect(element.shadowRoot?.querySelector('h1')).to.exist; expect(element.shadowRoot?.querySelector('tree-grid')).to.not.exist; - expect(element.shadowRoot?.querySelector('md-fab')).to.not.exist; + expect( + element.shadowRoot?.querySelector('oscd-fab[data-testid="update-fab"]') + ).to.not.exist; }); describe('given a nsd specced document', () => { @@ -59,16 +37,19 @@ describe('NsdTemplateUpdater', () => { afterEach(restore); beforeEach(async () => { listener = spy(); - openSCD.addEventListener('oscd-edit-v2', listener); - const doc = new DOMParser().parseFromString(nsdSpeced, 'application/xml'); - openSCD.dispatchEvent(newOpenEvent(doc, 'SomeDoc')); + element.addEventListener('oscd-edit-v2', listener); + element.doc = new DOMParser().parseFromString( + nsdSpeced, + 'application/xml' + ); + await element.updateComplete; await new Promise(res => { setTimeout(res, 200); }); }); it('displays an action button', () => - expect(element.shadowRoot?.querySelector('md-fab')).to.exist); + expect(element.shadowRoot?.querySelector('oscd-fab')).to.exist); it('updates MMXU on action button click', async () => { // Test the default 'update' behavior @@ -85,7 +66,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = mmxuSelection; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.calledOnce; @@ -111,7 +96,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = mmxuSelection; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; const inserts = listener.args[0][0].detail.edit; @@ -157,7 +146,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = lln0Selection; // change selection await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await new Promise(res => { setTimeout(res, 200); }); @@ -179,7 +172,11 @@ describe('NsdTemplateUpdater', () => { element.onLNodeTypeSelect(event); await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await new Promise(res => { setTimeout(res, 200); }); @@ -206,9 +203,12 @@ describe('NsdTemplateUpdater', () => { afterEach(restore); beforeEach(async () => { listener = spy(); - openSCD.addEventListener('oscd-edit-v2', listener); - const doc = new DOMParser().parseFromString(extension, 'application/xml'); - openSCD.dispatchEvent(newOpenEvent(doc, 'SomeDoc')); + element.addEventListener('oscd-edit-v2', listener); + element.doc = new DOMParser().parseFromString( + extension, + 'application/xml' + ); + await element.updateComplete; await new Promise(res => { setTimeout(res, 200); }); @@ -256,7 +256,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = mmxuExceptSelection; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; ( @@ -282,7 +286,11 @@ describe('NsdTemplateUpdater', () => { element.lnodeTypeDesc.value = 'New Description'; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.called; }); @@ -302,13 +310,21 @@ describe('NsdTemplateUpdater', () => { await element.updateComplete; // First update - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.calledOnce; // Second update with same selection should not delete the LNodeType listener.resetHistory(); - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; // Verify LNodeType still exists in document @@ -345,7 +361,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = selectionWithoutA; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.called; @@ -383,7 +403,11 @@ describe('NsdTemplateUpdater', () => { element.lnodeTypeDesc.value = 'Updated with new DOs'; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.called; @@ -409,7 +433,11 @@ describe('NsdTemplateUpdater', () => { // First add a description element.lnodeTypeDesc.value = 'Test Description'; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; listener.resetHistory(); @@ -417,7 +445,11 @@ describe('NsdTemplateUpdater', () => { // Now clear the description element.lnodeTypeDesc.value = ''; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(listener).to.have.been.called; @@ -433,16 +465,15 @@ describe('NsdTemplateUpdater', () => { describe('given a document with unsupported CDC', () => { afterEach(restore); beforeEach(async () => { - openSCD.addEventListener('oscd-edit-v2', () => {}); - const doc = new DOMParser().parseFromString( + element.addEventListener('oscd-edit-v2', () => {}); + element.doc = new DOMParser().parseFromString( customDataObjectInvalidCDC, 'application/xml' ); - openSCD.dispatchEvent(newOpenEvent(doc, 'SomeDoc')); + await element.updateComplete; await new Promise(res => { setTimeout(res, 200); }); - await element.updateComplete; const treeUI = element.shadowRoot?.querySelector('tree-grid') as any; if (treeUI) { treeUI.tree = {}; @@ -462,7 +493,11 @@ describe('NsdTemplateUpdater', () => { element.treeUI.selection = mmxuSelection; await element.updateComplete; - (element.shadowRoot?.querySelector('md-fab') as HTMLElement).click(); + ( + element.shadowRoot?.querySelector( + 'oscd-fab[data-testid="update-fab"]' + ) as HTMLElement + ).click(); await element.updateComplete; expect(element.warningDialog?.getAttribute('open')).to.not.be.null; diff --git a/scl-template-update.ts b/scl-template-update.ts index 808e278..d6bb7bf 100644 --- a/scl-template-update.ts +++ b/scl-template-update.ts @@ -4,7 +4,8 @@ import { state, query, property } from 'lit/decorators.js'; import { ScopedElementsMixin } from '@open-wc/scoped-elements/lit-element.js'; -import { newEditEvent, Edit } from '@openenergytools/open-scd-core'; +import { newEditEventV2 } from '@openscd/oscd-api/utils.js'; +import { EditV2 } from '@openscd/oscd-api'; import { insertSelectedLNodeType, @@ -17,16 +18,13 @@ import { import { TreeGrid, TreeSelection } from '@openenergytools/tree-grid'; -import { MdFilledButton } from '@scopedelement/material-web/button/MdFilledButton.js'; -import { MdOutlinedButton } from '@scopedelement/material-web/button/MdOutlinedButton.js'; -import { MdDialog } from '@scopedelement/material-web/dialog/MdDialog.js'; -import { MdFab } from '@scopedelement/material-web/fab/MdFab.js'; -import { MdIcon } from '@scopedelement/material-web/icon/MdIcon.js'; -import { MdFilledSelect } from '@scopedelement/material-web/select/MdFilledSelect.js'; -import { MdSelectOption } from '@scopedelement/material-web/select/MdSelectOption.js'; -import { MdCircularProgress } from '@scopedelement/material-web/progress/circular-progress.js'; -import { MdOutlinedTextField } from '@scopedelement/material-web/textfield/MdOutlinedTextField.js'; -import { MdIconButton } from '@scopedelement/material-web/iconbutton/MdIconButton.js'; +import { OscdOutlinedButton } from '@omicronenergy/oscd-ui/button/OscdOutlinedButton.js'; +import { OscdDialog } from '@omicronenergy/oscd-ui/dialog/OscdDialog.js'; +import { OscdFab } from '@omicronenergy/oscd-ui/fab/OscdFab.js'; +import { OscdIcon } from '@omicronenergy/oscd-ui/icon/OscdIcon.js'; +import { OscdCircularProgress } from '@omicronenergy/oscd-ui/progress/OscdCircularProgress.js'; +import { OscdOutlinedTextField } from '@omicronenergy/oscd-ui/textfield/OscdOutlinedTextField.js'; +import { OscdIconButton } from '@omicronenergy/oscd-ui/iconbutton/OscdIconButton.js'; import { CdcChildren } from '@openscd/scl-lib/dist/tDataTypeTemplates/nsdToJson.js'; import { AddDataObjectDialog } from './components/add-data-object-dialog.js'; @@ -51,16 +49,13 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( ) { static scopedElements = { 'tree-grid': TreeGrid, - 'md-filled-select': MdFilledSelect, - 'md-select-option': MdSelectOption, - 'md-fab': MdFab, - 'md-icon': MdIcon, - 'md-dialog': MdDialog, - 'md-filled-button': MdFilledButton, - 'md-outlined-button': MdOutlinedButton, - 'md-circular-progress': MdCircularProgress, - 'md-outlined-text-field': MdOutlinedTextField, - 'md-icon-button': MdIconButton, + 'oscd-fab': OscdFab, + 'oscd-icon': OscdIcon, + 'oscd-dialog': OscdDialog, + 'oscd-outlined-button': OscdOutlinedButton, + 'oscd-circular-progress': OscdCircularProgress, + 'oscd-outlined-text-field': OscdOutlinedTextField, + 'oscd-icon-button': OscdIconButton, 'add-data-object-dialog': AddDataObjectDialog, 'delete-dialog': DeleteDialog, 'lnodetype-sidebar': LNodeTypeSidebar, @@ -76,14 +71,11 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( @query('tree-grid') treeUI!: TreeGrid; - @query('md-filled-select') - lNodeTypeUI?: MdFilledSelect; - @query('#dialog-warning') - warningDialog?: MdDialog; + warningDialog?: OscdDialog; @query('#dialog-choice') - choiceDialog?: MdDialog; + choiceDialog?: OscdDialog; @query('delete-dialog') deleteDialog!: DeleteDialog; @@ -98,7 +90,7 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( settingsDialog!: SettingsDialog; @query('#lnodetype-desc') - lnodeTypeDesc!: MdOutlinedTextField; + lnodeTypeDesc!: OscdOutlinedTextField; @state() lNodeTypes: Element[] = []; @@ -174,7 +166,6 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( this.selectedLNodeType = undefined; this.lNodeTypeSelection = undefined; this.nsdSelection = undefined; - this.lNodeTypeUI?.reset(); this.disableAddDataObjectButton = true; this.lNodeTypeDescription = ''; } @@ -264,7 +255,7 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( if (allEdits.length > 0) { this.dispatchEvent( - newEditEvent(allEdits, { + newEditEventV2(allEdits, { title: `Update ${lnID}`, }) ); @@ -273,7 +264,7 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( this.showSuccessFeedback(lnID, 'update'); } else { // Swap mode: Insert new, then remove old with squash - this.dispatchEvent(newEditEvent(inserts)); + this.dispatchEvent(newEditEventV2(inserts)); await this.updateComplete; const remove = removeDataType( @@ -281,17 +272,13 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( { force: true } ); this.dispatchEvent( - newEditEvent(remove, { squash: true, title: `Update ${lnID}` }) + newEditEventV2(remove, { squash: true, title: `Update ${lnID}` }) ); const updatedLNodeType = inserts.find( insert => (insert.node as Element).tagName === 'LNodeType' )?.node as Element; - if (updatedLNodeType && this.lNodeTypeUI) { - this.lNodeTypeUI.value = updatedLNodeType.getAttribute('id') ?? ''; - } - const updatedID = updatedLNodeType?.getAttribute('id') ?? lnID; this.showSuccessFeedback(updatedID, 'swap'); } @@ -311,11 +298,11 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( } private buildUpdateEdits( - inserts: Edit[], + inserts: EditV2[], currentLNodeType: Element, lnID: string, desc: string - ): Edit[] { + ): EditV2[] { const lNodeTypeInsert = inserts.find( insert => 'node' in insert && (insert.node as Element).tagName === 'LNodeType' @@ -371,7 +358,7 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( private updateLNodeTypeDescription(desc: string): void { this.lNodeTypeDescription = desc; this.dispatchEvent( - newEditEvent([ + newEditEventV2([ { element: this.selectedLNodeType!, attributes: { desc: desc || null }, @@ -395,7 +382,7 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( { force: true } ); - this.dispatchEvent(newEditEvent(remove, { title: `Delete ${lnID}` })); + this.dispatchEvent(newEditEventV2(remove, { title: `Delete ${lnID}` })); this.resetUI(true); this.lNodeTypes = getLNodeTypes(this.doc); @@ -528,86 +515,87 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( // eslint-disable-next-line class-methods-use-this renderWarning(): TemplateResult { - return html` + return html`
Warning
${this.warningMsg}
- CloseClose
-
`; + `; } renderChoice(): TemplateResult { - return html` + return html`
Warning: Data loss
The logical node has additional data object not defined in the NSD. Updating will lead to loss of data! Do you still want to proceed?
- CancelCancel - ProceedProceed
-
`; + `; } renderFab(): TemplateResult { const disabled = !this.treeUI?.tree || Object.keys(this.treeUI?.tree).length === 0; return html`
- this.settingsDialog.show()}> - settings this.settingsDialog.show()}> + settings + >
`; } renderLNodeTypeControls(): TemplateResult { return html`
- - add + add Add Data Object - - + this.deleteDialog.show()} class="button-delete" > - delete + delete Delete LNode Type - - + + > ${this.loading - ? html`` + ? html`` : ``}
`; } @@ -680,27 +668,27 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( line-height: 48px; } - md-outlined-button { + oscd-outlined-button { text-transform: uppercase; } - md-icon { + oscd-icon { font-family: var(--oscd-theme-icon-font, 'Material Symbols Outlined'); } .button.close { - --md-outlined-button-label-text-color: var(--oscd-accent-red); - --md-outlined-button-hover-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-hover-label-text-color: var(--oscd-accent-red); } .button-delete { - --md-outlined-button-label-text-color: var(--oscd-accent-red); - --md-outlined-button-hover-label-text-color: var(--oscd-accent-red); - --md-outlined-button-focus-label-text-color: var(--oscd-accent-red); - --md-outlined-button-active-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-hover-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-focus-label-text-color: var(--oscd-accent-red); + --oscd-outlined-button-active-label-text-color: var(--oscd-accent-red); } - .button-delete md-icon { + .button-delete oscd-icon { color: var(--oscd-accent-red); } diff --git a/tsconfig.json b/tsconfig.json index 5582ae5..8370c1d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "es2018", + "target": "es2021", "module": "esnext", - "moduleResolution": "node", + "moduleResolution": "bundler", "noEmitOnError": true, "lib": ["es2017", "dom"], "strict": true, From daade82de462e5131fac290095c0f9ec918728bb Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Tue, 31 Mar 2026 08:46:24 +0200 Subject: [PATCH 2/4] fix: re-add removed package and change build script --- package-lock.json | 1194 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 +- 2 files changed, 1197 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0309c55..0b9d3cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@open-wc/building-rollup": "^2.0.2", "@open-wc/eslint-config": "^8.0.2", "@open-wc/testing": "^4.0.0", + "@openenergytools/open-scd-core": "^0.0.5", "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-node-resolve": "^13.0.6", "@rollup/plugin-typescript": "^11.1.2", @@ -2028,6 +2029,1050 @@ "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", "license": "BSD-3-Clause" }, + "node_modules/@lit/localize": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@lit/localize/-/localize-0.11.4.tgz", + "integrity": "sha512-RRIwIX2tAm3+DuEndoXSJrFjGrAK5cb5IXo5K6jcJ6sbgD829B8rSqHC5MaKVUmXTVLIR1bk5IZOZDf9wFereA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.4.0", + "lit": "^2.3.0" + } + }, + "node_modules/@lit/localize/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@lit/localize/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@material/animation": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-GBuR4VmcTQW1D0lPXEosf5Giho72LLbyGIydWGtaEUtLJoive/D9kFkwTN4Fsyt9Kkl7hbhs35vrNe6QkAH4/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-UJKbXwZtkrA3sfQDmj8Zbw1Q3Tqtl6KdfVFws95Yf7TCUgTFzbZI/FSx1w7dVugQPOEnIBuZnzqZam/MtHkx4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-IPBAByKpQjrWNVmAWx5VCTCLnOw4ymbLsbHmBkLiDgcLPs1EtwYnKKIwQ+/t3bV02OShUdMiyboL8V/C0gMS1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/density": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/shape": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/tokens": "14.0.0-canary.53b3cad2f.0", + "@material/touch-target": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-Eh/vZ3vVyqtpylg5Ci33qlgtToS4H1/ppd450Ib3tcdISIoodgijYY0w4XsRvrnZgbI/h/1STFdLxdzS0UNuFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-yiG2nlVKTW0Ro3CF8Z/MVpTwSyG/8Kio3AaTUbeQdbjt5r692s4x5Yhd8m1IjEQKUeulY4CndvIbCUwZ8/G2PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/button": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/icon-button": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/shape": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/tokens": "14.0.0-canary.53b3cad2f.0", + "@material/touch-target": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-aR+rfncF6oi2ivdOlKSJI4UXwNzWV5rXM88MLDoSJF1D7lXxhAKhge+tMUBodWGV/q0+FnXLuVAa0WYTrKjo+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-MXzRGq7NoONgbHa+AhAu4HvOUA9V37nSsY4g4Alita08UqRAvvFFr4K1CF9GI2K9pLCpyQv1UbN0Lw5b78HrVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/list": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/shape": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-3h+EkR588RMZ5TSNQ4UeXD1FOBnL3ABQix0DQIGwtNJCqSMoPndT/oJEFvwQbTkZNDbFIKN9p1Q7/KuFPVY8Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-fn7Af3PRyARtNeYqtjxXmE3Y/dCpnpQVWWys57MqiGR/nvc6qpgOfJ6rOdcu/MrOysOE/oebTUDmDnTmwpe9Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-exPX5VrjQimipBwgcFDGRiEE783sOBgpkFui59A6i6iGvS2UrLHlYY2E65fyyyQnD1f/rv4Po1OOnCesE1kulg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0" + } + }, + "node_modules/@material/icon-button": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-BFdj3CP0JXHC/F2bDmpmzWhum4fkzIDgCCavvnpE/KcCbr0AaoSULRde+LtqvbdLIYW20cXhvjinIOlRhSOshA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/density": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/touch-target": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-mkMpltSKAYLBtFnTTCk/mQIDzwxF/VLh1gh59ehOtmRXt7FvTz83RoAa4tqe53hpVrbX4HoLDBu+vILhq/wkjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/density": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/shape": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.27.0.tgz", + "integrity": "sha512-oCWWtjbyQ52AaUbzINLGBKScIPyqhps2Y7c8t6Gu6fcFeDxhKXMV1Cqvtj/OMhtAt53XjHfD2XruWwYv3cYYUA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/base": "=14.0.0-canary.53b3cad2f.0", + "@material/dom": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-base/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-base/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.27.0.tgz", + "integrity": "sha512-t5m2zfE93RNKHMjdsU67X6csFzuSG08VJKKvXVQ+BriGE3xBgzY5nZdmZXomFpaWjDENPAlyS4ppCFm6o+DILw==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-icon": "^0.27.0", + "@material/mwc-ripple": "^0.27.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-button/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.27.0.tgz", + "integrity": "sha512-EY0iYZLwo8qaqMwR5da4fdn0xI0BZNAvKTcwoubYWpDDHlGxDcqwvjp/40ChGo3Q/zv8/4/A0Qp7cwapI82EkA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/mwc-ripple": "^0.27.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-checkbox/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-dialog": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.27.0.tgz", + "integrity": "sha512-rkOEmCroVs0wBQbj87vH79SvSHHZ61QRCTUYsU2rHGZCvdzlmvHjWdoyKjJER6WwwM3rrT8xthfecmjICI28CA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/dialog": "=14.0.0-canary.53b3cad2f.0", + "@material/dom": "=14.0.0-canary.53b3cad2f.0", + "@material/mwc-base": "^0.27.0", + "@material/mwc-button": "^0.27.0", + "blocking-elements": "^0.1.0", + "lit": "^2.0.0", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-dialog/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-dialog/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-drawer": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.27.0.tgz", + "integrity": "sha512-dy/uwt+aI5aiUDqFcT6Z4GhGmLZR7fu3HMkfqtQDwoJShxnf5hHwk18fiD1VHHCDf9CZ5wjl7ug4fjpcs9r18A==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/drawer": "=14.0.0-canary.53b3cad2f.0", + "@material/mwc-base": "^0.27.0", + "blocking-elements": "^0.1.0", + "lit": "^2.0.0", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-drawer/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-drawer/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.27.0.tgz", + "integrity": "sha512-Sul44I37M9Ewynn0A9DjkEBrmll2VtNbth6Pxj7I1A/EAwEfaCrPvryyGqfIu1T2hTsRcaojzQx6QjF+B5QW9A==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.27.0.tgz", + "integrity": "sha512-wReiPa1UkLaCSPtpkAs1OGKEBtvqPnz9kzuY+RvN5ZQnpo3Uh7n3plHV4y/stsUBfrWtBCcOgYnCdNRaR/r2nQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-ripple": "^0.27.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-icon-button/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-icon/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-icon/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.27.0.tgz", + "integrity": "sha512-oAhNQsBuAOgF3ENOIY8PeWjXsl35HoYaUkl0ixBQk8jJP2HIEf+MdbS5688y/UXxFbSjr0m//LfwR5gauEashg==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/base": "=14.0.0-canary.53b3cad2f.0", + "@material/dom": "=14.0.0-canary.53b3cad2f.0", + "@material/list": "=14.0.0-canary.53b3cad2f.0", + "@material/mwc-base": "^0.27.0", + "@material/mwc-checkbox": "^0.27.0", + "@material/mwc-radio": "^0.27.0", + "@material/mwc-ripple": "^0.27.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-list/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.27.0.tgz", + "integrity": "sha512-+rSO9a373BgyMgQOM0Z8vVkuieobBylPJ8qpltytM+yGPj8+n+MtwRZyg+ry3WwEjYYDMP6GxZPHwLgWs6lMpQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/mwc-ripple": "^0.27.0", + "@material/radio": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-radio/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.27.0.tgz", + "integrity": "sha512-by0O8d8g3Rd96/sUB8hxy6MrDx1QTstqOsA64vqypWd526hMTBGRik08jTNap5sVIyrN9Vq17jb4NJLWQLnNHQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/dom": "=14.0.0-canary.53b3cad2f.0", + "@material/mwc-base": "^0.27.0", + "@material/ripple": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-ripple/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.27.0.tgz", + "integrity": "sha512-BhX6hZYjPL+d3Gcl6rVHNPiEAudgMHA+7mHo2keqbIiFRLKa2CU+omHZO/82+EBan/TPL6ZK39Oki8aIaAJcRQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/mwc-ripple": "^0.27.0", + "@material/mwc-tab-indicator": "^0.27.0", + "@material/tab": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-bar": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.27.0.tgz", + "integrity": "sha512-CqRZ38m8kOfSJo87Ek61eubO8AGR10Dp12c3pCyyy6mtK/0FSY+rfcmnMPxEzkxREqUnQPgw9lhqmGZXBSqzZQ==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/mwc-tab": "^0.27.0", + "@material/mwc-tab-scroller": "^0.27.0", + "@material/tab": "=14.0.0-canary.53b3cad2f.0", + "@material/tab-bar": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-bar/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab-bar/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab-indicator": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.27.0.tgz", + "integrity": "sha512-bdE5mYP2ze/8d8cGTTJUS0+ByzEK5tmWsXfphFr/Dyy9b+gOnIOt1iX8tmKTOpbYKsV43LxtSkumhTTPDXEJLg==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/tab-indicator": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-indicator/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab-indicator/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab-scroller": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.27.0.tgz", + "integrity": "sha512-WL/CYVx1cHjC1a/STIB/BaBfxGz3Rz4szNNX35FkYzm6GSGxUNkXZfKOAK7R8RdZOAETa8Gy5tTEhKZKKJ/aUA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/dom": "=14.0.0-canary.53b3cad2f.0", + "@material/mwc-base": "^0.27.0", + "@material/tab-scroller": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-scroller/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab-scroller/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-tab/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-top-app-bar": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.27.0.tgz", + "integrity": "sha512-vHn10exeDhUVFpo4TgBsS8pta4AxZtjuuxrYFHMYxceGifEATvGbYoPyw1x7cCMcXMMIITElgfCURAbCmn3BgA==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.27.0", + "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar-fixed": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.27.0.tgz", + "integrity": "sha512-kU1RKmx8U7YCbsBuAXfNLtu+V/Jwos+o2mSY94tZpv36dIsvcsGQ4pB2zW0EaU8g9bQVdwLMVxj4oooxSmbZXw==", + "deprecated": "MWC beta is longer supported. Please upgrade to @material/web", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-top-app-bar": "^0.27.0", + "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar-fixed/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-top-app-bar-fixed/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-top-app-bar/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/mwc-top-app-bar/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@material/radio": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-V/AgWEOuHFoh9d4Gq1rqBZnKSGtMLQNh23Bwrv0c1FhPqFvUpwt9jR3SVwhJk5gvQQWGy9p3iiGc9QCJ+0+P8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/density": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/touch-target": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-6g2G62vd8DsMuIUSXlRrzb98qkZ4o8ZREknNwNP2zaLQEOkJ//4j9HaqDt98/3LIjUTY9UIVFTQENiMmlwKHYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-f08LT0HSa0WYU+4Jz/tbm1TQ9Fcf2k+H6dPPYv0J1sZmX6hMgCEmNiUdUFLQFvszoXx2XrRi1/hIFjbz2e69Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-RyjInLCNe+nI/ulKea0ZLHphXQDiDqYazS25SRn18g8Hoa5qGNaY5oOBncDXUYn3jm5oI5kFc9oif//kulkbjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-Vmjugm9TBF906pNE2kORSDcMUYXQXV+uspFdbyoSH3hVOTjX+Bw+ODL9agW+pDsJRqGMLO/BAoZ0YQDCrCNX/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/focus-ring": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/tab-indicator": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-qLTxl0SWwSpsWBV5o7fMO4HaA3NSCTroM+qkUJYNq7lumMXxax8XP6+GvgbXXfsF1K6VqwSPJHnFt5g1kvtBOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/density": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/tab": "14.0.0-canary.53b3cad2f.0", + "@material/tab-indicator": "14.0.0-canary.53b3cad2f.0", + "@material/tab-scroller": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-CMh5MuQamk10oYs0NpQwJ+JLPcY+WftU1b2NpAxbke+6yaV0XrcEkymSfHDkMB5itDvtpXR4fe2Yw9wO8gvcgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-eJJWfNDSdjrRVNHkSecblN26PtM8rTeK2FqcZh3iCYRZ74ywhKmHF+elrM2KRH8ez+u/YcZoQacgS8rX3v6ygw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/dom": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/tab": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-S06XAevDCDWMe+GgsEpITMS07imUidzadNaTbJsqssFajBLr53QWVZsG84BpjXKXoYvyEJvb0hX5U0lq6ip9UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-myHFB7vac8zErA3qgkqmV+kpE+i9JEwc/6Yf0MOumDSpylJGw28QikpNC6eAVBK2EmPQTaFn20mqUxyud8dGqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/elevation": "14.0.0-canary.53b3cad2f.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-9vPLLxUbNrWNCPGHoIeIUtyXWQUNh+yQwnkTYVkVAVEb1CsWb2D+/NefytfvyFtXWBFQLybAeG5RH0ZqdcgQBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.53b3cad2f.0", + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/elevation": "14.0.0-canary.53b3cad2f.0", + "@material/ripple": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "@material/shape": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "@material/typography": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-d83e5vbqoLyL542yOTTp4TLVltddWiqbI/j1w/D9ipE30YKfe2EDN+CNJc32Zufh5IUfK41DsZdrN8fI9cL99A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.53b3cad2f.0", + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/rtl": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "14.0.0-canary.53b3cad2f.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.53b3cad2f.0.tgz", + "integrity": "sha512-9J0k2fq7uyHsRzRqJDJLGmg3YzRpfRPtFDVeUH/xBcYoqpZE7wYw5Mb7s/l8eP626EtR7HhXhSPjvRTLA6NIJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.53b3cad2f.0", + "@material/theme": "14.0.0-canary.53b3cad2f.0", + "tslib": "^2.1.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2320,6 +3365,52 @@ "lit-html": "^2.0.0 || ^3.0.0" } }, + "node_modules/@openenergytools/open-scd-core": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@openenergytools/open-scd-core/-/open-scd-core-0.0.5.tgz", + "integrity": "sha512-jkZH5zQi87bhyeo4oDFTwr6hM0F1oEGT58R/Tq4ii0FJHE5SWinraoufwaClWE+U2DaBuj440tIssCZTY9cw3A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@lit/localize": "^0.11.4", + "@material/mwc-button": "^0.27.0", + "@material/mwc-dialog": "^0.27.0", + "@material/mwc-drawer": "^0.27.0", + "@material/mwc-icon": "^0.27.0", + "@material/mwc-icon-button": "^0.27.0", + "@material/mwc-list": "^0.27.0", + "@material/mwc-tab-bar": "^0.27.0", + "@material/mwc-top-app-bar-fixed": "^0.27.0", + "@openenergytools/xml-lib": "1.2.2", + "ace-builds": "1.36.3", + "ace-custom-element": "1.6.5", + "lit": "2.4.0" + } + }, + "node_modules/@openenergytools/open-scd-core/node_modules/lit": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.4.0.tgz", + "integrity": "sha512-fdgzxEtLrZFQU/BqTtxFQCLwlZd9bdat+ltzSFjvWkZrs7eBmeX0L5MHUMb3kYIkuS8Xlfnii/iI5klirF8/Xg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.4.0", + "lit-element": "^3.2.0", + "lit-html": "^2.4.0" + } + }, + "node_modules/@openenergytools/open-scd-core/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, "node_modules/@openenergytools/tree-grid": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@openenergytools/tree-grid/-/tree-grid-1.0.1.tgz", @@ -2348,6 +3439,41 @@ "tslib": "^2.4.0" } }, + "node_modules/@openenergytools/xml-lib": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@openenergytools/xml-lib/-/xml-lib-1.2.2.tgz", + "integrity": "sha512-ZaxaEM8/xDojPQVbz1pJSDjEQO+V4m29DT1plAmYW/HDCTnnjKjF1bZvwTlfSaqxlLsswPkUdngOxX0iNis04Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "fast-check": "^3.22.0", + "lit": "^2.2.7" + } + }, + "node_modules/@openenergytools/xml-lib/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/@openenergytools/xml-lib/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, "node_modules/@openscd/oscd-api": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@openscd/oscd-api/-/oscd-api-0.1.6.tgz", @@ -4522,6 +5648,20 @@ "node": ">= 0.6" } }, + "node_modules/ace-builds": { + "version": "1.36.3", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.36.3.tgz", + "integrity": "sha512-YcdwV2IIaJSfjkWAR1NEYN5IxBiXefTgwXsJ//UlaFrjXDX5hQpvPFvEePHz2ZBUfvO54RjHeRUQGX8MS5HaMQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ace-custom-element": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", + "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -5033,6 +6173,13 @@ "node": ">=8" } }, + "node_modules/blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -7407,6 +8554,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11308,6 +12478,23 @@ } } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", @@ -13445,6 +14632,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wicg-inert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.3.tgz", + "integrity": "sha512-5L0PKK7iP+0Q/jv2ccgmkz/pfXbumZtlEyWS/xnX+L+Og3f7WjL4+iEs18k4IuldOX3PgGpza3qGndL9xUBjCQ==", + "dev": true, + "license": "W3C-20150513" + }, "node_modules/wordwrapjs": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", diff --git a/package.json b/package.json index 667155f..7a539c3 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore", "test": "npm run compile && wtr --coverage", "test:watch": "npm run compile && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch --coverage\"", - "compile": "rimraf dist && tsc", - "build": "npm run compile && rollup -c rollup.config.js", + "compile": "tsc", + "build": "rimraf dist && npm run compile && rollup -c rollup.config.js", "start:build": "web-dev-server --root-dir dist --app-index index.html --open", "analyze": "cem analyze --litelement", "start": "npm run compile && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"", @@ -41,6 +41,7 @@ "@open-wc/building-rollup": "^2.0.2", "@open-wc/eslint-config": "^8.0.2", "@open-wc/testing": "^4.0.0", + "@openenergytools/open-scd-core": "^0.0.5", "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-node-resolve": "^13.0.6", "@rollup/plugin-typescript": "^11.1.2", From 87478c2c447a2dce93aaf4e8220c6d5c4e62a696 Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Tue, 31 Mar 2026 15:07:25 +0200 Subject: [PATCH 3/4] fix: avoid data loss when updating LNodeType --- foundation/utils.spec.ts | 82 ++++++++++++++++++++++++++++++++++++- foundation/utils.ts | 62 ++++++++++++++++++++++++++++ scl-template-update.spec.ts | 49 +++++++++++++--------- scl-template-update.ts | 25 +++++++---- 4 files changed, 188 insertions(+), 30 deletions(-) diff --git a/foundation/utils.spec.ts b/foundation/utils.spec.ts index 638051d..4a69f68 100644 --- a/foundation/utils.spec.ts +++ b/foundation/utils.spec.ts @@ -1,6 +1,7 @@ /* eslint-disable no-unused-expressions */ import { expect } from '@open-wc/testing'; -import { removeDOsNotInSelection } from './utils.js'; +import { removeDOsNotInSelection, computeOrphanedRemoves } from './utils.js'; +import { nsdSpeced } from '../scl-template-update.testfiles.js'; describe('foundation/utils', () => { describe('removeDOsNotInSelection', () => { @@ -85,4 +86,83 @@ describe('foundation/utils', () => { expect(result.tagName).to.equal('LNodeType'); }); }); + + describe('computeOrphanedRemoves', () => { + const mmxuId = 'MMXU$oscd$_c53e78191fabefa3'; + let dataTypeTemplates: Element; + + beforeEach(() => { + dataTypeTemplates = new DOMParser() + .parseFromString(nsdSpeced, 'application/xml') + .querySelector('DataTypeTemplates')!; + }); + + function makeNewMmxu(doNames: string[]): Element { + const doElements = doNames + .map(name => { + const existing = dataTypeTemplates.querySelector( + `LNodeType[id="${mmxuId}"] > DO[name="${name}"]` + ); + return existing ? existing.outerHTML : ''; + }) + .join(''); + return new DOMParser().parseFromString( + `${doElements}`, + 'application/xml' + ).documentElement; + } + + it('returns the old LNodeType as the first remove', () => { + const result = computeOrphanedRemoves(dataTypeTemplates, mmxuId, [ + makeNewMmxu(['Beh']), + ]); + + expect(result).to.have.length.greaterThan(0); + expect((result[0] as any).node as Element).to.equal( + dataTypeTemplates.querySelector(`LNodeType[id="${mmxuId}"]`) + ); + }); + + it('cascades orphans when A DO is removed: removes A DOType and all its exclusive descendants', () => { + const result = computeOrphanedRemoves(dataTypeTemplates, mmxuId, [ + makeNewMmxu(['Beh']), + ]); + + const orphanedIds = result + .slice(1) // skip old LNodeType remove + .map((edit: any) => edit.node.getAttribute('id')) + .filter(id => id !== null); + expect(orphanedIds).to.include('A$oscd$_41824603f63b26ac'); + expect(orphanedIds).to.include('phsA$oscd$_995aad120f12c815'); + expect(orphanedIds).to.include('cVal$oscd$_80272042468595d1'); + expect(orphanedIds).to.include('units$oscd$_3f2e10def85bfeac'); + expect(orphanedIds).to.include('mag$oscd$_ed49c2f7a55ad05a'); + expect(orphanedIds).to.include('SIUnit$oscd$_39f6ca400c633081'); + }); + + it('does not orphan the Beh DOType which is shared with LLN0', () => { + const result = computeOrphanedRemoves(dataTypeTemplates, mmxuId, [ + makeNewMmxu(['Beh']), + ]); + + const orphanedIds = result + .slice(1) // skip old LNodeType remove + .map((edit: any) => edit.node.getAttribute('id')) + .filter(id => id !== null); + + expect(orphanedIds).to.not.include('Beh$oscd$_c6ed035c8137b35a'); + expect(orphanedIds).to.not.include('stVal$oscd$_48ba16345b8e7f5b'); + }); + + it('returns only the old LNodeType when the new version keeps all DOs', () => { + const result = computeOrphanedRemoves(dataTypeTemplates, mmxuId, [ + makeNewMmxu(['Beh', 'A']), + ]); + + expect(result).to.have.lengthOf(1); + expect((result[0] as any).node as Element).to.equal( + dataTypeTemplates.querySelector(`LNodeType[id="${mmxuId}"]`) + ); + }); + }); }); diff --git a/foundation/utils.ts b/foundation/utils.ts index 1c01287..bffef73 100644 --- a/foundation/utils.ts +++ b/foundation/utils.ts @@ -1,4 +1,5 @@ import { Tree, TreeSelection } from '@openenergytools/tree-grid'; +import { EditV2 } from '@openscd/oscd-api'; export function getLNodeTypes(doc: XMLDocument | undefined): Element[] { return Array.from( @@ -69,3 +70,64 @@ export function removeDOsNotInSelection( return clonedLNodeType; } + +/** + * Builds the Remove edits needed when an LNodeType is replaced. + * Clones the DataTypeTemplates once, adds the incoming new nodes, removes + * the old LNodeType, then cascades to find which pre-existing sub-types are + * now unreferenced. Returns the old LNodeType remove plus all orphan removes. + * @param dataTypeTemplates The live DataTypeTemplates element to base the remove calculations on + * @param oldLNodeTypeId The ID of the LNodeType being replaced + * @param newNodes The new nodes being added (cloned before passing in) + * @returns An array of EditV2 objects representing the nodes to remove + */ +export function computeOrphanedRemoves( + dataTypeTemplates: Element, + oldLNodeTypeId: string, + newNodes: Element[] +): EditV2[] { + const subTypes = Array.from( + dataTypeTemplates.querySelectorAll( + ':scope > DOType, :scope > DAType, :scope > EnumType' + ) + ); + const subTypeIds = subTypes + .map(el => el.getAttribute('id')) + .filter(id => id !== null); + const preEditIds = new Set(subTypeIds); + + const dttClone = dataTypeTemplates.cloneNode(true) as Element; + newNodes.forEach(n => dttClone.appendChild(n.cloneNode(true))); + dttClone + .querySelector(`:scope > LNodeType[id="${oldLNodeTypeId}"]`) + ?.remove(); + + const remainingIds = new Set(preEditIds); + const orphanIds: string[] = []; + let changed = true; + + while (changed) { + changed = false; + for (const id of remainingIds) { + if (!dttClone.querySelector(`:scope *[type="${id}"]`)) { + orphanIds.push(id); + remainingIds.delete(id); + dttClone.querySelector(`:scope > *[id="${id}"]`)?.remove(); + changed = true; + } + } + } + + const results: EditV2[] = []; + const oldLN = dataTypeTemplates.querySelector( + `:scope > LNodeType[id="${oldLNodeTypeId}"]` + ); + if (oldLN) results.push({ node: oldLN as Node }); + orphanIds.forEach(id => { + const node = dataTypeTemplates.querySelector( + `:scope > *[id="${id}"]` + ) as Node | null; + if (node) results.push({ node }); + }); + return results; +} diff --git a/scl-template-update.spec.ts b/scl-template-update.spec.ts index a1005c1..3d413c3 100644 --- a/scl-template-update.spec.ts +++ b/scl-template-update.spec.ts @@ -372,19 +372,14 @@ describe('NsdTemplateUpdater', () => { const updateEdits = listener.args[0][0].detail.edit; expect(updateEdits).to.have.length.greaterThan(0); - // Verify the LNodeType was updated (not deleted) - const lNodeType = element.doc?.querySelector( - 'LNodeType[id="MMXU$oscd$_c53e78191fabefa3"]' + // Verify that the new LNodeType node should not contain 'A' but should contain 'Beh' + const lNodeTypeInsert = updateEdits.find( + (e: any) => 'node' in e && e.node.tagName === 'LNodeType' ); - expect(lNodeType).to.exist; - - // Verify 'A' DO was removed - const doA = lNodeType?.querySelector('DO[name="A"]'); - expect(doA).to.not.exist; - - // Verify 'Beh' DO still exists - const doBeh = lNodeType?.querySelector('DO[name="Beh"]'); - expect(doBeh).to.exist; + expect(lNodeTypeInsert).to.exist; + const newLNodeType = lNodeTypeInsert.node as Element; + expect(newLNodeType.querySelector('DO[name="A"]')).to.not.exist; + expect(newLNodeType.querySelector('DO[name="Beh"]')).to.exist; }).timeout(5000); it('updates description when making selection changes', async () => { @@ -412,11 +407,17 @@ describe('NsdTemplateUpdater', () => { expect(listener).to.have.been.called; - // Verify the description was updated - const lNodeType = element.doc?.querySelector( - 'LNodeType[id="MMXU$oscd$_c53e78191fabefa3"]' + // Verify that description should appear either in the inserted LNodeType node + // or as an attribute update, depending on whether the selection changed + const edits = listener.args[0][0].detail.edit; + const hasDescUpdate = edits.some( + (e: any) => + ('attributes' in e && e.attributes.desc === 'Updated with new DOs') || + ('node' in e && + (e.node as Element).tagName === 'LNodeType' && + (e.node as Element).getAttribute('desc') === 'Updated with new DOs') ); - expect(lNodeType?.getAttribute('desc')).to.equal('Updated with new DOs'); + expect(hasDescUpdate).to.be.true; }).timeout(5000); it('clears description when set to empty string', async () => { @@ -440,6 +441,8 @@ describe('NsdTemplateUpdater', () => { ).click(); await element.updateComplete; + // Simulate the edit being applied to the document (normally done by an external editor) + element.selectedLNodeType?.setAttribute('desc', 'Test Description'); listener.resetHistory(); // Now clear the description @@ -454,11 +457,17 @@ describe('NsdTemplateUpdater', () => { expect(listener).to.have.been.called; - // Verify the description attribute was removed - const lNodeType = element.doc?.querySelector( - 'LNodeType[id="MMXU$oscd$_c53e78191fabefa3"]' + // Verify that description should be cleared, either as a null attribute update + // or the inserted LNodeType node should lack the desc attribute + const edits = listener.args[0][0].detail.edit; + const hasDescClear = edits.some( + (e: any) => + ('attributes' in e && e.attributes.desc === null) || + ('node' in e && + (e.node as Element).tagName === 'LNodeType' && + !(e.node as Element).hasAttribute('desc')) ); - expect(lNodeType?.hasAttribute('desc')).to.be.false; + expect(hasDescClear).to.be.true; }).timeout(5000); }); diff --git a/scl-template-update.ts b/scl-template-update.ts index d6bb7bf..5ef9160 100644 --- a/scl-template-update.ts +++ b/scl-template-update.ts @@ -42,6 +42,7 @@ import { isLNodeTypeReferenced, filterSelection, removeDOsNotInSelection, + computeOrphanedRemoves, } from './foundation/utils.js'; export default class NsdTemplateUpdated extends ScopedElementsMixin( @@ -263,14 +264,18 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( this.showSuccessFeedback(lnID, 'update'); } else { - // Swap mode: Insert new, then remove old with squash + // Swap mode: Insert new, then remove old LNodeType and orphaned types with squash + const dataTypeTemplates = + this.selectedLNodeType!.closest('DataTypeTemplates')!; + const remove = computeOrphanedRemoves( + dataTypeTemplates, + this.selectedLNodeType!.getAttribute('id')!, + inserts.map(i => (i as { node: Node }).node as Element) + ); + this.dispatchEvent(newEditEventV2(inserts)); await this.updateComplete; - const remove = removeDataType( - { node: this.selectedLNodeType! }, - { force: true } - ); this.dispatchEvent( newEditEventV2(remove, { squash: true, title: `Update ${lnID}` }) ); @@ -324,10 +329,12 @@ export default class NsdTemplateUpdated extends ScopedElementsMixin( const supportingTypes = inserts.filter( insert => insert !== lNodeTypeInsert ); - const removeOld = removeDataType( - { node: currentLNodeType }, - { force: true } - ); + + const dataTypeTemplates = currentLNodeType.closest('DataTypeTemplates')!; + const removeOld = computeOrphanedRemoves(dataTypeTemplates, lnID, [ + newLNodeType, + ...(supportingTypes as { node: Element }[]).map(i => i.node), + ]); return [ ...supportingTypes, From 4ec4723725398bd3b6c70740b9164487870d30ee Mon Sep 17 00:00:00 2001 From: Nora Blomaard Date: Tue, 31 Mar 2026 15:30:52 +0200 Subject: [PATCH 4/4] feat: use oscd-shell for demo --- components/lnodetype-sidebar.ts | 2 +- index.html | 36 +- package-lock.json | 1443 ++++++++++--------------------- package.json | 2 +- 4 files changed, 468 insertions(+), 1015 deletions(-) diff --git a/components/lnodetype-sidebar.ts b/components/lnodetype-sidebar.ts index 85649a1..b204e6c 100644 --- a/components/lnodetype-sidebar.ts +++ b/components/lnodetype-sidebar.ts @@ -142,7 +142,7 @@ export class LNodeTypeSidebar extends ScopedElementsMixin(LitElement) { min-height: 0; padding: 1rem; overflow: hidden; - background-color: #fcf6e5; + background-color: var(--oscd-base3); } oscd-list { min-height: 0; diff --git a/index.html b/index.html index b6c02b0..eb87359 100644 --- a/index.html +++ b/index.html @@ -14,14 +14,40 @@ /> - +