@rezi-ui/core 0.1.0-alpha.34 → 0.1.0-alpha.36

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 (191) hide show
  1. package/dist/animation/interpolate.d.ts +5 -0
  2. package/dist/animation/interpolate.d.ts.map +1 -1
  3. package/dist/animation/interpolate.js +30 -0
  4. package/dist/animation/interpolate.js.map +1 -1
  5. package/dist/animation/timeline.d.ts.map +1 -1
  6. package/dist/animation/timeline.js +1 -3
  7. package/dist/animation/timeline.js.map +1 -1
  8. package/dist/animation/types.d.ts +17 -0
  9. package/dist/animation/types.d.ts.map +1 -1
  10. package/dist/app/createApp.d.ts +1 -1
  11. package/dist/app/createApp.d.ts.map +1 -1
  12. package/dist/app/createApp.js +91 -26
  13. package/dist/app/createApp.js.map +1 -1
  14. package/dist/app/rawRenderer.d.ts +1 -1
  15. package/dist/app/rawRenderer.d.ts.map +1 -1
  16. package/dist/app/rawRenderer.js +9 -7
  17. package/dist/app/rawRenderer.js.map +1 -1
  18. package/dist/app/runtimeBreadcrumbs.d.ts +1 -1
  19. package/dist/app/runtimeBreadcrumbs.d.ts.map +1 -1
  20. package/dist/app/types.d.ts +2 -1
  21. package/dist/app/types.d.ts.map +1 -1
  22. package/dist/app/widgetRenderer/animationTracks.d.ts +43 -2
  23. package/dist/app/widgetRenderer/animationTracks.d.ts.map +1 -1
  24. package/dist/app/widgetRenderer/animationTracks.js +83 -3
  25. package/dist/app/widgetRenderer/animationTracks.js.map +1 -1
  26. package/dist/app/widgetRenderer/cursorBreadcrumbs.d.ts +1 -2
  27. package/dist/app/widgetRenderer/cursorBreadcrumbs.d.ts.map +1 -1
  28. package/dist/app/widgetRenderer/cursorBreadcrumbs.js +16 -43
  29. package/dist/app/widgetRenderer/cursorBreadcrumbs.js.map +1 -1
  30. package/dist/app/widgetRenderer/damageTracking.d.ts +1 -0
  31. package/dist/app/widgetRenderer/damageTracking.d.ts.map +1 -1
  32. package/dist/app/widgetRenderer/damageTracking.js +2 -0
  33. package/dist/app/widgetRenderer/damageTracking.js.map +1 -1
  34. package/dist/app/widgetRenderer/submitFramePipeline.d.ts.map +1 -1
  35. package/dist/app/widgetRenderer/submitFramePipeline.js +277 -0
  36. package/dist/app/widgetRenderer/submitFramePipeline.js.map +1 -1
  37. package/dist/app/widgetRenderer.d.ts +17 -8
  38. package/dist/app/widgetRenderer.d.ts.map +1 -1
  39. package/dist/app/widgetRenderer.js +177 -80
  40. package/dist/app/widgetRenderer.js.map +1 -1
  41. package/dist/backend.d.ts +0 -5
  42. package/dist/backend.d.ts.map +1 -1
  43. package/dist/backend.js +0 -5
  44. package/dist/backend.js.map +1 -1
  45. package/dist/index.d.ts +8 -5
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +5 -3
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout/constraints.d.ts +15 -2
  50. package/dist/layout/constraints.d.ts.map +1 -1
  51. package/dist/layout/constraints.js +94 -4
  52. package/dist/layout/constraints.js.map +1 -1
  53. package/dist/layout/engine/distributeInteger.d.ts +9 -0
  54. package/dist/layout/engine/distributeInteger.d.ts.map +1 -0
  55. package/dist/layout/engine/distributeInteger.js +62 -0
  56. package/dist/layout/engine/distributeInteger.js.map +1 -0
  57. package/dist/layout/engine/flex.d.ts +14 -0
  58. package/dist/layout/engine/flex.d.ts.map +1 -1
  59. package/dist/layout/engine/flex.js +144 -1
  60. package/dist/layout/engine/flex.js.map +1 -1
  61. package/dist/layout/engine/guards.d.ts +8 -0
  62. package/dist/layout/engine/guards.d.ts.map +1 -1
  63. package/dist/layout/engine/guards.js +6 -0
  64. package/dist/layout/engine/guards.js.map +1 -1
  65. package/dist/layout/engine/intrinsic.d.ts +8 -0
  66. package/dist/layout/engine/intrinsic.d.ts.map +1 -0
  67. package/dist/layout/engine/intrinsic.js +383 -0
  68. package/dist/layout/engine/intrinsic.js.map +1 -0
  69. package/dist/layout/engine/layoutEngine.d.ts.map +1 -1
  70. package/dist/layout/engine/layoutEngine.js +78 -2
  71. package/dist/layout/engine/layoutEngine.js.map +1 -1
  72. package/dist/layout/kinds/box.d.ts +1 -1
  73. package/dist/layout/kinds/box.d.ts.map +1 -1
  74. package/dist/layout/kinds/box.js +48 -8
  75. package/dist/layout/kinds/box.js.map +1 -1
  76. package/dist/layout/kinds/grid.d.ts.map +1 -1
  77. package/dist/layout/kinds/grid.js +230 -29
  78. package/dist/layout/kinds/grid.js.map +1 -1
  79. package/dist/layout/kinds/leaf.d.ts.map +1 -1
  80. package/dist/layout/kinds/leaf.js +7 -2
  81. package/dist/layout/kinds/leaf.js.map +1 -1
  82. package/dist/layout/kinds/overlays.d.ts.map +1 -1
  83. package/dist/layout/kinds/overlays.js +28 -8
  84. package/dist/layout/kinds/overlays.js.map +1 -1
  85. package/dist/layout/kinds/stack.d.ts.map +1 -1
  86. package/dist/layout/kinds/stack.js +606 -218
  87. package/dist/layout/kinds/stack.js.map +1 -1
  88. package/dist/layout/responsive.d.ts +13 -1
  89. package/dist/layout/responsive.d.ts.map +1 -1
  90. package/dist/layout/responsive.js +60 -1
  91. package/dist/layout/responsive.js.map +1 -1
  92. package/dist/layout/textMeasure.d.ts +15 -0
  93. package/dist/layout/textMeasure.d.ts.map +1 -1
  94. package/dist/layout/textMeasure.js +116 -0
  95. package/dist/layout/textMeasure.js.map +1 -1
  96. package/dist/layout/types.d.ts +24 -0
  97. package/dist/layout/types.d.ts.map +1 -1
  98. package/dist/layout/validateProps.d.ts +14 -0
  99. package/dist/layout/validateProps.d.ts.map +1 -1
  100. package/dist/layout/validateProps.js +121 -1
  101. package/dist/layout/validateProps.js.map +1 -1
  102. package/dist/renderer/renderToDrawlist/renderTree.d.ts.map +1 -1
  103. package/dist/renderer/renderToDrawlist/renderTree.js +32 -2
  104. package/dist/renderer/renderToDrawlist/renderTree.js.map +1 -1
  105. package/dist/renderer/renderToDrawlist/themeTokens.d.ts +2 -15
  106. package/dist/renderer/renderToDrawlist/themeTokens.d.ts.map +1 -1
  107. package/dist/renderer/renderToDrawlist/themeTokens.js +2 -74
  108. package/dist/renderer/renderToDrawlist/themeTokens.js.map +1 -1
  109. package/dist/renderer/renderToDrawlist/types.d.ts +2 -2
  110. package/dist/renderer/renderToDrawlist/types.d.ts.map +1 -1
  111. package/dist/renderer/renderToDrawlist/widgets/basic.d.ts.map +1 -1
  112. package/dist/renderer/renderToDrawlist/widgets/basic.js +23 -2
  113. package/dist/renderer/renderToDrawlist/widgets/basic.js.map +1 -1
  114. package/dist/renderer/renderToDrawlist/widgets/collections.d.ts.map +1 -1
  115. package/dist/renderer/renderToDrawlist/widgets/collections.js +56 -4
  116. package/dist/renderer/renderToDrawlist/widgets/collections.js.map +1 -1
  117. package/dist/renderer/renderToDrawlist/widgets/editors.js +1 -1
  118. package/dist/renderer/renderToDrawlist/widgets/editors.js.map +1 -1
  119. package/dist/renderer/renderToDrawlist/widgets/navigation.d.ts +2 -1
  120. package/dist/renderer/renderToDrawlist/widgets/navigation.d.ts.map +1 -1
  121. package/dist/renderer/renderToDrawlist/widgets/navigation.js +171 -3
  122. package/dist/renderer/renderToDrawlist/widgets/navigation.js.map +1 -1
  123. package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts.map +1 -1
  124. package/dist/renderer/renderToDrawlist/widgets/overlays.js +85 -27
  125. package/dist/renderer/renderToDrawlist/widgets/overlays.js.map +1 -1
  126. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js +1 -1
  127. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js.map +1 -1
  128. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.d.ts.map +1 -1
  129. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js +64 -1
  130. package/dist/renderer/renderToDrawlist/widgets/renderTextWidgets.js.map +1 -1
  131. package/dist/renderer/renderToDrawlist.d.ts +1 -1
  132. package/dist/renderer/renderToDrawlist.js +6 -6
  133. package/dist/renderer/renderToDrawlist.js.map +1 -1
  134. package/dist/repro/replay.d.ts.map +1 -1
  135. package/dist/repro/replay.js +1 -8
  136. package/dist/repro/replay.js.map +1 -1
  137. package/dist/repro/schema.js +2 -2
  138. package/dist/repro/schema.js.map +1 -1
  139. package/dist/repro/types.d.ts +2 -2
  140. package/dist/repro/types.d.ts.map +1 -1
  141. package/dist/runtime/commit.d.ts +17 -1
  142. package/dist/runtime/commit.d.ts.map +1 -1
  143. package/dist/runtime/commit.js +291 -121
  144. package/dist/runtime/commit.js.map +1 -1
  145. package/dist/terminalCaps.d.ts +2 -2
  146. package/dist/terminalCaps.d.ts.map +1 -1
  147. package/dist/terminalCaps.js +2 -3
  148. package/dist/terminalCaps.js.map +1 -1
  149. package/dist/theme/blend.d.ts +6 -0
  150. package/dist/theme/blend.d.ts.map +1 -0
  151. package/dist/theme/blend.js +15 -0
  152. package/dist/theme/blend.js.map +1 -0
  153. package/dist/theme/extract.d.ts +8 -0
  154. package/dist/theme/extract.d.ts.map +1 -0
  155. package/dist/theme/extract.js +71 -0
  156. package/dist/theme/extract.js.map +1 -0
  157. package/dist/ui/designTokens.d.ts +3 -2
  158. package/dist/ui/designTokens.d.ts.map +1 -1
  159. package/dist/ui/designTokens.js +12 -1
  160. package/dist/ui/designTokens.js.map +1 -1
  161. package/dist/ui/index.d.ts +1 -1
  162. package/dist/ui/index.d.ts.map +1 -1
  163. package/dist/ui/index.js +1 -1
  164. package/dist/ui/index.js.map +1 -1
  165. package/dist/ui/recipes.d.ts +154 -1
  166. package/dist/ui/recipes.d.ts.map +1 -1
  167. package/dist/ui/recipes.js +520 -12
  168. package/dist/ui/recipes.js.map +1 -1
  169. package/dist/widgets/composition.d.ts +8 -2
  170. package/dist/widgets/composition.d.ts.map +1 -1
  171. package/dist/widgets/composition.js +3 -2
  172. package/dist/widgets/composition.js.map +1 -1
  173. package/dist/widgets/hooks/animation.d.ts +41 -0
  174. package/dist/widgets/hooks/animation.d.ts.map +1 -1
  175. package/dist/widgets/hooks/animation.js +549 -96
  176. package/dist/widgets/hooks/animation.js.map +1 -1
  177. package/dist/widgets/protocol.d.ts.map +1 -1
  178. package/dist/widgets/protocol.js +1 -0
  179. package/dist/widgets/protocol.js.map +1 -1
  180. package/dist/widgets/splitPane.d.ts.map +1 -1
  181. package/dist/widgets/splitPane.js +17 -6
  182. package/dist/widgets/splitPane.js.map +1 -1
  183. package/dist/widgets/tests/protocol.test.js +1 -0
  184. package/dist/widgets/tests/protocol.test.js.map +1 -1
  185. package/dist/widgets/types.d.ts +89 -2
  186. package/dist/widgets/types.d.ts.map +1 -1
  187. package/dist/widgets/ui.d.ts +3 -0
  188. package/dist/widgets/ui.d.ts.map +1 -1
  189. package/dist/widgets/ui.js +6 -1
  190. package/dist/widgets/ui.js.map +1 -1
  191. package/package.json +2 -2
