@flyingrobots/bijou-tui 1.8.0 → 3.0.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 +64 -21
- package/dist/animate.d.ts +0 -2
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +17 -26
- package/dist/animate.js.map +1 -1
- 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 +39 -0
- package/dist/app-frame-render.d.ts.map +1 -0
- package/dist/app-frame-render.js +319 -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 +13 -8
- package/dist/app-frame.d.ts.map +1 -1
- package/dist/app-frame.js +80 -906
- package/dist/app-frame.js.map +1 -1
- package/dist/canvas.d.ts +37 -25
- package/dist/canvas.d.ts.map +1 -1
- package/dist/canvas.js +116 -30
- package/dist/canvas.js.map +1 -1
- package/dist/commands.js +2 -2
- package/dist/commands.js.map +1 -1
- package/dist/css/install.d.ts +4 -0
- package/dist/css/install.d.ts.map +1 -0
- package/dist/css/install.js +24 -0
- package/dist/css/install.js.map +1 -0
- package/dist/css/parser.d.ts +14 -0
- package/dist/css/parser.d.ts.map +1 -0
- package/dist/css/parser.js +92 -0
- package/dist/css/parser.js.map +1 -0
- package/dist/css/resolver.d.ts +36 -0
- package/dist/css/resolver.d.ts.map +1 -0
- package/dist/css/resolver.js +130 -0
- package/dist/css/resolver.js.map +1 -0
- package/dist/css/text-style.d.ts +17 -0
- package/dist/css/text-style.d.ts.map +1 -0
- package/dist/css/text-style.js +59 -0
- package/dist/css/text-style.js.map +1 -0
- package/dist/css/types.d.ts +27 -0
- package/dist/css/types.d.ts.map +1 -0
- package/dist/css/types.js +5 -0
- package/dist/css/types.js.map +1 -0
- package/dist/driver.d.ts +10 -2
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +25 -2
- package/dist/driver.js.map +1 -1
- package/dist/eventbus.d.ts +42 -3
- package/dist/eventbus.d.ts.map +1 -1
- package/dist/eventbus.js +108 -7
- package/dist/eventbus.js.map +1 -1
- package/dist/focus-area.d.ts +4 -0
- package/dist/focus-area.d.ts.map +1 -1
- package/dist/focus-area.js +11 -1
- package/dist/focus-area.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/layout-v3.d.ts +10 -0
- package/dist/layout-v3.d.ts.map +1 -0
- package/dist/layout-v3.js +35 -0
- package/dist/layout-v3.js.map +1 -0
- package/dist/motion/motion.d.ts +14 -0
- package/dist/motion/motion.d.ts.map +1 -0
- package/dist/motion/motion.js +31 -0
- package/dist/motion/motion.js.map +1 -0
- package/dist/motion/reconciler.d.ts +15 -0
- package/dist/motion/reconciler.d.ts.map +1 -0
- package/dist/motion/reconciler.js +109 -0
- package/dist/motion/reconciler.js.map +1 -0
- package/dist/motion/types.d.ts +52 -0
- package/dist/motion/types.d.ts.map +1 -0
- package/dist/motion/types.js +2 -0
- package/dist/motion/types.js.map +1 -0
- package/dist/pipeline/middleware/css.d.ts +20 -0
- package/dist/pipeline/middleware/css.d.ts.map +1 -0
- package/dist/pipeline/middleware/css.js +41 -0
- package/dist/pipeline/middleware/css.js.map +1 -0
- package/dist/pipeline/middleware/grayscale.d.ts +9 -0
- package/dist/pipeline/middleware/grayscale.d.ts.map +1 -0
- package/dist/pipeline/middleware/grayscale.js +39 -0
- package/dist/pipeline/middleware/grayscale.js.map +1 -0
- package/dist/pipeline/middleware/motion.d.ts +6 -0
- package/dist/pipeline/middleware/motion.d.ts.map +1 -0
- package/dist/pipeline/middleware/motion.js +19 -0
- package/dist/pipeline/middleware/motion.js.map +1 -0
- package/dist/pipeline/middleware/paint.d.ts +6 -0
- package/dist/pipeline/middleware/paint.d.ts.map +1 -0
- package/dist/pipeline/middleware/paint.js +21 -0
- package/dist/pipeline/middleware/paint.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +56 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +45 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +153 -8
- package/dist/runtime.js.map +1 -1
- package/dist/screen.d.ts +12 -1
- package/dist/screen.d.ts.map +1 -1
- package/dist/screen.js +14 -1
- package/dist/screen.js.map +1 -1
- package/dist/subapp/mount.d.ts +67 -0
- package/dist/subapp/mount.d.ts.map +1 -0
- package/dist/subapp/mount.js +60 -0
- package/dist/subapp/mount.js.map +1 -0
- 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/dist/types.d.ts +45 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/dist/view-output.d.ts +15 -0
- package/dist/view-output.d.ts.map +1 -0
- package/dist/view-output.js +53 -0
- package/dist/view-output.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal types and message utilities for `app-frame.ts`.
|
|
3
|
+
*
|
|
4
|
+
* These types are NOT part of the public API surface — they support
|
|
5
|
+
* the internal wiring of `createFramedApp`.
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandPaletteItem } from './command-palette.js';
|
|
8
|
+
import type { KeyMsg, Cmd } from './types.js';
|
|
9
|
+
import type { BindingInfo } from './keybindings.js';
|
|
10
|
+
import type { PanelVisibilityState } from './panel-state.js';
|
|
11
|
+
import type { PanelDockState } from './panel-dock.js';
|
|
12
|
+
import type { FrameModel } from './app-frame.js';
|
|
13
|
+
export declare const PAGE_MSG_TOKEN: unique symbol;
|
|
14
|
+
export declare const FRAME_MSG_TOKEN: unique symbol;
|
|
15
|
+
/** Internal model extending the public FrameModel with palette entries. */
|
|
16
|
+
export interface InternalFrameModel<PageModel, Msg> extends FrameModel<PageModel> {
|
|
17
|
+
readonly commandPaletteEntries?: readonly PaletteEntry<Msg>[];
|
|
18
|
+
}
|
|
19
|
+
/** A command palette entry linking a UI item to an action or message. */
|
|
20
|
+
export interface PaletteEntry<Msg> {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly item: CommandPaletteItem;
|
|
23
|
+
readonly msgAction?: Msg;
|
|
24
|
+
readonly targetPageId?: string;
|
|
25
|
+
readonly frameAction?: FrameAction;
|
|
26
|
+
}
|
|
27
|
+
/** Per-call context passed through the recursive layout renderer. */
|
|
28
|
+
export interface RenderContext<PageModel, Msg> {
|
|
29
|
+
readonly model: InternalFrameModel<PageModel, Msg>;
|
|
30
|
+
readonly pageId: string;
|
|
31
|
+
readonly focusedPaneId: string | undefined;
|
|
32
|
+
readonly scrollByPane: Readonly<Record<string, {
|
|
33
|
+
readonly x: number;
|
|
34
|
+
readonly y: number;
|
|
35
|
+
}>>;
|
|
36
|
+
readonly visibility: PanelVisibilityState;
|
|
37
|
+
readonly dockState: PanelDockState;
|
|
38
|
+
}
|
|
39
|
+
/** Output of a layout node render pass. */
|
|
40
|
+
export interface RenderResult {
|
|
41
|
+
readonly output: string;
|
|
42
|
+
readonly paneRects: ReadonlyMap<string, import('./layout-rect.js').LayoutRect>;
|
|
43
|
+
readonly paneOrder: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/** Discriminated union of all frame-level actions (tabs, panes, scroll, palette, help, transitions). */
|
|
46
|
+
export type FrameAction = {
|
|
47
|
+
type: 'toggle-help';
|
|
48
|
+
} | {
|
|
49
|
+
type: 'prev-tab';
|
|
50
|
+
} | {
|
|
51
|
+
type: 'next-tab';
|
|
52
|
+
} | {
|
|
53
|
+
type: 'next-pane';
|
|
54
|
+
} | {
|
|
55
|
+
type: 'prev-pane';
|
|
56
|
+
} | {
|
|
57
|
+
type: 'scroll-up';
|
|
58
|
+
} | {
|
|
59
|
+
type: 'scroll-down';
|
|
60
|
+
} | {
|
|
61
|
+
type: 'page-up';
|
|
62
|
+
} | {
|
|
63
|
+
type: 'page-down';
|
|
64
|
+
} | {
|
|
65
|
+
type: 'top';
|
|
66
|
+
} | {
|
|
67
|
+
type: 'bottom';
|
|
68
|
+
} | {
|
|
69
|
+
type: 'scroll-left';
|
|
70
|
+
} | {
|
|
71
|
+
type: 'scroll-right';
|
|
72
|
+
} | {
|
|
73
|
+
type: 'open-palette';
|
|
74
|
+
} | {
|
|
75
|
+
type: 'toggle-minimize';
|
|
76
|
+
} | {
|
|
77
|
+
type: 'toggle-maximize';
|
|
78
|
+
} | {
|
|
79
|
+
type: 'dock-up';
|
|
80
|
+
} | {
|
|
81
|
+
type: 'dock-down';
|
|
82
|
+
} | {
|
|
83
|
+
type: 'dock-left';
|
|
84
|
+
} | {
|
|
85
|
+
type: 'dock-right';
|
|
86
|
+
} | {
|
|
87
|
+
type: 'transition';
|
|
88
|
+
progress: number;
|
|
89
|
+
generation: number;
|
|
90
|
+
} | {
|
|
91
|
+
type: 'transition-complete';
|
|
92
|
+
generation: number;
|
|
93
|
+
};
|
|
94
|
+
/** Discriminated union of command palette navigation/selection actions. */
|
|
95
|
+
export type PaletteAction = {
|
|
96
|
+
type: 'cp-next';
|
|
97
|
+
} | {
|
|
98
|
+
type: 'cp-prev';
|
|
99
|
+
} | {
|
|
100
|
+
type: 'cp-page-down';
|
|
101
|
+
} | {
|
|
102
|
+
type: 'cp-page-up';
|
|
103
|
+
} | {
|
|
104
|
+
type: 'cp-select';
|
|
105
|
+
} | {
|
|
106
|
+
type: 'cp-close';
|
|
107
|
+
};
|
|
108
|
+
/** Wrapper that tags a user message with its originating page ID. */
|
|
109
|
+
export interface PageScopedMsg<Msg> {
|
|
110
|
+
readonly [PAGE_MSG_TOKEN]: true;
|
|
111
|
+
readonly pageId: string;
|
|
112
|
+
readonly msg: Msg;
|
|
113
|
+
}
|
|
114
|
+
/** Wrapper that tags a frame-internal action for the update loop. */
|
|
115
|
+
export interface FrameScopedMsg {
|
|
116
|
+
readonly [FRAME_MSG_TOKEN]: true;
|
|
117
|
+
readonly action: FrameAction;
|
|
118
|
+
}
|
|
119
|
+
/** Type guard: is this message a frame-internal action wrapper? */
|
|
120
|
+
export declare function isFrameScopedMsg(value: unknown): value is FrameScopedMsg;
|
|
121
|
+
/** Wrap a frame action into a FrameScopedMsg for the update loop. */
|
|
122
|
+
export declare function wrapFrameMsg(action: FrameAction): FrameScopedMsg;
|
|
123
|
+
/** Type guard: is this message a page-scoped wrapper? */
|
|
124
|
+
export declare function isPageScopedMsg<Msg>(value: unknown): value is PageScopedMsg<Msg>;
|
|
125
|
+
/** Tag a user message with its originating page ID. */
|
|
126
|
+
export declare function wrapPageMsg<Msg>(pageId: string, msg: Msg): Msg;
|
|
127
|
+
/** Create a command that immediately resolves with the given message. */
|
|
128
|
+
export declare function emitMsg<Msg>(msg: Msg): Cmd<Msg>;
|
|
129
|
+
/** Create a command that emits a page-scoped message. */
|
|
130
|
+
export declare function emitMsgForPage<Msg>(pageId: string, msg: Msg): Cmd<Msg>;
|
|
131
|
+
/** Wrap a page-level command so its emitted messages are tagged with the page ID. */
|
|
132
|
+
export declare function wrapCmdForPage<Msg>(pageId: string, cmd: Cmd<Msg>): Cmd<Msg>;
|
|
133
|
+
/** Convert a binding's key combo into a synthetic KeyMsg for dispatch. */
|
|
134
|
+
export declare function comboToMsg(binding: BindingInfo): KeyMsg;
|
|
135
|
+
//# sourceMappingURL=app-frame-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame-types.d.ts","sourceRoot":"","sources":["../src/app-frame-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal types and message utilities for `app-frame.ts`.
|
|
3
|
+
*
|
|
4
|
+
* These types are NOT part of the public API surface — they support
|
|
5
|
+
* the internal wiring of `createFramedApp`.
|
|
6
|
+
*/
|
|
7
|
+
import { QUIT } from './types.js';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Symbols
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export const PAGE_MSG_TOKEN = Symbol('app-frame-page-msg');
|
|
12
|
+
export const FRAME_MSG_TOKEN = Symbol('app-frame-frame-msg');
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Message utility functions
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/** Type guard: is this message a frame-internal action wrapper? */
|
|
17
|
+
export function isFrameScopedMsg(value) {
|
|
18
|
+
return typeof value === 'object'
|
|
19
|
+
&& value !== null
|
|
20
|
+
&& FRAME_MSG_TOKEN in value
|
|
21
|
+
&& value[FRAME_MSG_TOKEN] === true;
|
|
22
|
+
}
|
|
23
|
+
/** Wrap a frame action into a FrameScopedMsg for the update loop. */
|
|
24
|
+
export function wrapFrameMsg(action) {
|
|
25
|
+
return {
|
|
26
|
+
[FRAME_MSG_TOKEN]: true,
|
|
27
|
+
action,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** Type guard: is this message a page-scoped wrapper? */
|
|
31
|
+
export function isPageScopedMsg(value) {
|
|
32
|
+
return typeof value === 'object'
|
|
33
|
+
&& value !== null
|
|
34
|
+
&& PAGE_MSG_TOKEN in value
|
|
35
|
+
&& value[PAGE_MSG_TOKEN] === true;
|
|
36
|
+
}
|
|
37
|
+
/** Tag a user message with its originating page ID. */
|
|
38
|
+
export function wrapPageMsg(pageId, msg) {
|
|
39
|
+
return {
|
|
40
|
+
[PAGE_MSG_TOKEN]: true,
|
|
41
|
+
pageId,
|
|
42
|
+
msg,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Create a command that immediately resolves with the given message. */
|
|
46
|
+
export function emitMsg(msg) {
|
|
47
|
+
return async (_emit, _caps) => msg;
|
|
48
|
+
}
|
|
49
|
+
/** Create a command that emits a page-scoped message. */
|
|
50
|
+
export function emitMsgForPage(pageId, msg) {
|
|
51
|
+
return async (_emit, _caps) => wrapPageMsg(pageId, msg);
|
|
52
|
+
}
|
|
53
|
+
/** Wrap a page-level command so its emitted messages are tagged with the page ID. */
|
|
54
|
+
export function wrapCmdForPage(pageId, cmd) {
|
|
55
|
+
return async (emit, caps) => {
|
|
56
|
+
const result = await cmd((msg) => emit(wrapPageMsg(pageId, msg)), caps);
|
|
57
|
+
if (result === undefined || result === QUIT)
|
|
58
|
+
return result;
|
|
59
|
+
return wrapPageMsg(pageId, result);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Convert a binding's key combo into a synthetic KeyMsg for dispatch. */
|
|
63
|
+
export function comboToMsg(binding) {
|
|
64
|
+
return {
|
|
65
|
+
type: 'key',
|
|
66
|
+
key: binding.combo.key,
|
|
67
|
+
ctrl: binding.combo.ctrl,
|
|
68
|
+
alt: binding.combo.alt,
|
|
69
|
+
shift: binding.combo.shift,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=app-frame-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame-types.js","sourceRoot":"","sources":["../src/app-frame-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMlC,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AA4F7D,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,KAAK,IAAI;WACd,eAAe,IAAI,KAAK;WACvB,KAAwB,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAC3D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,OAAO;QACL,CAAC,eAAe,CAAC,EAAE,IAAI;QACvB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAM,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,KAAK,IAAI;WACd,cAAc,IAAI,KAAK;WACtB,KAA4B,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAM,MAAc,EAAE,GAAQ;IACvD,OAAO;QACL,CAAC,cAAc,CAAC,EAAE,IAAI;QACtB,MAAM;QACN,GAAG;KACc,CAAC;AACtB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAM,GAAQ;IACnC,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC;AACrC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAM,MAAc,EAAE,GAAQ;IAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAM,MAAc,EAAE,GAAa;IAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1F,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAC3D,OAAO,WAAW,CAAC,MAAM,EAAE,MAAa,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC7C,OAAO;QACL,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;QACtB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;QACxB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for `app-frame.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Tree traversal, layout geometry, key map construction, and binding
|
|
5
|
+
* source merging — no state, no side effects.
|
|
6
|
+
*/
|
|
7
|
+
import type { FrameLayoutNode } from './app-frame.js';
|
|
8
|
+
import type { FrameAction } from './app-frame-types.js';
|
|
9
|
+
import type { LayoutRect } from './layout-rect.js';
|
|
10
|
+
import type { PanelVisibilityState } from './panel-state.js';
|
|
11
|
+
import { type KeyMap } from './keybindings.js';
|
|
12
|
+
import type { BindingSource } from './help.js';
|
|
13
|
+
/** Recursively collect all pane IDs from a layout tree in declaration order. */
|
|
14
|
+
export declare function collectPaneIds(node: FrameLayoutNode): string[];
|
|
15
|
+
/** Extract unique area names from CSS-grid-style template strings. */
|
|
16
|
+
export declare function declaredAreaNames(areas: readonly string[]): string[];
|
|
17
|
+
/** Throw if any pane ID appears more than once in the given list. */
|
|
18
|
+
export declare function assertUniquePaneIds(paneIds: readonly string[], scope: string): void;
|
|
19
|
+
/** Walk the layout tree to find the pane node with the given ID. */
|
|
20
|
+
export declare function findPaneNode(node: FrameLayoutNode, paneId: string): Extract<FrameLayoutNode, {
|
|
21
|
+
kind: 'pane';
|
|
22
|
+
}> | undefined;
|
|
23
|
+
/** Check if a layout node (or its first descendant pane) is minimized. */
|
|
24
|
+
export declare function isPaneMinimized(node: FrameLayoutNode, visibility: PanelVisibilityState): boolean;
|
|
25
|
+
/** Merge two read-only maps into a new mutable map. */
|
|
26
|
+
export declare function mergeMaps<K, V>(a: ReadonlyMap<K, V>, b: ReadonlyMap<K, V>): Map<K, V>;
|
|
27
|
+
/** Translate a layout rect by the given row and column offsets. */
|
|
28
|
+
export declare function offsetRect(rect: LayoutRect, rowOffset: number, colOffset: number): LayoutRect;
|
|
29
|
+
/** Compute the available rect for page content (screen minus header and footer). */
|
|
30
|
+
export declare function frameBodyRect(columns: number, rows: number): LayoutRect;
|
|
31
|
+
/** Clip or pad a single line to exactly `width` visible columns. */
|
|
32
|
+
export declare function fitLine(line: string, width: number): string;
|
|
33
|
+
/** Combine multiple binding sources into a single source for help display. */
|
|
34
|
+
export declare function mergeBindingSources(...sources: Array<BindingSource | undefined>): BindingSource;
|
|
35
|
+
/** Build the default key map for frame-level actions (tabs, panes, scroll, help '?', command palette 'ctrl+p'/':'). */
|
|
36
|
+
export declare function createFrameKeyMap(): KeyMap<FrameAction>;
|
|
37
|
+
//# sourceMappingURL=app-frame-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame-utils.d.ts","sourceRoot":"","sources":["../src/app-frame-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/C,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,EAAE,CAW9D;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQpE;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQnF;AAED,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,CAQ1H;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,oBAAoB,GAAG,OAAO,CAKhG;AAED,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAKrF;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAO7F;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAOvE;AAED,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,aAAa,CAW/F;AAED,uHAAuH;AACvH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,WAAW,CAAC,CA6BvD"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for `app-frame.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Tree traversal, layout geometry, key map construction, and binding
|
|
5
|
+
* source merging — no state, no side effects.
|
|
6
|
+
*/
|
|
7
|
+
import { isMinimized } from './panel-state.js';
|
|
8
|
+
import { createKeyMap } from './keybindings.js';
|
|
9
|
+
import { clipToWidth, visibleLength } from './viewport.js';
|
|
10
|
+
/** Recursively collect all pane IDs from a layout tree in declaration order. */
|
|
11
|
+
export function collectPaneIds(node) {
|
|
12
|
+
if (node.kind === 'pane')
|
|
13
|
+
return [node.paneId];
|
|
14
|
+
if (node.kind === 'split')
|
|
15
|
+
return [...collectPaneIds(node.paneA), ...collectPaneIds(node.paneB)];
|
|
16
|
+
const ids = [];
|
|
17
|
+
for (const areaName of declaredAreaNames(node.areas)) {
|
|
18
|
+
const child = node.cells[areaName];
|
|
19
|
+
if (child == null)
|
|
20
|
+
continue;
|
|
21
|
+
ids.push(...collectPaneIds(child));
|
|
22
|
+
}
|
|
23
|
+
return ids;
|
|
24
|
+
}
|
|
25
|
+
/** Extract unique area names from CSS-grid-style template strings. */
|
|
26
|
+
export function declaredAreaNames(areas) {
|
|
27
|
+
const names = new Set();
|
|
28
|
+
for (const row of areas) {
|
|
29
|
+
for (const token of row.trim().split(/\s+/)) {
|
|
30
|
+
if (token !== '' && token !== '.')
|
|
31
|
+
names.add(token);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return [...names];
|
|
35
|
+
}
|
|
36
|
+
/** Throw if any pane ID appears more than once in the given list. */
|
|
37
|
+
export function assertUniquePaneIds(paneIds, scope) {
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
for (const paneId of paneIds) {
|
|
40
|
+
if (seen.has(paneId)) {
|
|
41
|
+
throw new Error(`createFramedApp: duplicate paneId "${paneId}" in ${scope}`);
|
|
42
|
+
}
|
|
43
|
+
seen.add(paneId);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Walk the layout tree to find the pane node with the given ID. */
|
|
47
|
+
export function findPaneNode(node, paneId) {
|
|
48
|
+
if (node.kind === 'pane')
|
|
49
|
+
return node.paneId === paneId ? node : undefined;
|
|
50
|
+
if (node.kind === 'split')
|
|
51
|
+
return findPaneNode(node.paneA, paneId) ?? findPaneNode(node.paneB, paneId);
|
|
52
|
+
for (const key of Object.keys(node.cells)) {
|
|
53
|
+
const found = findPaneNode(node.cells[key], paneId);
|
|
54
|
+
if (found)
|
|
55
|
+
return found;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
/** Check if a layout node (or its first descendant pane) is minimized. */
|
|
60
|
+
export function isPaneMinimized(node, visibility) {
|
|
61
|
+
if (node.kind === 'pane')
|
|
62
|
+
return isMinimized(visibility, node.paneId);
|
|
63
|
+
// For containers, check if all descendant panes are minimized
|
|
64
|
+
const paneIds = collectPaneIds(node);
|
|
65
|
+
return paneIds.length > 0 && paneIds.every((id) => isMinimized(visibility, id));
|
|
66
|
+
}
|
|
67
|
+
/** Merge two read-only maps into a new mutable map. */
|
|
68
|
+
export function mergeMaps(a, b) {
|
|
69
|
+
const out = new Map();
|
|
70
|
+
for (const [k, v] of a)
|
|
71
|
+
out.set(k, v);
|
|
72
|
+
for (const [k, v] of b)
|
|
73
|
+
out.set(k, v);
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
/** Translate a layout rect by the given row and column offsets. */
|
|
77
|
+
export function offsetRect(rect, rowOffset, colOffset) {
|
|
78
|
+
return {
|
|
79
|
+
row: rowOffset + rect.row,
|
|
80
|
+
col: colOffset + rect.col,
|
|
81
|
+
width: rect.width,
|
|
82
|
+
height: rect.height,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** Compute the available rect for page content (screen minus header and footer). */
|
|
86
|
+
export function frameBodyRect(columns, rows) {
|
|
87
|
+
return {
|
|
88
|
+
row: Math.min(2, Math.max(0, rows)),
|
|
89
|
+
col: 0,
|
|
90
|
+
width: Math.max(0, columns),
|
|
91
|
+
height: Math.max(0, rows - 2),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** Clip or pad a single line to exactly `width` visible columns. */
|
|
95
|
+
export function fitLine(line, width) {
|
|
96
|
+
const clipped = clipToWidth(line, Math.max(0, width));
|
|
97
|
+
return clipped + ' '.repeat(Math.max(0, width - visibleLength(clipped)));
|
|
98
|
+
}
|
|
99
|
+
/** Combine multiple binding sources into a single source for help display. */
|
|
100
|
+
export function mergeBindingSources(...sources) {
|
|
101
|
+
return {
|
|
102
|
+
bindings() {
|
|
103
|
+
const merged = [];
|
|
104
|
+
for (const src of sources) {
|
|
105
|
+
if (src == null)
|
|
106
|
+
continue;
|
|
107
|
+
merged.push(...src.bindings());
|
|
108
|
+
}
|
|
109
|
+
return merged;
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Build the default key map for frame-level actions (tabs, panes, scroll, help '?', command palette 'ctrl+p'/':'). */
|
|
114
|
+
export function createFrameKeyMap() {
|
|
115
|
+
return createKeyMap()
|
|
116
|
+
.group('Frame', (g) => g
|
|
117
|
+
.bind('?', 'Toggle help', { type: 'toggle-help' })
|
|
118
|
+
.bind('[', 'Previous tab', { type: 'prev-tab' })
|
|
119
|
+
.bind(']', 'Next tab', { type: 'next-tab' })
|
|
120
|
+
.bind('tab', 'Next pane', { type: 'next-pane' })
|
|
121
|
+
.bind('shift+tab', 'Previous pane', { type: 'prev-pane' })
|
|
122
|
+
.bind('ctrl+p', 'Open command palette', { type: 'open-palette' })
|
|
123
|
+
.bind(':', 'Open command palette', { type: 'open-palette' })
|
|
124
|
+
.bind('ctrl+m', 'Fold/unfold pane', { type: 'toggle-minimize' })
|
|
125
|
+
.bind('ctrl+f', 'Full-screen pane', { type: 'toggle-maximize' }))
|
|
126
|
+
.group('Dock', (g) => g
|
|
127
|
+
.bind('ctrl+shift+up', 'Move pane up', { type: 'dock-up' })
|
|
128
|
+
.bind('ctrl+shift+down', 'Move pane down', { type: 'dock-down' })
|
|
129
|
+
.bind('ctrl+shift+left', 'Move pane left', { type: 'dock-left' })
|
|
130
|
+
.bind('ctrl+shift+right', 'Move pane right', { type: 'dock-right' }))
|
|
131
|
+
.group('Scroll', (g) => g
|
|
132
|
+
.bind('j', 'Scroll down', { type: 'scroll-down' })
|
|
133
|
+
.bind('k', 'Scroll up', { type: 'scroll-up' })
|
|
134
|
+
.bind('d', 'Page down', { type: 'page-down' })
|
|
135
|
+
.bind('u', 'Page up', { type: 'page-up' })
|
|
136
|
+
.bind('g', 'Top', { type: 'top' })
|
|
137
|
+
.bind('shift+g', 'Bottom', { type: 'bottom' })
|
|
138
|
+
.bind('h', 'Scroll left', { type: 'scroll-left' })
|
|
139
|
+
.bind('l', 'Scroll right', { type: 'scroll-right' }));
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=app-frame-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-frame-utils.js","sourceRoot":"","sources":["../src/app-frame-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjG,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CAAC,OAA0B,EAAE,KAAa;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,QAAQ,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,IAAqB,EAAE,MAAc;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,IAAqB,EAAE,UAAgC;IACrF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtE,8DAA8D;IAC9D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAO,CAAoB,EAAE,CAAoB;IACxE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC5B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,SAAiB,EAAE,SAAiB;IAC/E,OAAO;QACL,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG;QACzB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,IAAY;IACzD,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnC,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;QAC3B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,GAAG,OAAyC;IAC9E,OAAO;QACL,QAAQ;YACN,MAAM,MAAM,GAAkB,EAAE,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,GAAG,IAAI,IAAI;oBAAE,SAAS;gBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,EAAe;SAC/B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrB,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACjD,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SAC/C,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SAC3C,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC/C,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SACzD,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;SAChE,IAAI,CAAC,GAAG,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;SAC3D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;SAC/D,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CACjE;SACA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACpB,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SAC1D,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAChE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAChE,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CACrE;SACA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACtB,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACjD,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC7C,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC7C,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SACzC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SACjC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC7C,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACjD,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CACrD,CAAC;AACN,CAAC"}
|
package/dist/app-frame.d.ts
CHANGED
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
* panel-scoped overlay context, and optional frame-level command palette.
|
|
6
6
|
*/
|
|
7
7
|
import { type BindingSource } from './help.js';
|
|
8
|
-
import {
|
|
8
|
+
import type { KeyMap } from './keybindings.js';
|
|
9
9
|
import type { App, Cmd } from './types.js';
|
|
10
10
|
import type { Overlay } from './overlay.js';
|
|
11
11
|
import type { TransitionShaderFn } from './transition-shaders.js';
|
|
12
12
|
import { type BuiltinTransition } from './transition-shaders.js';
|
|
13
13
|
import type { CommandPaletteItem, CommandPaletteState } from './command-palette.js';
|
|
14
14
|
import type { GridTrack } from './grid.js';
|
|
15
|
-
import {
|
|
16
|
-
import { type SplitPaneDirection, type SplitPaneState } from './split-pane.js';
|
|
15
|
+
import type { SplitPaneDirection, SplitPaneState } from './split-pane.js';
|
|
17
16
|
import type { LayoutRect } from './layout-rect.js';
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
17
|
+
import type { PanelVisibilityState } from './panel-state.js';
|
|
18
|
+
import type { PanelMaximizeState } from './panel-state.js';
|
|
19
|
+
import type { PanelDockState } from './panel-dock.js';
|
|
20
|
+
import type { SerializedLayoutState } from './layout-preset.js';
|
|
21
|
+
import type { OverflowX } from './focus-area.js';
|
|
22
|
+
import type { Timeline, TimelineState } from './timeline.js';
|
|
23
|
+
import type { ViewOutput } from './view-output.js';
|
|
22
24
|
/** Page declaration consumed by {@link createFramedApp}. */
|
|
23
25
|
export interface FramePage<PageModel, Msg> {
|
|
24
26
|
/** Stable page id. */
|
|
@@ -47,7 +49,8 @@ export interface FrameCommandItem<Msg> extends CommandPaletteItem {
|
|
|
47
49
|
export type FrameLayoutNode = {
|
|
48
50
|
readonly kind: 'pane';
|
|
49
51
|
readonly paneId: string;
|
|
50
|
-
|
|
52
|
+
/** Pane content may be a legacy string, a Surface, or a LayoutNode. */
|
|
53
|
+
readonly render: (width: number, height: number) => ViewOutput;
|
|
51
54
|
readonly overflowX?: OverflowX;
|
|
52
55
|
} | {
|
|
53
56
|
readonly kind: 'split';
|
|
@@ -173,6 +176,8 @@ export interface FrameModel<PageModel> {
|
|
|
173
176
|
readonly transitionTimeline?: Timeline;
|
|
174
177
|
/** Timeline state for the active transition. */
|
|
175
178
|
readonly transitionTimelineState?: TimelineState;
|
|
179
|
+
/** Monotonic frame counter for the active transition (for temporal shader effects). */
|
|
180
|
+
readonly transitionFrame: number;
|
|
176
181
|
/** Per-page panel visibility (minimize/fold) state. */
|
|
177
182
|
readonly minimizedByPage: Readonly<Record<string, PanelVisibilityState>>;
|
|
178
183
|
/** Per-page maximized pane state. */
|
package/dist/app-frame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-frame.d.ts","sourceRoot":"","sources":["../src/app-frame.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"app-frame.d.ts","sourceRoot":"","sources":["../src/app-frame.ts"],"names":[],"mappings":"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"}
|