@flyingrobots/bijou-tui 1.7.0 → 2.1.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/dist/app-frame-actions.d.ts +37 -0
- package/dist/app-frame-actions.d.ts.map +1 -0
- package/dist/app-frame-actions.js +313 -0
- package/dist/app-frame-actions.js.map +1 -0
- package/dist/app-frame-palette.d.ts +16 -0
- package/dist/app-frame-palette.d.ts.map +1 -0
- package/dist/app-frame-palette.js +158 -0
- package/dist/app-frame-palette.js.map +1 -0
- package/dist/app-frame-render.d.ts +37 -0
- package/dist/app-frame-render.d.ts.map +1 -0
- package/dist/app-frame-render.js +277 -0
- package/dist/app-frame-render.js.map +1 -0
- package/dist/app-frame-types.d.ts +135 -0
- package/dist/app-frame-types.d.ts.map +1 -0
- package/dist/app-frame-types.js +72 -0
- package/dist/app-frame-types.js.map +1 -0
- package/dist/app-frame-utils.d.ts +37 -0
- package/dist/app-frame-utils.d.ts.map +1 -0
- package/dist/app-frame-utils.js +141 -0
- package/dist/app-frame-utils.js.map +1 -0
- package/dist/app-frame.d.ts +20 -4
- package/dist/app-frame.d.ts.map +1 -1
- package/dist/app-frame.js +52 -747
- package/dist/app-frame.js.map +1 -1
- package/dist/eventbus.d.ts +5 -0
- package/dist/eventbus.d.ts.map +1 -1
- package/dist/eventbus.js +17 -3
- package/dist/eventbus.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/layout-preset.d.ts +81 -0
- package/dist/layout-preset.d.ts.map +1 -0
- package/dist/layout-preset.js +107 -0
- package/dist/layout-preset.js.map +1 -0
- package/dist/panel-dock.d.ts +52 -0
- package/dist/panel-dock.d.ts.map +1 -0
- package/dist/panel-dock.js +112 -0
- package/dist/panel-dock.js.map +1 -0
- package/dist/panel-state.d.ts +30 -0
- package/dist/panel-state.d.ts.map +1 -0
- package/dist/panel-state.js +50 -0
- package/dist/panel-state.js.map +1 -0
- package/dist/screen.d.ts +2 -5
- package/dist/screen.d.ts.map +1 -1
- package/dist/screen.js +2 -4
- package/dist/screen.js.map +1 -1
- package/dist/split-pane.d.ts +5 -0
- package/dist/split-pane.d.ts.map +1 -1
- package/dist/split-pane.js +6 -8
- package/dist/split-pane.js.map +1 -1
- package/dist/transition-shaders.d.ts +101 -3
- package/dist/transition-shaders.d.ts.map +1 -1
- package/dist/transition-shaders.js +281 -6
- package/dist/transition-shaders.js.map +1 -1
- package/package.json +3 -3
|
@@ -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
|
|
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
|
-
|
|
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). */
|
package/dist/screen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,
|
|
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
|
-
|
|
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). */
|
package/dist/screen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
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"}
|
package/dist/split-pane.d.ts
CHANGED
|
@@ -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]`).
|
package/dist/split-pane.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"split-pane.d.ts","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"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"}
|
package/dist/split-pane.js
CHANGED
|
@@ -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
|
-
|
|
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) {
|
package/dist/split-pane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transition shader system — composable pure functions for page transitions.
|
|
3
3
|
*
|
|
4
|
-
* Each shader receives cell metadata (position, dimensions, progress, random
|
|
5
|
-
* and returns whether to show the next page or optionally
|
|
4
|
+
* Each shader receives cell metadata (position, dimensions, progress, random,
|
|
5
|
+
* frame counter) and returns whether to show the next page or optionally
|
|
6
|
+
* override the character.
|
|
7
|
+
*
|
|
8
|
+
* ## Shader types
|
|
9
|
+
*
|
|
10
|
+
* - **Instances** (`wipeShader`, `dissolveShader`, …) — zero-config, ready to use.
|
|
11
|
+
* - **Factories** (`wipe()`, `radial()`, `blinds()`, …) — parameterized, return a shader.
|
|
12
|
+
* - **Combinators** (`reverse()`, `chain()`, `overlay()`) — transform or compose shaders.
|
|
6
13
|
*/
|
|
7
14
|
import type { BijouContext } from '@flyingrobots/bijou';
|
|
8
15
|
/** Input provided to a transition shader for each cell. */
|
|
@@ -12,18 +19,35 @@ export interface TransitionCell {
|
|
|
12
19
|
readonly width: number;
|
|
13
20
|
readonly height: number;
|
|
14
21
|
readonly progress: number;
|
|
22
|
+
/** Stable pseudo-random [0, 1] based on coordinates — constant across frames. */
|
|
15
23
|
readonly rand: number;
|
|
24
|
+
/** Monotonic frame counter for temporal effects (glitch, static, etc.). */
|
|
25
|
+
readonly frame: number;
|
|
16
26
|
readonly ctx: BijouContext;
|
|
17
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Semantic role of a character override.
|
|
30
|
+
*
|
|
31
|
+
* - `'decoration'` — ambient visual noise (glitch blocks, static, scramble).
|
|
32
|
+
* Survives progress remapping in combinators like `reverse()` and `chain()`.
|
|
33
|
+
* - `'marker'` — positional indicator tied to the shader's progress direction
|
|
34
|
+
* (e.g., typewriter cursor). Dropped by combinators that remap progress,
|
|
35
|
+
* since the marker's position becomes meaningless in the new space.
|
|
36
|
+
*/
|
|
37
|
+
export type CharRole = 'decoration' | 'marker';
|
|
18
38
|
/** Output from a transition shader for a single cell. */
|
|
19
39
|
export interface TransitionResult {
|
|
20
40
|
readonly showNext: boolean;
|
|
21
41
|
readonly char?: string;
|
|
42
|
+
/** Semantic role of the char override. Defaults to `'decoration'` if omitted. */
|
|
43
|
+
readonly charRole?: CharRole;
|
|
22
44
|
}
|
|
23
45
|
/** A pure function that determines how each cell transitions between pages. */
|
|
24
46
|
export type TransitionShaderFn = (cell: TransitionCell) => TransitionResult;
|
|
47
|
+
/** Direction for axis-aligned wipes and blinds. */
|
|
48
|
+
export type WipeDirection = 'left' | 'right' | 'up' | 'down';
|
|
25
49
|
/** Built-in transition names. */
|
|
26
|
-
export type BuiltinTransition = 'none' | 'wipe' | 'dissolve' | 'grid' | 'fade' | 'melt' | 'matrix' | 'scramble';
|
|
50
|
+
export type BuiltinTransition = 'none' | 'wipe' | 'dissolve' | 'grid' | 'fade' | 'melt' | 'matrix' | 'scramble' | 'radial' | 'diamond' | 'spiral' | 'blinds' | 'curtain' | 'pixelate' | 'typewriter' | 'glitch' | 'static';
|
|
27
51
|
/** Left-to-right wipe. */
|
|
28
52
|
export declare const wipeShader: TransitionShaderFn;
|
|
29
53
|
/** Random pixel dissolve. */
|
|
@@ -38,6 +62,80 @@ export declare const meltShader: TransitionShaderFn;
|
|
|
38
62
|
export declare const matrixShader: TransitionShaderFn;
|
|
39
63
|
/** Scramble noise that resolves at midpoint. */
|
|
40
64
|
export declare const scrambleShader: TransitionShaderFn;
|
|
65
|
+
/** Directional wipe factory. Default: left-to-right. */
|
|
66
|
+
export declare function wipe(direction?: WipeDirection): TransitionShaderFn;
|
|
67
|
+
/** Circle expanding from an origin point. Default: center. */
|
|
68
|
+
export declare function radial(originX?: number, originY?: number): TransitionShaderFn;
|
|
69
|
+
/** Diamond/rhombus shape expanding from center. */
|
|
70
|
+
export declare function diamond(originX?: number, originY?: number): TransitionShaderFn;
|
|
71
|
+
/** Angular sweep that spirals outward from center. */
|
|
72
|
+
export declare function spiral(turns?: number, originX?: number, originY?: number): TransitionShaderFn;
|
|
73
|
+
/** Venetian blinds (horizontal or vertical bands). */
|
|
74
|
+
export declare function blinds(count?: number, direction?: 'horizontal' | 'vertical'): TransitionShaderFn;
|
|
75
|
+
/** Two halves sliding apart from center (vertical split). */
|
|
76
|
+
export declare function curtain(direction?: 'horizontal' | 'vertical'): TransitionShaderFn;
|
|
77
|
+
/** Progressively shrinking block pixelation that resolves to the next page. */
|
|
78
|
+
export declare function pixelate(maxBlockSize?: number): TransitionShaderFn;
|
|
79
|
+
/**
|
|
80
|
+
* Left-to-right, top-to-bottom typewriter reveal.
|
|
81
|
+
* Shows a cursor character at the leading edge.
|
|
82
|
+
*/
|
|
83
|
+
export declare function typewriter(cursor?: string): TransitionShaderFn;
|
|
84
|
+
/**
|
|
85
|
+
* Horizontal glitch displacement with RGB-split-style character noise.
|
|
86
|
+
* Uses the frame counter for temporal variation.
|
|
87
|
+
*/
|
|
88
|
+
export declare function glitch(intensity?: number): TransitionShaderFn;
|
|
89
|
+
/**
|
|
90
|
+
* TV static noise that clears to reveal the next page.
|
|
91
|
+
* Uses the frame counter for flickering.
|
|
92
|
+
*/
|
|
93
|
+
export declare function tvStatic(density?: number): TransitionShaderFn;
|
|
94
|
+
/** Circle expanding from center. */
|
|
95
|
+
export declare const radialShader: TransitionShaderFn;
|
|
96
|
+
/** Diamond expanding from center. */
|
|
97
|
+
export declare const diamondShader: TransitionShaderFn;
|
|
98
|
+
/** Spiral sweep from center. */
|
|
99
|
+
export declare const spiralShader: TransitionShaderFn;
|
|
100
|
+
/** 8-band horizontal blinds. */
|
|
101
|
+
export declare const blindsShader: TransitionShaderFn;
|
|
102
|
+
/** Vertical curtain split from center. */
|
|
103
|
+
export declare const curtainShader: TransitionShaderFn;
|
|
104
|
+
/** Block pixelation with 16px max block size. */
|
|
105
|
+
export declare const pixelateShader: TransitionShaderFn;
|
|
106
|
+
/** Typewriter reveal with ▌ cursor. */
|
|
107
|
+
export declare const typewriterShader: TransitionShaderFn;
|
|
108
|
+
/** Horizontal glitch at 50% intensity. */
|
|
109
|
+
export declare const glitchShader: TransitionShaderFn;
|
|
110
|
+
/** TV static noise at 70% density. */
|
|
111
|
+
export declare const staticShader: TransitionShaderFn;
|
|
112
|
+
/**
|
|
113
|
+
* Reverse a shader's spatial reveal order.
|
|
114
|
+
*
|
|
115
|
+
* Cells that would be revealed last are revealed first, and vice versa.
|
|
116
|
+
* At progress=0 nothing is revealed; at progress=1 everything is revealed.
|
|
117
|
+
*/
|
|
118
|
+
export declare function reverse(shader: TransitionShaderFn): TransitionShaderFn;
|
|
119
|
+
/**
|
|
120
|
+
* Chain two shaders sequentially: `a` runs during progress [0, 0.5],
|
|
121
|
+
* `b` runs during (0.5, 1]. Each sub-shader receives a normalized 0→1
|
|
122
|
+
* progress for its half.
|
|
123
|
+
*
|
|
124
|
+
* **Note:** There is a hard cut at the midpoint — shader `a` completes
|
|
125
|
+
* (all cells revealed) then shader `b` starts from scratch (no cells
|
|
126
|
+
* revealed). This is intentional for effects like "dissolve out → wipe in"
|
|
127
|
+
* but will flash if both shaders reveal in the same direction.
|
|
128
|
+
*/
|
|
129
|
+
export declare function chain(a: TransitionShaderFn, b: TransitionShaderFn): TransitionShaderFn;
|
|
130
|
+
/**
|
|
131
|
+
* Overlay two shaders: `top` shader's char override wins when present,
|
|
132
|
+
* otherwise falls through to `base` shader's result.
|
|
133
|
+
*
|
|
134
|
+
* `showNext` uses OR semantics — the composite reveals a cell if *either*
|
|
135
|
+
* shader reveals it. This means the composite always reveals at least as
|
|
136
|
+
* much as either shader alone.
|
|
137
|
+
*/
|
|
138
|
+
export declare function overlay(base: TransitionShaderFn, top: TransitionShaderFn): TransitionShaderFn;
|
|
41
139
|
/** Registry mapping built-in transition names to shader functions. `none` maps to `undefined`. */
|
|
42
140
|
export declare const TRANSITION_SHADERS: Record<BuiltinTransition, TransitionShaderFn | undefined>;
|
|
43
141
|
//# sourceMappingURL=transition-shaders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition-shaders.d.ts","sourceRoot":"","sources":["../src/transition-shaders.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transition-shaders.d.ts","sourceRoot":"","sources":["../src/transition-shaders.ts"],"names":[],"mappings":"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"}
|