@@ -1,10 +1,15 @@
1
1
  /**
2
2
  * packages/core/src/animation/interpolate.ts — Primitive interpolation helpers.
3
3
  */
4
+ import type { Rgb } from "../widgets/style.js";
4
5
  /** Clamp a number into [0, 1]. */
5
6
  export declare function clamp01(value: number): number;
6
7
  /** Clamp an animation duration to a safe, non-negative integer in milliseconds. */
7
8
  export declare function normalizeDurationMs(durationMs: number | undefined, fallbackMs: number): number;
8
9
  /** Linear interpolation between two numeric values. */
9
10
  export declare function interpolateNumber(from: number, to: number, t: number): number;
11
+ /** Linear interpolation between two RGB colors. */
12
+ export declare function interpolateRgb(from: Rgb, to: Rgb, t: number): Rgb;
13
+ /** Generate `steps` RGB samples between two colors (inclusive endpoints). */
14
+ export declare function interpolateRgbArray(from: Rgb, to: Rgb, steps: number): readonly Rgb[];
10
15
  //# sourceMappingURL=interpolate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/animation/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kCAAkC;AAClC,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E"}
1
+ {"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/animation/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE/C,kCAAkC;AAClC,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E;AASD,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,CAMjE;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,EAAE,CASrF"}
@@ -23,4 +23,34 @@ export function normalizeDurationMs(durationMs, fallbackMs) {
23
23
  export function interpolateNumber(from, to, t) {
24
24
  return from + (to - from) * clamp01(t);
25
25
  }
26
+ function clampRgbChannel(channel) {
27
+ if (!Number.isFinite(channel))
28
+ return 0;
29
+ if (channel <= 0)
30
+ return 0;
31
+ if (channel >= 255)
32
+ return 255;
33
+ return Math.round(channel);
34
+ }
35
+ /** Linear interpolation between two RGB colors. */
36
+ export function interpolateRgb(from, to, t) {
37
+ return Object.freeze({
38
+ r: clampRgbChannel(interpolateNumber(from.r, to.r, t)),
39
+ g: clampRgbChannel(interpolateNumber(from.g, to.g, t)),
40
+ b: clampRgbChannel(interpolateNumber(from.b, to.b, t)),
41
+ });
42
+ }
43
+ /** Generate `steps` RGB samples between two colors (inclusive endpoints). */
44
+ export function interpolateRgbArray(from, to, steps) {
45
+ const count = Math.max(0, Math.trunc(steps));
46
+ if (count <= 0)
47
+ return Object.freeze([]);
48
+ if (count === 1)
49
+ return Object.freeze([interpolateRgb(from, to, 0)]);
50
+ const samples = new Array(count);
51
+ for (let i = 0; i < count; i++) {
52
+ samples[i] = interpolateRgb(from, to, i / (count - 1));
53
+ }
54
+ return Object.freeze(samples);
55
+ }
26
56
  //# sourceMappingURL=interpolate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/animation/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kCAAkC;AAClC,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,UAA8B,EAAE,UAAkB;IACpF,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,EAAU,EAAE,CAAS;IACnE,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/animation/interpolate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,kCAAkC;AAClC,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,UAA8B,EAAE,UAAkB;IACpF,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,EAAU,EAAE,CAAS;IACnE,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,IAAI,OAAO,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc,CAAC,IAAS,EAAE,EAAO,EAAE,CAAS;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,IAAS,EAAE,EAAO,EAAE,KAAa;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAU,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/animation/timeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhF,KAAK,eAAe,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC,CAAC;AAgBH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,QAAQ,GAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAM,GACnE,kBAAkB,CA4CpB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,GACZ,cAAc,CAwChB"}
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/animation/timeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhF,KAAK,eAAe,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC,CAAC;AAgBH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,QAAQ,GAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAM,GACnE,kBAAkB,CA4CpB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,GACZ,cAAc,CAsChB"}
@@ -64,9 +64,7 @@ export function sampleSequence(sequence, elapsedMs, loop) {
64
64
  done: true,
65
65
  });
