@ixfx/components 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/index.d.ts +1086 -603
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +16153 -15296
- package/bundle/index.js.map +1 -1
- package/bundle/style.css +14 -4
- package/dist/ac-text.d.ts.map +1 -1
- package/dist/ac-text.js +11 -6
- package/dist/ac-text.js.map +1 -1
- package/dist/{button-DMt5XWUK.js → button-C3fLMKUv.js} +4 -4
- package/dist/{button-DMt5XWUK.js.map → button-C3fLMKUv.js.map} +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/button.js +1 -1
- package/dist/checkbox.d.ts +2 -2
- package/dist/checkbox.d.ts.map +1 -1
- package/dist/checkbox.js +14 -8
- package/dist/checkbox.js.map +1 -1
- package/dist/{colour-C3MQIjFJ-BLXg8W3U.js → colour-C3MQIjFJ-vRCdr8W-.js} +146 -552
- package/dist/colour-C3MQIjFJ-vRCdr8W-.js.map +1 -0
- package/dist/{colour-picker-K6zu82lm.js → colour-picker-0sgAha1T.js} +14 -9
- package/dist/colour-picker-0sgAha1T.js.map +1 -0
- package/dist/colour-picker.d.ts +1 -1
- package/dist/colour-picker.js +1 -1
- package/dist/crumbs.d.ts +1 -1
- package/dist/crumbs.d.ts.map +1 -1
- package/dist/crumbs.js +11 -6
- package/dist/crumbs.js.map +1 -1
- package/dist/data-display.d.ts +9 -4
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +270 -43
- package/dist/data-display.js.map +1 -1
- package/dist/data-provider-DgI909FP.js +23 -0
- package/dist/data-provider-DgI909FP.js.map +1 -0
- package/dist/{decorate-D7rC1gLP.js → decorate-DdjvVHS-.js} +2 -2
- package/dist/{decorate-D7rC1gLP.js.map → decorate-DdjvVHS-.js.map} +1 -1
- package/dist/{defaults-C7elhuyJ.js → defaults-C3b9OWJD.js} +2 -2
- package/dist/{defaults-C7elhuyJ.js.map → defaults-C3b9OWJD.js.map} +1 -1
- package/dist/{dist-TAGYwaju.js → dist-CA13FvMn.js} +7 -66
- package/dist/dist-CA13FvMn.js.map +1 -0
- package/dist/editable-label.d.ts.map +1 -1
- package/dist/editable-label.js +3 -2
- package/dist/editable-label.js.map +1 -1
- package/dist/fallbacks-pNMOMx38.js +168 -0
- package/dist/fallbacks-pNMOMx38.js.map +1 -0
- package/dist/{hex-editor-DlfoA65y.d.ts → hex-editor-CMIxtNgT.d.ts} +1 -1
- package/dist/hex-editor-CMIxtNgT.d.ts.map +1 -0
- package/dist/{hex-editor-CsN_ySkH.js → hex-editor-WZrjRtvL.js} +3 -3
- package/dist/{hex-editor-CsN_ySkH.js.map → hex-editor-WZrjRtvL.js.map} +1 -1
- package/dist/hex.d.ts +1 -1
- package/dist/hex.js +1 -1
- package/dist/{highlight-TPbSHruI.js → highlight-B-eQrhhb.js} +1 -1
- package/dist/{highlight-TPbSHruI.js.map → highlight-B-eQrhhb.js.map} +1 -1
- package/dist/{icon-9NWTXtE1.js → icon-Ndo40kNO.js} +6 -5
- package/dist/icon-Ndo40kNO.js.map +1 -0
- package/dist/{icon-Dm_DHDz6.d.ts → icon-epZd-JIO.d.ts} +2 -2
- package/dist/icon-epZd-JIO.d.ts.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/icons.js +3 -3
- package/dist/{incr-search-DSKKsk6w.js → incr-search-CeERfijK.js} +2 -2
- package/dist/{incr-search-DSKKsk6w.js.map → incr-search-CeERfijK.js.map} +1 -1
- package/dist/incr-search.d.ts +1 -1
- package/dist/incr-search.js +2 -2
- package/dist/{index-hXFn14tM.d.ts → index-BMjri2-S.d.ts} +2 -2
- package/dist/{index-hXFn14tM.d.ts.map → index-BMjri2-S.d.ts.map} +1 -1
- package/dist/{index-DSlPeWLK.d.ts → index-CWpNcQKE.d.ts} +5 -5
- package/dist/index-CWpNcQKE.d.ts.map +1 -0
- package/dist/{index-DLkSKL4T.d.ts → index-CowKi2mo.d.ts} +1 -1
- package/dist/index-CowKi2mo.d.ts.map +1 -0
- package/dist/{index-B1hNR7Z9.d.ts → index-D87kRcEs.d.ts} +1 -1
- package/dist/{index-B1hNR7Z9.d.ts.map → index-D87kRcEs.d.ts.map} +1 -1
- package/dist/{index-CnL9krsH.d.ts → index-DgXpCg_G.d.ts} +32 -26
- package/dist/index-DgXpCg_G.d.ts.map +1 -0
- package/dist/{index-iZLld8Ca.d.ts → index-JuEVfmr-.d.ts} +2 -2
- package/dist/index-JuEVfmr-.d.ts.map +1 -0
- package/dist/index.d.ts +432 -121
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2369 -1706
- package/dist/index.js.map +1 -1
- package/dist/interaction-D6efrBLo.js +1 -0
- package/dist/{keyboard-De_vOHLg.js → keyboard-CimiEskD.js} +1 -1
- package/dist/{keyboard-De_vOHLg.js.map → keyboard-CimiEskD.js.map} +1 -1
- package/dist/{labelled-input-base-CqPL5rKm.js → labelled-input-base-9K_w3oLj.js} +2 -2
- package/dist/{labelled-input-base-CqPL5rKm.js.map → labelled-input-base-9K_w3oLj.js.map} +1 -1
- package/dist/{labelled-input-base-BVvNeb5R.d.ts → labelled-input-base-Cz6qE6Dk.d.ts} +1 -1
- package/dist/labelled-input-base-Cz6qE6Dk.d.ts.map +1 -0
- package/dist/labelled-radial-input.d.ts +2 -2
- package/dist/labelled-radial-input.d.ts.map +1 -1
- package/dist/labelled-radial-input.js +7 -6
- package/dist/labelled-radial-input.js.map +1 -1
- package/dist/labelled-range-input.d.ts +1 -1
- package/dist/labelled-range-input.js +2 -2
- package/dist/led.d.ts +1 -1
- package/dist/led.d.ts.map +1 -1
- package/dist/led.js +2 -2
- package/dist/led.js.map +1 -1
- package/dist/{menu-item-CKRfP0pN.js → menu-item-BrIuORYD.js} +20 -10
- package/dist/menu-item-BrIuORYD.js.map +1 -0
- package/dist/{menu-item-ClQF2DKN.d.ts → menu-item-COx-Azgj.d.ts} +1 -1
- package/dist/menu-item-COx-Azgj.d.ts.map +1 -0
- package/dist/{menu-DJJuCm-5.js → menu-vjoiHZ13.js} +30 -17
- package/dist/menu-vjoiHZ13.js.map +1 -0
- package/dist/menu.d.ts +2 -2
- package/dist/menu.js +2 -2
- package/dist/miller.d.ts +2 -2
- package/dist/miller.d.ts.map +1 -1
- package/dist/miller.js +18 -11
- package/dist/miller.js.map +1 -1
- package/dist/narrowed-text.d.ts.map +1 -1
- package/dist/narrowed-text.js +7 -5
- 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 +5 -4
- package/dist/panel.js.map +1 -1
- package/dist/plots.d.ts +2 -2
- package/dist/plots.js +2 -2
- package/dist/polar-pad.d.ts +1 -1
- package/dist/polar-pad.d.ts.map +1 -1
- package/dist/polar-pad.js +10 -4
- package/dist/polar-pad.js.map +1 -1
- package/dist/{popup-ImtS9KnS.js → popup-DiWMxsWj.js} +1 -1
- package/dist/{popup-ImtS9KnS.js.map → popup-DiWMxsWj.js.map} +1 -1
- package/dist/prominence-DlFShic3.js +104 -0
- package/dist/prominence-DlFShic3.js.map +1 -0
- package/dist/{radial-input-LUSBEycd.d.ts → radial-input-CpQPs1Mp.d.ts} +1 -1
- package/dist/radial-input-CpQPs1Mp.d.ts.map +1 -0
- package/dist/{radial-input-DZA6WaFu.js → radial-input-DZ7eQCcM.js} +11 -6
- package/dist/radial-input-DZ7eQCcM.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 +1 -1
- package/dist/range-input.d.ts.map +1 -1
- package/dist/range-input.js +9 -4
- package/dist/range-input.js.map +1 -1
- package/dist/range.d.ts +1 -1
- package/dist/range.d.ts.map +1 -1
- package/dist/range.js +5 -3
- package/dist/range.js.map +1 -1
- package/dist/{registry-Q2gYQCHM.js → registry-CkW7q09Q.js} +1 -1
- package/dist/{registry-Q2gYQCHM.js.map → registry-CkW7q09Q.js.map} +1 -1
- package/dist/selecthorizontal.d.ts +1 -1
- package/dist/selecthorizontal.d.ts.map +1 -1
- package/dist/selecthorizontal.js +4 -3
- package/dist/selecthorizontal.js.map +1 -1
- package/dist/snap-container.d.ts.map +1 -1
- package/dist/snap-container.js +1 -1
- package/dist/split-layout.d.ts +1 -1
- package/dist/split-layout.d.ts.map +1 -1
- package/dist/split-layout.js +6 -5
- package/dist/split-layout.js.map +1 -1
- package/dist/style.css +14 -4
- package/dist/swipe.d.ts.map +1 -1
- package/dist/swipe.js +9 -4
- package/dist/swipe.js.map +1 -1
- package/dist/{tab-list-BnqISNvO.d.ts → tab-list-DLzb-m-I.d.ts} +2 -2
- package/dist/tab-list-DLzb-m-I.d.ts.map +1 -0
- package/dist/tabs.d.ts +1 -1
- package/dist/tabs.js +10 -4
- package/dist/tabs.js.map +1 -1
- package/dist/{tickled-controller-Cq1Va0rR.d.ts → tickled-controller-BjYCzGrU.d.ts} +2 -2
- package/dist/tickled-controller-BjYCzGrU.d.ts.map +1 -0
- package/dist/{tickled-styles-Bg3QbcrD.js → tickled-styles-fNDdqf6l.js} +1 -17
- package/dist/{tickled-styles-Bg3QbcrD.js.map → tickled-styles-fNDdqf6l.js.map} +1 -1
- package/dist/{timeline-Bh0PhlKW.js → timeline-2OFtN4Ta.js} +2 -2
- package/dist/{timeline-Bh0PhlKW.js.map → timeline-2OFtN4Ta.js.map} +1 -1
- package/dist/timeline.d.ts +1 -1
- package/dist/timeline.js +1 -1
- package/dist/{tooltip-DMxmBNky.js → tooltip-CJt3WLmN.js} +1 -1
- package/dist/{tooltip-DMxmBNky.js.map → tooltip-CJt3WLmN.js.map} +1 -1
- package/dist/{tooltip-CwGfb4lp.d.ts → tooltip-RGVIwHrZ.d.ts} +1 -1
- package/dist/{tooltip-CwGfb4lp.d.ts.map → tooltip-RGVIwHrZ.d.ts.map} +1 -1
- package/dist/{tree-CvvKbO-f.js → tree-CJWpMUvD.js} +113 -103
- package/dist/tree-CJWpMUvD.js.map +1 -0
- package/dist/{tree-component-D8Bg48tt.d.ts → tree-component-BcO26Xvt.d.ts} +65 -3
- package/dist/tree-component-BcO26Xvt.d.ts.map +1 -0
- package/dist/tree.d.ts +15 -15
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{types-BKaqnpwx.d.ts → types-DSfbtHs3.d.ts} +1 -1
- package/dist/types-DSfbtHs3.d.ts.map +1 -0
- package/dist/{xy-axis-DL0tfJDr.js → xy-axis-CK64haaK.js} +1831 -359
- package/dist/xy-axis-CK64haaK.js.map +1 -0
- package/dist/{xy-axis-D9uwpGTT.d.ts → xy-axis-McdUpcYr.d.ts} +102 -3
- package/dist/xy-axis-McdUpcYr.d.ts.map +1 -0
- package/dist/xy-pad.d.ts +1 -1
- package/dist/xy-pad.d.ts.map +1 -1
- package/dist/xy-pad.js +11 -6
- package/dist/xy-pad.js.map +1 -1
- package/docs-user/README.md +45 -0
- package/docs-user/ac-text.md +67 -0
- package/docs-user/ac-token.md +187 -0
- package/docs-user/button.md +355 -0
- package/docs-user/checkbox.md +62 -0
- package/docs-user/colour-picker.md +237 -0
- package/docs-user/crumbs.md +66 -0
- package/docs-user/data-display.md +98 -0
- package/docs-user/editable-label.md +244 -0
- package/docs-user/grouped-item-lister.md +424 -0
- package/docs-user/icons.md +191 -0
- package/docs-user/incr-search.md +94 -0
- package/docs-user/labelled-radial-input.md +204 -0
- package/docs-user/labelled-range-input.md +194 -0
- package/docs-user/led.md +40 -0
- package/docs-user/menu.md +319 -0
- package/docs-user/miller.md +453 -0
- package/docs-user/narrowed-text.md +72 -0
- package/docs-user/panel.md +250 -0
- package/docs-user/plots.md +361 -0
- package/docs-user/polar-pad.md +228 -0
- package/docs-user/radial-input.md +559 -0
- package/docs-user/range-input.md +264 -0
- package/docs-user/range.md +12 -0
- package/docs-user/selecthorizontal.md +32 -0
- package/docs-user/snap-container.md +132 -0
- package/docs-user/split-layout.md +232 -0
- package/docs-user/swipe.md +44 -0
- package/docs-user/tabs.md +217 -0
- package/docs-user/timeline.md +116 -0
- package/docs-user/transitory-label.md +120 -0
- package/docs-user/tree.md +592 -0
- package/docs-user/user-catalog.md +165 -0
- package/docs-user/user-theming.md +379 -0
- package/docs-user/util.md +122 -0
- package/docs-user/vertical-list.md +351 -0
- package/docs-user/xy-pad.md +94 -0
- package/package.json +19 -18
- package/dist/colour-C3MQIjFJ-BLXg8W3U.js.map +0 -1
- package/dist/colour-picker-K6zu82lm.js.map +0 -1
- package/dist/dist-BX0OVIm7.js +0 -1290
- package/dist/dist-BX0OVIm7.js.map +0 -1
- package/dist/dist-TAGYwaju.js.map +0 -1
- package/dist/hex-editor-DlfoA65y.d.ts.map +0 -1
- package/dist/icon-9NWTXtE1.js.map +0 -1
- package/dist/icon-Dm_DHDz6.d.ts.map +0 -1
- package/dist/index-CnL9krsH.d.ts.map +0 -1
- package/dist/index-DLkSKL4T.d.ts.map +0 -1
- package/dist/index-DSlPeWLK.d.ts.map +0 -1
- package/dist/index-iZLld8Ca.d.ts.map +0 -1
- package/dist/interaction-DG7X1rhI.js +0 -1
- package/dist/labelled-input-base-BVvNeb5R.d.ts.map +0 -1
- package/dist/menu-DJJuCm-5.js.map +0 -1
- package/dist/menu-item-CKRfP0pN.js.map +0 -1
- package/dist/menu-item-ClQF2DKN.d.ts.map +0 -1
- package/dist/prominence--ic9uWBl.js +0 -98
- package/dist/prominence--ic9uWBl.js.map +0 -1
- package/dist/radial-input-DZA6WaFu.js.map +0 -1
- package/dist/radial-input-LUSBEycd.d.ts.map +0 -1
- package/dist/tab-list-BnqISNvO.d.ts.map +0 -1
- package/dist/tickled-controller-Cq1Va0rR.d.ts.map +0 -1
- package/dist/tree-CvvKbO-f.js.map +0 -1
- package/dist/tree-component-D8Bg48tt.d.ts.map +0 -1
- package/dist/types-BKaqnpwx.d.ts.map +0 -1
- package/dist/xy-axis-D9uwpGTT.d.ts.map +0 -1
- package/dist/xy-axis-DL0tfJDr.js.map +0 -1
- /package/bundle/{chunk-pbuEa-1d.js → chunk-D7D4PA-g.js} +0 -0
- /package/dist/{chunk-pbuEa-1d.js → chunk-D7D4PA-g.js} +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# `ixfx-crumb-navigation`
|
|
2
|
+
|
|
3
|
+
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.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<ixfx-crumb-navigation></ixfx-crumb-navigation>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
const nav = document.querySelector('ixfx-crumb-navigation');
|
|
11
|
+
nav.model = {
|
|
12
|
+
root: {
|
|
13
|
+
item: { key: 'root', label: 'Home' },
|
|
14
|
+
children: [
|
|
15
|
+
{ item: { key: 'docs', label: 'Documentation' }, children: [...] },
|
|
16
|
+
{ item: { key: 'api', label: 'API' } }
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
selectedNode: { item: { key: 'docs', label: 'Documentation' } }
|
|
20
|
+
};
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Properties / attributes
|
|
24
|
+
|
|
25
|
+
| Attribute / Property | Type | Default | Description |
|
|
26
|
+
|-----------------------|---------------------------------|-------------|--------------------------------------------------|
|
|
27
|
+
| `root` | `TreeNode \| undefined` | `undefined` | Root node of the tree |
|
|
28
|
+
| `model` | `TreeDataModel \| undefined` | `undefined` | Optional reactive tree data model |
|
|
29
|
+
| `selectedNode` | `TreeNode \| undefined` | `undefined` | Currently selected node |
|
|
30
|
+
| `loadChildren` | `LoadChildrenCallback \| undefined` | `undefined` | Callback for lazy-loading children |
|
|
31
|
+
| `filterPredicate` | `TreeFilterPredicate \| undefined` | `undefined` | Filter function for nodes |
|
|
32
|
+
| `exclusivity` | `TreeExclusivity` | `'none'` | Selection exclusivity mode |
|
|
33
|
+
| `selectionFilter` | `TreeSelectionFilter` | `'leaf'` | Which nodes can be selected |
|
|
34
|
+
|
|
35
|
+
### Events
|
|
36
|
+
|
|
37
|
+
| Event | Detail | Description |
|
|
38
|
+
|---------------|-----------------------------------------------------|--------------------------------------|
|
|
39
|
+
| `select` | `{ selected: Set<TreeNode>, previous: Set<TreeNode> \| undefined }` | Fired when selection changes |
|
|
40
|
+
| `item-click` | `{ node: TreeNode, depth: number }` | Fired when a breadcrumb label is clicked |
|
|
41
|
+
| `expand` | `{ node: TreeNode, depth: number }` | Fired when a caret is clicked for a node with unloaded children |
|
|
42
|
+
| `tickle` | `{ node: TreeNode, depth: number }` | Fired when mouse enters a crumb |
|
|
43
|
+
| `activate` | `TreeActivateEvent` | Fired when a node is activated |
|
|
44
|
+
|
|
45
|
+
### Methods
|
|
46
|
+
|
|
47
|
+
| Method | Returns | Description |
|
|
48
|
+
|-------------------------|---------|------------------------------------------------|
|
|
49
|
+
| `navigateTo(keys)` | `boolean` | Navigate to a node by key path. Returns false if not found. |
|
|
50
|
+
| `navigateToNode(predicate)` | `boolean` | Navigate to the first node matching a predicate. |
|
|
51
|
+
|
|
52
|
+
### CSS custom properties
|
|
53
|
+
|
|
54
|
+
| Property | Default | Description |
|
|
55
|
+
|------------------|-------------------------|------------------------------|
|
|
56
|
+
| `--text-highlight` | `var(--accent)` | Highlight color on hover |
|
|
57
|
+
| `--separator` | `var(--surface-muted-text)` | Separator character color |
|
|
58
|
+
| `--padding-s` | `var(--space-xs)` | Padding between items |
|
|
59
|
+
|
|
60
|
+
### CSS parts
|
|
61
|
+
|
|
62
|
+
| Part | Description |
|
|
63
|
+
|-----------|--------------------------|
|
|
64
|
+
| `crumb-segment` | Individual crumb segment |
|
|
65
|
+
| `caret` | The dropdown caret button |
|
|
66
|
+
| `label` | Clickable label text |
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# `ixfx-data-display`
|
|
2
|
+
|
|
3
|
+
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 `configure()`, automatic mode assignment via `automap`, and recursive nested objects.
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<ixfx-data-display></ixfx-data-display>
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
const display = document.querySelector('ixfx-data-display');
|
|
11
|
+
display.updateData({
|
|
12
|
+
temperature: 23.45,
|
|
13
|
+
humidity: 0.62,
|
|
14
|
+
status: 'active',
|
|
15
|
+
});
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Usage modes
|
|
19
|
+
|
|
20
|
+
**Text-only** (default, no config): renders all values as text. Nested objects create child `<ixfx-data-display>` elements.
|
|
21
|
+
|
|
22
|
+
**`automap` attribute**: boolean values → LED, numbers → plot, objects → recursive child display, everything else → text.
|
|
23
|
+
|
|
24
|
+
**`configure(config)`**: explicit render style per dot-path. Replaces any previous config and re-renders.
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
display.configure([
|
|
28
|
+
['flag', 'led'],
|
|
29
|
+
['position', 'plot-xy'],
|
|
30
|
+
['timestamp', 'time-elapsed'],
|
|
31
|
+
['sensor.gyro', 'plot'],
|
|
32
|
+
['sensor.accel', 'hide'],
|
|
33
|
+
]);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Methods
|
|
37
|
+
|
|
38
|
+
| Method | Arguments | Description |
|
|
39
|
+
|--------|-----------|-------------|
|
|
40
|
+
| `updateData(value)` | `Record<string, unknown> \| unknown[]` | Store full data and update all renderers; plot values accumulate only on change |
|
|
41
|
+
| `displayData(o)` | `Record<string, unknown> \| unknown[]` | Update data without change tracking |
|
|
42
|
+
| `formatValue(v, options?)` | `unknown, FormattingOptions?` | Format a single value to string |
|
|
43
|
+
| `configure(config)` | `[path: string, style: RendererStyle, options?: Record<string, unknown>][]` | Set render styles per path |
|
|
44
|
+
|
|
45
|
+
### Properties / attributes
|
|
46
|
+
|
|
47
|
+
| Attribute / Property | Type | Default | Description |
|
|
48
|
+
|----------------------|------|---------|-------------|
|
|
49
|
+
| `automap` | `boolean` | `false` | Auto-assign render styles: boolean→led, number→plot |
|
|
50
|
+
| `configure()` | method | — | Explicit render style config |
|
|
51
|
+
|
|
52
|
+
### Render styles
|
|
53
|
+
|
|
54
|
+
| Style | Tag | Value types | Behaviour |
|
|
55
|
+
|-------|-----|-------------|-----------|
|
|
56
|
+
| `led` | `ixfx-led` | `boolean`, `number` | Toggle or proportional brightness (number mapped 0..1) |
|
|
57
|
+
| `plot` | `ixfx-plot-single-axis` / `ixfx-plot-multi-axis` | `number`, `number[]`, `Record<string, number>` | Accumulated time-series |
|
|
58
|
+
| `plot-xy` | `ixfx-plot-xy-axis` | `[x, y]`, `{ x, y }`, object with 2 numeric properties | XY scatter |
|
|
59
|
+
| `plot-heat` | `ixfx-plot-histogram` | `number` | Heatmap (full-height bars, density via opacity) |
|
|
60
|
+
| `plot-histogram` | `ixfx-plot-histogram` | `number` | Histogram (variable bar lengths) |
|
|
61
|
+
| `time-elapsed` | `span` | `Date`, `number` (ms/ISO) | Relative time from value to now |
|
|
62
|
+
| `hide` | — | any | Row not rendered |
|
|
63
|
+
|
|
64
|
+
### Options (third element of configure tuple)
|
|
65
|
+
|
|
66
|
+
| Option | Type | Applies to | Description |
|
|
67
|
+
|--------|------|------------|-------------|
|
|
68
|
+
| `capacity` | `number` | all plots | Max data points (default: varies by plot) |
|
|
69
|
+
| `resolution` | `number` | `plot-heat`, `plot-histogram` | Bucket size (default: `0.1`) |
|
|
70
|
+
| `drawStyle` | `string` | `plot` (single-axis), `plot-xy` | Render style (`line-sharp`, `line-round`, `dots`, `circles`, etc.) |
|
|
71
|
+
| `orientation` | `string` | `plot-heat`, `plot-histogram` | `horizontal` or `vertical` |
|
|
72
|
+
| `layout` | `string` | `plot` (multi-axis) | `overlap`, `horizontal`, `vertical`, `grid` |
|
|
73
|
+
|
|
74
|
+
### Formatting options
|
|
75
|
+
|
|
76
|
+
Passed to `formatValue()`:
|
|
77
|
+
|
|
78
|
+
| Option | Type | Description |
|
|
79
|
+
|--------|------|-------------|
|
|
80
|
+
| `precision` | `number` | Fixed decimal places |
|
|
81
|
+
| `roundNumbers` | `number` | Round to N significant figures |
|
|
82
|
+
|
|
83
|
+
### CSS custom properties
|
|
84
|
+
|
|
85
|
+
Renders rows in a CSS grid (`auto auto` columns). Uses standard surface variables:
|
|
86
|
+
|
|
87
|
+
- `--surface-3` — component background
|
|
88
|
+
- `--surface-2-text` — label text colour
|
|
89
|
+
- `--border` — row separator
|
|
90
|
+
- `--space-m`, `--space-s` — spacing
|
|
91
|
+
- `--font-mono` — monospace font for values
|
|
92
|
+
- `--size` — LED size (via ixfx-led default of `1ex`)
|
|
93
|
+
|
|
94
|
+
### TypeScript types
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import type { RendererStyle, FormattingOptions } from 'ixfxfun-components';
|
|
98
|
+
```
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# `ixfx-editable-label` & `ixfx-editable-number`
|
|
2
|
+
|
|
3
|
+
Inline editable text components. `ixfx-editable-number` extends `ixfx-editable-label` with drag-to-adjust and fill-bar visualization.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## `ixfx-editable-label`
|
|
8
|
+
|
|
9
|
+
An inline text label that can be edited in place.
|
|
10
|
+
|
|
11
|
+
### Modes
|
|
12
|
+
|
|
13
|
+
| `mode` attribute | Behaviour |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `label` (default) | Renders as plain text; click to enter edit mode |
|
|
16
|
+
| `editor` | Always renders as a box; click or focus activates editing |
|
|
17
|
+
|
|
18
|
+
### Attributes
|
|
19
|
+
|
|
20
|
+
| Attribute | Type | Default | Description |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| `mode` | `label \| editor` | `label` | Display mode |
|
|
23
|
+
| `entry-mode` | `free \| text \| number \| percent` | `free` | Character filter during input |
|
|
24
|
+
| `value` | string | `""` | Current value |
|
|
25
|
+
| `disabled` | boolean | — | Disables interaction |
|
|
26
|
+
| `placeholder` | string | `""` | Shown when value is empty |
|
|
27
|
+
|
|
28
|
+
**Entry modes:**
|
|
29
|
+
- `free` — no restrictions
|
|
30
|
+
- `text` — letters and spaces only
|
|
31
|
+
- `number` — digits, `.`, `-`
|
|
32
|
+
- `percent` — digits, `.`, `%` (strips `%` on commit; appends `%` on display)
|
|
33
|
+
|
|
34
|
+
### JavaScript Properties
|
|
35
|
+
|
|
36
|
+
These are set on the element object, not as HTML attributes.
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
const el = document.querySelector('ixfx-editable-label');
|
|
40
|
+
|
|
41
|
+
// Custom commit validator — return false to reject and revert
|
|
42
|
+
el.validator = (value) => value.trim().length >= 3;
|
|
43
|
+
|
|
44
|
+
// Transform committed value for display only (stored value unchanged)
|
|
45
|
+
el.formatter = (value) => value.toUpperCase();
|
|
46
|
+
|
|
47
|
+
// Override displayed text entirely (editing shows raw value)
|
|
48
|
+
el.displayText = '★ Hidden ★';
|
|
49
|
+
el.displayText = undefined; // clear override
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Events
|
|
53
|
+
|
|
54
|
+
| Event | Detail | When |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| `change` | `{ value: string }` | On commit (Enter or blur); not fired if value unchanged |
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
el.addEventListener('change', (e) => {
|
|
60
|
+
console.log(e.detail.value);
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The event bubbles and is composed (crosses shadow DOM boundaries).
|
|
65
|
+
|
|
66
|
+
### CSS Variables
|
|
67
|
+
|
|
68
|
+
| Variable | Default | Description |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `--label-font-size` | `var(--text-m, 12px)` | Font size |
|
|
71
|
+
| `--label-font-family` | `var(--font-family, system-ui)` | Font family |
|
|
72
|
+
| `--label-color` | `var(--surface-text)` | Text colour |
|
|
73
|
+
| `--label-muted-color` | `var(--surface-muted-text)` | Placeholder colour |
|
|
74
|
+
| `--label-padding` | `var(--space-xs, 3px) var(--space-s, 4px)` | Inner padding |
|
|
75
|
+
| `--label-radius` | `var(--radius-s, 3px)` | Border radius |
|
|
76
|
+
| `--label-align` | `center` | Text alignment: `left`, `center`, or `right` |
|
|
77
|
+
|
|
78
|
+
### Keyboard
|
|
79
|
+
|
|
80
|
+
| Key | Action |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `Enter` | Commit value |
|
|
83
|
+
| `Escape` | Cancel and revert |
|
|
84
|
+
|
|
85
|
+
### Usage Examples
|
|
86
|
+
|
|
87
|
+
**Basic label (click to edit):**
|
|
88
|
+
```html
|
|
89
|
+
<ixfx-editable-label value="Hello"></ixfx-editable-label>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Always-visible editor box:**
|
|
93
|
+
```html
|
|
94
|
+
<ixfx-editable-label mode="editor" value="Edit me"></ixfx-editable-label>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Numbers only with placeholder:**
|
|
98
|
+
```html
|
|
99
|
+
<ixfx-editable-label
|
|
100
|
+
mode="editor"
|
|
101
|
+
entry-mode="number"
|
|
102
|
+
placeholder="0"
|
|
103
|
+
value="42"
|
|
104
|
+
></ixfx-editable-label>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Custom validator and formatter:**
|
|
108
|
+
```html
|
|
109
|
+
<ixfx-editable-label id="name" value="Ada"></ixfx-editable-label>
|
|
110
|
+
<script>
|
|
111
|
+
const el = document.querySelector('#name');
|
|
112
|
+
el.validator = (v) => v.trim().length > 0;
|
|
113
|
+
el.formatter = (v) => v.trim();
|
|
114
|
+
</script>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Currency display:**
|
|
118
|
+
```html
|
|
119
|
+
<ixfx-editable-label id="price" entry-mode="number" value="9.99"></ixfx-editable-label>
|
|
120
|
+
<script>
|
|
121
|
+
document.querySelector('#price').formatter =
|
|
122
|
+
(v) => isNaN(parseFloat(v)) ? v : `$${parseFloat(v).toFixed(2)}`;
|
|
123
|
+
</script>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## `ixfx-editable-number`
|
|
129
|
+
|
|
130
|
+
Extends `ixfx-editable-label` with Ableton-style drag interaction and an optional fill-bar visualization. See above for all shared attributes, events, CSS variables, and JavaScript properties — only the differences are documented here.
|
|
131
|
+
|
|
132
|
+
### Interaction Model
|
|
133
|
+
|
|
134
|
+
| Action | Effect |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Click | Focuses the control |
|
|
137
|
+
| Drag up | Increases value |
|
|
138
|
+
| Drag down | Decreases value |
|
|
139
|
+
| Printable key while focused | Enters text-edit mode |
|
|
140
|
+
| Enter / blur | Commits typed value |
|
|
141
|
+
| Escape | Cancels typed edit and restores previous value |
|
|
142
|
+
|
|
143
|
+
### Additional Attributes
|
|
144
|
+
|
|
145
|
+
| Attribute | Type | Default | Description |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| `min` | number | — | Minimum value (no clamping if unset) |
|
|
148
|
+
| `max` | number | — | Maximum value (no clamping if unset) |
|
|
149
|
+
| `step` | number | — | Snap increment; also informs decimal-place display |
|
|
150
|
+
| `drag-sensitivity` | number | `1` | Steps changed per pixel of drag |
|
|
151
|
+
| `precision` | number | `0` | Decimal places used when rounding drag-produced values |
|
|
152
|
+
| `fill-style` | `linear` \| `circular` | — | Fill-bar style; omit to disable fill bar |
|
|
153
|
+
| `linear-style` | `range` \| `bipolar` \| `unipolar` | `range` | How value maps to fill (linear mode only) |
|
|
154
|
+
| `circular-style` | `grow` \| `offset` \| `dot` | `grow` | How value maps to fill (circular mode only) |
|
|
155
|
+
| `no-drag` | boolean | — | Disables drag interaction; text editing still works |
|
|
156
|
+
|
|
157
|
+
**`drag-sensitivity`** scales relative to `step`. With `step=0.01` and `drag-sensitivity=1`, each pixel of drag moves the value by 0.01 — sweeping `min=0` to `max=1` takes 100 px. Increase for faster/coarser control, decrease for finer.
|
|
158
|
+
|
|
159
|
+
**`precision`** only affects drag-produced values. Typed values are never precision-rounded — the user can always enter more decimal places than `precision` allows.
|
|
160
|
+
|
|
161
|
+
### CSS Variables (fill bar)
|
|
162
|
+
|
|
163
|
+
| Variable | Default | Description |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| `--fill-color` | `var(--accent)` | Fill bar colour |
|
|
166
|
+
| `--fill-opacity` | `0.25` | Fill bar opacity (0–1) |
|
|
167
|
+
| `--fill-image` | — | Override the entire `background-image`; use `var(--value)` for position |
|
|
168
|
+
|
|
169
|
+
The `--value` custom property (0–1) is set dynamically on the host element and is available in CSS expressions.
|
|
170
|
+
|
|
171
|
+
### Usage Examples
|
|
172
|
+
|
|
173
|
+
**Integer 0–100 with fill bar:**
|
|
174
|
+
```html
|
|
175
|
+
<ixfx-editable-number
|
|
176
|
+
min="0" max="100" step="1"
|
|
177
|
+
value="50"
|
|
178
|
+
fill-style="linear"
|
|
179
|
+
></ixfx-editable-number>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Fine-grained float (step=0.01, full range ~100px of drag):**
|
|
183
|
+
```html
|
|
184
|
+
<ixfx-editable-number
|
|
185
|
+
min="0" max="1" step="0.01"
|
|
186
|
+
value="0.5"
|
|
187
|
+
fill-style="linear"
|
|
188
|
+
></ixfx-editable-number>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**No step — drag rounds to 1 decimal place, typed values unrestricted:**
|
|
192
|
+
```html
|
|
193
|
+
<ixfx-editable-number
|
|
194
|
+
min="0" max="10"
|
|
195
|
+
precision="1"
|
|
196
|
+
value="3.5"
|
|
197
|
+
></ixfx-editable-number>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Custom accent colour:**
|
|
201
|
+
```html
|
|
202
|
+
<ixfx-editable-number
|
|
203
|
+
min="0" max="100" value="60"
|
|
204
|
+
fill-style="linear"
|
|
205
|
+
style="--fill-color: oklch(60% 0.2 30); --fill-opacity: 0.35;"
|
|
206
|
+
></ixfx-editable-number>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Green–yellow–red gradient that reveals with value:**
|
|
210
|
+
```html
|
|
211
|
+
<ixfx-editable-number
|
|
212
|
+
min="0" max="100" value="50"
|
|
213
|
+
fill-style="linear"
|
|
214
|
+
style="
|
|
215
|
+
--fill-image: linear-gradient(
|
|
216
|
+
to right,
|
|
217
|
+
oklch(55% 0.18 140),
|
|
218
|
+
oklch(78% 0.2 100),
|
|
219
|
+
oklch(60% 0.22 25) calc(var(--value) * 100%),
|
|
220
|
+
var(--surface-ll, oklch(22% 0.02 240)) calc(var(--value) * 100%)
|
|
221
|
+
);
|
|
222
|
+
"
|
|
223
|
+
></ixfx-editable-number>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Saturation tied to value:**
|
|
227
|
+
```html
|
|
228
|
+
<ixfx-editable-number
|
|
229
|
+
min="0" max="100" value="50"
|
|
230
|
+
fill-style="linear"
|
|
231
|
+
style="
|
|
232
|
+
--fill-color: oklch(65% calc(var(--value) * 0.3) 250);
|
|
233
|
+
--fill-opacity: 1;
|
|
234
|
+
"
|
|
235
|
+
></ixfx-editable-number>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Formatter (display as percentage):**
|
|
239
|
+
```html
|
|
240
|
+
<ixfx-editable-number id="vol" min="0" max="1" step="0.01" value="0.75"></ixfx-editable-number>
|
|
241
|
+
<script>
|
|
242
|
+
document.querySelector('#vol').formatter = (v) => `${Math.round(parseFloat(v) * 100)}%`;
|
|
243
|
+
</script>
|
|
244
|
+
```
|