@typecad/ui 0.1.0-alpha.1

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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1443 -0
  3. package/dist/engine-index.d.ts +7 -0
  4. package/dist/engine-index.js +41 -0
  5. package/dist/index.d.ts +165 -0
  6. package/dist/index.js +42 -0
  7. package/dist/preview/build-program.d.ts +7 -0
  8. package/dist/preview/build-program.js +665 -0
  9. package/dist/preview/host-gfx.d.ts +90 -0
  10. package/dist/preview/host-gfx.js +552 -0
  11. package/dist/preview/host-ui-runtime.d.ts +241 -0
  12. package/dist/preview/host-ui-runtime.js +3236 -0
  13. package/dist/preview/types.d.ts +83 -0
  14. package/dist/preview/types.js +1 -0
  15. package/dist/types.d.ts +108 -0
  16. package/dist/types.js +10 -0
  17. package/dist/ui-engine/block-layout.d.ts +8 -0
  18. package/dist/ui-engine/block-layout.js +95 -0
  19. package/dist/ui-engine/color.d.ts +49 -0
  20. package/dist/ui-engine/color.js +273 -0
  21. package/dist/ui-engine/css-parser.d.ts +155 -0
  22. package/dist/ui-engine/css-parser.js +1058 -0
  23. package/dist/ui-engine/default-keyboards.d.ts +3 -0
  24. package/dist/ui-engine/default-keyboards.js +53 -0
  25. package/dist/ui-engine/easing.d.ts +12 -0
  26. package/dist/ui-engine/easing.js +76 -0
  27. package/dist/ui-engine/font-assets.d.ts +50 -0
  28. package/dist/ui-engine/font-assets.js +431 -0
  29. package/dist/ui-engine/html-parser.d.ts +116 -0
  30. package/dist/ui-engine/html-parser.js +284 -0
  31. package/dist/ui-engine/image-assets.d.ts +21 -0
  32. package/dist/ui-engine/image-assets.js +125 -0
  33. package/dist/ui-engine/inline-parser.d.ts +30 -0
  34. package/dist/ui-engine/inline-parser.js +66 -0
  35. package/dist/ui-engine/keyframes.d.ts +3 -0
  36. package/dist/ui-engine/keyframes.js +39 -0
  37. package/dist/ui-engine/layout-engine.d.ts +35 -0
  38. package/dist/ui-engine/layout-engine.js +203 -0
  39. package/dist/ui-engine/model.d.ts +239 -0
  40. package/dist/ui-engine/model.js +987 -0
  41. package/dist/ui-engine/rich-layout.d.ts +51 -0
  42. package/dist/ui-engine/rich-layout.js +220 -0
  43. package/dist/ui-engine/run-types.d.ts +13 -0
  44. package/dist/ui-engine/run-types.js +1 -0
  45. package/dist/ui-engine/runtime-header/antialiasing.d.ts +1 -0
  46. package/dist/ui-engine/runtime-header/antialiasing.js +141 -0
  47. package/dist/ui-engine/runtime-header/blend-bodies.d.ts +1 -0
  48. package/dist/ui-engine/runtime-header/blend-bodies.js +39 -0
  49. package/dist/ui-engine/runtime-header/canvas-helpers.d.ts +1 -0
  50. package/dist/ui-engine/runtime-header/canvas-helpers.js +155 -0
  51. package/dist/ui-engine/runtime-header/canvas-scrollbar.d.ts +1 -0
  52. package/dist/ui-engine/runtime-header/canvas-scrollbar.js +105 -0
  53. package/dist/ui-engine/runtime-header/color-mono-refresh.d.ts +1 -0
  54. package/dist/ui-engine/runtime-header/color-mono-refresh.js +154 -0
  55. package/dist/ui-engine/runtime-header/dirty-scroll-mutators.d.ts +1 -0
  56. package/dist/ui-engine/runtime-header/dirty-scroll-mutators.js +169 -0
  57. package/dist/ui-engine/runtime-header/display-shim.d.ts +1 -0
  58. package/dist/ui-engine/runtime-header/display-shim.js +104 -0
  59. package/dist/ui-engine/runtime-header/forward-decls.d.ts +1 -0
  60. package/dist/ui-engine/runtime-header/forward-decls.js +137 -0
  61. package/dist/ui-engine/runtime-header/guard-close.d.ts +1 -0
  62. package/dist/ui-engine/runtime-header/guard-close.js +8 -0
  63. package/dist/ui-engine/runtime-header/image-drawing.d.ts +1 -0
  64. package/dist/ui-engine/runtime-header/image-drawing.js +300 -0
  65. package/dist/ui-engine/runtime-header/init-press-input.d.ts +1 -0
  66. package/dist/ui-engine/runtime-header/init-press-input.js +126 -0
  67. package/dist/ui-engine/runtime-header/keyboard.d.ts +1 -0
  68. package/dist/ui-engine/runtime-header/keyboard.js +342 -0
  69. package/dist/ui-engine/runtime-header/node-decoration.d.ts +1 -0
  70. package/dist/ui-engine/runtime-header/node-decoration.js +212 -0
  71. package/dist/ui-engine/runtime-header/paint-order-coords.d.ts +1 -0
  72. package/dist/ui-engine/runtime-header/paint-order-coords.js +190 -0
  73. package/dist/ui-engine/runtime-header/paint-rects-repair.d.ts +1 -0
  74. package/dist/ui-engine/runtime-header/paint-rects-repair.js +553 -0
  75. package/dist/ui-engine/runtime-header/scroll-physics.d.ts +1 -0
  76. package/dist/ui-engine/runtime-header/scroll-physics.js +161 -0
  77. package/dist/ui-engine/runtime-header/state-bindings-nav.d.ts +1 -0
  78. package/dist/ui-engine/runtime-header/state-bindings-nav.js +176 -0
  79. package/dist/ui-engine/runtime-header/structs.d.ts +1 -0
  80. package/dist/ui-engine/runtime-header/structs.js +220 -0
  81. package/dist/ui-engine/runtime-header/text-rendering.d.ts +1 -0
  82. package/dist/ui-engine/runtime-header/text-rendering.js +715 -0
  83. package/dist/ui-engine/runtime-header/tick/bindings-phase.d.ts +1 -0
  84. package/dist/ui-engine/runtime-header/tick/bindings-phase.js +103 -0
  85. package/dist/ui-engine/runtime-header/tick/dirty-draw-phase.d.ts +1 -0
  86. package/dist/ui-engine/runtime-header/tick/dirty-draw-phase.js +1051 -0
  87. package/dist/ui-engine/runtime-header/tick/flush-phase.d.ts +1 -0
  88. package/dist/ui-engine/runtime-header/tick/flush-phase.js +17 -0
  89. package/dist/ui-engine/runtime-header/tick/scroll-canvas-phase.d.ts +1 -0
  90. package/dist/ui-engine/runtime-header/tick/scroll-canvas-phase.js +15 -0
  91. package/dist/ui-engine/runtime-header/tick/transitions-phase.d.ts +1 -0
  92. package/dist/ui-engine/runtime-header/tick/transitions-phase.js +213 -0
  93. package/dist/ui-engine/runtime-header/tick-motion-helpers.d.ts +1 -0
  94. package/dist/ui-engine/runtime-header/tick-motion-helpers.js +26 -0
  95. package/dist/ui-engine/runtime-header/tick.d.ts +1 -0
  96. package/dist/ui-engine/runtime-header/tick.js +17 -0
  97. package/dist/ui-engine/runtime-header/touch-keyboard-fwd.d.ts +1 -0
  98. package/dist/ui-engine/runtime-header/touch-keyboard-fwd.js +406 -0
  99. package/dist/ui-engine/runtime-header/types-defines.d.ts +1 -0
  100. package/dist/ui-engine/runtime-header/types-defines.js +79 -0
  101. package/dist/ui-engine/runtime-header.d.ts +1 -0
  102. package/dist/ui-engine/runtime-header.js +69 -0
  103. package/dist/ui-engine/scroll-memory-diagnostics.d.ts +16 -0
  104. package/dist/ui-engine/scroll-memory-diagnostics.js +58 -0
  105. package/dist/ui-engine/select-engine.d.ts +4 -0
  106. package/dist/ui-engine/select-engine.js +19 -0
  107. package/dist/ui-engine/style-resolver.d.ts +77 -0
  108. package/dist/ui-engine/style-resolver.js +341 -0
  109. package/dist/ui-engine/text-layout.d.ts +19 -0
  110. package/dist/ui-engine/text-layout.js +92 -0
  111. package/dist/ui-engine/transpile-ui.d.ts +11 -0
  112. package/dist/ui-engine/transpile-ui.js +33 -0
  113. package/dist/ui-engine/ua-stylesheet.d.ts +3 -0
  114. package/dist/ui-engine/ua-stylesheet.js +56 -0
  115. package/dist/ui-engine/ui-file-splitter.d.ts +14 -0
  116. package/dist/ui-engine/ui-file-splitter.js +47 -0
  117. package/dist/ui-engine/ui-lowering.d.ts +33 -0
  118. package/dist/ui-engine/ui-lowering.js +390 -0
  119. package/dist/ui-engine/ui-registry.d.ts +81 -0
  120. package/dist/ui-engine/ui-registry.js +429 -0
  121. package/dist/ui-engine/yoga-layout.d.ts +12 -0
  122. package/dist/ui-engine/yoga-layout.js +314 -0
  123. package/package.json +86 -0
  124. package/src/engine-index.ts +51 -0
  125. package/src/index.ts +232 -0
  126. package/src/preview/build-program.ts +734 -0
  127. package/src/preview/host-gfx.ts +580 -0
  128. package/src/preview/host-ui-runtime.ts +3245 -0
  129. package/src/preview/types.ts +96 -0
  130. package/src/types.ts +127 -0
  131. package/src/ui-engine/block-layout.ts +104 -0
  132. package/src/ui-engine/color.ts +263 -0
  133. package/src/ui-engine/css-parser.ts +1003 -0
  134. package/src/ui-engine/default-keyboards.ts +58 -0
  135. package/src/ui-engine/easing.ts +53 -0
  136. package/src/ui-engine/font-assets.ts +512 -0
  137. package/src/ui-engine/html-parser.ts +397 -0
  138. package/src/ui-engine/image-assets.ts +170 -0
  139. package/src/ui-engine/inline-parser.ts +78 -0
  140. package/src/ui-engine/keyframes.ts +47 -0
  141. package/src/ui-engine/layout-engine.ts +228 -0
  142. package/src/ui-engine/model.ts +1225 -0
  143. package/src/ui-engine/rich-layout.ts +257 -0
  144. package/src/ui-engine/run-types.ts +14 -0
  145. package/src/ui-engine/runtime-header/antialiasing.ts +141 -0
  146. package/src/ui-engine/runtime-header/blend-bodies.ts +39 -0
  147. package/src/ui-engine/runtime-header/canvas-helpers.ts +155 -0
  148. package/src/ui-engine/runtime-header/canvas-scrollbar.ts +105 -0
  149. package/src/ui-engine/runtime-header/color-mono-refresh.ts +154 -0
  150. package/src/ui-engine/runtime-header/dirty-scroll-mutators.ts +169 -0
  151. package/src/ui-engine/runtime-header/display-shim.ts +104 -0
  152. package/src/ui-engine/runtime-header/forward-decls.ts +137 -0
  153. package/src/ui-engine/runtime-header/guard-close.ts +8 -0
  154. package/src/ui-engine/runtime-header/image-drawing.ts +300 -0
  155. package/src/ui-engine/runtime-header/init-press-input.ts +126 -0
  156. package/src/ui-engine/runtime-header/keyboard.ts +342 -0
  157. package/src/ui-engine/runtime-header/node-decoration.ts +212 -0
  158. package/src/ui-engine/runtime-header/paint-order-coords.ts +190 -0
  159. package/src/ui-engine/runtime-header/paint-rects-repair.ts +553 -0
  160. package/src/ui-engine/runtime-header/scroll-physics.ts +161 -0
  161. package/src/ui-engine/runtime-header/state-bindings-nav.ts +176 -0
  162. package/src/ui-engine/runtime-header/structs.ts +220 -0
  163. package/src/ui-engine/runtime-header/text-rendering.ts +715 -0
  164. package/src/ui-engine/runtime-header/tick/bindings-phase.ts +103 -0
  165. package/src/ui-engine/runtime-header/tick/dirty-draw-phase.ts +1051 -0
  166. package/src/ui-engine/runtime-header/tick/flush-phase.ts +17 -0
  167. package/src/ui-engine/runtime-header/tick/scroll-canvas-phase.ts +15 -0
  168. package/src/ui-engine/runtime-header/tick/transitions-phase.ts +213 -0
  169. package/src/ui-engine/runtime-header/tick-motion-helpers.ts +26 -0
  170. package/src/ui-engine/runtime-header/tick.ts +18 -0
  171. package/src/ui-engine/runtime-header/touch-keyboard-fwd.ts +406 -0
  172. package/src/ui-engine/runtime-header/types-defines.ts +79 -0
  173. package/src/ui-engine/runtime-header.ts +71 -0
  174. package/src/ui-engine/scroll-memory-diagnostics.ts +79 -0
  175. package/src/ui-engine/select-engine.ts +21 -0
  176. package/src/ui-engine/style-resolver.ts +416 -0
  177. package/src/ui-engine/text-layout.ts +114 -0
  178. package/src/ui-engine/transpile-ui.ts +45 -0
  179. package/src/ui-engine/ua-stylesheet.ts +60 -0
  180. package/src/ui-engine/ui-file-splitter.ts +59 -0
  181. package/src/ui-engine/ui-lowering.ts +459 -0
  182. package/src/ui-engine/ui-registry.ts +530 -0
  183. package/src/ui-engine/yoga-layout.ts +309 -0
