@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.
- package/LICENSE +21 -0
- package/README.md +1443 -0
- package/dist/engine-index.d.ts +7 -0
- package/dist/engine-index.js +41 -0
- package/dist/index.d.ts +165 -0
- package/dist/index.js +42 -0
- package/dist/preview/build-program.d.ts +7 -0
- package/dist/preview/build-program.js +665 -0
- package/dist/preview/host-gfx.d.ts +90 -0
- package/dist/preview/host-gfx.js +552 -0
- package/dist/preview/host-ui-runtime.d.ts +241 -0
- package/dist/preview/host-ui-runtime.js +3236 -0
- package/dist/preview/types.d.ts +83 -0
- package/dist/preview/types.js +1 -0
- package/dist/types.d.ts +108 -0
- package/dist/types.js +10 -0
- package/dist/ui-engine/block-layout.d.ts +8 -0
- package/dist/ui-engine/block-layout.js +95 -0
- package/dist/ui-engine/color.d.ts +49 -0
- package/dist/ui-engine/color.js +273 -0
- package/dist/ui-engine/css-parser.d.ts +155 -0
- package/dist/ui-engine/css-parser.js +1058 -0
- package/dist/ui-engine/default-keyboards.d.ts +3 -0
- package/dist/ui-engine/default-keyboards.js +53 -0
- package/dist/ui-engine/easing.d.ts +12 -0
- package/dist/ui-engine/easing.js +76 -0
- package/dist/ui-engine/font-assets.d.ts +50 -0
- package/dist/ui-engine/font-assets.js +431 -0
- package/dist/ui-engine/html-parser.d.ts +116 -0
- package/dist/ui-engine/html-parser.js +284 -0
- package/dist/ui-engine/image-assets.d.ts +21 -0
- package/dist/ui-engine/image-assets.js +125 -0
- package/dist/ui-engine/inline-parser.d.ts +30 -0
- package/dist/ui-engine/inline-parser.js +66 -0
- package/dist/ui-engine/keyframes.d.ts +3 -0
- package/dist/ui-engine/keyframes.js +39 -0
- package/dist/ui-engine/layout-engine.d.ts +35 -0
- package/dist/ui-engine/layout-engine.js +203 -0
- package/dist/ui-engine/model.d.ts +239 -0
- package/dist/ui-engine/model.js +987 -0
- package/dist/ui-engine/rich-layout.d.ts +51 -0
- package/dist/ui-engine/rich-layout.js +220 -0
- package/dist/ui-engine/run-types.d.ts +13 -0
- package/dist/ui-engine/run-types.js +1 -0
- package/dist/ui-engine/runtime-header/antialiasing.d.ts +1 -0
- package/dist/ui-engine/runtime-header/antialiasing.js +141 -0
- package/dist/ui-engine/runtime-header/blend-bodies.d.ts +1 -0
- package/dist/ui-engine/runtime-header/blend-bodies.js +39 -0
- package/dist/ui-engine/runtime-header/canvas-helpers.d.ts +1 -0
- package/dist/ui-engine/runtime-header/canvas-helpers.js +155 -0
- package/dist/ui-engine/runtime-header/canvas-scrollbar.d.ts +1 -0
- package/dist/ui-engine/runtime-header/canvas-scrollbar.js +105 -0
- package/dist/ui-engine/runtime-header/color-mono-refresh.d.ts +1 -0
- package/dist/ui-engine/runtime-header/color-mono-refresh.js +154 -0
- package/dist/ui-engine/runtime-header/dirty-scroll-mutators.d.ts +1 -0
- package/dist/ui-engine/runtime-header/dirty-scroll-mutators.js +169 -0
- package/dist/ui-engine/runtime-header/display-shim.d.ts +1 -0
- package/dist/ui-engine/runtime-header/display-shim.js +104 -0
- package/dist/ui-engine/runtime-header/forward-decls.d.ts +1 -0
- package/dist/ui-engine/runtime-header/forward-decls.js +137 -0
- package/dist/ui-engine/runtime-header/guard-close.d.ts +1 -0
- package/dist/ui-engine/runtime-header/guard-close.js +8 -0
- package/dist/ui-engine/runtime-header/image-drawing.d.ts +1 -0
- package/dist/ui-engine/runtime-header/image-drawing.js +300 -0
- package/dist/ui-engine/runtime-header/init-press-input.d.ts +1 -0
- package/dist/ui-engine/runtime-header/init-press-input.js +126 -0
- package/dist/ui-engine/runtime-header/keyboard.d.ts +1 -0
- package/dist/ui-engine/runtime-header/keyboard.js +342 -0
- package/dist/ui-engine/runtime-header/node-decoration.d.ts +1 -0
- package/dist/ui-engine/runtime-header/node-decoration.js +212 -0
- package/dist/ui-engine/runtime-header/paint-order-coords.d.ts +1 -0
- package/dist/ui-engine/runtime-header/paint-order-coords.js +190 -0
- package/dist/ui-engine/runtime-header/paint-rects-repair.d.ts +1 -0
- package/dist/ui-engine/runtime-header/paint-rects-repair.js +553 -0
- package/dist/ui-engine/runtime-header/scroll-physics.d.ts +1 -0
- package/dist/ui-engine/runtime-header/scroll-physics.js +161 -0
- package/dist/ui-engine/runtime-header/state-bindings-nav.d.ts +1 -0
- package/dist/ui-engine/runtime-header/state-bindings-nav.js +176 -0
- package/dist/ui-engine/runtime-header/structs.d.ts +1 -0
- package/dist/ui-engine/runtime-header/structs.js +220 -0
- package/dist/ui-engine/runtime-header/text-rendering.d.ts +1 -0
- package/dist/ui-engine/runtime-header/text-rendering.js +715 -0
- package/dist/ui-engine/runtime-header/tick/bindings-phase.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick/bindings-phase.js +103 -0
- package/dist/ui-engine/runtime-header/tick/dirty-draw-phase.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick/dirty-draw-phase.js +1051 -0
- package/dist/ui-engine/runtime-header/tick/flush-phase.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick/flush-phase.js +17 -0
- package/dist/ui-engine/runtime-header/tick/scroll-canvas-phase.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick/scroll-canvas-phase.js +15 -0
- package/dist/ui-engine/runtime-header/tick/transitions-phase.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick/transitions-phase.js +213 -0
- package/dist/ui-engine/runtime-header/tick-motion-helpers.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick-motion-helpers.js +26 -0
- package/dist/ui-engine/runtime-header/tick.d.ts +1 -0
- package/dist/ui-engine/runtime-header/tick.js +17 -0
- package/dist/ui-engine/runtime-header/touch-keyboard-fwd.d.ts +1 -0
- package/dist/ui-engine/runtime-header/touch-keyboard-fwd.js +406 -0
- package/dist/ui-engine/runtime-header/types-defines.d.ts +1 -0
- package/dist/ui-engine/runtime-header/types-defines.js +79 -0
- package/dist/ui-engine/runtime-header.d.ts +1 -0
- package/dist/ui-engine/runtime-header.js +69 -0
- package/dist/ui-engine/scroll-memory-diagnostics.d.ts +16 -0
- package/dist/ui-engine/scroll-memory-diagnostics.js +58 -0
- package/dist/ui-engine/select-engine.d.ts +4 -0
- package/dist/ui-engine/select-engine.js +19 -0
- package/dist/ui-engine/style-resolver.d.ts +77 -0
- package/dist/ui-engine/style-resolver.js +341 -0
- package/dist/ui-engine/text-layout.d.ts +19 -0
- package/dist/ui-engine/text-layout.js +92 -0
- package/dist/ui-engine/transpile-ui.d.ts +11 -0
- package/dist/ui-engine/transpile-ui.js +33 -0
- package/dist/ui-engine/ua-stylesheet.d.ts +3 -0
- package/dist/ui-engine/ua-stylesheet.js +56 -0
- package/dist/ui-engine/ui-file-splitter.d.ts +14 -0
- package/dist/ui-engine/ui-file-splitter.js +47 -0
- package/dist/ui-engine/ui-lowering.d.ts +33 -0
- package/dist/ui-engine/ui-lowering.js +390 -0
- package/dist/ui-engine/ui-registry.d.ts +81 -0
- package/dist/ui-engine/ui-registry.js +429 -0
- package/dist/ui-engine/yoga-layout.d.ts +12 -0
- package/dist/ui-engine/yoga-layout.js +314 -0
- package/package.json +86 -0
- package/src/engine-index.ts +51 -0
- package/src/index.ts +232 -0
- package/src/preview/build-program.ts +734 -0
- package/src/preview/host-gfx.ts +580 -0
- package/src/preview/host-ui-runtime.ts +3245 -0
- package/src/preview/types.ts +96 -0
- package/src/types.ts +127 -0
- package/src/ui-engine/block-layout.ts +104 -0
- package/src/ui-engine/color.ts +263 -0
- package/src/ui-engine/css-parser.ts +1003 -0
- package/src/ui-engine/default-keyboards.ts +58 -0
- package/src/ui-engine/easing.ts +53 -0
- package/src/ui-engine/font-assets.ts +512 -0
- package/src/ui-engine/html-parser.ts +397 -0
- package/src/ui-engine/image-assets.ts +170 -0
- package/src/ui-engine/inline-parser.ts +78 -0
- package/src/ui-engine/keyframes.ts +47 -0
- package/src/ui-engine/layout-engine.ts +228 -0
- package/src/ui-engine/model.ts +1225 -0
- package/src/ui-engine/rich-layout.ts +257 -0
- package/src/ui-engine/run-types.ts +14 -0
- package/src/ui-engine/runtime-header/antialiasing.ts +141 -0
- package/src/ui-engine/runtime-header/blend-bodies.ts +39 -0
- package/src/ui-engine/runtime-header/canvas-helpers.ts +155 -0
- package/src/ui-engine/runtime-header/canvas-scrollbar.ts +105 -0
- package/src/ui-engine/runtime-header/color-mono-refresh.ts +154 -0
- package/src/ui-engine/runtime-header/dirty-scroll-mutators.ts +169 -0
- package/src/ui-engine/runtime-header/display-shim.ts +104 -0
- package/src/ui-engine/runtime-header/forward-decls.ts +137 -0
- package/src/ui-engine/runtime-header/guard-close.ts +8 -0
- package/src/ui-engine/runtime-header/image-drawing.ts +300 -0
- package/src/ui-engine/runtime-header/init-press-input.ts +126 -0
- package/src/ui-engine/runtime-header/keyboard.ts +342 -0
- package/src/ui-engine/runtime-header/node-decoration.ts +212 -0
- package/src/ui-engine/runtime-header/paint-order-coords.ts +190 -0
- package/src/ui-engine/runtime-header/paint-rects-repair.ts +553 -0
- package/src/ui-engine/runtime-header/scroll-physics.ts +161 -0
- package/src/ui-engine/runtime-header/state-bindings-nav.ts +176 -0
- package/src/ui-engine/runtime-header/structs.ts +220 -0
- package/src/ui-engine/runtime-header/text-rendering.ts +715 -0
- package/src/ui-engine/runtime-header/tick/bindings-phase.ts +103 -0
- package/src/ui-engine/runtime-header/tick/dirty-draw-phase.ts +1051 -0
- package/src/ui-engine/runtime-header/tick/flush-phase.ts +17 -0
- package/src/ui-engine/runtime-header/tick/scroll-canvas-phase.ts +15 -0
- package/src/ui-engine/runtime-header/tick/transitions-phase.ts +213 -0
- package/src/ui-engine/runtime-header/tick-motion-helpers.ts +26 -0
- package/src/ui-engine/runtime-header/tick.ts +18 -0
- package/src/ui-engine/runtime-header/touch-keyboard-fwd.ts +406 -0
- package/src/ui-engine/runtime-header/types-defines.ts +79 -0
- package/src/ui-engine/runtime-header.ts +71 -0
- package/src/ui-engine/scroll-memory-diagnostics.ts +79 -0
- package/src/ui-engine/select-engine.ts +21 -0
- package/src/ui-engine/style-resolver.ts +416 -0
- package/src/ui-engine/text-layout.ts +114 -0
- package/src/ui-engine/transpile-ui.ts +45 -0
- package/src/ui-engine/ua-stylesheet.ts +60 -0
- package/src/ui-engine/ui-file-splitter.ts +59 -0
- package/src/ui-engine/ui-lowering.ts +459 -0
- package/src/ui-engine/ui-registry.ts +530 -0
- package/src/ui-engine/yoga-layout.ts +309 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function emitTickBindingsPhase(): string;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Slice of the C++ runtime header (original source lines 3930-4026).
|
|
2
|
+
// ui_tick signature + opening, caret blink re-mark, bindings/list-bindings/input-bindings. Contains ui_tick opening.
|
|
3
|
+
// See docs/superpowers/specs/2026-07-12-split-runtime-header-design.md.
|
|
4
|
+
export function emitTickBindingsPhase() {
|
|
5
|
+
return `
|
|
6
|
+
static inline void ui_tick(uint16_t deltaMs) {
|
|
7
|
+
// Touch poll — runs if touch is configured (defined by the emit layer)
|
|
8
|
+
ui_poll_touch();
|
|
9
|
+
// ⓪' Poll GPIO inputs
|
|
10
|
+
ui_poll_inputs();
|
|
11
|
+
#if defined(UI_HIDE_OSK)
|
|
12
|
+
// Advance the caret blink phase for the active input (desktop target).
|
|
13
|
+
__ui_kb_blink++;
|
|
14
|
+
// Re-mark the edited input dirty every ~16 ticks so the blink repainting
|
|
15
|
+
// keeps cycling even when no other state changes (otherwise the caret
|
|
16
|
+
// freezes once the typed-text dirty clears).
|
|
17
|
+
if (__ui_kb_visible && __ui_kb_target >= 0 && (__ui_kb_blink & 0x10)) {
|
|
18
|
+
ui_mark_dirty((uint16_t)__ui_kb_target);
|
|
19
|
+
}
|
|
20
|
+
#endif
|
|
21
|
+
// ⓪ Evaluate bindings: call each binding's fn, compare to the node's
|
|
22
|
+
// current property value, mark dirty if changed.
|
|
23
|
+
for (uint16_t i = 0; i < __ui_binding_count; i++) {
|
|
24
|
+
if (__ui_bindings[i].prop == PROP_TEXT && __ui_bindings[i].textFn) {
|
|
25
|
+
// Text binding: fill the node's buffer, compare content, mark dirty if changed.
|
|
26
|
+
uint16_t n = __ui_bindings[i].node;
|
|
27
|
+
char oldBuf[UI_TEXT_BUF + 1];
|
|
28
|
+
strncpy(oldBuf, __ui_nodes[n].textBuffer, UI_TEXT_BUF);
|
|
29
|
+
oldBuf[UI_TEXT_BUF] = '\\0';
|
|
30
|
+
__ui_bindings[i].textFn(__ui_nodes[n].textBuffer, UI_TEXT_BUF + 1);
|
|
31
|
+
__ui_nodes[n].textBuffer[UI_TEXT_BUF] = '\\0';
|
|
32
|
+
if (strcmp(oldBuf, __ui_nodes[n].textBuffer) != 0) {
|
|
33
|
+
ui_invalidate_text_layout_cache(n);
|
|
34
|
+
ui_mark_dirty(n);
|
|
35
|
+
}
|
|
36
|
+
} else if (__ui_bindings[i].fn) {
|
|
37
|
+
// Color/numeric binding
|
|
38
|
+
uint32_t newVal = __ui_bindings[i].fn();
|
|
39
|
+
if (__ui_bindings[i].prop == PROP_VISIBLE) {
|
|
40
|
+
uint8_t nextVisible = newVal ? 1 : 0;
|
|
41
|
+
if (nextVisible != __ui_nodes[__ui_bindings[i].node].visible) {
|
|
42
|
+
ui_set_visible(__ui_bindings[i].node, nextVisible);
|
|
43
|
+
}
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (__ui_bindings[i].prop == PROP_VALUE) {
|
|
47
|
+
// Numeric value binding: drive a progress/range node's value live.
|
|
48
|
+
uint16_t n = __ui_bindings[i].node;
|
|
49
|
+
int16_t v = (int16_t)__ui_bindings[i].fn();
|
|
50
|
+
if (v != __ui_nodes[n].value) {
|
|
51
|
+
__ui_nodes[n].value = v;
|
|
52
|
+
ui_mark_dirty(n);
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
uint32_t* target = (__ui_bindings[i].prop == PROP_BG) ? &__ui_nodes[__ui_bindings[i].node].bg
|
|
57
|
+
: (__ui_bindings[i].prop == PROP_FG) ? &__ui_nodes[__ui_bindings[i].node].fg
|
|
58
|
+
: (__ui_bindings[i].prop == PROP_BORDER_COLOR) ? &__ui_nodes[__ui_bindings[i].node].borderColor
|
|
59
|
+
: &__ui_nodes[__ui_bindings[i].node].bg;
|
|
60
|
+
if (newVal != *target) {
|
|
61
|
+
*target = newVal;
|
|
62
|
+
// When a background binding writes a new color, ensure hasBg is set
|
|
63
|
+
// so the draw dispatch actually fills (the node may have started
|
|
64
|
+
// transparent but now has a runtime-assigned background).
|
|
65
|
+
if (__ui_bindings[i].prop == PROP_BG) __ui_nodes[__ui_bindings[i].node].hasBg = 1;
|
|
66
|
+
ui_mark_dirty(__ui_bindings[i].node);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ⓪b Evaluate list bindings (on-node): refresh item count, recompute content
|
|
71
|
+
// height, and advance any in-flight settle animation (bounce-back / edge-snap).
|
|
72
|
+
// Also note whether any active-screen node is settling (feeds scroll-motion
|
|
73
|
+
// gating below without a second full-node scan).
|
|
74
|
+
uint8_t settlingOnActiveScreen = 0;
|
|
75
|
+
for (uint16_t i = 0; i < __ui_node_count; i++) {
|
|
76
|
+
if (__ui_nodes[i].virtualized && __ui_nodes[i].listCountFn) {
|
|
77
|
+
uint16_t ih = __ui_nodes[i].listItemHeight > 0 ? __ui_nodes[i].listItemHeight : 24;
|
|
78
|
+
uint16_t newCount = __ui_nodes[i].listCountFn();
|
|
79
|
+
if (newCount != __ui_nodes[i].listCount) {
|
|
80
|
+
__ui_nodes[i].listCount = newCount;
|
|
81
|
+
__ui_nodes[i].contentHeight = (int16_t)((uint32_t)newCount * ih);
|
|
82
|
+
__ui_nodes[i].lastPaintedScrollY = __ui_nodes[i].scrollY - (__ui_nodes[i].box.h > 0 ? __ui_nodes[i].box.h : 1);
|
|
83
|
+
ui_mark_dirty(i);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (__ui_nodes[i].settling) {
|
|
87
|
+
if (__ui_nodes[i].screenId == __ui_active_screen) settlingOnActiveScreen = 1;
|
|
88
|
+
ui_scroll_advance_settle(i, deltaMs);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ⓪c Evaluate input bindings (two-way): if a bound <input>'s textBuffer
|
|
92
|
+
// changed since last tick (e.g. the user typed via the on-screen keyboard),
|
|
93
|
+
// fire the author's callback with the new text.
|
|
94
|
+
for (uint16_t i = 0; i < __ui_input_binding_count; i++) {
|
|
95
|
+
if (!__ui_input_bindings[i].cb) continue;
|
|
96
|
+
uint16_t n = __ui_input_bindings[i].node;
|
|
97
|
+
const char* cur = __ui_nodes[n].textBuffer;
|
|
98
|
+
if (strcmp(cur, __ui_input_bindings[i].lastSeen) != 0) {
|
|
99
|
+
strncpy(__ui_input_bindings[i].lastSeen, cur, UI_TEXT_BUF);
|
|
100
|
+
__ui_input_bindings[i].lastSeen[UI_TEXT_BUF] = '\\0';
|
|
101
|
+
__ui_input_bindings[i].cb(cur);
|
|
102
|
+
}`;
|
|
103
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function emitTickDirtyDrawPhase(): string;
|