@flyingrobots/bijou-tui 3.0.0 → 3.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.
Files changed (42) hide show
  1. package/dist/app-frame-actions.d.ts +1 -5
  2. package/dist/app-frame-actions.d.ts.map +1 -1
  3. package/dist/app-frame-actions.js +19 -15
  4. package/dist/app-frame-actions.js.map +1 -1
  5. package/dist/app-frame-render.d.ts.map +1 -1
  6. package/dist/app-frame-render.js +6 -1
  7. package/dist/app-frame-render.js.map +1 -1
  8. package/dist/app-frame-types.d.ts +9 -0
  9. package/dist/app-frame-types.d.ts.map +1 -1
  10. package/dist/app-frame-types.js.map +1 -1
  11. package/dist/app-frame.d.ts +36 -1
  12. package/dist/app-frame.d.ts.map +1 -1
  13. package/dist/app-frame.js +136 -20
  14. package/dist/app-frame.js.map +1 -1
  15. package/dist/commands.d.ts.map +1 -1
  16. package/dist/commands.js +11 -3
  17. package/dist/commands.js.map +1 -1
  18. package/dist/driver.d.ts +4 -5
  19. package/dist/driver.d.ts.map +1 -1
  20. package/dist/driver.js +15 -17
  21. package/dist/driver.js.map +1 -1
  22. package/dist/eventbus.d.ts +5 -0
  23. package/dist/eventbus.d.ts.map +1 -1
  24. package/dist/eventbus.js +44 -7
  25. package/dist/eventbus.js.map +1 -1
  26. package/dist/index.d.ts +3 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/notification.d.ts +73 -0
  31. package/dist/notification.d.ts.map +1 -0
  32. package/dist/notification.js +693 -0
  33. package/dist/notification.js.map +1 -0
  34. package/dist/overlay.d.ts +3 -1
  35. package/dist/overlay.d.ts.map +1 -1
  36. package/dist/overlay.js.map +1 -1
  37. package/dist/runtime.d.ts.map +1 -1
  38. package/dist/runtime.js +76 -59
  39. package/dist/runtime.js.map +1 -1
  40. package/dist/types.d.ts +30 -0
  41. package/dist/types.d.ts.map +1 -1
  42. package/package.json +3 -3
package/dist/app-frame.js CHANGED
@@ -4,20 +4,60 @@
4
4
  * Provides tabs, pane focus/scroll isolation, shell key handling, help,
5
5
  * panel-scoped overlay context, and optional frame-level command palette.
6
6
  */
7
- import { createSurface, parseAnsiToSurface, resolveSafeCtx } from '@flyingrobots/bijou';
7
+ import { createSurface, parseAnsiToSurface, resolveSafeCtx, } from '@flyingrobots/bijou';
8
8
  import { helpView } from './help.js';
9
9
  import { isKeyMsg, isMouseMsg, isResizeMsg } from './types.js';
10
10
  import { modal } from './overlay.js';
11
11
  import { fitBlock } from './layout-utils.js';
12
12
  import { commandPalette, commandPaletteKeyMap, } from './command-palette.js';
13
13
  import { restoreLayoutState } from './layout-preset.js';
14
- import { isFrameScopedMsg, isPageScopedMsg, wrapCmdForPage, emitMsg, emitMsgForPage, } from './app-frame-types.js';
14
+ import { createNotificationState, notificationsNeedTick, pushNotification, renderNotificationStack, tickNotifications, trimNotificationsToViewport, } from './notification.js';
15
+ import { isFrameScopedMsg, isPageScopedMsg, wrapCmdForPage, emitMsg, emitMsgForPage, wrapFrameMsg, } from './app-frame-types.js';
15
16
  import { createFrameKeyMap, frameBodyRect, mergeBindingSources, } from './app-frame-utils.js';
16
17
  import { renderHeaderLine, renderHelpLine, renderPageContent, renderMaximizedPane, renderTransition, } from './app-frame-render.js';
17
18
  import { applyFrameAction, syncPageFrameState, } from './app-frame-actions.js';
