@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-DAXs7kbJ.js","names":[],"sources":["../src/styles/handle.ts"],"sourcesContent":["import { css } from 'lit';\n\n/**\n * Shared drag / resize **handle** styling.\n *\n * A handle is the grab affordance for moving or resizing an object. Apply the\n * `.ixfx-handle` class to a small decorative element inside your drag / resize\n * hit-zone and choose a look with two independent attributes:\n *\n * - `data-handle` — texture: `flat` (default) · `dotted` · `dimpled` · `grated`\n * - `data-shape` — topology: `horizontal` (default) · `vertical` · `spot`\n *\n * - **flat** — a solid rounded capsule (bar) or dot (`spot`), filled with\n * `--ixfx-handle-color`.\n * - **dotted** — marks in the [Lucide *grip*](https://lucide.dev/icons/grip)\n * arrangement: one or more marks along the long axis (`horizontal`: a row,\n * `vertical`: a column), repeated in one or more rows/columns across the\n * bar's cross axis (or a 3×3 block for `spot`, unaffected by the row/column\n * / mark-count behaviour below). Tinted by `--ixfx-handle-color`. Each\n * mark's corner rounding is `--ixfx-handle-radius` (→ the theme\n * `--radius-l`), so a flat, squared-off theme renders them as **squares**\n * instead of circles. For `horizontal` / `vertical`, `--ixfx-handle-length`\n * decides how many marks (1-7) fit along the long axis — spaced by\n * `--ixfx-handle-dot-gap` — the same way `--ixfx-handle-thickness` decides\n * how many rows (or columns) of marks (1-7) fit across the cross axis —\n * spaced by `--ixfx-handle-dot-pitch`. Both the bar's rendered length and\n * its thickness snap to the nearest whole multiple of the relevant spacing\n * so marks never clip at the edges.\n * - **dimpled** — that same layout, but each mark is pressed in: a lighter\n * copy peeking out above-left and a darker copy below-right of the base mark.\n * - **grated** — fine 45° knurling: each ridge is a lit edge, the base colour,\n * then a shaded edge. `spot` is the same hatch on a square crop.\n *\n * `dotted` / `dimpled` / `grated` are texture only — no plate, box or border; the\n * gaps are transparent so the surface behind shows through. The base colour is\n * `--ixfx-handle-color` (a theme token); the deboss edges default to that colour\n * lightened / darkened.\n *\n * The handle is `pointer-events: none` — bind pointer handlers to the surrounding\n * hit-zone. It reaches its \"active\" look (`--ixfx-handle-opacity-active`, and for\n * `flat` / `dotted` the `--ixfx-handle-color-active` tint) when its immediate\n * parent (the hit-zone) is `:hover` / `:focus-visible` / `[data-active]`, or when\n * the handle itself is. Set `[data-active]` on the hit-zone yourself while a drag\n * is live so the handle stays lit after the pointer leaves it.\n *\n * ```ts\n * import { handleStyles } from '../styles/handle.js';\n *\n * static styles = [themeFallbacks, handleStyles, css`...`];\n * ```\n * ```html\n * <div class=\"hit-zone\" @pointerdown=${this.#onDown}>\n * <span class=\"ixfx-handle\" data-handle=\"dotted\" data-shape=\"spot\" part=\"handle\"></span>\n * </div>\n * ```\n *\n * ## CSS variables (defaults shown; override on the element or any ancestor)\n * - `--ixfx-handle-color` `var(--surface-muted-text)` — `flat` / `dotted` fill\n * - `--ixfx-handle-color-active` `var(--accent)` — `flat` / `dotted` hover / focus\n * - `--ixfx-handle-thickness` `6px` — cross-axis size of a bar (dotted /\n * dimpled `horizontal` / `vertical` bars snap this to the nearest whole multiple\n * of `--ixfx-handle-dot-pitch` so their mark rows / columns fit exactly)\n * - `--ixfx-handle-length` `44px` — long-axis size of a bar (`100%` to\n * fill). For dotted / dimpled `horizontal` / `vertical` bars this also decides\n * how many marks (1-7) fit along the long axis — spaced by\n * `--ixfx-handle-dot-gap` — the same way `--ixfx-handle-thickness` decides row /\n * column count across the cross axis, and the bar's rendered length likewise\n * snaps to the nearest whole multiple of `--ixfx-handle-dot-gap` so marks\n * never clip at the edges.\n * - `--ixfx-handle-spot-size` `14px` — width = height of a `spot`\n * - `--ixfx-handle-radius` `var(--radius-l)` — `flat` capsule / dotted & dimpled mark rounding\n * - `--ixfx-handle-opacity` `0.55` — rest opacity\n * - `--ixfx-handle-opacity-active` `1`\n * - `--ixfx-handle-dot-size` `3px` — mark size (dotted / dimpled)\n * - `--ixfx-handle-dot-gap` `length/4` (bar) · `spot/3` — mark centre-to-centre\n * step along the long axis (dotted / dimpled `horizontal` / `vertical` bars fit up\n * to 7 marks, driven by `--ixfx-handle-length`; `spot` is a fixed 3×3 block)\n * - `--ixfx-handle-dot-pitch` `dot-size * 2` — row/column centre-to-centre step across\n * the cross axis (dotted / dimpled `horizontal` / `vertical` only; up to 7 rows/columns)\n * - `--ixfx-handle-tile` `5px` — knurl period (grated)\n * - `--ixfx-handle-highlight` `color-mix(currentColor 35%, #fff)` — lit deboss edge\n * - `--ixfx-handle-shadow` `color-mix(currentColor 60%, #000)` — shaded deboss edge\n */\nexport const handleStyles = css`\n .ixfx-handle {\n /* Bridge: public --ixfx-handle-* (element or ancestor) → internal alias → fallback. */\n --_handle-color: var(--ixfx-handle-color, var(--surface-3-text));\n --_handle-color-active: var(--ixfx-handle-color-active, var(--surface-3-text));\n --_handle-thickness: var(--ixfx-handle-thickness, 6px);\n --_handle-length: var(--ixfx-handle-length, 44px);\n --_handle-spot: var(--ixfx-handle-spot-size, 14px);\n --_handle-radius: var(--ixfx-handle-radius, var(--radius-l));\n --_handle-opacity: var(--ixfx-handle-opacity, 0.55);\n --_handle-opacity-active: var(--ixfx-handle-opacity-active, 1);\n --_handle-dot: var(--ixfx-handle-dot-size, 3px);\n --_handle-tile: var(--ixfx-handle-tile, 5px);\n /* Centre-to-centre step of the dotted / dimpled marks (a length). Defaults to\n a share of the long axis; a bar shows ~3 marks. */\n --_handle-gap: var(--ixfx-handle-dot-gap, calc(var(--_handle-length) / 4));\n /* Centre-to-centre step between rows (horizontal) / columns (vertical) of\n marks across the bar's cross axis. */\n --_handle-pitch: var(--ixfx-handle-dot-pitch, calc(var(--_handle-dot) * 2));\n /* How many whole pitch-steps fit across the thickness, rounded to the\n nearest step and clamped to 1-7 rows/columns. */\n --_handle-rows: clamp(1, round(nearest, calc(var(--_handle-thickness) / var(--_handle-pitch)), 1), 7);\n /* An even row/column count has no centre step, so the whole grid (the\n ::before mark and its box-shadow copies, spaced at whole --_handle-pitch\n steps from it) is nudged by half a pitch to stay centred and symmetric. */\n --_handle-row-shift: calc((1 - mod(var(--_handle-rows), 2)) * var(--_handle-pitch) / 2);\n /* The bar's cross-axis size snapped to exactly --_handle-rows steps of\n --_handle-pitch, so mark rows/columns fit without clipping. */\n --_handle-thickness-snapped: calc(var(--_handle-rows) * var(--_handle-pitch));\n /* How many whole gap-steps fit across the long axis, rounded to the\n nearest step and clamped to 1-7 marks. */\n --_handle-cols: clamp(1, round(nearest, calc(var(--_handle-length) / var(--_handle-gap)), 1), 7);\n /* An even mark count has no centre step, so the whole grid is nudged by\n half a gap along the long axis to stay centred and symmetric. */\n --_handle-col-shift: calc((1 - mod(var(--_handle-cols), 2)) * var(--_handle-gap) / 2);\n /* The bar's long-axis size snapped to exactly --_handle-cols steps of\n --_handle-gap, so marks fit without clipping. */\n --_handle-length-snapped: calc(var(--_handle-cols) * var(--_handle-gap));\n /* How far a dimpled mark's highlight / shadow copy is offset. */\n --_dimple-off: calc(var(--_handle-dot) * 0.15);\n /* The mark colour lightened / darkened for the two deboss edges. */\n --_handle-hi: var(--ixfx-handle-highlight, color-mix(in oklch, var(--surface-4) 50%, var(--_handle-color)));\n --_handle-lo: var(--ixfx-handle-shadow, color-mix(in oklch, var(--surface-2) 40%, var(--_handle-color)));\n\n box-sizing: border-box;\n display: inline-block;\n flex: none;\n width: var(--_handle-length);\n height: var(--_handle-thickness);\n color: var(--_handle-color);\n opacity: var(--_handle-opacity);\n pointer-events: none;\n transition:\n color var(--transition, 0.15s ease-out),\n opacity var(--transition, 0.15s ease-out);\n }\n\n .ixfx-handle[data-shape='vertical'] {\n width: var(--_handle-thickness);\n height: var(--_handle-length);\n }\n\n .ixfx-handle[data-shape='spot'] {\n width: var(--_handle-spot);\n height: var(--_handle-spot);\n --_handle-gap: var(--ixfx-handle-dot-gap, calc(var(--_handle-spot) / 3));\n }\n\n .ixfx-handle:hover,\n .ixfx-handle:focus-visible,\n .ixfx-handle[data-active],\n :hover > .ixfx-handle,\n :focus-visible > .ixfx-handle,\n [data-active] > .ixfx-handle {\n color: var(--_handle-color-active);\n opacity: var(--_handle-opacity-active);\n }\n\n /* ── flat: solid capsule / dot ────────────────────────────────────────── */\n .ixfx-handle[data-handle='flat'] {\n background: currentColor;\n border-radius: var(--_handle-radius);\n }\n .ixfx-handle[data-handle='flat'][data-shape='spot'] {\n border-radius: 50%;\n }\n\n /* ── dotted / dimpled: 3 marks in a row / column (or 3×3 for spot), repeated\n in --_handle-rows rows/columns across the cross axis for horizontal /\n vertical, drawn as one ::before mark whose border-radius follows the\n theme — round normally, square in a flat / squared-off theme\n (--radius-l: 0). box-shadow paints the rest of the marks. The extra\n rows/columns beyond --_handle-rows are still emitted (a fixed 7-row\n grid, CSS can't loop) but land outside the snapped, overflow: hidden\n bar, so they're clipped cleanly rather than shown or partially cut. ── */\n .ixfx-handle[data-handle='dotted'],\n .ixfx-handle[data-handle='dimpled'] {\n position: relative;\n }\n .ixfx-handle[data-handle='dotted']:not([data-shape='spot']),\n .ixfx-handle[data-handle='dimpled']:not([data-shape='spot']) {\n overflow: hidden;\n }\n .ixfx-handle[data-handle='dotted']:not([data-shape='vertical']):not([data-shape='spot']),\n .ixfx-handle[data-handle='dimpled']:not([data-shape='vertical']):not([data-shape='spot']) {\n width: var(--_handle-length-snapped);\n height: var(--_handle-thickness-snapped);\n }\n .ixfx-handle[data-handle='dotted'][data-shape='vertical'],\n .ixfx-handle[data-handle='dimpled'][data-shape='vertical'] {\n width: var(--_handle-thickness-snapped);\n height: var(--_handle-length-snapped);\n }\n .ixfx-handle[data-handle='dotted']::before,\n .ixfx-handle[data-handle='dimpled']::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--_handle-dot);\n height: var(--_handle-dot);\n transform: translate(-50%, -50%);\n border-radius: var(--_handle-radius);\n background: currentColor;\n }\n\n /* dotted — the other marks are plain copies: 2 more along the long axis,\n repeated across up to 7 rows/columns on the cross axis (clipped to\n --_handle-rows by the snapped, overflow: hidden bar — see above). */\n .ixfx-handle[data-handle='dotted']:not([data-shape='vertical']):not([data-shape='spot'])::before {\n transform: translate(calc(-50% + var(--_handle-col-shift)), calc(-50% + var(--_handle-row-shift)));\n box-shadow:\n calc(-3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(var(--_handle-gap)) 0 0 0 currentColor,\n calc(2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n 0 calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor;\n }\n .ixfx-handle[data-handle='dotted'][data-shape='vertical']::before {\n transform: translate(calc(-50% + var(--_handle-row-shift)), calc(-50% + var(--_handle-col-shift)));\n box-shadow:\n calc(-3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(var(--_handle-gap)) 0 0 currentColor,\n 0 calc(2 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) 0 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor;\n }\n .ixfx-handle[data-handle='dotted'][data-shape='spot']::before,\n .ixfx-handle[data-handle='dimpled'][data-shape='spot']::before {\n box-shadow:\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n var(--_handle-gap) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n var(--_handle-gap) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap)) var(--_handle-gap) 0 0 currentColor,\n 0 var(--_handle-gap) 0 0 currentColor,\n var(--_handle-gap) var(--_handle-gap) 0 0 currentColor;\n }\n\n /* dimpled — each mark also gets a lighter copy up-left and a darker copy\n down-right, repeated across up to 7 rows/columns on the cross axis\n (clipped to --_handle-rows — see above). Spot stays plain — the 3D is\n imperceptible at that size. */\n .ixfx-handle[data-handle='dimpled']:not([data-shape='vertical']):not([data-shape='spot'])::before {\n transform: translate(calc(-50% + var(--_handle-col-shift)), calc(-50% + var(--_handle-row-shift)));\n box-shadow:\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(-1 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) 0 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) 0 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(2 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(2 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-gap)) calc(3 * var(--_handle-pitch)) 0 0 currentColor,\n calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-gap) + var(--_dimple-off)) calc(3 * var(--_handle-pitch) + var(--_dimple-off)) 0 0 var(--_handle-lo);\n }\n .ixfx-handle[data-handle='dimpled'][data-shape='vertical']::before {\n transform: translate(calc(-50% + var(--_handle-row-shift)), calc(-50% + var(--_handle-col-shift)));\n box-shadow:\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-3 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-2 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(-1 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(-1 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n 0 calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(-1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n var(--_dimple-off) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) 0 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(2 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(2 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(2 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(-1 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(-1 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) 0 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(-1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) var(--_dimple-off) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(2 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(2 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(2 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo),\n calc(3 * var(--_handle-pitch)) calc(3 * var(--_handle-gap)) 0 0 currentColor,\n calc(3 * var(--_handle-pitch) + -1 * var(--_dimple-off)) calc(3 * var(--_handle-gap) + -1 * var(--_dimple-off)) 0 0 var(--_handle-hi),\n calc(3 * var(--_handle-pitch) + var(--_dimple-off)) calc(3 * var(--_handle-gap) + var(--_dimple-off)) 0 0 var(--_handle-lo);\n }\n\n /* ── grated: fine 45° knurling — each ridge is a lit edge, the base colour,\n then a shaded edge. Same hatch at every shape (spot is a square crop). ── */\n .ixfx-handle[data-handle='grated'] {\n background-image: repeating-linear-gradient(\n 45deg,\n var(--_handle-hi) 0 0.9px,\n currentColor 0.9px 1.6px,\n var(--_handle-lo) 1.6px 2.5px,\n transparent 2.5px var(--_handle-tile)\n );\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ixfx-handle {\n transition: none;\n }\n }\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,MAAa,eAAe,GAAG"}
|
|
@@ -61,6 +61,15 @@ let IxfxIconElement = class IxfxIconElement extends LitElement {
|
|
|
61
61
|
if (this.rotate?.length > 0) this.style.setProperty(`--rotate`, this.rotate);
|
|
62
62
|
else this.style.removeProperty(`--rotate`);
|
|
63
63
|
}
|
|
64
|
+
if (changed.has(`size`)) {
|
|
65
|
+
if (this.size !== void 0) {
|
|
66
|
+
this.style.width = `${this.size}px`;
|
|
67
|
+
this.style.height = `${this.size}px`;
|
|
68
|
+
} else {
|
|
69
|
+
this.style.removeProperty(`width`);
|
|
70
|
+
this.style.removeProperty(`height`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
64
73
|
}
|
|
65
74
|
static {
|
|
66
75
|
this.styles = [themeFallbacks, css`
|
|
@@ -128,4 +137,4 @@ IxfxIconElement = __decorate([safeCustomElement(`ixfx-icon`)], IxfxIconElement);
|
|
|
128
137
|
//#endregion
|
|
129
138
|
export { IxfxIconElement as t };
|
|
130
139
|
|
|
131
|
-
//# sourceMappingURL=icon-
|
|
140
|
+
//# sourceMappingURL=icon-1gpwtPx8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-1gpwtPx8.js","names":["#onIconChange","#onFontChange","customElement"],"sources":["../src/icons/icon.ts"],"sourcesContent":["import type { IconChangedEvent } from './registry.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport { getIconEntry, getIconFont, iconBus } from './registry.js';\n\n@customElement(`ixfx-icon`)\nexport class IxfxIconElement extends LitElement {\n @property() name = ``;\n @property({ type: Number }) size: number | undefined;\n @property() label = ``;\n @property({ type: Boolean, attribute: `prominence` }) prominence = false;\n @property({ type: String, attribute: `rotate`, reflect: true }) rotate = ``;\n\n #onIconChange = (e: Event): void => {\n if ((e as IconChangedEvent).detail.name === this.name) {\n this.requestUpdate();\n }\n };\n\n #onFontChange = (): void => {\n const entry = getIconEntry(this.name);\n if (entry?.kind === `font`) {\n this.requestUpdate();\n }\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n iconBus.addEventListener(`ixfx-icon-change`, this.#onIconChange);\n iconBus.addEventListener(`ixfx-icon-font-change`, this.#onFontChange);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n iconBus.removeEventListener(`ixfx-icon-change`, this.#onIconChange);\n iconBus.removeEventListener(`ixfx-icon-font-change`, this.#onFontChange);\n }\n\n protected override render() {\n const entry = getIconEntry(this.name);\n if (!entry)\n return nothing;\n\n const hasLabel = this.label.length > 0;\n\n if (entry.kind === `font`) {\n const fontFamily = getIconFont();\n return html`\n <span\n class=\"font-icon\"\n style=${styleMap({ fontFamily: fontFamily ?? `` })}\n aria-hidden=${hasLabel ? nothing : `true`}\n aria-label=${hasLabel ? this.label : nothing}\n >${entry.char}</span>\n `;\n }\n\n return html`\n <span\n class=\"icon-wrapper\"\n aria-hidden=${hasLabel ? nothing : `true`}\n aria-label=${hasLabel ? this.label : nothing}\n >${unsafeHTML(entry.svg)}</span>\n `;\n }\n\n protected override updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has(`rotate`)) {\n if (this.rotate?.length > 0) {\n this.style.setProperty(`--rotate`, this.rotate);\n } else {\n this.style.removeProperty(`--rotate`);\n }\n }\n if (changed.has(`size`)) {\n if (this.size !== undefined) {\n this.style.width = `${this.size}px`;\n this.style.height = `${this.size}px`;\n } else {\n this.style.removeProperty(`width`);\n this.style.removeProperty(`height`);\n }\n }\n }\n\n static override styles = [themeFallbacks, css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1em;\n height: 1em;\n opacity: var(--opacity, 1);\n }\n\n :host([prominence]) {\n opacity: var(--prominence-idle-opacity, 1);\n }\n\n :host([prominence]:hover) {\n opacity: var(--prominence-tickled-opacity, 1);\n }\n\n :host([prominence][disabled]) {\n opacity: var(--prominence-disabled-opacity, 0.5);\n }\n\n .icon-wrapper,\n .font-icon {\n display: contents;\n }\n\n :host svg,\n :host .font-icon {\n width: 100%;\n height: 100%;\n transition: transform var(--transition, 0.15s ease-out);\n }\n\n :host .font-icon {\n font-family: inherit;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n :host([rotate]) svg,\n :host([rotate]) .font-icon {\n transform: rotate(var(--rotate));\n }\n `];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-icon': IxfxIconElement;\n }\n}\n"],"mappings":";;;;;;;;AAUO,IAAM,kBAAN,MAAM,wBAAwB,WAAW;;;EAC3B,KAAA,OAAA;EAEC,KAAA,QAAA;EAC+C,KAAA,aAAA;EACM,KAAA,SAAA;EAExD,KAAA,iBAAA,MAAmB;GAClC,IAAK,EAAuB,OAAO,SAAS,KAAK,MAC/C,KAAK,cAAc;EAEvB;EAE4B,KAAA,sBAAA;GAE1B,IADc,aAAa,KAAK,IACxB,CAAC,EAAE,SAAS,QAClB,KAAK,cAAc;EAEvB;;CAXA;CAMA;CAOA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,QAAQ,iBAAiB,oBAAoB,KAAKA,aAAa;EAC/D,QAAQ,iBAAiB,yBAAyB,KAAKC,aAAa;CACtE;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,QAAQ,oBAAoB,oBAAoB,KAAKD,aAAa;EAClE,QAAQ,oBAAoB,yBAAyB,KAAKC,aAAa;CACzE;CAEA,SAA4B;EAC1B,MAAM,QAAQ,aAAa,KAAK,IAAI;EACpC,IAAI,CAAC,OACH,OAAO;EAET,MAAM,WAAW,KAAK,MAAM,SAAS;EAErC,IAAI,MAAM,SAAS,QAAQ;GACzB,MAAM,aAAa,YAAY;GAC/B,OAAO,IAAI;;;kBAGC,SAAS,EAAE,YAAY,cAAc,GAAG,CAAC,EAAE;wBACrC,WAAW,UAAU,OAAO;uBAC7B,WAAW,KAAK,QAAQ,QAAQ;WAC5C,MAAM,KAAK;;EAElB;EAEA,OAAO,IAAI;;;sBAGO,WAAW,UAAU,OAAO;qBAC7B,WAAW,KAAK,QAAQ,QAAQ;SAC5C,WAAW,MAAM,GAAG,EAAE;;CAE7B;CAEA,QAA2B,SAAqC;EAC9D,MAAM,QAAQ,OAAO;EACrB,IAAI,QAAQ,IAAI,QAAQ,GAAG;GACzB,IAAI,KAAK,QAAQ,SAAS,GACxB,KAAK,MAAM,YAAY,YAAY,KAAK,MAAM;QAE9C,KAAK,MAAM,eAAe,UAAU;EAExC;EACA,IAAI,QAAQ,IAAI,MAAM,GAAG;GACvB,IAAI,KAAK,SAAS,KAAA,GAAW;IAC3B,KAAK,MAAM,QAAQ,GAAG,KAAK,KAAK;IAChC,KAAK,MAAM,SAAS,GAAG,KAAK,KAAK;GACnC,OAAO;IACL,KAAK,MAAM,eAAe,OAAO;IACjC,KAAK,MAAM,eAAe,QAAQ;GACpC;EACF;CACF;;EAEyB,KAAA,SAAA,CAAC,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8C5C;;AACH;AA9HG,WAAA,CAAA,SAAS,CAAA,GAAA,gBAAA,WAAA,QAAA,KAAA,CAAA;AACT,WAAA,CAAA,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,gBAAA,WAAA,QAAA,KAAA,CAAA;AACzB,WAAA,CAAA,SAAS,CAAA,GAAA,gBAAA,WAAA,SAAA,KAAA,CAAA;AACT,WAAA,CAAA,SAAS;CAAE,MAAM;CAAS,WAAW;AAAa,CAAC,CAAA,GAAA,gBAAA,WAAA,cAAA,KAAA,CAAA;AACnD,WAAA,CAAA,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAU,SAAS;AAAK,CAAC,CAAA,GAAA,gBAAA,WAAA,UAAA,KAAA,CAAA;AAN/DC,kBAAAA,WAAAA,CAAAA,kBAAc,WAAW,CAAA,GAAA,eAAA"}
|
|
@@ -9,7 +9,7 @@ declare class IxfxIconElement extends LitElement {
|
|
|
9
9
|
rotate: string;
|
|
10
10
|
connectedCallback(): void;
|
|
11
11
|
disconnectedCallback(): void;
|
|
12
|
-
protected render(): import("lit").TemplateResult<1
|
|
12
|
+
protected render(): typeof nothing | import("lit").TemplateResult<1>;
|
|
13
13
|
protected updated(changed: Map<string, unknown>): void;
|
|
14
14
|
static styles: import("lit").CSSResult[];
|
|
15
15
|
}
|
|
@@ -20,4 +20,4 @@ declare global {
|
|
|
20
20
|
}
|
|
21
21
|
//#endregion
|
|
22
22
|
export { IxfxIconElement as t };
|
|
23
|
-
//# sourceMappingURL=icon-
|
|
23
|
+
//# sourceMappingURL=icon-CDGprSdE.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-CDGprSdE.d.ts","names":[],"sources":["../src/icons/icon.ts"],"mappings":";;cAUa,wBAAwB;;EACvB;EACgB;EAChB;EAC0C;EACU;EAevD;EAMA;YAMU,iBAAM,wBAAA;YA4BN,QAAQ,SAAS;SAoBpB,sBAAM;;QAiDhB;YACI;IACR,aAAa"}
|
package/dist/icons.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as IxfxIconElement } from "./icon-
|
|
2
|
-
import { a as getIconEntry, c as iconBus, d as setIconFont, f as svgToDataUri, g as ICON_CLOSE, h as ICON_CHEVRON_DOWN, i as getIcon, l as registerFontIcon, m as ICON_CHECK, n as IconChangedEvent, o as getIconFont, p as ICON_CARET_RIGHT, r as IconEntry, s as hasIcon, t as IconChangedDetail, u as registerIcon } from "./index-
|
|
1
|
+
import { t as IxfxIconElement } from "./icon-CDGprSdE.js";
|
|
2
|
+
import { a as getIconEntry, c as iconBus, d as setIconFont, f as svgToDataUri, g as ICON_CLOSE, h as ICON_CHEVRON_DOWN, i as getIcon, l as registerFontIcon, m as ICON_CHECK, n as IconChangedEvent, o as getIconFont, p as ICON_CARET_RIGHT, r as IconEntry, s as hasIcon, t as IconChangedDetail, u as registerIcon } from "./index-CYndvTWH.js";
|
|
3
3
|
export { ICON_CARET_RIGHT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CLOSE, type IconChangedDetail, type IconChangedEvent, type IconEntry, IxfxIconElement, getIcon, getIconEntry, getIconFont, hasIcon, iconBus, registerFontIcon, registerIcon, setIconFont, svgToDataUri };
|
package/dist/icons.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as iconBus, c as setIconFont, i as hasIcon, l as svgToDataUri, n as getIconEntry, o as registerFontIcon, r as getIconFont, s as registerIcon, t as getIcon } from "./registry-BEtb8_wB.js";
|
|
2
|
-
import { t as IxfxIconElement } from "./icon-
|
|
3
|
-
import { a as registerDefaults, i as ICON_CLOSE, n as ICON_CHECK, r as ICON_CHEVRON_DOWN, t as ICON_CARET_RIGHT } from "./defaults-
|
|
2
|
+
import { t as IxfxIconElement } from "./icon-1gpwtPx8.js";
|
|
3
|
+
import { a as registerDefaults, i as ICON_CLOSE, n as ICON_CHECK, r as ICON_CHEVRON_DOWN, t as ICON_CARET_RIGHT } from "./defaults-kVl1t2tT.js";
|
|
4
4
|
//#region src/icons/index.ts
|
|
5
5
|
registerDefaults();
|
|
6
6
|
//#endregion
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { n as buildHighlightTargets, r as clearHighlights, t as applyHighlights } from "./highlight-B-eQrhhb.js";
|
|
2
|
+
import "./icon-1gpwtPx8.js";
|
|
2
3
|
import { css, html, nothing } from "lit";
|
|
3
4
|
import { Fzf } from "fzf";
|
|
4
5
|
//#region src/incr-search/fuzzy.ts
|
|
@@ -736,10 +737,10 @@ var ListSearchController = class {
|
|
|
736
737
|
/>
|
|
737
738
|
${hasQuery ? html`<span class="list-search-count">${this.#matches.length === 0 ? `0` : this.#matchIndex + 1} / ${this.#matches.length}</span>` : nothing}
|
|
738
739
|
${this.#mode === `navigate` && this.#matches.length > 1 ? html`
|
|
739
|
-
<button class="list-search-icon-btn" title="Previous match (↑)" @click=${() => this.prevMatch()}
|
|
740
|
-
<button class="list-search-icon-btn" title="Next match (↓)" @click=${() => this.nextMatch()}
|
|
740
|
+
<button class="list-search-icon-btn" title="Previous match (↑)" @click=${() => this.prevMatch()}><ixfx-icon name="chevron-left" size="14"></ixfx-icon></button>
|
|
741
|
+
<button class="list-search-icon-btn" title="Next match (↓)" @click=${() => this.nextMatch()}><ixfx-icon name="chevron-right" size="14"></ixfx-icon></button>
|
|
741
742
|
` : nothing}
|
|
742
|
-
<button class="list-search-icon-btn" title="Close (Esc)" @click=${() => this.close()}
|
|
743
|
+
<button class="list-search-icon-btn" title="Close (Esc)" @click=${() => this.close()}><ixfx-icon name="close" size="14"></ixfx-icon></button>
|
|
743
744
|
</div>
|
|
744
745
|
${others.length > 0 || showSelectMatches ? html`
|
|
745
746
|
<div class="list-search-switch">
|
|
@@ -996,4 +997,4 @@ function createTreeListSearchAdapter(host, options = {}) {
|
|
|
996
997
|
//#endregion
|
|
997
998
|
export { LIST_SEARCH_COMMAND_IDS as a, createElementListSearchAdapter as c, createDataListSearchAdapter as d, IncrSearchTreeController as f, createFuzzySearch as h, ListSearchController as i, KeyedElementIndex as l, createAcCompletionProvider as m, listSearchStyles as n, registerListSearchCommands as o, createIncrSearch as p, LIST_SEARCH_MODES as r, createElementIncrSearch as s, createTreeListSearchAdapter as t, keyForElement as u };
|
|
998
999
|
|
|
999
|
-
//# sourceMappingURL=incr-search-
|
|
1000
|
+
//# sourceMappingURL=incr-search-D91M4Ozq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incr-search-D91M4Ozq.js","names":["FzfAny","DEFAULT_HIGHLIGHT_KEY","#el","#opts","#search","#labelMap","#onInput","#onKeydown","#unsub","#onStateChange","#root","#selector","#map","#observer","#dirty","#rebuild","#host","#adapter","#modes","#mode","#placeholder","#search","#unsub","#onState","#open","#query","#matches","#matchIndex","#observer","#teardownEffects","#focusInput","#filterActive","#applyMode","#currentItems","#cycle","#itemFor","#itemByKey","#onInput","#onKeydown","#highlightKey","#applyHighlights"],"sources":["../src/incr-search/fuzzy.ts","../src/incr-search/ac-adapter.ts","../src/incr-search/incr-search.ts","../src/incr-search/controller-tree.ts","../src/incr-search/data-list-search-adapter.ts","../src/interaction/keyed-list.ts","../src/incr-search/element-list-search-adapter.ts","../src/incr-search/element-search.ts","../src/incr-search/list-search-commands.ts","../src/incr-search/list-search-controller.ts","../src/incr-search/list-search-styles.ts","../src/incr-search/tree-list-search-adapter.ts"],"sourcesContent":["import type { FuzzySearch, FuzzySearchOptions, IncrSearchResult } from './types.js';\nimport { Fzf } from 'fzf';\n\nfunction defaultSelector<T>(item: T): string {\n if (typeof item === `string`)\n return item;\n const r = item as Record<string, unknown>;\n if (typeof r.label === `string`)\n return r.label;\n if (typeof r.key === `string`)\n return r.key;\n if (typeof r.value === `string`)\n return r.value;\n return String(item);\n}\n\nexport function createFuzzySearch<T>(\n items: readonly T[],\n options: FuzzySearchOptions<T> = {},\n): FuzzySearch<T> {\n const selector = options.selector ?? defaultSelector<T>;\n // fzf uses a conditional SyncOptionsTuple<T> rest-parameter overload that TypeScript\n // cannot narrow through a spread when T is generic.\n const FzfAny = Fzf as new (list: readonly T[], opts: any) => { find: (q: string) => Array<{ item: T; positions: ReadonlySet<number>; score: number }> };\n const fzf = new FzfAny(items as readonly T[], { selector, ...(options.fzf ?? {}) });\n\n const find = (query: string): ReadonlyArray<IncrSearchResult<T>> => {\n if (!query.trim()) {\n return items.map(item => ({\n item,\n positions: new Set<number>(),\n score: 0,\n }));\n }\n return fzf.find(query).map(r => ({\n item: r.item,\n positions: r.positions,\n score: r.score,\n }));\n };\n\n return { find, items };\n}\n","import type { FuzzySearchOptions } from './types.js';\nimport { createFuzzySearch } from './fuzzy.js';\n\n/**\n * Creates an ixfx-ac-text-compatible `completionProvider` function from a\n * static item list. Uses synchronous fuzzy search wrapped in a Promise so it\n * fits the async provider signature.\n *\n * Each returned item has `positions` populated with matched character indices,\n * which `ixfx-ac-text` uses to render CSS Custom Highlights on the label.\n *\n * Empty query returns all items in original order (no positions).\n * A cancelled signal causes the returned promise to reject with an AbortError.\n */\nexport function createAcCompletionProvider<T extends { label: string }>(\n items: readonly T[],\n options: Pick<FuzzySearchOptions<T>, `selector`> = {},\n): (query: string, signal: AbortSignal) => Promise<Array<T & { positions: ReadonlySet<number> }>> {\n const selector = options.selector ?? ((item: T) => item.label);\n const fuzzy = createFuzzySearch(items, { selector });\n\n return (\n query: string,\n signal: AbortSignal,\n ): Promise<Array<T & { positions: ReadonlySet<number> }>> =>\n new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(new DOMException(`Aborted`, `AbortError`));\n return;\n }\n\n const results = fuzzy.find(query).map(r => ({ ...r.item, positions: r.positions }));\n\n if (signal.aborted) {\n reject(new DOMException(`Aborted`, `AbortError`));\n return;\n }\n\n resolve(results);\n });\n}\n","import type {\n IncrSearch,\n IncrSearchChangeCallback,\n IncrSearchOptions,\n IncrSearchState,\n} from './types.js';\nimport { createFuzzySearch } from './fuzzy.js';\n\nfunction buildState<T>(results: ReturnType<ReturnType<typeof createFuzzySearch<T>>[`find`]>, query: string): IncrSearchState<T> {\n const positionsByItem = new Map<T, ReadonlySet<number>>();\n for (const r of results) {\n positionsByItem.set(r.item, r.positions);\n }\n return Object.freeze({\n query,\n results: Object.freeze([...results]),\n positionsByItem,\n });\n}\n\nexport function createIncrSearch<T>(options: IncrSearchOptions<T> = {}): IncrSearch<T> {\n let items: readonly T[] = options.items ?? [];\n let query = ``;\n let fuzzy = createFuzzySearch(items, { selector: options.selector, fzf: options.fzf });\n let state: IncrSearchState<T> = buildState(fuzzy.find(query), query);\n let disposed = false;\n\n const observers = new Set<IncrSearchChangeCallback<T>>();\n\n if (options.onChange) {\n observers.add(options.onChange);\n }\n\n const notify = (s: IncrSearchState<T>): void => {\n for (const cb of observers) {\n cb(s);\n }\n };\n\n const run = async (q: string, signal?: AbortSignal): Promise<IncrSearchState<T>> => {\n // Yield to the microtask queue for a consistent async interface\n await Promise.resolve();\n if (signal?.aborted || disposed) {\n return state;\n }\n const results = fuzzy.find(q);\n if (signal?.aborted || disposed) {\n return state;\n }\n state = buildState(results, q);\n notify(state);\n return state;\n };\n\n return {\n get state() {\n return state;\n },\n\n async setItems(newItems: readonly T[], signal?: AbortSignal): Promise<void> {\n items = newItems;\n fuzzy = createFuzzySearch(items, { selector: options.selector, fzf: options.fzf });\n await run(query, signal);\n },\n\n async setQuery(q: string, signal?: AbortSignal): Promise<IncrSearchState<T>> {\n query = q;\n return run(q, signal);\n },\n\n async clearQuery(): Promise<void> {\n query = ``;\n await run(``, undefined);\n },\n\n onChange(cb: IncrSearchChangeCallback<T>): () => void {\n observers.add(cb);\n cb(state);\n return () => {\n observers.delete(cb);\n };\n },\n\n dispose(): void {\n disposed = true;\n observers.clear();\n items = [];\n },\n };\n}\n","import type { FzfOptions } from 'fzf';\nimport type { TreeSearchHost } from '../common/searchable.js';\nimport type { TreeNode } from '../common/types.js';\nimport type { IncrSearchState } from './types.js';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\n\nconst DEFAULT_HIGHLIGHT_KEY = `incr-search-highlight`;\n\nexport type IncrSearchTreeOptions = {\n selector: (item: { node: TreeNode; depth: number }) => string;\n /**\n * CSS selector for the label elements inside the shadow root.\n * Defaults to `.tree-label` (suitable for ixfx-tree-list).\n * Use `.label` for ixfx-miller-list.\n */\n labelSelector?: string;\n highlightKey?: string;\n input?: HTMLInputElement;\n fzf?: Partial<FzfOptions<{ node: TreeNode; depth: number }>>;\n};\n\ntype SearchItem = { node: TreeNode; depth: number };\n\n/**\n * External-input filter-search controller for `TreeSearchHost` components.\n *\n * @deprecated `ixfx-tree-list` / `ixfx-miller-list` now have a built-in\n * incremental-search popover with navigate / select / filter modes — invoke\n * `el.registry.invoke('list.search.filter')` (see `docs/infra-incremental.md`)\n * instead of wiring an external `<input>`. This class remains for existing\n * consumers and covers filter mode only.\n *\n * @example Using with ixfx-tree-list:\n * ```typescript\n * const ctrl = new IncrSearchTreeController(myTreeList, {\n * selector: item => item.node.item.label,\n * });\n * ctrl.connect();\n * ```\n *\n * @example Using with ixfx-miller-list (different label selector):\n * ```typescript\n * const ctrl = new IncrSearchTreeController(myMillerList, {\n * selector: item => item.node.item.label,\n * labelSelector: '.label',\n * });\n * ctrl.connect();\n * ```\n */\nexport class IncrSearchTreeController {\n #el: TreeSearchHost;\n #opts: IncrSearchTreeOptions;\n #search: ReturnType<typeof createIncrSearch<SearchItem>>;\n #unsub: (() => void) | undefined;\n #labelMap = new Map<string, SearchItem>();\n\n constructor(el: TreeSearchHost, opts: IncrSearchTreeOptions) {\n this.#el = el;\n this.#opts = opts;\n this.#search = createIncrSearch<SearchItem>({\n selector: opts.selector,\n fzf: opts.fzf,\n });\n }\n\n connect(): void {\n this.disconnect();\n\n const items = this.#el.getNodes();\n for (const item of items) {\n this.#labelMap.set(this.#opts.selector(item), item);\n }\n void this.#search.setItems(items);\n\n if (this.#opts.input) {\n this.#opts.input.addEventListener(`input`, this.#onInput);\n this.#opts.input.addEventListener(`keydown`, this.#onKeydown);\n }\n\n this.#unsub = this.#search.onChange(state => this.#onStateChange(state));\n }\n\n disconnect(): void {\n if (this.#unsub) {\n this.#unsub();\n this.#unsub = undefined;\n }\n if (this.#opts.input) {\n this.#opts.input.removeEventListener(`input`, this.#onInput);\n this.#opts.input.removeEventListener(`keydown`, this.#onKeydown);\n }\n this.#el.filterPredicate = undefined;\n clearHighlights({ key: this.#opts.highlightKey ?? DEFAULT_HIGHLIGHT_KEY });\n this.#labelMap.clear();\n }\n\n async setQuery(query: string): Promise<void> {\n await this.#search.setQuery(query);\n }\n\n async clearQuery(): Promise<void> {\n await this.#search.clearQuery();\n }\n\n #onInput = () => {\n const value = this.#opts.input?.value ?? ``;\n void this.setQuery(value);\n };\n\n #onKeydown = (e: KeyboardEvent) => {\n if (e.key === `Escape` && this.#opts.input) {\n this.#opts.input.value = ``;\n void this.clearQuery();\n }\n };\n\n #onStateChange(state: IncrSearchState<SearchItem>): void {\n const matched = new Set(state.results.map(r => r.item.node.item.key));\n const hasQuery = state.query.trim().length > 0;\n this.#el.filterPredicate = hasQuery && matched.size > 0\n ? (node: TreeNode, _depth: number) => matched.has(node.item.key)\n : undefined;\n\n const key = this.#opts.highlightKey ?? DEFAULT_HIGHLIGHT_KEY;\n if (!this.#el.shadowRoot)\n return;\n\n if (!state.query.trim()) {\n clearHighlights({ key });\n return;\n }\n\n const labelSelector = this.#opts.labelSelector ?? `.tree-label`;\n const targets = buildHighlightTargets(\n this.#el.shadowRoot,\n labelSelector,\n state.positionsByItem,\n (labelEl) => {\n const text = labelEl.textContent ?? ``;\n return this.#labelMap.get(text);\n },\n labelEl => labelEl.textContent ?? ``,\n );\n applyHighlights(targets, { key });\n }\n}\n","import type { ListSearchAdapter } from './list-search-controller.js';\n\n/** One searchable item in data-backed mode. */\nexport type DataListSearchItem = { key: string; index: number };\n\nexport interface DataListSearchAdapterOptions {\n /** Total number of items in the whole collection (search sees all of them). */\n rawCount: () => number;\n /** Raw (unfiltered) index → key. */\n rawKeyAt: (index: number) => string;\n /** Raw (unfiltered) index → text matched against the query. */\n rawSearchTextAt: (index: number) => string;\n /** `filter` mode: the host hides items whose key is not in `matchedKeys` (`undefined` clears). */\n onFilterChange?: (matchedKeys: ReadonlySet<string> | undefined) => void;\n /** `navigate` + Enter: activate the item with this key. Falls back to `focusKey`. */\n onActivate?: (key: string) => void;\n /** Where matched-character highlights are painted (usually the shadow root). */\n getHighlightRoot?: () => ShadowRoot | Element | null | undefined;\n}\n\n/**\n * A {@link ListSearchAdapter} over a data-backed list. Unlike the element\n * adapter it never materialises an element per item — it reads keys and text\n * straight from the source by index. Highlights are painted on whatever\n * captions are currently rendered in the shadow window; offscreen matches paint\n * when scrolled into view. See `docs/infra-incremental.md`.\n */\nexport function createDataListSearchAdapter(\n host: { focusKey: (key: string) => void; selectKeys: (keys: Iterable<string>) => void },\n options: DataListSearchAdapterOptions,\n): ListSearchAdapter<DataListSearchItem> {\n return {\n getItems: () =>\n Array.from({ length: options.rawCount() }, (_, i) => ({\n key: options.rawKeyAt(i),\n index: i,\n })),\n getLabel: item => options.rawSearchTextAt(item.index),\n getKey: item => item.key,\n focusItem: (item) => {\n if (item)\n host.focusKey(item.key);\n },\n activateItem: (item) => {\n if (options.onActivate)\n options.onActivate(item.key);\n else\n host.focusKey(item.key);\n },\n selectItems: (items) => {\n host.selectKeys(items.map(i => i.key));\n },\n applyFilter: (matched) => {\n options.onFilterChange?.(matched);\n },\n highlightRoot: options.getHighlightRoot,\n highlightSelector: `.cell .caption`,\n highlightKeyOf: el => el.closest(`.cell`)?.getAttribute(`data-key`) ?? undefined,\n highlightText: el => el.textContent ?? ``,\n highlightKey: `grid-list-search`,\n };\n}\n","/**\n * Helpers for key-based selection on the Element-flavoured list components\n * (`ixfx-vertical-list`, `ixfx-detail-list`, `ixfx-grid-list`).\n *\n * A \"key\" is a stable string the host puts on each item element — `data-key`\n * (preferred) or `data-value`. It survives the host rebuilding the item set\n * (re-fetch, re-sort, filter) where raw `Element` references do not.\n */\n\n/**\n * The stable key for an item element: `data-key`, then `data-value`, else\n * `undefined`.\n */\nexport function keyForElement(el: Element): string | undefined {\n return el.getAttribute(`data-key`) ?? el.getAttribute(`data-value`) ?? undefined;\n}\n\n/**\n * A lazily-built key → element index over a container. Rebuilt on first use\n * and after any child-list mutation under `root`; `invalidate()` forces a\n * rebuild on the next `get()`.\n *\n * ```ts\n * #keyIndex = new KeyedElementIndex(this);\n * // ...\n * const el = this.#keyIndex.get(`row-42`);\n * // on disconnect:\n * this.#keyIndex.dispose();\n * ```\n */\nexport class KeyedElementIndex {\n readonly #root: Element;\n readonly #selector: string;\n readonly #map = new Map<string, Element>();\n #dirty = true;\n readonly #observer: MutationObserver;\n\n /**\n * @param root Container whose descendants are indexed.\n * @param itemSelector Which descendants count as items (default: any `[data-key]`).\n */\n constructor(root: Element, itemSelector = `[data-key]`) {\n this.#root = root;\n this.#selector = itemSelector;\n this.#observer = new MutationObserver(() => {\n this.#dirty = true;\n });\n this.#observer.observe(root, { childList: true, subtree: true });\n }\n\n /** The element with this key, or `undefined`. First match wins on duplicates. */\n get(key: string): Element | undefined {\n if (this.#dirty) {\n this.#rebuild();\n }\n return this.#map.get(key);\n }\n\n /** Force a rebuild on the next `get()` — e.g. after a `data-key` attribute change. */\n invalidate(): void {\n this.#dirty = true;\n }\n\n /** Stop observing and drop the cache. */\n dispose(): void {\n this.#observer.disconnect();\n this.#map.clear();\n }\n\n #rebuild(): void {\n this.#map.clear();\n for (const el of this.#root.querySelectorAll(this.#selector)) {\n const key = keyForElement(el);\n if (key !== undefined && !this.#map.has(key)) {\n this.#map.set(key, el);\n }\n }\n this.#dirty = false;\n }\n}\n","import type { ListSearchAdapter } from './list-search-controller.js';\nimport { keyForElement } from '../interaction/keyed-list.js';\n\n/**\n * The slice of a list component the element adapter drives. `ixfx-grid-list`,\n * `ixfx-vertical-list` and `ixfx-detail-list` all satisfy it.\n */\nexport interface ElementListSearchHost extends HTMLElement {\n focusKey: (key: string) => void;\n selectKeys: (keys: Iterable<string>) => void;\n}\n\nexport interface ElementListSearchAdapterOptions {\n /** Selector for item elements, relative to the host. Default `:scope > *`. */\n itemSelector?: string;\n getLabel?: (el: Element) => string;\n getKey?: (el: Element) => string;\n /** `CSS.highlights` registry key for matched-character highlights. */\n highlightKey?: string;\n}\n\nfunction defaultLabel(el: Element): string {\n return el.getAttribute(`data-search-label`) ?? el.textContent?.trim() ?? ``;\n}\n\n/**\n * A {@link ListSearchAdapter} over the light-DOM item elements of a list\n * component. Filter mode toggles `hidden` (only on elements it hid itself, so a\n * consumer's own `hidden` items are left alone). Highlights are painted on the\n * item elements in the light DOM — the consuming page styles\n * `::highlight(<highlightKey>)`. See `docs/infra-incremental.md`.\n */\nexport function createElementListSearchAdapter(\n host: ElementListSearchHost,\n options: ElementListSearchAdapterOptions = {},\n): ListSearchAdapter<Element> {\n const itemSelector = options.itemSelector ?? `:scope > *`;\n const getLabel = options.getLabel ?? defaultLabel;\n const getKey = options.getKey ?? (el => keyForElement(el) ?? defaultLabel(el));\n const hidden = new Set<Element>();\n\n const items = (): Element[] => Array.from(host.querySelectorAll(itemSelector));\n\n return {\n getItems: items,\n getLabel,\n getKey,\n focusItem: (el) => {\n if (el)\n host.focusKey(getKey(el));\n },\n activateItem: (el) => {\n el.dispatchEvent(new MouseEvent(`click`, { bubbles: true, composed: true }));\n },\n selectItems: (els) => {\n host.selectKeys(els.map(getKey));\n },\n applyFilter: (matched) => {\n if (matched === undefined) {\n for (const el of hidden)\n (el as HTMLElement).hidden = false;\n hidden.clear();\n return;\n }\n for (const el of items()) {\n if (matched.has(getKey(el))) {\n if (hidden.delete(el))\n (el as HTMLElement).hidden = false;\n } else {\n (el as HTMLElement).hidden = true;\n hidden.add(el);\n }\n }\n },\n highlightRoot: () => host,\n highlightSelector: itemSelector,\n highlightKeyOf: el => getKey(el),\n highlightText: getLabel,\n highlightKey: options.highlightKey,\n container: () => host,\n };\n}\n","import type {\n ElementIncrSearchOptions,\n IncrSearchChangeCallback,\n IncrSearchState,\n} from './types.js';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\n\ntype ElementItem = { readonly key: string; readonly label: string };\n\nconst defaultGetLabel = (el: Element): string => el.textContent?.trim() ?? ``;\n\nfunction defaultGetKey(el: Element): string {\n return el.getAttribute(`data-key`)\n ?? el.getAttribute(`data-value`)\n ?? el.textContent?.trim()\n ?? ``;\n}\n\nexport type ElementIncrSearch = {\n readonly setQuery: (query: string, signal?: AbortSignal) => Promise<void>;\n readonly clearQuery: () => Promise<void>;\n readonly refresh: () => void;\n readonly onChange: (cb: IncrSearchChangeCallback<ElementItem>) => () => void;\n readonly dispose: () => void;\n};\n\n/**\n * DOM filter-search over a container's item elements (sets `hidden` on\n * non-matches, applies highlights).\n *\n * @deprecated The list components (`ixfx-grid-list`, `ixfx-vertical-list`,\n * `ixfx-detail-list`, …) now have a built-in navigate / select / filter search\n * popover — see `docs/infra-incremental.md` and `ListSearchController`. Kept for\n * standalone / non-component use.\n */\nexport function createElementIncrSearch(opts: ElementIncrSearchOptions): ElementIncrSearch {\n const {\n container,\n itemSelector,\n getLabel = defaultGetLabel,\n getKey = defaultGetKey,\n labelSelector,\n highlightKey,\n } = opts;\n\n // Map from key → element reference for highlight lookup\n let elementByKey = new Map<string, Element>();\n\n const search = createIncrSearch<ElementItem>({\n selector: item => item.label,\n fzf: opts.fzf,\n });\n\n const updateVisibility = (state: IncrSearchState<ElementItem>): void => {\n const matchedKeys = new Set(state.results.map(r => r.item.key));\n const hasQuery = state.query.trim().length > 0;\n\n for (const [key, el] of elementByKey) {\n (el as HTMLElement).hidden = hasQuery ? !matchedKeys.has(key) : false;\n }\n };\n\n const updateHighlights = (state: IncrSearchState<ElementItem>): void => {\n if (!state.query.trim()) {\n clearHighlights({ key: highlightKey });\n return;\n }\n\n const sel = labelSelector ?? itemSelector;\n const targets = buildHighlightTargets(\n container,\n sel,\n state.positionsByItem,\n (el) => {\n const key = getKey(el);\n // Find the ElementItem whose key matches this element's key\n const result = state.results.find(r => r.item.key === key);\n return result?.item;\n },\n el => getLabel(el),\n );\n applyHighlights(targets, { key: highlightKey });\n };\n\n const unsubscribeState = search.onChange((state) => {\n updateVisibility(state);\n updateHighlights(state);\n opts.onChange?.(state);\n });\n\n let refreshPending = false;\n\n const refresh = (): void => {\n if (refreshPending)\n return;\n refreshPending = true;\n void Promise.resolve().then(() => {\n refreshPending = false;\n elementByKey = new Map<string, Element>();\n const els = container.querySelectorAll(itemSelector);\n const items: ElementItem[] = [];\n for (const el of els) {\n const key = getKey(el);\n elementByKey.set(key, el);\n items.push({ key, label: getLabel(el) });\n }\n void search.setItems(items);\n });\n };\n\n const observer = new MutationObserver(() => refresh());\n observer.observe(container, { childList: true, subtree: false });\n\n refresh();\n\n return {\n async setQuery(query, signal) {\n await search.setQuery(query, signal);\n },\n\n async clearQuery() {\n await search.clearQuery();\n },\n\n refresh,\n\n onChange(cb) {\n return search.onChange(cb);\n },\n\n dispose() {\n observer.disconnect();\n unsubscribeState();\n search.dispose();\n clearHighlights({ key: highlightKey });\n },\n };\n}\n","import type { CommandRegistry } from '@clinth/ui-commands';\nimport type { ListSearchController, ListSearchMode } from './list-search-controller.js';\n\n/** Command ids registered by {@link registerListSearchCommands}, keyed by mode. */\nexport const LIST_SEARCH_COMMAND_IDS: Readonly<Record<ListSearchMode, string>> = {\n navigate: `list.search.navigate`,\n select: `list.search.select`,\n filter: `list.search.filter`,\n};\n\nconst LABELS: Readonly<Record<ListSearchMode, { label: string; description: string }>> = {\n navigate: { label: `Find`, description: `Type to move the cursor to the best match` },\n select: { label: `Find & Select`, description: `Type to select every matching item` },\n filter: { label: `Filter`, description: `Type to hide items that don't match` },\n};\n\nexport interface RegisterListSearchCommandsOptions {\n /**\n * Prefix for command ids, e.g. `grid-list` ⇒ `grid-list.search.filter`. When\n * omitted the shared ids from {@link LIST_SEARCH_COMMAND_IDS} are used so a\n * single dispatch (`ixfx-grouped-item-lister.dispatch('list.search.filter')`)\n * fans out to every list.\n */\n idPrefix?: string;\n}\n\n/**\n * Register one command per mode the controller offers (see\n * `controller.registeredModes`). Each command opens the search popover in its\n * mode. Returns a function that unregisters them again — call it from\n * `disconnectedCallback`. See `docs/infra-incremental.md`.\n */\nexport function registerListSearchCommands<T>(\n registry: CommandRegistry<unknown>,\n controller: ListSearchController<T>,\n options: RegisterListSearchCommandsOptions = {},\n): () => void {\n const id = (mode: ListSearchMode): string =>\n options.idPrefix ? `${options.idPrefix}.search.${mode}` : LIST_SEARCH_COMMAND_IDS[mode];\n\n const registered: string[] = [];\n for (const mode of controller.registeredModes) {\n const commandId = id(mode);\n if (registry.has(commandId))\n continue;\n registry.register({\n id: commandId,\n label: LABELS[mode].label,\n description: LABELS[mode].description,\n execute: () => controller.open(mode),\n });\n registered.push(commandId);\n }\n\n return () => {\n for (const commandId of registered)\n registry.unregister(commandId);\n };\n}\n","import type { FzfOptions } from 'fzf';\nimport type { ReactiveController, ReactiveControllerHost, TemplateResult } from 'lit';\nimport type { IncrSearchResult, IncrSearchState } from './types.js';\nimport { html, nothing } from 'lit';\nimport { applyHighlights, buildHighlightTargets, clearHighlights } from './highlight.js';\nimport { createIncrSearch } from './incr-search.js';\nimport '../icons/icon.js';\n\n/**\n * The three things incremental search can do to a list / tree component. See\n * `docs/infra-incremental.md`.\n *\n * - `navigate` — move the cursor to the best match; ↑/↓ cycle between matches;\n * Enter activates the current match and closes.\n * - `select` — (re)select every item whose label matches, live as you type.\n * - `filter` — hide items that don't match; restored when the popover closes.\n */\nexport type ListSearchMode = `navigate` | `select` | `filter`;\n\n/** Canonical order — used for the switch-row and to normalise a requested set. */\nexport const LIST_SEARCH_MODES: readonly ListSearchMode[] = [`navigate`, `select`, `filter`];\n\nconst DEFAULT_HIGHLIGHT_KEY = `incr-search-highlight`;\nconst INPUT_CLASS = `list-search-input`;\n\ntype SearchItem = { readonly key: string; readonly label: string };\n\n/**\n * Everything {@link ListSearchController} needs to drive a specific host. One is\n * supplied per component; `createElementListSearchAdapter` and\n * `createTreeListSearchAdapter` cover the common shapes.\n */\nexport interface ListSearchAdapter<TItem> {\n /** All searchable items, in display order. */\n getItems: () => readonly TItem[];\n /** Text matched against the query. */\n getLabel: (item: TItem) => string;\n /** Stable identity for an item. */\n getKey: (item: TItem) => string;\n /** `navigate`: move the cursor to `item` and reveal it. `undefined` = no-op. */\n focusItem: (item: TItem | undefined) => void;\n /** `navigate` + Enter: activate `item` (falls back to `focusItem`). */\n activateItem?: (item: TItem) => void;\n /** `select` / \"Select matches\": replace the selection with `items`. */\n selectItems: (items: readonly TItem[]) => void;\n /** `filter`: hide items whose key is not in `matchedKeys`; `undefined` clears the filter. */\n applyFilter: (matchedKeys: ReadonlySet<string> | undefined) => void;\n /** Where matched-character highlights are painted (usually the shadow root). */\n highlightRoot?: () => ShadowRoot | Element | null | undefined;\n /** CSS selector for the label elements inside {@link highlightRoot}. */\n highlightSelector?: string;\n /** Given a label element, the key of the item it belongs to. */\n highlightKeyOf?: (labelEl: Element) => string | undefined;\n /** Text of a label element as fzf saw it (defaults to `el.textContent`). */\n highlightText?: (labelEl: Element) => string;\n /** `CSS.highlights` registry key. Defaults to `incr-search-highlight`. */\n highlightKey?: string;\n /** Element whose child-list mutations should trigger a `refresh()`. */\n container?: () => Element | null | undefined;\n}\n\nexport interface ListSearchControllerOptions<TItem> {\n adapter: ListSearchAdapter<TItem>;\n /**\n * Modes this instance offers, as entry points and as in-popover switch\n * targets. The controller intersects this with {@link LIST_SEARCH_MODES}, so\n * pass the intersection of the component's own capability and any\n * consumer-set `search-modes`. Empty ⇒ search disabled. Default: all three.\n */\n modes?: readonly ListSearchMode[];\n fzf?: Partial<FzfOptions<SearchItem>>;\n placeholder?: string;\n}\n\nexport type ListSearchHost = ReactiveControllerHost & HTMLElement & {\n renderRoot?: DocumentFragment | HTMLElement;\n};\n\n/**\n * Shared brain for the three-mode incremental-search popover. A Lit\n * `ReactiveController`: the host adds `listSearchStyles` to `static styles`,\n * drops `${controller.renderField()}` into `render()`, and registers the\n * commands with {@link registerListSearchCommands}. See `docs/infra-incremental.md`.\n */\nexport class ListSearchController<TItem> implements ReactiveController {\n #host: ListSearchHost;\n #adapter: ListSearchAdapter<TItem>;\n #modes: readonly ListSearchMode[];\n #placeholder: string;\n #search: ReturnType<typeof createIncrSearch<SearchItem>>;\n #unsub: (() => void) | undefined;\n #observer: MutationObserver | undefined;\n\n #itemByKey = new Map<string, TItem>();\n\n #open = false;\n #mode: ListSearchMode = `filter`;\n #query = ``;\n #matchIndex = 0;\n #matches: ReadonlyArray<IncrSearchResult<SearchItem>> = [];\n /** Whether a filter has been pushed to the adapter and still needs undoing. */\n #filterActive = false;\n\n constructor(host: ListSearchHost, options: ListSearchControllerOptions<TItem>) {\n this.#host = host;\n this.#adapter = options.adapter;\n const requested = new Set(options.modes ?? LIST_SEARCH_MODES);\n this.#modes = LIST_SEARCH_MODES.filter(m => requested.has(m));\n this.#mode = this.#modes[0] ?? `filter`;\n this.#placeholder = options.placeholder ?? `Search…`;\n this.#search = createIncrSearch<SearchItem>({ selector: i => i.label, fzf: options.fzf });\n this.#unsub = this.#search.onChange(state => this.#onState(state));\n // Register last: on an already-connected host `addController` invokes\n // `hostConnected()` synchronously, which reads `#adapter` / `#search`.\n host.addController(this);\n }\n\n // --- Public surface ---\n\n /** `false` when no modes are available — the host should register no commands and render no field. */\n get enabled(): boolean {\n return this.#modes.length > 0;\n }\n\n /** The modes actually offered (component capability ∩ consumer request). */\n get registeredModes(): readonly ListSearchMode[] {\n return this.#modes;\n }\n\n /**\n * Replace the offered mode set (normalised to {@link LIST_SEARCH_MODES}\n * order). If the current mode is dropped the popover closes and falls back to\n * the first remaining mode. Callers should re-run\n * {@link registerListSearchCommands} afterwards.\n */\n setModes(modes: readonly ListSearchMode[]): void {\n const set = new Set(modes);\n this.#modes = LIST_SEARCH_MODES.filter(m => set.has(m));\n if (!this.#modes.includes(this.#mode)) {\n if (this.#open)\n this.close();\n this.#mode = this.#modes[0] ?? `filter`;\n }\n this.#host.requestUpdate();\n }\n\n get isOpen(): boolean {\n return this.#open;\n }\n\n get mode(): ListSearchMode {\n return this.#mode;\n }\n\n get query(): string {\n return this.#query;\n }\n\n get matchCount(): number {\n return this.#matches.length;\n }\n\n get matchIndex(): number {\n return this.#matchIndex;\n }\n\n // --- ReactiveController lifecycle ---\n\n hostConnected(): void {\n const container = this.#adapter.container?.();\n if (container) {\n this.#observer = new MutationObserver(() => this.refresh());\n this.#observer.observe(container, { childList: true, subtree: false });\n }\n this.refresh();\n }\n\n hostDisconnected(): void {\n this.#observer?.disconnect();\n this.#observer = undefined;\n if (this.#open)\n this.#teardownEffects();\n this.#open = false;\n this.#unsub?.();\n this.#unsub = undefined;\n this.#search.dispose();\n }\n\n // --- Commands / actions ---\n\n /** Open the popover in `mode` (clamped to the available set). */\n open(mode: ListSearchMode): void {\n if (!this.enabled)\n return;\n this.#mode = this.#modes.includes(mode) ? mode : this.#modes[0];\n this.#open = true;\n this.#query = ``;\n this.#matchIndex = 0;\n this.#matches = [];\n this.refresh();\n void this.#search.setQuery(``);\n this.#host.requestUpdate();\n void this.#host.updateComplete.then(() => this.#focusInput());\n }\n\n /** Close the popover, restoring any live filter. Selection / cursor stay put. */\n close(): void {\n if (!this.#open)\n return;\n this.#open = false;\n this.#teardownEffects();\n this.#query = ``;\n this.#matches = [];\n void this.#search.clearQuery();\n this.#host.requestUpdate();\n this.#host.focus();\n }\n\n setQuery(query: string): void {\n this.#query = query;\n this.#matchIndex = 0;\n void this.#search.setQuery(query);\n }\n\n /** Re-interpret the current query under a new mode (undoing the old mode's effect). */\n switchMode(next: ListSearchMode): void {\n if (!this.#modes.includes(next) || next === this.#mode)\n return;\n if (this.#mode === `filter` && this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n this.#mode = next;\n this.#applyMode();\n this.#host.requestUpdate();\n void this.#host.updateComplete.then(() => this.#focusInput());\n }\n\n /** One-shot: turn the current match set into the selection, staying in the current mode. */\n selectMatches(): void {\n if (!this.#modes.includes(`select`))\n return;\n this.#adapter.selectItems(this.#currentItems());\n this.#host.requestUpdate();\n }\n\n nextMatch(): void {\n this.#cycle(1);\n }\n\n prevMatch(): void {\n this.#cycle(-1);\n }\n\n /** Enter: in `navigate` activate the current match; then close. */\n commit(): void {\n if (this.#mode === `navigate`) {\n const item = this.#itemFor(this.#matches[this.#matchIndex]);\n if (item) {\n if (this.#adapter.activateItem)\n this.#adapter.activateItem(item);\n else\n this.#adapter.focusItem(item);\n }\n }\n this.close();\n }\n\n /** Rebuild the searchable item set from the adapter. Called on open and on container mutation. */\n refresh(): void {\n this.#itemByKey.clear();\n const items: SearchItem[] = [];\n for (const it of this.#adapter.getItems()) {\n const key = this.#adapter.getKey(it);\n this.#itemByKey.set(key, it);\n items.push({ key, label: this.#adapter.getLabel(it) });\n }\n void this.#search.setItems(items);\n }\n\n // --- Rendering ---\n\n /** Popover markup. Pair with `listSearchStyles` in the host's `static styles`. */\n renderField(): TemplateResult | typeof nothing {\n if (!this.enabled)\n return nothing;\n const hasQuery = this.#query.trim().length > 0;\n const others = this.#modes.filter(m => m !== this.#mode);\n const showSelectMatches = this.#modes.includes(`select`) && this.#mode !== `select`;\n return html`\n <div class=\"list-search\" part=\"search\" ?hidden=${!this.#open}>\n <div class=\"list-search-row\">\n <span class=\"list-search-mode\">${this.#mode}</span>\n <input\n class=${INPUT_CLASS}\n type=\"text\"\n part=\"search-input\"\n placeholder=${this.#placeholder}\n .value=${this.#query}\n @input=${this.#onInput}\n @keydown=${this.#onKeydown}\n />\n ${hasQuery\n ? html`<span class=\"list-search-count\">${this.#matches.length === 0 ? `0` : this.#matchIndex + 1} / ${this.#matches.length}</span>`\n : nothing}\n ${this.#mode === `navigate` && this.#matches.length > 1\n ? html`\n <button class=\"list-search-icon-btn\" title=\"Previous match (↑)\" @click=${() => this.prevMatch()}><ixfx-icon name=\"chevron-left\" size=\"14\"></ixfx-icon></button>\n <button class=\"list-search-icon-btn\" title=\"Next match (↓)\" @click=${() => this.nextMatch()}><ixfx-icon name=\"chevron-right\" size=\"14\"></ixfx-icon></button>\n `\n : nothing}\n <button class=\"list-search-icon-btn\" title=\"Close (Esc)\" @click=${() => this.close()}><ixfx-icon name=\"close\" size=\"14\"></ixfx-icon></button>\n </div>\n ${others.length > 0 || showSelectMatches\n ? html`\n <div class=\"list-search-switch\">\n ${others.map(m => html`<button class=\"list-search-btn\" @click=${() => this.switchMode(m)}>${m}</button>`)}\n ${showSelectMatches\n ? html`<button class=\"list-search-btn\" @click=${() => this.selectMatches()}>Select matches</button>`\n : nothing}\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n // --- Internals ---\n\n #focusInput(): void {\n this.#host.renderRoot?.querySelector<HTMLInputElement>(`.${INPUT_CLASS}`)?.focus();\n }\n\n #onInput = (e: Event): void => {\n this.setQuery((e.target as HTMLInputElement).value);\n };\n\n #onKeydown = (e: KeyboardEvent): void => {\n switch (e.key) {\n case `Escape`:\n e.preventDefault();\n e.stopPropagation();\n this.close();\n break;\n case `Enter`:\n e.preventDefault();\n e.stopPropagation();\n this.commit();\n break;\n case `ArrowDown`:\n if (this.#mode === `navigate`) {\n e.preventDefault();\n this.nextMatch();\n }\n break;\n case `ArrowUp`:\n if (this.#mode === `navigate`) {\n e.preventDefault();\n this.prevMatch();\n }\n break;\n default:\n break;\n }\n };\n\n #cycle(delta: number): void {\n if (this.#matches.length === 0)\n return;\n const n = this.#matches.length;\n this.#matchIndex = (this.#matchIndex + delta + n) % n;\n if (this.#mode === `navigate`)\n this.#adapter.focusItem(this.#itemFor(this.#matches[this.#matchIndex]));\n this.#host.requestUpdate();\n }\n\n #itemFor(match: IncrSearchResult<SearchItem> | undefined): TItem | undefined {\n return match ? this.#itemByKey.get(match.item.key) : undefined;\n }\n\n #currentItems(): TItem[] {\n return this.#matches\n .map(m => this.#itemFor(m))\n .filter((x): x is TItem => x !== undefined);\n }\n\n get #highlightKey(): string {\n return this.#adapter.highlightKey ?? DEFAULT_HIGHLIGHT_KEY;\n }\n\n #onState(state: IncrSearchState<SearchItem>): void {\n if (!this.#open)\n return;\n const hasQuery = state.query.trim().length > 0;\n this.#matches = hasQuery ? [...state.results] : [];\n if (this.#matchIndex >= this.#matches.length)\n this.#matchIndex = 0;\n this.#applyMode();\n this.#host.requestUpdate();\n }\n\n #applyMode(): void {\n const hasQuery = this.#query.trim().length > 0;\n\n if (!hasQuery) {\n if (this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n this.#applyHighlights();\n return;\n }\n\n switch (this.#mode) {\n case `navigate`:\n this.#adapter.focusItem(this.#itemFor(this.#matches[this.#matchIndex]));\n break;\n case `select`:\n this.#adapter.selectItems(this.#currentItems());\n break;\n case `filter`:\n this.#adapter.applyFilter(new Set(this.#matches.map(m => m.item.key)));\n this.#filterActive = true;\n break;\n }\n this.#applyHighlights();\n }\n\n #applyHighlights(): void {\n const root = this.#adapter.highlightRoot?.();\n const selector = this.#adapter.highlightSelector;\n const keyOf = this.#adapter.highlightKeyOf;\n if (!root || !selector || !keyOf)\n return;\n if (this.#query.trim().length === 0) {\n clearHighlights({ key: this.#highlightKey });\n return;\n }\n const state = this.#search.state;\n const targets = buildHighlightTargets(\n root,\n selector,\n state.positionsByItem,\n (el) => {\n const key = keyOf(el);\n return key === undefined ? undefined : state.results.find(r => r.item.key === key)?.item;\n },\n this.#adapter.highlightText ?? (el => el.textContent ?? ``),\n );\n // Highlights are cosmetic — never let a bad range (label / positions\n // mismatch) surface as an unhandled rejection through the async engine.\n try {\n applyHighlights(targets, { key: this.#highlightKey });\n } catch {\n clearHighlights({ key: this.#highlightKey });\n }\n }\n\n #teardownEffects(): void {\n if (this.#filterActive) {\n this.#adapter.applyFilter(undefined);\n this.#filterActive = false;\n }\n clearHighlights({ key: this.#highlightKey });\n }\n}\n","import { css } from 'lit';\n\n/**\n * Styles for the incremental-search popover rendered by\n * `ListSearchController.renderField()`. Add to a component's `static styles`;\n * the class names are the contract between this fragment and `renderField()`.\n *\n * The host must give the popover a positioned ancestor (a wrapper with\n * `position: relative`, or `:host { position: relative }`). Tunables:\n * `--list-search-inset` (default `8px`) offsets it from the top-right corner.\n *\n * See `docs/infra-incremental.md`.\n */\nexport const listSearchStyles = css`\n .list-search {\n position: absolute;\n top: var(--list-search-inset, 8px);\n right: var(--list-search-inset, 8px);\n z-index: 20;\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 6px;\n box-sizing: border-box;\n background: var(--surface-4, #2a2a2a);\n color: var(--surface-3-text, inherit);\n border: 1px solid var(--border, #444);\n border-radius: var(--radius-m, 6px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);\n font-size: var(--text-s, 0.85em);\n }\n\n .list-search[hidden] {\n display: none;\n }\n\n .list-search-row {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .list-search-mode {\n flex: none;\n padding: 1px 7px;\n border-radius: 999px;\n font-weight: 600;\n text-transform: capitalize;\n background: var(--accent, #60a5fa);\n color: var(--accent-text, #000);\n }\n\n .list-search-input {\n flex: 1;\n min-width: 140px;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n }\n\n .list-search-count {\n flex: none;\n opacity: 0.6;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n\n .list-search-switch {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .list-search-btn {\n padding: 1px 7px;\n background: var(--surface-3, #333);\n color: inherit;\n border: 1px solid var(--border, #444);\n border-radius: var(--radius-s, 4px);\n cursor: pointer;\n font: inherit;\n text-transform: capitalize;\n }\n\n .list-search-btn:hover {\n background: var(--item-bg-tickled, #444);\n }\n\n .list-search-icon-btn {\n flex: none;\n padding: 0 2px;\n background: transparent;\n border: none;\n color: var(--surface-muted-text, #888);\n cursor: pointer;\n font-size: 1.1em;\n line-height: 1;\n }\n\n .list-search-icon-btn:hover {\n color: inherit;\n }\n`;\n","import type { TreeSearchHost } from '../common/tree-component.js';\nimport type { TreeNode } from '../common/types.js';\nimport type { ListSearchAdapter } from './list-search-controller.js';\n\ntype TreeSearchItem = { node: TreeNode; depth: number };\n\nexport interface TreeListSearchAdapterOptions {\n /** Label-element selector inside the shadow root. Default `.tree-label`; `ixfx-miller-list` uses `.label`. */\n labelSelector?: string;\n /** `CSS.highlights` registry key for matched-character highlights. */\n highlightKey?: string;\n getLabel?: (item: TreeSearchItem) => string;\n}\n\n/**\n * A {@link ListSearchAdapter} over any `TreeSearchHost` (`ixfx-tree-list`,\n * `ixfx-miller-list`, `ixfx-crumb-navigation`). Navigate reveals the match\n * (expands its ancestors, moves the cursor); select drives `selectMany`; filter\n * sets `filterPredicate`. The item set is the whole tree — `getNodes()` returns\n * every node regardless of expansion or an active filter — so refining a query\n * can always re-surface a node. See `docs/infra-incremental.md`.\n */\nexport function createTreeListSearchAdapter(\n host: TreeSearchHost,\n options: TreeListSearchAdapterOptions = {},\n): ListSearchAdapter<TreeSearchItem> {\n const getLabel = options.getLabel ?? ((item: TreeSearchItem) => item.node.item.label);\n\n return {\n getItems: () => host.getNodes(),\n getLabel,\n getKey: item => item.node.item.key,\n focusItem: (item) => {\n if (item)\n host.revealKey(item.node.item.key);\n },\n activateItem: (item) => {\n host.revealKey(item.node.item.key);\n host.select(item.node);\n },\n selectItems: (items) => {\n host.selectMany(items.map(i => i.node));\n },\n applyFilter: (matched) => {\n host.filterPredicate = matched === undefined\n ? undefined\n : (node: TreeNode) => matched.has(node.item.key);\n },\n highlightRoot: () => host.shadowRoot,\n highlightSelector: options.labelSelector ?? `.tree-label`,\n highlightKeyOf: el => (el.closest(`[data-key]`) as HTMLElement | null)?.dataset.key,\n highlightKey: options.highlightKey,\n };\n}\n"],"mappings":"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"}
|
package/dist/incr-search.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as FuzzySearch, C as ListSearchControllerOptions, D as IncrSearchTreeOptions, E as IncrSearchTreeController, F as IncrSearchChangeCallback, I as IncrSearchOptions, L as IncrSearchResult, M as HighlightOptions, N as HighlightTarget, O as createAcCompletionProvider, P as IncrSearch, R as IncrSearchState, S as ListSearchController, T as ListSearchMode, _ as DataListSearchAdapterOptions, a as RegisterListSearchCommandsOptions, b as LIST_SEARCH_MODES, c as applyHighlights, d as createFuzzySearch, f as ElementIncrSearch, g as createElementListSearchAdapter, h as ElementListSearchHost, i as LIST_SEARCH_COMMAND_IDS, j as FuzzySearchOptions, k as ElementIncrSearchOptions, l as buildHighlightTargets, m as ElementListSearchAdapterOptions, n as createTreeListSearchAdapter, o as registerListSearchCommands, p as createElementIncrSearch, r as listSearchStyles, s as createIncrSearch, t as TreeListSearchAdapterOptions, u as clearHighlights, v as DataListSearchItem, w as ListSearchHost, x as ListSearchAdapter, y as createDataListSearchAdapter } from "./index-
|
|
1
|
+
import { A as FuzzySearch, C as ListSearchControllerOptions, D as IncrSearchTreeOptions, E as IncrSearchTreeController, F as IncrSearchChangeCallback, I as IncrSearchOptions, L as IncrSearchResult, M as HighlightOptions, N as HighlightTarget, O as createAcCompletionProvider, P as IncrSearch, R as IncrSearchState, S as ListSearchController, T as ListSearchMode, _ as DataListSearchAdapterOptions, a as RegisterListSearchCommandsOptions, b as LIST_SEARCH_MODES, c as applyHighlights, d as createFuzzySearch, f as ElementIncrSearch, g as createElementListSearchAdapter, h as ElementListSearchHost, i as LIST_SEARCH_COMMAND_IDS, j as FuzzySearchOptions, k as ElementIncrSearchOptions, l as buildHighlightTargets, m as ElementListSearchAdapterOptions, n as createTreeListSearchAdapter, o as registerListSearchCommands, p as createElementIncrSearch, r as listSearchStyles, s as createIncrSearch, t as TreeListSearchAdapterOptions, u as clearHighlights, v as DataListSearchItem, w as ListSearchHost, x as ListSearchAdapter, y as createDataListSearchAdapter } from "./index-CsaQwNkz.js";
|
|
2
2
|
export { type DataListSearchAdapterOptions, type DataListSearchItem, type ElementIncrSearch, type ElementIncrSearchOptions, type ElementListSearchAdapterOptions, type ElementListSearchHost, type FuzzySearch, type FuzzySearchOptions, type HighlightOptions, type HighlightTarget, type IncrSearch, type IncrSearchChangeCallback, IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, type IncrSearchTreeOptions as IncrSearchMillerOptions, type IncrSearchTreeOptions, type IncrSearchOptions, type IncrSearchResult, type IncrSearchState, LIST_SEARCH_COMMAND_IDS, LIST_SEARCH_MODES, type ListSearchAdapter, ListSearchController, type ListSearchControllerOptions, type ListSearchHost, type ListSearchMode, type RegisterListSearchCommandsOptions, type TreeListSearchAdapterOptions, applyHighlights, buildHighlightTargets, clearHighlights, createAcCompletionProvider, createDataListSearchAdapter, createElementIncrSearch, createElementListSearchAdapter, createFuzzySearch, createIncrSearch, createTreeListSearchAdapter, listSearchStyles, registerListSearchCommands };
|
package/dist/incr-search.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { n as buildHighlightTargets, r as clearHighlights, t as applyHighlights } from "./highlight-B-eQrhhb.js";
|
|
2
|
-
import { a as LIST_SEARCH_COMMAND_IDS, c as createElementListSearchAdapter, d as createDataListSearchAdapter, f as IncrSearchTreeController, h as createFuzzySearch, i as ListSearchController, m as createAcCompletionProvider, n as listSearchStyles, o as registerListSearchCommands, p as createIncrSearch, r as LIST_SEARCH_MODES, s as createElementIncrSearch, t as createTreeListSearchAdapter } from "./incr-search-
|
|
2
|
+
import { a as LIST_SEARCH_COMMAND_IDS, c as createElementListSearchAdapter, d as createDataListSearchAdapter, f as IncrSearchTreeController, h as createFuzzySearch, i as ListSearchController, m as createAcCompletionProvider, n as listSearchStyles, o as registerListSearchCommands, p as createIncrSearch, r as LIST_SEARCH_MODES, s as createElementIncrSearch, t as createTreeListSearchAdapter } from "./incr-search-D91M4Ozq.js";
|
|
3
3
|
export { IncrSearchTreeController as IncrSearchMillerController, IncrSearchTreeController, LIST_SEARCH_COMMAND_IDS, LIST_SEARCH_MODES, ListSearchController, applyHighlights, buildHighlightTargets, clearHighlights, createAcCompletionProvider, createDataListSearchAdapter, createElementIncrSearch, createElementListSearchAdapter, createFuzzySearch, createIncrSearch, createTreeListSearchAdapter, listSearchStyles, registerListSearchCommands };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./icon-
|
|
1
|
+
import "./icon-CDGprSdE.js";
|
|
2
2
|
import { o as TreeNode } from "./types-Bc23SI94.js";
|
|
3
|
-
import { i as MenuContainer, n as MenuTrigger, r as MenuTriggerCommandDetail, t as MenuItem } from "./menu-item-
|
|
3
|
+
import { i as MenuContainer, n as MenuTrigger, r as MenuTriggerCommandDetail, t as MenuItem } from "./menu-item-CZi9vy5O.js";
|
|
4
4
|
import { LitElement, TemplateResult } from "lit";
|
|
5
5
|
import { CommandRegistry, KeyboardManager } from "@clinth/ui-commands";
|
|
6
6
|
//#region src/menu/menu-bar.d.ts
|
|
@@ -179,4 +179,4 @@ declare namespace index_d_exports {
|
|
|
179
179
|
}
|
|
180
180
|
//#endregion
|
|
181
181
|
export { menuFromTree as a, MenuSeparator as c, MenuCheckItem as d, MenuBar as f, MenuFromTreeOptions as i, MenuSubTrigger as l, MenuRadioGroup as n, menuFromTreeToElements as o, MenuRadioItem as r, MenuHeader as s, index_d_exports as t, MenuCommandController as u };
|
|
182
|
-
//# sourceMappingURL=index-
|
|
182
|
+
//# sourceMappingURL=index-9AhaHIT2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-9AhaHIT2.d.ts","names":[],"sources":["../src/menu/menu-bar.ts","../src/menu/menu-check-item.ts","../src/menu/menu-command-controller.ts","../src/menu/menu-sub-trigger.ts","../src/menu/menu-separator.ts","../src/menu/menu-header.ts","../src/menu/menu-from-tree.ts","../src/menu/menu-radio-item.ts","../src/menu/menu-radio-group.ts","../src/menu/index.ts"],"mappings":";;;;;;cAMa,gBAAgB;UACnB;UACA;EAER;EASA;UASQ;UAOA;UAIA;UAMA;UAIA;UAQA;UASA;SAkCD,sBAAM;EAab,wBAAM;;QAKA;YACI;IACR,iBAAiB;;;;;cCvGR,sBAAsB;EACL;EAC2B;EAC3B;EACC;EACA;EACuB;EACpB,WAAW;EACX,kBAAkB;UAE1C;UAYA;UASA;EASR,WAAW,mBAAmB;EAU9B,QAAQ,mBAAmB;UAInB;SAaQ,sBAAM;EA2DtB,wBAAM;;QAoBA;YACI;IACR,wBAAwB;;;;;cCnKf;UACH;UACA;UACA;EAEI,YAAA;IAAW,UAAU;IAA0B,SAAS;;EAMpE;EAIA;UAIQ;;;;cCZG,uBAAuB;EACN;EAC2B;EAC3B;EACC;EACuB;EACpB,WAAW;EACX,kBAAkB;UAEjC;UACsB;UACJ;UACX;iBAET;UACP;UACA;UACA;EAER;EAKA;EAIA;UAWQ;EAUC,QAAQ,mBAAmB;EAMpC,WAAW,mBAAmB;UAUtB;UASA;UAKA;UAQA;UAQA;UAOA;UAQA;UAYA;UAQA;UAIA;UAIA;UAWA;SAiCQ,sBAAM;EAmEtB,wBAAM;;QA2BA;YACI;IACR,yBAAyB;;;;;cC1RhB,sBAAsB;SAC1B,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,uBAAuB;;;;;cCnBd,mBAAmB;EACF;SAErB,sBAAM;EAYb,wBAAM;;QAKA;YACI;IACR,oBAAoB;;;;;KCjBZ;EACV,aAAa,QAAQ;EACrB,WAAW;EACX,kBAAkB;;iBAOJ,aACd,OAAO,YACP,UAAS,sBACR;iBAmGa,uBACd,OAAO,YACP,UAAS,sBACR;;;cChHU,sBAAsB;EACL;EACA;EACC;EACD;EACwB;UAE5C;SAWQ,sBAAM;EAoDtB,wBAAM;;QAmBA;YACI;IACR,wBAAwB;;;;;cC5Ff,uBAAuB;EACN;EACA;UAEX;UAET;UAMA;UAMA;EAYR,QAAQ,mBAAmB;SAMpB,sBAAM;EAUb,wBAAM;;QAOA;YACI;IACR,yBAAyB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import "./icon-CDGprSdE.js";
|
|
2
|
+
//#region src/icons/defaults.d.ts
|
|
3
|
+
/** Chevron pointing down (Lucide `chevron-down`). Used for split-button dropdown toggle. */
|
|
4
|
+
declare const ICON_CHEVRON_DOWN = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"/></svg>";
|
|
5
|
+
/**
|
|
6
|
+
* Chevron pointing right (Lucide `chevron-right`). Used for tree-basic expand
|
|
7
|
+
* indicator as a CSS mask — shape only, color comes from background-color.
|
|
8
|
+
*/
|
|
9
|
+
declare const ICON_CARET_RIGHT = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m9 18 6-6-6-6\"/></svg>";
|
|
10
|
+
/** Checkmark (Lucide `check`). Useful for menu-check-item or confirmation states. */
|
|
11
|
+
declare const ICON_CHECK = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"/></svg>";
|
|
12
|
+
/** Close / X icon (Lucide `x`). Useful for dialogs, notifications, dismissible elements. */
|
|
13
|
+
declare const ICON_CLOSE = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>";
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/icons/registry.d.ts
|
|
16
|
+
declare const iconBus: EventTarget;
|
|
17
|
+
type IconChangedDetail = {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
};
|
|
20
|
+
type IconChangedEvent = CustomEvent<IconChangedDetail>;
|
|
21
|
+
type IconEntry = {
|
|
22
|
+
kind: `svg`;
|
|
23
|
+
svg: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: `font`;
|
|
26
|
+
char: string;
|
|
27
|
+
};
|
|
28
|
+
declare function registerIcon(name: string, svg: string): void;
|
|
29
|
+
declare function registerFontIcon(name: string, glyph: string | number): void;
|
|
30
|
+
declare function getIcon(name: string): string | undefined;
|
|
31
|
+
declare function getIconEntry(name: string): IconEntry | undefined;
|
|
32
|
+
declare function hasIcon(name: string): boolean;
|
|
33
|
+
declare function setIconFont(fontFamily: string): void;
|
|
34
|
+
declare function getIconFont(): string | undefined;
|
|
35
|
+
declare function svgToDataUri(svg: string): string;
|
|
36
|
+
//#endregion
|
|
37
|
+
export { getIconEntry as a, iconBus as c, setIconFont as d, svgToDataUri as f, ICON_CLOSE as g, ICON_CHEVRON_DOWN as h, getIcon as i, registerFontIcon as l, ICON_CHECK as m, IconChangedEvent as n, getIconFont as o, ICON_CARET_RIGHT as p, IconEntry as r, hasIcon as s, IconChangedDetail as t, registerIcon as u };
|
|
38
|
+
//# sourceMappingURL=index-CYndvTWH.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CYndvTWH.d.ts","names":[],"sources":["../src/icons/defaults.ts","../src/icons/registry.ts"],"mappings":";;;cAOa;;;;;cAMA;;cAGA;;cAGA;;;cCfA,SAAO;KAER;WAA+B;;KAC/B,mBAAmB,YAAY;KAE/B;EACJ;EAAa;;EACb;EAAc;;iBAEN,aAAa,cAAc;iBAK3B,iBAAiB,cAAc;iBAa/B,QAAQ;iBAKR,aAAa,eAAe;iBAI5B,QAAQ;iBAIR,YAAY;iBAKZ;iBAIA,aAAa"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as LabelledInputBase } from "./labelled-input-base-
|
|
1
|
+
import { t as LabelledInputBase } from "./labelled-input-base-DiTme1JO.js";
|
|
2
2
|
import { CSSResultGroup } from "lit";
|
|
3
3
|
//#region src/labelled-range-input/labelled-range-input.d.ts
|
|
4
4
|
declare class LabelledRangeInput extends LabelledInputBase {
|
|
@@ -21,4 +21,4 @@ declare global {
|
|
|
21
21
|
}
|
|
22
22
|
//#endregion
|
|
23
23
|
export { LabelledRangeInput as t };
|
|
24
|
-
//# sourceMappingURL=index-
|
|
24
|
+
//# sourceMappingURL=index-CoqtMSd9.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-CoqtMSd9.d.ts","names":[],"sources":["../src/labelled-range-input/labelled-range-input.ts"],"mappings":";;;cAuEa,2BAA2B;WAC7B;EAEmB;EACC;EACyB;EACQ;;EAEjC;EAE2B;YAErC,uCAAqB;EA2B/B,wBAAM;SA2BR,QAAQ;;QA2ET;YACI;IACR,6BAA6B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import "./icon-CDGprSdE.js";
|
|
1
2
|
import { w as TreeSearchHost } from "./tree-component-DGmKBbpy.js";
|
|
2
3
|
import { o as TreeNode } from "./types-Bc23SI94.js";
|
|
3
4
|
import { ReactiveController, ReactiveControllerHost, TemplateResult, nothing } from "lit";
|
|
@@ -394,4 +395,4 @@ interface TreeListSearchAdapterOptions {
|
|
|
394
395
|
declare function createTreeListSearchAdapter(host: TreeSearchHost, options?: TreeListSearchAdapterOptions): ListSearchAdapter<TreeSearchItem>;
|
|
395
396
|
//#endregion
|
|
396
397
|
export { FuzzySearch as A, ListSearchControllerOptions as C, IncrSearchTreeOptions as D, IncrSearchTreeController as E, IncrSearchChangeCallback as F, IncrSearchOptions as I, IncrSearchResult as L, HighlightOptions as M, HighlightTarget as N, createAcCompletionProvider as O, IncrSearch as P, IncrSearchState as R, ListSearchController as S, ListSearchMode as T, DataListSearchAdapterOptions as _, RegisterListSearchCommandsOptions as a, LIST_SEARCH_MODES as b, applyHighlights as c, createFuzzySearch as d, ElementIncrSearch as f, createElementListSearchAdapter as g, ElementListSearchHost as h, LIST_SEARCH_COMMAND_IDS as i, FuzzySearchOptions as j, ElementIncrSearchOptions as k, buildHighlightTargets as l, ElementListSearchAdapterOptions as m, createTreeListSearchAdapter as n, registerListSearchCommands as o, createElementIncrSearch as p, listSearchStyles as r, createIncrSearch as s, TreeListSearchAdapterOptions as t, clearHighlights as u, DataListSearchItem as v, ListSearchHost as w, ListSearchAdapter as x, createDataListSearchAdapter as y };
|
|
397
|
-
//# sourceMappingURL=index-
|
|
398
|
+
//# sourceMappingURL=index-CsaQwNkz.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CsaQwNkz.d.ts","names":[],"sources":["../src/incr-search/types.ts","../src/incr-search/ac-adapter.ts","../src/incr-search/controller-tree.ts","../src/incr-search/list-search-controller.ts","../src/incr-search/data-list-search-adapter.ts","../src/incr-search/element-list-search-adapter.ts","../src/incr-search/element-search.ts","../src/incr-search/fuzzy.ts","../src/incr-search/highlight.ts","../src/incr-search/incr-search.ts","../src/incr-search/list-search-commands.ts","../src/incr-search/list-search-styles.ts","../src/incr-search/tree-list-search-adapter.ts"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as LabelledInputBase } from "./labelled-input-base-
|
|
1
|
+
import { t as LabelledInputBase } from "./labelled-input-base-DiTme1JO.js";
|
|
2
2
|
import { n as EditableLabel } from "./editable-label-rzXkjf1H.js";
|
|
3
3
|
import { n as WheelNudgeConsumer, t as WheelDirection } from "./wheel-nudge-By5s_ioH.js";
|
|
4
4
|
import { f as SliderMarkerStyle, m as SliderSingleStyle } from "./slider-input-BxURAAmD.js";
|
|
@@ -98,4 +98,4 @@ declare global {
|
|
|
98
98
|
}
|
|
99
99
|
//#endregion
|
|
100
100
|
export { EditableNumber as n, LabelledSliderInput as t };
|
|
101
|
-
//# sourceMappingURL=index-
|
|
101
|
+
//# sourceMappingURL=index-UvnoZUAo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-UvnoZUAo.d.ts","names":[],"sources":["../src/editable-label/editable-number.ts","../src/labelled-slider-input/labelled-slider-input.ts"],"mappings":";;;;;;;cAoDa,uBAAuB;;EACN;EACA;EACA;;EAEA;EAC+B;EACpB;EACE;EACE;EACQ;EACvB;;EAqBnB,wBAAM;UAoBP;EAMC;EAWA;UAWD;UAWA;;YAkBE;;YAOS;;gBAGL,cAAc;EAKnB,aAAa,mBAAmB;YAU/B;UA0BF;EAaC,QAAQ,mBAAmB;UAW5B;YAyCW;YAuBA;YAaA,qBAAsB,GAAG;YA6BzB,iBAAkB,GAAG;UA8BhC;UAiBA;;;;;UA4CA;EAmCC;EAMA,iBAAiB,WAAW,gBAAgB,OAAO;UAQpD;UAkBA;UA2CA;UA0BA;UASA;;;;;;UASA;UAYA;UAQA;UAYA;UAYA;;UAKA;SAUQ,QAAQ;;QAoKlB;YACI;IACR,wBAAwB;;;;;cCjuBf,4BAA4B;WAC9B;EAEmB;EAC2B,aAAa;EACb,aAAa;EACxC;EACgB;EACA;;EAEf;EAE2B;YAErC,uCAAqB;YA2BrB,WAAW;EAUrB,wBAAM;SA0BR,QAAQ;;QAyGT;YACI;IACR,8BAA8B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./index-
|
|
1
|
+
import "./index-CoqtMSd9.js";
|
|
2
2
|
import { CSSResultGroup, LitElement, PropertyValues } from "lit";
|
|
3
3
|
import { Colour } from "@ixfx/visual";
|
|
4
4
|
//#region src/colour-picker/types.d.ts
|
|
@@ -184,4 +184,4 @@ declare global {
|
|
|
184
184
|
}
|
|
185
185
|
//#endregion
|
|
186
186
|
export { ColourPickerInputEvent as a, ColourPickerEventDetail as i, ColourPicker as n, OklchValue as o, ColourPickerChangeEvent as r, ColourPickerPopup as t };
|
|
187
|
-
//# sourceMappingURL=index-
|
|
187
|
+
//# sourceMappingURL=index-tq6f8007.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-tq6f8007.d.ts","names":[],"sources":["../src/colour-picker/types.ts","../src/colour-picker/colour-picker.ts","../src/colour-picker/colour-picker-popup.ts"],"mappings":";;;;;;;KAGY;WACD;WACA;WACA;WACA;WACA;WACA;;;;;KAMC,0BAA0B;;;;KAK1B,yBAAyB,YAAY;KACrC,0BAA0B,YAAY;KAiBtC;KACA;;;;QAKJ;YACI;IACR,sBAAmD;;;;;cCZ1C,qBAAqB;EACJ;EACA;EACA;EACA;EAE2C;EACN;EACA;EACA;EACf;EACmB;EACM;EACH;UAGhE;EAE0C;EACA;EACA;EACA;UAE1C;EAOY,UAAW;EACX,UAAW;EACX,UAAW;EACX,UAAW;EACZ,YAAa;UAIxB;UACA;UACA;UACA;mBAKS;MAEb;MAIA,MAAM;;;;;;EAcV,UAAU,QAAQ,OAAO;MASrB,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;MAId,UAAU;MAIV,OAAO,OAAO;EAIlB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIjB,UAAU,OAAO;EAIR,WAAW,mBAAmB;UAY/B;UAOA;UASA;UAUA;UA0BA;UAIA;UAYA;UAWA;EAKC,wBAAM;EAoCN,aAAa,mBAAmB;EAKhC,QAAQ,mBAAmB;EAqBpC;EA4FA,WAAY,GAAG,OAAO;EAQtB,YAAa,GAAG,OAAO;EAevB;EAKA;SAKO,QAAQ;;QAoIT;YACI;IACR,sBAAsB;;;;;cCthBpB;;;;;;;;;;;;;;;;;;KAOD,0BAA0B;cAgBlB,0BAA0B;EACT;EAEA;EACA;EACA;EACA;EAE4B;EACS;EACA;EACA;EACf;EACI;EAC1B,MAAM;UAEjB;UACA;EAEA,UAAW;EACC,WAAY;mBAExB;mBACA;mBACA;UAGT;UACA;UACA;UACA;UAGA;UACA;UACA;UACA;UAGA;;MAUJ;MAIA,MAAM,QAAQ,OAAO;cAIb;cAQA;EAIZ,UAAU,QAAQ,OAAO;EAQhB,aAAa,mBAAmB;EAMhC,QAAQ,mBAAmB;UAS5B;UAUA;UAOA;UAoBA;UAmBA;UAmBA;UAcA;UAYA;UAKA;EAKC,wBAAM;SAiDR,QAAQ;;QAmGT;YACI;IACR,4BAA4B"}
|