@barefootjs/client 0.26.4 → 0.28.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.
Files changed (44) hide show
  1. package/dist/reactive.d.ts.map +1 -1
  2. package/dist/runtime/claim-slots.d.ts +222 -0
  3. package/dist/runtime/claim-slots.d.ts.map +1 -0
  4. package/dist/runtime/component.d.ts +40 -18
  5. package/dist/runtime/component.d.ts.map +1 -1
  6. package/dist/runtime/dynamic-text.d.ts +24 -1
  7. package/dist/runtime/dynamic-text.d.ts.map +1 -1
  8. package/dist/runtime/index.d.ts +4 -5
  9. package/dist/runtime/index.d.ts.map +1 -1
  10. package/dist/runtime/index.js +467 -259
  11. package/dist/runtime/loop-markers.d.ts +26 -0
  12. package/dist/runtime/loop-markers.d.ts.map +1 -0
  13. package/dist/runtime/map-array-lazy.d.ts +164 -0
  14. package/dist/runtime/map-array-lazy.d.ts.map +1 -0
  15. package/dist/runtime/map-array.d.ts +35 -0
  16. package/dist/runtime/map-array.d.ts.map +1 -1
  17. package/dist/runtime/qsa-item.d.ts +7 -0
  18. package/dist/runtime/qsa-item.d.ts.map +1 -1
  19. package/dist/runtime/registry.d.ts.map +1 -1
  20. package/dist/runtime/standalone.js +455 -248
  21. package/package.json +2 -2
  22. package/src/reactive.ts +2 -1
  23. package/src/runtime/claim-slots.ts +647 -0
  24. package/src/runtime/component.ts +153 -70
  25. package/src/runtime/dynamic-text.ts +24 -1
  26. package/src/runtime/index.ts +20 -7
  27. package/src/runtime/insert.ts +1 -1
  28. package/src/runtime/loop-markers.ts +100 -0
  29. package/src/runtime/map-array-lazy.ts +470 -0
  30. package/src/runtime/map-array.ts +68 -11
  31. package/src/runtime/qsa-item.ts +9 -3
  32. package/src/runtime/registry.ts +5 -3
  33. package/dist/runtime/client-marker.d.ts +0 -21
  34. package/dist/runtime/client-marker.d.ts.map +0 -1
  35. package/dist/runtime/list.d.ts +0 -21
  36. package/dist/runtime/list.d.ts.map +0 -1
  37. package/dist/runtime/patch-slot-range.d.ts +0 -47
  38. package/dist/runtime/patch-slot-range.d.ts.map +0 -1
  39. package/dist/runtime/reconcile-elements.d.ts +0 -44
  40. package/dist/runtime/reconcile-elements.d.ts.map +0 -1
  41. package/src/runtime/client-marker.ts +0 -46
  42. package/src/runtime/list.ts +0 -47
  43. package/src/runtime/patch-slot-range.ts +0 -105
  44. package/src/runtime/reconcile-elements.ts +0 -391