18
19
  import { handlePaletteKey, openCommandPalette, } from './app-frame-palette.js';
19
20
  import { visibleLength } from './viewport.js';
20
21
  // ---------------------------------------------------------------------------
22
+ // Frame Notification Helpers
23
+ // ---------------------------------------------------------------------------
24
+ const FRAME_NOTIFICATION_TICK_MS = 40;
25
+ const DEFAULT_FRAME_NOTIFICATION_DURATION_MS = 6_000;
26
+ function resolveFrameNotificationOptions(options) {
27
+ if (options.runtimeNotifications === false) {
28
+ return {
29
+ enabled: false,
30
+ placement: 'LOWER_RIGHT',
31
+ durationMs: DEFAULT_FRAME_NOTIFICATION_DURATION_MS,
32
+ margin: 1,
33
+ gap: 1,
34
+ overflow: 'wrap',
35
+ };
36
+ }
37
+ const configured = options.runtimeNotifications === true || options.runtimeNotifications == null
38
+ ? {}
39
+ : options.runtimeNotifications;
40
+ return {
41
+ enabled: configured.enabled ?? true,
42
+ placement: configured.placement ?? 'LOWER_RIGHT',
43
+ durationMs: configured.durationMs ?? DEFAULT_FRAME_NOTIFICATION_DURATION_MS,
44
+ margin: configured.margin ?? 1,
45
+ gap: configured.gap ?? 1,
46
+ overflow: configured.overflow ?? 'wrap',
47
+ };
48
+ }
49
+ function createFrameNotificationTickCmd() {
50
+ return async (_emit, caps) => {
51
+ if (!caps.sleep) {
52
+ throw new Error('createFrameNotificationTickCmd requires sleep capability');
53
+ }
54
+ await caps.sleep(FRAME_NOTIFICATION_TICK_MS);
55
+ return wrapFrameMsg({
56
+ type: 'notification-tick',
57
+ atMs: caps.now?.() ?? 0,
58
+ });
59
+ };
60
+ }
21
61
  // Factory
22
62
  // ---------------------------------------------------------------------------