66
66
  }
67
- const normalizedElapsedMs = loop
68
- ? ((Math.max(0, elapsedMs) % total) + total) % total
69
- : Math.max(0, elapsedMs);
67
+ const normalizedElapsedMs = loop ? ((elapsedMs % total) + total) % total : Math.max(0, elapsedMs);
70
68
  let cursor = 0;
71
69
  for (let i = 0; i < sequence.segments.length; i++) {
72
70
  const seg = sequence.segments[i];
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/animation/timeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/animation/timeline.ts"],"names":[],"mappings":"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"}
@@ -10,17 +10,32 @@ export type EasingFunction = (t: number) => number;
10
10
  export type EasingName = "linear" | "easeInQuad" | "easeOutQuad" | "easeInOutQuad" | "easeInCubic" | "easeOutCubic" | "easeInOutCubic" | "easeInExpo" | "easeOutExpo" | "easeInOutExpo" | "easeInBack" | "easeOutBack" | "easeInOutBack" | "easeOutBounce" | "easeInBounce";
11
11
  /** Easing value accepted by transition APIs. */
12
12
  export type EasingInput = EasingName | EasingFunction;
13
+ /** Playback controls for time-based animation hooks. */
14
+ export type PlaybackControl = Readonly<{
15
+ /** Freeze animation at the current sampled value. */
16
+ paused?: boolean;
17
+ /** Run animation time backwards. */
18
+ reversed?: boolean;
19
+ /** Playback rate multiplier. */
20
+ rate?: number;
21
+ }>;
13
22
  /** Time-based interpolation configuration. */
14
23
  export type TransitionConfig = Readonly<{
24
+ /** Delay before animation starts in milliseconds. */
25
+ delay?: number;
15
26
  /** Transition duration in milliseconds. */
16
27
  duration?: number;
17
28
  /** Easing curve name or custom easing function. */
18
29
  easing?: EasingInput;
30
+ /** Optional playback controls for pause/reverse/rate. */
31
+ playback?: PlaybackControl;
19
32
  /** Called when the transition reaches the target value. */
20
33
  onComplete?: () => void;
21
34
  }>;
22
35
  /** Spring simulation configuration. */
23
36
  export type SpringConfig = Readonly<{
37
+ /** Delay before spring simulation starts in milliseconds. */
38
+ delay?: number;
24
39
  /** Hooke spring constant. Larger values snap faster. */
25
40
  stiffness?: number;
26
41
  /** Velocity damping factor. Larger values reduce oscillation. */
@@ -60,6 +75,8 @@ export type SequenceConfig = Readonly<{
60
75
  duration?: number;
61
76
  /** Default easing for segments without per-keyframe easing. */
62
77
  easing?: EasingInput;
78
+ /** Optional playback controls for pause/reverse/rate. */
79
+ playback?: PlaybackControl;
63
80
  /** Loop sequence timeline when it reaches the end. */
64
81
  loop?: boolean;
65
82
  /** Called when the sequence reaches the final keyframe (when not looping). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/animation/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,eAAe,GACf,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,eAAe,GACf,YAAY,GACZ,aAAa,GACb,eAAe,GACf,eAAe,GACf,cAAc,CAAC;AAEnB,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;AAEtD,8CAA8C;AAC9C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,+DAA+D;AAC/D,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,QAAQ,CAAC;IACP,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC,CAAC;AAEP,uCAAuC;AACvC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,8CAA8C;AAC9C,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/animation/types.ts"],"names":[],"mappings":"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"}
@@ -34,11 +34,11 @@ type ResolvedAppConfig = Readonly<{
34
34
  maxDrawlistBytes: number;
35
35
  rootPadding: number;
36
36
  breakpointThresholds: ResponsiveBreakpointThresholds;
37
- useV2Cursor: boolean;
38
37
  drawlistValidateParams: boolean;
39
38
  drawlistReuseOutputBuffer: boolean;
40
39
  drawlistEncodedStringCacheCap: number;
41
40
  maxFramesInFlight: number;
41
+ themeTransitionFrames: number;
42
42
  internal_onRender?: ((metrics: AppRenderMetrics) => void) | undefined;
43
43
  internal_onLayout?: ((snapshot: AppLayoutSnapshot) => void) | undefined;
44
44
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../src/app/createApp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAoBvB,OAAO,EACL,KAAK,8BAA8B,EAEpC,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAe1D,OAAO,KAAK,EACV,GAAG,EACH,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAKjB,MAAM,YAAY,CAAC;AAQpB,oDAAoD;AACpD,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,8BAA8B,CAAC;IACrD,WAAW,EAAE,OAAO,CAAC;IACrB,sBAAsB,EAAE,OAAO,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACzE,CAAC,CAAC;AA0BH,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AACjF,eAAO,MAAM,gDAAgD,oCAAoC,CAAC;AAuIlG,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CA0DjF;AA4LD,KAAK,oBAAoB,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;CACjC,CAAC,CAAC;AAEH,KAAK,qBAAqB,CAAC,CAAC,IAAI,oBAAoB,GAClD,QAAQ,CAAC;IACP,YAAY,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC;AAEL,KAAK,0BAA0B,GAAG,oBAAoB,GACpD,QAAQ,CAAC;IACP,MAAM,EAAE,SAAS,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC;AAEL;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,0BAA0B,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../src/app/createApp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAoBvB,OAAO,EACL,KAAK,8BAA8B,EAEpC,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAS1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAe1D,OAAO,KAAK,EACV,GAAG,EACH,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAKjB,MAAM,YAAY,CAAC;AAQpB,oDAAoD;AACpD,KAAK,iBAAiB,GAAG,QAAQ,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,8BAA8B,CAAC;IACrD,sBAAsB,EAAE,OAAO,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACzE,CAAC,CAAC;AA0BH,eAAO,MAAM,uCAAuC,4BAA4B,CAAC;AACjF,eAAO,MAAM,gDAAgD,oCAAoC,CAAC;AA2HlG,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CA6DjF;AA4LD,KAAK,oBAAoB,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;CACjC,CAAC,CAAC;AAEH,KAAK,qBAAqB,CAAC,CAAC,IAAI,oBAAoB,GAClD,QAAQ,CAAC;IACP,YAAY,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC;AAEL,KAAK,0BAA0B,GAAG,oBAAoB,GACpD,QAAQ,CAAC;IACP,MAAM,EAAE,SAAS,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC,CAAC;AAkCL;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,0BAA0B,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACxF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC"}
@@ -22,7 +22,7 @@
22
22
  * @see docs/guide/lifecycle-and-updates.md
23
23
  */
24
24
  import { ZrUiError } from "../abi.js";
25
- import { BACKEND_DRAWLIST_V2_MARKER, BACKEND_DRAWLIST_VERSION_MARKER, BACKEND_FPS_CAP_MARKER, BACKEND_MAX_EVENT_BYTES_MARKER, FRAME_ACCEPTED_ACK_MARKER, } from "../backend.js";
25
+ import { BACKEND_DRAWLIST_VERSION_MARKER, BACKEND_FPS_CAP_MARKER, BACKEND_MAX_EVENT_BYTES_MARKER, FRAME_ACCEPTED_ACK_MARKER, } from "../backend.js";
26
26
  import { createManagerState, getBindings, getMode, getPendingChord, registerBindings, registerModes, resetChordState, routeKeyEvent, setMode, } from "../keybindings/index.js";
27
27
  import { ZR_MOD_ALT, ZR_MOD_CTRL, ZR_MOD_META } from "../keybindings/keyCodes.js";
28
28
  import { normalizeBreakpointThresholds, } from "../layout/responsive.js";
@@ -30,6 +30,7 @@ import { PERF_ENABLED, perfMarkEnd, perfMarkStart, perfNow, perfRecord } from ".
30
30
  import { parseEventBatchV1 } from "../protocol/zrev_v1.js";
31
31
  import { createRouterIntegration } from "../router/integration.js";
32
32
  import { DEFAULT_TERMINAL_PROFILE, terminalProfileFromCaps, } from "../terminalProfile.js";
33
+ import { blendRgb } from "../theme/blend.js";
33
34
  import { defaultTheme } from "../theme/defaultTheme.js";
34
35
  import { coerceToLegacyTheme } from "../theme/interop.js";
35
36
  import { ui } from "../widgets/ui.js";
@@ -46,11 +47,11 @@ const DEFAULT_CONFIG = Object.freeze({
46
47
  maxDrawlistBytes: 2 << 20 /* 2 MiB */,
47
48
  rootPadding: 0,
48
49
  breakpointThresholds: normalizeBreakpointThresholds(undefined),
49
- useV2Cursor: false,
50
50
  drawlistValidateParams: true,
51
51
  drawlistReuseOutputBuffer: true,
52
52
  drawlistEncodedStringCacheCap: 131072,
53
53
  maxFramesInFlight: 1,
54
+ themeTransitionFrames: 0,
54
55
  internal_onRender: undefined,
55
56
  internal_onLayout: undefined,
56
57
  });
@@ -93,15 +94,6 @@ function getAcceptedFrameAck(p) {
93
94
  return null;
94
95
  return marker;
95
96
  }
96
- function readBackendBooleanMarker(backend, marker) {
97
- const value = backend[marker];
98
- if (value === undefined)
99
- return null;
100
- if (typeof value !== "boolean") {
101
- invalidProps(`backend marker ${marker} must be a boolean when present`);
102
- }
103
- return value;
104
- }
105
97
  function readBackendPositiveIntMarker(backend, marker) {
106
98
  const value = backend[marker];
107
99
  if (value === undefined)
@@ -184,7 +176,6 @@ export function resolveAppConfig(config) {
184
176
  ? DEFAULT_CONFIG.rootPadding
185
177
  : requireNonNegativeInt("rootPadding", config.rootPadding);
186
178
  const breakpointThresholds = normalizeBreakpointThresholds(config.breakpoints);
187
- const useV2Cursor = config.useV2Cursor === true;
188
179
  const drawlistValidateParams = config.drawlistValidateParams === undefined
189
180
  ? DEFAULT_CONFIG.drawlistValidateParams
190
181
  : config.drawlistValidateParams !== false;
@@ -197,6 +188,9 @@ export function resolveAppConfig(config) {
197
188
  const maxFramesInFlight = config.maxFramesInFlight === undefined
198
189
  ? DEFAULT_CONFIG.maxFramesInFlight
199
190
  : Math.min(4, Math.max(1, requirePositiveInt("maxFramesInFlight", config.maxFramesInFlight)));
191
+ const themeTransitionFrames = config.themeTransitionFrames === undefined
192
+ ? DEFAULT_CONFIG.themeTransitionFrames
193
+ : requireNonNegativeInt("themeTransitionFrames", config.themeTransitionFrames);
200
194
  const internal_onRender = typeof config.internal_onRender === "function" ? config.internal_onRender : undefined;
201
195
  const internal_onLayout = typeof config.internal_onLayout === "function" ? config.internal_onLayout : undefined;
202
196
  return Object.freeze({
@@ -205,11 +199,11 @@ export function resolveAppConfig(config) {
205
199
  maxDrawlistBytes,
206
200
  rootPadding,
207
201
  breakpointThresholds,
208
- useV2Cursor,
209
202
  drawlistValidateParams,
210
203
  drawlistReuseOutputBuffer,
211
204
  drawlistEncodedStringCacheCap,
212
205
  maxFramesInFlight,
206
+ themeTransitionFrames,
213
207
  internal_onRender,
214
208
  internal_onLayout,
215
209
  });
@@ -336,19 +330,45 @@ function codepointToCtrlKeyCode(codepoint) {
336
330
  }
337
331
  return null;
338
332
  }
333
+ function blendThemeColors(from, to, t) {
334
+ const clampedT = Math.max(0, Math.min(1, t));
335
+ if (clampedT <= 0)
336
+ return from;
337
+ if (clampedT >= 1)
338
+ return to;
339
+ const colors = {};
340
+ const keys = new Set([...Object.keys(from.colors), ...Object.keys(to.colors)]);
341
+ for (const key of keys) {
342
+ const fromColor = from.colors[key];
343
+ const toColor = to.colors[key];
344
+ if (fromColor && toColor) {
345
+ colors[key] = blendRgb(fromColor, toColor, clampedT);
346
+ }
347
+ else if (toColor) {
348
+ colors[key] = toColor;
349
+ }
350
+ else if (fromColor) {
351
+ colors[key] = fromColor;
352
+ }
353
+ }
354
+ return Object.freeze({
355
+ colors: Object.freeze(colors),
356
+ spacing: to.spacing,
357
+ });
358
+ }
339
359
  export function createApp(opts) {
340
360
  const backend = opts.backend;
341
361
  const config = resolveAppConfig(opts.config);
342
- const backendUseDrawlistV2 = readBackendBooleanMarker(backend, BACKEND_DRAWLIST_V2_MARKER);
343
- if (config.useV2Cursor && backendUseDrawlistV2 === false) {
344
- invalidProps("config.useV2Cursor=true but backend.useDrawlistV2=false. " +
345
- "Fix: enable cursor-v2 support in the backend (drawlistVersion >= 2).");
346
- }
347
362
  const backendDrawlistVersion = readBackendDrawlistVersionMarker(backend);
348
- if (config.useV2Cursor && backendDrawlistVersion !== null && backendDrawlistVersion < 2) {
349
- invalidProps(`config.useV2Cursor=true but backend drawlistVersion=${String(backendDrawlistVersion)}. Fix: set backend drawlist version >= 2.`);
350
- }
351
- const drawlistVersion = backendDrawlistVersion ?? (config.useV2Cursor ? 2 : 1);
363
+ if (backendDrawlistVersion !== null && backendDrawlistVersion < 2) {
364
+ invalidProps(`backend drawlistVersion=${String(backendDrawlistVersion)} is no longer supported. Fix: set backend drawlist version >= 2.`);
365
+ }
366
+ const drawlistVersion = backendDrawlistVersion === 2 ||
367
+ backendDrawlistVersion === 3 ||
368
+ backendDrawlistVersion === 4 ||
369
+ backendDrawlistVersion === 5
370
+ ? backendDrawlistVersion
371
+ : 5;
352
372
  const backendMaxEventBytes = readBackendPositiveIntMarker(backend, BACKEND_MAX_EVENT_BYTES_MARKER);
353
373
  if (backendMaxEventBytes !== null && backendMaxEventBytes !== config.maxEventBytes) {
354
374
  invalidProps(`config.maxEventBytes=${String(config.maxEventBytes)} must match backend maxEventBytes=${String(backendMaxEventBytes)}. Fix: align maxEventBytes between app config and backend, or prefer createNodeApp({ config }) for Node/Bun apps to keep them aligned automatically.`);
@@ -358,6 +378,7 @@ export function createApp(opts) {
358
378
  invalidProps(`config.fpsCap=${String(config.fpsCap)} must match backend fpsCap=${String(backendFpsCap)}. Fix: align fpsCap between app config and backend, or prefer createNodeApp({ config }) for Node/Bun apps to keep them aligned automatically.`);
359
379
  }
360
380
  let theme = coerceToLegacyTheme(opts.theme ?? defaultTheme);
381
+ let themeTransition = null;
361
382
  let terminalProfile = DEFAULT_TERMINAL_PROFILE;
362
383
  const sm = new AppStateMachine();
363
384
  const routes = opts.routes;
@@ -453,6 +474,43 @@ export function createApp(opts) {
453
474
  return;
454
475
  scheduler.enqueue({ kind: "renderRequest" });
455
476
  }
477
+ function beginThemeTransition(nextTheme) {
478
+ if (config.themeTransitionFrames <= 0 || sm.state !== "Running" || mode !== "widget") {
479
+ theme = nextTheme;
480
+ themeTransition = null;
481
+ return;
482
+ }
483
+ themeTransition = Object.freeze({
484
+ from: theme,
485
+ to: nextTheme,
486
+ frame: 0,
487
+ totalFrames: config.themeTransitionFrames,
488
+ });
489
+ }
490
+ function advanceThemeTransitionFrame() {
491
+ const active = themeTransition;
492
+ if (!active)
493
+ return;
494
+ const nextFrame = active.frame + 1;
495
+ if (nextFrame >= active.totalFrames) {
496
+ theme = active.to;
497
+ themeTransition = null;
498
+ return;
499
+ }
500
+ theme = blendThemeColors(active.from, active.to, nextFrame / active.totalFrames);
501
+ themeTransition = Object.freeze({
502
+ ...active,
503
+ frame: nextFrame,
504
+ });
505
+ }
506
+ function scheduleThemeTransitionContinuation() {
507
+ if (!themeTransition || sm.state !== "Running")
508
+ return;
509
+ // Theme-aware composite widgets resolve recipe styles during commit, so
510
+ // transition frames must invalidate view/commit, not only render.
511
+ markDirty(DIRTY_VIEW, false);
512
+ scheduler.enqueue({ kind: "renderRequest" });
513
+ }
456
514
  function requestRenderFromRenderer() {
457
515
  markDirty(DIRTY_RENDER);
458
516
  }
@@ -481,7 +539,6 @@ export function createApp(opts) {
481
539
  rootPadding: config.rootPadding,
482
540
  breakpointThresholds: config.breakpointThresholds,
483
541
  terminalProfile,
484
- useV2Cursor: config.useV2Cursor,
485
542
  ...(opts.config?.drawlistValidateParams === undefined
486
543
  ? {}
487
544
  : { drawlistValidateParams: opts.config.drawlistValidateParams }),
@@ -1159,6 +1216,7 @@ export function createApp(opts) {
1159
1216
  checkLayoutStability: (pendingDirtyFlags & DIRTY_LAYOUT) === 0 && (pendingDirtyFlags & DIRTY_VIEW) !== 0,
1160
1217
  nowMs: frameNowMs,
1161
1218
  };
1219
+ advanceThemeTransitionFrame();
1162
1220
  const resilientView = (state) => {
1163
1221
  if (topLevelViewError !== null) {
1164
1222
  return buildTopLevelViewErrorScreen(topLevelViewError);
@@ -1208,6 +1266,7 @@ export function createApp(opts) {
1208
1266
  if (plan.commit)
1209
1267
  consumedDirtyFlags |= DIRTY_VIEW;
1210
1268
  clearConsumedDirtyFlags(consumedDirtyFlags, dirtyVersionStart);
1269
+ scheduleThemeTransitionContinuation();
1211
1270
  }
1212
1271
  function drainIgnored(items) {
1213
1272
  for (const it of items) {
@@ -1410,10 +1469,14 @@ export function createApp(opts) {
1410
1469
  if (inRender)
1411
1470
  throwCode("ZRUI_UPDATE_DURING_RENDER", updateDuringRenderDetail("setTheme"));
1412
1471
  const nextTheme = coerceToLegacyTheme(next);
1413
- if (nextTheme === theme)
1472
+ if (nextTheme === themeTransition?.to)
1414
1473
  return;
1415
- theme = nextTheme;
1416
- requestRenderFromRenderer();
1474
+ if (nextTheme === theme) {
1475
+ themeTransition = null;
1476
+ return;
1477
+ }
1478
+ beginThemeTransition(nextTheme);
1479
+ requestViewFromRenderer();
1417
1480
  },
1418
1481
  debugLayout(enabled) {
1419
1482
  assertOperational("debugLayout");
@@ -1567,6 +1630,7 @@ export function createApp(opts) {
1567
1630
  }
1568
1631
  return p.then(() => {
1569
1632
  lifecycleBusy = null;
1633
+ themeTransition = null;
1570
1634
  sm.toStopped();
1571
1635
  settleActiveRun?.();
1572
1636
  }, (e) => {
@@ -1582,6 +1646,7 @@ export function createApp(opts) {
1582
1646
  if (st0 === "Disposed")
1583
1647
  return;
1584
1648
  pollToken++;
1649
+ themeTransition = null;
1585
1650
  try {
1586
1651
  sm.dispose();
1587
1652
  }