@buoy-gg/time-machine 7.0.17

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 (60) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +55 -0
  3. package/lib/commonjs/components/TimeMachineBody.js +420 -0
  4. package/lib/commonjs/components/TimeMachineBody.js.map +1 -0
  5. package/lib/commonjs/components/TimeMachineModal.js +74 -0
  6. package/lib/commonjs/components/TimeMachineModal.js.map +1 -0
  7. package/lib/commonjs/hooks/useTimeMachine.js +24 -0
  8. package/lib/commonjs/hooks/useTimeMachine.js.map +1 -0
  9. package/lib/commonjs/index.js +64 -0
  10. package/lib/commonjs/index.js.map +1 -0
  11. package/lib/commonjs/package.json +1 -0
  12. package/lib/commonjs/preset.js +45 -0
  13. package/lib/commonjs/preset.js.map +1 -0
  14. package/lib/commonjs/store/snapshotVault.js +83 -0
  15. package/lib/commonjs/store/snapshotVault.js.map +1 -0
  16. package/lib/commonjs/store/timeMachineStore.js +335 -0
  17. package/lib/commonjs/store/timeMachineStore.js.map +1 -0
  18. package/lib/commonjs/sync/timeMachineSyncAdapter.js +139 -0
  19. package/lib/commonjs/sync/timeMachineSyncAdapter.js.map +1 -0
  20. package/lib/module/components/TimeMachineBody.js +415 -0
  21. package/lib/module/components/TimeMachineBody.js.map +1 -0
  22. package/lib/module/components/TimeMachineModal.js +68 -0
  23. package/lib/module/components/TimeMachineModal.js.map +1 -0
  24. package/lib/module/hooks/useTimeMachine.js +19 -0
  25. package/lib/module/hooks/useTimeMachine.js.map +1 -0
  26. package/lib/module/index.js +29 -0
  27. package/lib/module/index.js.map +1 -0
  28. package/lib/module/preset.js +40 -0
  29. package/lib/module/preset.js.map +1 -0
  30. package/lib/module/store/snapshotVault.js +74 -0
  31. package/lib/module/store/snapshotVault.js.map +1 -0
  32. package/lib/module/store/timeMachineStore.js +327 -0
  33. package/lib/module/store/timeMachineStore.js.map +1 -0
  34. package/lib/module/sync/timeMachineSyncAdapter.js +134 -0
  35. package/lib/module/sync/timeMachineSyncAdapter.js.map +1 -0
  36. package/lib/typescript/components/TimeMachineBody.d.ts +2 -0
  37. package/lib/typescript/components/TimeMachineBody.d.ts.map +1 -0
  38. package/lib/typescript/components/TimeMachineModal.d.ts +12 -0
  39. package/lib/typescript/components/TimeMachineModal.d.ts.map +1 -0
  40. package/lib/typescript/hooks/useTimeMachine.d.ts +6 -0
  41. package/lib/typescript/hooks/useTimeMachine.d.ts.map +1 -0
  42. package/lib/typescript/index.d.ts +18 -0
  43. package/lib/typescript/index.d.ts.map +1 -0
  44. package/lib/typescript/preset.d.ts +38 -0
  45. package/lib/typescript/preset.d.ts.map +1 -0
  46. package/lib/typescript/store/snapshotVault.d.ts +46 -0
  47. package/lib/typescript/store/snapshotVault.d.ts.map +1 -0
  48. package/lib/typescript/store/timeMachineStore.d.ts +97 -0
  49. package/lib/typescript/store/timeMachineStore.d.ts.map +1 -0
  50. package/lib/typescript/sync/timeMachineSyncAdapter.d.ts +59 -0
  51. package/lib/typescript/sync/timeMachineSyncAdapter.d.ts.map +1 -0
  52. package/package.json +59 -0
  53. package/src/components/TimeMachineBody.tsx +455 -0
  54. package/src/components/TimeMachineModal.tsx +75 -0
  55. package/src/hooks/useTimeMachine.ts +26 -0
  56. package/src/index.tsx +45 -0
  57. package/src/preset.tsx +38 -0
  58. package/src/store/snapshotVault.ts +117 -0
  59. package/src/store/timeMachineStore.ts +368 -0
  60. package/src/sync/timeMachineSyncAdapter.ts +128 -0
