@ixfx/components 0.11.6 → 0.11.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.
Files changed (35) hide show
  1. package/bundle/index.d.ts +61 -1
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +638 -2
  4. package/bundle/index.js.map +1 -1
  5. package/dist/checkbox.d.ts +3 -0
  6. package/dist/checkbox.d.ts.map +1 -1
  7. package/dist/checkbox.js +24 -1
  8. package/dist/checkbox.js.map +1 -1
  9. package/dist/checked-select-CglRukbP.d.ts +59 -0
  10. package/dist/checked-select-CglRukbP.d.ts.map +1 -0
  11. package/dist/checked-select-Dejl13qd.js +604 -0
  12. package/dist/checked-select-Dejl13qd.js.map +1 -0
  13. package/dist/checked-select.d.ts +2 -0
  14. package/dist/checked-select.js +3 -0
  15. package/dist/{detail-list-CmdCxddo.d.ts → detail-list-CgkOHYOa.d.ts} +3 -1
  16. package/dist/{detail-list-CmdCxddo.d.ts.map → detail-list-CgkOHYOa.d.ts.map} +1 -1
  17. package/dist/detail-list.d.ts +1 -1
  18. package/dist/detail-list.js +22 -0
  19. package/dist/detail-list.js.map +1 -1
  20. package/dist/{hex-editor-BiRfwTz1.js → hex-editor-DiYpgIKs.js} +2 -2
  21. package/dist/{hex-editor-BiRfwTz1.js.map → hex-editor-DiYpgIKs.js.map} +1 -1
  22. package/dist/hex.js +1 -1
  23. package/dist/index.d.ts +3 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +5 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/plots.js +1 -1
  28. package/dist/{xy-axis-COKw338Q.js → xy-axis-CyMd_Bn1.js} +2 -2
  29. package/dist/{xy-axis-COKw338Q.js.map → xy-axis-CyMd_Bn1.js.map} +1 -1
  30. package/docs-user/README.md +1 -0
  31. package/docs-user/checked-select.md +63 -0
  32. package/docs-user/index.json +6 -1
  33. package/docs-user/llms.txt +1 -0
  34. package/llms.txt +1 -0
  35. package/package.json +5 -1
@@ -9,6 +9,7 @@ This directory contains documentation for each component and some architectural
9
9
  - [bottom-drawer](./bottom-drawer.md)
10
10
  - [button](./button.md)
11
11
  - [checkbox](./checkbox.md)
12
+ - [checked-select](./checked-select.md)
12
13
  - [colour-picker](./colour-picker.md)
13
14
  - [crumbs](./crumbs.md)
14
15
  - [data-display](./data-display.md)
@@ -0,0 +1,63 @@
1
+ # `ixfx-checked-select`
2
+
3
+ A SELECT-like control for tri-state tags. At rest it shows the checked and indeterminate items as a flow of `ixfx-checkbox`. Opening it shows a scrollable, resizable popup listing every item.
4
+
5
+ ```html
6
+ <ixfx-checked-select multiline placeholder="No tags"></ixfx-checked-select>
7
+ ```
8
+
9
+ ```js
10
+ const el = document.querySelector('ixfx-checked-select');
11
+ el.items = [
12
+ { value: 'urgent', label: 'urgent', checked: 'true' },
13
+ { value: 'invoice', label: 'Invoice', checked: 'indeterminate' },
14
+ { value: 'holiday', label: 'holiday', checked: 'false' },
15
+ ];
16
+ el.addEventListener('change', ({ detail }) => console.log(detail.changed));
17
+ ```
18
+
19
+ Typical use: tagging files. A tag on every selected file is `true`, on some is `indeterminate`, on none is `false`.
20
+
21
+ ## Behaviour
22
+
23
+ - **Order:** when the popup opens, checked and indeterminate items come first, then the rest, each sorted by label. The order is frozen while open so rows never jump.
24
+ - **Toggling:** `false` → `true`, `true` → `false`, `indeterminate` → `true`. The user can never produce `indeterminate`.
25
+ - **Draft:** edits apply to a draft. **Enter**, or clicking the resting area, commits; **Escape**, **Tab** or a click outside cancels.
26
+ - **Keyboard (popup):** arrows / Home / End move, **Space** toggles, a letter jumps to the next item starting with it (repeat to cycle).
27
+ - **Resting checkboxes:** interactive. Toggling one commits immediately and fires `change`; unchecking removes it from the resting view (focus stays on the control). Use the popup to re-check it. The resting area scrolls (horizontally, or vertically when `multiline`) if it overflows.
28
+ - **Caret:** an always-visible caret sits at the end of the resting area, with items scrolling underneath it (in `multiline` the items wrap in the space beside it). Clicking it toggles the popup, and closing it this way commits.
29
+ - **Opening:** click empty space in the resting area, or Enter / Space / ArrowDown when focused.
30
+ - **Resize:** drag the handle in the bottom-right corner. The size resets on each open.
31
+ - The popup uses CSS anchor positioning (`popover="manual"`), sized to the resting width and flipping at viewport edges. Requires a browser with anchor positioning support.
32
+
33
+ ## Properties
34
+
35
+ | Property | Type | Default | Description |
36
+ |---|---|---|---|
37
+ | `items` | `CheckedSelectItem[]` | `[]` | `{ value, label, checked: 'true' \| 'false' \| 'indeterminate' }` |
38
+ | `multiline` | `boolean` | `false` | Let the resting flow wrap instead of clipping to one line |
39
+ | `placeholder` | `string` | `''` | Shown when nothing is checked |
40
+ | `disabled` | `boolean` | `false` | Prevents opening |
41
+ | `items-inert` / `itemsInert` | `boolean` | `false` | Resting checkboxes become display-only; clicking them just opens the popup. (Named `items-inert` because a bare `inert` attribute is native HTML and would disable the whole element.) |
42
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Direction the resting items flow. `vertical` stacks one per row and scrolls vertically past `--checked-select-rest-max-height`; it ignores `multiline`, and in `text` mode lists one entry per line without commas. |
43
+ | `item-display` / `itemDisplay` | `'checkbox' \| 'text'` | `'checkbox'` | `text` shows checked labels comma-separated, with one trailing `(varies)` if any item is indeterminate. Text mode has nothing to toggle, so it always just opens the popup. |
44
+
45
+ Methods: `open()`, `commit()`, `cancel()`. Getter: `isOpen`.
46
+
47
+ ## Events
48
+
49
+ `change` — `CustomEvent<{ items, changed }>`, bubbles and composed. Fired once per commit, only when something changed. `items` is the full committed list; `changed` only the items whose state differs.
50
+
51
+ ## CSS variables
52
+
53
+ | Variable | Default |
54
+ |---|---|
55
+ | `--checked-select-gap` | `var(--space-m)` |
56
+ | `--checked-select-padding` | `var(--space-s) var(--space-m)` |
57
+ | `--checked-select-caret-width` | `2rem` |
58
+ | `--checked-select-rest-max-height` | `8rem` (multiline, before it scrolls) |
59
+ | `--checked-select-max-height` | `16rem` |
60
+ | `--checked-select-min-width` | `8rem` |
61
+ | `--checked-select-min-height` | `5rem` |
62
+
63
+ Handle look is themed through the shared `--ixfx-handle-*` variables.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
3
  "version": "0.11.6",
