@flyingrobots/bijou-tui 1.7.0 → 1.8.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.
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Layout presets and session restore — serialize/restore layout state.
3
+ *
4
+ * Pure functions for converting FrameModel layout state to JSON-friendly
5
+ * structures and applying them back.
6
+ */
7
+ import type { FrameModel } from './app-frame.js';
8
+ import type { PanelVisibilityState } from './panel-state.js';
9
+ import type { PanelMaximizeState } from './panel-state.js';
10
+ import type { PanelDockState } from './panel-dock.js';
11
+ /** Serialized layout state for a single page. */
12
+ export interface SerializedPageLayout {
13
+ /** Split ratio overrides keyed by splitId. */
14
+ readonly splitRatios: Record<string, number>;
15
+ /** Focused pane ID, or undefined if none. */
16
+ readonly focusedPane: string | undefined;
17
+ /** List of minimized pane IDs. */
18
+ readonly minimized: string[];
19
+ /** Dock order overrides keyed by container ID. */
20
+ readonly dockOrder: Record<string, string[]>;
21
+ /** ID of the maximized pane, or undefined if none. */
22
+ readonly maximizedPane: string | undefined;
23
+ }
24
+ /** Serialized layout state for the entire app. */
25
+ export interface SerializedLayoutState {
26
+ /** Schema version for forward compatibility. */
27
+ readonly version: 1;
28
+ /** Active page ID. */
29
+ readonly activePageId: string;
30
+ /** Per-page layout state. */
31
+ readonly pages: Record<string, SerializedPageLayout>;
32
+ }
33
+ /** Named layout preset. */
34
+ export interface LayoutPreset {
35
+ /** Human-readable preset name. */
36
+ readonly name: string;
37
+ /** Optional description. */
38
+ readonly description?: string;
39
+ /** The serialized state to apply. */
40
+ readonly state: SerializedLayoutState;
41
+ }
42
+ /**
43
+ * Serialize the current layout state of the frame model.
44
+ *
45
+ * Captures split ratios, focus, minimize/maximize state, and dock order
46
+ * for each page.
47
+ *
48
+ * @param model - The current frame model.
49
+ * @param pages - List of page IDs to serialize.
50
+ * @param perPage - Per-page state maps.
51
+ * @returns A JSON-friendly serialized layout state.
52
+ */
53
+ export declare function serializeLayoutState<PageModel>(model: FrameModel<PageModel>, pages: readonly string[], perPage?: {
54
+ minimizedByPage?: Readonly<Record<string, PanelVisibilityState>>;
55
+ maximizedPaneByPage?: Readonly<Record<string, PanelMaximizeState>>;
56
+ dockStateByPage?: Readonly<Record<string, PanelDockState>>;
57
+ splitRatiosByPage?: Readonly<Record<string, Readonly<Record<string, number>>>>;
58
+ }): SerializedLayoutState;
59
+ /**
60
+ * Restore layout state from a serialized snapshot.
61
+ *
62
+ * Returns the per-page state maps that should be merged into the frame model.
63
+ *
64
+ * @param state - The serialized layout state to restore.
65
+ * @returns Restored per-page state maps.
66
+ */
67
+ export declare function restoreLayoutState(state: SerializedLayoutState): {
68
+ activePageId: string;
69
+ focusedPaneByPage: Record<string, string | undefined>;
70
+ minimizedByPage: Record<string, PanelVisibilityState>;
71
+ maximizedPaneByPage: Record<string, PanelMaximizeState>;
72
+ dockStateByPage: Record<string, PanelDockState>;
73
+ splitRatiosByPage: Record<string, Record<string, number>>;
74
+ };
75
+ /** Preset: side-by-side split with equal ratio. */
76
+ export declare function presetSideBySide(splitId: string): SerializedPageLayout;
77
+ /** Preset: stacked (vertical) split with equal ratio. */
78
+ export declare function presetStacked(splitId: string): SerializedPageLayout;
79
+ /** Preset: focused on a single pane (maximized). */
80
+ export declare function presetFocused(paneId: string): SerializedPageLayout;
81
+ //# sourceMappingURL=layout-preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-preset.d.ts","sourceRoot":"","sources":["../src/layout-preset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Layout presets and session restore — serialize/restore layout state.
3
+ *
4
+ * Pure functions for converting FrameModel layout state to JSON-friendly
5
+ * structures and applying them back.
6
+ */
7
+ /**
8
+ * Serialize the current layout state of the frame model.
9
+ *
10
+ * Captures split ratios, focus, minimize/maximize state, and dock order
11
+ * for each page.
12
+ *
13
+ * @param model - The current frame model.
14
+ * @param pages - List of page IDs to serialize.
15
+ * @param perPage - Per-page state maps.
16
+ * @returns A JSON-friendly serialized layout state.
17
+ */
18
+ export function serializeLayoutState(model, pages, perPage = {}) {
19
+ const serializedPages = {};
20
+ for (const pageId of pages) {
21
+ const visibility = perPage.minimizedByPage?.[pageId]
22
+ ?? model.minimizedByPage?.[pageId];
23
+ const maximize = perPage.maximizedPaneByPage?.[pageId]
24
+ ?? model.maximizedPaneByPage?.[pageId];
25
+ const dock = perPage.dockStateByPage?.[pageId]
26
+ ?? model.dockStateByPage?.[pageId];
27
+ const ratios = perPage.splitRatiosByPage?.[pageId]
28
+ ?? model.splitRatioOverrides?.[pageId];
29
+ serializedPages[pageId] = {
30
+ splitRatios: ratios ? { ...ratios } : {},
31
+ focusedPane: model.focusedPaneByPage[pageId],
32
+ minimized: visibility ? [...visibility.minimized] : [],
33
+ dockOrder: dock
34
+ ? Object.fromEntries(Object.entries(dock.orderByContainer).map(([k, v]) => [k, [...v]]))
35
+ : {},
36
+ maximizedPane: maximize?.maximizedPaneId,
37
+ };
38
+ }
39
+ return {
40
+ version: 1,
41
+ activePageId: model.activePageId,
42
+ pages: serializedPages,
43
+ };
44
+ }
45
+ /**
46
+ * Restore layout state from a serialized snapshot.
47
+ *
48
+ * Returns the per-page state maps that should be merged into the frame model.
49
+ *
50
+ * @param state - The serialized layout state to restore.
51
+ * @returns Restored per-page state maps.
52
+ */
53
+ export function restoreLayoutState(state) {
54
+ const focusedPaneByPage = {};
55
+ const minimizedByPage = {};
56
+ const maximizedPaneByPage = {};
57
+ const dockStateByPage = {};
58
+ const splitRatiosByPage = {};
59
+ for (const [pageId, pageState] of Object.entries(state.pages)) {
60
+ focusedPaneByPage[pageId] = pageState.focusedPane;
61
+ minimizedByPage[pageId] = { minimized: new Set(pageState.minimized) };
62
+ maximizedPaneByPage[pageId] = { maximizedPaneId: pageState.maximizedPane };
63
+ dockStateByPage[pageId] = {
64
+ orderByContainer: Object.fromEntries(Object.entries(pageState.dockOrder).map(([k, v]) => [k, [...v]])),
65
+ };
66
+ splitRatiosByPage[pageId] = { ...pageState.splitRatios };
67
+ }
68
+ return {
69
+ activePageId: state.activePageId,
70
+ focusedPaneByPage,
71
+ minimizedByPage,
72
+ maximizedPaneByPage,
73
+ dockStateByPage,
74
+ splitRatiosByPage,
75
+ };
76
+ }
77
+ /** Preset: side-by-side split with equal ratio. */
78
+ export function presetSideBySide(splitId) {
79
+ return {
80
+ splitRatios: { [splitId]: 0.5 },
81
+ focusedPane: undefined,
82
+ minimized: [],
83
+ dockOrder: {},
84
+ maximizedPane: undefined,
85
+ };
86
+ }
87
+ /** Preset: stacked (vertical) split with equal ratio. */
88
+ export function presetStacked(splitId) {
89
+ return {
90
+ splitRatios: { [splitId]: 0.5 },
91
+ focusedPane: undefined,
92
+ minimized: [],
93
+ dockOrder: {},
94
+ maximizedPane: undefined,
95
+ };
96
+ }
97
+ /** Preset: focused on a single pane (maximized). */
98
+ export function presetFocused(paneId) {
99
+ return {
100
+ splitRatios: {},
101
+ focusedPane: paneId,
102
+ minimized: [],
103
+ dockOrder: {},
104
+ maximizedPane: paneId,
105
+ };
106
+ }
107
+ //# sourceMappingURL=layout-preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-preset.js","sourceRoot":"","sources":["../src/layout-preset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Dockable panel manager — reorder panes within containers.
3
+ *
4
+ * Pure, immutable state reducers for per-page panel dock ordering.
5
+ */
6
+ import type { FrameLayoutNode } from './app-frame.js';
7
+ /** Direction for moving a pane within its container. */
8
+ export type DockDirection = 'up' | 'down' | 'left' | 'right';
9
+ /** Immutable dock state tracking child order overrides per container. */
10
+ export interface PanelDockState {
11
+ /** Map from container (split/grid) ID to ordered array of child pane IDs. */
12
+ readonly orderByContainer: Readonly<Record<string, readonly string[]>>;
13
+ }
14
+ /** Create initial (empty) panel dock state. */
15
+ export declare function createPanelDockState(): PanelDockState;
16
+ /**
17
+ * Move a pane in its container in the given direction.
18
+ *
19
+ * For splits: swaps pane A and pane B when moving in the split axis direction.
20
+ * For grids: rotates the area assignment.
21
+ *
22
+ * @param state - Current dock state.
23
+ * @param containerId - ID of the parent container (split/grid).
24
+ * @param paneId - ID of the pane to move.
25
+ * @param direction - Direction to move.
26
+ * @param containerChildIds - Current ordered child IDs of the container.
27
+ * @returns Updated dock state.
28
+ */
29
+ export declare function movePaneInContainer(state: PanelDockState, containerId: string, paneId: string, direction: DockDirection, containerChildIds: readonly string[]): PanelDockState;
30
+ /**
31
+ * Resolve the child order for a container, applying any dock state overrides.
32
+ *
33
+ * @param state - Current dock state.
34
+ * @param containerId - ID of the container.
35
+ * @param defaultChildIds - Default child order from the layout tree.
36
+ * @returns The resolved child order.
37
+ */
38
+ export declare function resolveChildOrder(state: PanelDockState, containerId: string, defaultChildIds: readonly string[]): readonly string[];
39
+ /**
40
+ * Walk a layout tree to find the parent container of a given pane.
41
+ *
42
+ * @param node - Root of the layout tree.
43
+ * @param paneId - ID of the pane to find.
44
+ * @returns The container node and its ID, or undefined if not found.
45
+ */
46
+ export declare function findPaneContainer(node: FrameLayoutNode, paneId: string): {
47
+ containerId: string;
48
+ childIds: readonly string[];
49
+ } | undefined;
50
+ /** Get the identifying ID of a layout node (paneId, splitId, or gridId). */
51
+ export declare function getNodeId(node: FrameLayoutNode): string;
52
+ //# sourceMappingURL=panel-dock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock.d.ts","sourceRoot":"","sources":["../src/panel-dock.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACxE;AAED,+CAA+C;AAC/C,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EACxB,iBAAiB,EAAE,SAAS,MAAM,EAAE,GACnC,cAAc,CAoBhB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,SAAS,MAAM,EAAE,CAYnB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,MAAM,GACb;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAmClE;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAMvD"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Dockable panel manager — reorder panes within containers.
3
+ *
4
+ * Pure, immutable state reducers for per-page panel dock ordering.
5
+ */
6
+ /** Create initial (empty) panel dock state. */
7
+ export function createPanelDockState() {
8
+ return { orderByContainer: {} };
9
+ }
10
+ /**
11
+ * Move a pane in its container in the given direction.
12
+ *
13
+ * For splits: swaps pane A and pane B when moving in the split axis direction.
14
+ * For grids: rotates the area assignment.
15
+ *
16
+ * @param state - Current dock state.
17
+ * @param containerId - ID of the parent container (split/grid).
18
+ * @param paneId - ID of the pane to move.
19
+ * @param direction - Direction to move.
20
+ * @param containerChildIds - Current ordered child IDs of the container.
21
+ * @returns Updated dock state.
22
+ */
23
+ export function movePaneInContainer(state, containerId, paneId, direction, containerChildIds) {
24
+ const currentOrder = state.orderByContainer[containerId] ?? [...containerChildIds];
25
+ const idx = currentOrder.indexOf(paneId);
26
+ if (idx < 0)
27
+ return state;
28
+ const isForward = direction === 'down' || direction === 'right';
29
+ const targetIdx = isForward ? idx + 1 : idx - 1;
30
+ if (targetIdx < 0 || targetIdx >= currentOrder.length)
31
+ return state;
32
+ const next = [...currentOrder];
33
+ // Swap positions
34
+ next[idx] = currentOrder[targetIdx];
35
+ next[targetIdx] = paneId;
36
+ return {
37
+ orderByContainer: {
38
+ ...state.orderByContainer,
39
+ [containerId]: next,
40
+ },
41
+ };
42
+ }
43
+ /**
44
+ * Resolve the child order for a container, applying any dock state overrides.
45
+ *
46
+ * @param state - Current dock state.
47
+ * @param containerId - ID of the container.
48
+ * @param defaultChildIds - Default child order from the layout tree.
49
+ * @returns The resolved child order.
50
+ */
51
+ export function resolveChildOrder(state, containerId, defaultChildIds) {
52
+ const override = state.orderByContainer[containerId];
53
+ if (!override)
54
+ return defaultChildIds;
55
+ // Validate: override must contain exactly the same IDs
56
+ if (override.length !== defaultChildIds.length)
57
+ return defaultChildIds;
58
+ const defaultSet = new Set(defaultChildIds);
59
+ for (const id of override) {
60
+ if (!defaultSet.has(id))
61
+ return defaultChildIds;
62
+ }
63
+ return override;
64
+ }
65
+ /**
66
+ * Walk a layout tree to find the parent container of a given pane.
67
+ *
68
+ * @param node - Root of the layout tree.
69
+ * @param paneId - ID of the pane to find.
70
+ * @returns The container node and its ID, or undefined if not found.
71
+ */
72
+ export function findPaneContainer(node, paneId) {
73
+ if (node.kind === 'pane')
74
+ return undefined;
75
+ if (node.kind === 'split') {
76
+ const childIds = [
77
+ getNodeId(node.paneA),
78
+ getNodeId(node.paneB),
79
+ ];
80
+ // Check if either direct child is the target pane
81
+ if (getNodeId(node.paneA) === paneId || getNodeId(node.paneB) === paneId) {
82
+ return { containerId: node.splitId, childIds };
83
+ }
84
+ // Recurse into children
85
+ return findPaneContainer(node.paneA, paneId) ?? findPaneContainer(node.paneB, paneId);
86
+ }
87
+ // Grid — derive childIds from node IDs, not area names
88
+ const areaNames = Object.keys(node.cells);
89
+ const gridChildIds = areaNames.map((name) => getNodeId(node.cells[name]));
90
+ for (let i = 0; i < areaNames.length; i++) {
91
+ if (gridChildIds[i] === paneId) {
92
+ return { containerId: node.gridId, childIds: gridChildIds };
93
+ }
94
+ }
95
+ // Recurse into grid children
96
+ for (const areaName of areaNames) {
97
+ const child = node.cells[areaName];
98
+ const found = findPaneContainer(child, paneId);
99
+ if (found)
100
+ return found;
101
+ }
102
+ return undefined;
103
+ }
104
+ /** Get the identifying ID of a layout node (paneId, splitId, or gridId). */
105
+ export function getNodeId(node) {
106
+ switch (node.kind) {
107
+ case 'pane': return node.paneId;
108
+ case 'split': return node.splitId;
109
+ case 'grid': return node.gridId;
110
+ }
111
+ }
112
+ //# sourceMappingURL=panel-dock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-dock.js","sourceRoot":"","sources":["../src/panel-dock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Panel visibility state — minimize/fold and maximize/restore.
3
+ *
4
+ * Pure, immutable state reducers for per-page panel visibility.
5
+ */
6
+ /** Immutable panel visibility state tracking minimized panes. */
7
+ export interface PanelVisibilityState {
8
+ /** Set of pane IDs that are currently minimized/folded. */
9
+ readonly minimized: ReadonlySet<string>;
10
+ }
11
+ /** Immutable panel maximize state tracking the maximized pane. */
12
+ export interface PanelMaximizeState {
13
+ /** ID of the pane currently maximized, or undefined if none. */
14
+ readonly maximizedPaneId: string | undefined;
15
+ }
16
+ /** Create initial panel visibility state. */
17
+ export declare function createPanelVisibilityState(): PanelVisibilityState;
18
+ /** Create initial panel maximize state. */
19
+ export declare function createPanelMaximizeState(): PanelMaximizeState;
20
+ /** Toggle a pane's minimized state. Cannot minimize the last remaining visible pane. */
21
+ export declare function toggleMinimized(state: PanelVisibilityState, paneId: string, allPaneIds: readonly string[]): PanelVisibilityState;
22
+ /** Minimize a specific pane. Refuses if it's the last visible pane. */
23
+ export declare function minimizePane(state: PanelVisibilityState, paneId: string, allPaneIds: readonly string[]): PanelVisibilityState;
24
+ /** Restore a minimized pane. */
25
+ export declare function restorePane(state: PanelVisibilityState, paneId: string): PanelVisibilityState;
26
+ /** Check if a pane is minimized. */
27
+ export declare function isMinimized(state: PanelVisibilityState, paneId: string): boolean;
28
+ /** Toggle maximize on a pane. If already maximized, restore. */
29
+ export declare function toggleMaximize(state: PanelMaximizeState, paneId: string): PanelMaximizeState;
30
+ //# sourceMappingURL=panel-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-state.d.ts","sourceRoot":"","sources":["../src/panel-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,6CAA6C;AAC7C,wBAAgB,0BAA0B,IAAI,oBAAoB,CAEjE;AAED,2CAA2C;AAC3C,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,oBAAoB,CAKtB;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,oBAAoB,CAQtB;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CACzB,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,GACb,oBAAoB,CAKtB;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CACzB,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAET;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Panel visibility state — minimize/fold and maximize/restore.
3
+ *
4
+ * Pure, immutable state reducers for per-page panel visibility.
5
+ */
6
+ /** Create initial panel visibility state. */
7
+ export function createPanelVisibilityState() {
8
+ return { minimized: new Set() };
9
+ }
10
+ /** Create initial panel maximize state. */
11
+ export function createPanelMaximizeState() {
12
+ return { maximizedPaneId: undefined };
13
+ }
14
+ /** Toggle a pane's minimized state. Cannot minimize the last remaining visible pane. */
15
+ export function toggleMinimized(state, paneId, allPaneIds) {
16
+ if (state.minimized.has(paneId)) {
17
+ return restorePane(state, paneId);
18
+ }
19
+ return minimizePane(state, paneId, allPaneIds);
20
+ }
21
+ /** Minimize a specific pane. Refuses if it's the last visible pane. */
22
+ export function minimizePane(state, paneId, allPaneIds) {
23
+ // Cannot minimize the last remaining visible pane
24
+ const visibleCount = allPaneIds.filter((id) => !state.minimized.has(id)).length;
25
+ if (visibleCount <= 1)
26
+ return state;
27
+ const next = new Set(state.minimized);
28
+ next.add(paneId);
29
+ return { minimized: next };
30
+ }
31
+ /** Restore a minimized pane. */
32
+ export function restorePane(state, paneId) {
33
+ if (!state.minimized.has(paneId))
34
+ return state;
35
+ const next = new Set(state.minimized);
36
+ next.delete(paneId);
37
+ return { minimized: next };
38
+ }
39
+ /** Check if a pane is minimized. */
40
+ export function isMinimized(state, paneId) {
41
+ return state.minimized.has(paneId);
42
+ }
43
+ /** Toggle maximize on a pane. If already maximized, restore. */
44
+ export function toggleMaximize(state, paneId) {
45
+ if (state.maximizedPaneId === paneId) {
46
+ return { maximizedPaneId: undefined };
47
+ }
48
+ return { maximizedPaneId: paneId };
49
+ }
50
+ //# sourceMappingURL=panel-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-state.js","sourceRoot":"","sources":["../src/panel-state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,6CAA6C;AAC7C,MAAM,UAAU,0BAA0B;IACxC,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAClC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,wBAAwB;IACtC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAC7B,KAA2B,EAC3B,MAAc,EACd,UAA6B;IAE7B,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAC1B,KAA2B,EAC3B,MAAc,EACd,UAA6B;IAE7B,kDAAkD;IAClD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,WAAW,CACzB,KAA2B,EAC3B,MAAc;IAEd,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,WAAW,CACzB,KAA2B,EAC3B,MAAc;IAEd,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAC5B,KAAyB,EACzB,MAAc;IAEd,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC"}
package/dist/screen.d.ts CHANGED
@@ -6,15 +6,12 @@
6
6
  *