23
63
  /**
@@ -40,6 +80,7 @@ export function createFramedApp(options) {
40
80
  throw new Error(`createFramedApp: defaultPageId "${defaultPageId}" not found in pages`);
41
81
  }
42
82
  const frameKeys = createFrameKeyMap();
83
+ const frameNotificationOptions = resolveFrameNotificationOptions(options);
43
84
  const paletteKeys = commandPaletteKeyMap({
44
85
  focusNext: { type: 'cp-next' },
45
86
  focusPrev: { type: 'cp-prev' },
@@ -48,6 +89,30 @@ export function createFramedApp(options) {
48
89
  select: { type: 'cp-select' },
49
90
  close: { type: 'cp-close' },
50
91
  });
92
+ function withObservedKey(model, cmds, msg, route) {
93
+ const observed = options.observeKey?.(msg, route);
94
+ if (observed === undefined)
95
+ return [...cmds];
96
+ return [emitMsgForPage(model.activePageId, observed), ...cmds];
97
+ }
98
+ function applyFrameNotificationState(model, notifications, nowMs, forceTick = false) {
99
+ const trimmed = trimNotificationsToViewport(notifications, {
100
+ screenWidth: model.columns,
101
+ screenHeight: model.rows,
102
+ margin: frameNotificationOptions.margin,
103
+ gap: frameNotificationOptions.gap,
104
+ }, nowMs);
105
+ const needsTick = notificationsNeedTick(trimmed);
106
+ const nextModel = {
107
+ ...model,
108
+ runtimeNotifications: trimmed,
109
+ runtimeNotificationLoopActive: needsTick,
110
+ };
111
+ if (needsTick && (forceTick || !model.runtimeNotificationLoopActive)) {
112
+ return [nextModel, [createFrameNotificationTickCmd()]];
113
+ }
114
+ return [nextModel, []];
115
+ }
51
116
  const app = {
52
117
  init() {
53
118
  const pageModels = {};
@@ -73,6 +138,8 @@ export function createFramedApp(options) {
73
138
  maximizedPaneByPage: {},
74
139
  dockStateByPage: {},
75
140
  splitRatioOverrides: {},
141
+ runtimeNotifications: createNotificationState(),
142
+ runtimeNotificationLoopActive: false,
76
143
  };
77
144
  for (const pageId of pageOrder) {
78
145
  model = syncPageFrameState(model, pageId, pagesById);
@@ -95,16 +162,31 @@ export function createFramedApp(options) {
95
162
  update(msg, model) {
96
163
  if (isFrameScopedMsg(msg)) {
97
164
  const action = msg.action;
165
+ if (action.type === 'runtime-issue') {
166
+ if (!frameNotificationOptions.enabled)
167
+ return [model, []];
168
+ const notifications = pushNotification(model.runtimeNotifications, {
169
+ title: action.issue.level === 'warning' ? 'Framework warning' : 'Runtime error',
170
+ message: action.issue.message,
171
+ variant: 'TOAST',
172
+ tone: action.issue.level === 'warning' ? 'WARNING' : 'ERROR',
173
+ placement: frameNotificationOptions.placement,
174
+ durationMs: frameNotificationOptions.durationMs,
175
+ overflow: frameNotificationOptions.overflow,
176
+ }, action.issue.atMs);
177
+ return applyFrameNotificationState(model, notifications, action.issue.atMs);
178
+ }
179
+ if (action.type === 'notification-tick') {
180
+ const notifications = tickNotifications(model.runtimeNotifications, action.atMs);
181
+ return applyFrameNotificationState(model, notifications, action.atMs, true);
182
+ }
98
183
  if (action.type === 'transition') {
99
184
  // Ignore stale transition ticks from a previous generation
100
185
  if (action.generation !== model.transitionGeneration)
101
186
  return [model, []];
102
- // Advance timeline using wall-clock elapsed time
103
- if (model.transitionTimeline && model.transitionTimelineState && model.transitionStartMs != null) {
104
- const elapsedMs = Date.now() - model.transitionStartMs;
105
- const elapsedSec = Math.max(0, elapsedMs / 1000);
106
- // Step from init to current elapsed time (tweens are deterministic)
107
- const state = model.transitionTimeline.step(model.transitionTimeline.init(), elapsedSec);
187
+ // Advance timeline from deterministic pulse deltas.
188
+ if (model.transitionTimeline && model.transitionTimelineState) {
189
+ const state = model.transitionTimeline.step(model.transitionTimelineState, Math.max(0, action.dt));
108
190
  const vals = model.transitionTimeline.values(state);
109
191
  const progress = Math.min(1, Math.max(0, vals['progress'] ?? action.progress));
110
192
  if (model.transitionTimeline.done(state) || progress >= 1) {
@@ -158,33 +240,52 @@ export function createFramedApp(options) {
158
240
  }
159
241
  if (isKeyMsg(msg)) {
160
242
  if (model.commandPalette != null) {
161
- return handlePaletteKey(msg, model, paletteKeys, options, pagesById);
243
+ const [nextModel, cmds] = handlePaletteKey(msg, model, paletteKeys, options, pagesById);
244
+ return [nextModel, withObservedKey(model, cmds, msg, 'palette')];
162
245
  }
163
246
  // Help acts as a modal layer when open: only close keys are handled.
164
247
  if (model.helpOpen) {
165
248
  if (!msg.ctrl && !msg.alt && (msg.key === 'escape' || msg.key === '?')) {
166
- return [{ ...model, helpOpen: false }, []];
249
+ return [{ ...model, helpOpen: false }, withObservedKey(model, [], msg, 'help')];
167
250
  }
168
- return [model, []];
251
+ return [model, withObservedKey(model, [], msg, 'help')];
169
252
  }
253
+ const activePage = pagesById.get(model.activePageId);
254
+ const pageAction = activePage.keyMap?.handle(msg);
255
+ const globalAction = options.globalKeys?.handle(msg);
170
256
  const frameAction = frameKeys.handle(msg);
257
+ const keyPriority = options.keyPriority ?? 'frame-first';
258
+ if (keyPriority === 'page-first') {
259
+ if (pageAction !== undefined) {
260
+ return [model, withObservedKey(model, [emitMsgForPage(model.activePageId, pageAction)], msg, 'page')];
261
+ }
262
+ if (globalAction !== undefined) {
263
+ return [model, withObservedKey(model, [emitMsg(globalAction)], msg, 'global')];
264
+ }
265
+ if (frameAction !== undefined) {
266
+ if (frameAction.type === 'open-palette' && options.enableCommandPalette) {
267
+ return [openCommandPalette(model, frameKeys, options, pagesById), withObservedKey(model, [], msg, 'frame')];
268
+ }
269
+ const [nextModel, cmds] = applyFrameAction(frameAction, model, options, pagesById);
270
+ return [nextModel, withObservedKey(model, cmds, msg, 'frame')];
271
+ }
272
+ return [model, withObservedKey(model, [], msg, 'unhandled')];
273
+ }
171
274
  if (frameAction !== undefined) {
172
275
  // Handle palette opening here since applyFrameAction doesn't have access to palette deps
173
276
  if (frameAction.type === 'open-palette' && options.enableCommandPalette) {
174
- return [openCommandPalette(model, frameKeys, options, pagesById), []];
277
+ return [openCommandPalette(model, frameKeys, options, pagesById), withObservedKey(model, [], msg, 'frame')];
175
278
  }
176
- return applyFrameAction(frameAction, model, options, pagesById);
279
+ const [nextModel, cmds] = applyFrameAction(frameAction, model, options, pagesById);
280
+ return [nextModel, withObservedKey(model, cmds, msg, 'frame')];
177
281
  }
178
- const globalAction = options.globalKeys?.handle(msg);
179
282
  if (globalAction !== undefined) {
180
- return [model, [emitMsg(globalAction)]];
283
+ return [model, withObservedKey(model, [emitMsg(globalAction)], msg, 'global')];
181
284
  }
182
- const activePage = pagesById.get(model.activePageId);
183
- const pageAction = activePage.keyMap?.handle(msg);
184
285
  if (pageAction !== undefined) {
185
- return [model, [emitMsgForPage(model.activePageId, pageAction)]];
286
+ return [model, withObservedKey(model, [emitMsgForPage(model.activePageId, pageAction)], msg, 'page')];
186
287
  }
187
- return [model, []];
288
+ return [model, withObservedKey(model, [], msg, 'unhandled')];
188
289
  }
189
290
  if (isMouseMsg(msg)) {
190
291
  return [model, []];
@@ -244,6 +345,16 @@ export function createFramedApp(options) {
244
345
  screenRect: { row: 0, col: 0, width: model.columns, height: model.rows },
245
346
  }));
246
347
  }
348
+ if (frameNotificationOptions.enabled) {
349
+ const ctx = resolveSafeCtx();
350
+ overlays.push(...renderNotificationStack(model.runtimeNotifications, {
351
+ screenWidth: model.columns,
352
+ screenHeight: model.rows,
353
+ margin: frameNotificationOptions.margin,
354
+ gap: frameNotificationOptions.gap,
355
+ ctx: ctx ?? undefined,
356
+ }));
357
+ }
247
358
  if (model.helpOpen) {
248
359
  const full = helpView(mergeBindingSources(frameKeys, options.globalKeys, activePage.helpSource ?? activePage.keyMap));
249
360
  overlays.push(modal({
@@ -277,6 +388,11 @@ export function createFramedApp(options) {
277
388
  dimBackground: overlays.length > 0,
278
389
  });
279
390
  },
391
+ routeRuntimeIssue(issue) {
392
+ if (!frameNotificationOptions.enabled)
393
+ return undefined;
394
+ return wrapFrameMsg({ type: 'runtime-issue', issue });
395
+ },
280
396
  };
281
397
  return app;
282
398
  }
@@ -293,7 +409,7 @@ function composeFrameSurface(options) {
293
409
  dimSurface(frame);
294
410
  }
295
411
  for (const overlay of options.overlays) {
296
- const overlaySurface = parseAnsiToSurface(overlay.content, maxVisibleWidth(overlay.content), overlay.content.split('\n').length);
412
+ const overlaySurface = overlay.surface ?? parseAnsiToSurface(overlay.content, maxVisibleWidth(overlay.content), overlay.content.split('\n').length);
297
413
  frame.blit(overlaySurface, overlay.col, overlay.row);
298
414
  }
299
415
  return frame;
@@ -1 +1 @@
1
- {"version":3,"file":"app-frame.js","sourceRoot":"","sources":["../src/app-frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-frame.js","sourceRoot":"","sources":["../src/app-frame.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,KAAK,GAAG,EAAmB,MAAM,YAAY,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAKlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAEpD"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,KAAK,GAAG,EAAmB,MAAM,YAAY,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAEhC;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAWlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAEpD"}
package/dist/commands.js CHANGED
@@ -25,9 +25,17 @@ export function quit() {
25
25
  * @returns A one-shot timer command.
26
26
  */
