@compas-oscd/open-scd 0.34.41 → 0.34.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/action-pane.js +1 -1
  2. package/dist/action-pane.js.map +1 -1
  3. package/dist/addons/Editor.js +3 -1
  4. package/dist/addons/Editor.js.map +1 -1
  5. package/dist/addons/History.d.ts +0 -6
  6. package/dist/addons/History.js +3 -4
  7. package/dist/addons/History.js.map +1 -1
  8. package/dist/addons/Layout.d.ts +11 -3
  9. package/dist/addons/Layout.js +89 -29
  10. package/dist/addons/Layout.js.map +1 -1
  11. package/dist/addons/Settings.js +9 -8
  12. package/dist/addons/Settings.js.map +1 -1
  13. package/dist/addons/Waiter.js +3 -11
  14. package/dist/addons/Waiter.js.map +1 -1
  15. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +2 -1
  16. package/dist/addons/editor/edit-action-to-v1-converter.js +11 -9
  17. package/dist/addons/editor/edit-action-to-v1-converter.js.map +1 -1
  18. package/dist/addons/editor/edit-v1-to-v2-converter.js +2 -3
  19. package/dist/addons/editor/edit-v1-to-v2-converter.js.map +1 -1
  20. package/dist/addons/history/get-log-text.js +1 -1
  21. package/dist/addons/history/get-log-text.js.map +1 -1
  22. package/dist/addons/plugin-manager/plugin-manager.js.map +1 -1
  23. package/dist/filtered-list.d.ts +11 -4
  24. package/dist/filtered-list.js +28 -10
  25. package/dist/filtered-list.js.map +1 -1
  26. package/dist/finder-list.js +2 -2
  27. package/dist/finder-list.js.map +1 -1
  28. package/dist/foundation/compare.js +1 -1
  29. package/dist/foundation/compare.js.map +1 -1
  30. package/dist/foundation.d.ts +1 -0
  31. package/dist/foundation.js +2 -0
  32. package/dist/foundation.js.map +1 -1
  33. package/dist/index.d.ts +3 -45
  34. package/dist/index.js +2 -50
  35. package/dist/index.js.map +1 -1
  36. package/dist/open-scd.component.d.ts +5 -0
  37. package/dist/open-scd.component.js +12 -0
  38. package/dist/open-scd.component.js.map +1 -0
  39. package/dist/open-scd.d.ts +5 -7
  40. package/dist/open-scd.js +15 -69
  41. package/dist/open-scd.js.map +1 -1
  42. package/dist/plugin.d.ts +4 -2
  43. package/dist/plugin.js.map +1 -1
  44. package/dist/translations/loader.js.map +1 -1
  45. package/dist/wizard-dialog.js +1 -1
  46. package/dist/wizard-dialog.js.map +1 -1
  47. package/dist/wizard-select.d.ts +10 -2
  48. package/dist/wizard-select.js +43 -6
  49. package/dist/wizard-select.js.map +1 -1
  50. package/dist/wizard-textfield.d.ts +21 -3
  51. package/dist/wizard-textfield.js +84 -9
  52. package/dist/wizard-textfield.js.map +1 -1
  53. package/dist/wizards.js +1 -1
  54. package/dist/wizards.js.map +1 -1
  55. package/package.json +23 -17
  56. package/dist/Wizarding.d.ts +0 -6
  57. package/dist/Wizarding.js +0 -39
  58. package/dist/Wizarding.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-dialog.js","sourceRoot":"","sources":["../src/wizard-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n css,\n queryAll,\n LitElement,\n property,\n state,\n TemplateResult,\n html,\n query,\n} from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-button';\nimport '@material/mwc-dialog';\nimport '@material/mwc-icon-button';\nimport '@material/mwc-icon-button-toggle';\nimport '@material/mwc-menu';\nimport { Dialog } from '@material/mwc-dialog';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { List } from '@material/mwc-list';\nimport { Menu } from '@material/mwc-menu';\n\nimport { formatXml } from '@compas-oscd/xml';\n\nimport 'ace-custom-element';\nimport './wizard-checkbox.js';\nimport './wizard-textfield.js';\nimport './wizard-select.js';\nimport {\n newActionEvent,\n Delete,\n Create,\n} from '@compas-oscd/core';\nimport {\n Wizard,\n WizardInputElement,\n WizardPage,\n newWizardEvent,\n WizardActor,\n wizardInputSelector,\n isWizardFactory,\n checkValidity,\n reportValidity,\n identity,\n WizardInput,\n WizardMenuActor,\n} from './foundation.js';\n\nfunction renderWizardInput(\n input: TemplateResult | WizardInput\n): TemplateResult {\n if (input instanceof TemplateResult) return input;\n\n if (input.kind === 'Checkbox')\n return html`<wizard-checkbox\n ?nullable=${input.nullable}\n ?defaultChecked=${input.default}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n helper=\"${ifDefined(input.helper)}\"\n .maybeValue=${input.maybeValue}\n ></wizard-checkbox>`;\n\n if (input.kind === 'Select')\n return html`<wizard-select\n ?nullable=${input.nullable}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n helper=\"${ifDefined(input.helper)}\"\n defaultValue=\"${ifDefined(input.default)}\"\n validationMessage=\"${ifDefined(input.valadationMessage)}\"\n .maybeValue=${input.maybeValue}\n >${input.values.map(\n value => html`<mwc-list-item value=\"${value}\">${value}</mwc-list-item>`\n )}</wizard-select\n >`;\n\n return html`<wizard-textfield\n ?nullable=${input.nullable}\n ?required=${input.required}\n ?disabled=${input.disabled}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n defaultValue=\"${ifDefined(input.default)}\"\n helper=\"${ifDefined(input.helper)}\"\n validationMessage=\"${ifDefined(input.helper)}\"\n unit=\"${ifDefined(input.unit)}\"\n .multipliers=${input.multipliers ?? []}\n .multiplier=${input.multiplier ?? null}\n suffix=\"${ifDefined(input.suffix)}\"\n .maybeValue=${input.maybeValue}\n pattern=\"${ifDefined(input.pattern)}\"\n minLength=\"${ifDefined(input.minLength)}\"\n maxLength=\"${ifDefined(input.maxLength)}\"\n type=\"${ifDefined(input.type)}\"\n min=\"${ifDefined(input.min)}\"\n max=\"${ifDefined(input.max)}\"\n ></wizard-textfield>`;\n}\n\nfunction dialogInputs(dialog?: Dialog): WizardInputElement[] {\n return Array.from(dialog?.querySelectorAll(wizardInputSelector) ?? []);\n}\n\nfunction dialogValid(dialog?: Dialog): boolean {\n return dialogInputs(dialog).every(checkValidity);\n}\n\nfunction codeAction(element: Element): WizardActor {\n return inputs => {\n const text = inputs[0].value!;\n if (!text || !element.parentElement) return [];\n const desc = {\n parent: element.parentElement!,\n reference: element.nextSibling,\n element,\n };\n const del: Delete = {\n old: desc,\n checkValidity: () => true,\n };\n const cre: Create = {\n new: {\n ...desc,\n element: new DOMParser().parseFromString(text, 'application/xml')\n .documentElement,\n },\n checkValidity: () => true,\n };\n return [\n {\n actions: [del, cre],\n title: get('code.log', {\n id: identity(element),\n }),\n },\n ];\n };\n}\n\n/** A wizard style dialog consisting of several pages commiting some\n * [[`EditorAction`]] on completion and aborting on dismissal. */\n@customElement('wizard-dialog')\nexport class WizardDialog extends LitElement {\n /** The [[`Wizard`]] implemented by this dialog. */\n @property({ type: Array })\n wizard: Wizard = [];\n /** Index of the currently active [[`WizardPage`]] */\n @state()\n pageIndex = 0;\n\n @queryAll('mwc-dialog') dialogs!: NodeListOf<Dialog>;\n @queryAll(wizardInputSelector) inputs!: NodeListOf<WizardInputElement>;\n @query('.actions-menu') actionsMenu!: Menu;\n @query('mwc-icon-button[icon=\"more_vert\"]') menuButton!: IconButton;\n\n /** The `Dialog` showing the active [[`WizardPage`]]. */\n get dialog(): Dialog | undefined {\n return this.dialogs[this.pageIndex];\n }\n\n get code(): boolean {\n return (\n (this.dialog?.querySelector('mwc-icon-button-toggle')?.on ?? false) &&\n localStorage.getItem('mode') === 'pro'\n );\n }\n\n /** Checks the inputs of all [[`WizardPage`]]s for validity. */\n checkValidity(): boolean {\n return Array.from(this.inputs).every(checkValidity);\n }\n\n private get firstInvalidPage(): number {\n return Array.from(this.dialogs).findIndex(dialog => !dialogValid(dialog));\n }\n\n prev(): void {\n if (this.pageIndex <= 0) return;\n this.pageIndex--;\n this.dialog?.show();\n }\n\n async next(): Promise<void> {\n if (dialogValid(this.dialog)) {\n if (this.wizard.length > this.pageIndex + 1) this.pageIndex++;\n this.dialog?.show();\n } else {\n this.dialog?.show();\n await this.dialog?.updateComplete;\n dialogInputs(this.dialog).map(reportValidity);\n }\n }\n\n /** Commits `action` if all inputs are valid, reports validity otherwise. */\n async act(action?: WizardActor, primary = true): Promise<boolean> {\n if (action === undefined) return false;\n const wizardInputs = Array.from(this.inputs);\n const wizardList = <List | null>(\n this.dialog?.querySelector('filtered-list,mwc-list')\n );\n if (!this.checkValidity()) {\n this.pageIndex = this.firstInvalidPage;\n wizardInputs.map(reportValidity);\n return false;\n }\n\n const wizardActions = action(wizardInputs, this, wizardList);\n if (wizardActions.length > 0) {\n if (primary) this.wizard[this.pageIndex].primary = undefined;\n else this.wizard[this.pageIndex].secondary = undefined;\n this.dispatchEvent(newWizardEvent());\n }\n wizardActions.forEach(wa =>\n isWizardFactory(wa)\n ? this.dispatchEvent(newWizardEvent(wa))\n : this.dispatchEvent(newActionEvent(wa))\n );\n return true;\n }\n\n /** Triggers menu action callback */\n async menuAct(action?: WizardMenuActor): Promise<void> {\n if (!action) return;\n\n action(this);\n }\n\n private onClosed(ae: CustomEvent<{ action: string } | null>): void {\n if (!(ae.target instanceof Dialog && ae.detail?.action)) return;\n if (ae.detail.action === 'close') this.dispatchEvent(newWizardEvent());\n else if (ae.detail.action === 'prev') this.prev();\n else if (ae.detail.action === 'next') this.next();\n }\n\n constructor() {\n super();\n\n this.act = this.act.bind(this);\n this.renderPage = this.renderPage.bind(this);\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('wizard')) {\n this.pageIndex = 0;\n while (\n this.wizard.findIndex(page => page.initial) > this.pageIndex &&\n dialogValid(this.dialog)\n ) {\n this.dialog?.close();\n this.next();\n }\n this.dialog?.show();\n }\n if (this.wizard[this.pageIndex]?.primary?.auto) {\n this.updateComplete.then(() =>\n this.act(this.wizard[this.pageIndex].primary!.action)\n );\n }\n\n if (this.actionsMenu)\n this.actionsMenu.anchor = <HTMLElement>this.menuButton;\n }\n\n renderMenu(page: WizardPage): TemplateResult {\n const someIconsDefined = page.menuActions?.some(\n menuAction => menuAction.icon\n );\n\n return html` <mwc-icon-button\n icon=\"more_vert\"\n @click=${() => {\n if (!this.actionsMenu.open) this.actionsMenu.show();\n else this.actionsMenu.close();\n }}\n ></mwc-icon-button>\n <mwc-menu class=\"actions-menu\" corner=\"BOTTOM_RIGHT\" menuCorner=\"END\">\n ${page.menuActions!.map(\n menuAction =>\n html`<mwc-list-item\n .graphic=${someIconsDefined ? 'icon' : null}\n @click=${() => this.menuAct(menuAction.action)}\n >\n <span>${menuAction.label}</span>\n ${menuAction.icon\n ? html`<mwc-icon slot=\"graphic\">${menuAction.icon}</mwc-icon>`\n : html``}\n </mwc-list-item>`\n )}\n </mwc-menu>`;\n }\n\n renderPage(page: WizardPage, index: number): TemplateResult {\n const isProMode = localStorage.getItem('mode') === 'pro';\n const hasPageElement = Boolean(page.element);\n const showCodeToggleButton = hasPageElement && isProMode\n\n let extraWidth = 0;\n\n if(showCodeToggleButton && page.menuActions){\n extraWidth = 96;\n }else if(showCodeToggleButton || page.menuActions){\n extraWidth = 48;\n }else{\n extraWidth = 0;\n }\n\n\n return html`<mwc-dialog\n defaultAction=\"next\"\n heading=${page.title}\n @closed=${this.onClosed}\n style=\"--mdc-dialog-min-width:calc(100% + ${extraWidth}px)\"\n >\n ${showCodeToggleButton || page.menuActions\n ? html`<nav>\n ${showCodeToggleButton\n ? html`<mwc-icon-button-toggle\n onicon=\"code\"\n officon=\"code_off\"\n @click=${() => this.requestUpdate()}\n ></mwc-icon-button-toggle>`\n : ''}\n ${page.menuActions ? this.renderMenu(page) : ''}\n </nav>`\n : ''}\n <div id=\"wizard-content\">\n ${this.code && page.element\n ? html`<ace-editor\n base-path=\"/public/ace\"\n wrap\n soft-tabs\n style=\"width: 80vw; height: calc(100vh - 240px);\"\n theme=\"ace/theme/solarized_${localStorage.getItem('theme')}\"\n mode=\"ace/mode/xml\"\n value=\"${formatXml(\n new XMLSerializer().serializeToString(page.element)\n )}\"\n ></ace-editor>`\n : page.content?.map(renderWizardInput)}\n </div>\n ${index > 0\n ? html`<mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"prev\"\n icon=\"navigate_before\"\n label=${this.wizard?.[index - 1].title}\n ></mwc-button>`\n : html``}\n ${page.secondary\n ? html`<mwc-button\n slot=\"secondaryAction\"\n @click=${() => this.act(page.secondary?.action, false)}\n icon=\"${page.secondary.icon}\"\n label=\"${page.secondary.label}\"\n ></mwc-button>`\n : html`<mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"close\"\n label=\"${get('close')}\"\n style=\"--mdc-theme-primary: var(--mdc-theme-error)\"\n ></mwc-button>`}\n ${this.code && page.element\n ? html`<mwc-button\n slot=\"primaryAction\"\n @click=${() => this.act(codeAction(page.element!))}\n icon=\"code\"\n label=\"${get('save')}\"\n trailingIcon\n ></mwc-button>`\n : page.primary\n ? html`<mwc-button\n slot=\"primaryAction\"\n @click=${() => this.act(page.primary?.action)}\n icon=\"${page.primary.icon}\"\n label=\"${page.primary.label}\"\n trailingIcon\n ></mwc-button>`\n : index + 1 < (this.wizard?.length ?? 0)\n ? html`<mwc-button\n slot=\"primaryAction\"\n dialogAction=\"next\"\n icon=\"navigate_next\"\n label=${this.wizard?.[index + 1].title}\n trailingicon\n ></mwc-button>`\n : html``}\n </mwc-dialog>`;\n }\n\n render(): TemplateResult {\n return html`${this.wizard.map(this.renderPage)}`;\n }\n\n static styles = css`\n mwc-dialog {\n --mdc-dialog-max-width: 92vw;\n }\n\n mwc-dialog > nav {\n position: absolute;\n top: 8px;\n right: 14px;\n color: var(--base00);\n }\n\n mwc-dialog > nav > mwc-icon-button-toggle[on] {\n color: var(--mdc-theme-primary);\n }\n\n #wizard-content {\n display: flex;\n flex-direction: column;\n }\n\n #wizard-content > * {\n display: block;\n margin-top: 16px;\n }\n\n *[iconTrailing='search'] {\n --mdc-shape-small: 28px;\n }\n `;\n}\n"]}