7
7
  * @module screen
8
8
  */
9
- import type { IOPort } from '@flyingrobots/bijou';
9
+ import { HIDE_CURSOR, SHOW_CURSOR, type IOPort } from '@flyingrobots/bijou';
10
10
  /** ANSI escape: enter alternate screen buffer (DEC Private Mode 1049). */
11
11
  export declare const ENTER_ALT_SCREEN = "\u001B[?1049h";
12
12
  /** ANSI escape: exit alternate screen buffer (DEC Private Mode 1049). */
13
13
  export declare const EXIT_ALT_SCREEN = "\u001B[?1049l";
14
- /** ANSI escape: hide the text cursor (DEC Private Mode 25). */
15
- export declare const HIDE_CURSOR = "\u001B[?25l";
16
- /** ANSI escape: show the text cursor (DEC Private Mode 25). */
17
- export declare const SHOW_CURSOR = "\u001B[?25h";
14
+ export { HIDE_CURSOR, SHOW_CURSOR };
18
15
  /** ANSI escape: disable line wrapping (DEC Private Mode 7). */
19
16
  export declare const WRAP_DISABLE = "\u001B[?7l";
20
17
  /** ANSI escape: enable line wrapping (DEC Private Mode 7). */
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,kBAAgB,CAAC;AAC9C,yEAAyE;AACzE,eAAO,MAAM,eAAe,kBAAgB,CAAC;AAC7C,+DAA+D;AAC/D,eAAO,MAAM,WAAW,gBAAc,CAAC;AACvC,+DAA+D;AAC/D,eAAO,MAAM,WAAW,gBAAc,CAAC;AACvC,+DAA+D;AAC/D,eAAO,MAAM,YAAY,eAAa,CAAC;AACvC,8DAA8D;AAC9D,eAAO,MAAM,WAAW,eAAa,CAAC;AACtC,+CAA+C;AAC/C,eAAO,MAAM,YAAY,cAAY,CAAC;AACtC,8DAA8D;AAC9D,eAAO,MAAM,YAAY,aAAW,CAAC;AACrC,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,aAAW,CAAC;AAC1C,yDAAyD;AACzD,eAAO,MAAM,IAAI,aAAW,CAAC;AAC7B,qDAAqD;AACrD,eAAO,MAAM,UAAU,cAAY,CAAC;AAIpC,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;AAExD,qDAAqD;AACrD,eAAO,MAAM,YAAY,eAAa,CAAC;AACvC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,eAAa,CAAC;AAC3C,mDAAmD;AACnD,eAAO,MAAM,UAAU,eAAa,CAAC;AACrC,wFAAwF;AACxF,eAAO,MAAM,YAAY,eAAa,CAAC;AASvC;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAGlG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7D"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE5E,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,kBAAgB,CAAC;AAC9C,yEAAyE;AACzE,eAAO,MAAM,eAAe,kBAAgB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACpC,+DAA+D;AAC/D,eAAO,MAAM,YAAY,eAAa,CAAC;AACvC,8DAA8D;AAC9D,eAAO,MAAM,WAAW,eAAa,CAAC;AACtC,+CAA+C;AAC/C,eAAO,MAAM,YAAY,cAAY,CAAC;AACtC,8DAA8D;AAC9D,eAAO,MAAM,YAAY,aAAW,CAAC;AACrC,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,aAAW,CAAC;AAC1C,yDAAyD;AACzD,eAAO,MAAM,IAAI,aAAW,CAAC;AAC7B,qDAAqD;AACrD,eAAO,MAAM,UAAU,cAAY,CAAC;AAIpC,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;AAExD,qDAAqD;AACrD,eAAO,MAAM,YAAY,eAAa,CAAC;AACvC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,eAAa,CAAC;AAC3C,mDAAmD;AACnD,eAAO,MAAM,UAAU,eAAa,CAAC;AACrC,wFAAwF;AACxF,eAAO,MAAM,YAAY,eAAa,CAAC;AASvC;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAGlG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7D"}
package/dist/screen.js CHANGED
@@ -6,14 +6,12 @@
6
6
  *
