@ixfx/components 0.7.3 → 0.7.5

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 (141) hide show
  1. package/bundle/index.d.ts +1355 -526
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +3277 -384
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +1 -1
  6. package/dist/ac-text.js +1 -1
  7. package/dist/{ac-token-TCLAZeVg.d.ts → ac-token--_vCHXWw.d.ts} +2 -2
  8. package/dist/{ac-token-TCLAZeVg.d.ts.map → ac-token--_vCHXWw.d.ts.map} +1 -1
  9. package/dist/ac-token.d.ts +1 -1
  10. package/dist/ac-token.js +2 -2
  11. package/dist/button.d.ts +1 -1
  12. package/dist/button.d.ts.map +1 -1
  13. package/dist/colour-picker.d.ts +1 -1
  14. package/dist/crumbs.d.ts +6 -2
  15. package/dist/crumbs.d.ts.map +1 -1
  16. package/dist/crumbs.js +13 -3
  17. package/dist/crumbs.js.map +1 -1
  18. package/dist/{data-grid-Db4QpnII.d.ts → data-grid-CtJ35v8L.d.ts} +59 -2
  19. package/dist/data-grid-CtJ35v8L.d.ts.map +1 -0
  20. package/dist/data-grid.d.ts +1 -1
  21. package/dist/data-grid.js +268 -14
  22. package/dist/data-grid.js.map +1 -1
  23. package/dist/detail-list-BS5dRDda.d.ts +175 -0
  24. package/dist/detail-list-BS5dRDda.d.ts.map +1 -0
  25. package/dist/detail-list.d.ts +3 -0
  26. package/dist/detail-list.js +1031 -0
  27. package/dist/detail-list.js.map +1 -0
  28. package/dist/grid-list-D-GbghSH.d.ts +321 -0
  29. package/dist/grid-list-D-GbghSH.d.ts.map +1 -0
  30. package/dist/grid-list.d.ts +3 -0
  31. package/dist/grid-list.js +994 -0
  32. package/dist/grid-list.js.map +1 -0
  33. package/dist/{grouped-item-lister-BWlC9S4e.d.ts → grouped-item-lister-fdZHVxFM.d.ts} +3 -3
  34. package/dist/{grouped-item-lister-BWlC9S4e.d.ts.map → grouped-item-lister-fdZHVxFM.d.ts.map} +1 -1
  35. package/dist/grouped-item-lister.d.ts +1 -1
  36. package/dist/{icon-DR_3rSyZ.d.ts → icon-CDGprSdE.d.ts} +2 -2
  37. package/dist/icon-CDGprSdE.d.ts.map +1 -0
  38. package/dist/icons.d.ts +2 -2
  39. package/dist/incr-search-DpbSJtgj.js +962 -0
  40. package/dist/incr-search-DpbSJtgj.js.map +1 -0
  41. package/dist/incr-search.d.ts +2 -2
  42. package/dist/incr-search.js +2 -3
  43. package/dist/{index-C59-JEPl.d.ts → index-9AhaHIT2.d.ts} +3 -3
  44. package/dist/{index-C59-JEPl.d.ts.map → index-9AhaHIT2.d.ts.map} +1 -1
  45. package/dist/index-CBS4z1v-.d.ts +365 -0
  46. package/dist/index-CBS4z1v-.d.ts.map +1 -0
  47. package/dist/{index-DsjpDksO.d.ts → index-CS9yM8L-.d.ts} +2 -2
  48. package/dist/{index-DsjpDksO.d.ts.map → index-CS9yM8L-.d.ts.map} +1 -1
  49. package/dist/{index-BUB5SICW.d.ts → index-CoqtMSd9.d.ts} +2 -2
  50. package/dist/{index-BUB5SICW.d.ts.map → index-CoqtMSd9.d.ts.map} +1 -1
  51. package/dist/{index-CJ5fshD3.d.ts → index-UvnoZUAo.d.ts} +2 -2
  52. package/dist/{index-CJ5fshD3.d.ts.map → index-UvnoZUAo.d.ts.map} +1 -1
  53. package/dist/{index-BOUaDIW-.d.ts → index-tq6f8007.d.ts} +2 -2
  54. package/dist/{index-BOUaDIW-.d.ts.map → index-tq6f8007.d.ts.map} +1 -1
  55. package/dist/index.d.ts +188 -243
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +376 -1004
  58. package/dist/index.js.map +1 -1
  59. package/dist/interaction-Cr13azbM.js +3 -0
  60. package/dist/{labelled-input-base-Dp_9KP0G.d.ts → labelled-input-base-DiTme1JO.d.ts} +2 -2
  61. package/dist/{labelled-input-base-Dp_9KP0G.d.ts.map → labelled-input-base-DiTme1JO.d.ts.map} +1 -1
  62. package/dist/labelled-radial-input.d.ts +2 -2
  63. package/dist/labelled-radial-input.d.ts.map +1 -1
  64. package/dist/labelled-range-input.d.ts +1 -1
  65. package/dist/labelled-slider-input.d.ts +1 -1
  66. package/dist/list-item-animation-DuiwgN3l.js +112 -0
  67. package/dist/list-item-animation-DuiwgN3l.js.map +1 -0
  68. package/dist/list-selection-controller-DTFI40li.js +264 -0
  69. package/dist/list-selection-controller-DTFI40li.js.map +1 -0
  70. package/dist/{list-selection-types-DSuRNWpx.d.ts → list-selection-types-B5ioL-dG.d.ts} +6 -1
  71. package/dist/list-selection-types-B5ioL-dG.d.ts.map +1 -0
  72. package/dist/{menu-DMzjkVnK.js → menu-Bg90Qr0B.js} +3 -3
  73. package/dist/{menu-DMzjkVnK.js.map → menu-Bg90Qr0B.js.map} +1 -1
  74. package/dist/{menu-item-D2S4i8u1.js → menu-item-Bx-Fs7jq.js} +3 -3
  75. package/dist/{menu-item-D2S4i8u1.js.map → menu-item-Bx-Fs7jq.js.map} +1 -1
  76. package/dist/{menu-item-ZmkXNjek.d.ts → menu-item-CZi9vy5O.d.ts} +2 -2
  77. package/dist/{menu-item-ZmkXNjek.d.ts.map → menu-item-CZi9vy5O.d.ts.map} +1 -1
  78. package/dist/menu.d.ts +2 -2
  79. package/dist/menu.js +2 -2
  80. package/dist/miller.d.ts +82 -4
  81. package/dist/miller.d.ts.map +1 -1
  82. package/dist/miller.js +329 -70
  83. package/dist/miller.js.map +1 -1
  84. package/dist/narrowed-text.js +3 -4
  85. package/dist/narrowed-text.js.map +1 -1
  86. package/dist/panel.d.ts +1 -1
  87. package/dist/plots.js +1 -1
  88. package/dist/select-horiz.js +2 -2
  89. package/dist/{split-layout-C5SYbDrq.d.ts → split-layout-JK3xWVX2.d.ts} +2 -2
  90. package/dist/{split-layout-C5SYbDrq.d.ts.map → split-layout-JK3xWVX2.d.ts.map} +1 -1
  91. package/dist/split-layout.d.ts +1 -1
  92. package/dist/{tab-list-DbMIL520.d.ts → tab-list-CGyPt07Z.d.ts} +2 -2
  93. package/dist/{tab-list-DbMIL520.d.ts.map → tab-list-CGyPt07Z.d.ts.map} +1 -1
  94. package/dist/tabs.d.ts +1 -1
  95. package/dist/{tickled-controller-Ds1DMyG7.d.ts → tickled-controller-Bn3YdQsM.d.ts} +12 -1
  96. package/dist/{tickled-controller-Ds1DMyG7.d.ts.map → tickled-controller-Bn3YdQsM.d.ts.map} +1 -1
  97. package/dist/{tickled-controller-h9GmJ_bU.js → tickled-controller-C66DgJHl.js} +16 -1
  98. package/dist/tickled-controller-C66DgJHl.js.map +1 -0
  99. package/dist/{titlebar-B23MrIbI.d.ts → titlebar-Bj5pfdw_.d.ts} +2 -2
  100. package/dist/{titlebar-B23MrIbI.d.ts.map → titlebar-Bj5pfdw_.d.ts.map} +1 -1
  101. package/dist/titlebar.d.ts +1 -1
  102. package/dist/{tree-Ch4W8qXQ.js → tree-DAii2A1g.js} +190 -29
  103. package/dist/tree-DAii2A1g.js.map +1 -0
  104. package/dist/{tree-component-BvV4muxx.d.ts → tree-component-F6qZ0Gdv.d.ts} +9 -1
  105. package/dist/{tree-component-BvV4muxx.d.ts.map → tree-component-F6qZ0Gdv.d.ts.map} +1 -1
  106. package/dist/tree.d.ts +28 -4
  107. package/dist/tree.d.ts.map +1 -1
  108. package/dist/tree.js +1 -1
  109. package/dist/vertical-list-DwtCPy1b.d.ts +143 -0
  110. package/dist/vertical-list-DwtCPy1b.d.ts.map +1 -0
  111. package/dist/vertical-list.d.ts +3 -121
  112. package/dist/vertical-list.js +642 -1
  113. package/dist/vertical-list.js.map +1 -0
  114. package/dist/{xy-axis-DWizs0bt.js → xy-axis-VrX8dmvS.js} +2 -2
  115. package/dist/{xy-axis-DWizs0bt.js.map → xy-axis-VrX8dmvS.js.map} +1 -1
  116. package/docs-user/README.md +1 -0
  117. package/docs-user/data-grid.md +70 -2
  118. package/docs-user/detail-list.md +39 -1
  119. package/docs-user/grid-list.md +298 -0
  120. package/docs-user/incr-search.md +12 -2
  121. package/docs-user/index.json +7 -2
  122. package/docs-user/llms.txt +1 -0
  123. package/docs-user/tree.md +35 -1
  124. package/docs-user/vertical-list.md +58 -2
  125. package/llms.txt +1 -0
  126. package/package.json +17 -2
  127. package/dist/data-grid-Db4QpnII.d.ts.map +0 -1
  128. package/dist/element-search-Y8SRfPGM.js +0 -185
  129. package/dist/element-search-Y8SRfPGM.js.map +0 -1
  130. package/dist/icon-DR_3rSyZ.d.ts.map +0 -1
  131. package/dist/incr-search-vCzuao-2.js +0 -137
  132. package/dist/incr-search-vCzuao-2.js.map +0 -1
  133. package/dist/index-Cu5i8zZY.d.ts +0 -160
  134. package/dist/index-Cu5i8zZY.d.ts.map +0 -1
  135. package/dist/interaction-D5XdKzbR.js +0 -2
  136. package/dist/list-selection-types-DSuRNWpx.d.ts.map +0 -1
  137. package/dist/tickled-controller-h9GmJ_bU.js.map +0 -1
  138. package/dist/tree-Ch4W8qXQ.js.map +0 -1
  139. package/dist/vertical-list-B4w_ksJk.js +0 -814
  140. package/dist/vertical-list-B4w_ksJk.js.map +0 -1
  141. package/dist/vertical-list.d.ts.map +0 -1
package/bundle/index.d.ts CHANGED
@@ -2223,6 +2223,14 @@ interface TreeComponent extends EventTarget {
2223
2223
  * Returns `true` if a matching node was found.
2224
2224
  */
2225
2225
  navigateToNode: (predicate: (node: TreeNode) => boolean) => boolean;
2226
+ /**
2227
+ * Expand ancestors of the node with `key` and move the keyboard cursor to it,
2228
+ * scrolling it into view — **without** changing the selection. Returns `true`
2229
+ * if the node was found. Used by incremental-search "navigate" mode.
2230
+ */
2231
+ revealKey: (key: string) => boolean;
2232
+ /** Replace the selection with `nodes` (subject to `selectionFilter`). Used by incremental-search "select" mode. */
2233
+ selectMany: (nodes: Iterable<TreeNode>) => void;
2226
2234
  /**
2227
2235
  * Returns all nodes currently visible in the rendered output, in render order,
2228
2236
  * with their depth (0-based, root's children are depth 0).
@@ -2411,6 +2419,10 @@ declare class CrumbNavigationElement extends LitElement implements TreeComponent
2411
2419
  navigateTo(keys: readonly string[]): boolean;
2412
2420
  /** Navigate to the first node matching the predicate. Returns false if not found. */
2413
2421
  navigateToNode(predicate: (node: TreeNode) => boolean): boolean;
2422
+ /** `TreeComponent` parity — a crumb path always follows the selection, so this just navigates to `key`. */
2423
+ revealKey(key: string): boolean;
2424
+ /** `TreeComponent` parity — a crumb path is a single selection, so only the last node is kept. */
2425
+ selectMany(nodes: Iterable<TreeNode>): void;
2414
2426
  render(): TemplateResult<1>;
2415
2427
  static styles: CSSResult[];
2416
2428
  }
