@ixfx/components 0.4.3 → 0.5.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.
- package/bundle/index.d.ts +518 -1176
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +4861 -17274
- package/bundle/index.js.map +1 -1
- package/bundle/style.css +1 -1
- package/dist/ac-text.d.ts +12 -7
- package/dist/ac-text.d.ts.map +1 -1
- package/dist/ac-text.js +2 -3
- package/dist/ac-text.js.map +1 -1
- package/dist/{button-C3fLMKUv.js → button-DxYee1ZH.js} +2 -2
- package/dist/{button-C3fLMKUv.js.map → button-DxYee1ZH.js.map} +1 -1
- package/dist/button.d.ts +1 -2
- package/dist/button.d.ts.map +1 -1
- package/dist/button.js +1 -2
- package/dist/checkbox.d.ts +0 -1
- package/dist/checkbox.d.ts.map +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/{colour-picker-0sgAha1T.js → colour-picker-C3Ag4uh-.js} +15 -17
- package/dist/colour-picker-C3Ag4uh-.js.map +1 -0
- package/dist/colour-picker.d.ts +1 -1
- package/dist/colour-picker.js +1 -1
- package/dist/crumbs.d.ts +5 -2
- package/dist/crumbs.d.ts.map +1 -1
- package/dist/crumbs.js +45 -20
- package/dist/crumbs.js.map +1 -1
- package/dist/data-display.d.ts +1 -2
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +25 -23
- package/dist/data-display.js.map +1 -1
- package/dist/{data-provider-DgI909FP.js → data-provider-35TyWclX.js} +2 -2
- package/dist/data-provider-35TyWclX.js.map +1 -0
- package/dist/{decorate-DdjvVHS-.js → decorate-VRK8rslU.js} +2 -2
- package/dist/{decorate-DdjvVHS-.js.map → decorate-VRK8rslU.js.map} +1 -1
- package/dist/{defaults-C3b9OWJD.js → defaults-DcE8RQJc.js} +19 -1
- package/dist/defaults-DcE8RQJc.js.map +1 -0
- package/dist/editable-label.d.ts +1 -2
- package/dist/editable-label.d.ts.map +1 -1
- package/dist/editable-label.js +1 -1
- package/dist/editable-label.js.map +1 -1
- package/dist/{hex-editor-WZrjRtvL.js → hex-editor-Bk6rxhfg.js} +9 -11
- package/dist/hex-editor-Bk6rxhfg.js.map +1 -0
- package/dist/{hex-editor-CMIxtNgT.d.ts → hex-editor-Caq8vNQk.d.ts} +2 -3
- package/dist/hex-editor-Caq8vNQk.d.ts.map +1 -0
- package/dist/hex.d.ts +1 -1
- package/dist/hex.js +1 -1
- package/dist/highlight-B-eQrhhb.js.map +1 -1
- package/dist/{icon-Ndo40kNO.js → icon-B22XVlCt.js} +6 -4
- package/dist/{icon-Ndo40kNO.js.map → icon-B22XVlCt.js.map} +1 -1
- package/dist/{icon-Bd5BiU4b.d.ts → icon-DpA9x2Ve.d.ts} +2 -3
- package/dist/icon-DpA9x2Ve.d.ts.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +2 -2
- package/dist/{incr-search-CeERfijK.js → incr-search-2pz21xtR.js} +9 -6
- package/dist/incr-search-2pz21xtR.js.map +1 -0
- package/dist/incr-search.d.ts +1 -1
- package/dist/incr-search.js +1 -1
- package/dist/{index-CowKi2mo.d.ts → index-BeuCXtiO.d.ts} +3 -4
- package/dist/index-BeuCXtiO.d.ts.map +1 -0
- package/dist/{index-D87kRcEs.d.ts → index-BtGFYfaK.d.ts} +2 -1
- package/dist/index-BtGFYfaK.d.ts.map +1 -0
- package/dist/{index-s_IhSnwc.d.ts → index-CoqtMSd9.d.ts} +6 -4
- package/dist/index-CoqtMSd9.d.ts.map +1 -0
- package/dist/{index-9fGVAg1d.d.ts → index-Cxwxtj6g.d.ts} +3 -3
- package/dist/index-Cxwxtj6g.d.ts.map +1 -0
- package/dist/index-D_ftz_IT.d.ts +184 -0
- package/dist/index-D_ftz_IT.d.ts.map +1 -0
- package/dist/{index-_RTQSKHi.d.ts → index-DfEkTGvT.d.ts} +11 -11
- package/dist/index-DfEkTGvT.d.ts.map +1 -0
- package/dist/index.d.ts +167 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +712 -2970
- package/dist/index.js.map +1 -1
- package/dist/keyboard-B5xD7Fz-.js +36 -0
- package/dist/keyboard-B5xD7Fz-.js.map +1 -0
- package/dist/{labelled-input-base-ORb1rGq6.d.ts → labelled-input-base-DiTme1JO.d.ts} +1 -2
- package/dist/labelled-input-base-DiTme1JO.d.ts.map +1 -0
- package/dist/{labelled-input-base-9K_w3oLj.js → labelled-input-base-hoKGwyKT.js} +2 -2
- package/dist/{labelled-input-base-9K_w3oLj.js.map → labelled-input-base-hoKGwyKT.js.map} +1 -1
- package/dist/labelled-radial-input.d.ts +5 -4
- package/dist/labelled-radial-input.d.ts.map +1 -1
- package/dist/labelled-radial-input.js +7 -3
- package/dist/labelled-radial-input.js.map +1 -1
- package/dist/labelled-range-input.d.ts +1 -1
- package/dist/labelled-range-input.js +27 -3
- package/dist/labelled-range-input.js.map +1 -1
- package/dist/led.d.ts +1 -2
- package/dist/led.d.ts.map +1 -1
- package/dist/led.js +1 -1
- package/dist/led.js.map +1 -1
- package/dist/{menu-vjoiHZ13.js → menu-g6yd7ddN.js} +8 -9
- package/dist/menu-g6yd7ddN.js.map +1 -0
- package/dist/{menu-item-COx-Azgj.d.ts → menu-item-DSyf9f_L.d.ts} +4 -4
- package/dist/menu-item-DSyf9f_L.d.ts.map +1 -0
- package/dist/{menu-item-BrIuORYD.js → menu-item-NUKwJ4s5.js} +3 -4
- package/dist/{menu-item-BrIuORYD.js.map → menu-item-NUKwJ4s5.js.map} +1 -1
- package/dist/menu.d.ts +2 -2
- package/dist/menu.js +2 -2
- package/dist/miller.d.ts +8 -5
- package/dist/miller.d.ts.map +1 -1
- package/dist/miller.js +22 -24
- package/dist/miller.js.map +1 -1
- package/dist/narrowed-text.d.ts +7 -3
- package/dist/narrowed-text.d.ts.map +1 -1
- package/dist/narrowed-text.js +73 -47
- package/dist/narrowed-text.js.map +1 -1
- package/dist/panel.d.ts +1 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/panel.js +2 -2
- package/dist/panel.js.map +1 -1
- package/dist/plots.d.ts +2 -2
- package/dist/plots.js +1 -1
- package/dist/polar-pad.d.ts +15 -3
- package/dist/polar-pad.d.ts.map +1 -1
- package/dist/polar-pad.js +64 -11
- package/dist/polar-pad.js.map +1 -1
- package/dist/{radial-input-CpQPs1Mp.d.ts → radial-input-BhZeyyP-.d.ts} +6 -4
- package/dist/radial-input-BhZeyyP-.d.ts.map +1 -0
- package/dist/{radial-input-DZ7eQCcM.js → radial-input-DxCrt_NE.js} +41 -19
- package/dist/radial-input-DxCrt_NE.js.map +1 -0
- package/dist/radial-input.d.ts +1 -1
- package/dist/radial-input.js +1 -1
- package/dist/range-input.d.ts +15 -4
- package/dist/range-input.d.ts.map +1 -1
- package/dist/range-input.js +23 -2
- package/dist/range-input.js.map +1 -1
- package/dist/range.d.ts +15 -4
- package/dist/range.d.ts.map +1 -1
- package/dist/range.js +23 -2
- package/dist/range.js.map +1 -1
- package/dist/selecthorizontal.d.ts +1 -2
- package/dist/selecthorizontal.d.ts.map +1 -1
- package/dist/selecthorizontal.js +1 -1
- package/dist/selecthorizontal.js.map +1 -1
- package/dist/slider-input-DFpG23bS.js +1592 -0
- package/dist/slider-input-DFpG23bS.js.map +1 -0
- package/dist/slider-input-TidGhvXt.d.ts +160 -0
- package/dist/slider-input-TidGhvXt.d.ts.map +1 -0
- package/dist/slider-input.d.ts +2 -0
- package/dist/slider-input.js +2 -0
- package/dist/snap-container.d.ts +1 -2
- package/dist/snap-container.d.ts.map +1 -1
- package/dist/snap-container.js +6 -5
- package/dist/snap-container.js.map +1 -1
- package/dist/split-layout.d.ts +1 -2
- package/dist/split-layout.d.ts.map +1 -1
- package/dist/split-layout.js +6 -4
- package/dist/split-layout.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/swipe.d.ts +12 -2
- package/dist/swipe.d.ts.map +1 -1
- package/dist/swipe.js +22 -3
- package/dist/swipe.js.map +1 -1
- package/dist/{tab-list-DLzb-m-I.d.ts → tab-list-BohmbvqF.d.ts} +14 -5
- package/dist/tab-list-BohmbvqF.d.ts.map +1 -0
- package/dist/tab-list-DhkVhRQc.js +597 -0
- package/dist/tab-list-DhkVhRQc.js.map +1 -0
- package/dist/tabs.d.ts +2 -2
- package/dist/tabs.js +1 -208
- package/dist/{tickled-controller-BjYCzGrU.d.ts → tickled-controller-BF2Ea0DE.d.ts} +2 -31
- package/dist/tickled-controller-BF2Ea0DE.d.ts.map +1 -0
- package/dist/tickled-styles-fNDdqf6l.js.map +1 -1
- package/dist/{timeline-2OFtN4Ta.js → timeline-B2fgDL4U.js} +37 -1438
- package/dist/timeline-B2fgDL4U.js.map +1 -0
- package/dist/timeline.d.ts +1 -1
- package/dist/timeline.js +1 -1
- package/dist/{tooltip-RGVIwHrZ.d.ts → tooltip-BlvBUQxx.d.ts} +3 -3
- package/dist/tooltip-BlvBUQxx.d.ts.map +1 -0
- package/dist/{tree-D84RUgFC.js → tree-BnvzhsAw.js} +8 -9
- package/dist/tree-BnvzhsAw.js.map +1 -0
- package/dist/{tree-component-BaCSPWg1.d.ts → tree-component-DCmmKZ4j.d.ts} +8 -124
- package/dist/tree-component-DCmmKZ4j.d.ts.map +1 -0
- package/dist/tree.d.ts +10 -4
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/types-DO3gt5vg.d.ts +130 -0
- package/dist/types-DO3gt5vg.d.ts.map +1 -0
- package/dist/wheel-nudge-BlSCe_hD.js +86 -0
- package/dist/wheel-nudge-BlSCe_hD.js.map +1 -0
- package/dist/wheel-nudge-DgMTRYlh.d.ts +29 -0
- package/dist/wheel-nudge-DgMTRYlh.d.ts.map +1 -0
- package/dist/{xy-axis-BeWRMmbo.d.ts → xy-axis-5KhVTNoX.d.ts} +30 -7
- package/dist/xy-axis-5KhVTNoX.d.ts.map +1 -0
- package/dist/xy-axis-CxHC8z5E.js +1849 -0
- package/dist/xy-axis-CxHC8z5E.js.map +1 -0
- package/dist/xy-pad.d.ts +13 -2
- package/dist/xy-pad.d.ts.map +1 -1
- package/dist/xy-pad.js +47 -6
- package/dist/xy-pad.js.map +1 -1
- package/docs-user/README.md +2 -0
- package/docs-user/button.md +48 -0
- package/docs-user/narrowed-text.md +33 -1
- package/docs-user/notifier.md +131 -0
- package/docs-user/plots.md +61 -1
- package/docs-user/radial-input.md +2 -2
- package/docs-user/slider-input.md +673 -0
- package/docs-user/tabs.md +12 -14
- package/docs-user/user-catalog.md +69 -4
- package/docs-user/vertical-list.md +75 -7
- package/package.json +23 -20
- package/dist/colour-C3MQIjFJ-vRCdr8W-.js +0 -3732
- package/dist/colour-C3MQIjFJ-vRCdr8W-.js.map +0 -1
- package/dist/colour-picker-0sgAha1T.js.map +0 -1
- package/dist/data-provider-DgI909FP.js.map +0 -1
- package/dist/defaults-C3b9OWJD.js.map +0 -1
- package/dist/dist-CA13FvMn.js +0 -980
- package/dist/dist-CA13FvMn.js.map +0 -1
- package/dist/hex-editor-CMIxtNgT.d.ts.map +0 -1
- package/dist/hex-editor-WZrjRtvL.js.map +0 -1
- package/dist/icon-Bd5BiU4b.d.ts.map +0 -1
- package/dist/incr-search-CeERfijK.js.map +0 -1
- package/dist/index-9fGVAg1d.d.ts.map +0 -1
- package/dist/index-CowKi2mo.d.ts.map +0 -1
- package/dist/index-D87kRcEs.d.ts.map +0 -1
- package/dist/index-DgXpCg_G.d.ts +0 -1244
- package/dist/index-DgXpCg_G.d.ts.map +0 -1
- package/dist/index-_RTQSKHi.d.ts.map +0 -1
- package/dist/index-s_IhSnwc.d.ts.map +0 -1
- package/dist/keyboard-CimiEskD.js +0 -20
- package/dist/keyboard-CimiEskD.js.map +0 -1
- package/dist/labelled-input-base-ORb1rGq6.d.ts.map +0 -1
- package/dist/menu-item-COx-Azgj.d.ts.map +0 -1
- package/dist/menu-vjoiHZ13.js.map +0 -1
- package/dist/radial-input-CpQPs1Mp.d.ts.map +0 -1
- package/dist/radial-input-DZ7eQCcM.js.map +0 -1
- package/dist/tab-list-DLzb-m-I.d.ts.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/tickled-controller-BjYCzGrU.d.ts.map +0 -1
- package/dist/timeline-2OFtN4Ta.js.map +0 -1
- package/dist/tooltip-RGVIwHrZ.d.ts.map +0 -1
- package/dist/tree-D84RUgFC.js.map +0 -1
- package/dist/tree-component-BaCSPWg1.d.ts.map +0 -1
- package/dist/types-DSfbtHs3.d.ts +0 -8
- package/dist/types-DSfbtHs3.d.ts.map +0 -1
- package/dist/xy-axis-BeWRMmbo.d.ts.map +0 -1
- package/dist/xy-axis-no0OL_O1.js +0 -7893
- package/dist/xy-axis-no0OL_O1.js.map +0 -1
- /package/bundle/{chunk-D7D4PA-g.js → rolldown-runtime-D7D4PA-g.js} +0 -0
- /package/dist/{chunk-D7D4PA-g.js → rolldown-runtime-D7D4PA-g.js} +0 -0
|
@@ -1,123 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Shared data-provider contract used by components that render a list of items.
|
|
4
|
-
*
|
|
5
|
-
* A provider is a simple callable — the consuming component (via DataController)
|
|
6
|
-
* manages the request lifecycle, cancellation, and reactive state.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* One batch of items within a streaming provider response.
|
|
10
|
-
*
|
|
11
|
-
* For sync and async one-shot providers, the DataController synthesises a single
|
|
12
|
-
* DataBatch internally — you only need this type when writing a streaming provider.
|
|
13
|
-
*/
|
|
14
|
-
type DataBatch<T> = {
|
|
15
|
-
/** Items delivered in this batch. */readonly items: readonly T[];
|
|
16
|
-
/**
|
|
17
|
-
* When true, replace all previously accumulated items with this batch instead
|
|
18
|
-
* of appending. Useful for re-ranked or filtered results mid-stream.
|
|
19
|
-
* Default: false (append).
|
|
20
|
-
*/
|
|
21
|
-
replace?: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Provider's current estimate of the total number of items that will be
|
|
24
|
-
* delivered across all batches. Enables progress percentage in the consumer.
|
|
25
|
-
* May be refined in subsequent batches as the estimate improves.
|
|
26
|
-
* Omit when the total is unknown.
|
|
27
|
-
*/
|
|
28
|
-
total?: number;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* The three return modes a provider may use.
|
|
32
|
-
* DataController normalises all three — callers can mix modes freely.
|
|
33
|
-
*
|
|
34
|
-
* - `readonly T[]` — sync, items available immediately
|
|
35
|
-
* - `Promise<readonly T[]>` — async one-shot, resolves to the full result
|
|
36
|
-
* - `AsyncIterable<DataBatch<T>>` — streaming, batches arrive over time
|
|
37
|
-
*/
|
|
38
|
-
type DataProviderResult<T> = readonly T[] | Promise<readonly T[]> | AsyncIterable<DataBatch<T>>;
|
|
39
|
-
/**
|
|
40
|
-
* A data provider callable.
|
|
41
|
-
*
|
|
42
|
-
* @typeParam TQuery - The input that scopes the request (e.g. `string` for
|
|
43
|
-
* autocomplete, `{ node, depth }` for a tree branch, `void` for a plain list).
|
|
44
|
-
* @typeParam TItem - The item type produced.
|
|
45
|
-
*
|
|
46
|
-
* The AbortSignal is cancelled when the consumer supersedes the request (e.g.
|
|
47
|
-
* a new query arrives before the previous one completes). Streaming providers
|
|
48
|
-
* should check `signal.aborted` between yields or pass the signal to their
|
|
49
|
-
* underlying fetch calls.
|
|
50
|
-
*/
|
|
51
|
-
type IDataProvider<TQuery, TItem> = (query: TQuery, signal: AbortSignal) => DataProviderResult<TItem>;
|
|
52
|
-
/**
|
|
53
|
-
* Collects all items from any DataProviderResult into a flat array.
|
|
54
|
-
* Useful for components that need a complete list before rendering (e.g. tree branches).
|
|
55
|
-
* Respects the AbortSignal — stops accumulating if cancelled mid-stream.
|
|
56
|
-
*/
|
|
57
|
-
declare function collectDataResult<T>(result: DataProviderResult<T>, signal: AbortSignal): Promise<readonly T[]>;
|
|
58
|
-
//#endregion
|
|
59
|
-
//#region src/common/types.d.ts
|
|
60
|
-
type TreeItem = {
|
|
61
|
-
/** Unique identifier within the tree. */key: string; /** Visible label text. */
|
|
62
|
-
label: string; /** When true the node cannot have children and will not show an expand affordance. */
|
|
63
|
-
isLeaf?: boolean; /** Arbitrary application data associated with this node. */
|
|
64
|
-
data?: unknown; /** Icon name passed to an icon component, if icons are enabled. */
|
|
65
|
-
icon?: string; /** Tooltip text shown on hover. */
|
|
66
|
-
tooltip?: string; /** Optional string value, e.g. for use as a command/route. */
|
|
67
|
-
value?: string;
|
|
68
|
-
};
|
|
69
|
-
/** A node in the tree, potentially containing lazily-loaded children. */
|
|
70
|
-
type TreeNode = {
|
|
71
|
-
item: TreeItem;
|
|
72
|
-
/**
|
|
73
|
-
* Child nodes.
|
|
74
|
-
* - `undefined` = children not yet loaded (component will call loadChildren if set)
|
|
75
|
-
* - `[]` = confirmed leaf / empty branch
|
|
76
|
-
* - non-empty array = loaded children
|
|
77
|
-
*/
|
|
78
|
-
children?: TreeNode[];
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* Callback invoked when a node's children need to be loaded.
|
|
82
|
-
* The AbortSignal is cancelled if the request is superseded (e.g. node collapsed before load completes).
|
|
83
|
-
* May return children synchronously, as a promise, or as a streaming async iterable of batches.
|
|
84
|
-
*/
|
|
85
|
-
type LoadChildrenCallback = IDataProvider<{
|
|
86
|
-
node: TreeNode;
|
|
87
|
-
depth: number;
|
|
88
|
-
}, TreeNode>;
|
|
89
|
-
/**
|
|
90
|
-
* Predicate used by search/filter controllers to determine whether a node should be visible.
|
|
91
|
-
* Receives depth so column-scoped filtering (e.g. in ixfx-miller-list) is possible.
|
|
92
|
-
* Tree implementations that do not need depth can simply ignore the parameter.
|
|
93
|
-
*/
|
|
94
|
-
type TreeFilterPredicate = (node: TreeNode, depth: number) => boolean;
|
|
95
|
-
/**
|
|
96
|
-
* Controls how expanding a node affects its siblings.
|
|
97
|
-
* - `'none'` — no constraint; any number of nodes may be expanded simultaneously
|
|
98
|
-
* - `'depth'` — only one sibling at the same depth may be expanded at a time (accordion)
|
|
99
|
-
* - `'global'` — only one node anywhere in the tree may be expanded at a time
|
|
100
|
-
*/
|
|
101
|
-
type TreeExclusivity = `none` | `depth` | `global`;
|
|
102
|
-
/**
|
|
103
|
-
* Restricts which kinds of nodes may enter the selection.
|
|
104
|
-
* Applied as a guard in all interaction modes.
|
|
105
|
-
* - `'none'` — no node can be selected (read-only / display-only)
|
|
106
|
-
* - `'leaf'` — only leaf nodes are selectable
|
|
107
|
-
* - `'branch'` — only branch nodes (nodes with children) are selectable
|
|
108
|
-
* - `'all'` — both leaf and branch nodes are selectable
|
|
109
|
-
*/
|
|
110
|
-
type TreeSelectionFilter = `none` | `leaf` | `branch` | `all`;
|
|
111
|
-
/**
|
|
112
|
-
* Controls how pointer and keyboard gestures map to selection changes.
|
|
113
|
-
* - `'implicit'` — single selection that follows the click; clicking always selects + toggles expand
|
|
114
|
-
* - `'standard'` — single click selects+toggles; Ctrl/Cmd+click toggles item; Shift+click range-selects
|
|
115
|
-
* - `'manual'` — component never auto-selects; use `select()`/`deselect()`/`clearSelection()` to drive state
|
|
116
|
-
* - `'checked'` — checkboxes on every item; checkbox click toggles selection recursively; row click only expands/collapses
|
|
117
|
-
* - `'vscode'` — like `standard` for clicks; Shift+arrow uses snapshot-based toggle-range
|
|
118
|
-
*/
|
|
119
|
-
type TreeInteractionMode = `implicit` | `standard` | `manual` | `checked` | `vscode`;
|
|
120
|
-
//#endregion
|
|
1
|
+
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-DO3gt5vg.js";
|
|
121
2
|
//#region src/common/tree-data-model.d.ts
|
|
122
3
|
type InvalidateEvent = {
|
|
123
4
|
type: `invalidate`;
|
|
@@ -130,7 +11,8 @@ type RootEvent = {
|
|
|
130
11
|
type ModelEvent = InvalidateEvent | RootEvent;
|
|
131
12
|
type ModelSubscriber = (event: ModelEvent) => void;
|
|
132
13
|
type TreeDataModelOptions = {
|
|
133
|
-
/** The initial root node. Required. */
|
|
14
|
+
/** The initial root node. Required. */
|
|
15
|
+
root: TreeNode;
|
|
134
16
|
/**
|
|
135
17
|
* Optional callback for lazily loading children.
|
|
136
18
|
* If omitted, nodes with `children === undefined` are treated as empty branches.
|
|
@@ -222,7 +104,9 @@ declare class TreeDataModel {
|
|
|
222
104
|
* Event name: `select`
|
|
223
105
|
*/
|
|
224
106
|
type TreeSelectDetail = {
|
|
225
|
-
/** The new selection set. */
|
|
107
|
+
/** The new selection set. */
|
|
108
|
+
readonly selected: ReadonlySet<TreeNode>;
|
|
109
|
+
/** The previous selection set (empty set if there was no prior selection). */
|
|
226
110
|
readonly previous: ReadonlySet<TreeNode>;
|
|
227
111
|
};
|
|
228
112
|
/**
|
|
@@ -379,5 +263,5 @@ interface TreeSearchHost extends TreeComponent {
|
|
|
379
263
|
readonly updateComplete: Promise<boolean>;
|
|
380
264
|
}
|
|
381
265
|
//#endregion
|
|
382
|
-
export {
|
|
383
|
-
//# sourceMappingURL=tree-component-
|
|
266
|
+
export { TreeDataModelOptions as _, TreeComponent as a, TreeExpandEvent as c, TreeSearchHost as d, TreeSelectDetail as f, TreeDataModel as g, TreeTickleEvent as h, TreeCollapseEvent as i, TreeItemClickDetail as l, TreeTickleDetail as m, TreeActivateEvent as n, TreeComponentEventMap as o, TreeSelectEvent as p, TreeCollapseDetail as r, TreeExpandDetail as s, TreeActivateDetail as t, TreeItemClickEvent as u };
|
|
267
|
+
//# sourceMappingURL=tree-component-DCmmKZ4j.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-component-DCmmKZ4j.d.ts","names":[],"sources":["../src/common/tree-data-model.ts","../src/common/tree-component.ts"],"mappings":";;KAOK;EAAoB;EAAoB;;KACxC;EAAc;EAAc,MAAM;;KAClC,aAAa,kBAAkB;KAE/B,mBAAmB,OAAO;KAmEnB;;EAEV,MAAM;;;;;EAKN,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgCJ;;EAMC,YAAA,SAAS;;MAUjB,QAAQ;;;;;EAQZ,QAAQ,MAAM;;;;;;;;;EAkBR,YAAY,MAAM,UAAU,eAAe,QAAQ,cAAc,QAAQ;;;;;;EAyB/E,WAAW;;;;;EAaX,QAAQ,mBAAmB,MAAM,WAAW;;;;;EAU5C,WAAW,cAAc;;;;;EAWzB,WAAW,aAAa,OAAO,QAAQ,YAAY;;;;;EAanD,SAAS,aAAa,uBAAuB;;;;;;;EAgB7C,WAAW,UAAU;;;;;;;;KC/NX;;WAED,UAAU,YAAY;;WAEtB,UAAU,YAAY;;;;;;;KAQrB;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;KAIC,kBAAkB,YAAY;KAC9B,kBAAkB,YAAY;KAC9B,oBAAoB,YAAY;KAChC,qBAAqB,YAAY;KACjC,kBAAkB,YAAY;KAC9B,oBAAoB,YAAY;UAM3B;EACf,UAAU;EACV,UAAU;EACV,YAAY;EACZ,cAAc;EACd,UAAU;EACV,YAAY;;;;;;;;;;;;;;;UAoBG,sBAAsB;;;;;;EAQrC,MAAM;;;;;;;EAQN,OAAO;;;;;;EAOP,cAAc;;;;;EAQd,cAAc;;;;;WAML,eAAe,YAAY;;;;;;EASpC,iBAAiB;;;;;;EASjB,iBAAiB;;;;;;EASjB,aAAa;;EAKb,SAAS,MAAM;;EAEf,WAAW,MAAM;;EAEjB;;;;;EAQA,aAAa;;;;;EAMb,iBAAiB,YAAY,MAAM;;;;;EAQnC,gBAAgB;IAAgB,MAAM;IAAU;;;;;;;;;;;UAejC,uBAAuB;WAC7B,YAAY;WACZ,gBAAgB"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
1
|
+
import { a as TreeItem, i as TreeInteractionMode, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-DO3gt5vg.js";
|
|
2
|
+
import { _ as TreeDataModelOptions, a as TreeComponent, c as TreeExpandEvent, d as TreeSearchHost, f as TreeSelectDetail, g as TreeDataModel, h as TreeTickleEvent, i as TreeCollapseEvent, l as TreeItemClickDetail, m as TreeTickleDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSelectEvent, r as TreeCollapseDetail, s as TreeExpandDetail, t as TreeActivateDetail, u as TreeItemClickEvent } from "./tree-component-DCmmKZ4j.js";
|
|
3
|
+
import { t as TickledController } from "./tickled-controller-BF2Ea0DE.js";
|
|
4
4
|
import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
|
|
5
|
-
|
|
5
|
+
import { TraversableTree } from "@ixfx/collections";
|
|
6
|
+
//#region src/tree/types.d.ts
|
|
7
|
+
/** Tree layout/display configuration (tree-specific, not shared). */
|
|
8
|
+
type TreeConfig = {
|
|
9
|
+
indent: number;
|
|
10
|
+
};
|
|
11
|
+
//#endregion
|
|
6
12
|
//#region src/tree/tree-base.d.ts
|
|
7
13
|
declare class TreeBaseElement extends LitElement implements TreeComponent, TreeSearchHost {
|
|
8
14
|
#private;
|
package/dist/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","names":[],"sources":["../src/tree/tree-base.ts","../src/tree/tree-list.ts","../src/tree/tree-controller.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.d.ts","names":[],"sources":["../src/tree/types.ts","../src/tree/tree-base.ts","../src/tree/tree-list.ts","../src/tree/tree-controller.ts"],"mappings":";;;;;;;KAqCY;EACV;;;;cCAW,wBAAwB,sBAAsB,eAAe;;EAExE,MAAM;EAGN,OAAO;;EAIP,cAAc;EAGd,aAAa;EAGb,iBAAiB;;EAIjB,iBAAiB;EAGjB,cAAc;YAGJ,gBAAc,IAAA;MAEpB,iBAAiB,YAAY;EAKjC,iBAAiB;EAGjB;YAGU,eAAa;YAEb,SAAO;YAWP;EAYD,QAAQ,cAAc;EA4CtB;EAKA;EAMT,aAAa;EAIb,UAAU,QAAQ,QAAQ;EAO1B,OAAO,MAAM;EAWb,SAAS,MAAM;EAYf;EAWA,WAAW;EAoCX,eAAe,YAAY,MAAM;EASjC,YAAY;IAAgB,MAAM;IAAU;;YA6DlC,kBAAkB,MAAM,UAAU,iBAAiB,wBAAwB;YAW3E,iBAAiB,MAAM,UAAU,eAAe,QAAQ;YAuJxD,qBAAqB,OAAO,YAAY,MAAM,UAAU;YAsJxD,YAAY,MAAM;YAIlB,WAAW,MAAM;YAIjB,YAAY,MAAM;gBAiBd,gBAAgB;YAgRpB,0BAA0B,wBAAwB;YAIzC,UAAM;YAoDf,YAAY,MAAM,UAAU,gBAAgB;SAiCtC,sBAAM;;QA4GhB;YACI;IACR,kBAAkB;;;UAIL,gCAAgC;EAC/C,cAAc;EACd,UAAU;EACV,YAAY;EACZ,UAAU;EACV,UAAU;EACV,YAAY;;UAGG;EACf,oBAAoB,gBAAgB,yBAClC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB;EAEtB,uBAAuB,gBAAgB,yBACrC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,mCAEpB,cACA,UAAU,oCACV,oBAAoB;;;;cC/lCX,wBAAwB;;YAGhB,UAAM;YAsBN,kBAAkB,MAAM,UAAU,gBAAgB;YAiClD,YAAY,MAAM,UAAU,gBAAgB;SA0B/C,sBAAM;;QA0EhB;YACI;IACR,kBAAkB;;;UAIL;EACf,oBAAoB,gBAAgB,yBAClC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB;;;;KClMZ,sBAAsB;EAChC,cAAc,OAAO,GAAG,MAAM,gBAAgB,OAAO;;cAG1C,eAAe;;EAWxB,YAAA,MAAM,gBAAgB,IACtB,SAAS,iBACT,SAAS,sBAAsB;EAOjC;EAwBA;EAKA,gBAAgB,YAAY,OAAO"}
|
package/dist/tree.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as TreeDataModel, n as TreeListElement, r as TreeBaseElement, t as TreeController } from "./tree-
|
|
1
|
+
import { i as TreeDataModel, n as TreeListElement, r as TreeBaseElement, t as TreeController } from "./tree-BnvzhsAw.js";
|
|
2
2
|
export { TreeBaseElement, TreeController, TreeDataModel, TreeListElement };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//#region src/common/data-provider.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shared data-provider contract used by components that render a list of items.
|
|
4
|
+
*
|
|
5
|
+
* A provider is a simple callable — the consuming component (via DataController)
|
|
6
|
+
* manages the request lifecycle, cancellation, and reactive state.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* One batch of items within a streaming provider response.
|
|
10
|
+
*
|
|
11
|
+
* For sync and async one-shot providers, the DataController synthesises a single
|
|
12
|
+
* DataBatch internally — you only need this type when writing a streaming provider.
|
|
13
|
+
*/
|
|
14
|
+
type DataBatch<T> = {
|
|
15
|
+
/** Items delivered in this batch. */
|
|
16
|
+
readonly items: readonly T[];
|
|
17
|
+
/**
|
|
18
|
+
* When true, replace all previously accumulated items with this batch instead
|
|
19
|
+
* of appending. Useful for re-ranked or filtered results mid-stream.
|
|
20
|
+
* Default: false (append).
|
|
21
|
+
*/
|
|
22
|
+
replace?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Provider's current estimate of the total number of items that will be
|
|
25
|
+
* delivered across all batches. Enables progress percentage in the consumer.
|
|
26
|
+
* May be refined in subsequent batches as the estimate improves.
|
|
27
|
+
* Omit when the total is unknown.
|
|
28
|
+
*/
|
|
29
|
+
total?: number;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The three return modes a provider may use.
|
|
33
|
+
* DataController normalises all three — callers can mix modes freely.
|
|
34
|
+
*
|
|
35
|
+
* - `readonly T[]` — sync, items available immediately
|
|
36
|
+
* - `Promise<readonly T[]>` — async one-shot, resolves to the full result
|
|
37
|
+
* - `AsyncIterable<DataBatch<T>>` — streaming, batches arrive over time
|
|
38
|
+
*/
|
|
39
|
+
type DataProviderResult<T> = readonly T[] | Promise<readonly T[]> | AsyncIterable<DataBatch<T>>;
|
|
40
|
+
/**
|
|
41
|
+
* A data provider callable.
|
|
42
|
+
*
|
|
43
|
+
* @typeParam TQuery - The input that scopes the request (e.g. `string` for
|
|
44
|
+
* autocomplete, `{ node, depth }` for a tree branch, `void` for a plain list).
|
|
45
|
+
* @typeParam TItem - The item type produced.
|
|
46
|
+
*
|
|
47
|
+
* The AbortSignal is cancelled when the consumer supersedes the request (e.g.
|
|
48
|
+
* a new query arrives before the previous one completes). Streaming providers
|
|
49
|
+
* should check `signal.aborted` between yields or pass the signal to their
|
|
50
|
+
* underlying fetch calls.
|
|
51
|
+
*/
|
|
52
|
+
type IDataProvider<TQuery, TItem> = (query: TQuery, signal: AbortSignal) => DataProviderResult<TItem>;
|
|
53
|
+
/**
|
|
54
|
+
* Collects all items from any DataProviderResult into a flat array.
|
|
55
|
+
* Useful for components that need a complete list before rendering (e.g. tree branches).
|
|
56
|
+
* Respects the AbortSignal — stops accumulating if cancelled mid-stream.
|
|
57
|
+
*/
|
|
58
|
+
declare function collectDataResult<T>(result: DataProviderResult<T>, signal: AbortSignal): Promise<readonly T[]>;
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/common/types.d.ts
|
|
61
|
+
type TreeItem = {
|
|
62
|
+
/** Unique identifier within the tree. */
|
|
63
|
+
key: string;
|
|
64
|
+
/** Visible label text. */
|
|
65
|
+
label: string;
|
|
66
|
+
/** When true the node cannot have children and will not show an expand affordance. */
|
|
67
|
+
isLeaf?: boolean;
|
|
68
|
+
/** Arbitrary application data associated with this node. */
|
|
69
|
+
data?: unknown;
|
|
70
|
+
/** Icon name passed to an icon component, if icons are enabled. */
|
|
71
|
+
icon?: string;
|
|
72
|
+
/** Tooltip text shown on hover. */
|
|
73
|
+
tooltip?: string;
|
|
74
|
+
/** Optional string value, e.g. for use as a command/route. */
|
|
75
|
+
value?: string;
|
|
76
|
+
};
|
|
77
|
+
/** A node in the tree, potentially containing lazily-loaded children. */
|
|
78
|
+
type TreeNode = {
|
|
79
|
+
item: TreeItem;
|
|
80
|
+
/**
|
|
81
|
+
* Child nodes.
|
|
82
|
+
* - `undefined` = children not yet loaded (component will call loadChildren if set)
|
|
83
|
+
* - `[]` = confirmed leaf / empty branch
|
|
84
|
+
* - non-empty array = loaded children
|
|
85
|
+
*/
|
|
86
|
+
children?: TreeNode[];
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Callback invoked when a node's children need to be loaded.
|
|
90
|
+
* The AbortSignal is cancelled if the request is superseded (e.g. node collapsed before load completes).
|
|
91
|
+
* May return children synchronously, as a promise, or as a streaming async iterable of batches.
|
|
92
|
+
*/
|
|
93
|
+
type LoadChildrenCallback = IDataProvider<{
|
|
94
|
+
node: TreeNode;
|
|
95
|
+
depth: number;
|
|
96
|
+
}, TreeNode>;
|
|
97
|
+
/**
|
|
98
|
+
* Predicate used by search/filter controllers to determine whether a node should be visible.
|
|
99
|
+
* Receives depth so column-scoped filtering (e.g. in ixfx-miller-list) is possible.
|
|
100
|
+
* Tree implementations that do not need depth can simply ignore the parameter.
|
|
101
|
+
*/
|
|
102
|
+
type TreeFilterPredicate = (node: TreeNode, depth: number) => boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Controls how expanding a node affects its siblings.
|
|
105
|
+
* - `'none'` — no constraint; any number of nodes may be expanded simultaneously
|
|
106
|
+
* - `'depth'` — only one sibling at the same depth may be expanded at a time (accordion)
|
|
107
|
+
* - `'global'` — only one node anywhere in the tree may be expanded at a time
|
|
108
|
+
*/
|
|
109
|
+
type TreeExclusivity = `none` | `depth` | `global`;
|
|
110
|
+
/**
|
|
111
|
+
* Restricts which kinds of nodes may enter the selection.
|
|
112
|
+
* Applied as a guard in all interaction modes.
|
|
113
|
+
* - `'none'` — no node can be selected (read-only / display-only)
|
|
114
|
+
* - `'leaf'` — only leaf nodes are selectable
|
|
115
|
+
* - `'branch'` — only branch nodes (nodes with children) are selectable
|
|
116
|
+
* - `'all'` — both leaf and branch nodes are selectable
|
|
117
|
+
*/
|
|
118
|
+
type TreeSelectionFilter = `none` | `leaf` | `branch` | `all`;
|
|
119
|
+
/**
|
|
120
|
+
* Controls how pointer and keyboard gestures map to selection changes.
|
|
121
|
+
* - `'implicit'` — single selection that follows the click; clicking always selects + toggles expand
|
|
122
|
+
* - `'standard'` — single click selects+toggles; Ctrl/Cmd+click toggles item; Shift+click range-selects
|
|
123
|
+
* - `'manual'` — component never auto-selects; use `select()`/`deselect()`/`clearSelection()` to drive state
|
|
124
|
+
* - `'checked'` — checkboxes on every item; checkbox click toggles selection recursively; row click only expands/collapses
|
|
125
|
+
* - `'vscode'` — like `standard` for clicks; Shift+arrow uses snapshot-based toggle-range
|
|
126
|
+
*/
|
|
127
|
+
type TreeInteractionMode = `implicit` | `standard` | `manual` | `checked` | `vscode`;
|
|
128
|
+
//#endregion
|
|
129
|
+
export { TreeItem as a, DataBatch as c, collectDataResult as d, TreeInteractionMode as i, DataProviderResult as l, TreeExclusivity as n, TreeNode as o, TreeFilterPredicate as r, TreeSelectionFilter as s, LoadChildrenCallback as t, IDataProvider as u };
|
|
130
|
+
//# sourceMappingURL=types-DO3gt5vg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DO3gt5vg.d.ts","names":[],"sources":["../src/common/data-provider.ts","../src/common/types.ts"],"mappings":";;;;;;;;;;;;;KAaY,UAAU;;WAEX,gBAAgB;;;;;;EAMzB;;;;;;;EAOA;;;;;;;;;;KAWU,mBAAmB,cAChB,MACT,iBAAiB,OACjB,cAAc,UAAU;;;;;;;;;;;;;KAclB,cAAc,QAAQ,UAChC,OAAO,QACP,QAAQ,gBACL,mBAAmB;;;;;;iBAOF,kBAAkB,GACtC,QAAQ,mBAAmB,IAC3B,QAAQ,cACP,iBAAiB;;;KC7DR;;EAEV;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;KAIU;EACV,MAAM;;;;;;;EAON,WAAW;;;;;;;KAQD,uBAAuB;EAAgB,MAAM;EAAU;GAAiB;;;;;;KAOxE,uBAAuB,MAAM,UAAU;;;;;;;KAQvC;;;;;;;;;KAUA;;;;;;;;;KAUA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { t as __decorate } from "./decorate-VRK8rslU.js";
|
|
2
|
+
import { property } from "lit/decorators.js";
|
|
3
|
+
//#region src/mixins/wheel-nudge.ts
|
|
4
|
+
/**
|
|
5
|
+
* Mixin that adds mousewheel support with an optional `lighttouch` hover mode.
|
|
6
|
+
*
|
|
7
|
+
* Activation rule:
|
|
8
|
+
* - If the host's `disabled` property is truthy → ignore.
|
|
9
|
+
* - Otherwise, handle if EITHER:
|
|
10
|
+
* • `lighttouch` is true AND the pointer is currently over the host, OR
|
|
11
|
+
* • the host (or anything in its shadow tree) currently has focus.
|
|
12
|
+
*
|
|
13
|
+
* Direction convention: `deltaY < 0` (wheel up/away) → +1 step; `deltaY > 0` → -1 step.
|
|
14
|
+
*
|
|
15
|
+
* Consumers must implement `_applyWheelDelta(direction, event)` (see
|
|
16
|
+
* {@link WheelNudgeConsumer}). The mixin calls `event.preventDefault()` only when
|
|
17
|
+
* the activation rule accepts the event, so page scroll is suppressed during
|
|
18
|
+
* interaction without blocking wheel events over empty space.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* class MyInput extends WheelNudgeMixin(LitElement) {
|
|
24
|
+
* protected _applyWheelDelta(direction, event) {
|
|
25
|
+
* const step = resolveAxisStep(this.range, this.stops, this.step, event.shiftKey);
|
|
26
|
+
* this._stepByDelta(direction, step);
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
function WheelNudgeMixin(superClass) {
|
|
32
|
+
class WheelNudgeMixinClass extends superClass {
|
|
33
|
+
constructor(..._args) {
|
|
34
|
+
super(..._args);
|
|
35
|
+
this.lighttouch = false;
|
|
36
|
+
this._isHovering = false;
|
|
37
|
+
this._onPointerEnter = () => {
|
|
38
|
+
this._isHovering = true;
|
|
39
|
+
};
|
|
40
|
+
this._onPointerLeave = () => {
|
|
41
|
+
this._isHovering = false;
|
|
42
|
+
};
|
|
43
|
+
this._onWheel = (event) => {
|
|
44
|
+
if (!this._shouldHandleWheel()) return;
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
const direction = (event.deltaY !== 0 ? event.deltaY : event.deltaX) < 0 ? 1 : -1;
|
|
47
|
+
this._applyWheelDelta(direction, event);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
connectedCallback() {
|
|
51
|
+
super.connectedCallback();
|
|
52
|
+
this.addEventListener(`pointerenter`, this._onPointerEnter);
|
|
53
|
+
this.addEventListener(`pointerleave`, this._onPointerLeave);
|
|
54
|
+
this.addEventListener(`wheel`, this._onWheel, { passive: false });
|
|
55
|
+
}
|
|
56
|
+
disconnectedCallback() {
|
|
57
|
+
super.disconnectedCallback();
|
|
58
|
+
this.removeEventListener(`pointerenter`, this._onPointerEnter);
|
|
59
|
+
this.removeEventListener(`pointerleave`, this._onPointerLeave);
|
|
60
|
+
this.removeEventListener(`wheel`, this._onWheel);
|
|
61
|
+
this._isHovering = false;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Override to restrict when wheel is handled (e.g. editable-number rejects
|
|
65
|
+
* while the user is typing). Default: respect `disabled`, then apply the
|
|
66
|
+
* focus-or-lighttouch rule described on the mixin.
|
|
67
|
+
*/
|
|
68
|
+
_shouldHandleWheel() {
|
|
69
|
+
if (this.disabled) return false;
|
|
70
|
+
if (this.lighttouch && this._isHovering) return true;
|
|
71
|
+
if (this.matches?.(`:focus, :focus-within`)) return true;
|
|
72
|
+
const root = this.renderRoot;
|
|
73
|
+
if (root && root.activeElement !== null) return true;
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
__decorate([property({
|
|
78
|
+
type: Boolean,
|
|
79
|
+
reflect: true
|
|
80
|
+
})], WheelNudgeMixinClass.prototype, "lighttouch", void 0);
|
|
81
|
+
return WheelNudgeMixinClass;
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { WheelNudgeMixin as t };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=wheel-nudge-BlSCe_hD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wheel-nudge-BlSCe_hD.js","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"sourcesContent":["import type { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\ntype Constructor<T = object> = new (...args: any[]) => T;\n\n/**\n * Direction of a wheel tick. `+1` for `deltaY < 0` (wheel up/away), `-1` for\n * `deltaY > 0` (wheel down/toward).\n */\nexport type WheelDirection = 1 | -1;\n\n/**\n * Abstract surface a consumer of {@link WheelNudgeMixin} must implement.\n *\n * `_applyWheelDelta` is called once per handled wheel tick. The consumer is\n * expected to reuse its existing arrow-key step math (typically a shared\n * `_stepByDelta(direction, effectiveStep)` private method) and call it here.\n *\n * `_shouldHandleWheel` may be overridden to restrict when the wheel acts\n * (e.g. editable-number rejects while the user is typing).\n */\nexport interface WheelNudgeConsumer {\n _applyWheelDelta(direction: WheelDirection, event: WheelEvent): void;\n _shouldHandleWheel(): boolean;\n}\n\n/**\n * Internal: the surface a {@link WheelNudgeMixin}-decorated class exposes to\n * TypeScript — its own members plus the consumer contract.\n */\nexport type WheelNudgeConsumerType<TBase> = TBase & WheelNudgeConsumer;\ntype WheelNudgeMixinBase<T> = T extends Constructor<infer U> ? U : never;\ntype WheelNudgeMixinResult<T extends Constructor<LitElement>>\n = Constructor<WheelNudgeConsumerType<WheelNudgeMixinBase<T>>> & T;\n\n/**\n * Mixin that adds mousewheel support with an optional `lighttouch` hover mode.\n *\n * Activation rule:\n * - If the host's `disabled` property is truthy → ignore.\n * - Otherwise, handle if EITHER:\n * • `lighttouch` is true AND the pointer is currently over the host, OR\n * • the host (or anything in its shadow tree) currently has focus.\n *\n * Direction convention: `deltaY < 0` (wheel up/away) → +1 step; `deltaY > 0` → -1 step.\n *\n * Consumers must implement `_applyWheelDelta(direction, event)` (see\n * {@link WheelNudgeConsumer}). The mixin calls `event.preventDefault()` only when\n * the activation rule accepts the event, so page scroll is suppressed during\n * interaction without blocking wheel events over empty space.\n *\n * Usage:\n *\n * ```ts\n * class MyInput extends WheelNudgeMixin(LitElement) {\n * protected _applyWheelDelta(direction, event) {\n * const step = resolveAxisStep(this.range, this.stops, this.step, event.shiftKey);\n * this._stepByDelta(direction, step);\n * }\n * }\n * ```\n */\nexport function WheelNudgeMixin<T extends Constructor<LitElement>>(superClass: T): WheelNudgeMixinResult<T> {\n class WheelNudgeMixinClass extends superClass {\n /**\n * When true, the wheel adjusts the value simply when the pointer is hovering\n * over the host (no focus required). When false (default), the host must\n * have focus for the wheel to act.\n */\n @property({ type: Boolean, reflect: true })\n lighttouch = false;\n\n /**\n * Imperative hover flag — not Lit-reactive (avoids update churn for what\n * is purely an interaction-time predicate).\n */\n _isHovering = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(`pointerenter`, this._onPointerEnter);\n this.addEventListener(`pointerleave`, this._onPointerLeave);\n this.addEventListener(`wheel`, this._onWheel, { passive: false });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(`pointerenter`, this._onPointerEnter);\n this.removeEventListener(`pointerleave`, this._onPointerLeave);\n this.removeEventListener(`wheel`, this._onWheel);\n this._isHovering = false;\n }\n\n _onPointerEnter = (): void => {\n this._isHovering = true;\n };\n\n _onPointerLeave = (): void => {\n this._isHovering = false;\n };\n\n /**\n * Override to restrict when wheel is handled (e.g. editable-number rejects\n * while the user is typing). Default: respect `disabled`, then apply the\n * focus-or-lighttouch rule described on the mixin.\n */\n _shouldHandleWheel(): boolean {\n const anyThis = this as unknown as { disabled?: boolean };\n if (anyThis.disabled)\n return false;\n if (this.lighttouch && this._isHovering)\n return true;\n if (this.matches?.(`:focus, :focus-within`))\n return true;\n const root = this.renderRoot;\n if (root && (root as ShadowRoot).activeElement !== null)\n return true;\n return false;\n }\n\n _onWheel = (event: WheelEvent): void => {\n if (!this._shouldHandleWheel())\n return;\n event.preventDefault();\n // Some browsers (notably when the user holds Shift) send `deltaY=0`\n // and route the scroll into `deltaX` instead. Use whichever axis\n // actually moved so the direction sign matches the user's intent.\n const delta = event.deltaY !== 0 ? event.deltaY : event.deltaX;\n const direction: WheelDirection = delta < 0 ? 1 : -1;\n (this as unknown as WheelNudgeConsumer)._applyWheelDelta(direction, event);\n };\n }\n return WheelNudgeMixinClass as unknown as WheelNudgeMixinResult<T>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAAgB,gBAAmD,YAAyC;CAC1G,MAAM,6BAA6B,WAAW;;;GAO/B,KAAA,aAAA;GAMC,KAAA,cAAA;GAiBgB,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAE8B,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAqBY,KAAA,YAAA,UAA4B;IACtC,IAAI,CAAC,KAAK,mBAAmB,GAC3B;IACF,MAAM,eAAe;IAKrB,MAAM,aADQ,MAAM,WAAW,IAAI,MAAM,SAAS,MAAM,UACd,IAAI,IAAI;IAClD,KAAwC,iBAAiB,WAAW,KAAK;GAC3E;;EApDA,oBAAmC;GACjC,MAAM,kBAAkB;GACxB,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,SAAS,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;EAClE;EAEA,uBAAsC;GACpC,MAAM,qBAAqB;GAC3B,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,SAAS,KAAK,QAAQ;GAC/C,KAAK,cAAc;EACrB;;;;;;EAeA,qBAA8B;GAE5B,IAAI,KAAQ,UACV,OAAO;GACT,IAAI,KAAK,cAAc,KAAK,aAC1B,OAAO;GACT,IAAI,KAAK,UAAU,uBAAuB,GACxC,OAAO;GACT,MAAM,OAAO,KAAK;GAClB,IAAI,QAAS,KAAoB,kBAAkB,MACjD,OAAO;GACT,OAAO;EACT;CAaF;CA9DG,WAAA,CAAA,SAAS;EAAE,MAAM;EAAS,SAAS;CAAK,CAAC,CAAA,GAAA,qBAAA,WAAA,cAAA,KAAA,CAAA;CA+D5C,OAAO;AACT"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
//#region src/mixins/wheel-nudge.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Direction of a wheel tick. `+1` for `deltaY < 0` (wheel up/away), `-1` for
|
|
5
|
+
* `deltaY > 0` (wheel down/toward).
|
|
6
|
+
*/
|
|
7
|
+
type WheelDirection = 1 | -1;
|
|
8
|
+
/**
|
|
9
|
+
* Abstract surface a consumer of {@link WheelNudgeMixin} must implement.
|
|
10
|
+
*
|
|
11
|
+
* `_applyWheelDelta` is called once per handled wheel tick. The consumer is
|
|
12
|
+
* expected to reuse its existing arrow-key step math (typically a shared
|
|
13
|
+
* `_stepByDelta(direction, effectiveStep)` private method) and call it here.
|
|
14
|
+
*
|
|
15
|
+
* `_shouldHandleWheel` may be overridden to restrict when the wheel acts
|
|
16
|
+
* (e.g. editable-number rejects while the user is typing).
|
|
17
|
+
*/
|
|
18
|
+
interface WheelNudgeConsumer {
|
|
19
|
+
_applyWheelDelta(direction: WheelDirection, event: WheelEvent): void;
|
|
20
|
+
_shouldHandleWheel(): boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Internal: the surface a {@link WheelNudgeMixin}-decorated class exposes to
|
|
24
|
+
* TypeScript — its own members plus the consumer contract.
|
|
25
|
+
*/
|
|
26
|
+
type WheelNudgeConsumerType<TBase> = TBase & WheelNudgeConsumer;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { WheelNudgeConsumerType as n, WheelDirection as t };
|
|
29
|
+
//# sourceMappingURL=wheel-nudge-DgMTRYlh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wheel-nudge-DgMTRYlh.d.ts","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"mappings":";;;;;;KASY;;;;;;;;;;;UAYK;EACf,iBAAiB,WAAW,gBAAgB,OAAO;EACnD;;;;;;KAOU,uBAAuB,SAAS,QAAQ"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { LitElement, PropertyValues } from "lit";
|
|
2
|
-
|
|
3
2
|
//#region src/plots/colour-map.d.ts
|
|
4
3
|
type ColourMode = `fixed` | `opacity` | `hue` | `saturation` | `lightness` | `scale`;
|
|
5
4
|
type ColourMapConfig = {
|
|
6
|
-
mode: ColourMode;
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
mode: ColourMode;
|
|
6
|
+
/** Parsed colours for 'scale' mode. Must have ≥ 2 entries. */
|
|
7
|
+
palette: string[];
|
|
8
|
+
/** ixfx easing name — applied before the colour mode mapping. Takes precedence over valueMap. */
|
|
9
|
+
easingName: string;
|
|
10
|
+
/** Custom value mapping fn (0..1 → 0..1). Used when easingName is empty. */
|
|
9
11
|
valueMap: ((v: number) => number) | null;
|
|
10
12
|
};
|
|
11
13
|
type ColourResult = {
|
|
@@ -283,6 +285,12 @@ interface PlotMultiAxis {
|
|
|
283
285
|
//#endregion
|
|
284
286
|
//#region src/plots/plot-histogram.d.ts
|
|
285
287
|
type PlotHistogramOrientation = `horizontal` | `vertical`;
|
|
288
|
+
/**
|
|
289
|
+
* - `hover`: floating `ixfx-tooltip` bubble, shown/hidden with a debounce delay.
|
|
290
|
+
* - `inline`: the title overlay-text switches to the hovered bucket's value, instantly.
|
|
291
|
+
* - `none`: no hover feedback.
|
|
292
|
+
*/
|
|
293
|
+
type PlotHistogramValueTooltips = `hover` | `inline` | `none`;
|
|
286
294
|
type PlotHistogramBucketClickDetail = {
|
|
287
295
|
readonly bucketIndex: number;
|
|
288
296
|
readonly valueMin: number;
|
|
@@ -300,15 +308,30 @@ declare class PlotHistogram extends LitElement {
|
|
|
300
308
|
min?: number;
|
|
301
309
|
max?: number;
|
|
302
310
|
capacity: number;
|
|
311
|
+
/**
|
|
312
|
+
* Fallback overlay-text, shown when nothing is hovered.
|
|
313
|
+
* Not reflected to the native `title` attribute, so the browser's own hover tooltip doesn't show.
|
|
314
|
+
*/
|
|
303
315
|
title: string;
|
|
304
316
|
paused: boolean;
|
|
317
|
+
/** How hovering a bucket is communicated: a floating tooltip, the inline overlay-text, or nothing. */
|
|
318
|
+
valueTooltips: PlotHistogramValueTooltips;
|
|
319
|
+
/** Delay (ms) before the `hover` tooltip appears/disappears. Switching directly between buckets is instant. */
|
|
320
|
+
tooltipDelay: number;
|
|
321
|
+
/** Max rate (ms) at which an already-shown value display refreshes to match live-changing bucket data. */
|
|
322
|
+
valueUpdateInterval: number;
|
|
323
|
+
/** Override to customize the value/frequency label used by the tooltip and overlay text. */
|
|
324
|
+
valueFormat: (valueMin: number, valueMax: number, frequency: number) => string;
|
|
305
325
|
private _width;
|
|
306
326
|
private _height;
|
|
327
|
+
private _hoveredIndex;
|
|
328
|
+
private _inlineOverlayText;
|
|
307
329
|
add(v: number): void;
|
|
308
330
|
set(values: number[]): void;
|
|
309
331
|
clear(): void;
|
|
310
332
|
protected firstUpdated(_changed: PropertyValues): void;
|
|
311
333
|
protected updated(changed: PropertyValues): void;
|
|
334
|
+
disconnectedCallback(): void;
|
|
312
335
|
render(): import("lit").TemplateResult<1>;
|
|
313
336
|
static styles: import("lit").CSSResult;
|
|
314
337
|
}
|
|
@@ -359,7 +382,7 @@ declare global {
|
|
|
359
382
|
interface HTMLElementTagNameMap {
|
|
360
383
|
'ixfx-plot-xy-axis': PlotXyAxis;
|
|
361
384
|
}
|
|
362
|
-
}
|
|
385
|
+
}
|
|
363
386
|
//#endregion
|
|
364
|
-
export {
|
|
365
|
-
//# sourceMappingURL=xy-axis-
|
|
387
|
+
export { ColourMapConfig as C, computeColour as D, applyAgeModification as E, parseColourScaleAttr as O, PlotDataSeriesOptions as S, ColourResult as T, PlotSingleAxisPointerMoveDetail as _, PlotHistogramBucketClickDetail as a, SingleAxisDrawStyle as b, PlotHistogramOrientation as c, PlotMultiAxisDataPointClickDetail as d, PlotMultiAxisDataPointClickEvent as f, PlotSingleAxisElementEventMap as g, PlotSingleAxis as h, PlotHistogram as i, readBaseColour as k, PlotHistogramValueTooltips as l, PlotMultiAxisLayout as m, XyAgeStyle as n, PlotHistogramBucketClickEvent as o, PlotMultiAxisElementEventMap as p, XyDrawStyle as r, PlotHistogramElementEventMap as s, PlotXyAxis as t, PlotMultiAxis as u, PlotSingleAxisPointerMoveEvent as v, ColourMode as w, PlotDataSeries as x, SingleAxisAgeStyle as y };
|
|
388
|
+
//# sourceMappingURL=xy-axis-5KhVTNoX.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xy-axis-5KhVTNoX.d.ts","names":[],"sources":["../src/plots/colour-map.ts","../src/plots/data.ts","../src/plots/single-axis.ts","../src/plots/multi-axis.ts","../src/plots/plot-histogram.ts","../src/plots/xy-axis.ts"],"mappings":"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"}
|