@ixfx/components 0.10.7 → 0.11.0
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 +552 -1172
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +2113 -1402
- package/bundle/index.js.map +1 -1
- package/dist/crumbs.d.ts +2 -2
- package/dist/{data-grid-BDNjQv3Q.d.ts → data-grid-BWrtE8H9.d.ts} +4 -4
- package/dist/{data-grid-BDNjQv3Q.d.ts.map → data-grid-BWrtE8H9.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +2 -2
- package/dist/{detail-list-BdLuOwQj.d.ts → detail-list-DxQZkK-C.d.ts} +4 -4
- package/dist/{detail-list-BdLuOwQj.d.ts.map → detail-list-DxQZkK-C.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +3 -3
- package/dist/{grid-list-DyphX9Fv.d.ts → grid-list-ChgYpUUq.d.ts} +4 -4
- package/dist/{grid-list-DyphX9Fv.d.ts.map → grid-list-ChgYpUUq.d.ts.map} +1 -1
- package/dist/grid-list.d.ts +2 -2
- package/dist/incr-search.d.ts +1 -1
- package/dist/{index-BXafRK-_.d.ts → index-CHbuPyLL.d.ts} +3 -3
- package/dist/{index-BXafRK-_.d.ts.map → index-CHbuPyLL.d.ts.map} +1 -1
- package/dist/{index-C59-JEPl.d.ts → index-PjiaGpA5.d.ts} +2 -2
- package/dist/{index-C59-JEPl.d.ts.map → index-PjiaGpA5.d.ts.map} +1 -1
- package/dist/index.d.ts +405 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1299 -40
- package/dist/index.js.map +1 -1
- package/dist/{list-native-drag-controller-BAuWAtyQ.d.ts → list-native-drag-controller-B9reY4uM.d.ts} +2 -2
- package/dist/{list-native-drag-controller-BAuWAtyQ.d.ts.map → list-native-drag-controller-B9reY4uM.d.ts.map} +1 -1
- package/dist/menu.d.ts +1 -1
- package/dist/miller.d.ts +3 -3
- package/dist/split-layout-C5SYbDrq.d.ts.map +1 -1
- package/dist/{split-layout-BJEU1W0d.js → split-layout-CXotkdbx.js} +46 -4
- package/dist/split-layout-CXotkdbx.js.map +1 -0
- package/dist/split-layout.js +1 -1
- package/dist/{tree-component-DGmKBbpy.d.ts → tree-component-CMGeqyjZ.d.ts} +2 -2
- package/dist/{tree-component-DGmKBbpy.d.ts.map → tree-component-CMGeqyjZ.d.ts.map} +1 -1
- package/dist/tree.d.ts +4 -4
- package/dist/{types-Bc23SI94.d.ts → types-3Jfcaxvo.d.ts} +8 -1
- package/dist/types-3Jfcaxvo.d.ts.map +1 -0
- package/dist/{vertical-list-C03PN6lx.d.ts → vertical-list-R25WqAVO.d.ts} +3 -3
- package/dist/{vertical-list-C03PN6lx.d.ts.map → vertical-list-R25WqAVO.d.ts.map} +1 -1
- package/dist/vertical-list.d.ts +2 -2
- package/docs-user/README.md +1 -0
- package/docs-user/data-grid.md +11 -2
- package/docs-user/hyperbolic-tree.md +282 -0
- package/docs-user/index.json +7 -2
- package/docs-user/llms.txt +1 -0
- package/docs-user/tree.md +1 -0
- package/llms.txt +1 -0
- package/package.json +160 -4
- package/dist/split-layout-BJEU1W0d.js.map +0 -1
- package/dist/types-Bc23SI94.d.ts.map +0 -1
package/dist/{list-native-drag-controller-BAuWAtyQ.d.ts → list-native-drag-controller-B9reY4uM.d.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as ListDragPreviewSourceResolver, I as ListDragSource, L as ListNativeDragStartDetail, N as ListDragPreviewContext, P as ListDragPreviewRenderer, j as ListDragEntry } from "./tree-component-
|
|
1
|
+
import { F as ListDragPreviewSourceResolver, I as ListDragSource, L as ListNativeDragStartDetail, N as ListDragPreviewContext, P as ListDragPreviewRenderer, j as ListDragEntry } from "./tree-component-CMGeqyjZ.js";
|
|
2
2
|
import { ReactiveController, ReactiveControllerHost } from "lit";
|
|
3
3
|
//#region src/interaction/list-native-drag-controller.d.ts
|
|
4
4
|
type ListNativeDragControllerConfig<T> = {
|
|
@@ -66,4 +66,4 @@ declare class ListNativeDragController<T> implements ReactiveController {
|
|
|
66
66
|
}
|
|
67
67
|
//#endregion
|
|
68
68
|
export { ListNativeDragControllerConfig as n, ListNativeDragController as t };
|
|
69
|
-
//# sourceMappingURL=list-native-drag-controller-
|
|
69
|
+
//# sourceMappingURL=list-native-drag-controller-B9reY4uM.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-native-drag-controller-
|
|
1
|
+
{"version":3,"file":"list-native-drag-controller-B9reY4uM.d.ts","names":[],"sources":["../src/interaction/list-native-drag-controller.ts"],"mappings":";;;KAYY,+BAA+B;WAChC,QAAQ;;EAEjB;;EAEA,oBAAoB,QAAQ;;;;;;EAM5B,mBAAmB;IAAwB,QAAQ,cAAc;IAAI,UAAU,MAAM,cAAc;;EACnG,kBAAkB,uBAAuB;EACzC,mBAAmB,wBAAwB;EAC3C,qCAAqC,8BAA8B;;EAEnE,WAAW,QAAQ,0BAA0B;;;;;;EAM7C,qBAAqB,cAAc,cAAc,QAAQ,0BAA0B;;EAEnF,iBAAiB,iBAAiB;;EAElC;;EAEA;;;;;;;EAOA,eAAe,OAAO;;KAGnB,WAAW,yBAAyB;;;;;;;;;;cAW5B,yBAAyB,cAAc;;EAUtC,YAAA,MAAM,UAAU,QAAQ,+BAA+B;MAM/D;;MAKA;;EASJ;EAQA;;EAYA;EAIA"}
|
package/dist/menu.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { i as MenuContainer, n as MenuTrigger, t as MenuItem } from "./menu-item-ZmkXNjek.js";
|
|
2
|
-
import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-
|
|
2
|
+
import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-PjiaGpA5.js";
|
|
3
3
|
export { MenuBar, MenuCheckItem, MenuCommandController, MenuContainer, type MenuFromTreeOptions, MenuHeader, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubTrigger, MenuTrigger, menuFromTree, menuFromTreeToElements };
|
package/dist/miller.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { D as TreeTickleDetail, E as TreeSelectEvent, O as TreeTickleEvent, T as TreeSelectDetail, a as TreeComponent, b as TreeItemClickDetail, i as TreeCollapseEvent, k as TreeDataModel, n as TreeActivateEvent, o as TreeComponentEventMap, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, w as TreeSearchHost, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-
|
|
2
|
-
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-
|
|
3
|
-
import { S as ListSearchController } from "./index-
|
|
1
|
+
import { D as TreeTickleDetail, E as TreeSelectEvent, O as TreeTickleEvent, T as TreeSelectDetail, a as TreeComponent, b as TreeItemClickDetail, i as TreeCollapseEvent, k as TreeDataModel, n as TreeActivateEvent, o as TreeComponentEventMap, r as TreeCollapseDetail, t as TreeActivateDetail, v as TreeExpandDetail, w as TreeSearchHost, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-CMGeqyjZ.js";
|
|
2
|
+
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-3Jfcaxvo.js";
|
|
3
|
+
import { S as ListSearchController } from "./index-CHbuPyLL.js";
|
|
4
4
|
import { n as TickledController } from "./tickled-controller-C1ZsHpyg.js";
|
|
5
5
|
import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
|
|
6
6
|
import { CommandRegistry } from "@clinth/ui-commands";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-layout-C5SYbDrq.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;
|
|
1
|
+
{"version":3,"file":"split-layout-C5SYbDrq.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;UA2DA;UAQA;UAOA;UAwBA;UAQA;UAKA;UAMA;UAiFA;UAWA;UAuBA;UAeA;UAsBA;UAIA;UAMA;UAcA;YAYW,wBAAM,2BAAA;UA2BjB;UAQA;UAgCA;SAuBQ,sBAAM;;QAiHhB;YACI;IACR,qBAAqB;;YAGb;IACR,qBAAqB,YAAY;IACjC,uBAAuB,YAAY;IACnC,qBAAqB,YAAY;IACjC,oBAAoB,YAAY;IAChC,qBAAqB,YAAY"}
|
|
@@ -343,6 +343,44 @@ function collectWeights(snapshot, weights, collapsed) {
|
|
|
343
343
|
if (snapshot.collapsed !== void 0) collapsed.set(snapshot.id, snapshot.collapsed);
|
|
344
344
|
} else if (snapshot.children) for (const child of snapshot.children) collectWeights(child, weights, collapsed);
|
|
345
345
|
}
|
|
346
|
+
function setPanelRestoreWeight(group, id, restoreWeight) {
|
|
347
|
+
const children = group.children.map((child) => {
|
|
348
|
+
if (child.kind === `panel`) return child.id === id ? {
|
|
349
|
+
...child,
|
|
350
|
+
restoreWeight
|
|
351
|
+
} : child;
|
|
352
|
+
return setPanelRestoreWeight(child, id, restoreWeight);
|
|
353
|
+
});
|
|
354
|
+
return {
|
|
355
|
+
...group,
|
|
356
|
+
children
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
function preserveRestoreWeights(previous, next) {
|
|
360
|
+
if (!previous) return next;
|
|
361
|
+
const previousById = new Map(previous.children.map((child) => [child.id, child]));
|
|
362
|
+
const children = next.children.map((child) => {
|
|
363
|
+
const match = previousById.get(child.id);
|
|
364
|
+
if (!match || match.kind !== child.kind) return child;
|
|
365
|
+
if (child.kind === `panel` && match.kind === `panel`) return {
|
|
366
|
+
...child,
|
|
367
|
+
restoreWeight: match.restoreWeight
|
|
368
|
+
};
|
|
369
|
+
return preserveRestoreWeights(match, child);
|
|
370
|
+
});
|
|
371
|
+
return {
|
|
372
|
+
...next,
|
|
373
|
+
children
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function findPanelNode(group, id) {
|
|
377
|
+
for (const child of group.children) if (child.kind === `panel`) {
|
|
378
|
+
if (child.id === id) return child;
|
|
379
|
+
} else {
|
|
380
|
+
const found = findPanelNode(child, id);
|
|
381
|
+
if (found) return found;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
346
384
|
function walk(group, visitor) {
|
|
347
385
|
walkInner(group, [], visitor);
|
|
348
386
|
}
|
|
@@ -475,7 +513,7 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
475
513
|
_rebuildModel() {
|
|
476
514
|
this._reindexSlots();
|
|
477
515
|
const normalized = normalise(buildModel(this));
|
|
478
|
-
this._model = normalized;
|
|
516
|
+
this._model = preserveRestoreWeights(this._model, normalized);
|
|
479
517
|
this.requestUpdate();
|
|
480
518
|
}
|
|
481
519
|
get panels() {
|
|
@@ -597,6 +635,7 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
597
635
|
if (!panel || panel.collapsed === collapsed) return;
|
|
598
636
|
this._applyingOwnMutation = true;
|
|
599
637
|
if (collapsed) {
|
|
638
|
+
if (this._model) this._model = setPanelRestoreWeight(this._model, panel.id, panel.weight);
|
|
600
639
|
panel.el.setAttribute(`collapsed`, ``);
|
|
601
640
|
panel.el.setAttribute(`data-collapsed`, ``);
|
|
602
641
|
} else {
|
|
@@ -604,7 +643,10 @@ let SplitLayoutElement = class SplitLayoutElement extends LitElement {
|
|
|
604
643
|
panel.el.removeAttribute(`data-collapsed`);
|
|
605
644
|
}
|
|
606
645
|
this._rebuildModel();
|
|
607
|
-
if (!collapsed
|
|
646
|
+
if (!collapsed) {
|
|
647
|
+
const restoreWeight = revealWeight ?? (this._model ? findPanelNode(this._model, panel.id)?.restoreWeight : void 0);
|
|
648
|
+
if (restoreWeight !== void 0) this._setFlexibleWeight(panel.id, restoreWeight);
|
|
649
|
+
}
|
|
608
650
|
this.requestUpdate();
|
|
609
651
|
this._observer?.takeRecords();
|
|
610
652
|
this._applyingOwnMutation = false;
|
|
@@ -976,6 +1018,6 @@ __decorate([state()], SplitLayoutElement.prototype, "_resizing", void 0);
|
|
|
976
1018
|
__decorate([query(`.grid`)], SplitLayoutElement.prototype, "_groupEl", void 0);
|
|
977
1019
|
SplitLayoutElement = __decorate([safeCustomElement(`ixfx-split-layout`)], SplitLayoutElement);
|
|
978
1020
|
//#endregion
|
|
979
|
-
export { distribute as a,
|
|
1021
|
+
export { distribute as a, preserveRestoreWeights as c, toSnapshot as d, walk as f, buildModel as i, resolveTracks as l, SplitPanelElement as n, findPanelNode as o, applySnapshot as r, normalise as s, SplitLayoutElement as t, setPanelRestoreWeight as u };
|
|
980
1022
|
|
|
981
|
-
//# sourceMappingURL=split-layout-
|
|
1023
|
+
//# sourceMappingURL=split-layout-CXotkdbx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-layout-CXotkdbx.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\n// Copies each panel's live `weight` onto its own `restoreWeight`, recursively.\n// Used just before collapsing a panel, so `preserveRestoreWeights` can carry\n// that stashed value through the rebuild that collapse triggers.\nexport function setPanelRestoreWeight(group: GroupNode, id: string, restoreWeight: number): GroupNode {\n const children = group.children.map((child) => {\n if (child.kind === `panel`) {\n return child.id === id ? { ...child, restoreWeight } : child;\n }\n return setPanelRestoreWeight(child, id, restoreWeight);\n });\n return { ...group, children };\n}\n\n// `buildModel` re-derives every `restoreWeight` from the DOM (defaulting it\n// back to the panel's current `weight`), discarding anything stashed at\n// collapse time. Carry the previous tree's `restoreWeight` values forward\n// onto the freshly built tree, matched by panel id, so a stash survives the\n// rebuild that collapse/expand triggers.\nexport function preserveRestoreWeights(previous: GroupNode | null, next: GroupNode): GroupNode {\n if (!previous)\n return next;\n\n const previousById = new Map(previous.children.map(child => [child.id, child]));\n const children = next.children.map((child) => {\n const match = previousById.get(child.id);\n if (!match || match.kind !== child.kind)\n return child;\n if (child.kind === `panel` && match.kind === `panel`) {\n return { ...child, restoreWeight: match.restoreWeight };\n }\n return preserveRestoreWeights(match as GroupNode, child as GroupNode);\n });\n return { ...next, children };\n}\n\nexport function findPanelNode(group: GroupNode, id: string): PanelNode | undefined {\n for (const child of group.children) {\n if (child.kind === `panel`) {\n if (child.id === id)\n return child;\n } else {\n const found = findPanelNode(child, id);\n if (found)\n return found;\n }\n }\n return undefined;\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, findPanelNode, normalise, preserveRestoreWeights, setPanelRestoreWeight, 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 = preserveRestoreWeights(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 // Stash the panel's live weight (which may have come from a drag, never\n // written back to a DOM attribute) so a later expand can restore it\n // instead of falling back to the stale weight `_rebuildModel` reads off\n // the DOM.\n if (this._model) {\n this._model = setPanelRestoreWeight(this._model, panel.id, panel.weight);\n }\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) {\n const restoreWeight = revealWeight ?? (this._model ? findPanelNode(this._model, panel.id)?.restoreWeight : undefined);\n if (restoreWeight !== undefined) {\n this._setFlexibleWeight(panel.id, restoreWeight);\n }\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-hit-size: 12px;\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 position: relative;\n }\n\n .gutter::before {\n content: '';\n position: absolute;\n pointer-events: auto;\n background: transparent;\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=\"row\"]) .gutter::before {\n width: var(--split-gutter-hit-size, 12px);\n height: 100%;\n left: 50%;\n transform: translateX(-50%);\n }\n\n :host([direction=\"column\"]) .gutter {\n height: var(--split-gutter-size);\n cursor: ns-resize;\n min-width: 100%;\n }\n\n :host([direction=\"column\"]) .gutter::before {\n height: var(--split-gutter-hit-size, 12px);\n width: 100%;\n top: 50%;\n transform: translateY(-50%);\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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"}
|
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-CXotkdbx.js";
|
|
2
2
|
export { SplitLayoutElement };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-
|
|
1
|
+
import { a as TreeItem, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-3Jfcaxvo.js";
|
|
2
2
|
//#region src/interaction/list-drag-types.d.ts
|
|
3
3
|
interface ListDragEntry<T> {
|
|
4
4
|
readonly key: string;
|
|
@@ -409,4 +409,4 @@ interface TreeSearchHost extends TreeComponent {
|
|
|
409
409
|
}
|
|
410
410
|
//#endregion
|
|
411
411
|
export { TreeDataModelOptions as A, TreeItemDblClickEvent as C, TreeTickleDetail as D, TreeSelectEvent as E, ListDragPreviewSourceResolver as F, ListDragSource as I, ListNativeDragStartDetail as L, ListDragPreview as M, ListDragPreviewContext as N, TreeTickleEvent as O, ListDragPreviewRenderer as P, ListNativeDragStartEvent as R, TreeItemDblClickDetail as S, TreeSelectDetail as T, TreeDropTarget as _, TreeComponent as a, TreeItemClickDetail as b, TreeDragContext as c, TreeDragStartEvent as d, TreeDropApplyContext as f, TreeDropPosition as g, TreeDropEvent as h, TreeCollapseEvent as i, ListDragEntry as j, TreeDataModel as k, TreeDragEndEvent as l, TreeDropDetail as m, TreeActivateEvent as n, TreeComponentEventMap as o, TreeDropContext as p, TreeCollapseDetail as r, TreeDndMode as s, TreeActivateDetail as t, TreeDragOverEvent as u, TreeExpandDetail as v, TreeSearchHost as w, TreeItemClickEvent as x, TreeExpandEvent as y };
|
|
412
|
-
//# sourceMappingURL=tree-component-
|
|
412
|
+
//# sourceMappingURL=tree-component-CMGeqyjZ.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-component-
|
|
1
|
+
{"version":3,"file":"tree-component-CMGeqyjZ.d.ts","names":[],"sources":["../src/interaction/list-drag-types.ts","../src/common/tree-data-model.ts","../src/common/tree-component.ts"],"mappings":";;UAAiB,cAAc;WACpB;WACA;WACA,MAAM,IAAI;;;;;;;;;;;;;;WAcV,UAAU;;KAGT;UAEK,uBAAuB;WAC7B,QAAQ;WACR,QAAQ,cAAc;WACtB,UAAU,cAAc,cAAc;WACtC;aACE;aACA;aACA;aACA;;WAEF,WAAW;WACX,2BAA2B,8BAA8B;;UAGnD;WACN,SAAS;WACT,UAAU;IAAW;IAAW;;WAChC,SAAS;WACT;;KAGC,wBAAwB,MAAM,SAAS,uBAAuB,OAAO;KAErE,8BAA8B,MACxC,OAAO,cAAc,OAClB;UAEY,0BAA0B;WAChC;WACA;WACA,MAAM,IAAI;WACV;WACA,UAAU,cAAc,cAAc;WACtC,UAAU;;KAGT,yBAAyB,eAAe,YAAY,0BAA0B;;;KCjDrF;EAAoB;EAAoB;;KACxC;EAAc;EAAc,MAAM;;KAClC,aAAa,kBAAkB;KAE/B,mBAAmB,OAAO;KA6DnB;;EAEV,MAAM;;;;;EAKN,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgCJ;;EAMC,YAAA,SAAS;;MAUjB,QAAQ;;;;;EAQZ,QAAQ,MAAM;;;;;;;;;EAkBR,YAAY,MAAM,UAAU,eAAe,QAAQ,cAAc,QAAQ;;;;;;EAyB/E,WAAW;;;;;EAaX,QAAQ,mBAAmB,MAAM,WAAW;;;;;EAU5C,WAAW,cAAc;;;;;EAWzB,WAAW,aAAa,OAAO,QAAQ,YAAY;;;;;;EAcnD,SAAS,aAAa,sBAAsB,iBAAiB;;;;;;;EAmB7D,iBAAiB,aAAa,sBAAsB,+BAA+B;;;;;;EAkBnF,UAAU,KAAK,uBAAuB;;;;;;EActC,WAAW,+BAA+B,MAAM,UAAU,iBAAiB;;;;;;;EA6B3E,WAAW,UAAU;;;;KC/RX;KAEA;UAEK;WACN;WACA;WACA;WACA,UAAU;WACV;;UAGM;WACN,gBAAgB;WAChB;;;;;;UAOM;WACN;;;;;WAKA,mBAAmB;WACnB;WACA,QAAQ;;UAGF,wBAAwB;WAC9B,cAAc;;UAGR,uBAAuB;WAC7B,oBAAoB;;KAGnB,qBAAqB,YAAY;KACjC,oBAAoB,YAAY;KAChC,gBAAgB,YAAY;KAC5B,mBAAmB;EAAc;;;;;;KAUjC;;WAED,UAAU,YAAY;;WAEtB,UAAU,YAAY;;;;;;;KAQrB;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;;KAQC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;;;;;KAOC;WACD,MAAM;WACN;;KAIC,kBAAkB,YAAY;KAC9B,kBAAkB,YAAY;KAC9B,oBAAoB,YAAY;KAChC,qBAAqB,YAAY;KACjC,wBAAwB,YAAY;KACpC,kBAAkB,YAAY;KAC9B,oBAAoB,YAAY;UAM3B;EACf,UAAU;EACV,UAAU;EACV,YAAY;EACZ,cAAc;EACd,UAAU;EACV,YAAY;EACZ,0BAA0B,YAAY,0BAA0B;EAChE,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;EACb,iBAAiB;;;;;;;;;;;;;;;UAoBF,sBAAsB;;;;;;EAQrC,MAAM;;;;;;;EAQN,OAAO;;;;;;EAOP,cAAc;;;;;EAQd,cAAc;;;;;WAML,eAAe,YAAY;;;;;;EASpC,iBAAiB;;;;;;EASjB,iBAAiB;;;;;;EASjB,aAAa;;EAKb,SAAS,MAAM;;EAEf,WAAW,MAAM;;EAEjB;;;;;;EAMA;;EAEA;;;;;EAQA,aAAa;;;;;EAMb,iBAAiB,YAAY,MAAM;;;;;;EAOnC,YAAY;;EAGZ,aAAa,OAAO,SAAS;;;;;EAQ7B,gBAAgB;IAAgB,MAAM;IAAU;;;;;;;;;;;UAejC,uBAAuB;WAC7B,YAAY;WACZ,gBAAgB"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { A as TreeDataModelOptions, C as TreeItemDblClickEvent, D as TreeTickleDetail, E as TreeSelectEvent, F as ListDragPreviewSourceResolver, L as ListNativeDragStartDetail, O as TreeTickleEvent, P as ListDragPreviewRenderer, T as TreeSelectDetail, _ as TreeDropTarget, a as TreeComponent, b as TreeItemClickDetail, c as TreeDragContext, d as TreeDragStartEvent, g as TreeDropPosition, h as TreeDropEvent, i as TreeCollapseEvent, k as TreeDataModel, l as TreeDragEndEvent, m as TreeDropDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeDropContext, r as TreeCollapseDetail, s as TreeDndMode, t as TreeActivateDetail, u as TreeDragOverEvent, v as TreeExpandDetail, w as TreeSearchHost, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-
|
|
2
|
-
import { a as TreeItem, i as TreeInteractionMode, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-
|
|
3
|
-
import { S as ListSearchController } from "./index-
|
|
4
|
-
import { t as ListNativeDragController } from "./list-native-drag-controller-
|
|
1
|
+
import { A as TreeDataModelOptions, C as TreeItemDblClickEvent, D as TreeTickleDetail, E as TreeSelectEvent, F as ListDragPreviewSourceResolver, L as ListNativeDragStartDetail, O as TreeTickleEvent, P as ListDragPreviewRenderer, T as TreeSelectDetail, _ as TreeDropTarget, a as TreeComponent, b as TreeItemClickDetail, c as TreeDragContext, d as TreeDragStartEvent, g as TreeDropPosition, h as TreeDropEvent, i as TreeCollapseEvent, k as TreeDataModel, l as TreeDragEndEvent, m as TreeDropDetail, n as TreeActivateEvent, o as TreeComponentEventMap, p as TreeDropContext, r as TreeCollapseDetail, s as TreeDndMode, t as TreeActivateDetail, u as TreeDragOverEvent, v as TreeExpandDetail, w as TreeSearchHost, x as TreeItemClickEvent, y as TreeExpandEvent } from "./tree-component-CMGeqyjZ.js";
|
|
2
|
+
import { a as TreeItem, i as TreeInteractionMode, n as TreeExclusivity, o as TreeNode, r as TreeFilterPredicate, s as TreeSelectionFilter, t as LoadChildrenCallback } from "./types-3Jfcaxvo.js";
|
|
3
|
+
import { S as ListSearchController } from "./index-CHbuPyLL.js";
|
|
4
|
+
import { t as ListNativeDragController } from "./list-native-drag-controller-B9reY4uM.js";
|
|
5
5
|
import { n as TickledController } from "./tickled-controller-C1ZsHpyg.js";
|
|
6
6
|
import { LitElement, PropertyValues, ReactiveController, ReactiveControllerHost, TemplateResult, nothing } from "lit";
|
|
7
7
|
import { CommandRegistry } from "@clinth/ui-commands";
|
|
@@ -15,6 +15,13 @@ type TreeItem = {
|
|
|
15
15
|
tooltip?: string;
|
|
16
16
|
/** Optional string value, e.g. for use as a command/route. */
|
|
17
17
|
value?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional relative importance/magnitude of this node. Unitless — consumers
|
|
20
|
+
* normalize it against whatever population of nodes is currently relevant
|
|
21
|
+
* to them (e.g. `ixfx-hyperbolictree-list` normalizes across the currently
|
|
22
|
+
* visible node set). Components that don't support weighting ignore it.
|
|
23
|
+
*/
|
|
24
|
+
weight?: number;
|
|
18
25
|
};
|
|
19
26
|
/** A node in the tree, potentially containing lazily-loaded children. */
|
|
20
27
|
type TreeNode = {
|
|
@@ -69,4 +76,4 @@ type TreeSelectionFilter = `none` | `leaf` | `branch` | `all`;
|
|
|
69
76
|
type TreeInteractionMode = `implicit` | `standard` | `manual` | `checked` | `vscode`;
|
|
70
77
|
//#endregion
|
|
71
78
|
export { TreeItem as a, TreeInteractionMode as i, TreeExclusivity as n, TreeNode as o, TreeFilterPredicate as r, TreeSelectionFilter as s, LoadChildrenCallback as t };
|
|
72
|
-
//# sourceMappingURL=types-
|
|
79
|
+
//# sourceMappingURL=types-3Jfcaxvo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-3Jfcaxvo.d.ts","names":[],"sources":["../src/common/types.ts"],"mappings":";;KAQY;;EAEV;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;;;;;;EAOA;;;KAIU;EACV,MAAM;;;;;;;EAON,WAAW;;;;;;;KAQD,uBAAuB;EAAgB,MAAM;EAAU;GAAiB;;;;;;KAOxE,uBAAuB,MAAM,UAAU;;;;;;;KAQvC;;;;;;;;;KAUA;;;;;;;;;KAUA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { F as ListDragPreviewSourceResolver, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent } from "./tree-component-
|
|
1
|
+
import { F as ListDragPreviewSourceResolver, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent } from "./tree-component-CMGeqyjZ.js";
|
|
2
2
|
import { n as ListViewportChangeEvent } from "./list-viewport-types-BRZsLcvp.js";
|
|
3
|
-
import { S as ListSearchController } from "./index-
|
|
3
|
+
import { S as ListSearchController } from "./index-CHbuPyLL.js";
|
|
4
4
|
import { i as ListInteractionMode, l as ListSelectionMode, r as ListElementEventMap } from "./list-selection-types-PjKdhF-a.js";
|
|
5
5
|
import { LitElement, PropertyValues } from "lit";
|
|
6
6
|
import { CommandId, CommandRegistry } from "@clinth/ui-commands";
|
|
@@ -253,4 +253,4 @@ interface VerticalListElementEventMap extends ListElementEventMap {
|
|
|
253
253
|
}
|
|
254
254
|
//#endregion
|
|
255
255
|
export { VerticalListElementEventMap as i, CustomCheckboxOptions as n, VerticalListElement as r, AddItemOptions as t };
|
|
256
|
-
//# sourceMappingURL=vertical-list-
|
|
256
|
+
//# sourceMappingURL=vertical-list-R25WqAVO.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertical-list-
|
|
1
|
+
{"version":3,"file":"vertical-list-R25WqAVO.d.ts","names":[],"sources":["../src/vertical-list/vertical-list.ts"],"mappings":";;;;;;;UA0DiB;EACf,WAAW;EACX;EACA;;UAGe;;;;;;EAMf;;cAuBW,4BAA4B;;EAEvC,eAAe;EAGf,iBAAiB;EAGjB,mBAAmB,IAAI;;;;;;EAQvB;;;;;;;;;;;;;;;;;;;EAqBA,oBAAoB,gCAAgC;;;;;;EAQpD;;;;;;EAQA;;;;;EAOA,qBAAqB,wBAAwB;EAG7C,mBAAmB,8BAA8B;;;;;;;;;;;EAajD;;;;;EAOA;;;;;;;;;EAWA,aAAa,eAAe;;;;;;;;;;;;;;;;;;EAoB5B;;;;;;EAQA;mBAyCiB;UAeT;UA6EA;;WA6EC,QAAM,qBAAA;;MAYX,YAAY;EA2BP;EAsBA;;;;;;YA4BU;EAwDV,QAAQ,SAAS;;MA8EtB,gBAAgB;;MAKhB,iBAAiB,YAAY;EAIjC,QAAQ,MAAM,kBAAkB,UAAU;;;;;;;EA4B1C,WAAW,MAAM,UAAU;;EA2B3B,YAAY,OAAO,SAAS,WAAW;EAIvC;;;;;;EAmBA,SAAS,gBAAgB;;;;;;EAwBzB,SAAS,WAAW,WAAW,OAAO;EAItC,OAAO,MAAM;EAIb,WAAW,OAAO,SAAS;EAI3B,SAAS,MAAM;EAIf;EAIA;;MAQI,gBAAgB;;MAKhB;;EAMJ,WAAW,MAAM;;EAKjB,gBAAgB,MAAM;;EAKtB,mBAAmB,MAAM;;;;;;EASzB,SAAS;;EAgCT,aAAa,cAAc;;;;;;;;EAW3B;;;;;;;EAuBA;EAsBE,eAAe,0CAA0C,UAAU;;;;;EA2CrE,YAAY,MAAM;;;;;;;;;;;EAclB,WAAW,aAAa;UA2fhB;UAgBA;UAOA;UAiBA;;;;;;;UA4GA;;;;;UAuBA;UAcA;UAYA;UAQA;UAWA;UAMA;UAIA;UAwDA;UAUA;UAMA;SAUQ,sBAAM;EAuKb,wBAAM;;QAeT;YACI;IACR,sBAAsB;;YAGd,4BAA4B;;UAGvB,oCAAoC;EACnD,iCAAiC;EACjC,0BAA0B,yBAAyB"}
|
package/dist/vertical-list.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as ListDragSource, L as ListNativeDragStartDetail, M as ListDragPreview, N as ListDragPreviewContext, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent, j as ListDragEntry } from "./tree-component-
|
|
1
|
+
import { I as ListDragSource, L as ListNativeDragStartDetail, M as ListDragPreview, N as ListDragPreviewContext, P as ListDragPreviewRenderer, R as ListNativeDragStartEvent, j as ListDragEntry } from "./tree-component-CMGeqyjZ.js";
|
|
2
2
|
import { n as ListViewportChangeEvent, t as ListViewportChangeDetail } from "./list-viewport-types-BRZsLcvp.js";
|
|
3
3
|
import { a as ListItemClickDetail, c as ListSelectEvent, d as ListTickleEvent, i as ListInteractionMode, l as ListSelectionMode, n as ListActivateEvent, o as ListItemClickEvent, r as ListElementEventMap, s as ListSelectDetail, t as ListActivateDetail, u as ListTickleDetail } from "./list-selection-types-PjKdhF-a.js";
|
|
4
|
-
import { i as VerticalListElementEventMap, n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-
|
|
4
|
+
import { i as VerticalListElementEventMap, n as CustomCheckboxOptions, r as VerticalListElement, t as AddItemOptions } from "./vertical-list-R25WqAVO.js";
|
|
5
5
|
export { AddItemOptions, CustomCheckboxOptions, type ListActivateDetail, type ListActivateEvent, type ListDragEntry, type ListDragPreview, type ListDragPreviewContext, type ListDragPreviewRenderer, type ListDragSource, type ListElementEventMap, type ListInteractionMode, type ListItemClickDetail, type ListItemClickEvent, type ListNativeDragStartDetail, type ListNativeDragStartEvent, type ListSelectDetail, type ListSelectEvent, type ListSelectionMode, type ListTickleDetail, type ListTickleEvent, type ListViewportChangeDetail, type ListViewportChangeEvent, VerticalListElement, VerticalListElementEventMap };
|
package/docs-user/README.md
CHANGED
|
@@ -20,6 +20,7 @@ This directory contains documentation for each component and some architectural
|
|
|
20
20
|
- [form](./form.md)
|
|
21
21
|
- [grid-list](./grid-list.md)
|
|
22
22
|
- [grouped-item-lister](./grouped-item-lister.md)
|
|
23
|
+
- [hyperbolic-tree](./hyperbolic-tree.md)
|
|
23
24
|
- [icons](./icons.md)
|
|
24
25
|
- [incr-search](./incr-search.md)
|
|
25
26
|
- [labelled-radial-input](./labelled-radial-input.md)
|
package/docs-user/data-grid.md
CHANGED
|
@@ -215,6 +215,13 @@ grid.sortState = { key: 'age', direction: 'asc' };
|
|
|
215
215
|
|
|
216
216
|
Events: `datagrid-sort` `{ sort, previous }`. Custom `sortFn` per column.
|
|
217
217
|
|
|
218
|
+
Sorting uses `dataType` to determine comparison strategy:
|
|
219
|
+
- `'number'`: numeric comparison
|
|
220
|
+
- `'boolean'`: false < true
|
|
221
|
+
- `'text'` (default) or `'custom'`: `String.localeCompare`
|
|
222
|
+
|
|
223
|
+
Override with `sortFn` on the column.
|
|
224
|
+
|
|
218
225
|
---
|
|
219
226
|
|
|
220
227
|
## Grouping
|
|
@@ -262,9 +269,11 @@ grid.editable = (row, col) => col.key==='name' || col.key==='department';
|
|
|
262
269
|
|
|
263
270
|
### Editors
|
|
264
271
|
|
|
265
|
-
* `editor:'
|
|
272
|
+
* `editor:'auto'` (default) → inferred from `dataType`:
|
|
273
|
+
- `'text'` → `<input type="text">`
|
|
274
|
+
- `'number'` → `<input type="number">`
|
|
275
|
+
- `'boolean'` → `<input type="checkbox">`
|
|
266
276
|
* `editor:'select'` + `editorOptions: ['A','B']` → `<select>`
|
|
267
|
-
* `editor:'boolean'` → checkbox
|
|
268
277
|
* `editor: (ctx)=>html`...` ` custom factory with `{ row, column, rowIndex, colIndex, value, commit, cancel }`
|
|
269
278
|
|
|
270
279
|
Editors are seeded with the cell's current value (`curVal`). For `select`, the matching `editorOptions` entry is preselected.
|