1
+ {"version":3,"file":"wizard-dialog.js","sourceRoot":"","sources":["../src/wizard-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n css,\n queryAll,\n LitElement,\n property,\n state,\n TemplateResult,\n html,\n query,\n} from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-button';\nimport '@material/mwc-dialog';\nimport '@material/mwc-icon-button';\nimport '@material/mwc-icon-button-toggle';\nimport '@material/mwc-menu';\nimport { Dialog } from '@material/mwc-dialog';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { List } from '@material/mwc-list';\nimport { Menu } from '@material/mwc-menu';\n\nimport { formatXml } from '@compas-oscd/xml';\n\nimport 'ace-custom-element';\nimport './wizard-checkbox.js';\nimport './wizard-textfield.js';\nimport './wizard-select.js';\n\nimport {\n newActionEvent,\n Delete,\n Create,\n} from '@compas-oscd/core';\nimport {\n Wizard,\n WizardInputElement,\n WizardPage,\n newWizardEvent,\n WizardActor,\n wizardInputSelector,\n isWizardFactory,\n checkValidity,\n reportValidity,\n identity,\n WizardInput,\n WizardMenuActor,\n} from './foundation.js';\n\nfunction renderWizardInput(\n input: TemplateResult | WizardInput\n): TemplateResult {\n if (input instanceof TemplateResult) return input;\n\n if (input.kind === 'Checkbox')\n return html`<wizard-checkbox\n ?nullable=${input.nullable}\n ?defaultChecked=${input.default}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n helper=\"${ifDefined(input.helper)}\"\n .maybeValue=${input.maybeValue}\n ></wizard-checkbox>`;\n\n if (input.kind === 'Select')\n return html`<wizard-select\n ?nullable=${input.nullable}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n helper=\"${ifDefined(input.helper)}\"\n defaultValue=\"${ifDefined(input.default)}\"\n validationMessage=\"${ifDefined(input.valadationMessage)}\"\n .maybeValue=${input.maybeValue}\n >${input.values.map(\n value => html`<mwc-list-item value=\"${value}\">${value}</mwc-list-item>`\n )}</wizard-select\n >`;\n\n return html`<wizard-textfield\n ?nullable=${input.nullable}\n ?required=${input.required}\n ?disabled=${input.disabled}\n ?dialogInitialFocus=${input.dialogInitialFocus}\n label=\"${input.label}\"\n defaultValue=\"${ifDefined(input.default)}\"\n helper=\"${ifDefined(input.helper)}\"\n validationMessage=\"${ifDefined(input.helper)}\"\n unit=\"${ifDefined(input.unit)}\"\n .multipliers=${input.multipliers ?? []}\n .multiplier=${input.multiplier ?? null}\n suffix=\"${ifDefined(input.suffix)}\"\n .maybeValue=${input.maybeValue}\n pattern=\"${ifDefined(input.pattern)}\"\n minLength=\"${ifDefined(input.minLength)}\"\n maxLength=\"${ifDefined(input.maxLength)}\"\n type=\"${ifDefined(input.type)}\"\n min=\"${ifDefined(input.min)}\"\n max=\"${ifDefined(input.max)}\"\n ></wizard-textfield>`;\n}\n\nfunction dialogInputs(dialog?: Dialog): WizardInputElement[] {\n return Array.from(dialog?.querySelectorAll(wizardInputSelector) ?? []);\n}\n\nfunction dialogValid(dialog?: Dialog): boolean {\n return dialogInputs(dialog).every(checkValidity);\n}\n\nfunction codeAction(element: Element): WizardActor {\n return inputs => {\n const text = inputs[0].value!;\n if (!text || !element.parentElement) return [];\n const desc = {\n parent: element.parentElement!,\n reference: element.nextSibling,\n element,\n };\n const del: Delete = {\n old: desc,\n checkValidity: () => true,\n };\n const cre: Create = {\n new: {\n ...desc,\n element: new DOMParser().parseFromString(text, 'application/xml')\n .documentElement,\n },\n checkValidity: () => true,\n };\n return [\n {\n actions: [del, cre],\n title: get('code.log', {\n id: identity(element),\n }),\n },\n ];\n };\n}\n\n/** A wizard style dialog consisting of several pages commiting some\n * [[`EditorAction`]] on completion and aborting on dismissal. */\n@customElement('wizard-dialog')\nexport class WizardDialog extends LitElement {\n /** The [[`Wizard`]] implemented by this dialog. */\n @property({ type: Array })\n wizard: Wizard = [];\n /** Index of the currently active [[`WizardPage`]] */\n @state()\n pageIndex = 0;\n\n @queryAll('mwc-dialog') dialogs!: NodeListOf<Dialog>;\n @queryAll(wizardInputSelector) inputs!: NodeListOf<WizardInputElement>;\n @query('.actions-menu') actionsMenu!: Menu;\n @query('mwc-icon-button[icon=\"more_vert\"]') menuButton!: IconButton;\n\n /** The `Dialog` showing the active [[`WizardPage`]]. */\n get dialog(): Dialog | undefined {\n return this.dialogs[this.pageIndex];\n }\n\n get code(): boolean {\n return (\n (this.dialog?.querySelector('mwc-icon-button-toggle')?.on ?? false) &&\n localStorage.getItem('mode') === 'pro'\n );\n }\n\n /** Checks the inputs of all [[`WizardPage`]]s for validity. */\n checkValidity(): boolean {\n return Array.from(this.inputs).every(checkValidity);\n }\n\n private get firstInvalidPage(): number {\n return Array.from(this.dialogs).findIndex(dialog => !dialogValid(dialog));\n }\n\n prev(): void {\n if (this.pageIndex <= 0) return;\n this.pageIndex--;\n this.dialog?.show();\n }\n\n async next(): Promise<void> {\n if (dialogValid(this.dialog)) {\n if (this.wizard.length > this.pageIndex + 1) this.pageIndex++;\n this.dialog?.show();\n } else {\n this.dialog?.show();\n await this.dialog?.updateComplete;\n dialogInputs(this.dialog).map(reportValidity);\n }\n }\n\n /** Commits `action` if all inputs are valid, reports validity otherwise. */\n async act(action?: WizardActor, primary = true): Promise<boolean> {\n if (action === undefined) return false;\n const wizardInputs = Array.from(this.inputs);\n const wizardList = <List | null>(\n this.dialog?.querySelector('filtered-list,mwc-list')\n );\n if (!this.checkValidity()) {\n this.pageIndex = this.firstInvalidPage;\n wizardInputs.map(reportValidity);\n return false;\n }\n\n const wizardActions = action(wizardInputs, this, wizardList);\n if (wizardActions.length > 0) {\n if (primary) this.wizard[this.pageIndex].primary = undefined;\n else this.wizard[this.pageIndex].secondary = undefined;\n this.dispatchEvent(newWizardEvent());\n }\n wizardActions.forEach(wa =>\n isWizardFactory(wa)\n ? this.dispatchEvent(newWizardEvent(wa))\n : this.dispatchEvent(newActionEvent(wa))\n );\n return true;\n }\n\n /** Triggers menu action callback */\n async menuAct(action?: WizardMenuActor): Promise<void> {\n if (!action) return;\n\n action(this);\n }\n\n private onClosed(ae: CustomEvent<{ action: string } | null>): void {\n if (!(ae.target instanceof Dialog && ae.detail?.action)) return;\n if (ae.detail.action === 'close') this.dispatchEvent(newWizardEvent());\n else if (ae.detail.action === 'prev') this.prev();\n else if (ae.detail.action === 'next') this.next();\n }\n\n constructor() {\n super();\n\n this.act = this.act.bind(this);\n this.renderPage = this.renderPage.bind(this);\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('wizard')) {\n this.pageIndex = 0;\n while (\n this.wizard.findIndex(page => page.initial) > this.pageIndex &&\n dialogValid(this.dialog)\n ) {\n this.dialog?.close();\n this.next();\n }\n this.dialog?.show();\n }\n if (this.wizard[this.pageIndex]?.primary?.auto) {\n this.updateComplete.then(() =>\n this.act(this.wizard[this.pageIndex].primary!.action)\n );\n }\n\n if (this.actionsMenu)\n this.actionsMenu.anchor = <HTMLElement>this.menuButton;\n }\n\n renderMenu(page: WizardPage): TemplateResult {\n const someIconsDefined = page.menuActions?.some(\n menuAction => menuAction.icon\n );\n\n return html` <mwc-icon-button\n icon=\"more_vert\"\n @click=${() => {\n if (!this.actionsMenu.open) this.actionsMenu.show();\n else this.actionsMenu.close();\n }}\n ></mwc-icon-button>\n <mwc-menu class=\"actions-menu\" corner=\"BOTTOM_RIGHT\" menuCorner=\"END\">\n ${page.menuActions!.map(\n menuAction =>\n html`<mwc-list-item\n .graphic=${someIconsDefined ? 'icon' : null}\n @click=${() => this.menuAct(menuAction.action)}\n >\n <span>${menuAction.label}</span>\n ${menuAction.icon\n ? html`<mwc-icon slot=\"graphic\">${menuAction.icon}</mwc-icon>`\n : html``}\n </mwc-list-item>`\n )}\n </mwc-menu>`;\n }\n\n renderPage(page: WizardPage, index: number): TemplateResult {\n const isProMode = localStorage.getItem('mode') === 'pro';\n const hasPageElement = Boolean(page.element);\n const showCodeToggleButton = hasPageElement && isProMode\n\n let extraWidth = 0;\n\n if(showCodeToggleButton && page.menuActions){\n extraWidth = 96;\n }else if(showCodeToggleButton || page.menuActions){\n extraWidth = 48;\n }else{\n extraWidth = 0;\n }\n\n\n return html`<mwc-dialog\n defaultAction=\"next\"\n heading=${page.title}\n @closed=${this.onClosed}\n style=\"--mdc-dialog-min-width:calc(100% + ${extraWidth}px)\"\n >\n ${showCodeToggleButton || page.menuActions\n ? html`<nav>\n ${showCodeToggleButton\n ? html`<mwc-icon-button-toggle\n onicon=\"code\"\n officon=\"code_off\"\n @click=${() => this.requestUpdate()}\n ></mwc-icon-button-toggle>`\n : ''}\n ${page.menuActions ? this.renderMenu(page) : ''}\n </nav>`\n : ''}\n <div id=\"wizard-content\">\n ${this.code && page.element\n ? html`<ace-editor\n base-path=\"/public/ace\"\n wrap\n soft-tabs\n style=\"width: 80vw; height: calc(100vh - 240px);\"\n theme=\"ace/theme/solarized_${localStorage.getItem('theme')}\"\n mode=\"ace/mode/xml\"\n value=\"${formatXml(\n new XMLSerializer().serializeToString(page.element)\n )}\"\n ></ace-editor>`\n : page.content?.map(renderWizardInput)}\n </div>\n ${index > 0\n ? html`<mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"prev\"\n icon=\"navigate_before\"\n label=${this.wizard?.[index - 1].title}\n ></mwc-button>`\n : html``}\n ${page.secondary\n ? html`<mwc-button\n slot=\"secondaryAction\"\n @click=${() => this.act(page.secondary?.action, false)}\n icon=\"${page.secondary.icon}\"\n label=\"${page.secondary.label}\"\n ></mwc-button>`\n : html`<mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"close\"\n label=\"${get('close')}\"\n style=\"--mdc-theme-primary: var(--mdc-theme-error)\"\n ></mwc-button>`}\n ${this.code && page.element\n ? html`<mwc-button\n slot=\"primaryAction\"\n @click=${() => this.act(codeAction(page.element!))}\n icon=\"code\"\n label=\"${get('save')}\"\n trailingIcon\n ></mwc-button>`\n : page.primary\n ? html`<mwc-button\n slot=\"primaryAction\"\n @click=${() => this.act(page.primary?.action)}\n icon=\"${page.primary.icon}\"\n label=\"${page.primary.label}\"\n trailingIcon\n ></mwc-button>`\n : index + 1 < (this.wizard?.length ?? 0)\n ? html`<mwc-button\n slot=\"primaryAction\"\n dialogAction=\"next\"\n icon=\"navigate_next\"\n label=${this.wizard?.[index + 1].title}\n trailingicon\n ></mwc-button>`\n : html``}\n </mwc-dialog>`;\n }\n\n render(): TemplateResult {\n return html`${this.wizard.map(this.renderPage)}`;\n }\n\n static styles = css`\n mwc-dialog {\n --mdc-dialog-max-width: 92vw;\n }\n\n mwc-dialog > nav {\n position: absolute;\n top: 8px;\n right: 14px;\n color: var(--base00);\n }\n\n mwc-dialog > nav > mwc-icon-button-toggle[on] {\n color: var(--mdc-theme-primary);\n }\n\n #wizard-content {\n display: flex;\n flex-direction: column;\n }\n\n #wizard-content > * {\n display: block;\n margin-top: 16px;\n }\n\n *[iconTrailing='search'] {\n --mdc-shape-small: 28px;\n }\n `;\n}\n"]}
@@ -1,11 +1,18 @@
1
- import { TemplateResult } from 'lit-element';
1
+ import { TemplateResult, LitElement } from 'lit-element';
2
2
  import '@material/mwc-switch';
