@ixfx/components 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/bundle/index.d.ts +155 -29
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +1116 -310
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +2 -3
  6. package/dist/ac-text.d.ts.map +1 -1
  7. package/dist/ac-text.js +4 -4
  8. package/dist/ac-text.js.map +1 -1
  9. package/dist/{button-DgKUzE5o.js → button-B9ztaKyl.js} +4 -4
  10. package/dist/button-B9ztaKyl.js.map +1 -0
  11. package/dist/button.d.ts +3 -4
  12. package/dist/button.d.ts.map +1 -1
  13. package/dist/button.js +1 -1
  14. package/dist/checkbox.d.ts +1 -2
  15. package/dist/checkbox.d.ts.map +1 -1
  16. package/dist/checkbox.js +3 -3
  17. package/dist/checkbox.js.map +1 -1
  18. package/dist/colour-C3MQIjFJ-BJV-QC-3.js.map +1 -1
  19. package/dist/{colour-picker-Bw-AZoWx.js → colour-picker-BNqDz4wK.js} +5 -5
  20. package/dist/colour-picker-BNqDz4wK.js.map +1 -0
  21. package/dist/colour-picker.d.ts +2 -2
  22. package/dist/colour-picker.js +1 -1
  23. package/dist/crumbs.d.ts +2 -3
  24. package/dist/crumbs.d.ts.map +1 -1
  25. package/dist/crumbs.js +4 -4
  26. package/dist/crumbs.js.map +1 -1
  27. package/dist/data-display.d.ts +1 -2
  28. package/dist/data-display.d.ts.map +1 -1
  29. package/dist/data-display.js +2 -3
  30. package/dist/data-display.js.map +1 -1
  31. package/dist/decorate-O4m1U4l3.js +25 -0
  32. package/dist/decorate-O4m1U4l3.js.map +1 -0
  33. package/dist/defaults-FEZaGiYZ.js.map +1 -1
  34. package/dist/dist-By5URG0Y.js.map +1 -1
  35. package/dist/dist-D7kJgnSE.js.map +1 -1
  36. package/dist/editable-label.d.ts.map +1 -1
  37. package/dist/editable-label.js +3 -3
  38. package/dist/editable-label.js.map +1 -1
  39. package/dist/{hex-editor-Gib1Grg2.d.ts → hex-editor-2_s0Ua5t.d.ts} +3 -4
  40. package/dist/hex-editor-2_s0Ua5t.d.ts.map +1 -0
  41. package/dist/{hex-editor-Wd6ZtZA2.js → hex-editor-gH3mteMr.js} +4 -4
  42. package/dist/hex-editor-gH3mteMr.js.map +1 -0
  43. package/dist/hex.d.ts +1 -1
  44. package/dist/hex.js +1 -1
  45. package/dist/highlight-CAjwQ4GE.js.map +1 -1
  46. package/dist/{icon-BR5aTIiP.js → icon-CYACf6o8.js} +4 -4
  47. package/dist/icon-CYACf6o8.js.map +1 -0
  48. package/dist/{icon-DQKdfR7U.d.ts → icon-CeTDJhC7.d.ts} +3 -4
  49. package/dist/icon-CeTDJhC7.d.ts.map +1 -0
  50. package/dist/icons.d.ts +2 -2
  51. package/dist/icons.js +1 -1
  52. package/dist/icons.js.map +1 -1
  53. package/dist/{incr-search-BjCNClnC.js → incr-search-BZawvrfl.js} +109 -109
  54. package/dist/incr-search-BZawvrfl.js.map +1 -0
  55. package/dist/incr-search.d.ts +2 -2
  56. package/dist/incr-search.js +1 -1
  57. package/dist/index-B1hNR7Z9.d.ts.map +1 -1
  58. package/dist/{index-CpbBI3n7.d.ts → index-CnL9krsH.d.ts} +3 -4
  59. package/dist/index-CnL9krsH.d.ts.map +1 -0
  60. package/dist/{index-CPVcTTXo.d.ts → index-CwGkb9s1.d.ts} +6 -7
  61. package/dist/index-CwGkb9s1.d.ts.map +1 -0
  62. package/dist/{index-C5dK8RZa.d.ts → index-DrQjA8Gs.d.ts} +3 -4
  63. package/dist/index-DrQjA8Gs.d.ts.map +1 -0
  64. package/dist/{index-C9iBN908.d.ts → index-V2cJorlA.d.ts} +29 -29
  65. package/dist/index-V2cJorlA.d.ts.map +1 -0
  66. package/dist/{index-CQxanqXF.d.ts → index-kY5gxbkI.d.ts} +16 -17
  67. package/dist/index-kY5gxbkI.d.ts.map +1 -0
  68. package/dist/index.d.ts +144 -26
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +813 -23
  71. package/dist/index.js.map +1 -1
  72. package/dist/keyboard-De_vOHLg.js.map +1 -1
  73. package/dist/{labelled-input-base-DS6-6C0r.js → labelled-input-base-BvgH7ldm.js} +2 -2
  74. package/dist/{labelled-input-base-DS6-6C0r.js.map → labelled-input-base-BvgH7ldm.js.map} +1 -1
  75. package/dist/{labelled-input-base-DnRh4reU.d.ts → labelled-input-base-D-Y7agky.d.ts} +2 -3
  76. package/dist/labelled-input-base-D-Y7agky.d.ts.map +1 -0
  77. package/dist/labelled-radial-input.d.ts +4 -5
  78. package/dist/labelled-radial-input.d.ts.map +1 -1
  79. package/dist/labelled-radial-input.js +5 -5
  80. package/dist/labelled-radial-input.js.map +1 -1
  81. package/dist/labelled-range-input.d.ts +1 -1
  82. package/dist/labelled-range-input.js +4 -4
  83. package/dist/labelled-range-input.js.map +1 -1
  84. package/dist/led.d.ts +2 -3
  85. package/dist/led.d.ts.map +1 -1
  86. package/dist/led.js +3 -3
  87. package/dist/led.js.map +1 -1
  88. package/dist/{menu-BV6UFx_z.js → menu-C3eANB5M.js} +12 -12
  89. package/dist/menu-C3eANB5M.js.map +1 -0
  90. package/dist/{menu-item-DEzL_Yjk.js → menu-item-6IU5weHi.js} +7 -7
  91. package/dist/menu-item-6IU5weHi.js.map +1 -0
  92. package/dist/{menu-item-Cikacp4F.d.ts → menu-item-ClQF2DKN.d.ts} +7 -8
  93. package/dist/menu-item-ClQF2DKN.d.ts.map +1 -0
  94. package/dist/menu.d.ts +3 -3
  95. package/dist/menu.js +2 -2
  96. package/dist/miller.d.ts +2 -3
  97. package/dist/miller.d.ts.map +1 -1
  98. package/dist/miller.js +4 -4
  99. package/dist/miller.js.map +1 -1
  100. package/dist/narrowed-text.d.ts +2 -3
  101. package/dist/narrowed-text.d.ts.map +1 -1
  102. package/dist/narrowed-text.js +4 -4
  103. package/dist/narrowed-text.js.map +1 -1
  104. package/dist/panel.d.ts +2 -3
  105. package/dist/panel.d.ts.map +1 -1
  106. package/dist/panel.js +4 -4
  107. package/dist/panel.js.map +1 -1
  108. package/dist/plots.d.ts +1 -1
  109. package/dist/plots.js +1 -1
  110. package/dist/polar-pad.d.ts +1 -2
  111. package/dist/polar-pad.d.ts.map +1 -1
  112. package/dist/polar-pad.js +3 -3
  113. package/dist/polar-pad.js.map +1 -1
  114. package/dist/{radial-input-CNJ8asY2.js → radial-input-Dbc6fgCK.js} +4 -4
  115. package/dist/radial-input-Dbc6fgCK.js.map +1 -0
  116. package/dist/{radial-input-xSTd4kEz.d.ts → radial-input-LUSBEycd.d.ts} +2 -3
  117. package/dist/radial-input-LUSBEycd.d.ts.map +1 -0
  118. package/dist/radial-input.d.ts +1 -1
  119. package/dist/radial-input.js +1 -1
  120. package/dist/range-input.d.ts +2 -3
  121. package/dist/range-input.d.ts.map +1 -1
  122. package/dist/range-input.js +3 -3
  123. package/dist/range-input.js.map +1 -1
  124. package/dist/range.d.ts +2 -3
  125. package/dist/range.d.ts.map +1 -1
  126. package/dist/range.js +3 -3
  127. package/dist/range.js.map +1 -1
  128. package/dist/registry-CZEB1YI9.js.map +1 -1
  129. package/dist/selecthorizontal.d.ts +2 -3
  130. package/dist/selecthorizontal.d.ts.map +1 -1
  131. package/dist/selecthorizontal.js +3 -3
  132. package/dist/selecthorizontal.js.map +1 -1
  133. package/dist/snap-container.d.ts +1 -2
  134. package/dist/snap-container.d.ts.map +1 -1
  135. package/dist/snap-container.js +3 -3
  136. package/dist/snap-container.js.map +1 -1
  137. package/dist/split-layout.d.ts +2 -3
  138. package/dist/split-layout.d.ts.map +1 -1
  139. package/dist/split-layout.js +3 -3
  140. package/dist/split-layout.js.map +1 -1
  141. package/dist/swipe.d.ts.map +1 -1
  142. package/dist/swipe.js +3 -3
  143. package/dist/swipe.js.map +1 -1
  144. package/dist/{tab-list-CFF7uSYH.d.ts → tab-list-BnqISNvO.d.ts} +5 -6
  145. package/dist/tab-list-BnqISNvO.d.ts.map +1 -0
  146. package/dist/tabs.d.ts +1 -1
  147. package/dist/tabs.js +3 -3
  148. package/dist/tabs.js.map +1 -1
  149. package/dist/tickled-controller-Cq1Va0rR.d.ts.map +1 -1
  150. package/dist/tickled-styles-Bg3QbcrD.js.map +1 -1
  151. package/dist/{timeline-DBWJsSjd.js → timeline-B62Sz6J_.js} +5 -5
  152. package/dist/timeline-B62Sz6J_.js.map +1 -0
  153. package/dist/timeline.d.ts +2 -2
  154. package/dist/timeline.js +1 -1
  155. package/dist/{tooltip-kfUBWYVB.d.ts → tooltip-CwGfb4lp.d.ts} +2 -3
  156. package/dist/tooltip-CwGfb4lp.d.ts.map +1 -0
  157. package/dist/tree-component-CQpoPo4s.d.ts.map +1 -1
  158. package/dist/tree-data-model-DGvRVOFY.js.map +1 -1
  159. package/dist/tree.d.ts +3 -4
  160. package/dist/tree.d.ts.map +1 -1
  161. package/dist/tree.js +4 -4
  162. package/dist/tree.js.map +1 -1
  163. package/dist/types-BKaqnpwx.d.ts.map +1 -1
  164. package/dist/{xy-axis-BANbgrI5.js → xy-axis-C7fNxDwY.js} +5 -5
  165. package/dist/xy-axis-C7fNxDwY.js.map +1 -0
  166. package/dist/{xy-axis-CIFok7MF.d.ts → xy-axis-D9uwpGTT.d.ts} +5 -6
  167. package/dist/xy-axis-D9uwpGTT.d.ts.map +1 -0
  168. package/dist/xy-pad.d.ts +1 -2
  169. package/dist/xy-pad.d.ts.map +1 -1
  170. package/dist/xy-pad.js +3 -3
  171. package/dist/xy-pad.js.map +1 -1
  172. package/package.json +15 -11
  173. package/dist/button-DgKUzE5o.js.map +0 -1
  174. package/dist/colour-picker-Bw-AZoWx.js.map +0 -1
  175. package/dist/decorate-BZbkqIhA.js +0 -9
  176. package/dist/hex-editor-Gib1Grg2.d.ts.map +0 -1
  177. package/dist/hex-editor-Wd6ZtZA2.js.map +0 -1
  178. package/dist/icon-BR5aTIiP.js.map +0 -1
  179. package/dist/icon-DQKdfR7U.d.ts.map +0 -1
  180. package/dist/incr-search-BjCNClnC.js.map +0 -1
  181. package/dist/index-C5dK8RZa.d.ts.map +0 -1
  182. package/dist/index-C9iBN908.d.ts.map +0 -1
  183. package/dist/index-CPVcTTXo.d.ts.map +0 -1
  184. package/dist/index-CQxanqXF.d.ts.map +0 -1
  185. package/dist/index-CpbBI3n7.d.ts.map +0 -1
  186. package/dist/labelled-input-base-DnRh4reU.d.ts.map +0 -1
  187. package/dist/menu-BV6UFx_z.js.map +0 -1
  188. package/dist/menu-item-Cikacp4F.d.ts.map +0 -1
  189. package/dist/menu-item-DEzL_Yjk.js.map +0 -1
  190. package/dist/radial-input-CNJ8asY2.js.map +0 -1
  191. package/dist/radial-input-xSTd4kEz.d.ts.map +0 -1
  192. package/dist/tab-list-CFF7uSYH.d.ts.map +0 -1
  193. package/dist/timeline-DBWJsSjd.js.map +0 -1
  194. package/dist/tooltip-kfUBWYVB.d.ts.map +0 -1
  195. package/dist/xy-axis-BANbgrI5.js.map +0 -1
  196. package/dist/xy-axis-CIFok7MF.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,32 +1,33 @@
