4runr-os 2.1.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tui_mk1/core/eventBus.d.ts +28 -0
- package/dist/tui_mk1/core/eventBus.d.ts.map +1 -0
- package/dist/tui_mk1/core/eventBus.js +52 -0
- package/dist/tui_mk1/core/eventBus.js.map +1 -0
- package/dist/tui_mk1/core/feedStore.d.ts +31 -0
- package/dist/tui_mk1/core/feedStore.d.ts.map +1 -0
- package/dist/tui_mk1/core/feedStore.js +51 -0
- package/dist/tui_mk1/core/feedStore.js.map +1 -0
- package/dist/tui_mk1/kernel.d.ts.map +1 -1
- package/dist/tui_mk1/kernel.js +2 -0
- package/dist/tui_mk1/kernel.js.map +1 -1
- package/dist/tui_mk1/layout/layoutEngine.d.ts +28 -0
- package/dist/tui_mk1/layout/layoutEngine.d.ts.map +1 -0
- package/dist/tui_mk1/layout/layoutEngine.js +258 -0
- package/dist/tui_mk1/layout/layoutEngine.js.map +1 -0
- package/dist/tui_mk1/mk1App.d.ts +18 -11
- package/dist/tui_mk1/mk1App.d.ts.map +1 -1
- package/dist/tui_mk1/mk1App.js +165 -133
- package/dist/tui_mk1/mk1App.js.map +1 -1
- package/dist/tui_mk1/ui/debugGutter.d.ts +7 -0
- package/dist/tui_mk1/ui/debugGutter.d.ts.map +1 -0
- package/dist/tui_mk1/ui/debugGutter.js +60 -0
- package/dist/tui_mk1/ui/debugGutter.js.map +1 -0
- package/dist/tui_mk1/ui/panels/createSection.d.ts +18 -0
- package/dist/tui_mk1/ui/panels/createSection.d.ts.map +1 -0
- package/dist/tui_mk1/ui/panels/createSection.js +42 -0
- package/dist/tui_mk1/ui/panels/createSection.js.map +1 -0
- package/dist/tui_mk1/ui/panels.d.ts +23 -0
- package/dist/tui_mk1/ui/panels.d.ts.map +1 -0
- package/dist/tui_mk1/ui/panels.js +108 -0
- package/dist/tui_mk1/ui/panels.js.map +1 -0
- package/dist/tui_mk1/ui/render/sectionRenderer.d.ts +21 -0
- package/dist/tui_mk1/ui/render/sectionRenderer.d.ts.map +1 -0
- package/dist/tui_mk1/ui/render/sectionRenderer.js +32 -0
- package/dist/tui_mk1/ui/render/sectionRenderer.js.map +1 -0
- package/dist/tui_mk1/ui/widgetManager.d.ts +58 -0
- package/dist/tui_mk1/ui/widgetManager.d.ts.map +1 -0
- package/dist/tui_mk1/ui/widgetManager.js +197 -0
- package/dist/tui_mk1/ui/widgetManager.js.map +1 -0
- package/dist/tui_mk1/viewport/safeViewport.d.ts +19 -0
- package/dist/tui_mk1/viewport/safeViewport.d.ts.map +1 -0
- package/dist/tui_mk1/viewport/safeViewport.js +39 -0
- package/dist/tui_mk1/viewport/safeViewport.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK1 Event Bus - Truth Bus (pub/sub for operations feed)
|
|
3
|
+
*/
|
|
4
|
+
type EventHandler = (event: FeedEvent) => void;
|
|
5
|
+
export interface FeedEvent {
|
|
6
|
+
timestamp: number;
|
|
7
|
+
tag: string;
|
|
8
|
+
message: string;
|
|
9
|
+
}
|
|
10
|
+
declare class EventBus {
|
|
11
|
+
private handlers;
|
|
12
|
+
private allHandlers;
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe to specific tag
|
|
15
|
+
*/
|
|
16
|
+
subscribe(tag: string, handler: EventHandler): () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to all events
|
|
19
|
+
*/
|
|
20
|
+
subscribeAll(handler: EventHandler): () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Emit event
|
|
23
|
+
*/
|
|
24
|
+
emit(tag: string, message: string): void;
|
|
25
|
+
}
|
|
26
|
+
export declare const eventBus: EventBus;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=eventBus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/core/eventBus.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,WAAW,CAAsB;IAEzC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAkBzD;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAW/C;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAczC;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class EventBus {
|
|
2
|
+
handlers = new Map();
|
|
3
|
+
allHandlers = [];
|
|
4
|
+
/**
|
|
5
|
+
* Subscribe to specific tag
|
|
6
|
+
*/
|
|
7
|
+
subscribe(tag, handler) {
|
|
8
|
+
if (!this.handlers.has(tag)) {
|
|
9
|
+
this.handlers.set(tag, []);
|
|
10
|
+
}
|
|
11
|
+
this.handlers.get(tag).push(handler);
|
|
12
|
+
// Return unsubscribe function
|
|
13
|
+
return () => {
|
|
14
|
+
const handlers = this.handlers.get(tag);
|
|
15
|
+
if (handlers) {
|
|
16
|
+
const index = handlers.indexOf(handler);
|
|
17
|
+
if (index > -1) {
|
|
18
|
+
handlers.splice(index, 1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Subscribe to all events
|
|
25
|
+
*/
|
|
26
|
+
subscribeAll(handler) {
|
|
27
|
+
this.allHandlers.push(handler);
|
|
28
|
+
return () => {
|
|
29
|
+
const index = this.allHandlers.indexOf(handler);
|
|
30
|
+
if (index > -1) {
|
|
31
|
+
this.allHandlers.splice(index, 1);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Emit event
|
|
37
|
+
*/
|
|
38
|
+
emit(tag, message) {
|
|
39
|
+
const event = {
|
|
40
|
+
timestamp: Date.now(),
|
|
41
|
+
tag,
|
|
42
|
+
message,
|
|
43
|
+
};
|
|
44
|
+
// Notify tag-specific handlers
|
|
45
|
+
const tagHandlers = this.handlers.get(tag) || [];
|
|
46
|
+
tagHandlers.forEach((handler) => handler(event));
|
|
47
|
+
// Notify all handlers
|
|
48
|
+
this.allHandlers.forEach((handler) => handler(event));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export const eventBus = new EventBus();
|
|
52
|
+
//# sourceMappingURL=eventBus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBus.js","sourceRoot":"","sources":["../../../src/tui_mk1/core/eventBus.ts"],"names":[],"mappings":"AAWA,MAAM,QAAQ;IACJ,QAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;IAClD,WAAW,GAAmB,EAAE,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,GAAW,EAAE,OAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtC,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;oBACf,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAqB;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,GAAW,EAAE,OAAe;QAC/B,MAAM,KAAK,GAAc;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG;YACH,OAAO;SACR,CAAC;QAEF,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjD,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjD,sBAAsB;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK1 Feed Store - Operations feed storage (last N events)
|
|
3
|
+
*/
|
|
4
|
+
import { type FeedEvent } from './eventBus.js';
|
|
5
|
+
declare class FeedStore {
|
|
6
|
+
private events;
|
|
7
|
+
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* Add event to store
|
|
10
|
+
*/
|
|
11
|
+
private add;
|
|
12
|
+
/**
|
|
13
|
+
* Get last N events for display
|
|
14
|
+
*/
|
|
15
|
+
getRecent(count?: number): FeedEvent[];
|
|
16
|
+
/**
|
|
17
|
+
* Get all events
|
|
18
|
+
*/
|
|
19
|
+
getAll(): FeedEvent[];
|
|
20
|
+
/**
|
|
21
|
+
* Clear all events
|
|
22
|
+
*/
|
|
23
|
+
clear(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get count
|
|
26
|
+
*/
|
|
27
|
+
getCount(): number;
|
|
28
|
+
}
|
|
29
|
+
export declare const feedStore: FeedStore;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=feedStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedStore.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/core/feedStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAKzD,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAmB;;IASjC;;OAEG;IACH,OAAO,CAAC,GAAG;IASX;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAA2B,GAAG,SAAS,EAAE;IAI1D;;OAEG;IACH,MAAM,IAAI,SAAS,EAAE;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK1 Feed Store - Operations feed storage (last N events)
|
|
3
|
+
*/
|
|
4
|
+
import { eventBus } from './eventBus.js';
|
|
5
|
+
const MAX_FEED_EVENTS = 100;
|
|
6
|
+
const MAX_DISPLAY_EVENTS = 15;
|
|
7
|
+
class FeedStore {
|
|
8
|
+
events = [];
|
|
9
|
+
constructor() {
|
|
10
|
+
// Subscribe to all events
|
|
11
|
+
eventBus.subscribeAll((event) => {
|
|
12
|
+
this.add(event);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Add event to store
|
|
17
|
+
*/
|
|
18
|
+
add(event) {
|
|
19
|
+
this.events.push(event);
|
|
20
|
+
// Keep only last N events
|
|
21
|
+
if (this.events.length > MAX_FEED_EVENTS) {
|
|
22
|
+
this.events.shift();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get last N events for display
|
|
27
|
+
*/
|
|
28
|
+
getRecent(count = MAX_DISPLAY_EVENTS) {
|
|
29
|
+
return this.events.slice(-count);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get all events
|
|
33
|
+
*/
|
|
34
|
+
getAll() {
|
|
35
|
+
return [...this.events];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Clear all events
|
|
39
|
+
*/
|
|
40
|
+
clear() {
|
|
41
|
+
this.events = [];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get count
|
|
45
|
+
*/
|
|
46
|
+
getCount() {
|
|
47
|
+
return this.events.length;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export const feedStore = new FeedStore();
|
|
51
|
+
//# sourceMappingURL=feedStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedStore.js","sourceRoot":"","sources":["../../../src/tui_mk1/core/feedStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AAEzD,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,SAAS;IACL,MAAM,GAAgB,EAAE,CAAC;IAEjC;QACE,0BAA0B;QAC1B,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,GAAG,CAAC,KAAgB;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,0BAA0B;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB,kBAAkB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAuE;IAExF;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAuE;IAExF;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD7E;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,IAAI,IAAI,IAAI;CA8Bb"}
|
package/dist/tui_mk1/kernel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,OAAO,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAYrC,MAAM,OAAO,SAAS;IACZ,MAAM,GAA0B,IAAI,CAAC;IACrC,SAAS,GAAkE,IAAI,CAAC;IAExF;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,QAAoB,EAAE,UAAyB,EAAE;QAC3D,kDAAkD;QAClD,IAAK,UAAkB,CAAC,cAAc,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACtD,IAAI,CAAC;gBACF,UAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACA,UAAkB,CAAC,cAAc,GAAG,SAAS,CAAC;QACjD,CAAC;QAED,6CAA6C;QAC7C,iBAAiB,EAAE,CAAC;QAEpB,oCAAoC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/tui_mk1/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,OAAO,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAYrC,MAAM,OAAO,SAAS;IACZ,MAAM,GAA0B,IAAI,CAAC;IACrC,SAAS,GAAkE,IAAI,CAAC;IAExF;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,QAAoB,EAAE,UAAyB,EAAE;QAC3D,kDAAkD;QAClD,IAAK,UAAkB,CAAC,cAAc,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACtD,IAAI,CAAC;gBACF,UAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACA,UAAkB,CAAC,cAAc,GAAG,SAAS,CAAC;QACjD,CAAC;QAED,6CAA6C;QAC7C,iBAAiB,EAAE,CAAC;QAEpB,oCAAoC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,KAAK,EAAE,iCAAiC;YACpD,YAAY,EAAE,KAAK;SACb,CAAmB,CAAC;QAE5B,qBAAqB;QACpB,UAAkB,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;QAEjD,gCAAgC;QAChC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5B,yBAAyB;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAE3C,+BAA+B;QAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,wBAAwB;QACxB,IAAK,IAAI,CAAC,MAAc,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAc,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5C,CAAC;QAED,iBAAiB;QACjB,QAAQ,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAErB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEnC,4BAA4B;QAC5B,uBAAuB,EAAE,CAAC;QAE1B,oBAAoB;QACpB,gBAAgB,EAAE,CAAC;QAEnB,uBAAuB;QACvB,kBAAkB,EAAE,CAAC;QAErB,iBAAiB;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,kBAAkB;QACjB,UAAkB,CAAC,cAAc,GAAG,SAAS,CAAC;QAE/C,mBAAmB;QACnB,eAAe,EAAE,CAAC;QAElB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MK1 Layout Engine - Pure, testable layout computation
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* - No hard-coded max-width clamps
|
|
6
|
+
* - Auto-switch to narrow mode if overflow
|
|
7
|
+
* - Every panel uses left/top/width/height as integers
|
|
8
|
+
*/
|
|
9
|
+
export type Rect = {
|
|
10
|
+
left: number;
|
|
11
|
+
top: number;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
};
|
|
15
|
+
export type LayoutMode = 'normal' | 'narrow';
|
|
16
|
+
export type Layout = {
|
|
17
|
+
mode: LayoutMode;
|
|
18
|
+
cols: number;
|
|
19
|
+
rows: number;
|
|
20
|
+
rects: Record<string, Rect>;
|
|
21
|
+
};
|
|
22
|
+
export declare function computeLayout(safeCols: number, safeRows: number): Layout;
|
|
23
|
+
/**
|
|
24
|
+
* Validate and fix layout (guardrail)
|
|
25
|
+
* Uses safeCols/safeRows from layout
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateLayout(layout: Layout): Layout;
|
|
28
|
+
//# sourceMappingURL=layoutEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutEngine.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/layout/layoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7C,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC7B,CAAC;AAgCF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6BxE;AAyOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAUrD"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
const MIN_COLS_NORMAL = 140; // Increased threshold
|
|
2
|
+
const MIN_ROWS_NORMAL = 35; // Increased threshold
|
|
3
|
+
const MIN_WIDTH = 10;
|
|
4
|
+
const MIN_HEIGHT = 3;
|
|
5
|
+
/**
|
|
6
|
+
* Assert rect is within viewport (dev mode)
|
|
7
|
+
*/
|
|
8
|
+
function assertRectWithinViewport(rect, safeCols, safeRows, key) {
|
|
9
|
+
const rightEdge = rect.left + rect.width;
|
|
10
|
+
const bottomEdge = rect.top + rect.height;
|
|
11
|
+
if (rect.left < 0 || rect.width < 1) {
|
|
12
|
+
console.error(`[LAYOUT_OOB] ${key}: left=${rect.left} width=${rect.width} (must be >= 0 and >= 1)`);
|
|
13
|
+
}
|
|
14
|
+
if (rightEdge > safeCols) {
|
|
15
|
+
console.error(`[LAYOUT_OOB] ${key}: rightEdge=${rightEdge} safeCols=${safeCols} (exceeds by ${rightEdge - safeCols})`);
|
|
16
|
+
}
|
|
17
|
+
if (bottomEdge > safeRows) {
|
|
18
|
+
console.error(`[LAYOUT_OOB] ${key}: bottomEdge=${bottomEdge} safeRows=${safeRows} (exceeds by ${bottomEdge - safeRows})`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function computeLayout(safeCols, safeRows) {
|
|
22
|
+
// Check minimum requirements for normal mode
|
|
23
|
+
if (safeCols < MIN_COLS_NORMAL || safeRows < MIN_ROWS_NORMAL) {
|
|
24
|
+
const narrowLayout = computeNarrowLayout(safeCols, safeRows);
|
|
25
|
+
console.log(`[LAYOUT] mode=narrow reason=threshold safeCols=${safeCols} safeRows=${safeRows}`);
|
|
26
|
+
return narrowLayout;
|
|
27
|
+
}
|
|
28
|
+
// Try normal layout first
|
|
29
|
+
const normalLayout = computeNormalLayout(safeCols, safeRows);
|
|
30
|
+
// Check for overflow
|
|
31
|
+
if (hasOverflow(normalLayout, safeCols, safeRows)) {
|
|
32
|
+
const narrowLayout = computeNarrowLayout(safeCols, safeRows);
|
|
33
|
+
console.log(`[LAYOUT] mode=narrow reason=overflow safeCols=${safeCols} safeRows=${safeRows}`);
|
|
34
|
+
return narrowLayout;
|
|
35
|
+
}
|
|
36
|
+
// Assert all rects are within viewport (dev mode)
|
|
37
|
+
if (process.env.TUI_DEBUG === '1') {
|
|
38
|
+
for (const [key, rect] of Object.entries(normalLayout.rects)) {
|
|
39
|
+
if (key !== 'WATERMARK') { // Skip watermark
|
|
40
|
+
assertRectWithinViewport(rect, safeCols, safeRows, key);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log(`[LAYOUT] mode=normal safeCols=${safeCols} safeRows=${safeRows}`);
|
|
45
|
+
return normalLayout;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Normal mode: 3-column layout (centered with margins)
|
|
49
|
+
* Left stack: POSTURE, RESOURCES, ASSETS
|
|
50
|
+
* Center: OPERATIONS (big)
|
|
51
|
+
* Right stack: NETWORK, CAPABILITIES
|
|
52
|
+
* Bottom: COMMAND_LINE (full width)
|
|
53
|
+
*
|
|
54
|
+
* Uses safeCols/safeRows - all rects must fit within these bounds
|
|
55
|
+
*/
|
|
56
|
+
function computeNormalLayout(safeCols, safeRows) {
|
|
57
|
+
const commandLineHeight = 1;
|
|
58
|
+
const statusLineHeight = 1;
|
|
59
|
+
const usableRows = safeRows - statusLineHeight - commandLineHeight;
|
|
60
|
+
const usableTop = statusLineHeight;
|
|
61
|
+
// Add margins to center content and prevent scrollbars
|
|
62
|
+
const marginX = 2; // Left/right margin
|
|
63
|
+
const contentWidth = safeCols - (marginX * 2);
|
|
64
|
+
// Column widths (3 columns) - balanced proportions
|
|
65
|
+
const leftColWidth = Math.floor(contentWidth * 0.22); // 22%
|
|
66
|
+
const centerColWidth = Math.floor(contentWidth * 0.56); // 56%
|
|
67
|
+
const rightColWidth = contentWidth - leftColWidth - centerColWidth; // Remaining ~22%
|
|
68
|
+
// Column positions (centered with margin)
|
|
69
|
+
const leftColLeft = marginX;
|
|
70
|
+
const centerColLeft = marginX + leftColWidth;
|
|
71
|
+
const rightColLeft = marginX + leftColWidth + centerColWidth;
|
|
72
|
+
// Left stack: split into 3 panels
|
|
73
|
+
const leftPanelHeight = Math.floor(usableRows / 3);
|
|
74
|
+
const leftRemainder = usableRows - (leftPanelHeight * 3);
|
|
75
|
+
// Right stack: split into 2 panels
|
|
76
|
+
const rightPanelHeight = Math.floor(usableRows / 2);
|
|
77
|
+
const rightRemainder = usableRows - (rightPanelHeight * 2);
|
|
78
|
+
const rects = {};
|
|
79
|
+
// Status line (full width, no border) - but within safeCols
|
|
80
|
+
rects['STATUS'] = {
|
|
81
|
+
left: 0,
|
|
82
|
+
top: 0,
|
|
83
|
+
width: safeCols,
|
|
84
|
+
height: statusLineHeight,
|
|
85
|
+
};
|
|
86
|
+
// Ensure minimum widths to prevent overflow
|
|
87
|
+
const minPanelWidth = 15;
|
|
88
|
+
const adjustedLeftWidth = Math.max(minPanelWidth, leftColWidth);
|
|
89
|
+
const adjustedRightWidth = Math.max(minPanelWidth, rightColWidth);
|
|
90
|
+
const adjustedCenterWidth = contentWidth - adjustedLeftWidth - adjustedRightWidth;
|
|
91
|
+
// Recalculate positions with adjusted widths
|
|
92
|
+
const finalCenterLeft = marginX + adjustedLeftWidth;
|
|
93
|
+
const finalRightLeft = marginX + adjustedLeftWidth + adjustedCenterWidth;
|
|
94
|
+
// Left column: POSTURE, RESOURCES, ASSETS
|
|
95
|
+
rects['POSTURE'] = {
|
|
96
|
+
left: leftColLeft,
|
|
97
|
+
top: usableTop,
|
|
98
|
+
width: adjustedLeftWidth,
|
|
99
|
+
height: leftPanelHeight + (leftRemainder > 0 ? 1 : 0),
|
|
100
|
+
};
|
|
101
|
+
rects['RESOURCES'] = {
|
|
102
|
+
left: leftColLeft,
|
|
103
|
+
top: usableTop + leftPanelHeight + (leftRemainder > 0 ? 1 : 0),
|
|
104
|
+
width: adjustedLeftWidth,
|
|
105
|
+
height: leftPanelHeight + (leftRemainder > 1 ? 1 : 0),
|
|
106
|
+
};
|
|
107
|
+
rects['ASSETS'] = {
|
|
108
|
+
left: leftColLeft,
|
|
109
|
+
top: usableTop + (leftPanelHeight * 2) + Math.min(leftRemainder, 2),
|
|
110
|
+
width: adjustedLeftWidth,
|
|
111
|
+
height: leftPanelHeight + (leftRemainder > 2 ? 1 : 0),
|
|
112
|
+
};
|
|
113
|
+
// Center: OPERATIONS (big)
|
|
114
|
+
rects['OPERATIONS'] = {
|
|
115
|
+
left: finalCenterLeft,
|
|
116
|
+
top: usableTop,
|
|
117
|
+
width: adjustedCenterWidth,
|
|
118
|
+
height: usableRows,
|
|
119
|
+
};
|
|
120
|
+
// Right column: NETWORK, CAPABILITIES
|
|
121
|
+
rects['NETWORK'] = {
|
|
122
|
+
left: finalRightLeft,
|
|
123
|
+
top: usableTop,
|
|
124
|
+
width: adjustedRightWidth,
|
|
125
|
+
height: rightPanelHeight + (rightRemainder > 0 ? 1 : 0),
|
|
126
|
+
};
|
|
127
|
+
rects['CAPABILITIES'] = {
|
|
128
|
+
left: finalRightLeft,
|
|
129
|
+
top: usableTop + rightPanelHeight + (rightRemainder > 0 ? 1 : 0),
|
|
130
|
+
width: adjustedRightWidth,
|
|
131
|
+
height: rightPanelHeight + (rightRemainder > 1 ? 1 : 0),
|
|
132
|
+
};
|
|
133
|
+
// Command line (full width, bottom, no border) - but within safeCols
|
|
134
|
+
rects['COMMAND_LINE'] = {
|
|
135
|
+
left: 0,
|
|
136
|
+
top: safeRows - commandLineHeight,
|
|
137
|
+
width: safeCols,
|
|
138
|
+
height: commandLineHeight,
|
|
139
|
+
};
|
|
140
|
+
// Watermark (top-right, shows version) - within safeCols
|
|
141
|
+
const watermarkText = '4RUNR TUI MK1';
|
|
142
|
+
rects['WATERMARK'] = {
|
|
143
|
+
left: safeCols - watermarkText.length,
|
|
144
|
+
top: 0,
|
|
145
|
+
width: watermarkText.length,
|
|
146
|
+
height: 1,
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
mode: 'normal',
|
|
150
|
+
cols: safeCols,
|
|
151
|
+
rows: safeRows,
|
|
152
|
+
rects,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Narrow mode: Stacked vertically (centered with margins)
|
|
157
|
+
* Uses safeCols/safeRows
|
|
158
|
+
*/
|
|
159
|
+
function computeNarrowLayout(safeCols, safeRows) {
|
|
160
|
+
const commandLineHeight = 1;
|
|
161
|
+
const statusLineHeight = 1;
|
|
162
|
+
const usableRows = safeRows - statusLineHeight - commandLineHeight;
|
|
163
|
+
const usableTop = statusLineHeight;
|
|
164
|
+
// Add margins to center content and prevent scrollbars
|
|
165
|
+
const marginX = 2;
|
|
166
|
+
const contentWidth = safeCols - (marginX * 2);
|
|
167
|
+
const minContentWidth = 50; // Minimum usable width
|
|
168
|
+
// If too narrow, use minimal margins
|
|
169
|
+
const finalMarginX = contentWidth < minContentWidth ? 1 : marginX;
|
|
170
|
+
const finalContentWidth = safeCols - (finalMarginX * 2);
|
|
171
|
+
// Stack all panels vertically
|
|
172
|
+
const panelCount = 6; // POSTURE, RESOURCES, ASSETS, OPERATIONS, NETWORK, CAPABILITIES
|
|
173
|
+
const panelHeight = Math.floor(usableRows / panelCount);
|
|
174
|
+
const remainder = usableRows - (panelHeight * panelCount);
|
|
175
|
+
const rects = {};
|
|
176
|
+
// Status line - within safeCols
|
|
177
|
+
rects['STATUS'] = {
|
|
178
|
+
left: 0,
|
|
179
|
+
top: 0,
|
|
180
|
+
width: safeCols,
|
|
181
|
+
height: statusLineHeight,
|
|
182
|
+
};
|
|
183
|
+
let currentTop = usableTop;
|
|
184
|
+
const panels = ['POSTURE', 'RESOURCES', 'ASSETS', 'OPERATIONS', 'NETWORK', 'CAPABILITIES'];
|
|
185
|
+
for (let i = 0; i < panels.length; i++) {
|
|
186
|
+
const extraRow = i < remainder ? 1 : 0;
|
|
187
|
+
rects[panels[i]] = {
|
|
188
|
+
left: finalMarginX,
|
|
189
|
+
top: currentTop,
|
|
190
|
+
width: finalContentWidth,
|
|
191
|
+
height: panelHeight + extraRow,
|
|
192
|
+
};
|
|
193
|
+
currentTop += panelHeight + extraRow;
|
|
194
|
+
}
|
|
195
|
+
// Command line - within safeCols
|
|
196
|
+
rects['COMMAND_LINE'] = {
|
|
197
|
+
left: 0,
|
|
198
|
+
top: safeRows - commandLineHeight,
|
|
199
|
+
width: safeCols,
|
|
200
|
+
height: commandLineHeight,
|
|
201
|
+
};
|
|
202
|
+
// Watermark - within safeCols
|
|
203
|
+
const watermarkText = '4RUNR TUI MK1';
|
|
204
|
+
rects['WATERMARK'] = {
|
|
205
|
+
left: safeCols - watermarkText.length,
|
|
206
|
+
top: 0,
|
|
207
|
+
width: watermarkText.length,
|
|
208
|
+
height: 1,
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
mode: 'narrow',
|
|
212
|
+
cols: safeCols,
|
|
213
|
+
rows: safeRows,
|
|
214
|
+
rects,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check for overflow violations
|
|
219
|
+
* Uses safeCols/safeRows
|
|
220
|
+
*/
|
|
221
|
+
function hasOverflow(layout, safeCols, safeRows) {
|
|
222
|
+
for (const [name, rect] of Object.entries(layout.rects)) {
|
|
223
|
+
// Skip watermark (can be tiny)
|
|
224
|
+
if (name === 'WATERMARK') {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
// Check minimums
|
|
228
|
+
if (rect.width < MIN_WIDTH || rect.height < MIN_HEIGHT) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// Check boundaries - must fit within safe viewport
|
|
232
|
+
const rightEdge = rect.left + rect.width;
|
|
233
|
+
const bottomEdge = rect.top + rect.height;
|
|
234
|
+
// Strict boundary check
|
|
235
|
+
if (rightEdge > safeCols || bottomEdge > safeRows || rect.left < 0 || rect.top < 0) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
// Additional check: ensure rect dimensions don't exceed safe viewport
|
|
239
|
+
if (rect.width > safeCols || rect.height > safeRows) {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Validate and fix layout (guardrail)
|
|
247
|
+
* Uses safeCols/safeRows from layout
|
|
248
|
+
*/
|
|
249
|
+
export function validateLayout(layout) {
|
|
250
|
+
const { cols, rows } = layout;
|
|
251
|
+
// Check for violations
|
|
252
|
+
if (hasOverflow(layout, cols, rows)) {
|
|
253
|
+
// Switch to narrow mode and recompute
|
|
254
|
+
return computeNarrowLayout(cols, rows);
|
|
255
|
+
}
|
|
256
|
+
return layout;
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=layoutEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutEngine.js","sourceRoot":"","sources":["../../../src/tui_mk1/layout/layoutEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/tui_mk1/mk1App.d.ts
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
export declare class MK1App {
|
|
2
2
|
private kernel;
|
|
3
|
-
private
|
|
4
|
-
private
|
|
3
|
+
private widgetManager;
|
|
4
|
+
private layout;
|
|
5
5
|
private lastRebuildReason;
|
|
6
6
|
private inputHandlersAttached;
|
|
7
|
+
private debugLayout;
|
|
8
|
+
private safeViewport;
|
|
9
|
+
private debugGutter;
|
|
7
10
|
constructor();
|
|
8
11
|
/**
|
|
9
12
|
* Start MK1 App
|
|
10
13
|
*/
|
|
11
14
|
start(): Promise<void>;
|
|
12
15
|
/**
|
|
13
|
-
* Render
|
|
16
|
+
* Render full layout
|
|
14
17
|
*/
|
|
15
18
|
private render;
|
|
16
|
-
/**
|
|
17
|
-
* Update status line
|
|
18
|
-
*/
|
|
19
|
-
private updateStatusLine;
|
|
20
19
|
/**
|
|
21
20
|
* Handle resize
|
|
22
21
|
*/
|
|
@@ -25,14 +24,22 @@ export declare class MK1App {
|
|
|
25
24
|
* Setup input handling (manual - works on all terminals)
|
|
26
25
|
*/
|
|
27
26
|
private setupInputHandling;
|
|
28
|
-
/**
|
|
29
|
-
* Update command input display
|
|
30
|
-
*/
|
|
31
|
-
private updateCommandDisplay;
|
|
32
27
|
/**
|
|
33
28
|
* Handle command
|
|
34
29
|
*/
|
|
35
30
|
private handleCommand;
|
|
31
|
+
/**
|
|
32
|
+
* Emit layout debug info
|
|
33
|
+
*/
|
|
34
|
+
private emitLayoutDebug;
|
|
35
|
+
/**
|
|
36
|
+
* Emit widgets debug info
|
|
37
|
+
*/
|
|
38
|
+
private emitWidgetsDebug;
|
|
39
|
+
/**
|
|
40
|
+
* Check for overflow
|
|
41
|
+
*/
|
|
42
|
+
private checkOverflow;
|
|
36
43
|
/**
|
|
37
44
|
* Stop app
|
|
38
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk1App.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/mk1App.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mk1App.d.ts","sourceRoot":"","sources":["../../src/tui_mk1/mk1App.ts"],"names":[],"mappings":"AAwBA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAa;;IAOhC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAqCd;;OAEG;YACW,YAAY;IAmB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;YACW,aAAa;IA2C3B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA8BrB;;OAEG;IACH,IAAI,IAAI,IAAI;CAab;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9C"}
|