@@ -2590,6 +2602,366 @@ type BuiltInFormatterOptions = {
2590
2602
  type DataGridGetRowKey<R> = (row: R, index: number) => string;
2591
2603
  type DataGridGroupBy<R> = string | ((row: R) => string);
2592
2604
  type DataGridGroupLabel = (groupKey: string, rows: readonly unknown[]) => string;
2605
+ /** Whether the data-grid renders its built-in header column/group menu. */
2606
+ type DataGridColumnMenu = `auto` | `none`;
2607
+ //#endregion
2608
+ //#region src/incr-search/types.d.ts
2609
+ type IncrSearchResult<T> = {
2610
+ readonly item: T;
2611
+ readonly positions: ReadonlySet<number>;
2612
+ readonly score: number;
2613
+ };
2614
+ type IncrSearchState<T> = {
2615
+ readonly query: string;
2616
+ readonly results: ReadonlyArray<IncrSearchResult<T>>;
2617
+ readonly positionsByItem: ReadonlyMap<T, ReadonlySet<number>>;
2618
+ };
2619
+ type IncrSearchChangeCallback<T> = (state: IncrSearchState<T>) => void;
2620
+ type IncrSearchOptions<T> = {
2621
+ readonly items?: readonly T[];
2622
+ readonly selector?: (item: T) => string;
2623
+ readonly fzf?: Partial<FzfOptions<T>>;
2624
+ readonly onChange?: IncrSearchChangeCallback<T>;
2625
+ };
2626
+ type IncrSearch<T> = {
2627
+ readonly setItems: (items: readonly T[], signal?: AbortSignal) => Promise<void>;
2628
+ readonly setQuery: (query: string, signal?: AbortSignal) => Promise<IncrSearchState<T>>;
2629
+ readonly clearQuery: () => Promise<void>;
2630
+ readonly state: IncrSearchState<T>;
2631
+ readonly onChange: (cb: IncrSearchChangeCallback<T>) => () => void;
2632
+ readonly dispose: () => void;
2633
+ };
2634
+ type FuzzySearchOptions<T> = {
2635
+ readonly selector?: (item: T) => string;
2636
+ readonly fzf?: Partial<FzfOptions<T>>;
2637
+ };
2638
+ type FuzzySearch<T> = {
2639
+ readonly find: (query: string) => ReadonlyArray<IncrSearchResult<T>>;
2640
+ readonly items: readonly T[];
2641
+ };
2642
+ type HighlightTarget = {
2643
+ readonly element: Element;
2644
+ readonly text?: string;
2645
+ readonly positions: ReadonlySet<number>;
2646
+ };
2647
+ type HighlightOptions = {
2648
+ readonly key?: string;
2649
+ };
2650
+ type ElementIncrSearchOptions = {
2651
+ readonly container: Element;
2652
+ readonly itemSelector: string;
2653
+ readonly getLabel?: (el: Element) => string;
2654
+ readonly getKey?: (el: Element) => string;
2655
+ readonly labelSelector?: string;
2656
+ readonly highlightKey?: string;
2657
+ readonly fzf?: Partial<FzfOptions<{
2658
+ key: string;
2659
+ label: string;
2660
+ }>>;
2661
+ readonly onChange?: IncrSearchChangeCallback<{
2662
+ key: string;
2663
+ label: string;
2664
+ }>;
2665
+ };
2666
+ //#endregion
2667
+ //#region src/incr-search/ac-adapter.d.ts
2668
+ /**
2669
+ * Creates an ixfx-ac-text-compatible `completionProvider` function from a
2670
+ * static item list. Uses synchronous fuzzy search wrapped in a Promise so it
2671
+ * fits the async provider signature.
2672
+ *
2673
+ * Each returned item has `positions` populated with matched character indices,
2674
+ * which `ixfx-ac-text` uses to render CSS Custom Highlights on the label.
2675
+ *
2676
+ * Empty query returns all items in original order (no positions).
2677
+ * A cancelled signal causes the returned promise to reject with an AbortError.
2678
+ */
2679
+ declare function createAcCompletionProvider<T extends {
2680
+ label: string;
2681
+ }>(items: readonly T[], options?: Pick<FuzzySearchOptions<T>, `selector`>): (query: string, signal: AbortSignal) => Promise<Array<T & {
2682
+ positions: ReadonlySet<number>;
2683
+ }>>;
2684
+ //#endregion
2685
+ //#region src/incr-search/controller-tree.d.ts
2686
+ type IncrSearchTreeOptions = {
2687
+ selector: (item: {
2688
+ node: TreeNode;
2689
+ depth: number;
2690
+ }) => string;
2691
+ /**
2692
+ * CSS selector for the label elements inside the shadow root.
2693
+ * Defaults to `.tree-label` (suitable for ixfx-tree-list).
2694
+ * Use `.label` for ixfx-miller-list.
2695
+ */
2696
+ labelSelector?: string;
2697
+ highlightKey?: string;
2698
+ input?: HTMLInputElement;
2699
+ fzf?: Partial<FzfOptions<{
2700
+ node: TreeNode;
2701
+ depth: number;
2702
+ }>>;
2703
+ };
2704
+ /**
2705
+ * External-input filter-search controller for `TreeSearchHost` components.
2706
+ *
2707
+ * @deprecated `ixfx-tree-list` / `ixfx-miller-list` now have a built-in
2708
+ * incremental-search popover with navigate / select / filter modes — invoke
2709
+ * `el.registry.invoke('list.search.filter')` (see `docs/infra-incremental.md`)
2710
+ * instead of wiring an external `<input>`. This class remains for existing
2711
+ * consumers and covers filter mode only.
2712
+ *
2713
+ * @example Using with ixfx-tree-list:
2714
+ * ```typescript
2715
+ * const ctrl = new IncrSearchTreeController(myTreeList, {
2716
+ * selector: item => item.node.item.label,
2717
+ * });
2718
+ * ctrl.connect();
2719
+ * ```
2720
+ *
2721
+ * @example Using with ixfx-miller-list (different label selector):
2722
+ * ```typescript
2723
+ * const ctrl = new IncrSearchTreeController(myMillerList, {
2724
+ * selector: item => item.node.item.label,
2725
+ * labelSelector: '.label',
2726
+ * });
2727
+ * ctrl.connect();
2728
+ * ```
2729
+ */
2730
+ declare class IncrSearchTreeController {
2731
+ #private;
2732
+ constructor(el: TreeSearchHost, opts: IncrSearchTreeOptions);
2733
+ connect(): void;
2734
+ disconnect(): void;
2735
+ setQuery(query: string): Promise<void>;
2736
+ clearQuery(): Promise<void>;
2737
+ }
2738
+ //#endregion
2739
+ //#region src/incr-search/list-search-controller.d.ts
2740
+ /**
2741
+ * The three things incremental search can do to a list / tree component. See
2742
+ * `docs/infra-incremental.md`.
2743
+ *
2744
+ * - `navigate` — move the cursor to the best match; ↑/↓ cycle between matches;
2745
+ * Enter activates the current match and closes.
2746
+ * - `select` — (re)select every item whose label matches, live as you type.
2747
+ * - `filter` — hide items that don't match; restored when the popover closes.
2748
+ */
2749
+ type ListSearchMode = `navigate` | `select` | `filter`;
2750
+ /** Canonical order — used for the switch-row and to normalise a requested set. */
2751
+ declare const LIST_SEARCH_MODES: readonly ListSearchMode[];
2752
+ type SearchItem = {
2753
+ readonly key: string;
2754
+ readonly label: string;
2755
+ };
2756
+ /**
2757
+ * Everything {@link ListSearchController} needs to drive a specific host. One is
2758
+ * supplied per component; `createElementListSearchAdapter` and
2759
+ * `createTreeListSearchAdapter` cover the common shapes.
2760
+ */
2761
+ interface ListSearchAdapter<TItem> {
2762
+ /** All searchable items, in display order. */
2763
+ getItems: () => readonly TItem[];
2764
+ /** Text matched against the query. */
2765
+ getLabel: (item: TItem) => string;
2766
+ /** Stable identity for an item. */
2767
+ getKey: (item: TItem) => string;
2768
+ /** `navigate`: move the cursor to `item` and reveal it. `undefined` = no-op. */
2769
+ focusItem: (item: TItem | undefined) => void;
2770
+ /** `navigate` + Enter: activate `item` (falls back to `focusItem`). */
2771
+ activateItem?: (item: TItem) => void;
2772
+ /** `select` / "Select matches": replace the selection with `items`. */
2773
+ selectItems: (items: readonly TItem[]) => void;
2774
+ /** `filter`: hide items whose key is not in `matchedKeys`; `undefined` clears the filter. */
2775
+ applyFilter: (matchedKeys: ReadonlySet<string> | undefined) => void;
2776
+ /** Where matched-character highlights are painted (usually the shadow root). */
2777
+ highlightRoot?: () => ShadowRoot | Element | null | undefined;
2778
+ /** CSS selector for the label elements inside {@link highlightRoot}. */
2779
+ highlightSelector?: string;
2780
+ /** Given a label element, the key of the item it belongs to. */
2781
+ highlightKeyOf?: (labelEl: Element) => string | undefined;
2782
+ /** Text of a label element as fzf saw it (defaults to `el.textContent`). */
2783
+ highlightText?: (labelEl: Element) => string;
2784
+ /** `CSS.highlights` registry key. Defaults to `incr-search-highlight`. */
2785
+ highlightKey?: string;
2786
+ /** Element whose child-list mutations should trigger a `refresh()`. */
2787
+ container?: () => Element | null | undefined;
2788
+ }
2789
+ interface ListSearchControllerOptions<TItem> {
2790
+ adapter: ListSearchAdapter<TItem>;
2791
+ /**
2792
+ * Modes this instance offers, as entry points and as in-popover switch
2793
+ * targets. The controller intersects this with {@link LIST_SEARCH_MODES}, so
2794
+ * pass the intersection of the component's own capability and any
2795
+ * consumer-set `search-modes`. Empty ⇒ search disabled. Default: all three.
2796
+ */
2797
+ modes?: readonly ListSearchMode[];
2798
+ fzf?: Partial<FzfOptions<SearchItem>>;
2799
+ placeholder?: string;
2800
+ }
2801
+ type ListSearchHost = ReactiveControllerHost & HTMLElement & {
2802
+ renderRoot?: DocumentFragment | HTMLElement;
2803
+ };
2804
+ /**
2805
+ * Shared brain for the three-mode incremental-search popover. A Lit
2806
+ * `ReactiveController`: the host adds `listSearchStyles` to `static styles`,
2807
+ * drops `${controller.renderField()}` into `render()`, and registers the
2808
+ * commands with {@link registerListSearchCommands}. See `docs/infra-incremental.md`.
2809
+ */
2810
+ declare class ListSearchController<TItem> implements ReactiveController {
2811
+ #private;
2812
+ constructor(host: ListSearchHost, options: ListSearchControllerOptions<TItem>);
2813
+ /** `false` when no modes are available — the host should register no commands and render no field. */
2814
+ get enabled(): boolean;
2815
+ /** The modes actually offered (component capability ∩ consumer request). */
2816
+ get registeredModes(): readonly ListSearchMode[];
2817
+ /**
2818
+ * Replace the offered mode set (normalised to {@link LIST_SEARCH_MODES}
2819
+ * order). If the current mode is dropped the popover closes and falls back to
2820
+ * the first remaining mode. Callers should re-run
2821
+ * {@link registerListSearchCommands} afterwards.
2822
+ */
2823
+ setModes(modes: readonly ListSearchMode[]): void;
2824
+ get isOpen(): boolean;
2825
+ get mode(): ListSearchMode;
2826
+ get query(): string;
2827
+ get matchCount(): number;
2828
+ get matchIndex(): number;
2829
+ hostConnected(): void;
2830
+ hostDisconnected(): void;
2831
+ /** Open the popover in `mode` (clamped to the available set). */
2832
+ open(mode: ListSearchMode): void;
2833
+ /** Close the popover, restoring any live filter. Selection / cursor stay put. */
2834
+ close(): void;
2835
+ setQuery(query: string): void;
2836
+ /** Re-interpret the current query under a new mode (undoing the old mode's effect). */
2837
+ switchMode(next: ListSearchMode): void;
2838
+ /** One-shot: turn the current match set into the selection, staying in the current mode. */
2839
+ selectMatches(): void;
2840
+ nextMatch(): void;
2841
+ prevMatch(): void;
2842
+ /** Enter: in `navigate` activate the current match; then close. */
2843
+ commit(): void;
2844
+ /** Rebuild the searchable item set from the adapter. Called on open and on container mutation. */
2845
+ refresh(): void;
2846
+ /** Popover markup. Pair with `listSearchStyles` in the host's `static styles`. */
2847
+ renderField(): TemplateResult | typeof nothing;
2848
+ }
2849
+ //#endregion
2850
+ //#region src/incr-search/element-list-search-adapter.d.ts
2851
+ /**
2852
+ * The slice of a list component the element adapter drives. `ixfx-grid-list`,
2853
+ * `ixfx-vertical-list` and `ixfx-detail-list` all satisfy it.
2854
+ */
2855
+ interface ElementListSearchHost extends HTMLElement {
2856
+ focusKey: (key: string) => void;
2857
+ selectKeys: (keys: Iterable<string>) => void;
2858
+ }
2859
+ interface ElementListSearchAdapterOptions {
2860
+ /** Selector for item elements, relative to the host. Default `:scope > *`. */
2861
+ itemSelector?: string;
2862
+ getLabel?: (el: Element) => string;
2863
+ getKey?: (el: Element) => string;
2864
+ /** `CSS.highlights` registry key for matched-character highlights. */
2865
+ highlightKey?: string;
2866
+ }
2867
+ /**
2868
+ * A {@link ListSearchAdapter} over the light-DOM item elements of a list
2869
+ * component. Filter mode toggles `hidden` (only on elements it hid itself, so a
2870
+ * consumer's own `hidden` items are left alone). Highlights are painted on the
2871
+ * item elements in the light DOM — the consuming page styles
2872
+ * `::highlight(<highlightKey>)`. See `docs/infra-incremental.md`.
2873
+ */
2874
+ declare function createElementListSearchAdapter(host: ElementListSearchHost, options?: ElementListSearchAdapterOptions): ListSearchAdapter<Element>;
2875
+ //#endregion
2876
+ //#region src/incr-search/element-search.d.ts
2877
+ type ElementItem = {
2878
+ readonly key: string;
2879
+ readonly label: string;
2880
+ };
2881
+ type ElementIncrSearch = {
2882
+ readonly setQuery: (query: string, signal?: AbortSignal) => Promise<void>;
2883
+ readonly clearQuery: () => Promise<void>;
2884
+ readonly refresh: () => void;
2885
+ readonly onChange: (cb: IncrSearchChangeCallback<ElementItem>) => () => void;
2886
+ readonly dispose: () => void;
2887
+ };
2888
+ /**
2889
+ * DOM filter-search over a container's item elements (sets `hidden` on
2890
+ * non-matches, applies highlights).
2891
+ *
2892
+ * @deprecated The list components (`ixfx-grid-list`, `ixfx-vertical-list`,
2893
+ * `ixfx-detail-list`, …) now have a built-in navigate / select / filter search
2894
+ * popover — see `docs/infra-incremental.md` and `ListSearchController`. Kept for
2895
+ * standalone / non-component use.
2896
+ */
2897
+ declare function createElementIncrSearch(opts: ElementIncrSearchOptions): ElementIncrSearch;
2898
+ //#endregion
2899
+ //#region src/incr-search/fuzzy.d.ts
2900
+ declare function createFuzzySearch<T>(items: readonly T[], options?: FuzzySearchOptions<T>): FuzzySearch<T>;
2901
+ //#endregion
2902
+ //#region src/incr-search/highlight.d.ts
2903
+ declare function applyHighlights(targets: readonly HighlightTarget[], options?: HighlightOptions): void;
2904
+ declare function clearHighlights(options?: HighlightOptions): void;
2905
+ declare function buildHighlightTargets<T>(root: ShadowRoot | Element, itemSelector: string, positionsByItem: ReadonlyMap<T, ReadonlySet<number>>, getItem: (el: Element) => T | undefined, getText: (el: Element) => string): HighlightTarget[];
2906
+ //#endregion
2907
+ //#region src/incr-search/incr-search.d.ts
2908
+ declare function createIncrSearch<T>(options?: IncrSearchOptions<T>): IncrSearch<T>;
2909
+ //#endregion
2910
+ //#region src/incr-search/list-search-commands.d.ts
2911
+ /** Command ids registered by {@link registerListSearchCommands}, keyed by mode. */
2912
+ declare const LIST_SEARCH_COMMAND_IDS: Readonly<Record<ListSearchMode, string>>;
2913
+ interface RegisterListSearchCommandsOptions {
2914
+ /**
2915
+ * Prefix for command ids, e.g. `grid-list` ⇒ `grid-list.search.filter`. When
2916
+ * omitted the shared ids from {@link LIST_SEARCH_COMMAND_IDS} are used so a
2917
+ * single dispatch (`ixfx-grouped-item-lister.dispatch('list.search.filter')`)
2918
+ * fans out to every list.
2919
+ */
2920
+ idPrefix?: string;
2921
+ }
2922
+ /**
2923
+ * Register one command per mode the controller offers (see
2924
+ * `controller.registeredModes`). Each command opens the search popover in its
2925
+ * mode. Returns a function that unregisters them again — call it from
2926
+ * `disconnectedCallback`. See `docs/infra-incremental.md`.
2927
+ */
2928
+ declare function registerListSearchCommands<T>(registry: CommandRegistry<unknown>, controller: ListSearchController<T>, options?: RegisterListSearchCommandsOptions): () => void;
2929
+ //#endregion
2930
+ //#region src/incr-search/list-search-styles.d.ts
2931
+ /**
2932
+ * Styles for the incremental-search popover rendered by
2933
+ * `ListSearchController.renderField()`. Add to a component's `static styles`;
2934
+ * the class names are the contract between this fragment and `renderField()`.
2935
+ *
2936
+ * The host must give the popover a positioned ancestor (a wrapper with
2937
+ * `position: relative`, or `:host { position: relative }`). Tunables:
2938
+ * `--list-search-inset` (default `8px`) offsets it from the top-right corner.
2939
+ *
2940
+ * See `docs/infra-incremental.md`.
2941
+ */
2942
+ declare const listSearchStyles: CSSResult;
2943
+ //#endregion
2944
+ //#region src/incr-search/tree-list-search-adapter.d.ts
2945
+ type TreeSearchItem = {
2946
+ node: TreeNode;
2947
+ depth: number;
2948
+ };
2949
+ interface TreeListSearchAdapterOptions {
2950
+ /** Label-element selector inside the shadow root. Default `.tree-label`; `ixfx-miller-list` uses `.label`. */
2951
+ labelSelector?: string;
2952
+ /** `CSS.highlights` registry key for matched-character highlights. */
2953
+ highlightKey?: string;
2954
+ getLabel?: (item: TreeSearchItem) => string;
2955
+ }
2956
+ /**
2957
+ * A {@link ListSearchAdapter} over any `TreeSearchHost` (`ixfx-tree-list`,
2958
+ * `ixfx-miller-list`, `ixfx-crumb-navigation`). Navigate reveals the match
2959
+ * (expands its ancestors, moves the cursor); select drives `selectMany`; filter
2960
+ * sets `filterPredicate`. The item set is the whole tree — `getNodes()` returns
2961
+ * every node regardless of expansion or an active filter — so refining a query
2962
+ * can always re-surface a node. See `docs/infra-incremental.md`.
2963
+ */
2964
+ declare function createTreeListSearchAdapter(host: TreeSearchHost, options?: TreeListSearchAdapterOptions): ListSearchAdapter<TreeSearchItem>;
2593
2965
  //#endregion
2594
2966
  //#region src/menu/menu-bar.d.ts
2595
2967
  declare class MenuBar extends LitElement {
@@ -2822,6 +3194,7 @@ interface DataGridElementEventMap {
2822
3194
  'datagrid-group-change': DataGridGroupChangeEvent;
2823
3195
  }
2824
3196
  declare class DataGridElement extends LitElement {
3197
+ #private;
2825
3198
  static styles: CSSResult[];
2826
3199
  columns: DataGridColumn[];
2827
3200
  rows: unknown[];
@@ -2839,7 +3212,27 @@ declare class DataGridElement extends LitElement {
2839
3212
  /** Columns keys that can be grouped by; undefined = all groupable columns */
2840
3213
  groupableColumns: string[] | undefined;
2841
3214
  crossGroupSelection: boolean;
3215
+ /**
3216
+ * `auto` (default): render the built-in header column/group menu.
3217
+ * `none`: don't render it — for hosts that supply their own column UI via
3218
+ * `column.visible` + `datagrid-column-visibility`.
3219
+ */
3220
+ columnMenu: DataGridColumnMenu;
2842
3221
  globalFormatter?: GlobalFormatter;
3222
+ /**
3223
+ * Predicate used by incremental filter-search (and callable directly). Rows
3224
+ * for which it returns `false` are dropped from the flat list — hidden from
3225
+ * view and navigation.
3226
+ */
3227
+ filterPredicate?: (row: unknown) => boolean;
3228
+ /** Text a row is matched against by incremental search. Default: its visible cells joined by a space. */
3229
+ rowSearchText?: (row: unknown) => string;
3230
+ /**
3231
+ * Space-separated subset of `navigate select filter` — limits which
3232
+ * incremental-search modes are offered. Unset ⇒ all three; empty ⇒ search
3233
+ * disabled. See `docs/infra-incremental.md`.
3234
+ */
3235
+ searchModes: string | undefined;
2843
3236
  private _columnFormatters;
2844
3237
  private _selectedKeys;
2845
3238
  private _scrollTop;
@@ -2858,6 +3251,10 @@ declare class DataGridElement extends LitElement {
2858
3251
  private _sortedRows;
2859
3252
  private _flat;
2860
3253
  private _flatKeys;
3254
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
3255
+ readonly search: ListSearchController<unknown>;
3256
+ /** Command registry carrying this grid's `list.search.*` commands. */
3257
+ get registry(): CommandRegistry<unknown> | undefined;
2861
3258
  private _visibleColumns;
2862
3259
  private _colOffsets;
2863
3260
  private _colWidthSum;
@@ -2865,6 +3262,11 @@ declare class DataGridElement extends LitElement {
2865
3262
  private _drag;
2866
3263
  connectedCallback(): void;
2867
3264
  disconnectedCallback(): void;
3265
+ /**
3266
+ * Dispatch a command to this grid — routes through the command registry so
3267
+ * `list.search.*` (and any other registered commands) work.
3268
+ */
3269
+ dispatch(commandId: CommandId, args?: Record<string, unknown>): void;
2868
3270
  private _onFocusOut;
2869
3271
  protected firstUpdated(): void;
2870
3272
  protected updated(changed: Map<string, unknown>): void;
@@ -2883,6 +3285,29 @@ declare class DataGridElement extends LitElement {
2883
3285
  private _anchorKey;
2884
3286
  private _scrollRowIntoView;
2885
3287
  private _getRowForKey;
3288
+ /** The selected row keys (read-only). */
3289
+ get selectedKeys(): ReadonlySet<string>;
3290
+ /** Replace the selection with these row keys (clamped to known rows). */
3291
+ set selectedKeys(keys: Iterable<string>);
3292
+ /**
3293
+ * Replace the selection with the given row keys. Unknown keys are dropped;
3294
+ * in a single-select mode only the last surviving key is kept;
3295
+ * `selectionMode="none"` clears. Fires `datagrid-select` with the previous
3296
+ * set when the selection actually changes.
3297
+ */
3298
+ selectKeys(keys: Iterable<string>): void;
3299
+ /** The row key under the cursor, or `undefined`. */
3300
+ get tickledKey(): string | undefined;
3301
+ /** Move the cursor to this row key and scroll it into view. */
3302
+ tickleRow(key: string): void;
3303
+ /**
3304
+ * Append rows without the full O(n log n) rebuild that reassigning `rows`
3305
+ * incurs. `rows` still gets a new array reference (reactivity is preserved),
3306
+ * but the derived arrays are extended over the appended slice only. When a
3307
+ * sort is active the new rows show unsorted for one frame, then a single
3308
+ * coalesced re-sort runs. Scroll position, selection and cursor are kept.
3309
+ */
3310
+ appendRows(rows: readonly unknown[]): void;
2886
3311
  private _replaceSelection;
2887
3312
  private _toggleSelection;
2888
3313
  private _rangeSelectTo;
@@ -2925,6 +3350,69 @@ interface DataGridElement {
2925
3350
  removeEventListener: (<K extends keyof DataGridElementEventMap>(type: K, listener: (this: DataGridElement, event: DataGridElementEventMap[K]) => void, options?: boolean | EventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions) => void);
2926
3351
  }
2927
3352
  //#endregion
3353
+ //#region src/data-table/data-table.d.ts
3354
+ type DataTableRow = {
3355
+ label: string;
3356
+ value: string | number | boolean | Node | TemplateResult;
3357
+ fullWidth?: boolean;
3358
+ detail?: string | TemplateResult;
3359
+ id?: string;
3360
+ };
3361
+ type DataTableRowClickDetail = {
3362
+ readonly row: DataTableRow;
3363
+ readonly index: number;
3364
+ readonly selected: boolean;
3365
+ };
3366
+ type DataTableRowClickEvent = CustomEvent<DataTableRowClickDetail>;
3367
+ interface DataTableElementEventMap {
3368
+ 'data-table-row-click': DataTableRowClickEvent;
3369
+ }
3370
+ declare class DataTableElement extends LitElement {
3371
+ #private;
3372
+ static styles: CSSResult[];
3373
+ rows: readonly DataTableRow[];
3374
+ selectedIndex: number | undefined;
3375
+ /**
3376
+ * How long (ms) the pointer must rest on a hovered row before its detail
3377
+ * panel is revealed. The tickled highlight itself appears immediately on
3378
+ * hover; only the detail panel is debounced. Clicking a row reveals its
3379
+ * detail straight away, ignoring this delay.
3380
+ */
3381
+ tickleDelay: number;
3382
+ /**
3383
+ * Table layout.
3384
+ * - `auto` (default): responsive — widens to multiple pair-columns on wide
3385
+ * containers, and stacks key above value once narrower than
3386
+ * {@link narrowBreakpoint}.
3387
+ * - `rows`: always stacked (key above value), regardless of width.
3388
+ * - `columns`: always a two-column key/value grid, regardless of width.
3389
+ */
3390
+ layout: `auto` | `rows` | `columns`;
3391
+ /**
3392
+ * Inline width (px) at or below which the `auto` layout switches to its
3393
+ * stacked, key-above-value form. Ignored when {@link layout} is locked.
3394
+ */
3395
+ narrowBreakpoint: number;
3396
+ private _tickled;
3397
+ /** Index of the row whose detail panel is currently revealed, if any. */
3398
+ private _detailIndex;
3399
+ /** Whether the table is currently rendering in its stacked form. */
3400
+ private _stacked;
3401
+ connectedCallback(): void;
3402
+ disconnectedCallback(): void;
3403
+ willUpdate(changed: PropertyValues<this>): void;
3404
+ render(): ReturnType<typeof html>;
3405
+ }
3406
+ declare global {
3407
+ interface HTMLElementTagNameMap {
3408
+ 'ixfx-data-table': DataTableElement;
3409
+ }
3410
+ }
3411
+ interface DataTableElement {
3412
+ addEventListener<K extends keyof DataTableElementEventMap>(type: K, listener: (this: DataTableElement, event: DataTableElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
3413
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
3414
+ }
3415
+ //#endregion
2928
3416
  //#region src/interaction/list-selection-types.d.ts
2929
3417
  /**
2930
3418
  * Shared list selection types.
@@ -2951,6 +3439,11 @@ type ListInteractionMode = `implicit` | `standard` | `manual` | `checked` | `sti
2951
3439
  type ListSelectDetail = {
2952
3440
  readonly selected: ReadonlySet<Element>;
2953
3441
  readonly previous: ReadonlySet<Element>;
3442
+ /**
3443
+ * The selection as stable key strings (`data-key` / `data-value`). Empty
3444
+ * when items carry no key. Additive to `selected`.
3445
+ */
3446
+ readonly selectedKeys: ReadonlySet<string>;
2954
3447
  };
2955
3448
  type ListTickleDetail = {
2956
3449
  readonly item: Element;
@@ -3016,21 +3509,34 @@ declare class VerticalListElement extends LitElement {
3016
3509
  * : html``;
3017
3510
  */
3018
3511
  checkboxRenderer: ((checked: boolean) => unknown) | CustomCheckboxOptions | undefined;
3019
- private _searchVisible;
3020
- private _searchQuery;
3021
- private _searchInputEl;
3512
+ /**
3513
+ * Space-separated subset of `navigate select filter` — limits which
3514
+ * incremental-search modes are offered. Unset ⇒ all three; empty ⇒ search
3515
+ * disabled. See `docs/infra-incremental.md`.
3516
+ */
3517
+ searchModes: string | undefined;
3022
3518
  private readonly selection;
3023
3519
  private tickled;
3520
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
3521
+ readonly search: ListSearchController<Element>;
3522
+ /** Command registry carrying this list's `list.search.*` commands. */
3523
+ get registry(): CommandRegistry<unknown> | undefined;
3024
3524
  connectedCallback(): void;
3025
3525
  disconnectedCallback(): void;
3026
- firstUpdated(): void;
3027
3526
  updated(changed: PropertyValues): void;
3028
3527
  /** The most recently selected item, or `undefined` if nothing is selected. */
3029
3528
  get selectedItem(): Element | undefined;
3030
3529
  /** The full current selection set (read-only). */
3031
3530
  get selectedItems(): ReadonlySet<Element>;
3032
3531
  addItem(item: Element | string, options?: AddItemOptions): void;
3033
- removeItem(item: Element): void;
3532
+ /**
3533
+ * Collapse + fade `item` out, then detach it. The rows below slide up to
3534
+ * close the gap. Resolves once the element has actually been removed.
3535
+ * Under `prefers-reduced-motion: reduce` it's removed immediately.
3536
+ */
3537
+ removeItem(item: Element): Promise<void>;
3538
+ /** {@link removeItem} for several items at once. */
3539
+ removeItems(items: Iterable<Element>): Promise<void>;
3034
3540
  clearItems(): void;
3035
3541
  /**
3036
3542
  * Replace the entire item list in one call.
@@ -3039,16 +3545,28 @@ declare class VerticalListElement extends LitElement {
3039
3545
  */
3040
3546
  setItems(items: readonly Element[]): void;
3041
3547
  /**
3042
- * Dispatch a command to this list. No-op by default.
3043
- * Intended for use with `ixfx-grouped-item-lister`'s `dispatch()` method,
3044
- * which forwards commands to all sub-components.
3548
+ * Dispatch a command to this list used by `ixfx-grouped-item-lister` to
3549
+ * forward commands to all sub-components. Routes through the command registry
3550
+ * (so `list.search.*` and any other registered commands work).
3045
3551
  */
3046
- dispatch(_commandId: CommandId, _args?: Record<string, unknown>): void;
3552
+ dispatch(commandId: CommandId, args?: Record<string, unknown>): void;
3047
3553
  select(item: Element): void;
3048
3554
  selectMany(items: Iterable<Element>): void;
3049
3555
  deselect(item: Element): void;
3050
3556
  clearSelection(): void;
3051
3557
  selectAll(): void;
3558
+ /** The selection as stable `data-key` / `data-value` strings. */
3559
+ get selectedKeys(): ReadonlySet<string>;
3560
+ /** The key of the item under the cursor, or `undefined`. */
3561
+ get tickledKey(): string | undefined;
3562
+ /** Replace the selection with the items carrying these keys (unknown keys ignored). */
3563
+ selectKeys(keys: Iterable<string>): void;
3564
+ /** Add items by key to the selection (multi-select modes only). */
3565
+ addSelectedKeys(keys: Iterable<string>): void;
3566
+ /** Remove items by key from the selection. */
3567
+ removeSelectedKeys(keys: Iterable<string>): void;
3568
+ /** Move the cursor to the item with this key and scroll it into view. */
3569
+ focusKey(key: string): void;
3052
3570
  selectedFilter(kind: `selected` | `checked` | `either`): Generator<Element>;
3053
3571
  private _getVisibleItems;
3054
3572
  private _isCheckable;
@@ -3068,16 +3586,12 @@ declare class VerticalListElement extends LitElement {
3068
3586
  private _createCustomCheckbox;
3069
3587
  private _findListItem;
3070
3588
  private _dispatch;
3071
- private _openSearch;
3072
- private _closeSearch;
3073
3589
  private _onPointerOver;
3074
3590
  private _onPointerLeave;
3075
3591
  private _onKeyDown;
3076
3592
  private _onClick;
3077
3593
  private _onDblClick;
3078
3594
  private _activateItem;
3079
- private _onSearchInput;
3080
- private _onSearchKeydown;
3081
3595
  static styles: CSSResult[];
3082
3596
  render(): TemplateResult<1>;
3083
3597
  }
@@ -3142,12 +3656,19 @@ declare class DetailListElement extends LitElement {
3142
3656
  itemWrap: `stop` | `wrap`;
3143
3657
  /** Optional renderer for the checkbox shown in `checked` interactionMode. */
3144
3658
  checkboxRenderer: ((checked: boolean) => unknown) | CustomCheckboxOptions | undefined;
3145
- private _searchVisible;
3146
- private _searchQuery;
3147
- private _searchInputEl;
3659
+ /**
3660
+ * Space-separated subset of `navigate select filter` — limits which
3661
+ * incremental-search modes are offered. Unset ⇒ all three; empty ⇒ search
3662
+ * disabled. See `docs/infra-incremental.md`.
3663
+ */
3664
+ searchModes: string | undefined;
3148
3665
  private _listEl;
3149
3666
  private readonly selection;
3150
3667
  private tickled;
3668
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
3669
+ readonly search: ListSearchController<Element>;
3670
+ /** Command registry carrying this list's `list.search.*` commands. */
3671
+ get registry(): CommandRegistry<unknown> | undefined;
3151
3672
  connectedCallback(): void;
3152
3673
  disconnectedCallback(): void;
3153
3674
  firstUpdated(): void;
@@ -3163,8 +3684,14 @@ declare class DetailListElement extends LitElement {
3163
3684
  */
3164
3685
  refreshLayout(): void;
3165
3686
  addItem(item: Element | string, options?: AddItemOptions): void;
3166
- removeItem(item: Element): void;
3167
- clearItems(): void;
3687
+ /**
3688
+ * Collapse + fade `item` out, then detach it; the rows after it slide up to
3689
+ * close the gap. Resolves once removed. Immediate under reduced motion.
3690
+ */
3691
+ removeItem(item: Element): Promise<void>;
3692
+ /** {@link removeItem} for several items at once. */
3693
+ removeItems(items: Iterable<Element>): Promise<void>;
3694
+ clearItems(): void;
3168
3695
  /**
3169
3696
  * Replace the entire item list in one call.
3170
3697
  * Equivalent to `clearItems()` followed by `addItem()` for each element.
@@ -3175,13 +3702,29 @@ declare class DetailListElement extends LitElement {
3175
3702
  * provider. Returns `undefined` for declarative / programmatic elements.
3176
3703
  */
3177
3704
  getItemData(item: HTMLLIElement): unknown;
3178
- /** Dispatch a command to this list. No-op by default (grouped-lister parity). */
3179
- dispatch(_commandId: CommandId, _args?: Record<string, unknown>): void;
3705
+ /**
3706
+ * Dispatch a command to this list — used by `ixfx-grouped-item-lister` to
3707
+ * forward commands. Routes through the command registry (so `list.search.*`
3708
+ * and any other registered commands work).
3709
+ */
3710
+ dispatch(commandId: CommandId, args?: Record<string, unknown>): void;
3180
3711
  select(item: Element): void;
3181
3712
  selectMany(items: Iterable<Element>): void;
3182
3713
  deselect(item: Element): void;
3183
3714
  clearSelection(): void;
3184
3715
  selectAll(): void;
3716
+ /** The selection as stable `data-key` / `data-value` strings. */
3717
+ get selectedKeys(): ReadonlySet<string>;
3718
+ /** The key of the item under the cursor, or `undefined`. */
3719
+ get tickledKey(): string | undefined;
3720
+ /** Replace the selection with the items carrying these keys (unknown keys ignored). */
3721
+ selectKeys(keys: Iterable<string>): void;
3722
+ /** Add items by key to the selection (multi-select modes only). */
3723
+ addSelectedKeys(keys: Iterable<string>): void;
3724
+ /** Remove items by key from the selection. */
3725
+ removeSelectedKeys(keys: Iterable<string>): void;
3726
+ /** Move the cursor to the item with this key and scroll it into view. */
3727
+ focusKey(key: string): void;
3185
3728
  selectedFilter(kind: `selected` | `checked` | `either`): Generator<Element>;
3186
3729
  private _getVisibleItems;
3187
3730
  /**
@@ -3208,8 +3751,6 @@ declare class DetailListElement extends LitElement {
3208
3751
  private _createCustomCheckbox;
3209
3752
  private _findListItem;
3210
3753
  private _dispatch;
3211
- private _openSearch;
3212
- private _closeSearch;
3213
3754
  private _onPointerOver;
3214
3755
  private _onPointerLeave;
3215
3756
  private _onKeyDown;
@@ -3217,8 +3758,6 @@ declare class DetailListElement extends LitElement {
3217
3758
  private _onDblClick;
3218
3759
  private _onWheel;
3219
3760
  private _activateItem;
3220
- private _onSearchInput;
3221
- private _onSearchKeydown;
3222
3761
  static styles: CSSResult[];
3223
3762
  render(): TemplateResult<1>;
3224
3763
  }
@@ -4406,198 +4945,250 @@ declare global {
4406
4945
  }
4407
4946
  }
4408
4947
  //#endregion
4409
- //#region src/grouped-item-lister/types.d.ts
4410
- /**
4411
- * Fired when the selection set changes by any means.
4412
- * Event name: `select`
4413
- */
4414
- type SubComponentSelectDetail<T> = {
4415
- readonly selected: ReadonlySet<T>;
4416
- readonly previous: ReadonlySet<T>;
4417
- };
4418
- /**
4419
- * Fired when an item is explicitly activated (double-click or Enter key).
4420
- * Event name: `activate`
4421
- */
4422
- type SubComponentActivateDetail<T> = {
4423
- readonly item: T;
4424
- };
4425
- /**
4426
- * Fired on a raw pointer click before any selection change.
4427
- * Event name: `item-click`
4428
- */
4429
- type SubComponentItemClickDetail<T> = {
4430
- readonly item: T;
4431
- };
4432
- /**
4433
- * Fired when the pointer hovers over an item or the keyboard cursor moves to it.
4434
- * Event name: `tickle`
4435
- */
4436
- type SubComponentTickleDetail<T> = {
4437
- readonly item: T;
4438
- };
4439
- type SubComponentSelectEvent<T> = CustomEvent<SubComponentSelectDetail<T>>;
4440
- type SubComponentActivateEvent<T> = CustomEvent<SubComponentActivateDetail<T>>;
4441
- type SubComponentItemClickEvent<T> = CustomEvent<SubComponentItemClickDetail<T>>;
4442
- type SubComponentTickleEvent<T> = CustomEvent<SubComponentTickleDetail<T>>;
4443
- interface IGroupedSubComponentEventMap<T> {
4444
- 'select': SubComponentSelectEvent<T>;
4445
- 'activate': SubComponentActivateEvent<T>;
4446
- 'item-click': SubComponentItemClickEvent<T>;
4447
- 'tickle': SubComponentTickleEvent<T>;
4448
- }
4948
+ //#region src/grid-list/types.d.ts
4449
4949
  /**
4450
- * Contract that sub-components passed to `ixfx-grouped-item-lister` must satisfy.
4451
- *
4452
- * All four events (`select`, `activate`, `item-click`, `tickle`) must bubble and be composed
4453
- * so they propagate through the lister's light DOM to external listeners.
4950
+ * How the caption relates to the cell's content.
4951
+ * - `hidden`: no caption is rendered.
4952
+ * - `separate`: content sits in a square; the caption is a detached label
4953
+ * below it. Square and caption are highlighted separately, like macOS
4954
+ * Finder icon view.
4955
+ * - `under` (default): the whole cell is one box — content on top, caption in
4956
+ * its own strip below it, inside the same box. One selection outline.
4957
+ * - `overlaid`: the caption floats on top of the content (see
4958
+ * `GridListCaptionPosition` / `GridListCaptionBackdrop`).
4454
4959
  */
4455
- interface IGroupedSubComponent<T> extends HTMLElement {
4456
- /** Replace the full item list. Called whenever the lister's items or grouping changes. */
4457
- setItems: (items: readonly T[]) => void;
4458
- /** Clear the current selection without firing a `select` event (avoids re-entrant loops). */
4459
- clearSelection: () => void;
4460
- /** The current selection set. */
4461
- readonly selectedItems: ReadonlySet<T>;
4462
- /** Controls how many items can be selected simultaneously. */
4463
- selectionMode: ListSelectionMode;
4464
- /**
4465
- * Forward a command (e.g. sort-order change) to this sub-component.
4466
- * Uses `CommandId` from `@clinth/ui-commands` for interoperability.
4467
- */
4468
- dispatch: (commandId: CommandId, args?: Record<string, unknown>) => void;
4469
- addEventListener: (<K extends keyof IGroupedSubComponentEventMap<T>>(type: K, listener: (event: IGroupedSubComponentEventMap<T>[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
4470
- }
4960
+ type GridListCaptionStyle = `hidden` | `separate` | `under` | `overlaid`;
4961
+ /** Horizontal alignment of caption text (`middle` is the default). */
4962
+ type GridListCaptionAlign = `left` | `middle` | `right`;
4963
+ /** Vertical placement of an `overlaid` caption (`bottom` is the default). */
4964
+ type GridListCaptionPosition = `top` | `middle` | `bottom`;
4471
4965
  /**
4472
- * Factory that creates a sub-component for a given group.
4473
- * Called once per group (or once with `undefined` in ungrouped mode).
4966
+ * Backdrop behind an `overlaid` caption.
4967
+ * - `scrim` (default): flat translucent panel.
4968
+ * - `gradient`: translucent gradient fading away from the caption edge.
4969
+ * - `blur`: frosted / backdrop-blurred panel.
4970
+ * - `none`: no panel — caption text only, with a shadow for legibility.
4474
4971
  */
4475
- type SubComponentFactory<T> = (groupKey: string | undefined) => HTMLElement & IGroupedSubComponent<T>;
4972
+ type GridListCaptionBackdrop = `scrim` | `gradient` | `blur` | `none`;
4476
4973
  /**
4477
- * Fired by `ixfx-grouped-item-lister` after any sub-component fires `select`.
4478
- * Carries the full cross-group selection union and the key of the group whose
4479
- * selection just changed (or `undefined` in ungrouped mode).
4974
+ * Layout / scroll direction.
4975
+ * - `grid` (default): items wrap across as many columns as fit and the list
4976
+ * scrolls vertically.
4977
+ * - `row`: a single row of items that scrolls horizontally.
4978
+ * - `column`: a single column of items that scrolls vertically.
4480
4979
  */
4481
- type GroupedSelectDetail<T> = {
4482
- readonly selected: ReadonlySet<T>;
4483
- readonly groupKey: string | undefined;
4484
- };
4485
- type GroupedSelectEvent<T> = CustomEvent<GroupedSelectDetail<T>>;
4486
- interface GroupedItemListerElementEventMap<T> {
4487
- 'grouped-select': GroupedSelectEvent<T>;
4488
- }
4489
- //#endregion
4490
- //#region src/panel/panel.d.ts
4491
- /** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */
4492
- type PanelOrientation = TitlebarOrientation;
4493
- type PanelVariant = TitlebarVariant;
4494
- type PanelToggleInteraction = TitlebarToggleInteraction;
4495
- type PanelToggleDetail = TitlebarToggleDetail;
4496
- type PanelToggleEvent = TitlebarToggleEvent;
4497
- type PanelCloseEvent = TitlebarCloseEvent;
4498
- interface PanelElementEventMap {
4499
- toggle: PanelToggleEvent;
4500
- close: PanelCloseEvent;
4501
- }
4502
- declare class PanelElement extends LitElement {
4503
- collapsed: boolean;
4504
- orientation: PanelOrientation;
4505
- closable: boolean;
4506
- /** Show the collapse/expand caret and enable toggle behaviour. Defaults to true so existing panels stay collapsible. */
4507
- collapsible: boolean;
4508
- title: string;
4509
- iconName: string;
4510
- toggleInteraction: PanelToggleInteraction;
4511
- variant: PanelVariant;
4512
- /** Suppress the titlebar entirely (content-only chrome, e.g. dock tabbed mode). */
4513
- hideTitlebar: boolean;
4514
- private _onTitlebarToggle;
4515
- private _onCloseClick;
4516
- protected render(): TemplateResult<1>;
4517
- static styles: CSSResult[];
4980
+ type GridListOrientation = `grid` | `row` | `column`;
4981
+ interface GridListSelectDetail {
4982
+ readonly selected: ReadonlySet<Element>;
4983
+ readonly previous: ReadonlySet<Element>;
4984
+ /** The selection as stable `data-key` / `data-value` strings. */
4985
+ readonly selectedKeys: ReadonlySet<string>;
4518
4986
  }
4519
- declare global {
4520
- interface HTMLElementTagNameMap {
4521
- 'ixfx-panel': PanelElement;
4522
- }
4987
+ type GridListSelectEvent = CustomEvent<GridListSelectDetail>;
4988
+ interface GridListActivateDetail {
4989
+ readonly item: Element;
4523
4990
  }
4524
- interface PanelElement {
4525
- addEventListener: (<K extends keyof PanelElementEventMap>(type: K, listener: (this: PanelElement, event: PanelElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
4991
+ type GridListActivateEvent = CustomEvent<GridListActivateDetail>;
4992
+ interface GridListItemClickDetail {
4993
+ readonly item: Element;
4526
4994
  }
4527
- //#endregion
4528
- //#region src/grouped-item-lister/grouped-item-lister.d.ts
4529
- declare class GroupedItemListerElement<T = unknown> extends LitElement {
4530
- #private;
4531
- grouped: boolean;
4532
- crossGroupSelection: boolean;
4533
- get groupBy(): ((item: T) => string) | undefined;
4534
- set groupBy(value: ((item: T) => string) | undefined);
4535
- get factory(): SubComponentFactory<T> | undefined;
4536
- set factory(value: SubComponentFactory<T> | undefined);
4537
- get provider(): IDataProvider<void, T> | undefined;
4538
- set provider(value: IDataProvider<void, T> | undefined);
4539
- /** The union of all selected items across every sub-component. */
4540
- get selectedItems(): ReadonlySet<T>;
4541
- /**
4542
- * Forward a command to all live sub-components.
4543
- * Use this to propagate changes like sort order, filter state, or view mode.
4544
- */
4545
- dispatch(commandId: CommandId, args?: Record<string, unknown>): void;
4546
- protected createRenderRoot(): this;
4547
- connectedCallback(): void;
4548
- disconnectedCallback(): void;
4549
- protected updated(changed: PropertyValues): void;
4550
- protected render(): typeof nothing | TemplateResult<1>;
4995
+ type GridListItemClickEvent = CustomEvent<GridListItemClickDetail>;
4996
+ interface GridListTickleDetail {
4997
+ readonly item: Element;
4551
4998
  }
4552
- declare global {
4553
- interface HTMLElementTagNameMap {
4554
- 'ixfx-grouped-item-lister': GroupedItemListerElement;
4555
- }
4999
+ type GridListTickleEvent = CustomEvent<GridListTickleDetail>;
5000
+ interface GridListElementEventMap {
5001
+ 'list-select': GridListSelectEvent;
5002
+ 'list-activate': GridListActivateEvent;
5003
+ 'list-item-click': GridListItemClickEvent;
5004
+ 'list-tickle': GridListTickleEvent;
4556
5005
  }
4557
- interface GroupedItemListerElement<T> {
4558
- addEventListener: (<K extends keyof GroupedItemListerElementEventMap<T>>(type: K, listener: (this: GroupedItemListerElement<T>, event: GroupedItemListerElementEventMap<T>[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
5006
+ type GridListViewportChangeDetail = {
5007
+ readonly visibleKeys: string[];
5008
+ };
5009
+ type GridListViewportChangeEvent = CustomEvent<GridListViewportChangeDetail>;
5010
+ interface GridListFullElementEventMap extends GridListElementEventMap {
5011
+ 'grid-list-viewport-change': GridListViewportChangeEvent;
4559
5012
  }
4560
5013
  //#endregion
4561
- //#region src/interaction/tickled-controller.d.ts
5014
+ //#region src/interaction/list-selection-controller.d.ts
5015
+ /** Modifier state needed to route a click gesture per interaction mode. */
5016
+ type ListSelectionGesture = {
5017
+ readonly ctrlKey: boolean;
5018
+ readonly metaKey: boolean;
5019
+ readonly shiftKey: boolean;
5020
+ };
5021
+ type ListSelectionModes = {
5022
+ readonly selectionMode: ListSelectionMode;
5023
+ readonly interactionMode: ListInteractionMode;
5024
+ };
4562
5025
  /**
4563
- * Represents an item that can be tickled (highlighted via hover or keyboard navigation)
5026
+ * Configuration supplied by the host component.
5027
+ *
5028
+ * The controller owns selection *state* only — everything DOM- or
5029
+ * component-specific is expressed through these callbacks.
4564
5030
  */
4565
- type TickledItem<T = unknown> = {
5031
+ type ListSelectionControllerConfig<T> = {
5032
+ /** Visible items in navigation order — used for range selection and select-all. */
5033
+ readonly getOrderedItems: () => readonly T[];
5034
+ /** Whether an item may join the selection (e.g. reject `not-checked` rows). */
5035
+ readonly isSelectable: (item: T) => boolean;
5036
+ /** Current modes; read on every gesture so property changes apply immediately. */
5037
+ readonly getModes: () => ListSelectionModes;
4566
5038
  /**
4567
- * Unique identifier for the item (e.g., index, id, path)
5039
+ * Fired after every selection change. The host syncs DOM state
5040
+ * (`data-selected` / `data-checked`), dispatches `list-select`, and
5041
+ * requests an update.
4568
5042
  */
4569
- readonly id: T;
5043
+ readonly onChange: (selected: ReadonlySet<T>, previous: ReadonlySet<T>) => void;
4570
5044
  /**
4571
- * Whether the item is currently enabled/interactive
5045
+ * Optional: derive a stable string key for an item. Enables `selectedKeys`
5046
+ * and `selectKeys()`. When omitted, `selectedKeys` is always empty.
4572
5047
  */
4573
- readonly enabled?: boolean;
5048
+ readonly getKey?: (item: T) => string | undefined;
4574
5049
  };
5050
+ /** Whether the interaction mode allows building a multi-item selection. */
5051
+ declare function isMultiMode(mode: ListInteractionMode): boolean;
4575
5052
  /**
4576
- * Input mode determines which mechanism controls the tickled state
4577
- */
4578
- type InputMode = `keyboard` | `mouse`;
4579
- /**
4580
- * Configuration for TickledController
5053
+ * Generic selection state machine shared by list components.
5054
+ *
5055
+ * Owns the selected set plus the range-selection anchor, the selection
5056
+ * primitives (`replace` / `toggle` / `rangeTo` / `clear` / `selectAll` /
5057
+ * `selectMany` / `deselect`) and the per-interactionMode gesture routers
5058
+ * (`handleClick` / `handleSpace`).
5059
+ *
5060
+ * Identity is generic: both `ixfx-vertical-list` and `ixfx-detail-list` use
5061
+ * `ListSelectionController<Element>`.
5062
+ *
5063
+ * @example
5064
+ * ```ts
5065
+ * const selection = new ListSelectionController<Element>({
5066
+ * getOrderedItems: () => this.getVisibleItems(),
5067
+ * isSelectable: el => !el.hasAttribute(`not-checked`),
5068
+ * getModes: () => ({ selectionMode: this.selectionMode, interactionMode: this.interactionMode }),
5069
+ * onChange: (selected, previous) => {
5070
+ * this.syncItemStates();
5071
+ * this.dispatchEvent(new CustomEvent(`list-select`, { detail: { selected, previous } }));
5072
+ * },
5073
+ * });
5074
+ * ```
4581
5075
  */
4582
- type TickledControllerConfig<T> = {
5076
+ declare class ListSelectionController<T> {
5077
+ #private;
5078
+ constructor(config: ListSelectionControllerConfig<T>);
5079
+ /** The current selection set (read-only). */
5080
+ get selected(): ReadonlySet<T>;
4583
5081
  /**
4584
- * Function to retrieve all items that can be tickled
5082
+ * The current selection as stable string keys (read-only). Empty unless a
5083
+ * `getKey` was supplied in config. Items whose `getKey` returns `undefined`
5084
+ * are omitted.
4585
5085
  */
4586
- getItems: () => ReadonlyArray<TickledItem<T>>;
5086
+ get selectedKeys(): ReadonlySet<string>;
5087
+ /** Anchor for range (shift) selection — the last plainly-selected item. */
5088
+ get anchor(): T | undefined;
5089
+ /** Whether "select all" (Cmd/Ctrl+A) is currently permitted. */
5090
+ canSelectAll(): boolean;
5091
+ /** Whether a multi-item selection can be built in the current modes. */
5092
+ canSelectMultiple(): boolean;
5093
+ /** Replace the entire selection with a single item; updates the anchor. */
5094
+ replace(item: T): void;
5095
+ /** Toggle a single item in/out of the selection without replacing it. Anchor unchanged. */
5096
+ toggle(item: T): void;
5097
+ /** Select the contiguous ordered range from the anchor to `item`. Anchor unchanged. */
5098
+ rangeTo(item: T): void;
5099
+ /** Clear the selection. No change event when the selection is already empty. */
5100
+ clear(): void;
5101
+ /** Select every ordered item that passes `isSelectable`. */
5102
+ selectAll(): void;
4587
5103
  /**
4588
- * Optional callback when an item becomes tickled
4589
- * Use this for side effects like opening submenus
4590
- * @param id - The id of the newly tickled item, or undefined if nothing is tickled
5104
+ * Replace the selection with many items at once. Requires
5105
+ * `selectionMode="multiple"`, throws otherwise. Updates the anchor.
4591
5106
  */
4592
- onTickle?: (id: T | undefined) => void;
5107
+ selectMany(items: Iterable<T>): void;
5108
+ /** Remove a single item from the selection. */
5109
+ deselect(item: T): void;
4593
5110
  /**
4594
- * Optional callback fired after any state change (tickled id or input mode)
4595
- * Use this to sync DOM attributes for slotted content that can't use reactive rendering
4596
- *
4597
- * For components that render items directly, this is usually not needed as
4598
- * Lit's reactive rendering will handle updates automatically via requestUpdate()
4599
- *
4600
- * @example
5111
+ * Replace the selection with the items resolved from `keys`. Keys that
5112
+ * `resolve` cannot map, or that resolve to a non-selectable item, are
5113
+ * ignored. `selectionMode="none"` is a no-op. When multi-select is not
5114
+ * available, only the last resolvable key is kept. `onChange` fires once.
5115
+ */
5116
+ selectKeys(keys: Iterable<string>, resolve: (key: string) => T | undefined): void;
5117
+ /**
5118
+ * Add the items resolved from `keys` to the selection (multi-select only;
5119
+ * a no-op otherwise). `onChange` fires once if anything changed.
5120
+ */
5121
+ addKeys(keys: Iterable<string>, resolve: (key: string) => T | undefined): void;
5122
+ /**
5123
+ * Remove the items resolved from `keys` from the selection. `onChange`
5124
+ * fires once if anything changed.
5125
+ */
5126
+ removeKeys(keys: Iterable<string>, resolve: (key: string) => T | undefined): void;
5127
+ /** Route a click on `item` according to the current interaction mode. */
5128
+ handleClick(item: T, gesture: ListSelectionGesture): void;
5129
+ /** Route a Space keypress on `item` according to the current interaction mode. */
5130
+ handleSpace(item: T): void;
5131
+ /** Drop the range-selection anchor (e.g. when the interaction mode changes). */
5132
+ clearAnchor(): void;
5133
+ /**
5134
+ * Re-key the selection across an identity boundary — e.g. when items are
5135
+ * wrapped/unwrapped and the selected Element references change. Silent:
5136
+ * no `onChange` is fired.
5137
+ */
5138
+ remap(fn: (item: T) => T): void;
5139
+ /**
5140
+ * Hard reset: empty the selection and clear the anchor without firing
5141
+ * `onChange` (e.g. when all items are removed).
5142
+ */
5143
+ reset(): void;
5144
+ /**
5145
+ * Replace the selection and anchor silently (no `onChange`). Used to
5146
+ * re-key the selection when items are rebuilt from data — e.g. matching
5147
+ * new elements to previously selected keys.
5148
+ */
5149
+ seed(items: Iterable<T>, anchor?: T): void;
5150
+ }
5151
+ //#endregion
5152
+ //#region src/interaction/tickled-controller.d.ts
5153
+ /**
5154
+ * Represents an item that can be tickled (highlighted via hover or keyboard navigation)
5155
+ */
5156
+ type TickledItem<T = unknown> = {
5157
+ /**
5158
+ * Unique identifier for the item (e.g., index, id, path)
5159
+ */
5160
+ readonly id: T;
5161
+ /**
5162
+ * Whether the item is currently enabled/interactive
5163
+ */
5164
+ readonly enabled?: boolean;
5165
+ };
5166
+ /**
5167
+ * Input mode determines which mechanism controls the tickled state
5168
+ */
5169
+ type InputMode = `keyboard` | `mouse`;
5170
+ /**
5171
+ * Configuration for TickledController
5172
+ */
5173
+ type TickledControllerConfig<T> = {
5174
+ /**
5175
+ * Function to retrieve all items that can be tickled
5176
+ */
5177
+ getItems: () => ReadonlyArray<TickledItem<T>>;
5178
+ /**
5179
+ * Optional callback when an item becomes tickled
5180
+ * Use this for side effects like opening submenus
5181
+ * @param id - The id of the newly tickled item, or undefined if nothing is tickled
5182
+ */
5183
+ onTickle?: (id: T | undefined) => void;
5184
+ /**
5185
+ * Optional callback fired after any state change (tickled id or input mode)
5186
+ * Use this to sync DOM attributes for slotted content that can't use reactive rendering
5187
+ *
5188
+ * For components that render items directly, this is usually not needed as
5189
+ * Lit's reactive rendering will handle updates automatically via requestUpdate()
5190
+ *
5191
+ * @example
4601
5192
  * ```ts
4602
5193
  * onStateChange: () => {
4603
5194
  * // Sync data-tickled attributes for slotted items
@@ -4700,6 +5291,17 @@ declare class TickledController<T = number> implements ReactiveController {
4700
5291
  * Get the currently tickled item id
4701
5292
  */
4702
5293
  get tickledId(): T | undefined;
5294
+ /**
5295
+ * The item currently under the cursor, or `undefined`. Alias of `tickledId`
5296
+ * for parity with other controllers.
5297
+ */
5298
+ get current(): T | undefined;
5299
+ /**
5300
+ * Move the cursor programmatically (e.g. to reveal a match or re-seat it
5301
+ * after the item set changed). Does not change the input mode. Alias of
5302
+ * `setTickled`.
5303
+ */
5304
+ focus(id: T | undefined): void;
4703
5305
  /**
4704
5306
  * Check if a specific item is tickled
4705
5307
  */
@@ -4752,6 +5354,268 @@ declare class TickledController<T = number> implements ReactiveController {
4752
5354
  setInputMode(mode: InputMode): void;
4753
5355
  }
4754
5356
  //#endregion
5357
+ //#region src/grid-list/grid-list.d.ts
5358
+ declare class GridListElement extends LitElement {
5359
+ #private;
5360
+ static styles: CSSResult[];
5361
+ selectionMode: ListSelectionMode;
5362
+ interactionMode: ListInteractionMode;
5363
+ itemSize: number;
5364
+ gap: number;
5365
+ /**
5366
+ * Layout / scroll direction.
5367
+ * - `grid` (default): items wrap across as many columns as fit, scrolls vertically.
5368
+ * - `row`: a single row of items, scrolls horizontally.
5369
+ * - `column`: a single column of items, scrolls vertically.
5370
+ */
5371
+ orientation: GridListOrientation;
5372
+ /**
5373
+ * How the caption relates to the content — see {@link GridListCaptionStyle}.
5374
+ * - `hidden`: no caption.
5375
+ * - `separate`: detached label below the square, each highlighted on its own.
5376
+ * - `under` (default): one box, content on top, caption strip below it inside.
5377
+ * - `overlaid`: caption floats over the content.
5378
+ */
5379
+ captionStyle: GridListCaptionStyle;
5380
+ /** Horizontal alignment of the caption text: `left`, `middle` (default), `right`. */
5381
+ captionAlign: GridListCaptionAlign;
5382
+ /** `overlaid` only — vertical placement: `top`, `middle`, `bottom` (default). */
5383
+ captionPosition: GridListCaptionPosition;
5384
+ /** `overlaid` only — backdrop behind the caption: `scrim` (default), `gradient`, `blur`, `none`. */
5385
+ captionBackdrop: GridListCaptionBackdrop;
5386
+ /**
5387
+ * Height reserved for the caption in `separate` / `under` styles, in pixels.
5388
+ * Ignored by `overlaid` and `hidden`.
5389
+ */
5390
+ captionHeight: number;
5391
+ itemWrap: `stop` | `wrap`;
5392
+ /**
5393
+ * Predicate used by incremental filter-search (and callable directly). Items
5394
+ * for which it returns `false` are removed from layout and navigation.
5395
+ */
5396
+ filterPredicate: ((el: Element) => boolean) | undefined;
5397
+ /**
5398
+ * Space-separated subset of `navigate select filter` — limits which
5399
+ * incremental-search modes are offered (as commands and in-popover switches).
5400
+ * Unset ⇒ all three; empty ⇒ search disabled. See `docs/infra-incremental.md`.
5401
+ */
5402
+ searchModes: string | undefined;
5403
+ private _scrollTop;
5404
+ private _scrollLeft;
5405
+ private _viewportHeight;
5406
+ private _viewportWidth;
5407
+ readonly selection: ListSelectionController<Element>;
5408
+ readonly tickled: TickledController<Element>;
5409
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
5410
+ readonly search: ListSearchController<Element>;
5411
+ /** Command registry carrying this grid's `list.search.*` commands. */
5412
+ get registry(): CommandRegistry<unknown> | undefined;
5413
+ connectedCallback(): void;
5414
+ disconnectedCallback(): void;
5415
+ protected firstUpdated(): void;
5416
+ protected willUpdate(changed: PropertyValues<this>): void;
5417
+ protected updated(changed: PropertyValues<this>): void;
5418
+ private _getVisibleItems;
5419
+ get count(): number;
5420
+ /**
5421
+ * Number of cells currently rendered in the shadow DOM. With virtualization
5422
+ * this is roughly the visible rows plus overscan, regardless of how large
5423
+ * `count` is — useful for demos/diagnostics.
5424
+ */
5425
+ get renderedCount(): number;
5426
+ get selectedItems(): ReadonlySet<Element>;
5427
+ /** The selection as stable `data-key` / `data-value` strings. */
5428
+ get selectedKeys(): ReadonlySet<string>;
5429
+ select(item: Element): void;
5430
+ selectMany(items: Iterable<Element>): void;
5431
+ deselect(item: Element): void;
5432
+ clearSelection(): void;
5433
+ selectAll(): void;
5434
+ /**
5435
+ * Replace the selection with the items carrying these keys. Unknown keys are
5436
+ * ignored; survives the host rebuilding the item set. Requires each item to
5437
+ * have a `data-key` (or `data-value`).
5438
+ */
5439
+ selectKeys(keys: Iterable<string>): void;
5440
+ /** Add items by key to the selection (multi-select modes only). */
5441
+ addSelectedKeys(keys: Iterable<string>): void;
5442
+ /** Remove items by key from the selection. */
5443
+ removeSelectedKeys(keys: Iterable<string>): void;
5444
+ /** Move the cursor to the item with this key and scroll it into view. */
5445
+ focusKey(key: string): void;
5446
+ /** The key of the item under the cursor, or `undefined`. */
5447
+ get tickledKey(): string | undefined;
5448
+ getItem(key: string): Element | undefined;
5449
+ getItemByIndex(index: number): Element | undefined;
5450
+ getKey(item: Element): string | undefined;
5451
+ visibleKeys(): string[];
5452
+ private _syncItemStates;
5453
+ private _dispatch;
5454
+ protected render(): ReturnType<typeof html>;
5455
+ private _onKeyDown;
5456
+ }
5457
+ declare global {
5458
+ interface HTMLElementTagNameMap {
5459
+ 'ixfx-grid-list': GridListElement;
5460
+ }
5461
+ }
5462
+ interface GridListElement {
5463
+ addEventListener<K extends keyof GridListFullElementEventMap>(type: K, listener: (this: GridListElement, ev: GridListFullElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
5464
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
5465
+ }
5466
+ //#endregion
5467
+ //#region src/grouped-item-lister/types.d.ts
5468
+ /**
5469
+ * Fired when the selection set changes by any means.
5470
+ * Event name: `select`
5471
+ */
5472
+ type SubComponentSelectDetail<T> = {
5473
+ readonly selected: ReadonlySet<T>;
5474
+ readonly previous: ReadonlySet<T>;
5475
+ };
5476
+ /**
5477
+ * Fired when an item is explicitly activated (double-click or Enter key).
5478
+ * Event name: `activate`
5479
+ */
5480
+ type SubComponentActivateDetail<T> = {
5481
+ readonly item: T;
5482
+ };
5483
+ /**
5484
+ * Fired on a raw pointer click before any selection change.
5485
+ * Event name: `item-click`
5486
+ */
5487
+ type SubComponentItemClickDetail<T> = {
5488
+ readonly item: T;
5489
+ };
5490
+ /**
5491
+ * Fired when the pointer hovers over an item or the keyboard cursor moves to it.
5492
+ * Event name: `tickle`
5493
+ */
5494
+ type SubComponentTickleDetail<T> = {
5495
+ readonly item: T;
5496
+ };
5497
+ type SubComponentSelectEvent<T> = CustomEvent<SubComponentSelectDetail<T>>;
5498
+ type SubComponentActivateEvent<T> = CustomEvent<SubComponentActivateDetail<T>>;
5499
+ type SubComponentItemClickEvent<T> = CustomEvent<SubComponentItemClickDetail<T>>;
5500
+ type SubComponentTickleEvent<T> = CustomEvent<SubComponentTickleDetail<T>>;
5501
+ interface IGroupedSubComponentEventMap<T> {
5502
+ 'select': SubComponentSelectEvent<T>;
5503
+ 'activate': SubComponentActivateEvent<T>;
5504
+ 'item-click': SubComponentItemClickEvent<T>;
5505
+ 'tickle': SubComponentTickleEvent<T>;
5506
+ }
5507
+ /**
5508
+ * Contract that sub-components passed to `ixfx-grouped-item-lister` must satisfy.
5509
+ *
5510
+ * All four events (`select`, `activate`, `item-click`, `tickle`) must bubble and be composed
5511
+ * so they propagate through the lister's light DOM to external listeners.
5512
+ */
5513
+ interface IGroupedSubComponent<T> extends HTMLElement {
5514
+ /** Replace the full item list. Called whenever the lister's items or grouping changes. */
5515
+ setItems: (items: readonly T[]) => void;
5516
+ /** Clear the current selection without firing a `select` event (avoids re-entrant loops). */
5517
+ clearSelection: () => void;
5518
+ /** The current selection set. */
5519
+ readonly selectedItems: ReadonlySet<T>;
5520
+ /** Controls how many items can be selected simultaneously. */
5521
+ selectionMode: ListSelectionMode;
5522
+ /**
5523
+ * Forward a command (e.g. sort-order change) to this sub-component.
5524
+ * Uses `CommandId` from `@clinth/ui-commands` for interoperability.
5525
+ */
5526
+ dispatch: (commandId: CommandId, args?: Record<string, unknown>) => void;
5527
+ addEventListener: (<K extends keyof IGroupedSubComponentEventMap<T>>(type: K, listener: (event: IGroupedSubComponentEventMap<T>[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
5528
+ }
5529
+ /**
5530
+ * Factory that creates a sub-component for a given group.
5531
+ * Called once per group (or once with `undefined` in ungrouped mode).
5532
+ */
5533
+ type SubComponentFactory<T> = (groupKey: string | undefined) => HTMLElement & IGroupedSubComponent<T>;
5534
+ /**
5535
+ * Fired by `ixfx-grouped-item-lister` after any sub-component fires `select`.
5536
+ * Carries the full cross-group selection union and the key of the group whose
5537
+ * selection just changed (or `undefined` in ungrouped mode).
5538
+ */
5539
+ type GroupedSelectDetail<T> = {
5540
+ readonly selected: ReadonlySet<T>;
5541
+ readonly groupKey: string | undefined;
5542
+ };
5543
+ type GroupedSelectEvent<T> = CustomEvent<GroupedSelectDetail<T>>;
5544
+ interface GroupedItemListerElementEventMap<T> {
5545
+ 'grouped-select': GroupedSelectEvent<T>;
5546
+ }
5547
+ //#endregion
5548
+ //#region src/panel/panel.d.ts
5549
+ /** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */
5550
+ type PanelOrientation = TitlebarOrientation;
5551
+ type PanelVariant = TitlebarVariant;
5552
+ type PanelToggleInteraction = TitlebarToggleInteraction;
5553
+ type PanelToggleDetail = TitlebarToggleDetail;
5554
+ type PanelToggleEvent = TitlebarToggleEvent;
5555
+ type PanelCloseEvent = TitlebarCloseEvent;
5556
+ interface PanelElementEventMap {
5557
+ toggle: PanelToggleEvent;
5558
+ close: PanelCloseEvent;
5559
+ }
5560
+ declare class PanelElement extends LitElement {
5561
+ collapsed: boolean;
5562
+ orientation: PanelOrientation;
5563
+ closable: boolean;
5564
+ /** Show the collapse/expand caret and enable toggle behaviour. Defaults to true so existing panels stay collapsible. */
5565
+ collapsible: boolean;
5566
+ title: string;
5567
+ iconName: string;
5568
+ toggleInteraction: PanelToggleInteraction;
5569
+ variant: PanelVariant;
5570
+ /** Suppress the titlebar entirely (content-only chrome, e.g. dock tabbed mode). */
5571
+ hideTitlebar: boolean;
5572
+ private _onTitlebarToggle;
5573
+ private _onCloseClick;
5574
+ protected render(): TemplateResult<1>;
5575
+ static styles: CSSResult[];
5576
+ }
5577
+ declare global {
5578
+ interface HTMLElementTagNameMap {
5579
+ 'ixfx-panel': PanelElement;
5580
+ }
5581
+ }
5582
+ interface PanelElement {
5583
+ addEventListener: (<K extends keyof PanelElementEventMap>(type: K, listener: (this: PanelElement, event: PanelElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
5584
+ }
5585
+ //#endregion
5586
+ //#region src/grouped-item-lister/grouped-item-lister.d.ts
5587
+ declare class GroupedItemListerElement<T = unknown> extends LitElement {
5588
+ #private;
5589
+ grouped: boolean;
5590
+ crossGroupSelection: boolean;
5591
+ get groupBy(): ((item: T) => string) | undefined;
5592
+ set groupBy(value: ((item: T) => string) | undefined);
5593
+ get factory(): SubComponentFactory<T> | undefined;
5594
+ set factory(value: SubComponentFactory<T> | undefined);
5595
+ get provider(): IDataProvider<void, T> | undefined;
5596
+ set provider(value: IDataProvider<void, T> | undefined);
5597
+ /** The union of all selected items across every sub-component. */
5598
+ get selectedItems(): ReadonlySet<T>;
5599
+ /**
5600
+ * Forward a command to all live sub-components.
5601
+ * Use this to propagate changes like sort order, filter state, or view mode.
5602
+ */
5603
+ dispatch(commandId: CommandId, args?: Record<string, unknown>): void;
5604
+ protected createRenderRoot(): this;
5605
+ connectedCallback(): void;
5606
+ disconnectedCallback(): void;
5607
+ protected updated(changed: PropertyValues): void;
5608
+ protected render(): typeof nothing | TemplateResult<1>;
5609
+ }
5610
+ declare global {
5611
+ interface HTMLElementTagNameMap {
5612
+ 'ixfx-grouped-item-lister': GroupedItemListerElement;
5613
+ }
5614
+ }
5615
+ interface GroupedItemListerElement<T> {
5616
+ addEventListener: (<K extends keyof GroupedItemListerElementEventMap<T>>(type: K, listener: (this: GroupedItemListerElement<T>, event: GroupedItemListerElementEventMap<T>[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
5617
+ }
5618
+ //#endregion
4755
5619
  //#region src/tree/tree-base.d.ts
4756
5620
  declare class TreeBaseElement extends LitElement implements TreeComponent, TreeSearchHost {
4757
5621
  #private;
@@ -4769,9 +5633,28 @@ declare class TreeBaseElement extends LitElement implements TreeComponent, TreeS
4769
5633
  filterPredicate: TreeFilterPredicate | undefined;
4770
5634
  disableKeyboardNavigation: boolean;
4771
5635
  registry: CommandRegistry<unknown> | undefined;
5636
+ /**
5637
+ * Space-separated subset of `navigate select filter` — limits which
5638
+ * incremental-search modes are offered. Unset ⇒ all three; empty ⇒ search
5639
+ * disabled. See `docs/infra-incremental.md`.
5640
+ */
5641
+ searchModes: string | undefined;
4772
5642
  protected _expandedKeys: Set<string>;
4773
5643
  protected tickled: TickledController<string>;
4774
5644
  protected _focusedDepth: number;
5645
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
5646
+ readonly search: ListSearchController<{
5647
+ node: TreeNode;
5648
+ depth: number;
5649
+ }>;
5650
+ willUpdate(changedProps: PropertyValues): void;
5651
+ /** True while `node` is a fading ghost row (removed / collapsed, still animating out). */
5652
+ protected _isLeaving(node: TreeNode): boolean;
5653
+ /**
5654
+ * True when `filterPredicate` is set and neither `node` nor any descendant
5655
+ * matches — the row should carry the `filtered` class (`display: none`).
5656
+ */
5657
+ protected _isFilteredOut(node: TreeNode, depth: number): boolean;
4775
5658
  updated(changedProps: PropertyValues): void;
4776
5659
  connectedCallback(): void;
4777
5660
  disconnectedCallback(): void;
@@ -4784,16 +5667,20 @@ declare class TreeBaseElement extends LitElement implements TreeComponent, TreeS
4784
5667
  deselectAll(): void;
4785
5668
  navigateTo(keys: readonly string[]): boolean;
4786
5669
  navigateToNode(predicate: (node: TreeNode) => boolean): boolean;
5670
+ /** Expand ancestors + move the cursor to `key`, without touching the selection (search "navigate" mode). */
5671
+ revealKey(key: string): boolean;
5672
+ /** Replace the selection with `nodes` (subject to `selectionFilter`) — search "select" mode. */
5673
+ selectMany(nodes: Iterable<TreeNode>): void;
4787
5674
  getNodes(): ReadonlyArray<{
4788
5675
  node: TreeNode;
4789
5676
  depth: number;
4790
5677
  }>;
4791
- protected renderNodeContent(node: TreeNode, _depth: number): TemplateResult | typeof nothing;
5678
+ protected renderNodeContent(node: TreeNode, depth: number): TemplateResult | typeof nothing;
4792
5679
  protected _handleItemClick(node: TreeNode, depth: number, event?: MouseEvent): void;
4793
5680
  protected _handleCheckboxClick(event: MouseEvent, node: TreeNode, _depth: number): void;
4794
5681
  protected _isSelected(node: TreeNode): boolean;
4795
5682
  protected _isFocused(node: TreeNode): boolean;
4796
- protected _isExpanded(node: TreeNode): boolean;
5683
+ protected _isExpanded(node: TreeNode, depth?: number): boolean;
4797
5684
  protected get _pendingNode(): TreeNode | undefined;
4798
5685
  protected renderLoadingIndicator(): TemplateResult | typeof nothing;
4799
5686
  protected render(): TemplateResult<1>;
@@ -5046,360 +5933,191 @@ declare class IxfxHexEditorElement extends LitElement {
5046
5933
  private _handleBackspace;
5047
5934
  private _handleValueEntry;
5048
5935
  private _commitDecimalValue;
5049
- private _advanceCursor;
5050
- private _dispatchChangeEvent;
5051
- private _dispatchSelectEvent;
5052
- private _copy;
5053
- private _paste;
5054
- private _parseHexString;
5055
- private _getColHeaders;
5056
- private _isRowShaded;
5057
- private _isHexShaded;
5058
- private _isTextShaded;
5059
- protected render(): TemplateResult<1>;
5060
- private _renderRow;
5061
- private _renderColumn;
5062
- private _renderHexCell;
5063
- private _renderTextChar;
5064
- }
5065
- type HexChangeDetail = {
5066
- readonly diff: Diff;
5067
- };
5068
- type HexChangeEvent = CustomEvent<HexChangeDetail>;
5069
- type SingleSelectEventDetail = {
5070
- readonly type: `single`;
5071
- readonly position: number;
5072
- };
5073
- type ContiguousSelectEventDetail = {
5074
- readonly type: `contiguous`;
5075
- readonly start: number;
5076
- readonly end: number;
5077
- };
5078
- type RectangularSelectEventDetail = {
5079
- readonly type: `rectangular`;
5080
- readonly x: number;
5081
- readonly y: number;
5082
- readonly width: number;
5083
- readonly height: number;
5084
- };
5085
- type NoneSelectEventDetail = {
5086
- readonly type: `none`;
5087
- };
5088
- type SelectEventDetail = SingleSelectEventDetail | ContiguousSelectEventDetail | RectangularSelectEventDetail | NoneSelectEventDetail;
5089
- declare global {
5090
- interface HTMLElementTagNameMap {
5091
- 'ixfx-hex-editor': IxfxHexEditorElement;
5092
- }
5093
- }
5094
- //#endregion
5095
- //#region src/icons/defaults.d.ts
5096
- /**
5097
- * Chevron pointing down. Used for split-button dropdown toggle.
5098
- * fill="currentColor" so it inherits CSS color.
5099
- */
5100
- declare const ICON_CHEVRON_DOWN = "<svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"/></svg>";
5101
- /**
5102
- * Caret pointing right. Used for tree-basic expand indicator as a CSS mask.
5103
- * fill="black" is correct for CSS mask-image use (shape only, color comes from background-color).
5104
- */
5105
- declare const ICON_CARET_RIGHT = "<svg viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 7l6 5-6 5V7z\"/></svg>";
5106
- /**
5107
- * Checkmark. Useful for menu-check-item or confirmation states.
5108
- * fill="currentColor" so it inherits CSS color.
5109
- */
5110
- declare const ICON_CHECK = "<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/></svg>";
5111
- /**
5112
- * Close / X icon. Useful for dialogs, notifications, dismissible elements.
5113
- * fill="currentColor" so it inherits CSS color.
5114
- */
5115
- declare const ICON_CLOSE = "<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/></svg>";
5116
- //#endregion
5117
- //#region src/icons/registry.d.ts
5118
- declare const iconBus: EventTarget;
5119
- type IconChangedDetail = {
5120
- readonly name: string;
5121
- };
5122
- type IconChangedEvent = CustomEvent<IconChangedDetail>;
5123
- type IconEntry = {
5124
- kind: `svg`;
5125
- svg: string;
5126
- } | {
5127
- kind: `font`;
5128
- char: string;
5129
- };
5130
- declare function registerIcon(name: string, svg: string): void;
5131
- declare function registerFontIcon(name: string, glyph: string | number): void;
5132
- declare function getIcon(name: string): string | undefined;
5133
- declare function getIconEntry(name: string): IconEntry | undefined;
5134
- declare function hasIcon(name: string): boolean;
5135
- declare function setIconFont(fontFamily: string): void;
5136
- declare function getIconFont(): string | undefined;
5137
- declare function svgToDataUri(svg: string): string;
5138
- //#endregion
5139
- //#region src/incr-search/types.d.ts
5140
- type IncrSearchResult<T> = {
5141
- readonly item: T;
5142
- readonly positions: ReadonlySet<number>;
5143
- readonly score: number;
5144
- };
5145
- type IncrSearchState<T> = {
5146
- readonly query: string;
5147
- readonly results: ReadonlyArray<IncrSearchResult<T>>;
5148
- readonly positionsByItem: ReadonlyMap<T, ReadonlySet<number>>;
5149
- };
5150
- type IncrSearchChangeCallback<T> = (state: IncrSearchState<T>) => void;
5151
- type IncrSearchOptions<T> = {
5152
- readonly items?: readonly T[];
5153
- readonly selector?: (item: T) => string;
5154
- readonly fzf?: Partial<FzfOptions<T>>;
5155
- readonly onChange?: IncrSearchChangeCallback<T>;
5156
- };
5157
- type IncrSearch<T> = {
5158
- readonly setItems: (items: readonly T[], signal?: AbortSignal) => Promise<void>;
5159
- readonly setQuery: (query: string, signal?: AbortSignal) => Promise<IncrSearchState<T>>;
5160
- readonly clearQuery: () => Promise<void>;
5161
- readonly state: IncrSearchState<T>;
5162
- readonly onChange: (cb: IncrSearchChangeCallback<T>) => () => void;
5163
- readonly dispose: () => void;
5164
- };
5165
- type FuzzySearchOptions<T> = {
5166
- readonly selector?: (item: T) => string;
5167
- readonly fzf?: Partial<FzfOptions<T>>;
5168
- };
5169
- type FuzzySearch<T> = {
5170
- readonly find: (query: string) => ReadonlyArray<IncrSearchResult<T>>;
5171
- readonly items: readonly T[];
5172
- };
5173
- type HighlightTarget = {
5174
- readonly element: Element;
5175
- readonly text?: string;
5176
- readonly positions: ReadonlySet<number>;
5177
- };
5178
- type HighlightOptions = {
5179
- readonly key?: string;
5180
- };
5181
- type ElementIncrSearchOptions = {
5182
- readonly container: Element;
5183
- readonly itemSelector: string;
5184
- readonly getLabel?: (el: Element) => string;
5185
- readonly getKey?: (el: Element) => string;
5186
- readonly labelSelector?: string;
5187
- readonly highlightKey?: string;
5188
- readonly fzf?: Partial<FzfOptions<{
5189
- key: string;
5190
- label: string;
5191
- }>>;
5192
- readonly onChange?: IncrSearchChangeCallback<{
5193
- key: string;
5194
- label: string;
5195
- }>;
5196
- };
5197
- //#endregion
5198
- //#region src/incr-search/ac-adapter.d.ts
5199
- /**
5200
- * Creates an ixfx-ac-text-compatible `completionProvider` function from a
5201
- * static item list. Uses synchronous fuzzy search wrapped in a Promise so it
5202
- * fits the async provider signature.
5203
- *
5204
- * Each returned item has `positions` populated with matched character indices,
5205
- * which `ixfx-ac-text` uses to render CSS Custom Highlights on the label.
5206
- *
5207
- * Empty query returns all items in original order (no positions).
5208
- * A cancelled signal causes the returned promise to reject with an AbortError.
5209
- */
5210
- declare function createAcCompletionProvider<T extends {
5211
- label: string;
5212
- }>(items: readonly T[], options?: Pick<FuzzySearchOptions<T>, `selector`>): (query: string, signal: AbortSignal) => Promise<Array<T & {
5213
- positions: ReadonlySet<number>;
5214
- }>>;
5215
- //#endregion
5216
- //#region src/incr-search/controller-tree.d.ts
5217
- type IncrSearchTreeOptions = {
5218
- selector: (item: {
5219
- node: TreeNode;
5220
- depth: number;
5221
- }) => string;
5222
- /**
5223
- * CSS selector for the label elements inside the shadow root.
5224
- * Defaults to `.tree-label` (suitable for ixfx-tree-list).
5225
- * Use `.label` for ixfx-miller-list.
5226
- */
5227
- labelSelector?: string;
5228
- highlightKey?: string;
5229
- input?: HTMLInputElement;
5230
- fzf?: Partial<FzfOptions<{
5231
- node: TreeNode;
5232
- depth: number;
5233
- }>>;
5234
- };
5235
- /**
5236
- * Incremental-search controller for any component implementing `TreeSearchHost`
5237
- * (i.e. `ixfx-tree-list`, `ixfx-miller-list`, `ixfx-crumb-navigation`).
5238
- *
5239
- * Replaces the previous separate `IncrSearchTreeController` / `IncrSearchMillerController`
5240
- * classes — the unified `TreeFilterPredicate` (with depth) means one implementation works
5241
- * for all tree-like components.
5242
- *
5243
- * @example Using with ixfx-tree-list:
5244
- * ```typescript
5245
- * const ctrl = new IncrSearchTreeController(myTreeList, {
5246
- * selector: item => item.node.item.label,
5247
- * });
5248
- * ctrl.connect();
5249
- * ```
5250
- *
5251
- * @example Using with ixfx-miller-list (different label selector):
5252
- * ```typescript
5253
- * const ctrl = new IncrSearchTreeController(myMillerList, {
5254
- * selector: item => item.node.item.label,
5255
- * labelSelector: '.label',
5256
- * });
5257
- * ctrl.connect();
5258
- * ```
5259
- */
5260
- declare class IncrSearchTreeController {
5261
- #private;
5262
- constructor(el: TreeSearchHost, opts: IncrSearchTreeOptions);
5263
- connect(): void;
5264
- disconnect(): void;
5265
- setQuery(query: string): Promise<void>;
5266
- clearQuery(): Promise<void>;
5936
+ private _advanceCursor;
5937
+ private _dispatchChangeEvent;
5938
+ private _dispatchSelectEvent;
5939
+ private _copy;
5940
+ private _paste;
5941
+ private _parseHexString;
5942
+ private _getColHeaders;
5943
+ private _isRowShaded;
5944
+ private _isHexShaded;
5945
+ private _isTextShaded;
5946
+ protected render(): TemplateResult<1>;
5947
+ private _renderRow;
5948
+ private _renderColumn;
5949
+ private _renderHexCell;
5950
+ private _renderTextChar;
5267
5951
  }
5268
- //#endregion
5269
- //#region src/incr-search/element-search.d.ts
5270
- type ElementItem = {
5271
- readonly key: string;
5272
- readonly label: string;
5952
+ type HexChangeDetail = {
5953
+ readonly diff: Diff;
5273
5954
  };
5274
- type ElementIncrSearch = {
5275
- readonly setQuery: (query: string, signal?: AbortSignal) => Promise<void>;
5276
- readonly clearQuery: () => Promise<void>;
5277
- readonly refresh: () => void;
5278
- readonly onChange: (cb: IncrSearchChangeCallback<ElementItem>) => () => void;
5279
- readonly dispose: () => void;
5955
+ type HexChangeEvent = CustomEvent<HexChangeDetail>;
5956
+ type SingleSelectEventDetail = {
5957
+ readonly type: `single`;
5958
+ readonly position: number;
5280
5959
  };
5281
- declare function createElementIncrSearch(opts: ElementIncrSearchOptions): ElementIncrSearch;
5282
- //#endregion
5283
- //#region src/incr-search/fuzzy.d.ts
5284
- declare function createFuzzySearch<T>(items: readonly T[], options?: FuzzySearchOptions<T>): FuzzySearch<T>;
5285
- //#endregion
5286
- //#region src/incr-search/highlight.d.ts
5287
- declare function applyHighlights(targets: readonly HighlightTarget[], options?: HighlightOptions): void;
5288
- declare function clearHighlights(options?: HighlightOptions): void;
5289
- declare function buildHighlightTargets<T>(root: ShadowRoot | Element, itemSelector: string, positionsByItem: ReadonlyMap<T, ReadonlySet<number>>, getItem: (el: Element) => T | undefined, getText: (el: Element) => string): HighlightTarget[];
5960
+ type ContiguousSelectEventDetail = {
5961
+ readonly type: `contiguous`;
5962
+ readonly start: number;
5963
+ readonly end: number;
5964
+ };
5965
+ type RectangularSelectEventDetail = {
5966
+ readonly type: `rectangular`;
5967
+ readonly x: number;
5968
+ readonly y: number;
5969
+ readonly width: number;
5970
+ readonly height: number;
5971
+ };
5972
+ type NoneSelectEventDetail = {
5973
+ readonly type: `none`;
5974
+ };
5975
+ type SelectEventDetail = SingleSelectEventDetail | ContiguousSelectEventDetail | RectangularSelectEventDetail | NoneSelectEventDetail;
5976
+ declare global {
5977
+ interface HTMLElementTagNameMap {
5978
+ 'ixfx-hex-editor': IxfxHexEditorElement;
5979
+ }
5980
+ }
5290
5981
  //#endregion
5291
- //#region src/incr-search/incr-search.d.ts
5292
- declare function createIncrSearch<T>(options?: IncrSearchOptions<T>): IncrSearch<T>;
5982
+ //#region src/icons/defaults.d.ts
5983
+ /**
5984
+ * Chevron pointing down. Used for split-button dropdown toggle.
5985
+ * fill="currentColor" so it inherits CSS color.
5986
+ */
5987
+ declare const ICON_CHEVRON_DOWN = "<svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"/></svg>";
5988
+ /**
5989
+ * Caret pointing right. Used for tree-basic expand indicator as a CSS mask.
5990
+ * fill="black" is correct for CSS mask-image use (shape only, color comes from background-color).
5991
+ */
5992
+ declare const ICON_CARET_RIGHT = "<svg viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 7l6 5-6 5V7z\"/></svg>";
5993
+ /**
5994
+ * Checkmark. Useful for menu-check-item or confirmation states.
5995
+ * fill="currentColor" so it inherits CSS color.
5996
+ */
5997
+ declare const ICON_CHECK = "<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/></svg>";
5998
+ /**
5999
+ * Close / X icon. Useful for dialogs, notifications, dismissible elements.
6000
+ * fill="currentColor" so it inherits CSS color.
6001
+ */
6002
+ declare const ICON_CLOSE = "<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/></svg>";
5293
6003
  //#endregion
5294
- //#region src/interaction/list-selection-controller.d.ts
5295
- /** Modifier state needed to route a click gesture per interaction mode. */
5296
- type ListSelectionGesture = {
5297
- readonly ctrlKey: boolean;
5298
- readonly metaKey: boolean;
5299
- readonly shiftKey: boolean;
6004
+ //#region src/icons/registry.d.ts
6005
+ declare const iconBus: EventTarget;
6006
+ type IconChangedDetail = {
6007
+ readonly name: string;
5300
6008
  };
5301
- type ListSelectionModes = {
5302
- readonly selectionMode: ListSelectionMode;
5303
- readonly interactionMode: ListInteractionMode;
6009
+ type IconChangedEvent = CustomEvent<IconChangedDetail>;
6010
+ type IconEntry = {
6011
+ kind: `svg`;
6012
+ svg: string;
6013
+ } | {
6014
+ kind: `font`;
6015
+ char: string;
5304
6016
  };
6017
+ declare function registerIcon(name: string, svg: string): void;
6018
+ declare function registerFontIcon(name: string, glyph: string | number): void;
6019
+ declare function getIcon(name: string): string | undefined;
6020
+ declare function getIconEntry(name: string): IconEntry | undefined;
6021
+ declare function hasIcon(name: string): boolean;
6022
+ declare function setIconFont(fontFamily: string): void;
6023
+ declare function getIconFont(): string | undefined;
6024
+ declare function svgToDataUri(svg: string): string;
6025
+ //#endregion
6026
+ //#region src/interaction/keyed-list.d.ts
5305
6027
  /**
5306
- * Configuration supplied by the host component.
6028
+ * Helpers for key-based selection on the Element-flavoured list components
6029
+ * (`ixfx-vertical-list`, `ixfx-detail-list`, `ixfx-grid-list`).
5307
6030
  *
5308
- * The controller owns selection *state* onlyeverything DOM- or
5309
- * component-specific is expressed through these callbacks.
6031
+ * A "key" is a stable string the host puts on each item element `data-key`
6032
+ * (preferred) or `data-value`. It survives the host rebuilding the item set
6033
+ * (re-fetch, re-sort, filter) where raw `Element` references do not.
5310
6034
  */
5311
- type ListSelectionControllerConfig<T> = {
5312
- /** Visible items in navigation order — used for range selection and select-all. */
5313
- readonly getOrderedItems: () => readonly T[];
5314
- /** Whether an item may join the selection (e.g. reject `not-checked` rows). */
5315
- readonly isSelectable: (item: T) => boolean;
5316
- /** Current modes; read on every gesture so property changes apply immediately. */
5317
- readonly getModes: () => ListSelectionModes;
5318
- /**
5319
- * Fired after every selection change. The host syncs DOM state
5320
- * (`data-selected` / `data-checked`), dispatches `list-select`, and
5321
- * requests an update.
5322
- */
5323
- readonly onChange: (selected: ReadonlySet<T>, previous: ReadonlySet<T>) => void;
5324
- };
5325
- /** Whether the interaction mode allows building a multi-item selection. */
5326
- declare function isMultiMode(mode: ListInteractionMode): boolean;
5327
6035
  /**
5328
- * Generic selection state machine shared by list components.
5329
- *
5330
- * Owns the selected set plus the range-selection anchor, the selection
5331
- * primitives (`replace` / `toggle` / `rangeTo` / `clear` / `selectAll` /
5332
- * `selectMany` / `deselect`) and the per-interactionMode gesture routers
5333
- * (`handleClick` / `handleSpace`).
5334
- *
5335
- * Identity is generic: both `ixfx-vertical-list` and `ixfx-detail-list` use
5336
- * `ListSelectionController<Element>`.
6036
+ * The stable key for an item element: `data-key`, then `data-value`, else
6037
+ * `undefined`.
6038
+ */
6039
+ declare function keyForElement(el: Element): string | undefined;
6040
+ /**
6041
+ * A lazily-built key → element index over a container. Rebuilt on first use
6042
+ * and after any child-list mutation under `root`; `invalidate()` forces a
6043
+ * rebuild on the next `get()`.
5337
6044
  *
5338
- * @example
5339
6045
  * ```ts
5340
- * const selection = new ListSelectionController<Element>({
5341
- * getOrderedItems: () => this.getVisibleItems(),
5342
- * isSelectable: el => !el.hasAttribute(`not-checked`),
5343
- * getModes: () => ({ selectionMode: this.selectionMode, interactionMode: this.interactionMode }),
5344
- * onChange: (selected, previous) => {
5345
- * this.syncItemStates();
5346
- * this.dispatchEvent(new CustomEvent(`list-select`, { detail: { selected, previous } }));
5347
- * },
5348
- * });
6046
+ * #keyIndex = new KeyedElementIndex(this);
6047
+ * // ...
6048
+ * const el = this.#keyIndex.get(`row-42`);
6049
+ * // on disconnect:
6050
+ * this.#keyIndex.dispose();
5349
6051
  * ```
5350
6052
  */
5351
- declare class ListSelectionController<T> {
6053
+ declare class KeyedElementIndex {
5352
6054
  #private;
5353
- constructor(config: ListSelectionControllerConfig<T>);
5354
- /** The current selection set (read-only). */
5355
- get selected(): ReadonlySet<T>;
5356
- /** Anchor for range (shift) selection — the last plainly-selected item. */
5357
- get anchor(): T | undefined;
5358
- /** Whether "select all" (Cmd/Ctrl+A) is currently permitted. */
5359
- canSelectAll(): boolean;
5360
- /** Whether a multi-item selection can be built in the current modes. */
5361
- canSelectMultiple(): boolean;
5362
- /** Replace the entire selection with a single item; updates the anchor. */
5363
- replace(item: T): void;
5364
- /** Toggle a single item in/out of the selection without replacing it. Anchor unchanged. */
5365
- toggle(item: T): void;
5366
- /** Select the contiguous ordered range from the anchor to `item`. Anchor unchanged. */
5367
- rangeTo(item: T): void;
5368
- /** Clear the selection. No change event when the selection is already empty. */
5369
- clear(): void;
5370
- /** Select every ordered item that passes `isSelectable`. */
5371
- selectAll(): void;
5372
- /**
5373
- * Replace the selection with many items at once. Requires
5374
- * `selectionMode="multiple"`, throws otherwise. Updates the anchor.
5375
- */
5376
- selectMany(items: Iterable<T>): void;
5377
- /** Remove a single item from the selection. */
5378
- deselect(item: T): void;
5379
- /** Route a click on `item` according to the current interaction mode. */
5380
- handleClick(item: T, gesture: ListSelectionGesture): void;
5381
- /** Route a Space keypress on `item` according to the current interaction mode. */
5382
- handleSpace(item: T): void;
5383
- /** Drop the range-selection anchor (e.g. when the interaction mode changes). */
5384
- clearAnchor(): void;
5385
- /**
5386
- * Re-key the selection across an identity boundary — e.g. when items are
5387
- * wrapped/unwrapped and the selected Element references change. Silent:
5388
- * no `onChange` is fired.
5389
- */
5390
- remap(fn: (item: T) => T): void;
5391
6055
  /**
5392
- * Hard reset: empty the selection and clear the anchor without firing
5393
- * `onChange` (e.g. when all items are removed).
6056
+ * @param root Container whose descendants are indexed.
6057
+ * @param itemSelector Which descendants count as items (default: any `[data-key]`).
5394
6058
  */
5395
- reset(): void;
6059
+ constructor(root: Element, itemSelector?: string);
6060
+ /** The element with this key, or `undefined`. First match wins on duplicates. */
6061
+ get(key: string): Element | undefined;
6062
+ /** Force a rebuild on the next `get()` — e.g. after a `data-key` attribute change. */
6063
+ invalidate(): void;
6064
+ /** Stop observing and drop the cache. */
6065
+ dispose(): void;
6066
+ }
6067
+ //#endregion
6068
+ //#region src/interaction/list-item-animation.d.ts
6069
+ /**
6070
+ * Shared insertion / removal animation for the list & tree components.
6071
+ *
6072
+ * Two flavours, because the components split into two layout families:
6073
+ *
6074
+ * - **Flow layouts** (`ixfx-vertical-list`, `ixfx-detail-list`, `ixfx-tree-*`) —
6075
+ * rows sit in normal flow, so a new row can collapse in from zero height and a
6076
+ * leaving row can collapse back to zero, and the rows around it slide to make
6077
+ * or close the gap for free. Use {@link animateListItemIn} /
6078
+ * {@link animateListItemOut} (Web Animations API, exact measured sizes).
6079
+ *
6080
+ * - **Virtualised layouts** (`ixfx-grid-list`, `ixfx-data-grid`) — rows are
6081
+ * absolutely positioned (`transform` / `top`), so collapsing a row's box moves
6082
+ * nothing. Those components instead fade the entering / leaving row with the
6083
+ * {@link listItemFadeKeyframes} keyframes and slide the survivors by
6084
+ * transitioning their position for a short window after the change.
6085
+ *
6086
+ * Everything here is a no-op under `prefers-reduced-motion: reduce`.
6087
+ */
6088
+ /** Default duration (ms) for both flavours; overridable per call / per component. */
6089
+ declare const LIST_ITEM_MOTION_MS = 200;
6090
+ declare function prefersReducedMotion(): boolean;
6091
+ /**
6092
+ * Opacity keyframes for the virtualised components. Each one adds its own
6093
+ * one-line rule binding `.<row>.ixfx-item-entering` / `.ixfx-item-leaving` to
6094
+ * these, plus a `prefers-reduced-motion` guard on its own selectors.
6095
+ */
6096
+ declare const listItemFadeKeyframes: CSSResult;
6097
+ interface ListItemMotionOptions {
5396
6098
  /**
5397
- * Replace the selection and anchor silently (no `onChange`). Used to
5398
- * re-key the selection when items are rebuilt from data — e.g. matching
5399
- * new elements to previously selected keys.
6099
+ * Animation duration in ms. When omitted, the element's
6100
+ * `--ixfx-list-item-move-duration` custom property is used if set (accepts
6101
+ * `ms` or `s`), otherwise {@link LIST_ITEM_MOTION_MS}.
5400
6102
  */
5401
- seed(items: Iterable<T>, anchor?: T): void;
6103
+ duration?: number;
6104
+ /** Which axis collapses — `block` (height, default) or `inline` (width). */
6105
+ axis?: `block` | `inline`;
6106
+ easing?: string;
5402
6107
  }
6108
+ /**
6109
+ * Collapse + fade `el` in from nothing to its natural size. Call it just after
6110
+ * the element has been inserted (it must already be laid out at full size so it
6111
+ * can be measured). No-op under reduced motion.
6112
+ */
6113
+ declare function animateListItemIn(el: HTMLElement, options?: ListItemMotionOptions): Animation | undefined;
6114
+ /**
6115
+ * Collapse + fade `el` out. Resolves once the animation finishes (or straight
6116
+ * away under reduced motion); the caller detaches the element after. The final
6117
+ * collapsed state is held (`fill: forwards`) so there's no flash back to full
6118
+ * size in the gap before removal.
6119
+ */
6120
+ declare function animateListItemOut(el: HTMLElement, options?: ListItemMotionOptions): Promise<void>;
5403
6121
  //#endregion
5404
6122
  //#region src/interaction/tickled-styles.d.ts
5405
6123
  /**
@@ -5811,6 +6529,16 @@ type MillerItemDblClickDetail = {
5811
6529
  node: TreeNode;
5812
6530
  depth: number;
5813
6531
  };
6532
+ /** Detail for the `rebase` event fired when the view root changes. */
6533
+ type MillerRebaseDetail = {
6534
+ /** The new view root, or `undefined` when the view was restored to the full tree. */
6535
+ viewRoot: TreeNode | undefined;
6536
+ /**
6537
+ * Ancestry chain from the true root down to and including the new view root.
6538
+ * Empty when the view shows the full tree.
6539
+ */
6540
+ path: Array<TreeNode>;
6541
+ };
5814
6542
  /** Detail for the `item-rightclick` event. */
5815
6543
  type MillerItemRightClickDetail = {
5816
6544
  node: TreeNode;
@@ -5828,6 +6556,7 @@ type MillerHeaderClickEvent = CustomEvent<MillerHeaderClickDetail>;
5828
6556
  type MillerItemDblClickEvent = CustomEvent<MillerItemDblClickDetail>;
5829
6557
  type MillerItemRightClickEvent = CustomEvent<MillerItemRightClickDetail>;
5830
6558
  type MillerHeaderRightClickEvent = CustomEvent<MillerHeaderRightClickDetail>;
6559
+ type MillerRebaseEvent = CustomEvent<MillerRebaseDetail>;
5831
6560
  /**
5832
6561
  * A snapshot of all display states for a single item in the miller columns.
5833
6562
  *
@@ -5891,6 +6620,29 @@ declare class MillerBaseElement extends LitElement implements TreeComponent, Tre
5891
6620
  root: TreeNode | undefined;
5892
6621
  model: TreeDataModel | undefined;
5893
6622
  headers: boolean;
6623
+ /**
6624
+ * When true, the last (rightmost) column grows to fill any remaining
6625
+ * horizontal space in the host. All other columns size to their content
6626
+ * (`max-content`), unless the user has manually resized them.
6627
+ *
6628
+ * When the user clicks into an item in the stretched column and a new
6629
+ * column opens, the previously-last column automatically transitions back
6630
+ * to its content-based width and the new last column stretches instead.
6631
+ * Explicit user-resized widths (via the resize handle) always win over
6632
+ * stretching.
6633
+ */
6634
+ stretchLastColumn: boolean;
6635
+ /**
6636
+ * Alternative node to use as the display root (Finder-style column-view
6637
+ * rebase). When set, column 0 shows this node's children and all depths,
6638
+ * headers, and key paths are relative to it. When `undefined` (default),
6639
+ * the full `root` tree is shown.
6640
+ *
6641
+ * Prefer `rebaseTo()` / `rebaseUp()` over assigning this directly — they
6642
+ * validate the target and report whether the view changed. Assigning a new
6643
+ * `root` (or receiving one via `model`) silently clears the view root.
6644
+ */
6645
+ viewRoot: TreeNode | undefined;
5894
6646
  /**
5895
6647
  * Controls the column-level interaction pattern (how clicks map to column changes).
5896
6648
  * This is distinct from `selectionFilter` (which restricts which node kinds are selectable).
@@ -5906,13 +6658,27 @@ declare class MillerBaseElement extends LitElement implements TreeComponent, Tre
5906
6658
  */
5907
6659
  loadChildren: LoadChildrenCallback | undefined;
5908
6660
  filterPredicate: TreeFilterPredicate | undefined;
6661
+ /**
6662
+ * Space-separated subset of `navigate select filter` — limits which
6663
+ * incremental-search modes are offered. Unset ⇒ all three; empty ⇒ search
6664
+ * disabled. See `docs/infra-incremental.md`.
6665
+ */
6666
+ searchModes: string | undefined;
5909
6667
  protected _columns: TreeNode[][];
5910
6668
  protected _loadingDepth: number | undefined;
5911
6669
  protected _selectedByDepth: Map<number, TreeNode>;
5912
6670
  protected _selectedKeys: Set<string>;
5913
6671
  protected _selectedNodes: Set<TreeNode>;
6672
+ /** Incremental search (navigate / select / filter). See `docs/infra-incremental.md`. */
6673
+ readonly search: ListSearchController<{
6674
+ node: TreeNode;
6675
+ depth: number;
6676
+ }>;
6677
+ /** Command registry carrying this component's `list.search.*` commands. */
6678
+ get registry(): CommandRegistry<unknown> | undefined;
5914
6679
  tickled: TickledController<string>;
5915
6680
  updated(changedProps: PropertyValues): void;
6681
+ connectedCallback(): void;
5916
6682
  disconnectedCallback(): void;
5917
6683
  getConfig(): MillerConfig;
5918
6684
  setConfig(config: MillerConfig): void;
@@ -5948,17 +6714,41 @@ declare class MillerBaseElement extends LitElement implements TreeComponent, Tre
5948
6714
  */
5949
6715
  getSelected(): TreeNode[];
5950
6716
  /**
5951
- * Programmatically navigate to a node by key path.
6717
+ * Programmatically navigate to a node by key path, relative to the current
6718
+ * view root (rebased or full tree).
5952
6719
  */
5953
6720
  navigateTo(keys: readonly string[]): boolean;
5954
6721
  /**
5955
6722
  * Programmatically navigate to the first node (breadth-first) matching a predicate.
5956
6723
  */
5957
6724
  navigateToNode(predicate: (node: TreeNode) => boolean): boolean;
6725
+ /** Open the columns down to `key` and move the cursor to it, without changing the selection (search "navigate" mode). */
6726
+ revealKey(key: string): boolean;
6727
+ /** Replace the selection with `nodes` (search "select" mode). */
6728
+ selectMany(nodes: Iterable<TreeNode>): void;
5958
6729
  getNodes(): ReadonlyArray<{
5959
6730
  node: TreeNode;
5960
6731
  depth: number;
5961
6732
  }>;
6733
+ /**
6734
+ * Rebase the view to show `target`'s children in column 0 (Finder column-view
6735
+ * behavior on double-click), keeping the full tree in `root`.
6736
+ *
6737
+ * - Pass a `MillerNode` (used as-is) or a key (looked up in the full tree).
6738
+ * - Pass `undefined` to restore the full-tree view.
6739
+ * - Rebasing to the true root is equivalent to restoring the full view.
6740
+ * - Leaves are refused (returns `false`).
6741
+ *
6742
+ * Selection is cleared; all depths, headers, and key paths are relative to
6743
+ * the new view root. Fires a `rebase` event when the view actually changes.
6744
+ * Returns `false` when nothing changed (unknown key, leaf, or same view).
6745
+ */
6746
+ rebaseTo(target: TreeNode | string | undefined): boolean;
6747
+ /**
6748
+ * Rebase one level up from the current view root (no-op at the full tree).
6749
+ * Fires a `rebase` event when the view actually changes.
6750
+ */
6751
+ rebaseUp(): boolean;
5962
6752
  protected renderColumnContent(nodes: TreeNode[], depth: number): TemplateResult | typeof nothing;
5963
6753
  protected _handleItemClick(node: TreeNode, depth: number, event?: MouseEvent): void;
5964
6754
  /**
@@ -6017,6 +6807,7 @@ interface MillerBaseElementEventMap extends TreeComponentEventMap {
6017
6807
  'item-rightclick': CustomEvent<MillerItemRightClickDetail>;
6018
6808
  'header-click': CustomEvent<MillerHeaderClickDetail>;
6019
6809
  'header-rightclick': CustomEvent<MillerHeaderRightClickDetail>;
6810
+ 'rebase': CustomEvent<MillerRebaseDetail>;
6020
6811
  }
6021
6812
  interface MillerBaseElement {
6022
6813
  addEventListener: (<K extends keyof MillerBaseElementEventMap>(type: K, listener: (this: MillerBaseElement, event: MillerBaseElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
@@ -6102,6 +6893,9 @@ declare class MillerTreeController<T> {
6102
6893
  * Any ancestor `MillerNode`s with unloaded children are populated
6103
6894
  * synchronously before calling `element.navigateTo()`.
6104
6895
  *
6896
+ * Key paths are relative to the element's current view root: when the view
6897
+ * is rebased, only matches at or below the view root can be reached.
6898
+ *
6105
6899
  * Returns `false` if no matching node is found.
6106
6900
  */
6107
6901
  navigateToValue(predicate: (value: T) => boolean): boolean;
@@ -6199,6 +6993,41 @@ interface PillRendererOptions {
6199
6993
  }
6200
6994
  declare function createPillRenderer(options?: PillRendererOptions): NotificationRenderer;
6201
6995
  //#endregion
6996
+ //#region src/pan-text/pan-text.d.ts
6997
+ declare class PanTextElement extends LitElement {
6998
+ direction: `start` | `end`;
6999
+ disabled: boolean;
7000
+ private _isOverflowing;
7001
+ private _isHovering;
7002
+ private _textEl;
7003
+ private _overflow;
7004
+ private _resizeObserver;
7005
+ connectedCallback(): void;
7006
+ disconnectedCallback(): void;
7007
+ firstUpdated(): void;
7008
+ protected updated(): void;
7009
+ private _onMouseEnter;
7010
+ private _onMouseLeave;
7011
+ /**
7012
+ * Measures how far the slotted text overflows its container. The measurement
7013
+ * is taken on the inner `.text` span (which clips with an ellipsis), not on
7014
+ * the host — the host never overflows, so measuring it always yielded zero
7015
+ * and the hover interaction never activated.
7016
+ *
7017
+ * Skipped while hovering, because the hover styles switch `.text` to
7018
+ * `overflow: visible` and the measurement would collapse to zero mid-pan.
7019
+ */
7020
+ private _measure;
7021
+ private _textStyle;
7022
+ protected render(): TemplateResult<1>;
7023
+ static styles: CSSResult[];
7024
+ }
7025
+ declare global {
7026
+ interface HTMLElementTagNameMap {
7027
+ 'ixfx-pan-text': PanTextElement;
7028
+ }
7029
+ }
7030
+ //#endregion
6202
7031
  //#region src/panel/panel-group.d.ts
6203
7032
  type PanelGroupOrientation = `horizontal` | `vertical`;
6204
7033
  declare class PanelGroupElement extends LitElement {
@@ -7999,5 +8828,5 @@ interface XyPad {
7999
8828
  //#region src/index.d.ts
8000
8829
  declare function init(): void;
8001
8830
  //#endregion
8002
- export { AcTextChangeDetail, AcTextChangeEvent, AcTextCompletionProvider, AcTextElement, AcTextItem, AcTextSelectDetail, AcTextSelectEvent, type AcTokenAddDetail, type AcTokenAddEvent, AcTokenElement, type AcTokenElementEventMap, type AcTokenItem, type AcTokenRemoveDetail, type AcTokenRemoveEvent, type AcTokenizerFn, type AcTokensChangeDetail, type AcTokensChangeEvent, AddItemOptions, Axis, ButtonElement, Checkbox, CheckboxChangeDetail, CheckboxChangeEvent, CheckboxEventMap, ClickSnapMode, ColourMapConfig, ColourMode, ColourPicker, type ColourPickerChangeEvent, type ColourPickerEventDetail, type ColourPickerInputEvent, ColourPickerPopup, ColourResult, ConfigEntry, ContiguousSelectEventDetail, CrossoverBehaviour, CrumbNavChangeDetail, CrumbNavChangeEvent, CrumbNavExpandDetail, CrumbNavExpandEvent, CrumbNavNavigateDetail, CrumbNavNavigateEvent, CrumbNavigationChangeDetail, CrumbNavigationChangeEvent, CrumbNavigationElement, CrumbNavigationElementEventMap, CrumbNavigationExpandDetail, CrumbNavigationExpandEvent, CrumbNavigationItemClickDetail, CrumbNavigationItemClickEvent, CrumbPathController, CrumbPathControllerOptions, CrumbPathElement, CrumbPathElementEventMap, CrumbSegment, CrumbSiblingLookupFn, type CssVars, CustomCheckboxOptions, DataBatch, DataController, DataControllerOptions, DataDisplayComponent, DataGridCellClickDetail, DataGridCellClickEvent, DataGridCellEditDetail, DataGridCellEditEvent, DataGridColumnReorderDetail, DataGridColumnReorderEvent, DataGridColumnResizeDetail, DataGridColumnResizeEvent, DataGridColumnVisibilityDetail, DataGridColumnVisibilityEvent, DataGridElement, DataGridElementEventMap, DataGridGroupChangeDetail, DataGridGroupChangeEvent, DataGridSelectDetail, DataGridSelectEvent, DataGridSortDetail, DataGridSortEvent, DataProviderResult, type DetailFormatter, DetailListElement, type DetailSortComparator, type DetailSortItem, type DetailSortMode, DisplayTextLogic, DistributeResult, DockAddPanelTarget, DockAxis, DockChangeDetail, DockChangeEvent, DockDirection, DockDragBoundaryDetail, DockDragBoundaryEvent, DockDropTarget, type DockDropZone, DockEdge, DockHostElement, DockHostElementEventMap, DockLayout, DockLeafContentRules, DockLeafInfo, DockLeafRef, DockNeighbours, DockNode, DockOperation, DockPanelActivatedDetail, DockPanelActivatedEvent, DockPanelAddedDetail, DockPanelAddedEvent, DockPanelDragStartDetail, DockPanelDragStartEvent, DockPanelElement, DockPanelElementEventMap, DockPanelInit, DockPanelRemovedDetail, DockPanelRemovedEvent, DockPanelSnapshot, DockPanelTearOutDetail, DockPanelTearOutEvent, DockRect, DockSplitNode, DockStackNode, DragSnappingFn, DragTarget, EditableLabel, EditableLabelChangeDetail, EditableLabelChangeEvent, EditableMode, EditableNumber, Effect, type ElementIncrSearch, type ElementIncrSearchOptions, Endpoints, EntryMode, FormElement, FormGroupElement, FormPartElement, FormatValueForHuman, FormattingOptions, type FuzzySearch, type FuzzySearchOptions, FuzzySearchResult, GridMode, GridResolution, GroupNode, GroupedItemListerElement, type GroupedItemListerElementEventMap, type GroupedSelectDetail, type GroupedSelectEvent, HexChangeDetail, HexChangeEvent, type HighlightOptions, type HighlightTarget, ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, IDataProvider, type IGroupedSubComponent, type IGroupedSubComponentEventMap, type IconChangedDetail, type IconChangedEvent, type IconEntry, type IncrSearch, type IncrSearchChangeCallback, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, type IncrSearchTreeOptions as IncrSearchMillerOptions, type IncrSearchTreeOptions, type IncrSearchOptions, type IncrSearchResult, type IncrSearchState, type InputMode, ItemsProvider, IxfxHexEditorElement, IxfxIconElement, IxfxRatingElement, IxfxTimelineElement, LabelledRadialInput, LabelledRangeInput, LabelledSliderInput, LaneData, LaneType, LayoutNode, LayoutSnapshot, LeafGeom, LedElement, type ListActivateDetail, type ListActivateEvent, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListSelectDetail, type ListSelectEvent, ListSelectionController, type ListSelectionControllerConfig, type ListSelectionGesture, type ListSelectionMode, type ListSelectionModes, type ListTickleDetail, type ListTickleEvent, LoadChildrenCallback, MarkerStyle, index_d_exports as Menu, type TreeActivateDetail as MillerActivateDetail, TreeActivateDetail, type TreeActivateEvent as MillerActivateEvent, TreeActivateEvent, MillerBaseElement, MillerBaseElementEventMap, type TreeCollapseDetail as MillerCollapseDetail, TreeCollapseDetail, type TreeCollapseEvent as MillerCollapseEvent, TreeCollapseEvent, MillerConfig, type TreeExpandDetail as MillerExpandDetail, TreeExpandDetail, type TreeExpandEvent as MillerExpandEvent, TreeExpandEvent, MillerHeaderClickDetail, MillerHeaderClickEvent, MillerHeaderRightClickDetail, MillerHeaderRightClickEvent, type TreeItem as MillerItem, TreeItem, type TreeItemClickDetail as MillerItemClickDetail, TreeItemClickDetail, type TreeItemClickEvent as MillerItemClickEvent, TreeItemClickEvent, MillerItemDblClickDetail, MillerItemDblClickEvent, MillerItemRightClickDetail, MillerItemRightClickEvent, MillerItemState, MillerListElement, type TreeNode as MillerNode, TreeNode, type TreeSelectDetail as MillerSelectDetail, TreeSelectDetail, type TreeSelectEvent as MillerSelectEvent, TreeSelectEvent, MillerSelectionMode, type TreeTickleDetail as MillerTickleDetail, TreeTickleDetail, type TreeTickleEvent as MillerTickleEvent, TreeTickleEvent, MillerTreeController, MillerTreeControllerOptions, NarrowedTextChangeDetail, NarrowedTextChangeEvent, NarrowedTextElement, NarrowedTextItem, NoneSelectEventDetail, Notification, NotificationContent, NotificationManager, NotificationPillElement, NotificationPillElementEventMap, NotificationRenderer, NotificationRendererHooks, NotificationType, NotifierOptions, type OklchValue, Orientation, PanelCloseEvent, PanelElement, PanelElementEventMap, PanelGroupElement, PanelGroupOrientation, PanelInfo, PanelNode, PanelOrientation, PanelToggleDetail, PanelToggleEvent, PanelToggleInteraction, PanelVariant, PillPosition, PillQueueDisplay, PillRendererOptions, PillSafeArea, PillTapDetail, PillTapEvent, PlotDataSeries, PlotDataSeriesOptions, PlotHistogram, PlotHistogramBucketClickDetail, PlotHistogramBucketClickEvent, PlotHistogramElementEventMap, PlotHistogramOrientation, PlotHistogramValueTooltips, PlotMultiAxis, PlotMultiAxisDataPointClickDetail, PlotMultiAxisDataPointClickEvent, PlotMultiAxisElementEventMap, PlotMultiAxisLayout, PlotSingleAxis, PlotSingleAxisElementEventMap, PlotSingleAxisPointerMoveDetail, PlotSingleAxisPointerMoveEvent, PlotXyAxis, PolarPad, PolarPadInputDetail, PolarPadInputEvent, PopupItem, RadialInputChangeDetail, RadialInputChangeEvent, RadialInputElement, RadialInputInputDetail, RadialInputInputEvent, RadioGroup, RadioGroupChangeDetail, RadioGroupChangeEvent, RadioGroupMode, RadioItem, RangeElement, RangeInput, RangeMultiElement, RangeMultiInputDetail, RangeMultiInputEvent, RatingChangeDetail, RatingChangeEvent, RatingElement, RatingElementEventMap, RatingInputEvent, RatingVariant, type Rect, RectangularSelectEventDetail, RendererStyle, ResizeMode, SelectEventDetail, SelectHorizChangeDetail, SelectHorizChangeEvent, SelectHorizElement, SelectHorizEventMap, SelectionMode, SingleAxisAgeStyle, SingleAxisDrawStyle, SingleSelectEventDetail, SliderChangedField, SliderCrossover, SliderHandleKey, SliderInputChangeDetail, SliderInputChangeEvent, SliderInputElement, SliderInputElementEventMap, SliderInputInputDetail, SliderInputInputEvent, SliderLaneData, SliderLaneType, SliderMarkerStyle, SliderOrientation, SliderSingleStyle, SliderValueCFollow, SliderValueDrag, SliderValueMode, SlidingNumberElement, SlidingNumberTrend, SnackbarDismiss, SnackbarElement, SnackbarMode, SnackbarPlacement, SnapChangeDetail, SnapChangeEvent, SnapContainer, SnapInputDetail, SnapInputEvent, SnapLogic, SnapshotNode, SortCompareFn, SplitButton, SplitButtonMode, SplitButtonSelectDetail, SplitButtonSelectEvent, SplitChangeDetail, SplitChangeEvent, SplitCloseDetail, SplitCloseEvent, SplitCollapseDetail, SplitCollapseEvent, SplitExpandDetail, SplitExpandEvent, SplitLayoutElement, SplitLayoutElementEventMap, SplitPanelElement, SplitResizeDetail, SplitResizeEvent, type SubComponentActivateDetail, type SubComponentActivateEvent, type SubComponentFactory, type SubComponentItemClickDetail, type SubComponentItemClickEvent, type SubComponentSelectDetail, type SubComponentSelectEvent, type SubComponentTickleDetail, type SubComponentTickleEvent, SwipeElement, SwipeElementEventMap, SwipeInputDetail, SwipeInputEvent, SwitcherItem, Tab, TabAddOptions, TabController, TabControllerOptions, TabListChangeDetail, TabListChangeEvent, TabListDragMode, TabListElement, TabListItemElement, TabListReorderDetail, TabListReorderEvent, TabPanelElement, TabPanelsElement, TextShimmerElement, TickledController, type TickledControllerConfig, type TickledItem, TimelineController, TimelineControllerConfig, TimelineDraggingCallbackDetail, TimelineDraggingDetail, TimelineDraggingEvent, TimelineElementEventMap, TimelineEvent, TimelineEventMoveDetail, TimelineEventMoveEvent, TimelineEventResizeDetail, TimelineEventResizeEvent, TimelineSelectionChangeDetail, TimelineSelectionChangeEvent, TimelineTickleChangeDetail, TimelineTickleChangeEvent, TimelineTrack, TimelineTrackReorderDetail, TimelineTrackReorderEvent, TimelineTrackResizeDetail, TimelineTrackResizeEvent, TimelineTrackSelectDetail, TimelineTrackSelectEvent, TimelineTrackTabElement, TitlebarCloseEvent, TitlebarElement, TitlebarElementEventMap, TitlebarOrientation, TitlebarToggleDetail, TitlebarToggleEvent, TitlebarToggleInteraction, TitlebarVariant, ToolbarAlign, ToolbarElement, ToolbarGroupElement, ToolbarLayout, ToolbarOrientation, ToolbarVerticalWriting, TooltipElement, TooltipOrientations, TrackHeightMode, TrackLayout, TransitoryLabelElement, TreeBaseElement, TreeBaseElementEventMap, TreeCheckboxState, TreeComponent, TreeComponentEventMap, TreeConfig, TreeController, TreeControllerOptions, TreeDataModel, TreeDataModelOptions, TreeExclusivity, TreeFilterPredicate, TreeInteractionMode, type TreeKeyboardNavCallbacks, TreeKeyboardNavController, type TreeKeyboardNavControllerConfig, type TreeKeyboardNavItemId, TreeListAdapterOptions, TreeListElement, TreeSearchHost, TreeSelectionFilter, TwoSplitLayoutElement, UserScale, ValueMode, VerticalListAdapterOptions, VerticalListElement, ViewRange, WhenSmall, XyAgeStyle, XyDrawStyle, XyPad, XyPadEventMap, XyPadInputDetail, XyPadInputEvent, addPanelToStack, applyAgeModification, applyHighlights, applySnapshot, attachTimelineInteractions, buildHighlightTargets, buildModel, clearHighlights, collectContainerNames, collectDataResult, collectPanelIds, collectStackPaths, computeColour, computeLeafGeoms, createAcCompletionProvider, createElementIncrSearch, createEmptyLayout, createEmptyStack, createFuzzySearch, createIncrSearch, createPillRenderer, createSplit, createStack, createTreeListAdapter, createVerticalListAdapter, distribute, extractStack, findNode, findParentOf, findStackOf, findStackPathByName, getActiveDragPanelId, getIcon, getIconEntry, getIconFont, getLeafNeighbours, hasIcon, iconBus, init, insertBeside, isDragging, isMultiMode, isSplit, isStack, monitorIndeterminate, moveLeafNodeToEdge, moveLeafStep, normalise, normalize, parseColourScaleAttr, parseLayout, pointerOverAnyHost, readBaseColour, registerFontIcon, registerIcon, removePanelFromStack, resolveCssVars, resolveGrid, resolveLeafPath, resolveTracks, serializeLayout, setActive, setIconFont, svgToDataUri, swapLeaves, tickledItemStyles, tickledStyles, timelineStyles, toSnapshot, walk, wrapRoot };
8831
+ export { AcTextChangeDetail, AcTextChangeEvent, AcTextCompletionProvider, AcTextElement, AcTextItem, AcTextSelectDetail, AcTextSelectEvent, type AcTokenAddDetail, type AcTokenAddEvent, AcTokenElement, type AcTokenElementEventMap, type AcTokenItem, type AcTokenRemoveDetail, type AcTokenRemoveEvent, type AcTokenizerFn, type AcTokensChangeDetail, type AcTokensChangeEvent, AddItemOptions, Axis, ButtonElement, Checkbox, CheckboxChangeDetail, CheckboxChangeEvent, CheckboxEventMap, ClickSnapMode, ColourMapConfig, ColourMode, ColourPicker, type ColourPickerChangeEvent, type ColourPickerEventDetail, type ColourPickerInputEvent, ColourPickerPopup, ColourResult, ConfigEntry, ContiguousSelectEventDetail, CrossoverBehaviour, CrumbNavChangeDetail, CrumbNavChangeEvent, CrumbNavExpandDetail, CrumbNavExpandEvent, CrumbNavNavigateDetail, CrumbNavNavigateEvent, CrumbNavigationChangeDetail, CrumbNavigationChangeEvent, CrumbNavigationElement, CrumbNavigationElementEventMap, CrumbNavigationExpandDetail, CrumbNavigationExpandEvent, CrumbNavigationItemClickDetail, CrumbNavigationItemClickEvent, CrumbPathController, CrumbPathControllerOptions, CrumbPathElement, CrumbPathElementEventMap, CrumbSegment, CrumbSiblingLookupFn, type CssVars, CustomCheckboxOptions, DataBatch, DataController, DataControllerOptions, DataDisplayComponent, DataGridCellClickDetail, DataGridCellClickEvent, DataGridCellEditDetail, DataGridCellEditEvent, DataGridColumnReorderDetail, DataGridColumnReorderEvent, DataGridColumnResizeDetail, DataGridColumnResizeEvent, DataGridColumnVisibilityDetail, DataGridColumnVisibilityEvent, DataGridElement, DataGridElementEventMap, DataGridGroupChangeDetail, DataGridGroupChangeEvent, DataGridSelectDetail, DataGridSelectEvent, DataGridSortDetail, DataGridSortEvent, DataProviderResult, DataTableElement, DataTableElementEventMap, DataTableRow, DataTableRowClickDetail, DataTableRowClickEvent, type DetailFormatter, DetailListElement, type DetailSortComparator, type DetailSortItem, type DetailSortMode, DisplayTextLogic, DistributeResult, DockAddPanelTarget, DockAxis, DockChangeDetail, DockChangeEvent, DockDirection, DockDragBoundaryDetail, DockDragBoundaryEvent, DockDropTarget, type DockDropZone, DockEdge, DockHostElement, DockHostElementEventMap, DockLayout, DockLeafContentRules, DockLeafInfo, DockLeafRef, DockNeighbours, DockNode, DockOperation, DockPanelActivatedDetail, DockPanelActivatedEvent, DockPanelAddedDetail, DockPanelAddedEvent, DockPanelDragStartDetail, DockPanelDragStartEvent, DockPanelElement, DockPanelElementEventMap, DockPanelInit, DockPanelRemovedDetail, DockPanelRemovedEvent, DockPanelSnapshot, DockPanelTearOutDetail, DockPanelTearOutEvent, DockRect, DockSplitNode, DockStackNode, DragSnappingFn, DragTarget, EditableLabel, EditableLabelChangeDetail, EditableLabelChangeEvent, EditableMode, EditableNumber, Effect, type ElementIncrSearch, type ElementIncrSearchOptions, type ElementListSearchAdapterOptions, type ElementListSearchHost, Endpoints, EntryMode, FormElement, FormGroupElement, FormPartElement, FormatValueForHuman, FormattingOptions, type FuzzySearch, type FuzzySearchOptions, FuzzySearchResult, type GridListActivateDetail, type GridListActivateEvent, type GridListCaptionAlign, type GridListCaptionBackdrop, type GridListCaptionPosition, type GridListCaptionStyle, GridListElement, type GridListElementEventMap, type GridListFullElementEventMap, type GridListItemClickDetail, type GridListItemClickEvent, type GridListOrientation, type GridListSelectDetail, type GridListSelectEvent, type GridListTickleDetail, type GridListTickleEvent, type GridListViewportChangeDetail, type GridListViewportChangeEvent, GridMode, GridResolution, GroupNode, GroupedItemListerElement, type GroupedItemListerElementEventMap, type GroupedSelectDetail, type GroupedSelectEvent, HexChangeDetail, HexChangeEvent, type HighlightOptions, type HighlightTarget, ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, IDataProvider, type IGroupedSubComponent, type IGroupedSubComponentEventMap, type IconChangedDetail, type IconChangedEvent, type IconEntry, type IncrSearch, type IncrSearchChangeCallback, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, type IncrSearchTreeOptions as IncrSearchMillerOptions, type IncrSearchTreeOptions, type IncrSearchOptions, type IncrSearchResult, type IncrSearchState, type InputMode, ItemsProvider, IxfxHexEditorElement, IxfxIconElement, IxfxRatingElement, IxfxTimelineElement, KeyedElementIndex, LIST_ITEM_MOTION_MS, LIST_SEARCH_COMMAND_IDS, LIST_SEARCH_MODES, LabelledRadialInput, LabelledRangeInput, LabelledSliderInput, LaneData, LaneType, LayoutNode, LayoutSnapshot, LeafGeom, LedElement, type ListActivateDetail, type ListActivateEvent, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListItemMotionOptions, type ListSearchAdapter, ListSearchController, type ListSearchControllerOptions, type ListSearchHost, type ListSearchMode, type ListSelectDetail, type ListSelectEvent, ListSelectionController, type ListSelectionControllerConfig, type ListSelectionGesture, type ListSelectionMode, type ListSelectionModes, type ListTickleDetail, type ListTickleEvent, LoadChildrenCallback, MarkerStyle, index_d_exports as Menu, type TreeActivateDetail as MillerActivateDetail, TreeActivateDetail, type TreeActivateEvent as MillerActivateEvent, TreeActivateEvent, MillerBaseElement, MillerBaseElementEventMap, type TreeCollapseDetail as MillerCollapseDetail, TreeCollapseDetail, type TreeCollapseEvent as MillerCollapseEvent, TreeCollapseEvent, MillerConfig, type TreeExpandDetail as MillerExpandDetail, TreeExpandDetail, type TreeExpandEvent as MillerExpandEvent, TreeExpandEvent, MillerHeaderClickDetail, MillerHeaderClickEvent, MillerHeaderRightClickDetail, MillerHeaderRightClickEvent, type TreeItem as MillerItem, TreeItem, type TreeItemClickDetail as MillerItemClickDetail, TreeItemClickDetail, type TreeItemClickEvent as MillerItemClickEvent, TreeItemClickEvent, MillerItemDblClickDetail, MillerItemDblClickEvent, MillerItemRightClickDetail, MillerItemRightClickEvent, MillerItemState, MillerListElement, type TreeNode as MillerNode, TreeNode, MillerRebaseDetail, MillerRebaseEvent, type TreeSelectDetail as MillerSelectDetail, TreeSelectDetail, type TreeSelectEvent as MillerSelectEvent, TreeSelectEvent, MillerSelectionMode, type TreeTickleDetail as MillerTickleDetail, TreeTickleDetail, type TreeTickleEvent as MillerTickleEvent, TreeTickleEvent, MillerTreeController, MillerTreeControllerOptions, NarrowedTextChangeDetail, NarrowedTextChangeEvent, NarrowedTextElement, NarrowedTextItem, NoneSelectEventDetail, Notification, NotificationContent, NotificationManager, NotificationPillElement, NotificationPillElementEventMap, NotificationRenderer, NotificationRendererHooks, NotificationType, NotifierOptions, type OklchValue, Orientation, PanTextElement, PanelCloseEvent, PanelElement, PanelElementEventMap, PanelGroupElement, PanelGroupOrientation, PanelInfo, PanelNode, PanelOrientation, PanelToggleDetail, PanelToggleEvent, PanelToggleInteraction, PanelVariant, PillPosition, PillQueueDisplay, PillRendererOptions, PillSafeArea, PillTapDetail, PillTapEvent, PlotDataSeries, PlotDataSeriesOptions, PlotHistogram, PlotHistogramBucketClickDetail, PlotHistogramBucketClickEvent, PlotHistogramElementEventMap, PlotHistogramOrientation, PlotHistogramValueTooltips, PlotMultiAxis, PlotMultiAxisDataPointClickDetail, PlotMultiAxisDataPointClickEvent, PlotMultiAxisElementEventMap, PlotMultiAxisLayout, PlotSingleAxis, PlotSingleAxisElementEventMap, PlotSingleAxisPointerMoveDetail, PlotSingleAxisPointerMoveEvent, PlotXyAxis, PolarPad, PolarPadInputDetail, PolarPadInputEvent, PopupItem, RadialInputChangeDetail, RadialInputChangeEvent, RadialInputElement, RadialInputInputDetail, RadialInputInputEvent, RadioGroup, RadioGroupChangeDetail, RadioGroupChangeEvent, RadioGroupMode, RadioItem, RangeElement, RangeInput, RangeMultiElement, RangeMultiInputDetail, RangeMultiInputEvent, RatingChangeDetail, RatingChangeEvent, RatingElement, RatingElementEventMap, RatingInputEvent, RatingVariant, type Rect, RectangularSelectEventDetail, type RegisterListSearchCommandsOptions, RendererStyle, ResizeMode, SelectEventDetail, SelectHorizChangeDetail, SelectHorizChangeEvent, SelectHorizElement, SelectHorizEventMap, SelectionMode, SingleAxisAgeStyle, SingleAxisDrawStyle, SingleSelectEventDetail, SliderChangedField, SliderCrossover, SliderHandleKey, SliderInputChangeDetail, SliderInputChangeEvent, SliderInputElement, SliderInputElementEventMap, SliderInputInputDetail, SliderInputInputEvent, SliderLaneData, SliderLaneType, SliderMarkerStyle, SliderOrientation, SliderSingleStyle, SliderValueCFollow, SliderValueDrag, SliderValueMode, SlidingNumberElement, SlidingNumberTrend, SnackbarDismiss, SnackbarElement, SnackbarMode, SnackbarPlacement, SnapChangeDetail, SnapChangeEvent, SnapContainer, SnapInputDetail, SnapInputEvent, SnapLogic, SnapshotNode, SortCompareFn, SplitButton, SplitButtonMode, SplitButtonSelectDetail, SplitButtonSelectEvent, SplitChangeDetail, SplitChangeEvent, SplitCloseDetail, SplitCloseEvent, SplitCollapseDetail, SplitCollapseEvent, SplitExpandDetail, SplitExpandEvent, SplitLayoutElement, SplitLayoutElementEventMap, SplitPanelElement, SplitResizeDetail, SplitResizeEvent, type SubComponentActivateDetail, type SubComponentActivateEvent, type SubComponentFactory, type SubComponentItemClickDetail, type SubComponentItemClickEvent, type SubComponentSelectDetail, type SubComponentSelectEvent, type SubComponentTickleDetail, type SubComponentTickleEvent, SwipeElement, SwipeElementEventMap, SwipeInputDetail, SwipeInputEvent, SwitcherItem, Tab, TabAddOptions, TabController, TabControllerOptions, TabListChangeDetail, TabListChangeEvent, TabListDragMode, TabListElement, TabListItemElement, TabListReorderDetail, TabListReorderEvent, TabPanelElement, TabPanelsElement, TextShimmerElement, TickledController, type TickledControllerConfig, type TickledItem, TimelineController, TimelineControllerConfig, TimelineDraggingCallbackDetail, TimelineDraggingDetail, TimelineDraggingEvent, TimelineElementEventMap, TimelineEvent, TimelineEventMoveDetail, TimelineEventMoveEvent, TimelineEventResizeDetail, TimelineEventResizeEvent, TimelineSelectionChangeDetail, TimelineSelectionChangeEvent, TimelineTickleChangeDetail, TimelineTickleChangeEvent, TimelineTrack, TimelineTrackReorderDetail, TimelineTrackReorderEvent, TimelineTrackResizeDetail, TimelineTrackResizeEvent, TimelineTrackSelectDetail, TimelineTrackSelectEvent, TimelineTrackTabElement, TitlebarCloseEvent, TitlebarElement, TitlebarElementEventMap, TitlebarOrientation, TitlebarToggleDetail, TitlebarToggleEvent, TitlebarToggleInteraction, TitlebarVariant, ToolbarAlign, ToolbarElement, ToolbarGroupElement, ToolbarLayout, ToolbarOrientation, ToolbarVerticalWriting, TooltipElement, TooltipOrientations, TrackHeightMode, TrackLayout, TransitoryLabelElement, TreeBaseElement, TreeBaseElementEventMap, TreeCheckboxState, TreeComponent, TreeComponentEventMap, TreeConfig, TreeController, TreeControllerOptions, TreeDataModel, TreeDataModelOptions, TreeExclusivity, TreeFilterPredicate, TreeInteractionMode, type TreeKeyboardNavCallbacks, TreeKeyboardNavController, type TreeKeyboardNavControllerConfig, type TreeKeyboardNavItemId, TreeListAdapterOptions, TreeListElement, type TreeListSearchAdapterOptions, TreeSearchHost, TreeSelectionFilter, TwoSplitLayoutElement, UserScale, ValueMode, VerticalListAdapterOptions, VerticalListElement, ViewRange, WhenSmall, XyAgeStyle, XyDrawStyle, XyPad, XyPadEventMap, XyPadInputDetail, XyPadInputEvent, addPanelToStack, animateListItemIn, animateListItemOut, applyAgeModification, applyHighlights, applySnapshot, attachTimelineInteractions, buildHighlightTargets, buildModel, clearHighlights, collectContainerNames, collectDataResult, collectPanelIds, collectStackPaths, computeColour, computeLeafGeoms, createAcCompletionProvider, createElementIncrSearch, createElementListSearchAdapter, createEmptyLayout, createEmptyStack, createFuzzySearch, createIncrSearch, createPillRenderer, createSplit, createStack, createTreeListAdapter, createTreeListSearchAdapter, createVerticalListAdapter, distribute, extractStack, findNode, findParentOf, findStackOf, findStackPathByName, getActiveDragPanelId, getIcon, getIconEntry, getIconFont, getLeafNeighbours, hasIcon, iconBus, init, insertBeside, isDragging, isMultiMode, isSplit, isStack, keyForElement, listItemFadeKeyframes, listSearchStyles, monitorIndeterminate, moveLeafNodeToEdge, moveLeafStep, normalise, normalize, parseColourScaleAttr, parseLayout, pointerOverAnyHost, prefersReducedMotion, readBaseColour, registerFontIcon, registerIcon, registerListSearchCommands, removePanelFromStack, resolveCssVars, resolveGrid, resolveLeafPath, resolveTracks, serializeLayout, setActive, setIconFont, svgToDataUri, swapLeaves, tickledItemStyles, tickledStyles, timelineStyles, toSnapshot, walk, wrapRoot };
8003
8832
  //# sourceMappingURL=index.d.ts.map