@ixfx/components 0.3.0 → 0.3.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.js CHANGED
@@ -1,13 +1,12 @@
1
1
  import { t as __exportAll$5 } from "./chunk-pbuEa-1d.js";
2
2
  import { Fzf } from "fzf";
3
- import "@clinth/vcanvas";
4
3
  //#region node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js
5
4
  /**
6
5
  * @license
7
6
  * Copyright 2019 Google LLC
8
7
  * SPDX-License-Identifier: BSD-3-Clause
9
8
  */
10
- const t$5 = globalThis, e$8 = t$5.ShadowRoot && (void 0 === t$5.ShadyCSS || t$5.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, s$3 = Symbol(), o$7 = /* @__PURE__ */ new WeakMap();
9
+ const t$6 = globalThis, e$8 = t$6.ShadowRoot && (void 0 === t$6.ShadyCSS || t$6.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, s$3 = Symbol(), o$7 = /* @__PURE__ */ new WeakMap();
11
10
  var n$5 = class {
12
11
  constructor(t, e, o) {
13
12
  if (this._$cssResult$ = !0, o !== s$3) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
@@ -35,7 +34,7 @@ const r$5 = (t) => new n$5("string" == typeof t ? t : t + "", void 0, s$3), i$7
35
34
  }, S$1 = (s, o) => {
36
35
  if (e$8) s.adoptedStyleSheets = o.map((t) => t instanceof CSSStyleSheet ? t : t.styleSheet);
37
36
  else for (const e of o) {
38
- const o = document.createElement("style"), n = t$5.litNonce;
37
+ const o = document.createElement("style"), n = t$6.litNonce;
39
38
  void 0 !== n && o.setAttribute("nonce", n), o.textContent = e.cssText, s.appendChild(o);
40
39
  }
41
40
  }, c$4 = e$8 ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((t) => {
@@ -280,7 +279,7 @@ y$1.elementStyles = [], y$1.shadowRootOptions = { mode: "open" }, y$1[d$2("eleme
280
279
  * Copyright 2017 Google LLC
281
280
  * SPDX-License-Identifier: BSD-3-Clause
282
281
  */
283
- const t$4 = globalThis, i$5 = (t) => t, s$2 = t$4.trustedTypes, e$6 = s$2 ? s$2.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, h$1 = "$lit$", o$5 = `lit$${Math.random().toFixed(9).slice(2)}$`, n$3 = "?" + o$5, r$3 = `<${n$3}>`, l$1 = document, c$2 = () => l$1.createComment(""), a = (t) => null === t || "object" != typeof t && "function" != typeof t, u$2 = Array.isArray, d$1 = (t) => u$2(t) || "function" == typeof t?.[Symbol.iterator], f$1 = "[ \n\f\r]", v$1 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, _ = /-->/g, m$1 = />/g, p$1 = RegExp(`>|${f$1}(?:([^\\s"'>=/]+)(${f$1}*=${f$1}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), g = /'/g, $ = /"/g, y = /^(?:script|style|textarea|title)$/i, x = (t) => (i, ...s) => ({
282
+ const t$5 = globalThis, i$5 = (t) => t, s$2 = t$5.trustedTypes, e$6 = s$2 ? s$2.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, h$1 = "$lit$", o$5 = `lit$${Math.random().toFixed(9).slice(2)}$`, n$3 = "?" + o$5, r$3 = `<${n$3}>`, l$1 = document, c$2 = () => l$1.createComment(""), a = (t) => null === t || "object" != typeof t && "function" != typeof t, u$2 = Array.isArray, d$1 = (t) => u$2(t) || "function" == typeof t?.[Symbol.iterator], f$1 = "[ \n\f\r]", v$1 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, _ = /-->/g, m$1 = />/g, p$1 = RegExp(`>|${f$1}(?:([^\\s"'>=/]+)(${f$1}*=${f$1}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), g = /'/g, $ = /"/g, y = /^(?:script|style|textarea|title)$/i, x = (t) => (i, ...s) => ({
284
283
  _$litType$: t,
285
284
  strings: i,
286
285
  values: s
@@ -530,8 +529,8 @@ const j$1 = {
530
529
  U: z,
531
530
  B: I,
532
531
  F: Z
533
- }, B = t$4.litHtmlPolyfillSupport;
534
- B?.(S, k), (t$4.litHtmlVersions ??= []).push("3.3.3");
532
+ }, B = t$5.litHtmlPolyfillSupport;
533
+ B?.(S, k), (t$5.litHtmlVersions ??= []).push("3.3.3");
535
534
  const D = (t, i, s) => {
536
535
  const e = s?.renderBefore ?? i;
537
536
  let h = e._$litPart$;
@@ -575,6 +574,18 @@ const o$4 = s$1.litElementPolyfillSupport;
575
574
  o$4?.({ LitElement: i$4 });
576
575
  (s$1.litElementVersions ??= []).push("4.2.2");
577
576
  //#endregion
577
+ //#region node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js
578
+ /**
579
+ * @license
580
+ * Copyright 2017 Google LLC
581
+ * SPDX-License-Identifier: BSD-3-Clause
582
+ */
583
+ const t$4 = (t) => (e, o) => {
584
+ void 0 !== o ? o.addInitializer(() => {
585
+ customElements.define(t, e);
586
+ }) : customElements.define(t, e);
587
+ };
588
+ //#endregion
578
589
  //#region node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js
579
590
  /**
580
591
  * @license
@@ -1161,7 +1172,7 @@ function svgToDataUri(svg) {
1161
1172
  }
1162
1173
  //#endregion
1163
1174
  //#region \0@oxc-project+runtime@0.130.0/helpers/decorate.js
1164
- function __decorate(decorators, target, key, desc) {
1175
+ function __decorate$1(decorators, target, key, desc) {
1165
1176
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1166
1177
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1167
1178
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -1245,19 +1256,19 @@ let IxfxIconElement = class IxfxIconElement extends i$4 {
1245
1256
  `;
1246
1257
  }
1247
1258
  };
1248
- __decorate([n$2()], IxfxIconElement.prototype, "name", void 0);
1249
- __decorate([n$2({ type: Number })], IxfxIconElement.prototype, "size", void 0);
1250
- __decorate([n$2()], IxfxIconElement.prototype, "label", void 0);
1251
- __decorate([n$2({
1259
+ __decorate$1([n$2()], IxfxIconElement.prototype, "name", void 0);
1260
+ __decorate$1([n$2({ type: Number })], IxfxIconElement.prototype, "size", void 0);
1261
+ __decorate$1([n$2()], IxfxIconElement.prototype, "label", void 0);
1262
+ __decorate$1([n$2({
1252
1263
  type: Boolean,
1253
1264
  attribute: `prominence`
1254
1265
  })], IxfxIconElement.prototype, "prominence", void 0);
1255
- __decorate([n$2({
1266
+ __decorate$1([n$2({
1256
1267
  type: String,
1257
1268
  attribute: `rotate`,
1258
1269
  reflect: true
1259
1270
  })], IxfxIconElement.prototype, "rotate", void 0);
1260
- IxfxIconElement = __decorate([safeCustomElement(`ixfx-icon`)], IxfxIconElement);
1271
+ IxfxIconElement = __decorate$1([safeCustomElement(`ixfx-icon`)], IxfxIconElement);
1261
1272
  //#endregion
1262
1273
  //#region src/ac-text/ac-text.ts
1263
1274
  const HIGHLIGHT_KEY$1 = `ac-text-highlight`;
@@ -1713,26 +1724,26 @@ let AcTextElement = class AcTextElement extends i$4 {
1713
1724
  `];
1714
1725
  }
1715
1726
  };
1716
- __decorate([n$2({ type: Object })], AcTextElement.prototype, "completionProvider", void 0);
1717
- __decorate([n$2({ type: String })], AcTextElement.prototype, "placeholder", void 0);
1718
- __decorate([n$2({
1727
+ __decorate$1([n$2({ type: Object })], AcTextElement.prototype, "completionProvider", void 0);
1728
+ __decorate$1([n$2({ type: String })], AcTextElement.prototype, "placeholder", void 0);
1729
+ __decorate$1([n$2({
1719
1730
  type: Number,
1720
1731
  attribute: `cache-size`
1721
1732
  })], AcTextElement.prototype, "cacheSize", void 0);
1722
- __decorate([n$2({
1733
+ __decorate$1([n$2({
1723
1734
  type: Number,
1724
1735
  attribute: `debounce-ms`
1725
1736
  })], AcTextElement.prototype, "debounceMs", void 0);
1726
- __decorate([n$2({ type: String })], AcTextElement.prototype, "value", void 0);
1727
- __decorate([n$2({
1737
+ __decorate$1([n$2({ type: String })], AcTextElement.prototype, "value", void 0);
1738
+ __decorate$1([n$2({
1728
1739
  type: String,
1729
1740
  attribute: `tab-suffix`
1730
1741
  })], AcTextElement.prototype, "tabSuffix", void 0);
1731
- __decorate([r$1()], AcTextElement.prototype, "_query", void 0);
1732
- __decorate([r$1()], AcTextElement.prototype, "_results", void 0);
1733
- __decorate([r$1()], AcTextElement.prototype, "_isOpen", void 0);
1734
- __decorate([r$1()], AcTextElement.prototype, "_isLoading", void 0);
1735
- AcTextElement = __decorate([safeCustomElement(`ixfx-ac-text`)], AcTextElement);
1742
+ __decorate$1([r$1()], AcTextElement.prototype, "_query", void 0);
1743
+ __decorate$1([r$1()], AcTextElement.prototype, "_results", void 0);
1744
+ __decorate$1([r$1()], AcTextElement.prototype, "_isOpen", void 0);
1745
+ __decorate$1([r$1()], AcTextElement.prototype, "_isLoading", void 0);
1746
+ AcTextElement = __decorate$1([safeCustomElement(`ixfx-ac-text`)], AcTextElement);
1736
1747
  //#endregion
1737
1748
  //#region src/incr-search/fuzzy.ts
1738
1749
  function defaultSelector(item) {
@@ -2642,25 +2653,25 @@ let AcTokenElement = class AcTokenElement extends i$4 {
2642
2653
  `];
2643
2654
  }
2644
2655
  };
2645
- __decorate([n$2({ type: Object })], AcTokenElement.prototype, "completionProvider", void 0);
2646
- __decorate([n$2({ type: Object })], AcTokenElement.prototype, "tokenizer", void 0);
2647
- __decorate([n$2({ type: String })], AcTokenElement.prototype, "placeholder", void 0);
2648
- __decorate([n$2({
2656
+ __decorate$1([n$2({ type: Object })], AcTokenElement.prototype, "completionProvider", void 0);
2657
+ __decorate$1([n$2({ type: Object })], AcTokenElement.prototype, "tokenizer", void 0);
2658
+ __decorate$1([n$2({ type: String })], AcTokenElement.prototype, "placeholder", void 0);
2659
+ __decorate$1([n$2({
2649
2660
  type: Number,
2650
2661
  attribute: `cache-size`
2651
2662
  })], AcTokenElement.prototype, "cacheSize", void 0);
2652
- __decorate([n$2({
2663
+ __decorate$1([n$2({
2653
2664
  type: Number,
2654
2665
  attribute: `debounce-ms`
2655
2666
  })], AcTokenElement.prototype, "debounceMs", void 0);
2656
- __decorate([n$2({ type: Boolean })], AcTokenElement.prototype, "strict", void 0);
2657
- __decorate([r$1()], AcTokenElement.prototype, "_tokens", void 0);
2658
- __decorate([r$1()], AcTokenElement.prototype, "_draft", void 0);
2659
- __decorate([r$1()], AcTokenElement.prototype, "_selectedTokenIndex", void 0);
2660
- __decorate([r$1()], AcTokenElement.prototype, "_suggestions", void 0);
2661
- __decorate([r$1()], AcTokenElement.prototype, "_isOpen", void 0);
2662
- __decorate([r$1()], AcTokenElement.prototype, "_isLoading", void 0);
2663
- AcTokenElement = __decorate([safeCustomElement(`ixfx-ac-token`)], AcTokenElement);
2667
+ __decorate$1([n$2({ type: Boolean })], AcTokenElement.prototype, "strict", void 0);
2668
+ __decorate$1([r$1()], AcTokenElement.prototype, "_tokens", void 0);
2669
+ __decorate$1([r$1()], AcTokenElement.prototype, "_draft", void 0);
2670
+ __decorate$1([r$1()], AcTokenElement.prototype, "_selectedTokenIndex", void 0);
2671
+ __decorate$1([r$1()], AcTokenElement.prototype, "_suggestions", void 0);
2672
+ __decorate$1([r$1()], AcTokenElement.prototype, "_isOpen", void 0);
2673
+ __decorate$1([r$1()], AcTokenElement.prototype, "_isLoading", void 0);
2674
+ AcTokenElement = __decorate$1([safeCustomElement(`ixfx-ac-token`)], AcTokenElement);
2664
2675
  //#endregion
2665
2676
  //#region src/icons/defaults.ts
2666
2677
  /**
@@ -2890,19 +2901,19 @@ let ButtonElement = class ButtonElement extends i$4 {
2890
2901
  this.styles = [prominenceStyles, buttonStyles];
2891
2902
  }
2892
2903
  };
2893
- __decorate([n$2({ type: Boolean })], ButtonElement.prototype, "disabled", void 0);
2894
- __decorate([n$2({ type: String })], ButtonElement.prototype, "icon", void 0);
2895
- __decorate([n$2({
2904
+ __decorate$1([n$2({ type: Boolean })], ButtonElement.prototype, "disabled", void 0);
2905
+ __decorate$1([n$2({ type: String })], ButtonElement.prototype, "icon", void 0);
2906
+ __decorate$1([n$2({
2896
2907
  type: Boolean,
2897
2908
  attribute: `hide-icon`,
2898
2909
  reflect: true
2899
2910
  })], ButtonElement.prototype, "hideIcon", void 0);
2900
- __decorate([n$2({
2911
+ __decorate$1([n$2({
2901
2912
  type: Boolean,
2902
2913
  attribute: `hide-label`,
2903
2914
  reflect: true
2904
2915
  })], ButtonElement.prototype, "hideLabel", void 0);
2905
- ButtonElement = __decorate([safeCustomElement(`ixfx-button`)], ButtonElement);
2916
+ ButtonElement = __decorate$1([safeCustomElement(`ixfx-button`)], ButtonElement);
2906
2917
  //#endregion
2907
2918
  //#region src/button/radio-group.ts
2908
2919
  let RadioGroup = class RadioGroup extends i$4 {
@@ -3205,32 +3216,32 @@ let RadioGroup = class RadioGroup extends i$4 {
3205
3216
  `];
3206
3217
  }
3207
3218
  };
3208
- __decorate([n$2({ type: String })], RadioGroup.prototype, "value", void 0);
3209
- __decorate([n$2({ type: String })], RadioGroup.prototype, "orientation", void 0);
3210
- __decorate([n$2({ type: Array })], RadioGroup.prototype, "items", void 0);
3211
- __decorate([n$2({ type: String })], RadioGroup.prototype, "name", void 0);
3212
- __decorate([n$2({ type: String })], RadioGroup.prototype, "mode", void 0);
3213
- __decorate([n$2({ type: Boolean })], RadioGroup.prototype, "checked", void 0);
3214
- __decorate([n$2({
3219
+ __decorate$1([n$2({ type: String })], RadioGroup.prototype, "value", void 0);
3220
+ __decorate$1([n$2({ type: String })], RadioGroup.prototype, "orientation", void 0);
3221
+ __decorate$1([n$2({ type: Array })], RadioGroup.prototype, "items", void 0);
3222
+ __decorate$1([n$2({ type: String })], RadioGroup.prototype, "name", void 0);
3223
+ __decorate$1([n$2({ type: String })], RadioGroup.prototype, "mode", void 0);
3224
+ __decorate$1([n$2({ type: Boolean })], RadioGroup.prototype, "checked", void 0);
3225
+ __decorate$1([n$2({
3215
3226
  type: String,
3216
3227
  attribute: `value-off`
3217
3228
  })], RadioGroup.prototype, "valueOff", void 0);
3218
- __decorate([n$2({
3229
+ __decorate$1([n$2({
3219
3230
  type: String,
3220
3231
  attribute: `icon-name`
3221
3232
  })], RadioGroup.prototype, "iconName", void 0);
3222
- __decorate([n$2({
3233
+ __decorate$1([n$2({
3223
3234
  type: String,
3224
3235
  attribute: `icon-name-off`
3225
3236
  })], RadioGroup.prototype, "iconNameOff", void 0);
3226
- __decorate([n$2({
3237
+ __decorate$1([n$2({
3227
3238
  type: Boolean,
3228
3239
  attribute: `hide-labels`
3229
3240
  })], RadioGroup.prototype, "hideLabels", void 0);
3230
- __decorate([r$1()], RadioGroup.prototype, "_computedItems", void 0);
3231
- __decorate([r$1()], RadioGroup.prototype, "_icons", void 0);
3232
- __decorate([e$4(`slot`)], RadioGroup.prototype, "_slot", void 0);
3233
- RadioGroup = __decorate([safeCustomElement(`ixfx-radio-group`)], RadioGroup);
3241
+ __decorate$1([r$1()], RadioGroup.prototype, "_computedItems", void 0);
3242
+ __decorate$1([r$1()], RadioGroup.prototype, "_icons", void 0);
3243
+ __decorate$1([e$4(`slot`)], RadioGroup.prototype, "_slot", void 0);
3244
+ RadioGroup = __decorate$1([safeCustomElement(`ixfx-radio-group`)], RadioGroup);
3234
3245
  //#endregion
3235
3246
  //#region src/styles/popup.ts
3236
3247
  /**
@@ -3506,14 +3517,14 @@ let MenuContainer = class MenuContainer extends i$4 {
3506
3517
  item.click();
3507
3518
  }
3508
3519
  };
3509
- __decorate([n$2({
3520
+ __decorate$1([n$2({
3510
3521
  type: String,
3511
3522
  attribute: `anchor`
3512
3523
  })], MenuContainer.prototype, "anchor", void 0);
3513
- __decorate([n$2({ attribute: false })], MenuContainer.prototype, "registry", void 0);
3514
- __decorate([n$2({ attribute: false })], MenuContainer.prototype, "keyboardManager", void 0);
3515
- __decorate([e$4(`.popover`)], MenuContainer.prototype, "_popover", void 0);
3516
- MenuContainer = __decorate([safeCustomElement(`ixfx-menu-container`)], MenuContainer);
3524
+ __decorate$1([n$2({ attribute: false })], MenuContainer.prototype, "registry", void 0);
3525
+ __decorate$1([n$2({ attribute: false })], MenuContainer.prototype, "keyboardManager", void 0);
3526
+ __decorate$1([e$4(`.popover`)], MenuContainer.prototype, "_popover", void 0);
3527
+ MenuContainer = __decorate$1([safeCustomElement(`ixfx-menu-container`)], MenuContainer);
3517
3528
  //#endregion
3518
3529
  //#region src/menu/menu-trigger.ts
3519
3530
  var _MenuTrigger;
@@ -3795,17 +3806,17 @@ let MenuTrigger = class MenuTrigger extends i$4 {
3795
3806
  `;
3796
3807
  }
3797
3808
  };
3798
- __decorate([n$2({ type: String })], MenuTrigger.prototype, "mode", void 0);
3799
- __decorate([n$2({ type: String })], MenuTrigger.prototype, "label", void 0);
3800
- __decorate([n$2({ attribute: false })], MenuTrigger.prototype, "registry", void 0);
3801
- __decorate([n$2({ attribute: false })], MenuTrigger.prototype, "keyboardManager", void 0);
3802
- __decorate([n$2({ type: String })], MenuTrigger.prototype, "placement", void 0);
3803
- __decorate([r$1()], MenuTrigger.prototype, "_isOpen", void 0);
3804
- __decorate([r$1()], MenuTrigger.prototype, "_hasMenu", void 0);
3805
- __decorate([r$1()], MenuTrigger.prototype, "_hasTriggerSlot", void 0);
3806
- __decorate([e$4(`.trigger-btn`)], MenuTrigger.prototype, "_triggerBtn", void 0);
3807
- __decorate([e$4(`.popup`)], MenuTrigger.prototype, "_popup", void 0);
3808
- MenuTrigger = _MenuTrigger = __decorate([safeCustomElement(`ixfx-menu-trigger`)], MenuTrigger);
3809
+ __decorate$1([n$2({ type: String })], MenuTrigger.prototype, "mode", void 0);
3810
+ __decorate$1([n$2({ type: String })], MenuTrigger.prototype, "label", void 0);
3811
+ __decorate$1([n$2({ attribute: false })], MenuTrigger.prototype, "registry", void 0);
3812
+ __decorate$1([n$2({ attribute: false })], MenuTrigger.prototype, "keyboardManager", void 0);
3813
+ __decorate$1([n$2({ type: String })], MenuTrigger.prototype, "placement", void 0);
3814
+ __decorate$1([r$1()], MenuTrigger.prototype, "_isOpen", void 0);
3815
+ __decorate$1([r$1()], MenuTrigger.prototype, "_hasMenu", void 0);
3816
+ __decorate$1([r$1()], MenuTrigger.prototype, "_hasTriggerSlot", void 0);
3817
+ __decorate$1([e$4(`.trigger-btn`)], MenuTrigger.prototype, "_triggerBtn", void 0);
3818
+ __decorate$1([e$4(`.popup`)], MenuTrigger.prototype, "_popup", void 0);
3819
+ MenuTrigger = _MenuTrigger = __decorate$1([safeCustomElement(`ixfx-menu-trigger`)], MenuTrigger);
3809
3820
  //#endregion
3810
3821
  //#region src/menu/menu-item.ts
3811
3822
  let MenuItem = class MenuItem extends i$4 {
@@ -3990,23 +4001,23 @@ let MenuItem = class MenuItem extends i$4 {
3990
4001
  `;
3991
4002
  }
3992
4003
  };
3993
- __decorate([n$2({ type: String })], MenuItem.prototype, "command", void 0);
3994
- __decorate([n$2({
4004
+ __decorate$1([n$2({ type: String })], MenuItem.prototype, "command", void 0);
4005
+ __decorate$1([n$2({
3995
4006
  type: String,
3996
4007
  attribute: `command-args`
3997
4008
  })], MenuItem.prototype, "commandArgs", void 0);
3998
- __decorate([n$2({ type: String })], MenuItem.prototype, "label", void 0);
3999
- __decorate([n$2({ type: Boolean })], MenuItem.prototype, "disabled", void 0);
4000
- __decorate([n$2({
4009
+ __decorate$1([n$2({ type: String })], MenuItem.prototype, "label", void 0);
4010
+ __decorate$1([n$2({ type: Boolean })], MenuItem.prototype, "disabled", void 0);
4011
+ __decorate$1([n$2({
4001
4012
  type: String,
4002
4013
  attribute: `icon-name`
4003
4014
  })], MenuItem.prototype, "iconName", void 0);
4004
- __decorate([n$2({ attribute: false })], MenuItem.prototype, "registry", void 0);
4005
- __decorate([n$2({ attribute: false })], MenuItem.prototype, "keyboardManager", void 0);
4006
- __decorate([n$2({ attribute: false })], MenuItem.prototype, "submenuPopover", void 0);
4007
- __decorate([r$1()], MenuItem.prototype, "_hasChildren", void 0);
4008
- __decorate([e$4(`slot`)], MenuItem.prototype, "_slot", void 0);
4009
- MenuItem = __decorate([safeCustomElement(`ixfx-menu-item`)], MenuItem);
4015
+ __decorate$1([n$2({ attribute: false })], MenuItem.prototype, "registry", void 0);
4016
+ __decorate$1([n$2({ attribute: false })], MenuItem.prototype, "keyboardManager", void 0);
4017
+ __decorate$1([n$2({ attribute: false })], MenuItem.prototype, "submenuPopover", void 0);
4018
+ __decorate$1([r$1()], MenuItem.prototype, "_hasChildren", void 0);
4019
+ __decorate$1([e$4(`slot`)], MenuItem.prototype, "_slot", void 0);
4020
+ MenuItem = __decorate$1([safeCustomElement(`ixfx-menu-item`)], MenuItem);
4010
4021
  //#endregion
4011
4022
  //#region src/button/split-button.ts
4012
4023
  let SplitButton = class SplitButton extends ButtonElement {
@@ -4377,25 +4388,25 @@ let SplitButton = class SplitButton extends ButtonElement {
4377
4388
  ];
4378
4389
  }
4379
4390
  };
4380
- __decorate([n$2({ attribute: false })], SplitButton.prototype, "registry", void 0);
4381
- __decorate([n$2({ attribute: false })], SplitButton.prototype, "keyboardManager", void 0);
4382
- __decorate([n$2({ type: String })], SplitButton.prototype, "mode", void 0);
4383
- __decorate([n$2({
4391
+ __decorate$1([n$2({ attribute: false })], SplitButton.prototype, "registry", void 0);
4392
+ __decorate$1([n$2({ attribute: false })], SplitButton.prototype, "keyboardManager", void 0);
4393
+ __decorate$1([n$2({ type: String })], SplitButton.prototype, "mode", void 0);
4394
+ __decorate$1([n$2({
4384
4395
  type: String,
4385
4396
  attribute: `default-value`
4386
4397
  })], SplitButton.prototype, "defaultValue", void 0);
4387
- __decorate([n$2({ attribute: false })], SplitButton.prototype, "itemsProvider", void 0);
4388
- __decorate([n$2({ attribute: false })], SplitButton.prototype, "items", void 0);
4389
- __decorate([e$4(`ixfx-menu-trigger`)], SplitButton.prototype, "_menuTrigger", void 0);
4390
- __decorate([r$1()], SplitButton.prototype, "_compact", void 0);
4391
- __decorate([r$1()], SplitButton.prototype, "_selectedCommand", void 0);
4392
- __decorate([r$1()], SplitButton.prototype, "_selectedLabel", void 0);
4393
- __decorate([r$1()], SplitButton.prototype, "_selectedIcon", void 0);
4394
- __decorate([r$1()], SplitButton.prototype, "_switcherItems", void 0);
4395
- __decorate([r$1()], SplitButton.prototype, "_dynamicItems", void 0);
4396
- __decorate([r$1()], SplitButton.prototype, "_loadingItems", void 0);
4397
- __decorate([r$1()], SplitButton.prototype, "_menuHasItems", void 0);
4398
- SplitButton = __decorate([safeCustomElement(`ixfx-split-button`)], SplitButton);
4398
+ __decorate$1([n$2({ attribute: false })], SplitButton.prototype, "itemsProvider", void 0);
4399
+ __decorate$1([n$2({ attribute: false })], SplitButton.prototype, "items", void 0);
4400
+ __decorate$1([e$4(`ixfx-menu-trigger`)], SplitButton.prototype, "_menuTrigger", void 0);
4401
+ __decorate$1([r$1()], SplitButton.prototype, "_compact", void 0);
4402
+ __decorate$1([r$1()], SplitButton.prototype, "_selectedCommand", void 0);
4403
+ __decorate$1([r$1()], SplitButton.prototype, "_selectedLabel", void 0);
4404
+ __decorate$1([r$1()], SplitButton.prototype, "_selectedIcon", void 0);
4405
+ __decorate$1([r$1()], SplitButton.prototype, "_switcherItems", void 0);
4406
+ __decorate$1([r$1()], SplitButton.prototype, "_dynamicItems", void 0);
4407
+ __decorate$1([r$1()], SplitButton.prototype, "_loadingItems", void 0);
4408
+ __decorate$1([r$1()], SplitButton.prototype, "_menuHasItems", void 0);
4409
+ SplitButton = __decorate$1([safeCustomElement(`ixfx-split-button`)], SplitButton);
4399
4410
  //#endregion
4400
4411
  //#region src/checkbox.ts
4401
4412
  /**
@@ -4634,13 +4645,13 @@ let Checkbox = class Checkbox extends i$4 {
4634
4645
  `;
4635
4646
  }
4636
4647
  };
4637
- __decorate([n$2({ type: Boolean })], Checkbox.prototype, "checked", void 0);
4638
- __decorate([n$2({ type: Boolean })], Checkbox.prototype, "disabled", void 0);
4639
- __decorate([n$2({ type: Boolean })], Checkbox.prototype, "indeterminate", void 0);
4640
- __decorate([n$2({ type: String })], Checkbox.prototype, "label", void 0);
4641
- __decorate([n$2({ type: String })], Checkbox.prototype, "name", void 0);
4642
- __decorate([n$2({ type: String })], Checkbox.prototype, "value", void 0);
4643
- Checkbox = __decorate([safeCustomElement(`ixfx-checkbox`)], Checkbox);
4648
+ __decorate$1([n$2({ type: Boolean })], Checkbox.prototype, "checked", void 0);
4649
+ __decorate$1([n$2({ type: Boolean })], Checkbox.prototype, "disabled", void 0);
4650
+ __decorate$1([n$2({ type: Boolean })], Checkbox.prototype, "indeterminate", void 0);
4651
+ __decorate$1([n$2({ type: String })], Checkbox.prototype, "label", void 0);
4652
+ __decorate$1([n$2({ type: String })], Checkbox.prototype, "name", void 0);
4653
+ __decorate$1([n$2({ type: String })], Checkbox.prototype, "value", void 0);
4654
+ Checkbox = __decorate$1([safeCustomElement(`ixfx-checkbox`)], Checkbox);
4644
4655
  //#endregion
4645
4656
  //#region node_modules/.pnpm/@ixfx+visual@0.56.12/node_modules/@ixfx/visual/dist/chunk-pbuEa-1d.js
4646
4657
  var __defProp$5 = Object.defineProperty;
@@ -5644,7 +5655,7 @@ const dotProduct = (values, nonNumber = `ignore`) => {
5644
5655
  * @param max value (inclusive)
5645
5656
  * @returns Clamped value
5646
5657
  */
5647
- function clamp$2(value, min = 0, max = 1) {
5658
+ function clamp$3(value, min = 0, max = 1) {
5648
5659
  if (Number.isNaN(value)) throw new Error(`Param 'value' is NaN`);
5649
5660
  if (Number.isNaN(min)) throw new Error(`Param 'min' is NaN`);
5650
5661
  if (Number.isNaN(max)) throw new Error(`Param 'max' is NaN`);
@@ -5743,7 +5754,7 @@ function interpolate$2(pos1, pos2, pos3, pos4) {
5743
5754
  let limits = `clamp`;
5744
5755
  const handleAmount = (amount) => {
5745
5756
  if (amountProcess) amount = amountProcess(amount);
5746
- if (limits === void 0 || limits === `clamp`) amount = clamp$2(amount);
5757
+ if (limits === void 0 || limits === `clamp`) amount = clamp$3(amount);
5747
5758
  else if (limits === `wrap`) {
5748
5759
  if (amount > 1) amount = amount % 1;
5749
5760
  else if (amount < 0) amount = 1 + amount % 1;
@@ -5966,7 +5977,7 @@ const scaleClamped = (value, inMin, inMax, outMin, outMax, easing) => {
5966
5977
  if (typeof outMax === `undefined`) outMax = 1;
5967
5978
  if (typeof outMin === `undefined`) outMin = 0;
5968
5979
  if (inMin === inMax) return outMax;
5969
- return clamp$2(scale$2(value, inMin, inMax, outMin, outMax, easing), outMin, outMax);
5980
+ return clamp$3(scale$2(value, inMin, inMax, outMin, outMax, easing), outMin, outMax);
5970
5981
  };
5971
5982
  /**
5972
5983
  * Returns an empty range:
@@ -13576,7 +13587,7 @@ const relative = (total, options = {}) => {
13576
13587
  const computeElapsed = (value) => {
13577
13588
  lastValue = value;
13578
13589
  let v = value / (total * modulationAmount);
13579
- if (clampValue) v = clamp$2(v);
13590
+ if (clampValue) v = clamp$3(v);
13580
13591
  else if (wrapValue && v >= 1) v = v % 1;
13581
13592
  return v;
13582
13593
  };
@@ -14197,13 +14208,13 @@ const centroid = (...points) => {
14197
14208
  */
14198
14209
  function clamp$1$2(a, min = 0, max = 1) {
14199
14210
  if (isPoint3d(a)) return Object.freeze({
14200
- x: clamp$2(a.x, min, max),
14201
- y: clamp$2(a.y, min, max),
14202
- z: clamp$2(a.z, min, max)
14211
+ x: clamp$3(a.x, min, max),
14212
+ y: clamp$3(a.y, min, max),
14213
+ z: clamp$3(a.z, min, max)
14203
14214
  });
14204
14215
  else return Object.freeze({
14205
- x: clamp$2(a.x, min, max),
14206
- y: clamp$2(a.y, min, max)
14216
+ x: clamp$3(a.x, min, max),
14217
+ y: clamp$3(a.y, min, max)
14207
14218
  });
14208
14219
  }
14209
14220
  /**
@@ -17219,7 +17230,7 @@ function interpolator$3(a, b, direction = `shorter`) {
17219
17230
  const lightDistance = b.l - a.l;
17220
17231
  const opacityDistance = (b.opacity ?? 1) - aOpacity;
17221
17232
  return (amount) => {
17222
- amount = clamp$2(amount);
17233
+ amount = clamp$3(amount);
17223
17234
  let h = interpolate$2(amount, 0, Math.abs(hueDistance));
17224
17235
  if (hueDistance < 0) h = a.h - h;
17225
17236
  else h = a.h + h;
@@ -17612,7 +17623,7 @@ function interpolator$2(colourA, colourB) {
17612
17623
  const g = bb.g - aa.g;
17613
17624
  const b = bb.b - aa.b;
17614
17625
  return (amount) => {
17615
- amount = clamp$2(amount);
17626
+ amount = clamp$3(amount);
17616
17627
  return scalar$2(aa.r + interpolate$2(amount, 0, r), aa.g + interpolate$2(amount, 0, g), aa.b + interpolate$2(amount, 0, b), aOpacity + interpolate$2(amount, 0, opacityDistance));
17617
17628
  };
17618
17629
  }
@@ -17825,7 +17836,7 @@ function interpolator$1(a, b, direction = `shorter`) {
17825
17836
  const lightDistance = b.l - a.l;
17826
17837
  const opacityDistance = (b.opacity ?? 1) - aOpacity;
17827
17838
  return (amount) => {
17828
- amount = clamp$2(amount);
17839
+ amount = clamp$3(amount);
17829
17840
  let h = interpolate$2(amount, 0, Math.abs(hueDistance));
17830
17841
  if (hueDistance < 0) h = a.h - h;
17831
17842
  else h = a.h + h;
@@ -18486,7 +18497,7 @@ function createSteps(a, b, options = {}) {
18486
18497
  * @param amount Amount
18487
18498
  */
18488
18499
  function multiplyOpacity(colourish, amount) {
18489
- return withOpacity(colourish, (o) => clamp$2(o * amount));
18500
+ return withOpacity(colourish, (o) => clamp$3(o * amount));
18490
18501
  }
18491
18502
  /**
18492
18503
  * Does a computation with the opacity of a colour, returning colour.
@@ -18885,28 +18896,28 @@ var LabelledInputBase = class extends i$4 {
18885
18896
  if (changedProperties.has(`value`)) this._syncValue(this.value);
18886
18897
  }
18887
18898
  };
18888
- __decorate([n$2()], LabelledInputBase.prototype, "label", void 0);
18889
- __decorate([n$2({ type: Number })], LabelledInputBase.prototype, "min", void 0);
18890
- __decorate([n$2({ type: Number })], LabelledInputBase.prototype, "max", void 0);
18891
- __decorate([n$2({ type: Number })], LabelledInputBase.prototype, "value", void 0);
18892
- __decorate([n$2({ type: Number })], LabelledInputBase.prototype, "step", void 0);
18893
- __decorate([n$2({ type: Number })], LabelledInputBase.prototype, "precision", void 0);
18894
- __decorate([n$2({
18899
+ __decorate$1([n$2()], LabelledInputBase.prototype, "label", void 0);
18900
+ __decorate$1([n$2({ type: Number })], LabelledInputBase.prototype, "min", void 0);
18901
+ __decorate$1([n$2({ type: Number })], LabelledInputBase.prototype, "max", void 0);
18902
+ __decorate$1([n$2({ type: Number })], LabelledInputBase.prototype, "value", void 0);
18903
+ __decorate$1([n$2({ type: Number })], LabelledInputBase.prototype, "step", void 0);
18904
+ __decorate$1([n$2({ type: Number })], LabelledInputBase.prototype, "precision", void 0);
18905
+ __decorate$1([n$2({
18895
18906
  type: Number,
18896
18907
  attribute: `drag-sensitivity`
18897
18908
  })], LabelledInputBase.prototype, "dragSensitivity", void 0);
18898
- __decorate([n$2({
18909
+ __decorate$1([n$2({
18899
18910
  type: Number,
18900
18911
  attribute: `mini-width-threshold`
18901
18912
  })], LabelledInputBase.prototype, "miniWidthThreshold", void 0);
18902
- __decorate([n$2({
18913
+ __decorate$1([n$2({
18903
18914
  type: Number,
18904
18915
  attribute: `mini-height-threshold`
18905
18916
  })], LabelledInputBase.prototype, "miniHeightThreshold", void 0);
18906
- __decorate([n$2({ attribute: `display-text-logic` })], LabelledInputBase.prototype, "displayTextLogic", void 0);
18907
- __decorate([r$1()], LabelledInputBase.prototype, "_isMini", void 0);
18908
- __decorate([r$1()], LabelledInputBase.prototype, "_isDragging", void 0);
18909
- __decorate([r$1()], LabelledInputBase.prototype, "_formatter", void 0);
18917
+ __decorate$1([n$2({ attribute: `display-text-logic` })], LabelledInputBase.prototype, "displayTextLogic", void 0);
18918
+ __decorate$1([r$1()], LabelledInputBase.prototype, "_isMini", void 0);
18919
+ __decorate$1([r$1()], LabelledInputBase.prototype, "_isDragging", void 0);
18920
+ __decorate$1([r$1()], LabelledInputBase.prototype, "_formatter", void 0);
18910
18921
  //#endregion
18911
18922
  //#region src/labelled-range-input/labelled-range-input.ts
18912
18923
  let LabelledRangeInput = class LabelledRangeInput extends LabelledInputBase {
@@ -19017,21 +19028,21 @@ let LabelledRangeInput = class LabelledRangeInput extends LabelledInputBase {
19017
19028
  `;
19018
19029
  }
19019
19030
  };
19020
- __decorate([n$2({ type: String })], LabelledRangeInput.prototype, "orientation", void 0);
19021
- __decorate([n$2({ type: Boolean })], LabelledRangeInput.prototype, "tooltip", void 0);
19022
- __decorate([n$2({
19031
+ __decorate$1([n$2({ type: String })], LabelledRangeInput.prototype, "orientation", void 0);
19032
+ __decorate$1([n$2({ type: Boolean })], LabelledRangeInput.prototype, "tooltip", void 0);
19033
+ __decorate$1([n$2({
19023
19034
  type: Boolean,
19024
19035
  attribute: `no-tooltip`
19025
19036
  })], LabelledRangeInput.prototype, "noTooltip", void 0);
19026
- __decorate([n$2({
19037
+ __decorate$1([n$2({
19027
19038
  type: String,
19028
19039
  attribute: `tooltip-orientation`
19029
19040
  })], LabelledRangeInput.prototype, "tooltipOrientation", void 0);
19030
- __decorate([n$2({
19041
+ __decorate$1([n$2({
19031
19042
  type: Number,
19032
19043
  attribute: `switch-height`
19033
19044
  })], LabelledRangeInput.prototype, "switchHeight", void 0);
19034
- LabelledRangeInput = __decorate([safeCustomElement(`ixfx-labelled-range-input`)], LabelledRangeInput);
19045
+ LabelledRangeInput = __decorate$1([safeCustomElement(`ixfx-labelled-range-input`)], LabelledRangeInput);
19035
19046
  //#endregion
19036
19047
  //#region src/colour-picker/colour-picker.ts
19037
19048
  let ColourPicker = class ColourPicker extends i$4 {
@@ -19482,75 +19493,75 @@ let ColourPicker = class ColourPicker extends i$4 {
19482
19493
  `;
19483
19494
  }
19484
19495
  };
19485
- __decorate([n$2({ type: Number })], ColourPicker.prototype, "l", void 0);
19486
- __decorate([n$2({ type: Number })], ColourPicker.prototype, "c", void 0);
19487
- __decorate([n$2({ type: Number })], ColourPicker.prototype, "h", void 0);
19488
- __decorate([n$2({ type: Number })], ColourPicker.prototype, "a", void 0);
19489
- __decorate([n$2({
19496
+ __decorate$1([n$2({ type: Number })], ColourPicker.prototype, "l", void 0);
19497
+ __decorate$1([n$2({ type: Number })], ColourPicker.prototype, "c", void 0);
19498
+ __decorate$1([n$2({ type: Number })], ColourPicker.prototype, "h", void 0);
19499
+ __decorate$1([n$2({ type: Number })], ColourPicker.prototype, "a", void 0);
19500
+ __decorate$1([n$2({
19490
19501
  type: Boolean,
19491
19502
  attribute: `hide-preview`,
19492
19503
  reflect: true
19493
19504
  })], ColourPicker.prototype, "hidePreview", void 0);
19494
- __decorate([n$2({
19505
+ __decorate$1([n$2({
19495
19506
  type: Boolean,
19496
19507
  attribute: `hide-h`,
19497
19508
  reflect: true
19498
19509
  })], ColourPicker.prototype, "hideH", void 0);
19499
- __decorate([n$2({
19510
+ __decorate$1([n$2({
19500
19511
  type: Boolean,
19501
19512
  attribute: `hide-l`,
19502
19513
  reflect: true
19503
19514
  })], ColourPicker.prototype, "hideL", void 0);
19504
- __decorate([n$2({
19515
+ __decorate$1([n$2({
19505
19516
  type: Boolean,
19506
19517
  attribute: `hide-c`,
19507
19518
  reflect: true
19508
19519
  })], ColourPicker.prototype, "hideC", void 0);
19509
- __decorate([n$2({
19520
+ __decorate$1([n$2({
19510
19521
  type: Boolean,
19511
19522
  attribute: `show-a`
19512
19523
  })], ColourPicker.prototype, "showA", void 0);
19513
- __decorate([n$2({
19524
+ __decorate$1([n$2({
19514
19525
  type: Boolean,
19515
19526
  attribute: `horizontal`,
19516
19527
  reflect: true
19517
19528
  })], ColourPicker.prototype, "horizontal", void 0);
19518
- __decorate([n$2({
19529
+ __decorate$1([n$2({
19519
19530
  type: Boolean,
19520
19531
  attribute: `sliders-vertical`,
19521
19532
  reflect: true
19522
19533
  })], ColourPicker.prototype, "slidersVertical", void 0);
19523
- __decorate([n$2({
19534
+ __decorate$1([n$2({
19524
19535
  type: Boolean,
19525
19536
  attribute: `hide-tooltips`,
19526
19537
  reflect: true
19527
19538
  })], ColourPicker.prototype, "hideTooltips", void 0);
19528
- __decorate([n$2({
19539
+ __decorate$1([n$2({
19529
19540
  type: String,
19530
19541
  attribute: `value`
19531
19542
  })], ColourPicker.prototype, "_valueAttr", void 0);
19532
- __decorate([n$2({
19543
+ __decorate$1([n$2({
19533
19544
  type: String,
19534
19545
  attribute: `range-l`
19535
19546
  })], ColourPicker.prototype, "rangeLAttr", void 0);
19536
- __decorate([n$2({
19547
+ __decorate$1([n$2({
19537
19548
  type: String,
19538
19549
  attribute: `range-c`
19539
19550
  })], ColourPicker.prototype, "rangeCAttr", void 0);
19540
- __decorate([n$2({
19551
+ __decorate$1([n$2({
19541
19552
  type: String,
19542
19553
  attribute: `range-h`
19543
19554
  })], ColourPicker.prototype, "rangeHAttr", void 0);
19544
- __decorate([n$2({
19555
+ __decorate$1([n$2({
19545
19556
  type: String,
19546
19557
  attribute: `range-a`
19547
19558
  })], ColourPicker.prototype, "rangeAAttr", void 0);
19548
- __decorate([e$4(`#slider-l`)], ColourPicker.prototype, "_sliderL", void 0);
19549
- __decorate([e$4(`#slider-c`)], ColourPicker.prototype, "_sliderC", void 0);
19550
- __decorate([e$4(`#slider-h`)], ColourPicker.prototype, "_sliderH", void 0);
19551
- __decorate([e$4(`#slider-a`)], ColourPicker.prototype, "_sliderA", void 0);
19552
- __decorate([e$4(`.preview`)], ColourPicker.prototype, "_previewEl", void 0);
19553
- ColourPicker = __decorate([safeCustomElement(`ixfx-colour-picker`)], ColourPicker);
19559
+ __decorate$1([e$4(`#slider-l`)], ColourPicker.prototype, "_sliderL", void 0);
19560
+ __decorate$1([e$4(`#slider-c`)], ColourPicker.prototype, "_sliderC", void 0);
19561
+ __decorate$1([e$4(`#slider-h`)], ColourPicker.prototype, "_sliderH", void 0);
19562
+ __decorate$1([e$4(`#slider-a`)], ColourPicker.prototype, "_sliderA", void 0);
19563
+ __decorate$1([e$4(`.preview`)], ColourPicker.prototype, "_previewEl", void 0);
19564
+ ColourPicker = __decorate$1([safeCustomElement(`ixfx-colour-picker`)], ColourPicker);
19554
19565
  //#endregion
19555
19566
  //#region src/colour-picker/colour-picker-popup.ts
19556
19567
  let _instanceCounter = 0;
@@ -19885,44 +19896,44 @@ let ColourPickerPopup = class ColourPickerPopup extends i$4 {
19885
19896
  `];
19886
19897
  }
19887
19898
  };
19888
- __decorate([n$2({ type: String })], ColourPickerPopup.prototype, "mode", void 0);
19889
- __decorate([n$2({ type: Number })], ColourPickerPopup.prototype, "l", void 0);
19890
- __decorate([n$2({ type: Number })], ColourPickerPopup.prototype, "c", void 0);
19891
- __decorate([n$2({ type: Number })], ColourPickerPopup.prototype, "h", void 0);
19892
- __decorate([n$2({ type: Number })], ColourPickerPopup.prototype, "a", void 0);
19893
- __decorate([n$2({
19899
+ __decorate$1([n$2({ type: String })], ColourPickerPopup.prototype, "mode", void 0);
19900
+ __decorate$1([n$2({ type: Number })], ColourPickerPopup.prototype, "l", void 0);
19901
+ __decorate$1([n$2({ type: Number })], ColourPickerPopup.prototype, "c", void 0);
19902
+ __decorate$1([n$2({ type: Number })], ColourPickerPopup.prototype, "h", void 0);
19903
+ __decorate$1([n$2({ type: Number })], ColourPickerPopup.prototype, "a", void 0);
19904
+ __decorate$1([n$2({
19894
19905
  type: Boolean,
19895
19906
  attribute: `show-preview`
19896
19907
  })], ColourPickerPopup.prototype, "showPreview", void 0);
19897
- __decorate([n$2({
19908
+ __decorate$1([n$2({
19898
19909
  type: Boolean,
19899
19910
  attribute: `hide-h`,
19900
19911
  reflect: true
19901
19912
  })], ColourPickerPopup.prototype, "hideH", void 0);
19902
- __decorate([n$2({
19913
+ __decorate$1([n$2({
19903
19914
  type: Boolean,
19904
19915
  attribute: `hide-l`,
19905
19916
  reflect: true
19906
19917
  })], ColourPickerPopup.prototype, "hideL", void 0);
19907
- __decorate([n$2({
19918
+ __decorate$1([n$2({
19908
19919
  type: Boolean,
19909
19920
  attribute: `hide-c`,
19910
19921
  reflect: true
19911
19922
  })], ColourPickerPopup.prototype, "hideC", void 0);
19912
- __decorate([n$2({
19923
+ __decorate$1([n$2({
19913
19924
  type: Boolean,
19914
19925
  attribute: `show-a`
19915
19926
  })], ColourPickerPopup.prototype, "showA", void 0);
19916
- __decorate([n$2({
19927
+ __decorate$1([n$2({
19917
19928
  type: Boolean,
19918
19929
  attribute: `horizontal`
19919
19930
  })], ColourPickerPopup.prototype, "horizontal", void 0);
19920
- __decorate([n$2({ type: String })], ColourPickerPopup.prototype, "size", void 0);
19921
- __decorate([r$1()], ColourPickerPopup.prototype, "_isOpen", void 0);
19922
- __decorate([r$1()], ColourPickerPopup.prototype, "_everOpened", void 0);
19923
- __decorate([e$4(`.popup`)], ColourPickerPopup.prototype, "_popupEl", void 0);
19924
- __decorate([e$4(`ixfx-colour-picker`)], ColourPickerPopup.prototype, "_pickerEl", void 0);
19925
- ColourPickerPopup = __decorate([safeCustomElement(`ixfx-colour-picker-popup`)], ColourPickerPopup);
19931
+ __decorate$1([n$2({ type: String })], ColourPickerPopup.prototype, "size", void 0);
19932
+ __decorate$1([r$1()], ColourPickerPopup.prototype, "_isOpen", void 0);
19933
+ __decorate$1([r$1()], ColourPickerPopup.prototype, "_everOpened", void 0);
19934
+ __decorate$1([e$4(`.popup`)], ColourPickerPopup.prototype, "_popupEl", void 0);
19935
+ __decorate$1([e$4(`ixfx-colour-picker`)], ColourPickerPopup.prototype, "_pickerEl", void 0);
19936
+ ColourPickerPopup = __decorate$1([safeCustomElement(`ixfx-colour-picker-popup`)], ColourPickerPopup);
19926
19937
  //#endregion
19927
19938
  //#region src/common/tree-data-model.ts
19928
19939
  function findNode(root, key) {
@@ -20632,45 +20643,45 @@ let NarrowedTextElement = class NarrowedTextElement extends i$4 {
20632
20643
  ];
20633
20644
  }
20634
20645
  };
20635
- __decorate([n$2({
20646
+ __decorate$1([n$2({
20636
20647
  type: String,
20637
20648
  attribute: `selection-mode`
20638
20649
  })], NarrowedTextElement.prototype, "selectionMode", void 0);
20639
- __decorate([n$2({
20650
+ __decorate$1([n$2({
20640
20651
  type: Boolean,
20641
20652
  attribute: `required-selection`
20642
20653
  })], NarrowedTextElement.prototype, "requiredSelection", void 0);
20643
- __decorate([n$2({
20654
+ __decorate$1([n$2({
20644
20655
  type: String,
20645
20656
  attribute: `orientation`
20646
20657
  })], NarrowedTextElement.prototype, "orientation", void 0);
20647
- __decorate([n$2({
20658
+ __decorate$1([n$2({
20648
20659
  type: Boolean,
20649
20660
  attribute: `nowrap`
20650
20661
  })], NarrowedTextElement.prototype, "nowrap", void 0);
20651
- __decorate([n$2({
20662
+ __decorate$1([n$2({
20652
20663
  type: String,
20653
20664
  attribute: `separator`
20654
20665
  })], NarrowedTextElement.prototype, "separator", void 0);
20655
- __decorate([n$2({
20666
+ __decorate$1([n$2({
20656
20667
  type: String,
20657
20668
  attribute: `width`
20658
20669
  })], NarrowedTextElement.prototype, "width", void 0);
20659
- __decorate([n$2({
20670
+ __decorate$1([n$2({
20660
20671
  type: String,
20661
20672
  attribute: `height`
20662
20673
  })], NarrowedTextElement.prototype, "height", void 0);
20663
- __decorate([n$2({
20674
+ __decorate$1([n$2({
20664
20675
  type: Boolean,
20665
20676
  attribute: `preserve-filter`
20666
20677
  })], NarrowedTextElement.prototype, "preserveFilter", void 0);
20667
- __decorate([n$2({ type: String })], NarrowedTextElement.prototype, "value", void 0);
20668
- __decorate([r$1()], NarrowedTextElement.prototype, "_query", void 0);
20669
- __decorate([r$1()], NarrowedTextElement.prototype, "_computedItems", void 0);
20670
- __decorate([r$1()], NarrowedTextElement.prototype, "_filteredItems", void 0);
20671
- __decorate([r$1()], NarrowedTextElement.prototype, "_isFocused", void 0);
20672
- __decorate([e$4(`slot`)], NarrowedTextElement.prototype, "_slot", void 0);
20673
- NarrowedTextElement = __decorate([safeCustomElement(`ixfx-narrowed-text`)], NarrowedTextElement);
20678
+ __decorate$1([n$2({ type: String })], NarrowedTextElement.prototype, "value", void 0);
20679
+ __decorate$1([r$1()], NarrowedTextElement.prototype, "_query", void 0);
20680
+ __decorate$1([r$1()], NarrowedTextElement.prototype, "_computedItems", void 0);
20681
+ __decorate$1([r$1()], NarrowedTextElement.prototype, "_filteredItems", void 0);
20682
+ __decorate$1([r$1()], NarrowedTextElement.prototype, "_isFocused", void 0);
20683
+ __decorate$1([e$4(`slot`)], NarrowedTextElement.prototype, "_slot", void 0);
20684
+ NarrowedTextElement = __decorate$1([safeCustomElement(`ixfx-narrowed-text`)], NarrowedTextElement);
20674
20685
  //#endregion
20675
20686
  //#region src/crumbs/crumb-navigation.ts
20676
20687
  let CrumbNavigationElement = class CrumbNavigationElement extends i$4 {
@@ -21427,29 +21438,29 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i$4 {
21427
21438
  ];
21428
21439
  }
21429
21440
  };
21430
- __decorate([n$2({ type: Object })], CrumbNavigationElement.prototype, "root", void 0);
21431
- __decorate([n$2({ attribute: false })], CrumbNavigationElement.prototype, "model", void 0);
21432
- __decorate([n$2({ type: Object })], CrumbNavigationElement.prototype, "selectedNode", void 0);
21433
- __decorate([r$1()], CrumbNavigationElement.prototype, "_selectedNodes", void 0);
21434
- __decorate([n$2({ attribute: false })], CrumbNavigationElement.prototype, "loadChildren", void 0);
21435
- __decorate([n$2({ attribute: false })], CrumbNavigationElement.prototype, "filterPredicate", void 0);
21436
- __decorate([n$2({
21441
+ __decorate$1([n$2({ type: Object })], CrumbNavigationElement.prototype, "root", void 0);
21442
+ __decorate$1([n$2({ attribute: false })], CrumbNavigationElement.prototype, "model", void 0);
21443
+ __decorate$1([n$2({ type: Object })], CrumbNavigationElement.prototype, "selectedNode", void 0);
21444
+ __decorate$1([r$1()], CrumbNavigationElement.prototype, "_selectedNodes", void 0);
21445
+ __decorate$1([n$2({ attribute: false })], CrumbNavigationElement.prototype, "loadChildren", void 0);
21446
+ __decorate$1([n$2({ attribute: false })], CrumbNavigationElement.prototype, "filterPredicate", void 0);
21447
+ __decorate$1([n$2({
21437
21448
  reflect: true,
21438
21449
  attribute: `exclusivity`
21439
21450
  })], CrumbNavigationElement.prototype, "exclusivity", void 0);
21440
- __decorate([n$2({
21451
+ __decorate$1([n$2({
21441
21452
  reflect: true,
21442
21453
  attribute: `selection-filter`
21443
21454
  })], CrumbNavigationElement.prototype, "selectionFilter", void 0);
21444
- __decorate([r$1()], CrumbNavigationElement.prototype, "_openIdx", void 0);
21445
- __decorate([r$1()], CrumbNavigationElement.prototype, "_isFocused", void 0);
21446
- __decorate([r$1()], CrumbNavigationElement.prototype, "_menuOpen", void 0);
21447
- __decorate([r$1()], CrumbNavigationElement.prototype, "_focusOnNarrowedText", void 0);
21448
- __decorate([n$2({
21455
+ __decorate$1([r$1()], CrumbNavigationElement.prototype, "_openIdx", void 0);
21456
+ __decorate$1([r$1()], CrumbNavigationElement.prototype, "_isFocused", void 0);
21457
+ __decorate$1([r$1()], CrumbNavigationElement.prototype, "_menuOpen", void 0);
21458
+ __decorate$1([r$1()], CrumbNavigationElement.prototype, "_focusOnNarrowedText", void 0);
21459
+ __decorate$1([n$2({
21449
21460
  reflect: true,
21450
21461
  attribute: `input-mode`
21451
21462
  })], CrumbNavigationElement.prototype, "inputMode", void 0);
21452
- CrumbNavigationElement = __decorate([safeCustomElement(`ixfx-crumb-navigation`)], CrumbNavigationElement);
21463
+ CrumbNavigationElement = __decorate$1([safeCustomElement(`ixfx-crumb-navigation`)], CrumbNavigationElement);
21453
21464
  //#endregion
21454
21465
  //#region src/crumbs/crumb-path-controller.ts
21455
21466
  var CrumbPathController = class {
@@ -22118,23 +22129,23 @@ let CrumbPathElement = class CrumbPathElement extends i$4 {
22118
22129
  `];
22119
22130
  }
22120
22131
  };
22121
- __decorate([n$2({ type: String })], CrumbPathElement.prototype, "path", void 0);
22122
- __decorate([n$2({ type: String })], CrumbPathElement.prototype, "separator", void 0);
22123
- __decorate([n$2({
22132
+ __decorate$1([n$2({ type: String })], CrumbPathElement.prototype, "path", void 0);
22133
+ __decorate$1([n$2({ type: String })], CrumbPathElement.prototype, "separator", void 0);
22134
+ __decorate$1([n$2({
22124
22135
  type: String,
22125
22136
  attribute: `path-root`
22126
22137
  })], CrumbPathElement.prototype, "pathRoot", void 0);
22127
- __decorate([n$2({ type: Object })], CrumbPathElement.prototype, "siblingLookup", void 0);
22128
- __decorate([r$1()], CrumbPathElement.prototype, "_openIdx", void 0);
22129
- __decorate([r$1()], CrumbPathElement.prototype, "_editing", void 0);
22130
- __decorate([r$1()], CrumbPathElement.prototype, "_cachedSiblings", void 0);
22131
- __decorate([r$1()], CrumbPathElement.prototype, "_leafSegmentIndex", void 0);
22132
- __decorate([r$1()], CrumbPathElement.prototype, "_confirmedLeafIndices", void 0);
22133
- __decorate([r$1()], CrumbPathElement.prototype, "_dropdownActiveIndex", void 0);
22134
- __decorate([r$1()], CrumbPathElement.prototype, "_editingCancelled", void 0);
22135
- __decorate([r$1()], CrumbPathElement.prototype, "_editStartIndex", void 0);
22136
- __decorate([r$1()], CrumbPathElement.prototype, "_openCumPath", void 0);
22137
- CrumbPathElement = __decorate([safeCustomElement(`ixfx-crumb-path`)], CrumbPathElement);
22138
+ __decorate$1([n$2({ type: Object })], CrumbPathElement.prototype, "siblingLookup", void 0);
22139
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_openIdx", void 0);
22140
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_editing", void 0);
22141
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_cachedSiblings", void 0);
22142
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_leafSegmentIndex", void 0);
22143
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_confirmedLeafIndices", void 0);
22144
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_dropdownActiveIndex", void 0);
22145
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_editingCancelled", void 0);
22146
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_editStartIndex", void 0);
22147
+ __decorate$1([r$1()], CrumbPathElement.prototype, "_openCumPath", void 0);
22148
+ CrumbPathElement = __decorate$1([safeCustomElement(`ixfx-crumb-path`)], CrumbPathElement);
22138
22149
  //#endregion
22139
22150
  //#region src/data-display.ts
22140
22151
  var _DataDisplayComponent;
@@ -22227,7 +22238,7 @@ let DataDisplayComponent = class DataDisplayComponent extends i$4 {
22227
22238
  this.previousValue = value;
22228
22239
  }
22229
22240
  };
22230
- DataDisplayComponent = _DataDisplayComponent = __decorate([safeCustomElement(`ixfx-data-display`)], DataDisplayComponent);
22241
+ DataDisplayComponent = _DataDisplayComponent = __decorate$1([safeCustomElement(`ixfx-data-display`)], DataDisplayComponent);
22231
22242
  //#endregion
22232
22243
  //#region src/editable-label/editable-label.ts
22233
22244
  let EditableLabel = class EditableLabel extends i$4 {
@@ -22516,31 +22527,31 @@ let EditableLabel = class EditableLabel extends i$4 {
22516
22527
  `];
22517
22528
  }
22518
22529
  };
22519
- __decorate([n$2({ reflect: true })], EditableLabel.prototype, "mode", void 0);
22520
- __decorate([n$2({
22530
+ __decorate$1([n$2({ reflect: true })], EditableLabel.prototype, "mode", void 0);
22531
+ __decorate$1([n$2({
22521
22532
  attribute: `entry-mode`,
22522
22533
  reflect: true
22523
22534
  })], EditableLabel.prototype, "entryMode", void 0);
22524
- __decorate([n$2({ reflect: true })], EditableLabel.prototype, "value", void 0);
22525
- __decorate([n$2({
22535
+ __decorate$1([n$2({ reflect: true })], EditableLabel.prototype, "value", void 0);
22536
+ __decorate$1([n$2({
22526
22537
  type: Boolean,
22527
22538
  reflect: true
22528
22539
  })], EditableLabel.prototype, "disabled", void 0);
22529
- __decorate([n$2()], EditableLabel.prototype, "placeholder", void 0);
22530
- __decorate([n$2({ attribute: `display-text` })], EditableLabel.prototype, "displayText", void 0);
22531
- __decorate([n$2({ attribute: `display-text-logic` })], EditableLabel.prototype, "displayTextLogic", void 0);
22532
- __decorate([n$2({
22540
+ __decorate$1([n$2()], EditableLabel.prototype, "placeholder", void 0);
22541
+ __decorate$1([n$2({ attribute: `display-text` })], EditableLabel.prototype, "displayText", void 0);
22542
+ __decorate$1([n$2({ attribute: `display-text-logic` })], EditableLabel.prototype, "displayTextLogic", void 0);
22543
+ __decorate$1([n$2({
22533
22544
  type: Number,
22534
22545
  attribute: `appear-delay`
22535
22546
  })], EditableLabel.prototype, "appearDelay", void 0);
22536
- __decorate([n$2({
22547
+ __decorate$1([n$2({
22537
22548
  type: Number,
22538
22549
  attribute: `disappear-delay`
22539
22550
  })], EditableLabel.prototype, "disappearDelay", void 0);
22540
- __decorate([n$2({ attribute: false })], EditableLabel.prototype, "validator", void 0);
22541
- __decorate([n$2({ attribute: false })], EditableLabel.prototype, "formatter", void 0);
22542
- __decorate([r$1()], EditableLabel.prototype, "_editing", void 0);
22543
- EditableLabel = __decorate([safeCustomElement(`ixfx-editable-label`)], EditableLabel);
22551
+ __decorate$1([n$2({ attribute: false })], EditableLabel.prototype, "validator", void 0);
22552
+ __decorate$1([n$2({ attribute: false })], EditableLabel.prototype, "formatter", void 0);
22553
+ __decorate$1([r$1()], EditableLabel.prototype, "_editing", void 0);
22554
+ EditableLabel = __decorate$1([safeCustomElement(`ixfx-editable-label`)], EditableLabel);
22544
22555
  function _selectAll(el) {
22545
22556
  const range = document.createRange();
22546
22557
  range.selectNodeContents(el);
@@ -23127,22 +23138,22 @@ let EditableNumber = class EditableNumber extends EditableLabel {
23127
23138
  ];
23128
23139
  }
23129
23140
  };
23130
- __decorate([n$2({ type: Number })], EditableNumber.prototype, "min", void 0);
23131
- __decorate([n$2({ type: Number })], EditableNumber.prototype, "max", void 0);
23132
- __decorate([n$2({ type: Number })], EditableNumber.prototype, "step", void 0);
23133
- __decorate([n$2({
23141
+ __decorate$1([n$2({ type: Number })], EditableNumber.prototype, "min", void 0);
23142
+ __decorate$1([n$2({ type: Number })], EditableNumber.prototype, "max", void 0);
23143
+ __decorate$1([n$2({ type: Number })], EditableNumber.prototype, "step", void 0);
23144
+ __decorate$1([n$2({
23134
23145
  type: Number,
23135
23146
  attribute: `drag-sensitivity`
23136
23147
  })], EditableNumber.prototype, "dragSensitivity", void 0);
23137
- __decorate([n$2({ attribute: `fill-style` })], EditableNumber.prototype, "fillStyle", void 0);
23138
- __decorate([n$2({ attribute: `linear-style` })], EditableNumber.prototype, "linearStyle", void 0);
23139
- __decorate([n$2({ attribute: `circular-style` })], EditableNumber.prototype, "circularStyle", void 0);
23140
- __decorate([n$2({
23148
+ __decorate$1([n$2({ attribute: `fill-style` })], EditableNumber.prototype, "fillStyle", void 0);
23149
+ __decorate$1([n$2({ attribute: `linear-style` })], EditableNumber.prototype, "linearStyle", void 0);
23150
+ __decorate$1([n$2({ attribute: `circular-style` })], EditableNumber.prototype, "circularStyle", void 0);
23151
+ __decorate$1([n$2({
23141
23152
  type: Boolean,
23142
23153
  attribute: `no-drag`
23143
23154
  })], EditableNumber.prototype, "noDrag", void 0);
23144
- __decorate([n$2({ type: Number })], EditableNumber.prototype, "precision", void 0);
23145
- EditableNumber = __decorate([safeCustomElement(`ixfx-editable-number`)], EditableNumber);
23155
+ __decorate$1([n$2({ type: Number })], EditableNumber.prototype, "precision", void 0);
23156
+ EditableNumber = __decorate$1([safeCustomElement(`ixfx-editable-number`)], EditableNumber);
23146
23157
  //#endregion
23147
23158
  //#region node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directive-helpers.js
23148
23159
  /**
@@ -23306,11 +23317,11 @@ function readByte(store, pos) {
23306
23317
  function length(store) {
23307
23318
  return store.data.length;
23308
23319
  }
23309
- function clamp$1(value) {
23320
+ function clamp$2(value) {
23310
23321
  return Math.max(0, Math.min(255, value));
23311
23322
  }
23312
23323
  function writeByte(store, pos, value) {
23313
- const clampedValue = clamp$1(value);
23324
+ const clampedValue = clamp$2(value);
23314
23325
  const before = store.data[pos];
23315
23326
  const diff = new Map([[pos, {
23316
23327
  before,
@@ -23323,7 +23334,7 @@ function writeByte(store, pos, value) {
23323
23334
  function writeBytes(store, entries) {
23324
23335
  const diff = /* @__PURE__ */ new Map();
23325
23336
  entries.forEach((value, pos) => {
23326
- const clampedValue = clamp$1(value);
23337
+ const clampedValue = clamp$2(value);
23327
23338
  const before = store.data[pos];
23328
23339
  diff.set(pos, {
23329
23340
  before,
@@ -24377,28 +24388,28 @@ let IxfxHexEditorElement = class IxfxHexEditorElement extends i$4 {
24377
24388
  `;
24378
24389
  }
24379
24390
  };
24380
- __decorate([n$2({ type: Number })], IxfxHexEditorElement.prototype, "columns", void 0);
24381
- __decorate([n$2({ type: String })], IxfxHexEditorElement.prototype, "colourScheme", void 0);
24382
- __decorate([n$2({ type: Boolean })], IxfxHexEditorElement.prototype, "showChangeset", void 0);
24383
- __decorate([n$2({
24391
+ __decorate$1([n$2({ type: Number })], IxfxHexEditorElement.prototype, "columns", void 0);
24392
+ __decorate$1([n$2({ type: String })], IxfxHexEditorElement.prototype, "colourScheme", void 0);
24393
+ __decorate$1([n$2({ type: Boolean })], IxfxHexEditorElement.prototype, "showChangeset", void 0);
24394
+ __decorate$1([n$2({
24384
24395
  type: Boolean,
24385
24396
  attribute: `hide-offset-col`
24386
24397
  })], IxfxHexEditorElement.prototype, "hideOffsetCol", void 0);
24387
- __decorate([n$2({
24398
+ __decorate$1([n$2({
24388
24399
  type: Boolean,
24389
24400
  attribute: `hide-hex-col`
24390
24401
  })], IxfxHexEditorElement.prototype, "hideHexCol", void 0);
24391
- __decorate([n$2({
24402
+ __decorate$1([n$2({
24392
24403
  type: Boolean,
24393
24404
  attribute: `hide-text-col`
24394
24405
  })], IxfxHexEditorElement.prototype, "hideTextCol", void 0);
24395
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_selection", void 0);
24396
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_scrollTop", void 0);
24397
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_editState", void 0);
24398
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_containerH", void 0);
24399
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_shadeMap", void 0);
24400
- __decorate([r$1()], IxfxHexEditorElement.prototype, "_focusSide", void 0);
24401
- IxfxHexEditorElement = __decorate([safeCustomElement(`ixfx-hex-editor`)], IxfxHexEditorElement);
24406
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_selection", void 0);
24407
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_scrollTop", void 0);
24408
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_editState", void 0);
24409
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_containerH", void 0);
24410
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_shadeMap", void 0);
24411
+ __decorate$1([r$1()], IxfxHexEditorElement.prototype, "_focusSide", void 0);
24412
+ IxfxHexEditorElement = __decorate$1([safeCustomElement(`ixfx-hex-editor`)], IxfxHexEditorElement);
24402
24413
  //#endregion
24403
24414
  //#region src/radial-input/svg-utils.ts
24404
24415
  const PI2 = Math.PI * 2;
@@ -24673,7 +24684,7 @@ function getMidpointPosition(radius, center = {
24673
24684
  /**
24674
24685
  * Clamp a value between min and max
24675
24686
  */
24676
- function clamp(value, min, max) {
24687
+ function clamp$1(value, min, max) {
24677
24688
  return Math.min(Math.max(value, min), max);
24678
24689
  }
24679
24690
  /**
@@ -24694,7 +24705,7 @@ let RadialInputElement = class RadialInputElement extends i$4 {
24694
24705
  return this.#_radius;
24695
24706
  }
24696
24707
  set radius(v) {
24697
- this.#_radius = clamp(v, 10, 50);
24708
+ this.#_radius = clamp$1(v, 10, 50);
24698
24709
  }
24699
24710
  #lanes;
24700
24711
  #dragging;
@@ -24739,7 +24750,7 @@ let RadialInputElement = class RadialInputElement extends i$4 {
24739
24750
  const effectiveSensitivity = this.clientHeight * 2 * (event.shiftKey ? 10 : 1);
24740
24751
  const deltaValue = (this.#dragStartY - event.clientY) / effectiveSensitivity * (this.max - this.min);
24741
24752
  const relativeValue = scale(this.#valueAtDragStart + deltaValue, this.min, this.max, 0, 1);
24742
- this.#setValueFromRelative(clamp(relativeValue, 0, 1), true);
24753
+ this.#setValueFromRelative(clamp$1(relativeValue, 0, 1), true);
24743
24754
  };
24744
24755
  this.#onPointerUp = () => {
24745
24756
  this.#dragging = false;
@@ -24809,7 +24820,7 @@ let RadialInputElement = class RadialInputElement extends i$4 {
24809
24820
  setLaneValue(key, value) {
24810
24821
  const lane = this.#lanes.get(key);
24811
24822
  if (lane) {
24812
- lane.value = clamp(value, 0, 1);
24823
+ lane.value = clamp$1(value, 0, 1);
24813
24824
  this.requestUpdate();
24814
24825
  }
24815
24826
  }
@@ -24839,7 +24850,7 @@ let RadialInputElement = class RadialInputElement extends i$4 {
24839
24850
  }
24840
24851
  #setValueFromRelative(relativeValue, isUserInteraction = false) {
24841
24852
  const newValue = scale(relativeValue, 0, 1, this.min, this.max);
24842
- const clampedValue = this.#quantise(clamp(newValue, this.min, this.max));
24853
+ const clampedValue = this.#quantise(clamp$1(newValue, this.min, this.max));
24843
24854
  if (clampedValue === this.value) return;
24844
24855
  const previousValue = this.value;
24845
24856
  this.value = clampedValue;
@@ -25219,27 +25230,27 @@ let RadialInputElement = class RadialInputElement extends i$4 {
25219
25230
  `];
25220
25231
  }
25221
25232
  };
25222
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "radius", null);
25223
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "value", void 0);
25224
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "min", void 0);
25225
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "max", void 0);
25226
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "step", void 0);
25227
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "stops", void 0);
25228
- __decorate([n$2({
25233
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "radius", null);
25234
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "value", void 0);
25235
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "min", void 0);
25236
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "max", void 0);
25237
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "step", void 0);
25238
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "stops", void 0);
25239
+ __decorate$1([n$2({
25229
25240
  type: String,
25230
25241
  attribute: `value-mode`
25231
25242
  })], RadialInputElement.prototype, "valueMode", void 0);
25232
- __decorate([n$2({ type: Number })], RadialInputElement.prototype, "flatten", void 0);
25233
- __decorate([n$2({
25243
+ __decorate$1([n$2({ type: Number })], RadialInputElement.prototype, "flatten", void 0);
25244
+ __decorate$1([n$2({
25234
25245
  type: String,
25235
25246
  attribute: `marker-style`
25236
25247
  })], RadialInputElement.prototype, "markerStyle", void 0);
25237
- __decorate([n$2({ type: Boolean })], RadialInputElement.prototype, "wedge", void 0);
25238
- __decorate([n$2({
25248
+ __decorate$1([n$2({ type: Boolean })], RadialInputElement.prototype, "wedge", void 0);
25249
+ __decorate$1([n$2({
25239
25250
  type: Boolean,
25240
25251
  reflect: true
25241
25252
  })], RadialInputElement.prototype, "disabled", void 0);
25242
- RadialInputElement = __decorate([safeCustomElement(`ixfx-radial-input`)], RadialInputElement);
25253
+ RadialInputElement = __decorate$1([safeCustomElement(`ixfx-radial-input`)], RadialInputElement);
25243
25254
  //#endregion
25244
25255
  //#region src/labelled-radial-input/labelled-radial-input.ts
25245
25256
  let LabelledRadialInput = class LabelledRadialInput extends LabelledInputBase {
@@ -25401,25 +25412,25 @@ let LabelledRadialInput = class LabelledRadialInput extends LabelledInputBase {
25401
25412
  `;
25402
25413
  }
25403
25414
  };
25404
- __decorate([n$2({ type: Number })], LabelledRadialInput.prototype, "radius", void 0);
25405
- __decorate([n$2({ type: Number })], LabelledRadialInput.prototype, "flatten", void 0);
25406
- __decorate([n$2({
25415
+ __decorate$1([n$2({ type: Number })], LabelledRadialInput.prototype, "radius", void 0);
25416
+ __decorate$1([n$2({ type: Number })], LabelledRadialInput.prototype, "flatten", void 0);
25417
+ __decorate$1([n$2({
25407
25418
  type: String,
25408
25419
  attribute: `marker-style`
25409
25420
  })], LabelledRadialInput.prototype, "markerStyle", void 0);
25410
- __decorate([n$2({ type: Boolean })], LabelledRadialInput.prototype, "wedge", void 0);
25411
- __decorate([n$2({
25421
+ __decorate$1([n$2({ type: Boolean })], LabelledRadialInput.prototype, "wedge", void 0);
25422
+ __decorate$1([n$2({
25412
25423
  type: String,
25413
25424
  attribute: `value-mode`
25414
25425
  })], LabelledRadialInput.prototype, "valueMode", void 0);
25415
- __decorate([n$2({ type: Boolean })], LabelledRadialInput.prototype, "tooltip", void 0);
25416
- __decorate([n$2({ type: Boolean })], LabelledRadialInput.prototype, "flip", void 0);
25417
- __decorate([n$2({
25426
+ __decorate$1([n$2({ type: Boolean })], LabelledRadialInput.prototype, "tooltip", void 0);
25427
+ __decorate$1([n$2({ type: Boolean })], LabelledRadialInput.prototype, "flip", void 0);
25428
+ __decorate$1([n$2({
25418
25429
  type: Number,
25419
25430
  attribute: `aspect-ratio-threshold`
25420
25431
  })], LabelledRadialInput.prototype, "aspectRatioThreshold", void 0);
25421
- __decorate([r$1()], LabelledRadialInput.prototype, "_isWide", void 0);
25422
- LabelledRadialInput = __decorate([safeCustomElement(`ixfx-labelled-radial-input`)], LabelledRadialInput);
25432
+ __decorate$1([r$1()], LabelledRadialInput.prototype, "_isWide", void 0);
25433
+ LabelledRadialInput = __decorate$1([safeCustomElement(`ixfx-labelled-radial-input`)], LabelledRadialInput);
25423
25434
  //#endregion
25424
25435
  //#region src/led.ts
25425
25436
  let LedElement = class LedElement extends i$4 {
@@ -25489,23 +25500,23 @@ let LedElement = class LedElement extends i$4 {
25489
25500
  `;
25490
25501
  }
25491
25502
  };
25492
- __decorate([n$2({ type: Number })], LedElement.prototype, "value", void 0);
25493
- __decorate([n$2({
25503
+ __decorate$1([n$2({ type: Number })], LedElement.prototype, "value", void 0);
25504
+ __decorate$1([n$2({
25494
25505
  type: Boolean,
25495
25506
  attribute: `lit`,
25496
25507
  reflect: true
25497
25508
  })], LedElement.prototype, "lit", void 0);
25498
- __decorate([n$2({ type: String })], LedElement.prototype, "color", void 0);
25499
- __decorate([n$2({
25509
+ __decorate$1([n$2({ type: String })], LedElement.prototype, "color", void 0);
25510
+ __decorate$1([n$2({
25500
25511
  type: Boolean,
25501
25512
  attribute: `blinking`,
25502
25513
  reflect: true
25503
25514
  })], LedElement.prototype, "blinking", void 0);
25504
- __decorate([n$2({
25515
+ __decorate$1([n$2({
25505
25516
  type: Number,
25506
25517
  attribute: `rate`
25507
25518
  })], LedElement.prototype, "rate", void 0);
25508
- LedElement = __decorate([safeCustomElement(`ixfx-led`)], LedElement);
25519
+ LedElement = __decorate$1([safeCustomElement(`ixfx-led`)], LedElement);
25509
25520
  //#endregion
25510
25521
  //#region src/menu/menu-bar.ts
25511
25522
  let MenuBar = class MenuBar extends i$4 {
@@ -25588,7 +25599,7 @@ let MenuBar = class MenuBar extends i$4 {
25588
25599
  return b`<slot role="menubar"></slot>`;
25589
25600
  }
25590
25601
  };
25591
- MenuBar = __decorate([safeCustomElement(`ixfx-menu-bar`)], MenuBar);
25602
+ MenuBar = __decorate$1([safeCustomElement(`ixfx-menu-bar`)], MenuBar);
25592
25603
  //#endregion
25593
25604
  //#region src/menu/menu-check-item.ts
25594
25605
  let MenuCheckItem = class MenuCheckItem extends i$4 {
@@ -25724,21 +25735,21 @@ let MenuCheckItem = class MenuCheckItem extends i$4 {
25724
25735
  `;
25725
25736
  }
25726
25737
  };
25727
- __decorate([n$2({ type: String })], MenuCheckItem.prototype, "command", void 0);
25728
- __decorate([n$2({
25738
+ __decorate$1([n$2({ type: String })], MenuCheckItem.prototype, "command", void 0);
25739
+ __decorate$1([n$2({
25729
25740
  type: String,
25730
25741
  attribute: `command-args`
25731
25742
  })], MenuCheckItem.prototype, "commandArgs", void 0);
25732
- __decorate([n$2({ type: String })], MenuCheckItem.prototype, "label", void 0);
25733
- __decorate([n$2({ type: Boolean })], MenuCheckItem.prototype, "checked", void 0);
25734
- __decorate([n$2({ type: Boolean })], MenuCheckItem.prototype, "disabled", void 0);
25735
- __decorate([n$2({
25743
+ __decorate$1([n$2({ type: String })], MenuCheckItem.prototype, "label", void 0);
25744
+ __decorate$1([n$2({ type: Boolean })], MenuCheckItem.prototype, "checked", void 0);
25745
+ __decorate$1([n$2({ type: Boolean })], MenuCheckItem.prototype, "disabled", void 0);
25746
+ __decorate$1([n$2({
25736
25747
  type: String,
25737
25748
  attribute: `icon-name`
25738
25749
  })], MenuCheckItem.prototype, "iconName", void 0);
25739
- __decorate([n$2({ attribute: false })], MenuCheckItem.prototype, "registry", void 0);
25740
- __decorate([n$2({ attribute: false })], MenuCheckItem.prototype, "keyboardManager", void 0);
25741
- MenuCheckItem = __decorate([safeCustomElement(`ixfx-menu-check-item`)], MenuCheckItem);
25750
+ __decorate$1([n$2({ attribute: false })], MenuCheckItem.prototype, "registry", void 0);
25751
+ __decorate$1([n$2({ attribute: false })], MenuCheckItem.prototype, "keyboardManager", void 0);
25752
+ MenuCheckItem = __decorate$1([safeCustomElement(`ixfx-menu-check-item`)], MenuCheckItem);
25742
25753
  //#endregion
25743
25754
  //#region src/menu/menu-command-controller.ts
25744
25755
  var MenuCommandController = class {
@@ -26000,24 +26011,24 @@ let MenuSubTrigger = class MenuSubTrigger extends i$4 {
26000
26011
  `;
26001
26012
  }
26002
26013
  };
26003
- __decorate([n$2({ type: String })], MenuSubTrigger.prototype, "command", void 0);
26004
- __decorate([n$2({
26014
+ __decorate$1([n$2({ type: String })], MenuSubTrigger.prototype, "command", void 0);
26015
+ __decorate$1([n$2({
26005
26016
  type: String,
26006
26017
  attribute: `command-args`
26007
26018
  })], MenuSubTrigger.prototype, "commandArgs", void 0);
26008
- __decorate([n$2({ type: String })], MenuSubTrigger.prototype, "label", void 0);
26009
- __decorate([n$2({ type: Boolean })], MenuSubTrigger.prototype, "disabled", void 0);
26010
- __decorate([n$2({
26019
+ __decorate$1([n$2({ type: String })], MenuSubTrigger.prototype, "label", void 0);
26020
+ __decorate$1([n$2({ type: Boolean })], MenuSubTrigger.prototype, "disabled", void 0);
26021
+ __decorate$1([n$2({
26011
26022
  type: String,
26012
26023
  attribute: `icon-name`
26013
26024
  })], MenuSubTrigger.prototype, "iconName", void 0);
26014
- __decorate([n$2({ attribute: false })], MenuSubTrigger.prototype, "registry", void 0);
26015
- __decorate([n$2({ attribute: false })], MenuSubTrigger.prototype, "keyboardManager", void 0);
26016
- __decorate([r$1()], MenuSubTrigger.prototype, "_hasSubmenu", void 0);
26017
- __decorate([e$4(`slot[name="submenu"]`)], MenuSubTrigger.prototype, "_slot", void 0);
26018
- __decorate([e$4(`.submenu-popover`)], MenuSubTrigger.prototype, "_submenuPopover", void 0);
26019
- __decorate([e$4(`.item`)], MenuSubTrigger.prototype, "_itemEl", void 0);
26020
- MenuSubTrigger = _MenuSubTrigger = __decorate([safeCustomElement(`ixfx-menu-sub-trigger`)], MenuSubTrigger);
26025
+ __decorate$1([n$2({ attribute: false })], MenuSubTrigger.prototype, "registry", void 0);
26026
+ __decorate$1([n$2({ attribute: false })], MenuSubTrigger.prototype, "keyboardManager", void 0);
26027
+ __decorate$1([r$1()], MenuSubTrigger.prototype, "_hasSubmenu", void 0);
26028
+ __decorate$1([e$4(`slot[name="submenu"]`)], MenuSubTrigger.prototype, "_slot", void 0);
26029
+ __decorate$1([e$4(`.submenu-popover`)], MenuSubTrigger.prototype, "_submenuPopover", void 0);
26030
+ __decorate$1([e$4(`.item`)], MenuSubTrigger.prototype, "_itemEl", void 0);
26031
+ MenuSubTrigger = _MenuSubTrigger = __decorate$1([safeCustomElement(`ixfx-menu-sub-trigger`)], MenuSubTrigger);
26021
26032
  //#endregion
26022
26033
  //#region src/menu/menu-separator.ts
26023
26034
  let MenuSeparator = class MenuSeparator extends i$4 {
@@ -26038,7 +26049,7 @@ let MenuSeparator = class MenuSeparator extends i$4 {
26038
26049
  return b`<div class="separator"></div>`;
26039
26050
  }
26040
26051
  };
26041
- MenuSeparator = __decorate([safeCustomElement(`ixfx-menu-separator`)], MenuSeparator);
26052
+ MenuSeparator = __decorate$1([safeCustomElement(`ixfx-menu-separator`)], MenuSeparator);
26042
26053
  //#endregion
26043
26054
  //#region src/menu/menu-header.ts
26044
26055
  let MenuHeader = class MenuHeader extends i$4 {
@@ -26063,8 +26074,8 @@ let MenuHeader = class MenuHeader extends i$4 {
26063
26074
  return b`<div>${this.label}</div>`;
26064
26075
  }
26065
26076
  };
26066
- __decorate([n$2({ type: String })], MenuHeader.prototype, "label", void 0);
26067
- MenuHeader = __decorate([safeCustomElement(`ixfx-menu-header`)], MenuHeader);
26077
+ __decorate$1([n$2({ type: String })], MenuHeader.prototype, "label", void 0);
26078
+ MenuHeader = __decorate$1([safeCustomElement(`ixfx-menu-header`)], MenuHeader);
26068
26079
  //#endregion
26069
26080
  //#region src/menu/menu-from-tree.ts
26070
26081
  function isLeaf(node) {
@@ -26230,15 +26241,15 @@ let MenuRadioItem = class MenuRadioItem extends i$4 {
26230
26241
  `;
26231
26242
  }
26232
26243
  };
26233
- __decorate([n$2({ type: String })], MenuRadioItem.prototype, "value", void 0);
26234
- __decorate([n$2({ type: String })], MenuRadioItem.prototype, "label", void 0);
26235
- __decorate([n$2({ type: Boolean })], MenuRadioItem.prototype, "disabled", void 0);
26236
- __decorate([n$2({ type: String })], MenuRadioItem.prototype, "groupValue", void 0);
26237
- __decorate([n$2({
26244
+ __decorate$1([n$2({ type: String })], MenuRadioItem.prototype, "value", void 0);
26245
+ __decorate$1([n$2({ type: String })], MenuRadioItem.prototype, "label", void 0);
26246
+ __decorate$1([n$2({ type: Boolean })], MenuRadioItem.prototype, "disabled", void 0);
26247
+ __decorate$1([n$2({ type: String })], MenuRadioItem.prototype, "groupValue", void 0);
26248
+ __decorate$1([n$2({
26238
26249
  type: String,
26239
26250
  attribute: `icon-name`
26240
26251
  })], MenuRadioItem.prototype, "iconName", void 0);
26241
- MenuRadioItem = __decorate([safeCustomElement(`ixfx-menu-radio-item`)], MenuRadioItem);
26252
+ MenuRadioItem = __decorate$1([safeCustomElement(`ixfx-menu-radio-item`)], MenuRadioItem);
26242
26253
  //#endregion
26243
26254
  //#region src/menu/menu-radio-group.ts
26244
26255
  let MenuRadioGroup = class MenuRadioGroup extends i$4 {
@@ -26287,10 +26298,10 @@ let MenuRadioGroup = class MenuRadioGroup extends i$4 {
26287
26298
  `;
26288
26299
  }
26289
26300
  };
26290
- __decorate([n$2({ type: String })], MenuRadioGroup.prototype, "name", void 0);
26291
- __decorate([n$2({ type: String })], MenuRadioGroup.prototype, "value", void 0);
26292
- __decorate([r$1()], MenuRadioGroup.prototype, "slottedElements", void 0);
26293
- MenuRadioGroup = __decorate([safeCustomElement(`ixfx-menu-radio-group`)], MenuRadioGroup);
26301
+ __decorate$1([n$2({ type: String })], MenuRadioGroup.prototype, "name", void 0);
26302
+ __decorate$1([n$2({ type: String })], MenuRadioGroup.prototype, "value", void 0);
26303
+ __decorate$1([r$1()], MenuRadioGroup.prototype, "slottedElements", void 0);
26304
+ MenuRadioGroup = __decorate$1([safeCustomElement(`ixfx-menu-radio-group`)], MenuRadioGroup);
26294
26305
  //#endregion
26295
26306
  //#region src/menu/index.ts
26296
26307
  var menu_exports = /* @__PURE__ */ __exportAll$5({
@@ -27340,24 +27351,24 @@ let MillerBaseElement = class MillerBaseElement extends i$4 {
27340
27351
  `];
27341
27352
  }
27342
27353
  };
27343
- __decorate([n$2({ type: Object })], MillerBaseElement.prototype, "root", void 0);
27344
- __decorate([n$2({ attribute: false })], MillerBaseElement.prototype, "model", void 0);
27345
- __decorate([n$2({ type: Boolean })], MillerBaseElement.prototype, "headers", void 0);
27346
- __decorate([n$2({ type: String })], MillerBaseElement.prototype, "interactionMode", void 0);
27347
- __decorate([n$2({
27354
+ __decorate$1([n$2({ type: Object })], MillerBaseElement.prototype, "root", void 0);
27355
+ __decorate$1([n$2({ attribute: false })], MillerBaseElement.prototype, "model", void 0);
27356
+ __decorate$1([n$2({ type: Boolean })], MillerBaseElement.prototype, "headers", void 0);
27357
+ __decorate$1([n$2({ type: String })], MillerBaseElement.prototype, "interactionMode", void 0);
27358
+ __decorate$1([n$2({
27348
27359
  reflect: true,
27349
27360
  attribute: `selection-filter`
27350
27361
  })], MillerBaseElement.prototype, "selectionFilter", void 0);
27351
- __decorate([n$2({
27362
+ __decorate$1([n$2({
27352
27363
  reflect: true,
27353
27364
  attribute: `exclusivity`
27354
27365
  })], MillerBaseElement.prototype, "exclusivity", void 0);
27355
- __decorate([n$2({ type: Object })], MillerBaseElement.prototype, "loadChildren", void 0);
27356
- __decorate([n$2({ attribute: false })], MillerBaseElement.prototype, "filterPredicate", void 0);
27357
- __decorate([r$1()], MillerBaseElement.prototype, "_columns", void 0);
27358
- __decorate([r$1()], MillerBaseElement.prototype, "_loadingDepth", void 0);
27359
- __decorate([r$1()], MillerBaseElement.prototype, "_selectedNodes", void 0);
27360
- MillerBaseElement = __decorate([safeCustomElement(`ixfx-miller-base`)], MillerBaseElement);
27366
+ __decorate$1([n$2({ type: Object })], MillerBaseElement.prototype, "loadChildren", void 0);
27367
+ __decorate$1([n$2({ attribute: false })], MillerBaseElement.prototype, "filterPredicate", void 0);
27368
+ __decorate$1([r$1()], MillerBaseElement.prototype, "_columns", void 0);
27369
+ __decorate$1([r$1()], MillerBaseElement.prototype, "_loadingDepth", void 0);
27370
+ __decorate$1([r$1()], MillerBaseElement.prototype, "_selectedNodes", void 0);
27371
+ MillerBaseElement = __decorate$1([safeCustomElement(`ixfx-miller-base`)], MillerBaseElement);
27361
27372
  //#endregion
27362
27373
  //#region src/miller/miller-list.ts
27363
27374
  /**
@@ -27518,7 +27529,7 @@ let MillerListElement = class MillerListElement extends MillerBaseElement {
27518
27529
  ];
27519
27530
  }
27520
27531
  };
27521
- MillerListElement = __decorate([safeCustomElement(`ixfx-miller-list`)], MillerListElement);
27532
+ MillerListElement = __decorate$1([safeCustomElement(`ixfx-miller-list`)], MillerListElement);
27522
27533
  //#endregion
27523
27534
  //#region src/miller/miller-tree-controller.ts
27524
27535
  /**
@@ -27715,22 +27726,22 @@ let PanelGroupElement = class PanelGroupElement extends i$4 {
27715
27726
  `;
27716
27727
  }
27717
27728
  };
27718
- __decorate([n$2({
27729
+ __decorate$1([n$2({
27719
27730
  type: String,
27720
27731
  reflect: true
27721
27732
  })], PanelGroupElement.prototype, "orientation", void 0);
27722
- __decorate([n$2({ type: String })], PanelGroupElement.prototype, "variant", void 0);
27723
- __decorate([n$2({
27733
+ __decorate$1([n$2({ type: String })], PanelGroupElement.prototype, "variant", void 0);
27734
+ __decorate$1([n$2({
27724
27735
  type: String,
27725
27736
  attribute: `toggle-interaction`
27726
27737
  })], PanelGroupElement.prototype, "toggleInteraction", void 0);
27727
- __decorate([n$2({
27738
+ __decorate$1([n$2({
27728
27739
  type: Boolean,
27729
27740
  attribute: `allow-multiple`
27730
27741
  })], PanelGroupElement.prototype, "allowMultiple", void 0);
27731
- __decorate([n$2()], PanelGroupElement.prototype, "gap", void 0);
27732
- __decorate([o$2({ slot: `` })], PanelGroupElement.prototype, "_panels", void 0);
27733
- PanelGroupElement = __decorate([safeCustomElement(`ixfx-panel-group`)], PanelGroupElement);
27742
+ __decorate$1([n$2()], PanelGroupElement.prototype, "gap", void 0);
27743
+ __decorate$1([o$2({ slot: `` })], PanelGroupElement.prototype, "_panels", void 0);
27744
+ PanelGroupElement = __decorate$1([safeCustomElement(`ixfx-panel-group`)], PanelGroupElement);
27734
27745
  //#endregion
27735
27746
  //#region src/panel/panel.ts
27736
27747
  let PanelElement = class PanelElement extends i$4 {
@@ -28106,32 +28117,32 @@ let PanelElement = class PanelElement extends i$4 {
28106
28117
  `;
28107
28118
  }
28108
28119
  };
28109
- __decorate([n$2({
28120
+ __decorate$1([n$2({
28110
28121
  type: Boolean,
28111
28122
  reflect: true
28112
28123
  })], PanelElement.prototype, "collapsed", void 0);
28113
- __decorate([n$2({
28124
+ __decorate$1([n$2({
28114
28125
  type: String,
28115
28126
  attribute: `orientation`,
28116
28127
  reflect: true
28117
28128
  })], PanelElement.prototype, "orientation", void 0);
28118
- __decorate([n$2({ type: Boolean })], PanelElement.prototype, "closable", void 0);
28119
- __decorate([n$2({ type: String })], PanelElement.prototype, "title", void 0);
28120
- __decorate([n$2({
28129
+ __decorate$1([n$2({ type: Boolean })], PanelElement.prototype, "closable", void 0);
28130
+ __decorate$1([n$2({ type: String })], PanelElement.prototype, "title", void 0);
28131
+ __decorate$1([n$2({
28121
28132
  type: String,
28122
28133
  attribute: `icon-name`
28123
28134
  })], PanelElement.prototype, "iconName", void 0);
28124
- __decorate([n$2({
28135
+ __decorate$1([n$2({
28125
28136
  type: String,
28126
28137
  attribute: `toggle-interaction`
28127
28138
  })], PanelElement.prototype, "toggleInteraction", void 0);
28128
- __decorate([n$2({
28139
+ __decorate$1([n$2({
28129
28140
  type: String,
28130
28141
  attribute: `variant`,
28131
28142
  reflect: true
28132
28143
  })], PanelElement.prototype, "variant", void 0);
28133
- __decorate([r$1()], PanelElement.prototype, "_isVertical", void 0);
28134
- PanelElement = __decorate([safeCustomElement(`ixfx-panel`)], PanelElement);
28144
+ __decorate$1([r$1()], PanelElement.prototype, "_isVertical", void 0);
28145
+ PanelElement = __decorate$1([safeCustomElement(`ixfx-panel`)], PanelElement);
28135
28146
  //#endregion
28136
28147
  //#region node_modules/.pnpm/@ixfx+modulation@0.56.12/node_modules/@ixfx/modulation/dist/chunk-pbuEa-1d.js
28137
28148
  var __defProp = Object.defineProperty;
@@ -29154,35 +29165,35 @@ let PlotSingleAxis = class PlotSingleAxis extends i$4 {
29154
29165
  `;
29155
29166
  }
29156
29167
  };
29157
- __decorate([n$2({ attribute: `draw-style` })], PlotSingleAxis.prototype, "drawStyle", void 0);
29158
- __decorate([n$2({ attribute: `age-style` })], PlotSingleAxis.prototype, "ageStyle", void 0);
29159
- __decorate([n$2()], PlotSingleAxis.prototype, "title", void 0);
29160
- __decorate([n$2({ type: Boolean })], PlotSingleAxis.prototype, "precise", void 0);
29161
- __decorate([n$2({ type: Boolean })], PlotSingleAxis.prototype, "tooltips", void 0);
29162
- __decorate([n$2({ type: Number })], PlotSingleAxis.prototype, "capacity", void 0);
29163
- __decorate([n$2({
29168
+ __decorate$1([n$2({ attribute: `draw-style` })], PlotSingleAxis.prototype, "drawStyle", void 0);
29169
+ __decorate$1([n$2({ attribute: `age-style` })], PlotSingleAxis.prototype, "ageStyle", void 0);
29170
+ __decorate$1([n$2()], PlotSingleAxis.prototype, "title", void 0);
29171
+ __decorate$1([n$2({ type: Boolean })], PlotSingleAxis.prototype, "precise", void 0);
29172
+ __decorate$1([n$2({ type: Boolean })], PlotSingleAxis.prototype, "tooltips", void 0);
29173
+ __decorate$1([n$2({ type: Number })], PlotSingleAxis.prototype, "capacity", void 0);
29174
+ __decorate$1([n$2({
29164
29175
  type: Boolean,
29165
29176
  attribute: `persistent-scale`
29166
29177
  })], PlotSingleAxis.prototype, "persistentScale", void 0);
29167
- __decorate([n$2({
29178
+ __decorate$1([n$2({
29168
29179
  type: Boolean,
29169
29180
  reflect: true
29170
29181
  })], PlotSingleAxis.prototype, "paused", void 0);
29171
- __decorate([n$2({
29182
+ __decorate$1([n$2({
29172
29183
  type: Boolean,
29173
29184
  attribute: `click-pauses`
29174
29185
  })], PlotSingleAxis.prototype, "clickPauses", void 0);
29175
- __decorate([n$2({
29186
+ __decorate$1([n$2({
29176
29187
  type: Boolean,
29177
29188
  attribute: `shaded`
29178
29189
  })], PlotSingleAxis.prototype, "shaded", void 0);
29179
- __decorate([n$2({ attribute: `area-color` })], PlotSingleAxis.prototype, "areaColor", void 0);
29180
- __decorate([n$2({ attribute: `color-mode` })], PlotSingleAxis.prototype, "colorMode", void 0);
29181
- __decorate([n$2({ attribute: `color-easing` })], PlotSingleAxis.prototype, "colorEasing", void 0);
29182
- __decorate([n$2({ attribute: `color-scale` })], PlotSingleAxis.prototype, "colorScale", void 0);
29183
- __decorate([r$1()], PlotSingleAxis.prototype, "_width", void 0);
29184
- __decorate([r$1()], PlotSingleAxis.prototype, "_height", void 0);
29185
- PlotSingleAxis = __decorate([safeCustomElement(`ixfx-plot-single-axis`)], PlotSingleAxis);
29190
+ __decorate$1([n$2({ attribute: `area-color` })], PlotSingleAxis.prototype, "areaColor", void 0);
29191
+ __decorate$1([n$2({ attribute: `color-mode` })], PlotSingleAxis.prototype, "colorMode", void 0);
29192
+ __decorate$1([n$2({ attribute: `color-easing` })], PlotSingleAxis.prototype, "colorEasing", void 0);
29193
+ __decorate$1([n$2({ attribute: `color-scale` })], PlotSingleAxis.prototype, "colorScale", void 0);
29194
+ __decorate$1([r$1()], PlotSingleAxis.prototype, "_width", void 0);
29195
+ __decorate$1([r$1()], PlotSingleAxis.prototype, "_height", void 0);
29196
+ PlotSingleAxis = __decorate$1([safeCustomElement(`ixfx-plot-single-axis`)], PlotSingleAxis);
29186
29197
  //#endregion
29187
29198
  //#region src/plots/xy-axis.ts
29188
29199
  let PlotXyAxis = class PlotXyAxis extends i$4 {
@@ -29429,30 +29440,30 @@ let PlotXyAxis = class PlotXyAxis extends i$4 {
29429
29440
  `;
29430
29441
  }
29431
29442
  };
29432
- __decorate([n$2({ attribute: `draw-style` })], PlotXyAxis.prototype, "drawStyle", void 0);
29433
- __decorate([n$2({ attribute: `age-style` })], PlotXyAxis.prototype, "ageStyle", void 0);
29434
- __decorate([n$2()], PlotXyAxis.prototype, "title", void 0);
29435
- __decorate([n$2({ type: Boolean })], PlotXyAxis.prototype, "precise", void 0);
29436
- __decorate([n$2({ type: Boolean })], PlotXyAxis.prototype, "tooltips", void 0);
29437
- __decorate([n$2({ type: Number })], PlotXyAxis.prototype, "capacity", void 0);
29438
- __decorate([n$2({
29443
+ __decorate$1([n$2({ attribute: `draw-style` })], PlotXyAxis.prototype, "drawStyle", void 0);
29444
+ __decorate$1([n$2({ attribute: `age-style` })], PlotXyAxis.prototype, "ageStyle", void 0);
29445
+ __decorate$1([n$2()], PlotXyAxis.prototype, "title", void 0);
29446
+ __decorate$1([n$2({ type: Boolean })], PlotXyAxis.prototype, "precise", void 0);
29447
+ __decorate$1([n$2({ type: Boolean })], PlotXyAxis.prototype, "tooltips", void 0);
29448
+ __decorate$1([n$2({ type: Number })], PlotXyAxis.prototype, "capacity", void 0);
29449
+ __decorate$1([n$2({
29439
29450
  type: Boolean,
29440
29451
  attribute: `persistent-scale`
29441
29452
  })], PlotXyAxis.prototype, "persistentScale", void 0);
29442
- __decorate([n$2({
29453
+ __decorate$1([n$2({
29443
29454
  type: Boolean,
29444
29455
  reflect: true
29445
29456
  })], PlotXyAxis.prototype, "paused", void 0);
29446
- __decorate([n$2({
29457
+ __decorate$1([n$2({
29447
29458
  type: Boolean,
29448
29459
  attribute: `click-pauses`
29449
29460
  })], PlotXyAxis.prototype, "clickPauses", void 0);
29450
- __decorate([n$2({ attribute: `color-mode` })], PlotXyAxis.prototype, "colorMode", void 0);
29451
- __decorate([n$2({ attribute: `color-easing` })], PlotXyAxis.prototype, "colorEasing", void 0);
29452
- __decorate([n$2({ attribute: `color-scale` })], PlotXyAxis.prototype, "colorScale", void 0);
29453
- __decorate([r$1()], PlotXyAxis.prototype, "_width", void 0);
29454
- __decorate([r$1()], PlotXyAxis.prototype, "_height", void 0);
29455
- PlotXyAxis = __decorate([safeCustomElement(`ixfx-plot-xy-axis`)], PlotXyAxis);
29461
+ __decorate$1([n$2({ attribute: `color-mode` })], PlotXyAxis.prototype, "colorMode", void 0);
29462
+ __decorate$1([n$2({ attribute: `color-easing` })], PlotXyAxis.prototype, "colorEasing", void 0);
29463
+ __decorate$1([n$2({ attribute: `color-scale` })], PlotXyAxis.prototype, "colorScale", void 0);
29464
+ __decorate$1([r$1()], PlotXyAxis.prototype, "_width", void 0);
29465
+ __decorate$1([r$1()], PlotXyAxis.prototype, "_height", void 0);
29466
+ PlotXyAxis = __decorate$1([safeCustomElement(`ixfx-plot-xy-axis`)], PlotXyAxis);
29456
29467
  //#endregion
29457
29468
  //#region src/polar-pad/polar-pad.ts
29458
29469
  /**
@@ -29946,44 +29957,44 @@ let PolarPad = class PolarPad extends i$4 {
29946
29957
  `;
29947
29958
  }
29948
29959
  };
29949
- __decorate([n$2({ type: Number })], PolarPad.prototype, "angle", void 0);
29950
- __decorate([n$2({ type: Number })], PolarPad.prototype, "radius", void 0);
29951
- __decorate([n$2({ type: Number })], PolarPad.prototype, "rings", void 0);
29952
- __decorate([n$2({ type: Number })], PolarPad.prototype, "rays", void 0);
29953
- __decorate([n$2({
29960
+ __decorate$1([n$2({ type: Number })], PolarPad.prototype, "angle", void 0);
29961
+ __decorate$1([n$2({ type: Number })], PolarPad.prototype, "radius", void 0);
29962
+ __decorate$1([n$2({ type: Number })], PolarPad.prototype, "rings", void 0);
29963
+ __decorate$1([n$2({ type: Number })], PolarPad.prototype, "rays", void 0);
29964
+ __decorate$1([n$2({
29954
29965
  type: Boolean,
29955
29966
  reflect: true,
29956
29967
  attribute: `show-ray`
29957
29968
  })], PolarPad.prototype, "showRay", void 0);
29958
- __decorate([n$2({
29969
+ __decorate$1([n$2({
29959
29970
  type: Boolean,
29960
29971
  reflect: true,
29961
29972
  attribute: `show-origin`
29962
29973
  })], PolarPad.prototype, "showOrigin", void 0);
29963
- __decorate([n$2({
29974
+ __decorate$1([n$2({
29964
29975
  type: Boolean,
29965
29976
  reflect: true,
29966
29977
  attribute: `hide-cursor`
29967
29978
  })], PolarPad.prototype, "hideCursor", void 0);
29968
- __decorate([n$2({
29979
+ __decorate$1([n$2({
29969
29980
  type: Boolean,
29970
29981
  attribute: `snap-value`,
29971
29982
  reflect: true
29972
29983
  })], PolarPad.prototype, "snapValue", void 0);
29973
- __decorate([n$2({
29984
+ __decorate$1([n$2({
29974
29985
  type: Boolean,
29975
29986
  reflect: true
29976
29987
  })], PolarPad.prototype, "disabled", void 0);
29977
- __decorate([n$2({ type: Number })], PolarPad.prototype, "stops", void 0);
29978
- __decorate([n$2({
29988
+ __decorate$1([n$2({ type: Number })], PolarPad.prototype, "stops", void 0);
29989
+ __decorate$1([n$2({
29979
29990
  type: Number,
29980
29991
  attribute: `stops-angle`
29981
29992
  })], PolarPad.prototype, "stopsAngle", void 0);
29982
- __decorate([n$2({
29993
+ __decorate$1([n$2({
29983
29994
  type: Number,
29984
29995
  attribute: `stops-radius`
29985
29996
  })], PolarPad.prototype, "stopsRadius", void 0);
29986
- PolarPad = __decorate([safeCustomElement(`ixfx-polar-pad`)], PolarPad);
29997
+ PolarPad = __decorate$1([safeCustomElement(`ixfx-polar-pad`)], PolarPad);
29987
29998
  //#endregion
29988
29999
  //#region src/styles/tooltip.ts
29989
30000
  const tooltipValueStyles = i$7`
@@ -30515,27 +30526,27 @@ let RangeInput = class RangeInput extends i$4 {
30515
30526
  `];
30516
30527
  }
30517
30528
  };
30518
- __decorate([n$2({ type: Number })], RangeInput.prototype, "min", void 0);
30519
- __decorate([n$2({ type: Number })], RangeInput.prototype, "max", void 0);
30520
- __decorate([n$2({ type: Number })], RangeInput.prototype, "value", void 0);
30521
- __decorate([n$2({ type: Number })], RangeInput.prototype, "step", void 0);
30522
- __decorate([n$2({
30529
+ __decorate$1([n$2({ type: Number })], RangeInput.prototype, "min", void 0);
30530
+ __decorate$1([n$2({ type: Number })], RangeInput.prototype, "max", void 0);
30531
+ __decorate$1([n$2({ type: Number })], RangeInput.prototype, "value", void 0);
30532
+ __decorate$1([n$2({ type: Number })], RangeInput.prototype, "step", void 0);
30533
+ __decorate$1([n$2({
30523
30534
  type: String,
30524
30535
  reflect: true
30525
30536
  })], RangeInput.prototype, "orientation", void 0);
30526
- __decorate([n$2({
30537
+ __decorate$1([n$2({
30527
30538
  type: Boolean,
30528
30539
  reflect: true
30529
30540
  })], RangeInput.prototype, "swipeable", void 0);
30530
- __decorate([n$2({ type: Boolean })], RangeInput.prototype, "tooltip", void 0);
30531
- __decorate([n$2({
30541
+ __decorate$1([n$2({ type: Boolean })], RangeInput.prototype, "tooltip", void 0);
30542
+ __decorate$1([n$2({
30532
30543
  type: String,
30533
30544
  attribute: `tooltip-orientation`
30534
30545
  })], RangeInput.prototype, "tooltipOrientation", void 0);
30535
- __decorate([n$2({ attribute: false })], RangeInput.prototype, "labelFormatter", void 0);
30536
- __decorate([e$4(`input`)], RangeInput.prototype, "_inputEl", void 0);
30537
- __decorate([e$4(`ixfx-tooltip`)], RangeInput.prototype, "_tooltipEl", void 0);
30538
- RangeInput = __decorate([safeCustomElement(`ixfx-range-input`)], RangeInput);
30546
+ __decorate$1([n$2({ attribute: false })], RangeInput.prototype, "labelFormatter", void 0);
30547
+ __decorate$1([e$4(`input`)], RangeInput.prototype, "_inputEl", void 0);
30548
+ __decorate$1([e$4(`ixfx-tooltip`)], RangeInput.prototype, "_tooltipEl", void 0);
30549
+ RangeInput = __decorate$1([safeCustomElement(`ixfx-range-input`)], RangeInput);
30539
30550
  //#endregion
30540
30551
  //#region src/util/drag.ts
30541
30552
  function getCoordinates(event) {
@@ -31027,28 +31038,28 @@ let RangeMultiElement = class RangeMultiElement extends i$4 {
31027
31038
  ];
31028
31039
  }
31029
31040
  };
31030
- __decorate([n$2({ type: Boolean })], RangeMultiElement.prototype, "tooltip", void 0);
31031
- __decorate([n$2({
31041
+ __decorate$1([n$2({ type: Boolean })], RangeMultiElement.prototype, "tooltip", void 0);
31042
+ __decorate$1([n$2({
31032
31043
  type: String,
31033
31044
  attribute: `tooltip-orientation`
31034
31045
  })], RangeMultiElement.prototype, "tooltipOrientation", void 0);
31035
- __decorate([n$2({ type: String })], RangeMultiElement.prototype, "crossover", void 0);
31036
- __decorate([n$2({
31046
+ __decorate$1([n$2({ type: String })], RangeMultiElement.prototype, "crossover", void 0);
31047
+ __decorate$1([n$2({
31037
31048
  type: String,
31038
31049
  attribute: `resize-mode`
31039
31050
  })], RangeMultiElement.prototype, "resizeMode", void 0);
31040
- __decorate([n$2({
31051
+ __decorate$1([n$2({
31041
31052
  type: String,
31042
31053
  reflect: true
31043
31054
  })], RangeMultiElement.prototype, "orientation", void 0);
31044
- __decorate([n$2()], RangeMultiElement.prototype, "step", void 0);
31045
- __decorate([n$2({ type: Number })], RangeMultiElement.prototype, "a", void 0);
31046
- __decorate([n$2({ type: Number })], RangeMultiElement.prototype, "b", void 0);
31047
- __decorate([n$2({ type: Number })], RangeMultiElement.prototype, "max", null);
31048
- __decorate([n$2({ type: Number })], RangeMultiElement.prototype, "min", null);
31049
- __decorate([t$3({ capture: true })], RangeMultiElement.prototype, "_onInput", null);
31050
- __decorate([t$3({ capture: true })], RangeMultiElement.prototype, "_onPointerDown", null);
31051
- RangeMultiElement = __decorate([safeCustomElement(`ixfx-range-multi`)], RangeMultiElement);
31055
+ __decorate$1([n$2()], RangeMultiElement.prototype, "step", void 0);
31056
+ __decorate$1([n$2({ type: Number })], RangeMultiElement.prototype, "a", void 0);
31057
+ __decorate$1([n$2({ type: Number })], RangeMultiElement.prototype, "b", void 0);
31058
+ __decorate$1([n$2({ type: Number })], RangeMultiElement.prototype, "max", null);
31059
+ __decorate$1([n$2({ type: Number })], RangeMultiElement.prototype, "min", null);
31060
+ __decorate$1([t$3({ capture: true })], RangeMultiElement.prototype, "_onInput", null);
31061
+ __decorate$1([t$3({ capture: true })], RangeMultiElement.prototype, "_onPointerDown", null);
31062
+ RangeMultiElement = __decorate$1([safeCustomElement(`ixfx-range-multi`)], RangeMultiElement);
31052
31063
  //#endregion
31053
31064
  //#region src/range/range.ts
31054
31065
  let RangeElement = class RangeElement extends i$4 {
@@ -31159,24 +31170,24 @@ let RangeElement = class RangeElement extends i$4 {
31159
31170
  ];
31160
31171
  }
31161
31172
  };
31162
- __decorate([n$2({ type: Boolean })], RangeElement.prototype, "tooltip", void 0);
31163
- __decorate([n$2({
31173
+ __decorate$1([n$2({ type: Boolean })], RangeElement.prototype, "tooltip", void 0);
31174
+ __decorate$1([n$2({
31164
31175
  type: String,
31165
31176
  attribute: `tooltip-orientation`
31166
31177
  })], RangeElement.prototype, "tooltipOrientation", void 0);
31167
- __decorate([n$2({
31178
+ __decorate$1([n$2({
31168
31179
  type: String,
31169
31180
  reflect: true
31170
31181
  })], RangeElement.prototype, "orientation", void 0);
31171
- __decorate([n$2({
31182
+ __decorate$1([n$2({
31172
31183
  type: Boolean,
31173
31184
  attribute: true
31174
31185
  })], RangeElement.prototype, "disabled", void 0);
31175
- __decorate([n$2({ type: Number })], RangeElement.prototype, "min", void 0);
31176
- __decorate([n$2({ type: Number })], RangeElement.prototype, "max", void 0);
31177
- __decorate([n$2({ type: Number })], RangeElement.prototype, "value", null);
31178
- __decorate([n$2({ type: Number })], RangeElement.prototype, "step", void 0);
31179
- RangeElement = __decorate([safeCustomElement(`ixfx-range`)], RangeElement);
31186
+ __decorate$1([n$2({ type: Number })], RangeElement.prototype, "min", void 0);
31187
+ __decorate$1([n$2({ type: Number })], RangeElement.prototype, "max", void 0);
31188
+ __decorate$1([n$2({ type: Number })], RangeElement.prototype, "value", null);
31189
+ __decorate$1([n$2({ type: Number })], RangeElement.prototype, "step", void 0);
31190
+ RangeElement = __decorate$1([safeCustomElement(`ixfx-range`)], RangeElement);
31180
31191
  //#endregion
31181
31192
  //#region src/selecthorizontal.ts
31182
31193
  let SelectHorizontalElement = class SelectHorizontalElement extends i$4 {
@@ -31211,8 +31222,8 @@ let SelectHorizontalElement = class SelectHorizontalElement extends i$4 {
31211
31222
  `;
31212
31223
  }
31213
31224
  };
31214
- __decorate([n$2({ type: Boolean })], SelectHorizontalElement.prototype, "editMode", void 0);
31215
- SelectHorizontalElement = __decorate([safeCustomElement(`ixfx-selecthorizontal-element`)], SelectHorizontalElement);
31225
+ __decorate$1([n$2({ type: Boolean })], SelectHorizontalElement.prototype, "editMode", void 0);
31226
+ SelectHorizontalElement = __decorate$1([safeCustomElement(`ixfx-selecthorizontal-element`)], SelectHorizontalElement);
31216
31227
  //#endregion
31217
31228
  //#region src/snap-container/snap-container.ts
31218
31229
  let SnapContainer = class SnapContainer extends i$4 {
@@ -31485,25 +31496,25 @@ let SnapContainer = class SnapContainer extends i$4 {
31485
31496
  `;
31486
31497
  }
31487
31498
  };
31488
- __decorate([n$2({
31499
+ __decorate$1([n$2({
31489
31500
  type: String,
31490
31501
  attribute: `orientation`
31491
31502
  })], SnapContainer.prototype, "orientation", void 0);
31492
- __decorate([n$2({
31503
+ __decorate$1([n$2({
31493
31504
  type: Number,
31494
31505
  attribute: `snap-positions`
31495
31506
  })], SnapContainer.prototype, "snapPositions", void 0);
31496
- __decorate([n$2({
31507
+ __decorate$1([n$2({
31497
31508
  type: String,
31498
31509
  attribute: `snap-logic`
31499
31510
  })], SnapContainer.prototype, "snapLogic", void 0);
31500
- __decorate([n$2({
31511
+ __decorate$1([n$2({
31501
31512
  type: String,
31502
31513
  attribute: `click-snap`
31503
31514
  })], SnapContainer.prototype, "clickSnap", void 0);
31504
- __decorate([n$2({ type: Number })], SnapContainer.prototype, "snap", void 0);
31505
- __decorate([r$1()], SnapContainer.prototype, "_dragging", void 0);
31506
- SnapContainer = __decorate([safeCustomElement(`ixfx-snap-container`)], SnapContainer);
31515
+ __decorate$1([n$2({ type: Number })], SnapContainer.prototype, "snap", void 0);
31516
+ __decorate$1([r$1()], SnapContainer.prototype, "_dragging", void 0);
31517
+ SnapContainer = __decorate$1([safeCustomElement(`ixfx-snap-container`)], SnapContainer);
31507
31518
  //#endregion
31508
31519
  //#region src/split-layout/split-layout.ts
31509
31520
  let SplitLayoutElement = class SplitLayoutElement extends i$4 {
@@ -31551,7 +31562,7 @@ let SplitLayoutElement = class SplitLayoutElement extends i$4 {
31551
31562
  if (!bounds) return;
31552
31563
  const threshold = 5;
31553
31564
  if (this.layout === `horizontal`) {
31554
- const relativeY = clamp$2((event.y - bounds.y) / bounds.height);
31565
+ const relativeY = clamp$3((event.y - bounds.y) / bounds.height);
31555
31566
  if (this.collapsible && this.collapsedA) {
31556
31567
  if (relativeY > (this.#collapsedAPointerAtCollapse ?? .05) + this.#hysteresisThreshold) {
31557
31568
  this.collapsedA = false;
@@ -31589,7 +31600,7 @@ let SplitLayoutElement = class SplitLayoutElement extends i$4 {
31589
31600
  this.#collapsedBPointerAtCollapse = relativeY;
31590
31601
  }
31591
31602
  } else {
31592
- const relativeX = clamp$2((event.x - bounds.x) / bounds.width);
31603
+ const relativeX = clamp$3((event.x - bounds.x) / bounds.width);
31593
31604
  if (this.collapsible && this.collapsedA) {
31594
31605
  if (relativeX > (this.#collapsedAPointerAtCollapse ?? .05) + this.#hysteresisThreshold) {
31595
31606
  this.collapsedA = false;
@@ -32022,26 +32033,26 @@ let SplitLayoutElement = class SplitLayoutElement extends i$4 {
32022
32033
  `;
32023
32034
  }
32024
32035
  };
32025
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "layout", void 0);
32026
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "sizeA", void 0);
32027
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "sizeB", void 0);
32028
- __decorate([n$2({ type: Boolean })], SplitLayoutElement.prototype, "fixedA", void 0);
32029
- __decorate([n$2({ type: Boolean })], SplitLayoutElement.prototype, "fixedB", void 0);
32030
- __decorate([n$2({ type: Boolean })], SplitLayoutElement.prototype, "collapsible", void 0);
32031
- __decorate([n$2({
32036
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "layout", void 0);
32037
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "sizeA", void 0);
32038
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "sizeB", void 0);
32039
+ __decorate$1([n$2({ type: Boolean })], SplitLayoutElement.prototype, "fixedA", void 0);
32040
+ __decorate$1([n$2({ type: Boolean })], SplitLayoutElement.prototype, "fixedB", void 0);
32041
+ __decorate$1([n$2({ type: Boolean })], SplitLayoutElement.prototype, "collapsible", void 0);
32042
+ __decorate$1([n$2({
32032
32043
  type: Boolean,
32033
32044
  reflect: true
32034
32045
  })], SplitLayoutElement.prototype, "collapsedA", void 0);
32035
- __decorate([n$2({
32046
+ __decorate$1([n$2({
32036
32047
  type: Boolean,
32037
32048
  reflect: true
32038
32049
  })], SplitLayoutElement.prototype, "collapsedB", void 0);
32039
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "minSizeA", void 0);
32040
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "maxSizeA", void 0);
32041
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "minSizeB", void 0);
32042
- __decorate([n$2({ type: String })], SplitLayoutElement.prototype, "maxSizeB", void 0);
32043
- __decorate([r$1()], SplitLayoutElement.prototype, "_hasCorner", void 0);
32044
- SplitLayoutElement = __decorate([safeCustomElement(`ixfx-split-layout`)], SplitLayoutElement);
32050
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "minSizeA", void 0);
32051
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "maxSizeA", void 0);
32052
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "minSizeB", void 0);
32053
+ __decorate$1([n$2({ type: String })], SplitLayoutElement.prototype, "maxSizeB", void 0);
32054
+ __decorate$1([r$1()], SplitLayoutElement.prototype, "_hasCorner", void 0);
32055
+ SplitLayoutElement = __decorate$1([safeCustomElement(`ixfx-split-layout`)], SplitLayoutElement);
32045
32056
  //#endregion
32046
32057
  //#region src/swipe/swipe.ts
32047
32058
  let SwipeElement = class SwipeElement extends i$4 {
@@ -32234,11 +32245,11 @@ let SwipeElement = class SwipeElement extends i$4 {
32234
32245
  `;
32235
32246
  }
32236
32247
  };
32237
- __decorate([n$2({ type: Number })], SwipeElement.prototype, "barSpacing", void 0);
32238
- __decorate([n$2({ type: Number })], SwipeElement.prototype, "barWidth", void 0);
32239
- __decorate([n$2({ type: Number })], SwipeElement.prototype, "debounceMs", void 0);
32240
- __decorate([n$2({ type: Number })], SwipeElement.prototype, "retractDurationMs", void 0);
32241
- SwipeElement = __decorate([safeCustomElement(`ixfx-swipe`)], SwipeElement);
32248
+ __decorate$1([n$2({ type: Number })], SwipeElement.prototype, "barSpacing", void 0);
32249
+ __decorate$1([n$2({ type: Number })], SwipeElement.prototype, "barWidth", void 0);
32250
+ __decorate$1([n$2({ type: Number })], SwipeElement.prototype, "debounceMs", void 0);
32251
+ __decorate$1([n$2({ type: Number })], SwipeElement.prototype, "retractDurationMs", void 0);
32252
+ SwipeElement = __decorate$1([safeCustomElement(`ixfx-swipe`)], SwipeElement);
32242
32253
  //#endregion
32243
32254
  //#region src/tabs/tab-list-item.ts
32244
32255
  let TabListItemElement = class TabListItemElement extends i$4 {
@@ -32292,16 +32303,19 @@ let TabListItemElement = class TabListItemElement extends i$4 {
32292
32303
  <div>
32293
32304
  ${this.iconName ? b`<ixfx-icon name="${this.iconName}"></ixfx-icon>` : A}
32294
32305
  ${showLabel ? b`<span class="label"><slot></slot></span>` : A}
32295
- ${this.closeable ? b`
32296
- <button
32297
- class="close-btn"
32298
- type="button"
32299
- aria-label="Close tab"
32300
- @click=${this._onCloseClick}
32301
- >
32302
- <ixfx-icon name="close"></ixfx-icon>
32303
- </button>
32304
- ` : A}
32306
+ <div class="actions">
32307
+ <div class="toolbar"><slot name="toolbar"></slot></div>
32308
+ ${this.closeable ? b`
32309
+ <button
32310
+ class="close-btn"
32311
+ type="button"
32312
+ aria-label="Close tab"
32313
+ @click=${this._onCloseClick}
32314
+ >
32315
+ <ixfx-icon name="close"></ixfx-icon>
32316
+ </button>
32317
+ ` : A}
32318
+ </div>
32305
32319
  </div>
32306
32320
  `;
32307
32321
  }
@@ -32325,7 +32339,7 @@ let TabListItemElement = class TabListItemElement extends i$4 {
32325
32339
  box-sizing: border-box;
32326
32340
  }
32327
32341
 
32328
- div {
32342
+ :host > div {
32329
32343
  display: flex;
32330
32344
  align-items: center;
32331
32345
  gap: var(--space-s, 4px);
@@ -32356,6 +32370,28 @@ let TabListItemElement = class TabListItemElement extends i$4 {
32356
32370
  flex-shrink: 0;
32357
32371
  }
32358
32372
 
32373
+ .actions {
32374
+ display: flex;
32375
+ align-items: center;
32376
+ gap: var(--space-xs);
32377
+ margin-left: auto;
32378
+ flex-shrink: 0;
32379
+ }
32380
+
32381
+ .toolbar {
32382
+ display: none;
32383
+ align-items: center;
32384
+ gap: var(--space-xs);
32385
+ }
32386
+
32387
+ :host([selected]) .toolbar {
32388
+ display: flex;
32389
+ }
32390
+
32391
+ slot[name="toolbar"] {
32392
+ display: contents;
32393
+ }
32394
+
32359
32395
  .close-btn {
32360
32396
  display: inline-flex;
32361
32397
  align-items: center;
@@ -32363,7 +32399,6 @@ let TabListItemElement = class TabListItemElement extends i$4 {
32363
32399
  background: none;
32364
32400
  border: none;
32365
32401
  padding: var(--space-xs);
32366
- margin-left: auto;
32367
32402
  cursor: pointer;
32368
32403
  color: inherit;
32369
32404
  border-radius: var(--radius-s);
@@ -32388,19 +32423,19 @@ let TabListItemElement = class TabListItemElement extends i$4 {
32388
32423
  `];
32389
32424
  }
32390
32425
  };
32391
- __decorate([n$2({ type: Boolean })], TabListItemElement.prototype, "closeable", void 0);
32392
- __decorate([n$2({
32426
+ __decorate$1([n$2({ type: Boolean })], TabListItemElement.prototype, "closeable", void 0);
32427
+ __decorate$1([n$2({
32393
32428
  type: String,
32394
32429
  attribute: `icon-name`
32395
32430
  })], TabListItemElement.prototype, "iconName", void 0);
32396
- __decorate([n$2({ type: String })], TabListItemElement.prototype, "description", void 0);
32397
- __decorate([n$2({
32431
+ __decorate$1([n$2({ type: String })], TabListItemElement.prototype, "description", void 0);
32432
+ __decorate$1([n$2({
32398
32433
  type: String,
32399
32434
  attribute: `command-active`
32400
32435
  })], TabListItemElement.prototype, "commandActive", void 0);
32401
- __decorate([n$2({ attribute: false })], TabListItemElement.prototype, "registry", void 0);
32402
- __decorate([r$1()], TabListItemElement.prototype, "_compact", void 0);
32403
- TabListItemElement = __decorate([safeCustomElement(`ixfx-tab-list-item`)], TabListItemElement);
32436
+ __decorate$1([n$2({ attribute: false })], TabListItemElement.prototype, "registry", void 0);
32437
+ __decorate$1([r$1()], TabListItemElement.prototype, "_compact", void 0);
32438
+ TabListItemElement = __decorate$1([safeCustomElement(`ixfx-tab-list-item`)], TabListItemElement);
32404
32439
  //#endregion
32405
32440
  //#region src/tabs/tab-list.ts
32406
32441
  let TabListElement = class TabListElement extends i$4 {
@@ -32594,10 +32629,10 @@ let TabListElement = class TabListElement extends i$4 {
32594
32629
  `;
32595
32630
  }
32596
32631
  };
32597
- __decorate([n$2({ type: String })], TabListElement.prototype, "orientation", void 0);
32598
- __decorate([n$2({ type: Boolean })], TabListElement.prototype, "flip", void 0);
32599
- __decorate([n$2({ type: Boolean })], TabListElement.prototype, "scrollable", void 0);
32600
- TabListElement = __decorate([safeCustomElement(`ixfx-tab-list`)], TabListElement);
32632
+ __decorate$1([n$2({ type: String })], TabListElement.prototype, "orientation", void 0);
32633
+ __decorate$1([n$2({ type: Boolean })], TabListElement.prototype, "flip", void 0);
32634
+ __decorate$1([n$2({ type: Boolean })], TabListElement.prototype, "scrollable", void 0);
32635
+ TabListElement = __decorate$1([safeCustomElement(`ixfx-tab-list`)], TabListElement);
32601
32636
  //#endregion
32602
32637
  //#region src/tabs/tab-panel.ts
32603
32638
  let TabPanelElement = class TabPanelElement extends i$4 {
@@ -32619,7 +32654,7 @@ let TabPanelElement = class TabPanelElement extends i$4 {
32619
32654
  `;
32620
32655
  }
32621
32656
  };
32622
- TabPanelElement = __decorate([safeCustomElement(`ixfx-tab-panel`)], TabPanelElement);
32657
+ TabPanelElement = __decorate$1([safeCustomElement(`ixfx-tab-panel`)], TabPanelElement);
32623
32658
  //#endregion
32624
32659
  //#region src/tabs/tab-panels.ts
32625
32660
  let TabPanelsElement = class TabPanelsElement extends i$4 {
@@ -32642,14 +32677,17 @@ let TabPanelsElement = class TabPanelsElement extends i$4 {
32642
32677
  if (this.onSelectedPanel) this.onSelectedPanel(el.id, el);
32643
32678
  }
32644
32679
  syncWithList(el) {
32680
+ const apply = (t) => {
32681
+ if (!t) return;
32682
+ const forEl = t.getAttribute(`for`);
32683
+ if (forEl) this.selectPanel(forEl);
32684
+ };
32645
32685
  const t = el.getSelectedElement();
32646
32686
  if (!t) {
32647
- el.updateComplete.then(() => this.syncWithList(el));
32687
+ el.updateComplete.then(() => apply(el.getSelectedElement()));
32648
32688
  return;
32649
32689
  }
32650
- const forEl = t.getAttribute(`for`);
32651
- if (!forEl) return;
32652
- this.selectPanel(forEl);
32690
+ apply(t);
32653
32691
  }
32654
32692
  selectPanel(id) {
32655
32693
  const current = this.getSelectedElement();
@@ -32673,8 +32711,8 @@ let TabPanelsElement = class TabPanelsElement extends i$4 {
32673
32711
  `;
32674
32712
  }
32675
32713
  };
32676
- __decorate([o$2()], TabPanelsElement.prototype, "_listItems", void 0);
32677
- TabPanelsElement = __decorate([safeCustomElement(`ixfx-tab-panels`)], TabPanelsElement);
32714
+ __decorate$1([o$2()], TabPanelsElement.prototype, "_listItems", void 0);
32715
+ TabPanelsElement = __decorate$1([safeCustomElement(`ixfx-tab-panels`)], TabPanelsElement);
32678
32716
  //#endregion
32679
32717
  //#region src/timeline/timeline-controller.ts
32680
32718
  /**
@@ -33666,24 +33704,1453 @@ let TimelineTrackTabElement = class TimelineTrackTabElement extends i$4 {
33666
33704
  this.style.cursor = ``;
33667
33705
  }
33668
33706
  };
33669
- __decorate([n$2({ type: String })], TimelineTrackTabElement.prototype, "label", void 0);
33670
- __decorate([n$2({
33707
+ __decorate$1([n$2({ type: String })], TimelineTrackTabElement.prototype, "label", void 0);
33708
+ __decorate$1([n$2({
33671
33709
  type: String,
33672
33710
  attribute: `track-key`
33673
33711
  })], TimelineTrackTabElement.prototype, "trackKey", void 0);
33674
- __decorate([n$2({
33712
+ __decorate$1([n$2({
33675
33713
  type: Boolean,
33676
33714
  reflect: true
33677
33715
  })], TimelineTrackTabElement.prototype, "selected", void 0);
33678
- __decorate([n$2({
33716
+ __decorate$1([n$2({
33679
33717
  type: Boolean,
33680
33718
  reflect: true
33681
33719
  })], TimelineTrackTabElement.prototype, "reorderable", void 0);
33682
- __decorate([n$2({
33720
+ __decorate$1([n$2({
33683
33721
  type: Boolean,
33684
33722
  reflect: true
33685
33723
  })], TimelineTrackTabElement.prototype, "resizable", void 0);
33686
- TimelineTrackTabElement = __decorate([safeCustomElement(`ixfx-timeline-track-tab`)], TimelineTrackTabElement);
33724
+ TimelineTrackTabElement = __decorate$1([safeCustomElement(`ixfx-timeline-track-tab`)], TimelineTrackTabElement);
33725
+ //#endregion
33726
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/convert.js
33727
+ /**
33728
+ * Converts viewport-relative coordinates to canvas-relative (logical) coordinates.
33729
+ *
33730
+ * This function accounts for the current scroll position and content offset to translate
33731
+ * coordinates from the visible viewport space to the logical canvas space.
33732
+ *
33733
+ * @param x - The x-coordinate in viewport space (pixels from left edge of viewport)
33734
+ * @param y - The y-coordinate in viewport space (pixels from top)
33735
+ * @param scrollLeft - The current horizontal scroll position in pixels
33736
+ * @param contentOffset - The horizontal offset applied to center content in single-tile mode
33737
+ * @param scrollTop - The current vertical scroll position in pixels
33738
+ * @param contentOffsetY - The vertical offset applied to center content in single-tile-row mode
33739
+ * @returns The point in canvas (logical) coordinate space
33740
+ *
33741
+ * @example
33742
+ * ```typescript
33743
+ * // Viewport coordinate (100, 50) with scroll at 500 and no offset
33744
+ * const canvasPoint = viewportToCanvas(100, 50, 500, 0, 0, 0);
33745
+ * // Returns: { x: 600, y: 50 }
33746
+ * ```
33747
+ */
33748
+ function viewportToCanvas(x, y, scrollLeft, contentOffset, scrollTop = 0, contentOffsetY = 0) {
33749
+ return {
33750
+ x: x + scrollLeft - contentOffset,
33751
+ y: y + scrollTop - contentOffsetY
33752
+ };
33753
+ }
33754
+ /**
33755
+ * Converts canvas-relative (logical) coordinates to viewport-relative coordinates.
33756
+ *
33757
+ * This function translates coordinates from the logical canvas space back to the
33758
+ * visible viewport space, accounting for scroll position and content offset.
33759
+ *
33760
+ * @param x - The x-coordinate in canvas (logical) space
33761
+ * @param y - The y-coordinate in canvas (logical) space
33762
+ * @param scrollLeft - The current horizontal scroll position in pixels
33763
+ * @param contentOffset - The horizontal offset applied to center content in single-tile mode
33764
+ * @param scrollTop - The current vertical scroll position in pixels
33765
+ * @param contentOffsetY - The vertical offset applied to center content in single-tile-row mode
33766
+ * @returns The point in viewport coordinate space
33767
+ *
33768
+ * @example
33769
+ * ```typescript
33770
+ * // Canvas coordinate (600, 50) with scroll at 500 and no offset
33771
+ * const viewportPoint = canvasToViewport(600, 50, 500, 0, 0, 0);
33772
+ * // Returns: { x: 100, y: 50 }
33773
+ * ```
33774
+ */
33775
+ function canvasToViewport(x, y, scrollLeft, contentOffset, scrollTop = 0, contentOffsetY = 0) {
33776
+ return {
33777
+ x: x - scrollLeft + contentOffset,
33778
+ y: y - scrollTop + contentOffsetY
33779
+ };
33780
+ }
33781
+ /**
33782
+ * Clamps a numeric value between a minimum and maximum bound.
33783
+ *
33784
+ * This is a utility function to constrain values within a valid range.
33785
+ *
33786
+ * @param value - The value to clamp
33787
+ * @param min - The minimum allowed value
33788
+ * @param max - The maximum allowed value
33789
+ * @returns The clamped value, guaranteed to be between min and max (inclusive)
33790
+ *
33791
+ * @example
33792
+ * ```typescript
33793
+ * clamp(15, 0, 10); // Returns: 10
33794
+ * clamp(-5, 0, 10); // Returns: 0
33795
+ * clamp(5, 0, 10); // Returns: 5
33796
+ * ```
33797
+ */
33798
+ function clamp(value, min, max) {
33799
+ return Math.max(min, Math.min(value, max));
33800
+ }
33801
+ //#endregion
33802
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/styles.js
33803
+ /**
33804
+ * CSS styles for the VCanvas component.
33805
+ *
33806
+ * These styles define the layout and positioning of:
33807
+ * - The host element (`:host`)
33808
+ * - The scroll container (`.scroll-container`)
33809
+ * - The content spacer (`.spacer`)
33810
+ * - The tile pool container (`.tile-pool`)
33811
+ * - Canvas elements
33812
+ * - The children container for slotted elements (`.children-container`)
33813
+ *
33814
+ * The styles use absolute positioning to create a virtualized scrolling experience
33815
+ * where tiles are rendered only when visible in the viewport.
33816
+ *
33817
+ * @example
33818
+ * ```typescript
33819
+ * import { vcanvasStyles } from '@clinth/vcanvas';
33820
+ *
33821
+ * // Styles are automatically applied when using the VCanvas component
33822
+ * // You typically don't need to use these directly unless extending the component
33823
+ * ```
33824
+ */
33825
+ const vcanvasStyles = i$7`
33826
+ :host {
33827
+ display: block;
33828
+ position: relative;
33829
+ overflow: hidden;
33830
+ }
33831
+
33832
+ .scroll-container {
33833
+ overflow-x: auto;
33834
+ overflow-y: clip;
33835
+ width: 100%;
33836
+ height: 100%;
33837
+ position: relative;
33838
+ touch-action: pan-x;
33839
+ scrollbar-width: var(--scrollbar-width, auto);
33840
+ scrollbar-color: var(--scrollbar-color, auto);
33841
+ }
33842
+
33843
+ .scroll-container.vertical {
33844
+ overflow-y: auto;
33845
+ touch-action: pan-x pan-y;
33846
+ }
33847
+
33848
+ .spacer {
33849
+ position: absolute;
33850
+ left: 0;
33851
+ top: 0;
33852
+ pointer-events: none;
33853
+ z-index: -1;
33854
+ }
33855
+
33856
+ .tile-pool {
33857
+ position: absolute;
33858
+ top: 0;
33859
+ left: 0;
33860
+ height: 100%;
33861
+ width: 100%;
33862
+ pointer-events: none;
33863
+ }
33864
+
33865
+ canvas {
33866
+ position: absolute;
33867
+ top: 0;
33868
+ pointer-events: auto;
33869
+ }
33870
+
33871
+ .children-container {
33872
+ position: absolute;
33873
+ top: 0;
33874
+ height: 100%;
33875
+ left: 0;
33876
+ }
33877
+
33878
+ @property --left-fade {
33879
+ syntax: "<length>";
33880
+ inherits: false;
33881
+ initial-value: 0;
33882
+ }
33883
+
33884
+ @property --right-fade {
33885
+ syntax: "<length>";
33886
+ inherits: false;
33887
+ initial-value: 0;
33888
+ }
33889
+
33890
+ @keyframes scrollfade {
33891
+ 0% {
33892
+ --left-fade: 0;
33893
+ }
33894
+ 10%,
33895
+ 100% {
33896
+ --left-fade: 3rem;
33897
+ }
33898
+ 0%,
33899
+ 90% {
33900
+ --right-fade: 3rem;
33901
+ }
33902
+ 100% {
33903
+ --right-fade: 0;
33904
+ }
33905
+ }
33906
+
33907
+ .scrollable {
33908
+ mask: linear-gradient(to right, #0000, #ffff var(--left-fade) calc(100% - var(--right-fade)), #0000);
33909
+ animation: scrollfade;
33910
+ animation-timeline: --scrollfade;
33911
+ scroll-timeline: --scrollfade x;
33912
+ }
33913
+
33914
+ `;
33915
+ //#endregion
33916
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/tile-calculator.js
33917
+ /**
33918
+ * Calculates the width of a tile based on viewport width and multiplier.
33919
+ *
33920
+ * @param viewportWidth - The width of the viewport in pixels
33921
+ * @param multiplier - The multiplier to apply (typically 0.25 to 1.0)
33922
+ * @returns The calculated tile width in pixels
33923
+ *
33924
+ * @example
33925
+ * ```typescript
33926
+ * getTileWidth(1000, 0.5); // Returns: 500
33927
+ * ```
33928
+ */
33929
+ function getTileWidth(viewportWidth, multiplier) {
33930
+ return viewportWidth * multiplier;
33931
+ }
33932
+ /**
33933
+ * Determines if the content fits within a single tile (single-tile mode).
33934
+ *
33935
+ * In single-tile mode, the content is centered in the viewport rather than
33936
+ * being scrollable. This also returns true when viewport width is 0 as a
33937
+ * defensive edge case.
33938
+ *
33939
+ * @param logicalWidth - The total logical width of the content
33940
+ * @param viewportWidth - The width of the viewport in pixels
33941
+ * @returns `true` if content fits in single tile, `false` otherwise
33942
+ *
33943
+ * @example
33944
+ * ```typescript
33945
+ * isSingleTileMode(500, 1000); // Returns: true
33946
+ * isSingleTileMode(1500, 1000); // Returns: false
33947
+ * ```
33948
+ */
33949
+ function isSingleTileMode(logicalWidth, viewportWidth) {
33950
+ if (viewportWidth === 0) return true;
33951
+ return logicalWidth <= viewportWidth;
33952
+ }
33953
+ /**
33954
+ * Calculates the horizontal offset to center content in single-tile mode.
33955
+ *
33956
+ * In multi-tile mode (when content exceeds viewport), this returns 0.
33957
+ * In single-tile mode, this calculates the offset needed to center the content.
33958
+ *
33959
+ * @param logicalWidth - The total logical width of the content
33960
+ * @param viewportWidth - The width of the viewport in pixels
33961
+ * @returns The horizontal offset in pixels, or 0 in multi-tile mode
33962
+ *
33963
+ * @example
33964
+ * ```typescript
33965
+ * // Content width 500 in viewport 1000: center it with 250px offset
33966
+ * getContentOffset(500, 1000); // Returns: 250
33967
+ *
33968
+ * // Content width 2000 in viewport 1000: no offset needed
33969
+ * getContentOffset(2000, 1000); // Returns: 0
33970
+ * ```
33971
+ */
33972
+ function getContentOffset(logicalWidth, viewportWidth) {
33973
+ if (logicalWidth < 0 || viewportWidth === 0) return 0;
33974
+ return isSingleTileMode(logicalWidth, viewportWidth) ? (viewportWidth - logicalWidth) / 2 : 0;
33975
+ }
33976
+ /**
33977
+ * Calculates the clipped width of a tile at a specific logical position.
33978
+ *
33979
+ * This accounts for:
33980
+ * - Single-tile mode (returns logicalWidth)
33981
+ * - Content boundaries (clips tiles extending beyond content)
33982
+ * - Overscroll area (if enabled)
33983
+ *
33984
+ * @param logicalX - The x-coordinate of the tile's left edge in logical space
33985
+ * @param tileWidth - The full width of the tile
33986
+ * @param logicalWidth - The total logical width of the content
33987
+ * @param viewportWidth - The width of the viewport in pixels
33988
+ * @param overscrollMultiplier - Multiplier for overscroll padding
33989
+ * @returns The clipped width of the tile (may be 0 if tile is outside valid area)
33990
+ *
33991
+ * @example
33992
+ * ```typescript
33993
+ * // Standard tile within bounds
33994
+ * getTileClippedWidth(0, 500, 2000, 1000, 1); // Returns: 500
33995
+ *
33996
+ * // Tile at end of content that needs clipping
33997
+ * getTileClippedWidth(2950, 500, 2000, 1000, 1); // Returns: 50
33998
+ * ```
33999
+ */
34000
+ function getTileClippedWidth(logicalX, tileWidth, logicalWidth, viewportWidth, overscrollMultiplier) {
34001
+ if (tileWidth === 0) return 0;
34002
+ if (logicalX < 0) return 0;
34003
+ const maxLogicalX = logicalWidth + viewportWidth * overscrollMultiplier;
34004
+ if (logicalX >= maxLogicalX) return 0;
34005
+ if (isSingleTileMode(logicalWidth, viewportWidth)) return logicalWidth;
34006
+ if (logicalX + tileWidth > maxLogicalX) return Math.max(0, maxLogicalX - logicalX);
34007
+ return tileWidth;
34008
+ }
34009
+ /**
34010
+ * Calculates the range of tiles needed to render the current viewport.
34011
+ *
34012
+ * This determines which tiles are visible based on scroll position and
34013
+ * includes buffer tiles for smooth scrolling. Respects maxPoolSize limits.
34014
+ *
34015
+ * @param scrollLeft - The current horizontal scroll position in pixels
34016
+ * @param viewportWidth - The width of the viewport in pixels
34017
+ * @param logicalWidth - The total logical width of the content
34018
+ * @param options - Configuration options for tile calculation
34019
+ * @returns Information about the tile range including indices and positions
34020
+ *
34021
+ * @example
34022
+ * ```typescript
34023
+ * const options = {
34024
+ * tileWidthMultiplier: 0.5,
34025
+ * tilesBuffer: 2,
34026
+ * maxPoolSize: 5,
34027
+ * // ... other options
34028
+ * };
34029
+ * const result = calculateTileRange(600, 1000, 10000, options);
34030
+ * // Returns: { firstTile: 1, lastTile: 3, tiles: [...] }
34031
+ * ```
34032
+ */
34033
+ function calculateTileRange(scrollLeft, viewportWidth, logicalWidth, options) {
34034
+ if (logicalWidth === 0) return {
34035
+ firstTile: 0,
34036
+ lastTile: 0,
34037
+ tiles: []
34038
+ };
34039
+ const tileWidth = getTileWidth(viewportWidth, options.tileWidthMultiplier);
34040
+ if (isSingleTileMode(logicalWidth, viewportWidth)) return {
34041
+ firstTile: 0,
34042
+ lastTile: 0,
34043
+ tiles: [{
34044
+ index: 0,
34045
+ logicalX: 0
34046
+ }]
34047
+ };
34048
+ const firstTile = Math.floor(scrollLeft / tileWidth);
34049
+ const lastTile = Math.floor((scrollLeft + viewportWidth - 1) / tileWidth);
34050
+ const maxTileIndex = Math.max(0, Math.ceil(logicalWidth / tileWidth) - 1);
34051
+ const tiles = [];
34052
+ const startI = firstTile;
34053
+ const endI = Math.min(lastTile + options.tilesBuffer, maxTileIndex);
34054
+ for (let i = startI; i <= endI; i++) {
34055
+ const logicalX = i * tileWidth;
34056
+ if (logicalX >= logicalWidth) continue;
34057
+ tiles.push({
34058
+ index: i,
34059
+ logicalX
34060
+ });
34061
+ if (tiles.length >= options.maxPoolSize) break;
34062
+ }
34063
+ return {
34064
+ firstTile: Math.max(0, firstTile),
34065
+ lastTile: tiles.length > 0 ? tiles[tiles.length - 1].index : 0,
34066
+ tiles
34067
+ };
34068
+ }
34069
+ /**
34070
+ * Calculates the height of a tile based on viewport height and multiplier.
34071
+ */
34072
+ function getTileHeight(viewportHeight, multiplier) {
34073
+ return viewportHeight * multiplier;
34074
+ }
34075
+ /**
34076
+ * Determines if content fits within a single tile row (no vertical virtualization needed).
34077
+ * Returns true when effectiveLogicalHeight fits within the viewport.
34078
+ */
34079
+ function isSingleTileModeY(effectiveLogicalHeight, viewportHeight) {
34080
+ if (viewportHeight === 0) return true;
34081
+ return effectiveLogicalHeight <= viewportHeight;
34082
+ }
34083
+ /**
34084
+ * Calculates the vertical offset to center content in single-tile-row mode.
34085
+ */
34086
+ function getContentOffsetY(effectiveLogicalHeight, viewportHeight) {
34087
+ if (effectiveLogicalHeight < 0 || viewportHeight === 0) return 0;
34088
+ return isSingleTileModeY(effectiveLogicalHeight, viewportHeight) ? (viewportHeight - effectiveLogicalHeight) / 2 : 0;
34089
+ }
34090
+ /**
34091
+ * Calculates the clipped height of a tile at a specific logical Y position.
34092
+ */
34093
+ function getTileClippedHeight(logicalY, tileHeight, effectiveLogicalHeight, viewportHeight, overscrollMultiplier) {
34094
+ if (tileHeight === 0) return 0;
34095
+ if (logicalY < 0) return 0;
34096
+ const maxLogicalY = effectiveLogicalHeight + viewportHeight * overscrollMultiplier;
34097
+ if (logicalY >= maxLogicalY) return 0;
34098
+ if (isSingleTileModeY(effectiveLogicalHeight, viewportHeight)) return effectiveLogicalHeight;
34099
+ if (logicalY + tileHeight > maxLogicalY) return Math.max(0, maxLogicalY - logicalY);
34100
+ return tileHeight;
34101
+ }
34102
+ /**
34103
+ * Calculates the range of tile rows needed to render the current viewport vertically.
34104
+ *
34105
+ * @param scrollTop - The current vertical scroll position in pixels
34106
+ * @param viewportHeight - The height of the viewport in pixels
34107
+ * @param effectiveLogicalHeight - The effective total logical height (logicalHeight || viewportHeight)
34108
+ * @param options - Configuration options for tile calculation
34109
+ */
34110
+ function calculateTileRowRange(scrollTop, viewportHeight, effectiveLogicalHeight, options) {
34111
+ if (effectiveLogicalHeight === 0) return {
34112
+ firstRow: 0,
34113
+ lastRow: 0,
34114
+ rows: []
34115
+ };
34116
+ const tileHeight = getTileHeight(viewportHeight, options.tileHeightMultiplier);
34117
+ if (isSingleTileModeY(effectiveLogicalHeight, viewportHeight)) return {
34118
+ firstRow: 0,
34119
+ lastRow: 0,
34120
+ rows: [{
34121
+ row: 0,
34122
+ logicalY: 0
34123
+ }]
34124
+ };
34125
+ const firstRow = Math.floor(scrollTop / tileHeight);
34126
+ const lastRow = Math.floor((scrollTop + viewportHeight - 1) / tileHeight);
34127
+ const maxRowIndex = Math.max(0, Math.ceil(effectiveLogicalHeight / tileHeight) - 1);
34128
+ const rows = [];
34129
+ const endI = Math.min(lastRow + options.tilesBuffer, maxRowIndex);
34130
+ for (let i = firstRow; i <= endI; i++) {
34131
+ const logicalY = i * tileHeight;
34132
+ if (logicalY >= effectiveLogicalHeight) continue;
34133
+ rows.push({
34134
+ row: i,
34135
+ logicalY
34136
+ });
34137
+ if (rows.length >= options.maxPoolSize) break;
34138
+ }
34139
+ return {
34140
+ firstRow: Math.max(0, firstRow),
34141
+ lastRow: rows.length > 0 ? rows[rows.length - 1].row : 0,
34142
+ rows
34143
+ };
34144
+ }
34145
+ //#endregion
34146
+ //#region node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/class-map.js
34147
+ /**
34148
+ * @license
34149
+ * Copyright 2018 Google LLC
34150
+ * SPDX-License-Identifier: BSD-3-Clause
34151
+ */ const e = e$3(class extends i$3 {
34152
+ constructor(t) {
34153
+ if (super(t), t.type !== t$2.ATTRIBUTE || "class" !== t.name || t.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.");
34154
+ }
34155
+ render(t) {
34156
+ return " " + Object.keys(t).filter((s) => t[s]).join(" ") + " ";
34157
+ }
34158
+ update(s, [i]) {
34159
+ if (void 0 === this.st) {
34160
+ this.st = /* @__PURE__ */ new Set(), void 0 !== s.strings && (this.nt = new Set(s.strings.join(" ").split(/\s/).filter((t) => "" !== t)));
34161
+ for (const t in i) i[t] && !this.nt?.has(t) && this.st.add(t);
34162
+ return this.render(i);
34163
+ }
34164
+ const r = s.element.classList;
34165
+ for (const t of this.st) t in i || (r.remove(t), this.st.delete(t));
34166
+ for (const t in i) {
34167
+ const s = !!i[t];
34168
+ s === this.st.has(t) || this.nt?.has(t) || (s ? (r.add(t), this.st.add(t)) : (r.remove(t), this.st.delete(t)));
34169
+ }
34170
+ return E;
34171
+ }
34172
+ });
34173
+ //#endregion
34174
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/util/debouncer.js
34175
+ /**
34176
+ * Creates a debounced version of a function that delays execution until after
34177
+ * a specified timeout has elapsed since the last call.
34178
+ *
34179
+ * Debouncing is useful for handling rapidly firing events (like scroll or resize)
34180
+ * by ensuring the function only executes once after the event stream settles.
34181
+ *
34182
+ * @template T - The type of the function to debounce
34183
+ * @param fn - The function to debounce
34184
+ * @param timeoutMs - The delay in milliseconds before executing the function
34185
+ * @returns A debounced version of the function with a `cancel` method
34186
+ *
34187
+ * @example
34188
+ * ```typescript
34189
+ * const debouncedLog = debouncer((msg: string) => {
34190
+ * console.log(msg);
34191
+ * }, 100);
34192
+ *
34193
+ * debouncedLog('Hello'); // Will log after 100ms
34194
+ * debouncedLog('World'); // Resets timer, will log 'World' after 100ms
34195
+ *
34196
+ * // Cancel pending execution
34197
+ * debouncedLog.cancel();
34198
+ * ```
34199
+ */
34200
+ function debouncer(fn, timeoutMs) {
34201
+ let timer = null;
34202
+ const debounced = (...args) => {
34203
+ if (timer) clearTimeout(timer);
34204
+ timer = setTimeout(() => {
34205
+ fn(...args);
34206
+ }, timeoutMs);
34207
+ };
34208
+ debounced.cancel = () => {
34209
+ if (timer) {
34210
+ clearTimeout(timer);
34211
+ timer = null;
34212
+ }
34213
+ };
34214
+ return debounced;
34215
+ }
34216
+ //#endregion
34217
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/util/draw.js
34218
+ /** Color palette for debug tile visualization */
34219
+ const TILE_COLORS = [
34220
+ `#FF6B6B`,
34221
+ `#4ECDC4`,
34222
+ `#45B7D1`,
34223
+ `#96CEB4`,
34224
+ `#FFEAA7`,
34225
+ `#DDA0DD`,
34226
+ `#98D8C8`,
34227
+ `#F7DC6F`,
34228
+ `#BB8FCE`,
34229
+ `#85C1E9`
34230
+ ];
34231
+ /**
34232
+ * Gets a color for a tile based on its index.
34233
+ * Colors cycle through the TILE_COLORS palette.
34234
+ *
34235
+ * @param index - The tile index
34236
+ * @returns A hex color string
34237
+ */
34238
+ function getTileColor(index) {
34239
+ return TILE_COLORS[index % TILE_COLORS.length];
34240
+ }
34241
+ /**
34242
+ * Draws debug visualization graphics on a tile canvas.
34243
+ *
34244
+ * This function renders diagnostic information useful for debugging tile
34245
+ * boundaries, positions, and sizing. It draws:
34246
+ * - A colored background
34247
+ * - Diagonal cross lines
34248
+ * - Center crosshair
34249
+ * - Border rectangle
34250
+ * - Text information (tile index, position, size, total width)
34251
+ *
34252
+ * @param tileIndex - The index of the tile being drawn
34253
+ * @param tilesTotal - The total number of tiles in the pool
34254
+ * @param widthTotal - The total logical width of the virtual canvas
34255
+ * @param ctx - The canvas 2D rendering context
34256
+ * @param region - The rectangular region of the tile in logical coordinates
34257
+ *
34258
+ * @example
34259
+ * ```typescript
34260
+ * // Enable debug drawing
34261
+ * vcanvas.debugDraw = true;
34262
+ *
34263
+ * // The debug graphics will be drawn on each tile automatically
34264
+ * ```
34265
+ */
34266
+ function drawDebugGraphic(tileIndex, tilesTotal, widthTotal, ctx, region) {
34267
+ ctx.fillStyle = `whitesmoke`;
34268
+ ctx.fillRect(region.x, region.y, region.width, region.height);
34269
+ ctx.fillStyle = getTileColor(tileIndex);
34270
+ ctx.strokeStyle = getTileColor(tileIndex);
34271
+ ctx.lineWidth = 2;
34272
+ ctx.beginPath();
34273
+ ctx.moveTo(region.x, region.y);
34274
+ ctx.lineTo(region.x + region.width, region.y + region.height);
34275
+ ctx.moveTo(region.x + region.width, region.y);
34276
+ ctx.lineTo(region.x, region.y + region.height);
34277
+ ctx.stroke();
34278
+ ctx.font = `24pt system-ui`;
34279
+ ctx.textBaseline = `top`;
34280
+ ctx.fillText(`#${tileIndex}/${tilesTotal}`, region.x + 20, region.y + 20);
34281
+ ctx.font = `18pt system-ui`;
34282
+ ctx.fillText(`Pos: ${Math.round(region.x)},${Math.round(region.y)}`, region.x + 20, region.y + 60);
34283
+ ctx.fillText(`Size: ${Math.round(region.width)}x${Math.round(region.height)}`, region.x + 20, region.y + 90);
34284
+ ctx.fillText(`VCanvas width: ${Math.round(widthTotal)}`, region.x + 20, region.y + 120);
34285
+ const centerX = region.x + region.width / 2;
34286
+ const centerY = region.y + region.height / 2;
34287
+ ctx.beginPath();
34288
+ ctx.moveTo(region.x, centerY);
34289
+ ctx.lineTo(region.x + region.width, centerY);
34290
+ ctx.moveTo(centerX, region.y);
34291
+ ctx.lineTo(centerX, region.y + region.height);
34292
+ ctx.stroke();
34293
+ ctx.strokeRect(region.x, region.y, region.width, region.height);
34294
+ }
34295
+ //#endregion
34296
+ //#region node_modules/.pnpm/@clinth+vcanvas@0.0.3/node_modules/@clinth/vcanvas/dist/vcanvas.js
34297
+ var __decorate = function(decorators, target, key, desc) {
34298
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34299
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34300
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34301
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
34302
+ };
34303
+ const tileKey = (col, row) => `${col},${row}`;
34304
+ const DEFAULT_TILE_WIDTH_MULTIPLIER = .5;
34305
+ const DEFAULT_TILE_HEIGHT_MULTIPLIER = .5;
34306
+ const DEFAULT_TILES_BUFFER = 2;
34307
+ const DEFAULT_OVERLAP_PERCENT = .01;
34308
+ const DEFAULT_OVERSCROLL_PAD_MULTIPLIER = 1;
34309
+ const DEFAULT_MAX_POOL_SIZE = 3;
34310
+ const DEFAULT_SCROLL_DEBOUNCE_MS = 100;
34311
+ let VCanvas = class VCanvas extends i$4 {
34312
+ _emitScrollEndEvent(userGesture) {
34313
+ const event = new CustomEvent(`scrollend-virtual`, {
34314
+ detail: {
34315
+ logicalScrollLeft: this._scrollLeft,
34316
+ logicalScrollTop: this._scrollTop,
34317
+ userGesture,
34318
+ containerScrollLeft: this._scrollContainer?.scrollLeft ?? 0,
34319
+ containerScrollTop: this._scrollContainer?.scrollTop ?? 0
34320
+ },
34321
+ bubbles: true,
34322
+ composed: true
34323
+ });
34324
+ this.dispatchEvent(event);
34325
+ }
34326
+ constructor() {
34327
+ super();
34328
+ /**
34329
+ * Enables detailed console logging of tile operations for debugging.
34330
+ *
34331
+ * When `true`, the component logs information about tile creation,
34332
+ * positioning, and rendering to the console. Useful for debugging
34333
+ * tile-related issues during development.
34334
+ *
34335
+ * @default false
34336
+ */
34337
+ this.debugTrace = false;
34338
+ this.debugDraw = false;
34339
+ /**
34340
+ * Enables visual hinting for scroll position at container edges.
34341
+ *
34342
+ * When `true`, applies the 'scrollable' class to the scroll container which
34343
+ * adds CSS scroll-driven fade animations at the left and right edges,
34344
+ * providing visual feedback about scroll availability.
34345
+ *
34346
+ * @default false
34347
+ */
34348
+ this.hinting = false;
34349
+ this._viewportWidth = 0;
34350
+ this._viewportHeight = 0;
34351
+ this._scrollLeft = 0;
34352
+ this._scrollTop = 0;
34353
+ this._logicalHeight = 0;
34354
+ this._tilePool = /* @__PURE__ */ new Map();
34355
+ this._visibleTiles = /* @__PURE__ */ new Set();
34356
+ this._pendingDraws = /* @__PURE__ */ new Map();
34357
+ this._scrollContainer = null;
34358
+ this._spacer = null;
34359
+ this._tilePoolEl = null;
34360
+ this._childrenContainerEl = null;
34361
+ this._resizeObserver = null;
34362
+ this._positionedChildren = /* @__PURE__ */ new Map();
34363
+ this._boundOnScroll = this._onScroll.bind(this);
34364
+ this._renderingOptions = {
34365
+ tileWidthMultiplier: DEFAULT_TILE_WIDTH_MULTIPLIER,
34366
+ tileHeightMultiplier: DEFAULT_TILE_HEIGHT_MULTIPLIER,
34367
+ tilesBuffer: DEFAULT_TILES_BUFFER,
34368
+ overlapPercent: DEFAULT_OVERLAP_PERCENT,
34369
+ overscrollPadMultiplier: DEFAULT_OVERSCROLL_PAD_MULTIPLIER,
34370
+ maxPoolSize: DEFAULT_MAX_POOL_SIZE,
34371
+ scrollDebounceMs: DEFAULT_SCROLL_DEBOUNCE_MS
34372
+ };
34373
+ this._dpr = window.devicePixelRatio || 1;
34374
+ this._logicalWidth = 0;
34375
+ this.logicalWidth = 0;
34376
+ this.logicalHeight = 0;
34377
+ this.drawCallback = null;
34378
+ this._scrollDebounce = debouncer(() => {
34379
+ this._requestRedrawAll(`scrollDebounce`);
34380
+ }, this._renderingOptions.scrollDebounceMs);
34381
+ this._scrollEndDebounce = debouncer(() => {
34382
+ this._emitScrollEndEvent(true);
34383
+ }, this._renderingOptions.scrollDebounceMs);
34384
+ this._resizeDebounce = debouncer(() => {
34385
+ this._onResize();
34386
+ }, this._renderingOptions.scrollDebounceMs);
34387
+ }
34388
+ static {
34389
+ this.styles = vcanvasStyles;
34390
+ }
34391
+ connectedCallback() {
34392
+ super.connectedCallback();
34393
+ this._setupResizeObserver();
34394
+ }
34395
+ disconnectedCallback() {
34396
+ super.disconnectedCallback();
34397
+ this._resizeObserver?.disconnect();
34398
+ this._resizeObserver = null;
34399
+ this._scrollEndDebounce.cancel();
34400
+ this._pendingDraws.forEach((ctrl) => ctrl.abort());
34401
+ this._tilePool.clear();
34402
+ this._scrollContainer?.removeEventListener(`scroll`, this._boundOnScroll);
34403
+ }
34404
+ firstUpdated() {
34405
+ const scrollContainer = this.shadowRoot?.querySelector(`.scroll-container`);
34406
+ this._scrollContainer = scrollContainer;
34407
+ this._spacer = this.shadowRoot?.querySelector(`.spacer`);
34408
+ this._tilePoolEl = this.shadowRoot?.querySelector(`.tile-pool`);
34409
+ this._childrenContainerEl = this.shadowRoot?.querySelector(`.children-container`);
34410
+ if (this._scrollContainer) this._scrollContainer.addEventListener(`scroll`, this._boundOnScroll);
34411
+ requestAnimationFrame(() => {
34412
+ this._updateViewportDimensions();
34413
+ this._updateSpacer();
34414
+ this._updateScrollContainerClass();
34415
+ this._recalculateTiles(`firstUpdated cb`);
34416
+ this._positionChildren(`firstUpdated cb`);
34417
+ });
34418
+ }
34419
+ /**
34420
+ * The total logical width of the virtual canvas content.
34421
+ *
34422
+ * This represents the full width of the scrollable content in logical units.
34423
+ * Setting this property triggers recalculation of tiles and updates the spacer
34424
+ * element that enables native scroll behavior.
34425
+ *
34426
+ * @example
34427
+ * ```typescript
34428
+ * // Create a virtual canvas 10,000 logical units wide
34429
+ * vcanvas.logicalWidth = 10000;
34430
+ * ```
34431
+ */
34432
+ set logicalWidth(value) {
34433
+ this._logicalWidth = value;
34434
+ this._updateSpacer();
34435
+ this._updateScrollContainerClass();
34436
+ if (this.hasUpdated) {
34437
+ this._updateTileWidths(`set logicalWidth`);
34438
+ this._recalculateTiles(`set logicalWidth`);
34439
+ }
34440
+ }
34441
+ get logicalWidth() {
34442
+ return this._logicalWidth;
34443
+ }
34444
+ /**
34445
+ * The total logical height of the virtual canvas content.
34446
+ *
34447
+ * When set to 0 (default), the component uses the actual viewport height,
34448
+ * meaning no vertical virtualization is applied. Set to a value greater than
34449
+ * the viewport height to enable vertical scrolling and tile-based virtualization.
34450
+ *
34451
+ * @example
34452
+ * ```typescript
34453
+ * // Create a canvas virtualized in both axes
34454
+ * vcanvas.logicalWidth = 10000;
34455
+ * vcanvas.logicalHeight = 5000;
34456
+ * ```
34457
+ */
34458
+ set logicalHeight(value) {
34459
+ this._logicalHeight = value;
34460
+ this._updateSpacer();
34461
+ this._updateScrollContainerClass();
34462
+ if (this.hasUpdated) this._recalculateTiles(`set logicalHeight`);
34463
+ }
34464
+ get logicalHeight() {
34465
+ return this._logicalHeight;
34466
+ }
34467
+ /** Effective logical width: uses viewport width when logicalWidth is 0 (no horizontal virtualization). */
34468
+ get effectiveLogicalWidth() {
34469
+ return this._logicalWidth || this._viewportWidth;
34470
+ }
34471
+ /** Effective logical height: uses viewport height when logicalHeight is 0 (no vertical virtualization). */
34472
+ get effectiveLogicalHeight() {
34473
+ return this._logicalHeight || this._viewportHeight;
34474
+ }
34475
+ _setupResizeObserver() {
34476
+ this._resizeObserver = new ResizeObserver(() => {
34477
+ this._resizeDebounce();
34478
+ });
34479
+ this._resizeObserver.observe(this);
34480
+ }
34481
+ _onResize() {
34482
+ const oldWidth = this._viewportWidth;
34483
+ const oldHeight = this._viewportHeight;
34484
+ this._updateViewportDimensions();
34485
+ const widthChanged = oldWidth !== this._viewportWidth;
34486
+ const heightChanged = oldHeight !== this._viewportHeight;
34487
+ if (widthChanged || heightChanged) {
34488
+ this._updateSpacer();
34489
+ this._updateScrollContainerClass();
34490
+ this._recalculateTiles(`onResize`);
34491
+ }
34492
+ }
34493
+ _updateTileWidths(reason) {
34494
+ const tileWidth = this._getTileWidth();
34495
+ for (const tile of this._tilePool.values()) {
34496
+ const clippedWidth = this._getTileClippedWidth(tile.logicalX, tileWidth);
34497
+ tile.canvas.width = clippedWidth * this._dpr;
34498
+ tile.canvas.style.width = `${clippedWidth}px`;
34499
+ tile.ctx.scale(this._dpr, this._dpr);
34500
+ }
34501
+ this._requestRedrawAll(`updateTileWidths (${reason})`);
34502
+ }
34503
+ _updateViewportDimensions() {
34504
+ const rect = this.getBoundingClientRect();
34505
+ this._viewportWidth = rect.width;
34506
+ this._viewportHeight = rect.height;
34507
+ }
34508
+ _onScroll() {
34509
+ if (!this._scrollContainer) return;
34510
+ const newScrollLeft = this._scrollContainer.scrollLeft;
34511
+ const newScrollTop = this._scrollContainer.scrollTop;
34512
+ if (newScrollLeft === this._scrollLeft && newScrollTop === this._scrollTop) return;
34513
+ this._scrollLeft = newScrollLeft;
34514
+ this._scrollTop = newScrollTop;
34515
+ this._recalculateTiles(`onScroll`);
34516
+ this._emitScrollEvent(true);
34517
+ this._scrollDebounce();
34518
+ this._scrollEndDebounce();
34519
+ }
34520
+ _updateSpacer() {
34521
+ if (!this._spacer) return;
34522
+ const noHorizontalScroll = isSingleTileMode(this.effectiveLogicalWidth, this._viewportWidth);
34523
+ const noVerticalScroll = isSingleTileModeY(this.effectiveLogicalHeight, this._viewportHeight);
34524
+ if (noHorizontalScroll && noVerticalScroll) this._spacer.style.display = `none`;
34525
+ else {
34526
+ this._spacer.style.display = `block`;
34527
+ this._spacer.style.width = `${this.effectiveLogicalWidth}px`;
34528
+ this._spacer.style.height = `${this.effectiveLogicalHeight}px`;
34529
+ }
34530
+ if (this._childrenContainerEl) {
34531
+ this._childrenContainerEl.style.width = `${this.effectiveLogicalWidth}px`;
34532
+ this._childrenContainerEl.style.height = `${this.effectiveLogicalHeight}px`;
34533
+ }
34534
+ }
34535
+ _updateScrollContainerClass() {
34536
+ if (!this._scrollContainer) return;
34537
+ const verticalScroll = this.effectiveLogicalHeight > this._viewportHeight;
34538
+ this._scrollContainer.classList.toggle(`vertical`, verticalScroll);
34539
+ }
34540
+ _getTileWidth() {
34541
+ return getTileWidth(this._viewportWidth, this._renderingOptions.tileWidthMultiplier);
34542
+ }
34543
+ _getTileHeight() {
34544
+ return getTileHeight(this._viewportHeight, this._renderingOptions.tileHeightMultiplier);
34545
+ }
34546
+ _getTileClippedWidth(logicalX, tileWidth) {
34547
+ return getTileClippedWidth(logicalX, tileWidth, this.effectiveLogicalWidth, this._viewportWidth, this._renderingOptions.overscrollPadMultiplier);
34548
+ }
34549
+ _getTileClippedHeight(logicalY, tileHeight) {
34550
+ return getTileClippedHeight(logicalY, tileHeight, this.effectiveLogicalHeight, this._viewportHeight, this._renderingOptions.overscrollPadMultiplier);
34551
+ }
34552
+ _calculateTileRange() {
34553
+ return calculateTileRange(this._scrollLeft, this._viewportWidth, this.effectiveLogicalWidth, this._renderingOptions);
34554
+ }
34555
+ _calculateTileRowRange() {
34556
+ return calculateTileRowRange(this._scrollTop, this._viewportHeight, this.effectiveLogicalHeight, this._renderingOptions);
34557
+ }
34558
+ _recalculateTiles(reason) {
34559
+ this._updateViewportDimensions();
34560
+ const { tiles } = this._calculateTileRange();
34561
+ const { rows } = this._calculateTileRowRange();
34562
+ const neededKeys = /* @__PURE__ */ new Set();
34563
+ for (const { index: col, logicalX } of tiles) for (const { row, logicalY } of rows) {
34564
+ neededKeys.add(tileKey(col, row));
34565
+ if (!this._tilePool.has(tileKey(col, row))) this._tilePool.set(tileKey(col, row), this._createTile(col, row, logicalX, logicalY));
34566
+ }
34567
+ const maxPoolSize = this._renderingOptions.maxPoolSize * Math.max(1, rows.length);
34568
+ const reuseCandidates = [...this._tilePool.keys()].filter((k) => !neededKeys.has(k));
34569
+ const missingKeys = [...neededKeys].filter((k) => !this._tilePool.has(k));
34570
+ const tilesToReuse = Math.min(reuseCandidates.length, missingKeys.length);
34571
+ for (let i = 0; i < tilesToReuse; i++) {
34572
+ const oldKey = reuseCandidates[i];
34573
+ const newKey = missingKeys[i];
34574
+ const tile = this._tilePool.get(oldKey);
34575
+ if (tile && newKey) {
34576
+ const [colStr, rowStr] = newKey.split(`,`);
34577
+ const col = Number(colStr);
34578
+ const row = Number(rowStr);
34579
+ this._tilePool.delete(oldKey);
34580
+ tile.col = col;
34581
+ tile.row = row;
34582
+ tile.logicalX = col * this._getTileWidth();
34583
+ tile.logicalY = row * this._getTileHeight();
34584
+ tile.visible = false;
34585
+ tile.canvas.dataset.tileKey = newKey;
34586
+ this._tilePool.set(newKey, tile);
34587
+ }
34588
+ }
34589
+ const keysAfterReuse = [...this._tilePool.keys()];
34590
+ if (keysAfterReuse.length > maxPoolSize) {
34591
+ const excessCount = keysAfterReuse.length - maxPoolSize;
34592
+ keysAfterReuse.filter((k) => !neededKeys.has(k)).slice(0, excessCount).forEach((k) => {
34593
+ const tile = this._tilePool.get(k);
34594
+ if (tile) {
34595
+ this._tilePool.delete(k);
34596
+ tile.canvas.remove();
34597
+ }
34598
+ });
34599
+ }
34600
+ this._updateTiles(`recalculateTiles (${reason})`);
34601
+ }
34602
+ _createTile(col, row, logicalX, logicalY) {
34603
+ const canvas = document.createElement(`canvas`);
34604
+ const key = tileKey(col, row);
34605
+ canvas.dataset.tileKey = key;
34606
+ const tileWidth = this._getTileWidth();
34607
+ const tileHeight = this._getTileHeight();
34608
+ const clippedWidth = this._getTileClippedWidth(logicalX, tileWidth);
34609
+ const clippedHeight = this._getTileClippedHeight(logicalY, tileHeight);
34610
+ const ctx = canvas.getContext(`2d`);
34611
+ if (!ctx) throw new Error(`Could not get canvas context`);
34612
+ if (this._viewportHeight === 0) this.#debug(`Warning: Creating tile ${key} with viewport height 0. The VCanvas component may not be properly sized or visible.`);
34613
+ canvas.width = clippedWidth * this._dpr;
34614
+ canvas.height = clippedHeight * this._dpr;
34615
+ canvas.style.width = `${clippedWidth}px`;
34616
+ canvas.style.height = `${clippedHeight}px`;
34617
+ ctx.scale(this._dpr, this._dpr);
34618
+ this.#debug(`Created tile ${key} at logicalX ${logicalX} logicalY ${logicalY}`);
34619
+ return {
34620
+ canvas,
34621
+ ctx,
34622
+ logicalX,
34623
+ logicalY,
34624
+ col,
34625
+ row,
34626
+ visible: false,
34627
+ isInDOM: false
34628
+ };
34629
+ }
34630
+ _updateTiles(reason) {
34631
+ const { tiles, firstTile, lastTile } = this._calculateTileRange();
34632
+ const { rows, firstRow, lastRow } = this._calculateTileRowRange();
34633
+ const tileWidth = this._getTileWidth();
34634
+ const tileHeight = this._getTileHeight();
34635
+ const isSingleTileX = isSingleTileMode(this.effectiveLogicalWidth, this._viewportWidth);
34636
+ const isSingleTileY = isSingleTileModeY(this.effectiveLogicalHeight, this._viewportHeight);
34637
+ const contentOffsetX = getContentOffset(this.effectiveLogicalWidth, this._viewportWidth);
34638
+ const contentOffsetY = getContentOffsetY(this.effectiveLogicalHeight, this._viewportHeight);
34639
+ const tilesBuffer = this._renderingOptions.tilesBuffer;
34640
+ const tilesRedrawn = [];
34641
+ for (const tile of this._tilePool.values()) tile.visible = false;
34642
+ this._visibleTiles.clear();
34643
+ for (const [key, tile] of this._tilePool) {
34644
+ const colVisible = isSingleTileX ? tile.col === 0 : tile.col >= firstTile - tilesBuffer && tile.col <= lastTile + tilesBuffer;
34645
+ const rowVisible = isSingleTileY ? tile.row === 0 : tile.row >= firstRow - tilesBuffer && tile.row <= lastRow + tilesBuffer;
34646
+ if (colVisible && rowVisible) {
34647
+ this._visibleTiles.add(key);
34648
+ const newLogicalX = tile.col * tileWidth;
34649
+ const newLogicalY = tile.row * tileHeight;
34650
+ const visualX = isSingleTileX ? contentOffsetX : newLogicalX;
34651
+ const visualY = isSingleTileY ? contentOffsetY : newLogicalY;
34652
+ const clippedWidth = this._getTileClippedWidth(newLogicalX, tileWidth);
34653
+ const clippedHeight = this._getTileClippedHeight(newLogicalY, tileHeight);
34654
+ if (!tile.visible || tile.logicalX !== newLogicalX || tile.logicalY !== newLogicalY || tile.canvas.style.left !== `${visualX}px` || tile.canvas.style.top !== `${visualY}px` || tile.canvas.width !== clippedWidth * this._dpr || tile.canvas.height !== clippedHeight * this._dpr) {
34655
+ tile.logicalX = newLogicalX;
34656
+ tile.logicalY = newLogicalY;
34657
+ tile.canvas.width = clippedWidth * this._dpr;
34658
+ tile.canvas.style.width = `${clippedWidth}px`;
34659
+ tile.canvas.height = clippedHeight * this._dpr;
34660
+ tile.canvas.style.height = `${clippedHeight}px`;
34661
+ tile.canvas.style.left = `${visualX}px`;
34662
+ tile.canvas.style.top = `${visualY}px`;
34663
+ tile.ctx.scale(this._dpr, this._dpr);
34664
+ if (!tile.isInDOM && this._tilePoolEl) {
34665
+ this._tilePoolEl.appendChild(tile.canvas);
34666
+ tile.isInDOM = true;
34667
+ }
34668
+ if (!tile.visible) {
34669
+ tilesRedrawn.push(key);
34670
+ this._requestTileDraw(`updateTiles(${reason})`, key);
34671
+ }
34672
+ }
34673
+ tile.visible = true;
34674
+ } else if (tile.visible) {
34675
+ tile.visible = false;
34676
+ tile.isInDOM = false;
34677
+ tile.canvas.remove();
34678
+ }
34679
+ }
34680
+ for (const { index: col, logicalX } of tiles) for (const { row, logicalY } of rows) {
34681
+ const key = tileKey(col, row);
34682
+ if (!this._tilePool.has(key) && this._tilePoolEl) {
34683
+ const newTile = this._createTile(col, row, logicalX, logicalY);
34684
+ const visualX = isSingleTileX ? contentOffsetX : logicalX;
34685
+ const visualY = isSingleTileY ? contentOffsetY : logicalY;
34686
+ newTile.canvas.style.left = `${visualX}px`;
34687
+ newTile.canvas.style.top = `${visualY}px`;
34688
+ newTile.visible = true;
34689
+ newTile.isInDOM = true;
34690
+ this._tilePoolEl.appendChild(newTile.canvas);
34691
+ this._tilePool.set(key, newTile);
34692
+ this._visibleTiles.add(key);
34693
+ tilesRedrawn.push(key);
34694
+ this._requestTileDraw(`updateTiles(${reason})`, key);
34695
+ }
34696
+ }
34697
+ return tilesRedrawn;
34698
+ }
34699
+ _requestRedrawAll(reason) {
34700
+ this.#debug(`Requesting _requestRedrawAll: ${reason} visible tiles: ${this._visibleTiles.size} pending draws: ${this._pendingDraws.size}`);
34701
+ this._pendingDraws.forEach((ctrl) => ctrl.abort());
34702
+ this._pendingDraws.clear();
34703
+ for (const tileIndex of this._visibleTiles) this._requestTileDraw(`requestRedrawAll(${reason})`, tileIndex);
34704
+ }
34705
+ #debug(msg) {
34706
+ if (!this.debugTrace) return;
34707
+ console.log(`[VCanvas]`, msg);
34708
+ }
34709
+ _requestTileDraw(_reason, tileKey, region) {
34710
+ const tile = this._tilePool.get(tileKey);
34711
+ if (!tile || !this.drawCallback) return;
34712
+ const abortCtrl = new AbortController();
34713
+ this._pendingDraws.set(tileKey, abortCtrl);
34714
+ const tileWidth = this._getTileWidth();
34715
+ const tileHeight = this._getTileHeight();
34716
+ const isSingleTileX = isSingleTileMode(this.effectiveLogicalWidth, this._viewportWidth);
34717
+ const isSingleTileY = isSingleTileModeY(this.effectiveLogicalHeight, this._viewportHeight);
34718
+ let drawRegion;
34719
+ if (region) drawRegion = region;
34720
+ else {
34721
+ const overlapX = tileWidth * this._renderingOptions.overlapPercent;
34722
+ const overlapY = tileHeight * this._renderingOptions.overlapPercent;
34723
+ drawRegion = {
34724
+ x: isSingleTileX ? 0 : tile.logicalX - overlapX,
34725
+ y: isSingleTileY ? 0 : tile.logicalY - overlapY,
34726
+ width: isSingleTileX ? this.effectiveLogicalWidth : tileWidth + overlapX * 2,
34727
+ height: isSingleTileY ? this.effectiveLogicalHeight : tileHeight + overlapY * 2
34728
+ };
34729
+ }
34730
+ tile.ctx.save();
34731
+ tile.ctx.translate(-tile.logicalX, -tile.logicalY);
34732
+ const localX = drawRegion.x - tile.logicalX;
34733
+ const localY = drawRegion.y - tile.logicalY;
34734
+ if (region) {
34735
+ tile.ctx.beginPath();
34736
+ tile.ctx.rect(localX, localY, drawRegion.width, drawRegion.height);
34737
+ tile.ctx.clip();
34738
+ tile.ctx.clearRect(localX, localY, drawRegion.width, drawRegion.height);
34739
+ } else tile.ctx.clearRect(0, 0, tile.canvas.width, tile.canvas.height);
34740
+ if (this.debugDraw) drawDebugGraphic(tile.col, this._tilePool.size, this.effectiveLogicalWidth, tile.ctx, drawRegion);
34741
+ try {
34742
+ this.drawCallback(tile.ctx, drawRegion, abortCtrl.signal);
34743
+ } finally {
34744
+ if (tile) tile.ctx.restore();
34745
+ this._pendingDraws.delete(tileKey);
34746
+ }
34747
+ }
34748
+ _emitScrollEvent(userGesture) {
34749
+ const event = new CustomEvent(`scroll-virtual`, {
34750
+ detail: {
34751
+ logicalScrollLeft: this._scrollLeft,
34752
+ logicalScrollTop: this._scrollTop,
34753
+ userGesture,
34754
+ containerScrollLeft: this._scrollContainer?.scrollLeft ?? 0,
34755
+ containerScrollTop: this._scrollContainer?.scrollTop ?? 0,
34756
+ viewportStartLogical: this._scrollLeft,
34757
+ viewportEndLogical: this._scrollLeft + this._viewportWidth,
34758
+ viewportStartLogicalY: this._scrollTop,
34759
+ viewportEndLogicalY: this._scrollTop + this._viewportHeight
34760
+ },
34761
+ bubbles: true,
34762
+ composed: true
34763
+ });
34764
+ this.dispatchEvent(event);
34765
+ }
34766
+ /**
34767
+ * Checks if any part of a rectangular region is currently visible in the viewport.
34768
+ *
34769
+ * This method is useful for determining whether content needs to be rendered
34770
+ * or updated based on its visibility status. The region is specified using
34771
+ * logical coordinates relative to the virtual canvas content.
34772
+ *
34773
+ * @param rect - The rectangular region to check, in logical coordinates
34774
+ * @returns true if any part of the region overlaps with the visible viewport
34775
+ *
34776
+ * @example
34777
+ * ```typescript
34778
+ * const region = { x: 1000, y: 0, width: 500, height: 1000 };
34779
+ * if (vcanvas.isRegionVisible(region)) {
34780
+ * // Region is at least partially visible, render it
34781
+ * }
34782
+ * ```
34783
+ */
34784
+ isRegionVisible(rect) {
34785
+ const viewportLeft = this._scrollLeft;
34786
+ const viewportRight = this._scrollLeft + this._viewportWidth;
34787
+ const xVisible = rect.x + rect.width > viewportLeft && rect.x < viewportRight;
34788
+ const viewportTop = this._scrollTop;
34789
+ const viewportBottom = this._scrollTop + this._viewportHeight;
34790
+ const yVisible = rect.y + rect.height > viewportTop && rect.y < viewportBottom;
34791
+ return xVisible && yVisible;
34792
+ }
34793
+ _updateScrollPosition(userGesture) {
34794
+ if (this._scrollContainer) {
34795
+ this._scrollContainer.scrollLeft = this._scrollLeft;
34796
+ this._scrollContainer.scrollTop = this._scrollTop;
34797
+ }
34798
+ this._recalculateTiles(`updateScrollPosition`);
34799
+ this._emitScrollEvent(userGesture);
34800
+ this._scrollDebounce();
34801
+ }
34802
+ get logicalScrollLeft() {
34803
+ return this._scrollLeft;
34804
+ }
34805
+ /**
34806
+ * The current logical scroll position.
34807
+ *
34808
+ * Setting this property smoothly scrolls the virtual canvas to the specified
34809
+ * position. The value is automatically clamped to valid bounds (0 to
34810
+ * logicalWidth - viewportWidth).
34811
+ *
34812
+ * @example
34813
+ * ```typescript
34814
+ * // Scroll to position 5000
34815
+ * vcanvas.logicalScrollLeft = 5000;
34816
+ *
34817
+ * // Get current scroll position
34818
+ * console.log(vcanvas.logicalScrollLeft);
34819
+ * ```
34820
+ */
34821
+ set logicalScrollLeft(value) {
34822
+ const oldValue = this._scrollLeft;
34823
+ const clampedValue = clamp(value, 0, Math.max(0, this.effectiveLogicalWidth - this._viewportWidth));
34824
+ if (clampedValue !== this._scrollLeft) {
34825
+ this._scrollLeft = clampedValue;
34826
+ this.requestUpdate(`logicalScrollLeft`, oldValue);
34827
+ this._updateScrollPosition(false);
34828
+ }
34829
+ }
34830
+ get logicalScrollTop() {
34831
+ return this._scrollTop;
34832
+ }
34833
+ set logicalScrollTop(value) {
34834
+ const oldValue = this._scrollTop;
34835
+ const clampedValue = clamp(value, 0, Math.max(0, this.effectiveLogicalHeight - this._viewportHeight));
34836
+ if (clampedValue !== this._scrollTop) {
34837
+ this._scrollTop = clampedValue;
34838
+ this.requestUpdate(`logicalScrollTop`, oldValue);
34839
+ this._updateScrollPosition(false);
34840
+ }
34841
+ }
34842
+ get containerScrollLeft() {
34843
+ return this._scrollContainer?.scrollLeft ?? 0;
34844
+ }
34845
+ get containerScrollTop() {
34846
+ return this._scrollContainer?.scrollTop ?? 0;
34847
+ }
34848
+ /**
34849
+ * The current viewport width in pixels.
34850
+ *
34851
+ * This value is automatically updated when the component is resized.
34852
+ * Read-only - use CSS to control the component's size.
34853
+ *
34854
+ * @example
34855
+ * ```typescript
34856
+ * const vw = vcanvas.viewportWidth;
34857
+ * ```
34858
+ */
34859
+ get viewportWidth() {
34860
+ return this._viewportWidth;
34861
+ }
34862
+ /**
34863
+ * The current viewport height in pixels.
34864
+ *
34865
+ * This value is automatically updated when the component is resized.
34866
+ * Read-only - use CSS to control the component's size.
34867
+ *
34868
+ * @example
34869
+ * ```typescript
34870
+ * const vh = vcanvas.viewportHeight;
34871
+ * ```
34872
+ */
34873
+ get viewportHeight() {
34874
+ return this._viewportHeight;
34875
+ }
34876
+ /**
34877
+ * Updates rendering options for the virtual canvas.
34878
+ *
34879
+ * Pass a partial options object to update specific settings. Any options
34880
+ * not provided retain their current values. After updating options,
34881
+ * tiles are recalculated to reflect the new configuration.
34882
+ *
34883
+ * @param options - Partial options object specifying which settings to change
34884
+ *
34885
+ * @example
34886
+ * ```typescript
34887
+ * // Reduce tile size and increase pool for smoother scrolling
34888
+ * vcanvas.setRenderingOptions({
34889
+ * tileWidthMultiplier: 0.25,
34890
+ * maxPoolSize: 8,
34891
+ * });
34892
+ *
34893
+ * // Restore defaults
34894
+ * vcanvas.setRenderingOptions({
34895
+ * tileWidthMultiplier: 0.5,
34896
+ * tilesBuffer: 2,
34897
+ * maxPoolSize: 5,
34898
+ * });
34899
+ * ```
34900
+ */
34901
+ setRenderingOptions(options) {
34902
+ this._renderingOptions = {
34903
+ ...this._renderingOptions,
34904
+ ...options
34905
+ };
34906
+ this._recalculateTiles(`setRenderingOptions`);
34907
+ }
34908
+ /**
34909
+ * Gets the current rendering options.
34910
+ *
34911
+ * Returns a copy of the current configuration options controlling tile
34912
+ * rendering, pool management, and scroll behavior.
34913
+ *
34914
+ * @returns The current VCanvasRenderingOptions configuration
34915
+ *
34916
+ * @example
34917
+ * ```typescript
34918
+ * const options = vcanvas.getRenderingOptions();
34919
+ * console.log('Current tile width multiplier:', options.tileWidthMultiplier);
34920
+ * ```
34921
+ */
34922
+ getRenderingOptions() {
34923
+ return this._renderingOptions;
34924
+ }
34925
+ /**
34926
+ * Forces a complete redraw of all visible tiles.
34927
+ *
34928
+ * Call this when the visual appearance of the content needs to change
34929
+ * but the logical dimensions remain the same. This aborts any pending
34930
+ * draw operations and triggers new ones for all visible tiles.
34931
+ *
34932
+ * @example
34933
+ * ```typescript
34934
+ * // Redraw after theme change
34935
+ * theme.addEventListener('change', () => {
34936
+ * vcanvas.invalidateAll();
34937
+ * });
34938
+ * ```
34939
+ */
34940
+ invalidateAll() {
34941
+ this._requestRedrawAll(`invalidateAll`);
34942
+ }
34943
+ /**
34944
+ * Forces redraw of tiles that intersect with the specified region.
34945
+ *
34946
+ * Use this for partial invalidation when only a portion of the content
34947
+ * has changed. More efficient than invalidateAll() for localized updates.
34948
+ *
34949
+ * @param x - The x-coordinate of the region's left edge (logical coordinates)
34950
+ * @param y - The y-coordinate of the region's top edge (logical coordinates)
34951
+ * @param width - The width of the region to invalidate
34952
+ * @param height - The height of the region to invalidate
34953
+ *
34954
+ * @example
34955
+ * ```typescript
34956
+ * // Redraw a specific area after updating content
34957
+ * vcanvas.invalidateRegion(1000, 0, 500, 1000);
34958
+ * ```
34959
+ */
34960
+ invalidateRegion(x, y, width, height) {
34961
+ this.#debug(`invalidateRegion: ${x},${y},${width},${height}`);
34962
+ const tileWidth = this._getTileWidth();
34963
+ const tileHeight = this._getTileHeight();
34964
+ const { firstTile, lastTile } = this._calculateTileRange();
34965
+ const { firstRow, lastRow } = this._calculateTileRowRange();
34966
+ const overlap = this._renderingOptions.overlapPercent;
34967
+ const startCol = Math.floor(x / tileWidth);
34968
+ const endCol = Math.ceil((x + width) / tileWidth);
34969
+ const startRow = Math.floor(y / tileHeight);
34970
+ const endRow = Math.ceil((y + height) / tileHeight);
34971
+ for (let col = Math.max(firstTile, startCol); col <= Math.min(lastTile, endCol); col++) for (let row = Math.max(firstRow, startRow); row <= Math.min(lastRow, endRow); row++) {
34972
+ const key = tileKey(col, row);
34973
+ if (this._visibleTiles.has(key)) {
34974
+ const tile = this._tilePool.get(key);
34975
+ if (tile) {
34976
+ const overlapX = tileWidth * overlap;
34977
+ const overlapY = tileHeight * overlap;
34978
+ const tileStartX = tile.logicalX - overlapX;
34979
+ const tileEndX = tile.logicalX + tileWidth + overlapX;
34980
+ const tileStartY = tile.logicalY - overlapY;
34981
+ const tileEndY = tile.logicalY + tileHeight + overlapY;
34982
+ const intersectX = Math.max(x, tileStartX);
34983
+ const intersectWidth = Math.min(x + width, tileEndX) - intersectX;
34984
+ const intersectY = Math.max(y, tileStartY);
34985
+ const intersectHeight = Math.min(y + height, tileEndY) - intersectY;
34986
+ if (intersectWidth > 0 && intersectHeight > 0) {
34987
+ const region = {
34988
+ x: intersectX,
34989
+ y: intersectY,
34990
+ width: intersectWidth,
34991
+ height: intersectHeight
34992
+ };
34993
+ this._requestTileDraw(`invalidateRegion`, key, region);
34994
+ }
34995
+ }
34996
+ }
34997
+ }
34998
+ }
34999
+ /**
35000
+ * Converts viewport-relative coordinates to canvas-relative (logical) coordinates.
35001
+ *
35002
+ * Viewport coordinates are relative to the visible area, while canvas coordinates
35003
+ * are in the logical coordinate system of the virtual canvas content.
35004
+ *
35005
+ * @param x - The x-coordinate in viewport space
35006
+ * @param y - The y-coordinate in viewport space
35007
+ * @returns The coordinates in canvas (logical) space
35008
+ *
35009
+ * @example
35010
+ * ```typescript
35011
+ * // Convert mouse position to logical coordinates for hit testing
35012
+ * vcanvas.addEventListener('click', (e) => {
35013
+ * const logical = vcanvas.convertFromViewportToCanvas(e.offsetX, e.offsetY);
35014
+ * console.log('Clicked at logical position:', logical.x);
35015
+ * });
35016
+ * ```
35017
+ */
35018
+ convertFromViewportToCanvas(x, y) {
35019
+ const contentOffsetX = getContentOffset(this.effectiveLogicalWidth, this._viewportWidth);
35020
+ const contentOffsetY = getContentOffsetY(this.effectiveLogicalHeight, this._viewportHeight);
35021
+ return viewportToCanvas(x, y, this._scrollLeft, contentOffsetX, this._scrollTop, contentOffsetY);
35022
+ }
35023
+ /**
35024
+ * Converts canvas-relative (logical) coordinates to viewport-relative coordinates.
35025
+ *
35026
+ * This is the inverse of `convertFromViewportToCanvas`. Use this to convert
35027
+ * logical positions back to viewport coordinates for positioning UI elements.
35028
+ *
35029
+ * @param x - The x-coordinate in logical space
35030
+ * @param y - The y-coordinate in logical space
35031
+ * @returns The coordinates in viewport space
35032
+ *
35033
+ * @example
35034
+ * ```typescript
35035
+ * // Convert logical marker position to viewport for tooltip positioning
35036
+ * const viewportPos = vcanvas.convertFromCanvasToViewport(markerX, 0);
35037
+ * tooltip.style.left = `${viewportPos.x}px`;
35038
+ * ```
35039
+ */
35040
+ convertFromCanvasToViewport(x, y) {
35041
+ const contentOffsetX = getContentOffset(this.effectiveLogicalWidth, this._viewportWidth);
35042
+ const contentOffsetY = getContentOffsetY(this.effectiveLogicalHeight, this._viewportHeight);
35043
+ return canvasToViewport(x, y, this._scrollLeft, contentOffsetX, this._scrollTop, contentOffsetY);
35044
+ }
35045
+ /**
35046
+ * Positions light DOM child elements matching the query within a logical coordinate range.
35047
+ *
35048
+ * This method allows you to position HTML elements (like tooltips, markers, or overlays)
35049
+ * at specific logical coordinates within the virtual canvas. The elements will scroll
35050
+ * with the canvas content, maintaining their logical position.
35051
+ *
35052
+ * @param query - A CSS selector string to match child elements
35053
+ * @param startX - The starting x-coordinate in logical space
35054
+ * @param endX - The ending x-coordinate in logical space (determines width)
35055
+ * @param startY - The starting y-coordinate in logical space (optional)
35056
+ * @param endY - The ending y-coordinate in logical space (optional)
35057
+ *
35058
+ * @example
35059
+ * ```typescript
35060
+ * // Position a marker element at logical position x=200 spanning 200px
35061
+ * vcanvas.positionChildRange('#marker', 200, 400);
35062
+ *
35063
+ * // Position multiple elements with a class
35064
+ * vcanvas.positionChildRange('.timeline-item', 0, 1000);
35065
+ * ```
35066
+ */
35067
+ positionChildRange(query, startX, endX, startY, endY) {
35068
+ if (Number.isNaN(startX) || Number.isNaN(endX)) {
35069
+ console.warn(`positionChildRange: Invalid startX or endX values: ${startX}, ${endX}`);
35070
+ return;
35071
+ }
35072
+ const children = Array.from(this.children).filter((child) => child.matches?.(query));
35073
+ const resolvedStartY = startY ?? 0;
35074
+ const resolvedEndY = endY ?? this.effectiveLogicalHeight;
35075
+ for (const child of children) this._positionedChildren.set(child, {
35076
+ startX,
35077
+ endX,
35078
+ startY: resolvedStartY,
35079
+ endY: resolvedEndY
35080
+ });
35081
+ this._positionChildren(`positionChildRange`);
35082
+ }
35083
+ /**
35084
+ * Manually triggers an update of child element positioning.
35085
+ *
35086
+ * This is useful when the viewport dimensions have changed outside the normal
35087
+ * update cycle and you need to reposition slotted children immediately.
35088
+ * Normally, child positioning is automatically updated during scroll and resize.
35089
+ *
35090
+ * @example
35091
+ * ```typescript
35092
+ * // Force immediate update after custom layout changes
35093
+ * vcanvas.manualChildPositioningUpdate();
35094
+ * ```
35095
+ */
35096
+ manualChildPositioningUpdate() {
35097
+ this._positionChildren(`manualChildPositioningUpdate`);
35098
+ }
35099
+ /**
35100
+ * Stops positioning child elements matching the query and resets their styles.
35101
+ *
35102
+ * This removes children from the positioning system and clears any inline
35103
+ * styles that were applied by `positionChildRange()`. The children remain
35104
+ * in the DOM but are no longer positioned by the virtual canvas.
35105
+ *
35106
+ * @param query - A CSS selector string to match child elements
35107
+ *
35108
+ * @example
35109
+ * ```typescript
35110
+ * // Stop positioning a specific child element
35111
+ * vcanvas.positionChildClear('#child-0');
35112
+ *
35113
+ * // Stop positioning all children with a specific class
35114
+ * vcanvas.positionChildClear('.my-element');
35115
+ * ```
35116
+ */
35117
+ positionChildClear(query) {
35118
+ for (const [child] of this._positionedChildren) if (child.matches?.(query)) {
35119
+ this._positionedChildren.delete(child);
35120
+ child.removeAttribute(`style`);
35121
+ }
35122
+ }
35123
+ _positionChildren(source) {
35124
+ this.#debug(`_positionChildren: ${source} positionedChildren: ${this._positionedChildren.size}`);
35125
+ if (!this.hasUpdated) return;
35126
+ if (!this._childrenContainerEl) return;
35127
+ for (const [child, config] of this._positionedChildren) {
35128
+ const width = config.endX - config.startX;
35129
+ const height = config.endY - config.startY;
35130
+ child.setAttribute(`style`, `position: absolute; left: ${config.startX}px; top: ${config.startY}px; width: ${width}px; height: ${height}px;`);
35131
+ }
35132
+ }
35133
+ render() {
35134
+ return b`
35135
+ <div class=${e({
35136
+ "scroll-container": true,
35137
+ "scrollable": this.hinting
35138
+ })}>
35139
+ <div class="spacer"></div>
35140
+ <div class="tile-pool"></div>
35141
+ <div class="children-container">
35142
+ <slot></slot>
35143
+ </div>
35144
+ </div>
35145
+ `;
35146
+ }
35147
+ };
35148
+ __decorate([n$2({ type: Boolean })], VCanvas.prototype, "hinting", void 0);
35149
+ __decorate([n$2()], VCanvas.prototype, "logicalWidth", null);
35150
+ __decorate([n$2()], VCanvas.prototype, "logicalHeight", null);
35151
+ __decorate([n$2({ type: Number })], VCanvas.prototype, "logicalScrollLeft", null);
35152
+ __decorate([n$2({ type: Number })], VCanvas.prototype, "logicalScrollTop", null);
35153
+ VCanvas = __decorate([t$4(`x-vcanvas`)], VCanvas);
33687
35154
  //#endregion
33688
35155
  //#region src/timeline/timeline-element.ts
33689
35156
  /** Reasonable maximum ppu to prevent infinite zoom-in */
@@ -34373,53 +35840,53 @@ let IxfxTimelineElement = class IxfxTimelineElement extends i$4 {
34373
35840
  }));
34374
35841
  }
34375
35842
  };
34376
- __decorate([n$2({ type: Array })], IxfxTimelineElement.prototype, "tracks", void 0);
34377
- __decorate([n$2({ type: Array })], IxfxTimelineElement.prototype, "events", void 0);
34378
- __decorate([n$2({ type: Number })], IxfxTimelineElement.prototype, "min", void 0);
34379
- __decorate([n$2({ type: Number })], IxfxTimelineElement.prototype, "max", void 0);
34380
- __decorate([n$2({
35843
+ __decorate$1([n$2({ type: Array })], IxfxTimelineElement.prototype, "tracks", void 0);
35844
+ __decorate$1([n$2({ type: Array })], IxfxTimelineElement.prototype, "events", void 0);
35845
+ __decorate$1([n$2({ type: Number })], IxfxTimelineElement.prototype, "min", void 0);
35846
+ __decorate$1([n$2({ type: Number })], IxfxTimelineElement.prototype, "max", void 0);
35847
+ __decorate$1([n$2({
34381
35848
  type: String,
34382
35849
  attribute: `track-height`
34383
35850
  })], IxfxTimelineElement.prototype, "trackHeight", void 0);
34384
- __decorate([n$2({
35851
+ __decorate$1([n$2({
34385
35852
  type: String,
34386
35853
  attribute: `user-scale`
34387
35854
  })], IxfxTimelineElement.prototype, "userScale", void 0);
34388
- __decorate([n$2({ type: Boolean })], IxfxTimelineElement.prototype, "reorderable", void 0);
34389
- __decorate([n$2({
35855
+ __decorate$1([n$2({ type: Boolean })], IxfxTimelineElement.prototype, "reorderable", void 0);
35856
+ __decorate$1([n$2({
34390
35857
  type: Boolean,
34391
35858
  attribute: `meta`
34392
35859
  })], IxfxTimelineElement.prototype, "metaEnabled", void 0);
34393
- __decorate([n$2({
35860
+ __decorate$1([n$2({
34394
35861
  type: Boolean,
34395
35862
  attribute: `alt-major-bg`
34396
35863
  })], IxfxTimelineElement.prototype, "altMajorBg", void 0);
34397
- __decorate([n$2({
35864
+ __decorate$1([n$2({
34398
35865
  type: Number,
34399
35866
  attribute: `default-track-height`
34400
35867
  })], IxfxTimelineElement.prototype, "defaultTrackHeight", void 0);
34401
- __decorate([n$2({
35868
+ __decorate$1([n$2({
34402
35869
  type: String,
34403
35870
  attribute: `grid-mode`
34404
35871
  })], IxfxTimelineElement.prototype, "gridMode", void 0);
34405
- __decorate([n$2({
35872
+ __decorate$1([n$2({
34406
35873
  type: Number,
34407
35874
  attribute: `minor-step`
34408
35875
  })], IxfxTimelineElement.prototype, "minorStep", void 0);
34409
- __decorate([n$2({ type: Object })], IxfxTimelineElement.prototype, "onDragging", void 0);
34410
- __decorate([r$1()], IxfxTimelineElement.prototype, "_ppu", void 0);
34411
- __decorate([r$1()], IxfxTimelineElement.prototype, "_viewRange", void 0);
34412
- __decorate([r$1()], IxfxTimelineElement.prototype, "_vViewRange", void 0);
34413
- __decorate([r$1()], IxfxTimelineElement.prototype, "_vScale", void 0);
34414
- __decorate([r$1()], IxfxTimelineElement.prototype, "_selectedIds", void 0);
34415
- __decorate([r$1()], IxfxTimelineElement.prototype, "_tickledId", void 0);
34416
- __decorate([r$1()], IxfxTimelineElement.prototype, "_drag", void 0);
34417
- __decorate([r$1()], IxfxTimelineElement.prototype, "_metaHeight", void 0);
34418
- __decorate([r$1()], IxfxTimelineElement.prototype, "_trackHeightOverrides", void 0);
34419
- __decorate([r$1()], IxfxTimelineElement.prototype, "_trackLayout", void 0);
34420
- __decorate([r$1()], IxfxTimelineElement.prototype, "_internalEvents", void 0);
34421
- __decorate([r$1()], IxfxTimelineElement.prototype, "_internalTracks", void 0);
34422
- IxfxTimelineElement = __decorate([safeCustomElement(`ixfx-timeline`)], IxfxTimelineElement);
35876
+ __decorate$1([n$2({ type: Object })], IxfxTimelineElement.prototype, "onDragging", void 0);
35877
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_ppu", void 0);
35878
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_viewRange", void 0);
35879
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_vViewRange", void 0);
35880
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_vScale", void 0);
35881
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_selectedIds", void 0);
35882
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_tickledId", void 0);
35883
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_drag", void 0);
35884
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_metaHeight", void 0);
35885
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_trackHeightOverrides", void 0);
35886
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_trackLayout", void 0);
35887
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_internalEvents", void 0);
35888
+ __decorate$1([r$1()], IxfxTimelineElement.prototype, "_internalTracks", void 0);
35889
+ IxfxTimelineElement = __decorate$1([safeCustomElement(`ixfx-timeline`)], IxfxTimelineElement);
34423
35890
  //#endregion
34424
35891
  //#region node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/keyed.js
34425
35892
  /**
@@ -34670,15 +36137,15 @@ let TransitoryLabelElement = class TransitoryLabelElement extends i$4 {
34670
36137
  `;
34671
36138
  }
34672
36139
  };
34673
- __decorate([n$2({ type: String })], TransitoryLabelElement.prototype, "text", void 0);
34674
- __decorate([n$2({ type: String })], TransitoryLabelElement.prototype, "effect", void 0);
34675
- __decorate([n$2({ type: Number })], TransitoryLabelElement.prototype, "duration", void 0);
34676
- __decorate([n$2({ type: String })], TransitoryLabelElement.prototype, "easing", void 0);
34677
- __decorate([r$1()], TransitoryLabelElement.prototype, "_currentText", void 0);
34678
- __decorate([r$1()], TransitoryLabelElement.prototype, "_outgoingText", void 0);
34679
- __decorate([r$1()], TransitoryLabelElement.prototype, "_activeEffect", void 0);
34680
- __decorate([r$1()], TransitoryLabelElement.prototype, "_transitionId", void 0);
34681
- TransitoryLabelElement = __decorate([safeCustomElement(`ixfx-transitory-label`)], TransitoryLabelElement);
36140
+ __decorate$1([n$2({ type: String })], TransitoryLabelElement.prototype, "text", void 0);
36141
+ __decorate$1([n$2({ type: String })], TransitoryLabelElement.prototype, "effect", void 0);
36142
+ __decorate$1([n$2({ type: Number })], TransitoryLabelElement.prototype, "duration", void 0);
36143
+ __decorate$1([n$2({ type: String })], TransitoryLabelElement.prototype, "easing", void 0);
36144
+ __decorate$1([r$1()], TransitoryLabelElement.prototype, "_currentText", void 0);
36145
+ __decorate$1([r$1()], TransitoryLabelElement.prototype, "_outgoingText", void 0);
36146
+ __decorate$1([r$1()], TransitoryLabelElement.prototype, "_activeEffect", void 0);
36147
+ __decorate$1([r$1()], TransitoryLabelElement.prototype, "_transitionId", void 0);
36148
+ TransitoryLabelElement = __decorate$1([safeCustomElement(`ixfx-transitory-label`)], TransitoryLabelElement);
34682
36149
  //#endregion
34683
36150
  //#region src/tree/tree-base.ts
34684
36151
  let TreeBaseElement = class TreeBaseElement extends i$4 {
@@ -35550,31 +37017,31 @@ let TreeBaseElement = class TreeBaseElement extends i$4 {
35550
37017
  ];
35551
37018
  }
35552
37019
  };
35553
- __decorate([n$2({ type: Object })], TreeBaseElement.prototype, "root", void 0);
35554
- __decorate([n$2({ attribute: false })], TreeBaseElement.prototype, "model", void 0);
35555
- __decorate([n$2({ attribute: false })], TreeBaseElement.prototype, "loadChildren", void 0);
35556
- __decorate([n$2({
37020
+ __decorate$1([n$2({ type: Object })], TreeBaseElement.prototype, "root", void 0);
37021
+ __decorate$1([n$2({ attribute: false })], TreeBaseElement.prototype, "model", void 0);
37022
+ __decorate$1([n$2({ attribute: false })], TreeBaseElement.prototype, "loadChildren", void 0);
37023
+ __decorate$1([n$2({
35557
37024
  reflect: true,
35558
37025
  attribute: `exclusivity`
35559
37026
  })], TreeBaseElement.prototype, "exclusivity", void 0);
35560
- __decorate([n$2({
37027
+ __decorate$1([n$2({
35561
37028
  reflect: true,
35562
37029
  attribute: `selection-filter`
35563
37030
  })], TreeBaseElement.prototype, "selectionFilter", void 0);
35564
- __decorate([n$2({
37031
+ __decorate$1([n$2({
35565
37032
  type: String,
35566
37033
  attribute: `interaction-mode`
35567
37034
  })], TreeBaseElement.prototype, "interactionMode", void 0);
35568
- __decorate([n$2({ attribute: false })], TreeBaseElement.prototype, "selectedNode", void 0);
35569
- __decorate([r$1()], TreeBaseElement.prototype, "_selectedNodes", void 0);
35570
- __decorate([n$2({ attribute: false })], TreeBaseElement.prototype, "filterPredicate", void 0);
35571
- __decorate([n$2({
37035
+ __decorate$1([n$2({ attribute: false })], TreeBaseElement.prototype, "selectedNode", void 0);
37036
+ __decorate$1([r$1()], TreeBaseElement.prototype, "_selectedNodes", void 0);
37037
+ __decorate$1([n$2({ attribute: false })], TreeBaseElement.prototype, "filterPredicate", void 0);
37038
+ __decorate$1([n$2({
35572
37039
  type: Boolean,
35573
37040
  attribute: `disable-keyboard-navigation`
35574
37041
  })], TreeBaseElement.prototype, "disableKeyboardNavigation", void 0);
35575
- __decorate([r$1()], TreeBaseElement.prototype, "_expandedKeys", void 0);
35576
- __decorate([r$1()], TreeBaseElement.prototype, "_focusedDepth", void 0);
35577
- TreeBaseElement = __decorate([safeCustomElement(`ixfx-tree-base`)], TreeBaseElement);
37042
+ __decorate$1([r$1()], TreeBaseElement.prototype, "_expandedKeys", void 0);
37043
+ __decorate$1([r$1()], TreeBaseElement.prototype, "_focusedDepth", void 0);
37044
+ TreeBaseElement = __decorate$1([safeCustomElement(`ixfx-tree-base`)], TreeBaseElement);
35578
37045
  //#endregion
35579
37046
  //#region src/tree/tree-controller.ts
35580
37047
  var TreeController = class {
@@ -35813,7 +37280,7 @@ let TreeListElement = class TreeListElement extends TreeBaseElement {
35813
37280
  `];
35814
37281
  }
35815
37282
  };
35816
- TreeListElement = __decorate([safeCustomElement(`ixfx-tree-list`)], TreeListElement);
37283
+ TreeListElement = __decorate$1([safeCustomElement(`ixfx-tree-list`)], TreeListElement);
35817
37284
  //#endregion
35818
37285
  //#region src/util/checkbox.ts
35819
37286
  function isCheckboxLike(el) {
@@ -35867,34 +37334,6 @@ function monitorIndeterminate(targetElOrQuery, watchedElsOrQueries) {
35867
37334
  };
35868
37335
  }
35869
37336
  //#endregion
35870
- //#region node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/directives/class-map.js
35871
- /**
35872
- * @license
35873
- * Copyright 2018 Google LLC
35874
- * SPDX-License-Identifier: BSD-3-Clause
35875
- */ const e = e$3(class extends i$3 {
35876
- constructor(t) {
35877
- if (super(t), t.type !== t$2.ATTRIBUTE || "class" !== t.name || t.strings?.length > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.");
35878
- }
35879
- render(t) {
35880
- return " " + Object.keys(t).filter((s) => t[s]).join(" ") + " ";
35881
- }
35882
- update(s, [i]) {
35883
- if (void 0 === this.st) {
35884
- this.st = /* @__PURE__ */ new Set(), void 0 !== s.strings && (this.nt = new Set(s.strings.join(" ").split(/\s/).filter((t) => "" !== t)));
35885
- for (const t in i) i[t] && !this.nt?.has(t) && this.st.add(t);
35886
- return this.render(i);
35887
- }
35888
- const r = s.element.classList;
35889
- for (const t of this.st) t in i || (r.remove(t), this.st.delete(t));
35890
- for (const t in i) {
35891
- const s = !!i[t];
35892
- s === this.st.has(t) || this.nt?.has(t) || (s ? (r.add(t), this.st.add(t)) : (r.remove(t), this.st.delete(t)));
35893
- }
35894
- return E;
35895
- }
35896
- });
35897
- //#endregion
35898
37337
  //#region src/util/is-numeric.ts
35899
37338
  function isNumeric(str) {
35900
37339
  if (typeof str === `number`) return true;
@@ -35964,11 +37403,11 @@ let TooltipElement = class TooltipElement extends i$4 {
35964
37403
  return this;
35965
37404
  }
35966
37405
  };
35967
- __decorate([n$2({ type: String })], TooltipElement.prototype, "orientation", void 0);
35968
- __decorate([n$2({ type: String })], TooltipElement.prototype, "anchor", void 0);
35969
- __decorate([n$2()], TooltipElement.prototype, "value", void 0);
35970
- __decorate([n$2({ type: String })], TooltipElement.prototype, "icon", void 0);
35971
- TooltipElement = _TooltipElement = __decorate([safeCustomElement(`ixfx-tooltip`)], TooltipElement);
37406
+ __decorate$1([n$2({ type: String })], TooltipElement.prototype, "orientation", void 0);
37407
+ __decorate$1([n$2({ type: String })], TooltipElement.prototype, "anchor", void 0);
37408
+ __decorate$1([n$2()], TooltipElement.prototype, "value", void 0);
37409
+ __decorate$1([n$2({ type: String })], TooltipElement.prototype, "icon", void 0);
37410
+ TooltipElement = _TooltipElement = __decorate$1([safeCustomElement(`ixfx-tooltip`)], TooltipElement);
35972
37411
  //#endregion
35973
37412
  //#region src/vertical-list/vertical-list.ts
35974
37413
  const ITEM_SELECTOR = `li, [data-list-item]`;
@@ -35983,6 +37422,7 @@ let VerticalListElement = class VerticalListElement extends i$4 {
35983
37422
  this._selectedItems = /* @__PURE__ */ new Set();
35984
37423
  this._searchVisible = false;
35985
37424
  this._searchQuery = ``;
37425
+ this.#customWrappers = /* @__PURE__ */ new Map();
35986
37426
  this.tickled = new TickledController(this, {
35987
37427
  getItems: () => this._getVisibleItems().map((el) => ({
35988
37428
  id: el,
@@ -36092,6 +37532,7 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36092
37532
  }
36093
37533
  #search;
36094
37534
  #selectionAnchor;
37535
+ #customWrappers;
36095
37536
  connectedCallback() {
36096
37537
  super.connectedCallback();
36097
37538
  if (!this.hasAttribute(`tabindex`)) this.tabIndex = 0;
@@ -36124,7 +37565,19 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36124
37565
  super.updated(changed);
36125
37566
  if (changed.has(`interactionMode`)) {
36126
37567
  this.#selectionAnchor = void 0;
36127
- this._clearSelection();
37568
+ const previousSelected = this._selectedItems;
37569
+ const savedWrappers = changed.get(`interactionMode`) === `checked` ? new Map(this.#customWrappers) : null;
37570
+ this._syncCheckboxes();
37571
+ if (previousSelected.size > 0) {
37572
+ let remapped;
37573
+ if (savedWrappers && savedWrappers.size > 0) remapped = new Set([...previousSelected].map((el) => savedWrappers.get(el) ?? el));
37574
+ else if (this.#customWrappers.size > 0) {
37575
+ const innerToWrapper = new Map([...this.#customWrappers].map(([w, i]) => [i, w]));
37576
+ remapped = new Set([...previousSelected].map((el) => innerToWrapper.get(el) ?? el));
37577
+ } else remapped = new Set(previousSelected);
37578
+ this._selectedItems = remapped;
37579
+ }
37580
+ this._syncItemStates();
36128
37581
  }
36129
37582
  }
36130
37583
  /** The most recently selected item, or `undefined` if nothing is selected. */
@@ -36147,6 +37600,7 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36147
37600
  item.remove();
36148
37601
  }
36149
37602
  clearItems() {
37603
+ this.#customWrappers.clear();
36150
37604
  this.replaceChildren();
36151
37605
  this.#selectionAnchor = void 0;
36152
37606
  this._selectedItems = /* @__PURE__ */ new Set();
@@ -36304,6 +37758,29 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36304
37758
  }
36305
37759
  _syncCheckboxes() {
36306
37760
  const inCheckedMode = this.interactionMode === `checked`;
37761
+ if (inCheckedMode) for (const inner of Array.from(this.children)) {
37762
+ if (!inner.hasAttribute(`data-list-item`)) continue;
37763
+ if (inner.parentElement !== this) continue;
37764
+ const wrapper = document.createElement(`li`);
37765
+ wrapper.className = `ixfx-custom-row`;
37766
+ const key = inner.getAttribute(`data-key`);
37767
+ const label = inner.getAttribute(`data-search-label`);
37768
+ if (key !== null) wrapper.setAttribute(`data-key`, key);
37769
+ if (label !== null) wrapper.setAttribute(`data-search-label`, label);
37770
+ inner.removeAttribute(`data-list-item`);
37771
+ this.insertBefore(wrapper, inner);
37772
+ wrapper.appendChild(inner);
37773
+ this.#customWrappers.set(wrapper, inner);
37774
+ }
37775
+ else {
37776
+ for (const [wrapper, inner] of this.#customWrappers) {
37777
+ if (wrapper.parentElement !== this) continue;
37778
+ inner.setAttribute(`data-list-item`, ``);
37779
+ this.insertBefore(inner, wrapper);
37780
+ wrapper.remove();
37781
+ }
37782
+ this.#customWrappers.clear();
37783
+ }
36307
37784
  for (const el of this.querySelectorAll(`li`)) {
36308
37785
  let cb = el.querySelector(`input.ixfx-list-checkbox`);
36309
37786
  if (inCheckedMode) {
@@ -36445,17 +37922,6 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36445
37922
  outline: 1px solid var(--accent, #60a5fa);
36446
37923
  }
36447
37924
 
36448
- /* checked mode: left-border indicator for custom shadow-DOM items (no checkbox injection possible) */
36449
- :host([interaction-mode="checked"]) ::slotted([data-list-item]) {
36450
- border-left: 3px solid transparent;
36451
- transition: background var(--transition, 0.1s ease-out),
36452
- border-color var(--transition, 0.1s ease-out);
36453
- }
36454
-
36455
- :host([interaction-mode="checked"]) ::slotted([data-list-item][data-checked]) {
36456
- border-left: 3px solid var(--accent, #60a5fa);
36457
- }
36458
-
36459
37925
  .search-overlay {
36460
37926
  position: absolute;
36461
37927
  top: 8px;
@@ -36524,20 +37990,20 @@ let VerticalListElement = class VerticalListElement extends i$4 {
36524
37990
  `;
36525
37991
  }
36526
37992
  };
36527
- __decorate([n$2({
37993
+ __decorate$1([n$2({
36528
37994
  type: String,
36529
37995
  attribute: `selection-mode`
36530
37996
  })], VerticalListElement.prototype, "selectionMode", void 0);
36531
- __decorate([n$2({
37997
+ __decorate$1([n$2({
36532
37998
  type: String,
36533
37999
  attribute: `interaction-mode`
36534
38000
  })], VerticalListElement.prototype, "interactionMode", void 0);
36535
- __decorate([n$2({ attribute: false })], VerticalListElement.prototype, "filterPredicate", void 0);
36536
- __decorate([r$1()], VerticalListElement.prototype, "_selectedItems", void 0);
36537
- __decorate([r$1()], VerticalListElement.prototype, "_searchVisible", void 0);
36538
- __decorate([r$1()], VerticalListElement.prototype, "_searchQuery", void 0);
36539
- __decorate([e$4(`.search-input`)], VerticalListElement.prototype, "_searchInputEl", void 0);
36540
- VerticalListElement = __decorate([safeCustomElement(`ixfx-vertical-list`)], VerticalListElement);
38001
+ __decorate$1([n$2({ attribute: false })], VerticalListElement.prototype, "filterPredicate", void 0);
38002
+ __decorate$1([r$1()], VerticalListElement.prototype, "_selectedItems", void 0);
38003
+ __decorate$1([r$1()], VerticalListElement.prototype, "_searchVisible", void 0);
38004
+ __decorate$1([r$1()], VerticalListElement.prototype, "_searchQuery", void 0);
38005
+ __decorate$1([e$4(`.search-input`)], VerticalListElement.prototype, "_searchInputEl", void 0);
38006
+ VerticalListElement = __decorate$1([safeCustomElement(`ixfx-vertical-list`)], VerticalListElement);
36541
38007
  //#endregion
36542
38008
  //#region src/xy-pad.ts
36543
38009
  /**
@@ -36918,53 +38384,53 @@ let XyPad = class XyPad extends i$4 {
36918
38384
  `;
36919
38385
  }
36920
38386
  };
36921
- __decorate([n$2({ type: Number })], XyPad.prototype, "xMin", void 0);
36922
- __decorate([n$2({ type: Number })], XyPad.prototype, "xMax", void 0);
36923
- __decorate([n$2({ type: Number })], XyPad.prototype, "x", void 0);
36924
- __decorate([n$2({ type: Number })], XyPad.prototype, "yMin", void 0);
36925
- __decorate([n$2({ type: Number })], XyPad.prototype, "yMax", void 0);
36926
- __decorate([n$2({ type: Number })], XyPad.prototype, "y", void 0);
36927
- __decorate([n$2({ type: String })], XyPad.prototype, "xScale", void 0);
36928
- __decorate([n$2({ type: String })], XyPad.prototype, "yScale", void 0);
36929
- __decorate([n$2({
38387
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "xMin", void 0);
38388
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "xMax", void 0);
38389
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "x", void 0);
38390
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "yMin", void 0);
38391
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "yMax", void 0);
38392
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "y", void 0);
38393
+ __decorate$1([n$2({ type: String })], XyPad.prototype, "xScale", void 0);
38394
+ __decorate$1([n$2({ type: String })], XyPad.prototype, "yScale", void 0);
38395
+ __decorate$1([n$2({
36930
38396
  type: Number,
36931
38397
  attribute: `x-snap-step`
36932
38398
  })], XyPad.prototype, "xSnapStep", void 0);
36933
- __decorate([n$2({
38399
+ __decorate$1([n$2({
36934
38400
  type: Number,
36935
38401
  attribute: `y-snap-step`
36936
38402
  })], XyPad.prototype, "ySnapStep", void 0);
36937
- __decorate([n$2({ type: String })], XyPad.prototype, "xLabel", void 0);
36938
- __decorate([n$2({ type: String })], XyPad.prototype, "yLabel", void 0);
36939
- __decorate([n$2({
38403
+ __decorate$1([n$2({ type: String })], XyPad.prototype, "xLabel", void 0);
38404
+ __decorate$1([n$2({ type: String })], XyPad.prototype, "yLabel", void 0);
38405
+ __decorate$1([n$2({
36940
38406
  type: Boolean,
36941
38407
  reflect: true,
36942
38408
  attribute: `show-crosshairs`
36943
38409
  })], XyPad.prototype, "showCrosshairs", void 0);
36944
- __decorate([n$2({
38410
+ __decorate$1([n$2({
36945
38411
  type: Boolean,
36946
38412
  reflect: true,
36947
38413
  attribute: `show-grid`
36948
38414
  })], XyPad.prototype, "showGrid", void 0);
36949
- __decorate([n$2({
38415
+ __decorate$1([n$2({
36950
38416
  type: Boolean,
36951
38417
  reflect: true,
36952
38418
  attribute: `hide-cursor`
36953
38419
  })], XyPad.prototype, "hideCursor", void 0);
36954
- __decorate([n$2({
38420
+ __decorate$1([n$2({
36955
38421
  type: Boolean,
36956
38422
  reflect: true
36957
38423
  })], XyPad.prototype, "disabled", void 0);
36958
- __decorate([n$2({ type: Number })], XyPad.prototype, "stops", void 0);
36959
- __decorate([n$2({
38424
+ __decorate$1([n$2({ type: Number })], XyPad.prototype, "stops", void 0);
38425
+ __decorate$1([n$2({
36960
38426
  type: Number,
36961
38427
  attribute: `stops-x`
36962
38428
  })], XyPad.prototype, "stopsX", void 0);
36963
- __decorate([n$2({
38429
+ __decorate$1([n$2({
36964
38430
  type: Number,
36965
38431
  attribute: `stops-y`
36966
38432
  })], XyPad.prototype, "stopsY", void 0);
36967
- XyPad = __decorate([safeCustomElement(`ixfx-xy-pad`)], XyPad);
38433
+ XyPad = __decorate$1([safeCustomElement(`ixfx-xy-pad`)], XyPad);
36968
38434
  //#endregion
36969
38435
  //#region src/index.ts
36970
38436
  function init() {