@adea-ai/ui 0.130.1 → 0.130.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/layout/pixel-resize-handle/pixel-resize-handle.d.ts +7 -6
- package/dist/components/layout/pixel-resize-handle/pixel-resize-handle.d.ts.map +1 -1
- package/dist/components/layout/pixel-resize-handle/pixel-resize-handle.js +130 -144
- package/dist/components/layout/pixel-resize-handle/pixel-resize-handle.js.map +1 -1
- package/dist/components/layout/split-layout/resize-controller-core-retry.d.ts +1 -1
- package/dist/components/layout/split-layout/resize-controller-core-retry.d.ts.map +1 -1
- package/dist/components/layout/split-layout/resize-controller-core-retry.js +91 -55
- package/dist/components/layout/split-layout/resize-controller-core-retry.js.map +1 -1
- package/dist/components/layout/split-layout/resize-controller-core.d.ts +1 -1
- package/dist/components/layout/split-layout/resize-controller-core.d.ts.map +1 -1
- package/dist/components/layout/split-layout/resize-controller-core.js +91 -55
- package/dist/components/layout/split-layout/resize-controller-core.js.map +1 -1
- package/dist/components/layout/split-layout/split-layout.d.ts +1 -1
- package/dist/components/layout/split-layout/split-layout.d.ts.map +1 -1
- package/dist/components/layout/split-layout/split-layout.js +2 -2
- package/dist/components/layout/split-layout/split-layout.js.map +1 -1
- package/dist/r/pixel-resize-handle.json +3 -2
- package/dist/r/registry.json +3 -3
- package/dist/r/split-layout.json +0 -1
- package/dist/r/src/components/layout/pixel-resize-handle/pixel-resize-handle.tsx +60 -61
- package/dist/r/src/components/layout/split-layout/resize-controller-core-retry.tsx +72 -31
- package/dist/r/src/components/layout/split-layout/resize-controller-core.tsx +72 -31
- package/dist/r/src/components/layout/split-layout/split-layout.tsx +2 -2
- package/package.json +1 -1
- package/registry.json +3 -3
- package/src/components/layout/pixel-resize-handle/pixel-resize-handle.tsx +60 -61
- package/src/components/layout/split-layout/resize-controller-core-retry.tsx +72 -31
- package/src/components/layout/split-layout/resize-controller-core.tsx +72 -31
- package/src/components/layout/split-layout/split-layout.tsx +2 -2
|
@@ -8,6 +8,6 @@ export type SplitLayoutResizeControllerProps<L extends SplitLayoutLeaf> = {
|
|
|
8
8
|
labelForSeparator?: (branch: SplitLayoutBranch<L>) => string;
|
|
9
9
|
onResize: (splitId: string, ratio: number) => void;
|
|
10
10
|
};
|
|
11
|
-
/**
|
|
11
|
+
/** The divider stays behind the first real split while the pane owners remain mounted. */
|
|
12
12
|
export default function SplitLayoutResizeController<L extends SplitLayoutLeaf>(props: SplitLayoutResizeControllerProps<L>): JSX.Element;
|
|
13
13
|
//# sourceMappingURL=resize-controller-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize-controller-core.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/split-layout/resize-controller-core.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resize-controller-core.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/split-layout/resize-controller-core.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAChE,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,SAAS,CAAA;AAEhB,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS,eAAe,IAAI;IACxE,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACjC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7B,IAAI,EAAE,MAAM,cAAc,GAAG,SAAS,CAAA;IACtC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;IAC5D,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnD,CAAA;AAID,0FAA0F;AAC1F,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,CAAC,SAAS,eAAe,EAC3E,KAAK,EAAE,gCAAgC,CAAC,CAAC,CAAC,eAoF3C"}
|
|
@@ -1,62 +1,98 @@
|
|
|
1
1
|
import { MAX_SPLIT_RATIO, MIN_SPLIT_RATIO, listLeaves } from "./tree.js";
|
|
2
|
-
import {
|
|
3
|
-
import "solid-js";
|
|
4
|
-
import Resizable from "@corvu/resizable";
|
|
2
|
+
import { delegateEvents, effect, setAttribute, style, template, use } from "solid-js/web";
|
|
3
|
+
import { createSignal } from "solid-js";
|
|
5
4
|
//#region src/components/layout/split-layout/resize-controller-core.tsx
|
|
6
|
-
|
|
5
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div class="pointer-events-none absolute min-h-0 min-w-0"><div role=separator tabindex=0 data-split-layout-handle aria-valuemin=10 aria-valuemax=90 class="pointer-events-auto absolute shrink-0 bg-border after:absolute after:inset-y-0 after:-inset-x-1 after:w-3 focus-visible:bg-primary focus-visible:outline-none hover:bg-primary data-[orientation=vertical]:after:inset-x-0 data-[orientation=vertical]:after:-inset-y-1 data-[orientation=vertical]:after:h-3 data-[orientation=vertical]:after:w-full">`);
|
|
6
|
+
var KEYBOARD_DELTA = .05;
|
|
7
|
+
/** The divider stays behind the first real split while the pane owners remain mounted. */
|
|
7
8
|
function SplitLayoutResizeController(props) {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
9
|
+
const [container, setContainer] = createSignal();
|
|
10
|
+
let activePointer;
|
|
11
|
+
const horizontal = () => props.branch().direction === "row";
|
|
12
|
+
const resizeTo = (ratio) => {
|
|
13
|
+
const root = props.root();
|
|
14
|
+
if (!root?.isConnected || root.getClientRects().length === 0) return;
|
|
15
|
+
const next = Math.min(MAX_SPLIT_RATIO, Math.max(MIN_SPLIT_RATIO, ratio));
|
|
16
|
+
if (Number.isFinite(next) && Math.abs(next - props.branch().ratio) > 1e-6) props.onResize(props.branch().id, next);
|
|
17
|
+
};
|
|
18
|
+
const stopDrag = (handle, event) => {
|
|
19
|
+
if (activePointer !== event.pointerId) return;
|
|
20
|
+
activePointer = void 0;
|
|
21
|
+
handle.removeAttribute("data-dragging");
|
|
22
|
+
if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId);
|
|
23
|
+
};
|
|
24
|
+
return (() => {
|
|
25
|
+
var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
|
|
26
|
+
use(setContainer, _el$);
|
|
27
|
+
_el$2.addEventListener("lostpointercapture", (event) => stopDrag(event.currentTarget, event));
|
|
28
|
+
_el$2.addEventListener("pointercancel", (event) => stopDrag(event.currentTarget, event));
|
|
29
|
+
_el$2.$$pointerup = (event) => stopDrag(event.currentTarget, event);
|
|
30
|
+
_el$2.$$pointermove = (event) => {
|
|
31
|
+
const element = container();
|
|
32
|
+
if (activePointer !== event.pointerId || !element) return;
|
|
33
|
+
const box = element.getBoundingClientRect();
|
|
34
|
+
const size = horizontal() ? box.width : box.height;
|
|
35
|
+
if (size <= 0) return;
|
|
36
|
+
resizeTo((horizontal() ? event.clientX - box.left : event.clientY - box.top) / size);
|
|
37
|
+
};
|
|
38
|
+
_el$2.$$pointerdown = (event) => {
|
|
39
|
+
if (event.button !== 0 || activePointer !== void 0) return;
|
|
40
|
+
activePointer = event.pointerId;
|
|
41
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
42
|
+
event.currentTarget.setAttribute("data-dragging", "");
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
};
|
|
45
|
+
_el$2.$$keydown = (event) => {
|
|
46
|
+
const forward = horizontal() ? "ArrowRight" : "ArrowDown";
|
|
47
|
+
const backward = horizontal() ? "ArrowLeft" : "ArrowUp";
|
|
48
|
+
const current = props.branch().ratio;
|
|
49
|
+
let next;
|
|
50
|
+
if (event.key === forward) next = current + KEYBOARD_DELTA;
|
|
51
|
+
else if (event.key === backward) next = current - KEYBOARD_DELTA;
|
|
52
|
+
else if (event.key === "Home") next = MIN_SPLIT_RATIO;
|
|
53
|
+
else if (event.key === "End") next = MAX_SPLIT_RATIO;
|
|
54
|
+
else return;
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
resizeTo(next);
|
|
57
|
+
};
|
|
58
|
+
effect((_p$) => {
|
|
59
|
+
var _v$ = props.rect(), _v$2 = horizontal() ? "horizontal" : "vertical", _v$3 = props.labelForSeparator?.(props.branch()) ?? (horizontal() ? "Resize pane columns" : "Resize pane rows"), _v$4 = horizontal() ? "vertical" : "horizontal", _v$5 = listLeaves(props.branch()).map((leaf) => props.domId(leaf.id)).join(" "), _v$6 = Math.round(props.branch().ratio * 100), _v$7 = horizontal() ? {
|
|
60
|
+
left: `${props.branch().ratio * 100}%`,
|
|
61
|
+
top: 0,
|
|
62
|
+
bottom: 0,
|
|
63
|
+
width: "1px"
|
|
64
|
+
} : {
|
|
65
|
+
top: `${props.branch().ratio * 100}%`,
|
|
66
|
+
left: 0,
|
|
67
|
+
right: 0,
|
|
68
|
+
height: "1px"
|
|
69
|
+
};
|
|
70
|
+
_p$.e = style(_el$, _v$, _p$.e);
|
|
71
|
+
_v$2 !== _p$.t && setAttribute(_el$2, "data-orientation", _p$.t = _v$2);
|
|
72
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "aria-label", _p$.a = _v$3);
|
|
73
|
+
_v$4 !== _p$.o && setAttribute(_el$2, "aria-orientation", _p$.o = _v$4);
|
|
74
|
+
_v$5 !== _p$.i && setAttribute(_el$2, "aria-controls", _p$.i = _v$5);
|
|
75
|
+
_v$6 !== _p$.n && setAttribute(_el$2, "aria-valuenow", _p$.n = _v$6);
|
|
76
|
+
_p$.s = style(_el$2, _v$7, _p$.s);
|
|
77
|
+
return _p$;
|
|
78
|
+
}, {
|
|
79
|
+
e: void 0,
|
|
80
|
+
t: void 0,
|
|
81
|
+
a: void 0,
|
|
82
|
+
o: void 0,
|
|
83
|
+
i: void 0,
|
|
84
|
+
n: void 0,
|
|
85
|
+
s: void 0
|
|
86
|
+
});
|
|
87
|
+
return _el$;
|
|
88
|
+
})();
|
|
59
89
|
}
|
|
90
|
+
delegateEvents([
|
|
91
|
+
"keydown",
|
|
92
|
+
"pointerdown",
|
|
93
|
+
"pointermove",
|
|
94
|
+
"pointerup"
|
|
95
|
+
]);
|
|
60
96
|
//#endregion
|
|
61
97
|
export { SplitLayoutResizeController as default };
|
|
62
98
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize-controller-core.js","names":["
|
|
1
|
+
{"version":3,"file":"resize-controller-core.js","names":["createSignal","Accessor","JSX","listLeaves","MIN_SPLIT_RATIO","MAX_SPLIT_RATIO","SplitLayoutBranch","SplitLayoutLeaf","SplitLayoutResizeControllerProps","branch","L","rect","CSSProperties","domId","id","root","HTMLDivElement","labelForSeparator","onResize","splitId","ratio","KEYBOARD_DELTA","SplitLayoutResizeController","props","container","setContainer","activePointer","horizontal","direction","resizeTo","isConnected","getClientRects","length","next","Math","min","max","Number","isFinite","abs","stopDrag","handle","HTMLElement","event","PointerEvent","pointerId","undefined","removeAttribute","hasPointerCapture","releasePointerCapture","_el$","_tmpl$","_el$2","firstChild","_$use","addEventListener","currentTarget","$$pointerup","$$pointermove","element","box","getBoundingClientRect","size","width","height","clientX","left","clientY","top","$$pointerdown","button","setPointerCapture","setAttribute","preventDefault","$$keydown","forward","backward","current","key","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_v$5","map","leaf","join","_v$6","round","_v$7","bottom","right","e","_$style","t","_$setAttribute","a","o","i","n","s","_$delegateEvents","_$style","_$setAttribute","_$delegateEvents"],"sources":["../../../../src/components/layout/split-layout/resize-controller-core.tsx"],"sourcesContent":["import { createSignal, type Accessor, type JSX } from 'solid-js'\nimport {\n listLeaves,\n MIN_SPLIT_RATIO,\n MAX_SPLIT_RATIO,\n type SplitLayoutBranch,\n type SplitLayoutLeaf,\n} from './model'\n\nexport type SplitLayoutResizeControllerProps<L extends SplitLayoutLeaf> = {\n branch: Accessor<SplitLayoutBranch<L>>\n rect: Accessor<JSX.CSSProperties>\n domId: (id: string) => string\n root: () => HTMLDivElement | undefined\n labelForSeparator?: (branch: SplitLayoutBranch<L>) => string\n onResize: (splitId: string, ratio: number) => void\n}\n\nconst KEYBOARD_DELTA = 0.05\n\n/** The divider stays behind the first real split while the pane owners remain mounted. */\nexport default function SplitLayoutResizeController<L extends SplitLayoutLeaf>(\n props: SplitLayoutResizeControllerProps<L>\n) {\n const [container, setContainer] = createSignal<HTMLDivElement>()\n let activePointer: number | undefined\n const horizontal = () => props.branch().direction === 'row'\n\n const resizeTo = (ratio: number) => {\n // A hidden or detached host reports no usable geometry; that is not\n // user resize intent.\n const root = props.root()\n if (!root?.isConnected || root.getClientRects().length === 0) return\n const next = Math.min(MAX_SPLIT_RATIO, Math.max(MIN_SPLIT_RATIO, ratio))\n if (Number.isFinite(next) && Math.abs(next - props.branch().ratio) > 0.000001)\n props.onResize(props.branch().id, next)\n }\n const stopDrag = (handle: HTMLElement, event: PointerEvent) => {\n if (activePointer !== event.pointerId) return\n activePointer = undefined\n handle.removeAttribute('data-dragging')\n if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId)\n }\n\n return (\n <div\n ref={setContainer}\n style={props.rect()}\n class=\"pointer-events-none absolute min-h-0 min-w-0\"\n >\n <div\n role=\"separator\"\n tabIndex={0}\n data-split-layout-handle=\"\"\n data-orientation={horizontal() ? 'horizontal' : 'vertical'}\n aria-label={\n props.labelForSeparator?.(props.branch()) ??\n (horizontal() ? 'Resize pane columns' : 'Resize pane rows')\n }\n aria-orientation={horizontal() ? 'vertical' : 'horizontal'}\n aria-controls={listLeaves(props.branch())\n .map((leaf) => props.domId(leaf.id))\n .join(' ')}\n aria-valuemin={10}\n aria-valuemax={90}\n aria-valuenow={Math.round(props.branch().ratio * 100)}\n style={\n horizontal()\n ? { left: `${props.branch().ratio * 100}%`, top: 0, bottom: 0, width: '1px' }\n : { top: `${props.branch().ratio * 100}%`, left: 0, right: 0, height: '1px' }\n }\n onKeyDown={(event) => {\n const forward = horizontal() ? 'ArrowRight' : 'ArrowDown'\n const backward = horizontal() ? 'ArrowLeft' : 'ArrowUp'\n const current = props.branch().ratio\n let next: number\n if (event.key === forward) next = current + KEYBOARD_DELTA\n else if (event.key === backward) next = current - KEYBOARD_DELTA\n else if (event.key === 'Home') next = MIN_SPLIT_RATIO\n else if (event.key === 'End') next = MAX_SPLIT_RATIO\n else return\n event.preventDefault()\n resizeTo(next)\n }}\n onPointerDown={(event) => {\n if (event.button !== 0 || activePointer !== undefined) return\n activePointer = event.pointerId\n event.currentTarget.setPointerCapture(event.pointerId)\n event.currentTarget.setAttribute('data-dragging', '')\n event.preventDefault()\n }}\n onPointerMove={(event) => {\n const element = container()\n if (activePointer !== event.pointerId || !element) return\n const box = element.getBoundingClientRect()\n const size = horizontal() ? box.width : box.height\n if (size <= 0) return\n resizeTo((horizontal() ? event.clientX - box.left : event.clientY - box.top) / size)\n }}\n onPointerUp={(event) => stopDrag(event.currentTarget, event)}\n onPointerCancel={(event) => stopDrag(event.currentTarget, event)}\n onLostPointerCapture={(event) => stopDrag(event.currentTarget, event)}\n class=\"pointer-events-auto absolute shrink-0 bg-border after:absolute after:inset-y-0 after:-inset-x-1 after:w-3 focus-visible:bg-primary focus-visible:outline-none hover:bg-primary data-[orientation=vertical]:after:inset-x-0 data-[orientation=vertical]:after:-inset-y-1 data-[orientation=vertical]:after:h-3 data-[orientation=vertical]:after:w-full\"\n />\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -25,6 +25,6 @@ export type SplitLayoutProps<L extends SplitLayoutLeaf> = {
|
|
|
25
25
|
renderPaneActions?: (leaf: Accessor<L>) => JSX.Element;
|
|
26
26
|
class?: string;
|
|
27
27
|
};
|
|
28
|
-
/** Muxy frame geometry keeps leaf owners stable;
|
|
28
|
+
/** Muxy frame geometry keeps leaf owners stable; the lazy resize controller owns constrained separator interactions. */
|
|
29
29
|
export declare function SplitLayout<L extends SplitLayoutLeaf>(props: SplitLayoutProps<L>): JSX.Element;
|
|
30
30
|
//# sourceMappingURL=split-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,QAAQ,EACb,KAAK,GAAG,EACT,MAAM,UAAU,CAAA;AAOjB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAI5C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,SAAS,CAAA;AAQhB,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,eAAe,IAAI;IACxD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC,yFAAyF;IACzF,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAC9C,yFAAyF;IACzF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IACpD,+GAA+G;IAC/G,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACrB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;IAC5D,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sFAAsF;IACtF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAChD,qGAAqG;IACrG,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3E,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA+HD,
|
|
1
|
+
{"version":3,"file":"split-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,QAAQ,EACb,KAAK,GAAG,EACT,MAAM,UAAU,CAAA;AAOjB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAI5C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,SAAS,CAAA;AAQhB,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,eAAe,IAAI;IACxD,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC,yFAAyF;IACzF,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAC9C,yFAAyF;IACzF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IACpD,+GAA+G;IAC/G,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACrB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;IAC5D,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sFAAsF;IACtF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAChD,qGAAqG;IACrG,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3E,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA+HD,wHAAwH;AACxH,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,eAwdhF"}
|
|
@@ -128,7 +128,7 @@ function cloneDragPreviewNode(source) {
|
|
|
128
128
|
}
|
|
129
129
|
return clone;
|
|
130
130
|
}
|
|
131
|
-
/** Muxy frame geometry keeps leaf owners stable;
|
|
131
|
+
/** Muxy frame geometry keeps leaf owners stable; the lazy resize controller owns constrained separator interactions. */
|
|
132
132
|
function SplitLayout(props) {
|
|
133
133
|
let root;
|
|
134
134
|
let pendingFrame;
|
|
@@ -229,7 +229,7 @@ function SplitLayout(props) {
|
|
|
229
229
|
if (disposed || generation !== resizeLoadGeneration || branches().length === 0 || focusEpoch !== focusRestoreEpoch) return;
|
|
230
230
|
const currentFocus = root?.ownerDocument.activeElement;
|
|
231
231
|
if (currentFocus && currentFocus !== root?.ownerDocument.body && currentFocus !== root) return;
|
|
232
|
-
root?.querySelector("[data-
|
|
232
|
+
root?.querySelector("[data-split-layout-handle]")?.focus({ preventScroll: true });
|
|
233
233
|
});
|
|
234
234
|
}, () => {
|
|
235
235
|
retryWithAlternateImport = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-layout.js","names":["For","createEffect","createComputed","createMemo","createUniqueId","createSignal","onMount","onCleanup","on","Show","Accessor","JSX","Dynamic","X","GripVertical","ActionButton","Button","cn","computeLayoutFrames","LayoutRect","paneDropIntent","PaneDropIntent","PANE_DRAG_TYPE","DRAG_PREVIEW_MAX_WIDTH","DRAG_PREVIEW_MAX_HEIGHT","listLeaves","SplitLayoutBranch","SplitLayoutLeaf","SplitLayoutState","SplitLayoutResizeControllerProps","ResizeController","props","L","Element","ResizeControllerState","SplitLayoutProps","state","label","labelForLeaf","leaf","renderLeaf","renderPaneLabel","paneTabIndex","labelForSeparator","branch","onResize","splitId","ratio","onFocus","leafId","onClose","onMove","targetId","intent","renderPaneActions","class","rectStyle","rect","CSSProperties","left","x","top","y","width","height","separatorPlaceholderStyle","horizontal","direction","transform","dragPreviewPlaceholder","source","HTMLElement","message","placeholder","document","createElement","className","getAttribute","setAttribute","localName","textContent","boundedSnapshotSize","sourceWidth","Math","max","sourceHeight","scale","min","round","cloneDragPreviewNode","Node","nodeType","TEXT_NODE","cloneNode","SVGElement","includes","undefined","HTMLImageElement","snapshot","size","naturalWidth","naturalHeight","complete","Error","context","getContext","drawImage","children","createDocumentFragment","child","childNodes","clone","append","length","attribute","removeAttribute","Array","from","attributes","test","name","HTMLCanvasElement","childClone","SplitLayout","root","HTMLDivElement","pendingFrame","disposed","resizeLoadGeneration","retryWithAlternateImport","alternateImportAttempts","focusHandleAfterRetry","focusRecoveryButtonAfterError","focusRestoreEpoch","focusEpoch","pendingFocusFrame","refs","Map","domIds","prefix","resizeReloadWarningId","nextDomId","nextDragId","dragPreview","drag","setDrag","id","token","drop","setDrop","resizeController","setResizeController","cancelPendingFocusRestore","cancelAnimationFrame","trackFocusChange","event","FocusEvent","target","body","addEventListener","removeEventListener","clearDrag","remove","createDragPreview","preview","inert","domId","existing","get","created","set","leaves","center","leafMap","map","frames","branches","values","flatMap","frame","node","kind","retry","generation","controllerImport","then","default","Controller","shouldFocusHandle","requestAnimationFrame","currentFocus","ownerDocument","activeElement","querySelector","focus","preventScroll","shouldFocusRetry","HTMLButtonElement","current","has","allowedTarget","transfer","DataTransfer","types","dropLabel","placement","branchMap","schedule","action","active","contains","field","HTMLTextAreaElement","HTMLInputElement","selection","start","selectionStart","end","selectionEnd","selectionDirection","isConnected","setSelectionRange","clear","close","next","_el$","_tmpl$","_el$2","firstChild","_$use","el","_$insert","_$createComponent","each","initial","content","paneLabel","actions","delete","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_el$7","nextSibling","$$focusin","dataTransfer","clientX","clientY","currentTarget","getBoundingClientRect","accepted","getData","preventDefault","relatedTarget","dropEffect","_$setAttribute","setData","effectAllowed","setDragImage","previewFrame","scaleX","scaleY","_c$2","_$memo","_c$3","variant","aria-label","tooltip","onClick","_c$4","_el$8","_tmpl$3","_$effect","_$className","_p$","_v$4","_v$5","_v$6","_v$7","focusedLeafId","_v$8","_v$9","_v$0","_v$1","_v$10","Boolean","_v$11","_v$12","e","t","a","o","i","n","s","h","_$style","r","d","l","when","fallback","_el$9","_tmpl$4","_v$13","_v$14","_v$15","join","_v$16","_v$17","_v$18","component","_c$","_el$0","_tmpl$5","_el$1","_tmpl$6","window","location","reload","ownsFocus","_v$","_v$2","_v$3","_$delegateEvents","_$createComponent","_$memo","_$className","_$setAttribute","_$style","_$delegateEvents"],"sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"sourcesContent":["import {\n For,\n createEffect,\n createComputed,\n createMemo,\n createUniqueId,\n createSignal,\n onMount,\n onCleanup,\n on,\n Show,\n type Accessor,\n type JSX,\n} from 'solid-js'\nimport { Dynamic } from 'solid-js/web'\nimport { X, GripVertical } from 'lucide-solid'\nimport { ActionButton } from '../../composites/action-button'\nimport { Button } from '../../ui/button'\nimport { cn } from '#lib/utils'\nimport { computeLayoutFrames, type LayoutRect } from './geometry'\nimport { paneDropIntent, type PaneDropIntent } from './drop'\nexport type { PaneDropIntent } from './drop'\nconst PANE_DRAG_TYPE = 'application/x-adea-pane-move'\nconst DRAG_PREVIEW_MAX_WIDTH = 384\nconst DRAG_PREVIEW_MAX_HEIGHT = 256\nimport {\n listLeaves,\n type SplitLayoutBranch,\n type SplitLayoutLeaf,\n type SplitLayoutState,\n} from './model'\nimport type { SplitLayoutResizeControllerProps } from './resize-controller-core'\n\ntype ResizeController<L extends SplitLayoutLeaf> = (\n props: SplitLayoutResizeControllerProps<L>\n) => JSX.Element\ntype ResizeControllerState<L extends SplitLayoutLeaf> = ResizeController<L> | false | 'error'\n\nexport type SplitLayoutProps<L extends SplitLayoutLeaf> = {\n state: SplitLayoutState<L>\n label: string\n /** Accessible name for a pane region and its close button. */\n labelForLeaf: (leaf: L) => string\n /** Called once per stable leaf owner; the accessor tracks opaque payload replacement. */\n renderLeaf: (leaf: Accessor<L>) => JSX.Element\n /** Inline visible header composition, separate from the region and close-button name. */\n renderPaneLabel?: (leaf: Accessor<L>) => JSX.Element\n /** Whether pane regions participate in sequential keyboard navigation; defaults to programmatic focus only. */\n paneTabIndex?: 0 | -1\n /** Accessible splitter name; defaults to the current orientation-specific label. */\n labelForSeparator?: (branch: SplitLayoutBranch<L>) => string\n onResize: (splitId: string, ratio: number) => void\n onFocus?: (leafId: string) => void\n /** Host performs the model transition and returns the surviving focus destination. */\n onClose?: (leafId: string) => string | undefined\n /** Pointer placement only; the host supplies keyboard commands and performs the model transition. */\n onMove?: (leafId: string, targetId: string, intent: PaneDropIntent) => void\n /** Stable header composition for host-owned keyboard actions/capability feedback. */\n renderPaneActions?: (leaf: Accessor<L>) => JSX.Element\n class?: string\n}\nfunction rectStyle(rect: LayoutRect): JSX.CSSProperties {\n return {\n left: `${rect.x * 100}%`,\n top: `${rect.y * 100}%`,\n width: `${rect.width * 100}%`,\n height: `${rect.height * 100}%`,\n }\n}\nfunction separatorPlaceholderStyle(branch: SplitLayoutBranch, rect: LayoutRect): JSX.CSSProperties {\n const horizontal = branch.direction === 'row'\n return {\n left: `${(rect.x + (horizontal ? rect.width * branch.ratio : 0)) * 100}%`,\n top: `${(rect.y + (horizontal ? 0 : rect.height * branch.ratio)) * 100}%`,\n width: horizontal ? '1px' : `${rect.width * 100}%`,\n height: horizontal ? `${rect.height * 100}%` : '1px',\n transform: horizontal ? 'translateX(-50%)' : 'translateY(-50%)',\n }\n}\nfunction dragPreviewPlaceholder(source: HTMLElement, message: string) {\n const placeholder = document.createElement('div')\n placeholder.className = cn(\n source.getAttribute('class'),\n 'flex min-h-8 min-w-0 items-center justify-center bg-muted px-2 text-center text-xs text-muted-foreground'\n )\n placeholder.setAttribute('data-split-drag-placeholder', source.localName)\n placeholder.textContent = message\n return placeholder\n}\nfunction boundedSnapshotSize(width: number, height: number) {\n const sourceWidth = Math.max(1, width)\n const sourceHeight = Math.max(1, height)\n const scale = Math.min(\n 1,\n DRAG_PREVIEW_MAX_WIDTH / sourceWidth,\n DRAG_PREVIEW_MAX_HEIGHT / sourceHeight\n )\n return {\n width: Math.max(1, Math.round(sourceWidth * scale)),\n height: Math.max(1, Math.round(sourceHeight * scale)),\n }\n}\nfunction cloneDragPreviewNode(source: Node): Node | undefined {\n if (source.nodeType === Node.TEXT_NODE) return source.cloneNode(false)\n if (!(source instanceof HTMLElement || source instanceof SVGElement))\n return source.cloneNode(false)\n\n if (['script', 'style', 'link', 'source', 'track', 'meta'].includes(source.localName))\n return undefined\n if (['iframe', 'video', 'audio', 'object', 'embed'].includes(source.localName))\n return dragPreviewPlaceholder(\n source as HTMLElement,\n 'Embedded content unavailable while moving'\n )\n if (source instanceof HTMLImageElement) {\n const snapshot = document.createElement('canvas')\n const size = boundedSnapshotSize(\n source.naturalWidth || source.width,\n source.naturalHeight || source.height\n )\n snapshot.width = size.width\n snapshot.height = size.height\n snapshot.className = source.getAttribute('class') ?? ''\n snapshot.setAttribute('data-split-drag-image', '')\n try {\n if (!source.complete || source.naturalWidth === 0)\n throw new Error('image has no decoded pixels')\n const context = snapshot.getContext('2d')\n if (!context) throw new Error('canvas snapshot context is unavailable')\n context.drawImage(source, 0, 0, snapshot.width, snapshot.height)\n return snapshot\n } catch {\n return dragPreviewPlaceholder(source, 'Image preview unavailable')\n }\n }\n\n // Copying a defined custom element can run its constructor; inserting it can\n // also reconnect a stream or terminal session. Flatten its display tree.\n if (source instanceof HTMLElement && source.localName.includes('-')) {\n const children = document.createDocumentFragment()\n for (const child of source.childNodes) {\n const clone = cloneDragPreviewNode(child)\n if (clone) children.append(clone)\n }\n return children.childNodes.length > 0\n ? children\n : dragPreviewPlaceholder(source, 'Live component preview unavailable while moving')\n }\n\n const clone = source.cloneNode(false) as HTMLElement | SVGElement\n for (const attribute of [\n 'id',\n 'style',\n 'draggable',\n 'data-pane-drag-handle',\n 'data-pane-id',\n 'src',\n 'srcset',\n 'href',\n 'xlink:href',\n 'data',\n 'poster',\n ])\n clone.removeAttribute(attribute)\n for (const attribute of Array.from(clone.attributes))\n if (/^on/i.test(attribute.name)) clone.removeAttribute(attribute.name)\n\n if (source instanceof HTMLCanvasElement && clone instanceof HTMLCanvasElement) {\n const size = boundedSnapshotSize(source.width, source.height)\n clone.width = size.width\n clone.height = size.height\n try {\n const context = clone.getContext('2d')\n if (!context) throw new Error('canvas snapshot context is unavailable')\n context.drawImage(source, 0, 0, clone.width, clone.height)\n } catch {\n return dragPreviewPlaceholder(source, 'Canvas preview unavailable while moving')\n }\n return clone\n }\n\n for (const child of source.childNodes) {\n const childClone = cloneDragPreviewNode(child)\n if (childClone) clone.append(childClone)\n }\n return clone\n}\n/** Muxy frame geometry keeps leaf owners stable; Corvu owns constrained separator interactions. */\nexport function SplitLayout<L extends SplitLayoutLeaf>(props: SplitLayoutProps<L>) {\n let root: HTMLDivElement | undefined\n let pendingFrame: number | undefined\n let disposed = false\n let resizeLoadGeneration = 0\n let retryWithAlternateImport = false\n let alternateImportAttempts = 0\n let focusHandleAfterRetry = false\n let focusRecoveryButtonAfterError = false\n let focusRestoreEpoch = 0\n let focusEpoch = 0\n let pendingFocusFrame: number | undefined\n const refs = new Map<string, HTMLElement>()\n const domIds = new Map<string, string>()\n const prefix = createUniqueId()\n const resizeReloadWarningId = `${prefix}-resize-reload-warning`\n let nextDomId = 0\n let nextDragId = 0\n let dragPreview: HTMLElement | undefined\n const [drag, setDrag] = createSignal<{ id: string; token: string }>()\n const [drop, setDrop] = createSignal<{ id: string; intent: PaneDropIntent }>()\n const [resizeController, setResizeController] = createSignal<ResizeControllerState<L>>()\n const cancelPendingFocusRestore = () => {\n if (pendingFocusFrame !== undefined) cancelAnimationFrame(pendingFocusFrame)\n pendingFocusFrame = undefined\n }\n const trackFocusChange = (event: FocusEvent) => {\n if (event.target === document.body) return\n focusEpoch += 1\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n }\n onMount(() => {\n document.addEventListener('focusin', trackFocusChange)\n onCleanup(() => document.removeEventListener('focusin', trackFocusChange))\n })\n const clearDrag = () => {\n setDrag(undefined)\n setDrop(undefined)\n dragPreview?.remove()\n dragPreview = undefined\n }\n const createDragPreview = (source: HTMLElement) => {\n dragPreview?.remove()\n const preview = cloneDragPreviewNode(source) as HTMLElement\n preview.className =\n 'pointer-events-none fixed -left-full top-0 z-(--z-dialog) flex h-64 max-h-screen w-96 max-w-screen min-h-0 min-w-0 flex-col overflow-hidden rounded-lg border border-border bg-card text-card-foreground shadow-xl'\n preview.removeAttribute('id')\n preview.removeAttribute('style')\n preview.removeAttribute('role')\n preview.removeAttribute('aria-label')\n preview.removeAttribute('data-pane-id')\n preview.removeAttribute('data-focused')\n preview.removeAttribute('data-drag-source')\n preview.removeAttribute('data-drop-direction')\n preview.removeAttribute('data-drop-placement')\n preview.setAttribute('data-split-drag-preview', '')\n preview.setAttribute('aria-hidden', 'true')\n preview.inert = true\n document.body.append(preview)\n dragPreview = preview\n return preview\n }\n const domId = (id: string) => {\n const existing = domIds.get(id)\n if (existing) return existing\n const created = `${prefix}-pane-${nextDomId++}`\n domIds.set(id, created)\n return created\n }\n const leaves = createMemo(() => listLeaves(props.state.center))\n const leafMap = createMemo(() => new Map(leaves().map((leaf) => [leaf.id, leaf])))\n const frames = createMemo(() => computeLayoutFrames(props.state.center))\n const branches = createMemo(() =>\n Array.from(frames().values()).flatMap((frame) =>\n frame.node.kind === 'split' ? [frame.node] : []\n )\n )\n createEffect(() => {\n if (branches().length === 0) {\n resizeLoadGeneration += 1\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n // Keep a loaded controller so a later split does not re-import a facade\n // that may have failed before recovery. Clear only transient UI state.\n if (resizeController() === false || resizeController() === 'error')\n setResizeController(undefined)\n return\n }\n if (resizeController() !== undefined) return\n const retry = retryWithAlternateImport\n const generation = ++resizeLoadGeneration\n setResizeController(false)\n const controllerImport = retry\n ? alternateImportAttempts++ === 0\n ? import('./resize-controller-retry')\n : import('./resize-controller-retry-2')\n : import('./resize-controller')\n void controllerImport.then(\n ({ default: Controller }) => {\n if (disposed || generation !== resizeLoadGeneration || branches().length === 0) return\n const shouldFocusHandle = focusHandleAfterRetry && focusEpoch === focusRestoreEpoch\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n retryWithAlternateImport = false\n alternateImportAttempts = 0\n setResizeController(() => Controller)\n if (shouldFocusHandle)\n pendingFocusFrame = requestAnimationFrame(() => {\n pendingFocusFrame = undefined\n if (\n disposed ||\n generation !== resizeLoadGeneration ||\n branches().length === 0 ||\n focusEpoch !== focusRestoreEpoch\n )\n return\n const currentFocus = root?.ownerDocument.activeElement\n if (currentFocus && currentFocus !== root?.ownerDocument.body && currentFocus !== root)\n return\n root?.querySelector<HTMLElement>('[data-corvu-resizable-handle]')?.focus({\n preventScroll: true,\n })\n })\n },\n () => {\n // A rejected dynamic import can remain cached under its specifier.\n // The next split must start from the alternate module entry as well.\n retryWithAlternateImport = true\n if (!disposed && generation === resizeLoadGeneration && branches().length > 0) {\n setResizeController('error')\n const shouldFocusRetry = focusRecoveryButtonAfterError && focusEpoch === focusRestoreEpoch\n if (shouldFocusRetry)\n pendingFocusFrame = requestAnimationFrame(() => {\n pendingFocusFrame = undefined\n if (\n disposed ||\n generation !== resizeLoadGeneration ||\n branches().length === 0 ||\n focusEpoch !== focusRestoreEpoch\n )\n return\n root?.querySelector<HTMLButtonElement>('[data-resize-retry]')?.focus({\n preventScroll: true,\n })\n })\n }\n }\n )\n })\n createComputed(() => {\n const current = drag()\n if (current && (!props.onMove || !leafMap().has(current.id))) clearDrag()\n const target = drop()\n if (target && !leafMap().has(target.id)) setDrop(undefined)\n })\n const allowedTarget = (id: string, transfer: DataTransfer | null) => {\n const current = drag()\n return props.onMove &&\n current &&\n current.id !== id &&\n leafMap().has(current.id) &&\n leafMap().has(id) &&\n transfer?.types.includes(PANE_DRAG_TYPE)\n ? current\n : undefined\n }\n const dropLabel = createMemo(() => {\n const target = drop()\n const leaf = target ? leafMap().get(target.id) : undefined\n return target && leaf\n ? `Drop to place pane ${target.intent.placement} ${props.labelForLeaf(leaf)}`\n : ''\n })\n const branchMap = createMemo(() => new Map(branches().map((branch) => [branch.id, branch])))\n const schedule = (action: () => void) => {\n if (pendingFrame !== undefined) cancelAnimationFrame(pendingFrame)\n pendingFrame = requestAnimationFrame(() => {\n pendingFrame = undefined\n action()\n })\n }\n // Register before keyed children update: capture a focused editor before an\n // ordered DOM move can blur it. Never override a newer focus outside this root.\n createComputed(\n on(\n () => props.state.center,\n () => {\n const active = root?.ownerDocument.activeElement\n if (!root || !(active instanceof HTMLElement) || !root.contains(active)) return\n const field =\n active instanceof HTMLTextAreaElement || active instanceof HTMLInputElement\n ? active\n : undefined\n const selection = field\n ? {\n start: field.selectionStart,\n end: field.selectionEnd,\n direction: field.selectionDirection,\n }\n : undefined\n schedule(() => {\n if (!active.isConnected || !root?.contains(active)) return\n const current = active.ownerDocument.activeElement\n if (current !== active && current !== active.ownerDocument.body) return\n active.focus({ preventScroll: true })\n if (field && selection?.start !== null && selection?.end !== null && selection)\n field.setSelectionRange(\n selection.start,\n selection.end,\n selection.direction ?? undefined\n )\n })\n }\n )\n )\n onCleanup(() => {\n disposed = true\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n if (pendingFrame !== undefined) cancelAnimationFrame(pendingFrame)\n clearDrag()\n refs.clear()\n domIds.clear()\n })\n const close = (id: string) => {\n const next = props.onClose?.(id)\n if (next) schedule(() => refs.get(next)?.focus({ preventScroll: true }))\n }\n return (\n <div\n ref={(el) => {\n root = el\n }}\n role=\"group\"\n aria-label={props.label}\n data-slot=\"split-layout\"\n data-dragging={drag() ? '' : undefined}\n class={cn('relative size-full min-h-0 min-w-0 data-[dragging]:cursor-grabbing', props.class)}\n >\n <For each={leaves().map((leaf) => leaf.id)}>\n {(id) => {\n const initial = leafMap().get(id)!\n const leaf = () => leafMap().get(id) ?? initial\n const content = props.renderLeaf(leaf)\n const paneLabel = props.renderPaneLabel?.(leaf)\n const actions = props.renderPaneActions?.(leaf)\n const intent = () => (drop()?.id === id ? drop()?.intent : undefined)\n onCleanup(() => {\n refs.delete(id)\n domIds.delete(id)\n })\n return (\n <section\n ref={(el) => refs.set(id, el)}\n id={domId(id)}\n role=\"region\"\n aria-label={props.labelForLeaf(leaf())}\n tabIndex={props.paneTabIndex ?? -1}\n data-pane-id={id}\n data-focused={props.state.focusedLeafId === id ? '' : undefined}\n data-drag-source={drag()?.id === id ? '' : undefined}\n data-drop-direction={intent()?.direction}\n data-drop-placement={intent()?.placement}\n onDragOver={(event) => {\n if (!allowedTarget(id, event.dataTransfer)) return\n const next = paneDropIntent(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect()\n )\n if (!next) {\n setDrop(undefined)\n return\n }\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n setDrop({ id, intent: next })\n }}\n onDragLeave={(event) => {\n if (\n event.relatedTarget instanceof Node &&\n event.currentTarget.contains(event.relatedTarget)\n )\n return\n if (drop()?.id === id) setDrop(undefined)\n }}\n onDrop={(event) => {\n const current = allowedTarget(id, event.dataTransfer)\n const next = paneDropIntent(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect()\n )\n const accepted =\n current && next && event.dataTransfer?.getData(PANE_DRAG_TYPE) === current.token\n clearDrag()\n if (!accepted) return\n event.preventDefault()\n props.onMove?.(current.id, id, next)\n }}\n style={rectStyle(frames().get(id)?.rect ?? { x: 0, y: 0, width: 0, height: 0 })}\n class=\"absolute flex min-h-0 min-w-0 flex-col overflow-hidden border border-border transition-opacity motion-reduce:transition-none data-[drag-source]:opacity-40 data-[focused]:border-primary bg-background text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring\"\n onFocusIn={() => props.onFocus?.(id)}\n >\n <header class=\"flex min-w-0 shrink-0 items-center gap-2 bg-surface px-2\">\n <span\n data-pane-drag-handle=\"\"\n draggable={Boolean(props.onMove)}\n class={cn('flex min-w-0 flex-1 items-center gap-2 truncate text-sm', {\n 'cursor-grab': Boolean(props.onMove),\n 'cursor-grabbing': drag()?.id === id,\n })}\n title={props.onMove ? `Drag ${props.labelForLeaf(leaf())} to move` : undefined}\n onDragStart={(event) => {\n if (!props.onMove || !event.dataTransfer) {\n event.preventDefault()\n return\n }\n const token = `${prefix}-${++nextDragId}`\n setDrag({ id, token })\n event.dataTransfer.setData(PANE_DRAG_TYPE, token)\n event.dataTransfer.effectAllowed = 'move'\n // The native drag image carries this pane's actual content\n // in a bounded floating-window frame; the source recedes\n // independently as the browser follows the image pointer.\n const source = refs.get(id)\n const frame = source?.getBoundingClientRect()\n if (source && frame && typeof event.dataTransfer.setDragImage === 'function') {\n const preview = createDragPreview(source)\n const previewFrame = preview.getBoundingClientRect()\n const scaleX = previewFrame.width / frame.width\n const scaleY = previewFrame.height / frame.height\n event.dataTransfer.setDragImage(\n preview,\n Math.max(0, Math.round((event.clientX - frame.left) * scaleX)),\n Math.max(0, Math.round((event.clientY - frame.top) * scaleY))\n )\n preview.setAttribute('data-native-drag-image', '')\n }\n }}\n onDragEnd={clearDrag}\n >\n {props.onMove ? (\n <GripVertical class=\"size-3 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span class=\"min-w-0 flex-1 truncate\">\n {paneLabel ?? props.labelForLeaf(leaf())}\n </span>\n </span>\n {actions}\n {props.onClose ? (\n <ActionButton\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={`Close ${props.labelForLeaf(leaf())}`}\n tooltip={`Close ${props.labelForLeaf(leaf())}.`}\n onClick={() => close(id)}\n >\n <X />\n </ActionButton>\n ) : null}\n </header>\n <div class=\"min-h-0 min-w-0 flex-1 overflow-auto\">{content}</div>\n {intent() ? (\n <div\n aria-hidden=\"true\"\n class={cn('pointer-events-none absolute border-2 border-primary bg-primary/10', {\n 'inset-y-0 left-0 w-1/2':\n intent()?.direction === 'row' && intent()?.placement === 'before',\n 'inset-y-0 right-0 w-1/2':\n intent()?.direction === 'row' && intent()?.placement === 'after',\n 'inset-x-0 top-0 h-1/2':\n intent()?.direction === 'column' && intent()?.placement === 'before',\n 'inset-x-0 bottom-0 h-1/2':\n intent()?.direction === 'column' && intent()?.placement === 'after',\n })}\n />\n ) : null}\n </section>\n )\n }}\n </For>\n <span class=\"sr-only\" role=\"status\">\n {dropLabel() ||\n (resizeController() === 'error'\n ? alternateImportAttempts >= 2\n ? 'Resize controls did not load after repeated attempts. Reloading may discard unsaved pane content.'\n : 'Resize controls did not load.'\n : '')}\n </span>\n <For each={branches().map((branch) => branch.id)}>\n {(id) => {\n const initial = branchMap().get(id)!\n const branch: Accessor<SplitLayoutBranch<L>> = () => branchMap().get(id) ?? initial\n const rect = () => frames().get(id)?.rect ?? { x: 0, y: 0, width: 0, height: 0 }\n return (\n <Show\n when={typeof resizeController() === 'function'}\n fallback={\n <div\n role=\"separator\"\n aria-label={\n props.labelForSeparator?.(branch()) ??\n (branch().direction === 'row' ? 'Resize pane columns' : 'Resize pane rows')\n }\n aria-orientation={branch().direction === 'row' ? 'vertical' : 'horizontal'}\n aria-controls={listLeaves(branch())\n .map((leaf) => domId(leaf.id))\n .join(' ')}\n aria-valuemin={10}\n aria-valuemax={90}\n aria-valuenow={Math.round(branch().ratio * 100)}\n aria-disabled=\"true\"\n tabIndex={-1}\n data-direction={branch().direction}\n style={separatorPlaceholderStyle(branch(), rect())}\n class=\"pointer-events-none absolute bg-border\"\n />\n }\n >\n <Dynamic\n component={resizeController() as ResizeController<L>}\n branch={branch}\n rect={() => rectStyle(rect())}\n domId={domId}\n root={() => root}\n labelForSeparator={props.labelForSeparator}\n onResize={props.onResize}\n />\n </Show>\n )\n }}\n </For>\n {resizeController() === 'error' ? (\n <div class=\"absolute top-2 right-2 z-(--z-menu) flex max-w-sm flex-col items-end gap-2\">\n {alternateImportAttempts >= 2 ? (\n <p\n id={resizeReloadWarningId}\n role=\"alert\"\n class=\"rounded-md border bg-background p-2 text-sm shadow-md\"\n >\n Reloading may discard unsaved pane content.\n </p>\n ) : null}\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-resize-retry\n aria-describedby={alternateImportAttempts >= 2 ? resizeReloadWarningId : undefined}\n onClick={(event) => {\n if (alternateImportAttempts >= 2) {\n window.location.reload()\n return\n }\n const ownsFocus = document.activeElement === event.currentTarget\n focusHandleAfterRetry = ownsFocus\n focusRecoveryButtonAfterError = ownsFocus\n focusRestoreEpoch = focusEpoch\n retryWithAlternateImport = true\n setResizeController(undefined)\n }}\n >\n {alternateImportAttempts >= 2 ? 'Reload page to retry resizing' : 'Retry pane resizing'}\n </Button>\n </div>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"split-layout.js","names":["For","createEffect","createComputed","createMemo","createUniqueId","createSignal","onMount","onCleanup","on","Show","Accessor","JSX","Dynamic","X","GripVertical","ActionButton","Button","cn","computeLayoutFrames","LayoutRect","paneDropIntent","PaneDropIntent","PANE_DRAG_TYPE","DRAG_PREVIEW_MAX_WIDTH","DRAG_PREVIEW_MAX_HEIGHT","listLeaves","SplitLayoutBranch","SplitLayoutLeaf","SplitLayoutState","SplitLayoutResizeControllerProps","ResizeController","props","L","Element","ResizeControllerState","SplitLayoutProps","state","label","labelForLeaf","leaf","renderLeaf","renderPaneLabel","paneTabIndex","labelForSeparator","branch","onResize","splitId","ratio","onFocus","leafId","onClose","onMove","targetId","intent","renderPaneActions","class","rectStyle","rect","CSSProperties","left","x","top","y","width","height","separatorPlaceholderStyle","horizontal","direction","transform","dragPreviewPlaceholder","source","HTMLElement","message","placeholder","document","createElement","className","getAttribute","setAttribute","localName","textContent","boundedSnapshotSize","sourceWidth","Math","max","sourceHeight","scale","min","round","cloneDragPreviewNode","Node","nodeType","TEXT_NODE","cloneNode","SVGElement","includes","undefined","HTMLImageElement","snapshot","size","naturalWidth","naturalHeight","complete","Error","context","getContext","drawImage","children","createDocumentFragment","child","childNodes","clone","append","length","attribute","removeAttribute","Array","from","attributes","test","name","HTMLCanvasElement","childClone","SplitLayout","root","HTMLDivElement","pendingFrame","disposed","resizeLoadGeneration","retryWithAlternateImport","alternateImportAttempts","focusHandleAfterRetry","focusRecoveryButtonAfterError","focusRestoreEpoch","focusEpoch","pendingFocusFrame","refs","Map","domIds","prefix","resizeReloadWarningId","nextDomId","nextDragId","dragPreview","drag","setDrag","id","token","drop","setDrop","resizeController","setResizeController","cancelPendingFocusRestore","cancelAnimationFrame","trackFocusChange","event","FocusEvent","target","body","addEventListener","removeEventListener","clearDrag","remove","createDragPreview","preview","inert","domId","existing","get","created","set","leaves","center","leafMap","map","frames","branches","values","flatMap","frame","node","kind","retry","generation","controllerImport","then","default","Controller","shouldFocusHandle","requestAnimationFrame","currentFocus","ownerDocument","activeElement","querySelector","focus","preventScroll","shouldFocusRetry","HTMLButtonElement","current","has","allowedTarget","transfer","DataTransfer","types","dropLabel","placement","branchMap","schedule","action","active","contains","field","HTMLTextAreaElement","HTMLInputElement","selection","start","selectionStart","end","selectionEnd","selectionDirection","isConnected","setSelectionRange","clear","close","next","_el$","_tmpl$","_el$2","firstChild","_$use","el","_$insert","_$createComponent","each","initial","content","paneLabel","actions","delete","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_el$7","nextSibling","$$focusin","dataTransfer","clientX","clientY","currentTarget","getBoundingClientRect","accepted","getData","preventDefault","relatedTarget","dropEffect","_$setAttribute","setData","effectAllowed","setDragImage","previewFrame","scaleX","scaleY","_c$2","_$memo","_c$3","variant","aria-label","tooltip","onClick","_c$4","_el$8","_tmpl$3","_$effect","_$className","_p$","_v$4","_v$5","_v$6","_v$7","focusedLeafId","_v$8","_v$9","_v$0","_v$1","_v$10","Boolean","_v$11","_v$12","e","t","a","o","i","n","s","h","_$style","r","d","l","when","fallback","_el$9","_tmpl$4","_v$13","_v$14","_v$15","join","_v$16","_v$17","_v$18","component","_c$","_el$0","_tmpl$5","_el$1","_tmpl$6","window","location","reload","ownsFocus","_v$","_v$2","_v$3","_$delegateEvents","_$createComponent","_$memo","_$className","_$setAttribute","_$style","_$delegateEvents"],"sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"sourcesContent":["import {\n For,\n createEffect,\n createComputed,\n createMemo,\n createUniqueId,\n createSignal,\n onMount,\n onCleanup,\n on,\n Show,\n type Accessor,\n type JSX,\n} from 'solid-js'\nimport { Dynamic } from 'solid-js/web'\nimport { X, GripVertical } from 'lucide-solid'\nimport { ActionButton } from '../../composites/action-button'\nimport { Button } from '../../ui/button'\nimport { cn } from '#lib/utils'\nimport { computeLayoutFrames, type LayoutRect } from './geometry'\nimport { paneDropIntent, type PaneDropIntent } from './drop'\nexport type { PaneDropIntent } from './drop'\nconst PANE_DRAG_TYPE = 'application/x-adea-pane-move'\nconst DRAG_PREVIEW_MAX_WIDTH = 384\nconst DRAG_PREVIEW_MAX_HEIGHT = 256\nimport {\n listLeaves,\n type SplitLayoutBranch,\n type SplitLayoutLeaf,\n type SplitLayoutState,\n} from './model'\nimport type { SplitLayoutResizeControllerProps } from './resize-controller-core'\n\ntype ResizeController<L extends SplitLayoutLeaf> = (\n props: SplitLayoutResizeControllerProps<L>\n) => JSX.Element\ntype ResizeControllerState<L extends SplitLayoutLeaf> = ResizeController<L> | false | 'error'\n\nexport type SplitLayoutProps<L extends SplitLayoutLeaf> = {\n state: SplitLayoutState<L>\n label: string\n /** Accessible name for a pane region and its close button. */\n labelForLeaf: (leaf: L) => string\n /** Called once per stable leaf owner; the accessor tracks opaque payload replacement. */\n renderLeaf: (leaf: Accessor<L>) => JSX.Element\n /** Inline visible header composition, separate from the region and close-button name. */\n renderPaneLabel?: (leaf: Accessor<L>) => JSX.Element\n /** Whether pane regions participate in sequential keyboard navigation; defaults to programmatic focus only. */\n paneTabIndex?: 0 | -1\n /** Accessible splitter name; defaults to the current orientation-specific label. */\n labelForSeparator?: (branch: SplitLayoutBranch<L>) => string\n onResize: (splitId: string, ratio: number) => void\n onFocus?: (leafId: string) => void\n /** Host performs the model transition and returns the surviving focus destination. */\n onClose?: (leafId: string) => string | undefined\n /** Pointer placement only; the host supplies keyboard commands and performs the model transition. */\n onMove?: (leafId: string, targetId: string, intent: PaneDropIntent) => void\n /** Stable header composition for host-owned keyboard actions/capability feedback. */\n renderPaneActions?: (leaf: Accessor<L>) => JSX.Element\n class?: string\n}\nfunction rectStyle(rect: LayoutRect): JSX.CSSProperties {\n return {\n left: `${rect.x * 100}%`,\n top: `${rect.y * 100}%`,\n width: `${rect.width * 100}%`,\n height: `${rect.height * 100}%`,\n }\n}\nfunction separatorPlaceholderStyle(branch: SplitLayoutBranch, rect: LayoutRect): JSX.CSSProperties {\n const horizontal = branch.direction === 'row'\n return {\n left: `${(rect.x + (horizontal ? rect.width * branch.ratio : 0)) * 100}%`,\n top: `${(rect.y + (horizontal ? 0 : rect.height * branch.ratio)) * 100}%`,\n width: horizontal ? '1px' : `${rect.width * 100}%`,\n height: horizontal ? `${rect.height * 100}%` : '1px',\n transform: horizontal ? 'translateX(-50%)' : 'translateY(-50%)',\n }\n}\nfunction dragPreviewPlaceholder(source: HTMLElement, message: string) {\n const placeholder = document.createElement('div')\n placeholder.className = cn(\n source.getAttribute('class'),\n 'flex min-h-8 min-w-0 items-center justify-center bg-muted px-2 text-center text-xs text-muted-foreground'\n )\n placeholder.setAttribute('data-split-drag-placeholder', source.localName)\n placeholder.textContent = message\n return placeholder\n}\nfunction boundedSnapshotSize(width: number, height: number) {\n const sourceWidth = Math.max(1, width)\n const sourceHeight = Math.max(1, height)\n const scale = Math.min(\n 1,\n DRAG_PREVIEW_MAX_WIDTH / sourceWidth,\n DRAG_PREVIEW_MAX_HEIGHT / sourceHeight\n )\n return {\n width: Math.max(1, Math.round(sourceWidth * scale)),\n height: Math.max(1, Math.round(sourceHeight * scale)),\n }\n}\nfunction cloneDragPreviewNode(source: Node): Node | undefined {\n if (source.nodeType === Node.TEXT_NODE) return source.cloneNode(false)\n if (!(source instanceof HTMLElement || source instanceof SVGElement))\n return source.cloneNode(false)\n\n if (['script', 'style', 'link', 'source', 'track', 'meta'].includes(source.localName))\n return undefined\n if (['iframe', 'video', 'audio', 'object', 'embed'].includes(source.localName))\n return dragPreviewPlaceholder(\n source as HTMLElement,\n 'Embedded content unavailable while moving'\n )\n if (source instanceof HTMLImageElement) {\n const snapshot = document.createElement('canvas')\n const size = boundedSnapshotSize(\n source.naturalWidth || source.width,\n source.naturalHeight || source.height\n )\n snapshot.width = size.width\n snapshot.height = size.height\n snapshot.className = source.getAttribute('class') ?? ''\n snapshot.setAttribute('data-split-drag-image', '')\n try {\n if (!source.complete || source.naturalWidth === 0)\n throw new Error('image has no decoded pixels')\n const context = snapshot.getContext('2d')\n if (!context) throw new Error('canvas snapshot context is unavailable')\n context.drawImage(source, 0, 0, snapshot.width, snapshot.height)\n return snapshot\n } catch {\n return dragPreviewPlaceholder(source, 'Image preview unavailable')\n }\n }\n\n // Copying a defined custom element can run its constructor; inserting it can\n // also reconnect a stream or terminal session. Flatten its display tree.\n if (source instanceof HTMLElement && source.localName.includes('-')) {\n const children = document.createDocumentFragment()\n for (const child of source.childNodes) {\n const clone = cloneDragPreviewNode(child)\n if (clone) children.append(clone)\n }\n return children.childNodes.length > 0\n ? children\n : dragPreviewPlaceholder(source, 'Live component preview unavailable while moving')\n }\n\n const clone = source.cloneNode(false) as HTMLElement | SVGElement\n for (const attribute of [\n 'id',\n 'style',\n 'draggable',\n 'data-pane-drag-handle',\n 'data-pane-id',\n 'src',\n 'srcset',\n 'href',\n 'xlink:href',\n 'data',\n 'poster',\n ])\n clone.removeAttribute(attribute)\n for (const attribute of Array.from(clone.attributes))\n if (/^on/i.test(attribute.name)) clone.removeAttribute(attribute.name)\n\n if (source instanceof HTMLCanvasElement && clone instanceof HTMLCanvasElement) {\n const size = boundedSnapshotSize(source.width, source.height)\n clone.width = size.width\n clone.height = size.height\n try {\n const context = clone.getContext('2d')\n if (!context) throw new Error('canvas snapshot context is unavailable')\n context.drawImage(source, 0, 0, clone.width, clone.height)\n } catch {\n return dragPreviewPlaceholder(source, 'Canvas preview unavailable while moving')\n }\n return clone\n }\n\n for (const child of source.childNodes) {\n const childClone = cloneDragPreviewNode(child)\n if (childClone) clone.append(childClone)\n }\n return clone\n}\n/** Muxy frame geometry keeps leaf owners stable; the lazy resize controller owns constrained separator interactions. */\nexport function SplitLayout<L extends SplitLayoutLeaf>(props: SplitLayoutProps<L>) {\n let root: HTMLDivElement | undefined\n let pendingFrame: number | undefined\n let disposed = false\n let resizeLoadGeneration = 0\n let retryWithAlternateImport = false\n let alternateImportAttempts = 0\n let focusHandleAfterRetry = false\n let focusRecoveryButtonAfterError = false\n let focusRestoreEpoch = 0\n let focusEpoch = 0\n let pendingFocusFrame: number | undefined\n const refs = new Map<string, HTMLElement>()\n const domIds = new Map<string, string>()\n const prefix = createUniqueId()\n const resizeReloadWarningId = `${prefix}-resize-reload-warning`\n let nextDomId = 0\n let nextDragId = 0\n let dragPreview: HTMLElement | undefined\n const [drag, setDrag] = createSignal<{ id: string; token: string }>()\n const [drop, setDrop] = createSignal<{ id: string; intent: PaneDropIntent }>()\n const [resizeController, setResizeController] = createSignal<ResizeControllerState<L>>()\n const cancelPendingFocusRestore = () => {\n if (pendingFocusFrame !== undefined) cancelAnimationFrame(pendingFocusFrame)\n pendingFocusFrame = undefined\n }\n const trackFocusChange = (event: FocusEvent) => {\n if (event.target === document.body) return\n focusEpoch += 1\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n }\n onMount(() => {\n document.addEventListener('focusin', trackFocusChange)\n onCleanup(() => document.removeEventListener('focusin', trackFocusChange))\n })\n const clearDrag = () => {\n setDrag(undefined)\n setDrop(undefined)\n dragPreview?.remove()\n dragPreview = undefined\n }\n const createDragPreview = (source: HTMLElement) => {\n dragPreview?.remove()\n const preview = cloneDragPreviewNode(source) as HTMLElement\n preview.className =\n 'pointer-events-none fixed -left-full top-0 z-(--z-dialog) flex h-64 max-h-screen w-96 max-w-screen min-h-0 min-w-0 flex-col overflow-hidden rounded-lg border border-border bg-card text-card-foreground shadow-xl'\n preview.removeAttribute('id')\n preview.removeAttribute('style')\n preview.removeAttribute('role')\n preview.removeAttribute('aria-label')\n preview.removeAttribute('data-pane-id')\n preview.removeAttribute('data-focused')\n preview.removeAttribute('data-drag-source')\n preview.removeAttribute('data-drop-direction')\n preview.removeAttribute('data-drop-placement')\n preview.setAttribute('data-split-drag-preview', '')\n preview.setAttribute('aria-hidden', 'true')\n preview.inert = true\n document.body.append(preview)\n dragPreview = preview\n return preview\n }\n const domId = (id: string) => {\n const existing = domIds.get(id)\n if (existing) return existing\n const created = `${prefix}-pane-${nextDomId++}`\n domIds.set(id, created)\n return created\n }\n const leaves = createMemo(() => listLeaves(props.state.center))\n const leafMap = createMemo(() => new Map(leaves().map((leaf) => [leaf.id, leaf])))\n const frames = createMemo(() => computeLayoutFrames(props.state.center))\n const branches = createMemo(() =>\n Array.from(frames().values()).flatMap((frame) =>\n frame.node.kind === 'split' ? [frame.node] : []\n )\n )\n createEffect(() => {\n if (branches().length === 0) {\n resizeLoadGeneration += 1\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n // Keep a loaded controller so a later split does not re-import a facade\n // that may have failed before recovery. Clear only transient UI state.\n if (resizeController() === false || resizeController() === 'error')\n setResizeController(undefined)\n return\n }\n if (resizeController() !== undefined) return\n const retry = retryWithAlternateImport\n const generation = ++resizeLoadGeneration\n setResizeController(false)\n const controllerImport = retry\n ? alternateImportAttempts++ === 0\n ? import('./resize-controller-retry')\n : import('./resize-controller-retry-2')\n : import('./resize-controller')\n void controllerImport.then(\n ({ default: Controller }) => {\n if (disposed || generation !== resizeLoadGeneration || branches().length === 0) return\n const shouldFocusHandle = focusHandleAfterRetry && focusEpoch === focusRestoreEpoch\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n retryWithAlternateImport = false\n alternateImportAttempts = 0\n setResizeController(() => Controller)\n if (shouldFocusHandle)\n pendingFocusFrame = requestAnimationFrame(() => {\n pendingFocusFrame = undefined\n if (\n disposed ||\n generation !== resizeLoadGeneration ||\n branches().length === 0 ||\n focusEpoch !== focusRestoreEpoch\n )\n return\n const currentFocus = root?.ownerDocument.activeElement\n if (currentFocus && currentFocus !== root?.ownerDocument.body && currentFocus !== root)\n return\n root?.querySelector<HTMLElement>('[data-split-layout-handle]')?.focus({\n preventScroll: true,\n })\n })\n },\n () => {\n // A rejected dynamic import can remain cached under its specifier.\n // The next split must start from the alternate module entry as well.\n retryWithAlternateImport = true\n if (!disposed && generation === resizeLoadGeneration && branches().length > 0) {\n setResizeController('error')\n const shouldFocusRetry = focusRecoveryButtonAfterError && focusEpoch === focusRestoreEpoch\n if (shouldFocusRetry)\n pendingFocusFrame = requestAnimationFrame(() => {\n pendingFocusFrame = undefined\n if (\n disposed ||\n generation !== resizeLoadGeneration ||\n branches().length === 0 ||\n focusEpoch !== focusRestoreEpoch\n )\n return\n root?.querySelector<HTMLButtonElement>('[data-resize-retry]')?.focus({\n preventScroll: true,\n })\n })\n }\n }\n )\n })\n createComputed(() => {\n const current = drag()\n if (current && (!props.onMove || !leafMap().has(current.id))) clearDrag()\n const target = drop()\n if (target && !leafMap().has(target.id)) setDrop(undefined)\n })\n const allowedTarget = (id: string, transfer: DataTransfer | null) => {\n const current = drag()\n return props.onMove &&\n current &&\n current.id !== id &&\n leafMap().has(current.id) &&\n leafMap().has(id) &&\n transfer?.types.includes(PANE_DRAG_TYPE)\n ? current\n : undefined\n }\n const dropLabel = createMemo(() => {\n const target = drop()\n const leaf = target ? leafMap().get(target.id) : undefined\n return target && leaf\n ? `Drop to place pane ${target.intent.placement} ${props.labelForLeaf(leaf)}`\n : ''\n })\n const branchMap = createMemo(() => new Map(branches().map((branch) => [branch.id, branch])))\n const schedule = (action: () => void) => {\n if (pendingFrame !== undefined) cancelAnimationFrame(pendingFrame)\n pendingFrame = requestAnimationFrame(() => {\n pendingFrame = undefined\n action()\n })\n }\n // Register before keyed children update: capture a focused editor before an\n // ordered DOM move can blur it. Never override a newer focus outside this root.\n createComputed(\n on(\n () => props.state.center,\n () => {\n const active = root?.ownerDocument.activeElement\n if (!root || !(active instanceof HTMLElement) || !root.contains(active)) return\n const field =\n active instanceof HTMLTextAreaElement || active instanceof HTMLInputElement\n ? active\n : undefined\n const selection = field\n ? {\n start: field.selectionStart,\n end: field.selectionEnd,\n direction: field.selectionDirection,\n }\n : undefined\n schedule(() => {\n if (!active.isConnected || !root?.contains(active)) return\n const current = active.ownerDocument.activeElement\n if (current !== active && current !== active.ownerDocument.body) return\n active.focus({ preventScroll: true })\n if (field && selection?.start !== null && selection?.end !== null && selection)\n field.setSelectionRange(\n selection.start,\n selection.end,\n selection.direction ?? undefined\n )\n })\n }\n )\n )\n onCleanup(() => {\n disposed = true\n focusHandleAfterRetry = false\n focusRecoveryButtonAfterError = false\n cancelPendingFocusRestore()\n if (pendingFrame !== undefined) cancelAnimationFrame(pendingFrame)\n clearDrag()\n refs.clear()\n domIds.clear()\n })\n const close = (id: string) => {\n const next = props.onClose?.(id)\n if (next) schedule(() => refs.get(next)?.focus({ preventScroll: true }))\n }\n return (\n <div\n ref={(el) => {\n root = el\n }}\n role=\"group\"\n aria-label={props.label}\n data-slot=\"split-layout\"\n data-dragging={drag() ? '' : undefined}\n class={cn('relative size-full min-h-0 min-w-0 data-[dragging]:cursor-grabbing', props.class)}\n >\n <For each={leaves().map((leaf) => leaf.id)}>\n {(id) => {\n const initial = leafMap().get(id)!\n const leaf = () => leafMap().get(id) ?? initial\n const content = props.renderLeaf(leaf)\n const paneLabel = props.renderPaneLabel?.(leaf)\n const actions = props.renderPaneActions?.(leaf)\n const intent = () => (drop()?.id === id ? drop()?.intent : undefined)\n onCleanup(() => {\n refs.delete(id)\n domIds.delete(id)\n })\n return (\n <section\n ref={(el) => refs.set(id, el)}\n id={domId(id)}\n role=\"region\"\n aria-label={props.labelForLeaf(leaf())}\n tabIndex={props.paneTabIndex ?? -1}\n data-pane-id={id}\n data-focused={props.state.focusedLeafId === id ? '' : undefined}\n data-drag-source={drag()?.id === id ? '' : undefined}\n data-drop-direction={intent()?.direction}\n data-drop-placement={intent()?.placement}\n onDragOver={(event) => {\n if (!allowedTarget(id, event.dataTransfer)) return\n const next = paneDropIntent(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect()\n )\n if (!next) {\n setDrop(undefined)\n return\n }\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n setDrop({ id, intent: next })\n }}\n onDragLeave={(event) => {\n if (\n event.relatedTarget instanceof Node &&\n event.currentTarget.contains(event.relatedTarget)\n )\n return\n if (drop()?.id === id) setDrop(undefined)\n }}\n onDrop={(event) => {\n const current = allowedTarget(id, event.dataTransfer)\n const next = paneDropIntent(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect()\n )\n const accepted =\n current && next && event.dataTransfer?.getData(PANE_DRAG_TYPE) === current.token\n clearDrag()\n if (!accepted) return\n event.preventDefault()\n props.onMove?.(current.id, id, next)\n }}\n style={rectStyle(frames().get(id)?.rect ?? { x: 0, y: 0, width: 0, height: 0 })}\n class=\"absolute flex min-h-0 min-w-0 flex-col overflow-hidden border border-border transition-opacity motion-reduce:transition-none data-[drag-source]:opacity-40 data-[focused]:border-primary bg-background text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring\"\n onFocusIn={() => props.onFocus?.(id)}\n >\n <header class=\"flex min-w-0 shrink-0 items-center gap-2 bg-surface px-2\">\n <span\n data-pane-drag-handle=\"\"\n draggable={Boolean(props.onMove)}\n class={cn('flex min-w-0 flex-1 items-center gap-2 truncate text-sm', {\n 'cursor-grab': Boolean(props.onMove),\n 'cursor-grabbing': drag()?.id === id,\n })}\n title={props.onMove ? `Drag ${props.labelForLeaf(leaf())} to move` : undefined}\n onDragStart={(event) => {\n if (!props.onMove || !event.dataTransfer) {\n event.preventDefault()\n return\n }\n const token = `${prefix}-${++nextDragId}`\n setDrag({ id, token })\n event.dataTransfer.setData(PANE_DRAG_TYPE, token)\n event.dataTransfer.effectAllowed = 'move'\n // The native drag image carries this pane's actual content\n // in a bounded floating-window frame; the source recedes\n // independently as the browser follows the image pointer.\n const source = refs.get(id)\n const frame = source?.getBoundingClientRect()\n if (source && frame && typeof event.dataTransfer.setDragImage === 'function') {\n const preview = createDragPreview(source)\n const previewFrame = preview.getBoundingClientRect()\n const scaleX = previewFrame.width / frame.width\n const scaleY = previewFrame.height / frame.height\n event.dataTransfer.setDragImage(\n preview,\n Math.max(0, Math.round((event.clientX - frame.left) * scaleX)),\n Math.max(0, Math.round((event.clientY - frame.top) * scaleY))\n )\n preview.setAttribute('data-native-drag-image', '')\n }\n }}\n onDragEnd={clearDrag}\n >\n {props.onMove ? (\n <GripVertical class=\"size-3 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span class=\"min-w-0 flex-1 truncate\">\n {paneLabel ?? props.labelForLeaf(leaf())}\n </span>\n </span>\n {actions}\n {props.onClose ? (\n <ActionButton\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={`Close ${props.labelForLeaf(leaf())}`}\n tooltip={`Close ${props.labelForLeaf(leaf())}.`}\n onClick={() => close(id)}\n >\n <X />\n </ActionButton>\n ) : null}\n </header>\n <div class=\"min-h-0 min-w-0 flex-1 overflow-auto\">{content}</div>\n {intent() ? (\n <div\n aria-hidden=\"true\"\n class={cn('pointer-events-none absolute border-2 border-primary bg-primary/10', {\n 'inset-y-0 left-0 w-1/2':\n intent()?.direction === 'row' && intent()?.placement === 'before',\n 'inset-y-0 right-0 w-1/2':\n intent()?.direction === 'row' && intent()?.placement === 'after',\n 'inset-x-0 top-0 h-1/2':\n intent()?.direction === 'column' && intent()?.placement === 'before',\n 'inset-x-0 bottom-0 h-1/2':\n intent()?.direction === 'column' && intent()?.placement === 'after',\n })}\n />\n ) : null}\n </section>\n )\n }}\n </For>\n <span class=\"sr-only\" role=\"status\">\n {dropLabel() ||\n (resizeController() === 'error'\n ? alternateImportAttempts >= 2\n ? 'Resize controls did not load after repeated attempts. Reloading may discard unsaved pane content.'\n : 'Resize controls did not load.'\n : '')}\n </span>\n <For each={branches().map((branch) => branch.id)}>\n {(id) => {\n const initial = branchMap().get(id)!\n const branch: Accessor<SplitLayoutBranch<L>> = () => branchMap().get(id) ?? initial\n const rect = () => frames().get(id)?.rect ?? { x: 0, y: 0, width: 0, height: 0 }\n return (\n <Show\n when={typeof resizeController() === 'function'}\n fallback={\n <div\n role=\"separator\"\n aria-label={\n props.labelForSeparator?.(branch()) ??\n (branch().direction === 'row' ? 'Resize pane columns' : 'Resize pane rows')\n }\n aria-orientation={branch().direction === 'row' ? 'vertical' : 'horizontal'}\n aria-controls={listLeaves(branch())\n .map((leaf) => domId(leaf.id))\n .join(' ')}\n aria-valuemin={10}\n aria-valuemax={90}\n aria-valuenow={Math.round(branch().ratio * 100)}\n aria-disabled=\"true\"\n tabIndex={-1}\n data-direction={branch().direction}\n style={separatorPlaceholderStyle(branch(), rect())}\n class=\"pointer-events-none absolute bg-border\"\n />\n }\n >\n <Dynamic\n component={resizeController() as ResizeController<L>}\n branch={branch}\n rect={() => rectStyle(rect())}\n domId={domId}\n root={() => root}\n labelForSeparator={props.labelForSeparator}\n onResize={props.onResize}\n />\n </Show>\n )\n }}\n </For>\n {resizeController() === 'error' ? (\n <div class=\"absolute top-2 right-2 z-(--z-menu) flex max-w-sm flex-col items-end gap-2\">\n {alternateImportAttempts >= 2 ? (\n <p\n id={resizeReloadWarningId}\n role=\"alert\"\n class=\"rounded-md border bg-background p-2 text-sm shadow-md\"\n >\n Reloading may discard unsaved pane content.\n </p>\n ) : null}\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-resize-retry\n aria-describedby={alternateImportAttempts >= 2 ? resizeReloadWarningId : undefined}\n onClick={(event) => {\n if (alternateImportAttempts >= 2) {\n window.location.reload()\n return\n }\n const ownsFocus = document.activeElement === event.currentTarget\n focusHandleAfterRetry = ownsFocus\n focusRecoveryButtonAfterError = ownsFocus\n focusRestoreEpoch = focusEpoch\n retryWithAlternateImport = true\n setResizeController(undefined)\n }}\n >\n {alternateImportAttempts >= 2 ? 'Reload page to retry resizing' : 'Retry pane resizing'}\n </Button>\n </div>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
|
package/dist/r/registry.json
CHANGED
|
@@ -1722,9 +1722,10 @@
|
|
|
1722
1722
|
"type": "registry:ui",
|
|
1723
1723
|
"title": "Pixel Resize Handle",
|
|
1724
1724
|
"description": "",
|
|
1725
|
-
"dependencies": [
|
|
1725
|
+
"dependencies": [
|
|
1726
|
+
"lucide-solid@^1.51.0"
|
|
1727
|
+
],
|
|
1726
1728
|
"registryDependencies": [
|
|
1727
|
-
"@adea-ai/ui/resizable",
|
|
1728
1729
|
"lib"
|
|
1729
1730
|
],
|
|
1730
1731
|
"files": [
|
|
@@ -1806,7 +1807,6 @@
|
|
|
1806
1807
|
"title": "Split Layout",
|
|
1807
1808
|
"description": "Issue-backed binary layout with stable opaque leaf owners; scoped persistence belongs to the host.",
|
|
1808
1809
|
"dependencies": [
|
|
1809
|
-
"@corvu/resizable@^0.2.5",
|
|
1810
1810
|
"lucide-solid@^1.51.0"
|
|
1811
1811
|
],
|
|
1812
1812
|
"registryDependencies": [
|
package/dist/r/split-layout.json
CHANGED