@ixfx/components 0.17.1 → 0.18.0

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 (58) hide show
  1. package/bundle/index.d.ts +143 -8
  2. package/bundle/index.js +205 -204
  3. package/dist/{checked-select-BmwqpgGr.js → checked-select-DsQ-o9lI.js} +1 -1
  4. package/dist/checked-select.js +1 -1
  5. package/dist/{crumb-navigation-D7dAC0H-.js → crumb-navigation-09YFje6W.js} +2 -2
  6. package/dist/{crumb-navigation-Tm4fnsvN.d.ts → crumb-navigation-DOfOS7li.d.ts} +1 -1
  7. package/dist/crumbs.d.ts +1 -1
  8. package/dist/crumbs.js +1 -1
  9. package/dist/{data-grid-BcO3SMac.js → data-grid-BGmJbMCb.js} +4 -3
  10. package/dist/{data-grid-vasJtjFP.d.ts → data-grid-BQWmVYg0.d.ts} +8 -2
  11. package/dist/data-grid.d.ts +2 -2
  12. package/dist/data-grid.js +1 -1
  13. package/dist/{detail-list-E9WdMVbE.d.ts → detail-list-CfjoIl2N.d.ts} +9 -3
  14. package/dist/{detail-list-vPVwE1CP.js → detail-list-CrHASoAx.js} +2 -1
  15. package/dist/detail-list.d.ts +3 -3
  16. package/dist/detail-list.js +1 -1
  17. package/dist/{flat-list-CfutGqKY.d.ts → flat-list-C2z81bK6.d.ts} +5 -3
  18. package/dist/flat-list.d.ts +1 -1
  19. package/dist/flat-list.js +4 -2
  20. package/dist/{grid-list-OCdjuhng.d.ts → grid-list-Crv-hFJL.d.ts} +9 -3
  21. package/dist/{grid-list-D2hinM64.js → grid-list-DYU_z2K9.js} +3 -2
  22. package/dist/grid-list.d.ts +2 -2
  23. package/dist/grid-list.js +1 -1
  24. package/dist/incr-search.d.ts +1 -1
  25. package/dist/{index-CzhYJJsx.d.ts → index-BE0hk8xS.d.ts} +2 -2
  26. package/dist/{index-88ra6YHP.d.ts → index-BymYKGY-.d.ts} +3 -3
  27. package/dist/{index-CRLTVAyt.d.ts → index-Db5VGFR1.d.ts} +1 -1
  28. package/dist/index.d.ts +82 -20
  29. package/dist/index.js +293 -107
  30. package/dist/{interaction-8Kbbf6xN.js → interaction-BEcBIY0d.js} +1 -1
  31. package/dist/{list-native-drag-controller-ByftBooJ.js → list-native-drag-controller-Brk30s5d.js} +3 -0
  32. package/dist/{list-native-drag-controller-CgXKdmjr.d.ts → list-native-drag-controller-Cs-Tmtaa.d.ts} +1 -1
  33. package/dist/{menu-C3DhTjHx.js → menu-B6NFqEtm.js} +3 -3
  34. package/dist/{menu-item-BSxhlWnW.js → menu-item-D0zy1yax.js} +2 -2
  35. package/dist/menu.js +2 -2
  36. package/dist/{miller-DqDEaXqT.js → miller-B0qbnWwe.js} +1 -1
  37. package/dist/miller.d.ts +2 -2
  38. package/dist/miller.js +1 -1
  39. package/dist/narrowed-text.js +1 -1
  40. package/dist/{node-graph-DqEGv5QR.js → node-graph-D9iovxQp.js} +1 -1
  41. package/dist/node-graph.js +1 -1
  42. package/dist/{notification-pill-BiHEJk-o.d.ts → notification-pill-BJonE_wo.d.ts} +14 -1
  43. package/dist/notifier.d.ts +1 -1
  44. package/dist/select-horiz.js +1 -1
  45. package/dist/sunburst-tree.d.ts +1 -1
  46. package/dist/{sunbursttree-list-CsrmVSB8.d.ts → sunbursttree-list-XF7gBKod.d.ts} +2 -2
  47. package/dist/{tree-BP5fxvEX.js → tree-1CSNgw72.js} +2 -2
  48. package/dist/{tree-component-DNuzfo6R.d.ts → tree-component-BE7OEIiH.d.ts} +7 -1
  49. package/dist/tree.d.ts +2 -2
  50. package/dist/tree.js +1 -1
  51. package/dist/{vertical-list-B9z1lbjM.js → vertical-list-BNCRA_zy.js} +2 -1
  52. package/dist/{vertical-list-BzeXehBt.d.ts → vertical-list-Dyc5azxv.d.ts} +8 -2
  53. package/dist/vertical-list.d.ts +2 -2
  54. package/dist/vertical-list.js +1 -1
  55. package/docs-user/grid-list.md +5 -0
  56. package/docs-user/index.json +2 -2
  57. package/docs-user/notifier.md +28 -0
  58. package/package.json +3 -3
