@buoy-gg/shared-ui 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 (65) hide show
  1. package/lib/commonjs/dataViewer/ThemedSplitView.js +622 -0
  2. package/lib/commonjs/dataViewer/index.js +32 -0
  3. package/lib/commonjs/dataViewer/objectDiff.js +304 -0
  4. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  5. package/lib/commonjs/index.js +19 -0
  6. package/lib/commonjs/storage/devToolsStorageKeys.js +9 -0
  7. package/lib/commonjs/sync/wireBudget.js +97 -0
  8. package/lib/commonjs/ui/components/HeaderSearchButton.js +6 -1
  9. package/lib/commonjs/utils/persistentStorage.js +6 -3
  10. package/lib/commonjs/utils/stateSnapshotRegistry.js +9 -0
  11. package/lib/module/dataViewer/ThemedSplitView.js +617 -0
  12. package/lib/module/dataViewer/index.js +7 -1
  13. package/lib/module/dataViewer/objectDiff.js +297 -0
  14. package/lib/module/hooks/safe-area-impl.js +1 -1
  15. package/lib/module/index.js +2 -1
  16. package/lib/module/storage/devToolsStorageKeys.js +9 -0
  17. package/lib/module/sync/wireBudget.js +92 -0
  18. package/lib/module/ui/components/HeaderSearchButton.js +6 -1
  19. package/lib/module/utils/persistentStorage.js +6 -3
  20. package/lib/module/utils/stateSnapshotRegistry.js +9 -0
  21. package/lib/typescript/commonjs/dataViewer/ThemedSplitView.d.ts +28 -0
  22. package/lib/typescript/commonjs/dataViewer/ThemedSplitView.d.ts.map +1 -0
  23. package/lib/typescript/commonjs/dataViewer/index.d.ts +2 -0
  24. package/lib/typescript/commonjs/dataViewer/index.d.ts.map +1 -1
  25. package/lib/typescript/commonjs/dataViewer/objectDiff.d.ts +67 -0
  26. package/lib/typescript/commonjs/dataViewer/objectDiff.d.ts.map +1 -0
  27. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  28. package/lib/typescript/commonjs/index.d.ts +3 -2
  29. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +9 -0
  31. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/sync/wireBudget.d.ts +50 -0
  33. package/lib/typescript/commonjs/sync/wireBudget.d.ts.map +1 -0
  34. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts +3 -1
  35. package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/utils/index.d.ts +1 -1
  37. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/utils/persistentStorage.d.ts.map +1 -1
  39. package/lib/typescript/commonjs/utils/stateSnapshotRegistry.d.ts +45 -1
  40. package/lib/typescript/commonjs/utils/stateSnapshotRegistry.d.ts.map +1 -1
  41. package/lib/typescript/module/dataViewer/ThemedSplitView.d.ts +28 -0
  42. package/lib/typescript/module/dataViewer/ThemedSplitView.d.ts.map +1 -0
  43. package/lib/typescript/module/dataViewer/index.d.ts +2 -0
  44. package/lib/typescript/module/dataViewer/index.d.ts.map +1 -1
  45. package/lib/typescript/module/dataViewer/objectDiff.d.ts +67 -0
  46. package/lib/typescript/module/dataViewer/objectDiff.d.ts.map +1 -0
  47. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  48. package/lib/typescript/module/index.d.ts +3 -2
  49. package/lib/typescript/module/index.d.ts.map +1 -1
  50. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +9 -0
  51. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  52. package/lib/typescript/module/sync/wireBudget.d.ts +50 -0
  53. package/lib/typescript/module/sync/wireBudget.d.ts.map +1 -0
  54. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts +3 -1
  55. package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts.map +1 -1
  56. package/lib/typescript/module/utils/index.d.ts +1 -1
  57. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  58. package/lib/typescript/module/utils/persistentStorage.d.ts.map +1 -1
  59. package/lib/typescript/module/utils/stateSnapshotRegistry.d.ts +45 -1
  60. package/lib/typescript/module/utils/stateSnapshotRegistry.d.ts.map +1 -1
  61. package/package.json +10 -5
  62. package/lib/typescript/commonjs/dataViewer/__tests__/jsonOps.test.d.ts +0 -19
  63. package/lib/typescript/commonjs/dataViewer/__tests__/jsonOps.test.d.ts.map +0 -1
  64. package/lib/typescript/module/dataViewer/__tests__/jsonOps.test.d.ts +0 -19
  65. package/lib/typescript/module/dataViewer/__tests__/jsonOps.test.d.ts.map +0 -1
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * objectDiff — the bounded, cycle-safe diff KERNEL the dataViewer never had.
5
+ *
6
+ * Every diff consumer so far either hand-rolled a private summary helper or
7
+ * fed whole values into the render-layer viewers (which compute eagerly, have
8
+ * no cycle guards, and mis-compare rich types — TreeDiffViewer treats two
9
+ * different Dates/Maps/Sets as EQUAL because they have zero own keys).
10
+ *
11
+ * This kernel is for VERDICTS and BADGES, not rendering:
12
+ * - correct equality for Date / RegExp / Map / Set / BigInt / NaN /
13
+ * TypedArray / URL / Error, and `undefined`-value vs absent-key
14
+ * - WeakSet cycle guard (a revisited pair reports unequal-safe truncation,
15
+ * never a stack overflow)
16
+ * - hard depth + node budgets with an explicit `truncated` flag; when the
17
+ * budget runs out a subtree is reported as CHANGED (a false "changed" is
18
+ * recoverable — a false "unchanged" hides a real difference, the worst
19
+ * failure mode for a restore preview)
20
+ *
21
+ * `toDiffable` is the companion RENDER normalizer: it converts rich types to
22
+ * plain-JSON stand-ins so the existing viewers (which only handle plain JSON
23
+ * faithfully) never see a Date/Map/Set/BigInt/cycle at all.
24
+ */
25
+
26
+ function isPlainObjectLike(v) {
27
+ if (typeof v !== "object" || v === null) return false;
28
+ const proto = Object.getPrototypeOf(v);
29
+ return proto === Object.prototype || proto === null;
30
+ }
31
+ function isTypedArray(v) {
32
+ return ArrayBuffer.isView(v) && !(v instanceof DataView);
33
+ }
34
+
35
+ /**
36
+ * Bounded deep equality. Returns false on budget exhaustion (conservative:
37
+ * report changed rather than hide a change) and marks the budget truncated.
38
+ */
39
+ export function boundedDeepEqual(a, b, options) {
40
+ const budget = {
41
+ nodes: options?.maxNodes ?? 2000,
42
+ truncated: false
43
+ };
44
+ return deepEqual(a, b, options?.maxDepth ?? 8, budget, new WeakSet());
45
+ }
46
+ function deepEqual(a, b, depth, budget, seen) {
47
+ if (budget.nodes-- <= 0) {
48
+ budget.truncated = true;
49
+ return false;
50
+ }
51
+ // NaN-equal, -0-distinct — Object.is has the right scalar semantics.
52
+ if (Object.is(a, b)) return true;
53
+ if (typeof a !== typeof b) return false;
54
+ if (typeof a !== "object" || a === null || b === null) {
55
+ // Distinct functions: treated as EQUAL — providers strip/preserve them
56
+ // and reference inequality across a serialization boundary is pure noise.
57
+ return typeof a === "function" && typeof b === "function";
58
+ }
59
+
60
+ // Rich types the render-layer viewers get wrong:
61
+ if (a instanceof Date || b instanceof Date) {
62
+ return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();
63
+ }
64
+ if (a instanceof RegExp || b instanceof RegExp) {
65
+ return a instanceof RegExp && b instanceof RegExp && a.source === b.source && a.flags === b.flags;
66
+ }
67
+ if (a instanceof Error || b instanceof Error) {
68
+ return a instanceof Error && b instanceof Error && a.name === b.name && a.message === b.message;
69
+ }
70
+ if (typeof URL !== "undefined" && (a instanceof URL || b instanceof URL)) {
71
+ return a instanceof URL && b instanceof URL && a.href === b.href;
72
+ }
73
+ if (isTypedArray(a) || isTypedArray(b)) {
74
+ if (!isTypedArray(a) || !isTypedArray(b)) return false;
75
+ if (a.constructor !== b.constructor || a.byteLength !== b.byteLength) {
76
+ return false;
77
+ }
78
+ const ua = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
79
+ const ub = new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
80
+ for (let i = 0; i < ua.length; i++) if (ua[i] !== ub[i]) return false;
81
+ return true;
82
+ }
83
+ if (depth <= 0) {
84
+ budget.truncated = true;
85
+ return false;
86
+ }
87
+ // Cycle guard: a revisited left-side object ends the walk for this branch.
88
+ // Reporting unequal here is the conservative direction.
89
+ if (seen.has(a)) {
90
+ budget.truncated = true;
91
+ return false;
92
+ }
93
+ seen.add(a);
94
+ if (a instanceof Map || b instanceof Map) {
95
+ if (!(a instanceof Map) || !(b instanceof Map) || a.size !== b.size) {
96
+ return false;
97
+ }
98
+ // Insertion-order comparison — superjson round-trips preserve it, and
99
+ // order-insensitive matching with object keys is quadratic.
100
+ const ea = Array.from(a.entries());
101
+ const eb = Array.from(b.entries());
102
+ for (let i = 0; i < ea.length; i++) {
103
+ if (!deepEqual(ea[i][0], eb[i][0], depth - 1, budget, seen)) return false;
104
+ if (!deepEqual(ea[i][1], eb[i][1], depth - 1, budget, seen)) return false;
105
+ }
106
+ return true;
107
+ }
108
+ if (a instanceof Set || b instanceof Set) {
109
+ if (!(a instanceof Set) || !(b instanceof Set) || a.size !== b.size) {
110
+ return false;
111
+ }
112
+ const va = Array.from(a.values());
113
+ const vb = Array.from(b.values());
114
+ for (let i = 0; i < va.length; i++) {
115
+ if (!deepEqual(va[i], vb[i], depth - 1, budget, seen)) return false;
116
+ }
117
+ return true;
118
+ }
119
+ if (Array.isArray(a) || Array.isArray(b)) {
120
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
121
+ return false;
122
+ }
123
+ for (let i = 0; i < a.length; i++) {
124
+ if (!deepEqual(a[i], b[i], depth - 1, budget, seen)) return false;
125
+ }
126
+ return true;
127
+ }
128
+ const ka = Object.keys(a);
129
+ const kb = Object.keys(b);
130
+ if (ka.length !== kb.length) return false;
131
+ for (const k of ka) {
132
+ if (!Object.prototype.hasOwnProperty.call(b, k)) return false;
133
+ if (!deepEqual(a[k], b[k], depth - 1, budget, seen)) {
134
+ return false;
135
+ }
136
+ }
137
+ return true;
138
+ }
139
+
140
+ /**
141
+ * Top-level key diff of two values with bounded deep equality per key.
142
+ * Non-object inputs degrade to a single implicit "value" comparison.
143
+ */
144
+ export function objectDiff(oldValue, newValue, options) {
145
+ const maxDepth = options?.maxDepth ?? 8;
146
+ const budget = {
147
+ nodes: options?.maxNodes ?? 2000,
148
+ truncated: false
149
+ };
150
+ const oldIsObj = isPlainObjectLike(oldValue);
151
+ const newIsObj = isPlainObjectLike(newValue);
152
+ if (!oldIsObj || !newIsObj) {
153
+ const equal = deepEqual(oldValue, newValue, maxDepth, budget, new WeakSet());
154
+ return {
155
+ equal,
156
+ addedKeys: [],
157
+ removedKeys: [],
158
+ changedKeys: equal ? [] : ["value"],
159
+ truncated: budget.truncated
160
+ };
161
+ }
162
+ const addedKeys = [];
163
+ const removedKeys = [];
164
+ const changedKeys = [];
165
+ const oldObj = oldValue;
166
+ const newObj = newValue;
167
+ for (const k of Object.keys(oldObj)) {
168
+ if (!Object.prototype.hasOwnProperty.call(newObj, k)) {
169
+ removedKeys.push(k);
170
+ } else if (!deepEqual(oldObj[k], newObj[k], maxDepth - 1, budget, new WeakSet())) {
171
+ changedKeys.push(k);
172
+ }
173
+ }
174
+ for (const k of Object.keys(newObj)) {
175
+ if (!Object.prototype.hasOwnProperty.call(oldObj, k)) addedKeys.push(k);
176
+ }
177
+ return {
178
+ equal: addedKeys.length === 0 && removedKeys.length === 0 && changedKeys.length === 0,
179
+ addedKeys,
180
+ removedKeys,
181
+ changedKeys,
182
+ truncated: budget.truncated
183
+ };
184
+ }
185
+
186
+ // ============================================================================
187
+ // toDiffable — render normalizer
188
+ // ============================================================================
189
+
190
+ const TO_DIFFABLE_MAX_DEPTH = 12;
191
+
192
+ /**
193
+ * Convert a value tree into plain JSON the render-layer diff viewers handle
194
+ * faithfully. Dates → ISO strings, Maps → objects, Sets → arrays,
195
+ * BigInt → "123n", TypedArrays/cycles/depth-overflow → placeholder strings.
196
+ * Functions become "[Function]" (providers have already recorded real ones).
197
+ */
198
+ export function toDiffable(value) {
199
+ return normalizeForDiff(value, TO_DIFFABLE_MAX_DEPTH, new WeakSet());
200
+ }
201
+ function normalizeForDiff(value, depth, seen) {
202
+ if (value === null || value === undefined) return value;
203
+ const t = typeof value;
204
+ if (t === "string" || t === "boolean") return value;
205
+ if (t === "number") {
206
+ return Number.isFinite(value) ? value : String(value);
207
+ }
208
+ if (t === "bigint") return `${String(value)}n`;
209
+ if (t === "function") return "[Function]";
210
+ if (t === "symbol") return String(value);
211
+ if (t !== "object") return String(value);
212
+ if (value instanceof Date) return value.toISOString();
213
+ if (value instanceof RegExp) return String(value);
214
+ if (value instanceof Error) return `[${value.name}: ${value.message}]`;
215
+ if (typeof URL !== "undefined" && value instanceof URL) return value.href;
216
+ if (isTypedArray(value)) {
217
+ return `<${value.constructor.name} ${value.byteLength} bytes>`;
218
+ }
219
+ if (depth <= 0) return "[Max depth]";
220
+ if (seen.has(value)) return "[Circular]";
221
+ seen.add(value);
222
+ if (value instanceof Map) {
223
+ const out = {};
224
+ for (const [k, v] of value.entries()) {
225
+ const key = typeof k === "string" ? k : JSON.stringify(toDiffable(k));
226
+ out[key] = normalizeForDiff(v, depth - 1, seen);
227
+ }
228
+ return out;
229
+ }
230
+ if (value instanceof Set) {
231
+ return Array.from(value.values()).map(v => normalizeForDiff(v, depth - 1, seen));
232
+ }
233
+ if (Array.isArray(value)) {
234
+ return value.map(v => normalizeForDiff(v, depth - 1, seen));
235
+ }
236
+ const out = {};
237
+ for (const [k, v] of Object.entries(value)) {
238
+ out[k] = normalizeForDiff(v, depth - 1, seen);
239
+ }
240
+ return out;
241
+ }
242
+
243
+ // ============================================================================
244
+ // Size probe — O(limit) early-bail, cycle-safe
245
+ // ============================================================================
246
+
247
+ /**
248
+ * True when `value`'s JSON form is likely larger than `limitBytes`. Iterative
249
+ * walk that bails the moment the running estimate crosses the limit, so cost
250
+ * is O(limit) regardless of payload size (the redux store's `jsonLongerThan`
251
+ * lesson: a full stringify per check froze enterprise-scale apps).
252
+ */
253
+ export function jsonLikelyLargerThan(value, limitBytes) {
254
+ let size = 0;
255
+ const stack = [value];
256
+ const seenObjects = new Set();
257
+ while (stack.length > 0) {
258
+ const v = stack.pop();
259
+ if (v === null || v === undefined) {
260
+ size += 4;
261
+ } else if (typeof v === "string") {
262
+ size += v.length + 2;
263
+ } else if (typeof v === "number" || typeof v === "boolean") {
264
+ size += 8;
265
+ } else if (typeof v === "bigint") {
266
+ size += String(v).length + 1;
267
+ } else if (typeof v === "object") {
268
+ if (seenObjects.has(v)) continue;
269
+ seenObjects.add(v);
270
+ if (v instanceof Date || v instanceof RegExp) {
271
+ size += 32;
272
+ } else if (isTypedArray(v)) {
273
+ size += v.byteLength;
274
+ } else if (v instanceof Map) {
275
+ for (const [k, val] of v.entries()) {
276
+ stack.push(k, val);
277
+ size += 4;
278
+ }
279
+ } else if (v instanceof Set) {
280
+ for (const val of v.values()) {
281
+ stack.push(val);
282
+ size += 2;
283
+ }
284
+ } else if (Array.isArray(v)) {
285
+ for (const item of v) stack.push(item);
286
+ size += 2 * v.length + 2;
287
+ } else {
288
+ for (const [k, val] of Object.entries(v)) {
289
+ size += k.length + 4;
290
+ stack.push(val);
291
+ }
292
+ }
293
+ }
294
+ if (size > limitBytes) return true;
295
+ }
296
+ return false;
297
+ }
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * Auto-generated safe area implementation
5
5
  * Detected: none
6
- * Generated at: 2026-08-07T14:32:36.664Z
6
+ * Generated at: 2026-08-14T03:24:05.937Z
7
7
  *
8
8
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
9
9
  *
@@ -5,6 +5,7 @@ export * from "./ui/index.js";
5
5
 
6
6
  // Store base classes
7
7
  export * from "./stores/index.js";
8
+ export * from "./sync/wireBudget.js";
8
9
 
9
10
  // Utils exports - selectively export to avoid conflicts
10
11
  export {
@@ -54,7 +55,7 @@ export * from "./clipboard/index.js";
54
55
  export * from "./logger/index.js";
55
56
  export * from "./settings/index.js";
56
57
  export * from "./storage/index.js";
57
- export { useSafeAreaInsets, useFilterManager, useDeviceInfo, getDeviceInfo, logDeviceInfo } from "./hooks/index.js";
58
+ export { useSafeAreaInsets, useFilterManager, usePersistedState, useDeviceInfo, getDeviceInfo, logDeviceInfo } from "./hooks/index.js";
58
59
 
59
60
  // JsModal
60
61
  export { JsModal } from "./JsModal";
@@ -119,6 +119,15 @@ export const devToolsStorageKeys = {
119
119
  isMonitoring: () => `${devToolsStorageKeys.storage.root()}_is_monitoring`,
120
120
  diffViewerMode: () => `${devToolsStorageKeys.storage.root()}_diff_viewer_mode` // 'split' | 'tree'
121
121
  },
122
+ /**
123
+ * Time Machine storage keys. NOTE: the snapshot VAULT keys
124
+ * (`@react_buoy_time_machine:index` / `:snap:*`) predate this namespace and
125
+ * stay as-is — only preferences live here.
126
+ */
127
+ timeMachine: {
128
+ root: () => `${devToolsStorageKeys.base}_time_machine`,
129
+ diffViewerMode: () => `${devToolsStorageKeys.timeMachine.root()}_diff_viewer_mode` // 'split' | 'tree'
130
+ },
122
131
  /**
123
132
  * React Query-related storage keys
124
133
  */
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Size guards for anything a tool puts on the sync wire.
5
+ *
6
+ * Every adapter faces the same problem: a snapshot is rebuilt and serialized
7
+ * on the device's JS thread ~5x/sec while a dashboard watches, and one fat or
8
+ * unserializable field can either freeze that thread or blow the emit layer's
9
+ * budget — which drops the WHOLE snapshot and leaves the panel stale.
10
+ *
11
+ * Two rules make that safe, and both are easy to get subtly wrong, which is
12
+ * why they live here instead of being copied per adapter:
13
+ *
14
+ * 1. NEVER measure by serializing. `JSON.stringify(value).length` is
15
+ * O(payload) and allocates the whole string — an unbounded cost to
16
+ * enforce a 16KB cap, i.e. the protection becomes the freeze. Walk with
17
+ * an early abort instead: the cost is O(limit) no matter how big the
18
+ * value, and a string costs a length read rather than a scan.
19
+ *
20
+ * 2. Only reach for `JSON.stringify` when the walk saw something that could
21
+ * actually make it throw. A value straight out of `JSON.parse` — which is
22
+ * what a network body or a stored string is — is a finite tree of plain
23
+ * values and can never throw, so the check is pure waste on the common
24
+ * path.
25
+ */
26
+
27
+ import { isJsonSerializable } from "../utils/typeHelpers.js";
28
+ /**
29
+ * Approximate JSON size, aborting as soon as `limit` is passed — O(limit),
30
+ * never O(payload). Returns the bytes counted so far, so one walk can both
31
+ * threshold ("over the per-field cap?") and accumulate ("how much of the
32
+ * snapshot budget is left?").
33
+ */
34
+ export function approxJsonSize(value, limit) {
35
+ let bytes = 0;
36
+ let sawRepeat = false;
37
+ let sawBigInt = false;
38
+ const stack = [value];
39
+ const seen = new Set();
40
+ while (stack.length > 0) {
41
+ if (bytes > limit) return {
42
+ bytes,
43
+ sawRepeat,
44
+ sawBigInt
45
+ };
46
+ const v = stack.pop();
47
+ if (v === null || v === undefined) bytes += 4;else if (typeof v === "string") bytes += v.length + 2; // O(1), no scan
48
+ else if (typeof v === "number") bytes += 8;else if (typeof v === "boolean") bytes += 5;else if (typeof v === "object") {
49
+ if (seen.has(v)) {
50
+ sawRepeat = true;
51
+ continue;
52
+ }
53
+ seen.add(v);
54
+ if (Array.isArray(v)) {
55
+ bytes += 2 + v.length;
56
+ for (let i = 0; i < v.length; i++) stack.push(v[i]);
57
+ } else {
58
+ bytes += 2;
59
+ for (const k in v) {
60
+ bytes += k.length + 4;
61
+ stack.push(v[k]);
62
+ }
63
+ }
64
+ } else {
65
+ if (typeof v === "bigint") sawBigInt = true;
66
+ bytes += 4;
67
+ }
68
+ }
69
+ return {
70
+ bytes,
71
+ sawRepeat,
72
+ sawBigInt
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Should this value be withheld from the wire — too big, or unserializable?
78
+ *
79
+ * The ordering is the point: measure with the early-abort walk, and only pay
80
+ * for `JSON.stringify` when the walk found a reason it might throw.
81
+ */
82
+ export function isOverWireBudget(value, limit) {
83
+ const walk = approxJsonSize(value, limit);
84
+ if (walk.bytes > limit) return true;
85
+ // A finished walk with no repeated reference and no bigint cannot throw.
86
+ //
87
+ // Not exhaustive even then: a `toJSON`/getter that throws is invisible to
88
+ // the walk, so callers handling hostile payloads should still guard their
89
+ // own conversion. `safeEmit` is the last backstop.
90
+ if (!walk.sawRepeat && !walk.sawBigInt) return false;
91
+ return !isJsonSerializable(value);
92
+ }
@@ -8,12 +8,17 @@ export function HeaderSearchButton({
8
8
  onPress,
9
9
  size = 14,
10
10
  color = gameUIColors.secondary,
11
- style
11
+ style,
12
+ accessibilityLabel = "Search",
13
+ testID
12
14
  }) {
13
15
  return /*#__PURE__*/_jsx(TouchableOpacity, {
14
16
  onPress: onPress,
15
17
  style: [styles.button, style],
16
18
  activeOpacity: 0.7,
19
+ accessibilityRole: "button",
20
+ accessibilityLabel: accessibilityLabel,
21
+ testID: testID,
17
22
  children: /*#__PURE__*/_jsx(Search, {
18
23
  size: size,
19
24
  color: color
@@ -486,6 +486,12 @@ async function initStorage() {
486
486
  await migrateFromAsyncStorage();
487
487
  }
488
488
  storageBackend = "filesystem";
489
+ } else if (isWebEnvironment()) {
490
+ // Prefer localStorage on web (marketing site, RN-web, Electron renderer)
491
+ // BEFORE AsyncStorage. Hosts often alias AsyncStorage to a demo/remote
492
+ // shim that must not own buoy prefs — and must not trip the "fallback"
493
+ // warning on every page load.
494
+ storageBackend = "localstorage";
489
495
  } else {
490
496
  // Try AsyncStorage (React Native)
491
497
  const asyncStorage = loadAsyncStorage();
@@ -495,9 +501,6 @@ async function initStorage() {
495
501
  initWarningShown = true;
496
502
  console.warn("[React Buoy] Using AsyncStorage fallback. " + "Settings may be lost if AsyncStorage is cleared. " + "Install expo-file-system for persistent storage.");
497
503
  }
498
- } else if (isWebEnvironment()) {
499
- // Try localStorage (Web)
500
- storageBackend = "localstorage";
501
504
  } else {
502
505
  storageBackend = "memory";
503
506
  if (!initWarningShown) {
@@ -12,6 +12,15 @@
12
12
  * Apps can also register custom providers for state Buoy doesn't know about.
13
13
  */
14
14
 
15
+ /**
16
+ * Per-item verdict in a Restore Preview. The critical distinction:
17
+ * "changed" means the restore WILL apply this difference; "wont-apply" means
18
+ * a difference exists (or an item does) that restore can NOT apply, with the
19
+ * reason. A preview that shows raw diffs without this distinction lies.
20
+ */
21
+
22
+ // beyond diff budgets; treated as changed, not rendered
23
+
15
24
  const providers = new Map();
16
25
  const listeners = new Set();
17
26
  function notify() {
@@ -0,0 +1,28 @@
1
+ import { DiffTheme } from "./diffThemes";
2
+ export type DiffCompareMethod = "chars" | "words" | "lines" | "trimmedLines";
3
+ /** Rendering options (the shape storage's DiffOptionsPanel edits). */
4
+ export interface DiffOptions {
5
+ hideLineNumbers: boolean;
6
+ disableWordDiff: boolean;
7
+ showDiffOnly: boolean;
8
+ compareMethod: DiffCompareMethod;
9
+ contextLines: number;
10
+ lineOffset: number;
11
+ }
12
+ interface ThemedSplitViewProps {
13
+ oldValue: unknown;
14
+ newValue: unknown;
15
+ differences: unknown[];
16
+ theme: DiffTheme;
17
+ options?: DiffOptions;
18
+ showThemeName?: boolean;
19
+ /**
20
+ * Scroll the rows inside their own fixed-height pane (default). Set false to
21
+ * render every row inline at natural height and let an ancestor ScrollView
22
+ * move them — one page-level scroll instead of a nested scroll region.
23
+ */
24
+ scrollEnabled?: boolean;
25
+ }
26
+ export declare function ThemedSplitView({ oldValue, newValue, theme, options, showThemeName, scrollEnabled, }: ThemedSplitViewProps): import("react").JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=ThemedSplitView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedSplitView.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/ThemedSplitView.tsx"],"names":[],"mappings":"AAmCA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,CAAC;AAE7E,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,iBAAiB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAaD,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,OAAyB,EACzB,aAAqB,EACrB,aAAoB,GACrB,EAAE,oBAAoB,+BAmMtB"}
@@ -21,4 +21,6 @@ export { DiffSummary } from "./DiffSummary";
21
21
  export type { DiffSummaryProps } from "./DiffSummary";
22
22
  export { computeLineDiff, DiffType, ABSENT_VALUE, isAbsent, type LineDiffInfo, type WordDiff, type DiffComputeOptions, } from "./lineDiff";
23
23
  export { diffThemes, gitClassicTheme, devToolsDefaultTheme, type DiffTheme, type DiffThemeKey, } from "./diffThemes";
24
+ export { objectDiff, boundedDeepEqual, toDiffable, jsonLikelyLargerThan, type ObjectDiffOptions, type ObjectDiffResult, } from "./objectDiff";
25
+ export { ThemedSplitView, type DiffOptions, type DiffCompareMethod, } from "./ThemedSplitView";
24
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C;;;;GAIG;AACH,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EACL,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,MAAM,GACZ,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C;;;;GAIG;AACH,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EACL,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,MAAM,GACZ,MAAM,WAAW,CAAC;AAInB,OAAO,EACL,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * objectDiff — the bounded, cycle-safe diff KERNEL the dataViewer never had.
3
+ *
4
+ * Every diff consumer so far either hand-rolled a private summary helper or
5
+ * fed whole values into the render-layer viewers (which compute eagerly, have
6
+ * no cycle guards, and mis-compare rich types — TreeDiffViewer treats two
7
+ * different Dates/Maps/Sets as EQUAL because they have zero own keys).
8
+ *
9
+ * This kernel is for VERDICTS and BADGES, not rendering:
10
+ * - correct equality for Date / RegExp / Map / Set / BigInt / NaN /
11
+ * TypedArray / URL / Error, and `undefined`-value vs absent-key
12
+ * - WeakSet cycle guard (a revisited pair reports unequal-safe truncation,
13
+ * never a stack overflow)
14
+ * - hard depth + node budgets with an explicit `truncated` flag; when the
15
+ * budget runs out a subtree is reported as CHANGED (a false "changed" is
16
+ * recoverable — a false "unchanged" hides a real difference, the worst
17
+ * failure mode for a restore preview)
18
+ *
19
+ * `toDiffable` is the companion RENDER normalizer: it converts rich types to
20
+ * plain-JSON stand-ins so the existing viewers (which only handle plain JSON
21
+ * faithfully) never see a Date/Map/Set/BigInt/cycle at all.
22
+ */
23
+ export interface ObjectDiffOptions {
24
+ /** Recursion cap. @default 8 */
25
+ maxDepth?: number;
26
+ /** Total node-visit budget across the whole comparison. @default 2000 */
27
+ maxNodes?: number;
28
+ }
29
+ export interface ObjectDiffResult {
30
+ equal: boolean;
31
+ /** Top-level keys present only in `newValue`. */
32
+ addedKeys: string[];
33
+ /** Top-level keys present only in `oldValue`. */
34
+ removedKeys: string[];
35
+ /** Top-level keys present in both with different values. */
36
+ changedKeys: string[];
37
+ /**
38
+ * True when a depth/node budget or a cycle stopped the walk — counts are
39
+ * then lower bounds and "changed" verdicts may be conservative.
40
+ */
41
+ truncated: boolean;
42
+ }
43
+ /**
44
+ * Bounded deep equality. Returns false on budget exhaustion (conservative:
45
+ * report changed rather than hide a change) and marks the budget truncated.
46
+ */
47
+ export declare function boundedDeepEqual(a: unknown, b: unknown, options?: ObjectDiffOptions): boolean;
48
+ /**
49
+ * Top-level key diff of two values with bounded deep equality per key.
50
+ * Non-object inputs degrade to a single implicit "value" comparison.
51
+ */
52
+ export declare function objectDiff(oldValue: unknown, newValue: unknown, options?: ObjectDiffOptions): ObjectDiffResult;
53
+ /**
54
+ * Convert a value tree into plain JSON the render-layer diff viewers handle
55
+ * faithfully. Dates → ISO strings, Maps → objects, Sets → arrays,
56
+ * BigInt → "123n", TypedArrays/cycles/depth-overflow → placeholder strings.
57
+ * Functions become "[Function]" (providers have already recorded real ones).
58
+ */
59
+ export declare function toDiffable(value: unknown): unknown;
60
+ /**
61
+ * True when `value`'s JSON form is likely larger than `limitBytes`. Iterative
62
+ * walk that bails the moment the running estimate crosses the limit, so cost
63
+ * is O(limit) regardless of payload size (the redux store's `jsonLongerThan`
64
+ * lesson: a full stringify per check froze enterprise-scale apps).
65
+ */
66
+ export declare function jsonLikelyLargerThan(value: unknown, limitBytes: number): boolean;
67
+ //# sourceMappingURL=objectDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectDiff.d.ts","sourceRoot":"","sources":["../../../../src/dataViewer/objectDiff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iDAAiD;IACjD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAiBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAMT;AA8HD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAiDlB;AAQD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD;AA0DD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CA4CT"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-08-07T14:32:36.664Z
4
+ * Generated at: 2026-08-14T03:24:05.937Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -1,6 +1,7 @@
1
1
  export * from "./ui";
2
2
  export * from "./stores";
3
- export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, registerStateSnapshotProvider, getStateSnapshotProviders, getStateSnapshotProvider, subscribeToStateSnapshotProviders, type StateSnapshotProvider, type StateSnapshotProviderStatus, type StateSnapshotCapture, type StateSnapshotRestoreResult, superJsonSerialize, superJsonDeserialize, type SuperJSONResult, reloadApp, scheduleReloadApp, resolveReloadStrategy, REMOTE_RELOAD_DELAY_MS, type ReloadStrategy, type ResolvedReloadStrategy, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
3
+ export * from "./sync/wireBudget";
4
+ export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, registerStateSnapshotProvider, getStateSnapshotProviders, getStateSnapshotProvider, subscribeToStateSnapshotProviders, type StateSnapshotProvider, type StateSnapshotProviderStatus, type StateSnapshotCapture, type StateSnapshotRestoreResult, type StateSnapshotPreview, type StateSnapshotPreviewItem, type StateSnapshotPreviewVerdict, superJsonSerialize, superJsonDeserialize, type SuperJSONResult, reloadApp, scheduleReloadApp, resolveReloadStrategy, REMOTE_RELOAD_DELAY_MS, type ReloadStrategy, type ResolvedReloadStrategy, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
4
5
  export * from "./utils/formatting";
5
6
  export * from "./utils/time";
6
7
  export { isPlainObject as isPlainObjectUtil } from "./utils/typeHelpers";
@@ -9,7 +10,7 @@ export * from "./clipboard";
9
10
  export * from "./logger";
10
11
  export * from "./settings";
11
12
  export * from "./storage";
12
- export { useSafeAreaInsets, useFilterManager, useDeviceInfo, getDeviceInfo, logDeviceInfo, type DeviceInfo, type PlatformInfo, type DisplayInfo, type AccessibilitySettings, type AppearanceInfo, type LocaleInfo, type StatusBarInfo, type KeyboardInfo, type AppStateInfo, type UniqueIdentifiers, type SettingsInfo, } from "./hooks";
13
+ export { useSafeAreaInsets, useFilterManager, usePersistedState, useDeviceInfo, getDeviceInfo, logDeviceInfo, type DeviceInfo, type PlatformInfo, type DisplayInfo, type AccessibilitySettings, type AppearanceInfo, type LocaleInfo, type StatusBarInfo, type KeyboardInfo, type AppStateInfo, type UniqueIdentifiers, type SettingsInfo, } from "./hooks";
13
14
  export { JsModal } from "./JsModal";
14
15
  export type { ModalMode, ModalState } from "./JsModal";
15
16
  export { gameUIColors, buoyColors } from "./ui/gameUI/constants/gameUIColors";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAEL,YAAY,EAEZ,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAE9B,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,iCAAiC,EACjC,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAEhC,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,eAAe,EAEpB,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}