xote 6.1.2 → 6.2.0
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 +90 -10
- package/dist/xote.cjs +10 -10
- package/dist/xote.mjs +1491 -1330
- package/dist/xote.umd.js +8 -8
- package/package.json +16 -1
- package/rescript.json +2 -0
- package/src/Html.res +13 -13
- package/src/Html.res.mjs +13 -13
- package/src/Hydration.res +134 -79
- package/src/Hydration.res.mjs +255 -186
- package/src/Node.res +2 -594
- package/src/Node.res.mjs +31 -535
- package/src/Prop.res +16 -0
- package/src/Prop.res.mjs +35 -0
- package/src/ReactiveProp.res +2 -14
- package/src/ReactiveProp.res.mjs +7 -20
- package/src/Route.res +4 -0
- package/src/Route.res.mjs +9 -0
- package/src/Router.res +25 -49
- package/src/Router.res.mjs +22 -34
- package/src/RuntimeAttr.res +21 -0
- package/src/RuntimeAttr.res.mjs +42 -0
- package/src/RuntimeDom.res +95 -0
- package/src/RuntimeDom.res.mjs +101 -0
- package/src/RuntimeHtml.res +27 -0
- package/src/RuntimeHtml.res.mjs +34 -0
- package/src/RuntimeHydrationMarkers.res +24 -0
- package/src/RuntimeHydrationMarkers.res.mjs +68 -0
- package/src/RuntimeJsxProp.res +46 -0
- package/src/RuntimeJsxProp.res.mjs +52 -0
- package/src/RuntimeOwner.res +43 -0
- package/src/RuntimeOwner.res.mjs +51 -0
- package/src/SSR.res +25 -93
- package/src/SSR.res.mjs +59 -126
- package/src/SSRState.res +3 -0
- package/src/SSRState.res.mjs +8 -2
- package/src/View.res +599 -0
- package/src/View.res.mjs +614 -0
- package/src/XoteJSX.res +64 -118
- package/src/XoteJSX.res.mjs +79 -118
package/src/Node.res.mjs
CHANGED
|
@@ -1,572 +1,65 @@
|
|
|
1
1
|
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
2
|
|
|
3
|
-
import * as
|
|
4
|
-
import * as Signal$Xote from "./Signal.res.mjs";
|
|
5
|
-
import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
|
|
6
|
-
import * as Computed$Xote from "./Computed.res.mjs";
|
|
7
|
-
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
8
|
-
import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
|
|
3
|
+
import * as View$Xote from "./View.res.mjs";
|
|
9
4
|
|
|
10
|
-
let
|
|
5
|
+
let DOM = View$Xote.DOM;
|
|
11
6
|
|
|
12
|
-
let
|
|
13
|
-
"svg",
|
|
14
|
-
"path",
|
|
15
|
-
"circle",
|
|
16
|
-
"ellipse",
|
|
17
|
-
"line",
|
|
18
|
-
"polygon",
|
|
19
|
-
"polyline",
|
|
20
|
-
"rect",
|
|
21
|
-
"g",
|
|
22
|
-
"defs",
|
|
23
|
-
"clipPath",
|
|
24
|
-
"mask",
|
|
25
|
-
"pattern",
|
|
26
|
-
"marker",
|
|
27
|
-
"symbol",
|
|
28
|
-
"use",
|
|
29
|
-
"text",
|
|
30
|
-
"tspan",
|
|
31
|
-
"image",
|
|
32
|
-
"foreignObject",
|
|
33
|
-
"linearGradient",
|
|
34
|
-
"radialGradient",
|
|
35
|
-
"stop",
|
|
36
|
-
"filter",
|
|
37
|
-
"feBlend",
|
|
38
|
-
"feColorMatrix",
|
|
39
|
-
"feComposite",
|
|
40
|
-
"feFlood",
|
|
41
|
-
"feGaussianBlur",
|
|
42
|
-
"feMerge",
|
|
43
|
-
"feMergeNode",
|
|
44
|
-
"feOffset",
|
|
45
|
-
"animate",
|
|
46
|
-
"animateTransform",
|
|
47
|
-
"desc",
|
|
48
|
-
"title",
|
|
49
|
-
"metadata"
|
|
50
|
-
];
|
|
7
|
+
let Reactivity = View$Xote.Reactivity;
|
|
51
8
|
|
|
52
|
-
let
|
|
9
|
+
let Attributes = View$Xote.Attributes;
|
|
53
10
|
|
|
54
|
-
|
|
55
|
-
d[tag] = true;
|
|
56
|
-
});
|
|
11
|
+
let attr = View$Xote.attr;
|
|
57
12
|
|
|
58
|
-
|
|
59
|
-
return Stdlib_Option.isSome(d[tag]);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function setAttrOrProp(el, key, value) {
|
|
63
|
-
switch (key) {
|
|
64
|
-
case "checked" :
|
|
65
|
-
el.checked = value === "true";
|
|
66
|
-
return;
|
|
67
|
-
case "disabled" :
|
|
68
|
-
el.disabled = value === "true";
|
|
69
|
-
return;
|
|
70
|
-
case "aria-expanded" :
|
|
71
|
-
case "aria-hidden" :
|
|
72
|
-
case "aria-selected" :
|
|
73
|
-
case "autofocus" :
|
|
74
|
-
case "contenteditable" :
|
|
75
|
-
case "draggable" :
|
|
76
|
-
case "hidden" :
|
|
77
|
-
case "multiple" :
|
|
78
|
-
case "readonly" :
|
|
79
|
-
case "required" :
|
|
80
|
-
case "spellcheck" :
|
|
81
|
-
break;
|
|
82
|
-
case "value" :
|
|
83
|
-
el.value = value;
|
|
84
|
-
return;
|
|
85
|
-
default:
|
|
86
|
-
el.setAttribute(key, value);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (value === "true") {
|
|
90
|
-
el.setAttribute(key, "");
|
|
91
|
-
} else {
|
|
92
|
-
el.removeAttribute(key);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
let DOM = {
|
|
97
|
-
setAttrOrProp: setAttrOrProp
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
let currentOwner = {
|
|
101
|
-
contents: undefined
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
function createOwner() {
|
|
105
|
-
return {
|
|
106
|
-
disposers: [],
|
|
107
|
-
computeds: []
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function runWithOwner(owner, fn) {
|
|
112
|
-
let previousOwner = currentOwner.contents;
|
|
113
|
-
currentOwner.contents = owner;
|
|
114
|
-
let result = fn();
|
|
115
|
-
currentOwner.contents = previousOwner;
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function addDisposer(owner, disposer) {
|
|
120
|
-
owner.disposers.push(disposer);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function disposeOwner(owner) {
|
|
124
|
-
owner.disposers.forEach(disposer => disposer.dispose());
|
|
125
|
-
owner.computeds.forEach(Computed$Xote.dispose);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function setOwner(element, owner) {
|
|
129
|
-
((element["__xote_owner__"] = owner));
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function getOwner(element) {
|
|
133
|
-
return Primitive_option.fromNullable((element["__xote_owner__"]));
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
let Reactivity = {
|
|
137
|
-
currentOwner: currentOwner,
|
|
138
|
-
createOwner: createOwner,
|
|
139
|
-
runWithOwner: runWithOwner,
|
|
140
|
-
addDisposer: addDisposer,
|
|
141
|
-
disposeOwner: disposeOwner,
|
|
142
|
-
setOwner: setOwner,
|
|
143
|
-
getOwner: getOwner
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
function $$static(key, value) {
|
|
147
|
-
return [
|
|
148
|
-
key,
|
|
149
|
-
{
|
|
150
|
-
TAG: "Static",
|
|
151
|
-
_0: value
|
|
152
|
-
}
|
|
153
|
-
];
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function signal(key, signal$1) {
|
|
157
|
-
return [
|
|
158
|
-
key,
|
|
159
|
-
{
|
|
160
|
-
TAG: "SignalValue",
|
|
161
|
-
_0: signal$1
|
|
162
|
-
}
|
|
163
|
-
];
|
|
164
|
-
}
|
|
13
|
+
let signalAttr = View$Xote.signalAttr;
|
|
165
14
|
|
|
166
|
-
|
|
167
|
-
return [
|
|
168
|
-
key,
|
|
169
|
-
{
|
|
170
|
-
TAG: "Compute",
|
|
171
|
-
_0: compute
|
|
172
|
-
}
|
|
173
|
-
];
|
|
174
|
-
}
|
|
15
|
+
let computedAttr = View$Xote.computedAttr;
|
|
175
16
|
|
|
176
|
-
let
|
|
177
|
-
$$static: $$static,
|
|
178
|
-
signal: signal,
|
|
179
|
-
computed: computed
|
|
180
|
-
};
|
|
17
|
+
let Attr = View$Xote.Attr;
|
|
181
18
|
|
|
182
|
-
|
|
183
|
-
let owner = getOwner(el);
|
|
184
|
-
if (owner !== undefined) {
|
|
185
|
-
disposeOwner(owner);
|
|
186
|
-
}
|
|
187
|
-
let childNodes = (Array.from(el.childNodes || []));
|
|
188
|
-
childNodes.forEach(disposeElement);
|
|
189
|
-
}
|
|
19
|
+
let Render = View$Xote.Render;
|
|
190
20
|
|
|
191
|
-
|
|
192
|
-
switch (node.TAG) {
|
|
193
|
-
case "Element" :
|
|
194
|
-
let children = node.children;
|
|
195
|
-
let events = node.events;
|
|
196
|
-
let attrs = node.attrs;
|
|
197
|
-
let tag = node.tag;
|
|
198
|
-
let el = Stdlib_Option.isSome(d[tag]) ? document.createElementNS(svgNamespace, tag) : document.createElement(tag);
|
|
199
|
-
let owner = {
|
|
200
|
-
disposers: [],
|
|
201
|
-
computeds: []
|
|
202
|
-
};
|
|
203
|
-
setOwner(el, owner);
|
|
204
|
-
runWithOwner(owner, () => {
|
|
205
|
-
let shouldDeferAttrUntilAfterChildren = param => {
|
|
206
|
-
if (tag === "select") {
|
|
207
|
-
return param[0] === "value";
|
|
208
|
-
} else {
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
let applyAttr = param => {
|
|
213
|
-
let value = param[1];
|
|
214
|
-
let key = param[0];
|
|
215
|
-
switch (value.TAG) {
|
|
216
|
-
case "Static" :
|
|
217
|
-
return setAttrOrProp(el, key, value._0);
|
|
218
|
-
case "SignalValue" :
|
|
219
|
-
let signal = value._0;
|
|
220
|
-
setAttrOrProp(el, key, Signal$Xote.peek(signal));
|
|
221
|
-
let disposer = Effect$Xote.runWithDisposer(() => {
|
|
222
|
-
setAttrOrProp(el, key, Signal$Xote.get(signal));
|
|
223
|
-
}, undefined);
|
|
224
|
-
return addDisposer(owner, disposer);
|
|
225
|
-
case "Compute" :
|
|
226
|
-
let compute = value._0;
|
|
227
|
-
let disposer$1 = Effect$Xote.runWithDisposer(() => {
|
|
228
|
-
setAttrOrProp(el, key, compute());
|
|
229
|
-
}, undefined);
|
|
230
|
-
return addDisposer(owner, disposer$1);
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
attrs.forEach(attr => {
|
|
234
|
-
if (!shouldDeferAttrUntilAfterChildren(attr)) {
|
|
235
|
-
return applyAttr(attr);
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
events.forEach(param => {
|
|
239
|
-
el.addEventListener(param[0], param[1]);
|
|
240
|
-
});
|
|
241
|
-
children.forEach(child => {
|
|
242
|
-
let childEl = render(child);
|
|
243
|
-
el.appendChild(childEl);
|
|
244
|
-
});
|
|
245
|
-
attrs.forEach(attr => {
|
|
246
|
-
if (shouldDeferAttrUntilAfterChildren(attr)) {
|
|
247
|
-
return applyAttr(attr);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
return el;
|
|
252
|
-
case "Text" :
|
|
253
|
-
return document.createTextNode(node._0);
|
|
254
|
-
case "SignalText" :
|
|
255
|
-
let signal = node._0;
|
|
256
|
-
let textNode = document.createTextNode(Signal$Xote.peek(signal));
|
|
257
|
-
let owner$1 = {
|
|
258
|
-
disposers: [],
|
|
259
|
-
computeds: []
|
|
260
|
-
};
|
|
261
|
-
setOwner(textNode, owner$1);
|
|
262
|
-
runWithOwner(owner$1, () => {
|
|
263
|
-
let disposer = Effect$Xote.runWithDisposer(() => {
|
|
264
|
-
textNode.textContent = Signal$Xote.get(signal);
|
|
265
|
-
}, undefined);
|
|
266
|
-
addDisposer(owner$1, disposer);
|
|
267
|
-
});
|
|
268
|
-
return textNode;
|
|
269
|
-
case "Fragment" :
|
|
270
|
-
let fragment = document.createDocumentFragment();
|
|
271
|
-
node._0.forEach(child => {
|
|
272
|
-
let childEl = render(child);
|
|
273
|
-
fragment.appendChild(childEl);
|
|
274
|
-
});
|
|
275
|
-
return fragment;
|
|
276
|
-
case "SignalFragment" :
|
|
277
|
-
let signal$1 = node._0;
|
|
278
|
-
let owner$2 = {
|
|
279
|
-
disposers: [],
|
|
280
|
-
computeds: []
|
|
281
|
-
};
|
|
282
|
-
let container = document.createElement("div");
|
|
283
|
-
container.setAttribute("style", "display: contents");
|
|
284
|
-
setOwner(container, owner$2);
|
|
285
|
-
runWithOwner(owner$2, () => {
|
|
286
|
-
let disposer = Effect$Xote.runWithDisposer(() => {
|
|
287
|
-
let children = Signal$Xote.get(signal$1);
|
|
288
|
-
let childNodes = (Array.from(container.childNodes || []));
|
|
289
|
-
childNodes.forEach(disposeElement);
|
|
290
|
-
((container.innerHTML = ''));
|
|
291
|
-
children.forEach(child => {
|
|
292
|
-
let childEl = render(child);
|
|
293
|
-
container.appendChild(childEl);
|
|
294
|
-
});
|
|
295
|
-
}, undefined);
|
|
296
|
-
addDisposer(owner$2, disposer);
|
|
297
|
-
});
|
|
298
|
-
return container;
|
|
299
|
-
case "LazyComponent" :
|
|
300
|
-
let owner$3 = {
|
|
301
|
-
disposers: [],
|
|
302
|
-
computeds: []
|
|
303
|
-
};
|
|
304
|
-
let childNode = runWithOwner(owner$3, node._0);
|
|
305
|
-
let el$1 = render(childNode);
|
|
306
|
-
setOwner(el$1, owner$3);
|
|
307
|
-
return el$1;
|
|
308
|
-
case "KeyedList" :
|
|
309
|
-
let renderItem = node.renderItem;
|
|
310
|
-
let keyFn = node.keyFn;
|
|
311
|
-
let signal$2 = node.signal;
|
|
312
|
-
let owner$4 = {
|
|
313
|
-
disposers: [],
|
|
314
|
-
computeds: []
|
|
315
|
-
};
|
|
316
|
-
let startAnchor = document.createComment(" keyed-list-start ");
|
|
317
|
-
let endAnchor = document.createComment(" keyed-list-end ");
|
|
318
|
-
setOwner(startAnchor, owner$4);
|
|
319
|
-
let keyedItems = {};
|
|
320
|
-
let reconcile = () => {
|
|
321
|
-
let parentOpt = endAnchor.parentNode;
|
|
322
|
-
if (parentOpt == null) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
let newItems = Signal$Xote.get(signal$2);
|
|
326
|
-
let newKeyMap = {};
|
|
327
|
-
newItems.forEach(item => {
|
|
328
|
-
newKeyMap[keyFn(item)] = item;
|
|
329
|
-
});
|
|
330
|
-
let keysToRemove = [];
|
|
331
|
-
Object.keys(keyedItems).forEach(key => {
|
|
332
|
-
let match = newKeyMap[key];
|
|
333
|
-
if (match !== undefined) {
|
|
334
|
-
return;
|
|
335
|
-
} else {
|
|
336
|
-
keysToRemove.push(key);
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
});
|
|
340
|
-
keysToRemove.forEach(key => {
|
|
341
|
-
let keyedItem = keyedItems[key];
|
|
342
|
-
if (keyedItem !== undefined) {
|
|
343
|
-
disposeElement(keyedItem.element);
|
|
344
|
-
((keyedItem.element.remove()));
|
|
345
|
-
Stdlib_Dict.$$delete(keyedItems, key);
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
let newOrder = [];
|
|
350
|
-
let elementsToReplace = {};
|
|
351
|
-
newItems.forEach(item => {
|
|
352
|
-
let key = keyFn(item);
|
|
353
|
-
let existing = keyedItems[key];
|
|
354
|
-
if (existing !== undefined) {
|
|
355
|
-
if (existing.item !== item) {
|
|
356
|
-
elementsToReplace[key] = true;
|
|
357
|
-
let node = renderItem(item);
|
|
358
|
-
let element = render(node);
|
|
359
|
-
let keyedItem = {
|
|
360
|
-
key: key,
|
|
361
|
-
item: item,
|
|
362
|
-
element: element
|
|
363
|
-
};
|
|
364
|
-
newOrder.push(keyedItem);
|
|
365
|
-
keyedItems[key] = keyedItem;
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
newOrder.push(existing);
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
let node$1 = renderItem(item);
|
|
372
|
-
let element$1 = render(node$1);
|
|
373
|
-
let keyedItem$1 = {
|
|
374
|
-
key: key,
|
|
375
|
-
item: item,
|
|
376
|
-
element: element$1
|
|
377
|
-
};
|
|
378
|
-
newOrder.push(keyedItem$1);
|
|
379
|
-
keyedItems[key] = keyedItem$1;
|
|
380
|
-
});
|
|
381
|
-
let marker = {
|
|
382
|
-
contents: startAnchor.nextSibling
|
|
383
|
-
};
|
|
384
|
-
newOrder.forEach(keyedItem => {
|
|
385
|
-
let currentElement = marker.contents;
|
|
386
|
-
if (currentElement == null) {
|
|
387
|
-
parentOpt.insertBefore(keyedItem.element, endAnchor);
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
if (currentElement === endAnchor) {
|
|
391
|
-
parentOpt.insertBefore(keyedItem.element, endAnchor);
|
|
392
|
-
return;
|
|
393
|
-
}
|
|
394
|
-
if (currentElement === keyedItem.element) {
|
|
395
|
-
marker.contents = currentElement.nextSibling;
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
let needsReplacement = Stdlib_Option.getOr(elementsToReplace[keyedItem.key], false);
|
|
399
|
-
if (needsReplacement) {
|
|
400
|
-
disposeElement(currentElement);
|
|
401
|
-
parentOpt.replaceChild(keyedItem.element, currentElement);
|
|
402
|
-
marker.contents = keyedItem.element.nextSibling;
|
|
403
|
-
} else {
|
|
404
|
-
parentOpt.insertBefore(keyedItem.element, currentElement);
|
|
405
|
-
marker.contents = keyedItem.element.nextSibling;
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
};
|
|
409
|
-
let fragment$1 = document.createDocumentFragment();
|
|
410
|
-
fragment$1.appendChild(startAnchor);
|
|
411
|
-
let initialItems = Signal$Xote.peek(signal$2);
|
|
412
|
-
initialItems.forEach(item => {
|
|
413
|
-
let key = keyFn(item);
|
|
414
|
-
let node = renderItem(item);
|
|
415
|
-
let element = render(node);
|
|
416
|
-
let keyedItem = {
|
|
417
|
-
key: key,
|
|
418
|
-
item: item,
|
|
419
|
-
element: element
|
|
420
|
-
};
|
|
421
|
-
keyedItems[key] = keyedItem;
|
|
422
|
-
fragment$1.appendChild(element);
|
|
423
|
-
});
|
|
424
|
-
fragment$1.appendChild(endAnchor);
|
|
425
|
-
runWithOwner(owner$4, () => {
|
|
426
|
-
let disposer = Effect$Xote.runWithDisposer(() => {
|
|
427
|
-
reconcile();
|
|
428
|
-
}, undefined);
|
|
429
|
-
addDisposer(owner$4, disposer);
|
|
430
|
-
});
|
|
431
|
-
return fragment$1;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
21
|
+
let text = View$Xote.text;
|
|
434
22
|
|
|
435
|
-
let
|
|
436
|
-
disposeElement: disposeElement,
|
|
437
|
-
render: render
|
|
438
|
-
};
|
|
23
|
+
let signalText = View$Xote.signalText;
|
|
439
24
|
|
|
440
|
-
|
|
441
|
-
return {
|
|
442
|
-
TAG: "Text",
|
|
443
|
-
_0: content
|
|
444
|
-
};
|
|
445
|
-
}
|
|
25
|
+
let signalInt = View$Xote.signalInt;
|
|
446
26
|
|
|
447
|
-
|
|
448
|
-
let signal = Computed$Xote.make(compute, undefined, undefined);
|
|
449
|
-
return {
|
|
450
|
-
TAG: "SignalText",
|
|
451
|
-
_0: signal
|
|
452
|
-
};
|
|
453
|
-
}
|
|
27
|
+
let signalFloat = View$Xote.signalFloat;
|
|
454
28
|
|
|
455
|
-
|
|
456
|
-
let signal = Computed$Xote.make(() => compute().toString(), undefined, undefined);
|
|
457
|
-
return {
|
|
458
|
-
TAG: "SignalText",
|
|
459
|
-
_0: signal
|
|
460
|
-
};
|
|
461
|
-
}
|
|
29
|
+
let int = View$Xote.int;
|
|
462
30
|
|
|
463
|
-
|
|
464
|
-
let signal = Computed$Xote.make(() => compute().toString(), undefined, undefined);
|
|
465
|
-
return {
|
|
466
|
-
TAG: "SignalText",
|
|
467
|
-
_0: signal
|
|
468
|
-
};
|
|
469
|
-
}
|
|
31
|
+
let float = View$Xote.float;
|
|
470
32
|
|
|
471
|
-
|
|
472
|
-
return {
|
|
473
|
-
TAG: "Text",
|
|
474
|
-
_0: value.toString()
|
|
475
|
-
};
|
|
476
|
-
}
|
|
33
|
+
let fragment = View$Xote.fragment;
|
|
477
34
|
|
|
478
|
-
|
|
479
|
-
return {
|
|
480
|
-
TAG: "Text",
|
|
481
|
-
_0: value.toString()
|
|
482
|
-
};
|
|
483
|
-
}
|
|
35
|
+
let signalFragment = View$Xote.signalFragment;
|
|
484
36
|
|
|
485
|
-
|
|
486
|
-
return {
|
|
487
|
-
TAG: "Fragment",
|
|
488
|
-
_0: children
|
|
489
|
-
};
|
|
490
|
-
}
|
|
37
|
+
let each = View$Xote.each;
|
|
491
38
|
|
|
492
|
-
|
|
493
|
-
return {
|
|
494
|
-
TAG: "SignalFragment",
|
|
495
|
-
_0: signal
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
function list(signal, renderItem) {
|
|
500
|
-
let nodesSignal = Computed$Xote.make(() => Signal$Xote.get(signal).map(renderItem), undefined, undefined);
|
|
501
|
-
return {
|
|
502
|
-
TAG: "SignalFragment",
|
|
503
|
-
_0: nodesSignal
|
|
504
|
-
};
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
function keyedList(signal, keyFn, renderItem) {
|
|
508
|
-
return {
|
|
509
|
-
TAG: "KeyedList",
|
|
510
|
-
signal: signal,
|
|
511
|
-
keyFn: keyFn,
|
|
512
|
-
renderItem: renderItem
|
|
513
|
-
};
|
|
514
|
-
}
|
|
39
|
+
let list = View$Xote.list;
|
|
515
40
|
|
|
516
|
-
|
|
517
|
-
let attrs = attrsOpt !== undefined ? attrsOpt : [].map(x => x);
|
|
518
|
-
let events = eventsOpt !== undefined ? eventsOpt : [].map(x => x);
|
|
519
|
-
let children = childrenOpt !== undefined ? childrenOpt : [].map(x => x);
|
|
520
|
-
return {
|
|
521
|
-
TAG: "Element",
|
|
522
|
-
tag: tag,
|
|
523
|
-
attrs: attrs,
|
|
524
|
-
events: events,
|
|
525
|
-
children: children
|
|
526
|
-
};
|
|
527
|
-
}
|
|
41
|
+
let eachWithKey = View$Xote.eachWithKey;
|
|
528
42
|
|
|
529
|
-
|
|
530
|
-
return {
|
|
531
|
-
TAG: "Text",
|
|
532
|
-
_0: ""
|
|
533
|
-
};
|
|
534
|
-
}
|
|
43
|
+
let keyedList = View$Xote.keyedList;
|
|
535
44
|
|
|
536
|
-
|
|
537
|
-
let el = render(node);
|
|
538
|
-
container.appendChild(el);
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
function mountById(node, containerId) {
|
|
542
|
-
let container = document.getElementById(containerId);
|
|
543
|
-
if (container == null) {
|
|
544
|
-
console.error("Container element not found: " + containerId);
|
|
545
|
-
return;
|
|
546
|
-
} else {
|
|
547
|
-
return mount(node, container);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
45
|
+
let element = View$Xote.element;
|
|
550
46
|
|
|
551
|
-
let
|
|
47
|
+
let $$null = View$Xote.$$null;
|
|
552
48
|
|
|
553
|
-
let
|
|
49
|
+
let empty = View$Xote.empty;
|
|
554
50
|
|
|
555
|
-
let
|
|
51
|
+
let mount = View$Xote.mount;
|
|
556
52
|
|
|
557
|
-
let
|
|
53
|
+
let mountById = View$Xote.mountById;
|
|
558
54
|
|
|
559
55
|
export {
|
|
560
|
-
svgNamespace,
|
|
561
|
-
svgTags,
|
|
562
|
-
svgTagSet,
|
|
563
|
-
isSvgTag,
|
|
564
56
|
DOM,
|
|
565
57
|
Reactivity,
|
|
566
58
|
Attributes,
|
|
567
59
|
attr,
|
|
568
60
|
signalAttr,
|
|
569
61
|
computedAttr,
|
|
62
|
+
Attr,
|
|
570
63
|
Render,
|
|
571
64
|
text,
|
|
572
65
|
signalText,
|
|
@@ -576,11 +69,14 @@ export {
|
|
|
576
69
|
float,
|
|
577
70
|
fragment,
|
|
578
71
|
signalFragment,
|
|
72
|
+
each,
|
|
579
73
|
list,
|
|
74
|
+
eachWithKey,
|
|
580
75
|
keyedList,
|
|
581
76
|
element,
|
|
582
77
|
$$null,
|
|
78
|
+
empty,
|
|
583
79
|
mount,
|
|
584
80
|
mountById,
|
|
585
81
|
}
|
|
586
|
-
/*
|
|
82
|
+
/* View-Xote Not a pure module */
|
package/src/Prop.res
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* Defines a property that can either be a signal (Reactive) or a static value
|
|
2
|
+
(Static) */
|
|
3
|
+
type t<'a> = Reactive(Signal.t<'a>) | Static('a)
|
|
4
|
+
|
|
5
|
+
let get = value =>
|
|
6
|
+
switch value {
|
|
7
|
+
| Reactive(signal) => Signal.get(signal)
|
|
8
|
+
| Static(value) => value
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Helper functions for creating reactive props */
|
|
12
|
+
let static = value => Static(value)
|
|
13
|
+
|
|
14
|
+
let reactive = signal => Reactive(signal)
|
|
15
|
+
|
|
16
|
+
let signal = reactive
|
package/src/Prop.res.mjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Signal$Xote from "./Signal.res.mjs";
|
|
4
|
+
|
|
5
|
+
function get(value) {
|
|
6
|
+
if (value.TAG === "Reactive") {
|
|
7
|
+
return Signal$Xote.get(value._0);
|
|
8
|
+
} else {
|
|
9
|
+
return value._0;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function $$static(value) {
|
|
14
|
+
return {
|
|
15
|
+
TAG: "Static",
|
|
16
|
+
_0: value
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function reactive(signal) {
|
|
21
|
+
return {
|
|
22
|
+
TAG: "Reactive",
|
|
23
|
+
_0: signal
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let signal = reactive;
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
get,
|
|
31
|
+
$$static,
|
|
32
|
+
reactive,
|
|
33
|
+
signal,
|
|
34
|
+
}
|
|
35
|
+
/* No side effect */
|
package/src/ReactiveProp.res
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
type t<'a> = Reactive(Signal.t<'a>) | Static('a)
|
|
4
|
-
|
|
5
|
-
let get = value =>
|
|
6
|
-
switch value {
|
|
7
|
-
| Reactive(signal) => Signal.get(signal)
|
|
8
|
-
| Static(value) => value
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/* Helper functions for creating reactive props */
|
|
12
|
-
let static = value => Static(value)
|
|
13
|
-
|
|
14
|
-
let reactive = signal => Reactive(signal)
|
|
1
|
+
@deprecated("Use Prop instead. ReactiveProp is deprecated and will be removed in a future release.")
|
|
2
|
+
include Prop
|