@ixfx/components 0.16.0 → 0.16.1

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 (47) hide show
  1. package/bundle/index.d.ts +74 -10
  2. package/bundle/index.js +258 -228
  3. package/dist/ac-token.js +1 -1
  4. package/dist/{data-grid-rMkLX2qo.js → data-grid-Cqxuwgbb.js} +22 -4
  5. package/dist/{data-grid-CIG2DVip.d.ts → data-grid-Csh5EJW9.d.ts} +11 -2
  6. package/dist/data-grid.d.ts +1 -1
  7. package/dist/data-grid.js +1 -1
  8. package/dist/{detail-list-C4pDSoI8.js → detail-list-Bo5ze3SN.js} +16 -2
  9. package/dist/{detail-list-6iMTNP4N.d.ts → detail-list-DSZ1DDor.d.ts} +16 -2
  10. package/dist/detail-list.d.ts +2 -2
  11. package/dist/detail-list.js +1 -1
  12. package/dist/{flat-list-JPgQSmLW.d.ts → flat-list-CT9kX3TQ.d.ts} +1 -1
  13. package/dist/flat-list.d.ts +1 -1
  14. package/dist/flat-list.js +1 -1
  15. package/dist/{grid-list-CdEkScn-.js → grid-list-D0dJNVEF.js} +2 -1
  16. package/dist/{grid-list-D6n7WH8l.d.ts → grid-list-DDLrWRxm.d.ts} +1 -1
  17. package/dist/grid-list.d.ts +1 -1
  18. package/dist/grid-list.js +1 -1
  19. package/dist/{incr-search-JIhwB49y.js → incr-search-CgbL-OlS.js} +140 -10
  20. package/dist/incr-search.d.ts +1 -1
  21. package/dist/incr-search.js +1 -1
  22. package/dist/{index-CYRc6Dah.d.ts → index-Bnm-kKGC.d.ts} +1 -1
  23. package/dist/{index-Dr80Zdl6.d.ts → index-CUErGhCg.d.ts} +30 -3
  24. package/dist/{index-Bx0BXPxI.d.ts → index-D-lZNlHa.d.ts} +1 -1
  25. package/dist/index.d.ts +21 -12
  26. package/dist/index.js +51 -29
  27. package/dist/{miller-BFRfn0ve.js → miller-DUqiUAWQ.js} +1 -8
  28. package/dist/miller.d.ts +1 -1
  29. package/dist/miller.js +1 -1
  30. package/dist/narrowed-text.js +1 -1
  31. package/dist/sunburst-tree.d.ts +1 -1
  32. package/dist/sunburst-tree.js +1 -1
  33. package/dist/{sunbursttree-list-B_VxOHlo.js → sunbursttree-list-B_M0YTEA.js} +1 -1
  34. package/dist/{sunbursttree-list-D6j5BxVQ.d.ts → sunbursttree-list-DePuFYlU.d.ts} +1 -1
  35. package/dist/{tree-Crdpl4nc.js → tree-DAlgvaHB.js} +1 -1
  36. package/dist/tree.d.ts +1 -1
  37. package/dist/tree.js +1 -1
  38. package/dist/{vertical-list-1V1Vg2O5.js → vertical-list-DyKPKGxK.js} +1 -1
  39. package/dist/{vertical-list-BPDmZx6T.d.ts → vertical-list-SAx56U-l.d.ts} +1 -1
  40. package/dist/vertical-list.d.ts +1 -1
  41. package/dist/vertical-list.js +1 -1
  42. package/docs-user/data-grid.md +13 -4
  43. package/docs-user/detail-list.md +15 -0
  44. package/docs-user/dock.md +12 -3
  45. package/docs-user/grid-list.md +5 -2
  46. package/docs-user/index.json +2 -2
  47. package/package.json +2 -2
