@buoy-gg/jotai 7.0.17 → 7.0.19

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 (27) hide show
  1. package/lib/commonjs/jotai/components/JotaiAtomBrowser.js +11 -3
  2. package/lib/commonjs/jotai/components/JotaiAtomDetailContent.js +4 -3
  3. package/lib/commonjs/jotai/components/JotaiModal.js +35 -4
  4. package/lib/commonjs/jotai/sync/jotaiSyncAdapter.js +117 -5
  5. package/lib/commonjs/jotai/utils/jotaiStateStore.js +73 -7
  6. package/lib/commonjs/jotai/utils/snapshotProvider.js +111 -2
  7. package/lib/module/jotai/components/JotaiAtomBrowser.js +11 -3
  8. package/lib/module/jotai/components/JotaiAtomDetailContent.js +4 -2
  9. package/lib/module/jotai/components/JotaiModal.js +36 -5
  10. package/lib/module/jotai/sync/jotaiSyncAdapter.js +117 -4
  11. package/lib/module/jotai/utils/jotaiStateStore.js +73 -7
  12. package/lib/module/jotai/utils/snapshotProvider.js +111 -2
  13. package/lib/typescript/index.d.ts +1 -1
  14. package/lib/typescript/index.d.ts.map +1 -1
  15. package/lib/typescript/jotai/components/JotaiAtomBrowser.d.ts +3 -1
  16. package/lib/typescript/jotai/components/JotaiAtomBrowser.d.ts.map +1 -1
  17. package/lib/typescript/jotai/components/JotaiAtomDetailContent.d.ts +7 -2
  18. package/lib/typescript/jotai/components/JotaiAtomDetailContent.d.ts.map +1 -1
  19. package/lib/typescript/jotai/components/JotaiModal.d.ts +1 -1
  20. package/lib/typescript/jotai/components/JotaiModal.d.ts.map +1 -1
  21. package/lib/typescript/jotai/sync/jotaiSyncAdapter.d.ts +56 -4
  22. package/lib/typescript/jotai/sync/jotaiSyncAdapter.d.ts.map +1 -1
  23. package/lib/typescript/jotai/types/index.d.ts +28 -0
  24. package/lib/typescript/jotai/types/index.d.ts.map +1 -1
  25. package/lib/typescript/jotai/utils/jotaiStateStore.d.ts +10 -0
  26. package/lib/typescript/jotai/utils/jotaiStateStore.d.ts.map +1 -1
  27. package/package.json +9 -4
@@ -1,6 +1,39 @@
1
1
  "use strict";
2
2
 
3
3
  import { jotaiStateStore } from "../utils/jotaiStateStore";
4
+ import { isOverWireBudget } from "@buoy-gg/shared-ui";
5
+
6
+ /**
7
+ * Sentinel used in WIRE-FORM snapshots in place of raw prevValue/nextValue.
8
+ * Same hazard as redux/zustand: up to 200 changes × 2 values on every
9
+ * snapshot. Dashboards fetch values via `getChangeDetail`.
10
+ */
11
+ export const VALUE_ON_DEVICE = Object.freeze({
12
+ __buoyValueOnDevice: true,
13
+ note: "Atom values stay on the device — fetched on demand via getChangeDetail / getAtomValue."
14
+ });
15
+ const MAX_CHANGE_DETAIL_BYTES = 8 * 1024 * 1024;
16
+ const MAX_WIRE_PAYLOAD_BYTES = 16 * 1024;
17
+ /**
18
+ * Per-change wire cache — the store prepends and never mutates a recorded
19
+ * change, so identity is a correct, self-invalidating key.
20
+ */
21
+ const changeCache = new WeakMap();
22
+ function toWireChange(change) {
23
+ const cached = changeCache.get(change);
24
+ if (cached) return cached;
25
+ const wire = {
26
+ ...change,
27
+ prevValue: VALUE_ON_DEVICE,
28
+ nextValue: VALUE_ON_DEVICE
29
+ };
30
+ changeCache.set(change, wire);
31
+ return wire;
32
+ }
33
+ function toWireValue(value) {
34
+ return isOverWireBudget(value, MAX_WIRE_PAYLOAD_BYTES) ? VALUE_ON_DEVICE : value;
35
+ }
36
+
4
37
  /**
5
38
  * Sync adapter for the jotai tool, consumed by @buoy-gg/external-sync's
6
39
  * `useExternalSync` (structurally matches its ToolSyncAdapter interface so
@@ -11,12 +44,19 @@ import { jotaiStateStore } from "../utils/jotaiStateStore";
11
44
  * already records. The snapshot carries both the change timeline and the
12
45
  * atom registry (with each atom's current value) so the dashboard can render
13
46
  * the atom browser.
47
+ *
48
+ * v2: change-log prevValue/nextValue are replaced with on-device markers.
49
+ * Dashboards fetch values via `getChangeDetail`. Oversized / unserializable
50
+ * `atoms[].currentValue` uses the same marker and is fetched via `getAtomValue`.
14
51
  */
15
52
  export const jotaiSyncAdapter = {
16
- version: 1,
53
+ version: 2,
17
54
  getSnapshot: () => ({
18
- changes: jotaiStateStore.getAtomChanges(),
19
- atoms: jotaiStateStore.getAtomSnapshots()
55
+ changes: jotaiStateStore.getAtomChanges().map(toWireChange),
56
+ atoms: jotaiStateStore.getAtomSnapshots().map(atom => ({
57
+ ...atom,
58
+ currentValue: toWireValue(atom.currentValue)
59
+ }))
20
60
  }),
21
61
  subscribe: onChange => {
22
62
  const unsubscribeChanges = jotaiStateStore.subscribe(onChange);
@@ -30,6 +70,78 @@ export const jotaiSyncAdapter = {
30
70
  clearEvents: () => {
31
71
  jotaiStateStore.clearAtomChanges();
32
72
  },
73
+ /**
74
+ * On-demand detail: one change's real prevValue/nextValue.
75
+ * The per-snapshot stream stays value-free; this is the explicit,
76
+ * size-guarded channel for the detail pane.
77
+ */
78
+ getChangeDetail: params => {
79
+ const {
80
+ id
81
+ } = params ?? {};
82
+ if (!id) return {
83
+ found: false,
84
+ reason: "missing id"
85
+ };
86
+ const change = jotaiStateStore.getAtomChangeById(id);
87
+ if (!change) return {
88
+ found: false,
89
+ reason: "unknown id"
90
+ };
91
+ const cappedNote = {
92
+ __buoyTruncated: true,
93
+ note: `Exceeds the ${MAX_CHANGE_DETAIL_BYTES / (1024 * 1024)}MB detail limit — inspect it on-device.`
94
+ };
95
+ const cap = value => isOverWireBudget(value, MAX_CHANGE_DETAIL_BYTES) ? cappedNote : value;
96
+ return {
97
+ found: true,
98
+ id,
99
+ prevValue: cap(change.prevValue),
100
+ nextValue: cap(change.nextValue)
101
+ };
102
+ },
103
+ /**
104
+ * On-demand current value for one atom. Wire-form snapshots replace
105
+ * oversized / unserializable `currentValue` with VALUE_ON_DEVICE.
106
+ */
107
+ getAtomValue: params => {
108
+ const {
109
+ label
110
+ } = params ?? {};
111
+ if (!label) return {
112
+ found: false,
113
+ reason: "missing label"
114
+ };
115
+ const atom = jotaiStateStore.getAtom(label);
116
+ if (!atom) return {
117
+ found: false,
118
+ reason: "unknown label"
119
+ };
120
+ let currentValue;
121
+ try {
122
+ currentValue = atom.getValue();
123
+ } catch {
124
+ currentValue = undefined;
125
+ }
126
+ const cappedNote = {
127
+ __buoyTruncated: true,
128
+ note: `Exceeds the ${MAX_CHANGE_DETAIL_BYTES / (1024 * 1024)}MB detail limit — inspect it on-device.`
129
+ };
130
+ try {
131
+ JSON.stringify(currentValue);
132
+ } catch {
133
+ return {
134
+ found: true,
135
+ label,
136
+ currentValue: VALUE_ON_DEVICE
137
+ };
138
+ }
139
+ return {
140
+ found: true,
141
+ label,
142
+ currentValue: isOverWireBudget(currentValue, MAX_CHANGE_DETAIL_BYTES) ? cappedNote : currentValue
143
+ };
144
+ },
33
145
  /**
34
146
  * Compact current-value reader for a remote driver (MCP/LLM): registered
35
147
  * atoms with light metadata; each atom's `currentValue` stays on the device
@@ -73,7 +185,8 @@ export const jotaiSyncAdapter = {
73
185
  const {
74
186
  label,
75
187
  value
76
- } = params;
188
+ } = params ?? {};
189
+ if (!label) throw new Error("setAtom requires a `label`");
77
190
  jotaiStateStore.setAtomValue(label, value);
78
191
  }
79
192
  }
@@ -286,17 +286,83 @@ class JotaiStateStore {
286
286
  */
287
287
  replaceFromSnapshot(changes, atomSnapshots) {
288
288
  if (!this.isEnabled) return;
289
- this.atomChanges = changes.slice(0, this.maxChanges);
290
- this.atoms = new Map(atomSnapshots.map(snapshot => [snapshot.label, {
291
- label: snapshot.label,
292
- changeCount: snapshot.changeCount,
293
- color: snapshot.color,
294
- getValue: () => snapshot.currentValue
295
- }]));
289
+
290
+ // Preserve values a remote mirror already hydrated — wire-form snapshots
291
+ // always carry markers, and a later snapshot must not blank the detail pane.
292
+ const hydrated = new Map();
293
+ for (const existing of this.atomChanges) {
294
+ const prev = existing.prevValue;
295
+ if (!prev || prev.__buoyValueOnDevice !== true) {
296
+ hydrated.set(existing.id, existing);
297
+ }
298
+ }
299
+ this.atomChanges = changes.slice(0, this.maxChanges).map(change => {
300
+ const kept = hydrated.get(change.id);
301
+ const incoming = change.prevValue;
302
+ return kept && incoming?.__buoyValueOnDevice === true ? {
303
+ ...change,
304
+ prevValue: kept.prevValue,
305
+ nextValue: kept.nextValue
306
+ } : change;
307
+ });
308
+
309
+ // Preserve currentValue a remote mirror already hydrated — oversized
310
+ // atoms arrive as VALUE_ON_DEVICE markers on every snapshot.
311
+ const hydratedAtoms = new Map();
312
+ for (const [label, atom] of this.atoms) {
313
+ try {
314
+ const value = atom.getValue();
315
+ const marker = value;
316
+ if (!marker || marker.__buoyValueOnDevice !== true) {
317
+ hydratedAtoms.set(label, value);
318
+ }
319
+ } catch {
320
+ // ignore
321
+ }
322
+ }
323
+ this.atoms = new Map(atomSnapshots.map(snapshot => {
324
+ const incoming = snapshot.currentValue;
325
+ const kept = hydratedAtoms.get(snapshot.label);
326
+ const currentValue = kept !== undefined && incoming?.__buoyValueOnDevice === true ? kept : snapshot.currentValue;
327
+ return [snapshot.label, {
328
+ label: snapshot.label,
329
+ changeCount: snapshot.changeCount,
330
+ color: snapshot.color,
331
+ getValue: () => currentValue
332
+ }];
333
+ }));
296
334
  this.notifyListeners();
297
335
  this.notifyAtomListeners();
298
336
  }
299
337
 
338
+ /**
339
+ * Hydrate one mirrored change with real values fetched on demand from the
340
+ * device via the adapter's `getChangeDetail`. Remote-mirror (desktop) only.
341
+ */
342
+ hydrateChange(id, patch) {
343
+ const index = this.atomChanges.findIndex(c => c.id === id);
344
+ if (index === -1) return;
345
+ this.atomChanges = [...this.atomChanges.slice(0, index), {
346
+ ...this.atomChanges[index],
347
+ ...patch
348
+ }, ...this.atomChanges.slice(index + 1)];
349
+ this.notifyListeners();
350
+ }
351
+
352
+ /**
353
+ * Hydrate one mirrored atom's currentValue fetched on demand from the
354
+ * device via the adapter's `getAtomValue`. Remote-mirror (desktop) only.
355
+ */
356
+ hydrateAtomValue(label, currentValue) {
357
+ const atom = this.atoms.get(label);
358
+ if (!atom) return;
359
+ this.atoms.set(label, {
360
+ ...atom,
361
+ getValue: () => currentValue
362
+ });
363
+ this.notifyAtomListeners();
364
+ }
365
+
300
366
  // ---- Atom Registry ----
301
367
 
302
368
  registerAtom(label, getValue, setValue) {
@@ -14,6 +14,7 @@
14
14
  * nothing in the registry distinguishes them from plain atoms.
15
15
  */
16
16
  import { registerStateSnapshotProvider } from "@buoy-gg/shared-ui";
17
+ import { boundedDeepEqual } from "@buoy-gg/shared-ui/dataViewer";
17
18
  import { jotaiStateStore } from "./jotaiStateStore";
18
19
  function status() {
19
20
  const atoms = jotaiStateStore.getAtoms();
@@ -61,8 +62,12 @@ async function capture() {
61
62
  warnings
62
63
  };
63
64
  }
64
- async function restore(data) {
65
+ async function restore(data, options) {
65
66
  const snapshot = data;
67
+ const excludedSet = new Set(options?.excludeKeys ?? []);
68
+ const includedSet = options?.includeKeys ? new Set(options.includeKeys) : null;
69
+ const touch = key => !excludedSet.has(key) && (!includedSet || includedSet.has(key));
70
+ let excludedHits = 0;
66
71
  const result = {
67
72
  ok: true,
68
73
  applied: 0,
@@ -79,6 +84,10 @@ async function restore(data) {
79
84
  }
80
85
  let derived = 0;
81
86
  for (const [label, entry] of Object.entries(snapshot.atoms)) {
87
+ if (!touch(label)) {
88
+ excludedHits += 1;
89
+ continue;
90
+ }
82
91
  if (!entry.writable) {
83
92
  derived += 1;
84
93
  continue;
@@ -112,12 +121,112 @@ async function restore(data) {
112
121
  if (derived > 0) {
113
122
  result.warnings.push(`${derived} derived atom(s) left to recompute`);
114
123
  }
124
+ if (excludedHits > 0) {
125
+ result.warnings.push(`${excludedHits} atom(s) excluded by you`);
126
+ }
115
127
  return result;
116
128
  }
129
+
130
+ /** Per-atom restore preview. `base` omitted = compare against live atoms. */
131
+ async function previewItems(target, base) {
132
+ const targetAtoms = target?.atoms ?? {};
133
+ const liveMode = base === undefined;
134
+ const baseAtoms = {};
135
+ if (liveMode) {
136
+ for (const info of jotaiStateStore.getAtoms()) {
137
+ try {
138
+ baseAtoms[info.label] = {
139
+ value: info.getValue(),
140
+ writable: Boolean(info.setValue)
141
+ };
142
+ } catch {
143
+ // unreadable atom — treated as absent
144
+ }
145
+ }
146
+ } else {
147
+ Object.assign(baseAtoms, base?.atoms ?? {});
148
+ }
149
+ const items = [];
150
+ const notes = [];
151
+ const labels = new Set([...Object.keys(baseAtoms), ...Object.keys(targetAtoms)]);
152
+ for (const label of labels) {
153
+ const inTarget = label in targetAtoms;
154
+ if (!inTarget) {
155
+ if (liveMode) notes.push(`atom "${label}" not in snapshot — untouched`);else items.push({
156
+ key: label,
157
+ label,
158
+ verdict: "removed",
159
+ oldValue: baseAtoms[label]?.value
160
+ });
161
+ continue;
162
+ }
163
+ const entry = targetAtoms[label];
164
+ const equal = label in baseAtoms && boundedDeepEqual(baseAtoms[label].value, entry.value);
165
+ if (!entry.writable) {
166
+ items.push({
167
+ key: label,
168
+ label,
169
+ verdict: equal ? "unchanged" : "recomputes",
170
+ reason: equal ? undefined : "derived atom — recomputes from its sources",
171
+ oldValue: baseAtoms[label]?.value,
172
+ newValue: entry.value
173
+ });
174
+ continue;
175
+ }
176
+ if (liveMode) {
177
+ const info = jotaiStateStore.getAtom(label);
178
+ if (!info) {
179
+ items.push({
180
+ key: label,
181
+ label,
182
+ verdict: "wont-apply",
183
+ reason: "atom not registered (renamed, or unwatched since snapshot?)"
184
+ });
185
+ continue;
186
+ }
187
+ if (!info.setValue) {
188
+ items.push({
189
+ key: label,
190
+ label,
191
+ verdict: "wont-apply",
192
+ reason: "atom is now read-only (derived)"
193
+ });
194
+ continue;
195
+ }
196
+ }
197
+ if (!(label in baseAtoms)) {
198
+ items.push({
199
+ key: label,
200
+ label,
201
+ verdict: "added",
202
+ newValue: entry.value
203
+ });
204
+ } else if (equal) {
205
+ items.push({
206
+ key: label,
207
+ label,
208
+ verdict: "unchanged"
209
+ });
210
+ } else {
211
+ items.push({
212
+ key: label,
213
+ label,
214
+ verdict: "changed",
215
+ oldValue: baseAtoms[label].value,
216
+ newValue: entry.value
217
+ });
218
+ }
219
+ }
220
+ return {
221
+ items,
222
+ notes
223
+ };
224
+ }
117
225
  registerStateSnapshotProvider({
118
226
  id: "jotai",
119
227
  label: "Jotai",
120
228
  status,
121
229
  capture,
122
- restore
230
+ restore,
231
+ previewItems
123
232
  });
@@ -42,7 +42,7 @@ export { JotaiAtomChangeItem } from "./jotai/components/JotaiAtomChangeItem";
42
42
  export { JotaiAtomDetailContent, JotaiAtomDetailFooter, } from "./jotai/components/JotaiAtomDetailContent";
43
43
  export { JotaiIcon, JOTAI_ICON_COLOR } from "./jotai/components/JotaiIcon";
44
44
  export { jotaiSyncAdapter } from "./jotai/sync/jotaiSyncAdapter";
45
- export type { JotaiModalProps, JotaiAtomChange, JotaiAtomInfo, JotaiAtomSnapshot, JotaiFilter, AtomChangeCategory, WatchAtomsOptions, } from "./jotai/types";
45
+ export type { JotaiModalProps, JotaiDetailViewMode, JotaiAtomChange, JotaiAtomInfo, JotaiAtomSnapshot, JotaiFilter, AtomChangeCategory, WatchAtomsOptions, } from "./jotai/types";
46
46
  /** @internal */
47
47
  export { jotaiStateStore } from "./jotai/utils/jotaiStateStore";
48
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,gCAAgC,CAAC;AAKxC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAOnF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAK3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,YAAY,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAKvB,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,gCAAgC,CAAC;AAKxC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAOnF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAK3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAKvB,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
@@ -9,7 +9,9 @@ interface JotaiAtomBrowserProps {
9
9
  atoms: JotaiAtomInfo[];
10
10
  searchQuery: string;
11
11
  onViewHistory: (atomLabel: string) => void;
12
+ /** Fired when an atom row is expanded (not when collapsed). */
13
+ onAtomExpand?: (label: string) => void;
12
14
  }
13
- export declare function JotaiAtomBrowser({ atoms, searchQuery, onViewHistory, }: JotaiAtomBrowserProps): import("react").JSX.Element;
15
+ export declare function JotaiAtomBrowser({ atoms, searchQuery, onViewHistory, onAtomExpand, }: JotaiAtomBrowserProps): import("react").JSX.Element;
14
16
  export {};
15
17
  //# sourceMappingURL=JotaiAtomBrowser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JotaiAtomBrowser.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiAtomBrowser.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAyGD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,qBAAqB,+BAiFvB"}
1
+ {"version":3,"file":"JotaiAtomBrowser.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiAtomBrowser.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAgHD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,aAAa,EACb,YAAY,GACb,EAAE,qBAAqB,+BAwFvB"}
@@ -9,15 +9,20 @@
9
9
  * Mirrors ZustandStateDetailContent.tsx from @buoy-gg/zustand
10
10
  */
11
11
  import React from "react";
12
- import type { JotaiAtomChange } from "../types";
12
+ import type { JotaiAtomChange, JotaiDetailViewMode } from "../types";
13
13
  interface JotaiAtomDetailContentProps {
14
14
  change: JotaiAtomChange;
15
15
  changes: JotaiAtomChange[];
16
16
  selectedIndex: number;
17
17
  onIndexChange: (index: number) => void;
18
18
  disableInternalFooter?: boolean;
19
+ /**
20
+ * Seeds the CHANGE / VALUE / DIFF toggle once on mount. Host deep-links
21
+ * (docs live tour) pass this; the user's own toggle taps take over after.
22
+ */
23
+ initialView?: JotaiDetailViewMode;
19
24
  }
20
- export declare function JotaiAtomDetailContent({ change, changes, selectedIndex, onIndexChange, disableInternalFooter, }: JotaiAtomDetailContentProps): React.JSX.Element;
25
+ export declare function JotaiAtomDetailContent({ change, changes, selectedIndex, onIndexChange, disableInternalFooter, initialView, }: JotaiAtomDetailContentProps): React.JSX.Element;
21
26
  export declare function JotaiAtomDetailFooter({ change, changes, selectedIndex, onIndexChange, }: {
22
27
  change: JotaiAtomChange;
23
28
  changes: JotaiAtomChange[];
@@ -1 +1 @@
1
- {"version":3,"file":"JotaiAtomDetailContent.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiAtomDetailContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAA+C,MAAM,OAAO,CAAC;AA0BpE,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,UAAU,CAAC;AAmQpE,UAAU,2BAA2B;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,qBAA6B,GAC9B,EAAE,2BAA2B,qBAyJ7B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,GACd,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,4BAcA"}
1
+ {"version":3,"file":"JotaiAtomDetailContent.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiAtomDetailContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAA+C,MAAM,OAAO,CAAC;AA0BpE,OAAO,KAAK,EACV,eAAe,EAEf,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAiQlB,UAAU,2BAA2B;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,qBAA6B,EAC7B,WAAsB,GACvB,EAAE,2BAA2B,qBA2J7B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,GACd,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,4BAcA"}
@@ -6,7 +6,7 @@
6
6
  * - Events tab: Live atom change monitoring with diffs
7
7
  */
8
8
  import type { JotaiModalProps } from "../types";
9
- export declare function JotaiModal({ visible, onClose, onBack, onMinimize, enableSharedModalDimensions, inline, }: JotaiModalProps): import("react").JSX.Element | null;
9
+ export declare function JotaiModal({ visible, onClose, onBack, onMinimize, enableSharedModalDimensions, inline, initialTab, initialSelectedChangeId, initialDetailView, onChangeSelect, onAtomExpand, }: JotaiModalProps): import("react").JSX.Element | null;
10
10
  /**
11
11
  * The same Jotai tool as `JotaiModal`, rendered INLINE for hosts that
12
12
  * place tools in a panel rather than a modal. Exists so there is exactly one
@@ -1 +1 @@
1
- {"version":3,"file":"JotaiModal.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiModal.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwCH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,UAAU,CAAC;AAoBjE,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,GACf,EAAE,eAAe,sCA6gBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAGpE"}
1
+ {"version":3,"file":"JotaiModal.d.ts","sourceRoot":"","sources":["../../../../src/jotai/components/JotaiModal.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwCH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,UAAU,CAAC;AAoBjE,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,EACd,UAAU,EACV,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,YAAY,GACb,EAAE,eAAe,sCAuiBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAGpE"}
@@ -1,3 +1,13 @@
1
+ import type { JotaiAtomChange } from "../types";
2
+ /**
3
+ * Sentinel used in WIRE-FORM snapshots in place of raw prevValue/nextValue.
4
+ * Same hazard as redux/zustand: up to 200 changes × 2 values on every
5
+ * snapshot. Dashboards fetch values via `getChangeDetail`.
6
+ */
7
+ export declare const VALUE_ON_DEVICE: Readonly<{
8
+ __buoyValueOnDevice: true;
9
+ note: "Atom values stay on the device — fetched on demand via getChangeDetail / getAtomValue.";
10
+ }>;
1
11
  /**
2
12
  * Sync adapter for the jotai tool, consumed by @buoy-gg/external-sync's
3
13
  * `useExternalSync` (structurally matches its ToolSyncAdapter interface so
@@ -8,23 +18,65 @@
8
18
  * already records. The snapshot carries both the change timeline and the
9
19
  * atom registry (with each atom's current value) so the dashboard can render
10
20
  * the atom browser.
21
+ *
22
+ * v2: change-log prevValue/nextValue are replaced with on-device markers.
23
+ * Dashboards fetch values via `getChangeDetail`. Oversized / unserializable
24
+ * `atoms[].currentValue` uses the same marker and is fetched via `getAtomValue`.
11
25
  */
12
26
  export declare const jotaiSyncAdapter: {
13
27
  version: number;
14
28
  getSnapshot: () => {
15
- changes: import("../types").JotaiAtomChange[];
16
- atoms: import("../types").JotaiAtomSnapshot[];
29
+ changes: JotaiAtomChange[];
30
+ atoms: {
31
+ currentValue: unknown;
32
+ label: string;
33
+ changeCount: number;
34
+ color: string;
35
+ }[];
17
36
  };
18
37
  subscribe: (onChange: () => void) => () => void;
19
38
  actions: {
20
39
  clearEvents: () => void;
40
+ /**
41
+ * On-demand detail: one change's real prevValue/nextValue.
42
+ * The per-snapshot stream stays value-free; this is the explicit,
43
+ * size-guarded channel for the detail pane.
44
+ */
45
+ getChangeDetail: (params?: unknown) => {
46
+ found: false;
47
+ reason: string;
48
+ id?: undefined;
49
+ prevValue?: undefined;
50
+ nextValue?: undefined;
51
+ } | {
52
+ found: true;
53
+ id: string;
54
+ prevValue: unknown;
55
+ nextValue: unknown;
56
+ reason?: undefined;
57
+ };
58
+ /**
59
+ * On-demand current value for one atom. Wire-form snapshots replace
60
+ * oversized / unserializable `currentValue` with VALUE_ON_DEVICE.
61
+ */
62
+ getAtomValue: (params?: unknown) => {
63
+ found: false;
64
+ reason: string;
65
+ label?: undefined;
66
+ currentValue?: undefined;
67
+ } | {
68
+ found: true;
69
+ label: string;
70
+ currentValue: unknown;
71
+ reason?: undefined;
72
+ };
21
73
  /**
22
74
  * Compact current-value reader for a remote driver (MCP/LLM): registered
23
75
  * atoms with light metadata; each atom's `currentValue` stays on the device
24
76
  * unless `includeValues` is set. `writable` tells the caller which atoms
25
77
  * can be set via `setAtom`.
26
78
  */
27
- listAtoms: (params: unknown) => {
79
+ listAtoms: (params?: unknown) => {
28
80
  atoms: {
29
81
  currentValue?: unknown;
30
82
  label: string;
@@ -36,7 +88,7 @@ export declare const jotaiSyncAdapter: {
36
88
  includedValues: boolean;
37
89
  };
38
90
  /** Write a value to a writable atom (throws for unknown/read-only atoms). */
39
- setAtom: (params: unknown) => void;
91
+ setAtom: (params?: unknown) => void;
40
92
  };
41
93
  };
42
94
  //# sourceMappingURL=jotaiSyncAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jotaiSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/jotai/sync/jotaiSyncAdapter.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;;;;;;0BAML,MAAM,IAAI;;;QAY9B;;;;;WAKG;4BACiB,OAAO;;;;;;;;;;;QA6B3B,6EAA6E;0BAC3D,OAAO;;CAK5B,CAAC"}
1
+ {"version":3,"file":"jotaiSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/jotai/sync/jotaiSyncAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;EAG1B,CAAC;AA0CH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;0BASL,MAAM,IAAI;;;QAY9B;;;;WAIG;mCACwB,OAAO;;;;;;;;;;;;;QAkBlC;;;WAGG;gCACqB,OAAO;;;;;;;;;;;QAgC/B;;;;;WAKG;6BACkB,OAAO;;;;;;;;;;;QA6B5B,6EAA6E;2BAC1D,OAAO;;CAM7B,CAAC"}
@@ -52,6 +52,10 @@ export interface JotaiFilter {
52
52
  atomLabels?: string[];
53
53
  onlyWithChanges?: boolean;
54
54
  }
55
+ /**
56
+ * Detail-pane toggle in `JotaiAtomDetailContent` (CHANGE / VALUE / DIFF).
57
+ */
58
+ export type JotaiDetailViewMode = "change" | "value" | "diff";
55
59
  /**
56
60
  * Modal props for JotaiModal
57
61
  */
@@ -68,6 +72,30 @@ export interface JotaiModalProps {
68
72
  onBack?: () => void;
69
73
  onMinimize?: (modalState: unknown) => void;
70
74
  enableSharedModalDimensions?: boolean;
75
+ /**
76
+ * Seed the Atoms / Events tab on mount. Used by hosts that deep-link into a
77
+ * specific screen (docs live tour). Remount (or omit) to return to default.
78
+ */
79
+ initialTab?: "atoms" | "events";
80
+ /**
81
+ * Deep-link into a change's detail. Applied at most once per id so list
82
+ * re-renders — or the user pressing Back — never re-open it. Null/undefined
83
+ * means "don't touch the selection".
84
+ */
85
+ initialSelectedChangeId?: string | null;
86
+ /** Which detail view that deep-link opens on. See JotaiAtomDetailContent. */
87
+ initialDetailView?: JotaiDetailViewMode;
88
+ /**
89
+ * Fired when the user selects a change (opens its detail view). Remote
90
+ * mirrors (Buoy Desktop) use this to fetch the change's real values
91
+ * on demand — wire-form snapshots carry markers instead of values.
92
+ */
93
+ onChangeSelect?: (change: JotaiAtomChange) => void;
94
+ /**
95
+ * Fired when the user expands an atom in the browser. Remote mirrors use
96
+ * this to fetch oversized `currentValue` via `getAtomValue`.
97
+ */
98
+ onAtomExpand?: (label: string) => void;
71
99
  }
72
100
  /**
73
101
  * Options for watchAtoms
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/jotai/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IAGxB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/jotai/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IAGxB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -49,6 +49,16 @@ declare class JotaiStateStore {
49
49
  * freezes the mirror.
50
50
  */
51
51
  replaceFromSnapshot(changes: JotaiAtomChange[], atomSnapshots: JotaiAtomSnapshot[]): void;
52
+ /**
53
+ * Hydrate one mirrored change with real values fetched on demand from the
54
+ * device via the adapter's `getChangeDetail`. Remote-mirror (desktop) only.
55
+ */
56
+ hydrateChange(id: string, patch: Partial<JotaiAtomChange>): void;
57
+ /**
58
+ * Hydrate one mirrored atom's currentValue fetched on demand from the
59
+ * device via the adapter's `getAtomValue`. Remote-mirror (desktop) only.
60
+ */
61
+ hydrateAtomValue(label: string, currentValue: unknown): void;
52
62
  registerAtom(label: string, getValue: () => unknown, setValue?: (value: unknown) => void): void;
53
63
  /**
54
64
  * Write a value to a registered atom (remote write from the dashboard/MCP).
@@ -1 +1 @@
1
- {"version":3,"file":"jotaiStateStore.d.ts","sourceRoot":"","sources":["../../../../src/jotai/utils/jotaiStateStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAiJlB,cAAM,eAAe;IACnB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,SAAS,CAAwD;IACzE,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,iBAAiB,CAAS;IAIlC,aAAa,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;KAC/B,GAAG,IAAI;IAsCR,cAAc,IAAI,eAAe,EAAE;IAInC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D,gBAAgB,IAAI,IAAI;IAgBxB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IASzC;;;;OAIG;IACH,cAAc,IAAI,IAAI;IAItB,uEAAuE;IACvE,mBAAmB,IAAI,OAAO;IAI9B;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,EAAE;IAiBvC;;;;;OAKG;IACH,mBAAmB,CACjB,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,iBAAiB,EAAE,GACjC,IAAI;IAuBP,YAAY,CACV,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,OAAO,EACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAClC,IAAI;IAeP;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWjD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ,IAAI,aAAa,EAAE;IAI3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAMnC,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE;IA4BzD,QAAQ;;;;;;IAYR,mBAAmB,IAAI,MAAM,EAAE;IAM/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,UAAU,IAAI,OAAO;IAIrB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUhC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAKrE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAKxE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,mBAAmB;CAI5B;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"jotaiStateStore.d.ts","sourceRoot":"","sources":["../../../../src/jotai/utils/jotaiStateStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAiJlB,cAAM,eAAe;IACnB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,SAAS,CAAwD;IACzE,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,iBAAiB,CAAS;IAIlC,aAAa,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;KAC/B,GAAG,IAAI;IAsCR,cAAc,IAAI,eAAe,EAAE;IAInC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1D,gBAAgB,IAAI,IAAI;IAgBxB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IASzC;;;;OAIG;IACH,cAAc,IAAI,IAAI;IAItB,uEAAuE;IACvE,mBAAmB,IAAI,OAAO;IAI9B;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,EAAE;IAiBvC;;;;;OAKG;IACH,mBAAmB,CACjB,OAAO,EAAE,eAAe,EAAE,EAC1B,aAAa,EAAE,iBAAiB,EAAE,GACjC,IAAI;IAiEP;;;OAGG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAWhE;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAY5D,YAAY,CACV,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,OAAO,EACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAClC,IAAI;IAeP;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWjD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,QAAQ,IAAI,aAAa,EAAE;IAI3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAMnC,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,EAAE;IA4BzD,QAAQ;;;;;;IAYR,mBAAmB,IAAI,MAAM,EAAE;IAM/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,UAAU,IAAI,OAAO;IAIrB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUhC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAKrE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAKxE,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,mBAAmB;CAI5B;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}