@ixfx/components 0.8.5 → 0.8.7
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 +12 -1
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +47 -29
- package/bundle/index.js.map +1 -1
- package/dist/ac-text.d.ts +1 -1
- package/dist/{ac-token-TCLAZeVg.d.ts → ac-token--_vCHXWw.d.ts} +2 -2
- package/dist/{ac-token-TCLAZeVg.d.ts.map → ac-token--_vCHXWw.d.ts.map} +1 -1
- package/dist/ac-token.d.ts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/colour-picker.d.ts +1 -1
- package/dist/crumbs.d.ts +2 -2
- package/dist/{data-grid-DCt0oack.d.ts → data-grid-CYVPSUwh.d.ts} +3 -3
- package/dist/{data-grid-DCt0oack.d.ts.map → data-grid-CYVPSUwh.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +1 -1
- package/dist/{detail-list-CqRzhFnv.d.ts → detail-list-vH56z7WE.d.ts} +4 -4
- package/dist/{detail-list-CqRzhFnv.d.ts.map → detail-list-vH56z7WE.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +2 -2
- package/dist/{grid-list-x550wJ0X.d.ts → grid-list-Cq8ga2WZ.d.ts} +2 -2
- package/dist/{grid-list-x550wJ0X.d.ts.map → grid-list-Cq8ga2WZ.d.ts.map} +1 -1
- package/dist/grid-list.d.ts +1 -1
- package/dist/{grouped-item-lister-CEZ72VOs.d.ts → grouped-item-lister-fdZHVxFM.d.ts} +2 -2
- package/dist/{grouped-item-lister-CEZ72VOs.d.ts.map → grouped-item-lister-fdZHVxFM.d.ts.map} +1 -1
- package/dist/grouped-item-lister.d.ts +1 -1
- package/dist/{icon-DR_3rSyZ.d.ts → icon-CDGprSdE.d.ts} +2 -2
- package/dist/icon-CDGprSdE.d.ts.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/incr-search.d.ts +1 -1
- package/dist/{index-C59-JEPl.d.ts → index-9AhaHIT2.d.ts} +3 -3
- package/dist/{index-C59-JEPl.d.ts.map → index-9AhaHIT2.d.ts.map} +1 -1
- package/dist/{index-DsjpDksO.d.ts → index-CS9yM8L-.d.ts} +2 -2
- package/dist/{index-DsjpDksO.d.ts.map → index-CS9yM8L-.d.ts.map} +1 -1
- package/dist/{index-BUB5SICW.d.ts → index-CoqtMSd9.d.ts} +2 -2
- package/dist/{index-BUB5SICW.d.ts.map → index-CoqtMSd9.d.ts.map} +1 -1
- package/dist/{index-h6gxtfHH.d.ts → index-DDREWqMm.d.ts} +2 -2
- package/dist/{index-h6gxtfHH.d.ts.map → index-DDREWqMm.d.ts.map} +1 -1
- package/dist/{index-CJ5fshD3.d.ts → index-UvnoZUAo.d.ts} +2 -2
- package/dist/{index-CJ5fshD3.d.ts.map → index-UvnoZUAo.d.ts.map} +1 -1
- package/dist/{index-BOUaDIW-.d.ts → index-tq6f8007.d.ts} +2 -2
- package/dist/{index-BOUaDIW-.d.ts.map → index-tq6f8007.d.ts.map} +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -14
- package/dist/index.js.map +1 -1
- package/dist/{labelled-input-base-Dp_9KP0G.d.ts → labelled-input-base-DiTme1JO.d.ts} +2 -2
- package/dist/{labelled-input-base-Dp_9KP0G.d.ts.map → labelled-input-base-DiTme1JO.d.ts.map} +1 -1
- package/dist/labelled-radial-input.d.ts +2 -2
- package/dist/labelled-radial-input.d.ts.map +1 -1
- package/dist/labelled-range-input.d.ts +1 -1
- package/dist/labelled-slider-input.d.ts +1 -1
- package/dist/{menu-item-ZmkXNjek.d.ts → menu-item-CZi9vy5O.d.ts} +2 -2
- package/dist/{menu-item-ZmkXNjek.d.ts.map → menu-item-CZi9vy5O.d.ts.map} +1 -1
- package/dist/menu.d.ts +2 -2
- package/dist/miller.d.ts +2 -2
- package/dist/panel.d.ts +1 -1
- package/dist/{split-layout-C5SYbDrq.d.ts → split-layout-JK3xWVX2.d.ts} +2 -2
- package/dist/{split-layout-C5SYbDrq.d.ts.map → split-layout-JK3xWVX2.d.ts.map} +1 -1
- package/dist/split-layout.d.ts +1 -1
- package/dist/{tab-list-DbMIL520.d.ts → tab-list-CGyPt07Z.d.ts} +2 -2
- package/dist/{tab-list-DbMIL520.d.ts.map → tab-list-CGyPt07Z.d.ts.map} +1 -1
- package/dist/tabs.d.ts +1 -1
- package/dist/{titlebar-B5zSTZnF.d.ts → titlebar-Tqu-VvMU.d.ts} +2 -2
- package/dist/{titlebar-B5zSTZnF.d.ts.map → titlebar-Tqu-VvMU.d.ts.map} +1 -1
- package/dist/titlebar.d.ts +1 -1
- package/dist/{tree-DTQon838.js → tree-CozQj01a.js} +44 -17
- package/dist/tree-CozQj01a.js.map +1 -0
- package/dist/{tree-component-F6qZ0Gdv.d.ts → tree-component-BMpxpdTi.d.ts} +12 -2
- package/dist/tree-component-BMpxpdTi.d.ts.map +1 -0
- package/dist/tree.d.ts +3 -2
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{vertical-list-CFuFDygi.d.ts → vertical-list-BGn9nyKh.d.ts} +2 -2
- package/dist/{vertical-list-CFuFDygi.d.ts.map → vertical-list-BGn9nyKh.d.ts.map} +1 -1
- package/dist/vertical-list.d.ts +1 -1
- package/docs-user/README.md +4 -0
- package/docs-user/bottom-drawer.md +150 -0
- package/docs-user/data-table.md +104 -0
- package/docs-user/index.json +22 -2
- package/docs-user/llms.txt +4 -0
- package/docs-user/pan-text.md +103 -0
- package/docs-user/text-shimmer.md +56 -0
- package/docs-user/tree.md +5 -4
- package/llms.txt +4 -0
- package/package.json +1 -1
- package/dist/icon-DR_3rSyZ.d.ts.map +0 -1
- package/dist/tree-DTQon838.js.map +0 -1
- package/dist/tree-component-F6qZ0Gdv.d.ts.map +0 -1
package/dist/tree.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
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-Bc23SI94.js";
|
|
2
|
-
import { _ as
|
|
3
|
-
import { S as ListSearchController } from "./index-
|
|
2
|
+
import { _ as TreeTickleEvent, a as TreeComponent, c as TreeExpandEvent, f as TreeItemDblClickEvent, g as TreeTickleDetail, h as TreeSelectEvent, i as TreeCollapseEvent, l as TreeItemClickDetail, m as TreeSelectDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeSearchHost, r as TreeCollapseDetail, s as TreeExpandDetail, t as TreeActivateDetail, u as TreeItemClickEvent, v as TreeDataModel, y as TreeDataModelOptions } from "./tree-component-BMpxpdTi.js";
|
|
3
|
+
import { S as ListSearchController } from "./index-DDREWqMm.js";
|
|
4
4
|
import { n as TickledController } from "./tickled-controller-C1ZsHpyg.js";
|
|
5
5
|
import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
|
|
6
6
|
import { CommandRegistry } from "@clinth/ui-commands";
|
|
@@ -89,6 +89,7 @@ declare global {
|
|
|
89
89
|
}
|
|
90
90
|
interface TreeBaseElementEventMap extends TreeComponentEventMap {
|
|
91
91
|
'item-click': TreeItemClickEvent;
|
|
92
|
+
'item-dblclick': TreeItemDblClickEvent;
|
|
92
93
|
'expand': TreeExpandEvent;
|
|
93
94
|
'collapse': TreeCollapseEvent;
|
|
94
95
|
'select': TreeSelectEvent;
|
package/dist/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;;;;
|
|
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;;;;cCkBW,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;EAGA,UAAU;;;;;;EAQV;YAGU,eAAa;YAEb,SAAO;YAWP;;WAGD,QAAM;IAAoC,MAAA;IAAiB;;EAgD3D,WAAW,cAAc;;YAyCxB,WAAW,MAAM;;;;;YAQjB,eAAe,MAAM,UAAU;EAuDhC,QAAQ,cAAc;EA8CtB;EAoBA;EAcT,aAAa;EAIb,UAAU,QAAQ,QAAQ;EAO1B,OAAO,MAAM;EAWb,SAAS,MAAM;EAYf;EASA;EAoBA;EAiBA,WAAW;EAoCX,eAAe,YAAY,MAAM;;EAUjC,UAAU;;EAiBV,WAAW,OAAO,SAAS;EAQ3B,YAAY;IAAgB,MAAM;IAAU;;YA6DlC,kBAAkB,MAAM,UAAU,gBAAgB,wBAAwB;YAW1E,iBAAiB,MAAM,UAAU,eAAe,QAAQ;YAgLxD,qBAAqB,OAAO,YAAY,MAAM,UAAU;YAsJxD,YAAY,MAAM;YAIlB,WAAW,MAAM;YAIjB,YAAY,MAAM,UAAU;gBAiBxB,gBAAgB;YA4RpB,0BAA0B,wBAAwB;YAIzC,UAAM;YAmEf,YAAY,MAAM,UAAU,gBAAgB;SAmCtC,sBAAM;;QA8HhB;YACI;IACR,kBAAkB;;;UAIL,gCAAgC;EAC/C,cAAc;EACd,iBAAiB;EACjB,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;;;;;KCz7CZ;cAiBC,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAqBnC,oBAAoB,OAAO;YAIR,UAAM;YAuBN,kBAAkB,MAAM,UAAU,gBAAgB;YAsDlD,YAAY,MAAM,UAAU,gBAAgB;SA6B/C,sBAAM;;QAyFhB;YACI;IACR,kBAAkB;;;UAIL;EACf,oBAAoB,gBAAgB,yBAClC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB;;;;KClQZ,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-CozQj01a.js";
|
|
2
2
|
export { TreeBaseElement, TreeController, TreeDataModel, TreeListElement };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as ListSearchController } from "./index-
|
|
1
|
+
import { S as ListSearchController } from "./index-DDREWqMm.js";
|
|
2
2
|
import { i as ListInteractionMode, l as ListSelectionMode, r as ListElementEventMap } from "./list-selection-types-B5ioL-dG.js";
|
|
3
3
|
import { LitElement, PropertyValues } from "lit";
|
|
4
4
|
import { CommandId, CommandRegistry } from "@clinth/ui-commands";
|
|
@@ -140,4 +140,4 @@ declare global {
|
|
|
140
140
|
}
|
|
141
141
|
//#endregion
|
|
142
142
|
export { CustomCheckboxOptions as n, VerticalListElement as r, AddItemOptions as t };
|
|
143
|
-
//# sourceMappingURL=vertical-list-
|
|
143
|
+
//# sourceMappingURL=vertical-list-BGn9nyKh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertical-list-
|
|
1
|
+
{"version":3,"file":"vertical-list-BGn9nyKh.d.ts","names":[],"sources":["../src/vertical-list/vertical-list.ts"],"mappings":";;;;;UA6CiB;EACf,WAAW;EACX;EACA;;UAGe;;;;;;EAMf;;cAMW,4BAA4B;;EAEvC,eAAe;EAGf,iBAAiB;EAGjB,mBAAmB,IAAI;;;;;;EAQvB;;;;;;;;;;;;;;;;;;;EAqBA,oBAAoB,gCAAgC;;;;;;EAQpD;mBAUiB;UAeT;;WAwEC,QAAM,qBAAA;;MAYX,YAAY;EAoBP;EAmBA;EA4CA,QAAQ,SAAS;;MAmCtB,gBAAgB;;MAKhB,iBAAiB,YAAY;EAIjC,QAAQ,MAAM,kBAAkB,UAAU;;;;;;EAqB1C,WAAW,MAAM,UAAU;;EAW3B,YAAY,OAAO,SAAS,WAAW;EAIvC;;;;;;EAYA,SAAS,gBAAgB;;;;;;EAczB,SAAS,WAAW,WAAW,OAAO;EAItC,OAAO,MAAM;EAIb,WAAW,OAAO,SAAS;EAI3B,SAAS,MAAM;EAIf;EAIA;;MAQI,gBAAgB;;MAKhB;;EAMJ,WAAW,MAAM;;EAKjB,gBAAgB,MAAM;;EAKtB,mBAAmB,MAAM;;EAKzB,SAAS;EAkBP,eAAe,0CAA0C,UAAU;UAqB7D;UAgBA;UAOA;UAiBA;;;;;;;UA6FA;;;;;UAuBA;UAcA;UAYA;UAUA;UAMA;UAIA;UAwDA;UAUA;UAMA;SAUQ,sBAAM;EA+Ib,wBAAM;;QAeT;YACI;IACR,sBAAsB;;YAGd,4BAA4B"}
|
package/dist/vertical-list.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
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-B5ioL-dG.js";
|
|
2
|
-
import { n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-
|
|
2
|
+
import { n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-BGn9nyKh.js";
|
|
3
3
|
export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListSelectDetail, type ListSelectEvent, type ListSelectionMode, type ListTickleDetail, type ListTickleEvent, VerticalListElement };
|
package/docs-user/README.md
CHANGED
|
@@ -6,12 +6,14 @@ This directory contains documentation for each component and some architectural
|
|
|
6
6
|
|
|
7
7
|
- [ac-text](./ac-text.md)
|
|
8
8
|
- [ac-token](./ac-token.md)
|
|
9
|
+
- [bottom-drawer](./bottom-drawer.md)
|
|
9
10
|
- [button](./button.md)
|
|
10
11
|
- [checkbox](./checkbox.md)
|
|
11
12
|
- [colour-picker](./colour-picker.md)
|
|
12
13
|
- [crumbs](./crumbs.md)
|
|
13
14
|
- [data-display](./data-display.md)
|
|
14
15
|
- [data-grid](./data-grid.md)
|
|
16
|
+
- [data-table](./data-table.md)
|
|
15
17
|
- [detail-list](./detail-list.md)
|
|
16
18
|
- [dock](./dock.md)
|
|
17
19
|
- [editable-label](./editable-label.md)
|
|
@@ -28,6 +30,7 @@ This directory contains documentation for each component and some architectural
|
|
|
28
30
|
- [miller](./miller.md)
|
|
29
31
|
- [narrowed-text](./narrowed-text.md)
|
|
30
32
|
- [notifier](./notifier.md)
|
|
33
|
+
- [pan-text](./pan-text.md)
|
|
31
34
|
- [panel](./panel.md)
|
|
32
35
|
- [plots](./plots.md)
|
|
33
36
|
- [polar-pad](./polar-pad.md)
|
|
@@ -42,6 +45,7 @@ This directory contains documentation for each component and some architectural
|
|
|
42
45
|
- [split-layout](./split-layout.md)
|
|
43
46
|
- [swipe](./swipe.md)
|
|
44
47
|
- [tabs](./tabs.md)
|
|
48
|
+
- [text-shimmer](./text-shimmer.md)
|
|
45
49
|
- [timeline](./timeline.md)
|
|
46
50
|
- [titlebar](./titlebar.md)
|
|
47
51
|
- [toolbar](./toolbar.md)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Bottom Drawer
|
|
2
|
+
|
|
3
|
+
A slide-up drawer panel that slides over the bottom of its container. Place it as a **sibling** of the content it covers, inside a positioned container — the element stretches to fill that container and slides the drawer up over it. The drawer can be resized from its top edge and supports a floating handle mode.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<div class="panel" style="position: relative; overflow: hidden">
|
|
7
|
+
<div>Main content behind the drawer</div>
|
|
8
|
+
<ixfx-bottom-drawer label="Inspector" open>
|
|
9
|
+
Drawer content here
|
|
10
|
+
</ixfx-bottom-drawer>
|
|
11
|
+
</div>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The container must establish a positioning context (`position: relative`, `absolute`, or `fixed`) and should set `overflow: hidden` so the drawer is clipped while closed or animating. The element itself is `pointer-events: none` except over the drawer, so the sibling content underneath stays interactive.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## `ixfx-bottom-drawer`
|
|
19
|
+
|
|
20
|
+
### Properties / attributes
|
|
21
|
+
|
|
22
|
+
| Attribute / Property | Type | Default | Description |
|
|
23
|
+
|------------------------|--------------------|---------------|----------------------------------------------------------|
|
|
24
|
+
| `open` | boolean | `false` | Whether the drawer is visible |
|
|
25
|
+
| `height` | number | `320` | Drawer height in px |
|
|
26
|
+
| `min-height` | number | `160` | Minimum height before fade-out begins |
|
|
27
|
+
| `dismiss-threshold` | number | `96` | Drag below this height to close the drawer |
|
|
28
|
+
| `max-height-ratio` | number | `0.85` | Max height as a fraction of host height |
|
|
29
|
+
| `label` | string | `Drawer` | Header title and accessible label |
|
|
30
|
+
| `icon-name` | string | `''` | Header icon from the icon registry |
|
|
31
|
+
| `closable` | boolean | `true` | Show the header close button |
|
|
32
|
+
| `collapsible` | boolean | `true` | Show the expand/collapse caret |
|
|
33
|
+
| `maintain-handle` | boolean | `false` | Keep a drag handle docked to the bottom when collapsed |
|
|
34
|
+
| `name` | string | `''` | Command namespace (see Commands section) |
|
|
35
|
+
| `registry` | CommandRegistry | — | `@clinth/ui-commands` registry for named commands |
|
|
36
|
+
|
|
37
|
+
### Slots
|
|
38
|
+
|
|
39
|
+
| Slot | Description |
|
|
40
|
+
|------------|-----------------------------------------------|
|
|
41
|
+
| default | Drawer body content |
|
|
42
|
+
| `toolbar` | Header toolbar items (forwarded to titlebar) |
|
|
43
|
+
|
|
44
|
+
### Events
|
|
45
|
+
|
|
46
|
+
| Event | Detail | Description |
|
|
47
|
+
|------------------|-------------------------------|--------------------------------------|
|
|
48
|
+
| `drawer-close` | — | Fired when drawer is closed |
|
|
49
|
+
| `drawer-resize` | `{ height: number }` | Fired when drawer is resized |
|
|
50
|
+
|
|
51
|
+
### Commands
|
|
52
|
+
|
|
53
|
+
When a `name` is set, the drawer registers commands as `<name>.<command>`:
|
|
54
|
+
|
|
55
|
+
| Command | Description |
|
|
56
|
+
|--------------|------------------------------------------|
|
|
57
|
+
| `expand` | Open the drawer |
|
|
58
|
+
| `collapse` | Close the drawer (fires `drawer-close`) |
|
|
59
|
+
| `toggle` | Toggle open/closed state |
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
// Invoke commands via the registry
|
|
63
|
+
drawer.registry?.invoke('inspector.expand');
|
|
64
|
+
drawer.registry?.invoke('inspector.toggle');
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Share a registry across multiple drawers to control them globally:
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
const shared = createCommandRegistry();
|
|
71
|
+
firstDrawer.registry = shared;
|
|
72
|
+
secondDrawer.registry = shared;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Resizing
|
|
78
|
+
|
|
79
|
+
The drawer's top edge is a resize handle. Drag it up or down to resize. Keyboard users can focus the handle and use:
|
|
80
|
+
|
|
81
|
+
- `Arrow Up` / `Arrow Down` — resize by 16px (64px with Shift)
|
|
82
|
+
- `Home` — resize to minimum height
|
|
83
|
+
- `End` — resize to maximum height
|
|
84
|
+
|
|
85
|
+
When closed, keyboard resize on the handle opens the drawer.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Maintain handle mode
|
|
90
|
+
|
|
91
|
+
When `maintain-handle` is `true`, a small draggable tab remains docked at the bottom edge when the drawer is closed. Drag it up to reopen.
|
|
92
|
+
|
|
93
|
+
```html
|
|
94
|
+
<div class="panel" style="position: relative; overflow: hidden">
|
|
95
|
+
<div>Main content</div>
|
|
96
|
+
<ixfx-bottom-drawer label="Inspector" maintain-handle>
|
|
97
|
+
Inspector content
|
|
98
|
+
</ixfx-bottom-drawer>
|
|
99
|
+
</div>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## With toolbar
|
|
105
|
+
|
|
106
|
+
Toolbar items slotted into `toolbar` are forwarded into the `ixfx-titlebar` toolbar:
|
|
107
|
+
|
|
108
|
+
```html
|
|
109
|
+
<div class="panel" style="position: relative; overflow: hidden">
|
|
110
|
+
<div>Main content</div>
|
|
111
|
+
<ixfx-bottom-drawer label="Inspector" open>
|
|
112
|
+
<div slot="toolbar">
|
|
113
|
+
<button type="button" data-tooltip="Refresh">
|
|
114
|
+
<ixfx-icon name="refresh"></ixfx-icon>
|
|
115
|
+
</button>
|
|
116
|
+
</div>
|
|
117
|
+
Inspector content
|
|
118
|
+
</ixfx-bottom-drawer>
|
|
119
|
+
</div>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## CSS custom properties
|
|
125
|
+
|
|
126
|
+
| Property | Default | Description |
|
|
127
|
+
|----------------------------------------|----------------------------------------------|------------------------------------------|
|
|
128
|
+
| `--bottom-drawer-background` | `color-mix(in srgb, var(--surface-2) 84%, transparent)` | Drawer fill |
|
|
129
|
+
| `--bottom-drawer-border` | `1px solid color-mix(in srgb, var(--surface-2-text) 14%, transparent)` | Drawer border |
|
|
130
|
+
| `--bottom-drawer-radius` | `var(--radius-l)` | Top corner radius |
|
|
131
|
+
| `--bottom-drawer-blur` | `18px` | Backdrop blur amount |
|
|
132
|
+
| `--bottom-drawer-shadow` | `var(--shadow-l)` | Drop shadow |
|
|
133
|
+
| `--bottom-drawer-collapsed-width` | `96px` | Width of floating pill (maintain-handle) |
|
|
134
|
+
| `--bottom-drawer-title-background` | `transparent` | Header fill |
|
|
135
|
+
| `--ixfx-handle-*` | (see handle docs) | Resize grip styling |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## TypeScript types
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
import type { BottomDrawerElement, BottomDrawerResizeDetail, BottomDrawerCloseEvent } from 'ixfxfun-components';
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## See also
|
|
148
|
+
|
|
149
|
+
- [`ixfx-titlebar`](../titlebar/README.md) — Header component used by the drawer
|
|
150
|
+
- [`ixfx-icon`](../icons/README.md) — Icon component for header icons
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# `ixfx-data-table`
|
|
2
|
+
|
|
3
|
+
A key/value data table with responsive layout, hover details, and keyboard/tickle navigation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<ixfx-data-table id="table"></ixfx-data-table>
|
|
11
|
+
|
|
12
|
+
<script type="module">
|
|
13
|
+
import '@ixfx/components/data-table';
|
|
14
|
+
|
|
15
|
+
const table = document.querySelector('#table');
|
|
16
|
+
table.rows = [
|
|
17
|
+
{ label: `Name`, value: `Ada` },
|
|
18
|
+
{ label: `Age`, value: 30 },
|
|
19
|
+
{ label: `Active`, value: true, detail: `Account was active since 2020` },
|
|
20
|
+
];
|
|
21
|
+
</script>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Import via bundle: `import '@ixfx/components';` or per-component `import '@ixfx/components/data-table';`.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Rows
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
type DataTableRow = {
|
|
32
|
+
label: string;
|
|
33
|
+
value: string | number | boolean | Node | TemplateResult;
|
|
34
|
+
fullWidth?: boolean; // spans entire row width
|
|
35
|
+
detail?: string | TemplateResult; // hover/click reveals this
|
|
36
|
+
id?: string;
|
|
37
|
+
};
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Layout
|
|
43
|
+
|
|
44
|
+
| `layout` | Description |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `auto` (default) | Responsive — widens to 2–3 pair columns on wide containers, stacks on narrow |
|
|
47
|
+
| `rows` | Always stacked (key above value) |
|
|
48
|
+
| `columns` | Always two-column grid regardless of width |
|
|
49
|
+
|
|
50
|
+
Switch to stacked at a custom breakpoint:
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<ixfx-data-table narrow-breakpoint="620"></ixfx-data-table>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Selection & tickle
|
|
59
|
+
|
|
60
|
+
Clicking a row selects it and reveals its detail panel. `selectedIndex` tracks the selection:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
table.selectedIndex = 0; // select first row
|
|
64
|
+
table.addEventListener(`data-table-row-click`, (e) => {
|
|
65
|
+
console.log(e.detail.row, e.detail.index, e.detail.selected);
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Hover reveals the detail panel after `tickle-delay` ms (default 400). Clicking reveals immediately.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## CSS variables
|
|
74
|
+
|
|
75
|
+
| Variable | Default | Description |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `--data-table-name-width` | `max-content` | Column width for labels |
|
|
78
|
+
| `--data-table-value-width` | `minmax(0, 1fr)` | Column width for values |
|
|
79
|
+
| `--data-table-cell-align` | `baseline` | Cell vertical alignment |
|
|
80
|
+
| `--data-table-row-padding` | `0.35em` | Row padding |
|
|
81
|
+
| `--data-table-name-align` | `left` | Label text alignment |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Methods
|
|
86
|
+
|
|
87
|
+
| Method | Signature | Description |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `rows` | `readonly DataTableRow[]` | Row data |
|
|
90
|
+
|
|
91
|
+
| Property | Type | Description |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `selectedIndex` | `number \| undefined` | Currently selected row index |
|
|
94
|
+
| `layout` | `'auto' \| 'rows' \| 'columns'` | Layout mode |
|
|
95
|
+
| `narrowBreakpoint` | `number` | Breakpoint for stacking (px) |
|
|
96
|
+
| `tickleDelay` | `number` | Hover detail delay (ms) |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Events
|
|
101
|
+
|
|
102
|
+
| Event | Detail | Description |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| `data-table-row-click` | `{ row, index, selected }` | Fired on row click |
|
package/docs-user/index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ixfx/components",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"generated": "2026-09-
|
|
3
|
+
"version": "0.8.7",
|
|
4
|
+
"generated": "2026-09-09T21:12:58.854Z",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ac-text",
|
|
@@ -13,6 +13,11 @@
|
|
|
13
13
|
"summary": "Token/tag input with per-token autocomplete. Looks like a text box — committed tokens appear as inline chips, and a suggestion popup follows the typing cursor. Typical use cases are email To: fields a",
|
|
14
14
|
"path": "docs-user/ac-token.md"
|
|
15
15
|
},
|
|
16
|
+
{
|
|
17
|
+
"name": "bottom-drawer",
|
|
18
|
+
"summary": "A slide-up drawer panel that slides over the bottom of its container. Place it as a **sibling** of the content it covers, inside a positioned container — the element stretches to fill that container a",
|
|
19
|
+
"path": "docs-user/bottom-drawer.md"
|
|
20
|
+
},
|
|
16
21
|
{
|
|
17
22
|
"name": "button",
|
|
18
23
|
"summary": "Three related button components:",
|
|
@@ -43,6 +48,11 @@
|
|
|
43
48
|
"summary": "A virtualised data grid with sortable/resizable/reorderable columns, single/multi selection, grouping, and inline cell editing. Handles 200+ rows with windowed rendering and keyboard navigation.",
|
|
44
49
|
"path": "docs-user/data-grid.md"
|
|
45
50
|
},
|
|
51
|
+
{
|
|
52
|
+
"name": "data-table",
|
|
53
|
+
"summary": "A key/value data table with responsive layout, hover details, and keyboard/tickle navigation.",
|
|
54
|
+
"path": "docs-user/data-table.md"
|
|
55
|
+
},
|
|
46
56
|
{
|
|
47
57
|
"name": "detail-list",
|
|
48
58
|
"summary": "A list that scales horizontally, not vertically. Items are laid out in equal-width columns; they flow top→bottom down a column, then wrap to the top of the next column to the right. The component has ",
|
|
@@ -123,6 +133,11 @@
|
|
|
123
133
|
"summary": "A \"lookless\" app-wide notification system. `NotificationManager` is a singleton that owns notification state, queueing, and timing — it doesn't know how to draw anything. A `NotificationRenderer` (the",
|
|
124
134
|
"path": "docs-user/notifier.md"
|
|
125
135
|
},
|
|
136
|
+
{
|
|
137
|
+
"name": "pan-text",
|
|
138
|
+
"summary": "Pans overflowing text on hover or continuously in a loop. Use when a label is too long for its container and you want to reveal the full text without truncation.",
|
|
139
|
+
"path": "docs-user/pan-text.md"
|
|
140
|
+
},
|
|
126
141
|
{
|
|
127
142
|
"name": "panel",
|
|
128
143
|
"summary": "An collapsible panel component with support for titles, icons, toolbars, and multiple visual variants.",
|
|
@@ -193,6 +208,11 @@
|
|
|
193
208
|
"summary": "A complete tabbed interface system using several coordinated components:",
|
|
194
209
|
"path": "docs-user/tabs.md"
|
|
195
210
|
},
|
|
211
|
+
{
|
|
212
|
+
"name": "text-shimmer",
|
|
213
|
+
"summary": "A label with a sweeping highlight band across the text. Useful as a lightweight \"still working…\" or \"loading…\" indicator.",
|
|
214
|
+
"path": "docs-user/text-shimmer.md"
|
|
215
|
+
},
|
|
196
216
|
{
|
|
197
217
|
"name": "timeline",
|
|
198
218
|
"summary": "A canvas-based timeline component with tracks, events, zoom/pan, and vertical track resizing. Suitable for visualizing time-series data, event logs, or scheduling.",
|
package/docs-user/llms.txt
CHANGED
|
@@ -13,12 +13,14 @@ import '@ixfx/components/data-grid';
|
|
|
13
13
|
## Components
|
|
14
14
|
- [ac-text](docs-user/ac-text.md): VS Code command-palette style autocomplete text input. Shows a popup with matching results as the user types.
|
|
15
15
|
- [ac-token](docs-user/ac-token.md): Token/tag input with per-token autocomplete. Looks like a text box — committed tokens appear as inline chips, and a suggestion popup follows the typing cursor. Typical use cases are email To: fields a
|
|
16
|
+
- [bottom-drawer](docs-user/bottom-drawer.md): A slide-up drawer panel that slides over the bottom of its container. Place it as a **sibling** of the content it covers, inside a positioned container — the element stretches to fill that container a
|
|
16
17
|
- [button](docs-user/button.md): Three related button components:
|
|
17
18
|
- [checkbox](docs-user/checkbox.md): A custom checkbox with a diagonal line indicator and indeterminate state support. Uses shadow DOM with CSS variables for full appearance customization.
|
|
18
19
|
- [colour-picker](docs-user/colour-picker.md): Two components for picking OKLCH colours. Use `ixfx-colour-picker` when you need a full inline picker; use `ixfx-colour-picker-popup` when you need a compact swatch that opens a picker in a popover.
|
|
19
20
|
- [crumbs](docs-user/crumbs.md): Breadcrumb navigation with lazy-loading child support. Uses the same `TreeNode` / `TreeItem` data model as `ixfx-tree-list`, allowing easy swapping between the two components.
|
|
20
21
|
- [data-display](docs-user/data-display.md): A debug data display component that renders key-value pairs from a plain object. Supports 7 inline render modes (`led`, `plot`, `plot-xy`, `plot-heat`, `plot-histogram`, `time-elapsed`, `hide`) via `c
|
|
21
22
|
- [data-grid](docs-user/data-grid.md): A virtualised data grid with sortable/resizable/reorderable columns, single/multi selection, grouping, and inline cell editing. Handles 200+ rows with windowed rendering and keyboard navigation.
|
|
23
|
+
- [data-table](docs-user/data-table.md): A key/value data table with responsive layout, hover details, and keyboard/tickle navigation.
|
|
22
24
|
- [detail-list](docs-user/detail-list.md): A list that scales horizontally, not vertically. Items are laid out in equal-width columns; they flow top→bottom down a column, then wrap to the top of the next column to the right. The component has
|
|
23
25
|
- [dock](docs-user/dock.md): Dockable, movable panels like VS Code / Photoshop. Drag a panel by its
|
|
24
26
|
- [editable-label](docs-user/editable-label.md): Inline editable text components. `ixfx-editable-number` extends `ixfx-editable-label` with drag-to-adjust and fill-bar visualization.
|
|
@@ -35,6 +37,7 @@ import '@ixfx/components/data-grid';
|
|
|
35
37
|
- [miller](docs-user/miller.md): A Miller column component displays hierarchical data as multiple vertical columns, like macOS Finder or email clients. Each column shows the children of the selected item in the previous column.
|
|
36
38
|
- [narrowed-text](docs-user/narrowed-text.md): A filtered text selection component with inline search. Shows slotted items filtered by a query string as the user types.
|
|
37
39
|
- [notifier](docs-user/notifier.md): A "lookless" app-wide notification system. `NotificationManager` is a singleton that owns notification state, queueing, and timing — it doesn't know how to draw anything. A `NotificationRenderer` (the
|
|
40
|
+
- [pan-text](docs-user/pan-text.md): Pans overflowing text on hover or continuously in a loop. Use when a label is too long for its container and you want to reveal the full text without truncation.
|
|
38
41
|
- [panel](docs-user/panel.md): An collapsible panel component with support for titles, icons, toolbars, and multiple visual variants.
|
|
39
42
|
- [plots](docs-user/plots.md): SVG-based plotting components for visualising data streams.
|
|
40
43
|
- [polar-pad](docs-user/polar-pad.md): A circular pad for setting polar coordinates (angle + radius). The user clicks or drags within a circle to position a marker. The marker's position encodes an angle (degrees, 0 = right, clockwise) and
|
|
@@ -49,6 +52,7 @@ import '@ixfx/components/data-grid';
|
|
|
49
52
|
- [split-layout](docs-user/split-layout.md): A Lit web component that lays out any number of panels along one axis with draggable gutters between them.
|
|
50
53
|
- [swipe](docs-user/swipe.md): A touch-friendly swipe/nudge component. User taps and drags to generate a value in range [-1, 1]. Value is emitted only on pointer release.
|
|
51
54
|
- [tabs](docs-user/tabs.md): A complete tabbed interface system using several coordinated components:
|
|
55
|
+
- [text-shimmer](docs-user/text-shimmer.md): A label with a sweeping highlight band across the text. Useful as a lightweight "still working…" or "loading…" indicator.
|
|
52
56
|
- [timeline](docs-user/timeline.md): A canvas-based timeline component with tracks, events, zoom/pan, and vertical track resizing. Suitable for visualizing time-series data, event logs, or scheduling.
|
|
53
57
|
- [titlebar](docs-user/titlebar.md): Standalone titlebar chrome extracted from `ixfx-panel`: title text, icon, toolbar slot, close button and an optional collapse/expand caret. Use it when you need a panel-style header without the collap
|
|
54
58
|
- [toolbar](docs-user/toolbar.md): Two components for building toolbars:
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# `ixfx-pan-text`
|
|
2
|
+
|
|
3
|
+
Pans overflowing text on hover or continuously in a loop. Use when a label is too long for its container and you want to reveal the full text without truncation.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<span style="max-width: 120px; display: inline-block; overflow: hidden;">
|
|
7
|
+
<ixfx-pan-text direction="end">A very long label that overflows</ixfx-pan-text>
|
|
8
|
+
</span>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Modes
|
|
14
|
+
|
|
15
|
+
### `hover` (default)
|
|
16
|
+
|
|
17
|
+
Pans once while the cursor is over the element. Rests at the starting position when the cursor leaves.
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<ixfx-pan-text mode="hover">Long notification text goes here</ixfx-pan-text>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### `loop`
|
|
24
|
+
|
|
25
|
+
Pans repeatedly: pauses 2 seconds at the end, snaps back to start, then pans again until `stopLoop()` is called.
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<ixfx-pan-text mode="loop">Scrolling ticker text</ixfx-pan-text>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
const pan = document.querySelector('ixfx-pan-text');
|
|
33
|
+
pan.startLoop(); // Begin the loop
|
|
34
|
+
pan.stopLoop(); // Stop and snap back to rest position
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The loop starts automatically when `mode="loop"` is set on an already-connected element, and stops automatically when `disabled` is set to `true`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Direction
|
|
42
|
+
|
|
43
|
+
| Direction | Rest position | Pan direction |
|
|
44
|
+
|-----------|--------------------|---------------|
|
|
45
|
+
| `end` | Start of text | Left |
|
|
46
|
+
| `start` | End of text | Right |
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<!-- Shows end of text at rest, pans left on hover -->
|
|
50
|
+
<ixfx-pan-text direction="end">Very long label</ixfx-pan-text>
|
|
51
|
+
|
|
52
|
+
<!-- Shows start of text at rest, pans right on hover -->
|
|
53
|
+
<ixfx-pan-text direction="start">Very long label</ixfx-pan-text>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Properties / attributes
|
|
59
|
+
|
|
60
|
+
| Attribute / Property | Type | Default | Description |
|
|
61
|
+
|---------------------|-----------------------|----------|-------------------------------------------------------|
|
|
62
|
+
| `direction` | `'start'` \| `'end'` | `'end'` | Which end of the text is visible at rest |
|
|
63
|
+
| `mode` | `'hover'` \| `'loop'` | `'hover'`| Interaction mode |
|
|
64
|
+
| `disabled` | boolean | `false` | Disables panning and applies reduced opacity |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## JavaScript API
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
const pan = document.querySelector('ixfx-pan-text');
|
|
72
|
+
|
|
73
|
+
// Programmatic loop control
|
|
74
|
+
pan.startLoop(); // Begin continuous panning
|
|
75
|
+
pan.stopLoop(); // Stop and snap back
|
|
76
|
+
|
|
77
|
+
// Check current state
|
|
78
|
+
if (pan.looping) {
|
|
79
|
+
console.log('Pan is in loop mode');
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Accessibility
|
|
86
|
+
|
|
87
|
+
Respects `prefers-reduced-motion`. When reduced motion is preferred, the text stays in its rest position without animation.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## CSS custom properties
|
|
92
|
+
|
|
93
|
+
| Property | Default | Description |
|
|
94
|
+
|---------------------|-----------|----------------------|
|
|
95
|
+
| `--disabled-opacity`| `0.5` | Opacity when disabled |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## TypeScript types
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import type { PanTextElement, PanTextMode } from 'ixfxfun-components';
|
|
103
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# `ixfx-text-shimmer`
|
|
2
|
+
|
|
3
|
+
A label with a sweeping highlight band across the text. Useful as a lightweight "still working…" or "loading…" indicator.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<ixfx-text-shimmer text="Thinking…"></ixfx-text-shimmer>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Or using the default slot:
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<ixfx-text-shimmer>Reticulating splines…</ixfx-text-shimmer>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Properties / attributes
|
|
18
|
+
|
|
19
|
+
| Attribute / Property | Type | Default | Description |
|
|
20
|
+
|---------------------|-----------|---------|------------------------------------------------|
|
|
21
|
+
| `text` | `string` | `''` | Label text. When empty, uses the default slot |
|
|
22
|
+
| `paused` | `boolean` | `false` | Stops the sweep and shows flat base colour |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## CSS custom properties
|
|
27
|
+
|
|
28
|
+
| Property | Default | Description |
|
|
29
|
+
|---------------------------------|--------------------------------|------------------------------------------|
|
|
30
|
+
| `--text-shimmer-color` | `var(--surface-3-text)` | Resting / base text colour |
|
|
31
|
+
| `--text-shimmer-gradient-color`| `var(--surface-2-text)` | Colour of the moving highlight |
|
|
32
|
+
| `--text-shimmer-duration` | `2s` | Time for one sweep |
|
|
33
|
+
| `--text-shimmer-spread` | `15%` | Half-width of the highlight band |
|
|
34
|
+
|
|
35
|
+
```css
|
|
36
|
+
/* Example: warmer highlight colour */
|
|
37
|
+
ixfx-text-shimmer {
|
|
38
|
+
--text-shimmer-color: #666;
|
|
39
|
+
--text-shimmer-gradient-color: #f0a500;
|
|
40
|
+
--text-shimmer-duration: 1.5s;
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Accessibility
|
|
47
|
+
|
|
48
|
+
Respects `prefers-reduced-motion`. When reduced motion is preferred, the sweep animation is disabled and the text shows its base colour.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## TypeScript types
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import type { TextShimmerElement } from 'ixfxfun-components';
|
|
56
|
+
```
|
package/docs-user/tree.md
CHANGED
|
@@ -275,7 +275,8 @@ All events **bubble** and are **composed** (cross shadow-DOM boundaries).
|
|
|
275
275
|
| `select` | `TreeSelectDetail` | Selection set changes by any means (click, keyboard, programmatic) |
|
|
276
276
|
| `tickle` | `TreeTickleDetail` | An item enters cursor focus: pointer hover OR keyboard navigation cursor |
|
|
277
277
|
| `activate` | `TreeActivateDetail` | User explicitly activates an item (Enter key or double-click) |
|
|
278
|
-
| `item-click` | `{ node: TreeNode; depth: number }` | Raw pointer click on any item |
|
|
278
|
+
| `item-click` | `{ node: TreeNode; depth: number }` | Raw pointer click on any item (not fired for the second click of a double-click) |
|
|
279
|
+
| `item-dblclick` | `TreeItemDblClickDetail` | User double-clicks an item. The second click is swallowed, so a branch is never toggled open/closed by a double-click. `activate` also fires. |
|
|
279
280
|
| `expand` | `{ node: TreeNode; depth: number }` | A branch expands |
|
|
280
281
|
| `collapse` | `{ node: TreeNode; depth: number }` | A branch collapses |
|
|
281
282
|
|
|
@@ -524,8 +525,8 @@ These are set by the global theme and inherited by all tree components.
|
|
|
524
525
|
| Variable | Default | Description |
|
|
525
526
|
|----------|---------|-------------|
|
|
526
527
|
| `--tree-indent` | `20px` | Indentation per depth level |
|
|
527
|
-
| `--tree-item-height` | `
|
|
528
|
-
| `--tree-caret-size` | `
|
|
528
|
+
| `--tree-item-height` | `2ch` | Height of each row |
|
|
529
|
+
| `--tree-caret-size` | `30px` | Expand/collapse caret size |
|
|
529
530
|
| `--ixfx-list-item-move-duration` | `200ms` | Row enter / leave animation duration |
|
|
530
531
|
|
|
531
532
|
### `ixfx-miller-list` specific
|
|
@@ -539,7 +540,7 @@ These are set by the global theme and inherited by all tree components.
|
|
|
539
540
|
| `--item-selected-text` | `#fff` | Selected item text |
|
|
540
541
|
| `--item-open-bg` | (theme) | Background for items on the open path |
|
|
541
542
|
| `--icon-size` | `1em` | Icon dimensions |
|
|
542
|
-
| `--icon-spacing` | `
|
|
543
|
+
| `--icon-spacing` | `0px` | Gap between icon and label |
|
|
543
544
|
|
|
544
545
|
---
|
|
545
546
|
|