1
1
  import { n as buildHighlightTargets, r as clearHighlights, t as applyHighlights } from "./highlight-CAjwQ4GE.js";
2
+ import { r as TickledController } from "./tickled-styles-Bg3QbcrD.js";
2
3
  import { a as svgToDataUri, i as registerIcon, n as hasIcon, r as iconBus, t as getIcon } from "./registry-CZEB1YI9.js";
3
- import { t as __decorate } from "./decorate-BZbkqIhA.js";
4
- import { t as IxfxIconElement } from "./icon-BR5aTIiP.js";
4
+ import { n as safeCustomElement, t as __decorate } from "./decorate-O4m1U4l3.js";
5
+ import { t as IxfxIconElement } from "./icon-CYACf6o8.js";
5
6
  import { AcTextElement } from "./ac-text.js";
6
7
  import { i as ICON_CLOSE, n as ICON_CHECK, r as ICON_CHEVRON_DOWN, t as ICON_CARET_RIGHT } from "./defaults-FEZaGiYZ.js";
7
8
  import "./icons.js";
8
9
  import { t as prominenceStyles } from "./prominence-CreDBdCs.js";
9
- import { n as buttonStyles, t as ButtonElement } from "./button-DgKUzE5o.js";
10
+ import { n as buttonStyles, t as ButtonElement } from "./button-B9ztaKyl.js";
10
11
  import { t as popupSurfaceStyles } from "./popup-Ddx9LCzY.js";
11
- import "./menu-item-DEzL_Yjk.js";
12
+ import "./menu-item-6IU5weHi.js";
12
13
  import { Checkbox } from "./checkbox.js";
13
14
  import { C as resultThrow, E as throwIfFailed, d as scaler, h as without, n as clamper, p as containsDuplicateInstances, y as nullUndefTest } from "./dist-D7kJgnSE.js";
14
- import { a as computeColour, c as last, i as applyAgeModification, l as QueueMutable, n as PlotSingleAxis, o as parseColourScaleAttr, r as PlotDataSeries, s as readBaseColour, t as PlotXyAxis, u as __exportAll } from "./xy-axis-BANbgrI5.js";
15
+ import { a as computeColour, c as last, i as applyAgeModification, l as QueueMutable, n as PlotSingleAxis, o as parseColourScaleAttr, r as PlotDataSeries, s as readBaseColour, t as PlotXyAxis, u as __exportAll } from "./xy-axis-C7fNxDwY.js";
15
16
  import { a as toStringAbbreviate, c as isEqualDefault, l as isEqualValueDefault, o as defaultComparer, r as isPrimitive, u as isEqualValueIgnoreOrder } from "./dist-By5URG0Y.js";
