@blit-sh/core 0.17.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.
Files changed (73) hide show
  1. package/dist/BlitConnection.d.ts +132 -0
  2. package/dist/BlitConnection.d.ts.map +1 -0
  3. package/dist/BlitConnection.js +875 -0
  4. package/dist/BlitConnection.js.map +1 -0
  5. package/dist/BlitWorkspace.d.ts +65 -0
  6. package/dist/BlitWorkspace.d.ts.map +1 -0
  7. package/dist/BlitWorkspace.js +298 -0
  8. package/dist/BlitWorkspace.js.map +1 -0
  9. package/dist/TerminalStore.d.ts +125 -0
  10. package/dist/TerminalStore.d.ts.map +1 -0
  11. package/dist/TerminalStore.js +468 -0
  12. package/dist/TerminalStore.js.map +1 -0
  13. package/dist/bsp/dsl.d.ts +56 -0
  14. package/dist/bsp/dsl.d.ts.map +1 -0
  15. package/dist/bsp/dsl.js +247 -0
  16. package/dist/bsp/dsl.js.map +1 -0
  17. package/dist/bsp/index.d.ts +5 -0
  18. package/dist/bsp/index.d.ts.map +1 -0
  19. package/dist/bsp/index.js +3 -0
  20. package/dist/bsp/index.js.map +1 -0
  21. package/dist/bsp/layout.d.ts +32 -0
  22. package/dist/bsp/layout.d.ts.map +1 -0
  23. package/dist/bsp/layout.js +84 -0
  24. package/dist/bsp/layout.js.map +1 -0
  25. package/dist/gl-renderer.d.ts +10 -0
  26. package/dist/gl-renderer.d.ts.map +1 -0
  27. package/dist/gl-renderer.js +297 -0
  28. package/dist/gl-renderer.js.map +1 -0
  29. package/dist/index.d.ts +19 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +13 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/keyboard.d.ts +7 -0
  34. package/dist/keyboard.d.ts.map +1 -0
  35. package/dist/keyboard.js +118 -0
  36. package/dist/keyboard.js.map +1 -0
  37. package/dist/measure.d.ts +19 -0
  38. package/dist/measure.d.ts.map +1 -0
  39. package/dist/measure.js +55 -0
  40. package/dist/measure.js.map +1 -0
  41. package/dist/palettes.d.ts +3 -0
  42. package/dist/palettes.d.ts.map +1 -0
  43. package/dist/palettes.js +803 -0
  44. package/dist/palettes.js.map +1 -0
  45. package/dist/protocol.d.ts +34 -0
  46. package/dist/protocol.d.ts.map +1 -0
  47. package/dist/protocol.js +195 -0
  48. package/dist/protocol.js.map +1 -0
  49. package/dist/transports/index.d.ts +8 -0
  50. package/dist/transports/index.d.ts.map +1 -0
  51. package/dist/transports/index.js +5 -0
  52. package/dist/transports/index.js.map +1 -0
  53. package/dist/transports/webrtc-share.d.ts +11 -0
  54. package/dist/transports/webrtc-share.d.ts.map +1 -0
  55. package/dist/transports/webrtc-share.js +299 -0
  56. package/dist/transports/webrtc-share.js.map +1 -0
  57. package/dist/transports/webrtc.d.ts +11 -0
  58. package/dist/transports/webrtc.d.ts.map +1 -0
  59. package/dist/transports/webrtc.js +234 -0
  60. package/dist/transports/webrtc.js.map +1 -0
  61. package/dist/transports/websocket.d.ts +37 -0
  62. package/dist/transports/websocket.d.ts.map +1 -0
  63. package/dist/transports/websocket.js +200 -0
  64. package/dist/transports/websocket.js.map +1 -0
  65. package/dist/transports/webtransport.d.ts +53 -0
  66. package/dist/transports/webtransport.d.ts.map +1 -0
  67. package/dist/transports/webtransport.js +277 -0
  68. package/dist/transports/webtransport.js.map +1 -0
  69. package/dist/types.d.ts +163 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +42 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +75 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * BSP layout DSL parser and serializer.
