@jalvin/runtime 2.0.42 → 2.0.43

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 +0 -4
  2. package/dist/bibi.d.ts.map +1 -1
  3. package/dist/bibi.js +9 -11
  4. package/dist/bibi.js.map +1 -1
  5. package/dist/coroutines.js +47 -22
  6. package/dist/coroutines.js.map +1 -1
  7. package/dist/index.d.ts +2 -5
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +224 -20
  10. package/dist/index.js.map +1 -1
  11. package/dist/stateflow.js +19 -8
  12. package/dist/stateflow.js.map +1 -1
  13. package/dist/stdlib/collections.js +108 -55
  14. package/dist/stdlib/collections.js.map +1 -1
  15. package/dist/stdlib/conversions.d.ts +0 -2
  16. package/dist/stdlib/conversions.d.ts.map +1 -1
  17. package/dist/stdlib/conversions.js +29 -17
  18. package/dist/stdlib/conversions.js.map +1 -1
  19. package/dist/stdlib/delegates.js +28 -14
  20. package/dist/stdlib/delegates.js.map +1 -1
  21. package/dist/stdlib/equality.js +4 -1
  22. package/dist/stdlib/equality.js.map +1 -1
  23. package/dist/stdlib/index.js +28 -12
  24. package/dist/stdlib/index.js.map +1 -1
  25. package/dist/stdlib/io.js +6 -2
  26. package/dist/stdlib/io.js.map +1 -1
  27. package/dist/stdlib/math.js +37 -29
  28. package/dist/stdlib/math.js.map +1 -1
  29. package/dist/stdlib/random.js +8 -3
  30. package/dist/stdlib/random.js.map +1 -1
  31. package/dist/stdlib/regex.js +8 -4
  32. package/dist/stdlib/regex.js.map +1 -1
  33. package/dist/stdlib/result.js +9 -3
  34. package/dist/stdlib/result.js.map +1 -1
  35. package/dist/stdlib/strings.js +51 -24
  36. package/dist/stdlib/strings.js.map +1 -1
  37. package/dist/stdlib/timing.js +8 -3
  38. package/dist/stdlib/timing.js.map +1 -1
  39. package/dist/stdlib/types.js +29 -13
  40. package/dist/stdlib/types.js.map +1 -1
  41. package/dist/ui.d.ts +69 -12
  42. package/dist/ui.d.ts.map +1 -1
  43. package/dist/ui.js +228 -127
  44. package/dist/ui.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/dom.d.ts +0 -15
  47. package/dist/dom.d.ts.map +0 -1
  48. package/dist/dom.js +0 -212
  49. package/dist/dom.js.map +0 -1
  50. package/dist/nav.d.ts +0 -48
  51. package/dist/nav.d.ts.map +0 -1
  52. package/dist/nav.js +0 -136
  53. package/dist/nav.js.map +0 -1