7
7
  * @module screen
8
8
  */
9
+ import { HIDE_CURSOR, SHOW_CURSOR } from '@flyingrobots/bijou';
9
10
  /** ANSI escape: enter alternate screen buffer (DEC Private Mode 1049). */
10
11
  export const ENTER_ALT_SCREEN = '\x1b[?1049h';
11
12
  /** ANSI escape: exit alternate screen buffer (DEC Private Mode 1049). */
12
13
  export const EXIT_ALT_SCREEN = '\x1b[?1049l';
13
- /** ANSI escape: hide the text cursor (DEC Private Mode 25). */
14
- export const HIDE_CURSOR = '\x1b[?25l';
15
- /** ANSI escape: show the text cursor (DEC Private Mode 25). */
16
- export const SHOW_CURSOR = '\x1b[?25h';
14
+ export { HIDE_CURSOR, SHOW_CURSOR };
17
15
  /** ANSI escape: disable line wrapping (DEC Private Mode 7). */
18
16
  export const WRAP_DISABLE = '\x1b[?7l';
19
17
  /** ANSI escape: enable line wrapping (DEC Private Mode 7). */
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAC7C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,yDAAyD;AACzD,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAOpC,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAC3C,mDAAmD;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AACrC,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,iBAAiB,GAAgC;IACrD,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;CACP,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,KAAkB,EAAE,OAA6B;IAC1F,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtF,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,EAAE,CAAC,KAAK,CAAC,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,OAAe;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;IAC7F,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAe,MAAM,qBAAqB,CAAC;AAE5E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,yEAAyE;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACpC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,yDAAyD;AACzD,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAOpC,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAC3C,mDAAmD;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AACrC,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,iBAAiB,GAAgC;IACrD,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;CACP,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,KAAkB,EAAE,OAA6B;IAC1F,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtF,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,EAAE,CAAC,KAAK,CAAC,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,OAAe;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;IAC7F,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClB,CAAC"}
@@ -5,6 +5,7 @@
5
5
  * solving for horizontal (`row`) and vertical (`column`) splits.
