@rezi-ui/core 0.1.0-alpha.60 → 0.1.0-alpha.68

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 (410) hide show
  1. package/dist/app/createApp/breadcrumbs.d.ts +38 -0
  2. package/dist/app/createApp/breadcrumbs.d.ts.map +1 -0
  3. package/dist/app/createApp/breadcrumbs.js +65 -0
  4. package/dist/app/createApp/breadcrumbs.js.map +1 -0
  5. package/dist/app/createApp/config.d.ts +25 -0
  6. package/dist/app/createApp/config.d.ts.map +1 -0
  7. package/dist/app/createApp/config.js +130 -0
  8. package/dist/app/createApp/config.js.map +1 -0
  9. package/dist/app/createApp/eventLoop.d.ts +95 -0
  10. package/dist/app/createApp/eventLoop.d.ts.map +1 -0
  11. package/dist/app/createApp/eventLoop.js +384 -0
  12. package/dist/app/createApp/eventLoop.js.map +1 -0
  13. package/dist/app/createApp/guards.d.ts +21 -0
  14. package/dist/app/createApp/guards.d.ts.map +1 -0
  15. package/dist/app/createApp/guards.js +54 -0
  16. package/dist/app/createApp/guards.js.map +1 -0
  17. package/dist/app/createApp/keybindings.d.ts +28 -0
  18. package/dist/app/createApp/keybindings.d.ts.map +1 -0
  19. package/dist/app/createApp/keybindings.js +113 -0
  20. package/dist/app/createApp/keybindings.js.map +1 -0
  21. package/dist/app/createApp/renderLoop.d.ts +64 -0
  22. package/dist/app/createApp/renderLoop.d.ts.map +1 -0
  23. package/dist/app/createApp/renderLoop.js +305 -0
  24. package/dist/app/createApp/renderLoop.js.map +1 -0
  25. package/dist/app/createApp.d.ts +3 -39
  26. package/dist/app/createApp.d.ts.map +1 -1
  27. package/dist/app/createApp.js +403 -1205
  28. package/dist/app/createApp.js.map +1 -1
  29. package/dist/app/widgetRenderer/constraintState.d.ts +98 -0
  30. package/dist/app/widgetRenderer/constraintState.d.ts.map +1 -0
  31. package/dist/app/widgetRenderer/constraintState.js +563 -0
  32. package/dist/app/widgetRenderer/constraintState.js.map +1 -0
  33. package/dist/app/widgetRenderer/fileNodeCache.d.ts +2 -0
  34. package/dist/app/widgetRenderer/fileNodeCache.d.ts.map +1 -1
  35. package/dist/app/widgetRenderer/fileNodeCache.js +31 -0
  36. package/dist/app/widgetRenderer/fileNodeCache.js.map +1 -1
  37. package/dist/app/widgetRenderer/filePickerRouting.d.ts +12 -1
  38. package/dist/app/widgetRenderer/filePickerRouting.d.ts.map +1 -1
  39. package/dist/app/widgetRenderer/filePickerRouting.js +63 -14
  40. package/dist/app/widgetRenderer/filePickerRouting.js.map +1 -1
  41. package/dist/app/widgetRenderer/focusState.d.ts +46 -0
  42. package/dist/app/widgetRenderer/focusState.d.ts.map +1 -0
  43. package/dist/app/widgetRenderer/focusState.js +122 -0
  44. package/dist/app/widgetRenderer/focusState.js.map +1 -0
  45. package/dist/app/widgetRenderer/keyboardRouting.d.ts.map +1 -1
  46. package/dist/app/widgetRenderer/keyboardRouting.js.map +1 -1
  47. package/dist/app/widgetRenderer/mouseRouting.d.ts +5 -0
  48. package/dist/app/widgetRenderer/mouseRouting.d.ts.map +1 -1
  49. package/dist/app/widgetRenderer/mouseRouting.js +78 -8
  50. package/dist/app/widgetRenderer/mouseRouting.js.map +1 -1
  51. package/dist/app/widgetRenderer/overlayShortcuts.d.ts.map +1 -1
  52. package/dist/app/widgetRenderer/overlayShortcuts.js +14 -4
  53. package/dist/app/widgetRenderer/overlayShortcuts.js.map +1 -1
  54. package/dist/app/widgetRenderer/overlayState.d.ts +198 -0
  55. package/dist/app/widgetRenderer/overlayState.d.ts.map +1 -0
  56. package/dist/app/widgetRenderer/overlayState.js +590 -0
  57. package/dist/app/widgetRenderer/overlayState.js.map +1 -0
  58. package/dist/app/widgetRenderer/routeEngineEvent.d.ts +189 -0
  59. package/dist/app/widgetRenderer/routeEngineEvent.d.ts.map +1 -0
  60. package/dist/app/widgetRenderer/routeEngineEvent.js +527 -0
  61. package/dist/app/widgetRenderer/routeEngineEvent.js.map +1 -0
  62. package/dist/app/widgetRenderer.d.ts +2 -1
  63. package/dist/app/widgetRenderer.d.ts.map +1 -1
  64. package/dist/app/widgetRenderer.js +334 -1707
  65. package/dist/app/widgetRenderer.js.map +1 -1
  66. package/dist/forms/internal/arrayState.d.ts +35 -0
  67. package/dist/forms/internal/arrayState.d.ts.map +1 -0
  68. package/dist/forms/internal/arrayState.js +238 -0
  69. package/dist/forms/internal/arrayState.js.map +1 -0
  70. package/dist/forms/internal/bindings.d.ts +46 -0
  71. package/dist/forms/internal/bindings.d.ts.map +1 -0
  72. package/dist/forms/internal/bindings.js +161 -0
  73. package/dist/forms/internal/bindings.js.map +1 -0
  74. package/dist/forms/internal/dev.d.ts +4 -0
  75. package/dist/forms/internal/dev.d.ts.map +1 -0
  76. package/dist/forms/internal/dev.js +21 -0
  77. package/dist/forms/internal/dev.js.map +1 -0
  78. package/dist/forms/internal/state.d.ts +52 -0
  79. package/dist/forms/internal/state.d.ts.map +1 -0
  80. package/dist/forms/internal/state.js +240 -0
  81. package/dist/forms/internal/state.js.map +1 -0
  82. package/dist/forms/internal/submit.d.ts +43 -0
  83. package/dist/forms/internal/submit.d.ts.map +1 -0
  84. package/dist/forms/internal/submit.js +165 -0
  85. package/dist/forms/internal/submit.js.map +1 -0
  86. package/dist/forms/internal/wizard.d.ts +53 -0
  87. package/dist/forms/internal/wizard.d.ts.map +1 -0
  88. package/dist/forms/internal/wizard.js +311 -0
  89. package/dist/forms/internal/wizard.js.map +1 -0
  90. package/dist/forms/useForm.d.ts.map +1 -1
  91. package/dist/forms/useForm.js +90 -1117
  92. package/dist/forms/useForm.js.map +1 -1
  93. package/dist/index.d.ts +1 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -1
  96. package/dist/index.js.map +1 -1
  97. package/dist/keybindings/manager.d.ts.map +1 -1
  98. package/dist/keybindings/manager.js.map +1 -1
  99. package/dist/keybindings/parser.d.ts.map +1 -1
  100. package/dist/keybindings/parser.js +10 -5
  101. package/dist/keybindings/parser.js.map +1 -1
  102. package/dist/layout/dropdownGeometry.d.ts +8 -0
  103. package/dist/layout/dropdownGeometry.d.ts.map +1 -1
  104. package/dist/layout/dropdownGeometry.js +40 -0
  105. package/dist/layout/dropdownGeometry.js.map +1 -1
  106. package/dist/layout/engine/layoutEngine.js +1 -1
  107. package/dist/layout/engine/layoutEngine.js.map +1 -1
  108. package/dist/layout/kinds/overlays.d.ts.map +1 -1
  109. package/dist/layout/kinds/stack.d.ts +1 -3
  110. package/dist/layout/kinds/stack.d.ts.map +1 -1
  111. package/dist/layout/kinds/stack.js +11 -1523
  112. package/dist/layout/kinds/stack.js.map +1 -1
  113. package/dist/layout/kinds/stackParts/axis.d.ts +32 -0
  114. package/dist/layout/kinds/stackParts/axis.d.ts.map +1 -0
  115. package/dist/layout/kinds/stackParts/axis.js +61 -0
  116. package/dist/layout/kinds/stackParts/axis.js.map +1 -0
  117. package/dist/layout/kinds/stackParts/constraintPlan.d.ts +18 -0
  118. package/dist/layout/kinds/stackParts/constraintPlan.d.ts.map +1 -0
  119. package/dist/layout/kinds/stackParts/constraintPlan.js +434 -0
  120. package/dist/layout/kinds/stackParts/constraintPlan.js.map +1 -0
  121. package/dist/layout/kinds/stackParts/layout.d.ts +6 -0
  122. package/dist/layout/kinds/stackParts/layout.d.ts.map +1 -0
  123. package/dist/layout/kinds/stackParts/layout.js +376 -0
  124. package/dist/layout/kinds/stackParts/layout.js.map +1 -0
  125. package/dist/layout/kinds/stackParts/measure.d.ts +6 -0
  126. package/dist/layout/kinds/stackParts/measure.d.ts.map +1 -0
  127. package/dist/layout/kinds/stackParts/measure.js +212 -0
  128. package/dist/layout/kinds/stackParts/measure.js.map +1 -0
  129. package/dist/layout/kinds/stackParts/shared.d.ts +31 -0
  130. package/dist/layout/kinds/stackParts/shared.d.ts.map +1 -0
  131. package/dist/layout/kinds/stackParts/shared.js +94 -0
  132. package/dist/layout/kinds/stackParts/shared.js.map +1 -0
  133. package/dist/layout/kinds/stackParts/wrap.d.ts +26 -0
  134. package/dist/layout/kinds/stackParts/wrap.d.ts.map +1 -0
  135. package/dist/layout/kinds/stackParts/wrap.js +374 -0
  136. package/dist/layout/kinds/stackParts/wrap.js.map +1 -0
  137. package/dist/layout/validate/interactive.d.ts +106 -0
  138. package/dist/layout/validate/interactive.d.ts.map +1 -0
  139. package/dist/layout/validate/interactive.js +430 -0
  140. package/dist/layout/validate/interactive.js.map +1 -0
  141. package/dist/layout/validate/layoutConstraints.d.ts +51 -0
  142. package/dist/layout/validate/layoutConstraints.d.ts.map +1 -0
  143. package/dist/layout/validate/layoutConstraints.js +100 -0
  144. package/dist/layout/validate/layoutConstraints.js.map +1 -0
  145. package/dist/layout/validate/primitives.d.ts +31 -0
  146. package/dist/layout/validate/primitives.d.ts.map +1 -0
  147. package/dist/layout/validate/primitives.js +299 -0
  148. package/dist/layout/validate/primitives.js.map +1 -0
  149. package/dist/layout/validate/shared.d.ts +23 -0
  150. package/dist/layout/validate/shared.d.ts.map +1 -0
  151. package/dist/layout/validate/shared.js +32 -0
  152. package/dist/layout/validate/shared.js.map +1 -0
  153. package/dist/layout/validate/spacing.d.ts +21 -0
  154. package/dist/layout/validate/spacing.d.ts.map +1 -0
  155. package/dist/layout/validate/spacing.js +33 -0
  156. package/dist/layout/validate/spacing.js.map +1 -0
  157. package/dist/layout/validateProps.d.ts +5 -159
  158. package/dist/layout/validateProps.d.ts.map +1 -1
  159. package/dist/layout/validateProps.js +1 -832
  160. package/dist/layout/validateProps.js.map +1 -1
  161. package/dist/pipeline.d.ts +2 -2
  162. package/dist/pipeline.js +3 -3
  163. package/dist/pipeline.js.map +1 -1
  164. package/dist/renderer/renderToDrawlist/renderTree.d.ts +1 -1
  165. package/dist/renderer/renderToDrawlist/renderTree.d.ts.map +1 -1
  166. package/dist/renderer/renderToDrawlist/renderTree.js +3 -3
  167. package/dist/renderer/renderToDrawlist/renderTree.js.map +1 -1
  168. package/dist/renderer/renderToDrawlist/types.d.ts +2 -0
  169. package/dist/renderer/renderToDrawlist/types.d.ts.map +1 -1
  170. package/dist/renderer/renderToDrawlist/widgets/containers.d.ts.map +1 -1
  171. package/dist/renderer/renderToDrawlist/widgets/containers.js +1 -1
  172. package/dist/renderer/renderToDrawlist/widgets/containers.js.map +1 -1
  173. package/dist/renderer/renderToDrawlist/widgets/files.d.ts +2 -1
  174. package/dist/renderer/renderToDrawlist/widgets/files.d.ts.map +1 -1
  175. package/dist/renderer/renderToDrawlist/widgets/files.js +30 -3
  176. package/dist/renderer/renderToDrawlist/widgets/files.js.map +1 -1
  177. package/dist/renderer/renderToDrawlist/widgets/navigation.d.ts.map +1 -1
  178. package/dist/renderer/renderToDrawlist/widgets/navigation.js +12 -4
  179. package/dist/renderer/renderToDrawlist/widgets/navigation.js.map +1 -1
  180. package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts +1 -1
  181. package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts.map +1 -1
  182. package/dist/renderer/renderToDrawlist/widgets/overlays.js +26 -6
  183. package/dist/renderer/renderToDrawlist/widgets/overlays.js.map +1 -1
  184. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.d.ts.map +1 -1
  185. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js +52 -18
  186. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js.map +1 -1
  187. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.d.ts.map +1 -1
  188. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js +90 -27
  189. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js.map +1 -1
  190. package/dist/renderer/renderToDrawlist.d.ts +0 -8
  191. package/dist/renderer/renderToDrawlist.d.ts.map +1 -1
  192. package/dist/renderer/renderToDrawlist.js +1 -9
  193. package/dist/renderer/renderToDrawlist.js.map +1 -1
  194. package/dist/repro/replay.d.ts +4 -0
  195. package/dist/repro/replay.d.ts.map +1 -1
  196. package/dist/repro/replay.js +17 -2
  197. package/dist/repro/replay.js.map +1 -1
  198. package/dist/runtime/commit/composite.d.ts +11 -0
  199. package/dist/runtime/commit/composite.d.ts.map +1 -0
  200. package/dist/runtime/commit/composite.js +238 -0
  201. package/dist/runtime/commit/composite.js.map +1 -0
  202. package/dist/runtime/commit/container.d.ts +7 -0
  203. package/dist/runtime/commit/container.d.ts.map +1 -0
  204. package/dist/runtime/commit/container.js +350 -0
  205. package/dist/runtime/commit/container.js.map +1 -0
  206. package/dist/runtime/commit/equality.d.ts +20 -0
  207. package/dist/runtime/commit/equality.d.ts.map +1 -0
  208. package/dist/runtime/commit/equality.js +436 -0
  209. package/dist/runtime/commit/equality.js.map +1 -0
  210. package/dist/runtime/commit/errorBoundary.d.ts +7 -0
  211. package/dist/runtime/commit/errorBoundary.d.ts.map +1 -0
  212. package/dist/runtime/commit/errorBoundary.js +53 -0
  213. package/dist/runtime/commit/errorBoundary.js.map +1 -0
  214. package/dist/runtime/commit/shared.d.ts +138 -0
  215. package/dist/runtime/commit/shared.d.ts.map +1 -0
  216. package/dist/runtime/commit/shared.js +11 -0
  217. package/dist/runtime/commit/shared.js.map +1 -0
  218. package/dist/runtime/commit/transitions.d.ts +9 -0
  219. package/dist/runtime/commit/transitions.d.ts.map +1 -0
  220. package/dist/runtime/commit/transitions.js +93 -0
  221. package/dist/runtime/commit/transitions.js.map +1 -0
  222. package/dist/runtime/commit/validation.d.ts +16 -0
  223. package/dist/runtime/commit/validation.d.ts.map +1 -0
  224. package/dist/runtime/commit/validation.js +157 -0
  225. package/dist/runtime/commit/validation.js.map +1 -0
  226. package/dist/runtime/commit.d.ts +7 -117
  227. package/dist/runtime/commit.d.ts.map +1 -1
  228. package/dist/runtime/commit.js +13 -1394
  229. package/dist/runtime/commit.js.map +1 -1
  230. package/dist/runtime/localState.d.ts +4 -0
  231. package/dist/runtime/localState.d.ts.map +1 -1
  232. package/dist/runtime/localState.js.map +1 -1
  233. package/dist/runtime/router/zones.d.ts.map +1 -1
  234. package/dist/runtime/router/zones.js +28 -1
  235. package/dist/runtime/router/zones.js.map +1 -1
  236. package/dist/runtime/widgetMeta/collector.d.ts +77 -0
  237. package/dist/runtime/widgetMeta/collector.d.ts.map +1 -0
  238. package/dist/runtime/widgetMeta/collector.js +293 -0
  239. package/dist/runtime/widgetMeta/collector.js.map +1 -0
  240. package/dist/runtime/widgetMeta/focusContainers.d.ts +44 -0
  241. package/dist/runtime/widgetMeta/focusContainers.d.ts.map +1 -0
  242. package/dist/runtime/widgetMeta/focusContainers.js +190 -0
  243. package/dist/runtime/widgetMeta/focusContainers.js.map +1 -0
  244. package/dist/runtime/widgetMeta/focusInfo.d.ts +19 -0
  245. package/dist/runtime/widgetMeta/focusInfo.d.ts.map +1 -0
  246. package/dist/runtime/widgetMeta/focusInfo.js +172 -0
  247. package/dist/runtime/widgetMeta/focusInfo.js.map +1 -0
  248. package/dist/runtime/widgetMeta/helpers.d.ts +47 -0
  249. package/dist/runtime/widgetMeta/helpers.d.ts.map +1 -0
  250. package/dist/runtime/widgetMeta/helpers.js +182 -0
  251. package/dist/runtime/widgetMeta/helpers.js.map +1 -0
  252. package/dist/runtime/widgetMeta.d.ts +12 -175
  253. package/dist/runtime/widgetMeta.d.ts.map +1 -1
  254. package/dist/runtime/widgetMeta.js +6 -847
  255. package/dist/runtime/widgetMeta.js.map +1 -1
  256. package/dist/testing/assertions.d.ts +7 -0
  257. package/dist/testing/assertions.d.ts.map +1 -0
  258. package/dist/testing/assertions.js +187 -0
  259. package/dist/testing/assertions.js.map +1 -0
  260. package/dist/testing/index.d.ts +11 -0
  261. package/dist/testing/index.d.ts.map +1 -1
  262. package/dist/testing/index.js +11 -0
  263. package/dist/testing/index.js.map +1 -1
  264. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.d.ts +8 -0
  265. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.d.ts.map +1 -0
  266. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.js +79 -0
  267. package/dist/testing/referenceScenarios/inputIncompleteEscapeRecovery.js.map +1 -0
  268. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.d.ts +9 -0
  269. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.d.ts.map +1 -0
  270. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.js +96 -0
  271. package/dist/testing/referenceScenarios/inputIncompletePasteRecovery.js.map +1 -0
  272. package/dist/testing/referenceScenarios/inputModalBlocking.d.ts +9 -0
  273. package/dist/testing/referenceScenarios/inputModalBlocking.d.ts.map +1 -0
  274. package/dist/testing/referenceScenarios/inputModalBlocking.js +172 -0
  275. package/dist/testing/referenceScenarios/inputModalBlocking.js.map +1 -0
  276. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.d.ts +9 -0
  277. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.d.ts.map +1 -0
  278. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.js +102 -0
  279. package/dist/testing/referenceScenarios/inputMouseCapabilityFallback.js.map +1 -0
  280. package/dist/testing/referenceScenarios/selectKeyboardCycler.d.ts +8 -0
  281. package/dist/testing/referenceScenarios/selectKeyboardCycler.d.ts.map +1 -0
  282. package/dist/testing/referenceScenarios/selectKeyboardCycler.js +115 -0
  283. package/dist/testing/referenceScenarios/selectKeyboardCycler.js.map +1 -0
  284. package/dist/testing/referenceScenarios/textareaMultilineEditing.d.ts +8 -0
  285. package/dist/testing/referenceScenarios/textareaMultilineEditing.d.ts.map +1 -0
  286. package/dist/testing/referenceScenarios/textareaMultilineEditing.js +100 -0
  287. package/dist/testing/referenceScenarios/textareaMultilineEditing.js.map +1 -0
  288. package/dist/testing/referenceScenarios/virtualListResizeStorm.d.ts +8 -0
  289. package/dist/testing/referenceScenarios/virtualListResizeStorm.d.ts.map +1 -0
  290. package/dist/testing/referenceScenarios/virtualListResizeStorm.js +88 -0
  291. package/dist/testing/referenceScenarios/virtualListResizeStorm.js.map +1 -0
  292. package/dist/testing/replayScenario.d.ts +6 -0
  293. package/dist/testing/replayScenario.d.ts.map +1 -0
  294. package/dist/testing/replayScenario.js +399 -0
  295. package/dist/testing/replayScenario.js.map +1 -0
  296. package/dist/testing/scenario.d.ts +145 -0
  297. package/dist/testing/scenario.d.ts.map +1 -0
  298. package/dist/testing/scenario.js +57 -0
  299. package/dist/testing/scenario.js.map +1 -0
  300. package/dist/testing/semanticScenario.d.ts +6 -0
  301. package/dist/testing/semanticScenario.d.ts.map +1 -0
  302. package/dist/testing/semanticScenario.js +347 -0
  303. package/dist/testing/semanticScenario.js.map +1 -0
  304. package/dist/ui/capabilities.d.ts.map +1 -1
  305. package/dist/ui/designTokens.d.ts.map +1 -1
  306. package/dist/widgets/accordion.d.ts.map +1 -1
  307. package/dist/widgets/accordion.js +8 -13
  308. package/dist/widgets/accordion.js.map +1 -1
  309. package/dist/widgets/breadcrumb.d.ts.map +1 -1
  310. package/dist/widgets/breadcrumb.js +1 -12
  311. package/dist/widgets/breadcrumb.js.map +1 -1
  312. package/dist/widgets/factories/advanced.d.ts +20 -0
  313. package/dist/widgets/factories/advanced.d.ts.map +1 -0
  314. package/dist/widgets/factories/advanced.js +75 -0
  315. package/dist/widgets/factories/advanced.js.map +1 -0
  316. package/dist/widgets/factories/basic.d.ts +14 -0
  317. package/dist/widgets/factories/basic.d.ts.map +1 -0
  318. package/dist/widgets/factories/basic.js +44 -0
  319. package/dist/widgets/factories/basic.js.map +1 -0
  320. package/dist/widgets/factories/feedback.d.ts +20 -0
  321. package/dist/widgets/factories/feedback.d.ts.map +1 -0
  322. package/dist/widgets/factories/feedback.js +102 -0
  323. package/dist/widgets/factories/feedback.js.map +1 -0
  324. package/dist/widgets/factories/helpers.d.ts +41 -0
  325. package/dist/widgets/factories/helpers.d.ts.map +1 -0
  326. package/dist/widgets/factories/helpers.js +72 -0
  327. package/dist/widgets/factories/helpers.js.map +1 -0
  328. package/dist/widgets/factories/interactive.d.ts +15 -0
  329. package/dist/widgets/factories/interactive.d.ts.map +1 -0
  330. package/dist/widgets/factories/interactive.js +46 -0
  331. package/dist/widgets/factories/interactive.js.map +1 -0
  332. package/dist/widgets/factories/layoutShell.d.ts +22 -0
  333. package/dist/widgets/factories/layoutShell.d.ts.map +1 -0
  334. package/dist/widgets/factories/layoutShell.js +190 -0
  335. package/dist/widgets/factories/layoutShell.js.map +1 -0
  336. package/dist/widgets/factories/media.d.ts +14 -0
  337. package/dist/widgets/factories/media.d.ts.map +1 -0
  338. package/dist/widgets/factories/media.js +25 -0
  339. package/dist/widgets/factories/media.js.map +1 -0
  340. package/dist/widgets/factories/navigation.d.ts +10 -0
  341. package/dist/widgets/factories/navigation.d.ts.map +1 -0
  342. package/dist/widgets/factories/navigation.js +24 -0
  343. package/dist/widgets/factories/navigation.js.map +1 -0
  344. package/dist/widgets/field.d.ts +6 -1
  345. package/dist/widgets/field.d.ts.map +1 -1
  346. package/dist/widgets/field.js +8 -2
  347. package/dist/widgets/field.js.map +1 -1
  348. package/dist/widgets/filePicker.d.ts +5 -0
  349. package/dist/widgets/filePicker.d.ts.map +1 -0
  350. package/dist/widgets/filePicker.js +136 -0
  351. package/dist/widgets/filePicker.js.map +1 -0
  352. package/dist/widgets/protocol.d.ts +0 -6
  353. package/dist/widgets/protocol.d.ts.map +1 -1
  354. package/dist/widgets/protocol.js +0 -6
  355. package/dist/widgets/protocol.js.map +1 -1
  356. package/dist/widgets/select.js +1 -1
  357. package/dist/widgets/select.js.map +1 -1
  358. package/dist/widgets/splitPane.d.ts.map +1 -1
  359. package/dist/widgets/splitPane.js.map +1 -1
  360. package/dist/widgets/table.d.ts.map +1 -1
  361. package/dist/widgets/table.js +43 -1
  362. package/dist/widgets/table.js.map +1 -1
  363. package/dist/widgets/tree.d.ts.map +1 -1
  364. package/dist/widgets/types/advanced.d.ts +611 -0
  365. package/dist/widgets/types/advanced.d.ts.map +1 -0
  366. package/dist/widgets/types/advanced.js +2 -0
  367. package/dist/widgets/types/advanced.js.map +1 -0
  368. package/dist/widgets/types/base.d.ts +931 -0
  369. package/dist/widgets/types/base.d.ts.map +1 -0
  370. package/dist/widgets/types/base.js +2 -0
  371. package/dist/widgets/types/base.js.map +1 -0
  372. package/dist/widgets/types/forms.d.ts +136 -0
  373. package/dist/widgets/types/forms.d.ts.map +1 -0
  374. package/dist/widgets/types/forms.js +2 -0
  375. package/dist/widgets/types/forms.js.map +1 -0
  376. package/dist/widgets/types/navigation.d.ts +83 -0
  377. package/dist/widgets/types/navigation.d.ts.map +1 -0
  378. package/dist/widgets/types/navigation.js +2 -0
  379. package/dist/widgets/types/navigation.js.map +1 -0
  380. package/dist/widgets/types/overlaysShell.d.ts +223 -0
  381. package/dist/widgets/types/overlaysShell.d.ts.map +1 -0
  382. package/dist/widgets/types/overlaysShell.js +2 -0
  383. package/dist/widgets/types/overlaysShell.js.map +1 -0
  384. package/dist/widgets/types/table.d.ts +104 -0
  385. package/dist/widgets/types/table.d.ts.map +1 -0
  386. package/dist/widgets/types/table.js +2 -0
  387. package/dist/widgets/types/table.js.map +1 -0
  388. package/dist/widgets/types/tree.d.ts +64 -0
  389. package/dist/widgets/types/tree.d.ts.map +1 -0
  390. package/dist/widgets/types/tree.js +2 -0
  391. package/dist/widgets/types/tree.js.map +1 -0
  392. package/dist/widgets/types.d.ts +14 -2123
  393. package/dist/widgets/types.d.ts.map +1 -1
  394. package/dist/widgets/ui.d.ts +37 -843
  395. package/dist/widgets/ui.d.ts.map +1 -1
  396. package/dist/widgets/ui.js +37 -1262
  397. package/dist/widgets/ui.js.map +1 -1
  398. package/package.json +2 -2
  399. package/dist/constraints/aggregation.d.ts +0 -17
  400. package/dist/constraints/aggregation.d.ts.map +0 -1
  401. package/dist/constraints/aggregation.js +0 -59
  402. package/dist/constraints/aggregation.js.map +0 -1
  403. package/dist/renderer/renderToDrawlist/overflowCulling.d.ts +0 -3
  404. package/dist/renderer/renderToDrawlist/overflowCulling.d.ts.map +0 -1
  405. package/dist/renderer/renderToDrawlist/overflowCulling.js +0 -81
  406. package/dist/renderer/renderToDrawlist/overflowCulling.js.map +0 -1
  407. package/dist/widgets/tests/protocol.test.d.ts +0 -2
  408. package/dist/widgets/tests/protocol.test.d.ts.map +0 -1
  409. package/dist/widgets/tests/protocol.test.js +0 -120
  410. package/dist/widgets/tests/protocol.test.js.map +0 -1
