@adea-ai/ui 0.64.0 → 0.65.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/README.md +50 -0
- package/dist/NOTICE +59 -1
- package/dist/components/layout/split-layout/drop.d.ts +13 -0
- package/dist/components/layout/split-layout/drop.d.ts.map +1 -0
- package/dist/components/layout/split-layout/drop.js +50 -0
- package/dist/components/layout/split-layout/drop.js.map +1 -0
- package/dist/components/layout/split-layout/geometry.d.ts +14 -0
- package/dist/components/layout/split-layout/geometry.d.ts.map +1 -0
- package/dist/components/layout/split-layout/geometry.js +44 -0
- package/dist/components/layout/split-layout/geometry.js.map +1 -0
- package/dist/components/layout/split-layout/index.d.ts +5 -0
- package/dist/components/layout/split-layout/index.d.ts.map +1 -0
- package/dist/components/layout/split-layout/index.js +4 -0
- package/dist/components/layout/split-layout/model.d.ts +51 -0
- package/dist/components/layout/split-layout/model.d.ts.map +1 -0
- package/dist/components/layout/split-layout/model.js +255 -0
- package/dist/components/layout/split-layout/model.js.map +1 -0
- package/dist/components/layout/split-layout/split-layout.d.ts +30 -0
- package/dist/components/layout/split-layout/split-layout.d.ts.map +1 -0
- package/dist/components/layout/split-layout/split-layout.js +312 -0
- package/dist/components/layout/split-layout/split-layout.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/r/registry.json +41 -0
- package/dist/r/split-layout.json +41 -0
- package/dist/r/src/components/layout/split-layout/drop.ts +29 -0
- package/dist/r/src/components/layout/split-layout/geometry.ts +40 -0
- package/dist/r/src/components/layout/split-layout/index.ts +4 -0
- package/dist/r/src/components/layout/split-layout/model.ts +336 -0
- package/dist/r/src/components/layout/split-layout/split-layout.tsx +346 -0
- package/package.json +10 -2
- package/registry.json +41 -0
- package/src/components/layout/split-layout/drop.ts +29 -0
- package/src/components/layout/split-layout/geometry.ts +40 -0
- package/src/components/layout/split-layout/index.ts +4 -0
- package/src/components/layout/split-layout/model.ts +336 -0
- package/src/components/layout/split-layout/split-layout.tsx +346 -0
- package/src/index.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","names":[],"sources":["../../../../src/components/layout/split-layout/model.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 Michael Yong\n * Copyright (c) 2026 Muxy\n * SPDX-License-Identifier: MIT\n *\n * Portions of the binary split behavior are substantially translated from:\n * - get-bb/bb apps/app/src/lib/split-layout/ops.ts (MIT), revision\n * 52a9256373d4d36f9b60e9e2a7f333464091a2ac.\n * - muxy-app/muxy Muxy/Models/Workspace/SplitNode.swift (MIT), revision\n * 5c5be8697c57a2fe70cda97fdbaf7c912e2e31b6.\n * Adapted first in Adea packages/dev-view/src/layout/operations.ts at\n * 0322ab09ff5e9775bfddc0bf2d81e1df436dbef7. Extracted here with opaque\n * host-owned leaves and an injected final-pane placeholder; immutable strict\n * binary operations, accepted limits and undoable close are preserved.\n * See NOTICE and docs/research/dev-view-donor-audit.md.\n */\n\n/** A visual identity only. Extend this with host-owned payload; UI never interprets it. */\nexport type SplitLayoutLeaf = Readonly<{ kind: 'leaf'; id: string }>\nexport type SplitLayoutBranch<L extends SplitLayoutLeaf = SplitLayoutLeaf> = Readonly<{\n kind: 'split'\n id: string\n direction: 'row' | 'column'\n ratio: number\n children: readonly [SplitLayoutNode<L>, SplitLayoutNode<L>]\n}>\nexport type SplitLayoutNode<L extends SplitLayoutLeaf = SplitLayoutLeaf> = L | SplitLayoutBranch<L>\n\nexport const MAX_LAYOUT_LEAVES = 8\nexport const MAX_LAYOUT_DEPTH = 8\nexport const MIN_SPLIT_RATIO = 0.1\nexport const MAX_SPLIT_RATIO = 0.9\n\nexport type SplitLayoutState<L extends SplitLayoutLeaf = SplitLayoutLeaf> = Readonly<{\n center: SplitLayoutNode<L>\n focusedLeafId: string\n closed: readonly Readonly<{ center: SplitLayoutNode<L>; leafId: string }>[]\n}>\n\nexport type SplitPaneInput<L extends SplitLayoutLeaf = SplitLayoutLeaf> = Readonly<{\n direction: SplitLayoutBranch<L>['direction']\n placement: 'before' | 'after'\n leaf: L\n splitId: string\n}>\n\nexport function listLeaves<L extends SplitLayoutLeaf>(node: SplitLayoutNode<L>): readonly L[] {\n return node.kind === 'leaf'\n ? [node]\n : [...listLeaves(node.children[0]), ...listLeaves(node.children[1])]\n}\n\nexport function countLeaves<L extends SplitLayoutLeaf>(node: SplitLayoutNode<L>): number {\n return node.kind === 'leaf' ? 1 : countLeaves(node.children[0]) + countLeaves(node.children[1])\n}\n\nexport function layoutDepth<L extends SplitLayoutLeaf>(node: SplitLayoutNode<L>): number {\n return node.kind === 'leaf'\n ? 1\n : 1 + Math.max(layoutDepth(node.children[0]), layoutDepth(node.children[1]))\n}\n\nfunction replaceLeaf<L extends SplitLayoutLeaf>(\n node: SplitLayoutNode<L>,\n leafId: string,\n replacement: SplitLayoutNode<L>\n): SplitLayoutNode<L> {\n if (node.kind === 'leaf') return node.id === leafId ? replacement : node\n const first = replaceLeaf(node.children[0], leafId, replacement)\n const second = replaceLeaf(node.children[1], leafId, replacement)\n return first === node.children[0] && second === node.children[1]\n ? node\n : { ...node, children: [first, second] }\n}\n\nfunction removeLeaf<L extends SplitLayoutLeaf>(\n node: SplitLayoutNode<L>,\n leafId: string\n): SplitLayoutNode<L> | null {\n if (node.kind === 'leaf') return node.id === leafId ? null : node\n const first = removeLeaf(node.children[0], leafId)\n const second = removeLeaf(node.children[1], leafId)\n if (!first) return second\n if (!second) return first\n return first === node.children[0] && second === node.children[1]\n ? node\n : { ...node, children: [first, second] }\n}\n\nfunction containsLeaf<L extends SplitLayoutLeaf>(\n node: SplitLayoutNode<L>,\n leafId: string\n): boolean {\n return node.kind === 'leaf'\n ? node.id === leafId\n : containsLeaf(node.children[0], leafId) || containsLeaf(node.children[1], leafId)\n}\n\nfunction assertUniqueInput<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n leaf: L,\n splitId: string\n) {\n assertLayoutTree(leaf)\n if (typeof splitId !== 'string' || splitId.length === 0)\n throw new Error('invalid_state: split identity must be nonempty')\n const ids = new Set<string>()\n const visit = (node: SplitLayoutNode<L>) => {\n if (ids.has(node.id)) throw new Error('invalid_state: duplicate pane id')\n ids.add(node.id)\n if (node.kind === 'split') node.children.forEach(visit)\n }\n visit(state.center)\n if (ids.has(leaf.id) || ids.has(splitId) || leaf.id === splitId)\n throw new Error('invalid_state: duplicate pane id')\n}\n\n/** Visual-tree validation only; applications still decode and scope persisted preferences. */\nfunction assertLayoutTree<L extends SplitLayoutLeaf>(center: SplitLayoutNode<L>): void {\n const ids = new Set<string>()\n const seen = new WeakSet<object>()\n let leaves = 0\n const visit = (node: SplitLayoutNode<L>, depth: number) => {\n if (depth > MAX_LAYOUT_DEPTH) throw new Error('limit_exceeded: layout depth exceeds eight')\n if (!node || typeof node !== 'object') throw new Error('invalid_state: missing layout node')\n if (seen.has(node)) throw new Error('invalid_state: cyclic or reused layout node')\n seen.add(node)\n if (typeof node.id !== 'string' || node.id.length === 0)\n throw new Error('invalid_state: layout identity must be nonempty')\n if (ids.has(node.id)) throw new Error('invalid_state: duplicate pane id')\n ids.add(node.id)\n if (node.kind === 'leaf') {\n leaves += 1\n if (leaves > MAX_LAYOUT_LEAVES)\n throw new Error('limit_exceeded: layout has more than eight leaves')\n return\n }\n if (\n node.kind !== 'split' ||\n !Array.isArray(node.children) ||\n node.children.length !== 2 ||\n (node.direction !== 'row' && node.direction !== 'column')\n )\n throw new Error('invalid_state: layout must be a strict binary row or column tree')\n visit(node.children[0], depth + 1)\n visit(node.children[1], depth + 1)\n }\n visit(center, 1)\n}\n\nexport function createLayoutState<L extends SplitLayoutLeaf>(\n center: SplitLayoutNode<L>\n): SplitLayoutState<L> {\n assertLayoutTree(center)\n const first = listLeaves(center)[0]\n if (!first) throw new Error('invalid_state: layout requires a leaf')\n return { center, focusedLeafId: first.id, closed: [] }\n}\n\nexport function splitPane<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n targetLeafId: string,\n input: SplitPaneInput<L>\n): SplitLayoutState<L> {\n if (!containsLeaf(state.center, targetLeafId)) return state\n if (countLeaves(state.center) >= MAX_LAYOUT_LEAVES)\n throw new Error('limit_exceeded: center layout has eight leaves')\n assertUniqueInput(state, input.leaf, input.splitId)\n const target = listLeaves(state.center).find((leaf) => leaf.id === targetLeafId)\n if (!target) return state\n const children =\n input.placement === 'before' ? ([input.leaf, target] as const) : ([target, input.leaf] as const)\n const center = replaceLeaf(state.center, targetLeafId, {\n kind: 'split',\n id: input.splitId,\n direction: input.direction,\n ratio: 0.5,\n children,\n })\n if (layoutDepth(center) > MAX_LAYOUT_DEPTH)\n throw new Error('limit_exceeded: center layout depth exceeds eight')\n return { ...state, center, focusedLeafId: input.leaf.id, closed: [] }\n}\n\nexport function closePane<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n leafId: string,\n createPlaceholderLeaf: () => L\n): SplitLayoutState<L> {\n if (!containsLeaf(state.center, leafId)) return state\n const before = state.center\n const readingOrder = listLeaves(before)\n const closedIndex = readingOrder.findIndex((leaf) => leaf.id === leafId)\n const removed = removeLeaf(before, leafId)\n const center: SplitLayoutNode<L> = removed ?? createPlaceholderLeaf()\n if (!removed) {\n if (center.kind !== 'leaf') throw new Error('invalid_state: placeholder must be a leaf')\n assertLayoutTree(center)\n }\n const leaves = listLeaves(center)\n const fallback = leaves[Math.min(closedIndex, leaves.length - 1)] ?? leaves[0]\n if (!fallback) throw new Error('invalid_state: layout requires a leaf')\n return {\n center,\n focusedLeafId: state.focusedLeafId === leafId ? fallback.id : state.focusedLeafId,\n closed: [...state.closed, { center: before, leafId }],\n }\n}\n\nexport function undoClosePane<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>\n): SplitLayoutState<L> {\n const previous = state.closed.at(-1)\n if (!previous) return state\n return {\n center: previous.center,\n focusedLeafId: previous.leafId,\n closed: state.closed.slice(0, -1),\n }\n}\n\nexport function focusPane<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n leafId: string\n): SplitLayoutState<L> {\n return containsLeaf(state.center, leafId) && state.focusedLeafId !== leafId\n ? { ...state, focusedLeafId: leafId }\n : state\n}\n\nexport function swapPanes<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n firstLeafId: string,\n secondLeafId: string\n): SplitLayoutState<L> {\n if (firstLeafId === secondLeafId) return state\n const leaves = listLeaves(state.center)\n const first = leaves.find((leaf) => leaf.id === firstLeafId)\n const second = leaves.find((leaf) => leaf.id === secondLeafId)\n if (!first || !second) return state\n const swap = (node: SplitLayoutNode<L>): SplitLayoutNode<L> => {\n if (node.kind === 'leaf') {\n if (node.id === firstLeafId) return second\n if (node.id === secondLeafId) return first\n return node\n }\n const left = swap(node.children[0])\n const right = swap(node.children[1])\n return left === node.children[0] && right === node.children[1]\n ? node\n : { ...node, children: [left, right] }\n }\n return { ...state, center: swap(state.center), closed: [] }\n}\n\nexport function movePane<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n leafId: string,\n targetLeafId: string,\n placement: 'before' | 'after',\n direction: SplitLayoutBranch<L>['direction'],\n splitId: string\n): SplitLayoutState<L> {\n if (leafId === targetLeafId) return state\n const moving = listLeaves(state.center).find((leaf) => leaf.id === leafId)\n if (!moving || !containsLeaf(state.center, targetLeafId)) return state\n const detached = removeLeaf(state.center, leafId)\n if (!detached) return state\n const moved = splitPane(\n { center: detached, focusedLeafId: state.focusedLeafId, closed: state.closed },\n targetLeafId,\n { direction, placement, leaf: moving, splitId }\n )\n return { ...moved, focusedLeafId: leafId }\n}\n\nexport function resizeSplit<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n splitId: string,\n ratio: number\n): SplitLayoutState<L> {\n if (!Number.isFinite(ratio)) return state\n const nextRatio = Math.min(MAX_SPLIT_RATIO, Math.max(MIN_SPLIT_RATIO, ratio))\n let found = false\n const visit = (node: SplitLayoutNode<L>): SplitLayoutNode<L> => {\n if (node.kind === 'leaf') return node\n if (node.id === splitId) {\n found = true\n return node.ratio === nextRatio ? node : { ...node, ratio: nextRatio }\n }\n const first = visit(node.children[0])\n const second = visit(node.children[1])\n return first === node.children[0] && second === node.children[1]\n ? node\n : { ...node, children: [first, second] }\n }\n const center = visit(state.center)\n return found && center !== state.center ? { ...state, center, closed: [] } : state\n}\n\n/**\n * Pure repair walk ported from bb's size normalization: every split ratio is\n * clamped into the normative range and a non-finite ratio falls back to an\n * even split. Structure, IDs, and focus are untouched.\n */\nexport function normalizeLayout<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>\n): SplitLayoutState<L> {\n const visit = (node: SplitLayoutNode<L>): { node: SplitLayoutNode<L>; changed: boolean } => {\n if (node.kind === 'leaf') return { node, changed: false }\n const first = visit(node.children[0])\n const second = visit(node.children[1])\n const ratio = Number.isFinite(node.ratio)\n ? Math.min(MAX_SPLIT_RATIO, Math.max(MIN_SPLIT_RATIO, node.ratio))\n : (MIN_SPLIT_RATIO + MAX_SPLIT_RATIO) / 2\n const changed = first.changed || second.changed || ratio !== node.ratio\n return {\n node: changed ? { ...node, ratio, children: [first.node, second.node] } : node,\n changed,\n }\n }\n const result = visit(state.center)\n return result.changed ? { ...state, center: result.node } : state\n}\n\n/** The leaf immediately after (`1`) or before (`-1`) the given leaf in reading order. */\nexport function neighborLeaf<L extends SplitLayoutLeaf>(\n state: SplitLayoutState<L>,\n leafId: string,\n step: 1 | -1\n): L | undefined {\n const leaves = listLeaves(state.center)\n const index = leaves.findIndex((leaf) => leaf.id === leafId)\n if (index < 0) return undefined\n return leaves[index + step]\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type Accessor, type JSX } from 'solid-js';
|
|
2
|
+
import { type PaneDropIntent } from './drop';
|
|
3
|
+
export type { PaneDropIntent } from './drop';
|
|
4
|
+
import { type SplitLayoutBranch, type SplitLayoutLeaf, type SplitLayoutState } from './model';
|
|
5
|
+
export type SplitLayoutProps<L extends SplitLayoutLeaf> = {
|
|
6
|
+
state: SplitLayoutState<L>;
|
|
7
|
+
label: string;
|
|
8
|
+
/** Accessible name for a pane region and its close button. */
|
|
9
|
+
labelForLeaf: (leaf: L) => string;
|
|
10
|
+
/** Called once per stable leaf owner; the accessor tracks opaque payload replacement. */
|
|
11
|
+
renderLeaf: (leaf: Accessor<L>) => JSX.Element;
|
|
12
|
+
/** Inline visible header composition, separate from the region and close-button name. */
|
|
13
|
+
renderPaneLabel?: (leaf: Accessor<L>) => JSX.Element;
|
|
14
|
+
/** Whether pane regions participate in sequential keyboard navigation; defaults to programmatic focus only. */
|
|
15
|
+
paneTabIndex?: 0 | -1;
|
|
16
|
+
/** Accessible splitter name; defaults to the current orientation-specific label. */
|
|
17
|
+
labelForSeparator?: (branch: SplitLayoutBranch<L>) => string;
|
|
18
|
+
onResize: (splitId: string, ratio: number) => void;
|
|
19
|
+
onFocus?: (leafId: string) => void;
|
|
20
|
+
/** Host performs the model transition and returns the surviving focus destination. */
|
|
21
|
+
onClose?: (leafId: string) => string | undefined;
|
|
22
|
+
/** Pointer placement only; the host supplies keyboard commands and performs the model transition. */
|
|
23
|
+
onMove?: (leafId: string, targetId: string, intent: PaneDropIntent) => void;
|
|
24
|
+
/** Stable header composition for host-owned keyboard actions/capability feedback. */
|
|
25
|
+
renderPaneActions?: (leaf: Accessor<L>) => JSX.Element;
|
|
26
|
+
class?: string;
|
|
27
|
+
};
|
|
28
|
+
/** Muxy frame geometry keeps leaf owners stable; Corvu owns constrained separator interactions. */
|
|
29
|
+
export declare function SplitLayout<L extends SplitLayoutLeaf>(props: SplitLayoutProps<L>): JSX.Element;
|
|
30
|
+
//# sourceMappingURL=split-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"names":[],"mappings":"AACA,OAAO,EAQL,KAAK,QAAQ,EACb,KAAK,GAAG,EACT,MAAM,UAAU,CAAA;AAKjB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE5C,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,SAAS,CAAA;AAEhB,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;AASD,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,eA6RhF"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { Button } from "../../ui/button/button.js";
|
|
3
|
+
import { MAX_SPLIT_RATIO, MIN_SPLIT_RATIO, listLeaves } from "./model.js";
|
|
4
|
+
import { computeLayoutFrames } from "./geometry.js";
|
|
5
|
+
import { paneDropIntent } from "./drop.js";
|
|
6
|
+
import { className, createComponent, delegateEvents, effect, insert, memo, setAttribute, style, template, use } from "solid-js/web";
|
|
7
|
+
import { GripVertical, X } from "lucide-solid";
|
|
8
|
+
import { For, createComputed, createMemo, createSignal, createUniqueId, on, onCleanup } from "solid-js";
|
|
9
|
+
import Resizable from "@corvu/resizable";
|
|
10
|
+
//#region src/components/layout/split-layout/split-layout.tsx
|
|
11
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div role=group data-slot=split-layout><span class=sr-only role=status>`);
|
|
12
|
+
var _tmpl$2 = /*#__PURE__*/ template(`<section role=region class="absolute flex min-h-0 min-w-0 flex-col overflow-hidden border border-border data-[focused]:border-primary bg-background text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring"><header class="flex min-w-0 shrink-0 items-center gap-2 bg-surface px-2"><span data-pane-drag-handle class="flex min-w-0 flex-1 items-center gap-2 truncate text-sm"><span class="min-w-0 flex-1 truncate"></span></span></header><div class="min-h-0 min-w-0 flex-1 overflow-auto">`);
|
|
13
|
+
var _tmpl$3 = /*#__PURE__*/ template(`<div aria-hidden=true>`);
|
|
14
|
+
var PANE_DRAG_TYPE = "application/x-adea-pane-move";
|
|
15
|
+
function rectStyle(rect) {
|
|
16
|
+
return {
|
|
17
|
+
left: `${rect.x * 100}%`,
|
|
18
|
+
top: `${rect.y * 100}%`,
|
|
19
|
+
width: `${rect.width * 100}%`,
|
|
20
|
+
height: `${rect.height * 100}%`
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Muxy frame geometry keeps leaf owners stable; Corvu owns constrained separator interactions. */
|
|
24
|
+
function SplitLayout(props) {
|
|
25
|
+
let root;
|
|
26
|
+
let pendingFrame;
|
|
27
|
+
const refs = /* @__PURE__ */ new Map();
|
|
28
|
+
const domIds = /* @__PURE__ */ new Map();
|
|
29
|
+
const prefix = createUniqueId();
|
|
30
|
+
let nextDomId = 0;
|
|
31
|
+
let nextDragId = 0;
|
|
32
|
+
const [drag, setDrag] = createSignal();
|
|
33
|
+
const [drop, setDrop] = createSignal();
|
|
34
|
+
const clearDrag = () => {
|
|
35
|
+
setDrag(void 0);
|
|
36
|
+
setDrop(void 0);
|
|
37
|
+
};
|
|
38
|
+
const domId = (id) => {
|
|
39
|
+
const existing = domIds.get(id);
|
|
40
|
+
if (existing) return existing;
|
|
41
|
+
const created = `${prefix}-pane-${nextDomId++}`;
|
|
42
|
+
domIds.set(id, created);
|
|
43
|
+
return created;
|
|
44
|
+
};
|
|
45
|
+
const leaves = createMemo(() => listLeaves(props.state.center));
|
|
46
|
+
const leafMap = createMemo(() => new Map(leaves().map((leaf) => [leaf.id, leaf])));
|
|
47
|
+
const frames = createMemo(() => computeLayoutFrames(props.state.center));
|
|
48
|
+
const branches = createMemo(() => Array.from(frames().values()).flatMap((frame) => frame.node.kind === "split" ? [frame.node] : []));
|
|
49
|
+
createComputed(() => {
|
|
50
|
+
const current = drag();
|
|
51
|
+
if (current && (!props.onMove || !leafMap().has(current.id))) clearDrag();
|
|
52
|
+
const target = drop();
|
|
53
|
+
if (target && !leafMap().has(target.id)) setDrop(void 0);
|
|
54
|
+
});
|
|
55
|
+
const allowedTarget = (id, transfer) => {
|
|
56
|
+
const current = drag();
|
|
57
|
+
return props.onMove && current && current.id !== id && leafMap().has(current.id) && leafMap().has(id) && transfer?.types.includes(PANE_DRAG_TYPE) ? current : void 0;
|
|
58
|
+
};
|
|
59
|
+
const dropLabel = createMemo(() => {
|
|
60
|
+
const target = drop();
|
|
61
|
+
const leaf = target ? leafMap().get(target.id) : void 0;
|
|
62
|
+
return target && leaf ? `Drop to place pane ${target.intent.placement} ${props.labelForLeaf(leaf)}` : "";
|
|
63
|
+
});
|
|
64
|
+
const branchMap = createMemo(() => new Map(branches().map((branch) => [branch.id, branch])));
|
|
65
|
+
const schedule = (action) => {
|
|
66
|
+
if (pendingFrame !== void 0) cancelAnimationFrame(pendingFrame);
|
|
67
|
+
pendingFrame = requestAnimationFrame(() => {
|
|
68
|
+
pendingFrame = void 0;
|
|
69
|
+
action();
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
createComputed(on(() => props.state.center, () => {
|
|
73
|
+
const active = root?.ownerDocument.activeElement;
|
|
74
|
+
if (!root || !(active instanceof HTMLElement) || !root.contains(active)) return;
|
|
75
|
+
const field = active instanceof HTMLTextAreaElement || active instanceof HTMLInputElement ? active : void 0;
|
|
76
|
+
const selection = field ? {
|
|
77
|
+
start: field.selectionStart,
|
|
78
|
+
end: field.selectionEnd,
|
|
79
|
+
direction: field.selectionDirection
|
|
80
|
+
} : void 0;
|
|
81
|
+
schedule(() => {
|
|
82
|
+
if (!active.isConnected || !root?.contains(active)) return;
|
|
83
|
+
const current = active.ownerDocument.activeElement;
|
|
84
|
+
if (current !== active && current !== active.ownerDocument.body) return;
|
|
85
|
+
active.focus({ preventScroll: true });
|
|
86
|
+
if (field && selection?.start !== null && selection?.end !== null && selection) field.setSelectionRange(selection.start, selection.end, selection.direction ?? void 0);
|
|
87
|
+
});
|
|
88
|
+
}));
|
|
89
|
+
onCleanup(() => {
|
|
90
|
+
if (pendingFrame !== void 0) cancelAnimationFrame(pendingFrame);
|
|
91
|
+
clearDrag();
|
|
92
|
+
refs.clear();
|
|
93
|
+
domIds.clear();
|
|
94
|
+
});
|
|
95
|
+
const close = (id) => {
|
|
96
|
+
const next = props.onClose?.(id);
|
|
97
|
+
if (next) schedule(() => refs.get(next)?.focus({ preventScroll: true }));
|
|
98
|
+
};
|
|
99
|
+
return (() => {
|
|
100
|
+
var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
|
|
101
|
+
use((el) => {
|
|
102
|
+
root = el;
|
|
103
|
+
}, _el$);
|
|
104
|
+
insert(_el$, createComponent(For, {
|
|
105
|
+
get each() {
|
|
106
|
+
return leaves().map((leaf) => leaf.id);
|
|
107
|
+
},
|
|
108
|
+
children: (id) => {
|
|
109
|
+
const initial = leafMap().get(id);
|
|
110
|
+
const leaf = () => leafMap().get(id) ?? initial;
|
|
111
|
+
const content = props.renderLeaf(leaf);
|
|
112
|
+
const paneLabel = props.renderPaneLabel?.(leaf);
|
|
113
|
+
const actions = props.renderPaneActions?.(leaf);
|
|
114
|
+
const intent = () => drop()?.id === id ? drop()?.intent : void 0;
|
|
115
|
+
onCleanup(() => {
|
|
116
|
+
refs.delete(id);
|
|
117
|
+
domIds.delete(id);
|
|
118
|
+
});
|
|
119
|
+
return (() => {
|
|
120
|
+
var _el$3 = _tmpl$2(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.firstChild, _el$7 = _el$4.nextSibling;
|
|
121
|
+
_el$3.$$focusin = () => props.onFocus?.(id);
|
|
122
|
+
_el$3.addEventListener("drop", (event) => {
|
|
123
|
+
const current = allowedTarget(id, event.dataTransfer);
|
|
124
|
+
const next = paneDropIntent(event.clientX, event.clientY, event.currentTarget.getBoundingClientRect());
|
|
125
|
+
const accepted = current && next && event.dataTransfer?.getData(PANE_DRAG_TYPE) === current.token;
|
|
126
|
+
clearDrag();
|
|
127
|
+
if (!accepted) return;
|
|
128
|
+
event.preventDefault();
|
|
129
|
+
props.onMove?.(current.id, id, next);
|
|
130
|
+
});
|
|
131
|
+
_el$3.addEventListener("dragleave", (event) => {
|
|
132
|
+
if (event.relatedTarget instanceof Node && event.currentTarget.contains(event.relatedTarget)) return;
|
|
133
|
+
if (drop()?.id === id) setDrop(void 0);
|
|
134
|
+
});
|
|
135
|
+
_el$3.addEventListener("dragover", (event) => {
|
|
136
|
+
if (!allowedTarget(id, event.dataTransfer)) return;
|
|
137
|
+
const next = paneDropIntent(event.clientX, event.clientY, event.currentTarget.getBoundingClientRect());
|
|
138
|
+
if (!next) {
|
|
139
|
+
setDrop(void 0);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
|
|
144
|
+
setDrop({
|
|
145
|
+
id,
|
|
146
|
+
intent: next
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
use((el) => refs.set(id, el), _el$3);
|
|
150
|
+
setAttribute(_el$3, "data-pane-id", id);
|
|
151
|
+
_el$5.addEventListener("dragend", clearDrag);
|
|
152
|
+
_el$5.addEventListener("dragstart", (event) => {
|
|
153
|
+
if (!props.onMove || !event.dataTransfer) {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const token = `${prefix}-${++nextDragId}`;
|
|
158
|
+
setDrag({
|
|
159
|
+
id,
|
|
160
|
+
token
|
|
161
|
+
});
|
|
162
|
+
event.dataTransfer.setData(PANE_DRAG_TYPE, token);
|
|
163
|
+
event.dataTransfer.effectAllowed = "move";
|
|
164
|
+
});
|
|
165
|
+
insert(_el$5, (() => {
|
|
166
|
+
var _c$ = memo(() => !!props.onMove);
|
|
167
|
+
return () => _c$() ? createComponent(GripVertical, {
|
|
168
|
+
"class": "size-3 shrink-0",
|
|
169
|
+
"aria-hidden": "true"
|
|
170
|
+
}) : null;
|
|
171
|
+
})(), _el$6);
|
|
172
|
+
insert(_el$6, () => paneLabel ?? props.labelForLeaf(leaf()));
|
|
173
|
+
insert(_el$4, actions, null);
|
|
174
|
+
insert(_el$4, (() => {
|
|
175
|
+
var _c$2 = memo(() => !!props.onClose);
|
|
176
|
+
return () => _c$2() ? createComponent(Button, {
|
|
177
|
+
variant: "ghost",
|
|
178
|
+
size: "icon-xs",
|
|
179
|
+
get ["aria-label"]() {
|
|
180
|
+
return `Close ${props.labelForLeaf(leaf())}`;
|
|
181
|
+
},
|
|
182
|
+
onClick: () => close(id),
|
|
183
|
+
get children() {
|
|
184
|
+
return createComponent(X, {});
|
|
185
|
+
}
|
|
186
|
+
}) : null;
|
|
187
|
+
})(), null);
|
|
188
|
+
insert(_el$7, content);
|
|
189
|
+
insert(_el$3, (() => {
|
|
190
|
+
var _c$3 = memo(() => !!intent());
|
|
191
|
+
return () => _c$3() ? (() => {
|
|
192
|
+
var _el$8 = _tmpl$3();
|
|
193
|
+
effect(() => className(_el$8, cn("pointer-events-none absolute border-2 border-primary bg-primary/10", {
|
|
194
|
+
"inset-y-0 left-0 w-1/2": intent()?.direction === "row" && intent()?.placement === "before",
|
|
195
|
+
"inset-y-0 right-0 w-1/2": intent()?.direction === "row" && intent()?.placement === "after",
|
|
196
|
+
"inset-x-0 top-0 h-1/2": intent()?.direction === "column" && intent()?.placement === "before",
|
|
197
|
+
"inset-x-0 bottom-0 h-1/2": intent()?.direction === "column" && intent()?.placement === "after"
|
|
198
|
+
})));
|
|
199
|
+
return _el$8;
|
|
200
|
+
})() : null;
|
|
201
|
+
})(), null);
|
|
202
|
+
effect((_p$) => {
|
|
203
|
+
var _v$3 = domId(id), _v$4 = props.labelForLeaf(leaf()), _v$5 = props.paneTabIndex ?? -1, _v$6 = props.state.focusedLeafId === id ? "" : void 0, _v$7 = intent()?.direction, _v$8 = intent()?.placement, _v$9 = rectStyle(frames().get(id)?.rect ?? {
|
|
204
|
+
x: 0,
|
|
205
|
+
y: 0,
|
|
206
|
+
width: 0,
|
|
207
|
+
height: 0
|
|
208
|
+
}), _v$0 = Boolean(props.onMove), _v$1 = props.onMove ? `Drag ${props.labelForLeaf(leaf())} to move` : void 0;
|
|
209
|
+
_v$3 !== _p$.e && setAttribute(_el$3, "id", _p$.e = _v$3);
|
|
210
|
+
_v$4 !== _p$.t && setAttribute(_el$3, "aria-label", _p$.t = _v$4);
|
|
211
|
+
_v$5 !== _p$.a && setAttribute(_el$3, "tabindex", _p$.a = _v$5);
|
|
212
|
+
_v$6 !== _p$.o && setAttribute(_el$3, "data-focused", _p$.o = _v$6);
|
|
213
|
+
_v$7 !== _p$.i && setAttribute(_el$3, "data-drop-direction", _p$.i = _v$7);
|
|
214
|
+
_v$8 !== _p$.n && setAttribute(_el$3, "data-drop-placement", _p$.n = _v$8);
|
|
215
|
+
_p$.s = style(_el$3, _v$9, _p$.s);
|
|
216
|
+
_v$0 !== _p$.h && setAttribute(_el$5, "draggable", _p$.h = _v$0);
|
|
217
|
+
_v$1 !== _p$.r && setAttribute(_el$5, "title", _p$.r = _v$1);
|
|
218
|
+
return _p$;
|
|
219
|
+
}, {
|
|
220
|
+
e: void 0,
|
|
221
|
+
t: void 0,
|
|
222
|
+
a: void 0,
|
|
223
|
+
o: void 0,
|
|
224
|
+
i: void 0,
|
|
225
|
+
n: void 0,
|
|
226
|
+
s: void 0,
|
|
227
|
+
h: void 0,
|
|
228
|
+
r: void 0
|
|
229
|
+
});
|
|
230
|
+
return _el$3;
|
|
231
|
+
})();
|
|
232
|
+
}
|
|
233
|
+
}), _el$2);
|
|
234
|
+
insert(_el$2, dropLabel);
|
|
235
|
+
insert(_el$, createComponent(For, {
|
|
236
|
+
get each() {
|
|
237
|
+
return branches().map((branch) => branch.id);
|
|
238
|
+
},
|
|
239
|
+
children: (id) => {
|
|
240
|
+
const initial = branchMap().get(id);
|
|
241
|
+
const branch = () => branchMap().get(id) ?? initial;
|
|
242
|
+
return createComponent(Resizable, {
|
|
243
|
+
get orientation() {
|
|
244
|
+
return branch().direction === "row" ? "horizontal" : "vertical";
|
|
245
|
+
},
|
|
246
|
+
get sizes() {
|
|
247
|
+
return [branch().ratio, 1 - branch().ratio];
|
|
248
|
+
},
|
|
249
|
+
keyboardDelta: .05,
|
|
250
|
+
onSizesChange: (sizes) => {
|
|
251
|
+
if (sizes[0] !== void 0 && Math.abs(sizes[0] - branch().ratio) > 1e-6) props.onResize(id, sizes[0]);
|
|
252
|
+
},
|
|
253
|
+
get style() {
|
|
254
|
+
return rectStyle(frames().get(id)?.rect ?? {
|
|
255
|
+
x: 0,
|
|
256
|
+
y: 0,
|
|
257
|
+
width: 0,
|
|
258
|
+
height: 0
|
|
259
|
+
});
|
|
260
|
+
},
|
|
261
|
+
"class": "pointer-events-none absolute flex min-h-0 min-w-0 data-[orientation=vertical]:flex-col",
|
|
262
|
+
get children() {
|
|
263
|
+
return [
|
|
264
|
+
createComponent(Resizable.Panel, {
|
|
265
|
+
minSize: MIN_SPLIT_RATIO,
|
|
266
|
+
maxSize: MAX_SPLIT_RATIO,
|
|
267
|
+
"aria-hidden": "true"
|
|
268
|
+
}),
|
|
269
|
+
createComponent(Resizable.Handle, {
|
|
270
|
+
get ["aria-label"]() {
|
|
271
|
+
return props.labelForSeparator?.(branch()) ?? (branch().direction === "row" ? "Resize pane columns" : "Resize pane rows");
|
|
272
|
+
},
|
|
273
|
+
get ["aria-orientation"]() {
|
|
274
|
+
return branch().direction === "row" ? "vertical" : "horizontal";
|
|
275
|
+
},
|
|
276
|
+
get ["aria-controls"]() {
|
|
277
|
+
return listLeaves(branch()).map((leaf) => domId(leaf.id)).join(" ");
|
|
278
|
+
},
|
|
279
|
+
"aria-valuemin": 10,
|
|
280
|
+
"aria-valuemax": 90,
|
|
281
|
+
get ["aria-valuenow"]() {
|
|
282
|
+
return Math.round(branch().ratio * 100);
|
|
283
|
+
},
|
|
284
|
+
"class": "pointer-events-auto relative w-px 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]:h-px data-[orientation=vertical]:w-full 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"
|
|
285
|
+
}),
|
|
286
|
+
createComponent(Resizable.Panel, {
|
|
287
|
+
minSize: MIN_SPLIT_RATIO,
|
|
288
|
+
maxSize: MAX_SPLIT_RATIO,
|
|
289
|
+
"aria-hidden": "true"
|
|
290
|
+
})
|
|
291
|
+
];
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}), null);
|
|
296
|
+
effect((_p$) => {
|
|
297
|
+
var _v$ = props.label, _v$2 = cn("relative size-full min-h-0 min-w-0", props.class);
|
|
298
|
+
_v$ !== _p$.e && setAttribute(_el$, "aria-label", _p$.e = _v$);
|
|
299
|
+
_v$2 !== _p$.t && className(_el$, _p$.t = _v$2);
|
|
300
|
+
return _p$;
|
|
301
|
+
}, {
|
|
302
|
+
e: void 0,
|
|
303
|
+
t: void 0
|
|
304
|
+
});
|
|
305
|
+
return _el$;
|
|
306
|
+
})();
|
|
307
|
+
}
|
|
308
|
+
delegateEvents(["focusin"]);
|
|
309
|
+
//#endregion
|
|
310
|
+
export { SplitLayout };
|
|
311
|
+
|
|
312
|
+
//# sourceMappingURL=split-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-layout.js","names":["Resizable","For","createMemo","createComputed","createUniqueId","createSignal","onCleanup","on","Accessor","JSX","X","GripVertical","Button","cn","computeLayoutFrames","LayoutRect","paneDropIntent","PaneDropIntent","PANE_DRAG_TYPE","listLeaves","MIN_SPLIT_RATIO","MAX_SPLIT_RATIO","SplitLayoutBranch","SplitLayoutLeaf","SplitLayoutState","SplitLayoutProps","state","L","label","labelForLeaf","leaf","renderLeaf","Element","renderPaneLabel","paneTabIndex","labelForSeparator","branch","onResize","splitId","ratio","onFocus","leafId","onClose","onMove","targetId","intent","renderPaneActions","class","rectStyle","rect","CSSProperties","left","x","top","y","width","height","SplitLayout","props","root","HTMLDivElement","pendingFrame","refs","Map","HTMLElement","domIds","prefix","nextDomId","nextDragId","drag","setDrag","id","token","drop","setDrop","clearDrag","undefined","domId","existing","get","created","set","leaves","center","leafMap","map","frames","branches","Array","from","values","flatMap","frame","node","kind","current","has","target","allowedTarget","transfer","DataTransfer","types","includes","dropLabel","placement","branchMap","schedule","action","cancelAnimationFrame","requestAnimationFrame","active","ownerDocument","activeElement","contains","field","HTMLTextAreaElement","HTMLInputElement","selection","start","selectionStart","end","selectionEnd","direction","selectionDirection","isConnected","body","focus","preventScroll","setSelectionRange","clear","close","next","_el$","_tmpl$","_el$2","firstChild","_$use","el","_$insert","_$createComponent","each","children","initial","content","paneLabel","actions","delete","_el$3","_tmpl$2","_el$4","_el$5","_el$6","_el$7","nextSibling","$$focusin","addEventListener","event","dataTransfer","clientX","clientY","currentTarget","getBoundingClientRect","accepted","getData","preventDefault","relatedTarget","Node","dropEffect","_$setAttribute","setData","effectAllowed","_c$","_$memo","_c$2","variant","size","aria-label","onClick","_c$3","_el$8","_tmpl$3","_$effect","_$className","_p$","_v$3","_v$4","_v$5","_v$6","focusedLeafId","_v$7","_v$8","_v$9","_v$0","Boolean","_v$1","e","t","a","o","i","n","s","_$style","h","r","orientation","sizes","keyboardDelta","onSizesChange","Math","abs","style","Panel","minSize","maxSize","Handle","aria-orientation","aria-controls","join","aria-valuenow","round","_v$","_v$2","_$delegateEvents","_$createComponent","_$memo","_$className","_$setAttribute","_$style","_$delegateEvents"],"sources":["../../../../src/components/layout/split-layout/split-layout.tsx"],"sourcesContent":["import Resizable from '@corvu/resizable'\nimport {\n For,\n createMemo,\n createComputed,\n createUniqueId,\n createSignal,\n onCleanup,\n on,\n type Accessor,\n type JSX,\n} from 'solid-js'\nimport { X, GripVertical } from 'lucide-solid'\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'\nimport {\n listLeaves,\n MIN_SPLIT_RATIO,\n MAX_SPLIT_RATIO,\n type SplitLayoutBranch,\n type SplitLayoutLeaf,\n type SplitLayoutState,\n} from './model'\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}\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 const refs = new Map<string, HTMLElement>()\n const domIds = new Map<string, string>()\n const prefix = createUniqueId()\n let nextDomId = 0\n let nextDragId = 0\n const [drag, setDrag] = createSignal<{ id: string; token: string }>()\n const [drop, setDrop] = createSignal<{ id: string; intent: PaneDropIntent }>()\n const clearDrag = () => {\n setDrag(undefined)\n setDrop(undefined)\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 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 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 class={cn('relative size-full min-h-0 min-w-0', 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-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 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=\"flex min-w-0 flex-1 items-center gap-2 truncate text-sm\"\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 }}\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 <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={`Close ${props.labelForLeaf(leaf())}`}\n onClick={() => close(id)}\n >\n <X />\n </Button>\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 </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 return (\n <Resizable\n orientation={branch().direction === 'row' ? 'horizontal' : 'vertical'}\n sizes={[branch().ratio, 1 - branch().ratio]}\n keyboardDelta={0.05}\n onSizesChange={(sizes) => {\n if (sizes[0] !== undefined && Math.abs(sizes[0] - branch().ratio) > 0.000001)\n props.onResize(id, sizes[0])\n }}\n style={rectStyle(frames().get(id)?.rect ?? { x: 0, y: 0, width: 0, height: 0 })}\n class=\"pointer-events-none absolute flex min-h-0 min-w-0 data-[orientation=vertical]:flex-col\"\n >\n <Resizable.Panel\n minSize={MIN_SPLIT_RATIO}\n maxSize={MAX_SPLIT_RATIO}\n aria-hidden=\"true\"\n />\n <Resizable.Handle\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 class=\"pointer-events-auto relative w-px 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]:h-px data-[orientation=vertical]:w-full 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 <Resizable.Panel\n minSize={MIN_SPLIT_RATIO}\n maxSize={MAX_SPLIT_RATIO}\n aria-hidden=\"true\"\n />\n </Resizable>\n )\n }}\n </For>\n </div>\n )\n}\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -71,6 +71,7 @@ export * from './components/ui/toggle';
|
|
|
71
71
|
export * from './components/ui/toggle-group';
|
|
72
72
|
export * from './components/ui/tooltip';
|
|
73
73
|
export * from './components/motion';
|
|
74
|
+
export * from './components/layout/split-layout';
|
|
74
75
|
export * from './components/layout/app-shell';
|
|
75
76
|
export * from './components/layout/page';
|
|
76
77
|
export * from './components/layout/panel';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -59,6 +59,9 @@ import { Toggle, toggleVariants } from "./components/ui/toggle/toggle.js";
|
|
|
59
59
|
import { ToggleGroup, ToggleGroupItem } from "./components/ui/toggle-group/toggle-group.js";
|
|
60
60
|
import { Presence } from "./components/motion/presence.js";
|
|
61
61
|
import { Motion } from "./components/motion/index.js";
|
|
62
|
+
import { MAX_LAYOUT_DEPTH, MAX_LAYOUT_LEAVES, MAX_SPLIT_RATIO, MIN_SPLIT_RATIO, closePane, countLeaves, createLayoutState, focusPane, layoutDepth, listLeaves, movePane, neighborLeaf, normalizeLayout, resizeSplit, splitPane, swapPanes, undoClosePane } from "./components/layout/split-layout/model.js";
|
|
63
|
+
import { computeLayoutFrames } from "./components/layout/split-layout/geometry.js";
|
|
64
|
+
import { SplitLayout } from "./components/layout/split-layout/split-layout.js";
|
|
62
65
|
import { AppShell, AppShellBody, AppShellContent, AppShellMain } from "./components/layout/app-shell/app-shell.js";
|
|
63
66
|
import { Page, PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderTitle, PageSection } from "./components/layout/page/page.js";
|
|
64
67
|
import { Panel, PanelActions, PanelBody, PanelCard, PanelDescription, PanelFooter, PanelHeader, PanelPlaceholder, PanelTitle, PanelToolbar } from "./components/layout/panel/panel.js";
|
|
@@ -89,4 +92,4 @@ import { formatBytes, formatReleaseDate, plainTextFromMarkdown } from "./lib/ver
|
|
|
89
92
|
import { UpdateDialog } from "./components/composites/update-dialog/update-dialog.js";
|
|
90
93
|
import { WorkspaceMark } from "./components/composites/workspace-mark/workspace-mark.js";
|
|
91
94
|
import { keyedRows } from "./lib/keyed-rows.js";
|
|
92
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AccountMenu, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, AppShellBody, AppShellContent, AppShellMain, AppearanceEditor, AppearancePanel, AppearancePopover, AspectRatio, AttachmentCard, Avatar, AvatarFallback, AvatarImage, Badge, Board, BoardCardBody, BoardCardTitle, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbSeparator, BusySendButton, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, CalendarSurface, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, CheckboxDescription, CheckboxLabel, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxClear, ComboboxContent, ComboboxControl, ComboboxInput, ComboboxItem, ComboboxSection, ComboboxTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandSeparator, CommandShortcut, ComposerAttachmentButton, ComposerHint, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationAvatar, ConversationSurface, DatePicker, DetailPanel, DetailPanelBody, DetailPanelField, DetailPanelHeader, DetailPanelSection, Dialog, DialogClose, DialogCloseButton, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffBlock, DiffSummary, Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EntityIcon, Field, FieldDescription, FieldError, FieldInput, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTextArea, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputOtp, InputOtpCaret, Item, ItemDescription, ItemEmpty, ItemGroup, ItemGroupEntry, ItemTitle, Kbd, KbdGroup, Label, ListGroup, ListRow, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MessageBody, MessageComposer, MessageDayDivider, MessageGroup, MessageRow, ModalDialog, Motion, NavigationMenu, NavigationMenuContent, NavigationMenuGroup, NavigationMenuGroupLabel, NavigationMenuItem, NavigationMenuMenu, NavigationMenuSeparator, NavigationMenuTrigger, NavigationMenuViewport, Page, PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderTitle, PageSection, Pagination, PaginationEllipsis, PaginationItem, PaginationNext, PaginationPrevious, PalettePreview, Panel, PanelActions, PanelBody, PanelCard, PanelDescription, PanelFooter, PanelHeader, PanelPlaceholder, PanelTitle, PanelToolbar, Popover, PopoverAnchor, PopoverCloseButton, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger, Presence, Progress, PropertyList, PropertyRow, PropertyTerm, PropertyValue, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, Select, SelectChevronsUpDown, SelectContent, SelectItem, SelectLabel, SelectSection, SelectTrigger, SelectValue, Separator, SettingsField, SettingsPage, SettingsRow, SettingsSection, Sheet, SheetBody, SheetCloseButton, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SideRail, SideRailButton, SideRailContent, SideRailFooter, SideRailHeader, SideRailItem, SideRailSection, SidebarNav, SidebarNavButton, SidebarNavContent, SidebarNavFooter, SidebarNavHeader, SidebarNavItem, SidebarNavSection, SidebarNavTitle, Skeleton, Slider, Spinner, Stat, StatGroup, StatusBar, StatusBarItem, StatusBarSpacer, StatusChip, StatusList, Switch, SwitchDescription, SwitchLabel, TALL_CODE_BLOCK_PX, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableNumericCell, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeMiniature, ThemeMiniatureSplit, ThemePicker, ThemePreview, ThemeProvider, ThemeSwatch, ThemeToggle, ThreadPanel, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, TopBarBreadcrumb, TopBarPill, TopBarSearch, TopBarSection, TopBarTitle, UpdateDialog, WorkspaceMark, accentPresets, alertVariants, allTokens, badgeVariants, boardCardTitleVariants, builtinThemes, buttonVariants, cn, colorTokens, contrastRatio, controlInteractive, controlSize, controlSizeIcon, controlSizes, cva, defaultDarkThemeId, defaultLightThemeId, defaultThemeSelection, densityTokens, designTokens, diffLineVariants, diffStats, diffTargetPath, elevationTokens, entityIconVariants, fontOptions, formatBytes, formatReleaseDate, initialsFrom, inlineScriptLiteral, itemVariants, keyedRows, monogram, motionTokens, parseDiff, plainTextFromMarkdown, radiusTokens, resolvedDensity, sheetVariants, sidebarNavItemClass, sidebarNavItemStateClass, statusDotVariants, surfaceInteractive, themeById, themeCssVariables, themeFamilies, themeScript, themesForAppearance, toast, toaster, toggleVariants, typographyTokens, undocumentedTokenAliases, useSideRail, useTheme, validateTheme, validateThemeRegistry, zIndexTokens };
|
|
95
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AccountMenu, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppShell, AppShellBody, AppShellContent, AppShellMain, AppearanceEditor, AppearancePanel, AppearancePopover, AspectRatio, AttachmentCard, Avatar, AvatarFallback, AvatarImage, Badge, Board, BoardCardBody, BoardCardTitle, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbSeparator, BusySendButton, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, CalendarSurface, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, CheckboxDescription, CheckboxLabel, CodeBlock, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxClear, ComboboxContent, ComboboxControl, ComboboxInput, ComboboxItem, ComboboxSection, ComboboxTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandSeparator, CommandShortcut, ComposerAttachmentButton, ComposerHint, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationAvatar, ConversationSurface, DatePicker, DetailPanel, DetailPanelBody, DetailPanelField, DetailPanelHeader, DetailPanelSection, Dialog, DialogClose, DialogCloseButton, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffBlock, DiffSummary, Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EntityIcon, Field, FieldDescription, FieldError, FieldInput, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTextArea, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputOtp, InputOtpCaret, Item, ItemDescription, ItemEmpty, ItemGroup, ItemGroupEntry, ItemTitle, Kbd, KbdGroup, Label, ListGroup, ListRow, MAX_LAYOUT_DEPTH, MAX_LAYOUT_LEAVES, MAX_SPLIT_RATIO, MIN_SPLIT_RATIO, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MessageBody, MessageComposer, MessageDayDivider, MessageGroup, MessageRow, ModalDialog, Motion, NavigationMenu, NavigationMenuContent, NavigationMenuGroup, NavigationMenuGroupLabel, NavigationMenuItem, NavigationMenuMenu, NavigationMenuSeparator, NavigationMenuTrigger, NavigationMenuViewport, Page, PageHeader, PageHeaderActions, PageHeaderContent, PageHeaderDescription, PageHeaderTitle, PageSection, Pagination, PaginationEllipsis, PaginationItem, PaginationNext, PaginationPrevious, PalettePreview, Panel, PanelActions, PanelBody, PanelCard, PanelDescription, PanelFooter, PanelHeader, PanelPlaceholder, PanelTitle, PanelToolbar, Popover, PopoverAnchor, PopoverCloseButton, PopoverContent, PopoverDescription, PopoverTitle, PopoverTrigger, Presence, Progress, PropertyList, PropertyRow, PropertyTerm, PropertyValue, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, Select, SelectChevronsUpDown, SelectContent, SelectItem, SelectLabel, SelectSection, SelectTrigger, SelectValue, Separator, SettingsField, SettingsPage, SettingsRow, SettingsSection, Sheet, SheetBody, SheetCloseButton, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SideRail, SideRailButton, SideRailContent, SideRailFooter, SideRailHeader, SideRailItem, SideRailSection, SidebarNav, SidebarNavButton, SidebarNavContent, SidebarNavFooter, SidebarNavHeader, SidebarNavItem, SidebarNavSection, SidebarNavTitle, Skeleton, Slider, Spinner, SplitLayout, Stat, StatGroup, StatusBar, StatusBarItem, StatusBarSpacer, StatusChip, StatusList, Switch, SwitchDescription, SwitchLabel, TALL_CODE_BLOCK_PX, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableNumericCell, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeMiniature, ThemeMiniatureSplit, ThemePicker, ThemePreview, ThemeProvider, ThemeSwatch, ThemeToggle, ThreadPanel, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, TopBarBreadcrumb, TopBarPill, TopBarSearch, TopBarSection, TopBarTitle, UpdateDialog, WorkspaceMark, accentPresets, alertVariants, allTokens, badgeVariants, boardCardTitleVariants, builtinThemes, buttonVariants, closePane, cn, colorTokens, computeLayoutFrames, contrastRatio, controlInteractive, controlSize, controlSizeIcon, controlSizes, countLeaves, createLayoutState, cva, defaultDarkThemeId, defaultLightThemeId, defaultThemeSelection, densityTokens, designTokens, diffLineVariants, diffStats, diffTargetPath, elevationTokens, entityIconVariants, focusPane, fontOptions, formatBytes, formatReleaseDate, initialsFrom, inlineScriptLiteral, itemVariants, keyedRows, layoutDepth, listLeaves, monogram, motionTokens, movePane, neighborLeaf, normalizeLayout, parseDiff, plainTextFromMarkdown, radiusTokens, resizeSplit, resolvedDensity, sheetVariants, sidebarNavItemClass, sidebarNavItemStateClass, splitPane, statusDotVariants, surfaceInteractive, swapPanes, themeById, themeCssVariables, themeFamilies, themeScript, themesForAppearance, toast, toaster, toggleVariants, typographyTokens, undoClosePane, undocumentedTokenAliases, useSideRail, useTheme, validateTheme, validateThemeRegistry, zIndexTokens };
|
package/dist/r/registry.json
CHANGED
|
@@ -1529,6 +1529,47 @@
|
|
|
1529
1529
|
}
|
|
1530
1530
|
]
|
|
1531
1531
|
},
|
|
1532
|
+
{
|
|
1533
|
+
"name": "split-layout",
|
|
1534
|
+
"type": "registry:ui",
|
|
1535
|
+
"title": "Split Layout",
|
|
1536
|
+
"description": "Issue-backed binary layout with stable opaque leaf owners; scoped persistence belongs to the host.",
|
|
1537
|
+
"dependencies": [
|
|
1538
|
+
"@corvu/resizable@^0.2.5",
|
|
1539
|
+
"lucide-solid@^1.48.0"
|
|
1540
|
+
],
|
|
1541
|
+
"registryDependencies": [
|
|
1542
|
+
"@adea-ai/ui/button",
|
|
1543
|
+
"lib"
|
|
1544
|
+
],
|
|
1545
|
+
"files": [
|
|
1546
|
+
{
|
|
1547
|
+
"path": "src/components/layout/split-layout/drop.ts",
|
|
1548
|
+
"type": "registry:ui",
|
|
1549
|
+
"target": "components/layout/split-layout/drop.ts"
|
|
1550
|
+
},
|
|
1551
|
+
{
|
|
1552
|
+
"path": "src/components/layout/split-layout/geometry.ts",
|
|
1553
|
+
"type": "registry:ui",
|
|
1554
|
+
"target": "components/layout/split-layout/geometry.ts"
|
|
1555
|
+
},
|
|
1556
|
+
{
|
|
1557
|
+
"path": "src/components/layout/split-layout/index.ts",
|
|
1558
|
+
"type": "registry:ui",
|
|
1559
|
+
"target": "components/layout/split-layout/index.ts"
|
|
1560
|
+
},
|
|
1561
|
+
{
|
|
1562
|
+
"path": "src/components/layout/split-layout/model.ts",
|
|
1563
|
+
"type": "registry:ui",
|
|
1564
|
+
"target": "components/layout/split-layout/model.ts"
|
|
1565
|
+
},
|
|
1566
|
+
{
|
|
1567
|
+
"path": "src/components/layout/split-layout/split-layout.tsx",
|
|
1568
|
+
"type": "registry:ui",
|
|
1569
|
+
"target": "components/layout/split-layout/split-layout.tsx"
|
|
1570
|
+
}
|
|
1571
|
+
]
|
|
1572
|
+
},
|
|
1532
1573
|
{
|
|
1533
1574
|
"name": "status-bar",
|
|
1534
1575
|
"type": "registry:ui",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "split-layout",
|
|
3
|
+
"type": "registry:ui",
|
|
4
|
+
"title": "Split Layout",
|
|
5
|
+
"description": "Issue-backed binary layout with stable opaque leaf owners; scoped persistence belongs to the host.",
|
|
6
|
+
"dependencies": [
|
|
7
|
+
"@corvu/resizable@^0.2.5",
|
|
8
|
+
"lucide-solid@^1.48.0"
|
|
9
|
+
],
|
|
10
|
+
"registryDependencies": [
|
|
11
|
+
"@adea-ai/ui/button",
|
|
12
|
+
"lib"
|
|
13
|
+
],
|
|
14
|
+
"files": [
|
|
15
|
+
{
|
|
16
|
+
"path": "src/components/layout/split-layout/drop.ts",
|
|
17
|
+
"type": "registry:ui",
|
|
18
|
+
"target": "components/layout/split-layout/drop.ts"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/components/layout/split-layout/geometry.ts",
|
|
22
|
+
"type": "registry:ui",
|
|
23
|
+
"target": "components/layout/split-layout/geometry.ts"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "src/components/layout/split-layout/index.ts",
|
|
27
|
+
"type": "registry:ui",
|
|
28
|
+
"target": "components/layout/split-layout/index.ts"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "src/components/layout/split-layout/model.ts",
|
|
32
|
+
"type": "registry:ui",
|
|
33
|
+
"target": "components/layout/split-layout/model.ts"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "src/components/layout/split-layout/split-layout.tsx",
|
|
37
|
+
"type": "registry:ui",
|
|
38
|
+
"target": "components/layout/split-layout/split-layout.tsx"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|