6
6
  */
7
7
  import type { LayoutRect } from './layout-rect.js';
8
+ import { type WritePort } from '@flyingrobots/bijou';
8
9
  /** Split direction. */
9
10
  export type SplitPaneDirection = 'row' | 'column';
10
11
  /** Focused pane identifier. */
@@ -48,10 +49,14 @@ export interface SplitPaneOptions {
48
49
  }
49
50
  /**
50
51
  * Create split-pane state.
52
+ *
53
+ * @param options - Optional initial ratio, focus, and warning output.
54
+ * @param options.io - Optional `WritePort` for developer warnings. When omitted, warnings are silently skipped.
51
55
  */
52
56
  export declare function createSplitPaneState(options?: {
53
57
  ratio?: number;
54
58
  focused?: SplitPaneFocus;
59
+ io?: WritePort;
55
60
  }): SplitPaneState;
56
61
  /**
57
62
  * Update split ratio directly (clamped to `[0, 1]`).
@@ -1 +1 @@
1
- {"version":3,"file":"split-pane.d.ts","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,uBAAuB;AACvB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAClD,+BAA+B;AAC/B,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvC,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,GAAG,cAAc,CAS3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAEtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,cAAc,CAahB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAE1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,GACjD,eAAe,CAyBjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuBlF"}
1
+ {"version":3,"file":"split-pane.d.ts","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAyD,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE5G,uBAAuB;AACvB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAClD,+BAA+B;AAC/B,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvC,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,EAAE,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,cAAc,CAS3H;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAEtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,cAAc,CAahB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAE1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,GACjD,eAAe,CAyBjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuBlF"}
@@ -8,10 +8,13 @@ import { fitBlock } from './layout-utils.js';
8
8
  import { graphemeClusterWidth, graphemeWidth, segmentGraphemes } from '@flyingrobots/bijou';
9
9
  /**
10
10
  * Create split-pane state.
11
+ *
12
+ * @param options - Optional initial ratio, focus, and warning output.
13
+ * @param options.io - Optional `WritePort` for developer warnings. When omitted, warnings are silently skipped.
11
14
  */