4
- "generated": "2026-09-29T08:05:36.277Z",
4
+ "generated": "2026-09-29T18:00:58.196Z",
5
5
  "components": [
6
6
  {
7
7
  "name": "ac-text",
@@ -28,6 +28,11 @@
28
28
  "summary": "A custom checkbox with a diagonal line indicator and indeterminate state support. Uses shadow DOM with CSS variables for full appearance customization.",
29
29
  "path": "docs-user/checkbox.md"
30
30
  },
31
+ {
32
+ "name": "checked-select",
33
+ "summary": "A SELECT-like control for tri-state tags. At rest it shows the checked and indeterminate items as a flow of `ixfx-checkbox`. Opening it shows a scrollable, resizable popup listing every item.",
34
+ "path": "docs-user/checked-select.md"
35
+ },
31
36
  {
32
37
  "name": "colour-picker",
33
38
  "summary": "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.",
@@ -16,6 +16,7 @@ import '@ixfx/components/data-grid';
16
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
17
17
  - [button](docs-user/button.md): Three related button components:
18
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.
19
+ - [checked-select](docs-user/checked-select.md): A SELECT-like control for tri-state tags. At rest it shows the checked and indeterminate items as a flow of `ixfx-checkbox`. Opening it shows a scrollable, resizable popup listing every item.
19
20
  - [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.
20
21
  - [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.
21
22
  - [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
package/llms.txt CHANGED
@@ -16,6 +16,7 @@ import '@ixfx/components/data-grid';
16
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
17
17
  - [button](docs-user/button.md): Three related button components:
18
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.
19
+ - [checked-select](docs-user/checked-select.md): A SELECT-like control for tri-state tags. At rest it shows the checked and indeterminate items as a flow of `ixfx-checkbox`. Opening it shows a scrollable, resizable popup listing every item.
19
20
  - [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.
20
21
  - [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.
21
22
  - [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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
3
  "type": "module",
4
- "version": "0.11.6",
4
+ "version": "0.11.7",
5
5
  "packageManager": "pnpm@10.0.0",
6
6
  "description": "Web components for ixfx — Lit-based UI toolkit",
7
7
  "author": "Clint Heyer",
@@ -28,6 +28,10 @@
28
28
  "types": "./dist/checkbox.d.ts",
29
29
  "import": "./dist/checkbox.js"
30
30
  },
31
+ "./checked-select": {
32
+ "types": "./dist/checked-select.d.ts",
33
+ "import": "./dist/checked-select.js"
34
+ },
31
35
  "./colour-picker": {
32
36
  "types": "./dist/colour-picker.d.ts",
33
37
  "import": "./dist/colour-picker.js"