3
+ *
4
+ * Syntax:
5
+ * layout = node
6
+ * node = split | leaf
7
+ * split = ("line" | "col" | "tabs") "(" entries ")"
8
+ * entries = entry ("," entry)*
9
+ * entry = [label ":"] node [weight] ["=" command] ["@" fontSize]
10
+ * label = identifier | quoted-string
11
+ * leaf = identifier | quoted-string
12
+ * command = identifier | quoted-string
13
+ * weight = number
14
+ * fontSize = number ["px" | "pt" | "%"]
15
+ * identifier = [a-zA-Z_][a-zA-Z0-9_-]*
16
+ *
17
+ * Examples:
18
+ * shell
19
+ * line(chat 2, col(shell, tail, htop))
20
+ * line(editor 3 @14, col(shell @11, logs))
21
+ * tabs(shell, htop, logs)
22
+ * tabs("Editor": col(a, b), "Terminal": col(c, d))
23
+ * line(editor 2, tabs(shell, logs))
24
+ * col(htop="htop", shell="cd /src && make watch")
25
+ */
26
+ const SPECIAL_CHARS = /[\s(),@'"\\:=]/;
27
+ export class DSLParseError extends Error {
28
+ constructor(message, offset) {
29
+ super(message);
30
+ this.offset = offset;
31
+ }
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Parser
35
+ // ---------------------------------------------------------------------------
36
+ export function parseDSL(input) {
37
+ const trimmed = input.trim();
38
+ if (!trimmed)
39
+ throw new DSLParseError("Empty layout", 0);
40
+ let pos = 0;
41
+ function peek() {
42
+ return trimmed[pos] ?? "";
43
+ }
44
+ function skipWhitespace() {
45
+ while (pos < trimmed.length && /\s/.test(trimmed[pos]))
46
+ pos++;
47
+ }
48
+ function expect(ch) {
49
+ skipWhitespace();
50
+ if (trimmed[pos] !== ch) {
51
+ throw new DSLParseError(`Expected '${ch}' at position ${pos}`, pos);
52
+ }
53
+ pos++;
54
+ }
55
+ function parseNumber() {
56
+ skipWhitespace();
57
+ const start = pos;
58
+ while (pos < trimmed.length && /[0-9.]/.test(trimmed[pos]))
59
+ pos++;
60
+ if (pos === start)
61
+ throw new DSLParseError(`Expected number at position ${pos}`, pos);
62
+ const n = Number(trimmed.slice(start, pos));
63
+ if (!Number.isFinite(n) || n <= 0) {
64
+ throw new DSLParseError(`Invalid number at position ${start}`, start);
65
+ }
66
+ return n;
67
+ }
68
+ function parseIdentifier() {
69
+ skipWhitespace();
70
+ // Quoted string
71
+ if (peek() === '"' || peek() === "'") {
72
+ const quote = trimmed[pos];
73
+ pos++;
74
+ let value = "";
75
+ while (pos < trimmed.length && trimmed[pos] !== quote) {
76
+ if (trimmed[pos] === "\\" && pos + 1 < trimmed.length) {
77
+ pos++;
78
+ value += trimmed[pos];
79
+ }
80
+ else {
81
+ value += trimmed[pos];
82
+ }
83
+ pos++;
84
+ }
85
+ if (pos >= trimmed.length)
86
+ throw new DSLParseError(`Unterminated string at position ${pos}`, pos);
87
+ pos++; // skip closing quote
88
+ return value;
89
+ }
90
+ const start = pos;
91
+ while (pos < trimmed.length && !SPECIAL_CHARS.test(trimmed[pos]))
92
+ pos++;
93
+ if (pos === start)
94
+ throw new DSLParseError(`Expected identifier at position ${pos}`, pos);
95
+ return trimmed.slice(start, pos);
96
+ }
97
+ function parseFontSize() {
98
+ const n = parseNumber();
99
+ const unitStart = pos;
100
+ if (pos < trimmed.length && /[a-z%]/.test(trimmed[pos])) {
101
+ while (pos < trimmed.length && /[a-z%]/.test(trimmed[pos]))
102
+ pos++;
103
+ const unit = trimmed.slice(unitStart, pos);
104
+ if (unit === "px" || unit === "pt" || unit === "%") {
105
+ return `${n}${unit}`;
106
+ }
107
+ throw new DSLParseError(`Unknown font size unit '${unit}' at position ${unitStart}`, unitStart);
108
+ }
109
+ return n;
110
+ }
111
+ function parseEntry() {
112
+ let label;
113
+ skipWhitespace();
114
+ const savedPos = pos;
115
+ if (peek() === '"' || peek() === "'") {
116
+ const candidate = parseIdentifier();
117
+ skipWhitespace();
118
+ if (peek() === ":") {
119
+ pos++;
120
+ label = candidate;
121
+ }
122
+ else {
123
+ pos = savedPos;
124
+ }
125
+ }
126
+ else if (/[a-zA-Z_]/.test(peek())) {
127
+ const candidate = parseIdentifier();
128
+ skipWhitespace();
129
+ if (peek() === ":" &&
130
+ candidate !== "line" &&
131
+ candidate !== "col" &&
132
+ candidate !== "tabs") {
133
+ pos++;
134
+ label = candidate;
135
+ }
136
+ else {
137
+ pos = savedPos;
138
+ }
139
+ }
140
+ const node = parseNode();
141
+ skipWhitespace();
142
+ let weight = 1;
143
+ if (pos < trimmed.length && /[0-9]/.test(peek())) {
144
+ weight = parseNumber();
145
+ }
146
+ skipWhitespace();
147
+ if (peek() === "=") {
148
+ pos++;
149
+ const command = parseIdentifier();
150
+ if (node.type !== "leaf") {
151
+ throw new DSLParseError(`command can only be applied to leaf nodes at position ${pos}`, pos);
152
+ }
153
+ node.command = command;
154
+ }
155
+ skipWhitespace();
156
+ if (peek() === "@") {
157
+ pos++;
158
+ const fontSize = parseFontSize();
159
+ if (node.type !== "leaf") {
160
+ throw new DSLParseError(`fontSize can only be applied to leaf nodes at position ${pos}`, pos);
161
+ }
162
+ node.fontSize = fontSize;
163
+ }
164
+ return { node, weight, ...(label != null && { label }) };
165
+ }
166
+ function parseNode() {
167
+ skipWhitespace();
168
+ const start = pos;
169
+ const id = parseIdentifier();
170
+ if ((id === "line" || id === "col" || id === "tabs") &&
171
+ (skipWhitespace(), peek() === "(")) {
172
+ const direction = id === "line" ? "horizontal" : id === "col" ? "vertical" : "tabs";
173
+ expect("(");
174
+ const children = [parseEntry()];
175
+ skipWhitespace();
176
+ while (peek() === ",") {
177
+ pos++;
178
+ children.push(parseEntry());
179
+ skipWhitespace();
180
+ }
181
+ expect(")");
182
+ if (children.length < 2) {
183
+ throw new DSLParseError(`Split needs at least 2 children at position ${start}`, start);
184
+ }
185
+ return { type: "split", direction, children };
186
+ }
187
+ return { type: "leaf", tag: id };
188
+ }
189
+ const entry = parseEntry();
190
+ skipWhitespace();
191
+ if (pos < trimmed.length) {
192
+ throw new DSLParseError(`Unexpected '${trimmed[pos]}' at position ${pos}`, pos);
193
+ }
194
+ return { root: entry.node, weight: entry.weight };
195
+ }
196
+ // ---------------------------------------------------------------------------
197
+ // Serializer
198
+ // ---------------------------------------------------------------------------
199
+ function quoteIfNeeded(value) {
200
+ return value.length > 0 && !SPECIAL_CHARS.test(value)
201
+ ? value
202
+ : `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
203
+ }
204
+ function serializeNode(node, weight, label) {
205
+ let s;
206
+ if (node.type === "leaf") {
207
+ s = quoteIfNeeded(node.tag);
208
+ }
209
+ else {
210
+ const keyword = node.direction === "horizontal"
211
+ ? "line"
212
+ : node.direction === "vertical"
213
+ ? "col"
214
+ : "tabs";
215
+ const inner = node.children
216
+ .map((c) => serializeNode(c.node, c.weight, c.label))
217
+ .join(", ");
218
+ s = `${keyword}(${inner})`;
219
+ }
220
+ if (weight !== 1)
221
+ s += ` ${weight}`;
222
+ if (node.type === "leaf" && node.command != null) {
223
+ s += `="${node.command.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
224
+ }
225
+ if (node.type === "leaf" && node.fontSize != null)
226
+ s += ` @${node.fontSize}`;
227
+ if (label != null)
228
+ s = `${quoteIfNeeded(label)}: ${s}`;
229
+ return s;
230
+ }
231
+ export function serializeDSL(root, weight = 1) {
232
+ return serializeNode(root, weight);
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // Utilities
236
+ // ---------------------------------------------------------------------------
237
+ export function collectTags(node) {
238
+ if (node.type === "leaf")
239
+ return [node.tag];
240
+ return node.children.flatMap((c) => collectTags(c.node));
241
+ }
242
+ export function leafCount(node) {
243
+ if (node.type === "leaf")
244
+ return 1;
245
+ return node.children.reduce((sum, c) => sum + leafCount(c.node), 0);
246
+ }
247
+ //# sourceMappingURL=dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../src/bsp/dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { parseDSL, serializeDSL, collectTags, leafCount, DSLParseError, } from "./dsl";
2
+ export type { BSPNode, BSPSplit, BSPChild, BSPLeaf } from "./dsl";
3
+ export { PRESETS, enumeratePanes, assignSessionsToPanes, buildCandidateOrder, reconcileAssignments, adjustWeights, layoutFromDSL, } from "./layout";
4
+ export type { BSPLayout, BSPPane, BSPAssignments } from "./layout";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bsp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EACL,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseDSL, serializeDSL, collectTags, leafCount, DSLParseError, } from "./dsl";
2
+ export { PRESETS, enumeratePanes, assignSessionsToPanes, buildCandidateOrder, reconcileAssignments, adjustWeights, layoutFromDSL, } from "./layout";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bsp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { BSPNode, BSPSplit, BSPLeaf } from "./dsl";
2
+ export interface BSPLayout {
3
+ name: string;
4
+ dsl: string;
5
+ root: BSPNode;
6
+ weight: number;
7
+ }
8
+ export interface BSPPane {
9
+ id: string;
10
+ leaf: BSPLeaf;
11
+ }
12
+ export interface BSPAssignments {
13
+ assignments: Record<string, string | null>;
14
+ }
15
+ export declare const PRESETS: BSPLayout[];
16
+ export declare function enumeratePanes(node: BSPNode, path?: readonly number[]): BSPPane[];
17
+ export declare function assignSessionsToPanes(panes: readonly BSPPane[], orderedSessionIds: readonly string[]): BSPAssignments;
18
+ export declare function buildCandidateOrder({ liveSessionIds, focusedSessionId, currentAssignedInPaneOrder, lruSessionIds, }: {
19
+ liveSessionIds: readonly string[];
20
+ focusedSessionId: string | null;
21
+ currentAssignedInPaneOrder?: readonly string[];
22
+ lruSessionIds?: readonly string[];
23
+ }): string[];
24
+ export declare function reconcileAssignments({ panes, previous, liveSessionIds, knownSessionIds, }: {
25
+ panes: readonly BSPPane[];
26
+ previous: BSPAssignments;
27
+ liveSessionIds: readonly string[];
28
+ knownSessionIds: readonly string[];
29
+ }): BSPAssignments;
30
+ export declare function adjustWeights(split: BSPSplit, indexA: number, indexB: number, fraction: number): BSPSplit;
31
+ export declare function layoutFromDSL(dsl: string): BSPLayout;
32
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/bsp/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAGlE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,EAQ9B,CAAC;AAMF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,OAAO,EAAE,CAYX;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,iBAAiB,EAAE,SAAS,MAAM,EAAE,GACnC,cAAc,CAWhB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,cAAc,EACd,gBAAgB,EAChB,0BAA+B,EAC/B,aAAkB,GACnB,EAAE;IACD,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,MAAM,EAAE,CAiBX;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,EAAE;IACD,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,GAAG,cAAc,CAajB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,QAAQ,CAgBV;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAGpD"}
@@ -0,0 +1,84 @@
1
+ import { parseDSL } from "./dsl";
2
+ export const PRESETS = [
3
+ preset("Side by side", "line(left, right)"),
4
+ preset("Tabs", "tabs(a, b, c)"),
5
+ preset("2-1 thirds", "line(main 2, side)"),
6
+ preset("Grid", "col(line(a, b), line(c, d))"),
7
+ preset("Dev", "line(editor 2, col(shell, logs))"),
8
+ preset("Dev + tabs", "line(editor 2, tabs(shell, logs, build))"),
9
+ preset("Split + tabs", "line(tabs(a, b) 2, tabs(c, d))"),
10
+ ];
11
+ function preset(name, dsl) {
12
+ return { name, dsl, ...parseDSL(dsl) };
13
+ }
14
+ export function enumeratePanes(node, path = []) {
15
+ if (node.type === "leaf") {
16
+ return [
17
+ {
18
+ id: path.length > 0 ? path.join(".") : "0",
19
+ leaf: node,
20
+ },
21
+ ];
22
+ }
23
+ return node.children.flatMap((child, index) => enumeratePanes(child.node, [...path, index]));
24
+ }
25
+ export function assignSessionsToPanes(panes, orderedSessionIds) {
26
+ const assignments = {};
27
+ let sessionIdx = 0;
28
+ for (const pane of panes) {
29
+ if (pane.leaf.command) {
30
+ assignments[pane.id] = null;
31
+ }
32
+ else {
33
+ assignments[pane.id] = orderedSessionIds[sessionIdx++] ?? null;
34
+ }
35
+ }
36
+ return { assignments };
37
+ }
38
+ export function buildCandidateOrder({ liveSessionIds, focusedSessionId, currentAssignedInPaneOrder = [], lruSessionIds = [], }) {
39
+ const live = new Set(liveSessionIds);
40
+ const seen = new Set();
41
+ const ordered = [];
42
+ const push = (sessionId) => {
43
+ if (!sessionId || !live.has(sessionId) || seen.has(sessionId))
44
+ return;
45
+ seen.add(sessionId);
46
+ ordered.push(sessionId);
47
+ };
48
+ push(focusedSessionId);
49
+ currentAssignedInPaneOrder.forEach(push);
50
+ lruSessionIds.forEach(push);
51
+ liveSessionIds.forEach(push);
52
+ return ordered;
53
+ }
54
+ export function reconcileAssignments({ panes, previous, liveSessionIds, knownSessionIds, }) {
55
+ const live = new Set(liveSessionIds);
56
+ const known = new Set(knownSessionIds);
57
+ const assignments = {};
58
+ for (const pane of panes) {
59
+ const sessionId = previous.assignments[pane.id];
60
+ const keep = sessionId != null && (live.has(sessionId) || !known.has(sessionId));
61
+ assignments[pane.id] = keep ? sessionId : null;
62
+ }
63
+ return { assignments };
64
+ }
65
+ export function adjustWeights(split, indexA, indexB, fraction) {
66
+ const totalWeight = split.children[indexA].weight + split.children[indexB].weight;
67
+ const delta = fraction * totalWeight;
68
+ const minWeight = 0.1;
69
+ const newA = Math.max(minWeight, split.children[indexA].weight + delta);
70
+ const newB = Math.max(minWeight, split.children[indexB].weight - delta);
71
+ const children = split.children.map((c, i) => {
72
+ if (i === indexA)
73
+ return { ...c, weight: newA };
74
+ if (i === indexB)
75
+ return { ...c, weight: newB };
76
+ return c;
77
+ });
78
+ return { ...split, children };
79
+ }
80
+ export function layoutFromDSL(dsl) {
81
+ const { root, weight } = parseDSL(dsl);
82
+ return { name: dsl, dsl, root, weight };
83
+ }
84
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/bsp/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CellMetrics } from "./measure";
2
+ export interface GlRenderer {
3
+ supported: boolean;
4
+ maxDimension: number;
5
+ resize(width: number, height: number): void;
6
+ render(bgVerts: Float32Array, glyphVerts: Float32Array, atlasCanvas: HTMLCanvasElement | undefined, atlasVersion: number, cursorVisible: boolean, cursorCol: number, cursorRow: number, cursorStyle: number, cursorBlinkOn: boolean, cell: CellMetrics, bgColor: [number, number, number], focused?: boolean): void;
7
+ dispose(): void;
8
+ }
9
+ export declare function createGlRenderer(canvas: HTMLCanvasElement): GlRenderer;
10
+ //# sourceMappingURL=gl-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gl-renderer.d.ts","sourceRoot":"","sources":["../src/gl-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAmG7C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CACJ,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,YAAY,EACxB,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,CAAC,EAAE,OAAO,GAChB,IAAI,CAAC;IACR,OAAO,IAAI,IAAI,CAAC;CACjB;AAUD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAqStE"}