12
15
  export function createSplitPaneState(options) {
13
16
  if (options?.ratio != null && !Number.isFinite(options.ratio)) {
14
- warnInvalidRatio(options.ratio);
17
+ warnInvalidRatio(options.ratio, options.io);
15
18
  }
16
19
  return {
17
20
  ratio: clampRatio(options?.ratio ?? 0.5),
@@ -133,13 +136,8 @@ function clampRatio(ratio) {
133
136
  return clamp(ratio, 0, 1);
134
137
  }
135
138
  /** Log a dev-mode warning when a non-finite ratio is supplied. */
136
- function warnInvalidRatio(ratio) {
137
- if (typeof process === 'undefined')
138
- return;
139
- const nodeEnv = process.env?.['NODE_ENV'];
140
- if (nodeEnv === 'production' || nodeEnv === 'test')
141
- return;
142
- console.warn(`[bijou-tui] createSplitPaneState(): received non-finite ratio "${String(ratio)}"; falling back to 0.5.`);
139
+ function warnInvalidRatio(ratio, io) {
140
+ io?.writeError(`[bijou-tui] createSplitPaneState(): received non-finite ratio "${String(ratio)}"; falling back to 0.5.\n`);
143
141
  }
144
142
  /** Pick a single-width grapheme from the divider string, falling back to a default. */
145
143
  function resolveDividerChar(dividerChar, fallback) {
@@ -1 +1 @@
1
- {"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"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"}