@@ -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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"}
@@ -0,0 +1,145 @@
1
+ import type { CursorShape } from "../abi.js";
2
+ import type { App } from "../app/types.js";
3
+ import type { RoutedAction } from "../runtime/router/types.js";
4
+ import type { ThemeDefinition } from "../theme/tokens.js";
5
+ import type { VNode } from "../widgets/types.js";
6
+ export type ScenarioWidgetFamily = "input-textarea" | "select-dropdown" | "modal-overlay-dialog" | "table-tree-virtual-list";
7
+ export type ScenarioColorMode = "none" | "16" | "256" | "truecolor";
8
+ export type ScenarioTheme = Readonly<{
9
+ mode: "named";
10
+ value: "default";
11
+ }>;
12
+ export type ScenarioKeyMod = "shift" | "ctrl" | "alt" | "meta";
13
+ export type ScenarioCapabilityProfile = Readonly<{
14
+ supportsMouse: boolean;
15
+ supportsBracketedPaste: boolean;
16
+ supportsFocusEvents: boolean;
17
+ supportsOsc52: boolean;
18
+ colorMode: ScenarioColorMode;
19
+ }>;
20
+ export type ScenarioScriptedInputEvent = Readonly<{
21
+ kind: "text";
22
+ text: string;
23
+ }> | Readonly<{
24
+ kind: "paste";
25
+ text: string;
26
+ }> | Readonly<{
27
+ kind: "resize";
28
+ cols: number;
29
+ rows: number;
30
+ }> | Readonly<{
31
+ kind: "terminalBytes";
32
+ bytes: string;
33
+ }> | Readonly<{
34
+ kind: "key";
35
+ key: string | number;
36
+ mods?: readonly ScenarioKeyMod[];
37
+ }>;
38
+ export type ScenarioScriptedInputStep = Readonly<{
39
+ atMs: number;
40
+ event: ScenarioScriptedInputEvent;
41
+ }>;
42
+ export type ScenarioExpectedAction = RoutedAction;
43
+ export type ScenarioScreenRegionAssertion = Readonly<{
44
+ x: number;
45
+ y: number;
46
+ width: number;
47
+ height: number;
48
+ match?: "exact" | "includes";
49
+ text: string | readonly string[];
50
+ }>;
51
+ export type ScenarioCursorAssertion = Readonly<{
52
+ visible: false;
53
+ shape: CursorShape;
54
+ blink: boolean;
55
+ }> | Readonly<{
56
+ visible: true;
57
+ x: number;
58
+ y: number;
59
+ shape: CursorShape;
60
+ blink: boolean;
61
+ }>;
62
+ export type ScenarioInvariantAssertion = Readonly<{
63
+ kind: "action_absence";
64
+ action: Readonly<{
65
+ id?: string;
66
+ action?: RoutedAction["action"];
67
+ payloadSubset?: Readonly<Record<string, unknown>>;
68
+ }>;
69
+ }>;
70
+ export type ScenarioScreenCheckpoint = Readonly<{
71
+ id: string;
72
+ afterStep: number;
73
+ assertionRef: "screen_region_assertion";
74
+ args: ScenarioScreenRegionAssertion;
75
+ }>;
76
+ export type ScenarioInvariant = Readonly<{
77
+ id: string;
78
+ assertionRef: "invariant_assertion";
79
+ args: ScenarioInvariantAssertion;
80
+ }>;
81
+ export type ScenarioDefinition = Readonly<{
82
+ schemaVersion: 1;
83
+ id: string;
84
+ title: string;
85
+ widgetFamily: ScenarioWidgetFamily;
86
+ behaviorStatement: string;
87
+ evidenceRefs: readonly string[];
88
+ viewport: Readonly<{
89
+ cols: number;
90
+ rows: number;
91
+ }>;
92
+ theme: ScenarioTheme;
93
+ capabilityProfile: ScenarioCapabilityProfile;
94
+ scriptedInput: readonly ScenarioScriptedInputStep[];
95
+ expectedActions?: readonly ScenarioExpectedAction[];
96
+ expectedScreenCheckpoints: readonly ScenarioScreenCheckpoint[];
97
+ expectedCursorState?: ScenarioCursorAssertion;
98
+ invariants: readonly ScenarioInvariant[];
99
+ fidelityRequirement: "semantic-only" | "terminal-real";
100
+ notes?: string;
101
+ unresolvedAssumptions?: readonly string[];
102
+ }>;
103
+ export type ScenarioScreenSnapshot = Readonly<{
104
+ cols: number;
105
+ rows: number;
106
+ lines: readonly string[];
107
+ }>;
108
+ export type ScenarioCursorSnapshot = ScenarioCursorAssertion;
109
+ export type ScenarioStepObservation = Readonly<{
110
+ step: number;
111
+ screen: ScenarioScreenSnapshot;
112
+ cursor: ScenarioCursorSnapshot | null;
113
+ actions: readonly ScenarioExpectedAction[];
114
+ }>;
115
+ export type ScenarioMismatchCode = "ZR_SCENARIO_INVALID" | "ZR_SCENARIO_UNSUPPORTED" | "ZR_SCENARIO_ACTION_COUNT_MISMATCH" | "ZR_SCENARIO_ACTION_MISMATCH" | "ZR_SCENARIO_SCREEN_MISMATCH" | "ZR_SCENARIO_CURSOR_MISMATCH" | "ZR_SCENARIO_INVARIANT_MISMATCH" | "ZR_SCENARIO_RUNTIME_FATAL";
116
+ export type ScenarioMismatch = Readonly<{
117
+ code: ScenarioMismatchCode;
118
+ path: string;
119
+ detail: string;
120
+ expected?: unknown;
121
+ actual?: unknown;
122
+ }>;
123
+ export type ScenarioRunResult = Readonly<{
124
+ mode: "semantic" | "replay" | "pty";
125
+ status: "PASS" | "FAIL";
126
+ pass: boolean;
127
+ actions: readonly ScenarioExpectedAction[];
128
+ steps: readonly ScenarioStepObservation[];
129
+ finalScreen: ScenarioScreenSnapshot;
130
+ finalCursor: ScenarioCursorSnapshot | null;
131
+ mismatches: readonly ScenarioMismatch[];
132
+ }>;
133
+ export type ScenarioFixture<S> = Readonly<{
134
+ initialState: S;
135
+ theme?: ThemeDefinition;
136
+ setup?: (app: App<S>) => void;
137
+ view: (state: S) => VNode;
138
+ }>;
139
+ export type ScenarioFixtureFactory<S> = () => ScenarioFixture<S>;
140
+ export declare function createScenarioScreenSnapshot(viewport: Readonly<{
141
+ cols: number;
142
+ rows: number;
143
+ }>, text: string): ScenarioScreenSnapshot;
144
+ export declare function validateScenarioDefinition(scenario: ScenarioDefinition): readonly ScenarioMismatch[];
145
+ //# sourceMappingURL=scenario.d.ts.map