@jalvin/runtime 2.0.43 → 2.0.45

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 (53) hide show
  1. package/dist/bibi.d.ts +4 -0
  2. package/dist/bibi.d.ts.map +1 -1
  3. package/dist/bibi.js +11 -9
  4. package/dist/bibi.js.map +1 -1
  5. package/dist/coroutines.js +22 -47
  6. package/dist/coroutines.js.map +1 -1
  7. package/dist/dom.d.ts +15 -0
  8. package/dist/dom.d.ts.map +1 -0
  9. package/dist/dom.js +212 -0
  10. package/dist/dom.js.map +1 -0
  11. package/dist/index.d.ts +5 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +20 -224
  14. package/dist/index.js.map +1 -1
  15. package/dist/nav.d.ts +48 -0
  16. package/dist/nav.d.ts.map +1 -0
  17. package/dist/nav.js +136 -0
  18. package/dist/nav.js.map +1 -0
  19. package/dist/stateflow.js +8 -19
  20. package/dist/stateflow.js.map +1 -1
  21. package/dist/stdlib/collections.js +55 -108
  22. package/dist/stdlib/collections.js.map +1 -1
  23. package/dist/stdlib/conversions.d.ts +2 -0
  24. package/dist/stdlib/conversions.d.ts.map +1 -1
  25. package/dist/stdlib/conversions.js +17 -29
  26. package/dist/stdlib/conversions.js.map +1 -1
  27. package/dist/stdlib/delegates.js +14 -28
  28. package/dist/stdlib/delegates.js.map +1 -1
  29. package/dist/stdlib/equality.js +1 -4
  30. package/dist/stdlib/equality.js.map +1 -1
  31. package/dist/stdlib/index.js +12 -28
  32. package/dist/stdlib/index.js.map +1 -1
  33. package/dist/stdlib/io.js +2 -6
  34. package/dist/stdlib/io.js.map +1 -1
  35. package/dist/stdlib/math.js +29 -37
  36. package/dist/stdlib/math.js.map +1 -1
  37. package/dist/stdlib/random.js +3 -8
  38. package/dist/stdlib/random.js.map +1 -1
  39. package/dist/stdlib/regex.js +4 -8
  40. package/dist/stdlib/regex.js.map +1 -1
  41. package/dist/stdlib/result.js +3 -9
  42. package/dist/stdlib/result.js.map +1 -1
  43. package/dist/stdlib/strings.js +24 -51
  44. package/dist/stdlib/strings.js.map +1 -1
  45. package/dist/stdlib/timing.js +3 -8
  46. package/dist/stdlib/timing.js.map +1 -1
  47. package/dist/stdlib/types.js +13 -29
  48. package/dist/stdlib/types.js.map +1 -1
  49. package/dist/ui.d.ts +12 -69
  50. package/dist/ui.d.ts.map +1 -1
  51. package/dist/ui.js +127 -228
  52. package/dist/ui.js.map +1 -1
  53. package/package.json +1 -1
package/dist/ui.js CHANGED
@@ -1,271 +1,170 @@
1
- "use strict";
2
1
  // ─────────────────────────────────────────────────────────────────────────────