@@ -0,0 +1,26 @@
1
+ /**
2
+ * BarefootJS - Loop Boundary Marker Lookup
3
+ *
4
+ * `<!--bf-loop:<id>-->` / `<!--bf-/loop:<id>-->` comment markers delimit a
5
+ * loop's rendered range inside its container so `mapArray`/`mapArrayAnchored`
6
+ * (`./map-array.ts`) can reconcile only that range without disturbing
7
+ * non-loop siblings. These lookups used to also back the now-removed
8
+ * `reconcileElements`/`reconcileList` element-reconciler (slot unification
9
+ * A4); they remain as the compiler-facing marker API.
10
+ */
11
+ /**
12
+ * Get loop children from a container, respecting bf-loop boundary markers.
13
+ * When markers are present, returns only elements between them.
14
+ * When absent, returns all children (backward compatible).
15
+ * Exported for use by compiler-generated hydration code.
16
+ */
17
+ export declare function getLoopChildren(container: HTMLElement, markerId?: string): HTMLElement[];
18
+ /**
19
+ * Like {@link getLoopChildren}, but returns every node between the loop
20
+ * boundary markers — Comments (per-item `<!--bf-loop-i-->` markers) and
21
+ * text included. The branch-clearing path needs to remove the per-item
22
+ * marker comments alongside elements; otherwise stale markers would
23
+ * accumulate when a branch swap forces mapArray to start over (#1212).
24
+ */
25
+ export declare function getLoopNodes(container: HTMLElement, markerId?: string): Node[];
26
+ //# sourceMappingURL=loop-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-markers.d.ts","sourceRoot":"","sources":["../../src/runtime/loop-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyDH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAMxF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAY9E"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * BarefootJS - Lazy Row Graph List Rendering (slot unification §9, L2)
3
+ *
4
+ * `mapArrayLazy` renders a keyed reactive array WITHOUT any per-row reactive
5
+ * resources: no `createRoot`, no per-item signal, no per-row effect, no
6
+ * hydration-time query/claim/DOM-write per row. See
7
+ * `spec/slot-unification.md` §9 for the design and the measurement spike
8
+ * that motivated it (branch `claude/lazy-effect-spike`).
9
+ *
10
+ * A plain loop row has exactly two update paths, both already known without
11
+ * per-row reactivity (§9.1):
12
+ *
13
+ * 1. **Item-driven changes** — the keyed reconciler detects them itself
14
+ * (`!Object.is(oldItem, newItem)` per key) and calls the row plan's
15
+ * `applyItem` directly. The row's DOM refs are claimed lazily on that
16
+ * row's FIRST item-driven write (a scan inside that one row, cached on
17
+ * `entry.refs`); a row that never updates never pays.
18
+ * 2. **Outer-signal reads** — applied by ONE loop-level `createEffect`
19
+ * (`applyOuter`) iterating all entries with per-entry dedup, created
20
+ * only when the loop has such bindings.
21
+ *
22
+ * ## Row-plan contract (PINNED — L3's compiler emission targets exactly this)
23
+ *
24
+ * The compiler emits a {@link LazyRowPlan} per eligible loop
25
+ * (§9.4 eligibility: plain single-root keyed rows whose data source is
26
+ * hydration-consistent; everything else keeps the eager `mapArray`
27
+ * emission). Obligations, split by side:
28
+ *
29
+ * **Runtime (this module) guarantees:**
30
+ * - Hydration first run adopts SSR rows with ZERO per-row DOM mutations:
31
+ * `entry.key` is READ from the SSR-rendered `data-key` attribute (never
32
+ * written on adopted rows; `getKey(items[i], i)` is the fallback when the
33
+ * attribute is absent), `entry.item = items[i]` positionally (sound by
34
+ * the §9.3(2) compile-time eligibility gate), `refs`/`last` start `null`.
35
+ * - `plan.createRow` / `plan.applyItem` are invoked inside the reconciler
36
+ * effect but wrapped in `untrack()`, so outer-signal reads during row
37
+ * creation or item application never subscribe the reconciler — it re-runs
38
+ * only when `accessor()`'s dependencies change. (`applyItem` is untracked
39
+ * for the same reason `createRow` is: mixed item+outer bindings read outer
40
+ * signals non-reactively there; the `applyOuter` effect owns the reactive
41
+ * side.)
42
+ * - The runtime assigns `createRow`'s returned element to `entry.primaryEl`
43
+ * and stamps `data-key` on CSR-created rows if `createRow` didn't (same
44
+ * semantics as `mapArray`'s create path).
45
+ * - When `plan.applyOuter` exists, ONE loop-level effect is created (after
46
+ * the reconciler effect, so its first run happens after adoption) whose
47
+ * body calls `applyOuter(entryList, seed)` with `seed === true` exactly
48
+ * once, on the very first run. `entryList` is a closure variable holding
49
+ * the entries in current order, REBUILT (reassigned) by the reconciler
50
+ * after every reconcile — chosen over a live/mutable view so a run of the
51
+ * effect can never observe a half-reconciled list, and read
52
+ * non-reactively so the effect re-runs ONLY on the outer signals
53
+ * `applyOuter` itself reads, never because the list was reconciled.
54
+ * - **Re-subscribe seam**: the previous bullet's "reconciles never re-run
55
+ * this effect" contract holds only when every outer read subscribes
56
+ * independently of the entries. That is true for a plain signal/memo
57
+ * getter and FALSE for a per-key subscription such as `createSelector`,
58
+ * whose selector subscribes the caller only to the specific keys it was
59
+ * called with — so a reconcile can leave the effect subscribed to keys
60
+ * that no longer matter and NOT subscribed to keys that now do. Every
61
+ * loop with an `applyOuter` therefore re-runs it after any reconcile that
62
+ * created a row or changed an item (removals strand nothing). Applied
63
+ * unconditionally rather than gated on a compiler judgement about which
64
+ * reads are per-key: see the seam's comment inside `mapArrayLazy` for why
65
+ * (a misclassification must be harmless, not silently wrong) and for the
66
+ * three stranding sequences it prevents, each reproduced before it existed.
67
+ *
68
+ * **Plan (compiler-emitted) obligations:**
69
+ * - `createRow` MUST write ALL bindings — item-driven AND outer-involving —
70
+ * with current values (it is CSR creation; it computes everything anyway)
71
+ * and MUST seed `entry.refs`/`entry.last` from known clone paths (no
72
+ * scan). Freshly-created rows are therefore consistent immediately; the
73
+ * `applyOuter` effect's per-entry dedup (seeded via `entry.last`) keeps
74
+ * them consistent on later outer-signal changes.
75
+ * - `applyOuter`'s FIRST run (`seed === true`) must READ current DOM state
76
+ * (`getAttribute` / `nodeValue`) to initialize each entry's dedup value
77
+ * and write only where the computed value differs — read-compare-write
78
+ * seeding (§9.3(1)), sound even when outer state is client-only and
79
+ * diverges from SSR. No trust-first-run regression (§6).
80
+ * - `applyItem` claims refs lazily (scan within `entry.primaryEl`) when
81
+ * `entry.refs` is null, and writes through per-binding dedup held on
82
+ * `entry.last` / `entry.refs`.
83
+ *
84
+ * ## Reconciliation
85
+ *
86
+ * The keyed diff, duplicate-key once-per-reconcile warning, clear-all fast
87
+ * path, and LIS minimal-move reorder mirror `mapArray`'s exactly — minus
88
+ * every per-row reactive resource. Removal is plain DOM detach: entries
89
+ * hold no reactive resources (CSR rows created by `plan.createRow` hold
90
+ * none either), so there is nothing to dispose.
91
+ *
92
+ * Single-root rows only (v1): the §9.4 eligibility gate guarantees the
93
+ * compiler never targets this entry point for multi-root (Fragment) rows,
94
+ * so there is no `startMarker`/`extras`/`bf-loop-i` bookkeeping here.
95
+ *
96
+ * Rows are NOT added to `hydratedScopes`: that mark exists for element
97
+ * scopes the hydration walker must skip, and lazy-eligible rows are plain
98
+ * markup (no nested component/host scopes — the eligibility gate excludes
99
+ * them), so the mark would only spend per-row memory this design exists to
100
+ * eliminate.
101
+ *
102
+ * Shared helpers: `findLoopMarkers` and `longestIncreasingSubsequenceIndices`
103
+ * are imported from `./map-array.ts` (now exported for internal reuse)
104
+ * rather than duplicated or extracted into a third module — they are pure,
105
+ * behavior-identical for both reconcilers, and importing keeps exactly one
106
+ * copy without churning `map-array.ts`'s structure. The loop-shaped logic
107
+ * around them (partition, diff, clear fast path) is intentionally
108
+ * re-written here rather than shared: it differs in what it carries per row
109
+ * (plain entries vs reactive scopes) and forcing one parameterized body
110
+ * would obscure both.
111
+ *
112
+ * `bfId` is forwarded to the reconciler effect only (same attribution point
113
+ * as `mapArray`); profile mode never emits lazy loops (§9.4), so the outer
114
+ * effect carries no id.
115
+ */
116
+ /**
117
+ * One row of a lazy loop: plain data, no reactive resources.
118
+ * Built at adoption (hydration) or by the reconciler via `plan.createRow`.
119
+ */
120
+ export interface LazyRowEntry<T> {
121
+ key: string;
122
+ primaryEl: HTMLElement;
123
+ item: T;
124
+ /** plan-owned: claimed DOM refs, null until the row's first item-driven write */
125
+ refs: unknown | null;
126
+ /** plan-owned: per-binding last-value dedup state */
127
+ last: unknown | null;
128
+ }
129
+ /**
130
+ * The compiler-emitted row plan for a lazy-eligible loop.
131
+ * See the module docstring for the pinned contract and each side's
132
+ * obligations.
133
+ */
134
+ export interface LazyRowPlan<T> {
135
+ /** CSR create: clone/build a fully-written row element for item; record refs
136
+ * and dedup state directly on the entry (no scan). Returns the element. */
137
+ createRow(entry: LazyRowEntry<T>, index: number): HTMLElement;
138
+ /** Item-driven (and mixed) bindings: called by the reconciler AFTER
139
+ * entry.item has been updated to the new item; prevItem is the old value.
140
+ * Claims refs lazily (scan within entry.primaryEl) when entry.refs is null.
141
+ * Writes through per-binding dedup held on entry.last / entry.refs. */
142
+ applyItem(entry: LazyRowEntry<T>, prevItem: T): void;
143
+ /** Outer-involving bindings (present only when the loop has bindings that
144
+ * read signals from outside the row). Runtime wraps this in ONE
145
+ * createEffect for the whole loop. Reads its outer signals inside the
146
+ * callback (so the effect subscribes), then applies those bindings to
147
+ * every entry with per-entry dedup. `seed` is true on the effect's FIRST
148
+ * run only: the binding must READ current DOM state (getAttribute /
149
+ * nodeValue) to initialize its dedup value and write only where the
150
+ * computed value differs (read-compare-write, spec §9.3(1)). */
151
+ applyOuter?(entries: ReadonlyArray<LazyRowEntry<T>>, seed: boolean): void;
152
+ }
153
+ /**
154
+ * Lazy-row-graph keyed list rendering (spec/slot-unification.md §9).
155
+ *
156
+ * @param accessor - Function returning the reactive array (signal/memo read)
157
+ * @param container - DOM container element
158
+ * @param getKey - Key extractor (null = use index). Receives plain item value.
159
+ * @param plan - Compiler-emitted row plan (see {@link LazyRowPlan})
160
+ * @param markerId - Scoped loop marker id (`<!--bf-loop:<id>-->`), see #1087
161
+ * @param bfId - Profiler attribution id for the reconciler effect
162
+ */
163
+ export declare function mapArrayLazy<T>(accessor: () => T[], container: HTMLElement | null, getKey: ((item: T, index: number) => string) | null, plan: LazyRowPlan<T>, markerId?: string, bfId?: string): void;
164
+ //# sourceMappingURL=map-array-lazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-array-lazy.d.ts","sourceRoot":"","sources":["../../src/runtime/map-array-lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkHG;AAMH;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,WAAW,CAAA;IACtB,IAAI,EAAE,CAAC,CAAA;IACP,iFAAiF;IACjF,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,qDAAqD;IACrD,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B;gFAC4E;IAC5E,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAAA;IAC7D;;;4EAGwE;IACxE,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAA;IACpD;;;;;;;qEAOiE;IACjE,UAAU,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAC1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,EACnD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CAqSN"}
@@ -17,6 +17,41 @@
17
17
  * extras...) triple — moves, mounts, and unmounts as a single unit.
18
18
  * Single-root loops continue to flow through the legacy path verbatim.
19
19
  */
20
+ /**
21
+ * Find loop boundary comment markers in a container.
22
+ *
23
+ * When `markerId` is given, matches the scoped form `<!--bf-loop:<id>-->` /
24
+ * `<!--bf-/loop:<id>-->` so sibling `.map()` calls under the same parent
25
+ * each see only their own range (#1087).
26
+ *
27
+ * When omitted (e.g. hand-written tests that drop in unscoped markers),
28
+ * falls back to the first start / first end found, matching either the
29
+ * scoped or legacy unscoped form.
30
+ *
31
+ * Exported for `./map-array-lazy.ts` (internal reuse only — not re-exported
32
+ * from the runtime index).
33
+ */
34
+ export declare function findLoopMarkers(container: HTMLElement, markerId?: string): {
35
+ start: Comment | null;
36
+ end: Comment | null;
37
+ };
38
+ /**
39
+ * Longest increasing subsequence, returned as ascending indices into `arr`.
40
+ * O(n log n) patience sorting with predecessor backtracking.
41
+ *
42
+ * Used by `mapArray`'s reorder step: `arr` holds, for each already-attached
43
+ * scope encountered while walking the live DOM in its current order, the
44
+ * scope's index in the *desired* order. The LIS of that array is the
45
+ * largest set of scopes whose relative order already matches the desired
46
+ * order — those scopes can stay exactly where they are; every other scope
47
+ * (plus any brand-new one) needs to move. This is the same strategy
48
+ * keyed-diff reconcilers in the udomdiff/Solid family use to turn an
49
+ * arbitrary reorder into a minimal set of DOM moves.
50
+ *
51
+ * Exported for `./map-array-lazy.ts` (internal reuse only — not re-exported
52
+ * from the runtime index).
53
+ */
54
+ export declare function longestIncreasingSubsequenceIndices(arr: number[]): number[];
20
55
  /**
21
56
  * Per-item scoped list rendering.
22
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"map-array.d.ts","sourceRoot":"","sources":["../../src/runtime/map-array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgPH;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,EACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,WAAW,EACjF,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CAoQN;AAqHD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,EACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,gBAAgB,GAAG,OAAO,EAC5F,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CA+FN"}
1
+ {"version":3,"file":"map-array.d.ts","sourceRoot":"","sources":["../../src/runtime/map-array.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqCH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,WAAW,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CA+BhD;AA8DD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA2B3E;AAkFD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,EACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,WAAW,EACjF,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CA6RN;AAqHD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,EACnD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,gBAAgB,GAAG,OAAO,EAC5F,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI,CA+FN"}
@@ -25,6 +25,13 @@
25
25
  * is `null` and step 2 yields nothing. Reading `__bfExtras` lets
26
26
  * lookups reach the still-pending extras before `mapArray` inserts
27
27
  * them into the DOM.
28
+ *
29
+ * Step 3's reliance on the primary being detached during setup is why
30
+ * `createItemScope` un-parks a row that turns out to carry extras: the
31
+ * connect-before-init mount point applies to `createComponent` row roots,
32
+ * which are single-root by construction and so never reach this module. An
33
+ * attached primary would make step 2's sibling walk run past the item's own
34
+ * roots into a neighbouring item's elements before step 3 is ever consulted.
28
35
  */
29
36
  /**
30
37
  * Find an element matching `selector` within an item's range. Searches
@@ -1 +1 @@
1
- {"version":3,"file":"qsa-item.d.ts","sourceRoot":"","sources":["../../src/runtime/qsa-item.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAsCH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,GAC3B,WAAW,GAAG,IAAI,CAwBpB"}
1
+ {"version":3,"file":"qsa-item.d.ts","sourceRoot":"","sources":["../../src/runtime/qsa-item.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAsCH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,GAC3B,WAAW,GAAG,IAAI,CAuBpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAaxC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAclE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,GAAG,IAAI,EAC1B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,IAAI,CAoCN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,GAC3B,WAAW,GAAG,IAAI,CA8BpB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAaxC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAclE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,GAAG,IAAI,EAC1B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,IAAI,CAoCN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EACrB,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,GAC3B,WAAW,GAAG,IAAI,CAgCpB"}