@typecad/ui 1.0.0-alpha.12 → 1.0.0-alpha.13

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 (113) hide show
  1. package/assets/fonts/dejavu/DejaVuSans-Bold.ttf +0 -0
  2. package/assets/fonts/dejavu/DejaVuSans-ExtraLight.ttf +0 -0
  3. package/assets/fonts/dejavu/DejaVuSans-Oblique.ttf +0 -0
  4. package/assets/fonts/dejavu/DejaVuSans.ttf +0 -0
  5. package/assets/fonts/dejavu/DejaVuSansMono-Bold.ttf +0 -0
  6. package/assets/fonts/dejavu/DejaVuSansMono.ttf +0 -0
  7. package/assets/fonts/dejavu/LICENSE +187 -0
  8. package/assets/fonts/dejavu/README.md +49 -0
  9. package/dist/engine-index.js +2 -0
  10. package/dist/preview/build-program.d.ts +7 -1
  11. package/dist/preview/build-program.js +94 -15
  12. package/dist/preview/host-gfx.d.ts +3 -0
  13. package/dist/preview/host-gfx.js +30 -3
  14. package/dist/preview/host-ui-runtime.d.ts +115 -0
  15. package/dist/preview/host-ui-runtime.js +928 -46
  16. package/dist/ui-engine/block-layout.js +25 -11
  17. package/dist/ui-engine/color.d.ts +6 -0
  18. package/dist/ui-engine/color.js +80 -2
  19. package/dist/ui-engine/compat-report.d.ts +8 -0
  20. package/dist/ui-engine/compat-report.js +124 -0
  21. package/dist/ui-engine/css-imports.d.ts +4 -0
  22. package/dist/ui-engine/css-imports.js +70 -0
  23. package/dist/ui-engine/css-parser.js +58 -14
  24. package/dist/ui-engine/default-font.d.ts +25 -0
  25. package/dist/ui-engine/default-font.js +80 -0
  26. package/dist/ui-engine/font-assets.d.ts +2 -2
  27. package/dist/ui-engine/font-assets.js +22 -5
  28. package/dist/ui-engine/html-parser.d.ts +4 -0
  29. package/dist/ui-engine/html-parser.js +241 -26
  30. package/dist/ui-engine/image-assets.d.ts +8 -1
  31. package/dist/ui-engine/image-assets.js +35 -2
  32. package/dist/ui-engine/image-decode.d.ts +22 -0
  33. package/dist/ui-engine/image-decode.js +194 -0
  34. package/dist/ui-engine/inline-parser.js +1 -1
  35. package/dist/ui-engine/layout-engine.d.ts +19 -0
  36. package/dist/ui-engine/layout-engine.js +59 -3
  37. package/dist/ui-engine/model.d.ts +18 -0
  38. package/dist/ui-engine/model.js +75 -7
  39. package/dist/ui-engine/runtime-header/blend-bodies.js +29 -9
  40. package/dist/ui-engine/runtime-header/canvas-helpers.js +3 -0
  41. package/dist/ui-engine/runtime-header/canvas-scrollbar.js +115 -111
  42. package/dist/ui-engine/runtime-header/cuttlefish-gfx.js +21 -0
  43. package/dist/ui-engine/runtime-header/dirty-scroll-mutators.js +182 -179
  44. package/dist/ui-engine/runtime-header/forward-decls.js +215 -167
  45. package/dist/ui-engine/runtime-header/init-press-input.js +138 -135
  46. package/dist/ui-engine/runtime-header/keyboard.js +682 -380
  47. package/dist/ui-engine/runtime-header/node-draw-body.js +1656 -1386
  48. package/dist/ui-engine/runtime-header/paint-order-coords.js +259 -214
  49. package/dist/ui-engine/runtime-header/paint-rects-repair.js +736 -568
  50. package/dist/ui-engine/runtime-header/scroll-physics.js +25 -1
  51. package/dist/ui-engine/runtime-header/state-bindings-nav.js +9 -0
  52. package/dist/ui-engine/runtime-header/structs.js +228 -216
  53. package/dist/ui-engine/runtime-header/text-rendering.js +888 -770
  54. package/dist/ui-engine/runtime-header/tick/bindings-phase.js +118 -116
  55. package/dist/ui-engine/runtime-header/tick/dirty-draw-phase.js +897 -633
  56. package/dist/ui-engine/runtime-header/tick/scroll-canvas-phase.js +24 -25
  57. package/dist/ui-engine/runtime-header/touch-keyboard-fwd.js +78 -23
  58. package/dist/ui-engine/runtime-header/types-defines.js +110 -93
  59. package/dist/ui-engine/shadcn-kit.d.ts +1 -0
  60. package/dist/ui-engine/shadcn-kit.js +502 -0
  61. package/dist/ui-engine/style-resolver.d.ts +4 -0
  62. package/dist/ui-engine/style-resolver.js +58 -6
  63. package/dist/ui-engine/transpile-ui.js +12 -5
  64. package/dist/ui-engine/ua-stylesheet.d.ts +22 -1
  65. package/dist/ui-engine/ua-stylesheet.js +119 -32
  66. package/dist/ui-engine/ui-lowering.js +37 -3
  67. package/dist/ui-engine/ui-registry.js +32 -4
  68. package/dist/ui-engine/yoga-layout.js +57 -52
  69. package/package.json +9 -3
  70. package/src/engine-index.ts +53 -51
  71. package/src/preview/build-program.ts +810 -734
  72. package/src/preview/host-gfx.ts +30 -3
  73. package/src/preview/host-ui-runtime.ts +4133 -3289
  74. package/src/ui-engine/block-layout.ts +24 -11
  75. package/src/ui-engine/color.ts +77 -2
  76. package/src/ui-engine/compat-report.ts +139 -0
  77. package/src/ui-engine/css-imports.ts +69 -0
  78. package/src/ui-engine/css-parser.ts +64 -15
  79. package/src/ui-engine/default-font.ts +95 -0
  80. package/src/ui-engine/font-assets.ts +545 -525
  81. package/src/ui-engine/html-parser.ts +615 -397
  82. package/src/ui-engine/image-assets.ts +37 -2
  83. package/src/ui-engine/image-decode.ts +244 -0
  84. package/src/ui-engine/inline-parser.ts +1 -1
  85. package/src/ui-engine/layout-engine.ts +61 -3
  86. package/src/ui-engine/model.ts +1317 -1230
  87. package/src/ui-engine/runtime-header/blend-bodies.ts +29 -9
  88. package/src/ui-engine/runtime-header/canvas-helpers.ts +3 -0
  89. package/src/ui-engine/runtime-header/canvas-scrollbar.ts +121 -117
  90. package/src/ui-engine/runtime-header/cuttlefish-gfx.ts +21 -0
  91. package/src/ui-engine/runtime-header/dirty-scroll-mutators.ts +188 -185
  92. package/src/ui-engine/runtime-header/forward-decls.ts +227 -179
  93. package/src/ui-engine/runtime-header/init-press-input.ts +144 -141
  94. package/src/ui-engine/runtime-header/keyboard.ts +689 -386
  95. package/src/ui-engine/runtime-header/node-draw-body.ts +1681 -1411
  96. package/src/ui-engine/runtime-header/paint-order-coords.ts +265 -220
  97. package/src/ui-engine/runtime-header/paint-rects-repair.ts +742 -574
  98. package/src/ui-engine/runtime-header/scroll-physics.ts +25 -1
  99. package/src/ui-engine/runtime-header/state-bindings-nav.ts +9 -0
  100. package/src/ui-engine/runtime-header/structs.ts +234 -222
  101. package/src/ui-engine/runtime-header/text-rendering.ts +894 -776
  102. package/src/ui-engine/runtime-header/tick/bindings-phase.ts +124 -122
  103. package/src/ui-engine/runtime-header/tick/dirty-draw-phase.ts +902 -638
  104. package/src/ui-engine/runtime-header/tick/scroll-canvas-phase.ts +30 -31
  105. package/src/ui-engine/runtime-header/touch-keyboard-fwd.ts +78 -23
  106. package/src/ui-engine/runtime-header/types-defines.ts +116 -99
  107. package/src/ui-engine/shadcn-kit.ts +503 -0
  108. package/src/ui-engine/style-resolver.ts +471 -416
  109. package/src/ui-engine/transpile-ui.ts +12 -5
  110. package/src/ui-engine/ua-stylesheet.ts +137 -31
  111. package/src/ui-engine/ui-lowering.ts +486 -452
  112. package/src/ui-engine/ui-registry.ts +556 -524
  113. package/src/ui-engine/yoga-layout.ts +307 -309
