@rezi-ui/core 0.1.0-alpha.63 → 0.1.0-alpha.69

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 (69) hide show
  1. package/dist/pipeline.d.ts +2 -2
  2. package/dist/pipeline.js +2 -2
  3. package/dist/renderer/renderToDrawlist/widgets/navigation.d.ts.map +1 -1
  4. package/dist/renderer/renderToDrawlist/widgets/navigation.js +12 -4
  5. package/dist/renderer/renderToDrawlist/widgets/navigation.js.map +1 -1
  6. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.d.ts.map +1 -1
  7. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js +90 -27
  8. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js.map +1 -1
  9. package/dist/repro/replay.d.ts +4 -0
  10. package/dist/repro/replay.d.ts.map +1 -1
  11. package/dist/repro/replay.js +17 -2
  12. package/dist/repro/replay.js.map +1 -1
  13. package/dist/runtime/router/zones.d.ts.map +1 -1
  14. package/dist/runtime/router/zones.js +28 -1
  15. package/dist/runtime/router/zones.js.map +1 -1
  16. package/dist/testing/assertions.d.ts +7 -0
  17. package/dist/testing/assertions.d.ts.map +1 -0
  18. package/dist/testing/assertions.js +187 -0
  19. package/dist/testing/assertions.js.map +1 -0
  20. package/dist/testing/index.d.ts +11 -0
  21. package/dist/testing/index.d.ts.map +1 -1
  22. package/dist/testing/index.js +11 -0
  23. package/dist/testing/index.js.map +1 -1
  24. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.d.ts +8 -0
  25. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.d.ts.map +1 -0
  26. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.js +79 -0
  27. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.js.map +1 -0
  28. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.d.ts +9 -0
  29. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.d.ts.map +1 -0
  30. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.js +96 -0
  31. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.js.map +1 -0
  32. package/dist/testing/referenceScenarios/inputModalBlocking.d.ts +9 -0
  33. package/dist/testing/referenceScenarios/inputModalBlocking.d.ts.map +1 -0
  34. package/dist/testing/referenceScenarios/inputModalBlocking.js +172 -0
  35. package/dist/testing/referenceScenarios/inputModalBlocking.js.map +1 -0
  36. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.d.ts +9 -0
  37. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.d.ts.map +1 -0
  38. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.js +102 -0
  39. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.js.map +1 -0
  40. package/dist/testing/referenceScenarios/selectKeyboardCycler.d.ts +8 -0
  41. package/dist/testing/referenceScenarios/selectKeyboardCycler.d.ts.map +1 -0
  42. package/dist/testing/referenceScenarios/selectKeyboardCycler.js +115 -0
  43. package/dist/testing/referenceScenarios/selectKeyboardCycler.js.map +1 -0
  44. package/dist/testing/referenceScenarios/textareaMultilineEditing.d.ts +8 -0
  45. package/dist/testing/referenceScenarios/textareaMultilineEditing.d.ts.map +1 -0
  46. package/dist/testing/referenceScenarios/textareaMultilineEditing.js +100 -0
  47. package/dist/testing/referenceScenarios/textareaMultilineEditing.js.map +1 -0
  48. package/dist/testing/referenceScenarios/virtualListResizeStorm.d.ts +8 -0
  49. package/dist/testing/referenceScenarios/virtualListResizeStorm.d.ts.map +1 -0
  50. package/dist/testing/referenceScenarios/virtualListResizeStorm.js +88 -0
  51. package/dist/testing/referenceScenarios/virtualListResizeStorm.js.map +1 -0
  52. package/dist/testing/replayScenario.d.ts +6 -0
  53. package/dist/testing/replayScenario.d.ts.map +1 -0
  54. package/dist/testing/replayScenario.js +399 -0
  55. package/dist/testing/replayScenario.js.map +1 -0
  56. package/dist/testing/scenario.d.ts +145 -0
  57. package/dist/testing/scenario.d.ts.map +1 -0
  58. package/dist/testing/scenario.js +57 -0
  59. package/dist/testing/scenario.js.map +1 -0
  60. package/dist/testing/semanticScenario.d.ts +6 -0
  61. package/dist/testing/semanticScenario.d.ts.map +1 -0
  62. package/dist/testing/semanticScenario.js +347 -0
  63. package/dist/testing/semanticScenario.js.map +1 -0
  64. package/dist/widgets/breadcrumb.d.ts.map +1 -1
  65. package/dist/widgets/breadcrumb.js +1 -12
  66. package/dist/widgets/breadcrumb.js.map +1 -1
  67. package/dist/widgets/types/base.d.ts +1 -3
  68. package/dist/widgets/types/base.d.ts.map +1 -1
  69. package/package.json +2 -2