@@ -143,7 +143,8 @@ declare class IncrSearchTreeController {
143
143
  * - `navigate` — move the cursor to the best match; ↑/↓ cycle between matches;
144
144
  * Enter activates the current match and closes.
145
145
  * - `select` — (re)select every item whose label matches, live as you type.
146
- * - `filter` — hide items that don't match; restored when the popover closes.
146
+ * - `filter` — hide items that don't match; restored when the popover closes
147
+ * (unless `stickyFilter` keeps it on Enter).
147
148
  */
148
149
  type ListSearchMode = `navigate` | `select` | `filter`;
149
150
  /** Canonical order — used for the switch-row and to normalise a requested set. */
@@ -196,6 +197,8 @@ interface ListSearchControllerOptions<TItem> {
196
197
  modes?: readonly ListSearchMode[];
197
198
  fzf?: Partial<FzfOptions<SearchItem>>;
198
199
  placeholder?: string;
200
+ /** Initial {@link ListSearchController.stickyFilter}. Default false. */
201
+ stickyFilter?: boolean;
199
202
  }
200
203
  type ListSearchHost = ReactiveControllerHost & HTMLElement & {
201
204
  renderRoot?: DocumentFragment | HTMLElement;
@@ -208,6 +211,12 @@ type ListSearchHost = ReactiveControllerHost & HTMLElement & {
208
211
  */
209
212
  declare class ListSearchController<TItem> implements ReactiveController {
210
213
  #private;
214
+ /**
215
+ * When true, Enter in `filter` mode closes the popover but keeps the filter,
216
+ * shown as a "Filtered: …" chip. Clear it with the chip's ×, Escape on the
217
+ * host, or {@link clearFilter}; click the chip to edit the query.
218
+ */
219
+ stickyFilter: boolean;
211
220
  constructor(host: ListSearchHost, options: ListSearchControllerOptions<TItem>);
212
221
  /** `false` when no modes are available — the host should register no commands and render no field. */
213
222
  get enabled(): boolean;
@@ -225,20 +234,38 @@ declare class ListSearchController<TItem> implements ReactiveController {
225
234
  get query(): string;
226
235
  get matchCount(): number;
227
236
  get matchIndex(): number;
237
+ /** The query of a filter kept applied after the popover closed (see {@link stickyFilter}). */
238
+ get keptFilter(): string | undefined;
228
239
  hostConnected(): void;
229
240
  hostDisconnected(): void;
230
- /** Open the popover in `mode` (clamped to the available set). */
241
+ /**
242
+ * Open the popover in `mode` (clamped to the available set). When it is
243
+ * already open the query is kept: the mode switches if it differs and the
244
+ * input is refocused with its text selected.
245
+ */
231
246
  open(mode: ListSearchMode): void;
232
247
  /** Close the popover, restoring any live filter. Selection / cursor stay put. */
233
248
  close(): void;
249
+ /** Remove a filter kept by {@link stickyFilter}. No-op when none is kept. */
250
+ clearFilter(): void;
234
251
  setQuery(query: string): void;
235
252
  /** Re-interpret the current query under a new mode (undoing the old mode's effect). */
236
253
  switchMode(next: ListSearchMode): void;
254
+ /**
255
+ * Step through {@link registeredModes} (wrapping) and switch to the result.
256
+ * Bound to Tab / Shift+Tab in the popover input.
257
+ */
258
+ cycleMode(delta: 1 | -1): void;
259
+ /** Refocus the popover input (text selected) without touching the query. No-op when closed. */
260
+ focus(): void;
237
261
  /** One-shot: turn the current match set into the selection, staying in the current mode. */
238
262
  selectMatches(): void;
239
263
  nextMatch(): void;
240
264
  prevMatch(): void;
241
- /** Enter: in `navigate` activate the current match; then close. */
265
+ /**
266
+ * Enter: in `navigate` activate the current match; then close. In `filter`
267
+ * with {@link stickyFilter} and a query, close but keep the filter.
268
+ */
242
269
  commit(): void;
243
270
  /** Rebuild the searchable item set from the adapter. Called on open and on container mutation. */
244
271
  refresh(): void;
@@ -2,7 +2,7 @@ import { B as ListNativeDragStartDetail, C as TreeItemDblClickEvent, D as TreeSe
2
2
  import { a as TreeItem, i as TreeInteractionMode, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Jky6oNAp.js";
3
3
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-LU1u0CB8.js";
4
4
  import "./index-9ttcdwlL.js";
5
- import { S as ListSearchController } from "./index-Dr80Zdl6.js";
5
+ import { S as ListSearchController } from "./index-CUErGhCg.js";
6
6
  import { t as ListNativeDragController } from "./list-native-drag-controller-D_UrXipS.js";
7
7
  import { n as TickledController } from "./tickled-controller-DodxD3eQ.js";
8
8
  import { LitElement, PropertyValues, ReactiveController, ReactiveControllerHost, TemplateResult, nothing } from "lit";
package/dist/index.d.ts CHANGED
@@ -10,25 +10,25 @@ import { t as LabelledRangeInput } from "./index-CoqtMSd9.js";
10
10
  import { A as TreeTickleDetail, B as ListNativeDragStartDetail, C as TreeItemDblClickEvent, D as TreeSelectAllOptions, E as TreeSearchHost, F as ListDragPreview, I as ListDragPreviewContext, L as ListDragPreviewRenderer, M as TreeDataModel, N as TreeDataModelOptions, O as TreeSelectDetail, P as ListDragEntry, R as ListDragPreviewSourceResolver, S as TreeItemDblClickDetail, T as TreeRevealMode, V as ListNativeDragStartEvent, _ as TreeDropTarget, a as TreeComponent, b as TreeItemClickDetail, c as TreeDragContext, d as TreeDragStartEvent, f as TreeDropApplyContext, g as TreeDropPosition, h as TreeDropEvent, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, l as TreeDragEndEvent, m as TreeDropDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeDropContext, r as TreeCollapseDetail, s as TreeDndMode, t as TreeActivateDetail, u as TreeDragOverEvent, v as TreeExpandDetail, w as TreeNavigateOptions, x as TreeItemClickEvent, y as TreeExpandEvent, z as ListDragSource } from "./tree-component-DgfkxmVY.js";
11
11
  import { a as TreeItem, i as TreeInteractionMode, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Jky6oNAp.js";
12
12
  import { a as ViewStateBase, c as ViewStateChangeReason, i as VIEW_STATE_VERSION, l as ViewStateful, n as ScrollState, o as ViewStateChangeDetail, r as VIEW_STATE_CHANGE, s as ViewStateChangeEvent, t as GetViewStateOptions } from "./types-LU1u0CB8.js";
13
- import { a as TreeDropVisibleRow, c as TreeListElement, d as TreeBaseElement, f as TreeBaseElementEventMap, h as TreeConfig, i as TreeDropRowInfo, l as TreeCheckboxState, m as TreeListViewState, n as TreeDropControllerConfig, o as TreeController, p as TreeVirtualize, r as TreeDropResolvedDrag, s as TreeControllerOptions, t as TreeDropController, u as TreeAnimation } from "./index-Bx0BXPxI.js";
14
- import { A as isMultiMode, B as capKeys, C as TreeKeyboardNavController, D as ListSelectionControllerConfig, E as ListSelectionController, F as EMPTY_KEYS, G as partitionFlags, H as flagsToRecord, I as MAX_PENDING_KEYS, K as partitionKeys, L as PendingFlags, M as ListDragSelectController, N as ListDragSelectControllerConfig, O as ListSelectionGesture, P as EMPTY_FLAGS, R as PendingKeys, S as TreeKeyboardNavCallbacks, T as TreeKeyboardNavItemId, U as keysAsFlags, V as flagsFromRecord, W as keysToArray, _ as GridListSelectEvent, a as GridListCaptionAlign, b as GridListViewportChangeDetail, c as GridListCaptionStyle, d as GridListFullElementEventMap, f as GridListItemClickDetail, g as GridListSelectDetail, h as GridListOrientation, i as GridListActivateEvent, j as DragSelectRect, k as ListSelectionModes, l as GridListDataAdapter, m as GridListItemEventDetail, n as GridListViewState, o as GridListCaptionBackdrop, p as GridListItemClickEvent, q as withoutFlag, r as GridListActivateDetail, s as GridListCaptionPosition, t as GridListElement, u as GridListElementEventMap, v as GridListTickleDetail, w as TreeKeyboardNavControllerConfig, x as GridListViewportChangeEvent, y as GridListTickleEvent, z as capFlags } from "./grid-list-D6n7WH8l.js";
13
+ import { a as TreeDropVisibleRow, c as TreeListElement, d as TreeBaseElement, f as TreeBaseElementEventMap, h as TreeConfig, i as TreeDropRowInfo, l as TreeCheckboxState, m as TreeListViewState, n as TreeDropControllerConfig, o as TreeController, p as TreeVirtualize, r as TreeDropResolvedDrag, s as TreeControllerOptions, t as TreeDropController, u as TreeAnimation } from "./index-D-lZNlHa.js";
14
+ import { A as isMultiMode, B as capKeys, C as TreeKeyboardNavController, D as ListSelectionControllerConfig, E as ListSelectionController, F as EMPTY_KEYS, G as partitionFlags, H as flagsToRecord, I as MAX_PENDING_KEYS, K as partitionKeys, L as PendingFlags, M as ListDragSelectController, N as ListDragSelectControllerConfig, O as ListSelectionGesture, P as EMPTY_FLAGS, R as PendingKeys, S as TreeKeyboardNavCallbacks, T as TreeKeyboardNavItemId, U as keysAsFlags, V as flagsFromRecord, W as keysToArray, _ as GridListSelectEvent, a as GridListCaptionAlign, b as GridListViewportChangeDetail, c as GridListCaptionStyle, d as GridListFullElementEventMap, f as GridListItemClickDetail, g as GridListSelectDetail, h as GridListOrientation, i as GridListActivateEvent, j as DragSelectRect, k as ListSelectionModes, l as GridListDataAdapter, m as GridListItemEventDetail, n as GridListViewState, o as GridListCaptionBackdrop, p as GridListItemClickEvent, q as withoutFlag, r as GridListActivateDetail, s as GridListCaptionPosition, t as GridListElement, u as GridListElementEventMap, v as GridListTickleDetail, w as TreeKeyboardNavControllerConfig, x as GridListViewportChangeEvent, y as GridListTickleEvent, z as capFlags } from "./grid-list-DDLrWRxm.js";
15
15
  import { n as ViewStateControllerOptions, t as ViewStateController } from "./index-9ttcdwlL.js";
16
16
  import { a as CrumbNavigationExpandDetail, c as CrumbNavigationItemClickEvent, i as CrumbNavigationElementEventMap, l as CrumbNavigationViewState, n as CrumbNavigationChangeEvent, o as CrumbNavigationExpandEvent, r as CrumbNavigationElement, s as CrumbNavigationItemClickDetail, t as CrumbNavigationChangeDetail } from "./crumb-navigation-BbqfmkYs.js";
17
17
  import "./menu-item-bF6narIz.js";
18
18
  import { a as NarrowedTextItem, i as NarrowedTextChangeEvent, n as FuzzySearchResult, o as Orientation, r as NarrowedTextChangeDetail, s as SelectionMode, t as NarrowedTextElement } from "./index-o-CWDt11.js";
19
19
  import { ConfigEntry, DataDisplayComponent, FormattingOptions, RendererStyle } from "./data-display.js";
20
20
  import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BRZsLcvp.js";
21
- import { A as DataGridEditability, B as DataGridSortDirection, C as DataGridColumnViewState, D as DataGridColumn, E as BuiltInFormatterOptions, F as DataGridGroupBy, H as GlobalFormatter, I as DataGridGroupLabel, L as DataGridInteractionMode, M as DataGridEditorFactory, N as DataGridEditorType, O as DataGridColumnMenu, P as DataGridGetRowKey, R as DataGridRowLook, S as DataGridViewportChangeEvent, T as BuiltInFormatterName, V as DataGridSortState, _ as DataGridSelectDetail, a as DataGridColumnReorderDetail, b as DataGridSortEvent, c as DataGridColumnResizeEvent, d as DataGridElement, f as DataGridElementEventMap, g as DataGridRowActivateEvent, h as DataGridRowActivateDetail, i as DataGridCellEditEvent, j as DataGridEditorContext, k as DataGridDataType, l as DataGridColumnVisibilityDetail, m as DataGridGroupChangeEvent, n as DataGridCellClickEvent, o as DataGridColumnReorderEvent, p as DataGridGroupChangeDetail, r as DataGridCellEditDetail, s as DataGridColumnResizeDetail, t as DataGridCellClickDetail, u as DataGridColumnVisibilityEvent, v as DataGridSelectEvent, w as DataGridViewState, x as DataGridViewportChangeDetail, y as DataGridSortDetail, z as DataGridSelectionMode } from "./data-grid-CIG2DVip.js";
22
- import { A as FuzzySearch, C as ListSearchControllerOptions, D as IncrSearchTreeOptions, E as IncrSearchTreeController, F as IncrSearchChangeCallback, I as IncrSearchOptions, L as IncrSearchResult, M as HighlightOptions, N as HighlightTarget, O as createAcCompletionProvider, P as IncrSearch, R as IncrSearchState, S as ListSearchController, T as ListSearchMode, _ as DataListSearchAdapterOptions, a as RegisterListSearchCommandsOptions, b as LIST_SEARCH_MODES, c as applyHighlights, d as createFuzzySearch, f as ElementIncrSearch, g as createElementListSearchAdapter, h as ElementListSearchHost, i as LIST_SEARCH_COMMAND_IDS, j as FuzzySearchOptions, k as ElementIncrSearchOptions, l as buildHighlightTargets, m as ElementListSearchAdapterOptions, n as createTreeListSearchAdapter, o as registerListSearchCommands, p as createElementIncrSearch, r as listSearchStyles, s as createIncrSearch, t as TreeListSearchAdapterOptions, u as clearHighlights, v as DataListSearchItem, w as ListSearchHost, x as ListSearchAdapter, y as createDataListSearchAdapter } from "./index-Dr80Zdl6.js";
21
+ import { A as DataGridEditability, B as DataGridSortDirection, C as DataGridColumnViewState, D as DataGridColumn, E as BuiltInFormatterOptions, F as DataGridGroupBy, H as GlobalFormatter, I as DataGridGroupLabel, L as DataGridInteractionMode, M as DataGridEditorFactory, N as DataGridEditorType, O as DataGridColumnMenu, P as DataGridGetRowKey, R as DataGridRowLook, S as DataGridViewportChangeEvent, T as BuiltInFormatterName, V as DataGridSortState, _ as DataGridSelectDetail, a as DataGridColumnReorderDetail, b as DataGridSortEvent, c as DataGridColumnResizeEvent, d as DataGridElement, f as DataGridElementEventMap, g as DataGridRowActivateEvent, h as DataGridRowActivateDetail, i as DataGridCellEditEvent, j as DataGridEditorContext, k as DataGridDataType, l as DataGridColumnVisibilityDetail, m as DataGridGroupChangeEvent, n as DataGridCellClickEvent, o as DataGridColumnReorderEvent, p as DataGridGroupChangeDetail, r as DataGridCellEditDetail, s as DataGridColumnResizeDetail, t as DataGridCellClickDetail, u as DataGridColumnVisibilityEvent, v as DataGridSelectEvent, w as DataGridViewState, x as DataGridViewportChangeDetail, y as DataGridSortDetail, z as DataGridSelectionMode } from "./data-grid-Csh5EJW9.js";
22
+ import { A as FuzzySearch, C as ListSearchControllerOptions, D as IncrSearchTreeOptions, E as IncrSearchTreeController, F as IncrSearchChangeCallback, I as IncrSearchOptions, L as IncrSearchResult, M as HighlightOptions, N as HighlightTarget, O as createAcCompletionProvider, P as IncrSearch, R as IncrSearchState, S as ListSearchController, T as ListSearchMode, _ as DataListSearchAdapterOptions, a as RegisterListSearchCommandsOptions, b as LIST_SEARCH_MODES, c as applyHighlights, d as createFuzzySearch, f as ElementIncrSearch, g as createElementListSearchAdapter, h as ElementListSearchHost, i as LIST_SEARCH_COMMAND_IDS, j as FuzzySearchOptions, k as ElementIncrSearchOptions, l as buildHighlightTargets, m as ElementListSearchAdapterOptions, n as createTreeListSearchAdapter, o as registerListSearchCommands, p as createElementIncrSearch, r as listSearchStyles, s as createIncrSearch, t as TreeListSearchAdapterOptions, u as clearHighlights, v as DataListSearchItem, w as ListSearchHost, x as ListSearchAdapter, y as createDataListSearchAdapter } from "./index-CUErGhCg.js";
23
23
  import { t as index_d_exports } from "./index-DxyyVqzA.js";
24
24
  import { n as PanTextMode, t as PanTextElement } from "./pan-text-CoYmt2qd.js";
25
25
  import { a as ListGroupEventMap, c as ListGroupPartition, d as defaultGroupLabel, f as partitionByGroup, h as toggleInSet, i as ListGroupChangeEvent, l as ListGroupToggleDetail, m as toGroupKey, n as ListGroupBy, o as ListGroupInfo, p as resolveGroupKey, r as ListGroupChangeDetail, s as ListGroupLabel, t as EMPTY_GROUP_LABEL, u as ListGroupToggleEvent } from "./grouping-CUKgmkMm.js";
26
26
  import { a as ListItemClickDetail, c as ListSelectEvent, d as ListTickleEvent, i as ListInteractionMode, l as ListSelectionMode, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, s as ListSelectDetail, t as ListActivateDetail, u as ListTickleDetail } from "./list-selection-types-PjKdhF-a.js";
27
- import { a as DetailSortComparator, c as DetailListViewState, i as DetailGroupBy, n as DetailListElementEventMap, o as DetailSortItem, r as DetailFormatter, s as DetailSortMode, t as DetailListElement } from "./detail-list-6iMTNP4N.js";
28
- import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-BPDmZx6T.js";
27
+ import { a as DetailSortComparator, c as DetailListViewState, i as DetailGroupBy, n as DetailListElementEventMap, o as DetailSortItem, r as DetailFormatter, s as DetailSortMode, t as DetailListElement } from "./detail-list-DSZ1DDor.js";
28
+ import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-SAx56U-l.js";
29
29
  import { a as EditableMode, i as EditableLabelChangeEvent, n as EditableLabel, o as EntryMode, r as EditableLabelChangeDetail, t as DisplayTextLogic } from "./editable-label-rzXkjf1H.js";
30
30
  import { ListGroupHeaderElement } from "./list-group-header.js";
31
- import { _ as FlatListSelectEvent, a as FlatListContextMenuDetail, c as FlatListDropEvent, d as FlatListEditCommitDetail, f as FlatListEditCommitEvent, g as FlatListSelectDetail, h as FlatListNavigateEvent, i as FlatListBranchOrder, l as FlatListEditCancelDetail, m as FlatListNavigateDetail, n as FlatListActivateDetail, o as FlatListContextMenuEvent, p as FlatListElementEventMap, r as FlatListActivateEvent, s as FlatListDropDetail, t as FlatListElement, u as FlatListEditCancelEvent, v as FlatListViewState } from "./flat-list-JPgQSmLW.js";
31
+ import { _ as FlatListSelectEvent, a as FlatListContextMenuDetail, c as FlatListDropEvent, d as FlatListEditCommitDetail, f as FlatListEditCommitEvent, g as FlatListSelectDetail, h as FlatListNavigateEvent, i as FlatListBranchOrder, l as FlatListEditCancelDetail, m as FlatListNavigateDetail, n as FlatListActivateDetail, o as FlatListContextMenuEvent, p as FlatListElementEventMap, r as FlatListActivateEvent, s as FlatListDropDetail, t as FlatListElement, u as FlatListEditCancelEvent, v as FlatListViewState } from "./flat-list-CT9kX3TQ.js";
32
32
  import { t as FormElement } from "./form-BGZK3jZd.js";
33
33
  import { n as ListNativeDragControllerConfig, t as ListNativeDragController } from "./list-native-drag-controller-D_UrXipS.js";
34
34
  import { i as TickledItem, n as TickledController, r as TickledControllerConfig, t as InputMode } from "./tickled-controller-DodxD3eQ.js";
@@ -45,7 +45,7 @@ import { a as RadialInputChangeDetail, c as RadialInputInputEvent, i as MarkerSt
45
45
  import { LabelledRadialInput } from "./labelled-radial-input.js";
46
46
  import { _ as SliderValueMode, a as SliderInputChangeDetail, c as SliderInputInputDetail, d as SliderLaneType, f as SliderMarkerStyle, g as SliderValueDrag, h as SliderValueCFollow, i as SliderHandleKey, l as SliderInputInputEvent, m as SliderSingleStyle, n as SliderChangedField, o as SliderInputChangeEvent, p as SliderOrientation, r as SliderCrossover, s as SliderInputElementEventMap, t as SliderInputElement, u as SliderLaneData } from "./slider-input-BxURAAmD.js";
47
47
  import { LedElement, LedMode } from "./led.js";
48
- import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-CYRc6Dah.js";
48
+ import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-Bnm-kKGC.js";
49
49
  import { a as Notification, c as NotificationRendererHooks, i as PillTapEvent, l as NotificationType, n as NotificationPillElementEventMap, o as NotificationContent, r as PillTapDetail, s as NotificationRenderer, t as NotificationPillElement, u as NotifierOptions } from "./notification-pill-DyZydXoZ.js";
50
50
  import { A as applyAgeModification, C as SingleAxisAgeStyle, D as ColourMapConfig, E as PlotDataSeriesOptions, M as parseColourScaleAttr, N as readBaseColour, O as ColourMode, S as PlotSingleAxisPointerMoveEvent, T as PlotDataSeries, _ as PlotMultiAxisElementEventMap, a as PlotHistogramBucketClickDetail, b as PlotSingleAxisElementEventMap, c as PlotHistogramInteractionMode, d as PlotHistogramSelectionChangeEvent, f as PlotHistogramSelectionRange, g as PlotMultiAxisDataPointClickEvent, h as PlotMultiAxisDataPointClickDetail, i as PlotHistogram, j as computeColour, k as ColourResult, l as PlotHistogramOrientation, m as PlotMultiAxis, n as XyAgeStyle, o as PlotHistogramBucketClickEvent, p as PlotHistogramValueTooltips, r as XyDrawStyle, s as PlotHistogramElementEventMap, t as PlotXyAxis, u as PlotHistogramSelectionChangeDetail, v as PlotMultiAxisLayout, w as SingleAxisDrawStyle, x as PlotSingleAxisPointerMoveDetail, y as PlotSingleAxis } from "./xy-axis-DQqd2yXJ.js";
51
51
  import { PolarPad, PolarPadInputDetail, PolarPadInputEvent } from "./polar-pad.js";
@@ -55,7 +55,7 @@ import { RangeElement } from "./range.js";
55
55
  import { SelectHorizChangeDetail, SelectHorizChangeEvent, SelectHorizElement, SelectHorizEventMap } from "./select-horiz.js";
56
56
  import { SnackbarDismiss, SnackbarElement, SnackbarMode, SnackbarPlacement } from "./snackbar.js";
57
57
  import { ClickSnapMode, SnapChangeDetail, SnapChangeEvent, SnapContainer, SnapInputDetail, SnapInputEvent, SnapLogic } from "./snap-container.js";
58
- import { a as SunburstViewState, c as SunburstArcVisual, d as SunburstLayout, f as SunburstLayoutNode, g as SunburstView, h as SunburstValueFormatter, i as SunburstZoomEvent, l as SunburstInteractionMode, m as SunburstValueAccessor, n as SunburstTreeListElementEventMap, o as ComputeSunburstLayoutOptions, p as SunburstRings, r as SunburstZoomDetail, s as SUNBURST_PATH_SEPARATOR, t as SunburstTreeListElement, u as SunburstLabelPlacement } from "./sunbursttree-list-D6j5BxVQ.js";
58
+ import { a as SunburstViewState, c as SunburstArcVisual, d as SunburstLayout, f as SunburstLayoutNode, g as SunburstView, h as SunburstValueFormatter, i as SunburstZoomEvent, l as SunburstInteractionMode, m as SunburstValueAccessor, n as SunburstTreeListElementEventMap, o as ComputeSunburstLayoutOptions, p as SunburstRings, r as SunburstZoomDetail, s as SUNBURST_PATH_SEPARATOR, t as SunburstTreeListElement, u as SunburstLabelPlacement } from "./sunbursttree-list-DePuFYlU.js";
59
59
  import { SwipeElement, SwipeElementEventMap, SwipeInputDetail, SwipeInputEvent } from "./swipe.js";
60
60
  import { A as TimelineTrackReorderEvent, C as TimelineEventResizeEvent, D as TimelineTickleChangeEvent, E as TimelineTickleChangeDetail, F as TrackHeightMode, I as TrackLayout, L as UserScale, M as TimelineTrackResizeEvent, N as TimelineTrackSelectDetail, O as TimelineTrack, P as TimelineTrackSelectEvent, R as ViewRange, S as TimelineEventResizeDetail, T as TimelineSelectionChangeEvent, _ as TimelineDraggingEvent, a as CssVars, b as TimelineEventMoveDetail, c as resolveGrid, d as DragSnappingFn, f as DragTarget, g as TimelineDraggingDetail, h as TimelineDraggingCallbackDetail, i as TimelineTrackTabElement, j as TimelineTrackResizeDetail, k as TimelineTrackReorderDetail, l as TimelineController, m as GridResolution, n as attachTimelineInteractions, o as Rect, p as GridMode, r as IxfxTimelineElement, s as resolveCssVars, t as timelineStyles, u as TimelineControllerConfig, v as TimelineElementEventMap, w as TimelineSelectionChangeDetail, x as TimelineEventMoveEvent, y as TimelineEvent } from "./index-DV3iaUBW.js";
61
61
  import { Effect, TransitoryLabelElement } from "./transitory-label.js";
@@ -1198,6 +1198,11 @@ declare class DockHostElement extends LitElement {
1198
1198
  acceptsKinds: readonly string[] | null;
1199
1199
  /** Finest-grained veto, consulted per candidate zone. */
1200
1200
  canAccept: ((panelId: string, op: DockOperation) => boolean) | undefined;
1201
+ /**
1202
+ * Tab label for a placeholder (a panel a restored layout names that the host
1203
+ * doesn't hold yet). Defaults to the panel id.
1204
+ */
1205
+ placeholderLabel: ((panelId: string) => string) | undefined;
1201
1206
  private _model;
1202
1207
  private _pool;
1203
1208
  private _dropZone;
@@ -1286,11 +1291,15 @@ declare class DockHostElement extends LitElement {
1286
1291
  */
1287
1292
  setViewState(state: Partial<DockHostViewState>): void;
1288
1293
  /**
1289
- * Placeholders are part of the layout tree rather than a separate pending
1290
- * set, so there is nothing to clear here: remove a placeholder with
1291
- * `removePanel(id)`.
1294
+ * Drop every placeholder: panels the restored layout names that the host
1295
+ * doesn't hold. Call it once the app has added all the panels it has, so
1296
+ * ids for panels that no longer exist don't linger (and get saved again).
1292
1297
  */
1293
1298
  clearPendingViewState(): void;
1299
+ /** @deprecated Since 0.16; use `getViewState().layout`. */
1300
+ saveLayout(): DockLayout;
1301
+ /** @deprecated Since 0.16; use `setViewState({ layout })`. */
1302
+ loadLayout(layout: DockLayout): void;
1294
1303
  /** The current layout, folding live split weights from the DOM. */
1295
1304
  private _captureLayout;
1296
1305
  /** Whether `panelId` is in the model only as a placeholder from a restored layout. */
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { a as iconBus, c as setIconFont, i as hasIcon, l as svgToDataUri, n as g
8
8
  import { t as IxfxIconElement } from "./icon-1gpwtPx8.js";
9
9
  import { AcTextElement } from "./ac-text.js";
10
10
  import { t as DataController } from "./data-controller-DOlmqNKb.js";
11
- import { a as LIST_SEARCH_COMMAND_IDS, c as createElementListSearchAdapter, d as createDataListSearchAdapter, f as IncrSearchTreeController, h as createFuzzySearch, i as ListSearchController, l as KeyedElementIndex, m as createAcCompletionProvider, n as listSearchStyles, o as registerListSearchCommands, p as createIncrSearch, r as LIST_SEARCH_MODES, s as createElementIncrSearch, t as createTreeListSearchAdapter, u as keyForElement } from "./incr-search-JIhwB49y.js";
11
+ import { a as LIST_SEARCH_COMMAND_IDS, c as createElementListSearchAdapter, d as createDataListSearchAdapter, f as IncrSearchTreeController, h as createFuzzySearch, i as ListSearchController, l as KeyedElementIndex, m as createAcCompletionProvider, n as listSearchStyles, o as registerListSearchCommands, p as createIncrSearch, r as LIST_SEARCH_MODES, s as createElementIncrSearch, t as createTreeListSearchAdapter, u as keyForElement } from "./incr-search-CgbL-OlS.js";
12
12
  import { AcTokenElement } from "./ac-token.js";
13
13
  import { t as handleStyles } from "./handle-DAXs7kbJ.js";
14
14
  import { TitlebarElement } from "./titlebar.js";
@@ -28,17 +28,17 @@ import { t as CheckedSelect } from "./checked-select-CBUidG7n.js";
28
28
  import { n as ColourPicker, t as ColourPickerPopup } from "./colour-picker-DwAa6RDh.js";
29
29
  import { LabelledRangeInput } from "./labelled-range-input.js";
30
30
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
31
- import { a as TreeDataModel, c as pruneDraggedDescendants, i as TreeDropController, n as TreeListElement, o as applyTreeDrop, r as TreeBaseElement, s as dropTargetFor, t as TreeController } from "./tree-Crdpl4nc.js";
31
+ import { a as TreeDataModel, c as pruneDraggedDescendants, i as TreeDropController, n as TreeListElement, o as applyTreeDrop, r as TreeBaseElement, s as dropTargetFor, t as TreeController } from "./tree-DAlgvaHB.js";
32
32
  import { a as restoreElementScroll, c as VIEW_STATE_VERSION, i as onUserScrollIntent, n as anchorFromRow, o as scrollToOffset, r as captureElementScroll, s as VIEW_STATE_CHANGE, t as ViewStateController } from "./view-state-controller-BdyXWUUM.js";
33
33
  import { t as scrollFadeStyles } from "./scroll-fade-Xx28D7mH.js";
34
34
  import { t as CrumbNavigationElement } from "./crumb-navigation-YnFVFqrx.js";
35
35
  import { NarrowedTextElement } from "./narrowed-text.js";
36
36
  import { DataDisplayComponent } from "./data-display.js";
37
37
  import { t as createDragGhost } from "./drag-ghost-DtSDvjri.js";
38
- import { t as DataGridElement } from "./data-grid-rMkLX2qo.js";
38
+ import { t as DataGridElement } from "./data-grid-Cqxuwgbb.js";
39
39
  import { a as menuFromTreeToElements, t as menu_exports } from "./menu-CU9KAm8s.js";
40
40
  import { t as PanTextElement } from "./pan-text-CqtvjPyK.js";
41
- import { t as DetailListElement } from "./detail-list-C4pDSoI8.js";
41
+ import { t as DetailListElement } from "./detail-list-Bo5ze3SN.js";
42
42
  import { ListGroupHeaderElement } from "./list-group-header.js";
43
43
  import { a as distribute, c as preserveRestoreWeights, d as toSnapshot, f as walk, i as buildModel, l as resolveTracks, n as SplitPanelElement, o as findPanelNode, r as applySnapshot, s as normalise, t as SplitLayoutElement, u as setPanelRestoreWeight } from "./split-layout-DTY4PJRp.js";
44
44
  import { t as TabListElement } from "./tab-list-R_bGbDvO.js";
@@ -46,10 +46,10 @@ import { EditableLabel } from "./editable-label.js";
46
46
  import { t as resolveAxisStep } from "./keyboard-B5xD7Fz-.js";
47
47
  import { t as WheelNudgeMixin } from "./wheel-nudge-D5rmht3v.js";
48
48
  import { n as EditableNumber, t as LabelledSliderInput } from "./labelled-slider-input-FdCRi6st.js";
49
- import { t as VerticalListElement } from "./vertical-list-1V1Vg2O5.js";
49
+ import { t as VerticalListElement } from "./vertical-list-DyKPKGxK.js";
50
50
  import { FlatListElement } from "./flat-list.js";
51
51
  import { n as formStyles, r as adoptLightDomStyles, t as FormElement } from "./form-CY0nibZ5.js";
52
- import { t as GridListElement } from "./grid-list-CdEkScn-.js";
52
+ import { t as GridListElement } from "./grid-list-D0dJNVEF.js";
53
53
  import { PanelElement } from "./panel.js";
54
54
  import { GroupedItemListerElement } from "./grouped-item-lister.js";
55
55
  import { a as resolveKeyPath, i as reconcileSelection$1, n as reconcileCursor, t as pathFromJson } from "./tree-CftHwtEb.js";
@@ -58,7 +58,7 @@ import { t as RadialInputElement } from "./radial-input-KMVltQfe.js";
58
58
  import { LabelledRadialInput } from "./labelled-radial-input.js";
59
59
  import { t as SliderInputElement } from "./slider-input-ByHdotzp.js";
60
60
  import { LedElement } from "./led.js";
61
- import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-BFRfn0ve.js";
61
+ import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-DUqiUAWQ.js";
62
62
  import { NotificationPillElement } from "./notifier.js";
63
63
  import { a as TooltipElement, c as computeColour, i as PlotMultiAxis, l as parseColourScaleAttr, n as PlotSingleAxis, o as PlotDataSeries, r as PlotHistogram, s as applyAgeModification, t as PlotXyAxis, u as readBaseColour } from "./xy-axis-CyMd_Bn1.js";
64
64
  import { PolarPad } from "./polar-pad.js";
@@ -68,7 +68,7 @@ import { RangeElement } from "./range.js";
68
68
  import { SelectHorizElement } from "./select-horiz.js";
69
69
  import { SnackbarElement } from "./snackbar.js";
70
70
  import { SnapContainer } from "./snap-container.js";
71
- import { a as findSunburstId, c as sunburstChildId, d as sunburstParentId, f as sunburstPathToId, i as defaultSunburstValueAccessor, l as sunburstHasChildren, n as computeSunburstLayout, o as findSunburstNodeById, p as SUNBURST_PATH_SEPARATOR, r as createValueResolver, s as isSunburstAncestorId, t as SunburstTreeListElement, u as sunburstIdToPath } from "./sunbursttree-list-B_VxOHlo.js";
71
+ import { a as findSunburstId, c as sunburstChildId, d as sunburstParentId, f as sunburstPathToId, i as defaultSunburstValueAccessor, l as sunburstHasChildren, n as computeSunburstLayout, o as findSunburstNodeById, p as SUNBURST_PATH_SEPARATOR, r as createValueResolver, s as isSunburstAncestorId, t as SunburstTreeListElement, u as sunburstIdToPath } from "./sunbursttree-list-B_M0YTEA.js";
72
72
  import { SwipeElement } from "./swipe.js";
73
73
  import { a as resolveCssVars, i as attachTimelineInteractions, n as TimelineTrackTabElement, o as resolveGrid, r as timelineStyles, s as TimelineController, t as IxfxTimelineElement } from "./timeline-BP1Ux2EV.js";
74
74
  import { TransitoryLabelElement } from "./transitory-label.js";
@@ -3601,21 +3601,29 @@ function withoutAbsentPanels(layout, isPresent) {
3601
3601
  //#endregion
3602
3602
  //#region src/tabs/tab-list-item.ts
3603
3603
  const resizeHandlers = /* @__PURE__ */ new WeakMap();
3604
- const sharedResizeObserver = new ResizeObserver((entries) => {
3605
- for (const entry of entries) resizeHandlers.get(entry.target)?.(entry.contentRect.width);
3606
- });
3604
+ let resizeObserver;
3605
+ function sharedResizeObserver() {
3606
+ resizeObserver ??= new ResizeObserver((entries) => {
3607
+ for (const entry of entries) resizeHandlers.get(entry.target)?.(entry.contentRect.width);
3608
+ });
3609
+ return resizeObserver;
3610
+ }
3607
3611
  const mutationHandlers = /* @__PURE__ */ new Map();
3608
- const sharedMutationObserver = new MutationObserver((records) => {
3609
- const touched = /* @__PURE__ */ new Set();
3610
- for (const record of records) for (let node = record.target; node; node = node.parentNode) {
3611
- const handler = mutationHandlers.get(node);
3612
- if (handler) {
3613
- touched.add(handler);
3614
- break;
3612
+ let mutationObserver;
3613
+ function sharedMutationObserver() {
3614
+ mutationObserver ??= new MutationObserver((records) => {
3615
+ const touched = /* @__PURE__ */ new Set();
3616
+ for (const record of records) for (let node = record.target; node; node = node.parentNode) {
3617
+ const handler = mutationHandlers.get(node);
3618
+ if (handler) {
3619
+ touched.add(handler);
3620
+ break;
3621
+ }
3615
3622
  }
3616
- }
3617
- for (const handler of touched) handler();
3618
- });
3623
+ for (const handler of touched) handler();
3624
+ });
3625
+ return mutationObserver;
3626
+ }
3619
3627
  let TabListItemElement = class TabListItemElement extends LitElement {
3620
3628
  constructor(..._args) {
3621
3629
  super(..._args);
@@ -3649,10 +3657,10 @@ let TabListItemElement = class TabListItemElement extends LitElement {
3649
3657
  resizeHandlers.set(this, (width) => {
3650
3658
  this._compact = width < 64;
3651
3659
  });
3652
- sharedResizeObserver.observe(this);
3660
+ sharedResizeObserver().observe(this);
3653
3661
  this._wireSlotListeners();
3654
3662
  mutationHandlers.set(this, this._onLabelMutation);
3655
- sharedMutationObserver.observe(this, {
3663
+ sharedMutationObserver().observe(this, {
3656
3664
  childList: true,
3657
3665
  characterData: true,
3658
3666
  subtree: true,
@@ -3662,7 +3670,7 @@ let TabListItemElement = class TabListItemElement extends LitElement {
3662
3670
  }
3663
3671
  disconnectedCallback() {
3664
3672
  super.disconnectedCallback();
3665
- sharedResizeObserver.unobserve(this);
3673
+ sharedResizeObserver().unobserve(this);
3666
3674
  resizeHandlers.delete(this);
3667
3675
  this._commandCleanup?.();
3668
3676
  this._commandCleanup = void 0;
@@ -4616,11 +4624,24 @@ let DockHostElement = class DockHostElement extends LitElement {
4616
4624
  });
4617
4625
  }
4618
4626
  /**
4619
- * Placeholders are part of the layout tree rather than a separate pending
4620
- * set, so there is nothing to clear here: remove a placeholder with
4621
- * `removePanel(id)`.
4627
+ * Drop every placeholder: panels the restored layout names that the host
4628
+ * doesn't hold. Call it once the app has added all the panels it has, so
4629
+ * ids for panels that no longer exist don't linger (and get saved again).
4622
4630
  */
4623
- clearPendingViewState() {}
4631
+ clearPendingViewState() {
4632
+ const placeholders = collectPanelIds(this._model).filter((id) => this._isPlaceholder(id));
4633
+ if (placeholders.length === 0) return;
4634
+ for (const id of placeholders) this._removeFromModel(id);
4635
+ this._commit();
4636
+ }
4637
+ /** @deprecated Since 0.16; use `getViewState().layout`. */
4638
+ saveLayout() {
4639
+ return this._captureLayout();
4640
+ }
4641
+ /** @deprecated Since 0.16; use `setViewState({ layout })`. */
4642
+ loadLayout(layout) {
4643
+ this.setViewState({ layout });
4644
+ }
4624
4645
  /** The current layout, folding live split weights from the DOM. */
4625
4646
  _captureLayout() {
4626
4647
  this._foldLiveWeights();
@@ -5627,7 +5648,7 @@ let DockHostElement = class DockHostElement extends LitElement {
5627
5648
  .iconName=${el?.iconName ?? ``}
5628
5649
  .closeable=${el?.closable ?? false}
5629
5650
  @close=${() => this.removePanel(panelId)}
5630
- >${el?.title ?? panelId}</ixfx-tab-list-item>
5651
+ >${el?.title ?? this.placeholderLabel?.(panelId) ?? panelId}</ixfx-tab-list-item>
5631
5652
  `;
5632
5653
  }
5633
5654
  _stripCaretRect(strip, gapIndex, hostRect) {
@@ -5846,6 +5867,7 @@ __decorate([property({
5846
5867
  converter: { fromAttribute: (value) => value === null ? null : value.split(/\s+/).filter((k) => k.length > 0) }
5847
5868
  })], DockHostElement.prototype, "acceptsKinds", void 0);
5848
5869
  __decorate([property({ attribute: false })], DockHostElement.prototype, "canAccept", void 0);
5870
+ __decorate([property({ attribute: false })], DockHostElement.prototype, "placeholderLabel", void 0);
5849
5871
  __decorate([state()], DockHostElement.prototype, "_model", void 0);
5850
5872
  __decorate([state()], DockHostElement.prototype, "_pool", void 0);
5851
5873
  __decorate([state()], DockHostElement.prototype, "_dropZone", void 0);
@@ -2,7 +2,7 @@ import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
2
2
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
3
3
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
4
4
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
5
- import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-JIhwB49y.js";
5
+ import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-CgbL-OlS.js";
6
6
  import { a as capKeys, d as partitionKeys, l as keysToArray, n as EMPTY_KEYS } from "./pending-BGidHppL.js";
7
7
  import "./interaction-E-uMGHkJ.js";
8
8
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
@@ -1770,13 +1770,6 @@ let MillerBaseElement = class MillerBaseElement extends LitElement {
1770
1770
  @keyframes miller-spin {
1771
1771
  to { transform: rotate(360deg); }
1772
1772
  }
1773
-
1774
- ::highlight(incr-search-highlight) {
1775
- background: var(--search-highlight-bg, var(--accent));
1776
- color: var(--search-highlight-color, var(--accent-text, #fff));
1777
- border-radius: 2px;
1778
- padding: 0 1px;
1779
- }
1780
1773
  `
1781
1774
  ];
1782
1775
  }
package/dist/miller.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { A as TreeTickleDetail, O as TreeSelectDetail, b as TreeItemClickDetail, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, n as TreeActivateEvent, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-DgfkxmVY.js";
2
2
  import { a as TreeItem, o as TreeNode } from "./types-Jky6oNAp.js";
3
- import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-CYRc6Dah.js";
3
+ import { _ as MillerRebaseEvent, a as MillerBaseElementEventMap, c as MillerHeaderClickEvent, d as MillerItemDblClickDetail, f as MillerItemDblClickEvent, g as MillerRebaseDetail, h as MillerItemState, i as MillerBaseElement, l as MillerHeaderRightClickDetail, m as MillerItemRightClickEvent, n as MillerTreeControllerOptions, o as MillerListViewState, p as MillerItemRightClickDetail, r as MillerListElement, s as MillerHeaderClickDetail, t as MillerTreeController, u as MillerHeaderRightClickEvent, v as MillerSelectionMode } from "./index-Bnm-kKGC.js";
4
4
  export { type TreeActivateDetail as MillerActivateDetail, type TreeActivateEvent as MillerActivateEvent, MillerBaseElement, MillerBaseElementEventMap, type TreeCollapseDetail as MillerCollapseDetail, type TreeCollapseEvent as MillerCollapseEvent, type TreeExpandDetail as MillerExpandDetail, type TreeExpandEvent as MillerExpandEvent, MillerHeaderClickDetail, MillerHeaderClickEvent, MillerHeaderRightClickDetail, MillerHeaderRightClickEvent, type TreeItem as MillerItem, type TreeItemClickDetail as MillerItemClickDetail, type TreeItemClickEvent as MillerItemClickEvent, MillerItemDblClickDetail, MillerItemDblClickEvent, MillerItemRightClickDetail, MillerItemRightClickEvent, MillerItemState, MillerListElement, type MillerListViewState, type TreeNode as MillerNode, MillerRebaseDetail, MillerRebaseEvent, type TreeSelectDetail as MillerSelectDetail, type TreeSelectEvent as MillerSelectEvent, MillerSelectionMode, type TreeTickleDetail as MillerTickleDetail, type TreeTickleEvent as MillerTickleEvent, MillerTreeController, MillerTreeControllerOptions };
package/dist/miller.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-BFRfn0ve.js";
1
+ import { n as MillerListElement, r as MillerBaseElement, t as MillerTreeController } from "./miller-DUqiUAWQ.js";
2
2
  export { MillerBaseElement, MillerListElement, MillerTreeController };
@@ -3,7 +3,7 @@ import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
3
3
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
4
4
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
5
5
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
6
- import { p as createIncrSearch } from "./incr-search-JIhwB49y.js";
6
+ import { p as createIncrSearch } from "./incr-search-CgbL-OlS.js";
7
7
  import "./interaction-E-uMGHkJ.js";
8
8
  import { LitElement, css, html, nothing } from "lit";
9
9
  import { property, query, state } from "lit/decorators.js";
@@ -1,2 +1,2 @@
1
- import { a as SunburstViewState, i as SunburstZoomEvent, n as SunburstTreeListElementEventMap, r as SunburstZoomDetail, t as SunburstTreeListElement } from "./sunbursttree-list-D6j5BxVQ.js";
1
+ import { a as SunburstViewState, i as SunburstZoomEvent, n as SunburstTreeListElementEventMap, r as SunburstZoomDetail, t as SunburstTreeListElement } from "./sunbursttree-list-DePuFYlU.js";
2
2
  export { SunburstTreeListElement, SunburstTreeListElementEventMap, type SunburstViewState, SunburstZoomDetail, SunburstZoomEvent };
@@ -1,2 +1,2 @@
1
- import { t as SunburstTreeListElement } from "./sunbursttree-list-B_VxOHlo.js";
1
+ import { t as SunburstTreeListElement } from "./sunbursttree-list-B_M0YTEA.js";
2
2
  export { SunburstTreeListElement };
@@ -1,7 +1,7 @@
1
1
  import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
2
2
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
3
3
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
4
- import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-JIhwB49y.js";
4
+ import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-CgbL-OlS.js";
5
5
  import { a as capKeys, l as keysToArray, n as EMPTY_KEYS } from "./pending-BGidHppL.js";
6
6
  import { t as collectDataResult } from "./data-provider-35TyWclX.js";
7
7
  import { t as ViewStateController } from "./view-state-controller-BdyXWUUM.js";
@@ -2,7 +2,7 @@ import { C as TreeItemDblClickEvent, E as TreeSearchHost, M as TreeDataModel, a
2
2
  import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Jky6oNAp.js";
3
3
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-LU1u0CB8.js";
4
4
  import "./index-9ttcdwlL.js";
5
- import { S as ListSearchController } from "./index-Dr80Zdl6.js";
5
+ import { S as ListSearchController } from "./index-CUErGhCg.js";
6
6
  import { LitElement, PropertyValues } from "lit";
7
7
  import { CommandRegistry } from "@clinth/ui-commands";
8
8
  //#region src/sunburst-tree/types.d.ts
@@ -2,7 +2,7 @@ import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
2
2
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrAHEj1q.js";
3
3
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
4
4
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
5
- import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-JIhwB49y.js";
5
+ import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-CgbL-OlS.js";
6
6
  import { i as animateListItemOut, o as prefersReducedMotion, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-CcXoS0YX.js";
7
7
  import { a as capKeys, c as keysAsFlags, f as withoutFlag, i as capFlags, l as keysToArray, n as EMPTY_KEYS, o as flagsFromRecord, s as flagsToRecord, t as EMPTY_FLAGS } from "./pending-BGidHppL.js";
8
8
  import { n as createScrollHoverGuard } from "./scroll-hover-guard-Cjw6179Q.js";
package/dist/tree.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { A as TreeTickleDetail, M as TreeDataModel, N as TreeDataModelOptions, O as TreeSelectDetail, T as TreeRevealMode, _ as TreeDropTarget, b as TreeItemClickDetail, c as TreeDragContext, d as TreeDragStartEvent, g as TreeDropPosition, h as TreeDropEvent, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, l as TreeDragEndEvent, m as TreeDropDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeDropContext, r as TreeCollapseDetail, s as TreeDndMode, t as TreeActivateDetail, u as TreeDragOverEvent, v as TreeExpandDetail, w as TreeNavigateOptions, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-DgfkxmVY.js";
2
2
  import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-Jky6oNAp.js";
3
- import { a as TreeDropVisibleRow, c as TreeListElement, d as TreeBaseElement, f as TreeBaseElementEventMap, h as TreeConfig, i as TreeDropRowInfo, l as TreeCheckboxState, m as TreeListViewState, n as TreeDropControllerConfig, o as TreeController, p as TreeVirtualize, r as TreeDropResolvedDrag, s as TreeControllerOptions, t as TreeDropController, u as TreeAnimation } from "./index-Bx0BXPxI.js";
3
+ import { a as TreeDropVisibleRow, c as TreeListElement, d as TreeBaseElement, f as TreeBaseElementEventMap, h as TreeConfig, i as TreeDropRowInfo, l as TreeCheckboxState, m as TreeListViewState, n as TreeDropControllerConfig, o as TreeController, p as TreeVirtualize, r as TreeDropResolvedDrag, s as TreeControllerOptions, t as TreeDropController, u as TreeAnimation } from "./index-D-lZNlHa.js";
4
4
  export { type LoadChildrenCallback, type TreeActivateDetail, type TreeActivateEvent, TreeAnimation, TreeBaseElement, TreeBaseElementEventMap, type TreeCheckboxState, type TreeCollapseDetail, type TreeCollapseEvent, type TreeComponentEventMap, TreeConfig, TreeController, TreeControllerOptions, TreeDataModel, type TreeDataModelOptions, type TreeDndMode, type TreeDragContext, type TreeDragEndEvent, type TreeDragOverEvent, type TreeDragStartEvent, type TreeDropContext, TreeDropController, TreeDropControllerConfig, type TreeDropDetail, type TreeDropEvent, type TreeDropPosition, TreeDropResolvedDrag, TreeDropRowInfo, type TreeDropTarget, TreeDropVisibleRow, type TreeExclusivity, type TreeExpandDetail, type TreeExpandEvent, type TreeFilterPredicate, type TreeItem, type TreeItemClickDetail, type TreeItemClickEvent, TreeListElement, type TreeListViewState, type TreeNavigateOptions, type TreeNode, type TreeRevealMode, type TreeSelectDetail, type TreeSelectEvent, type TreeSelectionFilter, type TreeTickleDetail, type TreeTickleEvent, TreeVirtualize };
package/dist/tree.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TreeDataModel, i as TreeDropController, n as TreeListElement, r as TreeBaseElement, t as TreeController } from "./tree-Crdpl4nc.js";
1
+ import { a as TreeDataModel, i as TreeDropController, n as TreeListElement, r as TreeBaseElement, t as TreeController } from "./tree-DAlgvaHB.js";
2
2
  export { TreeBaseElement, TreeController, TreeDataModel, TreeDropController, TreeListElement };
@@ -1,7 +1,7 @@
1
1
  import { t as TickledController } from "./tickled-controller-D-HZymaZ.js";
2
2
  import { t as themeFallbacks } from "./fallbacks-DQ_5OsmR.js";
3
3
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
4
- import { c as createElementListSearchAdapter, i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, u as keyForElement } from "./incr-search-JIhwB49y.js";
4
+ import { c as createElementListSearchAdapter, i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, u as keyForElement } from "./incr-search-CgbL-OlS.js";
5
5
  import { i as animateListItemOut, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-CcXoS0YX.js";
6
6
  import { r as ListDragSelectController, t as ListSelectionController } from "./list-selection-controller-5L0Nj9tR.js";
7
7
  import { l as keysToArray } from "./pending-BGidHppL.js";
@@ -2,7 +2,7 @@ import { L as ListDragPreviewRenderer, R as ListDragPreviewSourceResolver, V as
2
2
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-LU1u0CB8.js";
3
3
  import "./index-9ttcdwlL.js";
4
4
  import { n as ListViewportChangeEvent } from "./list-viewport-types-BRZsLcvp.js";
5
- import { S as ListSearchController } from "./index-Dr80Zdl6.js";
5
+ import { S as ListSearchController } from "./index-CUErGhCg.js";
6
6
  import { i as ListInteractionMode, l as ListSelectionMode, r as ListElementEventMap } from "./list-selection-types-PjKdhF-a.js";
7
7
  import "./editable-label-rzXkjf1H.js";
8
8
  import { LitElement, PropertyValues } from "lit";
@@ -1,5 +1,5 @@
1
1
  import { B as ListNativeDragStartDetail, F as ListDragPreview, I as ListDragPreviewContext, L as ListDragPreviewRenderer, P as ListDragEntry, V as ListNativeDragStartEvent, z as ListDragSource } from "./tree-component-DgfkxmVY.js";
2
2
  import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BRZsLcvp.js";
3
3
  import { a as ListItemClickDetail, c as ListSelectEvent, d as ListTickleEvent, i as ListInteractionMode, l as ListSelectionMode, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, s as ListSelectDetail, t as ListActivateDetail, u as ListTickleDetail } from "./list-selection-types-PjKdhF-a.js";
4
- import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-BPDmZx6T.js";
4
+ import { a as VerticalListViewState, c as ListDragLeaveDetail, d as ListDropDetail, f as ListDropEvent, g as ListEditCommitEvent, h as ListEditCommitDetail, i as VerticalListElementEventMap, l as ListDragLeaveEvent, m as ListEditCancelEvent, n as CustomCheckboxOptions, o as ListContextMenuDetail, p as ListEditCancelDetail, r as VerticalListElement, s as ListContextMenuEvent, t as AddItemOptions, u as ListDragOverEvent } from "./vertical-list-SAx56U-l.js";
5
5
  export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListContextMenuDetail, type ListContextMenuEvent, type ListDragEntry, type ListDragLeaveDetail, type ListDragLeaveEvent, type ListDragOverEvent, type ListDragPreview, type ListDragPreviewContext, type ListDragPreviewRenderer, type ListDragSource, type ListDropDetail, type ListDropEvent, type ListEditCancelDetail, type ListEditCancelEvent, type ListEditCommitDetail, type ListEditCommitEvent, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListNativeDragStartDetail, type ListNativeDragStartEvent, type ListSelectDetail, type ListSelectEvent, type ListSelectionMode, type ListTickleDetail, type ListTickleEvent, type ListViewportChangeDetail, type ListViewportChangeEvent, VerticalListElement, VerticalListElementEventMap, type VerticalListViewState };
@@ -1,2 +1,2 @@
1
- import { t as VerticalListElement } from "./vertical-list-1V1Vg2O5.js";
1
+ import { t as VerticalListElement } from "./vertical-list-DyKPKGxK.js";
2
2
  export { VerticalListElement };
@@ -506,10 +506,19 @@ rows dropped from the flat list) modes. No default shortcut:
506
506
  grid.registry.invoke('list.search.filter'); // or .navigate / .select
507
507
  ```
508
508
 
509
- A row is matched against `rowSearchText(row)` — by default its visible cells'
510
- values joined by a space; override with the `rowSearchText` property. `select`
511
- mode needs `selection-mode="multiple"` to hold more than one row. Character
512
- highlights are not drawn (a match position spans multiple cells). `filterPredicate`
509
+ A row is matched against the displayed (formatted) text of one column: the
510
+ `search-column` attribute (`searchColumn` property) names it, defaulting to the
511
+ first visible column. Searching every column makes dates and sizes match
512
+ queries like `12`, which is rarely what Find is for. Set the `rowSearchText`
513
+ property, `(row) => string`, to match against something else, e.g. several
514
+ columns joined. `select` mode needs `selection-mode="multiple"` to hold more
515
+ than one row.
516
+
517
+ Matched characters in the search column are highlighted under the
518
+ `data-grid-search` key, coloured by `--search-highlight-bg` /
519
+ `--search-highlight-color` (default `--accent` / `--accent-text`). Matches
520
+ against a custom `rowSearchText` aren't highlighted, since they can't be
521
+ mapped onto a cell, and neither are cells drawn by a column `renderer`. `filterPredicate`
513
522
  (a `(row) => boolean` property) filters rows directly. `search-modes` limits the
514
523
  offered modes. Full model: [`docs/infra-incremental.md`](../../docs/infra-incremental.md).
515
524
 
@@ -162,6 +162,7 @@ list.keyProperty = 'name'; // Preserves selection across rebuilds
162
162
  | `textColorProperty` | `string` | Property name for the caption's CSS colour |
163
163
  | `badgeProperty` | `string` | Property name for a Finder-style badge |
164
164
  | `formatter` | `(item: unknown, index: number) => string \| Node` | Custom renderer |
165
+ | `searchText` | `(item: unknown, index: number) => string` | Text incremental search matches (default: the caption if a string, else the row's whole text) |
165
166
 
166
167
  ```typescript
167
168
  list.formatter = (item, index) => {
@@ -177,6 +178,18 @@ put, and the new row animates in like `addItem()`. Pass new objects (or change
177
178
  `displayProperty`, `formatter`, …) to rebuild rows. With a `formatter`, a row
178
179
  is only kept at the same index, since the formatter receives the index.
179
180
 
181
+ Because reused rows aren't re-run through the `formatter`, state it reads from
182
+ outside the item (sizes, fit mode, …) doesn't reach existing rows when the same
183
+ objects are reassigned. Call `list.reformat()` to rebuild every row, or assign a
184
+ new `formatter` function (a new identity counts as a shape change).
185
+
186
+ When `formatter` returns a `Node`, search falls back to the row's whole text
187
+ (sublines, sizes, dates). Set `searchText` to match on just the name:
188
+
189
+ ```typescript
190
+ list.searchText = item => (item as { name: string }).name;
191
+ ```
192
+
180
193
  Retrieve the original data for an element:
181
194
 
182
195
  ```typescript
@@ -459,6 +472,8 @@ Search matches against `data-search-label` (or `textContent` as fallback). Use `
459
472
  <li data-search-label="document a alpha">Document A</li>
460
473
  ```
461
474
 
475
+ For object items, `searchText` sets `data-search-label` per row (see [Object items](#object-items)).
476
+
462
477
  ### Highlight styling
463
478
 
464
479
  Matched characters are highlighted with the `detail-list-search` highlight key. Style matches with: