synstate-dom 0.6.0 → 0.7.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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/bind/bind-props.mjs +14 -1
  3. package/dist/bind/bind-props.mjs.map +1 -1
  4. package/dist/control/for.d.mts +6 -0
  5. package/dist/control/for.d.mts.map +1 -1
  6. package/dist/control/for.mjs +27 -15
  7. package/dist/control/for.mjs.map +1 -1
  8. package/dist/control/mount-switch.d.mts +6 -0
  9. package/dist/control/mount-switch.d.mts.map +1 -1
  10. package/dist/control/mount-switch.mjs +27 -12
  11. package/dist/control/mount-switch.mjs.map +1 -1
  12. package/dist/control/portal.d.mts.map +1 -1
  13. package/dist/control/portal.mjs +2 -2
  14. package/dist/control/portal.mjs.map +1 -1
  15. package/dist/internal/after-attach.d.mts +46 -0
  16. package/dist/internal/after-attach.d.mts.map +1 -0
  17. package/dist/internal/after-attach.mjs +170 -0
  18. package/dist/internal/after-attach.mjs.map +1 -0
  19. package/dist/internal/bind-value.mjs +11 -0
  20. package/dist/internal/bind-value.mjs.map +1 -1
  21. package/dist/internal/index.d.mts +1 -0
  22. package/dist/internal/index.d.mts.map +1 -1
  23. package/dist/internal/index.mjs +1 -0
  24. package/dist/internal/index.mjs.map +1 -1
  25. package/dist/jsx/element-props.d.mts +3 -1
  26. package/dist/jsx/element-props.d.mts.map +1 -1
  27. package/dist/jsx/jsx.mjs +2 -2
  28. package/dist/jsx/jsx.mjs.map +1 -1
  29. package/dist/render.d.mts +2 -1
  30. package/dist/render.d.mts.map +1 -1
  31. package/dist/render.mjs +19 -4
  32. package/dist/render.mjs.map +1 -1
  33. package/package.json +10 -10
  34. package/src/bind/bind-props.mts +22 -1
  35. package/src/control/for.mts +43 -19
  36. package/src/control/mount-switch.mts +38 -15
  37. package/src/control/portal.mts +7 -3
  38. package/src/internal/after-attach.mts +238 -0
  39. package/src/internal/bind-value.mts +14 -1
  40. package/src/internal/index.mts +1 -0
  41. package/src/jsx/element-props.mts +6 -3
  42. package/src/jsx/element-props.test.mts +18 -0
  43. package/src/jsx/jsx.mts +2 -2
  44. package/src/render.mts +32 -6
package/README.md CHANGED
@@ -209,7 +209,7 @@ synstate derivations are not lazy: a derivation is computed whenever its parent
209
209
  - `mapBindable`, `derive` and `toObservable`: helpers for a component that receives a `Bindable`. Constants stay constants and never enter the graph.
210
210
  - The JSX runtime (`"jsx": "react-jsx"`, `"jsxImportSource": "synstate-dom"`): a JSX expression is a lazy `Mountable` description, and a component is called once, when it is mounted.
211
211
  - `render(App, container)`: mounts `App` in a root scope and returns the function that unmounts it.
212
- - Element props: attributes and DOM properties typed from `lib.dom.d.ts` (`Bindable<T>` of each writable primitive property), `aria-*` and `data-*`, `class` as a string or a `{ name: Bindable<boolean> }` object, `style` as a string or a per-property object, and `onClick`-style event handlers. SVG elements are created in the SVG namespace and take a fixed list of attributes.
212
+ - Element props: attributes and DOM properties typed from `lib.dom.d.ts` (`Bindable<T>` of each writable primitive property), `aria-*` (also a number, and a boolean written as `"true"` / `"false"`) and `data-*`, `class` as a string or a `{ name: Bindable<boolean> }` object, `style` as a string or a per-property object, and `onClick`-style event handlers. SVG elements are created in the SVG namespace and take a fixed list of attributes.
213
213
  - A bound `checked` or `indeterminate` of an `<input>` is controlled: after a `change`, the input is drawn as its bound value again before the next frame is painted, so a change the owner does not take in `onChange` undoes itself. For a checkbox the user toggles freely, use `defaultChecked`. A radio group is set back as a whole when every button of it is bound.
214
214
  - `If`, `MatchOptional` and `MatchResult`: mount one branch at a time in a scope of its own, rebuilt only when the condition or the tag changes.
215
215
  - `For`: one row per key, each in a scope of its own; `item$` and `index$` are derived from `items`, and rows are moved as little as the longest increasing subsequence allows.
@@ -32,6 +32,18 @@ const writeAttribute = (element, name, value) => {
32
32
 
33
33
 
34
34
 
35
+
36
+ const writeAriaAttribute = (element, name, value) => {
37
+ if (isBoolean(value)) {
38
+ element.setAttribute(name, value ? 'true' : 'false');
39
+ return;
40
+ }
41
+ writeAttribute(element, name, value);
42
+ };
43
+
44
+
45
+
46
+
35
47
  const isBindable = (value) => value !== undefined && value !== null;
36
48
 
37
49
  const isPlainObject = (value) => isRecord(value) && !isObservable(value) && !hasKey(value, viewTag);
@@ -179,8 +191,9 @@ const bindProp = (element, key, value) => {
179
191
  return;
180
192
  }
181
193
  const name = attributeNameOf[key] ?? key;
194
+ const write = name.startsWith('aria-') ? writeAriaAttribute : writeAttribute;
182
195
  bindValue(value, (v) => {
183
- writeAttribute(element, name, v);
196
+ write(element, name, v);
184
197
  });
185
198
  };
186
199
  const propertyNameSet = new Set(propertyNames);
@@ -1 +1 @@
1
- {"version":3,"file":"bind-props.mjs","sourceRoot":"","sources":["../../src/bind/bind-props.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bind-props.mjs","sourceRoot":"","sources":["../../src/bind/bind-props.mts"],"names":[],"mappings":"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"}
@@ -17,6 +17,12 @@ import { type JSX } from '../jsx/index.mjs';
17
17
  * nodes; the rows that stay are moved as little as the longest increasing
18
18
  * subsequence allows.
19
19
  *
20
+ * An update that arrives before the anchor is in a parent (a later sibling
21
+ * wrote `items` while the enclosing element was still mounting its children) is
22
+ * applied, with the latest `items`, once the nodes `For` returned are inserted.
23
+ * One that a row being mounted writes is applied, with the latest `items`, once
24
+ * the rows of the update under way are all mounted and inserted (#3141).
25
+ *
20
26
  * `key` is required, as in React; `(_, i) => i` matches rows by position. A key
21
27
  * that appears twice is reported with `console.error`, and its later
22
28
  * occurrences are rebuilt on every update.
@@ -1 +1 @@
1
- {"version":3,"file":"for.d.mts","sourceRoot":"","sources":["../../src/control/for.mts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,qBAAqB,EAG3B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAGhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,6BAIlB,QAAQ,CAAC;IACV,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,CACR,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAClC,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,KAAG,GAAG,CAAC,OAwML,CAAC"}
1
+ {"version":3,"file":"for.d.mts","sourceRoot":"","sources":["../../src/control/for.mts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,qBAAqB,EAG3B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAOpE,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAGhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,6BAIlB,QAAQ,CAAC;IACV,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,CACR,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAClC,GAAG,CAAC,OAAO,CAAC;CAClB,CAAC,KAAG,GAAG,CAAC,OAqNL,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { createInitializedSyncChildObservable, createScope, getCurrentScope, map, onScopeDispose, } from 'synstate';
2
2
  import { Arr, Optional } from 'ts-data-forge';
3
3
  import { toObservable } from '../constant/index.mjs';
4
- import { bindValue } from '../internal/index.mjs';
4
+ import { applyWhenAttached, bindValue, insertBefore, mountThenInsert, } from '../internal/index.mjs';
5
5
  import { mountable, toNodes } from '../jsx/index.mjs';
6
6
  import { longestIncreasingSubsequence } from './longest-increasing-subsequence.mjs';
7
7
 
@@ -18,6 +18,12 @@ import { longestIncreasingSubsequence } from './longest-increasing-subsequence.m
18
18
 
19
19
 
20
20
 
21
+
22
+
23
+
24
+
25
+
26
+
21
27
 
22
28
 
23
29
 
@@ -35,7 +41,10 @@ export const For = ({ items, key, children, }) => mountable(() => {
35
41
  const callChildren = children;
36
42
  const mut_rows = new Map();
37
43
  const rowStarts = new WeakSet();
38
- const mut_initial = { nodes: [] };
44
+ const mut_initial = {
45
+ nodes: [],
46
+ built: false,
47
+ };
39
48
 
40
49
  const createRow = (rowKey, entry) => {
41
50
  const scope = createScope(parent);
@@ -86,11 +95,10 @@ export const For = ({ items, key, children, }) => mountable(() => {
86
95
  range.setEndBefore(anchor);
87
96
  range.deleteContents();
88
97
  };
89
- bindValue(entries$, (entries) => {
98
+
99
+ const update = (entries) => {
90
100
  const previousOrder = Array.from(mut_rows.keys());
91
- if (anchor.parentNode !== null) {
92
- removeAllAtOnceIfEveryKeyGoes(previousOrder, entries);
93
- }
101
+ removeAllAtOnceIfEveryKeyGoes(previousOrder, entries);
94
102
  for (const [rowKey, row] of mut_rows) {
95
103
  if (entries.byKey.has(rowKey)) {
96
104
  continue;
@@ -98,13 +106,6 @@ export const For = ({ items, key, children, }) => mountable(() => {
98
106
  row.scope.dispose();
99
107
  mut_rows.delete(rowKey);
100
108
  }
101
- if (anchor.parentNode === null) {
102
- mut_initial.nodes = entries.order.flatMap((rowKey) => {
103
- const entry = entries.byKey.get(rowKey);
104
- return entry === undefined ? [] : createRow(rowKey, entry);
105
- });
106
- return;
107
- }
108
109
  if (Arr.eq(previousOrder, entries.order)) {
109
110
  return;
110
111
  }
@@ -124,9 +125,8 @@ export const For = ({ items, key, children, }) => mountable(() => {
124
125
  if (entry === undefined) {
125
126
  continue;
126
127
  }
127
- const [start, ...rest] = createRow(rowKey, entry);
128
+ const [start] = mountThenInsert((e) => createRow(rowKey, e), entry, insertBefore, mut_next);
128
129
  if (start !== undefined) {
129
- mut_next.before(start, ...rest);
130
130
  mut_next = start;
131
131
  }
132
132
  continue;
@@ -137,6 +137,18 @@ export const For = ({ items, key, children, }) => mountable(() => {
137
137
  mut_next = existing.start;
138
138
  }
139
139
  reorderMap(mut_rows, entries.order);
140
+ };
141
+ const updateWhenAttached = applyWhenAttached(anchor, update);
142
+ bindValue(entries$, (entries) => {
143
+ if (!mut_initial.built) {
144
+ mut_initial.built = true;
145
+ mut_initial.nodes = entries.order.flatMap((rowKey) => {
146
+ const entry = entries.byKey.get(rowKey);
147
+ return entry === undefined ? [] : createRow(rowKey, entry);
148
+ });
149
+ return;
150
+ }
151
+ updateWhenAttached(entries);
140
152
  });
141
153
  return Arr.toPushed(mut_initial.nodes, anchor);
142
154
  });
@@ -1 +1 @@
1
- {"version":3,"file":"for.mjs","sourceRoot":"","sources":["../../src/control/for.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"for.mjs","sourceRoot":"","sources":["../../src/control/for.mts"],"names":[],"mappings":"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"}
@@ -13,6 +13,12 @@ import { type Mountable, type MountedNodes } from '../jsx/index.mjs';
13
13
  *
14
14
  * `branch` runs inside the new scope, so whatever it creates belongs to the
15
15
  * branch.
16
+ *
17
+ * A value that arrives before the anchor is in a parent (a later sibling wrote
18
+ * it while the enclosing element was still mounting its children) is kept, and
19
+ * the switch follows the latest one once the nodes it returned are inserted.
20
+ * A value the branch being mounted writes itself is applied once that branch is
21
+ * inserted (#3141).
16
22
  */
17
23
  export declare const mountSwitch: <V, K>(value: Bindable<V>, keyOf: (current: V) => K, branch: (key: K, current: V) => Mountable | undefined) => MountedNodes;
18
24
  //# sourceMappingURL=mount-switch.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mount-switch.d.mts","sourceRoot":"","sources":["../../src/control/mount-switch.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,SACvB,QAAQ,CAAC,CAAC,CAAC,SACX,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,UAChB,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,SAAS,GAAG,SAAS,KACpD,YA6CF,CAAC"}
1
+ {"version":3,"file":"mount-switch.d.mts","sourceRoot":"","sources":["../../src/control/mount-switch.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAOtD,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,SACvB,QAAQ,CAAC,CAAC,CAAC,SACX,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,UAChB,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,SAAS,GAAG,SAAS,KACpD,YAyDF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { createScope, getCurrentScope, onScopeDispose, } from 'synstate';
2
2
  import { Arr } from 'ts-data-forge';
3
- import { bindValue } from '../internal/index.mjs';
3
+ import { applyWhenAttached, bindValue, insertBefore, mountThenInsert, } from '../internal/index.mjs';
4
4
  import { toNodes } from '../jsx/index.mjs';
5
5
 
6
6
 
@@ -16,18 +16,18 @@ import { toNodes } from '../jsx/index.mjs';
16
16
 
17
17
 
18
18
 
19
+
20
+
21
+
22
+
23
+
24
+
19
25
  export const mountSwitch = (value, keyOf, branch) => {
20
26
  const parent = getCurrentScope();
21
27
  const anchor = document.createComment('');
22
28
  const mut_state = { current: undefined, initialNodes: [] };
23
- bindValue(value, (v) => {
24
- const key = keyOf(v);
25
- if (mut_state.current !== undefined) {
26
- if (Object.is(mut_state.current.key, key)) {
27
- return;
28
- }
29
- mut_state.current.scope.dispose();
30
- }
29
+
30
+ const mountBranch = (key, v) => {
31
31
  const scope = createScope(parent);
32
32
  const nodes = scope.run(() => {
33
33
  const mounted = toNodes(branch(key, v)?.mount() ?? []);
@@ -39,11 +39,26 @@ export const mountSwitch = (value, keyOf, branch) => {
39
39
  return mounted;
40
40
  });
41
41
  mut_state.current = { key, scope };
42
- if (anchor.parentNode === null) {
43
- mut_state.initialNodes = nodes;
42
+ return nodes;
43
+ };
44
+
45
+ const switchTo = (v) => {
46
+ const key = keyOf(v);
47
+ if (mut_state.current !== undefined) {
48
+ if (Object.is(mut_state.current.key, key)) {
49
+ return;
50
+ }
51
+ mut_state.current.scope.dispose();
52
+ }
53
+ mountThenInsert((k) => mountBranch(k, v), key, insertBefore, anchor);
54
+ };
55
+ const switchWhenAttached = applyWhenAttached(anchor, switchTo);
56
+ bindValue(value, (v) => {
57
+ if (mut_state.current === undefined) {
58
+ mut_state.initialNodes = mountBranch(keyOf(v), v);
44
59
  }
45
60
  else {
46
- anchor.before(...nodes);
61
+ switchWhenAttached(v);
47
62
  }
48
63
  });
49
64
  return Arr.toPushed(mut_state.initialNodes, anchor);
@@ -1 +1 @@
1
- {"version":3,"file":"mount-switch.mjs","sourceRoot":"","sources":["../../src/control/mount-switch.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,GAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAqC,MAAM,kBAAkB,CAAC;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAkB,EAClB,KAAwB,EACxB,MAAqD,EACvC,EAAE;IAChB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAE1C,MAAM,SAAS,GAGX,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE7C,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvD,cAAc,CAAC,GAAG,EAAE;gBAClB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAEnC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC/B,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC"}
1
+ {"version":3,"file":"mount-switch.mjs","sourceRoot":"","sources":["../../src/control/mount-switch.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,GAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAqC,MAAM,kBAAkB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAkB,EAClB,KAAwB,EACxB,MAAqD,EACvC,EAAE;IAChB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAE1C,MAAM,SAAS,GAGX,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAE7C,6EAA6E;IAC7E,MAAM,WAAW,GAAG,CAAC,GAAM,EAAE,CAAI,EAAwB,EAAE;QACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvD,cAAc,CAAC,GAAG,EAAE;gBAClB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAEnC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CAAC,CAAI,EAAQ,EAAE;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,eAAe,CAAC,CAAC,CAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE/D,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;QACrB,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACpC,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"portal.d.mts","sourceRoot":"","sources":["../../src/control/portal.mts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAE/E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,0BAGhB,QAAQ,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;CACjB,CAAC,KAAG,GAAG,CAAC,OAaL,CAAC"}
1
+ {"version":3,"file":"portal.d.mts","sourceRoot":"","sources":["../../src/control/portal.mts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAE/E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,0BAGhB,QAAQ,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;CACjB,CAAC,KAAG,GAAG,CAAC,OAgBL,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { onScopeDispose } from 'synstate';
2
+ import { appendTo, mountThenInsert } from '../internal/index.mjs';
2
3
  import { mountChild, mountable } from '../jsx/index.mjs';
3
4
 
4
5
 
@@ -10,8 +11,7 @@ import { mountChild, mountable } from '../jsx/index.mjs';
10
11
 
11
12
 
12
13
  export const Portal = ({ target, children, }) => mountable(() => {
13
- const nodes = mountChild(children);
14
- (target ?? document.body).append(...nodes);
14
+ const nodes = mountThenInsert(mountChild, children, appendTo, target ?? document.body);
15
15
  onScopeDispose(() => {
16
16
  for (const node of nodes) {
17
17
  node.remove();
@@ -1 +1 @@
1
- {"version":3,"file":"portal.mjs","sourceRoot":"","sources":["../../src/control/portal.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,MAAM,EACN,QAAQ,GAIR,EAAe,EAAE,CACjB,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEnC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAE3C,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"portal.mjs","sourceRoot":"","sources":["../../src/control/portal.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAwB,MAAM,kBAAkB,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,MAAM,EACN,QAAQ,GAIR,EAAe,EAAE,CACjB,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,KAAK,GAAG,eAAe,CAC3B,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,IAAI,QAAQ,CAAC,IAAI,CACxB,CAAC;IAEF,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Nodes are mounted before they are inserted: an element mounts all its
3
+ * children and then appends them, `render` mounts the app and then appends it,
4
+ * and `For` and `If` mount a row or a branch and then insert it. A child
5
+ * mounted later that writes to what an earlier `For` or `If` reads updates them
6
+ * while their anchor is in no parent yet (#2935).
7
+ *
8
+ * Every mount-and-insert goes through {@link mountThenInsert}. A `For` or a
9
+ * switch takes {@link applyWhenAttached} when it is mounted, which notes the
10
+ * mount open then; a value that arrives while its anchor is detached is kept,
11
+ * and the latest one is applied once that mount has inserted its nodes.
12
+ *
13
+ * `mount` takes `arg` rather than closing over it, so that the element and
14
+ * `render` paths allocate nothing; a mount that nothing defers to allocates no
15
+ * frame.
16
+ */
17
+ export declare const mountThenInsert: <A, N, T>(mount: (input: A) => N, arg: A, insert: (into: T, mounted: N) => void, target: T) => N;
18
+ /** Appends `nodes` to `parent`: an `insert` for {@link mountThenInsert}. */
19
+ export declare const appendTo: (parent: Element, nodes: readonly ChildNode[]) => void;
20
+ /** Inserts `nodes` in front of `next`: an `insert` for {@link mountThenInsert}. */
21
+ export declare const insertBefore: (next: ChildNode, nodes: readonly ChildNode[]) => void;
22
+ /**
23
+ * Returns the function a `For` or a switch calls with each value after its
24
+ * first. While `anchor` is attached the value is applied at once, and replaces
25
+ * any value still waiting. While it is detached the value is kept, and the
26
+ * latest one is applied once the mount open now has inserted its nodes, and
27
+ * only if `anchor` is then attached: it is not when the `For` or switch was
28
+ * disposed in between.
29
+ *
30
+ * Mounted outside every {@link mountThenInsert} (a description mounted by hand),
31
+ * there is nothing to wait for: a value that arrives while `anchor` is detached
32
+ * is dropped.
33
+ *
34
+ * A value that arrives while `apply` runs (a row or a branch it mounts writes
35
+ * what chose it, #3141) is kept too, and the latest one is applied once `apply`
36
+ * returns, if `anchor` is still attached: applying it at once would act on rows
37
+ * or a branch the running call has not finished recording. A write that keeps
38
+ * coming back this way is an error after {@link maxReapply} passes, as synstate
39
+ * stops a nested update loop.
40
+ *
41
+ * Once the scope current when it was taken is disposed, nothing more is
42
+ * applied: `anchor` can still have a parent then, a disposed element that held
43
+ * the `For` or switch.
44
+ */
45
+ export declare const applyWhenAttached: <V>(anchor: Node, apply: (value: V) => void) => ((value: V) => void);
46
+ //# sourceMappingURL=after-attach.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-attach.d.mts","sourceRoot":"","sources":["../../src/internal/after-attach.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAC9B,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OACjB,CAAC,UACE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,UAC7B,CAAC,KACR,CAuBF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,QAAQ,WACX,OAAO,SACR,SAAS,SAAS,EAAE,KAC1B,IAEF,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,YAAY,SACjB,SAAS,SACR,SAAS,SAAS,EAAE,KAC1B,IAEF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,UACzB,IAAI,SACL,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,KACxB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAiGrB,CAAC"}
@@ -0,0 +1,170 @@
1
+ import { getCurrentScope, onScopeDispose } from 'synstate';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ export const mountThenInsert = (mount, arg, insert, target) => {
19
+ mut_state.depth += 1;
20
+ mut_state.lastId += 1;
21
+ const { depth } = mut_state;
22
+ mut_state.ids[depth] = mut_state.lastId;
23
+
24
+ takeFrame(depth);
25
+ const nodes = runMount(mount, arg, depth);
26
+ const frame = takeFrame(depth);
27
+ insert(target, nodes);
28
+ if (frame !== undefined) {
29
+ runAll(frame);
30
+ }
31
+ return nodes;
32
+ };
33
+
34
+ export const appendTo = (parent, nodes) => {
35
+ parent.append(...nodes);
36
+ };
37
+
38
+ export const insertBefore = (next, nodes) => {
39
+ next.before(...nodes);
40
+ };
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+ export const applyWhenAttached = (anchor, apply) => {
65
+ const { depth } = mut_state;
66
+ const id = mut_state.ids[depth];
67
+ const mut_pending = {
68
+ latest: undefined,
69
+ };
70
+ const mut_running = { current: false };
71
+ const mut_disposed = { current: false };
72
+ if (getCurrentScope() !== undefined) {
73
+ onScopeDispose(() => {
74
+ mut_disposed.current = true;
75
+ });
76
+ }
77
+ const attached = () => !mut_disposed.current && anchor.parentNode !== null;
78
+
79
+ const applyNow = (value) => {
80
+ mut_running.current = true;
81
+ try {
82
+ apply(value);
83
+ for (let mut_pass = 1;; mut_pass += 1) {
84
+ const { latest } = mut_pending;
85
+ mut_pending.latest = undefined;
86
+ if (latest === undefined || !attached()) {
87
+ return;
88
+ }
89
+ if (mut_pass >= maxReapply) {
90
+ throw new Error(reapplyLoopMessage);
91
+ }
92
+ apply(latest.value);
93
+ }
94
+ }
95
+ finally {
96
+ mut_running.current = false;
97
+ }
98
+ };
99
+ const flush = () => {
100
+ const { latest } = mut_pending;
101
+ mut_pending.latest = undefined;
102
+ if (latest !== undefined && attached()) {
103
+ applyNow(latest.value);
104
+ }
105
+ };
106
+ return (value) => {
107
+ if (mut_running.current) {
108
+ mut_pending.latest = { value };
109
+ return;
110
+ }
111
+ if (attached()) {
112
+ mut_pending.latest = undefined;
113
+ applyNow(value);
114
+ return;
115
+ }
116
+ const scheduled = mut_pending.latest !== undefined;
117
+ mut_pending.latest = { value };
118
+ if (scheduled) {
119
+ return;
120
+ }
121
+ if (depth === 0 || mut_state.depth < depth || mut_state.ids[depth] !== id) {
122
+
123
+ flush();
124
+ return;
125
+ }
126
+ const mut_frame = mut_state.frames[depth];
127
+ if (mut_frame === undefined) {
128
+ mut_state.frames[depth] = [flush];
129
+ }
130
+ else {
131
+ mut_frame.push(flush);
132
+ }
133
+ };
134
+ };
135
+
136
+ const maxReapply = 100;
137
+ const reapplyLoopMessage = `synstate-dom: a For or a switch was updated more than ${maxReapply.toString()} times in a row by the rows or branch it was mounting: a row or branch keeps writing the value that chose it. Make the write stop (a condition, or a value that leads to rows or a branch that do not write).`;
138
+ const mut_state = { depth: 0, lastId: 0, ids: [0], frames: [] };
139
+
140
+ const takeFrame = (depth) => {
141
+ const frame = mut_state.frames[depth];
142
+ mut_state.frames[depth] = undefined;
143
+ return frame;
144
+ };
145
+
146
+
147
+
148
+
149
+
150
+ const runAll = (frame) => {
151
+ for (const [index, apply] of frame.entries()) {
152
+ try {
153
+ apply();
154
+ }
155
+ catch (error) {
156
+ runAll(frame.slice(index + 1));
157
+ throw error;
158
+ }
159
+ }
160
+ };
161
+
162
+ const runMount = (mount, arg, depth) => {
163
+ try {
164
+ return mount(arg);
165
+ }
166
+ finally {
167
+ mut_state.depth = depth - 1;
168
+ }
169
+ };
170
+ //# sourceMappingURL=after-attach.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"after-attach.mjs","sourceRoot":"","sources":["../../src/internal/after-attach.mts"],"names":[],"mappings":"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"}
@@ -28,11 +28,22 @@ export const bindValue = (bindable, write) => {
28
28
  write(bindable);
29
29
  };
30
30
 
31
+
32
+
33
+
34
+
35
+
36
+
37
+
31
38
  const bindObservable = (source, write) => {
32
39
  if (source.isCompleted) {
33
40
  write(source.getSnapshot().value);
34
41
  return;
35
42
  }
43
+ const { updateToken } = source;
36
44
  subscribeInScope(source, write);
45
+ if (source.updateToken !== updateToken) {
46
+ write(source.getSnapshot().value);
47
+ }
37
48
  };
38
49
  //# sourceMappingURL=bind-value.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bind-value.mjs","sourceRoot":"","sources":["../../src/internal/bind-value.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAqB,EACrB,KAAyB,EACnB,EAAE;IACR,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YAC3B,cAAc,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO;IACT,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO;IACT,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,oEAAoE;AACpE,MAAM,cAAc,GAAG,CACrB,MAAgC,EAChC,KAAyB,EACnB,EAAE;IACR,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;QAElC,OAAO;IACT,CAAC;IAED,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC"}
1
+ {"version":3,"file":"bind-value.mjs","sourceRoot":"","sources":["../../src/internal/bind-value.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA8B,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAqB,EACrB,KAAyB,EACnB,EAAE;IACR,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YAC3B,cAAc,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO;IACT,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEhC,OAAO;IACT,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,CACrB,MAAgC,EAChC,KAAyB,EACnB,EAAE;IACR,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;QAElC,OAAO;IACT,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAE/B,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './after-attach.mjs';
1
2
  export * from './as-constant.mjs';
2
3
  export * from './bind-value.mjs';
3
4
  export * from './dom-tables.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/internal/index.mts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/internal/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from './after-attach.mjs';
1
2
  export * from './as-constant.mjs';
2
3
  export * from './bind-value.mjs';
3
4
  export * from './dom-tables.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/internal/index.mts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/internal/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}