3
3
  import { Switch } from '@material/mwc-switch';
4
+ import '@material/mwc-select';
4
5
  import { Select } from '@material/mwc-select';
5
6
  /** A potentially `nullable` `Select`.
6
7
  *
7
8
  * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
8
- export declare class WizardSelect extends Select {
9
+ export declare class WizardSelect extends LitElement {
10
+ value: string;
11
+ label: string;
12
+ helper: string | undefined;
13
+ validationMessage: string | undefined;
14
+ dialogInitialFocus: boolean;
15
+ disabled: boolean;
9
16
  /** Whether [[`maybeValue`]] may be `null` */
10
17
  nullable: boolean;
11
18
  private isNull;
@@ -19,6 +26,7 @@ export declare class WizardSelect extends Select {
19
26
  /** Additional values that cause validation to fail. */
20
27
  reservedValues: string[];
21
28
  private disabledSwitch;
29
+ select: Select;
22
30
  nullSwitch?: Switch;
23
31
  private nulled;
24
32
  private enable;
@@ -1,11 +1,12 @@
1
1
  import { __decorate } from "tslib";
2
- import { customElement, html, state, property, query, } from 'lit-element';
2
+ import { customElement, html, state, property, query, LitElement, } from 'lit-element';
3
+ import { ifDefined } from 'lit-html/directives/if-defined.js';
3
4
  import '@material/mwc-switch';
4
- import { Select } from '@material/mwc-select';
5
+ import '@material/mwc-select';
5
6
  /** A potentially `nullable` `Select`.
6
7
  *
7
8
  * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
8
- let WizardSelect = class WizardSelect extends Select {
9
+ let WizardSelect = class WizardSelect extends LitElement {
9
10
  get null() {
10
11
  return this.nullable && this.isNull;
11
12
  }
@@ -45,15 +46,19 @@ let WizardSelect = class WizardSelect extends Select {
45
46
  this.disabled = true;
46
47
  }
47
48
  async firstUpdated() {
48
- await super.firstUpdated();
49
+ // await super.firstUpdated();
49
50
  }
50
51
  checkValidity() {
51
52
  if (this.nullable && !this.nullSwitch?.checked)
52
53
  return true;
53
- return super.checkValidity();
54
+ return this.select.checkValidity();
54
55
  }
55
56
  constructor() {
56
57
  super();
58
+ this.value = '';
59
+ this.label = '';
60
+ this.dialogInitialFocus = false;
61
+ this.disabled = false;
57
62
  /** Whether [[`maybeValue`]] may be `null` */
58
63
  this.nullable = false;
59
64
  this.isNull = false;
@@ -82,7 +87,18 @@ let WizardSelect = class WizardSelect extends Select {
82
87
  render() {
83
88
  return html `
84
89
  <div style="display: flex; flex-direction: row;">
85
- <div style="flex: auto;">${super.render()}</div>
90
+ <div style="flex: auto;">
91
+ <mwc-select
92
+ .value=${this.value}
93
+ .disabled=${this.disabled}
94
+ label=${this.label}
95
+ helper="${ifDefined(this.helper)}"
96
+ validationMessage="${ifDefined(this.validationMessage)}"
97
+ @change="${(e) => this.value = e.target.value}"
98
+ >
99
+ <slot></slot>
100
+ </mwc-select>
101
+ </div>
86
102
  <div style="display: flex; align-items: center; height: 56px;">
87
103
  ${this.renderSwitch()}
88
104
  </div>
@@ -90,6 +106,24 @@ let WizardSelect = class WizardSelect extends Select {
90
106
  `;
91
107
  }
92
108
  };
109
+ __decorate([
110
+ property({ type: String })
111
+ ], WizardSelect.prototype, "value", void 0);
112
+ __decorate([
113
+ property({ type: String })
114
+ ], WizardSelect.prototype, "label", void 0);
115
+ __decorate([
116
+ property({ type: String })
117
+ ], WizardSelect.prototype, "helper", void 0);
118
+ __decorate([
119
+ property({ type: String })
120
+ ], WizardSelect.prototype, "validationMessage", void 0);
121
+ __decorate([
122
+ property({ type: Boolean })
123
+ ], WizardSelect.prototype, "dialogInitialFocus", void 0);
124
+ __decorate([
125
+ property({ type: Boolean })
126
+ ], WizardSelect.prototype, "disabled", void 0);
93
127
  __decorate([
94
128
  property({ type: Boolean })
95
129
  ], WizardSelect.prototype, "nullable", void 0);
@@ -105,6 +139,9 @@ __decorate([
105
139
  __decorate([
106
140
  property({ type: Array })
107
141
  ], WizardSelect.prototype, "reservedValues", void 0);
142
+ __decorate([
143
+ query('mwc-select')
144
+ ], WizardSelect.prototype, "select", void 0);
108
145
  __decorate([
109
146
  query('mwc-switch')
110
147
  ], WizardSelect.prototype, "nullSwitch", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-select.js","sourceRoot":"","sources":["../src/wizard-select.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n} from 'lit-element';\n\nimport '@material/mwc-switch';\nimport { Switch } from '@material/mwc-switch';\nimport { Select } from '@material/mwc-select';\n\n/** A potentially `nullable` `Select`.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-select')\nexport class WizardSelect extends Select {\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-switch') nullSwitch?: Switch;\n\n private nulled: string | null = null;\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.disabled = true;\n }\n\n async firstUpdated(): Promise<void> {\n await super.firstUpdated();\n }\n\n checkValidity(): boolean {\n if (this.nullable && !this.nullSwitch?.checked) return true;\n return super.checkValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <div style=\"flex: auto;\">${super.render()}</div>\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"wizard-select.js","sourceRoot":"","sources":["../src/wizard-select.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EAEL,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,sBAAsB,CAAC;AAE9B,OAAO,sBAAsB,CAAC;AAG9B;;0EAE0E;AAEnE,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAmB1C,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,IAAY,IAAI,CAAC,KAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QACpD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IACD,qEAAqE;IAErE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACvC,CAAC;IACD,IAAI,UAAU,CAAC,KAAoB;QACjC,IAAI,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAChC;YACH,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;IACH,CAAC;IAgBO,MAAM;QACZ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,8BAA8B;IAChC,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO;YAAE,OAAO,IAAI,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QA7EV,UAAK,GAAG,EAAE,CAAC;QAEX,UAAK,GAAG,EAAE,CAAC;QAMX,uBAAkB,GAAG,KAAK,CAAC;QAE3B,aAAQ,GAAG,KAAK,CAAC;QAEjB,6CAA6C;QAE7C,aAAQ,GAAG,KAAK,CAAC;QACT,WAAM,GAAG,KAAK,CAAC;QAuBvB,mEAAmE;QAEnE,iBAAY,GAAG,EAAE,CAAC;QAClB,uDAAuD;QAEvD,mBAAc,GAAa,EAAE,CAAC;QAE9B,kFAAkF;QAC1E,mBAAc,GAAG,KAAK,CAAC;QAKvB,WAAM,GAAkB,IAAI,CAAC;QA4BnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAA;;mBAEE,CAAC,IAAI,CAAC,IAAI;oBACT,IAAI,CAAC,cAAc;kBACrB,GAAG,EAAE;gBACb,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC;YACxC,CAAC;qBACY,CAAC;SACjB;QACD,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;qBAIM,IAAI,CAAC,KAAK;wBACP,IAAI,CAAC,QAAQ;oBACjB,IAAI,CAAC,KAAK;sBACR,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;iCACX,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;uBAC3C,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK;;;;;;YAM1E,IAAI,CAAC,YAAY,EAAE;;;KAG1B,CAAC;IACJ,CAAC;CACF,CAAA;AArHC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAChB;AAEX;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAChB;AAEX;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CACA;AAE3B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDACW;AAEtC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wDACD;AAE3B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CACX;AAIjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CACX;AAGjB;IADC,KAAK,EAAE;wCAGP;AASD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8CAG1B;AAUD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDACT;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oDACI;AAKT;IAApB,KAAK,CAAC,YAAY,CAAC;4CAAiB;AAChB;IAApB,KAAK,CAAC,YAAY,CAAC;gDAAqB;AAnD9B,YAAY;IADxB,aAAa,CAAC,eAAe,CAAC;GAClB,YAAY,CAuHxB;SAvHY,YAAY","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n LitElement,\n} from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\n\nimport '@material/mwc-switch';\nimport { Switch } from '@material/mwc-switch';\nimport '@material/mwc-select';\nimport { Select } from '@material/mwc-select';\n\n/** A potentially `nullable` `Select`.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-select')\nexport class WizardSelect extends LitElement {\n @property({ type: String })\n value = '';\n @property({ type: String })\n label = '';\n @property({ type: String })\n helper: string | undefined;\n @property({ type: String })\n validationMessage: string | undefined;\n @property({ type: Boolean })\n dialogInitialFocus = false;\n @property({ type: Boolean })\n disabled = false;\n\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-select') select!: Select;\n @query('mwc-switch') nullSwitch?: Switch;\n\n private nulled: string | null = null;\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.disabled = true;\n }\n\n async firstUpdated(): Promise<void> {\n // await super.firstUpdated();\n }\n\n checkValidity(): boolean {\n if (this.nullable && !this.nullSwitch?.checked) return true;\n return this.select.checkValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <div style=\"flex: auto;\">\n <mwc-select\n .value=${this.value}\n .disabled=${this.disabled}\n label=${this.label}\n helper=\"${ifDefined(this.helper)}\"\n validationMessage=\"${ifDefined(this.validationMessage)}\"\n @change=\"${(e: Event) => this.value = (e.target as HTMLInputElement).value}\"\n >\n <slot></slot>\n </mwc-select>\n </div>\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
- import { TemplateResult } from 'lit-element';
1
+ import { TemplateResult, LitElement } from 'lit-element';
2
2
  import '@material/mwc-icon-button';
3
3
  import '@material/mwc-list/mwc-list-item';
4
4
  import '@material/mwc-menu';
5
5
  import '@material/mwc-switch';
6
+ import '@material/mwc-textfield';
6
7
  import { IconButton } from '@material/mwc-icon-button';
7
8
  import { Menu } from '@material/mwc-menu';
8
9
  import { Switch } from '@material/mwc-switch';
@@ -11,12 +12,27 @@ import { TextField } from '@material/mwc-textfield';
11
12
  * `multiplier` if an SI `unit` is given.
12
13
  *
13
14
  * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
14
- export declare class WizardTextField extends TextField {
15
+ export declare class WizardTextField extends LitElement {
15
16
  /** Whether [[`maybeValue`]] may be `null` */
16
17
  nullable: boolean;
17
18
  /** Selectable SI multipliers for a non-empty [[`unit`]]. */
18
19
  multipliers: (string | null)[];
19
20
  private multiplierIndex;
21
+ value: string;
22
+ suffix: string;
23
+ helperPersistent: boolean;
24
+ disabled: boolean;
25
+ required: boolean;
26
+ label: string;
27
+ dialogInitialFocus: boolean;
28
+ helper: string | undefined;
29
+ validationMessage: string | undefined;
30
+ pattern: string | undefined;
31
+ minLength: number | undefined;
32
+ maxLength: number | undefined;
33
+ type: string | undefined;
34
+ min: number | undefined;
35
+ max: number | undefined;
20
36
  get multiplier(): string | null;
21
37
  set multiplier(value: string | null);
22
38
  /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].
@@ -33,6 +49,7 @@ export declare class WizardTextField extends TextField {
33
49
  /** Additional values that cause validation to fail. */
34
50
  reservedValues: string[];
35
51
  private disabledSwitch;
52
+ textfield: TextField;
36
53
  nullSwitch?: Switch;
37
54
  multiplierMenu?: Menu;
38
55
  multiplierButton?: IconButton;
@@ -40,8 +57,9 @@ export declare class WizardTextField extends TextField {
40
57
  private selectMultiplier;
41
58
  private enable;
42
59
  private disable;
43
- firstUpdated(): Promise<void>;
60
+ firstUpdated(): void;
44
61
  checkValidity(): boolean;
62
+ reportValidity(): boolean;
45
63
  constructor();
46
64
  renderUnitSelector(): TemplateResult;
47
65
  renderMulplierList(): TemplateResult;
@@ -1,16 +1,17 @@
1
1
  import { __decorate } from "tslib";
2
- import { customElement, html, state, property, query, } from 'lit-element';
2
+ import { customElement, html, state, property, query, LitElement, } from 'lit-element';
3
3
  import { get } from 'lit-translate';
4
+ import { ifDefined } from 'lit-html/directives/if-defined.js';
4
5
  import '@material/mwc-icon-button';
5
6
  import '@material/mwc-list/mwc-list-item';
6
7
  import '@material/mwc-menu';
7
8
  import '@material/mwc-switch';
8
- import { TextField } from '@material/mwc-textfield';
9
+ import '@material/mwc-textfield';
9
10
  /** A potentially `nullable` `TextField` that allows for selection of an SI
10
11
  * `multiplier` if an SI `unit` is given.
11
12
  *
12
13
  * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
13
- let WizardTextField = class WizardTextField extends TextField {
14
+ let WizardTextField = class WizardTextField extends LitElement {
14
15
  get multiplier() {
15
16
  if (this.unit == '')
16
17
  return null;
@@ -65,8 +66,8 @@ let WizardTextField = class WizardTextField extends TextField {
65
66
  this.helperPersistent = true;
66
67
  this.disabled = true;
67
68
  }
68
- async firstUpdated() {
69
- await super.firstUpdated();
69
+ firstUpdated() {
70
+ // await super.firstUpdated();
70
71
  if (this.multiplierMenu)
71
72
  this.multiplierMenu.anchor =
72
73
  this.multiplierButton ?? null;
@@ -74,11 +75,14 @@ let WizardTextField = class WizardTextField extends TextField {
74
75
  checkValidity() {
75
76
  if (this.reservedValues &&
76
77
  this.reservedValues.some(array => array === this.value)) {
77
- this.setCustomValidity(get('textfield.unique'));
78
+ this.textfield.setCustomValidity(get('textfield.unique'));
78
79
  return false;
79
80
  }
80
- this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM
81
- return super.checkValidity();
81
+ this.textfield.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM
82
+ return this.textfield.checkValidity();
83
+ }
84
+ reportValidity() {
85
+ return this.textfield.reportValidity();
82
86
  }
83
87
  constructor() {
84
88
  super();
@@ -87,6 +91,13 @@ let WizardTextField = class WizardTextField extends TextField {
87
91
  /** Selectable SI multipliers for a non-empty [[`unit`]]. */
88
92
  this.multipliers = [null, ''];
89
93
  this.multiplierIndex = 0;
94
+ this.value = '';
95
+ this.suffix = '';
96
+ this.helperPersistent = false;
97
+ this.disabled = false;
98
+ this.required = false;
99
+ this.label = '';
100
+ this.dialogInitialFocus = false;
90
101
  /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].
91
102
  * Overrides `suffix`. */
92
103
  this.unit = '';
@@ -142,7 +153,23 @@ let WizardTextField = class WizardTextField extends TextField {
142
153
  render() {
143
154
  return html `
144
155
  <div style="display: flex; flex-direction: row;">
145
- <div style="flex: auto;">${super.render()}</div>
156
+ <mwc-textfield style="flex: auto;"
157
+ .value=${this.value}
158
+ .suffix=${this.suffix}
159
+ .helperPersistent=${this.helperPersistent}
160
+ .disabled=${this.disabled}
161
+ .required=${this.required}
162
+ label=${this.label}
163
+ helper="${ifDefined(this.helper)}"
164
+ validationMessage="${ifDefined(this.helper)}"
165
+ pattern="${ifDefined(this.pattern)}"
166
+ minLength="${ifDefined(this.minLength)}"
167
+ maxLength="${ifDefined(this.maxLength)}"
168
+ type="${ifDefined(this.type)}"
169
+ min="${ifDefined(this.min)}"
170
+ max="${ifDefined(this.max)}"
171
+ @change="${(e) => this.value = e.target.value}">
172
+ </mwc-textfield>
146
173
  ${this.renderUnitSelector()}
147
174
  <div style="display: flex; align-items: center; height: 56px;">
148
175
  ${this.renderSwitch()}
@@ -157,6 +184,51 @@ __decorate([
157
184
  __decorate([
158
185
  property({ type: Array })
159
186
  ], WizardTextField.prototype, "multipliers", void 0);
187
+ __decorate([
188
+ property({ type: String })
189
+ ], WizardTextField.prototype, "value", void 0);
190
+ __decorate([
191
+ property({ type: String })
192
+ ], WizardTextField.prototype, "suffix", void 0);
193
+ __decorate([
194
+ property({ type: Boolean })
195
+ ], WizardTextField.prototype, "helperPersistent", void 0);
196
+ __decorate([
197
+ property({ type: Boolean })
198
+ ], WizardTextField.prototype, "disabled", void 0);
199
+ __decorate([
200
+ property({ type: Boolean })
201
+ ], WizardTextField.prototype, "required", void 0);
202
+ __decorate([
203
+ property({ type: String })
204
+ ], WizardTextField.prototype, "label", void 0);
205
+ __decorate([
206
+ property({ type: Boolean })
207
+ ], WizardTextField.prototype, "dialogInitialFocus", void 0);
208
+ __decorate([
209
+ property({ type: String })
210
+ ], WizardTextField.prototype, "helper", void 0);
211
+ __decorate([
212
+ property({ type: String })
213
+ ], WizardTextField.prototype, "validationMessage", void 0);
214
+ __decorate([
215
+ property({ type: String })
216
+ ], WizardTextField.prototype, "pattern", void 0);
217
+ __decorate([
218
+ property({ type: Number })
219
+ ], WizardTextField.prototype, "minLength", void 0);
220
+ __decorate([
221
+ property({ type: Number })
222
+ ], WizardTextField.prototype, "maxLength", void 0);
223
+ __decorate([
224
+ property({ type: String })
225
+ ], WizardTextField.prototype, "type", void 0);
226
+ __decorate([
227
+ property({ type: Number })
228
+ ], WizardTextField.prototype, "min", void 0);
229
+ __decorate([
230
+ property({ type: Number })
231
+ ], WizardTextField.prototype, "max", void 0);
160
232
  __decorate([
161
233
  property({ type: String })
162
234
  ], WizardTextField.prototype, "multiplier", null);
@@ -175,6 +247,9 @@ __decorate([
175
247
  __decorate([
176
248
  property({ type: Array })
177
249
  ], WizardTextField.prototype, "reservedValues", void 0);
250
+ __decorate([
251
+ query('mwc-textfield')
252
+ ], WizardTextField.prototype, "textfield", void 0);
178
253
  __decorate([
179
254
  query('mwc-switch')
180
255
  ], WizardTextField.prototype, "nullSwitch", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-textfield.js","sourceRoot":"","sources":["../src/wizard-textfield.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,GAEN,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,sBAAsB,CAAC;AAK9B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;;0EAG0E;AAEnE,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,SAAS;IAS5C,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,CACL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,CAAC,KAAoB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,KAAK,IAAI,CAAC;YAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACpD,CAAC;IAOD,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,IAAY,IAAI,CAAC,KAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QACpD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IACD,qEAAqE;IAErE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACvC,CAAC;IACD,IAAI,UAAU,CAAC,KAAoB;QACjC,IAAI,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAChC;YACH,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;IACH,CAAC;IAiBO,gBAAgB,CAAC,EAAuB;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAEO,MAAM;QACZ,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,cAAc;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM;gBACvB,IAAI,CAAC,gBAAgC,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,aAAa;QACX,IACE,IAAI,CAAC,cAAc;YACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EACvD;YACA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,oDAAoD;QAChF,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAtGV,6CAA6C;QAE7C,aAAQ,GAAG,KAAK,CAAC;QACjB,4DAA4D;QAE5D,gBAAW,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjB,oBAAe,GAAG,CAAC,CAAC;QAa5B;iCACyB;QAEzB,SAAI,GAAG,EAAE,CAAC;QACF,WAAM,GAAG,KAAK,CAAC;QAuBvB,mEAAmE;QAEnE,iBAAY,GAAG,EAAE,CAAC;QAClB,uDAAuD;QAEvD,mBAAc,GAAa,EAAE,CAAC;QAE9B,kFAAkF;QAC1E,mBAAc,GAAG,KAAK,CAAC;QAMvB,WAAM,GAAkB,IAAI,CAAC;QA4CnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;YACtC,OAAO,IAAI,CAAA;;;;sBAIK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc;mBACnC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;;;sBAG9B,IAAI,CAAC,gBAAgB;;oBAEvB,IAAI,CAAC,gBAAgB,IAAI,IAAI;aACpC,IAAI,CAAC,kBAAkB,EAAE;;aAEzB,CAAC;;YACL,OAAO,IAAI,CAAA,EAAE,CAAC;IACrB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAChC,UAAU,CAAC,EAAE,CACX,IAAI,CAAA,4BAA4B,UAAU,KAAK,IAAI,CAAC,UAAU;aACzD,UAAU,KAAK,IAAI;YACpB,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC;YAC/B,CAAC,CAAC,UAAU;UACd,CACL,EAAE,CAAC;IACN,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAA;;mBAEE,CAAC,IAAI,CAAC,IAAI;oBACT,IAAI,CAAC,cAAc;kBACrB,GAAG,EAAE;gBACb,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC;YACxC,CAAC;qBACY,CAAC;SACjB;QACD,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;mCAEoB,KAAK,CAAC,MAAM,EAAE;UACvC,IAAI,CAAC,kBAAkB,EAAE;;YAEvB,IAAI,CAAC,YAAY,EAAE;;;KAG1B,CAAC;IACJ,CAAC;CACF,CAAA;AAhKC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iDACX;AAGjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oDACD;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAM1B;AASD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CACjB;AAGV;IADC,KAAK,EAAE;2CAGP;AASD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAG1B;AAUD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDACT;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;uDACI;AAKT;IAApB,KAAK,CAAC,YAAY,CAAC;mDAAqB;AACtB;IAAlB,KAAK,CAAC,UAAU,CAAC;uDAAuB;AACf;IAAzB,KAAK,CAAC,iBAAiB,CAAC;yDAA+B;AA3D7C,eAAe;IAD3B,aAAa,CAAC,kBAAkB,CAAC;GACrB,eAAe,CAmK3B;SAnKY,eAAe","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n} from 'lit-element';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon-button';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-menu';\nimport '@material/mwc-switch';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { Menu } from '@material/mwc-menu';\nimport { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';\nimport { Switch } from '@material/mwc-switch';\nimport { TextField } from '@material/mwc-textfield';\n\n/** A potentially `nullable` `TextField` that allows for selection of an SI\n * `multiplier` if an SI `unit` is given.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-textfield')\nexport class WizardTextField extends TextField {\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n /** Selectable SI multipliers for a non-empty [[`unit`]]. */\n @property({ type: Array })\n multipliers = [null, ''];\n private multiplierIndex = 0;\n @property({ type: String })\n get multiplier(): string | null {\n if (this.unit == '') return null;\n return (\n this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null\n );\n }\n set multiplier(value: string | null) {\n const index = this.multipliers.indexOf(value);\n if (index >= 0) this.multiplierIndex = index;\n this.suffix = (this.multiplier ?? '') + this.unit;\n }\n /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].\n * Overrides `suffix`. */\n @property({ type: String })\n unit = '';\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-switch') nullSwitch?: Switch;\n @query('mwc-menu') multiplierMenu?: Menu;\n @query('mwc-icon-button') multiplierButton?: IconButton;\n\n private nulled: string | null = null;\n\n private selectMultiplier(se: SingleSelectedEvent): void {\n this.multiplier = this.multipliers[se.detail.index];\n }\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.helperPersistent = false;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.helperPersistent = true;\n this.disabled = true;\n }\n\n async firstUpdated(): Promise<void> {\n await super.firstUpdated();\n if (this.multiplierMenu)\n this.multiplierMenu.anchor =\n (this.multiplierButton as HTMLElement) ?? null;\n }\n\n checkValidity(): boolean {\n if (\n this.reservedValues &&\n this.reservedValues.some(array => array === this.value)\n ) {\n this.setCustomValidity(get('textfield.unique'));\n return false;\n }\n this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM\n return super.checkValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderUnitSelector(): TemplateResult {\n if (this.multipliers.length && this.unit)\n return html`<div style=\"position:relative;\">\n <mwc-icon-button\n style=\"margin:5px;\"\n icon=\"more\"\n ?disabled=${this.null || this.disabledSwitch}\n @click=${() => this.multiplierMenu?.show()}\n ></mwc-icon-button>\n <mwc-menu\n @selected=${this.selectMultiplier}\n fixed\n .anchor=${this.multiplierButton ?? null}\n >${this.renderMulplierList()}</mwc-menu\n >\n </div>`;\n else return html``;\n }\n\n renderMulplierList(): TemplateResult {\n return html`${this.multipliers.map(\n multiplier =>\n html`<mwc-list-item ?selected=${multiplier === this.multiplier}\n >${multiplier === null\n ? get('textfield.noMultiplier')\n : multiplier}</mwc-list-item\n >`\n )}`;\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <div style=\"flex: auto;\">${super.render()}</div>\n ${this.renderUnitSelector()}\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"wizard-textfield.js","sourceRoot":"","sources":["../src/wizard-textfield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n LitElement,\n} from 'lit-element';\nimport { get } from 'lit-translate';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\n\nimport '@material/mwc-icon-button';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-menu';\nimport '@material/mwc-switch';\nimport '@material/mwc-textfield';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { Menu } from '@material/mwc-menu';\nimport { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';\nimport { Switch } from '@material/mwc-switch';\nimport { TextField } from '@material/mwc-textfield';\n\n/** A potentially `nullable` `TextField` that allows for selection of an SI\n * `multiplier` if an SI `unit` is given.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-textfield')\nexport class WizardTextField extends LitElement {\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n /** Selectable SI multipliers for a non-empty [[`unit`]]. */\n @property({ type: Array })\n multipliers = [null, ''];\n private multiplierIndex = 0;\n\n @property({ type: String })\n value = '';\n @property({ type: String })\n suffix = '';\n @property({ type: Boolean })\n helperPersistent = false;\n @property({ type: Boolean })\n disabled = false;\n @property({ type: Boolean })\n required = false;\n @property({ type: String })\n label = '';\n @property({ type: Boolean })\n dialogInitialFocus = false;\n @property({ type: String })\n helper: string | undefined;\n @property({ type: String })\n validationMessage: string | undefined;\n @property({ type: String })\n pattern: string | undefined;\n @property({ type: Number })\n minLength: number | undefined;\n @property({ type: Number })\n maxLength: number | undefined;\n @property({ type: String })\n type: string | undefined;\n @property({ type: Number })\n min: number | undefined;\n @property({ type: Number })\n max: number | undefined;\n\n @property({ type: String })\n get multiplier(): string | null {\n if (this.unit == '') return null;\n return (\n this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null\n );\n }\n set multiplier(value: string | null) {\n const index = this.multipliers.indexOf(value);\n if (index >= 0) this.multiplierIndex = index;\n this.suffix = (this.multiplier ?? '') + this.unit;\n }\n /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].\n * Overrides `suffix`. */\n @property({ type: String })\n unit = '';\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-textfield') textfield!: TextField;\n @query('mwc-switch') nullSwitch?: Switch;\n @query('mwc-menu') multiplierMenu?: Menu;\n @query('mwc-icon-button') multiplierButton?: IconButton;\n\n private nulled: string | null = null;\n\n private selectMultiplier(se: SingleSelectedEvent): void {\n this.multiplier = this.multipliers[se.detail.index];\n }\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.helperPersistent = false;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.helperPersistent = true;\n this.disabled = true;\n }\n\n firstUpdated(): void {\n // await super.firstUpdated();\n if (this.multiplierMenu)\n this.multiplierMenu.anchor =\n (this.multiplierButton as HTMLElement) ?? null;\n }\n\n checkValidity(): boolean {\n if (\n this.reservedValues &&\n this.reservedValues.some(array => array === this.value)\n ) {\n this.textfield.setCustomValidity(get('textfield.unique'));\n return false;\n }\n this.textfield.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM\n return this.textfield.checkValidity();\n }\n\n reportValidity(): boolean {\n return this.textfield.reportValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderUnitSelector(): TemplateResult {\n if (this.multipliers.length && this.unit)\n return html`<div style=\"position:relative;\">\n <mwc-icon-button\n style=\"margin:5px;\"\n icon=\"more\"\n ?disabled=${this.null || this.disabledSwitch}\n @click=${() => this.multiplierMenu?.show()}\n ></mwc-icon-button>\n <mwc-menu\n @selected=${this.selectMultiplier}\n fixed\n .anchor=${this.multiplierButton ?? null}\n >${this.renderMulplierList()}</mwc-menu\n >\n </div>`;\n else return html``;\n }\n\n renderMulplierList(): TemplateResult {\n return html`${this.multipliers.map(\n multiplier =>\n html`<mwc-list-item ?selected=${multiplier === this.multiplier}\n >${multiplier === null\n ? get('textfield.noMultiplier')\n : multiplier}</mwc-list-item\n >`\n )}`;\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <mwc-textfield style=\"flex: auto;\"\n .value=${this.value}\n .suffix=${this.suffix}\n .helperPersistent=${this.helperPersistent}\n .disabled=${this.disabled}\n .required=${this.required}\n label=${this.label}\n helper=\"${ifDefined(this.helper)}\"\n validationMessage=\"${ifDefined(this.helper)}\"\n pattern=\"${ifDefined(this.pattern)}\"\n minLength=\"${ifDefined(this.minLength)}\"\n maxLength=\"${ifDefined(this.maxLength)}\"\n type=\"${ifDefined(this.type)}\"\n min=\"${ifDefined(this.min)}\"\n max=\"${ifDefined(this.max)}\"\n @change=\"${(e: Event) => this.value = (e.target as HTMLInputElement).value}\">\n </mwc-textfield>\n ${this.renderUnitSelector()}\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
package/dist/wizards.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { html } from 'lit-element';
2
- import { repeat } from 'lit-html/directives/repeat';
2
+ import { repeat } from 'lit-html/directives/repeat.js';
3
3
  import { get } from 'lit-translate';
4
4
  import '@material/mwc-icon';
5
5
  import '@material/mwc-list';
@@ -1 +1 @@
1
- {"version":3,"file":"wizards.js","sourceRoot":"","sources":["../src/wizards.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-check-list-item';\nimport '@material/mwc-list/mwc-list-item';\nimport { ListItem } from '@material/mwc-list/mwc-list-item';\n\nimport {\n identity,\n isEqual,\n isSame,\n newWizardEvent,\n Wizard,\n WizardActor,\n} from './foundation.js';\nimport { EditorAction, SimpleAction } from '@compas-oscd/core';\ninterface MergeOptions {\n title?: string;\n selected?: (diff: Diff<Element | string>) => boolean;\n disabled?: (diff: Diff<Element | string>) => boolean;\n auto?: (sink: Element, source: Element) => boolean;\n}\n\nexport type Diff<T> =\n | { ours: T; theirs: null }\n | { ours: null; theirs: T }\n | { ours: T; theirs: T };\n\nfunction describe(element: Element): string {\n const id = identity(element);\n\n return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');\n}\n\nfunction mergeWizardAction(\n attrDiffs: [string, Diff<string>][],\n childDiffs: Diff<Element>[],\n sink: Element,\n source: Element,\n options?: MergeOptions\n): WizardActor {\n return (_, wizard: Element): EditorAction[] => {\n const actions: SimpleAction[] = [];\n const checkList = wizard.shadowRoot!.querySelector('mwc-list')!;\n\n const selectedAttrDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('attr'))\n .map(item => attrDiffs[item.value as unknown as number]);\n\n const newSink = <Element>sink.cloneNode(false);\n const parent = selectedAttrDiffs.length ? newSink : sink;\n if (selectedAttrDiffs.length) {\n if (sink.childElementCount === 0) newSink.textContent = sink.textContent;\n for (const [name, diff] of selectedAttrDiffs)\n if (name === 'value') {\n newSink.textContent = diff.theirs;\n } else if (diff.theirs === null) newSink.removeAttribute(name);\n else newSink.setAttribute(name, diff.theirs);\n actions.push({ old: { element: sink }, new: { element: newSink } });\n }\n\n let acted = false;\n\n const selectedChildDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('child'))\n .map(item => childDiffs[item.value as unknown as number]);\n if (selectedChildDiffs.length) {\n for (const diff of selectedChildDiffs)\n if (!diff.ours)\n actions.push({\n new: { parent, element: diff.theirs },\n });\n else if (!diff.theirs)\n actions.push({\n old: {\n parent,\n element: diff.ours,\n reference: diff.ours.nextSibling,\n },\n });\n else {\n acted = true;\n wizard.dispatchEvent(\n newWizardEvent(\n mergeWizard(diff.ours, diff.theirs, {\n ...options,\n title: undefined,\n })\n )\n );\n }\n }\n\n if (actions.length === 0 && !acted) wizard.dispatchEvent(newWizardEvent());\n\n return [\n {\n actions,\n title: get('merge.log', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n },\n ];\n };\n}\n\nexport function mergeWizard(\n sink: Element,\n source: Element,\n options?: MergeOptions\n): Wizard {\n const attrDiffs: [string, Diff<string>][] = [];\n const ourText = sink.textContent ?? '';\n const theirText = source.textContent ?? '';\n\n if (\n sink.childElementCount === 0 &&\n source.childElementCount === 0 &&\n theirText !== ourText\n )\n attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);\n\n const attributeNames = new Set(\n source.getAttributeNames().concat(sink.getAttributeNames())\n );\n\n for (const name of attributeNames)\n if (source.getAttribute(name) !== sink.getAttribute(name))\n attrDiffs.push([\n name,\n <Diff<string>>{\n theirs: source.getAttribute(name),\n ours: sink.getAttribute(name),\n },\n ]);\n\n const childDiffs: Diff<Element>[] = [];\n const ourChildren = Array.from(sink.children);\n const theirChildren = Array.from(source.children);\n\n theirChildren.forEach(theirs => {\n const twinIndex = ourChildren.findIndex(ourChild =>\n isSame(theirs, ourChild)\n );\n const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;\n\n if (ours) ourChildren.splice(twinIndex, 1);\n if (ours && isEqual(theirs, ours)) return;\n\n if (!ours || !isEqual(theirs, ours)) childDiffs.push({ theirs, ours });\n });\n\n ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));\n\n return [\n {\n title:\n options?.title ??\n get('merge.defaultTitle', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n primary: {\n label: get('merge.title'),\n icon: 'merge_type',\n action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),\n auto: options?.auto?.(sink, source) ?? false,\n },\n content: [\n html`\n <mwc-list multi>\n ${repeat(\n attrDiffs,\n e => e,\n ([name, diff], index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"attr\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${name}</span>\n <span slot=\"secondary\"\n >${diff.ours ?? ''}\n ${diff.ours && diff.theirs ? html`&cularr;` : ' '}\n ${diff.theirs ?? ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'edit'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n ${childDiffs.length\n ? html`<mwc-list-item noninteractive\n >${get('merge.children')}</mwc-list-item\n >\n <li padded divider role=\"separator\"></li>`\n : ''}\n ${repeat(\n childDiffs,\n e => e,\n (diff, index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"child\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>\n <span slot=\"secondary\"\n >${diff.ours ? describe(diff.ours) : ''}\n ${diff.ours &&\n diff.theirs &&\n describe(diff.ours) + describe(diff.theirs)\n ? html`&cularr;`\n : ' '}\n ${diff.theirs ? describe(diff.theirs) : ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'merge_type'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n </mwc-list>\n `,\n ],\n },\n ];\n}\n"]}
1
+ {"version":3,"file":"wizards.js","sourceRoot":"","sources":["../src/wizards.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-check-list-item';\nimport '@material/mwc-list/mwc-list-item';\nimport { ListItem } from '@material/mwc-list/mwc-list-item';\n\nimport {\n identity,\n isEqual,\n isSame,\n newWizardEvent,\n Wizard,\n WizardActor,\n} from './foundation.js';\nimport { EditorAction, SimpleAction } from '@compas-oscd/core';\ninterface MergeOptions {\n title?: string;\n selected?: (diff: Diff<Element | string>) => boolean;\n disabled?: (diff: Diff<Element | string>) => boolean;\n auto?: (sink: Element, source: Element) => boolean;\n}\n\nexport type Diff<T> =\n | { ours: T; theirs: null }\n | { ours: null; theirs: T }\n | { ours: T; theirs: T };\n\nfunction describe(element: Element): string {\n const id = identity(element);\n\n return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');\n}\n\nfunction mergeWizardAction(\n attrDiffs: [string, Diff<string>][],\n childDiffs: Diff<Element>[],\n sink: Element,\n source: Element,\n options?: MergeOptions\n): WizardActor {\n return (_, wizard: Element): EditorAction[] => {\n const actions: SimpleAction[] = [];\n const checkList = wizard.shadowRoot!.querySelector('mwc-list')!;\n\n const selectedAttrDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('attr'))\n .map(item => attrDiffs[item.value as unknown as number]);\n\n const newSink = <Element>sink.cloneNode(false);\n const parent = selectedAttrDiffs.length ? newSink : sink;\n if (selectedAttrDiffs.length) {\n if (sink.childElementCount === 0) newSink.textContent = sink.textContent;\n for (const [name, diff] of selectedAttrDiffs)\n if (name === 'value') {\n newSink.textContent = diff.theirs;\n } else if (diff.theirs === null) newSink.removeAttribute(name);\n else newSink.setAttribute(name, diff.theirs);\n actions.push({ old: { element: sink }, new: { element: newSink } });\n }\n\n let acted = false;\n\n const selectedChildDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('child'))\n .map(item => childDiffs[item.value as unknown as number]);\n if (selectedChildDiffs.length) {\n for (const diff of selectedChildDiffs)\n if (!diff.ours)\n actions.push({\n new: { parent, element: diff.theirs },\n });\n else if (!diff.theirs)\n actions.push({\n old: {\n parent,\n element: diff.ours,\n reference: diff.ours.nextSibling,\n },\n });\n else {\n acted = true;\n wizard.dispatchEvent(\n newWizardEvent(\n mergeWizard(diff.ours, diff.theirs, {\n ...options,\n title: undefined,\n })\n )\n );\n }\n }\n\n if (actions.length === 0 && !acted) wizard.dispatchEvent(newWizardEvent());\n\n return [\n {\n actions,\n title: get('merge.log', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n },\n ];\n };\n}\n\nexport function mergeWizard(\n sink: Element,\n source: Element,\n options?: MergeOptions\n): Wizard {\n const attrDiffs: [string, Diff<string>][] = [];\n const ourText = sink.textContent ?? '';\n const theirText = source.textContent ?? '';\n\n if (\n sink.childElementCount === 0 &&\n source.childElementCount === 0 &&\n theirText !== ourText\n )\n attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);\n\n const attributeNames = new Set(\n source.getAttributeNames().concat(sink.getAttributeNames())\n );\n\n for (const name of attributeNames)\n if (source.getAttribute(name) !== sink.getAttribute(name))\n attrDiffs.push([\n name,\n <Diff<string>>{\n theirs: source.getAttribute(name),\n ours: sink.getAttribute(name),\n },\n ]);\n\n const childDiffs: Diff<Element>[] = [];\n const ourChildren = Array.from(sink.children);\n const theirChildren = Array.from(source.children);\n\n theirChildren.forEach(theirs => {\n const twinIndex = ourChildren.findIndex(ourChild =>\n isSame(theirs, ourChild)\n );\n const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;\n\n if (ours) ourChildren.splice(twinIndex, 1);\n if (ours && isEqual(theirs, ours)) return;\n\n if (!ours || !isEqual(theirs, ours)) childDiffs.push({ theirs, ours });\n });\n\n ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));\n\n return [\n {\n title:\n options?.title ??\n get('merge.defaultTitle', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n primary: {\n label: get('merge.title'),\n icon: 'merge_type',\n action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),\n auto: options?.auto?.(sink, source) ?? false,\n },\n content: [\n html`\n <mwc-list multi>\n ${repeat(\n attrDiffs,\n e => e,\n ([name, diff], index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"attr\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${name}</span>\n <span slot=\"secondary\"\n >${diff.ours ?? ''}\n ${diff.ours && diff.theirs ? html`&cularr;` : ' '}\n ${diff.theirs ?? ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'edit'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n ${childDiffs.length\n ? html`<mwc-list-item noninteractive\n >${get('merge.children')}</mwc-list-item\n >\n <li padded divider role=\"separator\"></li>`\n : ''}\n ${repeat(\n childDiffs,\n e => e,\n (diff, index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"child\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>\n <span slot=\"secondary\"\n >${diff.ours ? describe(diff.ours) : ''}\n ${diff.ours &&\n diff.theirs &&\n describe(diff.ours) + describe(diff.theirs)\n ? html`&cularr;`\n : ' '}\n ${diff.theirs ? describe(diff.theirs) : ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'merge_type'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n </mwc-list>\n `,\n ],\n },\n ];\n}\n"]}