tutuca 0.9.64 → 0.9.66

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.
@@ -4344,49 +4344,67 @@ class Path {
4344
4344
  let handlers = null;
4345
4345
  let nodeIds = [];
4346
4346
  let isLeafComponent = true;
4347
+ const crossComponent = (cidNum, vid) => {
4348
+ const comp = comps.getComponentForId(cidNum);
4349
+ let pushStep = true;
4350
+ if (handlers === null && (isLeafComponent || bubbles)) {
4351
+ handlers = findHandlers(comp, eventIds, vid, eventName);
4352
+ if (handlers === null) {
4353
+ if (isLeafComponent && stopOnNoEvent && !bubbles)
4354
+ return false;
4355
+ } else if (!isLeafComponent) {
4356
+ pathSteps.length = 0;
4357
+ pendingDyns.length = 0;
4358
+ pushStep = false;
4359
+ }
4360
+ }
4361
+ isLeafComponent = false;
4362
+ for (const dyn of pendingDyns)
4363
+ dyn.interiorCids.add(cidNum);
4364
+ if (pushStep) {
4365
+ const step = resolvePathStep(comp, nodeIds, vid);
4366
+ if (step) {
4367
+ step._originCid = cidNum;
4368
+ pathSteps.push(step);
4369
+ if (step instanceof DynStep) {
4370
+ step.interiorCids.add(cidNum);
4371
+ pendingDyns.push(step);
4372
+ }
4373
+ }
4374
+ }
4375
+ for (let i = pendingDyns.length - 1;i >= 0; i--)
4376
+ if (pendingDyns[i].producerCompId === cidNum)
4377
+ pendingDyns.splice(i, 1);
4378
+ eventIds = [];
4379
+ nodeIds = [];
4380
+ return true;
4381
+ };
4347
4382
  while (node && node !== rootNode && depth < maxDepth) {
4348
4383
  if (node?.dataset) {
4349
- const { nid, si, sk } = parseMetaComment(node.previousSibling);
4350
4384
  const { eid, cid, vid } = node.dataset;
4351
4385
  if (eid !== undefined)
4352
4386
  eventIds.push(eid);
4353
- if (cid !== undefined) {
4354
- const cidNum = +cid;
4355
- const comp = comps.getComponentForId(cidNum);
4356
- let pushStep = true;
4357
- if (handlers === null && (isLeafComponent || bubbles)) {
4358
- handlers = findHandlers(comp, eventIds, vid, eventName);
4359
- if (handlers === null) {
4360
- if (isLeafComponent && stopOnNoEvent && !bubbles)
4361
- return NO_EVENT_INFO;
4362
- } else if (!isLeafComponent) {
4363
- pathSteps.length = 0;
4364
- pendingDyns.length = 0;
4365
- pushStep = false;
4366
- }
4367
- }
4368
- isLeafComponent = false;
4369
- for (const dyn of pendingDyns)
4370
- dyn.interiorCids.add(cidNum);
4371
- if (pushStep) {
4372
- const step = resolvePathStep(comp, nodeIds, vid);
4373
- if (step) {
4374
- step._originCid = cidNum;
4375
- pathSteps.push(step);
4376
- if (step instanceof DynStep) {
4377
- step.interiorCids.add(cidNum);
4378
- pendingDyns.push(step);
4379
- }
4387
+ const metas = metaChain(node.previousSibling);
4388
+ let sawComp = false;
4389
+ for (let i = 0;i < metas.length; i++) {
4390
+ const m = metas[i];
4391
+ if (m.$ === "Comp") {
4392
+ sawComp = true;
4393
+ if (!crossComponent(m.cid, m.vid))
4394
+ return NO_EVENT_INFO;
4395
+ const outer = metas[i + 1];
4396
+ if (outer?.$ === "Each" && outer.nid === m.nid) {
4397
+ nodeIds.push({ nid: outer.nid, si: outer.si, sk: outer.sk });
4398
+ i += 1;
4399
+ } else {
4400
+ nodeIds.push({ nid: m.nid });
4380
4401
  }
4402
+ } else {
4403
+ nodeIds.push({ nid: m.nid, si: m.si, sk: m.sk });
4381
4404
  }
4382
- for (let i = pendingDyns.length - 1;i >= 0; i--)
4383
- if (pendingDyns[i].producerCompId === cidNum)
4384
- pendingDyns.splice(i, 1);
4385
- eventIds = [];
4386
- nodeIds = [];
4387
4405
  }
4388
- if (nid !== undefined)
4389
- nodeIds.push({ nid, si, sk });
4406
+ if (!sawComp && cid !== undefined && !crossComponent(+cid, vid))
4407
+ return NO_EVENT_INFO;
4390
4408
  }
4391
4409
  depth += 1;
4392
4410
  node = node.parentNode;
@@ -4400,18 +4418,17 @@ class Path {
4400
4418
  return Path.fromNodeAndEventName(target, type, rNode, maxDepth, comps, stopOnNoEvent);
4401
4419
  }
4402
4420
  }
4403
- function parseMetaComment(n) {
4404
- if (n?.nodeType === 8 && n.textContent[0] === "§") {
4405
- const m = parseMetaComment(n.previousSibling);
4406
- if (m !== EMPTY_META)
4407
- return m;
4421
+ function metaChain(n) {
4422
+ const out = [];
4423
+ while (n?.nodeType === 8 && n.textContent[0] === "§") {
4408
4424
  try {
4409
- return JSON.parse(n.textContent.slice(1, -1));
4425
+ out.push(JSON.parse(n.textContent.slice(1, -1)));
4410
4426
  } catch (err) {
4411
4427
  console.warn(err, n);
4412
4428
  }
4429
+ n = n.previousSibling;
4413
4430
  }
4414
- return EMPTY_META;
4431
+ return out;
4415
4432
  }
4416
4433
  function findHandlers(comp, eventIds, vid, eventName) {
4417
4434
  for (const eid of eventIds) {
@@ -4486,7 +4503,7 @@ class PathBuilder {
4486
4503
  return this.add(new SeqStep(name, key));
4487
4504
  }
4488
4505
  }
4489
- var NONE, BindStep, FieldStep, SeqStep, SeqAccessStep, EachBindStep, EachRenderItStep, DynStep, DynEachStep, EMPTY_META, NO_EVENT_INFO, BUBBLING_EVENTS;
4506
+ var NONE, BindStep, FieldStep, SeqStep, SeqAccessStep, EachBindStep, EachRenderItStep, DynStep, DynEachStep, NO_EVENT_INFO, BUBBLING_EVENTS;
4490
4507
  var init_path = __esm(() => {
4491
4508
  NONE = Symbol("NONE");
4492
4509
  BindStep = class BindStep extends Step {
@@ -4634,7 +4651,6 @@ var init_path = __esm(() => {
4634
4651
  return producerSteps.slice(0, -1).concat(new SeqStep(last.field, key));
4635
4652
  }
4636
4653
  };
4637
- EMPTY_META = {};
4638
4654
  NO_EVENT_INFO = [null, null];
4639
4655
  BUBBLING_EVENTS = new Set(["drop"]);
4640
4656
  });
@@ -5978,7 +5994,7 @@ function compileModifiers(eventName, names) {
5978
5994
  return w(this, f, args, ctx);
5979
5995
  };
5980
5996
  }
5981
- var TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment = (xs) => xs.length === 1 ? xs[0] : new FragmentNode(xs), VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderEachNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, filterAlwaysTrue = (_v, _k, _seq) => true, nullLoopWith = (seq) => ({ seq }), X_OP_CONSUMED, X_OP_WRAPPABLE, X_ATTR_WRAPPERS, WRAPPER_NODES, _htmlBlockTags = "ADDRESS,ARTICLE,ASIDE,BLOCKQUOTE,CAPTION,COL,COLGROUP,DETAILS,DIALOG,DIV,DD,DL,DT,FIELDSET,FIGCAPTION,FIGURE,FOOTER,FORM,H1,H2,H3,H4,H5,H6,HEADER,HGROUP,HR,LEGEND,LI,MAIN,MENU,NAV,OL,P,PRE,SECTION,SUMMARY,TABLE,TBODY,TD,TFOOT,TH,THEAD,TR,UL", HTML_BLOCK_TAGS, isBlockDomNode = (n) => {
5997
+ var TextNode, CommentNode, ChildsNode, DomNode, FragmentNode, maybeFragment = (xs) => xs.length === 1 ? xs[0] : new FragmentNode(xs), VALID_NODE_RE, ANode, MacroNode, RenderViewId, RenderNode, RenderItNode, RenderEachNode, RenderTextNode, RenderOnceNode, WrapperNode, ShowNode, HideNode, PushViewNameNode, SlotNode, ScopeNode, EachNode, filterAlwaysTrue = (_v, _k, _seq) => true, nullLoopWith = (seq) => ({ iterData: { seq } }), X_OP_CONSUMED, X_OP_WRAPPABLE, X_ATTR_WRAPPERS, WRAPPER_NODES, _htmlBlockTags = "ADDRESS,ARTICLE,ASIDE,BLOCKQUOTE,CAPTION,COL,COLGROUP,DETAILS,DIALOG,DIV,DD,DL,DT,FIELDSET,FIGCAPTION,FIGURE,FOOTER,FORM,H1,H2,H3,H4,H5,H6,HEADER,HGROUP,HR,LEGEND,LI,MAIN,MENU,NAV,OL,P,PRE,SECTION,SUMMARY,TABLE,TBODY,TD,TFOOT,TH,THEAD,TR,UL", HTML_BLOCK_TAGS, isBlockDomNode = (n) => {
5982
5998
  const node = n instanceof FragmentNode ? n.childs[0] : n;
5983
5999
  return node instanceof DomNode && HTML_BLOCK_TAGS.has(node.tagName);
5984
6000
  }, isMac, fwdIfCtxPred = (pred) => (w) => (that, f, args, ctx) => pred(ctx) ? w(that, f, args, ctx) : that, fwdIfKey = (keyName) => fwdIfCtxPred((ctx) => ctx.e.key === keyName), fwdCtrl, fwdMeta, fwdAlt, metaWraps, MOD_WRAPPERS_BY_EVENT, identityModifierWrapper = (f, _ctx) => f;
@@ -6177,6 +6193,7 @@ var init_anode = __esm(() => {
6177
6193
  super(nodeId, val);
6178
6194
  this.viewId = viewId;
6179
6195
  }
6196
+ setDataAttr(_key, _val) {}
6180
6197
  };
6181
6198
  RenderNode = class RenderNode extends RenderViewId {
6182
6199
  render(stack, rx) {
@@ -6249,6 +6266,7 @@ var init_anode = __esm(() => {
6249
6266
  render(stack, _rx) {
6250
6267
  return this.val.eval(stack);
6251
6268
  }
6269
+ setDataAttr(_key, _val) {}
6252
6270
  };
6253
6271
  RenderOnceNode = class RenderOnceNode extends BaseNode {
6254
6272
  constructor(node) {
@@ -14192,7 +14210,12 @@ class Renderer {
14192
14210
  if (cachedNode)
14193
14211
  return cachedNode;
14194
14212
  const view = viewName ? comp.getView(viewName) : stack.lookupBestView(comp.views, "main");
14195
- const meta = this._renderMetadata({ $: "Comp", nid: node?.nodeId ?? null });
14213
+ const meta = this._renderMetadata({
14214
+ $: "Comp",
14215
+ nid: node?.nodeId ?? null,
14216
+ cid: comp.id,
14217
+ vid: view.name
14218
+ });
14196
14219
  const dom = new VFragment([meta, this.renderView(view, stack)]);
14197
14220
  this.cache.set(cachePath, cacheKey, dom);
14198
14221
  return dom;
@@ -14203,20 +14226,20 @@ class Renderer {
14203
14226
  renderEach(stack, iterInfo, node, viewName) {
14204
14227
  const { seq, filter, loopWith } = iterInfo.eval(stack);
14205
14228
  const r = [];
14206
- const iterData = loopWith.call(stack.it, seq);
14229
+ const { iterData, start, end } = unpackLoopResult(loopWith.call(stack.it, seq), seq);
14207
14230
  getSeqInfo(seq)(seq, (key, value, attrName) => {
14208
14231
  if (filter.call(stack.it, key, value, iterData)) {
14209
14232
  const dom = this.renderIt(stack.enter(value, { key }, true), node, key, viewName);
14210
14233
  this.pushEachEntry(r, node.nodeId, attrName, key, dom);
14211
14234
  }
14212
- });
14235
+ }, start, end);
14213
14236
  return r;
14214
14237
  }
14215
14238
  renderEachWhen(stack, iterInfo, view, nid) {
14216
14239
  const { seq, filter, loopWith, enricher } = iterInfo.eval(stack);
14217
14240
  const r = [];
14218
14241
  const it = stack.it;
14219
- const iterData = loopWith.call(it, seq);
14242
+ const { iterData, start, end } = unpackLoopResult(loopWith.call(it, seq), seq);
14220
14243
  getSeqInfo(seq)(seq, (key, value, attrName) => {
14221
14244
  if (filter.call(it, key, value, iterData)) {
14222
14245
  const cachePath = enricher ? [view, it, value] : [view, value];
@@ -14233,7 +14256,7 @@ class Renderer {
14233
14256
  this.cache.set(cachePath, cacheKey, dom);
14234
14257
  }
14235
14258
  }
14236
- });
14259
+ }, start, end);
14237
14260
  return r;
14238
14261
  }
14239
14262
  renderView(view, stack) {
@@ -14254,13 +14277,29 @@ class Renderer {
14254
14277
  return new VComment(`§${JSON.stringify(info)}§`);
14255
14278
  }
14256
14279
  }
14257
- var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter, imIndexedIter = (seq, visit) => {
14280
+ var DATASET_ATTRS, getSeqInfo = (seq) => isIndexed(seq) ? imIndexedIter : isKeyed(seq) ? imKeyedIter : seq?.[SEQ_INFO] ?? unkIter, normalizeRange = (start, end, size) => {
14281
+ let s = start == null ? 0 : start < 0 ? size + start : start;
14282
+ let e = end == null ? size : end < 0 ? size + end : end;
14283
+ s = s < 0 ? 0 : s > size ? size : s;
14284
+ e = e < 0 ? 0 : e > size ? size : e;
14285
+ return [s, e < s ? s : e];
14286
+ }, unpackLoopResult = (result, seq) => {
14287
+ const r = result ?? {};
14288
+ return { iterData: r.iterData ?? { seq }, start: r.start, end: r.end };
14289
+ }, imIndexedIter = (seq, visit, start, end) => {
14290
+ const [s, e] = normalizeRange(start, end, seq.size);
14291
+ for (let i = s;i < e; i++)
14292
+ visit(i, seq.get(i), "si");
14293
+ }, imKeyedIter = (seq, visit, start, end) => {
14294
+ const [s, e] = normalizeRange(start, end, seq.size);
14258
14295
  let i = 0;
14259
- for (const v of seq)
14260
- visit(i++, v, "si");
14261
- }, imKeyedIter = (seq, visit) => {
14262
- for (const [k, v] of seq.toSeq().entries())
14263
- visit(k, v, "sk");
14296
+ for (const [k, v] of seq.toSeq().entries()) {
14297
+ if (i >= e)
14298
+ break;
14299
+ if (i >= s)
14300
+ visit(k, v, "sk");
14301
+ i++;
14302
+ }
14264
14303
  }, unkIter = () => {}, SEQ_INFO;
14265
14304
  var init_renderer = __esm(() => {
14266
14305
  init_immutable();