@ixfx/components 0.10.1 → 0.10.2
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 +173 -20
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +1847 -123
- package/bundle/index.js.map +1 -1
- package/dist/ac-text.d.ts +1 -1
- package/dist/ac-text.js +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/ac-token.js +2 -2
- package/dist/button.d.ts +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/{colour-picker-R73i0QTP.js → colour-picker-WDrPuqoO.js} +2 -2
- package/dist/{colour-picker-R73i0QTP.js.map → colour-picker-WDrPuqoO.js.map} +1 -1
- 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.js +2 -2
- package/dist/{data-grid-BT1d_nlu.d.ts → data-grid-pv6eaJCZ.d.ts} +4 -3
- package/dist/data-grid-pv6eaJCZ.d.ts.map +1 -0
- package/dist/data-grid.d.ts +1 -1
- package/dist/data-grid.js +27 -9
- package/dist/data-grid.js.map +1 -1
- package/dist/defaults-kVl1t2tT.js +59 -0
- package/dist/defaults-kVl1t2tT.js.map +1 -0
- package/dist/{detail-list-BCaIN7nx.d.ts → detail-list-BA3RVVCB.d.ts} +4 -4
- package/dist/{detail-list-BCaIN7nx.d.ts.map → detail-list-BA3RVVCB.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +2 -2
- package/dist/detail-list.js +3 -3
- package/dist/{grid-list-DLfw5HI4.js → grid-list-CIc4jo-x.js} +25 -3
- package/dist/grid-list-CIc4jo-x.js.map +1 -0
- package/dist/{grid-list-CiwlNE4c.d.ts → grid-list-DWXJoRnK.d.ts} +2 -2
- package/dist/{grid-list-CiwlNE4c.d.ts.map → grid-list-DWXJoRnK.d.ts.map} +1 -1
- package/dist/grid-list.d.ts +1 -1
- package/dist/grid-list.js +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/handle-DAXs7kbJ.js +656 -0
- package/dist/handle-DAXs7kbJ.js.map +1 -0
- package/dist/{icon-BCJJYEpm.js → icon-1gpwtPx8.js} +10 -1
- package/dist/icon-1gpwtPx8.js.map +1 -0
- 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/icons.js +2 -2
- package/dist/{incr-search-C05WjbZh.js → incr-search-D91M4Ozq.js} +5 -4
- package/dist/incr-search-D91M4Ozq.js.map +1 -0
- package/dist/incr-search.d.ts +1 -1
- package/dist/incr-search.js +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-CYndvTWH.d.ts +38 -0
- package/dist/index-CYndvTWH.d.ts.map +1 -0
- 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-DPFrRhKL.d.ts → index-CsaQwNkz.d.ts} +2 -1
- package/dist/index-CsaQwNkz.d.ts.map +1 -0
- 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 +169 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1053 -18
- 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-C8a-84S5.js → menu-B2Qv3Oiz.js} +6 -5
- package/dist/menu-B2Qv3Oiz.js.map +1 -0
- 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-item-DzizkMH-.js → menu-item-Woc8jJc1.js} +4 -4
- package/dist/menu-item-Woc8jJc1.js.map +1 -0
- package/dist/menu.d.ts +2 -2
- package/dist/menu.js +2 -2
- package/dist/miller.d.ts +1 -1
- package/dist/miller.js +1 -1
- package/dist/narrowed-text.js +1 -1
- package/dist/panel.d.ts +1 -1
- package/dist/{scroll-fade-CAs1EabA.js → scroll-fade-BrNUIYnm.js} +16 -3
- package/dist/scroll-fade-BrNUIYnm.js.map +1 -0
- package/dist/select-horiz.js +1 -1
- package/dist/{split-layout-3yBOEVZW.js → split-layout-BJEU1W0d.js} +2 -2
- package/dist/{split-layout-3yBOEVZW.js.map → split-layout-BJEU1W0d.js.map} +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/split-layout.js +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/tabs.js +1 -1
- package/dist/{timeline-CFlBFFGZ.js → timeline-BP1Ux2EV.js} +2 -2
- package/dist/{timeline-CFlBFFGZ.js.map → timeline-BP1Ux2EV.js.map} +1 -1
- package/dist/timeline.js +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/titlebar.js +1 -1
- package/dist/{tree-BuzWn18_.js → tree-Bm2TzTfe.js} +233 -14
- package/dist/tree-Bm2TzTfe.js.map +1 -0
- package/dist/tree.d.ts +13 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{vertical-list-BLvJ4-Zf.d.ts → vertical-list-BWLqy3PJ.d.ts} +2 -2
- package/dist/{vertical-list-BLvJ4-Zf.d.ts.map → vertical-list-BWLqy3PJ.d.ts.map} +1 -1
- package/dist/vertical-list.d.ts +1 -1
- package/dist/vertical-list.js +1 -1
- package/docs-user/README.md +1 -0
- package/docs-user/icons.md +24 -10
- package/docs-user/index.json +8 -3
- package/docs-user/llms.txt +2 -1
- package/docs-user/multicol-list.md +128 -0
- package/docs-user/tree.md +12 -0
- package/docs-user/vertical-list.md +65 -9
- package/llms.txt +2 -1
- package/package.json +1 -1
- package/dist/data-grid-BT1d_nlu.d.ts.map +0 -1
- package/dist/defaults-BJwDsMH4.js +0 -86
- package/dist/defaults-BJwDsMH4.js.map +0 -1
- package/dist/grid-list-DLfw5HI4.js.map +0 -1
- package/dist/handle-BPOxBOKf.js +0 -219
- package/dist/handle-BPOxBOKf.js.map +0 -1
- package/dist/icon-BCJJYEpm.js.map +0 -1
- package/dist/icon-DR_3rSyZ.d.ts.map +0 -1
- package/dist/incr-search-C05WjbZh.js.map +0 -1
- package/dist/index-DPFrRhKL.d.ts.map +0 -1
- package/dist/index-DsjpDksO.d.ts +0 -47
- package/dist/index-DsjpDksO.d.ts.map +0 -1
- package/dist/menu-C8a-84S5.js.map +0 -1
- package/dist/menu-item-DzizkMH-.js.map +0 -1
- package/dist/scroll-fade-CAs1EabA.js.map +0 -1
- package/dist/tree-BuzWn18_.js.map +0 -1
package/docs-user/icons.md
CHANGED
|
@@ -4,15 +4,27 @@ A centralized SVG icon system for `@ixfx/components`. Icons are stored by name,
|
|
|
4
4
|
|
|
5
5
|
## Built-in icons
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
All built-ins are [Lucide](https://lucide.dev/icons/) icons (stroke-based, `viewBox 0 0 24 24`, `fill="none"`, colored via `currentColor`), registered in `src/icons/defaults.ts`.
|
|
8
|
+
|
|
9
|
+
| Name | Lucide icon | Used by |
|
|
8
10
|
|---|---|---|
|
|
9
|
-
| `chevron-down` | `<ixfx-split-button>`, `<ixfx-panel>` |
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
11
|
+
| `chevron-down` | [chevron-down](https://lucide.dev/icons/chevron-down) | `<ixfx-split-button>`, `<ixfx-panel>` |
|
|
12
|
+
| `chevron-right` | [chevron-right](https://lucide.dev/icons/chevron-right) | `<ixfx-split-button>` |
|
|
13
|
+
| `chevron-up` | [chevron-up](https://lucide.dev/icons/chevron-up) | `<ixfx-data-grid>` sort indicator |
|
|
14
|
+
| `chevron-left` | [chevron-left](https://lucide.dev/icons/chevron-left) | `<ixfx-incr-search>` prev-match |
|
|
15
|
+
| `caret-right` | [chevron-right](https://lucide.dev/icons/chevron-right) (CSS mask) | tree-basic expand indicator |
|
|
16
|
+
| `check` | [check](https://lucide.dev/icons/check) | `<ixfx-menu-check-item>` |
|
|
17
|
+
| `close` | [x](https://lucide.dev/icons/x) | `<ixfx-panel>`, `<ixfx-split-button>`, `<ixfx-incr-search>` |
|
|
18
|
+
| `add` | [plus](https://lucide.dev/icons/plus) | Available for use |
|
|
19
|
+
| `error` | [circle-alert](https://lucide.dev/icons/circle-alert) | Available for use |
|
|
20
|
+
| `info` | [info](https://lucide.dev/icons/info) | Available for use |
|
|
21
|
+
| `warning` | [triangle-alert](https://lucide.dev/icons/triangle-alert) | Available for use |
|
|
22
|
+
| `file` | [file](https://lucide.dev/icons/file) | Available for use |
|
|
23
|
+
| `folder` | [folder](https://lucide.dev/icons/folder) | Available for use |
|
|
24
|
+
| `folder-up` | [folder-up](https://lucide.dev/icons/folder-up) | Available for use |
|
|
25
|
+
| `search` | [search](https://lucide.dev/icons/search) | Available for use |
|
|
26
|
+
| `menu` | [menu](https://lucide.dev/icons/menu) | `<ixfx-multicol-list>` column options |
|
|
27
|
+
| `ellipsis-vertical` | [ellipsis-vertical](https://lucide.dev/icons/ellipsis-vertical) | `<ixfx-menu-trigger>` default glyph |
|
|
16
28
|
|
|
17
29
|
## Overriding a built-in icon
|
|
18
30
|
|
|
@@ -161,10 +173,12 @@ iconBus: EventTarget
|
|
|
161
173
|
|
|
162
174
|
## SVG format conventions for custom icons
|
|
163
175
|
|
|
176
|
+
Match [Lucide](https://lucide.dev/icons/)'s style so custom icons sit consistently alongside the built-ins:
|
|
177
|
+
|
|
164
178
|
- `viewBox="0 0 24 24"` — consistent with built-ins
|
|
165
179
|
- No `width` or `height` attributes on `<svg>` — let CSS control sizing
|
|
166
|
-
- `fill="currentColor"` for inline icons — inherits CSS `color`
|
|
167
|
-
- `
|
|
180
|
+
- `fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"` for inline icons — inherits CSS `color`
|
|
181
|
+
- `stroke="black"` (same attributes otherwise) for CSS mask icons — color comes from `background-color`
|
|
168
182
|
- `aria-hidden="true"` on the `<svg>` itself — the `<ixfx-icon>` wrapper handles accessibility
|
|
169
183
|
|
|
170
184
|
## Subscribing to icon changes
|
package/docs-user/index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ixfx/components",
|
|
3
|
-
"version": "0.10.
|
|
4
|
-
"generated": "2026-09-
|
|
3
|
+
"version": "0.10.2",
|
|
4
|
+
"generated": "2026-09-14T20:28:42.876Z",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"name": "ac-text",
|
|
@@ -123,6 +123,11 @@
|
|
|
123
123
|
"summary": "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.",
|
|
124
124
|
"path": "docs-user/miller.md"
|
|
125
125
|
},
|
|
126
|
+
{
|
|
127
|
+
"name": "multicol-list",
|
|
128
|
+
"summary": "A faceted-filtering component: each column shows one property (facet) of the *same*",
|
|
129
|
+
"path": "docs-user/multicol-list.md"
|
|
130
|
+
},
|
|
126
131
|
{
|
|
127
132
|
"name": "narrowed-text",
|
|
128
133
|
"summary": "A filtered text selection component with inline search. Shows slotted items filtered by a query string as the user types.",
|
|
@@ -250,7 +255,7 @@
|
|
|
250
255
|
},
|
|
251
256
|
{
|
|
252
257
|
"name": "vertical-list",
|
|
253
|
-
"summary": "A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically.",
|
|
258
|
+
"summary": "A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically. Lar",
|
|
254
259
|
"path": "docs-user/vertical-list.md"
|
|
255
260
|
},
|
|
256
261
|
{
|
package/docs-user/llms.txt
CHANGED
|
@@ -35,6 +35,7 @@ import '@ixfx/components/data-grid';
|
|
|
35
35
|
- [led](docs-user/led.md): An LED indicator component with color mixing and brightness, blink, and pulse modes.
|
|
36
36
|
- [menu](docs-user/menu.md): A custom menu system built on native HTML popovers with keyboard navigation, tickled focus management, and command routing.
|
|
37
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.
|
|
38
|
+
- [multicol-list](docs-user/multicol-list.md): A faceted-filtering component: each column shows one property (facet) of the *same*
|
|
38
39
|
- [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.
|
|
39
40
|
- [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
41
|
- [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.
|
|
@@ -60,7 +61,7 @@ import '@ixfx/components/data-grid';
|
|
|
60
61
|
- [tree](docs-user/tree.md): Three components share a common `TreeComponent` interface: **`ixfx-tree-list`**, **`ixfx-miller-list`**, and **`ixfx-crumb-navigation`**. This document describes the shared API, plus component-specifi
|
|
61
62
|
- [twosplit-layout](docs-user/twosplit-layout.md): A Lit web component that lays out two elements within a container with a split bar to adjust their proportions.
|
|
62
63
|
- [util](docs-user/util.md): A tooltip component that renders a value with optional icon and formatted number display. Uses native render root (no shadow DOM).
|
|
63
|
-
- [vertical-list](docs-user/vertical-list.md): A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically.
|
|
64
|
+
- [vertical-list](docs-user/vertical-list.md): A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically. Lar
|
|
64
65
|
- [xy-pad](docs-user/xy-pad.md): A 2D touch-friendly XY pad for controlling two parameters simultaneously. Each axis supports independent linear/logarithmic scaling.
|
|
65
66
|
|
|
66
67
|
## Overviews
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Multicol List
|
|
2
|
+
|
|
3
|
+
A faceted-filtering component: each column shows one property (facet) of the *same*
|
|
4
|
+
dataset, and selections narrow every other column (Lightroom-style cross-filtering).
|
|
5
|
+
Despite the miller-style appearance it is not a hierarchy — see `plans/multicol-list-impl.md`
|
|
6
|
+
for the design rationale.
|
|
7
|
+
|
|
8
|
+
The component does **not** own the data. For each column it hands a query (the column's
|
|
9
|
+
facet plus every *other* column's current choices) to a data provider you supply. The
|
|
10
|
+
provider returns that column's choices; items may carry a `count` for display.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## ixfx-multicol-list
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
| Property | Type | Default | Description |
|
|
19
|
+
|----------|------|---------|-------------|
|
|
20
|
+
| `categories` | `readonly MulticolCategory[]` | `[]` | Facet definitions (tree, shown in the header picker menu). Each may carry `defaults`: `grouped`, `groupBy`, `allLabel`, `sort`. |
|
|
21
|
+
| `dataProvider` | `IDataProvider<MulticolQuery, MulticolItem>` \| `undefined` | — | Called per column whenever that column's inputs change. Sync arrays, Promises and async-iterables are supported; the `AbortSignal` is honoured. |
|
|
22
|
+
| `selectionMode` | `ListSelectionMode` | `'multiple'` | `'none'`, `'single'` or `'multiple'` selection within a column. |
|
|
23
|
+
| `minColumns` | `number` | `1` | Floor for column removal. |
|
|
24
|
+
| `maxColumns` | `number` | `5` | Ceiling for column addition; `0` = unlimited. |
|
|
25
|
+
| `columns` | `readonly MulticolColumnState[]` (getter) | — | Current per-column config: `id`, `categoryKey`, `sort`, `grouped`, `width`. Persist this to restore a layout. |
|
|
26
|
+
|
|
27
|
+
### Methods
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// Restore a saved layout. Matching ids re-use live columns; unknown categories are skipped.
|
|
31
|
+
// A first assignment suppresses the default auto-seeded column.
|
|
32
|
+
setColumns(states: readonly MulticolColumnState[]): void
|
|
33
|
+
|
|
34
|
+
// Add a column for a category key, optionally at a position.
|
|
35
|
+
addColumn(categoryKey: string, position?: number): void
|
|
36
|
+
|
|
37
|
+
// Remove a column by id (respects minColumns).
|
|
38
|
+
removeColumn(columnId: string): void
|
|
39
|
+
|
|
40
|
+
// One MulticolColumnSelection per column, in display order.
|
|
41
|
+
// `values: []` means the column is at 'All' (contributes no filter).
|
|
42
|
+
getSelection(): readonly MulticolColumnSelection[]
|
|
43
|
+
|
|
44
|
+
// Every column back to 'All'. Fires multicol-select for each column that changed.
|
|
45
|
+
clearSelection(): void
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Without `setColumns`, the element auto-seeds one column (the first category) once
|
|
49
|
+
`categories` is assigned.
|
|
50
|
+
|
|
51
|
+
### Events
|
|
52
|
+
|
|
53
|
+
| Event | Detail | Description |
|
|
54
|
+
|-------|--------|-------------|
|
|
55
|
+
| `multicol-select` | `{ columnId, columns }` | A column's selection changed. `columns` is a full snapshot (see `getSelection`). |
|
|
56
|
+
| `multicol-columns-change` | `{ columns, reason }` | Column layout changed. `reason` is one of `'add' \| 'remove' \| 'reorder' \| 'category' \| 'sort' \| 'grouping' \| 'resize'`. Resize fires **once on pointer-up** with the final width — never during the drag. |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Data flow
|
|
61
|
+
|
|
62
|
+
1. A selection change in column *i* re-queries **every other** column; column *i*'s list
|
|
63
|
+
is left untouched so the user keeps their place.
|
|
64
|
+
2. Adding, removing or changing a column's category re-queries all columns (a category
|
|
65
|
+
swap resets that column to 'All' and applies the new category's `defaults`).
|
|
66
|
+
3. Sort, grouping toggle and reorder are client-side only — no re-query.
|
|
67
|
+
4. Each column keeps one in-flight request; a newer request aborts the older one and
|
|
68
|
+
late results are dropped.
|
|
69
|
+
5. Selections that disappear from a column's data are pruned; an empty selection falls
|
|
70
|
+
back to 'All' (a column is never left with nothing).
|
|
71
|
+
|
|
72
|
+
Every column injects an 'All' row (label from the category's `allLabel`, default `'All'`)
|
|
73
|
+
at the top, selected by default. Choosing values clears All; choosing All clears values.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Header interactions
|
|
78
|
+
|
|
79
|
+
- **Category label** — opens a menu of all categories; the current one is disabled.
|
|
80
|
+
- **Burger** (visible on column hover) — remove column, add column (left/right),
|
|
81
|
+
sort ascending/descending, grouping toggle.
|
|
82
|
+
- **Header drag** — reorder columns; a caret marks the drop gap.
|
|
83
|
+
- **Right edge** — drag to resize (80–480 px, default 220).
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## CSS variables
|
|
88
|
+
|
|
89
|
+
| Variable | Default | Description |
|
|
90
|
+
|----------|---------|-------------|
|
|
91
|
+
| `--multicol-list-bg` | `var(--surface-3)` | Column background |
|
|
92
|
+
| `--multicol-list-header-bg` | `var(--surface-2)` | Header background |
|
|
93
|
+
| `--multicol-list-header-text` | `var(--surface-3-text)` | Header text colour |
|
|
94
|
+
| `--multicol-list-border` | `var(--border)` | Column separator |
|
|
95
|
+
| `--multicol-list-min-column-width` | `80px` | Resize floor |
|
|
96
|
+
| `--multicol-list-max-column-width` | `480px` | Resize ceiling |
|
|
97
|
+
|
|
98
|
+
Inherited from the theme: `--font-family`, `--text-s`/`--text-m`, `--space-*`,
|
|
99
|
+
`--radius-s`, `--accent`, `--transition`.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Example
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
import type { MulticolItem, MulticolQuery } from '@ixfx/components/multicol-list.js';
|
|
107
|
+
|
|
108
|
+
el.categories = [
|
|
109
|
+
{ key: `year`, label: `Year`, defaults: { allLabel: `Any year` } },
|
|
110
|
+
{ key: `camera`, label: `Camera`, defaults: {
|
|
111
|
+
grouped: true,
|
|
112
|
+
groupBy: (item: MulticolItem) => (item.data as { brand?: string }).brand ?? `?`,
|
|
113
|
+
} },
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
el.dataProvider = (query: MulticolQuery, signal) => {
|
|
117
|
+
// query.categoryKey — which facet to enumerate
|
|
118
|
+
// query.otherSelections — Map<columnId, string[]> of every OTHER column's
|
|
119
|
+
// choices ([] = that column is at 'All')
|
|
120
|
+
return computeFacet(query.categoryKey, query.otherSelections);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
el.addEventListener(`multicol-select`, (event) => {
|
|
124
|
+
saveLayout(event.detail.columns);
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
See `demo/multicol-list.html` for a full in-memory example with counts.
|
package/docs-user/tree.md
CHANGED
|
@@ -141,6 +141,7 @@ These properties are present on all three components (`ixfx-tree-list`, `ixfx-mi
|
|
|
141
141
|
| `selectionFilter` | `'none' \| 'leaf' \| 'branch'` | `'leaf'` | Which node kinds can be selected (reflected attribute) |
|
|
142
142
|
| `filterPredicate` | `TreeFilterPredicate \| undefined` | `undefined` | Filter; only nodes returning `true` are shown |
|
|
143
143
|
| `exclusivity` | `'none' \| 'depth' \| 'global'` | `'none'` | Expansion exclusivity (reflected attribute) |
|
|
144
|
+
| `stickyHeaders` (`sticky-headers`) | `boolean` | `true` | VS Code-style sticky headers; set `sticky-headers="false"` to opt out (`ixfx-tree-list` only) |
|
|
144
145
|
|
|
145
146
|
### `interactionMode` (`ixfx-tree-list` / `ixfx-miller-list`)
|
|
146
147
|
|
|
@@ -210,6 +211,14 @@ Controls how expansion of one branch affects others.
|
|
|
210
211
|
|
|
211
212
|
`exclusivity="depth"` replaces the old `accordion` boolean attribute. To migrate: `accordion` → `exclusivity="depth"`.
|
|
212
213
|
|
|
214
|
+
### Sticky headers (`ixfx-tree-list`)
|
|
215
|
+
|
|
216
|
+
On by default: while scrolling vertically, the ancestors of the top-visible row stick to the top of the list (VS Code-style sticky scroll), showing the full chain. Set `sticky-headers="false"` to opt out.
|
|
217
|
+
|
|
218
|
+
- Clicking a stuck header selects that ancestor and scrolls its real row into view; clicking its caret toggles expansion. Keyboard interaction stays in the real list.
|
|
219
|
+
- An ancestor that is itself still visible is never duplicated in the header.
|
|
220
|
+
- Style via `--tree-sticky-bg`, `--tree-sticky-border`, `--tree-sticky-shadow`, and the `sticky-headers` / `sticky-header` parts.
|
|
221
|
+
|
|
213
222
|
---
|
|
214
223
|
|
|
215
224
|
## Selection
|
|
@@ -600,6 +609,9 @@ These are set by the global theme and inherited by all tree components.
|
|
|
600
609
|
| `--tree-drop-nub-size` | `5px` | Diameter of the insertion-line nub |
|
|
601
610
|
| `--tree-drop-into-outline` | `2px solid var(--accent)` | Outline of a row that is a reparent (`inside`) drop target |
|
|
602
611
|
| `--tree-drop-into-bg` | `color-mix(...)` | Background tint of a reparent drop target |
|
|
612
|
+
| `--tree-sticky-bg` | `var(--tree-bg)` | Sticky header background (opaque so rows slide underneath) |
|
|
613
|
+
| `--tree-sticky-border` | `var(--border, transparent)` | Bottom border of the sticky header stack |
|
|
614
|
+
| `--tree-sticky-shadow` | `0 2px 6px rgba(0,0,0,0.25)` | Shadow under the sticky header stack |
|
|
603
615
|
|
|
604
616
|
`part`s: `drop-target` (the highlighted row), `drop-indicator` (the
|
|
605
617
|
before/after line).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `ixfx-vertical-list`
|
|
2
2
|
|
|
3
|
-
A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically.
|
|
3
|
+
A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically. Large lists can be [virtualized](#virtualisation) so only the visible rows exist in the DOM.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -11,13 +11,14 @@ A scrollable vertical list of items with selection, keyboard navigation, and inc
|
|
|
11
11
|
3. [Properties](#properties)
|
|
12
12
|
4. [Sticky mode](#sticky-mode)
|
|
13
13
|
5. [Custom checkbox](#custom-checkbox)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
6. [Selection](#selection)
|
|
15
|
+
7. [Events](#events)
|
|
16
|
+
8. [Native drag-out](#native-drag-out)
|
|
17
|
+
9. [Keyboard navigation](#keyboard-navigation)
|
|
18
|
+
10. [Incremental search](#incremental-search)
|
|
19
|
+
11. [Virtualisation](#virtualisation)
|
|
20
|
+
12. [CSS variables](#css-variables)
|
|
21
|
+
13. [CSS parts](#css-parts)
|
|
21
22
|
|
|
22
23
|
---
|
|
23
24
|
|
|
@@ -117,6 +118,8 @@ To reflect selection state inside the custom element's shadow DOM, target the `:
|
|
|
117
118
|
|---|---|---|---|
|
|
118
119
|
| `selectionMode` / `selection-mode` | `'none' \| 'single' \| 'multiple'` | `'single'` | Which items can be selected simultaneously |
|
|
119
120
|
| `interactionMode` / `interaction-mode` | `ListInteractionMode` | `'standard'` | How gestures map to selection changes (see table below) |
|
|
121
|
+
| `virtualize` / `virtualize` | `boolean` | `false` | Only render the viewport window (+ overscan) into the DOM; pool and recycle the rest. See [Virtualisation](#virtualisation) |
|
|
122
|
+
| `itemHeight` / `item-height` | `number` | `0` | Fixed row height in px. Required for `virtualize` — every row must be exactly this tall |
|
|
120
123
|
| `filterPredicate` | `((el: Element) => boolean) \| undefined` | `undefined` | External filter; only items returning `true` are shown |
|
|
121
124
|
| `checkboxRenderer` | `((checked: boolean) => unknown) \| CustomCheckboxOptions \| undefined` | `undefined` | Custom content for the checkbox in `checked` mode. See [Custom checkbox](#custom-checkbox) |
|
|
122
125
|
|
|
@@ -581,6 +584,59 @@ list.filterPredicate = undefined;
|
|
|
581
584
|
|
|
582
585
|
---
|
|
583
586
|
|
|
587
|
+
## Virtualisation
|
|
588
|
+
|
|
589
|
+
Set `virtualize` to window the list: only the rows near the viewport (plus an overscan of 3 rows) ever exist in the DOM. Everything else is pooled off-DOM and recycled **by identity** as you scroll, so a list of tens of thousands of rows keeps a tiny, fast DOM. Works for hand-supplied `<li>` / `data-list-item` elements **and** adapter (`items`) rows.
|
|
590
|
+
|
|
591
|
+
Offscreen space is held by two `data-virtual-spacer` rows bracketing the rendered window. If you query items yourself, exclude them (`li:not([data-virtual-spacer])`) — `querySelectorAll` with the plain `li` selector won't resolve pooled rows because they have no DOM node at all.
|
|
592
|
+
|
|
593
|
+
### Enabling it
|
|
594
|
+
|
|
595
|
+
```html
|
|
596
|
+
<ixfx-vertical-list virtualize item-height="30" selection-mode="multiple"
|
|
597
|
+
style="height: 300px; --list-item-height: 30px">
|
|
598
|
+
</ixfx-vertical-list>
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
- **`item-height` is required.** The window math is pure fixed-stride arithmetic (no DOM measurement), mirroring `ixfx-grid-list`'s `itemSize`. Every row must be exactly that tall — set `--list-item-height` to the same value and keep row content single-line.
|
|
602
|
+
- With `item-height` at `0` the component warns and runs non-virtualized.
|
|
603
|
+
- It can be toggled at runtime: entering snapshots the current DOM order as the row registry; leaving reattaches every row in order and drops the spacers and pool. Selection and cursor survive both directions.
|
|
604
|
+
|
|
605
|
+
```typescript
|
|
606
|
+
list.virtualize = true;
|
|
607
|
+
list.itemHeight = 30;
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
### What works while virtualized
|
|
611
|
+
|
|
612
|
+
- **Selection and cursor survive scrolling.** Rows are detached/reattached, never recreated, and pooled rows hold live element refs — `selectAll()`, `Cmd/Ctrl+A`, and range operations span them too.
|
|
613
|
+
- **`data-key`s** are required for the key APIs (`selectKeys`, `focusKey`, `getItemByKey`, `renderedKeys`); selection by reference (click, `select()`) works regardless.
|
|
614
|
+
- **Mutations reconcile.** `addItem` / `setItems` / direct `appendChild` / `removeItem` / `clearItems` all keep working; appends beyond the window land in the pool.
|
|
615
|
+
- **Adapter mode** (`items` + `formatter`) virtualizes the same way, and `updateItem` writes through to pooled rows.
|
|
616
|
+
|
|
617
|
+
### Reading the window
|
|
618
|
+
|
|
619
|
+
```typescript
|
|
620
|
+
// Keys of the rendered window (viewport + overscan) — the priority set for
|
|
621
|
+
// prefetching, mirroring ixfx-grid-list.renderedKeys()
|
|
622
|
+
list.renderedKeys();
|
|
623
|
+
|
|
624
|
+
// Keys strictly intersecting the viewport (rect test) — for
|
|
625
|
+
// viewport-first work like thumbnail fetches
|
|
626
|
+
list.visibleKeys();
|
|
627
|
+
|
|
628
|
+
// Resolves pooled (off-DOM) rows too
|
|
629
|
+
list.getItemByKey('r4321');
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### Limitations while active
|
|
633
|
+
|
|
634
|
+
- **Drag-select is disabled** — the window shifts under a drag, so the marquee band can't be tracked reliably.
|
|
635
|
+
- **Incremental-search `filter` mode is excluded** — it collapses rows via `hidden`, corrupting the fixed-stride geometry. `navigate` and `select` modes still work.
|
|
636
|
+
- **Keyboard navigation stays within the rendered window** — scroll first.
|
|
637
|
+
|
|
638
|
+
---
|
|
639
|
+
|
|
584
640
|
## CSS variables
|
|
585
641
|
|
|
586
642
|
| Variable | Default | Description |
|
|
@@ -589,7 +645,7 @@ list.filterPredicate = undefined;
|
|
|
589
645
|
| `--list-text` | `var(--surface-3-text)` | Default text colour |
|
|
590
646
|
| `--list-border` | `var(--border)` | Border colour |
|
|
591
647
|
| `--list-radius` | `var(--radius-s)` | Border radius |
|
|
592
|
-
| `--list-item-height` | `28px` | Minimum row height for `<li>` items |
|
|
648
|
+
| `--list-item-height` | `28px` | Minimum row height for `<li>` items; set it to match `item-height` when virtualizing |
|
|
593
649
|
| `--list-item-padding` | `4px var(--space-m, 8px)` | Padding for `<li>` items |
|
|
594
650
|
| `--item-bg-tickled` | `rgba(0,0,0,0.06)` | Row background when cursor is on it |
|
|
595
651
|
| `--item-bg-selected` | `rgba(25,118,210,1)` | Selected row background |
|
package/llms.txt
CHANGED
|
@@ -35,6 +35,7 @@ import '@ixfx/components/data-grid';
|
|
|
35
35
|
- [led](docs-user/led.md): An LED indicator component with color mixing and brightness, blink, and pulse modes.
|
|
36
36
|
- [menu](docs-user/menu.md): A custom menu system built on native HTML popovers with keyboard navigation, tickled focus management, and command routing.
|
|
37
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.
|
|
38
|
+
- [multicol-list](docs-user/multicol-list.md): A faceted-filtering component: each column shows one property (facet) of the *same*
|
|
38
39
|
- [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.
|
|
39
40
|
- [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
41
|
- [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.
|
|
@@ -60,7 +61,7 @@ import '@ixfx/components/data-grid';
|
|
|
60
61
|
- [tree](docs-user/tree.md): Three components share a common `TreeComponent` interface: **`ixfx-tree-list`**, **`ixfx-miller-list`**, and **`ixfx-crumb-navigation`**. This document describes the shared API, plus component-specifi
|
|
61
62
|
- [twosplit-layout](docs-user/twosplit-layout.md): A Lit web component that lays out two elements within a container with a split bar to adjust their proportions.
|
|
62
63
|
- [util](docs-user/util.md): A tooltip component that renders a value with optional icon and formatted number display. Uses native render root (no shadow DOM).
|
|
63
|
-
- [vertical-list](docs-user/vertical-list.md): A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically.
|
|
64
|
+
- [vertical-list](docs-user/vertical-list.md): A scrollable vertical list of items with selection, keyboard navigation, and incremental search. Items can be plain `<li>` elements declared in HTML or rich custom elements added programmatically. Lar
|
|
64
65
|
- [xy-pad](docs-user/xy-pad.md): A 2D touch-friendly XY pad for controlling two parameters simultaneously. Each axis supports independent linear/logarithmic scaling.
|
|
65
66
|
|
|
66
67
|
## Overviews
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-grid-BT1d_nlu.d.ts","names":[],"sources":["../src/data-grid/types.ts","../src/data-grid/data-grid.ts"],"mappings":"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"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { s as registerIcon } from "./registry-BEtb8_wB.js";
|
|
2
|
-
//#region src/icons/defaults.ts
|
|
3
|
-
/**
|
|
4
|
-
* Chevron pointing down. Used for split-button dropdown toggle.
|
|
5
|
-
* fill="currentColor" so it inherits CSS color.
|
|
6
|
-
*/
|
|
7
|
-
const ICON_CHEVRON_DOWN = `<svg viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"/></svg>`;
|
|
8
|
-
/**
|
|
9
|
-
* Caret pointing right. Used for tree-basic expand indicator as a CSS mask.
|
|
10
|
-
* fill="black" is correct for CSS mask-image use (shape only, color comes from background-color).
|
|
11
|
-
*/
|
|
12
|
-
const ICON_CARET_RIGHT = `<svg viewBox="0 0 24 24" fill="black" xmlns="http://www.w3.org/2000/svg"><path d="M10 7l6 5-6 5V7z"/></svg>`;
|
|
13
|
-
/**
|
|
14
|
-
* Checkmark. Useful for menu-check-item or confirmation states.
|
|
15
|
-
* fill="currentColor" so it inherits CSS color.
|
|
16
|
-
*/
|
|
17
|
-
const ICON_CHECK = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`;
|
|
18
|
-
/**
|
|
19
|
-
* Close / X icon. Useful for dialogs, notifications, dismissible elements.
|
|
20
|
-
* fill="currentColor" so it inherits CSS color.
|
|
21
|
-
*/
|
|
22
|
-
const ICON_CLOSE = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>`;
|
|
23
|
-
/**
|
|
24
|
-
* Plus / add icon. Pairs with `close` for add/remove actions.
|
|
25
|
-
* fill="currentColor" so it inherits CSS color.
|
|
26
|
-
*/
|
|
27
|
-
const ICON_ADD = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>`;
|
|
28
|
-
/**
|
|
29
|
-
* Error / warning icon. Useful for error notifications.
|
|
30
|
-
* fill="currentColor" so it inherits CSS color.
|
|
31
|
-
*/
|
|
32
|
-
const ICON_ERROR = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>`;
|
|
33
|
-
/**
|
|
34
|
-
* Info icon. Useful for info notifications.
|
|
35
|
-
* fill="currentColor" so it inherits CSS color.
|
|
36
|
-
*/
|
|
37
|
-
const ICON_INFO = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>`;
|
|
38
|
-
/**
|
|
39
|
-
* Warning icon. Useful for warning notifications.
|
|
40
|
-
* fill="currentColor" so it inherits CSS color.
|
|
41
|
-
*/
|
|
42
|
-
const ICON_WARNING = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></svg>`;
|
|
43
|
-
/**
|
|
44
|
-
* Chevron pointing right. Used for split-button switcher toggle.
|
|
45
|
-
* fill="currentColor" so it inherits CSS color.
|
|
46
|
-
*/
|
|
47
|
-
const ICON_CHEVRON_RIGHT = `<svg viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"/></svg>`;
|
|
48
|
-
/**
|
|
49
|
-
* Folder with up arrow. Angled line style for navigating up one level.
|
|
50
|
-
* fill="currentColor" so it inherits CSS color.
|
|
51
|
-
*/
|
|
52
|
-
const ICON_FOLDER_UP = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 4L4 12h5v8h6v-8h5L12 4z"/></svg>`;
|
|
53
|
-
/**
|
|
54
|
-
* Folder. Useful for file explorers and sidebars.
|
|
55
|
-
* fill="currentColor" so it inherits CSS color.
|
|
56
|
-
*/
|
|
57
|
-
const ICON_FOLDER = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 1.99-.9 1.99-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></svg>`;
|
|
58
|
-
/**
|
|
59
|
-
* Document / file page. Useful for file lists and document tabs.
|
|
60
|
-
* fill="currentColor" so it inherits CSS color.
|
|
61
|
-
*/
|
|
62
|
-
const ICON_FILE = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></svg>`;
|
|
63
|
-
/**
|
|
64
|
-
* Magnifying glass. Useful for search panels and inputs.
|
|
65
|
-
* fill="currentColor" so it inherits CSS color.
|
|
66
|
-
*/
|
|
67
|
-
const ICON_SEARCH = `<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>`;
|
|
68
|
-
function registerDefaults() {
|
|
69
|
-
registerIcon(`chevron-down`, ICON_CHEVRON_DOWN);
|
|
70
|
-
registerIcon(`chevron-right`, ICON_CHEVRON_RIGHT);
|
|
71
|
-
registerIcon(`caret-right`, ICON_CARET_RIGHT);
|
|
72
|
-
registerIcon(`check`, ICON_CHECK);
|
|
73
|
-
registerIcon(`close`, ICON_CLOSE);
|
|
74
|
-
registerIcon(`file`, ICON_FILE);
|
|
75
|
-
registerIcon(`folder`, ICON_FOLDER);
|
|
76
|
-
registerIcon(`search`, ICON_SEARCH);
|
|
77
|
-
registerIcon(`add`, ICON_ADD);
|
|
78
|
-
registerIcon(`error`, ICON_ERROR);
|
|
79
|
-
registerIcon(`folder-up`, ICON_FOLDER_UP);
|
|
80
|
-
registerIcon(`info`, ICON_INFO);
|
|
81
|
-
registerIcon(`warning`, ICON_WARNING);
|
|
82
|
-
}
|
|
83
|
-
//#endregion
|
|
84
|
-
export { registerDefaults as a, ICON_CLOSE as i, ICON_CHECK as n, ICON_CHEVRON_DOWN as r, ICON_CARET_RIGHT as t };
|
|
85
|
-
|
|
86
|
-
//# sourceMappingURL=defaults-BJwDsMH4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults-BJwDsMH4.js","names":[],"sources":["../src/icons/defaults.ts"],"sourcesContent":["import { registerIcon } from './registry.js';\n\n/**\n * Chevron pointing down. Used for split-button dropdown toggle.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_CHEVRON_DOWN = `<svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"/></svg>`;\n\n/**\n * Caret pointing right. Used for tree-basic expand indicator as a CSS mask.\n * fill=\"black\" is correct for CSS mask-image use (shape only, color comes from background-color).\n */\nexport const ICON_CARET_RIGHT = `<svg viewBox=\"0 0 24 24\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 7l6 5-6 5V7z\"/></svg>`;\n\n/**\n * Checkmark. Useful for menu-check-item or confirmation states.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_CHECK = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/></svg>`;\n\n/**\n * Close / X icon. Useful for dialogs, notifications, dismissible elements.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_CLOSE = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/></svg>`;\n\n/**\n * Plus / add icon. Pairs with `close` for add/remove actions.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_ADD = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"/></svg>`;\n\n/**\n * Error / warning icon. Useful for error notifications.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_ERROR = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>`;\n\n/**\n * Info icon. Useful for info notifications.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_INFO = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"/></svg>`;\n\n/**\n * Warning icon. Useful for warning notifications.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_WARNING = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"/></svg>`;\n\n/**\n * Chevron pointing right. Used for split-button switcher toggle.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_CHEVRON_RIGHT = `<svg viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/></svg>`;\n\n/**\n * Folder with up arrow. Angled line style for navigating up one level.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_FOLDER_UP = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 4L4 12h5v8h6v-8h5L12 4z\"/></svg>`;\n\n/**\n * Folder. Useful for file explorers and sidebars.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_FOLDER = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 1.99-.9 1.99-2V8c0-1.1-.9-2-2-2h-8l-2-2z\"/></svg>`;\n\n/**\n * Document / file page. Useful for file lists and document tabs.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_FILE = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z\"/></svg>`;\n\n/**\n * Magnifying glass. Useful for search panels and inputs.\n * fill=\"currentColor\" so it inherits CSS color.\n */\nexport const ICON_SEARCH = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/></svg>`;\n\nexport function registerDefaults(): void {\n registerIcon(`chevron-down`, ICON_CHEVRON_DOWN);\n registerIcon(`chevron-right`, ICON_CHEVRON_RIGHT);\n registerIcon(`caret-right`, ICON_CARET_RIGHT);\n registerIcon(`check`, ICON_CHECK);\n registerIcon(`close`, ICON_CLOSE);\n registerIcon(`file`, ICON_FILE);\n registerIcon(`folder`, ICON_FOLDER);\n registerIcon(`search`, ICON_SEARCH);\n registerIcon(`add`, ICON_ADD);\n registerIcon(`error`, ICON_ERROR);\n registerIcon(`folder-up`, ICON_FOLDER_UP);\n registerIcon(`info`, ICON_INFO);\n registerIcon(`warning`, ICON_WARNING);\n}\n"],"mappings":";;;;;;AAMA,MAAa,oBAAoB;;;;;AAMjC,MAAa,mBAAmB;;;;;AAMhC,MAAa,aAAa;;;;;AAM1B,MAAa,aAAa;;;;;AAM1B,MAAa,WAAW;;;;;AAMxB,MAAa,aAAa;;;;;AAM1B,MAAa,YAAY;;;;;AAMzB,MAAa,eAAe;;;;;AAM5B,MAAa,qBAAqB;;;;;AAMlC,MAAa,iBAAiB;;;;;AAM9B,MAAa,cAAc;;;;;AAM3B,MAAa,YAAY;;;;;AAMzB,MAAa,cAAc;AAE3B,SAAgB,mBAAyB;CACvC,aAAa,gBAAgB,iBAAiB;CAC9C,aAAa,iBAAiB,kBAAkB;CAChD,aAAa,eAAe,gBAAgB;CAC5C,aAAa,SAAS,UAAU;CAChC,aAAa,SAAS,UAAU;CAChC,aAAa,QAAQ,SAAS;CAC9B,aAAa,UAAU,WAAW;CAClC,aAAa,UAAU,WAAW;CAClC,aAAa,OAAO,QAAQ;CAC5B,aAAa,SAAS,UAAU;CAChC,aAAa,aAAa,cAAc;CACxC,aAAa,QAAQ,SAAS;CAC9B,aAAa,WAAW,YAAY;AACtC"}
|