3
- // Jalvin UI runtime — React hooks for StateFlow, ViewModel, remember, mutableStateOf
4
- //
5
- // These are the companion hooks that make Jalvin's UI primitives
6
- // work inside React components.
7
- //
8
- // `component fun` blocks compiled to React components call these hooks.
2
+ // Jalvin UI runtime — Vanilla DOM reactivity system
9
3
  // ─────────────────────────────────────────────────────────────────────────────
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.mutableStateOf = mutableStateOf;
12
- exports.remember = remember;
13
- exports.rememberMutableStateOf = rememberMutableStateOf;
14
- exports.collectAsState = collectAsState;
15
- exports.useViewModel = useViewModel;
16
- exports.LaunchedEffect = LaunchedEffect;
17
- exports.DisposableEffect = DisposableEffect;
18
- exports.SideEffect = SideEffect;
19
- exports.widthToSizeClass = widthToSizeClass;
20
- exports.heightToSizeClass = heightToSizeClass;
21
- exports.WindowSizeClassProvider = WindowSizeClassProvider;
22
- exports.calculateWindowSizeClass = calculateWindowSizeClass;
23
- let _react = null;
24
- function getReact() {
25
- if (_react)
26
- return _react;
27
- try {
28
- // Dynamic require keeps this file tree-shakeable in non-React builds
29
- // eslint-disable-next-line @typescript-eslint/no-var-requires
30
- _react = require("react");
31
- return _react;
4
+ let activeSubscriber = null;
5
+ let stateHolderIdCounter = 0;
6
+ class StateHolder {
7
+ _value;
8
+ subscribers = new Set();
9
+ id = ++stateHolderIdCounter;
10
+ constructor(initial) {
11
+ this._value = initial;
32
12
  }
33
- catch {
34
- throw new Error("[jalvin/runtime] React is required for component functions. " +
35
- "Install react@>=18 and add it to your peer dependencies.");
13
+ get value() {
14
+ if (activeSubscriber) {
15
+ // console.log(`[State ${this.id}] Subscribing active render loop.`);
16
+ this.subscribers.add(activeSubscriber);
17
+ }
18
+ return this._value;
36
19
  }
37
- }
38
- const stateflow_js_1 = require("./stateflow.js");
39
- /**
40
- * Hoisted `mutableStateOf(initial)` inside a `component fun`.
41
- * Returns a mutable object whose `.value` setter triggers a re-render.
42
- *
43
- * Compiled output:
44
- * val count = mutableStateOf(0)
45
- * → const count = mutableStateOf(0);
46
- * // count.value to read; count.value = x to update
47
- */
48
- function mutableStateOf(initial) {
49
- const R = getReact();
50
- const [v, setV] = R.useState(initial);
51
- // stateRef tracks the latest React state value. Updated on every render so
52
- // the value getter always returns the current value, not the initial one.
53
- const stateRef = R.useRef(v);
54
- const holderRef = R.useRef(null);
55
- stateRef.current = v;
56
- if (holderRef.current === null) {
57
- const holder = {};
58
- Object.defineProperties(holder, {
59
- value: {
60
- get() { return stateRef.current; },
61
- set(next) {
62
- if (!Object.is(stateRef.current, next))
63
- setV(next);
64
- },
65
- enumerable: true,
66
- configurable: false,
67
- },
68
- });
69
- holderRef.current = holder;
20
+ set value(next) {
21
+ if (!Object.is(this._value, next)) {
22
+ this._value = next;
23
+ this.notify();
24
+ }
70
25
  }
71
- return holderRef.current;
26
+ notify() {
27
+ for (const sub of Array.from(this.subscribers)) {
28
+ sub();
29
+ }
30
+ }
31
+ }
32
+ // -- Hook System ------------------------------------------------------------
33
+ let currentHookIndex = 0;
34
+ let hookState = [];
35
+ /** Reset the hook pointer (called at the start of every render). */
36
+ function resetHooks() {
37
+ currentHookIndex = 0;
72
38
  }
73
- // ---------------------------------------------------------------------------
74
- // remember { } — memoised value across recompositions
75
- // ---------------------------------------------------------------------------
76
39
  /**
77
- * Compute an expensive value once and remember it.
78
- *
79
- * val scope = remember { CoroutineScope() }
40
+ * Returns a reactive state holder.
80
41
  */
81
- function remember(compute, deps = []) {
82
- const R = getReact();
83
- return R.useMemo(compute, deps);
42
+ export function mutableStateOf(initial) {
43
+ return new StateHolder(initial);
84
44
  }
85
45
  /**
86
- * `remember { mutableStateOf(0) }` — convenience wrapper.
46
+ * Persists a value across re-renders.
87
47
  */
88
- function rememberMutableStateOf(initial) {
89
- const R = getReact();
90
- // eslint-disable-next-line react-hooks/exhaustive-deps
91
- return R.useMemo(() => mutableStateOf(initial), []);
48
+ export function remember(compute, deps = []) {
49
+ const idx = currentHookIndex++;
50
+ const existing = hookState[idx];
51
+ let depsChanged = !existing || !existing.deps || existing.deps.length !== deps.length;
52
+ if (!depsChanged && existing) {
53
+ for (let i = 0; i < deps.length; i++) {
54
+ if (!Object.is(deps[i], existing.deps[i])) {
55
+ depsChanged = true;
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ if (depsChanged) {
61
+ hookState[idx] = { value: compute(), deps };
62
+ }
63
+ return hookState[idx].value;
92
64
  }
93
- // ---------------------------------------------------------------------------
94
- // collectAsState — subscribe to a StateFlow inside a component
95
- // ---------------------------------------------------------------------------
96
65
  /**
97
- * Collects a StateFlow into React state. The component re-renders when
98
- * the flow emits a new value.
99
- *
100
- * val currentName by viewModel.name.collectAsState()
66
+ * Convenience wrapper.
101
67
  */
102
- function collectAsState(flow) {
103
- const R = getReact();
104
- const [value, setValue] = R.useState(flow.value);
105
- R.useEffect(() => {
106
- const unsub = flow.collect((v) => setValue(v));
107
- return unsub;
108
- // eslint-disable-next-line react-hooks/exhaustive-deps
109
- }, [flow]);
110
- return value;
68
+ export function rememberMutableStateOf(initial) {
69
+ return remember(() => mutableStateOf(initial));
111
70
  }
112
- // ---------------------------------------------------------------------------
113
- // useViewModel — get or create a ViewModel scoped to a component subtree
114
- // ---------------------------------------------------------------------------
115
71
  /**
116
- * Returns a shared ViewModel instance for the given key.
117
- *
118
- * val vm = useViewModel("CounterVm") { CounterViewModel() }
72
+ * Collects a StateFlow into reactive state, persisting the subscription across renders.
119
73
  */
120
- function useViewModel(key, factory) {
121
- const R = getReact();
122
- const vm = R.useMemo(() => (0, stateflow_js_1.viewModel)(key, factory), []);
123
- R.useEffect(() => {
124
- return () => (0, stateflow_js_1.clearViewModel)(key);
125
- // Only clear when the component truly unmounts from root
126
- // eslint-disable-next-line react-hooks/exhaustive-deps
127
- }, []);
128
- return vm;
74
+ export function collectAsState(flow) {
75
+ const state = remember(() => {
76
+ const s = mutableStateOf(flow.value);
77
+ flow.collect((v) => { s.value = v; });
78
+ return s;
79
+ }, [flow]);
80
+ return state.value;
129
81
  }
130
- // ---------------------------------------------------------------------------
131
- // LaunchedEffect — run a suspend block tied to component lifecycle
132
- // ---------------------------------------------------------------------------
133
82
  /**
134
- * Runs a suspend block when deps change. Cancels on unmount.
135
- *
136
- * LaunchedEffect(Unit) {
137
- * repeat(10) { delay(1_000) }
138
- * }
83
+ * Runs an effect tied to "component" execution.
139
84
  */
140
- function LaunchedEffect(deps, fn) {
141
- const R = getReact();
142
- R.useEffect(() => {
143
- let cancelled = false;
144
- const guard = async () => {
145
- if (!cancelled)
146
- await fn();
147
- };
148
- guard();
149
- return () => { cancelled = true; };
150
- // eslint-disable-next-line react-hooks/exhaustive-deps
85
+ export function LaunchedEffect(deps, fn) {
86
+ remember(() => {
87
+ fn();
88
+ return true;
151
89
  }, deps);
152
90
  }
153
- // ---------------------------------------------------------------------------
154
- // DisposableEffect — run setup/teardown on deps change
155
- // ---------------------------------------------------------------------------
156
- function DisposableEffect(deps, fn) {
157
- const R = getReact();
158
- R.useEffect(() => {
159
- const cleanup = fn();
160
- return cleanup;
161
- // eslint-disable-next-line react-hooks/exhaustive-deps
91
+ export function DisposableEffect(deps, fn) {
92
+ remember(() => {
93
+ fn();
94
+ return true;
162
95
  }, deps);
163
96
  }
164
- // ---------------------------------------------------------------------------
165
- // SideEffect — run a non-suspending effect every recomposition
166
- // ---------------------------------------------------------------------------
167
- function SideEffect(fn) {
168
- const R = getReact();
169
- R.useEffect(fn);
97
+ export function SideEffect(fn) {
98
+ fn();
170
99
  }
171
- /** @internal exported for testing */
172
- function widthToSizeClass(widthPx) {
100
+ export function widthToSizeClass(widthPx) {
173
101
  if (widthPx < 600)
174
102
  return "Compact";
175
103
  if (widthPx < 840)
176
104
  return "Medium";
177
105
  return "Expanded";
178
106
  }
179
- /** @internal exported for testing */
180
- function heightToSizeClass(heightPx) {
107
+ export function heightToSizeClass(heightPx) {
181
108
  if (heightPx < 480)
182
109
  return "Compact";
183
110
  if (heightPx < 900)
184
111
  return "Medium";
185
112
  return "Expanded";
186
113
  }
187
- // ---------------------------------------------------------------------------
188
- // WindowSizeClassProvider single resize listener for the whole tree
189
- //
190
- // Mount this once at the app root. All calls to calculateWindowSizeClass()
191
- // read from this context, so a single resize event produces exactly one
192
- // coordinated state update regardless of how many components call the hook.
193
- // ---------------------------------------------------------------------------
194
- const DEFAULT_WINDOW_SIZE_CLASS = {
195
- widthSizeClass: "Expanded",
196
- heightSizeClass: "Medium",
197
- };
198
- // Lazily created so the module remains usable in non-React (Node) builds.
199
- let _WindowSizeClassContext = null;
200
- function getWindowSizeClassContext() {
201
- if (!_WindowSizeClassContext) {
202
- _WindowSizeClassContext = getReact().createContext(DEFAULT_WINDOW_SIZE_CLASS);
203
- }
204
- return _WindowSizeClassContext;
205
- }
206
- /**
207
- * Mount once at the app root. Registers a single `resize` listener and
208
- * distributes the current {@link WindowSizeClassState} to all descendants
209
- * that call {@link calculateWindowSizeClass}.
210
- *
211
- * The vite-plugin entry module wraps the root component in this provider
212
- * automatically when the `entry` option is used.
213
- *
214
- * @example
215
- * ```jalvin
216
- * // main entry
217
- * root.render(
218
- * WindowSizeClassProvider { MyApp() }
219
- * )
220
- * ```
221
- */
222
- function WindowSizeClassProvider({ children }) {
223
- const R = getReact();
224
- const getState = () => ({
225
- widthSizeClass: widthToSizeClass(typeof window !== "undefined" ? window.innerWidth : 1280),
226
- heightSizeClass: heightToSizeClass(typeof window !== "undefined" ? window.innerHeight : 800),
227
- });
228
- const [state, setState] = R.useState(getState);
229
- R.useEffect(() => {
230
- const onResize = () => {
231
- const next = getState();
232
- setState(prev => prev.widthSizeClass === next.widthSizeClass &&
233
- prev.heightSizeClass === next.heightSizeClass
234
- ? prev
235
- : next);
114
+ const windowSizeState = new StateHolder({
115
+ widthSizeClass: widthToSizeClass(typeof window !== "undefined" ? window.innerWidth : 1280),
116
+ heightSizeClass: heightToSizeClass(typeof window !== "undefined" ? window.innerHeight : 800),
117
+ });
118
+ if (typeof window !== "undefined") {
119
+ window.addEventListener("resize", () => {
120
+ windowSizeState.value = {
121
+ widthSizeClass: widthToSizeClass(window.innerWidth),
122
+ heightSizeClass: heightToSizeClass(window.innerHeight),
236
123
  };
237
- window.addEventListener("resize", onResize);
238
- return () => window.removeEventListener("resize", onResize);
239
- // eslint-disable-next-line react-hooks/exhaustive-deps
240
- }, []);
241
- const ctx = getWindowSizeClassContext();
242
- return R.createElement(ctx.Provider, { value: state }, children);
124
+ });
125
+ }
126
+ export function calculateWindowSizeClass() {
127
+ return windowSizeState.value;
128
+ }
129
+ export function WindowSizeClassProvider({ children }) {
130
+ return children;
243
131
  }
132
+ // -- ViewModels -------------------------------------------------------------
133
+ export { viewModel as useViewModel } from "./stateflow.js";
134
+ // -- Root Rendering ---------------------------------------------------------
135
+ let renderCount = 0;
136
+ import { patch } from "./dom.js";
244
137
  /**
245
- * Returns the current {@link WindowSizeClassState}. Re-renders only when the
246
- * window crosses a breakpoint boundary.
247
- *
248
- * Requires {@link WindowSizeClassProvider} to be mounted somewhere above this
249
- * component in the tree (the vite-plugin does this automatically). If no
250
- * provider is found the hook falls back to "Expanded/Medium" and logs a
251
- * warning in development.
252
- *
253
- * Mirrors `calculateWindowSizeClass()` from Compose Material3 Adaptive.
254
- *
255
- * @example
256
- * ```jalvin
257
- * component fun AdaptiveLayout() {
258
- * val windowSize = calculateWindowSizeClass()
259
- * if (windowSize.widthSizeClass == "Compact") {
260
- * MobileLayout()
261
- * } else {
262
- * DesktopLayout()
263
- * }
264
- * }
265
- * ```
138
+ * Mounts a Jalvin component to the DOM and sets up the re-render loop.
266
139
  */
267
- function calculateWindowSizeClass() {
268
- const R = getReact();
269
- return R.useContext(getWindowSizeClassContext());
140
+ export function render(rootComponent, container) {
141
+ // Store the last rendered VNode on the container
142
+ let oldVNode = container._jalvin_vnode || null;
143
+ const update = () => {
144
+ renderCount++;
145
+ activeSubscriber = update;
146
+ resetHooks();
147
+ // Save current active element (focus) and selection
148
+ let activeId = "";
149
+ if (document.activeElement && document.activeElement.id) {
150
+ activeId = document.activeElement.id;
151
+ }
152
+ else if (document.activeElement && document.activeElement.tagName === "INPUT") {
153
+ activeId = document.activeElement.name;
154
+ }
155
+ const newVNode = rootComponent();
156
+ // Patch the DOM instead of recreating it
157
+ patch(container, newVNode, oldVNode);
158
+ oldVNode = newVNode;
159
+ container._jalvin_vnode = oldVNode;
160
+ // Restore focus if possible
161
+ if (activeId) {
162
+ const toFocus = document.getElementById(activeId) || document.querySelector(`input[name="${activeId}"]`);
163
+ if (toFocus)
164
+ toFocus.focus();
165
+ }
166
+ activeSubscriber = null;
167
+ };
168
+ update();
270
169
  }
271
170
  //# sourceMappingURL=ui.js.map
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,oDAAoD;AACpD,gFAAgF;AAQhF,IAAI,gBAAgB,GAAsB,IAAI,CAAC;AAC/C,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAE7B,MAAM,WAAW;IACP,MAAM,CAAI;IACV,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAC3B,EAAE,GAAG,EAAE,oBAAoB,CAAC;IAE7C,YAAY,OAAU;QACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,IAAI,gBAAgB,EAAE,CAAC;YACrB,qEAAqE;YACrE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,IAAO;QACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,MAAM;QACZ,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAE9E,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,IAAI,SAAS,GAAU,EAAE,CAAC;AAE1B,oEAAoE;AACpE,SAAS,UAAU;IACjB,gBAAgB,GAAG,CAAC,CAAC;AACvB,CAAC;AAQD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAI,OAAU;IAC1C,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAI,OAAgB,EAAE,OAA2B,EAAE;IACzE,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,WAAW,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IACtF,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAI,OAAU;IAClD,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAI,IAAkB;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC1B,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAwB,EACxB,EAAuB;IAEvB,QAAQ,CAAC,GAAG,EAAE;QACZ,EAAE,EAAE,CAAC;QACL,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAwB,EACxB,EAAsB;IAEtB,QAAQ,CAAC,GAAG,EAAE;QACZ,EAAE,EAAE,CAAC;QACL,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAc;IACvC,EAAE,EAAE,CAAC;AACP,CAAC;AAMD,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,QAAQ,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,QAAQ,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IACpC,OAAO,UAAU,CAAC;AACpB,CAAC;AAOD,MAAM,eAAe,GAAG,IAAI,WAAW,CAAuB;IAC5D,cAAc,EAAE,gBAAgB,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,eAAe,EAAE,iBAAiB,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;CAC7F,CAAC,CAAC;AAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACrC,eAAe,CAAC,KAAK,GAAG;YACtB,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;YACnD,eAAe,EAAE,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC;SACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,eAAe,CAAC,KAAK,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAE,QAAQ,EAAsB;IACtE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAE9E,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3D,8EAA8E;AAE9E,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,aAA0B,EAAE,SAAsB;IACvE,iDAAiD;IACjD,IAAI,QAAQ,GAAkB,SAAiB,CAAC,aAAa,IAAI,IAAI,CAAC;IAEtE,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,WAAW,EAAE,CAAC;QACd,gBAAgB,GAAG,MAAM,CAAC;QAC1B,UAAU,EAAE,CAAC;QAEb,oDAAoD;QACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACxD,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,CAAC;aAAM,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAChF,QAAQ,GAAI,QAAQ,CAAC,aAAkC,CAAC,IAAI,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;QAEjC,yCAAyC;QACzC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrC,QAAQ,GAAG,QAAQ,CAAC;QACnB,SAAiB,CAAC,aAAa,GAAG,QAAQ,CAAC;QAE5C,4BAA4B;QAC5B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,eAAe,QAAQ,IAAI,CAAC,CAAC;YACzG,IAAI,OAAO;gBAAG,OAAuB,CAAC,KAAK,EAAE,CAAC;QAChD,CAAC;QAED,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,EAAE,CAAC;AACX,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jalvin/runtime",
3
- "version": "2.0.43",
3
+ "version": "2.0.45",
4
4
  "description": "Jalvin runtime — Bibi HTTP client, coroutines, StateFlow, ViewModel, UI reactivity",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",