@oddo/ui 0.0.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/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # @oddo/ui
2
+
3
+ The runtime library for the Oddo language. This package provides the reactive primitives and DOM utilities that compiled Oddo code depends on.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @oddo/ui
9
+ ```
10
+
11
+ ## Overview
12
+
13
+ `@oddo/ui` is a companion package to `@oddo/lang`. When you write Oddo code and compile it, the generated JavaScript imports from this package.
14
+
15
+ **You write Oddo:**
16
+ ```oddo
17
+ Counter = () => {
18
+ @state count = 0
19
+ @computed doubled = count * 2
20
+ @mutate increment = () => {
21
+ count := count + 1
22
+ }
23
+
24
+ return <button onclick={increment}>
25
+ Count: {count}, Doubled: {doubled}
26
+ </button>
27
+ }
28
+ ```
29
+
30
+ **Which compiles to JavaScript using `@oddo/ui`:**
31
+ ```javascript
32
+ import { state, computed, mutate, e } from "@oddo/ui";
33
+
34
+ const Counter = () => {
35
+ const count = state(0);
36
+ const doubled = computed(() => count() * 2);
37
+ const increment = mutate(() => {
38
+ count(count() + 1);
39
+ });
40
+
41
+ return e("button", { onclick: increment },
42
+ "Count: ", count, ", Doubled: ", doubled
43
+ );
44
+ };
45
+ ```
46
+
47
+ ## Direct Imports
48
+
49
+ Some utilities are meant to be imported directly in your Oddo code:
50
+
51
+ ```oddo
52
+ import { mount } from "@oddo/ui"
53
+
54
+ App = () => {
55
+ return <div>Hello Oddo!</div>
56
+ }
57
+
58
+ mount(document.body, <App />)
59
+ ```
60
+
61
+ ### Available Exports
62
+
63
+ | Export | Description |
64
+ |--------|-------------|
65
+ | `mount(container, element)` | Mount an Oddo component to the DOM |
66
+
67
+ ## Used by the Compiler
68
+
69
+ These exports are used internally by compiled Oddo code:
70
+
71
+ | Oddo Syntax | Compiles To |
72
+ |-------------|-------------|
73
+ | `@state x = 0` | `state(0)` |
74
+ | `@computed y = x + 1` | `computed(() => x() + 1)` |
75
+ | `@effect () => console.log(x)` | `effect(() => console.log(x()))` |
76
+ | `@mutate inc = () => { x := x + 1 }` | `mutate(() => { x(x() + 1) })` |
77
+
78
+ ## License
79
+
80
+ MIT
package/dist/index.js ADDED
@@ -0,0 +1,302 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class;// src/reactive.mjs
2
+ var reactiveSymbol = /* @__PURE__ */ Symbol.for("oddo::is-reactive-handler-property-symbol");
3
+ var ReactiveContainer = (_class = class {
4
+ __init() {this[reactiveSymbol] = true}
5
+ constructor(getter) {;_class.prototype.__init.call(this);
6
+ this.get = getter;
7
+ Object.freeze(this);
8
+ }
9
+ }, _class);
10
+ var observable = (observers = /* @__PURE__ */ new Set()) => ({
11
+ subscribe: (fn) => observers.add(fn),
12
+ notify: () => {
13
+ const current = Array.from(observers);
14
+ observers.clear();
15
+ for (const observer of current) {
16
+ observer();
17
+ }
18
+ }
19
+ });
20
+ var state = (state2) => {
21
+ const { subscribe, notify } = observable();
22
+ return [
23
+ new ReactiveContainer((caller) => (caller && subscribe(caller), state2)),
24
+ (value) => value !== state2 && (state2 = value, notify())
25
+ ];
26
+ };
27
+ var bindDependencies = (deps, cleanup) => deps.map((dep) => dep[reactiveSymbol] ? dep.get.bind(null, cleanup) : () => dep);
28
+ var computed = (fn, deps) => {
29
+ const { subscribe, notify } = observable();
30
+ let cache, cached = false;
31
+ deps = bindDependencies(deps, () => (cached = false, notify()));
32
+ return new ReactiveContainer(function computed2(caller) {
33
+ if (!cached) {
34
+ caller && subscribe(caller);
35
+ cache = fn(...deps);
36
+ cached = true;
37
+ }
38
+ return cache;
39
+ });
40
+ };
41
+ var effect = (fn, deps) => {
42
+ const effect3 = schedule.bind(null, () => fn(...deps));
43
+ deps = bindDependencies(deps, effect3);
44
+ effect3();
45
+ };
46
+ var effect2 = (fn, deps) => {
47
+ const effect3 = () => fn(...deps);
48
+ deps = bindDependencies(deps, schedule.bind(null, effect3));
49
+ effect3();
50
+ };
51
+ var queue = [];
52
+ var schedule = (effect3) => {
53
+ queue.length || queueMicrotask(executeQueue);
54
+ queue.push(effect3);
55
+ };
56
+ var executeQueue = () => {
57
+ for (const effect3 of queue) {
58
+ effect3();
59
+ }
60
+ queue.length = 0;
61
+ };
62
+ var copyOnWrite = (target) => {
63
+ let dirty = false;
64
+ return (update = true) => {
65
+ if (dirty) {
66
+ return target;
67
+ }
68
+ dirty = update;
69
+ return target = Object.assign(target.constructor(), target);
70
+ };
71
+ };
72
+ var noop = () => {
73
+ };
74
+ var stateProxy = (target, mutable, notifyParent) => {
75
+ if (target && typeof target === "object") {
76
+ const mutate = copyOnWrite(target);
77
+ const children = /* @__PURE__ */ new Map();
78
+ return new Proxy(noop, {
79
+ apply() {
80
+ return target = mutate(mutable);
81
+ },
82
+ set(_, key, value) {
83
+ if (record.hasOwnProperty(prop) && target[key] === value) return false;
84
+ if (children.has(key) && !(value && typeof value === "object")) {
85
+ children.delete(key);
86
+ }
87
+ target = mutate();
88
+ target[key] = value;
89
+ mutable || (notifyParent == null ? void 0 : notifyParent(target));
90
+ return true;
91
+ },
92
+ get(_, key) {
93
+ const value = Reflect.get(target, key, target);
94
+ if (!children.has(key)) {
95
+ children.set(stateProxy(value, mutable, (value2) => {
96
+ target = mutate();
97
+ target[key] = value2;
98
+ }));
99
+ }
100
+ return children.get(key);
101
+ }
102
+ });
103
+ }
104
+ return () => target;
105
+ };
106
+ var liftValue = (arg) => (arg == null ? void 0 : arg[reactiveSymbol]) ? arg.get() : arg;
107
+ var empty = Object.freeze([]);
108
+ var transact = (mutator, finalizer, targets, otherValues = empty) => {
109
+ otherValues = bindDependencies(otherValues);
110
+ return (...args) => {
111
+ const stateProxies = targets.map((state2) => stateProxy(state2.get()));
112
+ mutator(finalizer, ...stateProxies, ...otherValues, ...args.map(liftValue));
113
+ };
114
+ };
115
+ var lift = (fn, deps) => fn(...bindDependencies(deps));
116
+ var liftFn = (callbackFn, deps = empty) => (...args) => callbackFn(...deps.map(liftValue), ...args.map(liftValue));
117
+
118
+ // src/attrs.mjs
119
+ var patchAttributes = (el, newAttrs, oldAttrs = {}) => {
120
+ for (const key in oldAttrs) {
121
+ if (!(key in newAttrs)) {
122
+ removeAttribute(el, key);
123
+ }
124
+ }
125
+ for (const key in newAttrs) {
126
+ const oldValue = oldAttrs[key];
127
+ const newValue = newAttrs[key];
128
+ if (oldValue !== newValue) {
129
+ (newValue == null ? void 0 : newValue[reactiveSymbol]) ? effect2((newValue2) => setAttribute(el, key, newValue2(), oldValue), [newValue]) : setAttribute(el, key, newValue, oldValue);
130
+ }
131
+ }
132
+ };
133
+ var setAttribute = (element, key, value, oldValue) => {
134
+ switch (key) {
135
+ case "style":
136
+ return typeof value === "string" ? element.style = value : patchStyle(element, oldValue, value);
137
+ case "value":
138
+ return element.value = _nullishCoalesce(value, () => ( ""));
139
+ case "checked":
140
+ return element.checked = !!value;
141
+ case "selected":
142
+ return element.selected = !!value;
143
+ case "innerHTML":
144
+ return element.innerHTML = _nullishCoalesce(value, () => ( ""));
145
+ default:
146
+ if (value == null || value === false) {
147
+ element.removeAttribute(key);
148
+ } else if (key.startsWith("on")) {
149
+ element[key] = value;
150
+ } else if (value == true) {
151
+ element.setAttribute(key, "");
152
+ } else {
153
+ element.setAttribute(key, value);
154
+ }
155
+ }
156
+ };
157
+ var removeAttribute = (element, key) => {
158
+ switch (key) {
159
+ case "value":
160
+ return element.value = null;
161
+ case "checked":
162
+ case "selected":
163
+ return element[key] = false;
164
+ default:
165
+ return key.startsWith("on") ? element[key] = null : element.removeAttribute(key);
166
+ }
167
+ };
168
+ var patchStyle = (element, oldStyle = {}, newStyle = {}) => {
169
+ for (const prop2 in oldStyle) {
170
+ if (!(prop2 in newStyle)) {
171
+ element.style[prop2] = null;
172
+ }
173
+ }
174
+ for (const prop2 in newStyle) {
175
+ if (oldStyle[prop2] !== newStyle[prop2]) {
176
+ element.style[prop2] = newStyle[prop2];
177
+ }
178
+ }
179
+ };
180
+
181
+ // src/dom.mjs
182
+ var emptyObject = {};
183
+ var currentContext = null;
184
+ var cleanupContext = (parent) => {
185
+ const { subscribe, notify: disposeChildren } = observable();
186
+ const { subscribe: onCleanup, notify: runCleanup } = observable();
187
+ const dispose = () => (runCleanup(), disposeChildren());
188
+ parent == null ? void 0 : parent(dispose);
189
+ return { onCleanup, dispose, subscribe };
190
+ };
191
+ var createJsxExpression = (fn, deps) => (parent) => {
192
+ let patch;
193
+ let dispose;
194
+ let subscribe;
195
+ effect2(
196
+ (vdom) => {
197
+ dispose == null ? void 0 : dispose();
198
+ const content = vdom();
199
+ ({ dispose, subscribe } = typeof vdom === "function" ? cleanupContext(currentContext) : emptyObject);
200
+ const prevContext = currentContext;
201
+ currentContext = subscribe;
202
+ patch = render(content)(parent, patch);
203
+ currentContext = prevContext;
204
+ },
205
+ [computed(fn, deps)]
206
+ );
207
+ };
208
+ var createFragment = (...children) => (parent, oldNodeCleanup) => {
209
+ const node = new DocumentFragment();
210
+ const startNode = document.createComment("<");
211
+ const endNode = document.createComment(">");
212
+ node.appendChild(startNode);
213
+ for (const child of children) {
214
+ render(child)(node);
215
+ }
216
+ node.appendChild(endNode);
217
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
218
+ return (parent2, newElement) => {
219
+ const range = document.createRange();
220
+ range.setStart(startNode, 1);
221
+ range.setEnd(endNode, 0);
222
+ range.deleteContents();
223
+ parent2.replaceChild(newElement, startNode);
224
+ };
225
+ };
226
+ var createElement = (tag, attrs, ...children) => (parent, oldNodeCleanup) => {
227
+ const node = document.createElement(tag);
228
+ (attrs == null ? void 0 : attrs[reactiveSymbol]) ? effect2((attrs2) => attrs2 = patchAttributes(node, attrs2()), [attrs]) : patchAttributes(node, attrs);
229
+ for (const child of children) {
230
+ render(child)(node);
231
+ }
232
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
233
+ return (parent2, newElement) => {
234
+ parent2.replaceChild(newElement, node);
235
+ };
236
+ };
237
+ var createComponent = (component, props, ...children) => (parent, oldNodeCleanup) => {
238
+ const initializers = [];
239
+ const { dispose, subscribe, onCleanup } = cleanupContext(currentContext);
240
+ const prevContext = currentContext;
241
+ currentContext = subscribe;
242
+ const expressionOrVdom = component.call({ onCleanup, onMount: (fn) => initializers.push(fn) }, { props, children });
243
+ const nodeCleanup = render(expressionOrVdom)(parent, oldNodeCleanup);
244
+ currentContext = prevContext;
245
+ for (const initializer of initializers) {
246
+ initializer();
247
+ }
248
+ return (parent2, newElement) => {
249
+ dispose();
250
+ nodeCleanup(parent2, newElement);
251
+ };
252
+ };
253
+ var render = (vdom) => {
254
+ if (Array.isArray(vdom)) return createFragment(...vdom);
255
+ switch (vdom) {
256
+ case true:
257
+ case false:
258
+ case null:
259
+ case void 0:
260
+ return createNullElement();
261
+ }
262
+ switch (typeof vdom) {
263
+ case "string":
264
+ case "number":
265
+ return createTextElement(vdom);
266
+ case "function":
267
+ return vdom;
268
+ }
269
+ };
270
+ var createNullElement = () => (parent, oldNodeCleanup) => {
271
+ const node = document.createComment("|");
272
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
273
+ return (parent2, newElement) => {
274
+ parent2.replaceChild(newElement, node);
275
+ };
276
+ };
277
+ var createTextElement = (text) => (parent, oldNodeCleanup) => {
278
+ const node = document.createTextNode(text);
279
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
280
+ return (parent2, newElement) => {
281
+ parent2.replaceChild(newElement, node);
282
+ };
283
+ };
284
+ var mount = (root, jsx) => {
285
+ render(jsx)(root);
286
+ };
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+ exports.c = createComponent; exports.computed = computed; exports.e = createElement; exports.effect = effect; exports.f = createFragment; exports.lift = lift; exports.liftFn = liftFn; exports.mount = mount; exports.mutate = transact; exports.state = state; exports.stateProxy = stateProxy; exports.transact = transact; exports.x = createJsxExpression;
302
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/dane/Documents/My%20Projects/oddo/packages/ui/dist/index.js"],"names":[],"mappings":"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","file":"/Users/dane/Documents/My Projects/oddo/packages/ui/dist/index.js","sourcesContent":[null]}
package/dist/index.mjs ADDED
@@ -0,0 +1,302 @@
1
+ // src/reactive.mjs
2
+ var reactiveSymbol = /* @__PURE__ */ Symbol.for("oddo::is-reactive-handler-property-symbol");
3
+ var ReactiveContainer = class {
4
+ [reactiveSymbol] = true;
5
+ constructor(getter) {
6
+ this.get = getter;
7
+ Object.freeze(this);
8
+ }
9
+ };
10
+ var observable = (observers = /* @__PURE__ */ new Set()) => ({
11
+ subscribe: (fn) => observers.add(fn),
12
+ notify: () => {
13
+ const current = Array.from(observers);
14
+ observers.clear();
15
+ for (const observer of current) {
16
+ observer();
17
+ }
18
+ }
19
+ });
20
+ var state = (state2) => {
21
+ const { subscribe, notify } = observable();
22
+ return [
23
+ new ReactiveContainer((caller) => (caller && subscribe(caller), state2)),
24
+ (value) => value !== state2 && (state2 = value, notify())
25
+ ];
26
+ };
27
+ var bindDependencies = (deps, cleanup) => deps.map((dep) => dep[reactiveSymbol] ? dep.get.bind(null, cleanup) : () => dep);
28
+ var computed = (fn, deps) => {
29
+ const { subscribe, notify } = observable();
30
+ let cache, cached = false;
31
+ deps = bindDependencies(deps, () => (cached = false, notify()));
32
+ return new ReactiveContainer(function computed2(caller) {
33
+ if (!cached) {
34
+ caller && subscribe(caller);
35
+ cache = fn(...deps);
36
+ cached = true;
37
+ }
38
+ return cache;
39
+ });
40
+ };
41
+ var effect = (fn, deps) => {
42
+ const effect3 = schedule.bind(null, () => fn(...deps));
43
+ deps = bindDependencies(deps, effect3);
44
+ effect3();
45
+ };
46
+ var effect2 = (fn, deps) => {
47
+ const effect3 = () => fn(...deps);
48
+ deps = bindDependencies(deps, schedule.bind(null, effect3));
49
+ effect3();
50
+ };
51
+ var queue = [];
52
+ var schedule = (effect3) => {
53
+ queue.length || queueMicrotask(executeQueue);
54
+ queue.push(effect3);
55
+ };
56
+ var executeQueue = () => {
57
+ for (const effect3 of queue) {
58
+ effect3();
59
+ }
60
+ queue.length = 0;
61
+ };
62
+ var copyOnWrite = (target) => {
63
+ let dirty = false;
64
+ return (update = true) => {
65
+ if (dirty) {
66
+ return target;
67
+ }
68
+ dirty = update;
69
+ return target = Object.assign(target.constructor(), target);
70
+ };
71
+ };
72
+ var noop = () => {
73
+ };
74
+ var stateProxy = (target, mutable, notifyParent) => {
75
+ if (target && typeof target === "object") {
76
+ const mutate = copyOnWrite(target);
77
+ const children = /* @__PURE__ */ new Map();
78
+ return new Proxy(noop, {
79
+ apply() {
80
+ return target = mutate(mutable);
81
+ },
82
+ set(_, key, value) {
83
+ if (record.hasOwnProperty(prop) && target[key] === value) return false;
84
+ if (children.has(key) && !(value && typeof value === "object")) {
85
+ children.delete(key);
86
+ }
87
+ target = mutate();
88
+ target[key] = value;
89
+ mutable || (notifyParent == null ? void 0 : notifyParent(target));
90
+ return true;
91
+ },
92
+ get(_, key) {
93
+ const value = Reflect.get(target, key, target);
94
+ if (!children.has(key)) {
95
+ children.set(stateProxy(value, mutable, (value2) => {
96
+ target = mutate();
97
+ target[key] = value2;
98
+ }));
99
+ }
100
+ return children.get(key);
101
+ }
102
+ });
103
+ }
104
+ return () => target;
105
+ };
106
+ var liftValue = (arg) => (arg == null ? void 0 : arg[reactiveSymbol]) ? arg.get() : arg;
107
+ var empty = Object.freeze([]);
108
+ var transact = (mutator, finalizer, targets, otherValues = empty) => {
109
+ otherValues = bindDependencies(otherValues);
110
+ return (...args) => {
111
+ const stateProxies = targets.map((state2) => stateProxy(state2.get()));
112
+ mutator(finalizer, ...stateProxies, ...otherValues, ...args.map(liftValue));
113
+ };
114
+ };
115
+ var lift = (fn, deps) => fn(...bindDependencies(deps));
116
+ var liftFn = (callbackFn, deps = empty) => (...args) => callbackFn(...deps.map(liftValue), ...args.map(liftValue));
117
+
118
+ // src/attrs.mjs
119
+ var patchAttributes = (el, newAttrs, oldAttrs = {}) => {
120
+ for (const key in oldAttrs) {
121
+ if (!(key in newAttrs)) {
122
+ removeAttribute(el, key);
123
+ }
124
+ }
125
+ for (const key in newAttrs) {
126
+ const oldValue = oldAttrs[key];
127
+ const newValue = newAttrs[key];
128
+ if (oldValue !== newValue) {
129
+ (newValue == null ? void 0 : newValue[reactiveSymbol]) ? effect2((newValue2) => setAttribute(el, key, newValue2(), oldValue), [newValue]) : setAttribute(el, key, newValue, oldValue);
130
+ }
131
+ }
132
+ };
133
+ var setAttribute = (element, key, value, oldValue) => {
134
+ switch (key) {
135
+ case "style":
136
+ return typeof value === "string" ? element.style = value : patchStyle(element, oldValue, value);
137
+ case "value":
138
+ return element.value = value ?? "";
139
+ case "checked":
140
+ return element.checked = !!value;
141
+ case "selected":
142
+ return element.selected = !!value;
143
+ case "innerHTML":
144
+ return element.innerHTML = value ?? "";
145
+ default:
146
+ if (value == null || value === false) {
147
+ element.removeAttribute(key);
148
+ } else if (key.startsWith("on")) {
149
+ element[key] = value;
150
+ } else if (value == true) {
151
+ element.setAttribute(key, "");
152
+ } else {
153
+ element.setAttribute(key, value);
154
+ }
155
+ }
156
+ };
157
+ var removeAttribute = (element, key) => {
158
+ switch (key) {
159
+ case "value":
160
+ return element.value = null;
161
+ case "checked":
162
+ case "selected":
163
+ return element[key] = false;
164
+ default:
165
+ return key.startsWith("on") ? element[key] = null : element.removeAttribute(key);
166
+ }
167
+ };
168
+ var patchStyle = (element, oldStyle = {}, newStyle = {}) => {
169
+ for (const prop2 in oldStyle) {
170
+ if (!(prop2 in newStyle)) {
171
+ element.style[prop2] = null;
172
+ }
173
+ }
174
+ for (const prop2 in newStyle) {
175
+ if (oldStyle[prop2] !== newStyle[prop2]) {
176
+ element.style[prop2] = newStyle[prop2];
177
+ }
178
+ }
179
+ };
180
+
181
+ // src/dom.mjs
182
+ var emptyObject = {};
183
+ var currentContext = null;
184
+ var cleanupContext = (parent) => {
185
+ const { subscribe, notify: disposeChildren } = observable();
186
+ const { subscribe: onCleanup, notify: runCleanup } = observable();
187
+ const dispose = () => (runCleanup(), disposeChildren());
188
+ parent == null ? void 0 : parent(dispose);
189
+ return { onCleanup, dispose, subscribe };
190
+ };
191
+ var createJsxExpression = (fn, deps) => (parent) => {
192
+ let patch;
193
+ let dispose;
194
+ let subscribe;
195
+ effect2(
196
+ (vdom) => {
197
+ dispose == null ? void 0 : dispose();
198
+ const content = vdom();
199
+ ({ dispose, subscribe } = typeof vdom === "function" ? cleanupContext(currentContext) : emptyObject);
200
+ const prevContext = currentContext;
201
+ currentContext = subscribe;
202
+ patch = render(content)(parent, patch);
203
+ currentContext = prevContext;
204
+ },
205
+ [computed(fn, deps)]
206
+ );
207
+ };
208
+ var createFragment = (...children) => (parent, oldNodeCleanup) => {
209
+ const node = new DocumentFragment();
210
+ const startNode = document.createComment("<");
211
+ const endNode = document.createComment(">");
212
+ node.appendChild(startNode);
213
+ for (const child of children) {
214
+ render(child)(node);
215
+ }
216
+ node.appendChild(endNode);
217
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
218
+ return (parent2, newElement) => {
219
+ const range = document.createRange();
220
+ range.setStart(startNode, 1);
221
+ range.setEnd(endNode, 0);
222
+ range.deleteContents();
223
+ parent2.replaceChild(newElement, startNode);
224
+ };
225
+ };
226
+ var createElement = (tag, attrs, ...children) => (parent, oldNodeCleanup) => {
227
+ const node = document.createElement(tag);
228
+ (attrs == null ? void 0 : attrs[reactiveSymbol]) ? effect2((attrs2) => attrs2 = patchAttributes(node, attrs2()), [attrs]) : patchAttributes(node, attrs);
229
+ for (const child of children) {
230
+ render(child)(node);
231
+ }
232
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
233
+ return (parent2, newElement) => {
234
+ parent2.replaceChild(newElement, node);
235
+ };
236
+ };
237
+ var createComponent = (component, props, ...children) => (parent, oldNodeCleanup) => {
238
+ const initializers = [];
239
+ const { dispose, subscribe, onCleanup } = cleanupContext(currentContext);
240
+ const prevContext = currentContext;
241
+ currentContext = subscribe;
242
+ const expressionOrVdom = component.call({ onCleanup, onMount: (fn) => initializers.push(fn) }, { props, children });
243
+ const nodeCleanup = render(expressionOrVdom)(parent, oldNodeCleanup);
244
+ currentContext = prevContext;
245
+ for (const initializer of initializers) {
246
+ initializer();
247
+ }
248
+ return (parent2, newElement) => {
249
+ dispose();
250
+ nodeCleanup(parent2, newElement);
251
+ };
252
+ };
253
+ var render = (vdom) => {
254
+ if (Array.isArray(vdom)) return createFragment(...vdom);
255
+ switch (vdom) {
256
+ case true:
257
+ case false:
258
+ case null:
259
+ case void 0:
260
+ return createNullElement();
261
+ }
262
+ switch (typeof vdom) {
263
+ case "string":
264
+ case "number":
265
+ return createTextElement(vdom);
266
+ case "function":
267
+ return vdom;
268
+ }
269
+ };
270
+ var createNullElement = () => (parent, oldNodeCleanup) => {
271
+ const node = document.createComment("|");
272
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
273
+ return (parent2, newElement) => {
274
+ parent2.replaceChild(newElement, node);
275
+ };
276
+ };
277
+ var createTextElement = (text) => (parent, oldNodeCleanup) => {
278
+ const node = document.createTextNode(text);
279
+ oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node);
280
+ return (parent2, newElement) => {
281
+ parent2.replaceChild(newElement, node);
282
+ };
283
+ };
284
+ var mount = (root, jsx) => {
285
+ render(jsx)(root);
286
+ };
287
+ export {
288
+ createComponent as c,
289
+ computed,
290
+ createElement as e,
291
+ effect,
292
+ createFragment as f,
293
+ lift,
294
+ liftFn,
295
+ mount,
296
+ transact as mutate,
297
+ state,
298
+ stateProxy,
299
+ transact,
300
+ createJsxExpression as x
301
+ };
302
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/reactive.mjs","../src/attrs.mjs","../src/dom.mjs"],"sourcesContent":["export const reactiveSymbol = Symbol.for(\"oddo::is-reactive-handler-property-symbol\")\r\n\r\nclass ReactiveContainer {\r\n [reactiveSymbol] = true\r\n\r\n constructor (getter) {\r\n this.get = getter\r\n Object.freeze(this)\r\n }\r\n}\r\n\r\nexport const observable = (observers = new Set) => ({\r\n subscribe: (fn) => observers.add(fn),\r\n notify: () => {\r\n const current = Array.from(observers)\r\n observers.clear()\r\n for (const observer of current) { observer() }\r\n }\r\n})\r\n\r\nexport const state = (state) => {\r\n const { subscribe, notify } = observable()\r\n return [\r\n new ReactiveContainer(caller => (caller && subscribe(caller), state)),\r\n value => value !== state && (state = value, notify())\r\n ]\r\n}\r\n\r\nexport const bindDependencies = (deps, cleanup) =>\r\n deps.map(dep => dep[reactiveSymbol] ? dep.get.bind(null, cleanup) : () => dep)\r\n\r\nexport const computed = (fn, deps) => {\r\n const { subscribe, notify } = observable()\r\n let cache, cached = false\r\n deps = bindDependencies(deps, () => (cached = false, notify()))\r\n\r\n return new ReactiveContainer(function computed (caller) {\r\n if (!cached) {\r\n caller && subscribe(caller)\r\n cache = fn(...deps)\r\n cached = true\r\n }\r\n return cache\r\n })\r\n}\r\n\r\nexport const effect = (fn, deps) => {\r\n const effect = schedule.bind(null, () => fn(...deps))\r\n deps = bindDependencies(deps, effect)\r\n effect()\r\n}\r\n\r\nexport const effect2 = (fn, deps) => {\r\n const effect = () => fn(...deps)\r\n deps = bindDependencies(deps, schedule.bind(null, effect))\r\n effect()\r\n}\r\n\r\nconst queue = []\r\nexport const schedule = (effect) => {\r\n queue.length || queueMicrotask(executeQueue)\r\n queue.push(effect)\r\n}\r\n\r\nexport const executeQueue = () => {\r\n for (const effect of queue) { effect() }\r\n queue.length = 0\r\n}\r\n\r\nconst copyOnWrite = (target) => {\r\n\tlet dirty = false\r\n\treturn (update = true) => {\r\n\t\tif (dirty) {\r\n\t\t\treturn target\r\n\t\t}\r\n\t\tdirty = update\r\n\t\treturn target = Object.assign(target.constructor(), target)\r\n\t}\r\n};\r\n\r\nconst noop = () => {}\r\nexport const stateProxy = (target, mutable, notifyParent) => {\r\n if (target && typeof target === \"object\") {\r\n const mutate = copyOnWrite(target)\r\n const children = new Map()\r\n return new Proxy(noop, {\r\n apply () {\r\n return target = mutate(mutable)\r\n },\r\n set (_, key, value) {\r\n if (record.hasOwnProperty(prop) && target[key] === value) return false\r\n if (children.has(key) && !(value && typeof value === \"object\")) {\r\n children.delete(key)\r\n }\r\n target = mutate()\r\n target[key] = value\r\n mutable || notifyParent?.(target)\r\n return true\r\n },\r\n get (_, key) {\r\n const value = Reflect.get(target, key, target)\r\n if (!children.has(key)) {\r\n children.set(stateProxy(value, mutable, (value) => {\r\n target = mutate()\r\n target[key] = value\r\n }))\r\n }\r\n return children.get(key)\r\n }\r\n })\r\n }\r\n return () => target\r\n}\r\n\r\nconst liftValue = arg => arg?.[reactiveSymbol] ? arg.get() : arg\r\nconst empty = Object.freeze([])\r\n\r\nexport const mutate = (mutator, targets, otherValues = empty) => {\r\n otherValues = bindDependencies(otherValues)\r\n return (...args) => {\r\n const stateProxies = targets.map(state => stateProxy(state.get()))\r\n mutator(...stateProxies, ...otherValues, ...args.map(liftValue))\r\n }\r\n}\r\n\r\nexport const transact = (mutator, finalizer, targets, otherValues = empty) => {\r\n otherValues = bindDependencies(otherValues)\r\n return (...args) => {\r\n const stateProxies = targets.map(state => stateProxy(state.get())) // we also need to include mutable (LET) variables here\r\n mutator(finalizer, ...stateProxies, ...otherValues, ...args.map(liftValue))\r\n }\r\n}\r\n\r\nexport const lift = (fn, deps) => fn(...bindDependencies(deps))\r\nexport const liftFn = (callbackFn, deps = empty) => (...args) =>\r\n callbackFn(...deps.map(liftValue), ...args.map(liftValue))\r\n","import { reactiveSymbol, effect2 } from \"./reactive.mjs\"\r\nexport const patchAttributes = (el, newAttrs, oldAttrs = {}) => {\r\n for (const key in oldAttrs) {\r\n if (!(key in newAttrs)) {\r\n removeAttribute(el, key)\r\n }\r\n }\r\n\r\n for (const key in newAttrs) {\r\n const oldValue = oldAttrs[key]\r\n const newValue = newAttrs[key]\r\n\r\n if (oldValue !== newValue) {\r\n newValue?.[reactiveSymbol]\r\n ? effect2((newValue) => setAttribute(el, key, newValue(), oldValue), [newValue])\r\n : setAttribute(el, key, newValue, oldValue)\r\n }\r\n }\r\n}\r\n\r\nconst setAttribute = (element, key, value, oldValue) => {\r\n switch (key) {\r\n case \"style\":\r\n return typeof value === \"string\"\r\n ? element.style = value\r\n : patchStyle(element, oldValue, value)\r\n case \"value\":\r\n return element.value = value ?? \"\"\r\n case \"checked\":\r\n return element.checked = !!value\r\n case \"selected\":\r\n return element.selected = !!value\r\n case \"innerHTML\":\r\n return element.innerHTML = value ?? \"\"\r\n default:\r\n if (value == null || value === false) {\r\n element.removeAttribute(key)\r\n } else if (key.startsWith(\"on\")) {\r\n element[key] = value\r\n } else if (value == true) {\r\n element.setAttribute(key, \"\")\r\n } else {\r\n element.setAttribute(key, value)\r\n }\r\n }\r\n}\r\n\r\nconst removeAttribute = (element, key) => {\r\n switch (key) {\r\n case 'value':\r\n return element.value = null\r\n case 'checked':\r\n case 'selected':\r\n return element[key] = false\r\n default:\r\n return key.startsWith('on')\r\n ? element[key] = null\r\n : element.removeAttribute(key)\r\n }\r\n}\r\n\r\nconst patchStyle = (element, oldStyle = {}, newStyle = {}) => {\r\n for (const prop in oldStyle) {\r\n if (!(prop in newStyle)) {\r\n element.style[prop] = null;\r\n }\r\n }\r\n for (const prop in newStyle) {\r\n if (oldStyle[prop] !== newStyle[prop]) {\r\n element.style[prop] = newStyle[prop];\r\n }\r\n }\r\n}\r\n","import { patchAttributes } from \"./attrs.mjs\"\nimport { observable, reactiveSymbol, effect2, computed } from \"./reactive.mjs\"\n\nconst emptyObject = {}\n\nlet currentContext = null\nconst cleanupContext = (parent) => {\n const { subscribe, notify: disposeChildren} = observable()\n const { subscribe: onCleanup, notify: runCleanup} = observable()\n const dispose = () => (runCleanup(), disposeChildren())\n parent?.(dispose)\n\n return { onCleanup, dispose, subscribe }\n}\n\nexport const createJsxExpression = (fn, deps) => (parent) => {\n let patch\n let dispose\n let subscribe\n\n effect2(\n (vdom) => {\n dispose?.()\n const content = vdom();\n ({ dispose, subscribe } = typeof vdom === \"function\" ? cleanupContext(currentContext) : emptyObject)\n const prevContext = currentContext\n currentContext = subscribe\n patch = render(content)(parent, patch)\n currentContext = prevContext\n },\n [computed(fn, deps)]\n )\n}\n\nexport const createFragment = (...children) => (parent, oldNodeCleanup) => {\n const node = new DocumentFragment\n const startNode = document.createComment(\"<\")\n const endNode = document.createComment(\">\")\n node.appendChild(startNode)\n for (const child of children) {\n render(child)(node)\n }\n node.appendChild(endNode)\n oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node)\n\n return (parent, newElement) => {\n const range = document.createRange()\n range.setStart(startNode, 1)\n range.setEnd(endNode, 0)\n range.deleteContents()\n parent.replaceChild(newElement, startNode)\n }\n}\n\nexport const createElement = (tag, attrs, ...children) => (parent, oldNodeCleanup) => {\n const node = document.createElement(tag)\n attrs?.[reactiveSymbol]\n ? effect2((attrs) => attrs = patchAttributes(node, attrs()), [attrs])\n : patchAttributes(node, attrs)\n\n for (const child of children) {\n render(child)(node)\n }\n oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node)\n\n return (parent, newElement) => {\n parent.replaceChild(newElement, node)\n }\n}\n\nexport const createComponent = (component, props, ...children) => (parent, oldNodeCleanup) => {\n const initializers = []\n const { dispose, subscribe, onCleanup } = cleanupContext(currentContext)\n const prevContext = currentContext\n currentContext = subscribe\n const expressionOrVdom = component.call({ onCleanup, onMount: fn => initializers.push(fn) }, { props, children })\n const nodeCleanup = render(expressionOrVdom)(parent, oldNodeCleanup)\n currentContext = prevContext\n\n for (const initializer of initializers) { initializer() }\n\n return (parent, newElement) => {\n dispose()\n nodeCleanup(parent, newElement)\n }\n}\n\nexport const render = vdom => {\n if (Array.isArray(vdom)) return createFragment(...vdom)\n switch (vdom) {\n case true:\n case false:\n case null:\n case undefined:\n return createNullElement()\n }\n\n switch (typeof vdom) {\n case \"string\":\n case \"number\":\n return createTextElement(vdom)\n case \"function\":\n return vdom\n }\n}\n\nexport const createNullElement = () => (parent, oldNodeCleanup) => {\n const node = document.createComment(\"|\")\n oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node)\n\n return (parent, newElement) => {\n parent.replaceChild(newElement, node)\n }\n}\n\nexport const createTextElement = (text) => (parent, oldNodeCleanup) => {\n const node = document.createTextNode(text)\n oldNodeCleanup ? oldNodeCleanup(parent, node) : parent.appendChild(node)\n\n return (parent, newElement) => {\n parent.replaceChild(newElement, node)\n }\n}\n\nexport const mount = (root, jsx) => {\n render(jsx)(root)\n}\n"],"mappings":"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","names":["state","computed","effect","value","state","newValue","prop","parent","attrs"]}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@oddo/ui",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "Oddo UI Framework",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "sideEffects": false,
18
+ "scripts": {
19
+ "build": "tsup"
20
+ },
21
+ "keywords": [
22
+ "ui",
23
+ "framework",
24
+ "oddo",
25
+ "reactive"
26
+ ],
27
+ "license": "MIT",
28
+ "author": "dbrdarski <dane.brdarski@gmail.com>",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/dbrdarski/oddo.git",
32
+ "directory": "packages/ui"
33
+ },
34
+ "homepage": "https://github.com/dbrdarski/oddo#readme",
35
+ "bugs": {
36
+ "url": "https://github.com/dbrdarski/oddo/issues"
37
+ }
38
+ }
39
+