@@ -12,6 +12,11 @@ interface RuntimeOptions {
12
12
  onFrame?: (rgba: Uint8ClampedArray) => void;
13
13
  onDiagnostics?: (message: string) => void;
14
14
  }
15
+ /** Linear color lerp at the ACTIVE depth (module runtimeColorFormat): 888
16
+ * targets lerp per 8-bit channel; 565 targets lerp per 5/6-bit channel
17
+ * (device parity — the C++ ui_lerp macro switches the same way). Exported
18
+ * for tests. */
19
+ export declare function lerpColor(a: number, b: number, k100: number): number;
15
20
  export declare class PreviewUIRuntime {
16
21
  private readonly snapshot;
17
22
  readonly gfx: HostAdafruitGFX;
@@ -63,6 +68,10 @@ export declare class PreviewUIRuntime {
63
68
  private settleFromScrollY;
64
69
  private rangeNode;
65
70
  private keyboardVisible;
71
+ /** Modal <select> option list: node index while open, -1 when closed. */
72
+ private selectMenuNode;
73
+ /** True while the select modal overlay needs (re)stamping this frame. */
74
+ private selectMenuDirty;
66
75
  private keyboardDirty;
67
76
  private keyboardTarget;
68
77
  private keyboardKeys;
@@ -92,6 +101,11 @@ export declare class PreviewUIRuntime {
92
101
  pointerDown(x: number, y: number): void;
93
102
  pointerMove(x: number, y: number): void;
94
103
  pointerUp(): void;
104
+ /** Mouse-wheel scroll: a discrete delta applied to the scroll owner under
105
+ * (x, y) — the same hit-scan a drag uses, without the gesture state
106
+ * machine. Wheel-down (positive deltaPx) shows later content; any
107
+ * overscroll from the tick bounces back via the standard settle. */
108
+ wheel(x: number, y: number, deltaPx: number): void;
95
109
  triggerPin(control: PreviewPinControlSpec): void;
96
110
  private createScreenProxy;
97
111
  private applyInitialAssignments;
@@ -103,6 +117,12 @@ export declare class PreviewUIRuntime {
103
117
  private uiInit;
104
118
  private isActiveNode;
105
119
  private isEffectivelyVisible;
120
+ /** Effective stacking z, CSS-style: a non-zero zIndex raises the node AND
121
+ * its subtree — a z-raised panel forms a stacking context, so its
122
+ * descendants stack WITH it (above lower-z siblings), never
123
+ * independently UNDER it (a flat (z, index) sort painted a dialog card
124
+ * over its own children). 0 = "auto" — keep walking ancestors. */
125
+ private stackingZ;
106
126
  private drawsBefore;
107
127
  private compareDrawOrder;
108
128
  private navigate;
@@ -141,6 +161,12 @@ export declare class PreviewUIRuntime {
141
161
  private tryRepairGeometryFill;
142
162
  private clearCurrentSubtreePaint;
143
163
  private setVisible;
164
+ private subtreeFlowExtent;
165
+ private shiftSubtreeMain;
166
+ private restackFlowContainer;
167
+ private reflowScrollContent;
168
+ private reflowAfterVisibility;
169
+ private classifyDirtyAgainstOpenDrawers;
144
170
  private scrollClipForNode;
145
171
  private rectIntersectsClip;
146
172
  private intersectClipRect;
@@ -170,6 +196,43 @@ export declare class PreviewUIRuntime {
170
196
  private markScrollViewDirty;
171
197
  private invalidateScrollCanvasForNode;
172
198
  private drawDirty;
199
+ /** Enable/disable per-frame debug geometry capture (the client overlay
200
+ * reads it; zero cost while off). */
201
+ setDebugCapture(on: boolean): void;
202
+ /** Current-frame debug geometry for the client overlay: every visible node
203
+ * on the active screen at its CURRENT draw position (transform/press/
204
+ * drawer/scroll offsets applied), the scroll viewport clips, and the
205
+ * regions painted this tick (dirty-flash). Coordinates are logical
206
+ * display pixels, matching the app canvas 1:1. */
207
+ debugInfo(): {
208
+ nodes: Array<{
209
+ i: number;
210
+ id?: string;
211
+ tag: string;
212
+ kind: string;
213
+ x: number;
214
+ y: number;
215
+ w: number;
216
+ h: number;
217
+ tappable: boolean;
218
+ }>;
219
+ clips: Array<{
220
+ x: number;
221
+ y: number;
222
+ w: number;
223
+ h: number;
224
+ }>;
225
+ painted: Array<{
226
+ x: number;
227
+ y: number;
228
+ w: number;
229
+ h: number;
230
+ }>;
231
+ };
232
+ /** Inspect-on-tap: topmost node (draw order) whose CURRENT draw box
233
+ * contains the point — unlike hitTest, containers count too. Returns the
234
+ * index, or -1. */
235
+ debugHit(tx: number, ty: number): number;
173
236
  private lineX;
174
237
  private textInsets;
175
238
  private drawTextLines;
@@ -208,6 +271,54 @@ export declare class PreviewUIRuntime {
208
271
  private handleNoTouch;
209
272
  private dispatchBuiltInClick;
210
273
  private keyboardTemplateForNode;
274
+ /** node index -> { open, progress } for every <drawer>; absent = closed. */
275
+ private readonly drawerStates;
276
+ /** True while the client wants per-frame debug geometry + paint rects. */
277
+ private debugCapture;
278
+ /** Node paint rects drawn during this tick (cleared at tick start). */
279
+ private debugPaintedRects;
280
+ /** Drawer animation step per tick (~180ms full slide). */
281
+ /** <toast> auto-close windows, keyed by drawer slot node index. */
282
+ private readonly toastElapsed;
283
+ private applyDrawers;
284
+ private drawerNodeById;
285
+ private drawerOpen;
286
+ private drawerClose;
287
+ /** Slide extent for a drawer or toast: the panel must clear the display
288
+ * edge completely — its own height parks a bottom:0 panel's top row at
289
+ * the fold (a visible sliver after close). Centered dialogs don't slide. */
290
+ private drawerExtent;
291
+ /** Apply a slide progress to the drawer subtree: offsets shift from the
292
+ * edge; the subtree is hidden at 0. Erases the previous frame's region via
293
+ * the standard subtree clear + marks descendants dirty (same contract as
294
+ * animated transform changes). */
295
+ private setDrawerProgress;
296
+ /** True while the node sits inside a fully-closed drawer (skip in draws and
297
+ * hit tests). Drawers with no state entry are closed. */
298
+ private insideClosedDrawer;
299
+ /** Walk ancestors: any drawer ancestor without an open/animating state. */
300
+ private drawerAncestorClosed;
301
+ /** Apply the closed slide offsets to every drawer subtree (initial seed and
302
+ * post-navigate reset) so closed drawers never paint at rest position. */
303
+ private seedDrawersClosed;
304
+ /** Shared geometry of the select modal: a centered list panel sized to
305
+ * the options (capped to ~60% of the screen height). Rows are option
306
+ * text, the current one inverted (fill = select bg, text = inverted). */
307
+ private selectMenuGeometry;
308
+ private openSelectMenu;
309
+ /** Close the modal. When `repaint`, mark the whole tree dirty so the
310
+ * overlay is erased by a full redraw (navigate() clears the screen
311
+ * itself, so it passes false). */
312
+ private closeSelectMenu;
313
+ /** Stamp the modal overlay on top of the current framebuffer. Idempotent
314
+ * per frame — the close path full-repaints beneath it. */
315
+ private drawSelectMenu;
316
+ /** Panel fill: the select's effective background, falling back to a
317
+ * near-black card on unstyled selects. */
318
+ private selectMenuPanelColor;
319
+ /** Route a tap while the modal is open: a row selects + closes; anything
320
+ * else just closes (dismiss on outside tap). */
321
+ private selectMenuHandleTouch;
211
322
  private keyboardOpen;
212
323
  private keyboardClose;
213
324
  private keyboardComputeBox;
@@ -229,6 +340,10 @@ export declare class PreviewUIRuntime {
229
340
  private markDirty;
230
341
  private scriptTreeNames;
231
342
  private normalizeScript;
343
+ /** Apply `re` to code segments only: skip '..'/".." literal contents, and
344
+ * inside `..` templates recurse into ${...} interpolations (their
345
+ * expressions are code; the literal text between them is not). */
346
+ private rewriteOutsideLiterals;
232
347
  /** Rewrite signal getter/setter syntax to plain variable reads/writes. See
233
348
  * normalizeScript for the lowering contract; this is the preview counterpart
234
349
  * of ui-callback-lowering.ts's rules 2 and 3. */