@ixfx/components 0.8.1 → 0.8.3
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 +326 -103
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +2840 -1285
- package/bundle/index.js.map +1 -1
- package/dist/ac-text.js +3 -3
- package/dist/ac-token.js +3 -3
- package/dist/checkbox.js +1 -1
- package/dist/{colour-picker-Ddsk-7E_.js → colour-picker-CSxwUmtE.js} +2 -2
- package/dist/{colour-picker-Ddsk-7E_.js.map → colour-picker-CSxwUmtE.js.map} +1 -1
- package/dist/colour-picker.js +1 -1
- package/dist/crumbs.js +4 -4
- package/dist/data-display.js +1 -1
- package/dist/data-grid-D-z7bx5-.d.ts.map +1 -1
- package/dist/data-grid.js +9 -6
- package/dist/data-grid.js.map +1 -1
- package/dist/detail-list-_ZJHYEBr.d.ts.map +1 -1
- package/dist/detail-list.js +68 -5
- package/dist/detail-list.js.map +1 -1
- package/dist/editable-label.js +1 -1
- package/dist/{fallbacks-DNI9xt0F.js → fallbacks-BcKGq-2F.js} +17 -1
- package/dist/{fallbacks-DNI9xt0F.js.map → fallbacks-BcKGq-2F.js.map} +1 -1
- package/dist/{grid-list-nRUQOcEL.js → grid-list-BXfY3XXX.js} +531 -29
- package/dist/grid-list-BXfY3XXX.js.map +1 -0
- package/dist/{grid-list-u33vmKzb.d.ts → grid-list-x550wJ0X.d.ts} +115 -3
- package/dist/grid-list-x550wJ0X.d.ts.map +1 -0
- package/dist/grid-list.d.ts +2 -2
- package/dist/grid-list.js +1 -1
- package/dist/handle-BPOxBOKf.js +219 -0
- package/dist/handle-BPOxBOKf.js.map +1 -0
- package/dist/{icon-DcEEGQa_.js → icon-Dy33gu4Z.js} +2 -2
- package/dist/{icon-DcEEGQa_.js.map → icon-Dy33gu4Z.js.map} +1 -1
- package/dist/icons.js +1 -1
- package/dist/{index-BeuCXtiO.d.ts → index-DV3iaUBW.d.ts} +2 -2
- package/dist/{index-BeuCXtiO.d.ts.map → index-DV3iaUBW.d.ts.map} +1 -1
- package/dist/index.d.ts +132 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +554 -206
- package/dist/index.js.map +1 -1
- package/dist/{interaction-Cr13azbM.js → interaction-B9AAlsFO.js} +1 -1
- package/dist/labelled-radial-input.js +2 -2
- package/dist/{labelled-slider-input-BInB5GKL.js → labelled-slider-input-BCH9968c.js} +3 -3
- package/dist/{labelled-slider-input-BInB5GKL.js.map → labelled-slider-input-BCH9968c.js.map} +1 -1
- package/dist/labelled-slider-input.js +1 -1
- package/dist/list-selection-controller-SA4piSBi.js +589 -0
- package/dist/list-selection-controller-SA4piSBi.js.map +1 -0
- package/dist/{menu-Bg90Qr0B.js → menu-HMoxCPY2.js} +5 -5
- package/dist/{menu-Bg90Qr0B.js.map → menu-HMoxCPY2.js.map} +1 -1
- package/dist/{menu-item-Bx-Fs7jq.js → menu-item-BQDYxk5A.js} +5 -5
- package/dist/{menu-item-Bx-Fs7jq.js.map → menu-item-BQDYxk5A.js.map} +1 -1
- package/dist/menu.js +2 -2
- package/dist/miller.d.ts +1 -1
- package/dist/miller.js +3 -3
- package/dist/narrowed-text.js +3 -3
- package/dist/notifier.js +1 -1
- package/dist/panel.d.ts +1 -1
- package/dist/panel.js +1 -1
- package/dist/plots.d.ts +2 -2
- package/dist/plots.js +1 -1
- package/dist/polar-pad.js +1 -1
- package/dist/{radial-input-BfA3GO0H.js → radial-input-DyxfbNzD.js} +2 -2
- package/dist/{radial-input-BfA3GO0H.js.map → radial-input-DyxfbNzD.js.map} +1 -1
- package/dist/radial-input.js +1 -1
- package/dist/range-input.js +1 -1
- package/dist/range.js +1 -1
- package/dist/select-horiz.js +3 -3
- package/dist/{slider-input-Bl1hFE89.js → slider-input-WR8_RwHg.js} +2 -2
- package/dist/{slider-input-Bl1hFE89.js.map → slider-input-WR8_RwHg.js.map} +1 -1
- package/dist/slider-input.js +1 -1
- package/dist/snackbar.js +1 -1
- package/dist/{split-layout-BFSbUZQv.js → split-layout-CA5jbNbG.js} +22 -33
- package/dist/split-layout-CA5jbNbG.js.map +1 -0
- package/dist/split-layout-JK3xWVX2.d.ts.map +1 -1
- package/dist/split-layout.js +1 -1
- package/dist/swipe.js +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tickled-controller-Bn3YdQsM.d.ts → tickled-controller-C1ZsHpyg.d.ts} +10 -1
- package/dist/tickled-controller-C1ZsHpyg.d.ts.map +1 -0
- package/dist/{tickled-controller-C66DgJHl.js → tickled-controller-Dh1Uh_vG.js} +4 -1
- package/dist/tickled-controller-Dh1Uh_vG.js.map +1 -0
- package/dist/{timeline-B2fgDL4U.js → timeline-THyvH8xy.js} +14 -8
- package/dist/timeline-THyvH8xy.js.map +1 -0
- package/dist/timeline.d.ts +1 -1
- package/dist/timeline.js +1 -1
- package/dist/{titlebar-YQ-jVQoS.d.ts → titlebar-Tqu-VvMU.d.ts} +5 -1
- package/dist/titlebar-Tqu-VvMU.d.ts.map +1 -0
- package/dist/titlebar.d.ts +1 -1
- package/dist/titlebar.js +5 -3
- package/dist/titlebar.js.map +1 -1
- package/dist/{tree-Chptss7I.js → tree-DTQon838.js} +4 -4
- package/dist/{tree-Chptss7I.js.map → tree-DTQon838.js.map} +1 -1
- package/dist/tree.d.ts +1 -1
- package/dist/tree.js +1 -1
- package/dist/vertical-list-CFuFDygi.d.ts.map +1 -1
- package/dist/vertical-list.js +68 -4
- package/dist/vertical-list.js.map +1 -1
- package/dist/{xy-axis-DzM1brBZ.js → xy-axis-CrrVdDFe.js} +28 -3
- package/dist/xy-axis-CrrVdDFe.js.map +1 -0
- package/dist/{xy-axis-BfP9hKLj.d.ts → xy-axis-DQqd2yXJ.d.ts} +28 -12
- package/dist/{xy-axis-BfP9hKLj.d.ts.map → xy-axis-DQqd2yXJ.d.ts.map} +1 -1
- package/dist/xy-pad.js +1 -1
- package/docs-user/data-grid.md +1 -1
- package/docs-user/detail-list.md +4 -0
- package/docs-user/dock.md +6 -3
- package/docs-user/grid-list.md +49 -0
- package/docs-user/index.json +2 -2
- package/docs-user/infra-tickled.md +2 -0
- package/docs-user/split-layout.md +2 -4
- package/docs-user/twosplit-layout.md +14 -16
- package/docs-user/vertical-list.md +4 -0
- package/package.json +1 -1
- package/dist/grid-list-nRUQOcEL.js.map +0 -1
- package/dist/grid-list-u33vmKzb.d.ts.map +0 -1
- package/dist/list-selection-controller-DTFI40li.js +0 -264
- package/dist/list-selection-controller-DTFI40li.js.map +0 -1
- package/dist/split-layout-BFSbUZQv.js.map +0 -1
- package/dist/tickled-controller-Bn3YdQsM.d.ts.map +0 -1
- package/dist/tickled-controller-C66DgJHl.js.map +0 -1
- package/dist/timeline-B2fgDL4U.js.map +0 -1
- package/dist/titlebar-YQ-jVQoS.d.ts.map +0 -1
- package/dist/xy-axis-DzM1brBZ.js.map +0 -1
package/dist/slider-input.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SliderInputElement } from "./slider-input-
|
|
1
|
+
import { t as SliderInputElement } from "./slider-input-WR8_RwHg.js";
|
|
2
2
|
export { SliderInputElement };
|
package/dist/snackbar.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as themeFallbacks } from "./fallbacks-
|
|
1
|
+
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
2
2
|
import { t as popupSurfaceStyles } from "./popup-D80sj2QC.js";
|
|
3
3
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
4
4
|
import { LitElement, css, html } from "lit";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { t as themeFallbacks } from "./fallbacks-
|
|
1
|
+
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
2
2
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
3
|
+
import { t as handleStyles } from "./handle-BPOxBOKf.js";
|
|
3
4
|
import { LitElement, css, html, nothing } from "lit";
|
|
4
5
|
import { property, query, state } from "lit/decorators.js";
|
|
5
6
|
//#region src/split-layout/split-drag.ts
|
|
@@ -837,16 +838,20 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
837
838
|
style="cursor: ${cursor}; grid-column: ${gridColumn}; grid-row: ${gridRow};"
|
|
838
839
|
@pointerdown=${(e) => this._onGutterPointerDown(e, groupId, index)}
|
|
839
840
|
>
|
|
840
|
-
<
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
841
|
+
<span
|
|
842
|
+
class="ixfx-handle"
|
|
843
|
+
part="grip"
|
|
844
|
+
data-handle="dimpled"
|
|
845
|
+
data-shape=${isRow ? `vertical` : `horizontal`}
|
|
846
|
+
></span>
|
|
845
847
|
</div>
|
|
846
848
|
`;
|
|
847
849
|
}
|
|
848
850
|
static {
|
|
849
|
-
this.styles = [
|
|
851
|
+
this.styles = [
|
|
852
|
+
themeFallbacks,
|
|
853
|
+
handleStyles,
|
|
854
|
+
css`
|
|
850
855
|
:host {
|
|
851
856
|
display: block;
|
|
852
857
|
width: 100%;
|
|
@@ -857,10 +862,10 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
857
862
|
--split-gutter-active-color: var(--accent);
|
|
858
863
|
--split-collapsed-size: 0px;
|
|
859
864
|
--split-snap: 24px;
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
--
|
|
863
|
-
--
|
|
865
|
+
|
|
866
|
+
/* Gutter grip — shared handle primitive (docs/infra-handle.md). */
|
|
867
|
+
--ixfx-handle-length: 16px;
|
|
868
|
+
--ixfx-handle-thickness: 8px;
|
|
864
869
|
}
|
|
865
870
|
|
|
866
871
|
* {
|
|
@@ -922,31 +927,15 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
922
927
|
user-select: none;
|
|
923
928
|
}
|
|
924
929
|
|
|
925
|
-
.
|
|
926
|
-
width: var(--split-grab-dot-size);
|
|
927
|
-
height: var(--split-grab-dot-size);
|
|
928
|
-
border-radius: 50%;
|
|
929
|
-
background: var(--split-grab-color);
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
:host([direction="row"]) .grab-handle {
|
|
933
|
-
flex-direction: column;
|
|
934
|
-
gap: var(--split-grab-dot-size);
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
:host([direction="column"]) .grab-handle {
|
|
938
|
-
flex-direction: row;
|
|
939
|
-
gap: var(--split-grab-dot-size);
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
:host([data-dragging]) .grab-handle {
|
|
930
|
+
:host([data-dragging]) .gutter .ixfx-handle {
|
|
943
931
|
display: none;
|
|
944
932
|
}
|
|
945
933
|
|
|
946
|
-
:host(:not([data-dragging])) .gutter:hover .
|
|
947
|
-
display:
|
|
934
|
+
:host(:not([data-dragging])) .gutter:hover .ixfx-handle {
|
|
935
|
+
display: none;
|
|
948
936
|
}
|
|
949
|
-
`
|
|
937
|
+
`
|
|
938
|
+
];
|
|
950
939
|
}
|
|
951
940
|
};
|
|
952
941
|
__decorate([property({
|
|
@@ -966,4 +955,4 @@ SplitLayoutElement = __decorate([safeCustomElement(`ixfx-split-layout`)], SplitL
|
|
|
966
955
|
//#endregion
|
|
967
956
|
export { distribute as a, toSnapshot as c, buildModel as i, walk as l, SplitPanelElement as n, normalise as o, applySnapshot as r, resolveTracks as s, SplitLayoutElement as t };
|
|
968
957
|
|
|
969
|
-
//# sourceMappingURL=split-layout-
|
|
958
|
+
//# sourceMappingURL=split-layout-CA5jbNbG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-layout-CA5jbNbG.js","names":["customElement","customElement"],"sources":["../src/split-layout/split-drag.ts","../src/split-layout/split-model.ts","../src/split-layout/split-panel.ts","../src/split-layout/split-layout.ts"],"sourcesContent":["import type { DistributeResult } from './split-model.js';\n\nexport interface DragState {\n isDragging: boolean;\n groupId: string;\n gutterIndex: number;\n startPointerX: number;\n startPointerY: number;\n containerRect: DOMRect;\n trackSizes: number[];\n minConstraints: number[];\n maxConstraints: Array<number | null>;\n fixedConstraints: Array<number | null>;\n whenSmallConstraints: string[];\n}\n\nexport interface DragHandlers {\n onDragStart: (state: DragState) => void;\n onDragMove: (state: DragState, deltaX: number, deltaY: number) => void;\n onDragEnd: (state: DragState) => void;\n distribute: (\n sizesPx: number[],\n gutterIndex: number,\n deltaPx: number,\n constraints: Array<{ minPx: number; maxPx: number | null; fixedPx: number | null; whenSmall: string }>,\n ) => DistributeResult;\n}\n\nexport function createDragMachine(handlers: DragHandlers) {\n let state: DragState | null = null;\n let rafId: number | null = null;\n let pendingMove: { deltaX: number; deltaY: number } | null = null;\n\n function startGutterDrag(\n groupId: string,\n gutterIndex: number,\n _pointerId: number,\n clientX: number,\n clientY: number,\n containerRect: DOMRect,\n trackSizes: number[],\n constraints: Array<{ minPx: number; maxPx: number | null; fixedPx: number | null; whenSmall: string }>,\n ) {\n state = {\n isDragging: true,\n groupId,\n gutterIndex,\n startPointerX: clientX,\n startPointerY: clientY,\n containerRect,\n trackSizes,\n minConstraints: constraints.map(c => c.minPx),\n maxConstraints: constraints.map(c => c.maxPx),\n fixedConstraints: constraints.map(c => c.fixedPx),\n whenSmallConstraints: constraints.map(c => c.whenSmall),\n };\n\n handlers.onDragStart(state);\n }\n\n function move(pointerEvent: PointerEvent) {\n if (!state || !state.isDragging)\n return;\n\n const deltaX = pointerEvent.clientX - state.startPointerX;\n const deltaY = pointerEvent.clientY - state.startPointerY;\n\n pendingMove = { deltaX, deltaY };\n\n if (rafId === null) {\n rafId = requestAnimationFrame(flushMove);\n }\n }\n\n function flushMove() {\n if (!state || !pendingMove) {\n rafId = null;\n return;\n }\n\n const { deltaX, deltaY } = pendingMove;\n pendingMove = null;\n rafId = null;\n\n handlers.onDragMove(state, deltaX, deltaY);\n }\n\n function end(_pointerEvent: PointerEvent) {\n if (!state || !state.isDragging)\n return;\n\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n\n pendingMove = null;\n handlers.onDragEnd(state);\n state = null;\n }\n\n return {\n startGutterDrag,\n move,\n end,\n getState: () => state,\n };\n}\n","import type {\n Axis,\n GroupNode,\n LayoutNode,\n LayoutSnapshot,\n PanelNode,\n SnapshotNode,\n WhenSmall,\n} from './types.js';\n\nlet panelIdCounter = 0;\nlet groupIdCounter = 0;\n\nfunction generatePanelId(): string {\n return `p-${++panelIdCounter}`;\n}\n\nfunction generateGroupId(): string {\n return `g-${++groupIdCounter}`;\n}\n\nfunction resetIdCounters(): void {\n panelIdCounter = 0;\n groupIdCounter = 0;\n}\n\n// A child's own `size`/`weight` attribute takes precedence over the parent's\n// positional `sizes` list. Both are read so hand-authored markup can use\n// either form.\nfunction readOwnWeight(el: HTMLElement): number | undefined {\n const attr = el.getAttribute(`size`) ?? el.getAttribute(`weight`);\n if (attr === null)\n return undefined;\n const value = Number.parseFloat(attr);\n return Number.isNaN(value) ? undefined : value;\n}\n\nexport function buildModel(rootEl: HTMLElement): GroupNode {\n resetIdCounters();\n return buildGroupFromElement(rootEl, null);\n}\n\nfunction buildGroupFromElement(el: HTMLElement, _parentAxis: Axis | null): GroupNode {\n const isNestedLayout = el.tagName === `IXFX-SPLIT-LAYOUT`;\n const directionAttr = el.getAttribute(`direction`);\n const axis: Axis = directionAttr === `column` ? `column` : `row`;\n\n const group: GroupNode = {\n kind: `group`,\n id: el.id || generateGroupId(),\n el: isNestedLayout ? el : null,\n axis,\n children: [],\n weight: readOwnWeight(el) ?? 1,\n fixedPx: null,\n };\n\n const sizesAttr = el.getAttribute(`sizes`);\n const sizes = sizesAttr ? sizesAttr.split(/\\s+/).map(s => Number.parseFloat(s)).filter(n => !Number.isNaN(n)) : [];\n\n const childNodes = Array.from(el.children);\n let sizeIndex = 0;\n\n for (const child of childNodes) {\n // Every child consumes a positional size; a child's own `size`/`weight`\n // attribute (read inside each builder) takes precedence over it.\n const positional = sizeIndex < sizes.length ? sizes[sizeIndex] : undefined;\n sizeIndex++;\n if (child.tagName === `IXFX-SPLIT-LAYOUT`) {\n group.children.push(buildGroupFromElement(child as HTMLElement, axis));\n } else if (child.tagName === `IXFX-SPLIT-PANEL`) {\n group.children.push(buildPanelNode(child as HTMLElement, positional));\n } else {\n const wrapper = createImplicitPanel(child as HTMLElement, positional);\n group.children.push(wrapper);\n }\n }\n\n if (group.children.length === 0) {\n const implicitPanel = createImplicitPanelWithoutId();\n group.children.push(implicitPanel);\n }\n\n return group;\n}\n\nfunction createImplicitPanel(el: HTMLElement, size?: number): PanelNode {\n const minAttr = el.getAttribute(`min`);\n const maxAttr = el.getAttribute(`max`);\n const whenSmallAttr = el.getAttribute(`when-small`) as WhenSmall | null;\n const fixedAttr = el.getAttribute(`fixed`);\n const collapsedAttr = el.hasAttribute(`collapsed`);\n\n let minPx = 0;\n if (minAttr) {\n minPx = parseLength(minAttr, 0);\n }\n\n let maxPx: number | null = null;\n if (maxAttr) {\n maxPx = parseLength(maxAttr, 0);\n }\n\n let fixedPx: number | null = null;\n if (fixedAttr) {\n fixedPx = fixedAttr === `` ? 100 : parseLength(fixedAttr, 100);\n }\n\n const weight = readOwnWeight(el) ?? size ?? 1;\n\n return {\n kind: `panel`,\n id: el.id || generatePanelId(),\n el,\n weight,\n fixedPx,\n minPx,\n maxPx,\n whenSmall: whenSmallAttr || `prevent`,\n collapsed: collapsedAttr,\n restoreWeight: weight,\n };\n}\n\nfunction createImplicitPanelWithoutId(size?: number): PanelNode {\n return {\n kind: `panel`,\n id: generatePanelId(),\n el: document.createElement(`div`),\n weight: size ?? 1,\n fixedPx: null,\n minPx: 0,\n maxPx: null,\n whenSmall: `prevent`,\n collapsed: false,\n restoreWeight: size ?? 1,\n };\n}\n\nfunction buildPanelNode(el: HTMLElement, size?: number): PanelNode {\n const sizeAttr = el.getAttribute(`size`) || el.getAttribute(`weight`);\n const minAttr = el.getAttribute(`min`);\n const maxAttr = el.getAttribute(`max`);\n const whenSmallAttr = el.getAttribute(`when-small`) as WhenSmall | null;\n const fixedAttr = el.getAttribute(`fixed`);\n const collapsedAttr = el.hasAttribute(`collapsed`);\n\n let weight = size ?? 1;\n if (sizeAttr) {\n weight = Number.parseFloat(sizeAttr);\n }\n\n let minPx = 0;\n if (minAttr) {\n minPx = parseLength(minAttr, 0);\n }\n\n let maxPx: number | null = null;\n if (maxAttr) {\n maxPx = parseLength(maxAttr, 0);\n }\n\n let fixedPx: number | null = null;\n if (fixedAttr) {\n fixedPx = fixedAttr === `` ? 100 : parseLength(fixedAttr, 100);\n }\n\n return {\n kind: `panel`,\n id: el.id || generatePanelId(),\n el,\n weight,\n fixedPx,\n minPx,\n maxPx,\n whenSmall: whenSmallAttr || `prevent`,\n collapsed: collapsedAttr,\n restoreWeight: weight,\n };\n}\n\nfunction parseLength(value: string, fallback: number): number {\n if (value.endsWith(`px`)) {\n return Number.parseFloat(value.replace(`px`, ``));\n }\n if (value.endsWith(`%`)) {\n return fallback;\n }\n const num = Number.parseFloat(value);\n return Number.isNaN(num) ? fallback : num;\n}\n\nexport function normalise(group: GroupNode): GroupNode {\n const flexibleWeights: number[] = [];\n let totalFlexibleWeight = 0;\n\n for (const child of group.children) {\n if (child.kind === `panel`) {\n if (child.fixedPx !== null) {\n // fixed-size panels sit outside the weighted flow\n } else if (!child.collapsed) {\n flexibleWeights.push(child.weight);\n totalFlexibleWeight += child.weight;\n }\n } else {\n flexibleWeights.push(child.weight);\n totalFlexibleWeight += child.weight;\n }\n }\n\n if (totalFlexibleWeight === 0) {\n totalFlexibleWeight = 1;\n }\n\n const normalizedChildren: LayoutNode[] = [];\n for (let i = 0; i < group.children.length; i++) {\n const child = group.children[i];\n if (child.kind === `panel`) {\n if (child.fixedPx === null && !child.collapsed) {\n normalizedChildren.push({\n ...child,\n weight: child.weight / totalFlexibleWeight,\n });\n } else {\n normalizedChildren.push(child);\n }\n } else {\n normalizedChildren.push({\n ...child,\n weight: child.weight / totalFlexibleWeight,\n });\n }\n }\n\n return {\n ...group,\n children: normalizedChildren,\n };\n}\n\nexport interface DistributeResult {\n sizesPx: number[];\n belowMin: number[];\n}\n\nexport function distribute(\n sizesPx: number[],\n gutterIndex: number,\n deltaPx: number,\n constraints: Array<{ minPx: number; maxPx: number | null; fixedPx: number | null; whenSmall: WhenSmall }>,\n): DistributeResult {\n const result = [...sizesPx];\n const belowMin: number[] = [];\n\n if (deltaPx === 0) {\n return { sizesPx: result, belowMin };\n }\n\n const growSide = deltaPx > 0 ? gutterIndex : gutterIndex + 1;\n const shrinkSide = deltaPx > 0 ? gutterIndex + 1 : gutterIndex;\n\n let remaining = Math.abs(deltaPx);\n\n for (let i = shrinkSide; i >= 0 && remaining > 0; i--) {\n const c = constraints[i];\n if (c.fixedPx !== null)\n continue;\n\n const currentSize = result[i];\n const room = currentSize - c.minPx;\n\n if (room > 0) {\n const take = Math.min(room, remaining);\n result[i] -= take;\n remaining -= take;\n if (c.whenSmall !== `prevent` && result[i] <= c.minPx && result[i] > 0) {\n belowMin.push(i);\n break;\n }\n } else if (c.whenSmall !== `prevent` && currentSize > 0) {\n const take = Math.min(currentSize, remaining);\n result[i] -= take;\n remaining -= take;\n if (result[i] <= c.minPx) {\n belowMin.push(i);\n break;\n }\n }\n }\n\n const actualMoved = Math.abs(deltaPx) - remaining;\n if (actualMoved > 0) {\n result[growSide] += actualMoved;\n remaining = 0;\n }\n\n if (remaining > 0) {\n for (let i = growSide; i < result.length && remaining > 0; i++) {\n const c = constraints[i];\n if (c.fixedPx !== null)\n continue;\n\n const maxRoom = c.maxPx !== null ? c.maxPx - result[i] : Infinity;\n if (maxRoom <= 0)\n continue;\n\n const give = Math.min(maxRoom, remaining);\n result[i] += give;\n remaining -= give;\n }\n }\n\n return { sizesPx: result, belowMin };\n}\n\nexport function resolveTracks(group: GroupNode, _containerPx: number): string {\n const parts: string[] = [];\n\n const gutterSize = `var(--split-gutter-size, 6px)`;\n\n for (let i = 0; i < group.children.length; i++) {\n const child = group.children[i];\n let track: string;\n\n if (child.kind === `panel`) {\n if (child.collapsed) {\n track = `var(--split-collapsed-size, 0px)`;\n } else if (child.fixedPx !== null) {\n track = `${child.fixedPx}px`;\n } else {\n const min = child.minPx > 0 ? `${child.minPx}px` : `0px`;\n track = `minmax(${min}, var(--s${i}))`;\n }\n } else {\n track = `minmax(0, var(--s${i}))`;\n }\n\n parts.push(track);\n\n if (i < group.children.length - 1) {\n parts.push(gutterSize);\n }\n }\n\n return parts.join(` `);\n}\n\nexport function toSnapshot(group: GroupNode): LayoutSnapshot {\n const root = snapshotNode(group);\n return {\n version: 1,\n root,\n };\n}\n\nfunction snapshotNode(node: LayoutNode): SnapshotNode {\n if (node.kind === `panel`) {\n return {\n kind: `panel`,\n id: node.id,\n weight: node.weight,\n collapsed: node.collapsed,\n };\n }\n\n const children = node.children.map(c => snapshotNode(c));\n return {\n kind: `group`,\n id: node.id,\n weight: node.weight,\n children,\n };\n}\n\nexport function applySnapshot(group: GroupNode, snapshot: LayoutSnapshot): GroupNode {\n return applySnapshotToGroup(group, snapshot.root);\n}\n\nfunction applySnapshotToGroup(group: GroupNode, snapshot: SnapshotNode): GroupNode {\n if (snapshot.kind !== `group`) {\n return group;\n }\n\n const weightMap = new Map<string, number>();\n const collapsedMap = new Map<string, boolean>();\n\n collectWeights(snapshot, weightMap, collapsedMap);\n\n const newChildren: LayoutNode[] = [];\n\n for (const child of group.children) {\n if (child.kind === `panel`) {\n const newWeight = weightMap.get(child.id);\n const collapsed = collapsedMap.get(child.id);\n\n newChildren.push({\n ...child,\n weight: newWeight !== undefined ? newWeight : child.weight,\n collapsed: collapsed !== undefined ? collapsed : child.collapsed,\n });\n } else {\n const childSnapshot = snapshot.children?.find(c => c.id === child.id);\n if (childSnapshot) {\n newChildren.push(applySnapshotToGroup(child, childSnapshot));\n } else {\n newChildren.push(child);\n }\n }\n }\n\n return {\n ...group,\n children: newChildren,\n };\n}\n\nfunction collectWeights(snapshot: SnapshotNode, weights: Map<string, number>, collapsed: Map<string, boolean>): void {\n if (snapshot.kind === `panel`) {\n weights.set(snapshot.id, snapshot.weight ?? 1);\n if (snapshot.collapsed !== undefined) {\n collapsed.set(snapshot.id, snapshot.collapsed);\n }\n } else if (snapshot.children) {\n for (const child of snapshot.children) {\n collectWeights(child, weights, collapsed);\n }\n }\n}\n\nexport function walk(group: GroupNode, visitor: (node: LayoutNode, path: number[]) => void): void {\n walkInner(group, [], visitor);\n}\n\nfunction walkInner(node: LayoutNode, path: number[], visitor: (node: LayoutNode, path: number[]) => void): void {\n visitor(node, path);\n\n if (node.kind === `group`) {\n for (let i = 0; i < node.children.length; i++) {\n walkInner(node.children[i], [...path, i], visitor);\n }\n }\n}\n","import { css, html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\n\n@customElement(`ixfx-split-panel`)\nexport class SplitPanelElement extends LitElement {\n @property({ type: String, reflect: true })\n id = ``;\n\n @property({ type: String })\n size = ``;\n\n @property({ type: String })\n weight = ``;\n\n @property({ type: String })\n fixed = ``;\n\n @property({ type: String })\n min = ``;\n\n @property({ type: String })\n max = ``;\n\n @property({ type: String, attribute: `when-small` })\n whenSmall = `prevent`;\n\n @property({ type: Boolean, reflect: true })\n collapsed = false;\n\n @property({ type: String })\n snap = ``;\n\n override render() {\n return html`<slot></slot>`;\n }\n\n static override styles = [\n themeFallbacks,\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n\n :host([collapsed]) {\n visibility: hidden;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-split-panel': SplitPanelElement;\n }\n}\n","import type { DragState } from './split-drag.js';\nimport type { Axis, GroupNode, LayoutSnapshot, PanelInfo, SplitChangeDetail, SplitCloseDetail, SplitCollapseDetail, SplitExpandDetail, SplitResizeDetail } from './types.js';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { themeFallbacks } from '../styles/fallbacks.js';\nimport { handleStyles } from '../styles/handle.js';\nimport { safeCustomElement as customElement } from '../util/custom-elements.js';\nimport { createDragMachine } from './split-drag.js';\nimport { applySnapshot, buildModel, distribute, normalise, toSnapshot, walk } from './split-model.js';\nimport './split-panel.js';\n\n@customElement(`ixfx-split-layout`)\nexport class SplitLayoutElement extends LitElement {\n @property({ type: String, reflect: true })\n direction: Axis = `row`;\n\n @property({ type: String })\n sizes = ``;\n\n @property({ type: String, attribute: `gutter-size` })\n gutterSize = ``;\n\n @property({ type: String })\n snap = ``;\n\n @state()\n private _model: GroupNode | null = null;\n\n @state()\n private _resizing = false;\n\n @query(`.grid`)\n private _groupEl?: HTMLElement;\n\n private _observer: MutationObserver | null = null;\n private _applyingOwnMutation = false;\n private _dragStructurallyChanged = false;\n private _dragMachine = createDragMachine({\n onDragStart: state => this._handleDragStart(state),\n onDragMove: (state, deltaX, deltaY) => this._handleDragMove(state, deltaX, deltaY),\n onDragEnd: state => this._handleDragEnd(state),\n distribute: (sizes, idx, delta, constraints) => {\n return distribute(sizes, idx, delta, constraints as any);\n },\n });\n\n override connectedCallback() {\n super.connectedCallback();\n this._setupObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n }\n\n override firstUpdated() {\n this._rebuildModel();\n }\n\n private _setupObserver() {\n this._observer = new MutationObserver(() => {\n if (!this._applyingOwnMutation) {\n Promise.resolve().then(() => this._rebuildModel());\n }\n });\n\n this._observer.observe(this, {\n childList: true,\n subtree: true,\n attributeFilter: [`size`, `weight`, `min`, `max`, `when-small`, `fixed`, `direction`, `collapsed`, `sizes`],\n });\n }\n\n private _rebuildModel() {\n // Named slots are always rendered as `panel-0`..`panel-(n-1)`, so every\n // light-DOM child must carry the matching `slot`. Re-assert this on every\n // rebuild: children may have been added (with a stale/ad-hoc slot name) or\n // removed since the model was last built, which would otherwise leave an\n // orphaned child projected nowhere and an empty grid track.\n this._reindexSlots();\n const model = buildModel(this);\n const normalized = normalise(model);\n this._model = normalized;\n this.requestUpdate();\n }\n\n get panels(): PanelInfo[] {\n if (!this._model)\n return [];\n\n const panels: PanelInfo[] = [];\n walk(this._model, (node, path) => {\n if (node.kind === `panel`) {\n panels.push({\n id: node.id,\n el: node.el,\n index: path[path.length - 1],\n path: path.join(`-`),\n weight: node.weight,\n collapsed: node.collapsed,\n min: node.minPx,\n max: node.maxPx,\n whenSmall: node.whenSmall,\n });\n }\n });\n return panels;\n }\n\n getLayout(): LayoutSnapshot | null {\n if (!this._model)\n return null;\n return toSnapshot(this._model);\n }\n\n setLayout(s: LayoutSnapshot): void {\n if (!this._model)\n return;\n this._applyingOwnMutation = true;\n this._model = applySnapshot(this._model, s);\n this.requestUpdate();\n this._applyingOwnMutation = false;\n this._emitChange();\n }\n\n getSizes(_groupId?: string): Record<string, number> {\n if (!this._model)\n return {};\n const result: Record<string, number> = {};\n if (this._model.children) {\n this._model.children.forEach((child) => {\n result[child.id] = child.weight;\n });\n }\n return result;\n }\n\n setSizes(weights: number[] | Record<string, number>, _groupId?: string): void {\n if (!this._model)\n return;\n\n this._applyingOwnMutation = true;\n\n if (Array.isArray(weights)) {\n this._model.children.forEach((child, i) => {\n if (i < weights.length) {\n child.weight = weights[i];\n }\n });\n } else {\n for (const [id, weight] of Object.entries(weights)) {\n const child = this._model.children.find(c => c.id === id);\n if (child) {\n child.weight = weight;\n }\n }\n }\n\n this._model = normalise(this._model);\n this.requestUpdate();\n this._applyingOwnMutation = false;\n this._emitResize();\n this._emitChange();\n }\n\n collapse(idOrEl: string | HTMLElement): void {\n this._setCollapsedState(idOrEl, true);\n }\n\n expand(idOrEl: string | HTMLElement): void {\n this._setCollapsedState(idOrEl, false);\n }\n\n toggle(idOrEl: string | HTMLElement): void {\n const panel = this._findPanel(idOrEl);\n if (panel) {\n this._setCollapsedState(panel.id, !panel.collapsed);\n }\n }\n\n closePanel(idOrEl: string | HTMLElement): boolean {\n const panel = this._findPanel(idOrEl);\n if (!panel)\n return false;\n\n const event = new CustomEvent<SplitCloseDetail>(`ixfx-split-close`, {\n detail: { id: panel.id, index: panel.index },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n\n this.dispatchEvent(event);\n if (event.defaultPrevented)\n return false;\n\n this._applyingOwnMutation = true;\n panel.el.remove();\n this._rebuildModel();\n // Discard the records for our own mutations: the observer callback runs in a\n // microtask, by which point the flag below is already cleared, so without\n // this it would schedule a redundant rebuild from the DOM.\n this._observer?.takeRecords();\n this._applyingOwnMutation = false;\n\n this._emitResize();\n this._emitChange();\n return true;\n }\n\n /**\n * Bounding rects of the gutter elements, in gutter index order. lets\n * callers (e.g. dock junction handles) hit-test gutters without reaching\n * into the shadow DOM.\n */\n getGutterRects(): DOMRect[] {\n const gutters = this.shadowRoot?.querySelectorAll<HTMLElement>(`.gutter`);\n if (gutters === undefined || gutters === null)\n return [];\n return Array.from(gutters, g => g.getBoundingClientRect());\n }\n\n /**\n * Programmatically begin dragging the gutter at `gutterIndex`, as if the\n * user had pressed on it at (`clientX`, `clientY`). The drag then follows\n * the pointer `pointerId` until pointerup, exactly like a native gutter\n * drag. Returns false when the index is out of range or the layout isn't\n * ready. Intended for composite resize affordances — e.g. a junction handle\n * that starts this drag alongside perpendicular drags on other layouts.\n */\n beginGutterDrag(gutterIndex: number, pointerId: number, clientX: number, clientY: number): boolean {\n if (!this._groupEl || !this._model)\n return false;\n if (gutterIndex < 0 || gutterIndex >= this._model.children.length - 1)\n return false;\n\n const { rect, trackSizes, constraints } = this._snapshotTracks();\n\n this._dragMachine.startGutterDrag(\n this._model.id,\n gutterIndex,\n pointerId,\n clientX,\n clientY,\n rect,\n trackSizes,\n constraints,\n );\n\n window.addEventListener(`pointermove`, this._onPointerMove);\n window.addEventListener(`pointerup`, this._onPointerUp);\n return true;\n }\n\n private _setCollapsedState(idOrEl: string | HTMLElement, collapsed: boolean, revealWeight?: number): void {\n const panel = this._findPanel(idOrEl);\n if (!panel || panel.collapsed === collapsed)\n return;\n\n this._applyingOwnMutation = true;\n\n if (collapsed) {\n panel.el.setAttribute(`collapsed`, ``);\n panel.el.setAttribute(`data-collapsed`, ``);\n } else {\n panel.el.removeAttribute(`collapsed`);\n panel.el.removeAttribute(`data-collapsed`);\n }\n\n this._rebuildModel();\n if (!collapsed && revealWeight !== undefined) {\n this._setFlexibleWeight(panel.id, revealWeight);\n }\n this.requestUpdate();\n // The observer callback runs in a microtask, after the flag below is\n // cleared; draining our own records stops it rebuilding from the DOM and\n // wiping the weights just set (e.g. the drag-to-reveal size).\n this._observer?.takeRecords();\n this._applyingOwnMutation = false;\n\n if (collapsed) {\n this.dispatchEvent(new CustomEvent<SplitCollapseDetail>(`ixfx-split-collapse`, {\n detail: { id: panel.id, index: panel.index },\n bubbles: true,\n composed: true,\n }));\n } else {\n this.dispatchEvent(new CustomEvent<SplitExpandDetail>(`ixfx-split-expand`, {\n detail: { id: panel.id, index: panel.index },\n bubbles: true,\n composed: true,\n }));\n }\n\n this._emitResize();\n this._emitChange();\n }\n\n // Force every direct child onto the slot the renderer expects for its\n // position (`panel-<domIndex>`). Callers may append children with any slot\n // name (or none), and removals leave gaps; this keeps projection in sync\n // with the `panel-0`..`panel-(n-1)` slots `render()` emits. `slot` is not in\n // the observer's attributeFilter, so this does not re-trigger a rebuild.\n private _reindexSlots(): void {\n Array.from(this.children).forEach((child, i) => {\n const name = `panel-${i}`;\n if (child.getAttribute(`slot`) !== name)\n child.setAttribute(`slot`, name);\n });\n }\n\n private _findPanel(idOrEl: string | HTMLElement): PanelInfo | undefined {\n const id = typeof idOrEl === `string` ? idOrEl : idOrEl.id;\n return this.panels.find(p => p.id === id);\n }\n\n // Give one flexible child a target share of the weighted flow, shrinking the\n // other flexible children proportionally to make room.\n private _setFlexibleWeight(id: string, weight: number): void {\n if (!this._model)\n return;\n\n const isFlexible = (c: GroupNode[`children`][number]) =>\n c.kind === `group` || (c.fixedPx === null && !c.collapsed);\n const flexible = this._model.children.filter(isFlexible);\n const target = flexible.find(c => c.id === id);\n if (!target)\n return;\n\n const t = Math.min(Math.max(weight, 0), 0.9);\n const others = flexible.filter(c => c !== target);\n const othersTotal = others.reduce((sum, c) => sum + c.weight, 0) || 1;\n const scale = (1 - t) / othersTotal;\n for (const c of others) {\n c.weight *= scale;\n }\n target.weight = t;\n\n this._model = normalise(this._model);\n }\n\n // Pixel drag distance past a collapsed panel's gutter before it re-expands.\n private _snapPx(): number {\n const fromProp = Number.parseFloat(this.snap);\n if (!Number.isNaN(fromProp))\n return fromProp;\n const fromVar = Number.parseFloat(getComputedStyle(this).getPropertyValue(`--split-snap`));\n return Number.isNaN(fromVar) ? 24 : fromVar;\n }\n\n private _collapsedPx(): number {\n const v = Number.parseFloat(getComputedStyle(this).getPropertyValue(`--split-collapsed-size`));\n return Number.isNaN(v) ? 0 : v;\n }\n\n private _handleDragStart(_state: DragState) {\n this._resizing = true;\n this._dragStructurallyChanged = false;\n this.setAttribute(`data-dragging`, ``);\n }\n\n private _handleDragMove(state: DragState, deltaX: number, deltaY: number) {\n if (!this._model)\n return;\n\n // A panel was closed/collapsed on an earlier frame of this drag. The\n // captured drag state (track sizes, constraints, gutter index) no longer\n // lines up with the model, so continuing would operate on the wrong\n // panels and cascade. Ignore further movement until the pointer is released.\n if (this._dragStructurallyChanged)\n return;\n\n const axis = this.direction;\n const delta = axis === `row` ? deltaX : deltaY;\n const gutterIndex = state.gutterIndex;\n\n // Dragging a gutter away from a collapsed neighbour re-expands it.\n // Collapsed panels are outside the normal size-distribution flow, so this\n // has to be handled before `distribute`. The panel stays hidden until the\n // drag has travelled far enough to reveal it at its `min` size (it may not\n // render well any smaller); without a `min`, the snap threshold is used.\n const growSide = delta > 0 ? gutterIndex : gutterIndex + 1;\n const growNeighbour = this._model.children[growSide];\n if (growNeighbour?.kind === `panel` && growNeighbour.collapsed) {\n const revealPx = growNeighbour.minPx > 0 ? growNeighbour.minPx : this._snapPx();\n if (Math.abs(delta) >= revealPx) {\n const axisPx = axis === `row` ? state.containerRect.width : state.containerRect.height;\n this._setCollapsedState(growNeighbour.id, false, axisPx > 0 ? revealPx / axisPx : undefined);\n // Re-anchor the drag to the current pointer position and the new layout\n // so the same gesture keeps growing the panel past its min size.\n this._reseedDragState(state, state.startPointerX + deltaX, state.startPointerY + deltaY);\n }\n return;\n }\n\n const constraints = state.minConstraints.map((min, i) => ({\n minPx: min,\n maxPx: state.maxConstraints[i],\n fixedPx: state.fixedConstraints[i],\n whenSmall: state.whenSmallConstraints[i] as any,\n }));\n\n const result = distribute(\n state.trackSizes,\n gutterIndex,\n delta,\n constraints,\n );\n\n const totalSize = state.trackSizes.reduce((a, b) => a + b, 0);\n result.sizesPx.forEach((size, i) => {\n const child = this._model!.children[i];\n if (child && child.kind === `panel`) {\n child.weight = size / totalSize;\n }\n });\n\n if (result.belowMin.length > 0) {\n let processed = false;\n for (const idx of result.belowMin) {\n if (processed)\n break;\n const child = this._model!.children[idx];\n if (child && child.kind === `panel`) {\n const whenSmall = child.whenSmall;\n if (whenSmall === `collapse` && !child.collapsed) {\n this._setCollapsedState(child.id, true);\n processed = true;\n this._dragStructurallyChanged = true;\n } else if (whenSmall === `close`) {\n this.closePanel(child.id);\n processed = true;\n this._dragStructurallyChanged = true;\n }\n }\n }\n }\n\n this._model = normalise(this._model);\n this.requestUpdate();\n }\n\n private _handleDragEnd(_state: DragState) {\n this._resizing = false;\n this.removeAttribute(`data-dragging`);\n this._emitResize();\n this._emitChange();\n }\n\n // Snapshot of the current gutter geometry, used to seed (and mid-drag\n // re-seed) the drag machine. Collapsed / fixed panels sit outside the\n // weighted flow, so their raw `weight` is meaningless — use their real\n // rendered track size instead.\n private _snapshotTracks() {\n const rect = this._groupEl!.getBoundingClientRect();\n const axisSize = this.direction === `row` ? rect.width : rect.height;\n const collapsedPx = this._collapsedPx();\n const children = this._model!.children;\n\n const trackSizes = children.map((c) => {\n if (c.kind === `panel` && c.collapsed)\n return collapsedPx;\n if (c.kind === `panel` && c.fixedPx !== null)\n return c.fixedPx;\n return c.weight * axisSize;\n });\n const constraints = children.map((c) => {\n if (c.kind === `panel`) {\n return { minPx: c.minPx, maxPx: c.maxPx, fixedPx: c.fixedPx, whenSmall: c.whenSmall };\n }\n return { minPx: 0, maxPx: null as number | null, fixedPx: null as number | null, whenSmall: `prevent` as const };\n });\n\n return { rect, trackSizes, constraints };\n }\n\n private _reseedDragState(state: DragState, pointerX: number, pointerY: number): void {\n if (!this._groupEl || !this._model)\n return;\n\n const { rect, trackSizes, constraints } = this._snapshotTracks();\n state.startPointerX = pointerX;\n state.startPointerY = pointerY;\n state.containerRect = rect;\n state.trackSizes = trackSizes;\n state.minConstraints = constraints.map(c => c.minPx);\n state.maxConstraints = constraints.map(c => c.maxPx);\n state.fixedConstraints = constraints.map(c => c.fixedPx);\n state.whenSmallConstraints = constraints.map(c => c.whenSmall);\n }\n\n private _onGutterPointerDown = (e: PointerEvent, groupId: string, gutterIndex: number) => {\n e.preventDefault();\n if (!this._groupEl || !this._model)\n return;\n\n const { rect, trackSizes, constraints } = this._snapshotTracks();\n\n this._dragMachine.startGutterDrag(\n groupId,\n gutterIndex,\n e.pointerId,\n e.clientX,\n e.clientY,\n rect,\n trackSizes,\n constraints,\n );\n\n window.addEventListener(`pointermove`, this._onPointerMove);\n window.addEventListener(`pointerup`, this._onPointerUp);\n };\n\n private _onPointerMove = (e: PointerEvent) => {\n this._dragMachine.move(e);\n };\n\n private _onPointerUp = (e: PointerEvent) => {\n this._dragMachine.end(e);\n window.removeEventListener(`pointermove`, this._onPointerMove);\n window.removeEventListener(`pointerup`, this._onPointerUp);\n };\n\n private _emitResize() {\n if (!this._model)\n return;\n const detail: SplitResizeDetail = {\n sizes: this.getSizes(),\n groupId: this._model.id,\n };\n this.dispatchEvent(new CustomEvent<SplitResizeDetail>(`ixfx-split-resize`, {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n private _emitChange() {\n const layout = this.getLayout();\n if (!layout)\n return;\n const detail: SplitChangeDetail = { layout };\n this.dispatchEvent(new CustomEvent<SplitChangeDetail>(`ixfx-split-change`, {\n detail,\n bubbles: true,\n composed: true,\n }));\n }\n\n protected override render() {\n if (!this._model)\n return nothing;\n\n const isRow = this._model.axis === `row`;\n const trackSizes = this._resolveTracks(this._model);\n\n const cssVars = this._model.children.map((child, i) => {\n return `--s${i}: ${child.weight * 100}%`;\n }).join(`; `);\n\n const gridStyle = isRow\n ? `grid-template-columns: ${trackSizes}; grid-template-rows: 1fr; ${cssVars}`\n : `grid-template-rows: ${trackSizes}; grid-template-columns: 1fr; ${cssVars}`;\n\n return html`\n <div class=\"grid\" style=\"${gridStyle}\">\n ${this._model.children.map((_, i) => html`\n <div part=\"panel\" style=\"grid-column: ${isRow ? i * 2 + 1 : 1}; grid-row: ${isRow ? 1 : i * 2 + 1}; display: flex; flex-direction: ${isRow ? `row` : `column`}; overflow: hidden;\">\n <slot name=\"panel-${i}\"></slot>\n </div>\n `)}\n ${this._model.children.slice(0, -1).map((_, i) => this._renderGutter(this._model!.id, i, isRow))}\n </div>\n `;\n }\n\n private _getTrackSizes(count: number): string[] {\n const sizes: string[] = [];\n for (let i = 0; i < count; i++) {\n sizes.push(`var(--s${i}, 1fr)`);\n }\n return sizes;\n }\n\n private _resolveTracks(model: GroupNode): string {\n const _isRow = model.axis === `row`;\n const parts: string[] = [];\n const gutterSize = `var(--split-gutter-size, 6px)`;\n\n for (let i = 0; i < model.children.length; i++) {\n const child = model.children[i];\n let track: string;\n\n if (child.kind === `panel`) {\n if (child.collapsed) {\n track = `var(--split-collapsed-size, 0px)`;\n } else if (child.fixedPx !== null) {\n track = `${child.fixedPx}px`;\n } else {\n const min = child.minPx > 0 ? `${child.minPx}px` : `0px`;\n track = `minmax(${min}, var(--s${i}, 1fr))`;\n }\n } else {\n track = `minmax(0, var(--s${i}, 1fr))`;\n }\n\n parts.push(track);\n\n if (i < model.children.length - 1) {\n parts.push(gutterSize);\n }\n }\n\n return parts.join(` `);\n }\n\n private _renderGutter(groupId: string, index: number, isRow: boolean) {\n const cursor = isRow ? `ew-resize` : `ns-resize`;\n const gridColumn = isRow ? `${(index + 1) * 2}` : `1`;\n const gridRow = isRow ? `1` : `${(index + 1) * 2}`;\n\n return html`\n <div\n class=\"gutter\"\n data-group=\"${groupId}\"\n data-index=\"${index}\"\n style=\"cursor: ${cursor}; grid-column: ${gridColumn}; grid-row: ${gridRow};\"\n @pointerdown=${(e: PointerEvent) => this._onGutterPointerDown(e, groupId, index)}\n >\n <span\n class=\"ixfx-handle\"\n part=\"grip\"\n data-handle=\"dimpled\"\n data-shape=${isRow ? `vertical` : `horizontal`}\n ></span>\n </div>\n `;\n }\n\n static override styles = [\n themeFallbacks,\n handleStyles,\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n --split-gutter-size: 6px;\n --split-gutter-color: transparent;\n --split-gutter-hover-color: var(--surface-6);\n --split-gutter-active-color: var(--accent);\n --split-collapsed-size: 0px;\n --split-snap: 24px;\n\n /* Gutter grip — shared handle primitive (docs/infra-handle.md). */\n --ixfx-handle-length: 16px;\n --ixfx-handle-thickness: 8px;\n }\n\n * {\n box-sizing: border-box;\n }\n\n .grid {\n display: grid;\n width: 100%;\n height: 100%;\n }\n\n .grid slot {\n display: block;\n min-width: 0;\n min-height: 0;\n width: 100%;\n height: 100%;\n }\n\n ::part(panel) {\n width: 100%;\n height: 100%;\n }\n\n .gutter {\n z-index: 2;\n background: var(--split-gutter-color);\n transition: background-color var(--transition, 0.2s);\n pointer-events: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n :host([direction=\"row\"]) .gutter {\n width: var(--split-gutter-size);\n cursor: ew-resize;\n min-height: 100%;\n }\n\n :host([direction=\"column\"]) .gutter {\n height: var(--split-gutter-size);\n cursor: ns-resize;\n min-width: 100%;\n }\n\n .gutter:hover,\n .gutter[data-active] {\n background: var(--split-gutter-hover-color);\n }\n\n :host([data-dragging]) .gutter {\n background: var(--split-gutter-active-color);\n }\n\n :host([data-dragging]) * {\n transition: none !important;\n user-select: none;\n }\n\n :host([data-dragging]) .gutter .ixfx-handle {\n display: none;\n }\n\n :host(:not([data-dragging])) .gutter:hover .ixfx-handle {\n display: none;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ixfx-split-layout': SplitLayoutElement;\n }\n\n interface HTMLElementEventMap {\n 'ixfx-split-resize': CustomEvent<SplitResizeDetail>;\n 'ixfx-split-collapse': CustomEvent<SplitCollapseDetail>;\n 'ixfx-split-expand': CustomEvent<SplitExpandDetail>;\n 'ixfx-split-close': CustomEvent<SplitCloseDetail>;\n 'ixfx-split-change': CustomEvent<SplitChangeDetail>;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-layout-JK3xWVX2.d.ts","names":[],"sources":["../src/split-layout/types.ts","../src/split-layout/split-panel.ts","../src/split-layout/split-layout.ts"],"mappings":";;KAAY;KAEA;UAEK;EACf;EACA;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;;UAGe;EACf;EACA;EACA,IAAI;EACJ,MAAM;EACN,UAAU;EACV;EACA;;KAGU,aAAa,YAAY;UAEpB;EACf;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf;EACA,MAAM;;UAGS;EACf;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf,OAAO;EACP;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,qBAAqB,YAAY;UAE5B;EACf;EACA;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,kBAAkB,YAAY;UAEzB;EACf,QAAQ;;KAGE,mBAAmB,YAAY;UAE1B;EACf,qBAAqB;EACrB,uBAAuB;EACvB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;;;;cCvFV,0BAA0B;EAErC;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAES,wBAAM;SAIC,sBAAM;;QAiBhB;YACI;IACR,oBAAoB;;;;;
|
|
1
|
+
{"version":3,"file":"split-layout-JK3xWVX2.d.ts","names":[],"sources":["../src/split-layout/types.ts","../src/split-layout/split-panel.ts","../src/split-layout/split-layout.ts"],"mappings":";;KAAY;KAEA;UAEK;EACf;EACA;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;;UAGe;EACf;EACA;EACA,IAAI;EACJ,MAAM;EACN,UAAU;EACV;EACA;;KAGU,aAAa,YAAY;UAEpB;EACf;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf;EACA,MAAM;;UAGS;EACf;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf,OAAO;EACP;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,qBAAqB,YAAY;UAE5B;EACf;EACA;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,kBAAkB,YAAY;UAEzB;EACf,QAAQ;;KAGE,mBAAmB,YAAY;UAE1B;EACf,qBAAqB;EACrB,uBAAuB;EACvB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;;;;cCvFV,0BAA0B;EAErC;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAES,wBAAM;SAIC,sBAAM;;QAiBhB;YACI;IACR,oBAAoB;;;;;cC7CX,2BAA2B;EAEtC,WAAW;EAGX;EAGA;EAGA;UAGQ;UAGA;UAGA;UAEA;UACA;UACA;UACA;EASC;EAKA;EAKA;UAID;UAcA;MAaJ,UAAU;EAuBd,aAAa;EAMb,UAAU,GAAG;EAUb,SAAS,oBAAoB;EAY7B,SAAS,oBAAoB,wBAAwB;EA4BrD,SAAS,iBAAiB;EAI1B,OAAO,iBAAiB;EAIxB,OAAO,iBAAiB;EAOxB,WAAW,iBAAiB;;;;;;EAmC5B,kBAAkB;;;;;;;;;EAelB,gBAAgB,qBAAqB,mBAAmB,iBAAiB;UAwBjE;UAiDA;UAQA;UAOA;UAwBA;UAQA;UAKA;UAMA;UAiFA;UAWA;UAuBA;UAeA;UAsBA;UAIA;UAMA;UAcA;YAYW,iBAAM,wBAAA;UA2BjB;UAQA;UAgCA;SAuBQ,sBAAM;;QA0FhB;YACI;IACR,qBAAqB;;YAGb;IACR,qBAAqB,YAAY;IACjC,uBAAuB,YAAY;IACnC,qBAAqB,YAAY;IACjC,oBAAoB,YAAY;IAChC,qBAAqB,YAAY"}
|
package/dist/split-layout.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SplitLayoutElement } from "./split-layout-
|
|
1
|
+
import { t as SplitLayoutElement } from "./split-layout-CA5jbNbG.js";
|
|
2
2
|
export { SplitLayoutElement };
|
package/dist/swipe.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as themeFallbacks } from "./fallbacks-
|
|
1
|
+
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
2
2
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
3
3
|
import { t as prominenceStyles } from "./prominence-DlFShic3.js";
|
|
4
4
|
import { t as WheelNudgeMixin } from "./wheel-nudge-D5rmht3v.js";
|
package/dist/tabs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as themeFallbacks } from "./fallbacks-
|
|
1
|
+
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
2
2
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
3
3
|
import { t as scrollFadeStyles } from "./scroll-fade-CAs1EabA.js";
|
|
4
4
|
import { t as createDragGhost } from "./drag-ghost-DtSDvjri.js";
|
|
@@ -58,6 +58,14 @@ type TickledControllerConfig<T> = {
|
|
|
58
58
|
* Optional initial input mode (defaults to 'mouse')
|
|
59
59
|
*/
|
|
60
60
|
initialInputMode?: InputMode;
|
|
61
|
+
/**
|
|
62
|
+
* When this returns `true`, pointer hover no longer drives the cursor:
|
|
63
|
+
* `handlePointerEnter` / `handlePointerLeave` become no-ops and hover never
|
|
64
|
+
* switches the input mode to `mouse`. Keyboard navigation, programmatic
|
|
65
|
+
* `focus()` / `setTickled()`, and click handling are unaffected. Read on every
|
|
66
|
+
* hover event, so a host can flip it via a reactive property. Default: `false`.
|
|
67
|
+
*/
|
|
68
|
+
hoverDisabled?: () => boolean;
|
|
61
69
|
/**
|
|
62
70
|
* Whether keyboard navigation wraps from last to first and vice versa.
|
|
63
71
|
* - 'stop' (default): navigation stops at the boundary
|
|
@@ -125,6 +133,7 @@ declare class TickledController<T = number> implements ReactiveController {
|
|
|
125
133
|
private config;
|
|
126
134
|
private _tickledId;
|
|
127
135
|
private _inputMode;
|
|
136
|
+
private hoverDisabled;
|
|
128
137
|
private static _lastMouseClientX;
|
|
129
138
|
private static _lastMouseClientY;
|
|
130
139
|
private static _mouseMovedSinceKeyboard;
|
|
@@ -205,4 +214,4 @@ declare class TickledController<T = number> implements ReactiveController {
|
|
|
205
214
|
}
|
|
206
215
|
//#endregion
|
|
207
216
|
export { TickledItem as i, TickledController as n, TickledControllerConfig as r, InputMode as t };
|
|
208
|
-
//# sourceMappingURL=tickled-controller-
|
|
217
|
+
//# sourceMappingURL=tickled-controller-C1ZsHpyg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickled-controller-C1ZsHpyg.d.ts","names":[],"sources":["../src/interaction/tickled-controller.ts"],"mappings":";;;;;KAKY,YAAY;;;;WAIb,IAAI;;;;WAKJ;;;;;KAMC;;;;KAKA,wBAAwB;;;;EAIlC,gBAAgB,cAAc,YAAY;;;;;;EAO1C,YAAY,IAAI;;;;;;;;;;;;;;;;;;;;;;;EAwBhB;;;;EAKA,mBAAmB;;;;;;;;EASnB;;;;;;EAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA0DW,kBAAkB,uBAAuB;UAC5C;UACA;UACA;UACA;UACA;iBAEO;iBACA;iBACA;iBACA;0BAES;EAIZ,YAAA,MAAM,wBAAwB,QAAQ,wBAAwB;EAQ1E;EAOA;;;;MAUI,aAAa;;;;MAOb,aAAa;;;;;MAQb,WAAW;;;;;;EASf,MAAM,IAAI;;;;EAOV,UAAU,IAAI;;;;;;iBASC;;;;;aAiBJ;;;;;;EASX,mBAAmB,IAAI;;;;;;EAqCvB,mBAAmB,IAAI;;;;;;;EAevB,yBAAyB,oDAAoD;;;;;EAkE7E,WAAW,IAAI;;;;;;EAmBf;;;;;EAmBA,aAAa,MAAM"}
|
|
@@ -77,6 +77,7 @@ var TickledController = class TickledController {
|
|
|
77
77
|
this.host = host;
|
|
78
78
|
this.config = config;
|
|
79
79
|
this._inputMode = config.initialInputMode ?? `mouse`;
|
|
80
|
+
this.hoverDisabled = config.hoverDisabled ?? (() => false);
|
|
80
81
|
host.addController(this);
|
|
81
82
|
}
|
|
82
83
|
hostConnected() {
|
|
@@ -145,6 +146,7 @@ var TickledController = class TickledController {
|
|
|
145
146
|
* Switches to mouse mode and tickles the item.
|
|
146
147
|
*/
|
|
147
148
|
handlePointerEnter(id) {
|
|
149
|
+
if (this.hoverDisabled()) return;
|
|
148
150
|
if (!TickledController._mouseMovedSinceKeyboard) return;
|
|
149
151
|
const item = this.config.getItems().find((item) => item.id === id);
|
|
150
152
|
if (item && item.enabled === false) return;
|
|
@@ -162,6 +164,7 @@ var TickledController = class TickledController {
|
|
|
162
164
|
* @param _e The pointer event (not used, but kept for API compatibility)
|
|
163
165
|
*/
|
|
164
166
|
handlePointerLeave(_e) {
|
|
167
|
+
if (this.hoverDisabled()) return;
|
|
165
168
|
if (TickledController._mouseMovedSinceKeyboard) this.clearTickled();
|
|
166
169
|
}
|
|
167
170
|
/**
|
|
@@ -243,4 +246,4 @@ var TickledController = class TickledController {
|
|
|
243
246
|
//#endregion
|
|
244
247
|
export { TickledController as t };
|
|
245
248
|
|
|
246
|
-
//# sourceMappingURL=tickled-controller-
|
|
249
|
+
//# sourceMappingURL=tickled-controller-Dh1Uh_vG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickled-controller-Dh1Uh_vG.js","names":[],"sources":["../src/interaction/tickled-controller.ts"],"sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from 'lit';\n\n/**\n * Represents an item that can be tickled (highlighted via hover or keyboard navigation)\n */\nexport type TickledItem<T = unknown> = {\n /**\n * Unique identifier for the item (e.g., index, id, path)\n */\n readonly id: T;\n\n /**\n * Whether the item is currently enabled/interactive\n */\n readonly enabled?: boolean;\n};\n\n/**\n * Input mode determines which mechanism controls the tickled state\n */\nexport type InputMode = `keyboard` | `mouse`;\n\n/**\n * Configuration for TickledController\n */\nexport type TickledControllerConfig<T> = {\n /**\n * Function to retrieve all items that can be tickled\n */\n getItems: () => ReadonlyArray<TickledItem<T>>;\n\n /**\n * Optional callback when an item becomes tickled\n * Use this for side effects like opening submenus\n * @param id - The id of the newly tickled item, or undefined if nothing is tickled\n */\n onTickle?: (id: T | undefined) => void;\n\n /**\n * Optional callback fired after any state change (tickled id or input mode)\n * Use this to sync DOM attributes for slotted content that can't use reactive rendering\n *\n * For components that render items directly, this is usually not needed as\n * Lit's reactive rendering will handle updates automatically via requestUpdate()\n *\n * @example\n * ```ts\n * onStateChange: () => {\n * // Sync data-tickled attributes for slotted items\n * const items = this.getItems();\n * items.forEach((item, i) => {\n * if (this.tickled.isTickled(i)) {\n * item.setAttribute('data-tickled', '');\n * } else {\n * item.removeAttribute('data-tickled');\n * }\n * });\n * }\n * ```\n */\n onStateChange?: () => void;\n\n /**\n * Optional initial input mode (defaults to 'mouse')\n */\n initialInputMode?: InputMode;\n\n /**\n * When this returns `true`, pointer hover no longer drives the cursor:\n * `handlePointerEnter` / `handlePointerLeave` become no-ops and hover never\n * switches the input mode to `mouse`. Keyboard navigation, programmatic\n * `focus()` / `setTickled()`, and click handling are unaffected. Read on every\n * hover event, so a host can flip it via a reactive property. Default: `false`.\n */\n hoverDisabled?: () => boolean;\n\n /**\n * Whether keyboard navigation wraps from last to first and vice versa.\n * - 'stop' (default): navigation stops at the boundary\n * - 'wrap': navigation wraps around\n */\n itemWrap?: `stop` | `wrap`;\n};\n\n/**\n * ReactiveController that manages \"tickled\" state for interactive lists.\n *\n * A \"tickled\" item is one that is under active attention via hover (mouse mode)\n * or keyboard focus (keyboard mode). Only one item can be tickled at a time.\n *\n * The input mode determines which mechanism controls tickled state:\n * - Mouse mode: hover controls tickled, keyboard navigation ignored\n * - Keyboard mode: keyboard navigation controls tickled, hover ignored\n *\n * Last interaction wins - any mouse hover switches to mouse mode, any keyboard\n * navigation switches to keyboard mode.\n *\n * ## Global Mouse Tracking\n *\n * This controller uses a single, ref-counted global `pointermove` listener (shared\n * across all instances) to track actual mouse movement. This prevents `pointerenter`\n * events caused by content scrolling from incorrectly switching to mouse mode when\n * the user is actually using keyboard navigation. The listener is attached when the\n * first host connects and removed once the last host disconnects.\n *\n * @example\n * ```ts\n * class MyList extends LitElement {\n * private tickled = new TickledController(this, {\n * getItems: () => this.items.map((item, i) => ({ id: i, enabled: !item.disabled })),\n * onTickle: (id) => {\n * // Optional: perform side effect when item is tickled\n * console.log('Tickled item:', id);\n * }\n * });\n *\n * render() {\n * return html`\n * <ul @pointerleave=${(e) => this.tickled.handlePointerLeave(e)}>\n * ${this.items.map((item, i) => html`\n * <li\n * class=\"item ${this.tickled.isTickled(i) ? 'tickled' : ''}\"\n * @pointerenter=${() => this.tickled.handlePointerEnter(i)}\n * >${item.label}</li>\n * `)}\n * </ul>\n * `;\n * }\n *\n * private handleKeyDown(e: KeyboardEvent) {\n * if (e.key === 'ArrowDown') {\n * this.tickled.handleKeyboardNavigation('next');\n * } else if (e.key === 'ArrowUp') {\n * this.tickled.handleKeyboardNavigation('previous');\n * }\n * }\n * }\n * ```\n */\nexport class TickledController<T = number> implements ReactiveController {\n private host: ReactiveControllerHost;\n private config: TickledControllerConfig<T>;\n private _tickledId: T | undefined = undefined;\n private _inputMode: InputMode;\n private hoverDisabled: () => boolean;\n\n private static _lastMouseClientX: number = Number.NaN;\n private static _lastMouseClientY: number = Number.NaN;\n private static _mouseMovedSinceKeyboard: boolean = true;\n private static _listenerRefCount: number = 0;\n\n private static readonly _onGlobalPointerMove = (e: PointerEvent): void => {\n TickledController.handleGlobalPointerMove(e.clientX, e.clientY);\n };\n\n constructor(host: ReactiveControllerHost, config: TickledControllerConfig<T>) {\n this.host = host;\n this.config = config;\n this._inputMode = config.initialInputMode ?? `mouse`;\n this.hoverDisabled = config.hoverDisabled ?? (() => false);\n host.addController(this);\n }\n\n hostConnected(): void {\n if (TickledController._listenerRefCount === 0) {\n document.addEventListener(`pointermove`, TickledController._onGlobalPointerMove, { passive: true });\n }\n TickledController._listenerRefCount++;\n }\n\n hostDisconnected(): void {\n TickledController._listenerRefCount--;\n if (TickledController._listenerRefCount === 0) {\n document.removeEventListener(`pointermove`, TickledController._onGlobalPointerMove);\n }\n }\n\n /**\n * Get the current input mode\n */\n get inputMode(): InputMode {\n return this._inputMode;\n }\n\n /**\n * Get the currently tickled item id\n */\n get tickledId(): T | undefined {\n return this._tickledId;\n }\n\n /**\n * The item currently under the cursor, or `undefined`. Alias of `tickledId`\n * for parity with other controllers.\n */\n get current(): T | undefined {\n return this._tickledId;\n }\n\n /**\n * Move the cursor programmatically (e.g. to reveal a match or re-seat it\n * after the item set changed). Does not change the input mode. Alias of\n * `setTickled`.\n */\n focus(id: T | undefined): void {\n this.setTickled(id);\n }\n\n /**\n * Check if a specific item is tickled\n */\n isTickled(id: T): boolean {\n return this._tickledId === id;\n }\n\n /**\n * Handle global pointer move event.\n * Called automatically by the global listener.\n * Tracks mouse movement to distinguish real hover from content scrolling.\n */\n private static handleGlobalPointerMove(clientX: number, clientY: number): void {\n if (!Number.isNaN(TickledController._lastMouseClientX)) {\n if (\n clientX !== TickledController._lastMouseClientX\n || clientY !== TickledController._lastMouseClientY\n ) {\n TickledController._mouseMovedSinceKeyboard = true;\n }\n }\n TickledController._lastMouseClientX = clientX;\n TickledController._lastMouseClientY = clientY;\n }\n\n /**\n * Check if actual mouse movement has occurred since last keyboard interaction.\n * Used to distinguish real hover/leave from content-scrolling-induced events.\n */\n static get hasMouseMovedSinceKeyboard(): boolean {\n return TickledController._mouseMovedSinceKeyboard;\n }\n\n /**\n * Handle pointer enter event on an item (mouse hover).\n * Only processes if actual mouse movement is detected (not content scrolling).\n * Switches to mouse mode and tickles the item.\n */\n handlePointerEnter(id: T): void {\n if (this.hoverDisabled()) {\n return;\n }\n\n if (!TickledController._mouseMovedSinceKeyboard) {\n return;\n }\n\n const items = this.config.getItems();\n const item = items.find(item => item.id === id);\n if (item && item.enabled === false) {\n return;\n }\n\n const modeChanged = this._inputMode !== `mouse`;\n this._inputMode = `mouse`;\n\n const previousId = this._tickledId;\n this._tickledId = id;\n\n this.host.requestUpdate();\n\n if (previousId !== id && this.config.onTickle) {\n this.config.onTickle(id);\n }\n\n if ((previousId !== id || modeChanged) && this.config.onStateChange) {\n this.config.onStateChange();\n }\n }\n\n /**\n * Handle pointer leave event on an item.\n * Only clears tickled state if actual mouse movement is detected.\n * @param _e The pointer event (not used, but kept for API compatibility)\n */\n handlePointerLeave(_e: PointerEvent): void {\n if (this.hoverDisabled()) {\n return;\n }\n if (TickledController._mouseMovedSinceKeyboard) {\n this.clearTickled();\n }\n }\n\n /**\n * Handle keyboard navigation.\n * Switches to keyboard mode and moves tickled state.\n *\n * @param direction - 'next', 'previous', 'first', 'last', or specific id\n */\n handleKeyboardNavigation(direction: `next` | `previous` | `first` | `last` | T): void {\n const modeChanged = this._inputMode !== `keyboard`;\n this._inputMode = `keyboard`;\n\n const items = this.config.getItems();\n const enabledItems = items.filter(item => item.enabled !== false);\n\n if (enabledItems.length === 0) {\n return;\n }\n\n let newId: T | undefined;\n\n if (direction === `first`) {\n newId = enabledItems[0].id;\n } else if (direction === `last`) {\n newId = enabledItems.at(-1)?.id;\n } else if (direction === `next` || direction === `previous`) {\n const currentIndex = enabledItems.findIndex(item => item.id === this._tickledId);\n const wrap = this.config.itemWrap === `wrap`;\n\n if (currentIndex === -1) {\n newId = direction === `next` ? enabledItems[0].id : enabledItems.at(-1)?.id;\n } else {\n const delta = direction === `next` ? 1 : -1;\n let newIndex = currentIndex + delta;\n\n if (newIndex >= 0 && newIndex < enabledItems.length) {\n newId = enabledItems[newIndex].id;\n } else if (wrap) {\n // Wrap around\n if (newIndex < 0) {\n newIndex = enabledItems.length - 1;\n } else {\n newIndex = 0;\n }\n newId = enabledItems[newIndex].id;\n }\n // If newIndex is out of bounds and wrap is disabled, keep current tickled item\n }\n } else {\n const item = enabledItems.find(item => item.id === direction);\n if (item) {\n newId = item.id;\n }\n }\n\n if (newId !== undefined) {\n const previousId = this._tickledId;\n this._tickledId = newId;\n this.host.requestUpdate();\n\n if (previousId !== newId && this.config.onTickle) {\n this.config.onTickle(newId);\n }\n\n if ((previousId !== newId || modeChanged) && this.config.onStateChange) {\n this.config.onStateChange();\n }\n }\n }\n\n /**\n * Manually set the tickled item (useful for programmatic control).\n * Does NOT change input mode.\n */\n setTickled(id: T | undefined): void {\n const previousId = this._tickledId;\n this._tickledId = id;\n this.host.requestUpdate();\n\n if (previousId !== id && this.config.onTickle) {\n this.config.onTickle(id);\n }\n\n if (previousId !== id && this.config.onStateChange) {\n this.config.onStateChange();\n }\n }\n\n /**\n * Clear the tickled state (e.g., on pointer leave).\n * Note: For pointer leave events, prefer using handlePointerLeave() which\n * checks for actual mouse movement.\n */\n clearTickled(): void {\n if (this._tickledId !== undefined) {\n this._tickledId = undefined;\n this.host.requestUpdate();\n\n if (this.config.onTickle) {\n this.config.onTickle(undefined);\n }\n\n if (this.config.onStateChange) {\n this.config.onStateChange();\n }\n }\n }\n\n /**\n * Manually set the input mode.\n * When switching to keyboard mode, resets the mouse movement tracking.\n */\n setInputMode(mode: InputMode): void {\n if (this._inputMode !== mode) {\n this._inputMode = mode;\n this.host.requestUpdate();\n\n if (mode === `keyboard`) {\n TickledController._mouseMovedSinceKeyboard = false;\n }\n\n if (this.config.onStateChange) {\n this.config.onStateChange();\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
1
2
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
3
|
+
import { t as handleStyles } from "./handle-BPOxBOKf.js";
|
|
2
4
|
import { LitElement, css, html, nothing } from "lit";
|
|
3
5
|
import { property, state } from "lit/decorators.js";
|
|
4
6
|
import "@clinth/vcanvas";
|
|
@@ -890,7 +892,10 @@ let TimelineTrackTabElement = class TimelineTrackTabElement extends LitElement {
|
|
|
890
892
|
};
|
|
891
893
|
}
|
|
892
894
|
static {
|
|
893
|
-
this.styles =
|
|
895
|
+
this.styles = [
|
|
896
|
+
themeFallbacks,
|
|
897
|
+
handleStyles,
|
|
898
|
+
css`
|
|
894
899
|
:host {
|
|
895
900
|
display: flex;
|
|
896
901
|
align-items: center;
|
|
@@ -917,13 +922,13 @@ let TimelineTrackTabElement = class TimelineTrackTabElement extends LitElement {
|
|
|
917
922
|
.handle {
|
|
918
923
|
display: none;
|
|
919
924
|
cursor: grab;
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
925
|
+
margin: 0 4px;
|
|
926
|
+
--ixfx-handle-spot-size: 12px;
|
|
927
|
+
--ixfx-handle-dot-size: 3px;
|
|
923
928
|
}
|
|
924
929
|
|
|
925
930
|
:host([reorderable]) .handle {
|
|
926
|
-
display: block;
|
|
931
|
+
display: inline-block;
|
|
927
932
|
}
|
|
928
933
|
|
|
929
934
|
.label {
|
|
@@ -932,7 +937,8 @@ let TimelineTrackTabElement = class TimelineTrackTabElement extends LitElement {
|
|
|
932
937
|
text-overflow: ellipsis;
|
|
933
938
|
padding: 0 8px;
|
|
934
939
|
}
|
|
935
|
-
|
|
940
|
+
`
|
|
941
|
+
];
|
|
936
942
|
}
|
|
937
943
|
#dragging;
|
|
938
944
|
#startScreenY;
|
|
@@ -957,7 +963,7 @@ let TimelineTrackTabElement = class TimelineTrackTabElement extends LitElement {
|
|
|
957
963
|
}
|
|
958
964
|
render() {
|
|
959
965
|
return html`
|
|
960
|
-
<span class="handle"
|
|
966
|
+
<span class="handle ixfx-handle" data-handle="dotted" data-shape="spot" part="handle"></span>
|
|
961
967
|
<span class="label">${this.label}</span>
|
|
962
968
|
`;
|
|
963
969
|
}
|
|
@@ -1749,4 +1755,4 @@ IxfxTimelineElement = __decorate([safeCustomElement(`ixfx-timeline`)], IxfxTimel
|
|
|
1749
1755
|
//#endregion
|
|
1750
1756
|
export { resolveCssVars as a, attachTimelineInteractions as i, TimelineTrackTabElement as n, resolveGrid as o, timelineStyles as r, TimelineController as s, IxfxTimelineElement as t };
|
|
1751
1757
|
|
|
1752
|
-
//# sourceMappingURL=timeline-
|
|
1758
|
+
//# sourceMappingURL=timeline-THyvH8xy.js.map
|