27
27
  export function tick(ms, msg) {
28
- return (_emit, _caps) => new Promise((resolve) => {
29
- setTimeout(() => resolve(msg), ms);
30
- });
28
+ return async (_emit, caps) => {
29
+ if (caps.sleep) {
30
+ await caps.sleep(ms);
31
+ }
32
+ else {
33
+ await new Promise((resolve) => {
34
+ setTimeout(resolve, ms);
35
+ });
36
+ }
37
+ return msg;
38
+ };
31
39
  }
32
40
  /**
33
41
  * Group multiple commands into an array.
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAA6B,MAAM,YAAY,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAkB,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAI,EAAU,EAAE,GAAM;IACxC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACtB,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;QACzB,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAI,GAAG,IAAc;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAA6B,MAAM,YAAY,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAkB,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAI,EAAU,EAAE,GAAM;IACxC,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAI,GAAG,IAAc;IACxC,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/driver.d.ts CHANGED
@@ -48,6 +48,8 @@ export type ScriptStep<M = never> = {
48
48
  export interface RunScriptOptions extends RunOptions {
49
49
  /** Capture each rendered frame. */
50
50
  onFrame?: (frame: Surface, index: number) => void;
51
+ /** Pulse frequency used to drive animation commands. Set to `false` to disable. */
52
+ pulseFps?: number | false;
51
53
  }