@@ -0,0 +1,100 @@
1
+ import { ui } from "../../ui.js";
2
+ export const referenceTextareaMultilineScenario = Object.freeze({
3
+ schemaVersion: 1,
4
+ id: "textarea-multiline-editing",
5
+ title: "Textarea preserves multiline editing behavior",
6
+ widgetFamily: "input-textarea",
7
+ behaviorStatement: "A focused textarea inserts a newline on Enter and continues editing on the following line.",
8
+ evidenceRefs: Object.freeze([
9
+ "docs/widgets/textarea.md",
10
+ "docs/guide/input-and-focus.md",
11
+ "packages/core/src/runtime/__tests__/inputEditor.state.test.ts",
12
+ "packages/core/src/app/__tests__/widgetRenderer.integration.test.ts",
13
+ ]),
14
+ viewport: Object.freeze({ cols: 40, rows: 12 }),
15
+ theme: Object.freeze({ mode: "named", value: "default" }),
16
+ capabilityProfile: Object.freeze({
17
+ supportsMouse: false,
18
+ supportsBracketedPaste: false,
19
+ supportsFocusEvents: false,
20
+ supportsOsc52: false,
21
+ colorMode: "none",
22
+ }),
23
+ scriptedInput: Object.freeze([
24
+ Object.freeze({ atMs: 0, event: Object.freeze({ kind: "key", key: "enter" }) }),
25
+ Object.freeze({ atMs: 1, event: Object.freeze({ kind: "text", text: "x" }) }),
26
+ ]),
27
+ expectedActions: Object.freeze([
28
+ Object.freeze({ id: "notes", action: "input", value: "ab\n", cursor: 3 }),
29
+ Object.freeze({ id: "notes", action: "input", value: "ab\nx", cursor: 4 }),
30
+ ]),
31
+ expectedScreenCheckpoints: Object.freeze([
32
+ Object.freeze({
33
+ id: "newline-inserted",
34
+ afterStep: 1,
35
+ assertionRef: "screen_region_assertion",
36
+ args: Object.freeze({
37
+ x: 0,
38
+ y: 3,
39
+ width: 40,
40
+ height: 1,
41
+ match: "includes",
42
+ text: Object.freeze(['Value:"ab\\n"']),
43
+ }),
44
+ }),
45
+ Object.freeze({
46
+ id: "second-line-edit",
47
+ afterStep: 2,
48
+ assertionRef: "screen_region_assertion",
49
+ args: Object.freeze({
50
+ x: 0,
51
+ y: 3,
52
+ width: 40,
53
+ height: 1,
54
+ match: "includes",
55
+ text: Object.freeze(['Value:"ab\\nx"']),
56
+ }),
57
+ }),
58
+ ]),
59
+ invariants: Object.freeze([
60
+ Object.freeze({
61
+ id: "no-single-line-collapse",
62
+ assertionRef: "invariant_assertion",
63
+ args: Object.freeze({
64
+ kind: "action_absence",
65
+ action: Object.freeze({
66
+ id: "notes",
67
+ action: "input",
68
+ payloadSubset: Object.freeze({ value: "abx" }),
69
+ }),
70
+ }),
71
+ }),
72
+ ]),
73
+ fidelityRequirement: "semantic-only",
74
+ });
75
+ export const createReferenceTextareaMultilineFixture = () => {
76
+ let app;
77
+ return Object.freeze({
78
+ initialState: Object.freeze({ value: "ab" }),
79
+ setup(nextApp) {
80
+ app = nextApp;
81
+ },
82
+ view(state) {
83
+ return ui.focusTrap({ id: "textarea-trap", active: true, initialFocus: "notes" }, [
84
+ ui.column({ p: 1, gap: 1 }, [
85
+ ui.text("Textarea scenario"),
86
+ ui.text(`Value:${JSON.stringify(state.value)}`),
87
+ ui.textarea({
88
+ id: "notes",
89
+ value: state.value,
90
+ rows: 4,
91
+ onInput: (value) => {
92
+ app.update({ value });
93
+ },
94
+ }),
95
+ ]),
96
+ ]);
97
+ },
98
+ });
99
+ };
100
+ //# sourceMappingURL=textareaMultilineEditing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textareaMultilineEditing.js","sourceRoot":"","sources":["../../../src/testing/referenceScenarios/textareaMultilineEditing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOjC,MAAM,CAAC,MAAM,kCAAkC,GAAuB,MAAM,CAAC,MAAM,CAAC;IAClF,aAAa,EAAE,CAAC;IAChB,EAAE,EAAE,4BAA4B;IAChC,KAAK,EAAE,+CAA+C;IACtD,YAAY,EAAE,gBAAgB;IAC9B,iBAAiB,EACf,4FAA4F;IAC9F,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,0BAA0B;QAC1B,+BAA+B;QAC/B,+DAA+D;QAC/D,oEAAoE;KACrE,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzD,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/B,aAAa,EAAE,KAAK;QACpB,sBAAsB,EAAE,KAAK;QAC7B,mBAAmB,EAAE,KAAK;QAC1B,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,MAAM;KAClB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;KAC9E,CAAC;IACF,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAC3E,CAAC;IACF,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC;YACZ,EAAE,EAAE,kBAAkB;YACtB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,yBAAyB;YACvC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;gBAClB,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;aACvC,CAAC;SACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC;YACZ,EAAE,EAAE,kBAAkB;YACtB,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,yBAAyB;YACvC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;gBAClB,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;aACxC,CAAC;SACH,CAAC;KACH,CAAC;IACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC;YACZ,EAAE,EAAE,yBAAyB;YAC7B,YAAY,EAAE,qBAAqB;YACnC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;oBACpB,EAAE,EAAE,OAAO;oBACX,MAAM,EAAE,OAAO;oBACf,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;iBAC/C,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;IACF,mBAAmB,EAAE,eAAe;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uCAAuC,GAEhD,GAAG,EAAE;IACP,IAAI,GAAgC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO;YACX,GAAG,GAAG,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,KAAK;YACR,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;gBAChF,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC;oBAC5B,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,EAAE,CAAC,QAAQ,CAAC;wBACV,EAAE,EAAE,OAAO;wBACX,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,IAAI,EAAE,CAAC;wBACP,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;4BACjB,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;wBACxB,CAAC;qBACF,CAAC;iBACH,CAAC;aACH,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ScenarioDefinition, ScenarioFixtureFactory } from "../scenario.js";
2
+ interface VirtualListResizeStormState {
3
+ readonly activated: string;
4
+ }
5
+ export declare const referenceVirtualListResizeStormScenario: ScenarioDefinition;
6
+ export declare const createReferenceVirtualListResizeStormFixture: ScenarioFixtureFactory<VirtualListResizeStormState>;
7
+ export {};
8
+ //# sourceMappingURL=virtualListResizeStorm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualListResizeStorm.d.ts","sourceRoot":"","sources":["../../../src/testing/referenceScenarios/virtualListResizeStorm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,UAAU,2BAA2B;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,uCAAuC,EAAE,kBA6DpD,CAAC;AAEH,eAAO,MAAM,4CAA4C,EAAE,sBAAsB,CAC/E,2BAA2B,CA2B5B,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { ui } from "../../ui.js";
2
+ export const referenceVirtualListResizeStormScenario = Object.freeze({
3
+ schemaVersion: 1,
4
+ id: "virtual-list-resize-storm-stays-interactive",
5
+ title: "Virtual list stays interactive through a resize storm",
6
+ widgetFamily: "table-tree-virtual-list",
7
+ behaviorStatement: "Repeated viewport changes must not wedge a virtual list; later keyboard navigation and activation still work.",
8
+ evidenceRefs: Object.freeze([
9
+ "docs/widgets/virtual-list.md",
10
+ "docs/terminal-io-contract.md",
11
+ "packages/core/src/widgets/__tests__/virtualList.contract.test.ts",
12
+ "packages/core/src/app/__tests__/widgetBehavior.contracts.test.ts",
13
+ ]),
14
+ viewport: Object.freeze({ cols: 40, rows: 10 }),
15
+ theme: Object.freeze({ mode: "named", value: "default" }),
16
+ capabilityProfile: Object.freeze({
17
+ supportsMouse: false,
18
+ supportsBracketedPaste: false,
19
+ supportsFocusEvents: false,
20
+ supportsOsc52: false,
21
+ colorMode: "none",
22
+ }),
23
+ scriptedInput: Object.freeze([
24
+ Object.freeze({ atMs: 0, event: Object.freeze({ kind: "resize", cols: 52, rows: 12 }) }),
25
+ Object.freeze({ atMs: 10, event: Object.freeze({ kind: "resize", cols: 34, rows: 8 }) }),
26
+ Object.freeze({ atMs: 20, event: Object.freeze({ kind: "resize", cols: 60, rows: 14 }) }),
27
+ Object.freeze({ atMs: 30, event: Object.freeze({ kind: "resize", cols: 40, rows: 10 }) }),
28
+ Object.freeze({ atMs: 60, event: Object.freeze({ kind: "key", key: "down" }) }),
29
+ Object.freeze({ atMs: 70, event: Object.freeze({ kind: "key", key: "enter" }) }),
30
+ ]),
31
+ expectedScreenCheckpoints: Object.freeze([
32
+ Object.freeze({
33
+ id: "activation-after-resize-storm",
34
+ afterStep: 6,
35
+ assertionRef: "screen_region_assertion",
36
+ args: Object.freeze({
37
+ x: 0,
38
+ y: 0,
39
+ width: 40,
40
+ height: 2,
41
+ match: "includes",
42
+ text: Object.freeze(["Activated:1"]),
43
+ }),
44
+ }),
45
+ ]),
46
+ invariants: Object.freeze([
47
+ Object.freeze({
48
+ id: "no-ghost-activation",
49
+ assertionRef: "invariant_assertion",
50
+ args: Object.freeze({
51
+ kind: "action_absence",
52
+ action: Object.freeze({
53
+ id: "missing-list-action",
54
+ action: "press",
55
+ }),
56
+ }),
57
+ }),
58
+ ]),
59
+ fidelityRequirement: "terminal-real",
60
+ notes: "The oracle stays behavior-first: later activation must still work after repeated resizes, without asserting exact row geometry during the storm.",
61
+ });
62
+ export const createReferenceVirtualListResizeStormFixture = () => {
63
+ let app;
64
+ const items = Object.freeze(Array.from({ length: 100 }, (_, index) => index));
65
+ return Object.freeze({
66
+ initialState: Object.freeze({ activated: "-" }),
67
+ setup(nextApp) {
68
+ app = nextApp;
69
+ },
70
+ view(state) {
71
+ return ui.focusTrap({ id: "resize-trap", active: true, initialFocus: "list" }, [
72
+ ui.column({}, [
73
+ ui.text(`Activated:${state.activated}`),
74
+ ui.virtualList({
75
+ id: "list",
76
+ items,
77
+ itemHeight: 1,
78
+ renderItem: (item, _index, focused) => ui.text(focused ? `> ${String(item)}` : String(item)),
79
+ onSelect: (item) => {
80
+ app.update({ activated: String(item) });
81
+ },
82
+ }),
83
+ ]),
84
+ ]);
85
+ },
86
+ });
87
+ };
88
+ //# sourceMappingURL=virtualListResizeStorm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualListResizeStorm.js","sourceRoot":"","sources":["../../../src/testing/referenceScenarios/virtualListResizeStorm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type ScenarioDefinition, type ScenarioFixtureFactory, type ScenarioRunResult } from "./scenario.js";
2
+ export declare function runReplayScenario<S>(opts: Readonly<{
3
+ scenario: ScenarioDefinition;
4
+ createFixture: ScenarioFixtureFactory<S>;
5
+ }>): Promise<ScenarioRunResult>;
6
+ //# sourceMappingURL=replayScenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayScenario.d.ts","sourceRoot":"","sources":["../../src/testing/replayScenario.ts"],"names":[],"mappings":"AA6CA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EAIvB,MAAM,eAAe,CAAC;AA2RvB,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,IAAI,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC,GACD,OAAO,CAAC,iBAAiB,CAAC,CAkK5B"}
@@ -0,0 +1,399 @@
1
+ import { ZR_KEY_BACKSPACE, ZR_KEY_DELETE, ZR_KEY_DOWN, ZR_KEY_END, ZR_KEY_ENTER, ZR_KEY_ESCAPE, ZR_KEY_F1, ZR_KEY_F2, ZR_KEY_F3, ZR_KEY_F4, ZR_KEY_F5, ZR_KEY_F6, ZR_KEY_F7, ZR_KEY_F8, ZR_KEY_F9, ZR_KEY_F10, ZR_KEY_F11, ZR_KEY_F12, ZR_KEY_HOME, ZR_KEY_LEFT, ZR_KEY_PAGE_DOWN, ZR_KEY_PAGE_UP, ZR_KEY_RIGHT, ZR_KEY_SPACE, ZR_KEY_TAB, ZR_KEY_UP, ZR_MOD_ALT, ZR_MOD_CTRL, ZR_MOD_META, ZR_MOD_SHIFT, charToKeyCode, } from "../keybindings/keyCodes.js";
2
+ import { runReproReplayHarness, } from "../repro/index.js";
3
+ import { DEFAULT_TERMINAL_CAPS } from "../terminalCaps.js";
4
+ import { defaultTheme } from "../theme/defaultTheme.js";
5
+ import { compileTheme } from "../theme/theme.js";
6
+ import { evaluateScenarioResult } from "./assertions.js";
7
+ import { encodeZrevBatchV1 } from "./events.js";
8
+ import { createTestRenderer } from "./renderer.js";
9
+ import { createScenarioScreenSnapshot, } from "./scenario.js";
10
+ function colorModeToCapsColor(mode) {
11
+ if (mode === "16")
12
+ return 1;
13
+ if (mode === "256")
14
+ return 2;
15
+ if (mode === "truecolor")
16
+ return 3;
17
+ return 0;
18
+ }
19
+ function toTerminalCaps(profile) {
20
+ return Object.freeze({
21
+ ...DEFAULT_TERMINAL_CAPS,
22
+ colorMode: colorModeToCapsColor(profile.colorMode),
23
+ supportsMouse: profile.supportsMouse,
24
+ supportsBracketedPaste: profile.supportsBracketedPaste,
25
+ supportsFocusEvents: profile.supportsFocusEvents,
26
+ supportsOsc52: profile.supportsOsc52,
27
+ supportsCursorShape: true,
28
+ });
29
+ }
30
+ function keyNameToCode(key) {
31
+ if (typeof key === "number")
32
+ return key;
33
+ const normalized = key.trim().toLowerCase();
34
+ if (normalized.length === 1)
35
+ return charToKeyCode(normalized) ?? 0;
36
+ const functionKey = /^f(\d{1,2})$/u.exec(normalized);
37
+ if (functionKey) {
38
+ const functionKeyCodes = [
39
+ ZR_KEY_F1,
40
+ ZR_KEY_F2,
41
+ ZR_KEY_F3,
42
+ ZR_KEY_F4,
43
+ ZR_KEY_F5,
44
+ ZR_KEY_F6,
45
+ ZR_KEY_F7,
46
+ ZR_KEY_F8,
47
+ ZR_KEY_F9,
48
+ ZR_KEY_F10,
49
+ ZR_KEY_F11,
50
+ ZR_KEY_F12,
51
+ ];
52
+ const index = Number(functionKey[1]) - 1;
53
+ const code = functionKeyCodes[index];
54
+ if (code !== undefined)
55
+ return code;
56
+ }
57
+ switch (normalized) {
58
+ case "enter":
59
+ case "return":
60
+ return ZR_KEY_ENTER;
61
+ case "escape":
62
+ case "esc":
63
+ return ZR_KEY_ESCAPE;
64
+ case "tab":
65
+ return ZR_KEY_TAB;
66
+ case "space":
67
+ return ZR_KEY_SPACE;
68
+ case "backspace":
69
+ return ZR_KEY_BACKSPACE;
70
+ case "delete":
71
+ case "del":
72
+ return ZR_KEY_DELETE;
73
+ case "home":
74
+ return ZR_KEY_HOME;
75
+ case "end":
76
+ return ZR_KEY_END;
77
+ case "pageup":
78
+ return ZR_KEY_PAGE_UP;
79
+ case "pagedown":
80
+ return ZR_KEY_PAGE_DOWN;
81
+ case "left":
82
+ return ZR_KEY_LEFT;
83
+ case "right":
84
+ return ZR_KEY_RIGHT;
85
+ case "up":
86
+ return ZR_KEY_UP;
87
+ case "down":
88
+ return ZR_KEY_DOWN;
89
+ default:
90
+ throw new Error(`Unsupported replay scenario key ${JSON.stringify(key)}`);
91
+ }
92
+ }
93
+ function keyModsToMask(mods) {
94
+ let mask = 0;
95
+ for (const mod of mods ?? []) {
96
+ if (mod === "shift")
97
+ mask |= ZR_MOD_SHIFT;
98
+ else if (mod === "ctrl")
99
+ mask |= ZR_MOD_CTRL;
100
+ else if (mod === "alt")
101
+ mask |= ZR_MOD_ALT;
102
+ else if (mod === "meta")
103
+ mask |= ZR_MOD_META;
104
+ }
105
+ return mask;
106
+ }
107
+ function eventToZrevEvents(event) {
108
+ switch (event.kind) {
109
+ case "text":
110
+ return Object.freeze(Array.from(event.text).map((glyph) => ({
111
+ kind: "text",
112
+ timeMs: 1,
113
+ codepoint: glyph.codePointAt(0) ?? 0,
114
+ })));
115
+ case "paste":
116
+ return Object.freeze([
117
+ {
118
+ kind: "paste",
119
+ timeMs: 1,
120
+ bytes: new TextEncoder().encode(event.text),
121
+ },
122
+ ]);
123
+ case "resize":
124
+ return Object.freeze([
125
+ {
126
+ kind: "resize",
127
+ timeMs: 1,
128
+ cols: event.cols,
129
+ rows: event.rows,
130
+ },
131
+ ]);
132
+ case "terminalBytes":
133
+ throw new Error("Replay scenarios do not support terminalBytes input");
134
+ case "key":
135
+ return Object.freeze([
136
+ {
137
+ kind: "key",
138
+ timeMs: 1,
139
+ key: keyNameToCode(event.key),
140
+ mods: keyModsToMask(event.mods),
141
+ action: "down",
142
+ },
143
+ ]);
144
+ }
145
+ }
146
+ function bytesToHex(bytes) {
147
+ let out = "";
148
+ for (const byte of bytes)
149
+ out += byte.toString(16).padStart(2, "0");
150
+ return out;
151
+ }
152
+ function resizeEventsFrom(event) {
153
+ if (event.kind !== "resize")
154
+ return Object.freeze([]);
155
+ return Object.freeze([
156
+ Object.freeze({ eventIndex: 0, cols: event.cols, rows: event.rows, timeMs: 1 }),
157
+ ]);
158
+ }
159
+ function toReplayExpectedActions(expected) {
160
+ const out = [];
161
+ for (const action of expected ?? []) {
162
+ if (action.action === "press") {
163
+ out.push(Object.freeze({ id: action.id, action: "press" }));
164
+ continue;
165
+ }
166
+ if (action.action === "input") {
167
+ out.push(Object.freeze({
168
+ id: action.id,
169
+ action: "input",
170
+ value: action.value,
171
+ cursor: action.cursor,
172
+ }));
173
+ continue;
174
+ }
175
+ throw new Error(`Replay scenario runner supports only press/input expectedActions (got ${action.action})`);
176
+ }
177
+ return Object.freeze(out);
178
+ }
179
+ function toScenarioAction(action) {
180
+ if (action.action === "input") {
181
+ return Object.freeze({
182
+ id: action.id,
183
+ action: "input",
184
+ value: action.value,
185
+ cursor: action.cursor,
186
+ });
187
+ }
188
+ return Object.freeze({ id: action.id, action: "press" });
189
+ }
190
+ function createReplayBundle(scenario) {
191
+ let previousAtMs = 0;
192
+ const batches = scenario.scriptedInput.map((step, index) => {
193
+ const deltaMs = Math.max(0, step.atMs - previousAtMs);
194
+ previousAtMs = step.atMs;
195
+ const encodedEvents = eventToZrevEvents(step.event);
196
+ const bytes = encodeZrevBatchV1({ events: encodedEvents });
197
+ return Object.freeze({
198
+ step: index + 1,
199
+ deltaMs,
200
+ byteLength: bytes.byteLength,
201
+ bytesHex: bytesToHex(bytes),
202
+ eventCount: encodedEvents.length,
203
+ droppedBatches: 0,
204
+ resizeEvents: resizeEventsFrom(step.event),
205
+ });
206
+ });
207
+ return Object.freeze({
208
+ schema: "rezi-repro-v1",
209
+ captureConfig: Object.freeze({
210
+ captureRawEvents: true,
211
+ captureDrawlistBytes: false,
212
+ maxEventBytes: 1 << 20,
213
+ maxDrawlistBytes: 0,
214
+ maxFrames: 1024,
215
+ fpsCap: 60,
216
+ cursorProtocolVersion: 2,
217
+ }),
218
+ capsSnapshot: Object.freeze({
219
+ terminalCaps: toTerminalCaps(scenario.capabilityProfile),
220
+ backendCaps: Object.freeze({
221
+ maxEventBytes: 1 << 20,
222
+ fpsCap: 60,
223
+ cursorProtocolVersion: 2,
224
+ }),
225
+ }),
226
+ timingModel: Object.freeze({
227
+ kind: "deterministic",
228
+ clock: "monotonic-ms",
229
+ replayStrategy: "recorded-delta",
230
+ timeUnit: "ms",
231
+ baseTimeMs: 0,
232
+ }),
233
+ eventCapture: Object.freeze({
234
+ ordering: "poll-order",
235
+ timing: "step-delta-ms",
236
+ bounds: Object.freeze({
237
+ maxBatches: Math.max(1, batches.length),
238
+ maxEvents: Math.max(1, batches.reduce((sum, item) => sum + item.eventCount, 0)),
239
+ maxBytes: Math.max(1, batches.reduce((sum, item) => sum + item.byteLength, 0)),
240
+ }),
241
+ totals: Object.freeze({
242
+ capturedBatches: batches.length,
243
+ capturedEvents: batches.reduce((sum, item) => sum + item.eventCount, 0),
244
+ capturedBytes: batches.reduce((sum, item) => sum + item.byteLength, 0),
245
+ runtimeDroppedBatches: 0,
246
+ omittedBatches: 0,
247
+ omittedEvents: 0,
248
+ omittedBytes: 0,
249
+ }),
250
+ truncation: Object.freeze({
251
+ mode: "drop-tail-batch",
252
+ truncated: false,
253
+ reason: null,
254
+ firstOmittedStep: null,
255
+ }),
256
+ batches: Object.freeze(batches),
257
+ }),
258
+ });
259
+ }
260
+ export async function runReplayScenario(opts) {
261
+ if (opts.scenario.scriptedInput.some((step) => step.event.kind === "terminalBytes")) {
262
+ return Object.freeze({
263
+ mode: "replay",
264
+ status: "FAIL",
265
+ pass: false,
266
+ actions: Object.freeze([]),
267
+ steps: Object.freeze([]),
268
+ finalScreen: createScenarioScreenSnapshot(opts.scenario.viewport, ""),
269
+ finalCursor: null,
270
+ mismatches: Object.freeze([
271
+ Object.freeze({
272
+ code: "ZR_SCENARIO_UNSUPPORTED",
273
+ path: "scriptedInput",
274
+ detail: "Replay scenarios do not support terminalBytes input; use PTY mode",
275
+ }),
276
+ ]),
277
+ });
278
+ }
279
+ const fixture = opts.createFixture();
280
+ const compiledTheme = compileTheme(fixture.theme ?? defaultTheme.definition);
281
+ const renderer = createTestRenderer({
282
+ viewport: opts.scenario.viewport,
283
+ theme: fixture.theme ?? defaultTheme.definition,
284
+ });
285
+ async function captureStateAfterSteps(stepCount) {
286
+ const prefixFixture = opts.createFixture();
287
+ let finalState = prefixFixture.initialState;
288
+ const prefixReplayResult = await runReproReplayHarness({
289
+ bundle: createReplayBundle({
290
+ ...opts.scenario,
291
+ scriptedInput: Object.freeze(opts.scenario.scriptedInput.slice(0, stepCount)),
292
+ }),
293
+ view: () => prefixFixture.view(prefixFixture.initialState),
294
+ initialState: prefixFixture.initialState,
295
+ statefulView: (state) => prefixFixture.view(state),
296
+ ...(prefixFixture.setup !== undefined
297
+ ? {
298
+ setupApp: (app) => {
299
+ prefixFixture.setup?.(app);
300
+ },
301
+ }
302
+ : {}),
303
+ ...(stepCount > 0
304
+ ? {
305
+ onCompleteState: (state) => {
306
+ finalState = state;
307
+ },
308
+ }
309
+ : {}),
310
+ initialViewport: opts.scenario.viewport,
311
+ theme: compiledTheme,
312
+ expectedActions: Object.freeze([]),
313
+ });
314
+ let viewport = { ...opts.scenario.viewport };
315
+ for (const scriptedStep of opts.scenario.scriptedInput.slice(0, stepCount)) {
316
+ if (scriptedStep.event.kind === "resize") {
317
+ viewport = { cols: scriptedStep.event.cols, rows: scriptedStep.event.rows };
318
+ }
319
+ }
320
+ return Object.freeze({
321
+ viewport,
322
+ state: finalState,
323
+ actions: Object.freeze(prefixReplayResult.replay.actions.map((action) => toScenarioAction(action))),
324
+ });
325
+ }
326
+ const replayResult = await runReproReplayHarness({
327
+ bundle: createReplayBundle(opts.scenario),
328
+ view: () => fixture.view(fixture.initialState),
329
+ initialState: fixture.initialState,
330
+ statefulView: (state) => fixture.view(state),
331
+ ...(fixture.setup !== undefined
332
+ ? {
333
+ setupApp: (app) => {
334
+ fixture.setup?.(app);
335
+ },
336
+ }
337
+ : {}),
338
+ initialViewport: opts.scenario.viewport,
339
+ theme: compiledTheme,
340
+ expectedActions: toReplayExpectedActions(opts.scenario.expectedActions),
341
+ invariants: { noFatal: true, noOverrun: true },
342
+ });
343
+ const replayActionsWithSteps = replayResult.replay.actions.map((action) => Object.freeze({
344
+ step: action.step,
345
+ action: toScenarioAction(action),
346
+ }));
347
+ const scenarioActions = Object.freeze(replayActionsWithSteps.map((item) => item.action));
348
+ const steps = [];
349
+ for (let index = 0; index < opts.scenario.scriptedInput.length; index += 1) {
350
+ const step = index + 1;
351
+ const stepState = await captureStateAfterSteps(step);
352
+ const text = renderer
353
+ .render(fixture.view(stepState.state), {
354
+ viewport: stepState.viewport,
355
+ theme: fixture.theme ?? defaultTheme.definition,
356
+ focusedId: null,
357
+ })
358
+ .toText();
359
+ steps.push(Object.freeze({
360
+ step,
361
+ screen: createScenarioScreenSnapshot(stepState.viewport, text),
362
+ cursor: null,
363
+ actions: stepState.actions,
364
+ }));
365
+ }
366
+ const finalScreen = (() => {
367
+ const finalStep = steps.at(-1);
368
+ if (finalStep !== undefined)
369
+ return finalStep.screen;
370
+ return createScenarioScreenSnapshot(opts.scenario.viewport, renderer
371
+ .render(fixture.view(fixture.initialState), {
372
+ viewport: opts.scenario.viewport,
373
+ theme: fixture.theme ?? defaultTheme.definition,
374
+ focusedId: null,
375
+ })
376
+ .toText());
377
+ })();
378
+ const result = evaluateScenarioResult(opts.scenario, {
379
+ mode: "replay",
380
+ actions: scenarioActions,
381
+ steps: Object.freeze(steps),
382
+ finalScreen,
383
+ finalCursor: null,
384
+ });
385
+ if (opts.scenario.expectedCursorState === undefined)
386
+ return result;
387
+ const mismatch = Object.freeze({
388
+ code: "ZR_SCENARIO_UNSUPPORTED",
389
+ path: "expectedCursorState",
390
+ detail: "Replay scenario runner does not capture live cursor state; use semantic or PTY mode for cursor-dependent scenarios",
391
+ });
392
+ return Object.freeze({
393
+ ...result,
394
+ status: "FAIL",
395
+ pass: false,
396
+ mismatches: Object.freeze([...result.mismatches, mismatch]),
397
+ });
398
+ }
399
+ //# sourceMappingURL=replayScenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replayScenario.js","sourceRoot":"","sources":["../../src/testing/replayScenario.ts"],"names":[],"mappings":"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"}