@@ -0,0 +1,241 @@
1
+ import { HostAdafruitGFX } from "./host-gfx.js";
2
+ import type { PreviewPinControlSpec, PreviewSnapshot } from "./types.js";
3
+ type ScreenElementProxy = {
4
+ value: number;
5
+ text?: string;
6
+ onClick(): void;
7
+ onHold(): void;
8
+ onRelease(): void;
9
+ };
10
+ type ScreenProxy = Record<string, ScreenElementProxy>;
11
+ interface RuntimeOptions {
12
+ onFrame?: (rgba: Uint8ClampedArray) => void;
13
+ onDiagnostics?: (message: string) => void;
14
+ }
15
+ export declare class PreviewUIRuntime {
16
+ private readonly snapshot;
17
+ readonly gfx: HostAdafruitGFX;
18
+ readonly screen: ScreenProxy;
19
+ private readonly nodes;
20
+ private readonly transitions;
21
+ private readonly keyframeSets;
22
+ private readonly animations;
23
+ private readonly fontAssets;
24
+ private readonly imageAssets;
25
+ private readonly bindings;
26
+ private readonly listStates;
27
+ private readonly callbacks;
28
+ private readonly pinControls;
29
+ private readonly canvasBindings;
30
+ private readonly intervals;
31
+ private readonly initialAssignments;
32
+ /** Module-scoped `let`/`const`/`var` bindings, seeded once and shared (mutably)
33
+ * across every callback body — mirrors the device hoisting them to globals. */
34
+ private readonly moduleScope;
35
+ /** Names declared via `const X = ui.signal(...)` — lowered to plain device
36
+ * variables on hardware, so the preview stores the bare value (not the `ui`
37
+ * facade's getter) and rewrites `X()`/`X.set(v)` reads/writes accordingly
38
+ * (see normalizeScript). Mirrors ir/transformers/variables.ts + ui-callback-
39
+ * lowering.ts so template interpolations and callbacks see the same slot. */
40
+ private readonly signalNames;
41
+ private readonly onFrame?;
42
+ private readonly onDiagnostics?;
43
+ private readonly screenCount;
44
+ private readonly timers;
45
+ private activeScreen;
46
+ private touchState;
47
+ private touchNode;
48
+ tapSeq: number;
49
+ tapNode: number;
50
+ private readonly pinLevels;
51
+ private touchDownTime;
52
+ private lastTouchTime;
53
+ private lastReleaseTime;
54
+ private lastTickTime;
55
+ private dragStartX;
56
+ private dragStartY;
57
+ private lastTouchX;
58
+ private lastTouchY;
59
+ private isDragging;
60
+ private scrollNode;
61
+ private settleStartMs;
62
+ private settleFromOverscroll;
63
+ private settleFromScrollY;
64
+ private rangeNode;
65
+ private keyboardVisible;
66
+ private keyboardDirty;
67
+ private keyboardTarget;
68
+ private keyboardKeys;
69
+ private keyboardRows;
70
+ private keyboardCols;
71
+ private keyboardBg;
72
+ private keyboardBox;
73
+ private keyboardBuffer;
74
+ private keyboardMaxLen;
75
+ private keyboardShift;
76
+ private keyboardBackspaceHeld;
77
+ private keyboardBackspaceRepeat;
78
+ private keyboardPressedKey;
79
+ private keyboardRepaintKey;
80
+ private directFrameChanged;
81
+ private readonly scrollDragScale;
82
+ constructor(snapshot: PreviewSnapshot, options?: RuntimeOptions);
83
+ start(): void;
84
+ /** Drive a GPIO level for a watched pin and synchronously fire the watch
85
+ * callback on a HIGH→LOW edge. Test hook so edge behavior is deterministic
86
+ * without wall-clock waits; the real ~20ms poller in start() shares this
87
+ * path. Mirrors the device's falling-edge contract. */
88
+ setPinLevel(pin: string, level: 0 | 1): void;
89
+ private pollWatchPin;
90
+ stop(): void;
91
+ tick(deltaMs?: number): void;
92
+ pointerDown(x: number, y: number): void;
93
+ pointerMove(x: number, y: number): void;
94
+ pointerUp(): void;
95
+ triggerPin(control: PreviewPinControlSpec): void;
96
+ private createScreenProxy;
97
+ private applyInitialAssignments;
98
+ /** Seed module-scoped variables from their initializers, evaluated once. These
99
+ * live for the lifetime of the runtime and are shared mutably with callback
100
+ * bodies via runBody/evaluateExpression (see moduleVarNames()). */
101
+ private seedModuleScope;
102
+ private moduleVarNames;
103
+ private uiInit;
104
+ private isActiveNode;
105
+ private isEffectivelyVisible;
106
+ private drawsBefore;
107
+ private compareDrawOrder;
108
+ private navigate;
109
+ private evaluateBindings;
110
+ private refreshListState;
111
+ private advanceTransitions;
112
+ private scrollMotionActive;
113
+ private keyframeSetHasScrollSensitiveGeometry;
114
+ private advanceAnimations;
115
+ private drawYForNode;
116
+ private baseDrawXForNode;
117
+ private baseDrawYForNode;
118
+ private scrollAncestorForNode;
119
+ private pressedOffsetXForNode;
120
+ private pressedOffsetYForNode;
121
+ private drawXForNode;
122
+ private parentClearColor;
123
+ private clearPressOffsetArea;
124
+ private shadowExtents;
125
+ private rotationQuadrant;
126
+ private canUseQuarterTurnBounds;
127
+ private rotatedFaceSize;
128
+ private activeDrawClip;
129
+ private intersectRect;
130
+ private drawImageWithFit;
131
+ private drawImageNode;
132
+ private nodePaintRect;
133
+ private currentPaintRect;
134
+ private currentSubtreePaintRect;
135
+ private rectsIntersect;
136
+ private markOverlappingHigherLayersDirty;
137
+ private markOverlappingHigherLayersDirtyForRect;
138
+ private repairCurrentNodePaintWithParent;
139
+ private clearNodePaintRect;
140
+ private clearCurrentNodePaint;
141
+ private tryRepairGeometryFill;
142
+ private clearCurrentSubtreePaint;
143
+ private setVisible;
144
+ private scrollClipForNode;
145
+ private rectIntersectsClip;
146
+ private intersectClipRect;
147
+ private clearDirtyScrollViewports;
148
+ private drawScrollbars;
149
+ private nodeTextSize;
150
+ private fontAsset;
151
+ private fontGlyph;
152
+ private fontAlpha;
153
+ private textWidth;
154
+ private textHeight;
155
+ private textLineHeight;
156
+ private textWhiteSpace;
157
+ private textLayout;
158
+ private clipTextToWidth;
159
+ private truncateEllipsis;
160
+ private drawAssetText;
161
+ private drawText;
162
+ private drawGradientFill;
163
+ private drawNodeShadow;
164
+ private drawRectOutline;
165
+ private drawClosedRoundRect;
166
+ private drawNodeBorder;
167
+ private drawNodeOutline;
168
+ private markScrollDescendantsDirtyLocal;
169
+ private markScrollDescendantsDirty;
170
+ private markScrollViewDirty;
171
+ private invalidateScrollCanvasForNode;
172
+ private drawDirty;
173
+ private lineX;
174
+ private textInsets;
175
+ private drawTextLines;
176
+ private drawRichNode;
177
+ private richLinkHit;
178
+ private drawTextNode;
179
+ private listStateForNode;
180
+ private shiftListViewport;
181
+ private drawListRows;
182
+ private drawListNode;
183
+ private drawCanvasNode;
184
+ /** Lower a canvas drawBody (`ctx.X(...)` source) against the host gfx.
185
+ * Mirrors the device ctx→ui_display_* rewrite so preview and device match.
186
+ * Coordinates are translated to the node origin (ox, oy). Only the flat call
187
+ * sequence is supported — same constraint as bindList item expressions. */
188
+ private runCanvasBody;
189
+ private drawButtonNode;
190
+ private drawCheckNode;
191
+ private drawRadioNode;
192
+ private drawProgressNode;
193
+ private drawRangeNode;
194
+ private drawInputNode;
195
+ private hitTest;
196
+ private findScrollNode;
197
+ private hasAnyHandler;
198
+ private updateRangeValue;
199
+ private smoothDragDelta;
200
+ private scrollMax;
201
+ private overscrollFor;
202
+ private applyScrollDelta;
203
+ private releaseScroll;
204
+ private advanceScrollSettle;
205
+ private dispatchListTap;
206
+ private handleTouch;
207
+ private handleNoTouch;
208
+ private dispatchBuiltInClick;
209
+ private keyboardTemplateForNode;
210
+ private keyboardOpen;
211
+ private keyboardClose;
212
+ private keyboardComputeBox;
213
+ private keyboardKeyRect;
214
+ private keyboardHandleTouch;
215
+ private keyboardHandleTap;
216
+ private keyboardInsert;
217
+ private keyboardDelete;
218
+ private keyboardTick;
219
+ private keyboardSwapPage;
220
+ private keyboardLabel;
221
+ private drawKeyboardTextRow;
222
+ private drawKeyboardKey;
223
+ private drawKeyboard;
224
+ private dispatch;
225
+ private setPressed;
226
+ private uiOnPress;
227
+ private uiOnRelease;
228
+ private markDirty;
229
+ private scriptTreeNames;
230
+ private normalizeScript;
231
+ /** Rewrite signal getter/setter syntax to plain variable reads/writes. See
232
+ * normalizeScript for the lowering contract; this is the preview counterpart
233
+ * of ui-callback-lowering.ts's rules 2 and 3. */
234
+ private rewriteSignalAccesses;
235
+ private scriptValues;
236
+ private listLocal;
237
+ private evaluateExpression;
238
+ private runBody;
239
+ private createUiFacade;
240
+ }
241
+ export {};