52
54
  /**
53
55
  * Result returned by {@link runScript} after all steps have been processed.
@@ -73,11 +75,8 @@ export interface RunScriptResult<Model> {
73
75
  * - A command returns QUIT
74
76
  * - All script steps are exhausted (auto-quits)
75
77
  *
76
- * **Limitation:** Between steps the driver yields via `queueMicrotask`,
77
- * which only settles microtask-based async (e.g. `Promise.resolve()`).
78
- * Commands that use `setTimeout`, real I/O, or other macrotask-based async
79
- * may not have completed before the next key is dispatched. Use `delay`
80
- * on subsequent steps to allow time for macrotask-based commands.
78
+ * Between steps the driver waits for the event bus to go idle, so command
79
+ * chains settle deterministically without relying on microtask-only yields.
81
80
  *
82
81
  * @template Model - The application model type.
83
82
  * @template M - The message (action) type for the TEA update cycle.
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAI7D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,KAAK,IAC5B;IACA,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,4BAA4B;IAC5B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,2BAA2B;IAC3B,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,oDAAoD;IACpD,GAAG,EAAE,CAAC,CAAC;IACP,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEJ,4EAA4E;AAC5E,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,yCAAyC;IACzC,KAAK,EAAE,KAAK,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,CAAC,EACtC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAClB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CA2GjC"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAI7D,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,qBAAqB,CAAC;AAQxE,wDAAwD;AACxD,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,KAAK,IAC5B;IACA,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,4BAA4B;IAC5B,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,2BAA2B;IAC3B,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACC;IACA,oDAAoD;IACpD,GAAG,EAAE,CAAC,CAAC;IACP,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEJ,4EAA4E;AAC5E,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,mCAAmC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK;IACpC,yCAAyC;IACzC,KAAK,EAAE,KAAK,CAAC;IACb,oCAAoC;IACpC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,CAAC,EACtC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAClB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CA2GjC"}
package/dist/driver.js CHANGED
@@ -18,6 +18,7 @@
18
18
  import { isResizeMsg } from './types.js';
19
19
  import { createEventBus } from './eventbus.js';
20
20
  import { parseKey } from './keys.js';
21
+ import { resolveClock, sleep } from '@flyingrobots/bijou';
21
22
  import { installBCSSResolver } from './css/install.js';
22
23
  import { normalizeViewOutput } from './view-output.js';
23
24
  // ---------------------------------------------------------------------------
@@ -34,11 +35,8 @@ import { normalizeViewOutput } from './view-output.js';
34
35
  * - A command returns QUIT
35
36
  * - All script steps are exhausted (auto-quits)
36
37
  *
37
- * **Limitation:** Between steps the driver yields via `queueMicrotask`,
38
- * which only settles microtask-based async (e.g. `Promise.resolve()`).
39
- * Commands that use `setTimeout`, real I/O, or other macrotask-based async
40
- * may not have completed before the next key is dispatched. Use `delay`
41
- * on subsequent steps to allow time for macrotask-based commands.
38
+ * Between steps the driver waits for the event bus to go idle, so command
39
+ * chains settle deterministically without relying on microtask-only yields.
42
40
  *
43
41
  * @template Model - The application model type.
44
42
  * @template M - The message (action) type for the TEA update cycle.
@@ -48,9 +46,10 @@ import { normalizeViewOutput } from './view-output.js';
48
46
  * @returns The final model, all rendered frames, and elapsed time.
49
47
  */
