@ixfx/components 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/index.d.ts +207 -111
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +357 -223
- package/bundle/index.js.map +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/checkbox.d.ts.map +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/crumbs.d.ts +1 -1
- package/dist/crumbs.d.ts.map +1 -1
- package/dist/crumbs.js +1 -1
- package/dist/crumbs.js.map +1 -1
- package/dist/data-display.js.map +1 -1
- package/dist/incr-search.d.ts +1 -1
- package/dist/{index-BMjri2-S.d.ts → index-9fGVAg1d.d.ts} +2 -2
- package/dist/{index-BMjri2-S.d.ts.map → index-9fGVAg1d.d.ts.map} +1 -1
- package/dist/index-CowKi2mo.d.ts.map +1 -1
- package/dist/{index-CWpNcQKE.d.ts → index-_RTQSKHi.d.ts} +2 -2
- package/dist/{index-CWpNcQKE.d.ts.map → index-_RTQSKHi.d.ts.map} +1 -1
- package/dist/index.d.ts +10 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/menu.d.ts +1 -1
- package/dist/miller.d.ts +1 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js.map +1 -1
- package/dist/plots.d.ts +1 -1
- package/dist/plots.js +1 -1
- package/dist/split-layout.js.map +1 -1
- package/dist/swipe.d.ts.map +1 -1
- package/dist/swipe.js.map +1 -1
- package/dist/timeline-2OFtN4Ta.js.map +1 -1
- package/dist/{tree-CJWpMUvD.js → tree-D84RUgFC.js} +2 -2
- package/dist/tree-D84RUgFC.js.map +1 -0
- package/dist/{tree-component-BcO26Xvt.d.ts → tree-component-BaCSPWg1.d.ts} +1 -6
- package/dist/tree-component-BaCSPWg1.d.ts.map +1 -0
- package/dist/tree.d.ts +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{xy-axis-McdUpcYr.d.ts → xy-axis-CEI7ojks.d.ts} +173 -70
- package/dist/xy-axis-CEI7ojks.d.ts.map +1 -0
- package/dist/{xy-axis-CK64haaK.js → xy-axis-DbPezP6A.js} +188 -54
- package/dist/xy-axis-DbPezP6A.js.map +1 -0
- package/dist/xy-pad.d.ts.map +1 -1
- package/dist/xy-pad.js.map +1 -1
- package/package.json +2 -2
- package/dist/tree-CJWpMUvD.js.map +0 -1
- package/dist/tree-component-BcO26Xvt.d.ts.map +0 -1
- package/dist/xy-axis-CK64haaK.js.map +0 -1
- package/dist/xy-axis-McdUpcYr.d.ts.map +0 -1
package/dist/button.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ declare class ButtonElement extends LitElement {
|
|
|
6
6
|
icon?: string;
|
|
7
7
|
hideIcon: boolean;
|
|
8
8
|
hideLabel: boolean;
|
|
9
|
-
protected _renderIcon(): import("lit").TemplateResult<1
|
|
9
|
+
protected _renderIcon(): typeof nothing | import("lit").TemplateResult<1>;
|
|
10
10
|
protected render(): import("lit").TemplateResult<1>;
|
|
11
11
|
static styles: import("lit").CSSResult[];
|
|
12
12
|
}
|
package/dist/button.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","names":[],"sources":["../src/button/button.ts"],"mappings":";;;cASa,aAAA,SAAsB,UAAU;EAE3C,QAAA;EAGA,IAAA;EAGA,QAAA;EAGA,SAAA;EAAA,UAEU,WAAA,
|
|
1
|
+
{"version":3,"file":"button.d.ts","names":[],"sources":["../src/button/button.ts"],"mappings":";;;cASa,aAAA,SAAsB,UAAU;EAE3C,QAAA;EAGA,IAAA;EAGA,QAAA;EAGA,SAAA;EAAA,UAEU,WAAA,WAAW,OAAA,iBAAA,cAAA;EAAA,UAgBX,MAAA,kBAAM,cAAA;EAAA,OAOT,MAAA,gBAAM,SAAA;AAAA;AAAA,QAMP,MAAA;EAAA,UACI,qBAAA;IACR,aAAA,EAAe,aAAa;EAAA;AAAA"}
|
package/dist/checkbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.d.ts","names":[],"sources":["../src/checkbox/checkbox.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","names":[],"sources":["../src/checkbox/checkbox.ts"],"mappings":";;;cA2Ca,QAAA,SAAiB,UAAA;EAAA;SACrB,MAAA,gBAAM,SAAA;EAiKgB,OAAA;EACA,QAAA;EACA,aAAA;EACD,KAAA;EACA,IAAA;EACA,KAAA;EAanB,MAAA,IAAU,UAAA,QAAkB,IAAA;AAAA;AAAA,KAoB3B,oBAAA;EAAA,SACD,OAAO;AAAA;AAAA,KAGN,mBAAA,GAAsB,WAAW,CAAC,oBAAA;AAAA,QAEtC,MAAA;EAAA,UACI,qBAAA;IACR,eAAA,EAAiB,QAAQ;EAAA;AAAA;AAAA,UAIZ,gBAAA;EACf,MAAA,EAAQ,mBAAmB;AAAA;AAAA,UAGZ,QAAA;EACf,gBAAA,oBAAoC,gBAAA,EAClC,IAAA,EAAM,CAAA,EACN,QAAA,GAAW,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,gBAAA,CAAiB,CAAA,YACnD,OAAA,aAAoB,uBAAA,eAEpB,IAAA,UACA,QAAA,EAAU,kCAAA,EACV,OAAA,aAAoB,uBAAA;AAAA"}
|
package/dist/checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","names":["#handleChange","customElement"],"sources":["../src/checkbox/checkbox.ts"],"sourcesContent":["/**\n * <x-checkbox> — Custom checkbox with diagonal line indicator.\n *\n * A brutalist checkbox component featuring a thick diagonal line\n * (top-left to bottom-right) when checked. Uses shadow DOM with\n * CSS variables for appearance customization.\n *\n * Properties\n * checked – checkbox state (default: false)\n * disabled – disabled state (default: false)\n * label – label text\n * name – form field name\n * value – form field value\n *\n * Events\n * change – CustomEvent { detail: { checked: boolean } }, bubbles + composed\n *\n * CSS Variables\n * --box-size – box size (default: 18px)\n * --box-border-width – border width (default: 2px)\n * --box-border-color – border color\n * --box-bg-unchecked – background when unchecked\n * --box-bg-checked – background when checked\n * --check-line-color – diagonal line color\n * --check-line-width – diagonal line thickness (default: 6px)\n * --box-opacity-unchecked – opacity when unchecked (default: 0.5)\n * --box-opacity-checked – opacity when checked (default: 1)\n * --box-opacity-hover – opacity on hover (default: 1)\n * --box-opacity-disabled – opacity when disabled (default: 0.3)\n * --box-label-gap – gap between box and label (default: 8px)\n * --label-font-size – label font size (default: 14px)\n * --label-opacity – label opacity (default: 1)\n * --label-opacity-unchecked – label opacity when unchecked (default: uses --label-opacity)\n * --transition-duration – animation duration (default: 0.2s)\n */\nimport { css, html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { prominenceStyles } from '../styles/prominence.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\n\n@customElement(`ixfx-checkbox`)\nexport class Checkbox extends LitElement {\n static styles = [prominenceStyles, themeFallbacks, css`\n :host {\n /* Box */\n --box-size: 18px;\n --box-border-color: var(--surface-4);\n --box-bg-unchecked: color-mix(in oklch, var(--surface-3) 50%, var(--surface-2));\n --box-bg-checked: color-mix(in oklch, var(--surface-3) 50%, var(--surface-2));\n --box-opacity-checked: 1;\n --box-opacity-hover: var(--prominence-tickled-opacity);\n --box-opacity-disabled: var(--prominence-disabled-opacity);\n --box-border-width: 2px;\n \n /* Check */\n --check-line-width: 6px;\n --check-line-color: var(--accent);\n\n /* Spacing & borders */\n --label-gap: var(--space-m);\n\n /* Label */\n --label-opacity: 1;\n --label-opacity-unchecked: var(--label-opacity);\n --label-fg: var(--surface-3-text);\n --label-active: var(--surface-2-text);\n --label-hover: var(--surface-2-text);\n\n /* Animation */\n --transition-duration: var(--transition);\n\n display: inline-flex;\n user-select: none;\n }\n\n label {\n display: inline-flex;\n align-items: center;\n gap: var(--label-gap);\n cursor: pointer;\n position: relative;\n opacity: var(--box-opacity-unchecked);\n transition: opacity var(--transition-duration);\n }\n\n label:hover {\n opacity: var(--box-opacity-hover);\n }\n\n label:has(input:checked) {\n opacity: var(--box-opacity-checked);\n }\n\n input {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n }\n\n .box {\n position: relative;\n width: var(--box-size);\n height: var(--box-size);\n border: var(--border, 1px solid #999);\n background: var(--box-bg-unchecked);\n flex-shrink: 0;\n transition: background var(--transition-duration);\n overflow: hidden;\n box-shadow: inset 1px 1px 0px 1px color-mix(in oklch, var(--surface-2) 60%, transparent);\n }\n label:has(input:not(:disabled)) {\n .box:hover {\n background: color-mix(in oklch, var(--surface-4) 80%, transparent);\n border-color: var(--accent, #666);\n box-shadow: unset;\n }\n }\n\n input:checked ~ .box {\n background: var(--box-bg-checked);\n }\n\n /* Diagonal line from top-left to bottom-right */\n .box::after {\n content: '';\n position: absolute;\n width: 141.4%; /* sqrt(2) × 100% to span corner-to-corner */\n height: var(--check-line-width);\n background: var(--check-line-color);\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) rotate(45deg);\n opacity: 0;\n transition: opacity var(--transition-duration);\n }\n\n input:checked ~ .box::after {\n opacity: 1;\n }\n\n /* Horizontal line for indeterminate state */\n .box::before {\n content: '';\n position: absolute;\n width: 60%;\n height: var(--check-line-width);\n background: var(--check-line-color);\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: opacity var(--transition-duration);\n }\n\n input:indeterminate ~ .box::before {\n opacity: 1;\n }\n\n /* Hide diagonal checkmark when indeterminate (must come after checked rule) */\n input:indeterminate ~ .box::after {\n opacity: 0;\n }\n\n /* Focus state */\n input:focus-visible ~ .box {\n outline: 2px solid var(--check-line-color);\n outline-offset: 2px;\n }\n\n /* Disabled state */\n label:has(input:disabled) {\n opacity: var(--box-opacity-disabled);\n cursor: not-allowed;\n .box {\n box-shadow: unset;\n } \n }\n\n .label {\n color: var(--label-fg);\n opacity: var(--label-opacity);\n transition: opacity var(--transition-duration);\n user-select: none;\n -webkit-user-select: none;\n }\n\n .label:hover {\n color: var(--label-hover);\n }\n .label:has(+ :hover) {\n color: var(--label-hover);\n }\n .label:has(+ :active) {\n color: var(--label-active);\n }\n input:not(:checked) ~ .label {\n opacity: var(--label-opacity-unchecked);\n }\n `];\n\n @property({ type: Boolean }) checked = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) indeterminate = false;\n @property({ type: String }) label = ``;\n @property({ type: String }) name = ``;\n @property({ type: String }) value = ``;\n\n #handleChange = (e: Event): void => {\n const target = e.target as HTMLInputElement;\n this.checked = target.checked;\n\n this.dispatchEvent(new CustomEvent<CheckboxChangeDetail>(`change`, {\n detail: { checked: this.checked },\n bubbles: true,\n composed: true,\n }));\n };\n\n override render(): ReturnType<typeof html> {\n return html`\n <label>\n <input\n name=\"checkbox\"\n type=\"checkbox\"\n .checked=${this.checked}\n .disabled=${this.disabled}\n .indeterminate=${this.indeterminate}\n .name=${this.name}\n .value=${this.value}\n @change=${this.#handleChange}\n />\n <span class=\"box\"></span>\n ${this.label ? html`<span class=\"label\">${this.label}</span>` : ``}\n </label>\n `;\n }\n}\n\nexport type CheckboxChangeDetail = {\n readonly checked: boolean;\n};\n\nexport type CheckboxChangeEvent = CustomEvent<CheckboxChangeDetail>;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-checkbox': Checkbox;\n }\n}\n\nexport interface CheckboxEventMap {\n change: CheckboxChangeEvent;\n}\n\nexport interface Checkbox {\n addEventListener: (<K extends keyof CheckboxEventMap>(\n type: K,\n listener: (this: Checkbox, event: CheckboxEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":["#handleChange","customElement"],"sources":["../src/checkbox/checkbox.ts"],"sourcesContent":["/* eslint-disable ts/no-unsafe-declaration-merging */\n/**\n * <x-checkbox> — Custom checkbox with diagonal line indicator.\n *\n * A brutalist checkbox component featuring a thick diagonal line\n * (top-left to bottom-right) when checked. Uses shadow DOM with\n * CSS variables for appearance customization.\n *\n * Properties\n * checked – checkbox state (default: false)\n * disabled – disabled state (default: false)\n * label – label text\n * name – form field name\n * value – form field value\n *\n * Events\n * change – CustomEvent { detail: { checked: boolean } }, bubbles + composed\n *\n * CSS Variables\n * --box-size – box size (default: 18px)\n * --box-border-width – border width (default: 2px)\n * --box-border-color – border color\n * --box-bg-unchecked – background when unchecked\n * --box-bg-checked – background when checked\n * --check-line-color – diagonal line color\n * --check-line-width – diagonal line thickness (default: 6px)\n * --box-opacity-unchecked – opacity when unchecked (default: 0.5)\n * --box-opacity-checked – opacity when checked (default: 1)\n * --box-opacity-hover – opacity on hover (default: 1)\n * --box-opacity-disabled – opacity when disabled (default: 0.3)\n * --box-label-gap – gap between box and label (default: 8px)\n * --label-font-size – label font size (default: 14px)\n * --label-opacity – label opacity (default: 1)\n * --label-opacity-unchecked – label opacity when unchecked (default: uses --label-opacity)\n * --transition-duration – animation duration (default: 0.2s)\n */\nimport { css, html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { prominenceStyles } from '../styles/prominence.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\n\n@customElement(`ixfx-checkbox`)\nexport class Checkbox extends LitElement {\n static styles = [prominenceStyles, themeFallbacks, css`\n :host {\n /* Box */\n --box-size: 18px;\n --box-border-color: var(--surface-4);\n --box-bg-unchecked: color-mix(in oklch, var(--surface-3) 50%, var(--surface-2));\n --box-bg-checked: color-mix(in oklch, var(--surface-3) 50%, var(--surface-2));\n --box-opacity-checked: 1;\n --box-opacity-hover: var(--prominence-tickled-opacity);\n --box-opacity-disabled: var(--prominence-disabled-opacity);\n --box-border-width: 2px;\n \n /* Check */\n --check-line-width: 6px;\n --check-line-color: var(--accent);\n\n /* Spacing & borders */\n --label-gap: var(--space-m);\n\n /* Label */\n --label-opacity: 1;\n --label-opacity-unchecked: var(--label-opacity);\n --label-fg: var(--surface-3-text);\n --label-active: var(--surface-2-text);\n --label-hover: var(--surface-2-text);\n\n /* Animation */\n --transition-duration: var(--transition);\n\n display: inline-flex;\n user-select: none;\n }\n\n label {\n display: inline-flex;\n align-items: center;\n gap: var(--label-gap);\n cursor: pointer;\n position: relative;\n opacity: var(--box-opacity-unchecked);\n transition: opacity var(--transition-duration);\n }\n\n label:hover {\n opacity: var(--box-opacity-hover);\n }\n\n label:has(input:checked) {\n opacity: var(--box-opacity-checked);\n }\n\n input {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n clip: rect(0, 0, 0, 0);\n }\n\n .box {\n position: relative;\n width: var(--box-size);\n height: var(--box-size);\n border: var(--border, 1px solid #999);\n background: var(--box-bg-unchecked);\n flex-shrink: 0;\n transition: background var(--transition-duration);\n overflow: hidden;\n box-shadow: inset 1px 1px 0px 1px color-mix(in oklch, var(--surface-2) 60%, transparent);\n }\n label:has(input:not(:disabled)) {\n .box:hover {\n background: color-mix(in oklch, var(--surface-4) 80%, transparent);\n border-color: var(--accent, #666);\n box-shadow: unset;\n }\n }\n\n input:checked ~ .box {\n background: var(--box-bg-checked);\n }\n\n /* Diagonal line from top-left to bottom-right */\n .box::after {\n content: '';\n position: absolute;\n width: 141.4%; /* sqrt(2) × 100% to span corner-to-corner */\n height: var(--check-line-width);\n background: var(--check-line-color);\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) rotate(45deg);\n opacity: 0;\n transition: opacity var(--transition-duration);\n }\n\n input:checked ~ .box::after {\n opacity: 1;\n }\n\n /* Horizontal line for indeterminate state */\n .box::before {\n content: '';\n position: absolute;\n width: 60%;\n height: var(--check-line-width);\n background: var(--check-line-color);\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: opacity var(--transition-duration);\n }\n\n input:indeterminate ~ .box::before {\n opacity: 1;\n }\n\n /* Hide diagonal checkmark when indeterminate (must come after checked rule) */\n input:indeterminate ~ .box::after {\n opacity: 0;\n }\n\n /* Focus state */\n input:focus-visible ~ .box {\n outline: 2px solid var(--check-line-color);\n outline-offset: 2px;\n }\n\n /* Disabled state */\n label:has(input:disabled) {\n opacity: var(--box-opacity-disabled);\n cursor: not-allowed;\n .box {\n box-shadow: unset;\n } \n }\n\n .label {\n color: var(--label-fg);\n opacity: var(--label-opacity);\n transition: opacity var(--transition-duration);\n user-select: none;\n -webkit-user-select: none;\n }\n\n .label:hover {\n color: var(--label-hover);\n }\n .label:has(+ :hover) {\n color: var(--label-hover);\n }\n .label:has(+ :active) {\n color: var(--label-active);\n }\n input:not(:checked) ~ .label {\n opacity: var(--label-opacity-unchecked);\n }\n `];\n\n @property({ type: Boolean }) checked = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) indeterminate = false;\n @property({ type: String }) label = ``;\n @property({ type: String }) name = ``;\n @property({ type: String }) value = ``;\n\n #handleChange = (e: Event): void => {\n const target = e.target as HTMLInputElement;\n this.checked = target.checked;\n\n this.dispatchEvent(new CustomEvent<CheckboxChangeDetail>(`change`, {\n detail: { checked: this.checked },\n bubbles: true,\n composed: true,\n }));\n };\n\n override render(): ReturnType<typeof html> {\n return html`\n <label>\n <input\n name=\"checkbox\"\n type=\"checkbox\"\n .checked=${this.checked}\n .disabled=${this.disabled}\n .indeterminate=${this.indeterminate}\n .name=${this.name}\n .value=${this.value}\n @change=${this.#handleChange}\n />\n <span class=\"box\"></span>\n ${this.label ? html`<span class=\"label\">${this.label}</span>` : ``}\n </label>\n `;\n }\n}\n\nexport type CheckboxChangeDetail = {\n readonly checked: boolean;\n};\n\nexport type CheckboxChangeEvent = CustomEvent<CheckboxChangeDetail>;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-checkbox': Checkbox;\n }\n}\n\nexport interface CheckboxEventMap {\n change: CheckboxChangeEvent;\n}\n\nexport interface Checkbox {\n addEventListener: (<K extends keyof CheckboxEventMap>(\n type: K,\n listener: (this: Checkbox, event: CheckboxEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CO,IAAA,WAAA,MAAM,iBAAiB,WAAW;;;iBAkKA;kBACC;uBACK;eACT;cACD;eACC;wBAEnB,MAAmB;GAClC,MAAM,SAAS,EAAE;GACjB,KAAK,UAAU,OAAO;GAEtB,KAAK,cAAc,IAAI,YAAkC,UAAU;IACjE,QAAQ,EAAE,SAAS,KAAK,QAAQ;IAChC,SAAS;IACT,UAAU;GACZ,CAAC,CAAC;EACJ;;;gBAjLgB;GAAC;GAAkB;GAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+JrD;;CASD;CAWA,SAA2C;EACzC,OAAO,IAAI;;;;;qBAKM,KAAK,QAAQ;sBACZ,KAAK,SAAS;2BACT,KAAK,cAAc;kBAC5B,KAAK,KAAK;mBACT,KAAK,MAAM;oBACV,KAAKA,cAAc;;;UAG7B,KAAK,QAAQ,IAAI,uBAAuB,KAAK,MAAM,WAAW,GAAG;;;CAGzE;AACF;YApCG,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,SAAA,WAAA,WAAA,KAAA,CAAA;YAC1B,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,SAAA,WAAA,YAAA,KAAA,CAAA;YAC1B,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,GAAA,SAAA,WAAA,iBAAA,KAAA,CAAA;YAC1B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,SAAA,WAAA,SAAA,KAAA,CAAA;YACzB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,SAAA,WAAA,QAAA,KAAA,CAAA;YACzB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,SAAA,WAAA,SAAA,KAAA,CAAA;uBAxK3BC,kBAAc,eAAe,CAAA,GAAA,QAAA"}
|
package/dist/crumbs.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as TreeNode, a as TreeComponent, b as TreeFilterPredicate, c as TreeExpandEvent, g as TreeDataModel, h as TreeTickleEvent, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSelectEvent, u as TreeItemClickEvent, v as LoadChildrenCallback, w as TreeSelectionFilter, y as TreeExclusivity } from "./tree-component-
|
|
1
|
+
import { C as TreeNode, a as TreeComponent, b as TreeFilterPredicate, c as TreeExpandEvent, g as TreeDataModel, h as TreeTickleEvent, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSelectEvent, u as TreeItemClickEvent, v as LoadChildrenCallback, w as TreeSelectionFilter, y as TreeExclusivity } from "./tree-component-BaCSPWg1.js";
|
|
2
2
|
import { LitElement, PropertyValues } from "lit";
|
|
3
3
|
|
|
4
4
|
//#region src/crumbs/crumb-navigation.d.ts
|
package/dist/crumbs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crumbs.d.ts","names":[],"sources":["../src/crumbs/crumb-navigation.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"crumbs.d.ts","names":[],"sources":["../src/crumbs/crumb-navigation.ts"],"mappings":";;;;;KAmCY,2BAAA;EAAA,SACD,QAAA,EAAU,QAAA;EAAA,SACV,QAAA,EAAU,QAAQ;AAAA;AAAA,KAGjB,0BAAA,GAA6B,WAAW,CAAC,2BAAA;AAAA,KAEzC,8BAAA;EAAmC,IAAA,EAAM,QAAQ;EAAE,KAAA;AAAA;AAAA,KACnD,6BAAA,GAAgC,WAAW,CAAC,8BAAA;AAAA,KAE5C,2BAAA;EAAgC,IAAA,EAAM,QAAQ;EAAE,KAAA;AAAA;AAAA,KAChD,0BAAA,GAA6B,WAAW,CAAC,2BAAA;;;;AAJe;AACpE;;;;AAAsF;AAEtF;;;;;;;;AAAiE;cAsBpD,sBAAA,SAA+B,UAAA,YAAsB,aAAA;EAAA;EAEhE,IAAA,EAAM,QAAA;EAGN,KAAA,EAAO,aAAA;EAGP,YAAA,EAAc,QAAA;EAAA,QAGN,cAAA;EAAA,IAEJ,aAAA,IAAiB,WAAA,CAAY,QAAA;;EAMjC,YAAA,EAAc,oBAAA;EAGd,eAAA,EAAiB,mBAAA;EAGjB,WAAA,EAAa,eAAA;EAGb,eAAA,EAAiB,mBAAA;EAAA,QAGT,QAAA;EAAA,QAGA,UAAA;EAAA,QAGA,SAAA;EAAA,QAGA,oBAAA;EAGR,SAAA;EAAA,QAUQ,OAAA;EAsSR,MAAA,CAAO,IAAA,EAAM,QAAA;EAIb,QAAA,CAAS,KAAA,EAAO,QAAA;EAIhB,cAAA;EAKA,QAAA,IAAY,aAAA;IAAgB,IAAA,EAAM,QAAA;IAAU,KAAA;EAAA;EAgBnC,OAAA,CAAQ,YAAA,EAAc,cAAA;EAkBtB,oBAAA;EA1YiC;EA4jB1C,UAAA,CAAW,IAAA;;EAiBX,cAAA,CAAe,SAAA,GAAY,IAAA,EAAM,QAAA;EAwCjC,MAAA,kBAAM,cAAA;EAAA,OA6JC,MAAA,gBAAM,SAAA;AAAA;AAAA,QA0JP,MAAA;EAAA,UACI,qBAAA;IACR,uBAAA,EAAyB,sBAAsB;EAAA;AAAA;AAAA,UAIlC,8BAAA,SAAuC,qBAAA;EACtD,YAAA,EAAc,kBAAA;EACd,QAAA,EAAU,eAAA;EACV,QAAA,EAAU,eAAA;EACV,QAAA,EAAU,eAAA;EACV,UAAA,EAAY,iBAAA;AAAA;AAAA,UAGG,sBAAA;EACf,gBAAA,oBAAoC,8BAAA,EAClC,IAAA,EAAM,CAAA,EACN,QAAA,GAAW,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,8BAAA,CAA+B,CAAA,YAC/E,OAAA,aAAoB,uBAAA,eAEpB,IAAA,UACA,QAAA,EAAU,kCAAA,EACV,OAAA,aAAoB,uBAAA;AAAA"}
|
package/dist/crumbs.js
CHANGED
|
@@ -410,7 +410,7 @@ let CrumbNavigationElement = class CrumbNavigationElement extends LitElement {
|
|
|
410
410
|
composed: true
|
|
411
411
|
}));
|
|
412
412
|
this.requestUpdate();
|
|
413
|
-
} catch
|
|
413
|
+
} catch {
|
|
414
414
|
if (controller.signal.aborted) return;
|
|
415
415
|
node.children = [];
|
|
416
416
|
this.#pendingNode = void 0;
|
package/dist/crumbs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crumbs.js","names":["#getTickledItems","#onTickled","#onMenuKeyNav","#currentOpenTrigger","#menuOpenedByKeyboard","#findPath","#hasChildOptions","#shiftFocusToNarrowedText","#handleOpenCaretMenu","#handleEnter","#shiftFocusToPath","#pendingNode","#propagateInputModeToMenu","#setSelected","#modelUnsubscribe","#runLayoutUpdate","#previousSelectionKey","#scrollToValue","#pendingController","#abortPending","#invokeLoadChildren","#onChildClick","#findNodePath","#onLabelClick","#onSegmentMenuCommand","#renderChildOptions","#onFocus","#onBlur","#onKeyDown","#onHostClick","#onMenuTriggerClose","#onMenuCommand","#getChildOptionsWidth","#onNarrowedTextChange","#onNarrowedTextBlur","#onNarrowedTextShiftTab","customElement"],"sources":["../src/crumbs/crumb-navigation.ts"],"sourcesContent":["import type { PropertyValues } from 'lit';\nimport type {\n TreeActivateEvent,\n TreeComponent,\n TreeComponentEventMap,\n TreeExpandEvent,\n TreeItemClickEvent,\n TreeSelectDetail,\n TreeSelectEvent,\n TreeTickleDetail,\n TreeTickleEvent,\n} from '../common/tree-component.js';\nimport type { TreeDataModel } from '../common/tree-data-model.js';\nimport type {\n TreeExclusivity,\n TreeFilterPredicate,\n TreeSelectionFilter,\n} from '../common/types.js';\nimport type { MenuTrigger } from '../menu/menu-trigger.js';\nimport type { LoadChildrenCallback, TreeNode } from '../tree/types.js';\nimport { collectDataResult } from '../common/data-provider.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\n\nimport { TickledController, tickledItemStyles, tickledStyles } from '../interaction/index.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport '../menu/menu-trigger.js';\nimport '../menu/menu-container.js';\nimport '../menu/menu-item.js';\n\nimport '../narrowed-text/index.js';\n\n/** @deprecated Use TreeSelectDetail from src/common/tree-component.ts */\nexport type CrumbNavigationChangeDetail = {\n readonly selected: TreeNode;\n readonly previous: TreeNode | undefined;\n};\n\nexport type CrumbNavigationChangeEvent = CustomEvent<CrumbNavigationChangeDetail>;\n\nexport type CrumbNavigationItemClickDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationItemClickEvent = CustomEvent<CrumbNavigationItemClickDetail>;\n\nexport type CrumbNavigationExpandDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationExpandEvent = CustomEvent<CrumbNavigationExpandDetail>;\n\n/**\n * Breadcrumb navigation with lazy-loading support.\n *\n * Uses the same `TreeNode` / `TreeItem` data model as `ixfx-tree-list`,\n * so the two components can be swapped with minimal code changes.\n *\n * Events\n * - `navigate`: fired when user clicks a breadcrumb label. detail: `{ node: TreeNode }`\n * - `change`: fired when selected node changes. detail: `{ selected: TreeNode, previous: TreeNode | undefined }`\n * - `expand`: fired when user clicks a caret whose node has no children yet.\n * detail: `{ node: TreeNode, depth: number, signal: AbortSignal }`\n * Populate `node.children` then call `requestUpdate()` on the element.\n *\n * CSS variables\n * --text-highlight: var(--accent); // highlight on mouse hover\n * --separator: var(--surface-muted-text); // text colour of separator character\n * --padding-s: var(--space-xs); // padding between items\n */\n@customElement(`ixfx-crumb-navigation`)\nexport class CrumbNavigationElement extends LitElement implements TreeComponent {\n @property({ type: Object })\n root: TreeNode | undefined;\n\n @property({ attribute: false })\n model: TreeDataModel | undefined;\n\n @property({ type: Object })\n selectedNode: TreeNode | undefined;\n\n @state()\n private _selectedNodes = new Set<TreeNode>();\n\n get selectedNodes(): ReadonlySet<TreeNode> {\n return this._selectedNodes;\n }\n\n /** Callback to lazily load children for a node. When set, replaces event-based lazy loading. */\n @property({ attribute: false })\n loadChildren: LoadChildrenCallback | undefined;\n\n @property({ attribute: false })\n filterPredicate: TreeFilterPredicate | undefined;\n\n @property({ reflect: true, attribute: `exclusivity` })\n exclusivity: TreeExclusivity = `none`;\n\n @property({ reflect: true, attribute: `selection-filter` })\n selectionFilter: TreeSelectionFilter = `leaf`;\n\n @state()\n private _openIdx = -1;\n\n @state()\n private _isFocused = false;\n\n @state()\n private _menuOpen = false;\n\n @state()\n private _focusOnNarrowedText = false;\n\n @property({ reflect: true, attribute: `input-mode` })\n inputMode: string = ``;\n\n #pendingNode: TreeNode | undefined;\n #pendingController: AbortController | undefined;\n #modelUnsubscribe: (() => void) | undefined;\n\n #previousSelectionKey = ``;\n #menuOpenedByKeyboard = false;\n #currentOpenTrigger: MenuTrigger | null = null;\n\n private tickled = new TickledController<number>(this, {\n getItems: () => this.#getTickledItems(),\n onTickle: (index) => {\n if (index !== undefined) {\n this.#onTickled(index);\n }\n },\n });\n\n #getTickledItems() {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return [];\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const items: Array<{ id: number; enabled: boolean }> = [];\n\n pathNodes.forEach((_node, i) => {\n items.push({ id: i, enabled: true });\n });\n\n if (this.#hasChildOptions()) {\n items.push({ id: pathNodes.length, enabled: true });\n }\n\n return items;\n }\n\n #onTickled(index: number) {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const hasChildOptions = this.#hasChildOptions();\n\n if (index < pathNodes.length) {\n this._openIdx = index;\n } else if (hasChildOptions && index === pathNodes.length) {\n this._openIdx = pathNodes.length - 1;\n }\n }\n\n #hasChildOptions(): boolean {\n const s = this.selectedNode;\n if (s === undefined)\n return false;\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n return children.length > 0 || isPending;\n }\n\n #onFocus = (): void => {\n this._isFocused = true;\n };\n\n #onBlur = (): void => {\n this._isFocused = false;\n };\n\n #onHostClick = (): void => {\n this.shadowRoot?.querySelector<HTMLElement>(`.host-container`)?.focus();\n };\n\n #handleOpenCaretMenu() {\n const currentTickled = this.tickled.tickledId;\n if (currentTickled === undefined)\n return;\n\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n\n // For non-last segments: open the inline caret menu for that segment\n if (currentTickled < pathNodes.length - 1) {\n const segments = this.shadowRoot?.querySelectorAll<HTMLElement>(`.crumb-segment`);\n const trigger = segments?.[currentTickled]?.querySelector<MenuTrigger>(`.caret ixfx-menu-trigger`);\n if (trigger) {\n this.#menuOpenedByKeyboard = true;\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n return;\n }\n }\n\n // Last segment or the child-options separator: open the child-options menu\n if (this.#hasChildOptions()) {\n const trigger = this.shadowRoot?.querySelector<MenuTrigger>(`#child-options-trigger`);\n if (trigger) {\n this.#menuOpenedByKeyboard = true;\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n }\n }\n }\n\n #propagateInputModeToMenu(): void {\n const inputMode = this.tickled.inputMode;\n requestAnimationFrame(() => {\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (container) {\n container.setAttribute(`data-input-mode`, inputMode);\n }\n });\n }\n\n #onMenuTriggerClose = (): void => {\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n this.#menuOpenedByKeyboard = false;\n requestAnimationFrame(() => {\n this.shadowRoot?.querySelector<HTMLElement>(`.host-container`)?.focus();\n });\n };\n\n #onMenuKeyNav = (e: KeyboardEvent): void => {\n // Only handle ArrowLeft/ArrowRight - close menu and navigate to previous/next breadcrumb segment\n // ArrowDown/ArrowUp should pass through to let the menu handle them\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (!container || !this.#currentOpenTrigger?.isOpen)\n return;\n\n switch (e.key) {\n case `ArrowLeft`:\n case `ArrowRight`: {\n e.preventDefault();\n e.stopPropagation();\n this.#currentOpenTrigger.closeMenu();\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n break;\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const totalItems = pathNodes.length + (this.#hasChildOptions() ? 1 : 0);\n const currentTickled = this.tickled.tickledId ?? -1;\n if (e.key === `ArrowLeft`) {\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n } else {\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n }\n }\n break;\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent): void => {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const totalItems = pathNodes.length + (this.#hasChildOptions() ? 1 : 0);\n const currentTickled = this.tickled.tickledId ?? -1;\n\n switch (e.key) {\n case `ArrowRight`: {\n e.preventDefault();\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n } else if (currentTickled === totalItems - 1) {\n this.#shiftFocusToNarrowedText();\n }\n break;\n }\n case `ArrowLeft`: {\n e.preventDefault();\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n break;\n }\n case `ArrowDown`:\n case `ArrowUp`: {\n if (this.tickled.tickledId !== undefined) {\n e.preventDefault();\n if (this.#currentOpenTrigger?.isOpen) {\n // Menu is already open - dispatch ArrowDown to the popover element for it to handle\n const container = this.#currentOpenTrigger.querySelector(`ixfx-menu-container`);\n const popover = container?.shadowRoot?.querySelector(`.popover`);\n if (popover) {\n popover.dispatchEvent(new KeyboardEvent(`keydown`, { key: e.key, bubbles: true }));\n }\n } else {\n this.#handleOpenCaretMenu();\n }\n }\n break;\n }\n case `Enter`: {\n e.preventDefault();\n this.#handleEnter();\n break;\n }\n case `Escape`: {\n e.preventDefault();\n this._menuOpen = false;\n this.tickled.clearTickled();\n this.blur();\n break;\n }\n case `Tab`: {\n if (e.shiftKey) {\n e.preventDefault();\n this.#shiftFocusToPath();\n } else if (currentTickled === totalItems - 1) {\n e.preventDefault();\n this._menuOpen = false;\n this._focusOnNarrowedText = true;\n const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);\n if (narrowedText) {\n narrowedText.focus();\n }\n }\n break;\n }\n }\n };\n\n #handleEnter() {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const hasChildOptions = this.#hasChildOptions();\n const currentTickled = this.tickled.tickledId ?? -1;\n\n if (currentTickled < pathNodes.length) {\n const node = pathNodes[currentTickled];\n this.#setSelected(node);\n this._menuOpen = false;\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth: currentTickled },\n bubbles: true,\n composed: true,\n }));\n } else if (hasChildOptions && currentTickled === pathNodes.length) {\n this._menuOpen = true;\n this.#menuOpenedByKeyboard = true;\n const trigger = this.shadowRoot?.querySelector<MenuTrigger>(`#child-options-trigger`);\n if (trigger) {\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n }\n }\n }\n\n #shiftFocusToNarrowedText() {\n const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);\n if (narrowedText) {\n this._focusOnNarrowedText = true;\n narrowedText.focus();\n }\n }\n\n #shiftFocusToPath() {\n this._focusOnNarrowedText = false;\n const hostContainer = this.shadowRoot?.querySelector<HTMLElement>(`.host-container`);\n if (hostContainer) {\n hostContainer.focus();\n }\n }\n\n #onNarrowedTextBlur = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n #onNarrowedTextShiftTab = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n // --- TreeComponent methods ---\n\n select(node: TreeNode): void {\n this.#setSelected(node);\n }\n\n deselect(_node: TreeNode): void {\n // Crumb navigation is single-selection; deselect navigates to parent or root\n }\n\n clearSelection(): void {\n if (this.root)\n this.#setSelected(this.root);\n }\n\n getNodes(): ReadonlyArray<{ node: TreeNode; depth: number }> {\n if (!this.root)\n return [];\n const result: Array<{ node: TreeNode; depth: number }> = [];\n const visit = (node: TreeNode, depth: number) => {\n result.push({ node, depth });\n if (node.children) {\n for (const child of node.children) visit(child, depth + 1);\n }\n };\n for (const child of this.root.children ?? []) visit(child, 0);\n return result;\n }\n\n // --- Lifecycle ---\n\n override updated(changedProps: PropertyValues): void {\n if (changedProps.has(`model`)) {\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n const model = this.model;\n if (model) {\n this.root = model.root;\n this.#modelUnsubscribe = model._subscribe((event) => {\n if (event.type === `root`) {\n this.root = event.root;\n this.requestUpdate();\n }\n });\n }\n }\n this.#runLayoutUpdate(changedProps);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n }\n\n #runLayoutUpdate(_changedProperties: PropertyValues): void {\n if (!this.shadowRoot)\n return;\n\n const hsiElement: HTMLElement | null = this.shadowRoot.querySelector(`.horiz-select-items`);\n if (!hsiElement)\n return;\n\n const ulElement: HTMLElement | null = hsiElement.querySelector(`ul`);\n if (!ulElement)\n return;\n\n const menuTrigger: HTMLElement | null = this.shadowRoot.querySelector(`ixfx-menu-trigger`);\n if (!menuTrigger)\n return;\n\n if (ulElement.getBoundingClientRect().width > hsiElement.getBoundingClientRect().width) {\n menuTrigger.style.display = `inline-flex`;\n } else {\n menuTrigger.style.display = `none`;\n }\n\n for (const li of ulElement.querySelectorAll(`li`)) {\n const key = li.getAttribute(`data-key`) ?? ``;\n if (key === this.#previousSelectionKey) {\n this.#scrollToValue(li);\n break;\n }\n }\n }\n\n #scrollToValue(li: HTMLLIElement) {\n let l = li.offsetLeft;\n\n const ul = li.parentElement;\n if (!ul)\n return;\n l -= ul.offsetLeft;\n\n const horizSelectItems = ul.parentElement;\n if (!horizSelectItems)\n return;\n horizSelectItems.scroll({ left: l, top: 0, behavior: `smooth` });\n\n const horizSelect = horizSelectItems.parentElement;\n if (!horizSelect)\n return;\n horizSelect.style.minWidth = `${li.getBoundingClientRect().width}px`;\n }\n\n #abortPending() {\n if (this.#pendingController) {\n this.#pendingController.abort();\n this.#pendingController = undefined;\n this.#pendingNode = undefined;\n }\n }\n\n #findPath(node: TreeNode, target: TreeNode, acc: TreeNode[] = []): TreeNode[] | undefined {\n const path = [...acc, node];\n if (node === target)\n return path;\n if (!node.children)\n return undefined;\n for (const child of node.children) {\n const result = this.#findPath(child, target, path);\n if (result)\n return result;\n }\n return undefined;\n }\n\n #setSelected(node: TreeNode) {\n const previous = this.selectedNode;\n if (previous) {\n this.#previousSelectionKey = previous.item?.key ?? ``;\n } else {\n this.#previousSelectionKey = ``;\n }\n const previousSet: ReadonlySet<TreeNode> = previous ? new Set([previous]) : new Set();\n this.selectedNode = node;\n this._selectedNodes = new Set([node]);\n\n this.dispatchEvent(new CustomEvent<TreeSelectDetail>(`select`, {\n detail: { selected: new Set([node]), previous: previousSet },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onLabelClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onCaretClick(node: TreeNode, depth: number, e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (this._openIdx === depth) {\n this._openIdx = -1;\n return;\n }\n this._openIdx = depth;\n\n if (node.children === undefined && this.#pendingNode !== node) {\n this.#abortPending();\n this.#pendingNode = node;\n const controller = new AbortController();\n this.#pendingController = controller;\n\n if (this.loadChildren) {\n this.#invokeLoadChildren(node, depth, controller).catch(() => {});\n }\n }\n\n this.requestUpdate();\n }\n\n async #invokeLoadChildren(node: TreeNode, depth: number, controller: AbortController): Promise<void> {\n try {\n const children = [...await collectDataResult(\n this.loadChildren!({ node, depth }, controller.signal),\n controller.signal,\n )];\n if (controller.signal.aborted)\n return;\n node.children = children;\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.dispatchEvent(new CustomEvent<CrumbNavigationExpandDetail>(`expand`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n this.requestUpdate();\n } catch (err) {\n if (controller.signal.aborted)\n return;\n node.children = [];\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.requestUpdate();\n }\n }\n\n #onSegmentMenuCommand(e: CustomEvent, node: TreeNode, depth: number) {\n const key = e.detail.command;\n const child = node.children?.find(c => c.item.key === key);\n if (child) {\n this.#onChildClick(child, depth + 1);\n }\n }\n\n #onChildClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n /** Navigate to a node by key path. Returns false if any key is not found in already-loaded children. */\n navigateTo(keys: readonly string[]): boolean {\n if (!this.root?.children)\n return false;\n let current: TreeNode | undefined = this.root;\n for (const key of keys) {\n const found: TreeNode | undefined = current?.children?.find(n => n.item.key === key);\n if (!found)\n return false;\n current = found;\n }\n if (current && current !== this.root) {\n this.#setSelected(current);\n }\n return true;\n }\n\n /** Navigate to the first node matching the predicate. Returns false if not found. */\n navigateToNode(predicate: (node: TreeNode) => boolean): boolean {\n if (!this.root)\n return false;\n const keyPath = this.#findNodePath(this.root.children ?? [], predicate);\n if (!keyPath)\n return false;\n return this.navigateTo(keyPath);\n }\n\n #findNodePath(\n nodes: TreeNode[],\n predicate: (node: TreeNode) => boolean,\n prefix: string[] = [],\n ): string[] | undefined {\n for (const node of nodes) {\n const path = [...prefix, node.item.key];\n if (predicate(node))\n return path;\n if (node.children?.length) {\n const result = this.#findNodePath(node.children, predicate, path);\n if (result)\n return result;\n }\n }\n return undefined;\n }\n\n #onMenuCommand(e: CustomEvent) {\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const key = e.detail.command;\n const child = node.children.find(c => c.item.key === key);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n render() {\n const r = this.root;\n const sel = this.selectedNode;\n\n if (!r || !sel) {\n return html``;\n }\n\n this.inputMode = this.tickled.inputMode;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const hasChildOptions = this.#hasChildOptions();\n\n const parts = pathNodes.map((node, i) => {\n const isLast = i === pathNodes.length - 1;\n const isPending = this.#pendingNode === node;\n const isOpen = this._openIdx === i;\n const hasChildren = node.item.isLeaf !== true && (node.children === undefined || node.children.length > 0);\n const showCaret = !isLast && hasChildren;\n const isTickled = this.tickled.isTickled(i);\n\n const menuItems = (node.children ?? []).map(c => html`\n <ixfx-menu-item \n label=\"${c.item.label}\" \n command=\"${c.item.key}\"\n icon-name=\"${c.item.icon ?? nothing}\"\n ></ixfx-menu-item>\n `);\n\n return html`\n <div class=\"item crumb-segment ${isTickled ? `tickled` : ``}\"\n @pointerenter=${() => {\n this.tickled.handlePointerEnter(i);\n this.dispatchEvent(new CustomEvent<TreeTickleDetail>(`tickle`, { detail: { node, depth: i }, bubbles: true, composed: true }));\n }}\n >\n <span class=\"label\" @click=${() => this.#onLabelClick(node, i)}>${node.item.label}</span>\n ${showCaret\n ? html`\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${menuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n `\n : nothing\n }\n </div>\n `;\n });\n\n const childOptions = this.#renderChildOptions();\n const isLastItemTickled = this.tickled.isTickled(pathNodes.length);\n return html`\n <div\n class=\"host-container\"\n tabindex=\"0\"\n @focus=${this.#onFocus}\n @blur=${this.#onBlur}\n @keydown=${this.#onKeyDown}\n @click=${this.#onHostClick}\n @menu-trigger-close=${this.#onMenuTriggerClose}\n @pointerleave=${(e: PointerEvent) => this.tickled.handlePointerLeave(e)}\n >\n <div class=\"parts\">${parts}</div>\n ${childOptions\n ? html`\n <ixfx-menu-trigger\n id=\"child-options-trigger\"\n class=\"item separator-trigger ${isLastItemTickled ? `tickled` : ``}\"\n mode=\"trigger\"\n label=\"›\"\n @menu-command=${this.#onMenuCommand}\n @pointerenter=${() => this.tickled.handlePointerEnter(pathNodes.length)}\n >\n <ixfx-menu-container slot=\"menu\">\n ${(this.selectedNode?.children ?? []).map(c => html`\n <ixfx-menu-item \n label=\"${c.item.label}\" \n command=\"${c.item.key}\"\n icon-name=\"${c.item.icon ?? nothing}\"\n ></ixfx-menu-item>\n `)}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n : nothing}\n ${childOptions}\n </div>\n `;\n }\n\n #renderChildOptions() {\n const s = this.selectedNode;\n if (s === undefined) {\n return nothing;\n }\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n if (children.length === 0 && !isPending) {\n return nothing;\n }\n\n if (isPending) {\n return html`\n <div class=\"horiz-select\">\n <div class=\"horiz-select-items\">\n <span class=\"loading-spinner\"></span>\n </div>\n </div>\n `;\n }\n\n return html`\n <ixfx-narrowed-text\n class=\"horiz-select\"\n selection-mode=\"single\"\n orientation=\"horizontal\"\n nowrap\n width=${this.#getChildOptionsWidth()}\n @change=${this.#onNarrowedTextChange}\n @narrowed-text-blur=${this.#onNarrowedTextBlur}\n @narrowed-text-shift-tab=${this.#onNarrowedTextShiftTab}\n >\n ${children.map(c => html`\n <span data-value=\"${c.item.key}\" data-label=\"${c.item.label}\"></span>\n `)}\n </ixfx-narrowed-text>\n `;\n }\n\n #onNarrowedTextChange(e: CustomEvent) {\n const detail = e.detail as { item: { value: string } };\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const child = node.children.find(c => c.item.key === detail.item.value);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n #getChildOptionsWidth(): string {\n return `var(--child-options-width, 50ch)`;\n }\n\n static styles = [themeFallbacks, tickledStyles, tickledItemStyles, css`\n :host {\n --text-highlight: var(--accent);\n --separator: var(--surface-muted-text);\n --padding-s: var(--space-xs);\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n\n /* Breadcrumb tickled overrides — no layout shift: keep transparent border at rest */\n --item-padding: 0;\n }\n\n :host(.focused) {\n outline: none;\n }\n\n :host([input-mode=\"keyboard\"]) .host-container {\n outline: 2px solid var(--accent);\n outline-offset: 2px;\n }\n\n .host-container {\n display: flex;\n width: 100%;\n outline: none;\n }\n\n .parts {\n display: flex;\n }\n\n .crumb-segment {\n display: flex;\n align-items: center;\n }\n\n .label {\n cursor: pointer;\n margin-right: var(--padding-s);\n white-space: nowrap;\n }\n\n .caret {\n position: relative;\n cursor: pointer;\n padding: var(--padding-m);\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease-in-out;\n }\n\n .caret.open {\n background: color-mix(in srgb, var(--surface-5) 40%, transparent);\n }\n\n .caret.pending {\n display: inline-flex;\n }\n\n .caret > ixfx-menu-trigger {\n display: inline-flex;\n margin: 0;\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .caret > ixfx-menu-trigger::part(base) {\n background: none;\n border: none;\n color: inherit;\n padding: 0;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .caret > ixfx-menu-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator {\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n }\n\n .separator-trigger {\n display: inline-flex;\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .separator-trigger::part(base) {\n background: none;\n border: none;\n color: var(--separator);\n padding: 0;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .separator-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator-trigger.tickled::part(base) {\n }\n\n ixfx-menu-trigger {\n display: none;\n }\n\n .horiz-select > ixfx-menu-trigger {\n display: inline-flex;\n }\n\n .horiz-select {\n display: flex;\n min-width: 5ch;\n }\n\n .loading-spinner {\n display: inline-block;\n width: 12px;\n height: 12px;\n border: 2px solid var(--surface-5);\n border-top-color: var(--accent);\n border-radius: 50%;\n animation: crumb-spin 0.7s linear infinite;\n }\n\n @keyframes crumb-spin {\n to { transform: rotate(360deg); }\n }\n\n ::slotted(*), option {\n user-select: none;\n scroll-snap-align: start;\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-navigation\": CrumbNavigationElement;\n }\n}\n\nexport interface CrumbNavigationElementEventMap extends TreeComponentEventMap {\n 'item-click': TreeItemClickEvent;\n 'expand': TreeExpandEvent;\n 'select': TreeSelectEvent;\n 'tickle': TreeTickleEvent;\n 'activate': TreeActivateEvent;\n}\n\nexport interface CrumbNavigationElement {\n addEventListener: (<K extends keyof CrumbNavigationElementEventMap>(\n type: K,\n listener: (this: CrumbNavigationElement, event: CrumbNavigationElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crumbs.js","names":["#getTickledItems","#onTickled","#onMenuKeyNav","#currentOpenTrigger","#menuOpenedByKeyboard","#findPath","#hasChildOptions","#shiftFocusToNarrowedText","#handleOpenCaretMenu","#handleEnter","#shiftFocusToPath","#pendingNode","#propagateInputModeToMenu","#setSelected","#modelUnsubscribe","#runLayoutUpdate","#previousSelectionKey","#scrollToValue","#pendingController","#abortPending","#invokeLoadChildren","#onChildClick","#findNodePath","#onLabelClick","#onSegmentMenuCommand","#renderChildOptions","#onFocus","#onBlur","#onKeyDown","#onHostClick","#onMenuTriggerClose","#onMenuCommand","#getChildOptionsWidth","#onNarrowedTextChange","#onNarrowedTextBlur","#onNarrowedTextShiftTab","customElement"],"sources":["../src/crumbs/crumb-navigation.ts"],"sourcesContent":["/* eslint-disable ts/no-unsafe-declaration-merging */\nimport type { PropertyValues } from 'lit';\nimport type {\n TreeActivateEvent,\n TreeComponent,\n TreeComponentEventMap,\n TreeExpandEvent,\n TreeItemClickEvent,\n TreeSelectDetail,\n TreeSelectEvent,\n TreeTickleDetail,\n TreeTickleEvent,\n} from '../common/tree-component.js';\nimport type { TreeDataModel } from '../common/tree-data-model.js';\nimport type {\n TreeExclusivity,\n TreeFilterPredicate,\n TreeSelectionFilter,\n} from '../common/types.js';\nimport type { MenuTrigger } from '../menu/menu-trigger.js';\nimport type { LoadChildrenCallback, TreeNode } from '../tree/types.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { collectDataResult } from '../common/data-provider.js';\n\nimport { TickledController, tickledItemStyles, tickledStyles } from '../interaction/index.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport '../menu/menu-trigger.js';\nimport '../menu/menu-container.js';\nimport '../menu/menu-item.js';\n\nimport '../narrowed-text/index.js';\n\n/** @deprecated Use TreeSelectDetail from src/common/tree-component.ts */\nexport type CrumbNavigationChangeDetail = {\n readonly selected: TreeNode;\n readonly previous: TreeNode | undefined;\n};\n\nexport type CrumbNavigationChangeEvent = CustomEvent<CrumbNavigationChangeDetail>;\n\nexport type CrumbNavigationItemClickDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationItemClickEvent = CustomEvent<CrumbNavigationItemClickDetail>;\n\nexport type CrumbNavigationExpandDetail = { node: TreeNode; depth: number };\nexport type CrumbNavigationExpandEvent = CustomEvent<CrumbNavigationExpandDetail>;\n\n/**\n * Breadcrumb navigation with lazy-loading support.\n *\n * Uses the same `TreeNode` / `TreeItem` data model as `ixfx-tree-list`,\n * so the two components can be swapped with minimal code changes.\n *\n * Events\n * - `navigate`: fired when user clicks a breadcrumb label. detail: `{ node: TreeNode }`\n * - `change`: fired when selected node changes. detail: `{ selected: TreeNode, previous: TreeNode | undefined }`\n * - `expand`: fired when user clicks a caret whose node has no children yet.\n * detail: `{ node: TreeNode, depth: number, signal: AbortSignal }`\n * Populate `node.children` then call `requestUpdate()` on the element.\n *\n * CSS variables\n * --text-highlight: var(--accent); // highlight on mouse hover\n * --separator: var(--surface-muted-text); // text colour of separator character\n * --padding-s: var(--space-xs); // padding between items\n */\n@customElement(`ixfx-crumb-navigation`)\nexport class CrumbNavigationElement extends LitElement implements TreeComponent {\n @property({ type: Object })\n root: TreeNode | undefined;\n\n @property({ attribute: false })\n model: TreeDataModel | undefined;\n\n @property({ type: Object })\n selectedNode: TreeNode | undefined;\n\n @state()\n private _selectedNodes = new Set<TreeNode>();\n\n get selectedNodes(): ReadonlySet<TreeNode> {\n return this._selectedNodes;\n }\n\n /** Callback to lazily load children for a node. When set, replaces event-based lazy loading. */\n @property({ attribute: false })\n loadChildren: LoadChildrenCallback | undefined;\n\n @property({ attribute: false })\n filterPredicate: TreeFilterPredicate | undefined;\n\n @property({ reflect: true, attribute: `exclusivity` })\n exclusivity: TreeExclusivity = `none`;\n\n @property({ reflect: true, attribute: `selection-filter` })\n selectionFilter: TreeSelectionFilter = `leaf`;\n\n @state()\n private _openIdx = -1;\n\n @state()\n private _isFocused = false;\n\n @state()\n private _menuOpen = false;\n\n @state()\n private _focusOnNarrowedText = false;\n\n @property({ reflect: true, attribute: `input-mode` })\n inputMode: string = ``;\n\n #pendingNode: TreeNode | undefined;\n #pendingController: AbortController | undefined;\n #modelUnsubscribe: (() => void) | undefined;\n\n #previousSelectionKey = ``;\n #menuOpenedByKeyboard = false;\n #currentOpenTrigger: MenuTrigger | null = null;\n\n private tickled = new TickledController<number>(this, {\n getItems: () => this.#getTickledItems(),\n onTickle: (index) => {\n if (index !== undefined) {\n this.#onTickled(index);\n }\n },\n });\n\n #getTickledItems() {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return [];\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const items: Array<{ id: number; enabled: boolean }> = [];\n\n pathNodes.forEach((_node, i) => {\n items.push({ id: i, enabled: true });\n });\n\n if (this.#hasChildOptions()) {\n items.push({ id: pathNodes.length, enabled: true });\n }\n\n return items;\n }\n\n #onTickled(index: number) {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const hasChildOptions = this.#hasChildOptions();\n\n if (index < pathNodes.length) {\n this._openIdx = index;\n } else if (hasChildOptions && index === pathNodes.length) {\n this._openIdx = pathNodes.length - 1;\n }\n }\n\n #hasChildOptions(): boolean {\n const s = this.selectedNode;\n if (s === undefined)\n return false;\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n return children.length > 0 || isPending;\n }\n\n #onFocus = (): void => {\n this._isFocused = true;\n };\n\n #onBlur = (): void => {\n this._isFocused = false;\n };\n\n #onHostClick = (): void => {\n this.shadowRoot?.querySelector<HTMLElement>(`.host-container`)?.focus();\n };\n\n #handleOpenCaretMenu() {\n const currentTickled = this.tickled.tickledId;\n if (currentTickled === undefined)\n return;\n\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n\n // For non-last segments: open the inline caret menu for that segment\n if (currentTickled < pathNodes.length - 1) {\n const segments = this.shadowRoot?.querySelectorAll<HTMLElement>(`.crumb-segment`);\n const trigger = segments?.[currentTickled]?.querySelector<MenuTrigger>(`.caret ixfx-menu-trigger`);\n if (trigger) {\n this.#menuOpenedByKeyboard = true;\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n return;\n }\n }\n\n // Last segment or the child-options separator: open the child-options menu\n if (this.#hasChildOptions()) {\n const trigger = this.shadowRoot?.querySelector<MenuTrigger>(`#child-options-trigger`);\n if (trigger) {\n this.#menuOpenedByKeyboard = true;\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n }\n }\n }\n\n #propagateInputModeToMenu(): void {\n const inputMode = this.tickled.inputMode;\n requestAnimationFrame(() => {\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (container) {\n container.setAttribute(`data-input-mode`, inputMode);\n }\n });\n }\n\n #onMenuTriggerClose = (): void => {\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n this.#menuOpenedByKeyboard = false;\n requestAnimationFrame(() => {\n this.shadowRoot?.querySelector<HTMLElement>(`.host-container`)?.focus();\n });\n };\n\n #onMenuKeyNav = (e: KeyboardEvent): void => {\n // Only handle ArrowLeft/ArrowRight - close menu and navigate to previous/next breadcrumb segment\n // ArrowDown/ArrowUp should pass through to let the menu handle them\n const container = this.#currentOpenTrigger?.querySelector(`ixfx-menu-container`);\n if (!container || !this.#currentOpenTrigger?.isOpen)\n return;\n\n switch (e.key) {\n case `ArrowLeft`:\n case `ArrowRight`: {\n e.preventDefault();\n e.stopPropagation();\n this.#currentOpenTrigger.closeMenu();\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n break;\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const totalItems = pathNodes.length + (this.#hasChildOptions() ? 1 : 0);\n const currentTickled = this.tickled.tickledId ?? -1;\n if (e.key === `ArrowLeft`) {\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n } else {\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n }\n }\n break;\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent): void => {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const totalItems = pathNodes.length + (this.#hasChildOptions() ? 1 : 0);\n const currentTickled = this.tickled.tickledId ?? -1;\n\n switch (e.key) {\n case `ArrowRight`: {\n e.preventDefault();\n if (currentTickled < totalItems - 1) {\n this.tickled.handleKeyboardNavigation(`next`);\n } else if (currentTickled === totalItems - 1) {\n this.#shiftFocusToNarrowedText();\n }\n break;\n }\n case `ArrowLeft`: {\n e.preventDefault();\n if (currentTickled > 0) {\n this.tickled.handleKeyboardNavigation(`previous`);\n }\n break;\n }\n case `ArrowDown`:\n case `ArrowUp`: {\n if (this.tickled.tickledId !== undefined) {\n e.preventDefault();\n if (this.#currentOpenTrigger?.isOpen) {\n // Menu is already open - dispatch ArrowDown to the popover element for it to handle\n const container = this.#currentOpenTrigger.querySelector(`ixfx-menu-container`);\n const popover = container?.shadowRoot?.querySelector(`.popover`);\n if (popover) {\n popover.dispatchEvent(new KeyboardEvent(`keydown`, { key: e.key, bubbles: true }));\n }\n } else {\n this.#handleOpenCaretMenu();\n }\n }\n break;\n }\n case `Enter`: {\n e.preventDefault();\n this.#handleEnter();\n break;\n }\n case `Escape`: {\n e.preventDefault();\n this._menuOpen = false;\n this.tickled.clearTickled();\n this.blur();\n break;\n }\n case `Tab`: {\n if (e.shiftKey) {\n e.preventDefault();\n this.#shiftFocusToPath();\n } else if (currentTickled === totalItems - 1) {\n e.preventDefault();\n this._menuOpen = false;\n this._focusOnNarrowedText = true;\n const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);\n if (narrowedText) {\n narrowedText.focus();\n }\n }\n break;\n }\n }\n };\n\n #handleEnter() {\n const r = this.root;\n const sel = this.selectedNode;\n if (!r || !sel)\n return;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const hasChildOptions = this.#hasChildOptions();\n const currentTickled = this.tickled.tickledId ?? -1;\n\n if (currentTickled < pathNodes.length) {\n const node = pathNodes[currentTickled];\n this.#setSelected(node);\n this._menuOpen = false;\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth: currentTickled },\n bubbles: true,\n composed: true,\n }));\n } else if (hasChildOptions && currentTickled === pathNodes.length) {\n this._menuOpen = true;\n this.#menuOpenedByKeyboard = true;\n const trigger = this.shadowRoot?.querySelector<MenuTrigger>(`#child-options-trigger`);\n if (trigger) {\n this.#currentOpenTrigger = trigger;\n document.addEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n trigger.openMenu();\n this.#propagateInputModeToMenu();\n }\n }\n }\n\n #shiftFocusToNarrowedText() {\n const narrowedText = this.shadowRoot?.querySelector(`ixfx-narrowed-text`);\n if (narrowedText) {\n this._focusOnNarrowedText = true;\n narrowedText.focus();\n }\n }\n\n #shiftFocusToPath() {\n this._focusOnNarrowedText = false;\n const hostContainer = this.shadowRoot?.querySelector<HTMLElement>(`.host-container`);\n if (hostContainer) {\n hostContainer.focus();\n }\n }\n\n #onNarrowedTextBlur = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n #onNarrowedTextShiftTab = (): void => {\n this._focusOnNarrowedText = false;\n this.#shiftFocusToPath();\n };\n\n // --- TreeComponent methods ---\n\n select(node: TreeNode): void {\n this.#setSelected(node);\n }\n\n deselect(_node: TreeNode): void {\n // Crumb navigation is single-selection; deselect navigates to parent or root\n }\n\n clearSelection(): void {\n if (this.root)\n this.#setSelected(this.root);\n }\n\n getNodes(): ReadonlyArray<{ node: TreeNode; depth: number }> {\n if (!this.root)\n return [];\n const result: Array<{ node: TreeNode; depth: number }> = [];\n const visit = (node: TreeNode, depth: number) => {\n result.push({ node, depth });\n if (node.children) {\n for (const child of node.children) visit(child, depth + 1);\n }\n };\n for (const child of this.root.children ?? []) visit(child, 0);\n return result;\n }\n\n // --- Lifecycle ---\n\n override updated(changedProps: PropertyValues): void {\n if (changedProps.has(`model`)) {\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n const model = this.model;\n if (model) {\n this.root = model.root;\n this.#modelUnsubscribe = model._subscribe((event) => {\n if (event.type === `root`) {\n this.root = event.root;\n this.requestUpdate();\n }\n });\n }\n }\n this.#runLayoutUpdate(changedProps);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#modelUnsubscribe?.();\n this.#modelUnsubscribe = undefined;\n document.removeEventListener(`keydown`, this.#onMenuKeyNav, { capture: true });\n this.#currentOpenTrigger = null;\n }\n\n #runLayoutUpdate(_changedProperties: PropertyValues): void {\n if (!this.shadowRoot)\n return;\n\n const hsiElement: HTMLElement | null = this.shadowRoot.querySelector(`.horiz-select-items`);\n if (!hsiElement)\n return;\n\n const ulElement: HTMLElement | null = hsiElement.querySelector(`ul`);\n if (!ulElement)\n return;\n\n const menuTrigger: HTMLElement | null = this.shadowRoot.querySelector(`ixfx-menu-trigger`);\n if (!menuTrigger)\n return;\n\n if (ulElement.getBoundingClientRect().width > hsiElement.getBoundingClientRect().width) {\n menuTrigger.style.display = `inline-flex`;\n } else {\n menuTrigger.style.display = `none`;\n }\n\n for (const li of ulElement.querySelectorAll(`li`)) {\n const key = li.getAttribute(`data-key`) ?? ``;\n if (key === this.#previousSelectionKey) {\n this.#scrollToValue(li);\n break;\n }\n }\n }\n\n #scrollToValue(li: HTMLLIElement) {\n let l = li.offsetLeft;\n\n const ul = li.parentElement;\n if (!ul)\n return;\n l -= ul.offsetLeft;\n\n const horizSelectItems = ul.parentElement;\n if (!horizSelectItems)\n return;\n horizSelectItems.scroll({ left: l, top: 0, behavior: `smooth` });\n\n const horizSelect = horizSelectItems.parentElement;\n if (!horizSelect)\n return;\n horizSelect.style.minWidth = `${li.getBoundingClientRect().width}px`;\n }\n\n #abortPending() {\n if (this.#pendingController) {\n this.#pendingController.abort();\n this.#pendingController = undefined;\n this.#pendingNode = undefined;\n }\n }\n\n #findPath(node: TreeNode, target: TreeNode, acc: TreeNode[] = []): TreeNode[] | undefined {\n const path = [...acc, node];\n if (node === target)\n return path;\n if (!node.children)\n return undefined;\n for (const child of node.children) {\n const result = this.#findPath(child, target, path);\n if (result)\n return result;\n }\n return undefined;\n }\n\n #setSelected(node: TreeNode) {\n const previous = this.selectedNode;\n if (previous) {\n this.#previousSelectionKey = previous.item?.key ?? ``;\n } else {\n this.#previousSelectionKey = ``;\n }\n const previousSet: ReadonlySet<TreeNode> = previous ? new Set([previous]) : new Set();\n this.selectedNode = node;\n this._selectedNodes = new Set([node]);\n\n this.dispatchEvent(new CustomEvent<TreeSelectDetail>(`select`, {\n detail: { selected: new Set([node]), previous: previousSet },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onLabelClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n #onCaretClick(node: TreeNode, depth: number, e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (this._openIdx === depth) {\n this._openIdx = -1;\n return;\n }\n this._openIdx = depth;\n\n if (node.children === undefined && this.#pendingNode !== node) {\n this.#abortPending();\n this.#pendingNode = node;\n const controller = new AbortController();\n this.#pendingController = controller;\n\n if (this.loadChildren) {\n this.#invokeLoadChildren(node, depth, controller).catch(() => {});\n }\n }\n\n this.requestUpdate();\n }\n\n async #invokeLoadChildren(node: TreeNode, depth: number, controller: AbortController): Promise<void> {\n try {\n const children = [...await collectDataResult(\n this.loadChildren!({ node, depth }, controller.signal),\n controller.signal,\n )];\n if (controller.signal.aborted)\n return;\n node.children = children;\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.dispatchEvent(new CustomEvent<CrumbNavigationExpandDetail>(`expand`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n this.requestUpdate();\n } catch {\n if (controller.signal.aborted)\n return;\n node.children = [];\n this.#pendingNode = undefined;\n this.#pendingController = undefined;\n this.requestUpdate();\n }\n }\n\n #onSegmentMenuCommand(e: CustomEvent, node: TreeNode, depth: number) {\n const key = e.detail.command;\n const child = node.children?.find(c => c.item.key === key);\n if (child) {\n this.#onChildClick(child, depth + 1);\n }\n }\n\n #onChildClick(node: TreeNode, depth: number) {\n this._openIdx = -1;\n this.#setSelected(node);\n this.dispatchEvent(new CustomEvent<CrumbNavigationItemClickDetail>(`item-click`, {\n detail: { node, depth },\n bubbles: true,\n composed: true,\n }));\n }\n\n /** Navigate to a node by key path. Returns false if any key is not found in already-loaded children. */\n navigateTo(keys: readonly string[]): boolean {\n if (!this.root?.children)\n return false;\n let current: TreeNode | undefined = this.root;\n for (const key of keys) {\n const found: TreeNode | undefined = current?.children?.find(n => n.item.key === key);\n if (!found)\n return false;\n current = found;\n }\n if (current && current !== this.root) {\n this.#setSelected(current);\n }\n return true;\n }\n\n /** Navigate to the first node matching the predicate. Returns false if not found. */\n navigateToNode(predicate: (node: TreeNode) => boolean): boolean {\n if (!this.root)\n return false;\n const keyPath = this.#findNodePath(this.root.children ?? [], predicate);\n if (!keyPath)\n return false;\n return this.navigateTo(keyPath);\n }\n\n #findNodePath(\n nodes: TreeNode[],\n predicate: (node: TreeNode) => boolean,\n prefix: string[] = [],\n ): string[] | undefined {\n for (const node of nodes) {\n const path = [...prefix, node.item.key];\n if (predicate(node))\n return path;\n if (node.children?.length) {\n const result = this.#findNodePath(node.children, predicate, path);\n if (result)\n return result;\n }\n }\n return undefined;\n }\n\n #onMenuCommand(e: CustomEvent) {\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const key = e.detail.command;\n const child = node.children.find(c => c.item.key === key);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n render() {\n const r = this.root;\n const sel = this.selectedNode;\n\n if (!r || !sel) {\n return html``;\n }\n\n this.inputMode = this.tickled.inputMode;\n\n const pathNodes = this.#findPath(r, sel) ?? [r];\n const _hasChildOptions = this.#hasChildOptions();\n\n const parts = pathNodes.map((node, i) => {\n const isLast = i === pathNodes.length - 1;\n const isPending = this.#pendingNode === node;\n const isOpen = this._openIdx === i;\n const hasChildren = node.item.isLeaf !== true && (node.children === undefined || node.children.length > 0);\n const showCaret = !isLast && hasChildren;\n const isTickled = this.tickled.isTickled(i);\n\n const menuItems = (node.children ?? []).map(c => html`\n <ixfx-menu-item \n label=\"${c.item.label}\" \n command=\"${c.item.key}\"\n icon-name=\"${c.item.icon ?? nothing}\"\n ></ixfx-menu-item>\n `);\n\n return html`\n <div class=\"item crumb-segment ${isTickled ? `tickled` : ``}\"\n @pointerenter=${() => {\n this.tickled.handlePointerEnter(i);\n this.dispatchEvent(new CustomEvent<TreeTickleDetail>(`tickle`, { detail: { node, depth: i }, bubbles: true, composed: true }));\n }}\n >\n <span class=\"label\" @click=${() => this.#onLabelClick(node, i)}>${node.item.label}</span>\n ${showCaret\n ? html`\n <span class=\"caret ${isOpen ? `open` : ``} ${isPending ? `pending` : ``}\">\n ${isPending\n ? html`<span class=\"loading-spinner\"></span>`\n : html`\n <ixfx-menu-trigger mode=\"trigger\" label=\"›\" @menu-command=${(e: CustomEvent) => this.#onSegmentMenuCommand(e, node, i)}>\n <ixfx-menu-container slot=\"menu\">\n ${menuItems}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n }\n </span>\n `\n : nothing\n }\n </div>\n `;\n });\n\n const childOptions = this.#renderChildOptions();\n const isLastItemTickled = this.tickled.isTickled(pathNodes.length);\n return html`\n <div\n class=\"host-container\"\n tabindex=\"0\"\n @focus=${this.#onFocus}\n @blur=${this.#onBlur}\n @keydown=${this.#onKeyDown}\n @click=${this.#onHostClick}\n @menu-trigger-close=${this.#onMenuTriggerClose}\n @pointerleave=${(e: PointerEvent) => this.tickled.handlePointerLeave(e)}\n >\n <div class=\"parts\">${parts}</div>\n ${childOptions\n ? html`\n <ixfx-menu-trigger\n id=\"child-options-trigger\"\n class=\"item separator-trigger ${isLastItemTickled ? `tickled` : ``}\"\n mode=\"trigger\"\n label=\"›\"\n @menu-command=${this.#onMenuCommand}\n @pointerenter=${() => this.tickled.handlePointerEnter(pathNodes.length)}\n >\n <ixfx-menu-container slot=\"menu\">\n ${(this.selectedNode?.children ?? []).map(c => html`\n <ixfx-menu-item \n label=\"${c.item.label}\" \n command=\"${c.item.key}\"\n icon-name=\"${c.item.icon ?? nothing}\"\n ></ixfx-menu-item>\n `)}\n </ixfx-menu-container>\n </ixfx-menu-trigger>\n `\n : nothing}\n ${childOptions}\n </div>\n `;\n }\n\n #renderChildOptions() {\n const s = this.selectedNode;\n if (s === undefined) {\n return nothing;\n }\n\n const isPending = this.#pendingNode === s;\n const children = s.children ?? [];\n\n if (children.length === 0 && !isPending) {\n return nothing;\n }\n\n if (isPending) {\n return html`\n <div class=\"horiz-select\">\n <div class=\"horiz-select-items\">\n <span class=\"loading-spinner\"></span>\n </div>\n </div>\n `;\n }\n\n return html`\n <ixfx-narrowed-text\n class=\"horiz-select\"\n selection-mode=\"single\"\n orientation=\"horizontal\"\n nowrap\n width=${this.#getChildOptionsWidth()}\n @change=${this.#onNarrowedTextChange}\n @narrowed-text-blur=${this.#onNarrowedTextBlur}\n @narrowed-text-shift-tab=${this.#onNarrowedTextShiftTab}\n >\n ${children.map(c => html`\n <span data-value=\"${c.item.key}\" data-label=\"${c.item.label}\"></span>\n `)}\n </ixfx-narrowed-text>\n `;\n }\n\n #onNarrowedTextChange(e: CustomEvent) {\n const detail = e.detail as { item: { value: string } };\n const node = this.selectedNode;\n if (!node?.children)\n return;\n\n const child = node.children.find(c => c.item.key === detail.item.value);\n if (child) {\n const depth = this.root ? (this.#findPath(this.root, node)?.length ?? 1) : 1;\n this.#onChildClick(child, depth);\n }\n }\n\n #getChildOptionsWidth(): string {\n return `var(--child-options-width, 50ch)`;\n }\n\n static styles = [themeFallbacks, tickledStyles, tickledItemStyles, css`\n :host {\n --text-highlight: var(--accent);\n --separator: var(--surface-muted-text);\n --padding-s: var(--space-xs);\n display: flex;\n overflow: scroll;\n width: 100%;\n scroll-snap-type: x mandatory;\n scrollbar-width: none;\n\n /* Breadcrumb tickled overrides — no layout shift: keep transparent border at rest */\n --item-padding: 0;\n }\n\n :host(.focused) {\n outline: none;\n }\n\n :host([input-mode=\"keyboard\"]) .host-container {\n outline: 2px solid var(--accent);\n outline-offset: 2px;\n }\n\n .host-container {\n display: flex;\n width: 100%;\n outline: none;\n }\n\n .parts {\n display: flex;\n }\n\n .crumb-segment {\n display: flex;\n align-items: center;\n }\n\n .label {\n cursor: pointer;\n margin-right: var(--padding-s);\n white-space: nowrap;\n }\n\n .caret {\n position: relative;\n cursor: pointer;\n padding: var(--padding-m);\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease-in-out;\n }\n\n .caret.open {\n background: color-mix(in srgb, var(--surface-5) 40%, transparent);\n }\n\n .caret.pending {\n display: inline-flex;\n }\n\n .caret > ixfx-menu-trigger {\n display: inline-flex;\n margin: 0;\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .caret > ixfx-menu-trigger::part(base) {\n background: none;\n border: none;\n color: inherit;\n padding: 0;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .caret > ixfx-menu-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator {\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n color: var(--separator);\n }\n\n .separator-trigger {\n display: inline-flex;\n margin-left: var(--padding-s);\n margin-right: var(--padding-s);\n --_trigger-hover-bg: transparent;\n --_trigger-hover-opacity: 0.6;\n }\n\n .separator-trigger::part(base) {\n background: none;\n border: none;\n color: var(--separator);\n padding: 0;\n cursor: pointer;\n font-size: inherit;\n line-height: 1;\n }\n\n .separator-trigger::part(base):hover {\n background: none;\n opacity: 0.6;\n }\n\n .separator-trigger.tickled::part(base) {\n }\n\n ixfx-menu-trigger {\n display: none;\n }\n\n .horiz-select > ixfx-menu-trigger {\n display: inline-flex;\n }\n\n .horiz-select {\n display: flex;\n min-width: 5ch;\n }\n\n .loading-spinner {\n display: inline-block;\n width: 12px;\n height: 12px;\n border: 2px solid var(--surface-5);\n border-top-color: var(--accent);\n border-radius: 50%;\n animation: crumb-spin 0.7s linear infinite;\n }\n\n @keyframes crumb-spin {\n to { transform: rotate(360deg); }\n }\n\n ::slotted(*), option {\n user-select: none;\n scroll-snap-align: start;\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ixfx-crumb-navigation\": CrumbNavigationElement;\n }\n}\n\nexport interface CrumbNavigationElementEventMap extends TreeComponentEventMap {\n 'item-click': TreeItemClickEvent;\n 'expand': TreeExpandEvent;\n 'select': TreeSelectEvent;\n 'tickle': TreeTickleEvent;\n 'activate': TreeActivateEvent;\n}\n\nexport interface CrumbNavigationElement {\n addEventListener: (<K extends keyof CrumbNavigationElementEventMap>(\n type: K,\n listener: (this: CrumbNavigationElement, event: CrumbNavigationElementEventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n ) => void) & ((\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void);\n}\n"],"mappings":"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"}
|
package/dist/data-display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-display.js","names":["#config","#previousValues","#rangeStreams","#currentData","#renderAll","#walk","#cleanupPaths","#ensureRow","#updateRenderer","#hasDescendantConfig","#renderNestedDisplay","#determineAutoStyle","#renderText","#rendererTag","#getOrCreateRendererElement","#applyValue","#applyLed","#applyPlotOptions","#applyPlotXy","#formatTimeElapsed","customElement"],"sources":["../src/data-display/data-display.ts"],"sourcesContent":["import { rangeStream, round } from \"@ixfx/numbers\";\n\nimport { css, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\n\nexport type RendererStyle\n = | `led`\n | `plot`\n | `plot-xy`\n | `plot-heat`\n | `plot-histogram`\n | `time-elapsed`\n | `hide`;\n\nexport type ConfigEntry = readonly [\n path: string,\n style: RendererStyle,\n options?: Record<string, unknown>,\n];\n\nexport type FormattingOptions = {\n readonly precision?: number;\n readonly roundNumbers?: number;\n};\n\ntype ConfigRecord = {\n readonly style: RendererStyle;\n readonly options?: Record<string, unknown>;\n};\n\ntype RangeStream = ReturnType<typeof rangeStream>;\n\n@customElement(`ixfx-data-display`)\nexport class DataDisplayComponent extends LitElement {\n static override styles = [themeFallbacks, css`\n :host {\n display: block;\n width: fit-content;\n }\n section {\n background: var(--surface-3);\n color: var(--surface-2-text);\n border: var(--border);\n padding: var(--space-m);\n font-family: var(--font-mono);\n display: grid;\n grid-template-columns: auto auto;\n column-gap: var(--space-s);\n }\n .row {\n display: contents;\n }\n .row > label {\n font-weight: bold;\n text-align: end;\n justify-self: end;\n padding: 2px 0;\n }\n .row > :not(label) {\n padding: 2px 0;\n }\n .row > ixfx-led {\n align-self: center;\n }\n .value {\n font-variant-numeric: tabular-nums;\n white-space: pre;\n }\n `];\n\n @property({ type: Boolean })\n automap = false;\n\n previousValue: Record<string, unknown> | undefined;\n _container: HTMLElement;\n\n #config = new Map<string, ConfigRecord>();\n #previousValues = new Map<string, unknown>();\n #rangeStreams = new Map<string, RangeStream>();\n #currentData: Record<string, unknown> | undefined;\n\n constructor() {\n super();\n this._container = document.createElement(`section`);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.renderRoot.append(this._container);\n }\n\n configure(config: ConfigEntry[]) {\n this.#config.clear();\n for (const [path, style, options] of config) {\n this.#config.set(path, { style, options });\n }\n this._container.innerHTML = ``;\n this.#previousValues.clear();\n this.#rangeStreams.clear();\n if (this.#currentData !== undefined) {\n this.#renderAll(this.#currentData);\n }\n }\n\n formatValue(v: unknown, options: FormattingOptions = {}): string {\n if (v === null)\n return `(null)`;\n if (v === undefined)\n return `(undefined)`;\n if (typeof v === `boolean`)\n return v ? `true` : `false`;\n if (typeof v === `string`)\n return `\"${v}\"`;\n if (typeof v === `number`) {\n let vAsNumber = v;\n if (options.roundNumbers !== undefined)\n vAsNumber = round(options.roundNumbers, v);\n if (options.precision !== undefined)\n return vAsNumber.toFixed(options.precision);\n const formatted = vAsNumber.toFixed(2);\n return vAsNumber >= 0 ? ` ${formatted}` : formatted;\n }\n return JSON.stringify(v);\n }\n\n displayData(o: Record<string, unknown> | unknown[]) {\n if (o === null) {\n this.innerHTML = ``;\n return;\n }\n this.#renderAll(o as Record<string, unknown>);\n }\n\n updateData(value: Record<string, unknown>) {\n this.#currentData = value;\n this.#renderAll(value);\n this.previousValue = value;\n }\n\n getOrCreate(path: string, init?: (parent: HTMLElement) => void): HTMLElement {\n const element = this.renderRoot.querySelector(`#${path}`) as HTMLElement | null;\n if (element !== null)\n return element;\n\n const elementCreated = document.createElement(`div`);\n elementCreated.id = path;\n if (init)\n init(elementCreated);\n this._container.append(elementCreated);\n return elementCreated;\n }\n\n #renderAll(data: Record<string, unknown>) {\n const activePaths = new Set<string>();\n this.#walk(data, ``, activePaths);\n this.#cleanupPaths(activePaths);\n }\n\n #walk(\n data: Record<string, unknown>,\n basePath: string,\n activePaths: Set<string>,\n ) {\n for (const [key, value] of Object.entries(data)) {\n const fullPath = basePath ? `${basePath}.${key}` : key;\n activePaths.add(fullPath);\n\n const config = this.#config.get(fullPath);\n\n if (config !== undefined) {\n if (config.style !== `hide`) {\n const row = this.#ensureRow(fullPath, key);\n this.#updateRenderer(row, fullPath, config.style, value, config.options);\n }\n continue;\n }\n\n if (typeof value === `object` && value !== null && !Array.isArray(value)) {\n if (this.#hasDescendantConfig(fullPath)) {\n this.#walk(value as Record<string, unknown>, fullPath, activePaths);\n } else if (this.automap) {\n const row = this.#ensureRow(fullPath, key);\n this.#renderNestedDisplay(row, value as Record<string, unknown>, true);\n } else {\n const row = this.#ensureRow(fullPath, key);\n this.#renderNestedDisplay(row, value as Record<string, unknown>);\n }\n } else {\n const autoStyle = this.#determineAutoStyle(value);\n if (autoStyle !== undefined) {\n const row = this.#ensureRow(fullPath, key);\n this.#updateRenderer(row, fullPath, autoStyle, value, undefined);\n } else {\n const row = this.#ensureRow(fullPath, key);\n this.#renderText(row, this.formatValue(value));\n }\n }\n }\n }\n\n #hasDescendantConfig(path: string): boolean {\n const prefix = path ? `${path}.` : ``;\n for (const configPath of this.#config.keys()) {\n if (configPath.startsWith(prefix))\n return true;\n }\n return false;\n }\n\n #determineAutoStyle(value: unknown): RendererStyle | undefined {\n if (!this.automap)\n return undefined;\n if (typeof value === `boolean`)\n return `led`;\n if (typeof value === `number`)\n return `plot`;\n return undefined;\n }\n\n #ensureRow(path: string, label: string): HTMLElement {\n const id = `path-${path}`;\n let row = this.renderRoot.querySelector(`#${CSS.escape(id)}`) as HTMLElement | null;\n if (row !== null)\n return row;\n\n row = document.createElement(`div`);\n row.id = id;\n row.classList.add(`row`);\n\n const labelEl = document.createElement(`label`);\n labelEl.textContent = label;\n row.append(labelEl);\n\n this._container.append(row);\n return row;\n }\n\n #updateRenderer(\n row: HTMLElement,\n path: string,\n style: RendererStyle,\n value: unknown,\n options?: Record<string, unknown>,\n ) {\n const tag = this.#rendererTag(style, value);\n if (tag === null)\n return;\n\n const el = this.#getOrCreateRendererElement(row, tag);\n if (el === null)\n return;\n\n this.#applyValue(el, tag, style, path, value, options);\n }\n\n #rendererTag(style: RendererStyle, value: unknown): string | null {\n switch (style) {\n case `hide`:\n return null;\n case `led`:\n return `ixfx-led`;\n case `plot`:\n if (typeof value === `number`)\n return `ixfx-plot-single-axis`;\n if (typeof value === `object` && value !== null)\n return `ixfx-plot-multi-axis`;\n return `span`;\n case `plot-xy`:\n return `ixfx-plot-xy-axis`;\n case `plot-heat`:\n case `plot-histogram`:\n return `ixfx-plot-histogram`;\n case `time-elapsed`:\n return `span`;\n }\n }\n\n #getOrCreateRendererElement(row: HTMLElement, tag: string): HTMLElement | null {\n const existing = row.querySelector(`:scope > [data-renderer]`) as HTMLElement | null;\n if (existing !== null) {\n if (existing.tagName.toLowerCase() === tag)\n return existing;\n existing.remove();\n }\n const el = document.createElement(tag);\n el.dataset.renderer = ``;\n if (tag.startsWith(`ixfx-plot`)) {\n (el as HTMLElement).style.height = `1.4em`;\n if (tag === `ixfx-plot-xy-axis`) {\n (el as HTMLElement).style.width = `1.4em`;\n } else {\n (el as HTMLElement).style.width = `5em`;\n }\n }\n row.append(el);\n return el;\n }\n\n #applyValue(\n el: HTMLElement,\n _tag: string,\n style: RendererStyle,\n path: string,\n value: unknown,\n options?: Record<string, unknown>,\n ) {\n const prev = this.#previousValues.get(path);\n const changed = prev !== value;\n\n switch (style) {\n case `led`:\n this.#applyLed(el, path, value, options);\n break;\n\n case `plot`:\n if (typeof value === `number`) {\n if (changed) {\n (el as any).add(value);\n }\n } else if (typeof value === `object` && value !== null && changed) {\n if (Array.isArray(value)) {\n const record: Record<string, number> = {};\n value.forEach((v: unknown, i: number) => {\n if (typeof v === `number`)\n record[String(i)] = v;\n });\n if (Object.keys(record).length > 0) {\n (el as any).addData(record);\n }\n } else {\n (el as any).addData(value as Record<string, number>);\n }\n }\n this.#applyPlotOptions(el, style, options);\n break;\n\n case `plot-xy`:\n if (changed) {\n this.#applyPlotXy(el, value);\n }\n this.#applyPlotOptions(el, style, options);\n break;\n\n case `plot-heat`:\n el.style.setProperty(`--plot-histogram-bar-length`, `1`);\n // falls through\n case `plot-histogram`:\n if (typeof value === `number` && changed) {\n (el as any).add(value);\n }\n this.#applyPlotOptions(el, style, options);\n break;\n\n case `time-elapsed`:\n el.textContent = this.#formatTimeElapsed(value);\n break;\n }\n\n this.#previousValues.set(path, value);\n }\n\n #applyLed(el: HTMLElement, path: string, value: unknown, options?: Record<string, unknown>) {\n const led = el as any;\n\n if (typeof value === `boolean`) {\n led.lit = value;\n led.value = value ? 1 : 0;\n } else if (typeof value === `number`) {\n let rs = this.#rangeStreams.get(path);\n if (rs === undefined) {\n rs = rangeStream();\n this.#rangeStreams.set(path, rs);\n }\n const range = rs.seen(value);\n const normalized = range.max !== range.min\n ? (value - range.min) / (range.max - range.min)\n : 0.5;\n led.value = normalized;\n led.lit = normalized > 0.3;\n }\n\n if (options?.color !== undefined)\n led.color = options.color;\n }\n\n #applyPlotXy(el: HTMLElement, value: unknown) {\n const xy = el as any;\n\n if (Array.isArray(value) && value.length >= 2) {\n xy.add(value[0], value[1]);\n } else if (typeof value === `object` && value !== null) {\n const obj = value as Record<string, number>;\n if (`x` in obj && `y` in obj) {\n xy.add(obj.x, obj.y);\n } else {\n const entries = Object.entries(obj).filter(([_, v]) => typeof v === `number`);\n if (entries.length >= 2) {\n xy.add(entries[0][1], entries[1][1]);\n }\n }\n }\n }\n\n #applyPlotOptions(el: HTMLElement, _style: RendererStyle, options?: Record<string, unknown>) {\n if (options === undefined)\n return;\n\n const target = el as any;\n\n if (typeof options.capacity === `number`)\n target.capacity = options.capacity;\n if (typeof options.resolution === `number`)\n target.resolution = options.resolution;\n if (typeof options.drawStyle === `string`)\n target.drawStyle = options.drawStyle;\n if (typeof options.orientation === `string`)\n target.orientation = options.orientation;\n if (typeof options.layout === `string`)\n target.layout = options.layout;\n }\n\n #formatTimeElapsed(value: unknown): string {\n let timestamp: number;\n\n if (value instanceof Date) {\n timestamp = value.getTime();\n } else if (typeof value === `number`) {\n if (value > 1e12) {\n timestamp = value;\n } else {\n timestamp = Date.now();\n }\n } else if (typeof value === `string`) {\n timestamp = new Date(value).getTime();\n } else {\n return String(value);\n }\n\n if (Number.isNaN(timestamp))\n return String(value);\n\n const elapsed = Date.now() - timestamp;\n const abs = Math.abs(elapsed);\n\n if (abs < 1000)\n return `${abs}ms`;\n if (abs < 60000)\n return `${(abs / 1000).toFixed(1)}s`;\n if (abs < 3600000)\n return `${(abs / 60000).toFixed(1)}mins`;\n if (abs < 86400000)\n return `${(abs / 3600000).toFixed(1)}h`;\n return `${(abs / 86400000).toFixed(1)}d`;\n }\n\n #renderText(row: HTMLElement, text: string) {\n let valueEl = row.querySelector(`:scope > .value`) as HTMLElement | null;\n if (valueEl === null) {\n valueEl = document.createElement(`span`);\n valueEl.classList.add(`value`);\n row.append(valueEl);\n }\n valueEl.textContent = text;\n }\n\n #renderNestedDisplay(row: HTMLElement, data: Record<string, unknown>, automapChild = false) {\n let child = row.querySelector(`:scope > ixfx-data-display`) as DataDisplayComponent | null;\n if (child === null) {\n child = document.createElement(`ixfx-data-display`) as DataDisplayComponent;\n row.append(child);\n }\n child.automap = automapChild;\n child.updateData(data);\n }\n\n #cleanupPaths(activePaths: Set<string>) {\n const rows = this._container.querySelectorAll<HTMLElement>(`[id^=\"path-\"]`);\n for (const row of rows) {\n const path = row.id.slice(5);\n if (!activePaths.has(path)) {\n row.remove();\n this.#rangeStreams.delete(path);\n this.#previousValues.delete(path);\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-data-display': DataDisplayComponent;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data-display.js","names":["#config","#previousValues","#rangeStreams","#currentData","#renderAll","#walk","#cleanupPaths","#ensureRow","#updateRenderer","#hasDescendantConfig","#renderNestedDisplay","#determineAutoStyle","#renderText","#rendererTag","#getOrCreateRendererElement","#applyValue","#applyLed","#applyPlotOptions","#applyPlotXy","#formatTimeElapsed","customElement"],"sources":["../src/data-display/data-display.ts"],"sourcesContent":["import { rangeStream, round } from \"@ixfx/numbers\";\n\nimport { css, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\n\nexport type RendererStyle\n = | `led`\n | `plot`\n | `plot-xy`\n | `plot-heat`\n | `plot-histogram`\n | `time-elapsed`\n | `hide`;\n\nexport type ConfigEntry = readonly [\n path: string,\n style: RendererStyle,\n options?: Record<string, unknown>,\n];\n\nexport type FormattingOptions = {\n readonly precision?: number;\n readonly roundNumbers?: number;\n};\n\ntype ConfigRecord = {\n readonly style: RendererStyle;\n readonly options?: Record<string, unknown>;\n};\n\ntype RangeStream = ReturnType<typeof rangeStream>;\n\n@customElement(`ixfx-data-display`)\nexport class DataDisplayComponent extends LitElement {\n static override styles = [themeFallbacks, css`\n :host {\n display: block;\n width: fit-content;\n }\n section {\n background: var(--surface-3);\n color: var(--surface-2-text);\n border: var(--border);\n padding: var(--space-m);\n font-family: var(--font-mono);\n display: grid;\n grid-template-columns: auto auto;\n column-gap: var(--space-s);\n }\n .row {\n display: contents;\n }\n .row > label {\n font-weight: bold;\n text-align: end;\n justify-self: end;\n padding: 2px 0;\n }\n .row > :not(label) {\n padding: 2px 0;\n }\n .row > ixfx-led {\n align-self: center;\n }\n .value {\n font-variant-numeric: tabular-nums;\n white-space: pre;\n }\n `];\n\n @property({ type: Boolean })\n automap = false;\n\n previousValue: Record<string, unknown> | undefined;\n _container: HTMLElement;\n\n #config = new Map<string, ConfigRecord>();\n #previousValues = new Map<string, unknown>();\n #rangeStreams = new Map<string, RangeStream>();\n #currentData: Record<string, unknown> | undefined;\n\n constructor() {\n super();\n this._container = document.createElement(`section`);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.renderRoot.append(this._container);\n }\n\n configure(config: ConfigEntry[]) {\n this.#config.clear();\n for (const [path, style, options] of config) {\n this.#config.set(path, { style, options });\n }\n this._container.innerHTML = ``;\n this.#previousValues.clear();\n this.#rangeStreams.clear();\n if (this.#currentData !== undefined) {\n this.#renderAll(this.#currentData);\n }\n }\n\n formatValue(v: unknown, options: FormattingOptions = {}): string {\n if (v === null)\n return `(null)`;\n if (v === undefined)\n return `(undefined)`;\n if (typeof v === `boolean`)\n return v ? `true` : `false`;\n if (typeof v === `string`)\n return `\"${v}\"`;\n if (typeof v === `number`) {\n let vAsNumber = v;\n if (options.roundNumbers !== undefined)\n vAsNumber = round(options.roundNumbers, v);\n if (options.precision !== undefined)\n return vAsNumber.toFixed(options.precision);\n const formatted = vAsNumber.toFixed(2);\n return vAsNumber >= 0 ? ` ${formatted}` : formatted;\n }\n return JSON.stringify(v);\n }\n\n displayData(o: Record<string, unknown> | unknown[]) {\n if (o === null) {\n this.innerHTML = ``;\n return;\n }\n this.#renderAll(o as Record<string, unknown>);\n }\n\n updateData(value: Record<string, unknown>) {\n this.#currentData = value;\n this.#renderAll(value);\n this.previousValue = value;\n }\n\n getOrCreate(path: string, init?: (parent: HTMLElement) => void): HTMLElement {\n const element = this.renderRoot.querySelector(`#${path}`) as HTMLElement | null;\n if (element !== null)\n return element;\n\n const elementCreated = document.createElement(`div`);\n elementCreated.id = path;\n if (init)\n init(elementCreated);\n this._container.append(elementCreated);\n return elementCreated;\n }\n\n #renderAll(data: Record<string, unknown>) {\n const activePaths = new Set<string>();\n this.#walk(data, ``, activePaths);\n this.#cleanupPaths(activePaths);\n }\n\n #walk(\n data: Record<string, unknown>,\n basePath: string,\n activePaths: Set<string>,\n ) {\n for (const [key, value] of Object.entries(data)) {\n const fullPath = basePath ? `${basePath}.${key}` : key;\n activePaths.add(fullPath);\n\n const config = this.#config.get(fullPath);\n\n if (config !== undefined) {\n if (config.style !== `hide`) {\n const row = this.#ensureRow(fullPath, key);\n this.#updateRenderer(row, fullPath, config.style, value, config.options);\n }\n continue;\n }\n\n if (typeof value === `object` && value !== null && !Array.isArray(value)) {\n if (this.#hasDescendantConfig(fullPath)) {\n this.#walk(value as Record<string, unknown>, fullPath, activePaths);\n } else if (this.automap) {\n const row = this.#ensureRow(fullPath, key);\n this.#renderNestedDisplay(row, value as Record<string, unknown>, true);\n } else {\n const row = this.#ensureRow(fullPath, key);\n this.#renderNestedDisplay(row, value as Record<string, unknown>);\n }\n } else {\n const autoStyle = this.#determineAutoStyle(value);\n if (autoStyle !== undefined) {\n const row = this.#ensureRow(fullPath, key);\n this.#updateRenderer(row, fullPath, autoStyle, value, undefined);\n } else {\n const row = this.#ensureRow(fullPath, key);\n this.#renderText(row, this.formatValue(value));\n }\n }\n }\n }\n\n #hasDescendantConfig(path: string): boolean {\n const prefix = path ? `${path}.` : ``;\n for (const configPath of this.#config.keys()) {\n if (configPath.startsWith(prefix))\n return true;\n }\n return false;\n }\n\n #determineAutoStyle(value: unknown): RendererStyle | undefined {\n if (!this.automap)\n return undefined;\n if (typeof value === `boolean`)\n return `led`;\n if (typeof value === `number`)\n return `plot`;\n return undefined;\n }\n\n #ensureRow(path: string, label: string): HTMLElement {\n const id = `path-${path}`;\n let row = this.renderRoot.querySelector(`#${CSS.escape(id)}`) as HTMLElement | null;\n if (row !== null)\n return row;\n\n row = document.createElement(`div`);\n row.id = id;\n row.classList.add(`row`);\n\n const labelEl = document.createElement(`label`);\n labelEl.textContent = label;\n row.append(labelEl);\n\n this._container.append(row);\n return row;\n }\n\n #updateRenderer(\n row: HTMLElement,\n path: string,\n style: RendererStyle,\n value: unknown,\n options?: Record<string, unknown>,\n ) {\n const tag = this.#rendererTag(style, value);\n if (tag === null)\n return;\n\n const el = this.#getOrCreateRendererElement(row, tag);\n if (el === null)\n return;\n\n this.#applyValue(el, tag, style, path, value, options);\n }\n\n #rendererTag(style: RendererStyle, value: unknown): string | null {\n switch (style) {\n case `hide`:\n return null;\n case `led`:\n return `ixfx-led`;\n case `plot`:\n if (typeof value === `number`)\n return `ixfx-plot-single-axis`;\n if (typeof value === `object` && value !== null)\n return `ixfx-plot-multi-axis`;\n return `span`;\n case `plot-xy`:\n return `ixfx-plot-xy-axis`;\n case `plot-heat`:\n case `plot-histogram`:\n return `ixfx-plot-histogram`;\n case `time-elapsed`:\n return `span`;\n }\n }\n\n #getOrCreateRendererElement(row: HTMLElement, tag: string): HTMLElement | null {\n const existing = row.querySelector(`:scope > [data-renderer]`) as HTMLElement | null;\n if (existing !== null) {\n if (existing.tagName.toLowerCase() === tag)\n return existing;\n existing.remove();\n }\n const el = document.createElement(tag);\n el.dataset.renderer = ``;\n if (tag.startsWith(`ixfx-plot`)) {\n (el as HTMLElement).style.height = `1.4em`;\n if (tag === `ixfx-plot-xy-axis`) {\n (el as HTMLElement).style.width = `1.4em`;\n } else {\n (el as HTMLElement).style.width = `5em`;\n }\n }\n row.append(el);\n return el;\n }\n\n #applyValue(\n el: HTMLElement,\n _tag: string,\n style: RendererStyle,\n path: string,\n value: unknown,\n options?: Record<string, unknown>,\n ) {\n const prev = this.#previousValues.get(path);\n const changed = prev !== value;\n\n switch (style) {\n case `led`:\n this.#applyLed(el, path, value, options);\n break;\n\n case `plot`:\n if (typeof value === `number`) {\n if (changed) {\n (el as any).add(value);\n }\n } else if (typeof value === `object` && value !== null && changed) {\n if (Array.isArray(value)) {\n const record: Record<string, number> = {};\n value.forEach((v: unknown, i: number) => {\n if (typeof v === `number`)\n record[String(i)] = v;\n });\n if (Object.keys(record).length > 0) {\n (el as any).addData(record);\n }\n } else {\n (el as any).addData(value as Record<string, number>);\n }\n }\n this.#applyPlotOptions(el, style, options);\n break;\n\n case `plot-xy`:\n if (changed) {\n this.#applyPlotXy(el, value);\n }\n this.#applyPlotOptions(el, style, options);\n break;\n // @ts-expect-error fallthrough allowed\n case `plot-heat`:\n el.style.setProperty(`--plot-histogram-bar-length`, `1`);\n // falls through\n case `plot-histogram`:\n if (typeof value === `number` && changed) {\n (el as any).add(value);\n }\n this.#applyPlotOptions(el, style, options);\n break;\n\n case `time-elapsed`:\n el.textContent = this.#formatTimeElapsed(value);\n break;\n }\n\n this.#previousValues.set(path, value);\n }\n\n #applyLed(el: HTMLElement, path: string, value: unknown, options?: Record<string, unknown>) {\n const led = el as any;\n\n if (typeof value === `boolean`) {\n led.lit = value;\n led.value = value ? 1 : 0;\n } else if (typeof value === `number`) {\n let rs = this.#rangeStreams.get(path);\n if (rs === undefined) {\n rs = rangeStream();\n this.#rangeStreams.set(path, rs);\n }\n const range = rs.seen(value);\n const normalized = range.max !== range.min\n ? (value - range.min) / (range.max - range.min)\n : 0.5;\n led.value = normalized;\n led.lit = normalized > 0.3;\n }\n\n if (options?.color !== undefined)\n led.color = options.color;\n }\n\n #applyPlotXy(el: HTMLElement, value: unknown) {\n const xy = el as any;\n\n if (Array.isArray(value) && value.length >= 2) {\n xy.add(value[0], value[1]);\n } else if (typeof value === `object` && value !== null) {\n const obj = value as Record<string, number>;\n if (`x` in obj && `y` in obj) {\n xy.add(obj.x, obj.y);\n } else {\n const entries = Object.entries(obj).filter(([_, v]) => typeof v === `number`);\n if (entries.length >= 2) {\n xy.add(entries[0][1], entries[1][1]);\n }\n }\n }\n }\n\n #applyPlotOptions(el: HTMLElement, _style: RendererStyle, options?: Record<string, unknown>) {\n if (options === undefined)\n return;\n\n const target = el as any;\n\n if (typeof options.capacity === `number`)\n target.capacity = options.capacity;\n if (typeof options.resolution === `number`)\n target.resolution = options.resolution;\n if (typeof options.drawStyle === `string`)\n target.drawStyle = options.drawStyle;\n if (typeof options.orientation === `string`)\n target.orientation = options.orientation;\n if (typeof options.layout === `string`)\n target.layout = options.layout;\n }\n\n #formatTimeElapsed(value: unknown): string {\n let timestamp: number;\n\n if (value instanceof Date) {\n timestamp = value.getTime();\n } else if (typeof value === `number`) {\n if (value > 1e12) {\n timestamp = value;\n } else {\n timestamp = Date.now();\n }\n } else if (typeof value === `string`) {\n timestamp = new Date(value).getTime();\n } else {\n return String(value);\n }\n\n if (Number.isNaN(timestamp))\n return String(value);\n\n const elapsed = Date.now() - timestamp;\n const abs = Math.abs(elapsed);\n\n if (abs < 1000)\n return `${abs}ms`;\n if (abs < 60000)\n return `${(abs / 1000).toFixed(1)}s`;\n if (abs < 3600000)\n return `${(abs / 60000).toFixed(1)}mins`;\n if (abs < 86400000)\n return `${(abs / 3600000).toFixed(1)}h`;\n return `${(abs / 86400000).toFixed(1)}d`;\n }\n\n #renderText(row: HTMLElement, text: string) {\n let valueEl = row.querySelector(`:scope > .value`) as HTMLElement | null;\n if (valueEl === null) {\n valueEl = document.createElement(`span`);\n valueEl.classList.add(`value`);\n row.append(valueEl);\n }\n valueEl.textContent = text;\n }\n\n #renderNestedDisplay(row: HTMLElement, data: Record<string, unknown>, automapChild = false) {\n let child = row.querySelector(`:scope > ixfx-data-display`) as DataDisplayComponent | null;\n if (child === null) {\n child = document.createElement(`ixfx-data-display`) as DataDisplayComponent;\n row.append(child);\n }\n child.automap = automapChild;\n child.updateData(data);\n }\n\n #cleanupPaths(activePaths: Set<string>) {\n const rows = this._container.querySelectorAll<HTMLElement>(`[id^=\"path-\"]`);\n for (const row of rows) {\n const path = row.id.slice(5);\n if (!activePaths.has(path)) {\n row.remove();\n this.#rangeStreams.delete(path);\n this.#previousValues.delete(path);\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-data-display': DataDisplayComponent;\n }\n}\n"],"mappings":"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"}
|
package/dist/incr-search.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as IncrSearchChangeCallback, a as createFuzzySearch, b as IncrSearchState, c as IncrSearchTreeController, d as ElementIncrSearchOptions, f as FuzzySearch, g as IncrSearch, h as HighlightTarget, i as clearHighlights, l as IncrSearchTreeOptions, m as HighlightOptions, n as applyHighlights, o as ElementIncrSearch, p as FuzzySearchOptions, r as buildHighlightTargets, s as createElementIncrSearch, t as createIncrSearch, u as createAcCompletionProvider, v as IncrSearchOptions, y as IncrSearchResult } from "./index-
|
|
1
|
+
import { _ as IncrSearchChangeCallback, a as createFuzzySearch, b as IncrSearchState, c as IncrSearchTreeController, d as ElementIncrSearchOptions, f as FuzzySearch, g as IncrSearch, h as HighlightTarget, i as clearHighlights, l as IncrSearchTreeOptions, m as HighlightOptions, n as applyHighlights, o as ElementIncrSearch, p as FuzzySearchOptions, r as buildHighlightTargets, s as createElementIncrSearch, t as createIncrSearch, u as createAcCompletionProvider, v as IncrSearchOptions, y as IncrSearchResult } from "./index-9fGVAg1d.js";
|
|
2
2
|
export { type ElementIncrSearch, type ElementIncrSearchOptions, type FuzzySearch, type FuzzySearchOptions, type HighlightOptions, type HighlightTarget, type IncrSearch, type IncrSearchChangeCallback, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, type IncrSearchTreeOptions as IncrSearchMillerOptions, type IncrSearchTreeOptions, type IncrSearchOptions, type IncrSearchResult, type IncrSearchState, applyHighlights, buildHighlightTargets, clearHighlights, createAcCompletionProvider, createElementIncrSearch, createFuzzySearch, createIncrSearch };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as TreeNode, d as TreeSearchHost } from "./tree-component-
|
|
1
|
+
import { C as TreeNode, d as TreeSearchHost } from "./tree-component-BaCSPWg1.js";
|
|
2
2
|
import { FzfOptions } from "fzf";
|
|
3
3
|
|
|
4
4
|
//#region src/incr-search/types.d.ts
|
|
@@ -157,4 +157,4 @@ declare function buildHighlightTargets<T>(root: ShadowRoot | Element, itemSelect
|
|
|
157
157
|
declare function createIncrSearch<T>(options?: IncrSearchOptions<T>): IncrSearch<T>;
|
|
158
158
|
//#endregion
|
|
159
159
|
export { IncrSearchChangeCallback as _, createFuzzySearch as a, IncrSearchState as b, IncrSearchTreeController as c, ElementIncrSearchOptions as d, FuzzySearch as f, IncrSearch as g, HighlightTarget as h, clearHighlights as i, IncrSearchTreeOptions as l, HighlightOptions as m, applyHighlights as n, ElementIncrSearch as o, FuzzySearchOptions as p, buildHighlightTargets as r, createElementIncrSearch as s, createIncrSearch as t, createAcCompletionProvider as u, IncrSearchOptions as v, IncrSearchResult as y };
|
|
160
|
-
//# sourceMappingURL=index-
|
|
160
|
+
//# sourceMappingURL=index-9fGVAg1d.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-9fGVAg1d.d.ts","names":[],"sources":["../src/incr-search/types.ts","../src/incr-search/ac-adapter.ts","../src/incr-search/controller-tree.ts","../src/incr-search/element-search.ts","../src/incr-search/fuzzy.ts","../src/incr-search/highlight.ts","../src/incr-search/incr-search.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CowKi2mo.d.ts","names":[],"sources":["../src/timeline/types.ts","../src/timeline/timeline-controller.ts","../src/timeline/timeline-draw.ts","../src/timeline/timeline-track-tabs.ts","../src/timeline/timeline-element.ts","../src/timeline/timeline-interactions.ts","../src/timeline/timeline-styles.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index-CowKi2mo.d.ts","names":[],"sources":["../src/timeline/types.ts","../src/timeline/timeline-controller.ts","../src/timeline/timeline-draw.ts","../src/timeline/timeline-track-tabs.ts","../src/timeline/timeline-element.ts","../src/timeline/timeline-interactions.ts","../src/timeline/timeline-styles.ts"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as TreeNode } from "./tree-component-
|
|
1
|
+
import { C as TreeNode } from "./tree-component-BaCSPWg1.js";
|
|
2
2
|
import { i as MenuContainer, n as MenuTrigger, r as MenuTriggerCommandDetail, t as MenuItem } from "./menu-item-COx-Azgj.js";
|
|
3
3
|
import { LitElement, TemplateResult } from "lit";
|
|
4
4
|
import { CommandRegistry, KeyboardManager } from "@clinth/ui-commands";
|
|
@@ -179,4 +179,4 @@ declare namespace index_d_exports {
|
|
|
179
179
|
}
|
|
180
180
|
//#endregion
|
|
181
181
|
export { menuFromTree as a, MenuSeparator as c, MenuCheckItem as d, MenuBar as f, MenuFromTreeOptions as i, MenuSubTrigger as l, MenuRadioGroup as n, menuFromTreeToElements as o, MenuRadioItem as r, MenuHeader as s, index_d_exports as t, MenuCommandController as u };
|
|
182
|
-
//# sourceMappingURL=index-
|
|
182
|
+
//# sourceMappingURL=index-_RTQSKHi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-_RTQSKHi.d.ts","names":[],"sources":["../src/menu/menu-bar.ts","../src/menu/menu-check-item.ts","../src/menu/menu-command-controller.ts","../src/menu/menu-sub-trigger.ts","../src/menu/menu-separator.ts","../src/menu/menu-header.ts","../src/menu/menu-from-tree.ts","../src/menu/menu-radio-item.ts","../src/menu/menu-radio-group.ts","../src/menu/index.ts"],"mappings":"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"}
|