package/LICENSE ADDED
@@ -0,0 +1,58 @@
1
+ PROPRIETARY SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2024-present Buoy. All rights reserved.
4
+
5
+ This software and its source code are proprietary and confidential.
6
+
7
+ NOTICE: This is NOT open source software. This software is licensed,
8
+ not sold, and is protected by copyright laws and international treaties.
9
+
10
+ TERMS AND CONDITIONS:
11
+
12
+ 1. LICENSE GRANT
13
+ Subject to the terms of this Agreement and payment of applicable fees,
14
+ Buoy grants you a limited, non-exclusive, non-transferable license
15
+ to use the compiled software packages in your applications.
16
+
17
+ 2. RESTRICTIONS
18
+ You may NOT:
19
+ - Copy, modify, or distribute the source code
20
+ - Reverse engineer, decompile, or disassemble the software
21
+ - Remove or alter any proprietary notices or labels
22
+ - Sublicense, rent, lease, or lend the software
23
+ - Use the software to create competing products
24
+ - Share access credentials with unauthorized parties
25
+
26
+ 3. OWNERSHIP
27
+ React Buoy retains all right, title, and interest in the software,
28
+ including all intellectual property rights. This license does not
29
+ grant you any rights to trademarks or service marks.
30
+
31
+ 4. TERMINATION
32
+ This license is effective until terminated. Your rights under this
33
+ license will terminate automatically without notice if you fail to
34
+ comply with any of its terms. Upon termination, you must cease all
35
+ use and destroy all copies of the software.
36
+
37
+ 5. DISCLAIMER OF WARRANTIES
38
+ THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
39
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
40
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
41
+
42
+ 6. LIMITATION OF LIABILITY
43
+ IN NO EVENT SHALL BUOY BE LIABLE FOR ANY INDIRECT, INCIDENTAL,
44
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN
45
+ CONNECTION WITH THIS LICENSE OR THE USE OF THE SOFTWARE.
46
+
47
+ 7. GOVERNING LAW
48
+ This Agreement shall be governed by and construed in accordance with
49
+ the laws of the United States, without regard to its conflict of
50
+ law provisions.
51
+
52
+ For licensing inquiries and subscription information:
53
+ - Website: https://buoy.gg
54
+ - Email: AustinLovesWorking@gmail.com
55
+
56
+ Unauthorized reproduction or distribution of this software, or any
57
+ portion of it, may result in severe civil and criminal penalties,
58
+ and will be prosecuted to the maximum extent possible under the law.
package/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # @buoy-gg/time-machine
2
+
3
+ ## Description
4
+
5
+ time-machine package for the monorepo.
6
+
7
+ ## Installation
8
+
9
+ This package is part of the monorepo and is automatically available to other packages and the example app.
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { TimeMachineComponent } from '@buoy-gg/time-machine';
15
+
16
+ // Use in your component
17
+ <TimeMachineComponent title="Hello World" />
18
+ ```
19
+
20
+ ## Development
21
+
22
+ ### Building
23
+
24
+ ```bash
25
+ pnpm build
26
+ ```
27
+
28
+ ### Type Checking
29
+
30
+ ```bash
31
+ pnpm typecheck
32
+ ```
33
+
34
+ ### Clean Build
35
+
36
+ ```bash
37
+ pnpm clean
38
+ ```
39
+
40
+ ## Structure
41
+
42
+ ```
43
+ time-machine/
44
+ ├── src/
45
+ │ └── index.ts # Main export file
46
+ ├── lib/ # Built output (git ignored)
47
+ ├── package.json
48
+ ├── tsconfig.json
49
+ └── README.md
50
+ ```
51
+
52
+ ## Dependencies
53
+
54
+ - Uses `@buoy-gg/shared-ui` for common components and utilities
55
+ - React and React Native as peer dependencies
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TimeMachineBody = TimeMachineBody;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _license = require("@buoy-gg/license");
11
+ var _useTimeMachine = require("../hooks/useTimeMachine");
12
+ var _timeMachineStore = require("../store/timeMachineStore");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ /**
15
+ * Time Machine body — capture bar, provider status strip, snapshot list and
16
+ * the last-restore results panel. Shared by the RN modal and the inline
17
+ * (desktop) tool view.
18
+ */
19
+
20
+ const FREE_SNAPSHOT_LIMIT = 2;
21
+ function timeAgo(ts) {
22
+ const s = Math.max(0, Math.round((Date.now() - ts) / 1000));
23
+ if (s < 60) return `${s}s ago`;
24
+ const m = Math.round(s / 60);
25
+ if (m < 60) return `${m}m ago`;
26
+ const h = Math.round(m / 60);
27
+ if (h < 24) return `${h}h ago`;
28
+ return `${Math.round(h / 24)}d ago`;
29
+ }
30
+ function formatBytes(bytes) {
31
+ if (bytes < 1024) return `${bytes} B`;
32
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
33
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
34
+ }
35
+ function warningCount(meta) {
36
+ return Object.values(meta.sources).reduce((sum, s) => sum + s.warnings.length, 0);
37
+ }
38
+
39
+ /** RN-web's Alert renders no buttons — fall back to the browser dialog there. */
40
+ function confirmDestructive(title, message, confirmLabel, onConfirm) {
41
+ if (_reactNative.Platform.OS === "web") {
42
+ const confirmFn = globalThis.confirm;
43
+ if (!confirmFn || confirmFn(`${title}\n\n${message}`)) onConfirm();
44
+ return;
45
+ }
46
+ _reactNative.Alert.alert(title, message, [{
47
+ text: "Cancel",
48
+ style: "cancel"
49
+ }, {
50
+ text: confirmLabel,
51
+ style: "destructive",
52
+ onPress: onConfirm
53
+ }]);
54
+ }
55
+ function OutcomePanel({
56
+ outcome
57
+ }) {
58
+ const entries = Object.entries(outcome.results);
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
60
+ style: styles.outcomePanel,
61
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
62
+ style: styles.outcomeHeaderRow,
63
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
64
+ style: styles.outcomeTitle,
65
+ children: ["Restored \u201C", outcome.snapshotName, "\u201D", outcome.mode === "reload" || outcome.willReload ? " · reloading" : ""]
66
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
67
+ onPress: () => _timeMachineStore.timeMachineStore.clearLastOutcome(),
68
+ hitSlop: {
69
+ top: 8,
70
+ bottom: 8,
71
+ left: 8,
72
+ right: 8
73
+ },
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
75
+ style: styles.outcomeDismiss,
76
+ children: "\u2715"
77
+ })
78
+ })]
79
+ }), entries.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
80
+ style: styles.outcomeLine,
81
+ children: "no sources restored"
82
+ }), entries.map(([sourceId, r]) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
83
+ style: styles.outcomeSource,
84
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
85
+ style: [styles.outcomeLine, !r.ok && styles.outcomeLineBad],
86
+ children: [r.ok ? "✓" : "✕", " ", sourceId, " \u2014 applied ", r.applied, r.skipped.length > 0 ? `, skipped ${r.skipped.length}` : ""]
87
+ }), r.skipped.slice(0, 3).map(skip => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
88
+ style: styles.outcomeDetail,
89
+ children: ["\xB7 ", skip.id, ": ", skip.reason]
90
+ }, skip.id)), r.warnings.slice(0, 3).map(warning => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
91
+ style: styles.outcomeDetail,
92
+ children: ["\u26A0 ", warning]
93
+ }, warning))]
94
+ }, sourceId))]
95
+ });
96
+ }
97
+ function TimeMachineBody() {
98
+ const {
99
+ snapshots,
100
+ hasLoaded,
101
+ busy,
102
+ lastOutcome,
103
+ remoteProviders
104
+ } = (0, _useTimeMachine.useTimeMachineState)();
105
+ const localProviders = (0, _useTimeMachine.useSnapshotProviders)();
106
+ const isPro = (0, _license.useIsPro)();
107
+ const [name, setName] = (0, _react.useState)("");
108
+
109
+ // On-device: live registry probes. Buoy Desktop: statuses mirrored from
110
+ // the device's sync payload.
111
+ const providers = remoteProviders ?? localProviders.map(p => ({
112
+ id: p.id,
113
+ label: p.label,
114
+ ...p.status()
115
+ }));
116
+ const atFreeLimit = !isPro && snapshots.length >= FREE_SNAPSHOT_LIMIT;
117
+ const captureDisabled = busy !== null || atFreeLimit;
118
+ const capture = () => {
119
+ if (captureDisabled) return;
120
+ void _timeMachineStore.timeMachineStore.capture(name);
121
+ setName("");
122
+ };
123
+ const captureBaseline = () => {
124
+ if (captureDisabled) return;
125
+ void _timeMachineStore.timeMachineStore.captureBaseline();
126
+ };
127
+ const restore = (meta, mode) => {
128
+ if (busy) return;
129
+ if (meta.baseline) {
130
+ confirmDestructive("Restore fresh install?", "This wipes all app storage and reloads the app.", "Wipe & reload", () => void _timeMachineStore.timeMachineStore.restore(meta.id, "reload"));
131
+ return;
132
+ }
133
+ void _timeMachineStore.timeMachineStore.restore(meta.id, mode);
134
+ };
135
+ const remove = meta => {
136
+ confirmDestructive("Delete snapshot?", `“${meta.name}” cannot be recovered.`, "Delete", () => void _timeMachineStore.timeMachineStore.delete(meta.id));
137
+ };
138
+ const unavailable = providers.filter(p => p.detail && (!p.canCapture || !p.canRestore));
139
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
140
+ style: styles.container,
141
+ children: [lastOutcome && /*#__PURE__*/(0, _jsxRuntime.jsx)(OutcomePanel, {
142
+ outcome: lastOutcome
143
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
144
+ style: styles.captureRow,
145
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
146
+ style: styles.nameInput,
147
+ value: name,
148
+ onChangeText: setName,
149
+ placeholder: "Snapshot name\u2026",
150
+ placeholderTextColor: _sharedUi.buoyColors.textMuted,
151
+ editable: !captureDisabled,
152
+ onSubmitEditing: capture,
153
+ returnKeyType: "done",
154
+ testID: "time-machine-name-input"
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
156
+ style: [styles.captureButton, captureDisabled && styles.buttonDisabled],
157
+ onPress: capture,
158
+ disabled: captureDisabled,
159
+ testID: "time-machine-capture",
160
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
161
+ style: styles.captureButtonText,
162
+ children: busy === "capture" ? "…" : "CAPTURE"
163
+ })
164
+ })]
165
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
166
+ style: [styles.baselineButton, captureDisabled && styles.buttonDisabled],
167
+ onPress: captureBaseline,
168
+ disabled: captureDisabled,
169
+ testID: "time-machine-capture-baseline",
170
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
171
+ style: styles.baselineButtonText,
172
+ children: "\u2302 CAPTURE FRESH-INSTALL BASELINE"
173
+ })
174
+ }), atFreeLimit && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
175
+ style: styles.freeLimitNote,
176
+ children: ["Free plan: ", FREE_SNAPSHOT_LIMIT, " restore points. Upgrade to Pro for unlimited snapshots."]
177
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
178
+ style: styles.providerStrip,
179
+ children: [providers.map(p => {
180
+ const dotColor = !p.canCapture ? _sharedUi.buoyColors.textMuted : p.canRestore ? _sharedUi.buoyColors.success : _sharedUi.buoyColors.warning;
181
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
182
+ style: styles.providerChip,
183
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
184
+ style: [styles.providerDot, {
185
+ backgroundColor: dotColor
186
+ }]
187
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
188
+ style: styles.providerLabel,
189
+ children: p.label
190
+ })]
191
+ }, p.id);
192
+ }), providers.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
193
+ style: styles.emptyText,
194
+ children: "No snapshot providers registered"
195
+ })]
196
+ }), unavailable.map(p => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
197
+ style: styles.providerDetail,
198
+ children: [p.label, ": ", p.detail]
199
+ }, p.id)), hasLoaded && snapshots.length === 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
200
+ style: styles.emptyText,
201
+ children: "No snapshots yet. Capture one, test your flow, then restore to jump right back."
202
+ }), snapshots.map(meta => {
203
+ const warnings = warningCount(meta);
204
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
205
+ style: styles.snapshotRow,
206
+ testID: `time-machine-snap-${meta.id}`,
207
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
208
+ style: styles.snapshotInfo,
209
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
210
+ style: styles.snapshotName,
211
+ numberOfLines: 1,
212
+ children: [meta.baseline ? "⌂ " : "", meta.name]
213
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
214
+ style: styles.snapshotMeta,
215
+ children: [timeAgo(meta.createdAt), meta.baseline ? " · wipes to fresh install" : ` · ${formatBytes(meta.sizeBytes)} · ${Object.keys(meta.sources).join(", ") || "empty"}`, warnings > 0 ? ` · ⚠ ${warnings}` : ""]
216
+ })]
217
+ }), !meta.baseline && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
218
+ style: [styles.rowButton, busy && styles.buttonDisabled],
219
+ onPress: () => restore(meta, "live"),
220
+ disabled: busy !== null,
221
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
222
+ style: styles.rowButtonText,
223
+ children: "RESTORE"
224
+ })
225
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
226
+ style: [styles.rowButton, busy && styles.buttonDisabled],
227
+ onPress: () => restore(meta, "reload"),
228
+ disabled: busy !== null,
229
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
230
+ style: styles.rowButtonText,
231
+ children: meta.baseline ? "RESTORE" : "↻"
232
+ })
233
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
234
+ style: styles.deleteButton,
235
+ onPress: () => remove(meta),
236
+ hitSlop: {
237
+ top: 8,
238
+ bottom: 8,
239
+ left: 4,
240
+ right: 8
241
+ },
242
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
243
+ style: styles.deleteButtonText,
244
+ children: "\u2715"
245
+ })
246
+ })]
247
+ }, meta.id);
248
+ })]
249
+ });
250
+ }
251
+ const styles = _reactNative.StyleSheet.create({
252
+ container: {
253
+ padding: 12,
254
+ gap: 8
255
+ },
256
+ captureRow: {
257
+ flexDirection: "row",
258
+ gap: 8
259
+ },
260
+ nameInput: {
261
+ flex: 1,
262
+ backgroundColor: _sharedUi.buoyColors.input,
263
+ borderColor: _sharedUi.buoyColors.border,
264
+ borderWidth: 1,
265
+ borderRadius: 6,
266
+ color: _sharedUi.buoyColors.text,
267
+ paddingHorizontal: 10,
268
+ paddingVertical: 8,
269
+ fontSize: 13
270
+ },
271
+ captureButton: {
272
+ backgroundColor: _sharedUi.buoyColors.primary,
273
+ borderRadius: 6,
274
+ paddingHorizontal: 14,
275
+ justifyContent: "center"
276
+ },
277
+ captureButtonText: {
278
+ color: "#0A0A0A",
279
+ fontSize: 12,
280
+ fontWeight: "700",
281
+ letterSpacing: 0.5
282
+ },
283
+ baselineButton: {
284
+ borderColor: _sharedUi.buoyColors.border,
285
+ borderWidth: 1,
286
+ borderRadius: 6,
287
+ paddingVertical: 8,
288
+ alignItems: "center"
289
+ },
290
+ baselineButtonText: {
291
+ color: _sharedUi.buoyColors.textSecondary,
292
+ fontSize: 11,
293
+ fontWeight: "600",
294
+ letterSpacing: 0.5
295
+ },
296
+ buttonDisabled: {
297
+ opacity: 0.4
298
+ },
299
+ freeLimitNote: {
300
+ color: _sharedUi.buoyColors.warning,
301
+ fontSize: 11
302
+ },
303
+ providerStrip: {
304
+ flexDirection: "row",
305
+ flexWrap: "wrap",
306
+ gap: 6,
307
+ marginTop: 4
308
+ },
309
+ providerChip: {
310
+ flexDirection: "row",
311
+ alignItems: "center",
312
+ gap: 5,
313
+ backgroundColor: _sharedUi.buoyColors.card,
314
+ borderColor: _sharedUi.buoyColors.border,
315
+ borderWidth: 1,
316
+ borderRadius: 12,
317
+ paddingHorizontal: 8,
318
+ paddingVertical: 3
319
+ },
320
+ providerDot: {
321
+ width: 6,
322
+ height: 6,
323
+ borderRadius: 3
324
+ },
325
+ providerLabel: {
326
+ color: _sharedUi.buoyColors.textSecondary,
327
+ fontSize: 11
328
+ },
329
+ providerDetail: {
330
+ color: _sharedUi.buoyColors.textMuted,
331
+ fontSize: 10
332
+ },
333
+ emptyText: {
334
+ color: _sharedUi.buoyColors.textMuted,
335
+ fontSize: 12,
336
+ marginTop: 8
337
+ },
338
+ snapshotRow: {
339
+ flexDirection: "row",
340
+ alignItems: "center",
341
+ backgroundColor: _sharedUi.buoyColors.card,
342
+ borderColor: _sharedUi.buoyColors.border,
343
+ borderWidth: 1,
344
+ borderRadius: 8,
345
+ padding: 10,
346
+ gap: 8
347
+ },
348
+ snapshotInfo: {
349
+ flex: 1,
350
+ minWidth: 0
351
+ },
352
+ snapshotName: {
353
+ color: _sharedUi.buoyColors.text,
354
+ fontSize: 13,
355
+ fontWeight: "600"
356
+ },
357
+ snapshotMeta: {
358
+ color: _sharedUi.buoyColors.textMuted,
359
+ fontSize: 10,
360
+ marginTop: 2
361
+ },
362
+ rowButton: {
363
+ borderColor: _sharedUi.buoyColors.primary,
364
+ borderWidth: 1,
365
+ borderRadius: 6,
366
+ paddingHorizontal: 8,
367
+ paddingVertical: 6
368
+ },
369
+ rowButtonText: {
370
+ color: _sharedUi.buoyColors.primary,
371
+ fontSize: 10,
372
+ fontWeight: "700"
373
+ },
374
+ deleteButton: {
375
+ paddingHorizontal: 2
376
+ },
377
+ deleteButtonText: {
378
+ color: _sharedUi.buoyColors.textMuted,
379
+ fontSize: 13
380
+ },
381
+ outcomePanel: {
382
+ backgroundColor: _sharedUi.buoyColors.card,
383
+ borderColor: _sharedUi.buoyColors.borderStrong,
384
+ borderWidth: 1,
385
+ borderRadius: 8,
386
+ padding: 10,
387
+ gap: 4
388
+ },
389
+ outcomeHeaderRow: {
390
+ flexDirection: "row",
391
+ justifyContent: "space-between",
392
+ alignItems: "center"
393
+ },
394
+ outcomeTitle: {
395
+ color: _sharedUi.buoyColors.text,
396
+ fontSize: 12,
397
+ fontWeight: "700",
398
+ flex: 1
399
+ },
400
+ outcomeDismiss: {
401
+ color: _sharedUi.buoyColors.textMuted,
402
+ fontSize: 13
403
+ },
404
+ outcomeSource: {
405
+ gap: 2
406
+ },
407
+ outcomeLine: {
408
+ color: _sharedUi.buoyColors.success,
409
+ fontSize: 11
410
+ },
411
+ outcomeLineBad: {
412
+ color: _sharedUi.buoyColors.warning
413
+ },
414
+ outcomeDetail: {
415
+ color: _sharedUi.buoyColors.textMuted,
416
+ fontSize: 10,
417
+ paddingLeft: 12
418
+ }
419
+ });
420
+ //# sourceMappingURL=TimeMachineBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_sharedUi","_license","_useTimeMachine","_timeMachineStore","_jsxRuntime","FREE_SNAPSHOT_LIMIT","timeAgo","ts","s","Math","max","round","Date","now","m","h","formatBytes","bytes","toFixed","warningCount","meta","Object","values","sources","reduce","sum","warnings","length","confirmDestructive","title","message","confirmLabel","onConfirm","Platform","OS","confirmFn","globalThis","confirm","Alert","alert","text","style","onPress","OutcomePanel","outcome","entries","results","jsxs","View","styles","outcomePanel","children","outcomeHeaderRow","Text","outcomeTitle","snapshotName","mode","willReload","jsx","TouchableOpacity","timeMachineStore","clearLastOutcome","hitSlop","top","bottom","left","right","outcomeDismiss","outcomeLine","map","sourceId","r","outcomeSource","ok","outcomeLineBad","applied","skipped","slice","skip","outcomeDetail","id","reason","warning","TimeMachineBody","snapshots","hasLoaded","busy","lastOutcome","remoteProviders","useTimeMachineState","localProviders","useSnapshotProviders","isPro","useIsPro","name","setName","useState","providers","p","label","status","atFreeLimit","captureDisabled","capture","captureBaseline","restore","baseline","remove","delete","unavailable","filter","detail","canCapture","canRestore","container","captureRow","TextInput","nameInput","value","onChangeText","placeholder","placeholderTextColor","buoyColors","textMuted","editable","onSubmitEditing","returnKeyType","testID","captureButton","buttonDisabled","disabled","captureButtonText","baselineButton","baselineButtonText","freeLimitNote","providerStrip","dotColor","success","providerChip","providerDot","backgroundColor","providerLabel","emptyText","providerDetail","snapshotRow","snapshotInfo","numberOfLines","snapshotMeta","createdAt","sizeBytes","keys","join","rowButton","rowButtonText","deleteButton","deleteButtonText","StyleSheet","create","padding","gap","flexDirection","flex","input","borderColor","border","borderWidth","borderRadius","color","paddingHorizontal","paddingVertical","fontSize","primary","justifyContent","fontWeight","letterSpacing","alignItems","textSecondary","opacity","flexWrap","marginTop","card","width","height","minWidth","borderStrong","paddingLeft"],"sourceRoot":"../../../src","sources":["components/TimeMachineBody.tsx"],"mappings":";;;;;;AAKA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AASA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AAA6D,IAAAM,WAAA,GAAAN,OAAA;AAlB7D;AACA;AACA;AACA;AACA;;AAkBA,MAAMO,mBAAmB,GAAG,CAAC;AAE7B,SAASC,OAAOA,CAACC,EAAU,EAAU;EACnC,MAAMC,CAAC,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAAC,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGN,EAAE,IAAI,IAAI,CAAC,CAAC;EAC3D,IAAIC,CAAC,GAAG,EAAE,EAAE,OAAO,GAAGA,CAAC,OAAO;EAC9B,MAAMM,CAAC,GAAGL,IAAI,CAACE,KAAK,CAACH,CAAC,GAAG,EAAE,CAAC;EAC5B,IAAIM,CAAC,GAAG,EAAE,EAAE,OAAO,GAAGA,CAAC,OAAO;EAC9B,MAAMC,CAAC,GAAGN,IAAI,CAACE,KAAK,CAACG,CAAC,GAAG,EAAE,CAAC;EAC5B,IAAIC,CAAC,GAAG,EAAE,EAAE,OAAO,GAAGA,CAAC,OAAO;EAC9B,OAAO,GAAGN,IAAI,CAACE,KAAK,CAACI,CAAC,GAAG,EAAE,CAAC,OAAO;AACrC;AAEA,SAASC,WAAWA,CAACC,KAAa,EAAU;EAC1C,IAAIA,KAAK,GAAG,IAAI,EAAE,OAAO,GAAGA,KAAK,IAAI;EACrC,IAAIA,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,GAAG,CAACA,KAAK,GAAG,IAAI,EAAEC,OAAO,CAAC,CAAC,CAAC,KAAK;EACjE,OAAO,GAAG,CAACD,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAEC,OAAO,CAAC,CAAC,CAAC,KAAK;AACnD;AAEA,SAASC,YAAYA,CAACC,IAAkB,EAAU;EAChD,OAAOC,MAAM,CAACC,MAAM,CAACF,IAAI,CAACG,OAAO,CAAC,CAACC,MAAM,CACvC,CAACC,GAAG,EAAEjB,CAAC,KAAKiB,GAAG,GAAGjB,CAAC,CAACkB,QAAQ,CAACC,MAAM,EACnC,CACF,CAAC;AACH;;AAEA;AACA,SAASC,kBAAkBA,CACzBC,KAAa,EACbC,OAAe,EACfC,YAAoB,EACpBC,SAAqB,EACrB;EACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,MAAMC,SAAS,GAAIC,UAAU,CAA4CC,OAAO;IAChF,IAAI,CAACF,SAAS,IAAIA,SAAS,CAAC,GAAGN,KAAK,OAAOC,OAAO,EAAE,CAAC,EAAEE,SAAS,CAAC,CAAC;IAClE;EACF;EACAM,kBAAK,CAACC,KAAK,CAACV,KAAK,EAAEC,OAAO,EAAE,CAC1B;IAAEU,IAAI,EAAE,QAAQ;IAAEC,KAAK,EAAE;EAAS,CAAC,EACnC;IAAED,IAAI,EAAET,YAAY;IAAEU,KAAK,EAAE,aAAa;IAAEC,OAAO,EAAEV;EAAU,CAAC,CACjE,CAAC;AACJ;AAEA,SAASW,YAAYA,CAAC;EAAEC;AAAqC,CAAC,EAAE;EAC9D,MAAMC,OAAO,GAAGxB,MAAM,CAACwB,OAAO,CAACD,OAAO,CAACE,OAAO,CAAC;EAC/C,oBACE,IAAA1C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;IAACP,KAAK,EAAEQ,MAAM,CAACC,YAAa;IAAAC,QAAA,gBAC/B,IAAA/C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;MAACP,KAAK,EAAEQ,MAAM,CAACG,gBAAiB;MAAAD,QAAA,gBACnC,IAAA/C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;QAACZ,KAAK,EAAEQ,MAAM,CAACK,YAAa;QAAAH,QAAA,GAAC,iBACtB,EAACP,OAAO,CAACW,YAAY,EAAC,QAChC,EAACX,OAAO,CAACY,IAAI,KAAK,QAAQ,IAAIZ,OAAO,CAACa,UAAU,GAAG,cAAc,GAAG,EAAE;MAAA,CAClE,CAAC,eACP,IAAArD,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;QACfjB,OAAO,EAAEA,CAAA,KAAMkB,kCAAgB,CAACC,gBAAgB,CAAC,CAAE;QACnDC,OAAO,EAAE;UAAEC,GAAG,EAAE,CAAC;UAAEC,MAAM,EAAE,CAAC;UAAEC,IAAI,EAAE,CAAC;UAAEC,KAAK,EAAE;QAAE,CAAE;QAAAf,QAAA,eAElD,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;UAACZ,KAAK,EAAEQ,MAAM,CAACkB,cAAe;UAAAhB,QAAA,EAAC;QAAC,CAAM;MAAC,CAC5B,CAAC;IAAA,CACf,CAAC,EACNN,OAAO,CAAClB,MAAM,KAAK,CAAC,iBACnB,IAAAvB,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;MAACZ,KAAK,EAAEQ,MAAM,CAACmB,WAAY;MAAAjB,QAAA,EAAC;IAAmB,CAAM,CAC3D,EACAN,OAAO,CAACwB,GAAG,CAAC,CAAC,CAACC,QAAQ,EAAEC,CAAC,CAAC,kBACzB,IAAAnE,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;MAAgBP,KAAK,EAAEQ,MAAM,CAACuB,aAAc;MAAArB,QAAA,gBAC/C,IAAA/C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;QAACZ,KAAK,EAAE,CAACQ,MAAM,CAACmB,WAAW,EAAE,CAACG,CAAC,CAACE,EAAE,IAAIxB,MAAM,CAACyB,cAAc,CAAE;QAAAvB,QAAA,GAC/DoB,CAAC,CAACE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAC,GAAC,EAACH,QAAQ,EAAC,kBAAW,EAACC,CAAC,CAACI,OAAO,EACjDJ,CAAC,CAACK,OAAO,CAACjD,MAAM,GAAG,CAAC,GAAG,aAAa4C,CAAC,CAACK,OAAO,CAACjD,MAAM,EAAE,GAAG,EAAE;MAAA,CACxD,CAAC,EACN4C,CAAC,CAACK,OAAO,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAACR,GAAG,CAAES,IAAI,iBAC9B,IAAA1E,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;QAAeZ,KAAK,EAAEQ,MAAM,CAAC8B,aAAc;QAAA5B,QAAA,GAAC,OAC7C,EAAC2B,IAAI,CAACE,EAAE,EAAC,IAAE,EAACF,IAAI,CAACG,MAAM;MAAA,GADhBH,IAAI,CAACE,EAEV,CACP,CAAC,EACDT,CAAC,CAAC7C,QAAQ,CAACmD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAACR,GAAG,CAAEa,OAAO,iBAClC,IAAA9E,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;QAAeZ,KAAK,EAAEQ,MAAM,CAAC8B,aAAc;QAAA5B,QAAA,GAAC,SAC7C,EAAC+B,OAAO;MAAA,GADDA,OAEL,CACP,CAAC;IAAA,GAdOZ,QAeL,CACP,CAAC;EAAA,CACE,CAAC;AAEX;AAEO,SAASa,eAAeA,CAAA,EAAG;EAChC,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAC,GAChE,IAAAC,mCAAmB,EAAC,CAAC;EACvB,MAAMC,cAAc,GAAG,IAAAC,oCAAoB,EAAC,CAAC;EAC7C,MAAMC,KAAK,GAAG,IAAAC,iBAAQ,EAAC,CAAC;EACxB,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;;EAEpC;EACA;EACA,MAAMC,SAAS,GACbT,eAAe,IACfE,cAAc,CAACrB,GAAG,CAAE6B,CAAC,KAAM;IAAElB,EAAE,EAAEkB,CAAC,CAAClB,EAAE;IAAEmB,KAAK,EAAED,CAAC,CAACC,KAAK;IAAE,GAAGD,CAAC,CAACE,MAAM,CAAC;EAAE,CAAC,CAAC,CAAC;EAE1E,MAAMC,WAAW,GAAG,CAACT,KAAK,IAAIR,SAAS,CAACzD,MAAM,IAAItB,mBAAmB;EACrE,MAAMiG,eAAe,GAAGhB,IAAI,KAAK,IAAI,IAAIe,WAAW;EAEpD,MAAME,OAAO,GAAGA,CAAA,KAAM;IACpB,IAAID,eAAe,EAAE;IACrB,KAAK1C,kCAAgB,CAAC2C,OAAO,CAACT,IAAI,CAAC;IACnCC,OAAO,CAAC,EAAE,CAAC;EACb,CAAC;EAED,MAAMS,eAAe,GAAGA,CAAA,KAAM;IAC5B,IAAIF,eAAe,EAAE;IACrB,KAAK1C,kCAAgB,CAAC4C,eAAe,CAAC,CAAC;EACzC,CAAC;EAED,MAAMC,OAAO,GAAGA,CAACrF,IAAkB,EAAEoC,IAAuB,KAAK;IAC/D,IAAI8B,IAAI,EAAE;IACV,IAAIlE,IAAI,CAACsF,QAAQ,EAAE;MACjB9E,kBAAkB,CAChB,wBAAwB,EACxB,iDAAiD,EACjD,eAAe,EACf,MAAM,KAAKgC,kCAAgB,CAAC6C,OAAO,CAACrF,IAAI,CAAC4D,EAAE,EAAE,QAAQ,CACvD,CAAC;MACD;IACF;IACA,KAAKpB,kCAAgB,CAAC6C,OAAO,CAACrF,IAAI,CAAC4D,EAAE,EAAExB,IAAI,CAAC;EAC9C,CAAC;EAED,MAAMmD,MAAM,GAAIvF,IAAkB,IAAK;IACrCQ,kBAAkB,CAChB,kBAAkB,EAClB,IAAIR,IAAI,CAAC0E,IAAI,wBAAwB,EACrC,QAAQ,EACR,MAAM,KAAKlC,kCAAgB,CAACgD,MAAM,CAACxF,IAAI,CAAC4D,EAAE,CAC5C,CAAC;EACH,CAAC;EAED,MAAM6B,WAAW,GAAGZ,SAAS,CAACa,MAAM,CACjCZ,CAAC,IAAKA,CAAC,CAACa,MAAM,KAAK,CAACb,CAAC,CAACc,UAAU,IAAI,CAACd,CAAC,CAACe,UAAU,CACpD,CAAC;EAED,oBACE,IAAA7G,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;IAACP,KAAK,EAAEQ,MAAM,CAACiE,SAAU;IAAA/D,QAAA,GAC3BoC,WAAW,iBAAI,IAAAnF,WAAA,CAAAsD,GAAA,EAACf,YAAY;MAACC,OAAO,EAAE2C;IAAY,CAAE,CAAC,eAGtD,IAAAnF,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;MAACP,KAAK,EAAEQ,MAAM,CAACkE,UAAW;MAAAhE,QAAA,gBAC7B,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAqH,SAAS;QACR3E,KAAK,EAAEQ,MAAM,CAACoE,SAAU;QACxBC,KAAK,EAAExB,IAAK;QACZyB,YAAY,EAAExB,OAAQ;QACtByB,WAAW,EAAC,qBAAgB;QAC5BC,oBAAoB,EAAEC,oBAAU,CAACC,SAAU;QAC3CC,QAAQ,EAAE,CAACtB,eAAgB;QAC3BuB,eAAe,EAAEtB,OAAQ;QACzBuB,aAAa,EAAC,MAAM;QACpBC,MAAM,EAAC;MAAyB,CACjC,CAAC,eACF,IAAA3H,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;QACflB,KAAK,EAAE,CAACQ,MAAM,CAAC+E,aAAa,EAAE1B,eAAe,IAAIrD,MAAM,CAACgF,cAAc,CAAE;QACxEvF,OAAO,EAAE6D,OAAQ;QACjB2B,QAAQ,EAAE5B,eAAgB;QAC1ByB,MAAM,EAAC,sBAAsB;QAAA5E,QAAA,eAE7B,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;UAACZ,KAAK,EAAEQ,MAAM,CAACkF,iBAAkB;UAAAhF,QAAA,EACnCmC,IAAI,KAAK,SAAS,GAAG,GAAG,GAAG;QAAS,CACjC;MAAC,CACS,CAAC;IAAA,CACf,CAAC,eACP,IAAAlF,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;MACflB,KAAK,EAAE,CAACQ,MAAM,CAACmF,cAAc,EAAE9B,eAAe,IAAIrD,MAAM,CAACgF,cAAc,CAAE;MACzEvF,OAAO,EAAE8D,eAAgB;MACzB0B,QAAQ,EAAE5B,eAAgB;MAC1ByB,MAAM,EAAC,+BAA+B;MAAA5E,QAAA,eAEtC,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;QAACZ,KAAK,EAAEQ,MAAM,CAACoF,kBAAmB;QAAAlF,QAAA,EAAC;MAExC,CAAM;IAAC,CACS,CAAC,EAClBkD,WAAW,iBACV,IAAAjG,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;MAACZ,KAAK,EAAEQ,MAAM,CAACqF,aAAc;MAAAnF,QAAA,GAAC,aACtB,EAAC9C,mBAAmB,EAAC,0DAElC;IAAA,CAAM,CACP,eAGD,IAAAD,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;MAACP,KAAK,EAAEQ,MAAM,CAACsF,aAAc;MAAApF,QAAA,GAC/B8C,SAAS,CAAC5B,GAAG,CAAE6B,CAAC,IAAK;QACpB,MAAMsC,QAAQ,GAAG,CAACtC,CAAC,CAACc,UAAU,GAC1BU,oBAAU,CAACC,SAAS,GACpBzB,CAAC,CAACe,UAAU,GACVS,oBAAU,CAACe,OAAO,GAClBf,oBAAU,CAACxC,OAAO;QACxB,oBACE,IAAA9E,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;UAAYP,KAAK,EAAEQ,MAAM,CAACyF,YAAa;UAAAvF,QAAA,gBAC1C,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAiD,IAAI;YAACP,KAAK,EAAE,CAACQ,MAAM,CAAC0F,WAAW,EAAE;cAAEC,eAAe,EAAEJ;YAAS,CAAC;UAAE,CAAE,CAAC,eACpE,IAAApI,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAAC4F,aAAc;YAAA1F,QAAA,EAAE+C,CAAC,CAACC;UAAK,CAAO,CAAC;QAAA,GAF1CD,CAAC,CAAClB,EAGP,CAAC;MAEX,CAAC,CAAC,EACDiB,SAAS,CAACtE,MAAM,KAAK,CAAC,iBACrB,IAAAvB,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;QAACZ,KAAK,EAAEQ,MAAM,CAAC6F,SAAU;QAAA3F,QAAA,EAAC;MAAgC,CAAM,CACtE;IAAA,CACG,CAAC,EACN0D,WAAW,CAACxC,GAAG,CAAE6B,CAAC,iBACjB,IAAA9F,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;MAAYZ,KAAK,EAAEQ,MAAM,CAAC8F,cAAe;MAAA5F,QAAA,GAC3C+C,CAAC,CAACC,KAAK,EAAC,IAAE,EAACD,CAAC,CAACa,MAAM;IAAA,GADXb,CAAC,CAAClB,EAEP,CACP,CAAC,EAGDK,SAAS,IAAID,SAAS,CAACzD,MAAM,KAAK,CAAC,iBAClC,IAAAvB,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;MAACZ,KAAK,EAAEQ,MAAM,CAAC6F,SAAU;MAAA3F,QAAA,EAAC;IAG/B,CAAM,CACP,EACAiC,SAAS,CAACf,GAAG,CAAEjD,IAAI,IAAK;MACvB,MAAMM,QAAQ,GAAGP,YAAY,CAACC,IAAI,CAAC;MACnC,oBACE,IAAAhB,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;QAAeP,KAAK,EAAEQ,MAAM,CAAC+F,WAAY;QAACjB,MAAM,EAAE,qBAAqB3G,IAAI,CAAC4D,EAAE,EAAG;QAAA7B,QAAA,gBACpF,IAAA/C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAiD,IAAI;UAACP,KAAK,EAAEQ,MAAM,CAACgG,YAAa;UAAA9F,QAAA,gBAC/B,IAAA/C,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAACM,YAAa;YAAC2F,aAAa,EAAE,CAAE;YAAA/F,QAAA,GAChD/B,IAAI,CAACsF,QAAQ,GAAG,IAAI,GAAG,EAAE,EACzBtF,IAAI,CAAC0E,IAAI;UAAA,CACN,CAAC,eACP,IAAA1F,WAAA,CAAA2C,IAAA,EAAChD,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAACkG,YAAa;YAAAhG,QAAA,GAC9B7C,OAAO,CAACc,IAAI,CAACgI,SAAS,CAAC,EACvBhI,IAAI,CAACsF,QAAQ,GACV,2BAA2B,GAC3B,MAAM1F,WAAW,CAACI,IAAI,CAACiI,SAAS,CAAC,MAAMhI,MAAM,CAACiI,IAAI,CAAClI,IAAI,CAACG,OAAO,CAAC,CAACgI,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,EAC3F7H,QAAQ,GAAG,CAAC,GAAG,QAAQA,QAAQ,EAAE,GAAG,EAAE;UAAA,CACnC,CAAC;QAAA,CACH,CAAC,EACN,CAACN,IAAI,CAACsF,QAAQ,iBACb,IAAAtG,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;UACflB,KAAK,EAAE,CAACQ,MAAM,CAACuG,SAAS,EAAElE,IAAI,IAAIrC,MAAM,CAACgF,cAAc,CAAE;UACzDvF,OAAO,EAAEA,CAAA,KAAM+D,OAAO,CAACrF,IAAI,EAAE,MAAM,CAAE;UACrC8G,QAAQ,EAAE5C,IAAI,KAAK,IAAK;UAAAnC,QAAA,eAExB,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAACwG,aAAc;YAAAtG,QAAA,EAAC;UAAO,CAAM;QAAC,CACjC,CACnB,eACD,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;UACflB,KAAK,EAAE,CAACQ,MAAM,CAACuG,SAAS,EAAElE,IAAI,IAAIrC,MAAM,CAACgF,cAAc,CAAE;UACzDvF,OAAO,EAAEA,CAAA,KAAM+D,OAAO,CAACrF,IAAI,EAAE,QAAQ,CAAE;UACvC8G,QAAQ,EAAE5C,IAAI,KAAK,IAAK;UAAAnC,QAAA,eAExB,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAACwG,aAAc;YAAAtG,QAAA,EAC/B/B,IAAI,CAACsF,QAAQ,GAAG,SAAS,GAAG;UAAG,CAC5B;QAAC,CACS,CAAC,eACnB,IAAAtG,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAA4D,gBAAgB;UACflB,KAAK,EAAEQ,MAAM,CAACyG,YAAa;UAC3BhH,OAAO,EAAEA,CAAA,KAAMiE,MAAM,CAACvF,IAAI,CAAE;UAC5B0C,OAAO,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,MAAM,EAAE,CAAC;YAAEC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE;UAAE,CAAE;UAAAf,QAAA,eAElD,IAAA/C,WAAA,CAAAsD,GAAA,EAAC3D,YAAA,CAAAsD,IAAI;YAACZ,KAAK,EAAEQ,MAAM,CAAC0G,gBAAiB;YAAAxG,QAAA,EAAC;UAAC,CAAM;QAAC,CAC9B,CAAC;MAAA,GAtCV/B,IAAI,CAAC4D,EAuCV,CAAC;IAEX,CAAC,CAAC;EAAA,CACE,CAAC;AAEX;AAEA,MAAM/B,MAAM,GAAG2G,uBAAU,CAACC,MAAM,CAAC;EAC/B3C,SAAS,EAAE;IACT4C,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACD5C,UAAU,EAAE;IACV6C,aAAa,EAAE,KAAK;IACpBD,GAAG,EAAE;EACP,CAAC;EACD1C,SAAS,EAAE;IACT4C,IAAI,EAAE,CAAC;IACPrB,eAAe,EAAElB,oBAAU,CAACwC,KAAK;IACjCC,WAAW,EAAEzC,oBAAU,CAAC0C,MAAM;IAC9BC,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,CAAC;IACfC,KAAK,EAAE7C,oBAAU,CAAClF,IAAI;IACtBgI,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,CAAC;IAClBC,QAAQ,EAAE;EACZ,CAAC;EACD1C,aAAa,EAAE;IACbY,eAAe,EAAElB,oBAAU,CAACiD,OAAO;IACnCL,YAAY,EAAE,CAAC;IACfE,iBAAiB,EAAE,EAAE;IACrBI,cAAc,EAAE;EAClB,CAAC;EACDzC,iBAAiB,EAAE;IACjBoC,KAAK,EAAE,SAAS;IAChBG,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE;EACjB,CAAC;EACD1C,cAAc,EAAE;IACd+B,WAAW,EAAEzC,oBAAU,CAAC0C,MAAM;IAC9BC,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,CAAC;IACfG,eAAe,EAAE,CAAC;IAClBM,UAAU,EAAE;EACd,CAAC;EACD1C,kBAAkB,EAAE;IAClBkC,KAAK,EAAE7C,oBAAU,CAACsD,aAAa;IAC/BN,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE;EACjB,CAAC;EACD7C,cAAc,EAAE;IACdgD,OAAO,EAAE;EACX,CAAC;EACD3C,aAAa,EAAE;IACbiC,KAAK,EAAE7C,oBAAU,CAACxC,OAAO;IACzBwF,QAAQ,EAAE;EACZ,CAAC;EACDnC,aAAa,EAAE;IACbyB,aAAa,EAAE,KAAK;IACpBkB,QAAQ,EAAE,MAAM;IAChBnB,GAAG,EAAE,CAAC;IACNoB,SAAS,EAAE;EACb,CAAC;EACDzC,YAAY,EAAE;IACZsB,aAAa,EAAE,KAAK;IACpBe,UAAU,EAAE,QAAQ;IACpBhB,GAAG,EAAE,CAAC;IACNnB,eAAe,EAAElB,oBAAU,CAAC0D,IAAI;IAChCjB,WAAW,EAAEzC,oBAAU,CAAC0C,MAAM;IAC9BC,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,EAAE;IAChBE,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACD9B,WAAW,EAAE;IACX0C,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACThB,YAAY,EAAE;EAChB,CAAC;EACDzB,aAAa,EAAE;IACb0B,KAAK,EAAE7C,oBAAU,CAACsD,aAAa;IAC/BN,QAAQ,EAAE;EACZ,CAAC;EACD3B,cAAc,EAAE;IACdwB,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE;EACZ,CAAC;EACD5B,SAAS,EAAE;IACTyB,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE,EAAE;IACZS,SAAS,EAAE;EACb,CAAC;EACDnC,WAAW,EAAE;IACXgB,aAAa,EAAE,KAAK;IACpBe,UAAU,EAAE,QAAQ;IACpBnC,eAAe,EAAElB,oBAAU,CAAC0D,IAAI;IAChCjB,WAAW,EAAEzC,oBAAU,CAAC0C,MAAM;IAC9BC,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,CAAC;IACfR,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACDd,YAAY,EAAE;IACZgB,IAAI,EAAE,CAAC;IACPsB,QAAQ,EAAE;EACZ,CAAC;EACDhI,YAAY,EAAE;IACZgH,KAAK,EAAE7C,oBAAU,CAAClF,IAAI;IACtBkI,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE;EACd,CAAC;EACD1B,YAAY,EAAE;IACZoB,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE,EAAE;IACZS,SAAS,EAAE;EACb,CAAC;EACD3B,SAAS,EAAE;IACTW,WAAW,EAAEzC,oBAAU,CAACiD,OAAO;IAC/BN,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,CAAC;IACfE,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACDhB,aAAa,EAAE;IACbc,KAAK,EAAE7C,oBAAU,CAACiD,OAAO;IACzBD,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE;EACd,CAAC;EACDnB,YAAY,EAAE;IACZc,iBAAiB,EAAE;EACrB,CAAC;EACDb,gBAAgB,EAAE;IAChBY,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE;EACZ,CAAC;EACDxH,YAAY,EAAE;IACZ0F,eAAe,EAAElB,oBAAU,CAAC0D,IAAI;IAChCjB,WAAW,EAAEzC,oBAAU,CAAC8D,YAAY;IACpCnB,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,CAAC;IACfR,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACD3G,gBAAgB,EAAE;IAChB4G,aAAa,EAAE,KAAK;IACpBY,cAAc,EAAE,eAAe;IAC/BG,UAAU,EAAE;EACd,CAAC;EACDzH,YAAY,EAAE;IACZiH,KAAK,EAAE7C,oBAAU,CAAClF,IAAI;IACtBkI,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE,KAAK;IACjBZ,IAAI,EAAE;EACR,CAAC;EACD9F,cAAc,EAAE;IACdoG,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE;EACZ,CAAC;EACDlG,aAAa,EAAE;IACbuF,GAAG,EAAE;EACP,CAAC;EACD3F,WAAW,EAAE;IACXmG,KAAK,EAAE7C,oBAAU,CAACe,OAAO;IACzBiC,QAAQ,EAAE;EACZ,CAAC;EACDhG,cAAc,EAAE;IACd6F,KAAK,EAAE7C,oBAAU,CAACxC;EACpB,CAAC;EACDH,aAAa,EAAE;IACbwF,KAAK,EAAE7C,oBAAU,CAACC,SAAS;IAC3B+C,QAAQ,EAAE,EAAE;IACZe,WAAW,EAAE;EACf;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TimeMachineModal = TimeMachineModal;
7
+ exports.TimeMachineToolView = TimeMachineToolView;
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _TimeMachineBody = require("./TimeMachineBody");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ /**
13
+ * TimeMachineModal — bottom-sheet wrapper rendered by FloatingDevTools when
14
+ * the Time Machine tool is opened. TimeMachineToolView is the inline variant
15
+ * for Buoy Desktop.
16
+ */
17
+
18
+ function Header() {
19
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
20
+ style: styles.header,
21
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
22
+ style: styles.headerTitle,
23
+ children: "TIME MACHINE"
24
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
25
+ style: styles.headerSubtitle,
26
+ children: "snapshot & restore app state"
27
+ })]
28
+ });
29
+ }
30
+ function TimeMachineModal({
31
+ visible,
32
+ onClose,
33
+ onBack: _onBack,
34
+ onMinimize,
35
+ persistenceKey
36
+ }) {
37
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.JsModal, {
38
+ visible: visible,
39
+ onClose: onClose,
40
+ onMinimize: onMinimize,
41
+ persistenceKey: persistenceKey,
42
+ header: {
43
+ showToggleButton: true,
44
+ customContent: /*#__PURE__*/(0, _jsxRuntime.jsx)(Header, {})
45
+ },
46
+ enablePersistence: true,
47
+ initialMode: "bottomSheet",
48
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TimeMachineBody.TimeMachineBody, {})
49
+ });
50
+ }
51
+
52
+ /** Inline variant (no modal chrome) — used by Buoy Desktop. */
53
+ function TimeMachineToolView() {
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TimeMachineBody.TimeMachineBody, {});
55
+ }
56
+ const styles = _reactNative.StyleSheet.create({
57
+ header: {
58
+ flexDirection: "row",
59
+ alignItems: "baseline",
60
+ gap: 8,
61
+ paddingHorizontal: 4
62
+ },
63
+ headerTitle: {
64
+ color: _sharedUi.buoyColors.text,
65
+ fontSize: 13,
66
+ fontWeight: "700",
67
+ letterSpacing: 1
68
+ },
69
+ headerSubtitle: {
70
+ color: _sharedUi.buoyColors.textMuted,
71
+ fontSize: 10
72
+ }
73
+ });
74
+ //# sourceMappingURL=TimeMachineModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_sharedUi","_TimeMachineBody","_jsxRuntime","Header","jsxs","View","style","styles","header","children","jsx","Text","headerTitle","headerSubtitle","TimeMachineModal","visible","onClose","onBack","_onBack","onMinimize","persistenceKey","JsModal","showToggleButton","customContent","enablePersistence","initialMode","TimeMachineBody","TimeMachineToolView","StyleSheet","create","flexDirection","alignItems","gap","paddingHorizontal","color","buoyColors","text","fontSize","fontWeight","letterSpacing","textMuted"],"sourceRoot":"../../../src","sources":["components/TimeMachineModal.tsx"],"mappings":";;;;;;;AAKA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AAAoD,IAAAG,WAAA,GAAAH,OAAA;AARpD;AACA;AACA;AACA;AACA;;AAcA,SAASI,MAAMA,CAAA,EAAG;EAChB,oBACE,IAAAD,WAAA,CAAAE,IAAA,EAACN,YAAA,CAAAO,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,MAAO;IAAAC,QAAA,gBACzB,IAAAP,WAAA,CAAAQ,GAAA,EAACZ,YAAA,CAAAa,IAAI;MAACL,KAAK,EAAEC,MAAM,CAACK,WAAY;MAAAH,QAAA,EAAC;IAAY,CAAM,CAAC,eACpD,IAAAP,WAAA,CAAAQ,GAAA,EAACZ,YAAA,CAAAa,IAAI;MAACL,KAAK,EAAEC,MAAM,CAACM,cAAe;MAAAJ,QAAA,EAAC;IAA4B,CAAM,CAAC;EAAA,CACnE,CAAC;AAEX;AAEO,SAASK,gBAAgBA,CAAC;EAC/BC,OAAO;EACPC,OAAO;EACPC,MAAM,EAAEC,OAAO;EACfC,UAAU;EACVC;AACqB,CAAC,EAAE;EACxB,oBACE,IAAAlB,WAAA,CAAAQ,GAAA,EAACV,SAAA,CAAAqB,OAAO;IACNN,OAAO,EAAEA,OAAQ;IACjBC,OAAO,EAAEA,OAAQ;IACjBG,UAAU,EAAEA,UAAW;IACvBC,cAAc,EAAEA,cAAe;IAC/BZ,MAAM,EAAE;MACNc,gBAAgB,EAAE,IAAI;MACtBC,aAAa,eAAE,IAAArB,WAAA,CAAAQ,GAAA,EAACP,MAAM,IAAE;IAC1B,CAAE;IACFqB,iBAAiB;IACjBC,WAAW,EAAC,aAAa;IAAAhB,QAAA,eAEzB,IAAAP,WAAA,CAAAQ,GAAA,EAACT,gBAAA,CAAAyB,eAAe,IAAE;EAAC,CACZ,CAAC;AAEd;;AAEA;AACO,SAASC,mBAAmBA,CAAA,EAAG;EACpC,oBAAO,IAAAzB,WAAA,CAAAQ,GAAA,EAACT,gBAAA,CAAAyB,eAAe,IAAE,CAAC;AAC5B;AAEA,MAAMnB,MAAM,GAAGqB,uBAAU,CAACC,MAAM,CAAC;EAC/BrB,MAAM,EAAE;IACNsB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,UAAU;IACtBC,GAAG,EAAE,CAAC;IACNC,iBAAiB,EAAE;EACrB,CAAC;EACDrB,WAAW,EAAE;IACXsB,KAAK,EAAEC,oBAAU,CAACC,IAAI;IACtBC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE;EACjB,CAAC;EACD1B,cAAc,EAAE;IACdqB,KAAK,EAAEC,oBAAU,CAACK,SAAS;IAC3BH,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSnapshotProviders = useSnapshotProviders;
7
+ exports.useTimeMachineState = useTimeMachineState;
8
+ var _react = require("react");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _timeMachineStore = require("../store/timeMachineStore");
11
+ function useTimeMachineState() {
12
+ return (0, _react.useSyncExternalStore)(_timeMachineStore.timeMachineStore.subscribe, () => _timeMachineStore.timeMachineStore.getState());
13
+ }
14
+
15
+ /** Registered snapshot providers (query registers late, hence the subscribe). */
16
+ function useSnapshotProviders() {
17
+ const [providers, setProviders] = (0, _react.useState)(_sharedUi.getStateSnapshotProviders);
18
+ (0, _react.useEffect)(() => {
19
+ setProviders((0, _sharedUi.getStateSnapshotProviders)());
20
+ return (0, _sharedUi.subscribeToStateSnapshotProviders)(() => setProviders((0, _sharedUi.getStateSnapshotProviders)()));
21
+ }, []);
22
+ return providers;
23
+ }
24
+ //# sourceMappingURL=useTimeMachine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_sharedUi","_timeMachineStore","useTimeMachineState","useSyncExternalStore","timeMachineStore","subscribe","getState","useSnapshotProviders","providers","setProviders","useState","getStateSnapshotProviders","useEffect","subscribeToStateSnapshotProviders"],"sourceRoot":"../../../src","sources":["hooks/useTimeMachine.ts"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAKA,IAAAE,iBAAA,GAAAF,OAAA;AAGO,SAASG,mBAAmBA,CAAA,EAAqB;EACtD,OAAO,IAAAC,2BAAoB,EAACC,kCAAgB,CAACC,SAAS,EAAE,MACtDD,kCAAgB,CAACE,QAAQ,CAAC,CAC5B,CAAC;AACH;;AAEA;AACO,SAASC,oBAAoBA,CAAA,EAA4B;EAC9D,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAACC,mCAAyB,CAAC;EACrE,IAAAC,gBAAS,EAAC,MAAM;IACdH,YAAY,CAAC,IAAAE,mCAAyB,EAAC,CAAC,CAAC;IACzC,OAAO,IAAAE,2CAAiC,EAAC,MACvCJ,YAAY,CAAC,IAAAE,mCAAyB,EAAC,CAAC,CAC1C,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN,OAAOH,SAAS;AAClB","ignoreList":[]}