50
48
  export async function runScript(app, steps, options) {
51
- const start = Date.now();
49
+ const clock = resolveClock(options?.ctx);
50
+ const start = clock.now();
52
51
  const frames = [];
53
- const bus = createEventBus();
52
+ const bus = createEventBus({ clock });
54
53
  const ctx = options?.ctx;
55
54
  if (ctx != null) {
56
55
  installBCSSResolver(ctx, options?.css);
@@ -62,8 +61,10 @@ export async function runScript(app, steps, options) {
62
61
  width: Math.max(0, Math.floor(ctx?.runtime.columns || 80)),
63
62
  height: Math.max(0, Math.floor(ctx?.runtime.rows || 24)),
64
63
  };
65
- // Start heartbeat for animations
66
- bus.startPulse();
64
+ // Start heartbeat for animations when enabled.
65
+ if (options?.pulseFps !== false) {
66
+ bus.startPulse(options?.pulseFps ?? ctx?.runtime.refreshRate ?? 60);
67
+ }
67
68
  /** Stop the scripted driver event loop. */
68
69
  function shutdown() {
69
70
  running = false;
@@ -96,14 +97,13 @@ export async function runScript(app, steps, options) {
96
97
  for (const cmd of initCmds) {
97
98
  bus.runCmd(cmd);
98
99
  }
99
- // Yield so microtask-based init commands can settle
100
- await new Promise((r) => queueMicrotask(r));
100
+ await bus.drain();
101
101
  // Feed script steps
102
102
  for (const step of steps) {
103
103
  if (!running)
104
104
  break;
105
105
  if (step.delay && step.delay > 0) {
106
- await new Promise((r) => setTimeout(r, step.delay));
106
+ await sleep(clock, step.delay);
107
107
  }
108
108
  if (!running)
109
109
  break;
@@ -129,11 +129,9 @@ export async function runScript(app, steps, options) {
129
129
  const _exhaustive = step;
130
130
  throw new Error(`runScript: unhandled script step variant: ${JSON.stringify(_exhaustive)}`);
131
131
  }
132
- // Yield to allow async commands to settle
133
- await new Promise((r) => queueMicrotask(r));
132
+ await bus.drain();
134
133
  }
135
- // Final yield so any trailing commands can settle
136
- await new Promise((r) => queueMicrotask(r));
134
+ await bus.drain();
137
135
  }
138
136
  finally {
139
137
  bus.stopPulse();
@@ -142,7 +140,7 @@ export async function runScript(app, steps, options) {
142
140
  return {
143
141
  model,
144
142
  frames,
145
- elapsed: Date.now() - start,
143
+ elapsed: clock.now() - start,
146
144
  };
147
145
  }
148
146
  //# sourceMappingURL=driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAqDvD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAkB,EAClB,KAAsB,EACtB,OAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,cAAc,EAAK,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,CAAC;IACzB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,WAAW,GAAG;QAChB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KACzD,CAAC;IAEF,iCAAiC;IACjC,GAAG,CAAC,UAAU,EAAE,CAAC;IAEjB,2CAA2C;IAC3C,SAAS,QAAQ;QACf,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErB,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,KAAK,GAAG,QAAQ,CAAC;QACjB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,WAAW,GAAG;gBACZ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;gBAC/B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;aAC9B,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;QAExE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;QAE5E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEjC,oBAAoB;QACpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,oDAAoD;QACpD,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,oBAAoB;QACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO;gBAAE,MAAM;YAEpB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC,OAAO;gBAAE,MAAM;YAEpB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAc;oBAC3B,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;oBAC5B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;iBACvB,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAU,IAAI,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC9F,CAAC;YAED,0CAA0C;YAC1C,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,kDAAkD;QAClD,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM;QACN,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@
25
25
  * ```
26
26
  */
27
27
  import type { IOPort } from '@flyingrobots/bijou';
28
+ import { type ClockPort } from '@flyingrobots/bijou';
28
29
  import type { Cmd, KeyMsg, MouseMsg, PulseMsg, ResizeMsg } from './types.js';
29
30
  /**
30
31
  * Union of all message types the bus can carry — built-in key, resize,
@@ -121,6 +122,8 @@ export interface EventBus<M> {
121
122
  * @returns A disposable that removes this middleware.
122
123
  */
123
124
  use(middleware: Middleware<M>): Disposable;
125
+ /** Resolve once all in-flight commands have settled. */
126
+ drain(): Promise<void>;
124
127
  /** Disconnect all sources and remove all subscribers. */
125
128
  dispose(): void;
126
129
  }
@@ -130,6 +133,8 @@ export interface CreateEventBusOptions {
130
133
  onCommandRejected?: (error: unknown) => void;
131
134
  /** Called to surface error messages (replaces direct `console.error` usage). */
132
135
  onError?: (message: string, error: unknown) => void;
136
+ /** Clock/scheduler override for deterministic command and pulse timing. */
137
+ clock?: ClockPort;
133
138
  }
134
139
  /** Handle for unsubscribing or disconnecting a resource. */
135
140
  interface Disposable {
@@ -1 +1 @@
1
- {"version":3,"file":"eventbus.d.ts","sourceRoot":"","sources":["../src/eventbus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ7E;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;AAErF;;;;;GAKG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB;;;;;;OAMG;IACH,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IAElD;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE3B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,CAAC;IAEjE;;;;;;;;;;OAUG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1B;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC;IAExC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,2CAA2C;IAC3C,SAAS,IAAI,IAAI,CAAC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;IAEnD;;;;;;;OAOG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IAE3C,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,4DAA4D;AAC5D,UAAU,UAAU;IAClB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,QAAQ,CAAC,CAAC,CAAC,CA2NjF"}
1
+ {"version":3,"file":"eventbus.d.ts","sourceRoot":"","sources":["../src/eventbus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ7E;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,CAAC;AAErF;;;;;GAKG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB;;;;;;OAMG;IACH,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC;IAElD;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE3B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU,CAAC;IAEjE;;;;;;;;;;OAUG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1B;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC;IAExC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,2CAA2C;IAC3C,SAAS,IAAI,IAAI,CAAC;IAElB;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC;IAEnD;;;;;;;OAOG;IACH,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IAE3C,wDAAwD;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,yDAAyD;IACzD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,4DAA4D;AAC5D,UAAU,UAAU;IAClB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,qBAAqB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAkQjF"}