@@ -1,3 +1,3 @@
1
- import "./list-native-drag-controller-ByftBooJ.js";
1
+ import "./list-native-drag-controller-Brk30s5d.js";
2
2
  import "./tickled-controller-BVhGKzjZ.js";
3
3
  import "./tickled-styles-pnieYweS.js";
@@ -780,6 +780,9 @@ var ListNativeDragController = class {
780
780
  try {
781
781
  this.#config.writeDataTransfer?.(event.dataTransfer, detail);
782
782
  } catch {}
783
+ try {
784
+ this.#host.writeDataTransfer?.(event.dataTransfer, detail);
785
+ } catch {}
783
786
  }
784
787
  const hotspot = preview.hotspot ?? {
785
788
  x: 16,
@@ -1,4 +1,4 @@
1
- import { B as ListNativeDragStartDetail, I as ListDragPreviewContext, L as ListDragPreviewRenderer, P as ListDragEntry, R as ListDragPreviewSourceResolver, z as ListDragSource } from "./tree-component-DNuzfo6R.js";
1
+ import { B as ListDragSource, F as ListDragEntry, L as ListDragPreviewContext, R as ListDragPreviewRenderer, V as ListNativeDragStartDetail, z as ListDragPreviewSourceResolver } from "./tree-component-BE7OEIiH.js";
2
2
  import { ReactiveController, ReactiveControllerHost } from "lit";
3
3
  type ListNativeDragControllerConfig<T> = {
4
4
  readonly source: ListDragSource;
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D3KUYPsf.js";
2
2
  import { t as tickledItemStyles } from "./tickled-styles-pnieYweS.js";
3
3
  import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
4
- import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-BSxhlWnW.js";
5
- import "./interaction-8Kbbf6xN.js";
4
+ import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-D0zy1yax.js";
5
+ import "./interaction-BEcBIY0d.js";
6
6
  import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
7
7
  import "./icon-DvTQuylG.js";
8
8
  import { LitElement, css, html, nothing } from "lit";
@@ -128,7 +128,7 @@ let MenuCheckItem = class MenuCheckItem extends LitElement {
128
128
  }
129
129
  _resolvedLabel() {
130
130
  if (this.label) return this.label;
131
- if (this.registry && this.command) return this.registry.get(this.command)?.label ?? ``;
131
+ if (this.registry && this.command) return this.registry.getLabel(this.command, void 0) ?? ``;
132
132
  return ``;
133
133
  }
134
134
  _resolvedIcon() {
@@ -4,7 +4,7 @@ import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
4
4
  import { t as popupSurfaceStyles } from "./popup-D8IxN1Eq.js";
5
5
  import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
6
6
  import "./icon-DvTQuylG.js";
7
- import "./interaction-8Kbbf6xN.js";
7
+ import "./interaction-BEcBIY0d.js";
8
8
  import { t as scrollFadeStyles } from "./scroll-fade-DH8OXSqL.js";
9
9
  import { LitElement, css, html } from "lit";
10
10
  import { property, query, state } from "lit/decorators.js";
@@ -793,7 +793,7 @@ let MenuItem = class MenuItem extends LitElement {
793
793
  }
794
794
  _resolvedLabel() {
795
795
  if (this.label) return this.label;
796
- if (this.registry && this.command) return this.registry.get(this.command)?.label ?? ``;
796
+ if (this.registry && this.command) return this.registry.getLabel(this.command, void 0) ?? ``;
797
797
  return ``;
798
798
  }
799
799
  _resolvedIcon() {
package/dist/menu.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-BSxhlWnW.js";
2
- import { a as menuFromTreeToElements, c as MenuSubTrigger, d as MenuBar, i as menuFromTree, l as MenuCommandController, n as MenuRadioGroup, o as MenuHeader, r as MenuRadioItem, s as MenuSeparator, u as MenuCheckItem } from "./menu-C3DhTjHx.js";
1
+ import { n as MenuTrigger, r as MenuContainer, t as MenuItem } from "./menu-item-D0zy1yax.js";
2
+ import { a as menuFromTreeToElements, c as MenuSubTrigger, d as MenuBar, i as menuFromTree, l as MenuCommandController, n as MenuRadioGroup, o as MenuHeader, r as MenuRadioItem, s as MenuSeparator, u as MenuCheckItem } from "./menu-B6NFqEtm.js";
3
3
  export { MenuBar, MenuCheckItem, MenuCommandController, MenuContainer, MenuHeader, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubTrigger, MenuTrigger, menuFromTree, menuFromTreeToElements };
@@ -8,7 +8,7 @@ import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
8
8
  import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
9
9
  import { n as appearanceColor, t as appearanceAbsent } from "./item-appearance-FRO3TRFI.js";
10
10
  import { a as restoreElementScroll, i as onUserScrollIntent, o as scrollToOffset, r as captureElementScroll, t as ViewStateController } from "./view-state-controller-DiPAPiA7.js";
11
- import "./interaction-8Kbbf6xN.js";
11
+ import "./interaction-BEcBIY0d.js";
12
12
  import { LitElement, css, html, nothing } from "lit";
13
13
  import { property, state } from "lit/decorators.js";
14
14
  import { createCommandRegistry } from "@clinth/ui-commands";
package/dist/miller.d.ts CHANGED
@@ -1,4 +1,4 @@
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-DNuzfo6R.js";
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-BE7OEIiH.js";
2
2
  import { a as TreeItem, o as TreeNode } from "./types-6hpXRKt7.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-CzhYJJsx.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-BE0hk8xS.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 +1 @@
1
- export { r as MillerBaseElement, n as MillerListElement, t as MillerTreeController } from "./miller-DqDEaXqT.js";
1
+ export { r as MillerBaseElement, n as MillerListElement, t as MillerTreeController } from "./miller-B0qbnWwe.js";
@@ -2,7 +2,7 @@ import { n as buildHighlightTargets, r as clearHighlights, t as applyHighlights
2
2
  import { t as TickledController } from "./tickled-controller-BVhGKzjZ.js";
3
3
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-pnieYweS.js";
4
4
  import { m as createIncrSearch } from "./incr-search-C5114RxZ.js";
5
- import "./interaction-8Kbbf6xN.js";
5
+ import "./interaction-BEcBIY0d.js";
6
6
  import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
7
7
  import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
8
8
  import { LitElement, css, html, nothing } from "lit";
@@ -2,7 +2,7 @@ import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js"
2
2
  import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
3
3
  import { t as handleStyles } from "./handle-BVUWv97X.js";
4
4
  import "./icon-DvTQuylG.js";
5
- import "./menu-item-BSxhlWnW.js";
5
+ import "./menu-item-D0zy1yax.js";
6
6
  import { t as ViewStateController } from "./view-state-controller-DiPAPiA7.js";
7
7
  import { LitElement, css, html, nothing, svg } from "lit";
8
8
  import { property, state } from "lit/decorators.js";
@@ -1 +1 @@
1
- export { Y as DEFAULT_FORCE_OPTIONS, T as DRAG_THRESHOLD_PX, dt as EASY_CONNECT_MARGIN, tt as EDGE_CORNER_RADIUS, z as GraphNodeElement, K as GraphPortElement, D as MARQUEE_THRESHOLD_PX, q as MAX_BLINK_HZ, u as MAX_FLOW_SPEED, O as MarqueeController, B as NODE_SHAPES, E as NodeDragController, t as NodeGraphElement, m as PanZoomController, U as RESIZE_HANDLES, r as WireDragController, bt as addWire, J as blinkPeriodSeconds, g as boundsOf, ht as canConnect, _ as clampZoom, c as collapsedOffset, k as combineSelection, xt as connectContext, St as cycleBlockedNodes, nt as defaultSide, Ct as edgeId, rt as edgeMidpoint, it as edgePath, at as edgeShape, wt as ensurePort, ot as extendFromSide, o as findProximityConnection, F as findSnapTarget, gt as findValidWire, v as fitBounds, y as fitRects, b as flowToScreen, X as forceMovement, Z as forcePin, Q as forcePositions, $ as forceState, et as forceStep, Tt as fromEdges, Et as hasWire, Dt as inDegreeOf, ft as inEasyConnectZone, Ot as incomingEdge, kt as incomingEdges, h as isEditableTarget, V as isNodeShape, W as isResizeHandle, A as marqueeStyle, l as measureNode, w as nodeGraphStyles, j as nodesInRect, _t as normaliseConnection, At as outDegreeOf, x as panBy, jt as parsePortId, pt as pickStartPort, st as polylineMidpoint, ct as polylinePath, lt as polylineShape, Mt as portId, I as proximityFactor, M as rectFromPoints, s as rectGap, N as rectsIntersect, Nt as removeNode, mt as removeNodes, Pt as removeWire, n as renderWires, G as resizeRect, vt as resolveConnection, d as sanitizeFlowSpeed, S as screenToFlow, i as selectionAfterEdgeClick, a as selectionAfterNodePress, L as settled, H as shapeSpec, R as smoothStep, ut as stepPoints, Ft as toEdges, It as toNodeGraph, yt as typesCompatible, P as wantsMarquee, f as withEntry, p as withWireFlow, C as zoomAt } from "./node-graph-DqEGv5QR.js";
1
+ export { Y as DEFAULT_FORCE_OPTIONS, T as DRAG_THRESHOLD_PX, dt as EASY_CONNECT_MARGIN, tt as EDGE_CORNER_RADIUS, z as GraphNodeElement, K as GraphPortElement, D as MARQUEE_THRESHOLD_PX, q as MAX_BLINK_HZ, u as MAX_FLOW_SPEED, O as MarqueeController, B as NODE_SHAPES, E as NodeDragController, t as NodeGraphElement, m as PanZoomController, U as RESIZE_HANDLES, r as WireDragController, bt as addWire, J as blinkPeriodSeconds, g as boundsOf, ht as canConnect, _ as clampZoom, c as collapsedOffset, k as combineSelection, xt as connectContext, St as cycleBlockedNodes, nt as defaultSide, Ct as edgeId, rt as edgeMidpoint, it as edgePath, at as edgeShape, wt as ensurePort, ot as extendFromSide, o as findProximityConnection, F as findSnapTarget, gt as findValidWire, v as fitBounds, y as fitRects, b as flowToScreen, X as forceMovement, Z as forcePin, Q as forcePositions, $ as forceState, et as forceStep, Tt as fromEdges, Et as hasWire, Dt as inDegreeOf, ft as inEasyConnectZone, Ot as incomingEdge, kt as incomingEdges, h as isEditableTarget, V as isNodeShape, W as isResizeHandle, A as marqueeStyle, l as measureNode, w as nodeGraphStyles, j as nodesInRect, _t as normaliseConnection, At as outDegreeOf, x as panBy, jt as parsePortId, pt as pickStartPort, st as polylineMidpoint, ct as polylinePath, lt as polylineShape, Mt as portId, I as proximityFactor, M as rectFromPoints, s as rectGap, N as rectsIntersect, Nt as removeNode, mt as removeNodes, Pt as removeWire, n as renderWires, G as resizeRect, vt as resolveConnection, d as sanitizeFlowSpeed, S as screenToFlow, i as selectionAfterEdgeClick, a as selectionAfterNodePress, L as settled, H as shapeSpec, R as smoothStep, ut as stepPoints, Ft as toEdges, It as toNodeGraph, yt as typesCompatible, P as wantsMarquee, f as withEntry, p as withWireFlow, C as zoomAt } from "./node-graph-D9iovxQp.js";
@@ -35,6 +35,19 @@ type NotifierOptions = {
35
35
  tapBehaviour?: `none` | `dismiss`;
36
36
  tapHandlerDefault?: (notification: Notification) => void;
37
37
  };
38
+ /** A notification as remembered by a manager's history. */
39
+ type NotificationHistoryEntry = Notification & {
40
+ /** `true` once read: via `markRead`/`markAllRead`, or when the user taps the toast. */
41
+ readonly read: boolean;
42
+ /** Set once the toast is no longer visible (timed out, evicted, tapped away or dismissed). */
43
+ readonly dismissedAt?: number;
44
+ };
45
+ type NotificationHistoryListener = (history: readonly NotificationHistoryEntry[]) => void;
46
+ /** Options for `createNotificationManager` / `NotificationManager.scope`. */
47
+ type NotificationManagerOptions = NotifierOptions & {
48
+ /** Max history entries kept per manager (oldest dropped first). Default 100. */
49
+ historyLimit?: number;
50
+ };
38
51
  type PillTapDetail = {
39
52
  readonly id: string;
40
53
  };
@@ -60,4 +73,4 @@ declare global {
60
73
  interface NotificationPillElement {
61
74
  addEventListener: (<K extends keyof NotificationPillElementEventMap>(type: K, listener: (this: NotificationPillElement, event: NotificationPillElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions) => void) & ((type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) => void);
62
75
  }
63
- export { Notification as a, NotificationRendererHooks as c, PillTapEvent as i, NotificationType as l, NotificationPillElementEventMap as n, NotificationContent as o, PillTapDetail as r, NotificationRenderer as s, NotificationPillElement as t, NotifierOptions as u };
76
+ export { Notification as a, NotificationHistoryListener as c, NotificationRendererHooks as d, NotificationType as f, PillTapEvent as i, NotificationManagerOptions as l, NotificationPillElementEventMap as n, NotificationContent as o, NotifierOptions as p, PillTapDetail as r, NotificationHistoryEntry as s, NotificationPillElement as t, NotificationRenderer as u };
@@ -1,2 +1,2 @@
1
- import { i as PillTapEvent, n as NotificationPillElementEventMap, r as PillTapDetail, t as NotificationPillElement } from "./notification-pill-BiHEJk-o.js";
1
+ import { i as PillTapEvent, n as NotificationPillElementEventMap, r as PillTapDetail, t as NotificationPillElement } from "./notification-pill-BJonE_wo.js";
2
2
  export { NotificationPillElement, NotificationPillElementEventMap, PillTapDetail, PillTapEvent };
@@ -1,6 +1,6 @@
1
1
  import { t as TickledController } from "./tickled-controller-BVhGKzjZ.js";
2
2
  import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-pnieYweS.js";
3
- import "./interaction-8Kbbf6xN.js";
3
+ import "./interaction-BEcBIY0d.js";
4
4
  import { t as WheelNudgeMixin } from "./wheel-nudge-DgJzrL28.js";
5
5
  import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
6
6
  import { t as scrollFadeStyles } from "./scroll-fade-DH8OXSqL.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-CsrmVSB8.js";
1
+ import { a as SunburstViewState, i as SunburstZoomEvent, n as SunburstTreeListElementEventMap, r as SunburstZoomDetail, t as SunburstTreeListElement } from "./sunbursttree-list-XF7gBKod.js";
2
2
  export { SunburstTreeListElement, SunburstTreeListElementEventMap, type SunburstViewState, SunburstZoomDetail, SunburstZoomEvent };
@@ -1,8 +1,8 @@
1
- import { C as TreeItemDblClickEvent, E as TreeSearchHost, M as TreeDataModel, a as TreeComponent, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, n as TreeActivateEvent, o as TreeComponentEventMap, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-DNuzfo6R.js";
1
+ import { C as TreeItemDblClickEvent, E as TreeSearchHost, M as TreeDataModel, a as TreeComponent, i as TreeCollapseEvent, j as TreeTickleEvent, k as TreeSelectEvent, n as TreeActivateEvent, o as TreeComponentEventMap, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-BE7OEIiH.js";
2
2
  import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-6hpXRKt7.js";
3
3
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-16GC5k1z.js";
4
4
  import "./index-Cdcek1Oj.js";
5
- import { S as ListSearchController } from "./index-CRLTVAyt.js";
5
+ import { S as ListSearchController } from "./index-Db5VGFR1.js";
6
6
  import { LitElement, PropertyValues } from "lit";
7
7
  import { CommandRegistry } from "@clinth/ui-commands";
8
8
  /**
@@ -3,11 +3,11 @@ import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-pni
3
3
  import { t as themeFallbacks } from "./fallbacks-BPjjBoED.js";
4
4
  import { n as safeCustomElement, t as __decorate } from "./decorate-Dxs8sFX8.js";
5
5
  import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-C5114RxZ.js";
6
- import { i as animateListItemOut, o as prefersReducedMotion, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-ByftBooJ.js";
6
+ import { i as animateListItemOut, o as prefersReducedMotion, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-Brk30s5d.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-Afl4LT64.js";
8
8
  import { i as sameKeySet, r as isPartialKey, t as PARTIAL_DESCRIPTION } from "./partial-keys-D4l_ede_.js";
9
9
  import { n as createScrollHoverGuard } from "./scroll-hover-guard-BGAjtyXT.js";
10
- import "./interaction-8Kbbf6xN.js";
10
+ import "./interaction-BEcBIY0d.js";
11
11
  import { t as collectDataResult } from "./data-provider-C6ZNAcaT.js";
12
12
  import { n as anchorFromRow, o as scrollToOffset, t as ViewStateController } from "./view-state-controller-DiPAPiA7.js";
13
13
  import { i as reconcileSelection, r as reconcileExpansion } from "./tree-DUc-iQcg.js";
@@ -42,6 +42,12 @@ interface ListDragPreview {
42
42
  readonly canvas?: HTMLCanvasElement;
43
43
  readonly dispose?: () => void;
44
44
  }
45
+ /**
46
+ * Writes an application payload onto the drag's `DataTransfer` at `dragstart`.
47
+ * Every list component exposes this as a public `writeDataTransfer` property;
48
+ * `ListNativeDragController` invokes it after any built-in payload writer.
49
+ */
50
+ type ListDragDataTransferWriter<T> = (dataTransfer: DataTransfer, detail: ListNativeDragStartDetail<T>) => void;
45
51
  type ListDragPreviewRenderer<T> = (context: ListDragPreviewContext<T>) => ListDragPreview;
46
52
  type ListDragPreviewSourceResolver<T> = (entry: ListDragEntry<T>) => CanvasImageSource | undefined;
47
53
  interface ListNativeDragStartDetail<T = unknown> {
@@ -435,4 +441,4 @@ interface TreeSearchHost extends TreeComponent {
435
441
  readonly shadowRoot: ShadowRoot | null;
436
442
  readonly updateComplete: Promise<boolean>;
437
443
  }
438
- export { TreeTickleDetail as A, ListNativeDragStartDetail as B, TreeItemDblClickEvent as C, TreeSelectAllOptions as D, TreeSearchHost as E, ListDragPreview as F, ListDragPreviewContext as I, ListDragPreviewRenderer as L, TreeDataModel as M, TreeDataModelOptions as N, TreeSelectDetail as O, ListDragEntry as P, ListDragPreviewSourceResolver as R, TreeItemDblClickDetail as S, TreeRevealMode as T, ListNativeDragStartEvent as V, TreeDropTarget as _, TreeComponent as a, TreeItemClickDetail as b, TreeDragContext as c, TreeDragStartEvent as d, TreeDropApplyContext as f, TreeDropPosition as g, TreeDropEvent as h, TreeCollapseEvent as i, TreeTickleEvent as j, TreeSelectEvent as k, TreeDragEndEvent as l, TreeDropDetail as m, TreeActivateEvent as n, TreeComponentEventMap as o, TreeDropContext as p, TreeCollapseDetail as r, TreeDndMode as s, TreeActivateDetail as t, TreeDragOverEvent as u, TreeExpandDetail as v, TreeNavigateOptions as w, TreeItemClickEvent as x, TreeExpandEvent as y, ListDragSource as z };
444
+ export { TreeTickleDetail as A, ListDragSource as B, TreeItemDblClickEvent as C, TreeSelectAllOptions as D, TreeSearchHost as E, ListDragEntry as F, ListNativeDragStartEvent as H, ListDragPreview as I, ListDragPreviewContext as L, TreeDataModel as M, TreeDataModelOptions as N, TreeSelectDetail as O, ListDragDataTransferWriter as P, ListDragPreviewRenderer as R, TreeItemDblClickDetail as S, TreeRevealMode as T, ListNativeDragStartDetail as V, TreeDropTarget as _, TreeComponent as a, TreeItemClickDetail as b, TreeDragContext as c, TreeDragStartEvent as d, TreeDropApplyContext as f, TreeDropPosition as g, TreeDropEvent as h, TreeCollapseEvent as i, TreeTickleEvent as j, TreeSelectEvent as k, TreeDragEndEvent as l, TreeDropDetail as m, TreeActivateEvent as n, TreeComponentEventMap as o, TreeDropContext as p, TreeCollapseDetail as r, TreeDndMode as s, TreeActivateDetail as t, TreeDragOverEvent as u, TreeExpandDetail as v, TreeNavigateOptions as w, TreeItemClickEvent as x, TreeExpandEvent as y, ListDragPreviewSourceResolver as z };
package/dist/tree.d.ts CHANGED
@@ -1,4 +1,4 @@
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-DNuzfo6R.js";
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-BE7OEIiH.js";
2
2
  import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-6hpXRKt7.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-88ra6YHP.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-BymYKGY-.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 +1 @@
1
- export { r as TreeBaseElement, t as TreeController, a as TreeDataModel, i as TreeDropController, n as TreeListElement } from "./tree-BP5fxvEX.js";
1
+ export { r as TreeBaseElement, t as TreeController, a as TreeDataModel, i as TreeDropController, n as TreeListElement } from "./tree-1CSNgw72.js";
@@ -1,7 +1,7 @@
1
1
  import { n as appearanceColor, t as appearanceAbsent } from "./item-appearance-FRO3TRFI.js";
2
2
  import { c as createElementListSearchAdapter, d as keysOfElements, i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, u as keyForElement } from "./incr-search-C5114RxZ.js";
3
3
  import { i as ListDragSelectController, n as gestureOf, t as ListSelectionController } from "./list-selection-controller-Dkh3m3hX.js";
4
- import { i as animateListItemOut, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-ByftBooJ.js";
4
+ import { i as animateListItemOut, r as animateListItemIn, t as ListNativeDragController } from "./list-native-drag-controller-Brk30s5d.js";
5
5
  import { i as sameKeySet, n as applyPartialAttributes, r as isPartialKey } from "./partial-keys-D4l_ede_.js";
6
6
  import { t as TickledController } from "./tickled-controller-BVhGKzjZ.js";
7
7
  import { l as keysToArray } from "./pending-Afl4LT64.js";
@@ -1995,6 +1995,7 @@ __decorate([property({
1995
1995
  reflect: true
1996
1996
  })], VerticalListElement.prototype, "itemsDraggable", void 0);
1997
1997
  __decorate([property({ attribute: false })], VerticalListElement.prototype, "dragPreviewRenderer", void 0);
1998
+ __decorate([property({ attribute: false })], VerticalListElement.prototype, "writeDataTransfer", void 0);
1998
1999
  __decorate([property({ attribute: false })], VerticalListElement.prototype, "dragPreviewSource", void 0);
1999
2000
  __decorate([property({ attribute: false })], VerticalListElement.prototype, "items", void 0);
2000
2001
  __decorate([property({
@@ -1,9 +1,9 @@
1
- import { L as ListDragPreviewRenderer, R as ListDragPreviewSourceResolver, V as ListNativeDragStartEvent } from "./tree-component-DNuzfo6R.js";
1
+ import { H as ListNativeDragStartEvent, P as ListDragDataTransferWriter, R as ListDragPreviewRenderer, z as ListDragPreviewSourceResolver } from "./tree-component-BE7OEIiH.js";
2
2
  import { a as ViewStateBase, t as GetViewStateOptions } from "./types-16GC5k1z.js";
3
3
  import { h as ListSelectionMode, i as ListInteractionMode, r as ListElementEventMap } from "./list-selection-types-CKTt7Rrw.js";
4
4
  import { n as ListViewportChangeEvent } from "./list-viewport-types-BJ8c6qur.js";
5
5
  import "./index-Cdcek1Oj.js";
6
- import { S as ListSearchController } from "./index-CRLTVAyt.js";
6
+ import { S as ListSearchController } from "./index-Db5VGFR1.js";
7
7
  import "./editable-label-CiHCDlhC.js";
8
8
  import { LitElement, PropertyValues } from "lit";
9
9
  import { CommandId, CommandRegistry } from "@clinth/ui-commands";
@@ -113,6 +113,12 @@ declare class VerticalListElement extends LitElement {
113
113
  * built-in HTML+canvas preview.
114
114
  */
115
115
  dragPreviewRenderer: ListDragPreviewRenderer<Element> | undefined;
116
+ /**
117
+ * Write an application payload onto the drag's `DataTransfer` (e.g. a custom
118
+ * MIME type). Called once per drag, synchronously inside `dragstart`, after a
119
+ * non-cancelled `list-native-drag-start`.
120
+ */
121
+ writeDataTransfer: ListDragDataTransferWriter<Element> | undefined;
116
122
  dragPreviewSource: ListDragPreviewSourceResolver<Element> | undefined;
117
123
  /**
118
124
  * Object/adapter item mode (mirrors `ixfx-detail-list`). When set, the list
@@ -1,5 +1,5 @@
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-DNuzfo6R.js";
1
+ import { B as ListDragSource, F as ListDragEntry, H as ListNativeDragStartEvent, I as ListDragPreview, L as ListDragPreviewContext, R as ListDragPreviewRenderer, V as ListNativeDragStartDetail } from "./tree-component-BE7OEIiH.js";
2
2
  import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BJ8c6qur.js";
3
3
  import { _ as ListTickleEvent, a as ListItemClickDetail, c as ListSelectDetail, g as ListTickleDetail, h as ListSelectionMode, i as ListInteractionMode, l as ListSelectEvent, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, t as ListActivateDetail } from "./list-selection-types-CKTt7Rrw.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-BzeXehBt.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-Dyc5azxv.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 +1 @@
1
- export { t as VerticalListElement } from "./vertical-list-B9z1lbjM.js";
1
+ export { t as VerticalListElement } from "./vertical-list-BNCRA_zy.js";
@@ -278,6 +278,11 @@ Set `items-draggable` to make selectable cells draggable out of the grid. On
278
278
  for native hosts.
279
279
  - Assign `dragPreviewRenderer` for a custom synchronous preview returning
280
280
  `{ element, hotspot?, canvas?, dispose? }`.
281
+ - Assign `writeDataTransfer(dataTransfer, detail)` to put your own payload on
282
+ the drag (e.g. a custom MIME type). It is a public property on every list
283
+ (`ixfx-grid-list`, `ixfx-vertical-list`, `ixfx-detail-list`, `ixfx-data-grid`,
284
+ and forwarded by `ixfx-flat-list`), run synchronously in `dragstart` after a
285
+ non-cancelled `list-native-drag-start`.
281
286
  - `preventDefault()` on the event cancels the browser drag, but the sync
282
287
  listener still sees `preview` (incl. `canvas`) — what lets an Electron host
283
288
  rasterize it during the synchronous turn.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
- "version": "0.17.1",
4
- "generated": "2026-11-10T11:14:57.413Z",
3
+ "version": "0.18.0",
4
+ "generated": "2026-11-10T18:13:23.971Z",
5
5
  "components": [
6
6
  {
7
7
  "name": "ac-text",
@@ -67,6 +67,34 @@ NotificationManager.configure({
67
67
 
68
68
  ---
69
69
 
70
+ ## Scoped managers, history and unread
71
+
72
+ `NotificationManager` is the default, app-wide instance. Every instance has its own queue, timers, renderer and options, so toasts can sit beside the component they concern:
73
+
74
+ ```typescript
75
+ import { createNotificationManager, NotificationManager } from '../src/index.js';
76
+
77
+ const lister = NotificationManager.scope('lister-1', { renderer: myAnchoredRenderer }); // get-or-create by name
78
+ // or, unregistered: const lister = createNotificationManager({ renderer: myAnchoredRenderer });
79
+ lister.notify({ type: 'info', message: 'Moved 3 items' });
80
+ NotificationManager.releaseScope('lister-1'); // on unmount: dismiss, detach, forget
81
+ ```
82
+
83
+ Each instance also keeps a bounded history (`historyLimit`, default 100; `0` disables):
84
+
85
+ | API | Description |
86
+ |---|---|
87
+ | `getHistory()` | Snapshot of `{ ...Notification, read, dismissedAt? }`, oldest first; includes toasts no longer visible |
88
+ | `unreadCount` | Entries not yet read — drive a bell indicator |
89
+ | `markRead(id)` / `markAllRead()` | Mark read. Tapping a toast also marks it read |
90
+ | `clearHistory()` | Drop history |
91
+ | `subscribe(listener)` | Called with the history on every change; returns an unsubscribe function |
92
+ | `destroy()` | Dismiss all, drop history/listeners, detach renderer |
93
+
94
+ Scoped instances with no `renderer` fall back to the default top-right pill renderer, which is viewport-anchored — give anchored scopes a custom renderer.
95
+
96
+ ---
97
+
70
98
  ## Queueing model
71
99
 
72
100
  - **`queue: false`** — a message is always shown alone, for the full `timeout`/`timeoutError`. A new `notify()` call immediately replaces whatever is showing.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
3
  "type": "module",
4
- "version": "0.17.1",
4
+ "version": "0.18.0",
5
5
  "packageManager": "pnpm@10.0.0",
6
6
  "description": "Web components for ixfx — Lit-based UI toolkit",
7
7
  "author": "Clint Heyer",
@@ -268,7 +268,7 @@
268
268
  }
269
269
  },
270
270
  "dependencies": {
271
- "@clinth/ui-commands": "1.1.2",
271
+ "@clinth/ui-commands": "1.2.0",
272
272
  "@clinth/vcanvas": "0.0.6",
273
273
  "@ixfx/arrays": "0.56.21",
274
274
  "@ixfx/collections": "0.56.21",
@@ -290,7 +290,7 @@
290
290
  "eslint-plugin-format": "2.0.1",
291
291
  "globals": "17.14.0",
292
292
  "happy-dom": "^21.0.4",
293
- "knip": "6.44.2",
293
+ "knip": "6.45.0",
294
294
  "libavoid-js": "0.5.0-beta.5",
295
295
  "lit": "3.3.3",
296
296
  "tsdown": "0.23.7",