package/dist/dom.js DELETED
@@ -1,212 +0,0 @@
1
- // ─────────────────────────────────────────────────────────────────────────────
2
- // Jalvin DOM Runtime — Virtual DOM and Patching
3
- // ─────────────────────────────────────────────────────────────────────────────
4
- /**
5
- * Creates a Virtual DOM Node instead of a real element.
6
- */
7
- export function jalvinCreateElement(tag, props, ...children) {
8
- if (typeof tag === "function") {
9
- // We expect components to return VNodes directly now.
10
- return tag(props || {}, children);
11
- }
12
- // Flatten children
13
- const flatChildren = [];
14
- const append = (child) => {
15
- if (child === null || child === undefined)
16
- return;
17
- if (Array.isArray(child)) {
18
- child.forEach(append);
19
- }
20
- else if (typeof child === "object" && child.tag) {
21
- // It's a VNode
22
- flatChildren.push(child);
23
- }
24
- else if (typeof child === "object" && typeof child.nodeType === "number") {
25
- // Fallback for native DOM nodes (try to avoid this, but support it if necessary)
26
- flatChildren.push(child);
27
- }
28
- else {
29
- // Primitives to strings
30
- flatChildren.push(String(child));
31
- }
32
- };
33
- const childrenArray = Array.isArray(children[0]) && children.length === 1
34
- ? children[0]
35
- : children;
36
- if (Array.isArray(childrenArray)) {
37
- childrenArray.forEach(append);
38
- }
39
- else {
40
- append(childrenArray);
41
- }
42
- return { tag: tag, props: props || {}, children: flatChildren };
43
- }
44
- /**
45
- * A basic diffing algorithm to update the DOM without recreating it.
46
- */
47
- export function patch(parentEl, newVNode, oldVNode, index = 0) {
48
- const child = parentEl.childNodes[index];
49
- if (!oldVNode) {
50
- // ADD: Node doesn't exist, append it.
51
- if (newVNode !== null) {
52
- parentEl.appendChild(createDOMNode(newVNode));
53
- }
54
- }
55
- else if (!newVNode) {
56
- // REMOVE: Node exists but new one doesn't. Remove it.
57
- if (child)
58
- parentEl.removeChild(child);
59
- }
60
- else if (changed(newVNode, oldVNode)) {
61
- // REPLACE: Node type changed entirely.
62
- if (child) {
63
- parentEl.replaceChild(createDOMNode(newVNode), child);
64
- }
65
- else {
66
- parentEl.appendChild(createDOMNode(newVNode));
67
- }
68
- }
69
- else if (typeof newVNode === "object" && typeof oldVNode === "object" && newVNode.tag === oldVNode.tag) {
70
- // UPDATE: Same tag, update props and children.
71
- if (!child)
72
- return;
73
- // Guard: native DOM node (e.g. a stray TextNode) — sync text and bail, no VNode children to recurse.
74
- if (newVNode.nodeType !== undefined) {
75
- if (newVNode.nodeType === 3 && child.nodeType === 3) {
76
- const newText = newVNode.data ?? "";
77
- if (child.data !== newText)
78
- child.data = newText;
79
- }
80
- return;
81
- }
82
- const el = child;
83
- newVNode.el = el;
84
- updateProps(el, newVNode.props, oldVNode.props);
85
- // Recursively patch children.
86
- const newLength = newVNode.children.length;
87
- const oldLength = oldVNode.children.length;
88
- const max = Math.max(newLength, oldLength);
89
- // We iterate backwards when removing children to avoid index shifting issues,
90
- // but a simpler approach for basic patching is forward iteration, then trim.
91
- for (let i = 0; i < max; i++) {
92
- patch(el, newVNode.children[i] ?? null, oldVNode.children[i] ?? null, i);
93
- }
94
- // Trim excess children if old length was greater
95
- while (el.childNodes.length > newLength) {
96
- el.removeChild(el.lastChild);
97
- }
98
- }
99
- }
100
- function createDOMNode(vnode) {
101
- if (typeof vnode === "string") {
102
- return document.createTextNode(vnode);
103
- }
104
- if (vnode.tag === undefined) {
105
- // Must be a native DOM node that snuck in
106
- return vnode;
107
- }
108
- const el = document.createElement(vnode.tag);
109
- vnode.el = el;
110
- updateProps(el, vnode.props, {});
111
- for (const child of vnode.children) {
112
- el.appendChild(createDOMNode(child));
113
- }
114
- return el;
115
- }
116
- function changed(node1, node2) {
117
- if (typeof node1 !== typeof node2)
118
- return true;
119
- if (typeof node1 === "string" && node1 !== node2)
120
- return true;
121
- if (typeof node1 === "object" && typeof node2 === "object") {
122
- const nt1 = node1.nodeType;
123
- const nt2 = node2.nodeType;
124
- if (nt1 !== undefined || nt2 !== undefined) {
125
- if (nt1 !== nt2)
126
- return true;
127
- if (nt1 === 3)
128
- return node1.data !== node2.data;
129
- return false;
130
- }
131
- if (node1.tag !== node2.tag)
132
- return true;
133
- }
134
- return false;
135
- }
136
- function updateProps(el, newProps, oldProps) {
137
- // Remove old props
138
- for (const key in oldProps) {
139
- if (!(key in newProps)) {
140
- if (key === "style") {
141
- el.style.cssText = "";
142
- }
143
- else if (key.startsWith("on")) {
144
- // We handle event listeners via a unified dispatcher to easily update them
145
- removeEvent(el, key);
146
- }
147
- else if (key === "className") {
148
- el.className = "";
149
- }
150
- else {
151
- el[key] = undefined;
152
- }
153
- }
154
- }
155
- // Set new props
156
- for (const key in newProps) {
157
- const value = newProps[key];
158
- const oldValue = oldProps[key];
159
- if (value === oldValue)
160
- continue;
161
- if (key === "style") {
162
- if (typeof value === "object") {
163
- // Clear previous style first to handle removed properties
164
- el.style.cssText = "";
165
- Object.assign(el.style, value);
166
- }
167
- }
168
- else if (key.startsWith("on") && typeof value === "function") {
169
- updateEvent(el, key, value);
170
- }
171
- else if (key === "className") {
172
- el.className = String(value ?? "");
173
- }
174
- else {
175
- el[key] = value;
176
- }
177
- }
178
- }
179
- // Global event registry for elements so we can easily swap listeners without removing/re-adding DOM listeners constantly.
180
- const eventRegistry = new WeakMap();
181
- function getRegistry(el) {
182
- let reg = eventRegistry.get(el);
183
- if (!reg) {
184
- reg = {};
185
- eventRegistry.set(el, reg);
186
- }
187
- return reg;
188
- }
189
- function updateEvent(el, propKey, handler) {
190
- const eventName = propKey.slice(2).toLowerCase();
191
- const reg = getRegistry(el);
192
- if (!reg[eventName]) {
193
- // Add real DOM listener once
194
- el.addEventListener(eventName, (e) => {
195
- const currentHandler = getRegistry(el)[eventName];
196
- if (currentHandler) {
197
- // Wrap the native event with React-like synthetic structure for compatibility with existing UI code
198
- currentHandler(e);
199
- }
200
- });
201
- }
202
- // Just update the stored reference
203
- reg[eventName] = handler;
204
- }
205
- function removeEvent(el, propKey) {
206
- const eventName = propKey.slice(2).toLowerCase();
207
- const reg = getRegistry(el);
208
- if (reg[eventName]) {
209
- delete reg[eventName];
210
- }
211
- }
212
- //# sourceMappingURL=dom.js.map
package/dist/dom.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
package/dist/nav.d.ts DELETED
@@ -1,48 +0,0 @@
1
- import type { StateFlow } from "./stateflow.js";
2
- import type { VNode } from "./dom.js";
3
- export interface BackStackEntry {
4
- /** Matched route pattern, e.g. "profile/{userId}" */
5
- route: string;
6
- /** Actual destination path, e.g. "profile/42" */
7
- destination: string;
8
- /** Extracted path parameters */
9
- arguments: Record<string, string>;
10
- }
11
- export interface NavOptions {
12
- /** Pop back stack up to (but not including) this route before navigating */
13
- popUpTo?: string;
14
- /** If true, also pop the popUpTo route itself */
15
- popUpToInclusive?: boolean;
16
- /** If true and already at destination, don't add a duplicate entry */
17
- launchSingleTop?: boolean;
18
- }
19
- interface CompiledRoute {
20
- pattern: string;
21
- regex: RegExp;
22
- paramNames: string[];
23
- content: (entry: BackStackEntry) => VNode;
24
- }
25
- export declare class NavGraphBuilder {
26
- readonly _routes: CompiledRoute[];
27
- composable(pattern: string, content: (entry: BackStackEntry) => VNode): void;
28
- }
29
- export declare class NavController {
30
- private readonly _backStack;
31
- private readonly _currentEntry;
32
- private _resolver;
33
- constructor();
34
- get currentBackStackEntry(): StateFlow<BackStackEntry | null>;
35
- _setResolver(resolver: (dest: string) => BackStackEntry | null): void;
36
- _initFromHash(startDestination: string): void;
37
- private _navigateTo;
38
- navigate(destination: string, options?: NavOptions): void;
39
- popBackStack(): boolean;
40
- canPopBackStack(): boolean;
41
- }
42
- export declare function rememberNavController(): NavController;
43
- export declare function NavHost(props: {
44
- navController: NavController;
45
- startDestination: string;
46
- }, children?: Array<((builder: NavGraphBuilder) => void) | any>): VNode;
47
- export {};
48
- //# sourceMappingURL=nav.d.ts.map
package/dist/nav.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC;CAC3C;AAyBD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,CAAM;IAEvC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,GAAG,IAAI;CAI7E;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IACxE,OAAO,CAAC,SAAS,CAA0D;;IAM3E,IAAI,qBAAqB,IAAI,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAE5D;IAED,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,GAAG,IAAI;IAIrE,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAc7C,OAAO,CAAC,WAAW;IAOnB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IA0BzD,YAAY,IAAI,OAAO;IAYvB,eAAe,IAAI,OAAO;CAG3B;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EACjE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAC3D,KAAK,CAgCP"}
package/dist/nav.js DELETED
@@ -1,136 +0,0 @@
1
- // Jalvin Nav — Compose Navigation-style router (hash-based)
2
- import { MutableStateFlow } from "./stateflow.js";
3
- import { remember, collectAsState } from "./ui.js";
4
- function compilePattern(pattern) {
5
- const paramNames = [];
6
- const regexStr = pattern.replace(/\{(\w+)\}/g, (_, name) => {
7
- paramNames.push(name);
8
- return "([^/]+)";
9
- });
10
- return { regex: new RegExp(`^${regexStr}$`), paramNames };
11
- }
12
- function matchRoute(routes, destination) {
13
- for (const route of routes) {
14
- const m = route.regex.exec(destination);
15
- if (m) {
16
- const args = {};
17
- for (let i = 0; i < route.paramNames.length; i++) {
18
- args[route.paramNames[i] ?? ""] = m[i + 1] ?? "";
19
- }
20
- return { route: route.pattern, destination, arguments: args };
21
- }
22
- }
23
- return null;
24
- }
25
- export class NavGraphBuilder {
26
- _routes = [];
27
- composable(pattern, content) {
28
- const { regex, paramNames } = compilePattern(pattern);
29
- this._routes.push({ pattern, regex, paramNames, content });
30
- }
31
- }
32
- export class NavController {
33
- _backStack = [];
34
- _currentEntry;
35
- _resolver = null;
36
- constructor() {
37
- this._currentEntry = new MutableStateFlow(null);
38
- }
39
- get currentBackStackEntry() {
40
- return this._currentEntry;
41
- }
42
- _setResolver(resolver) {
43
- this._resolver = resolver;
44
- }
45
- _initFromHash(startDestination) {
46
- const hash = typeof window !== "undefined" ? window.location.hash : "";
47
- const dest = hash.startsWith("#/") ? hash.slice(2) : startDestination;
48
- this._navigateTo(dest);
49
- if (typeof window !== "undefined") {
50
- window.addEventListener("hashchange", () => {
51
- const h = window.location.hash;
52
- const d = h.startsWith("#/") ? h.slice(2) : startDestination;
53
- this._navigateTo(d);
54
- });
55
- }
56
- }
57
- _navigateTo(destination) {
58
- const entry = this._resolver ? this._resolver(destination) : null;
59
- if (!entry)
60
- return;
61
- this._backStack.push(entry);
62
- this._currentEntry.value = entry;
63
- }
64
- navigate(destination, options) {
65
- if (options?.launchSingleTop && this._currentEntry.value?.destination === destination) {
66
- return;
67
- }
68
- if (options?.popUpTo) {
69
- const targetRoute = options.popUpTo;
70
- let idx = this._backStack.length - 1;
71
- while (idx >= 0) {
72
- const e = this._backStack[idx];
73
- if (e && e.route === targetRoute)
74
- break;
75
- idx--;
76
- }
77
- if (idx >= 0) {
78
- const removeFrom = options.popUpToInclusive ? idx : idx + 1;
79
- this._backStack.splice(removeFrom);
80
- }
81
- }
82
- if (typeof window !== "undefined") {
83
- window.location.hash = `#/${destination}`;
84
- }
85
- else {
86
- this._navigateTo(destination);
87
- }
88
- }
89
- popBackStack() {
90
- if (this._backStack.length <= 1)
91
- return false;
92
- this._backStack.pop();
93
- const prev = this._backStack[this._backStack.length - 1] ?? null;
94
- this._currentEntry.value = prev;
95
- if (prev && typeof window !== "undefined") {
96
- // replaceState does not fire hashchange, so no re-push into _backStack
97
- history.replaceState(null, "", `#/${prev.destination}`);
98
- }
99
- return true;
100
- }
101
- canPopBackStack() {
102
- return this._backStack.length > 1;
103
- }
104
- }
105
- export function rememberNavController() {
106
- return remember(() => new NavController());
107
- }
108
- export function NavHost(props, children) {
109
- const { navController, startDestination } = props;
110
- const builder = remember(() => {
111
- const b = new NavGraphBuilder();
112
- if (children) {
113
- for (const child of children) {
114
- if (typeof child === "function")
115
- child(b);
116
- }
117
- }
118
- return b;
119
- });
120
- remember(() => {
121
- navController._setResolver((dest) => matchRoute(builder._routes, dest));
122
- navController._initFromHash(startDestination);
123
- return true;
124
- });
125
- const entry = collectAsState(navController.currentBackStackEntry);
126
- if (!entry) {
127
- return { tag: "div", props: {}, children: [] };
128
- }
129
- for (const route of builder._routes) {
130
- if (route.regex.test(entry.destination)) {
131
- return route.content(entry);
132
- }
133
- }
134
- return { tag: "div", props: {}, children: [] };
135
- }
136
- //# sourceMappingURL=nav.js.map
package/dist/nav.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav.js","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"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"}