16
- import { n as ColourPicker, t as ColourPickerPopup } from "./colour-picker-Bw-AZoWx.js";
17
+ import { n as ColourPicker, t as ColourPickerPopup } from "./colour-picker-BNqDz4wK.js";
17
18
  import { LabelledRangeInput } from "./labelled-range-input.js";
18
19
  import { t as TreeDataModel } from "./tree-data-model-DGvRVOFY.js";
19
- import { a as createFuzzySearch, i as createIncrSearch, n as createAcCompletionProvider, r as createElementIncrSearch, t as IncrSearchTreeController } from "./incr-search-BjCNClnC.js";
20
+ import { a as createFuzzySearch, i as createAcCompletionProvider, n as IncrSearchTreeController, r as createIncrSearch, t as createElementIncrSearch } from "./incr-search-BZawvrfl.js";
20
21
  import { NarrowedTextElement } from "./narrowed-text.js";
21
22
  import { CrumbNavigationElement } from "./crumbs.js";
22
23
  import { DataDisplayComponent } from "./data-display.js";
23
24
  import { EditableLabel } from "./editable-label.js";
24
25
  import { t as resolveStep } from "./keyboard-De_vOHLg.js";
25
- import { t as IxfxHexEditorElement } from "./hex-editor-Wd6ZtZA2.js";
26
- import { t as RadialInputElement } from "./radial-input-CNJ8asY2.js";
26
+ import { t as IxfxHexEditorElement } from "./hex-editor-gH3mteMr.js";
27
+ import { t as RadialInputElement } from "./radial-input-Dbc6fgCK.js";
27
28
  import { LabelledRadialInput } from "./labelled-radial-input.js";
28
29
  import { LedElement } from "./led.js";
29
- import { t as menu_exports } from "./menu-BV6UFx_z.js";
30
+ import { t as menu_exports } from "./menu-C3eANB5M.js";
30
31
  import { MillerBaseElement, MillerListElement, MillerTreeController } from "./miller.js";
31
32
  import { PanelElement } from "./panel.js";
32
33
  import { PolarPad } from "./polar-pad.js";
@@ -38,12 +39,13 @@ import { SnapContainer } from "./snap-container.js";
38
39
  import { SplitLayoutElement } from "./split-layout.js";
39
40
  import { SwipeElement } from "./swipe.js";
40
41
  import { TabListElement } from "./tabs.js";
41
- import { a as attachTimelineInteractions, i as timelineStyles, n as IxfxTimelineElement, o as resolveCssVars, r as TimelineTrackTabElement, s as resolveGrid, t as TimelineController } from "./timeline-DBWJsSjd.js";
42
+ import { a as attachTimelineInteractions, i as timelineStyles, n as IxfxTimelineElement, o as resolveCssVars, r as TimelineTrackTabElement, s as resolveGrid, t as TimelineController } from "./timeline-B62Sz6J_.js";
42
43
  import { TreeBaseElement, TreeController, TreeListElement } from "./tree.js";
43
44
  import { XyPad } from "./xy-pad.js";
44
45
  import { LitElement, css, html, nothing } from "lit";
45
- import { customElement, eventOptions, property, query, queryAssignedElements, state } from "lit/decorators.js";
46
+ import { eventOptions, property, query, queryAssignedElements, state } from "lit/decorators.js";
46
47
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
48
+ import { keyed } from "lit/directives/keyed.js";
47
49
  import { classMap } from "lit/directives/class-map.js";
48
50
  //#region src/button/radio-group.ts
