xote 6.1.1 → 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.
@@ -1,12 +1,15 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
- import * as Node$Xote from "./Node.res.mjs";
3
+ import * as View$Xote from "./View.res.mjs";
4
4
  import * as Effect$Xote from "./Effect.res.mjs";
5
5
  import * as Signal$Xote from "./Signal.res.mjs";
6
6
  import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
7
7
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
8
+ import * as RuntimeDom$Xote from "./RuntimeDom.res.mjs";
8
9
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
10
+ import * as RuntimeOwner$Xote from "./RuntimeOwner.res.mjs";
9
11
  import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
12
+ import * as RuntimeHydrationMarkers$Xote from "./RuntimeHydrationMarkers.res.mjs";
10
13
 
11
14
  function getChildNodes(el) {
12
15
  return (Array.from(el.childNodes || []));
@@ -41,8 +44,8 @@ function extractKey(node) {
41
44
  return;
42
45
  }
43
46
  let value = node.nodeValue;
44
- if (!(value == null) && value.startsWith("k:")) {
45
- return value.slice(2);
47
+ if (!(value == null) && value.startsWith(RuntimeHydrationMarkers$Xote.keyedItemPrefixContent)) {
48
+ return value.slice(RuntimeHydrationMarkers$Xote.keyedItemPrefixContent.length);
46
49
  }
47
50
  }
48
51
 
@@ -135,9 +138,9 @@ function hydrateNode(_node, domNode) {
135
138
  let children = node.children;
136
139
  let events = node.events;
137
140
  let attrs = node.attrs;
138
- let owner = Node$Xote.Reactivity.createOwner();
139
- Node$Xote.Reactivity.setOwner(domNode, owner);
140
- return Node$Xote.Reactivity.runWithOwner(owner, () => {
141
+ let owner = RuntimeOwner$Xote.createOwner();
142
+ RuntimeOwner$Xote.setOwner(domNode, owner);
143
+ return RuntimeOwner$Xote.runWithOwner(owner, () => {
141
144
  attrs.forEach(param => {
142
145
  let value = param[1];
143
146
  let key = param[0];
@@ -147,15 +150,15 @@ function hydrateNode(_node, domNode) {
147
150
  case "SignalValue" :
148
151
  let signal = value._0;
149
152
  let disposer = Effect$Xote.runWithDisposer(() => {
150
- Node$Xote.DOM.setAttrOrProp(domNode, key, Signal$Xote.get(signal));
153
+ RuntimeDom$Xote.setAttrOrProp(domNode, key, Signal$Xote.get(signal));
151
154
  }, undefined);
152
- return Node$Xote.Reactivity.addDisposer(owner, disposer);
155
+ return RuntimeOwner$Xote.addDisposer(owner, disposer);
153
156
  case "Compute" :
154
157
  let compute = value._0;
155
158
  let disposer$1 = Effect$Xote.runWithDisposer(() => {
156
- Node$Xote.DOM.setAttrOrProp(domNode, key, compute());
159
+ RuntimeDom$Xote.setAttrOrProp(domNode, key, compute());
157
160
  }, undefined);
158
- return Node$Xote.Reactivity.addDisposer(owner, disposer$1);
161
+ return RuntimeOwner$Xote.addDisposer(owner, disposer$1);
159
162
  }
160
163
  });
161
164
  events.forEach(param => {
@@ -168,13 +171,13 @@ function hydrateNode(_node, domNode) {
168
171
  return;
169
172
  case "SignalText" :
170
173
  let signal = node._0;
171
- let owner$1 = Node$Xote.Reactivity.createOwner();
172
- Node$Xote.Reactivity.setOwner(domNode, owner$1);
173
- return Node$Xote.Reactivity.runWithOwner(owner$1, () => {
174
+ let owner$1 = RuntimeOwner$Xote.createOwner();
175
+ RuntimeOwner$Xote.setOwner(domNode, owner$1);
176
+ return RuntimeOwner$Xote.runWithOwner(owner$1, () => {
174
177
  let disposer = Effect$Xote.runWithDisposer(() => {
175
178
  domNode.textContent = Signal$Xote.get(signal);
176
179
  }, undefined);
177
- Node$Xote.Reactivity.addDisposer(owner$1, disposer);
180
+ RuntimeOwner$Xote.addDisposer(owner$1, disposer);
178
181
  });
179
182
  case "Fragment" :
180
183
  let walker = make(domNode);
@@ -182,36 +185,66 @@ function hydrateNode(_node, domNode) {
182
185
  return;
183
186
  case "SignalFragment" :
184
187
  let signal$1 = node._0;
185
- let owner$2 = Node$Xote.Reactivity.createOwner();
186
- Node$Xote.Reactivity.setOwner(domNode, owner$2);
187
- return Node$Xote.Reactivity.runWithOwner(owner$2, () => {
188
+ let owner$2 = RuntimeOwner$Xote.createOwner();
189
+ RuntimeOwner$Xote.setOwner(domNode, owner$2);
190
+ let keyedItems = {};
191
+ let initialized = {
192
+ contents: false
193
+ };
194
+ return RuntimeOwner$Xote.runWithOwner(owner$2, () => {
188
195
  let disposer = Effect$Xote.runWithDisposer(() => {
189
196
  let children = Signal$Xote.get(signal$1);
190
- let childNodes = (Array.from(domNode.childNodes || []));
191
- childNodes.forEach(child => Node$Xote.Reactivity.disposeOwner(Stdlib_Option.getOr(Node$Xote.Reactivity.getOwner(child), Node$Xote.Reactivity.createOwner())));
192
- ((domNode.innerHTML = ''));
193
- children.forEach(child => {
194
- let childEl = Node$Xote.Render.render(child);
195
- domNode.appendChild(childEl);
196
- });
197
+ let keyedChildren = View$Xote.Render.getKeyedChildren(children);
198
+ let exit = 0;
199
+ if (keyedChildren !== undefined && initialized.contents) {
200
+ View$Xote.Render.reconcileKeyedChildren(keyedChildren, keyedItems, domNode);
201
+ } else {
202
+ exit = 1;
203
+ }
204
+ if (exit === 1) {
205
+ View$Xote.Render.clearKeyedItems(keyedItems);
206
+ let childNodes = (Array.from(domNode.childNodes || []));
207
+ childNodes.forEach(child => RuntimeOwner$Xote.disposeOwner(Stdlib_Option.getOr(RuntimeOwner$Xote.getOwner(child), RuntimeOwner$Xote.createOwner())));
208
+ domNode.innerHTML = "";
209
+ if (keyedChildren !== undefined) {
210
+ keyedChildren.forEach(keyedChild => {
211
+ let childEl = View$Xote.Render.render(keyedChild.child);
212
+ keyedItems[keyedChild.key] = {
213
+ key: keyedChild.key,
214
+ item: keyedChild.identity,
215
+ element: childEl
216
+ };
217
+ domNode.appendChild(childEl);
218
+ });
219
+ } else {
220
+ children.forEach(child => {
221
+ let childEl = View$Xote.Render.render(child);
222
+ domNode.appendChild(childEl);
223
+ });
224
+ }
225
+ initialized.contents = true;
226
+ }
197
227
  }, undefined);
198
- Node$Xote.Reactivity.addDisposer(owner$2, disposer);
228
+ RuntimeOwner$Xote.addDisposer(owner$2, disposer);
199
229
  });
230
+ case "Keyed" :
231
+ _node = node.child;
232
+ continue;
200
233
  case "LazyComponent" :
201
- let owner$3 = Node$Xote.Reactivity.createOwner();
202
- let childNode = Node$Xote.Reactivity.runWithOwner(owner$3, node._0);
203
- Node$Xote.Reactivity.setOwner(domNode, owner$3);
234
+ let owner$3 = RuntimeOwner$Xote.createOwner();
235
+ let childNode = RuntimeOwner$Xote.runWithOwner(owner$3, node._0);
236
+ RuntimeOwner$Xote.setOwner(domNode, owner$3);
204
237
  _node = childNode;
205
238
  continue;
206
239
  case "KeyedList" :
207
240
  let renderItem = node.renderItem;
208
241
  let keyFn = node.keyFn;
209
242
  let signal$2 = node.signal;
210
- let owner$4 = Node$Xote.Reactivity.createOwner();
211
- Node$Xote.Reactivity.setOwner(domNode, owner$4);
212
- let keyedItems = {};
243
+ let owner$4 = RuntimeOwner$Xote.createOwner();
244
+ RuntimeOwner$Xote.setOwner(domNode, owner$4);
245
+ let keyedItems$1 = {};
213
246
  let walker$1 = make(domNode);
214
- skipUntilMarker(walker$1, "kl");
247
+ skipUntilMarker(walker$1, RuntimeHydrationMarkers$Xote.keyedListStartContent);
215
248
  let parseKeyedItems = () => {
216
249
  while (true) {
217
250
  let node = walker$1.current;
@@ -219,8 +252,8 @@ function hydrateNode(_node, domNode) {
219
252
  return;
220
253
  }
221
254
  let node$1 = Primitive_option.valFromOption(node);
222
- if (!isMarkerPrefix(node$1, "k:")) {
223
- if (isMarker(node$1, "/kl")) {
255
+ if (!isMarkerPrefix(node$1, RuntimeHydrationMarkers$Xote.keyedItemPrefixContent)) {
256
+ if (isMarker(node$1, RuntimeHydrationMarkers$Xote.keyedListEndContent)) {
224
257
  next(walker$1);
225
258
  return;
226
259
  } else {
@@ -229,12 +262,12 @@ function hydrateNode(_node, domNode) {
229
262
  }
230
263
  let key = Stdlib_Option.getOr(extractKey(node$1), "");
231
264
  next(walker$1);
232
- let itemElements = collectUntilMarker(walker$1, "/k");
265
+ let itemElements = collectUntilMarker(walker$1, RuntimeHydrationMarkers$Xote.keyedItemEndContent);
233
266
  let element = itemElements.find(el => el.nodeType === 1);
234
267
  if (element !== undefined) {
235
268
  let items = Signal$Xote.peek(signal$2);
236
269
  let item = Stdlib_Option.getOr(items.find(i => keyFn(i) === key), {});
237
- keyedItems[key] = {
270
+ keyedItems$1[key] = {
238
271
  key: key,
239
272
  item: item,
240
273
  element: Primitive_option.valFromOption(element)
@@ -244,7 +277,7 @@ function hydrateNode(_node, domNode) {
244
277
  };
245
278
  };
246
279
  parseKeyedItems();
247
- return Node$Xote.Reactivity.runWithOwner(owner$4, () => {
280
+ return RuntimeOwner$Xote.runWithOwner(owner$4, () => {
248
281
  let startAnchor = document.createComment(" keyed-list-start ");
249
282
  let endAnchor = document.createComment(" keyed-list-end ");
250
283
  let firstChild = domNode.firstChild;
@@ -261,7 +294,7 @@ function hydrateNode(_node, domNode) {
261
294
  newKeyMap[keyFn(item)] = item;
262
295
  });
263
296
  let keysToRemove = [];
264
- Object.keys(keyedItems).forEach(key => {
297
+ Object.keys(keyedItems$1).forEach(key => {
265
298
  let match = newKeyMap[key];
266
299
  if (match !== undefined) {
267
300
  return;
@@ -271,11 +304,11 @@ function hydrateNode(_node, domNode) {
271
304
  }
272
305
  });
273
306
  keysToRemove.forEach(key => {
274
- let keyedItem = keyedItems[key];
307
+ let keyedItem = keyedItems$1[key];
275
308
  if (keyedItem !== undefined) {
276
- Node$Xote.Render.disposeElement(keyedItem.element);
277
- ((keyedItem.element.remove()));
278
- Stdlib_Dict.$$delete(keyedItems, key);
309
+ View$Xote.Render.disposeElement(keyedItem.element);
310
+ keyedItem.element.remove();
311
+ Stdlib_Dict.$$delete(keyedItems$1, key);
279
312
  return;
280
313
  }
281
314
  });
@@ -283,33 +316,33 @@ function hydrateNode(_node, domNode) {
283
316
  let elementsToReplace = {};
284
317
  newItems.forEach(item => {
285
318
  let key = keyFn(item);
286
- let existing = keyedItems[key];
319
+ let existing = keyedItems$1[key];
287
320
  if (existing !== undefined) {
288
321
  if (existing.item !== item) {
289
322
  elementsToReplace[key] = true;
290
323
  let node = renderItem(item);
291
- let element = Node$Xote.Render.render(node);
324
+ let element = View$Xote.Render.render(node);
292
325
  let keyedItem = {
293
326
  key: key,
294
327
  item: item,
295
328
  element: element
296
329
  };
297
330
  newOrder.push(keyedItem);
298
- keyedItems[key] = keyedItem;
331
+ keyedItems$1[key] = keyedItem;
299
332
  return;
300
333
  }
301
334
  newOrder.push(existing);
302
335
  return;
303
336
  }
304
337
  let node$1 = renderItem(item);
305
- let element$1 = Node$Xote.Render.render(node$1);
338
+ let element$1 = View$Xote.Render.render(node$1);
306
339
  let keyedItem$1 = {
307
340
  key: key,
308
341
  item: item,
309
342
  element: element$1
310
343
  };
311
344
  newOrder.push(keyedItem$1);
312
- keyedItems[key] = keyedItem$1;
345
+ keyedItems$1[key] = keyedItem$1;
313
346
  });
314
347
  let marker = {
315
348
  contents: startAnchor.nextSibling
@@ -330,7 +363,7 @@ function hydrateNode(_node, domNode) {
330
363
  }
331
364
  let needsReplacement = Stdlib_Option.getOr(elementsToReplace[keyedItem.key], false);
332
365
  if (needsReplacement) {
333
- Node$Xote.Render.disposeElement(currentElement);
366
+ View$Xote.Render.disposeElement(currentElement);
334
367
  domNode.replaceChild(keyedItem.element, currentElement);
335
368
  marker.contents = keyedItem.element.nextSibling;
336
369
  } else {
@@ -342,155 +375,188 @@ function hydrateNode(_node, domNode) {
342
375
  let disposer = Effect$Xote.runWithDisposer(() => {
343
376
  reconcile();
344
377
  }, undefined);
345
- Node$Xote.Reactivity.addDisposer(owner$4, disposer);
378
+ RuntimeOwner$Xote.addDisposer(owner$4, disposer);
346
379
  });
347
380
  }
348
381
  };
349
382
  }
350
383
 
351
- function hydrateNodeWithWalker(node, walker) {
352
- switch (node.TAG) {
353
- case "Element" :
354
- let children = node.children;
355
- let events = node.events;
356
- let attrs = node.attrs;
357
- let domNode = next(walker);
358
- if (domNode === undefined) {
359
- return logHydrationWarning("Missing DOM element for Element node");
360
- }
361
- let domNode$1 = Primitive_option.valFromOption(domNode);
362
- let owner = Node$Xote.Reactivity.createOwner();
363
- Node$Xote.Reactivity.setOwner(domNode$1, owner);
364
- return Node$Xote.Reactivity.runWithOwner(owner, () => {
365
- attrs.forEach(param => {
366
- let value = param[1];
367
- let key = param[0];
368
- switch (value.TAG) {
369
- case "Static" :
370
- return;
371
- case "SignalValue" :
372
- let signal = value._0;
373
- let disposer = Effect$Xote.runWithDisposer(() => {
374
- Node$Xote.DOM.setAttrOrProp(domNode$1, key, Signal$Xote.get(signal));
375
- }, undefined);
376
- return Node$Xote.Reactivity.addDisposer(owner, disposer);
377
- case "Compute" :
378
- let compute = value._0;
379
- let disposer$1 = Effect$Xote.runWithDisposer(() => {
380
- Node$Xote.DOM.setAttrOrProp(domNode$1, key, compute());
381
- }, undefined);
382
- return Node$Xote.Reactivity.addDisposer(owner, disposer$1);
383
- }
384
- });
385
- events.forEach(param => {
386
- domNode$1.addEventListener(param[0], param[1]);
387
- });
388
- let childWalker = make(domNode$1);
389
- children.forEach(child => hydrateNodeWithWalker(child, childWalker));
390
- });
391
- case "Text" :
392
- next(walker);
393
- return;
394
- case "SignalText" :
395
- let signal = node._0;
396
- skipUntilMarker(walker, "$");
397
- let textNode = next(walker);
398
- if (textNode === undefined) {
399
- return logHydrationWarning("Missing text node for SignalText");
400
- }
401
- let textNode$1 = Primitive_option.valFromOption(textNode);
402
- let owner$1 = Node$Xote.Reactivity.createOwner();
403
- Node$Xote.Reactivity.setOwner(textNode$1, owner$1);
404
- Node$Xote.Reactivity.runWithOwner(owner$1, () => {
405
- let disposer = Effect$Xote.runWithDisposer(() => {
406
- textNode$1.textContent = Signal$Xote.get(signal);
407
- }, undefined);
408
- Node$Xote.Reactivity.addDisposer(owner$1, disposer);
409
- });
410
- skipUntilMarker(walker, "/$");
411
- return;
412
- case "Fragment" :
413
- node._0.forEach(child => hydrateNodeWithWalker(child, walker));
414
- return;
415
- case "SignalFragment" :
416
- let signal$1 = node._0;
417
- skipUntilMarker(walker, "#");
418
- let contentNodes = collectUntilMarker(walker, "/#");
419
- let container = document.createElement("div");
420
- container.setAttribute("style", "display: contents");
421
- let firstNode = contentNodes[0];
422
- let parent = firstNode !== undefined ? firstNode.parentNode : undefined;
423
- contentNodes.forEach(node => {
424
- container.appendChild(node);
425
- });
426
- let match = walker.current;
427
- if (parent !== undefined) {
428
- let p = Primitive_option.valFromOption(parent);
429
- if (match !== undefined) {
430
- p.insertBefore(container, Primitive_option.valFromOption(match));
431
- } else {
432
- p.appendChild(container);
384
+ function hydrateNodeWithWalker(_node, walker) {
385
+ while (true) {
386
+ let node = _node;
387
+ switch (node.TAG) {
388
+ case "Element" :
389
+ let children = node.children;
390
+ let events = node.events;
391
+ let attrs = node.attrs;
392
+ let domNode = next(walker);
393
+ if (domNode === undefined) {
394
+ return logHydrationWarning("Missing DOM element for Element node");
433
395
  }
434
- }
435
- let owner$2 = Node$Xote.Reactivity.createOwner();
436
- Node$Xote.Reactivity.setOwner(container, owner$2);
437
- return Node$Xote.Reactivity.runWithOwner(owner$2, () => {
438
- let disposer = Effect$Xote.runWithDisposer(() => {
439
- let children = Signal$Xote.get(signal$1);
440
- let childNodes = (Array.from(container.childNodes || []));
441
- childNodes.forEach(Node$Xote.Render.disposeElement);
442
- ((container.innerHTML = ''));
443
- children.forEach(child => {
444
- let childEl = Node$Xote.Render.render(child);
445
- container.appendChild(childEl);
396
+ let domNode$1 = Primitive_option.valFromOption(domNode);
397
+ let owner = RuntimeOwner$Xote.createOwner();
398
+ RuntimeOwner$Xote.setOwner(domNode$1, owner);
399
+ return RuntimeOwner$Xote.runWithOwner(owner, () => {
400
+ attrs.forEach(param => {
401
+ let value = param[1];
402
+ let key = param[0];
403
+ switch (value.TAG) {
404
+ case "Static" :
405
+ return;
406
+ case "SignalValue" :
407
+ let signal = value._0;
408
+ let disposer = Effect$Xote.runWithDisposer(() => {
409
+ RuntimeDom$Xote.setAttrOrProp(domNode$1, key, Signal$Xote.get(signal));
410
+ }, undefined);
411
+ return RuntimeOwner$Xote.addDisposer(owner, disposer);
412
+ case "Compute" :
413
+ let compute = value._0;
414
+ let disposer$1 = Effect$Xote.runWithDisposer(() => {
415
+ RuntimeDom$Xote.setAttrOrProp(domNode$1, key, compute());
416
+ }, undefined);
417
+ return RuntimeOwner$Xote.addDisposer(owner, disposer$1);
418
+ }
446
419
  });
447
- }, undefined);
448
- Node$Xote.Reactivity.addDisposer(owner$2, disposer);
449
- });
450
- case "LazyComponent" :
451
- skipUntilMarker(walker, "lc");
452
- let childNode = node._0();
453
- hydrateNodeWithWalker(childNode, walker);
454
- skipUntilMarker(walker, "/lc");
455
- return;
456
- case "KeyedList" :
457
- let keyFn = node.keyFn;
458
- let signal$2 = node.signal;
459
- skipUntilMarker(walker, "kl");
460
- let keyedItems = {};
461
- let parseKeyedItems = () => {
462
- while (true) {
463
- let node = walker.current;
464
- if (node === undefined) {
465
- return;
420
+ events.forEach(param => {
421
+ domNode$1.addEventListener(param[0], param[1]);
422
+ });
423
+ let childWalker = make(domNode$1);
424
+ children.forEach(child => hydrateNodeWithWalker(child, childWalker));
425
+ });
426
+ case "Text" :
427
+ next(walker);
428
+ return;
429
+ case "SignalText" :
430
+ let signal = node._0;
431
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.signalTextStartContent);
432
+ let textNode = next(walker);
433
+ if (textNode === undefined) {
434
+ return logHydrationWarning("Missing text node for SignalText");
435
+ }
436
+ let textNode$1 = Primitive_option.valFromOption(textNode);
437
+ let owner$1 = RuntimeOwner$Xote.createOwner();
438
+ RuntimeOwner$Xote.setOwner(textNode$1, owner$1);
439
+ RuntimeOwner$Xote.runWithOwner(owner$1, () => {
440
+ let disposer = Effect$Xote.runWithDisposer(() => {
441
+ textNode$1.textContent = Signal$Xote.get(signal);
442
+ }, undefined);
443
+ RuntimeOwner$Xote.addDisposer(owner$1, disposer);
444
+ });
445
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.signalTextEndContent);
446
+ return;
447
+ case "Fragment" :
448
+ node._0.forEach(child => hydrateNodeWithWalker(child, walker));
449
+ return;
450
+ case "SignalFragment" :
451
+ let signal$1 = node._0;
452
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.signalFragmentStartContent);
453
+ let contentNodes = collectUntilMarker(walker, RuntimeHydrationMarkers$Xote.signalFragmentEndContent);
454
+ let container = document.createElement("div");
455
+ container.setAttribute("style", "display: contents");
456
+ let firstNode = contentNodes[0];
457
+ let parent = firstNode !== undefined ? firstNode.parentNode : undefined;
458
+ contentNodes.forEach(node => {
459
+ container.appendChild(node);
460
+ });
461
+ let match = walker.current;
462
+ if (parent !== undefined) {
463
+ let p = Primitive_option.valFromOption(parent);
464
+ if (match !== undefined) {
465
+ p.insertBefore(container, Primitive_option.valFromOption(match));
466
+ } else {
467
+ p.appendChild(container);
466
468
  }
467
- let node$1 = Primitive_option.valFromOption(node);
468
- if (!isMarkerPrefix(node$1, "k:")) {
469
- if (isMarker(node$1, "/kl")) {
470
- next(walker);
471
- return;
469
+ }
470
+ let owner$2 = RuntimeOwner$Xote.createOwner();
471
+ RuntimeOwner$Xote.setOwner(container, owner$2);
472
+ let keyedItems = {};
473
+ let initialized = {
474
+ contents: false
475
+ };
476
+ return RuntimeOwner$Xote.runWithOwner(owner$2, () => {
477
+ let disposer = Effect$Xote.runWithDisposer(() => {
478
+ let children = Signal$Xote.get(signal$1);
479
+ let keyedChildren = View$Xote.Render.getKeyedChildren(children);
480
+ let exit = 0;
481
+ if (keyedChildren !== undefined && initialized.contents) {
482
+ View$Xote.Render.reconcileKeyedChildren(keyedChildren, keyedItems, container);
472
483
  } else {
484
+ exit = 1;
485
+ }
486
+ if (exit === 1) {
487
+ View$Xote.Render.clearKeyedItems(keyedItems);
488
+ let childNodes = (Array.from(container.childNodes || []));
489
+ childNodes.forEach(View$Xote.Render.disposeElement);
490
+ container.innerHTML = "";
491
+ if (keyedChildren !== undefined) {
492
+ keyedChildren.forEach(keyedChild => {
493
+ let childEl = View$Xote.Render.render(keyedChild.child);
494
+ keyedItems[keyedChild.key] = {
495
+ key: keyedChild.key,
496
+ item: keyedChild.identity,
497
+ element: childEl
498
+ };
499
+ container.appendChild(childEl);
500
+ });
501
+ } else {
502
+ children.forEach(child => {
503
+ let childEl = View$Xote.Render.render(child);
504
+ container.appendChild(childEl);
505
+ });
506
+ }
507
+ initialized.contents = true;
508
+ }
509
+ }, undefined);
510
+ RuntimeOwner$Xote.addDisposer(owner$2, disposer);
511
+ });
512
+ case "Keyed" :
513
+ _node = node.child;
514
+ continue;
515
+ case "LazyComponent" :
516
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.lazyComponentStartContent);
517
+ let childNode = node._0();
518
+ hydrateNodeWithWalker(childNode, walker);
519
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.lazyComponentEndContent);
520
+ return;
521
+ case "KeyedList" :
522
+ let keyFn = node.keyFn;
523
+ let signal$2 = node.signal;
524
+ skipUntilMarker(walker, RuntimeHydrationMarkers$Xote.keyedListStartContent);
525
+ let keyedItems$1 = {};
526
+ let parseKeyedItems = () => {
527
+ while (true) {
528
+ let node = walker.current;
529
+ if (node === undefined) {
473
530
  return;
474
531
  }
475
- }
476
- let key = Stdlib_Option.getOr(extractKey(node$1), "");
477
- next(walker);
478
- let itemElements = collectUntilMarker(walker, "/k");
479
- let element = itemElements.find(el => el.nodeType === 1);
480
- if (element !== undefined) {
481
- let items = Signal$Xote.peek(signal$2);
482
- let item = Stdlib_Option.getOr(items.find(i => keyFn(i) === key), {});
483
- keyedItems[key] = {
484
- key: key,
485
- item: item,
486
- element: Primitive_option.valFromOption(element)
487
- };
488
- }
489
- continue;
532
+ let node$1 = Primitive_option.valFromOption(node);
533
+ if (!isMarkerPrefix(node$1, RuntimeHydrationMarkers$Xote.keyedItemPrefixContent)) {
534
+ if (isMarker(node$1, RuntimeHydrationMarkers$Xote.keyedListEndContent)) {
535
+ next(walker);
536
+ return;
537
+ } else {
538
+ return;
539
+ }
540
+ }
541
+ let key = Stdlib_Option.getOr(extractKey(node$1), "");
542
+ next(walker);
543
+ let itemElements = collectUntilMarker(walker, RuntimeHydrationMarkers$Xote.keyedItemEndContent);
544
+ let element = itemElements.find(el => el.nodeType === 1);
545
+ if (element !== undefined) {
546
+ let items = Signal$Xote.peek(signal$2);
547
+ let item = Stdlib_Option.getOr(items.find(i => keyFn(i) === key), {});
548
+ keyedItems$1[key] = {
549
+ key: key,
550
+ item: item,
551
+ element: Primitive_option.valFromOption(element)
552
+ };
553
+ }
554
+ continue;
555
+ };
490
556
  };
491
- };
492
- return parseKeyedItems();
493
- }
557
+ return parseKeyedItems();
558
+ }
559
+ };
494
560
  }
495
561
 
496
562
  function hydrate(component, container, optionsOpt) {
@@ -526,9 +592,12 @@ let DOM;
526
592
 
527
593
  let Reactivity;
528
594
 
595
+ let Markers;
596
+
529
597
  export {
530
598
  DOM,
531
599
  Reactivity,
600
+ Markers,
532
601
  DOMWalker,
533
602
  HydrationMismatch,
534
603
  logHydrationWarning,
@@ -537,4 +606,4 @@ export {
537
606
  hydrate,
538
607
  hydrateById,
539
608
  }
540
- /* Node-Xote Not a pure module */
609
+ /* View-Xote Not a pure module */