49
51
  let RadioGroup = class RadioGroup extends LitElement {
@@ -371,7 +373,7 @@ __decorate([property({
371
373
  __decorate([state()], RadioGroup.prototype, "_computedItems", void 0);
372
374
  __decorate([state()], RadioGroup.prototype, "_icons", void 0);
373
375
  __decorate([query(`slot`)], RadioGroup.prototype, "_slot", void 0);
374
- RadioGroup = __decorate([customElement(`ixfx-radio-group`)], RadioGroup);
376
+ RadioGroup = __decorate([safeCustomElement(`ixfx-radio-group`)], RadioGroup);
375
377
  //#endregion
376
378
  //#region src/button/split-button.ts
377
379
  let SplitButton = class SplitButton extends ButtonElement {
@@ -760,7 +762,7 @@ __decorate([state()], SplitButton.prototype, "_switcherItems", void 0);
760
762
  __decorate([state()], SplitButton.prototype, "_dynamicItems", void 0);
761
763
  __decorate([state()], SplitButton.prototype, "_loadingItems", void 0);
762
764
  __decorate([state()], SplitButton.prototype, "_menuHasItems", void 0);
763
- SplitButton = __decorate([customElement(`ixfx-split-button`)], SplitButton);
765
+ SplitButton = __decorate([safeCustomElement(`ixfx-split-button`)], SplitButton);
764
766
  //#endregion
765
767
  //#region node_modules/.pnpm/@ixfx+collections@0.56.12/node_modules/@ixfx/collections/dist/StackMutable-B9Qm32K8.js
766
768
  const trimStack = (opts, stack, toAdd) => {
@@ -4174,7 +4176,7 @@ __decorate([state()], CrumbPathElement.prototype, "_dropdownActiveIndex", void 0
4174
4176
  __decorate([state()], CrumbPathElement.prototype, "_editingCancelled", void 0);
4175
4177
  __decorate([state()], CrumbPathElement.prototype, "_editStartIndex", void 0);
4176
4178
  __decorate([state()], CrumbPathElement.prototype, "_openCumPath", void 0);
4177
- CrumbPathElement = __decorate([customElement(`ixfx-crumb-path`)], CrumbPathElement);
4179
+ CrumbPathElement = __decorate([safeCustomElement(`ixfx-crumb-path`)], CrumbPathElement);
4178
4180
  //#endregion
4179
4181
  //#region src/editable-label/editable-number.ts
4180
4182
  const DRAG_THRESHOLD_PX = 3;
@@ -4752,7 +4754,7 @@ __decorate([property({
4752
4754
  attribute: `no-drag`
4753
4755
  })], EditableNumber.prototype, "noDrag", void 0);
4754
4756
  __decorate([property({ type: Number })], EditableNumber.prototype, "precision", void 0);
4755
- EditableNumber = __decorate([customElement(`ixfx-editable-number`)], EditableNumber);
4757
+ EditableNumber = __decorate([safeCustomElement(`ixfx-editable-number`)], EditableNumber);
4756
4758
  //#endregion
4757
4759
  //#region src/panel/panel-group.ts
4758
4760
  let PanelGroupElement = class PanelGroupElement extends LitElement {
@@ -4840,7 +4842,7 @@ __decorate([property({
4840
4842
  })], PanelGroupElement.prototype, "allowMultiple", void 0);
4841
4843
  __decorate([property()], PanelGroupElement.prototype, "gap", void 0);
4842
4844
  __decorate([queryAssignedElements({ slot: `` })], PanelGroupElement.prototype, "_panels", void 0);
4843
- PanelGroupElement = __decorate([customElement(`ixfx-panel-group`)], PanelGroupElement);
4845
+ PanelGroupElement = __decorate([safeCustomElement(`ixfx-panel-group`)], PanelGroupElement);
4844
4846
  //#endregion
4845
4847
  //#region src/util/drag.ts
4846
4848
  function getCoordinates(event) {
@@ -5353,7 +5355,7 @@ __decorate([property({ type: Number })], RangeMultiElement.prototype, "max", nul
5353
5355
  __decorate([property({ type: Number })], RangeMultiElement.prototype, "min", null);
5354
5356
  __decorate([eventOptions({ capture: true })], RangeMultiElement.prototype, "_onInput", null);
5355
5357
  __decorate([eventOptions({ capture: true })], RangeMultiElement.prototype, "_onPointerDown", null);
5356
- RangeMultiElement = __decorate([customElement(`ixfx-range-multi`)], RangeMultiElement);
5358
+ RangeMultiElement = __decorate([safeCustomElement(`ixfx-range-multi`)], RangeMultiElement);
5357
5359
  //#endregion
5358
5360
  //#region src/tabs/tab-list-item.ts
5359
5361
  let TabListItemElement = class TabListItemElement extends LitElement {
@@ -5515,7 +5517,7 @@ __decorate([property({
5515
5517
  })], TabListItemElement.prototype, "commandActive", void 0);
5516
5518
  __decorate([property({ attribute: false })], TabListItemElement.prototype, "registry", void 0);
5517
5519
  __decorate([state()], TabListItemElement.prototype, "_compact", void 0);
5518
- TabListItemElement = __decorate([customElement(`ixfx-tab-list-item`)], TabListItemElement);
5520
+ TabListItemElement = __decorate([safeCustomElement(`ixfx-tab-list-item`)], TabListItemElement);
5519
5521
  //#endregion
5520
5522
  //#region src/tabs/tab-panel.ts
5521
5523
  let TabPanelElement = class TabPanelElement extends LitElement {
@@ -5537,7 +5539,7 @@ let TabPanelElement = class TabPanelElement extends LitElement {
5537
5539
  `;
5538
5540
  }
5539
5541
  };
5540
- TabPanelElement = __decorate([customElement(`ixfx-tab-panel`)], TabPanelElement);
5542
+ TabPanelElement = __decorate([safeCustomElement(`ixfx-tab-panel`)], TabPanelElement);
5541
5543
  //#endregion
5542
5544
  //#region src/tabs/tab-panels.ts
5543
5545
  let TabPanelsElement = class TabPanelsElement extends LitElement {
@@ -5592,7 +5594,249 @@ let TabPanelsElement = class TabPanelsElement extends LitElement {
5592
5594
  }
5593
5595
  };
5594
5596
  __decorate([queryAssignedElements()], TabPanelsElement.prototype, "_listItems", void 0);
5595
- TabPanelsElement = __decorate([customElement(`ixfx-tab-panels`)], TabPanelsElement);
5597
+ TabPanelsElement = __decorate([safeCustomElement(`ixfx-tab-panels`)], TabPanelsElement);
5598
+ //#endregion
5599
+ //#region src/transitory-label/transitory-label.ts
5600
+ let TransitoryLabelElement = class TransitoryLabelElement extends LitElement {
5601
+ constructor(..._args) {
5602
+ super(..._args);
5603
+ this.text = ``;
5604
+ this.effect = `fade`;
5605
+ this.duration = 300;
5606
+ this.easing = `ease`;
5607
+ this._currentText = ``;
5608
+ this._outgoingText = ``;
5609
+ this._transitionId = 0;
5610
+ this._queue = [];
5611
+ this.#onOutgoingEnd = () => {
5612
+ this._onTransitionEnd();
5613
+ };
5614
+ this.#onLastCharOut = () => {
5615
+ this._onTransitionEnd();
5616
+ };
5617
+ }
5618
+ setText(msg, effect) {
5619
+ this._pendingEffect = effect;
5620
+ this.text = msg;
5621
+ }
5622
+ updated(changed) {
5623
+ if (changed.has(`text`) && this.text !== this._currentText) {
5624
+ const effect = this._pendingEffect ?? this.effect;
5625
+ this._pendingEffect = void 0;
5626
+ if (this._activeEffect !== void 0) this._queue.push({
5627
+ text: this.text,
5628
+ effect
5629
+ });
5630
+ else this._startTransition(this.text, effect);
5631
+ }
5632
+ }
5633
+ _startTransition(newText, effect) {
5634
+ const prevText = this._currentText;
5635
+ this._currentText = newText;
5636
+ this._outgoingText = prevText;
5637
+ if (prevText !== ``) {
5638
+ this._transitionId++;
5639
+ this._activeEffect = effect;
5640
+ }
5641
+ }
5642
+ _onTransitionEnd() {
5643
+ this._outgoingText = ``;
5644
+ this._activeEffect = void 0;
5645
+ if (this._queue.length > 0) {
5646
+ const next = this._queue.shift();
5647
+ this._startTransition(next.text, next.effect);
5648
+ }
5649
+ }
5650
+ #onOutgoingEnd;
5651
+ #onLastCharOut;
5652
+ #renderCharSwap() {
5653
+ const charDuration = Math.round(this.duration * .3);
5654
+ const charStagger = Math.round(this.duration * .1);
5655
+ const currentChars = this._currentText.split(``);
5656
+ const outgoingChars = this._outgoingText.split(``);
5657
+ const lastIdx = outgoingChars.length - 1;
5658
+ const charStyle = (i) => `animation-duration:${charDuration}ms;animation-delay:${i * charStagger}ms;animation-timing-function:${this.easing}`;
5659
+ return html`
5660
+ ${keyed(`cc${this._transitionId}`, html`
5661
+ <span class="layer current char-swap">
5662
+ ${currentChars.map((ch, i) => html`<span class="char in" style=${charStyle(i)}>${ch}</span>`)}
5663
+ </span>
5664
+ `)}
5665
+ ${this._outgoingText ? keyed(this._transitionId, html`
5666
+ <span class="layer outgoing char-swap">
5667
+ ${outgoingChars.map((ch, i) => html`<span
5668
+ class="char out"
5669
+ style=${charStyle(i)}
5670
+ @animationend=${i === lastIdx ? this.#onLastCharOut : void 0}
5671
+ >${ch}</span>`)}
5672
+ </span>
5673
+ `) : nothing}
5674
+ `;
5675
+ }
5676
+ render() {
5677
+ if (this._activeEffect === `character-swap`) return html`<span class="container">${this.#renderCharSwap()}</span>`;
5678
+ const effect = this._activeEffect ?? ``;
5679
+ const durStyle = this._activeEffect ? `animation-duration:${this.duration}ms;animation-timing-function:${this.easing}` : ``;
5680
+ return html`
5681
+ <span class="container">
5682
+ ${this._outgoingText ? keyed(this._transitionId, html`
5683
+ <span class="layer outgoing ${effect}" style=${durStyle} @animationend=${this.#onOutgoingEnd}>
5684
+ ${this._outgoingText}
5685
+ </span>
5686
+ `) : nothing}
5687
+ ${keyed(`c${this._transitionId}`, html`
5688
+ <span class="layer current ${effect}" style=${durStyle}>
5689
+ ${this._currentText}
5690
+ </span>
5691
+ `)}
5692
+ </span>
5693
+ `;
5694
+ }
5695
+ static {
5696
+ this.styles = css`
5697
+ :host {
5698
+ display: inline-block;
5699
+ --transitory-label-easing: ease;
5700
+ }
5701
+
5702
+ .container {
5703
+ display: inline-grid;
5704
+ overflow: hidden;
5705
+ }
5706
+
5707
+ .layer {
5708
+ grid-area: 1 / 1;
5709
+ white-space: nowrap;
5710
+ }
5711
+
5712
+ .layer.outgoing {
5713
+ pointer-events: none;
5714
+ }
5715
+
5716
+ /* slide-right */
5717
+ .layer.current.slide-right {
5718
+ transform: translateX(-100%);
5719
+ animation: tl-slide-in-left var(--transitory-label-easing) forwards;
5720
+ }
5721
+ .layer.outgoing.slide-right {
5722
+ animation: tl-slide-out-right var(--transitory-label-easing) forwards;
5723
+ }
5724
+
5725
+ @keyframes tl-slide-in-left {
5726
+ from { transform: translateX(-100%); }
5727
+ to { transform: translateX(0); }
5728
+ }
5729
+ @keyframes tl-slide-out-right {
5730
+ from { transform: translateX(0); }
5731
+ to { transform: translateX(100%); }
5732
+ }
5733
+
5734
+ /* slide-left */
5735
+ .layer.current.slide-left {
5736
+ transform: translateX(100%);
5737
+ animation: tl-slide-in-right var(--transitory-label-easing) forwards;
5738
+ }
5739
+ .layer.outgoing.slide-left {
5740
+ animation: tl-slide-out-left var(--transitory-label-easing) forwards;
5741
+ }
5742
+
5743
+ @keyframes tl-slide-in-right {
5744
+ from { transform: translateX(100%); }
5745
+ to { transform: translateX(0); }
5746
+ }
5747
+ @keyframes tl-slide-out-left {
5748
+ from { transform: translateX(0); }
5749
+ to { transform: translateX(-100%); }
5750
+ }
5751
+
5752
+ /* slide-up */
5753
+ .layer.current.slide-up {
5754
+ transform: translateY(100%);
5755
+ animation: tl-slide-in-bottom var(--transitory-label-easing) forwards;
5756
+ }
5757
+ .layer.outgoing.slide-up {
5758
+ animation: tl-slide-out-top var(--transitory-label-easing) forwards;
5759
+ }
5760
+
5761
+ @keyframes tl-slide-in-bottom {
5762
+ from { transform: translateY(100%); }
5763
+ to { transform: translateY(0); }
5764
+ }
5765
+ @keyframes tl-slide-out-top {
5766
+ from { transform: translateY(0); }
5767
+ to { transform: translateY(-100%); }
5768
+ }
5769
+
5770
+ /* slide-down */
5771
+ .layer.current.slide-down {
5772
+ transform: translateY(-100%);
5773
+ animation: tl-slide-in-top var(--transitory-label-easing) forwards;
5774
+ }
5775
+ .layer.outgoing.slide-down {
5776
+ animation: tl-slide-out-bottom var(--transitory-label-easing) forwards;
5777
+ }
5778
+
5779
+ @keyframes tl-slide-in-top {
5780
+ from { transform: translateY(-100%); }
5781
+ to { transform: translateY(0); }
5782
+ }
5783
+ @keyframes tl-slide-out-bottom {
5784
+ from { transform: translateY(0); }
5785
+ to { transform: translateY(100%); }
5786
+ }
5787
+
5788
+ /* fade */
5789
+ .layer.current.fade {
5790
+ opacity: 0;
5791
+ animation: tl-fade-in var(--transitory-label-easing) forwards;
5792
+ }
5793
+ .layer.outgoing.fade {
5794
+ animation: tl-fade-out var(--transitory-label-easing) forwards;
5795
+ }
5796
+
5797
+ @keyframes tl-fade-in {
5798
+ from { opacity: 0; }
5799
+ to { opacity: 1; }
5800
+ }
5801
+ @keyframes tl-fade-out {
5802
+ from { opacity: 1; }
5803
+ to { opacity: 0; }
5804
+ }
5805
+
5806
+ /* character-swap */
5807
+ .char {
5808
+ display: inline-block;
5809
+ }
5810
+
5811
+ .char.in {
5812
+ opacity: 0;
5813
+ animation: tl-char-in var(--transitory-label-easing) forwards;
5814
+ }
5815
+
5816
+ .char.out {
5817
+ animation: tl-char-out var(--transitory-label-easing) forwards;
5818
+ }
5819
+
5820
+ @keyframes tl-char-in {
5821
+ from { opacity: 0; transform: translateY(-0.3em) scale(0.8); }
5822
+ to { opacity: 1; transform: translateY(0) scale(1); }
5823
+ }
5824
+ @keyframes tl-char-out {
5825
+ from { opacity: 1; transform: translateY(0) scale(1); }
5826
+ to { opacity: 0; transform: translateY(0.3em) scale(0.8); }
5827
+ }
5828
+ `;
5829
+ }
5830
+ };
5831
+ __decorate([property({ type: String })], TransitoryLabelElement.prototype, "text", void 0);
5832
+ __decorate([property({ type: String })], TransitoryLabelElement.prototype, "effect", void 0);
5833
+ __decorate([property({ type: Number })], TransitoryLabelElement.prototype, "duration", void 0);
5834
+ __decorate([property({ type: String })], TransitoryLabelElement.prototype, "easing", void 0);
5835
+ __decorate([state()], TransitoryLabelElement.prototype, "_currentText", void 0);
5836
+ __decorate([state()], TransitoryLabelElement.prototype, "_outgoingText", void 0);
5837
+ __decorate([state()], TransitoryLabelElement.prototype, "_activeEffect", void 0);
5838
+ __decorate([state()], TransitoryLabelElement.prototype, "_transitionId", void 0);
5839
+ TransitoryLabelElement = __decorate([safeCustomElement(`ixfx-transitory-label`)], TransitoryLabelElement);
5596
5840
  //#endregion
5597
5841
  //#region src/util/checkbox.ts
5598
5842
  function isCheckboxLike(el) {
@@ -5719,13 +5963,559 @@ __decorate([property({ type: String })], TooltipElement.prototype, "orientation"
5719
5963
  __decorate([property({ type: String })], TooltipElement.prototype, "anchor", void 0);
5720
5964
  __decorate([property()], TooltipElement.prototype, "value", void 0);
5721
5965
  __decorate([property({ type: String })], TooltipElement.prototype, "icon", void 0);
5722
- TooltipElement = _TooltipElement = __decorate([customElement(`ixfx-tooltip`)], TooltipElement);
5966
+ TooltipElement = _TooltipElement = __decorate([safeCustomElement(`ixfx-tooltip`)], TooltipElement);
5967
+ //#endregion
5968
+ //#region src/vertical-list/vertical-list.ts
5969
+ const ITEM_SELECTOR = `li, [data-list-item]`;
5970
+ const isMultiMode = (mode) => mode === `checked` || mode === `vscode` || mode === `standard`;
5971
+ let VerticalListElement = class VerticalListElement extends LitElement {
5972
+ constructor(..._args) {
5973
+ super(..._args);
5974
+ this.selectionMode = `single`;
5975
+ this.interactionMode = `standard`;
5976
+ this._selectedItems = /* @__PURE__ */ new Set();
5977
+ this._searchVisible = false;
5978
+ this._searchQuery = ``;
5979
+ this.tickled = new TickledController(this, {
5980
+ getItems: () => this._getVisibleItems().map((el) => ({
5981
+ id: el,
5982
+ enabled: true
5983
+ })),
5984
+ onTickle: (id) => {
5985
+ if (id !== void 0) this._dispatch(`list-tickle`, { item: id });
5986
+ },
5987
+ onStateChange: () => this._syncItemStates()
5988
+ });
5989
+ this._onPointerOver = (e) => {
5990
+ const item = this._findListItem(e.composedPath());
5991
+ if (item) this.tickled.handlePointerEnter(item);
5992
+ };
5993
+ this._onPointerLeave = (e) => {
5994
+ this.tickled.handlePointerLeave(e);
5995
+ };
5996
+ this._onKeyDown = (e) => {
5997
+ if ((e.ctrlKey || e.metaKey) && e.key === `f`) {
5998
+ e.preventDefault();
5999
+ this._openSearch();
6000
+ return;
6001
+ }
6002
+ if ((e.ctrlKey || e.metaKey) && e.key === `a`) {
6003
+ if ((this.selectionMode === `multiple` || isMultiMode(this.interactionMode)) && this.selectionMode !== `none`) {
6004
+ e.preventDefault();
6005
+ this._selectAll();
6006
+ }
6007
+ return;
6008
+ }
6009
+ if (this._searchVisible) return;
6010
+ switch (e.key) {
6011
+ case `ArrowDown`:
6012
+ e.preventDefault();
6013
+ this.tickled.handleKeyboardNavigation(`next`);
6014
+ if (e.shiftKey && this.interactionMode === `vscode`) {
6015
+ const cur = this.tickled.tickledId;
6016
+ if (cur) this._rangeSelectTo(cur);
6017
+ }
6018
+ break;
6019
+ case `ArrowUp`:
6020
+ e.preventDefault();
6021
+ this.tickled.handleKeyboardNavigation(`previous`);
6022
+ if (e.shiftKey && this.interactionMode === `vscode`) {
6023
+ const cur = this.tickled.tickledId;
6024
+ if (cur) this._rangeSelectTo(cur);
6025
+ }
6026
+ break;
6027
+ case `Enter`: {
6028
+ const id = this.tickled.tickledId;
6029
+ if (id) {
6030
+ e.preventDefault();
6031
+ this._dispatch(`list-item-click`, { item: id });
6032
+ this._activateItem(id);
6033
+ }
6034
+ break;
6035
+ }
6036
+ case ` `: {
6037
+ const id = this.tickled.tickledId;
6038
+ if (id) {
6039
+ e.preventDefault();
6040
+ this._handleSpaceKey(id);
6041
+ }
6042
+ break;
6043
+ }
6044
+ case `Escape`:
6045
+ this._clearSelection();
6046
+ break;
6047
+ }
6048
+ };
6049
+ this._onClick = (e) => {
6050
+ const item = this._findListItem(e.composedPath());
6051
+ if (!item) return;
6052
+ this._dispatch(`list-item-click`, { item });
6053
+ this._handleClickSelection(item, e);
6054
+ };
6055
+ this._onDblClick = (e) => {
6056
+ const item = this._findListItem(e.composedPath());
6057
+ if (item) this._activateItem(item);
6058
+ };
6059
+ this._onSearchInput = (e) => {
6060
+ const input = e.target;
6061
+ this._searchQuery = input.value;
6062
+ this.#search?.setQuery(this._searchQuery);
6063
+ };
6064
+ this._onSearchKeydown = (e) => {
6065
+ if (e.key === `Escape`) {
6066
+ e.stopPropagation();
6067
+ this._closeSearch();
6068
+ } else if (e.key === `ArrowDown`) {
6069
+ e.preventDefault();
6070
+ this.tickled.handleKeyboardNavigation(`next`);
6071
+ } else if (e.key === `ArrowUp`) {
6072
+ e.preventDefault();
6073
+ this.tickled.handleKeyboardNavigation(`previous`);
6074
+ } else if (e.key === `Enter`) {
6075
+ e.preventDefault();
6076
+ e.stopPropagation();
6077
+ const id = this.tickled.tickledId ?? this._getVisibleItems()[0];
6078
+ if (id) {
6079
+ this._dispatch(`list-item-click`, { item: id });
6080
+ this._activateItem(id);
6081
+ this._closeSearch();
6082
+ }
6083
+ }
6084
+ };
6085
+ }
6086
+ #search;
6087
+ #selectionAnchor;
6088
+ connectedCallback() {
6089
+ super.connectedCallback();
6090
+ if (!this.hasAttribute(`tabindex`)) this.tabIndex = 0;
6091
+ this.addEventListener(`pointerover`, this._onPointerOver);
6092
+ this.addEventListener(`pointerleave`, this._onPointerLeave);
6093
+ this.addEventListener(`keydown`, this._onKeyDown);
6094
+ this.addEventListener(`click`, this._onClick);
6095
+ this.addEventListener(`dblclick`, this._onDblClick);
6096
+ }
6097
+ disconnectedCallback() {
6098
+ super.disconnectedCallback();
6099
+ this.removeEventListener(`pointerover`, this._onPointerOver);
6100
+ this.removeEventListener(`pointerleave`, this._onPointerLeave);
6101
+ this.removeEventListener(`keydown`, this._onKeyDown);
6102
+ this.removeEventListener(`click`, this._onClick);
6103
+ this.removeEventListener(`dblclick`, this._onDblClick);
6104
+ this.#search?.dispose();
6105
+ this.#search = void 0;
6106
+ }
6107
+ firstUpdated() {
6108
+ this.#search = createElementIncrSearch({
6109
+ container: this,
6110
+ itemSelector: ITEM_SELECTOR,
6111
+ getLabel: (el) => el.getAttribute(`data-search-label`) ?? el.textContent?.trim() ?? ``,
6112
+ getKey: (el) => el.getAttribute(`data-key`) ?? el.getAttribute(`data-search-label`) ?? el.textContent?.trim() ?? ``,
6113
+ highlightKey: `vertical-list-search`
6114
+ });
6115
+ }
6116
+ updated(changed) {
6117
+ super.updated(changed);
6118
+ if (changed.has(`interactionMode`)) {
6119
+ this.#selectionAnchor = void 0;
6120
+ this._clearSelection();
6121
+ }
6122
+ }
6123
+ addItem(item) {
6124
+ if (typeof item === `string`) {
6125
+ const li = document.createElement(`li`);
6126
+ li.textContent = item;
6127
+ this.appendChild(li);
6128
+ } else this.appendChild(item);
6129
+ if (this.interactionMode === `checked`) this._syncCheckboxes();
6130
+ }
6131
+ removeItem(item) {
6132
+ item.remove();
6133
+ }
6134
+ clearItems() {
6135
+ this.replaceChildren();
6136
+ this.#selectionAnchor = void 0;
6137
+ this._selectedItems = /* @__PURE__ */ new Set();
6138
+ this._syncItemStates();
6139
+ }
6140
+ select(item) {
6141
+ this._replaceSelection(item);
6142
+ }
6143
+ deselect(item) {
6144
+ if (!this._selectedItems.has(item)) return;
6145
+ const previous = this._selectedItems;
6146
+ const next = new Set(this._selectedItems);
6147
+ next.delete(item);
6148
+ this._selectedItems = next;
6149
+ this._syncItemStates();
6150
+ this._dispatch(`list-select`, {
6151
+ selected: next,
6152
+ previous
6153
+ });
6154
+ }
6155
+ clearSelection() {
6156
+ this._clearSelection();
6157
+ }
6158
+ selectAll() {
6159
+ if ((this.selectionMode === `multiple` || isMultiMode(this.interactionMode)) && this.selectionMode !== `none`) this._selectAll();
6160
+ }
6161
+ _replaceSelection(item) {
6162
+ if (this.selectionMode === `none`) return;
6163
+ const previous = this._selectedItems;
6164
+ const next = new Set([item]);
6165
+ this._selectedItems = next;
6166
+ this.#selectionAnchor = item;
6167
+ this._syncItemStates();
6168
+ this._dispatch(`list-select`, {
6169
+ selected: next,
6170
+ previous
6171
+ });
6172
+ }
6173
+ _toggleItem(item) {
6174
+ const effectiveMultiple = this.selectionMode === `multiple` || isMultiMode(this.interactionMode);
6175
+ if (this.selectionMode === `none` && this.interactionMode !== `checked`) return;
6176
+ const previous = this._selectedItems;
6177
+ const next = new Set(this._selectedItems);
6178
+ if (next.has(item)) next.delete(item);
6179
+ else {
6180
+ if (!effectiveMultiple) next.clear();
6181
+ next.add(item);
6182
+ }
6183
+ this._selectedItems = next;
6184
+ this._syncItemStates();
6185
+ this._dispatch(`list-select`, {
6186
+ selected: next,
6187
+ previous
6188
+ });
6189
+ }
6190
+ _rangeSelectTo(item) {
6191
+ if (this.selectionMode === `none`) return;
6192
+ if (!this.#selectionAnchor) {
6193
+ this._replaceSelection(item);
6194
+ return;
6195
+ }
6196
+ const visible = this._getVisibleItems();
6197
+ const anchorIdx = visible.indexOf(this.#selectionAnchor);
6198
+ const targetIdx = visible.indexOf(item);
6199
+ if (anchorIdx === -1 || targetIdx === -1) {
6200
+ this._replaceSelection(item);
6201
+ return;
6202
+ }
6203
+ const start = Math.min(anchorIdx, targetIdx);
6204
+ const end = Math.max(anchorIdx, targetIdx);
6205
+ const previous = this._selectedItems;
6206
+ const next = new Set(visible.slice(start, end + 1));
6207
+ this._selectedItems = next;
6208
+ this._syncItemStates();
6209
+ this._dispatch(`list-select`, {
6210
+ selected: next,
6211
+ previous
6212
+ });
6213
+ }
6214
+ _clearSelection() {
6215
+ if (this._selectedItems.size === 0) return;
6216
+ const previous = this._selectedItems;
6217
+ this._selectedItems = /* @__PURE__ */ new Set();
6218
+ this._syncItemStates();
6219
+ this._dispatch(`list-select`, {
6220
+ selected: /* @__PURE__ */ new Set(),
6221
+ previous
6222
+ });
6223
+ }
6224
+ _selectAll() {
6225
+ const visible = this._getVisibleItems();
6226
+ if (visible.length === 0) return;
6227
+ const previous = this._selectedItems;
6228
+ const next = new Set(visible);
6229
+ this._selectedItems = next;
6230
+ this._syncItemStates();
6231
+ this._dispatch(`list-select`, {
6232
+ selected: next,
6233
+ previous
6234
+ });
6235
+ }
6236
+ _handleClickSelection(item, e) {
6237
+ const mode = this.interactionMode;
6238
+ if (mode === `manual`) return;
6239
+ if (this.selectionMode === `none` && mode !== `checked`) return;
6240
+ switch (mode) {
6241
+ case `implicit`:
6242
+ this._replaceSelection(item);
6243
+ break;
6244
+ case `standard`:
6245
+ case `vscode`:
6246
+ if (e.ctrlKey || e.metaKey) {
6247
+ if (this.selectionMode === `multiple` || mode === `vscode`) this._toggleItem(item);
6248
+ } else if (e.shiftKey && (this.selectionMode === `multiple` || mode === `vscode`)) this._rangeSelectTo(item);
6249
+ else this._replaceSelection(item);
6250
+ break;
6251
+ case `checked`: break;
6252
+ }
6253
+ }
6254
+ _handleSpaceKey(item) {
6255
+ const mode = this.interactionMode;
6256
+ if (mode === `manual`) return;
6257
+ if (mode === `implicit`) this._replaceSelection(item);
6258
+ else this._toggleItem(item);
6259
+ }
6260
+ _getVisibleItems() {
6261
+ return Array.from(this.querySelectorAll(ITEM_SELECTOR)).filter((el) => {
6262
+ if (el.hidden) return false;
6263
+ if (this.filterPredicate && !this.filterPredicate(el)) return false;
6264
+ return true;
6265
+ });
6266
+ }
6267
+ _syncItemStates() {
6268
+ for (const el of this.querySelectorAll(ITEM_SELECTOR)) {
6269
+ el.toggleAttribute(`data-tickled`, this.tickled.isTickled(el));
6270
+ el.toggleAttribute(`data-selected`, this._selectedItems.has(el));
6271
+ if (this.interactionMode === `checked`) el.toggleAttribute(`data-checked`, this._selectedItems.has(el));
6272
+ else el.removeAttribute(`data-checked`);
6273
+ }
6274
+ this.dataset[`inputMode`] = this.tickled.inputMode;
6275
+ this._syncCheckboxes();
6276
+ }
6277
+ _syncCheckboxes() {
6278
+ const inCheckedMode = this.interactionMode === `checked`;
6279
+ for (const el of this.querySelectorAll(`li`)) {
6280
+ let cb = el.querySelector(`input.ixfx-list-checkbox`);
6281
+ if (inCheckedMode) {
6282
+ if (!cb) {
6283
+ cb = document.createElement(`input`);
6284
+ cb.type = `checkbox`;
6285
+ cb.className = `ixfx-list-checkbox`;
6286
+ cb.style.cssText = `flex-shrink:0;margin:0 6px 0 0;cursor:pointer;accent-color:var(--accent,#60a5fa);pointer-events:auto`;
6287
+ cb.tabIndex = -1;
6288
+ cb.addEventListener(`click`, (e) => {
6289
+ e.stopPropagation();
6290
+ this._toggleItem(el);
6291
+ });
6292
+ el.prepend(cb);
6293
+ }
6294
+ cb.checked = this._selectedItems.has(el);
6295
+ } else if (cb) cb.remove();
6296
+ }
6297
+ }
6298
+ _findListItem(path) {
6299
+ for (const target of path) {
6300
+ if (!(target instanceof Element)) continue;
6301
+ if (target === this) break;
6302
+ if (target.parentElement === this && target.matches(ITEM_SELECTOR)) return target;
6303
+ }
6304
+ }
6305
+ _dispatch(name, detail) {
6306
+ this.dispatchEvent(new CustomEvent(name, {
6307
+ detail,
6308
+ bubbles: true,
6309
+ composed: true
6310
+ }));
6311
+ }
6312
+ _openSearch() {
6313
+ this._searchVisible = true;
6314
+ this.updateComplete.then(() => this._searchInputEl?.focus());
6315
+ }
6316
+ _closeSearch() {
6317
+ this._searchVisible = false;
6318
+ this._searchQuery = ``;
6319
+ this.#search?.clearQuery();
6320
+ this.focus();
6321
+ }
6322
+ _activateItem(item) {
6323
+ if (this.interactionMode !== `manual`) this._replaceSelection(item);
6324
+ this._dispatch(`list-activate`, { item });
6325
+ }
6326
+ static {
6327
+ this.styles = css`
6328
+ :host {
6329
+ display: block;
6330
+ position: relative;
6331
+ background: var(--list-bg, var(--surface-3));
6332
+ color: var(--list-text, var(--surface-3-text));
6333
+ border-radius: var(--list-radius, var(--radius-s));
6334
+ border: 1px solid var(--list-border, var(--border));
6335
+ width: 100%;
6336
+ height: 100%;
6337
+ overflow: hidden;
6338
+ box-sizing: border-box;
6339
+ outline: none;
6340
+ }
6341
+
6342
+ :host(:focus-visible) {
6343
+ outline: 2px solid var(--accent);
6344
+ outline-offset: 2px;
6345
+ }
6346
+
6347
+ .container {
6348
+ position: relative;
6349
+ width: 100%;
6350
+ height: 100%;
6351
+ }
6352
+
6353
+ ul {
6354
+ list-style: none;
6355
+ margin: 0;
6356
+ padding: 0;
6357
+ width: 100%;
6358
+ height: 100%;
6359
+ overflow-y: auto;
6360
+ box-sizing: border-box;
6361
+ }
6362
+
6363
+ ::slotted([hidden]) {
6364
+ display: none !important;
6365
+ }
6366
+
6367
+ ::slotted(li) {
6368
+ display: flex;
6369
+ align-items: center;
6370
+ padding: var(--list-item-padding, 4px var(--space-m, 8px));
6371
+ min-height: var(--list-item-height, 28px);
6372
+ cursor: pointer;
6373
+ user-select: none;
6374
+ transition: background var(--transition, 0.1s ease-out),
6375
+ outline-color var(--transition, 0.1s ease-out);
6376
+ box-sizing: border-box;
6377
+ outline: 1px solid transparent;
6378
+ }
6379
+
6380
+ /* Custom shadow-DOM components handle their own internal layout/padding */
6381
+ ::slotted([data-list-item]) {
6382
+ display: block;
6383
+ cursor: pointer;
6384
+ user-select: none;
6385
+ transition: background var(--transition, 0.1s ease-out),
6386
+ outline-color var(--transition, 0.1s ease-out);
6387
+ outline: 1px solid transparent;
6388
+ }
6389
+
6390
+ ::slotted([data-tickled]) {
6391
+ background: var(--item-bg-tickled, rgba(0, 0, 0, 0.06));
6392
+ outline: 1px solid var(--accent, #60a5fa);
6393
+ }
6394
+
6395
+ ::slotted([data-selected]) {
6396
+ background: var(--item-bg-selected, rgba(25, 118, 210, 1));
6397
+ color: var(--item-text-selected, #fff);
6398
+ outline: 1px solid transparent;
6399
+ }
6400
+
6401
+ ::slotted([data-selected][data-tickled]) {
6402
+ background: var(--item-bg-selected-tickled, rgba(21, 101, 192, 1));
6403
+ outline: 2px dashed var(--surface-3, #1e1e1e);
6404
+ outline-offset: -2px;
6405
+ }
6406
+
6407
+ /* checked mode: checkbox (injected into li) communicates selection — suppress bg highlight */
6408
+ :host([interaction-mode="checked"]) ::slotted([data-selected]) {
6409
+ background: transparent;
6410
+ color: inherit;
6411
+ outline: 1px solid transparent;
6412
+ }
6413
+
6414
+ :host([interaction-mode="checked"]) ::slotted([data-selected][data-tickled]) {
6415
+ background: var(--item-bg-tickled, rgba(0, 0, 0, 0.06));
6416
+ color: inherit;
6417
+ outline: 1px solid var(--accent, #60a5fa);
6418
+ }
6419
+
6420
+ /* checked mode: left-border indicator for custom shadow-DOM items (no checkbox injection possible) */
6421
+ :host([interaction-mode="checked"]) ::slotted([data-list-item]) {
6422
+ border-left: 3px solid transparent;
6423
+ transition: background var(--transition, 0.1s ease-out),
6424
+ border-color var(--transition, 0.1s ease-out);
6425
+ }
6426
+
6427
+ :host([interaction-mode="checked"]) ::slotted([data-list-item][data-checked]) {
6428
+ border-left: 3px solid var(--accent, #60a5fa);
6429
+ }
6430
+
6431
+ .search-overlay {
6432
+ position: absolute;
6433
+ top: 8px;
6434
+ right: 8px;
6435
+ z-index: 10;
6436
+ display: flex;
6437
+ align-items: center;
6438
+ gap: 4px;
6439
+ background: var(--surface-4, #2a2a2a);
6440
+ border: 1px solid var(--border, #444);
6441
+ border-radius: var(--radius-m, 4px);
6442
+ padding: 4px 6px;
6443
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
6444
+ }
6445
+
6446
+ .search-overlay[hidden] {
6447
+ display: none;
6448
+ }
6449
+
6450
+ .search-input {
6451
+ background: transparent;
6452
+ border: none;
6453
+ outline: none;
6454
+ color: inherit;
6455
+ font-size: var(--text-m, 0.875em);
6456
+ min-width: 140px;
6457
+ }
6458
+
6459
+ .search-close {
6460
+ background: transparent;
6461
+ border: none;
6462
+ color: var(--surface-muted-text, #888);
6463
+ cursor: pointer;
6464
+ font-size: 1.1em;
6465
+ line-height: 1;
6466
+ padding: 0 2px;
6467
+ }
6468
+
6469
+ .search-close:hover {
6470
+ color: inherit;
6471
+ }
6472
+ `;
6473
+ }
6474
+ render() {
6475
+ return html`
6476
+ <div class="container">
6477
+ <ul part="list">
6478
+ <slot></slot>
6479
+ </ul>
6480
+ <div
6481
+ class="search-overlay"
6482
+ part="search-overlay"
6483
+ ?hidden=${!this._searchVisible}
6484
+ >
6485
+ <input
6486
+ type="text"
6487
+ class="search-input"
6488
+ placeholder="Search…"
6489
+ .value=${this._searchQuery}
6490
+ @input=${this._onSearchInput}
6491
+ @keydown=${this._onSearchKeydown}
6492
+ />
6493
+ <button class="search-close" @click=${this._closeSearch} title="Close search (Esc)">×</button>
6494
+ </div>
6495
+ </div>
6496
+ `;
6497
+ }
6498
+ };
6499
+ __decorate([property({
6500
+ type: String,
6501
+ attribute: `selection-mode`
6502
+ })], VerticalListElement.prototype, "selectionMode", void 0);
6503
+ __decorate([property({
6504
+ type: String,
6505
+ attribute: `interaction-mode`
6506
+ })], VerticalListElement.prototype, "interactionMode", void 0);
6507
+ __decorate([property({ attribute: false })], VerticalListElement.prototype, "filterPredicate", void 0);
6508
+ __decorate([state()], VerticalListElement.prototype, "_selectedItems", void 0);
6509
+ __decorate([state()], VerticalListElement.prototype, "_searchVisible", void 0);
6510
+ __decorate([state()], VerticalListElement.prototype, "_searchQuery", void 0);
6511
+ __decorate([query(`.search-input`)], VerticalListElement.prototype, "_searchInputEl", void 0);
6512
+ VerticalListElement = __decorate([safeCustomElement(`ixfx-vertical-list`)], VerticalListElement);
5723
6513
  //#endregion
5724
6514
  //#region src/index.ts
5725
6515
  function init() {
5726
6516
  console.log(`Init`);
5727
6517
  }
5728
6518
  //#endregion
5729
- export { AcTextElement, ButtonElement, Checkbox, ColourPicker, ColourPickerPopup, CrumbNavigationElement, CrumbPathController, CrumbPathElement, DataDisplayComponent, EditableLabel, EditableNumber, ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, IxfxHexEditorElement, IxfxIconElement, IxfxTimelineElement, LabelledRadialInput, LabelledRangeInput, LedElement, menu_exports as Menu, MillerBaseElement, MillerListElement, MillerTreeController, NarrowedTextElement, PanelElement, PanelGroupElement, PlotDataSeries, PlotSingleAxis, PlotXyAxis, PolarPad, RadialInputElement, RadioGroup, RangeElement, RangeInput, RangeMultiElement, SelectHorizontalElement, SnapContainer, SplitButton, SplitLayoutElement, SwipeElement, TabListElement, TabListItemElement, TabPanelElement, TabPanelsElement, TimelineController, TimelineTrackTabElement, TooltipElement, TreeBaseElement, TreeController, TreeDataModel, TreeListElement, XyPad, applyAgeModification, applyHighlights, attachTimelineInteractions, buildHighlightTargets, clearHighlights, computeColour, createAcCompletionProvider, createElementIncrSearch, createFuzzySearch, createIncrSearch, getIcon, hasIcon, iconBus, init, monitorIndeterminate, parseColourScaleAttr, readBaseColour, registerIcon, resolveCssVars, resolveGrid, svgToDataUri, timelineStyles };
6519
+ export { AcTextElement, ButtonElement, Checkbox, ColourPicker, ColourPickerPopup, CrumbNavigationElement, CrumbPathController, CrumbPathElement, DataDisplayComponent, EditableLabel, EditableNumber, ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, IxfxHexEditorElement, IxfxIconElement, IxfxTimelineElement, LabelledRadialInput, LabelledRangeInput, LedElement, menu_exports as Menu, MillerBaseElement, MillerListElement, MillerTreeController, NarrowedTextElement, PanelElement, PanelGroupElement, PlotDataSeries, PlotSingleAxis, PlotXyAxis, PolarPad, RadialInputElement, RadioGroup, RangeElement, RangeInput, RangeMultiElement, SelectHorizontalElement, SnapContainer, SplitButton, SplitLayoutElement, SwipeElement, TabListElement, TabListItemElement, TabPanelElement, TabPanelsElement, TimelineController, TimelineTrackTabElement, TooltipElement, TransitoryLabelElement, TreeBaseElement, TreeController, TreeDataModel, TreeListElement, VerticalListElement, XyPad, applyAgeModification, applyHighlights, attachTimelineInteractions, buildHighlightTargets, clearHighlights, computeColour, createAcCompletionProvider, createElementIncrSearch, createFuzzySearch, createIncrSearch, getIcon, hasIcon, iconBus, init, monitorIndeterminate, parseColourScaleAttr, readBaseColour, registerIcon, resolveCssVars, resolveGrid, svgToDataUri, timelineStyles };
5730
6520
 
5731
6521
  //# sourceMappingURL=index.js.map