rivet-design 0.16.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/README.npm.md +8 -2
- package/bin/rivet.js +15 -7
- package/dist/agent-variants/variantContext.d.ts +1 -0
- package/dist/agent-variants/variantContext.d.ts.map +1 -1
- package/dist/agent-variants/variantContext.js +1 -1
- package/dist/agent-variants/variantContext.js.map +1 -1
- package/dist/cli/commandNames.d.ts +2 -0
- package/dist/cli/commandNames.d.ts.map +1 -1
- package/dist/cli/commandNames.js +16 -1
- package/dist/cli/commandNames.js.map +1 -1
- package/dist/cli/commands/libraryOpen.d.ts +10 -0
- package/dist/cli/commands/libraryOpen.d.ts.map +1 -0
- package/dist/cli/commands/libraryOpen.js +126 -0
- package/dist/cli/commands/libraryOpen.js.map +1 -0
- package/dist/cli/commands/open.d.ts +39 -0
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +35 -21
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +33 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +34 -3
- package/dist/cli/router.js.map +1 -1
- package/dist/cli/serverHandshake.d.ts +7 -5
- package/dist/cli/serverHandshake.d.ts.map +1 -1
- package/dist/cli/serverHandshake.js +16 -12
- package/dist/cli/serverHandshake.js.map +1 -1
- package/dist/install/installationChannel.d.ts +4 -0
- package/dist/install/installationChannel.d.ts.map +1 -0
- package/dist/install/installationChannel.js +13 -0
- package/dist/install/installationChannel.js.map +1 -0
- package/dist/library/HubClient.d.ts +12 -0
- package/dist/library/HubClient.d.ts.map +1 -0
- package/dist/library/HubClient.js +109 -0
- package/dist/library/HubClient.js.map +1 -0
- package/dist/library/HubServer.d.ts +16 -0
- package/dist/library/HubServer.d.ts.map +1 -0
- package/dist/library/HubServer.js +95 -0
- package/dist/library/HubServer.js.map +1 -0
- package/dist/library/StaticPreviewServer.d.ts +7 -0
- package/dist/library/StaticPreviewServer.d.ts.map +1 -0
- package/dist/library/StaticPreviewServer.js +18 -0
- package/dist/library/StaticPreviewServer.js.map +1 -0
- package/dist/library/http.d.ts +11 -0
- package/dist/library/http.d.ts.map +1 -0
- package/dist/library/http.js +31 -0
- package/dist/library/http.js.map +1 -0
- package/dist/library/importFiles.d.ts +18 -0
- package/dist/library/importFiles.d.ts.map +1 -0
- package/dist/library/importFiles.js +184 -0
- package/dist/library/importFiles.js.map +1 -0
- package/dist/proxy-middleware/preview-bridge.d.ts.map +1 -1
- package/dist/proxy-middleware/preview-bridge.js +6 -16
- package/dist/proxy-middleware/preview-bridge.js.map +1 -1
- package/dist/routes/account.d.ts +4 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +53 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/agentVariants.d.ts +2 -13
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +53 -79
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/library/app.d.ts +8 -0
- package/dist/routes/library/app.d.ts.map +1 -0
- package/dist/routes/library/app.js +26 -0
- package/dist/routes/library/app.js.map +1 -0
- package/dist/routes/library/index.d.ts +5 -0
- package/dist/routes/library/index.d.ts.map +1 -0
- package/dist/routes/library/index.js +32 -0
- package/dist/routes/library/index.js.map +1 -0
- package/dist/routes/library/middleware.d.ts +9 -0
- package/dist/routes/library/middleware.d.ts.map +1 -0
- package/dist/routes/library/middleware.js +58 -0
- package/dist/routes/library/middleware.js.map +1 -0
- package/dist/routes/library/navigation.d.ts +5 -0
- package/dist/routes/library/navigation.d.ts.map +1 -0
- package/dist/routes/library/navigation.js +39 -0
- package/dist/routes/library/navigation.js.map +1 -0
- package/dist/routes/library/projects.d.ts +5 -0
- package/dist/routes/library/projects.d.ts.map +1 -0
- package/dist/routes/library/projects.js +42 -0
- package/dist/routes/library/projects.js.map +1 -0
- package/dist/routes/library/schemas.d.ts +23 -0
- package/dist/routes/library/schemas.d.ts.map +1 -0
- package/dist/routes/library/schemas.js +10 -0
- package/dist/routes/library/schemas.js.map +1 -0
- package/dist/routes/library/staticPreview.d.ts +4 -0
- package/dist/routes/library/staticPreview.d.ts.map +1 -0
- package/dist/routes/library/staticPreview.js +39 -0
- package/dist/routes/library/staticPreview.js.map +1 -0
- package/dist/routes/library/types.d.ts +22 -0
- package/dist/routes/library/types.d.ts.map +1 -0
- package/dist/routes/library/types.js +3 -0
- package/dist/routes/library/types.js.map +1 -0
- package/dist/routes/library/variants.d.ts +5 -0
- package/dist/routes/library/variants.d.ts.map +1 -0
- package/dist/routes/library/variants.js +35 -0
- package/dist/routes/library/variants.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -30
- package/dist/server.js.map +1 -1
- package/dist/services/HistoryReplayService.js +1 -1
- package/dist/services/HistoryReplayService.js.map +1 -1
- package/dist/services/HubDiscovery.d.ts +46 -0
- package/dist/services/HubDiscovery.d.ts.map +1 -0
- package/dist/services/HubDiscovery.js +58 -0
- package/dist/services/HubDiscovery.js.map +1 -0
- package/dist/services/HubNavigation.d.ts +36 -0
- package/dist/services/HubNavigation.d.ts.map +1 -0
- package/dist/services/HubNavigation.js +76 -0
- package/dist/services/HubNavigation.js.map +1 -0
- package/dist/services/ProjectCardPreviews.d.ts +27 -0
- package/dist/services/ProjectCardPreviews.d.ts.map +1 -0
- package/dist/services/ProjectCardPreviews.js +112 -0
- package/dist/services/ProjectCardPreviews.js.map +1 -0
- package/dist/services/ProjectFolderPicker.d.ts +20 -0
- package/dist/services/ProjectFolderPicker.d.ts.map +1 -0
- package/dist/services/ProjectFolderPicker.js +174 -0
- package/dist/services/ProjectFolderPicker.js.map +1 -0
- package/dist/services/ProjectImport.d.ts +13 -0
- package/dist/services/ProjectImport.d.ts.map +1 -0
- package/dist/services/ProjectImport.js +226 -0
- package/dist/services/ProjectImport.js.map +1 -0
- package/dist/services/ProjectLibrary.d.ts +74 -0
- package/dist/services/ProjectLibrary.d.ts.map +1 -0
- package/dist/services/ProjectLibrary.js +261 -0
- package/dist/services/ProjectLibrary.js.map +1 -0
- package/dist/services/ProjectMetadataStore.d.ts +6 -19
- package/dist/services/ProjectMetadataStore.d.ts.map +1 -1
- package/dist/services/ProjectMetadataStore.js +29 -147
- package/dist/services/ProjectMetadataStore.js.map +1 -1
- package/dist/services/ProjectRegistry.d.ts +80 -0
- package/dist/services/ProjectRegistry.d.ts.map +1 -0
- package/dist/services/ProjectRegistry.js +147 -0
- package/dist/services/ProjectRegistry.js.map +1 -0
- package/dist/services/ProjectRuntimeService.d.ts +18 -0
- package/dist/services/ProjectRuntimeService.d.ts.map +1 -0
- package/dist/services/ProjectRuntimeService.js +143 -0
- package/dist/services/ProjectRuntimeService.js.map +1 -0
- package/dist/services/ProjectScreenshotService.d.ts +15 -0
- package/dist/services/ProjectScreenshotService.d.ts.map +1 -0
- package/dist/services/ProjectScreenshotService.js +90 -0
- package/dist/services/ProjectScreenshotService.js.map +1 -0
- package/dist/services/ProjectStorage.d.ts +20 -0
- package/dist/services/ProjectStorage.d.ts.map +1 -0
- package/dist/services/ProjectStorage.js +41 -0
- package/dist/services/ProjectStorage.js.map +1 -0
- package/dist/services/StaticLibraryPreviews.d.ts +21 -0
- package/dist/services/StaticLibraryPreviews.d.ts.map +1 -0
- package/dist/services/StaticLibraryPreviews.js +61 -0
- package/dist/services/StaticLibraryPreviews.js.map +1 -0
- package/dist/services/TelemetryService.d.ts +7 -0
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +7 -1
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/TreeStore.d.ts +8 -3
- package/dist/services/TreeStore.d.ts.map +1 -1
- package/dist/services/TreeStore.js +39 -18
- package/dist/services/TreeStore.js.map +1 -1
- package/dist/services/VariantGenerationService.d.ts +5 -0
- package/dist/services/VariantGenerationService.d.ts.map +1 -1
- package/dist/services/VariantGenerationService.js +13 -1
- package/dist/services/VariantGenerationService.js.map +1 -1
- package/dist/services/VariantHistoryService.d.ts +18 -162
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +187 -45
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +3 -0
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +2 -0
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts +4 -0
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +6 -1
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -0
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +1 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/services/historyRoots.d.ts +14 -0
- package/dist/services/historyRoots.d.ts.map +1 -0
- package/dist/services/historyRoots.js +44 -0
- package/dist/services/historyRoots.js.map +1 -0
- package/dist/services/libraryErrors.d.ts +7 -0
- package/dist/services/libraryErrors.d.ts.map +1 -0
- package/dist/services/libraryErrors.js +14 -0
- package/dist/services/libraryErrors.js.map +1 -0
- package/dist/storage/library/BundleMetadataStore.d.ts +53 -0
- package/dist/storage/library/BundleMetadataStore.d.ts.map +1 -0
- package/dist/storage/library/BundleMetadataStore.js +317 -0
- package/dist/storage/library/BundleMetadataStore.js.map +1 -0
- package/dist/storage/library/CoordinatorRecords.d.ts +25 -0
- package/dist/storage/library/CoordinatorRecords.d.ts.map +1 -0
- package/dist/storage/library/CoordinatorRecords.js +84 -0
- package/dist/storage/library/CoordinatorRecords.js.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts +34 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.js +62 -0
- package/dist/storage/library/ProjectPreviewCache.js.map +1 -0
- package/dist/storage/library/ProjectRecords.d.ts +64 -0
- package/dist/storage/library/ProjectRecords.d.ts.map +1 -0
- package/dist/storage/library/ProjectRecords.js +139 -0
- package/dist/storage/library/ProjectRecords.js.map +1 -0
- package/dist/storage/library/database.d.ts +13 -0
- package/dist/storage/library/database.d.ts.map +1 -0
- package/dist/storage/library/database.js +106 -0
- package/dist/storage/library/database.js.map +1 -0
- package/dist/storage/library/migrations.d.ts +5 -0
- package/dist/storage/library/migrations.d.ts.map +1 -0
- package/dist/storage/library/migrations.js +61 -0
- package/dist/storage/library/migrations.js.map +1 -0
- package/dist/storage/library/schema/bundle.d.ts +734 -0
- package/dist/storage/library/schema/bundle.d.ts.map +1 -0
- package/dist/storage/library/schema/bundle.js +79 -0
- package/dist/storage/library/schema/bundle.js.map +1 -0
- package/dist/storage/library/schema/coordinator.d.ts +72 -0
- package/dist/storage/library/schema/coordinator.d.ts.map +1 -0
- package/dist/storage/library/schema/coordinator.js +12 -0
- package/dist/storage/library/schema/coordinator.js.map +1 -0
- package/dist/storage/library/schema/registry.d.ts +198 -0
- package/dist/storage/library/schema/registry.d.ts.map +1 -0
- package/dist/storage/library/schema/registry.js +32 -0
- package/dist/storage/library/schema/registry.js.map +1 -0
- package/dist/storage/library/sourcePresentation.d.ts +3 -0
- package/dist/storage/library/sourcePresentation.d.ts.map +1 -0
- package/dist/storage/library/sourcePresentation.js +70 -0
- package/dist/storage/library/sourcePresentation.js.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts +41 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js +120 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js.map +1 -0
- package/dist/storage/project-metadata/database.d.ts +12 -0
- package/dist/storage/project-metadata/database.d.ts.map +1 -0
- package/dist/storage/project-metadata/database.js +79 -0
- package/dist/storage/project-metadata/database.js.map +1 -0
- package/dist/{services/projectMetadataMigrations.d.ts → storage/project-metadata/migrations.d.ts} +1 -1
- package/dist/storage/project-metadata/migrations.d.ts.map +1 -0
- package/dist/{services/projectMetadataMigrations.js → storage/project-metadata/migrations.js} +1 -1
- package/dist/storage/project-metadata/migrations.js.map +1 -0
- package/dist/storage/project-metadata/schema.d.ts +288 -0
- package/dist/storage/project-metadata/schema.d.ts.map +1 -0
- package/dist/storage/project-metadata/schema.js +35 -0
- package/dist/storage/project-metadata/schema.js.map +1 -0
- package/dist/types/account.d.ts +8 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/project-library.d.ts +28 -0
- package/dist/types/project-library.d.ts.map +1 -0
- package/dist/types/project-library.js +3 -0
- package/dist/types/project-library.js.map +1 -0
- package/dist/types/variant-history.d.ts +173 -0
- package/dist/types/variant-history.d.ts.map +1 -0
- package/dist/types/variant-history.js +3 -0
- package/dist/types/variant-history.js.map +1 -0
- package/dist/utils/htmlDocument.d.ts +13 -0
- package/dist/utils/htmlDocument.d.ts.map +1 -0
- package/dist/utils/htmlDocument.js +42 -0
- package/dist/utils/htmlDocument.js.map +1 -0
- package/dist/utils/windowPlacement.d.ts +20 -0
- package/dist/utils/windowPlacement.d.ts.map +1 -0
- package/dist/utils/windowPlacement.js +20 -0
- package/dist/utils/windowPlacement.js.map +1 -0
- package/package.json +10 -3
- package/scripts/verify-node-version.cjs +9 -6
- package/src/ui/dist/assets/LibraryApp-B2MZyxIp.js +16 -0
- package/src/ui/dist/assets/main-1IMq5Huu.css +1 -0
- package/src/ui/dist/assets/main-BId3Sa7r.js +438 -0
- package/src/ui/dist/favicon-16.png +0 -0
- package/src/ui/dist/favicon-32.png +0 -0
- package/src/ui/dist/favicon.ico +0 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/services/projectMetadataMigrations.d.ts.map +0 -1
- package/dist/services/projectMetadataMigrations.js.map +0 -1
- package/src/ui/dist/assets/main-BjwDfDy8.js +0 -423
- package/src/ui/dist/assets/main-Ct1aZend.css +0 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
export type VariantHistoryStatus = 'completed' | 'committed' | 'rejected' | 'cancelled' | 'removed';
|
|
2
|
+
export type VariantHistoryKind = 'diff' | 'project-created';
|
|
3
|
+
export type VariantHistoryPreview = {
|
|
4
|
+
kind: 'static';
|
|
5
|
+
rootPath: 'files';
|
|
6
|
+
entryPath: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: 'dev-server';
|
|
9
|
+
rootPath: 'files';
|
|
10
|
+
command: {
|
|
11
|
+
cwd: string;
|
|
12
|
+
packageManager: string;
|
|
13
|
+
script: string;
|
|
14
|
+
};
|
|
15
|
+
runnablePath?: string;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'none';
|
|
18
|
+
reason: 'diff_only' | 'missing_entry' | 'unsupported';
|
|
19
|
+
};
|
|
20
|
+
export type PersistVariantPreview = {
|
|
21
|
+
kind: 'static';
|
|
22
|
+
entryPath: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'dev-server';
|
|
25
|
+
command: {
|
|
26
|
+
cwd: string;
|
|
27
|
+
packageManager: string;
|
|
28
|
+
script: string;
|
|
29
|
+
};
|
|
30
|
+
runnablePath?: string;
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'none';
|
|
33
|
+
reason: 'diff_only' | 'missing_entry' | 'unsupported';
|
|
34
|
+
};
|
|
35
|
+
/** Pointer to the variant's exact tree in the project's {@link TreeStore}
|
|
36
|
+
* (`.rivet/store.git`). Additive alongside the legacy artifact/preview
|
|
37
|
+
* fields during the dual-write transition — see
|
|
38
|
+
* docs/variant-history-tree-store-design.md. */
|
|
39
|
+
export interface VariantTreePointer {
|
|
40
|
+
ref: string;
|
|
41
|
+
/** For diffs, replay materialization, and reflog. */
|
|
42
|
+
commitSha: string;
|
|
43
|
+
/** Content-addressed key for the static extraction cache. */
|
|
44
|
+
treeSha: string;
|
|
45
|
+
}
|
|
46
|
+
/** The session base snapshot. ALWAYS the apply base: `diff(base, tree)`
|
|
47
|
+
* yields the full variant state to apply to the working tree — including
|
|
48
|
+
* for forked (Vary) variants, whose parent lineage is comparison-only. */
|
|
49
|
+
export interface VariantBasePointer {
|
|
50
|
+
ref: string;
|
|
51
|
+
commitSha: string;
|
|
52
|
+
}
|
|
53
|
+
/** Port-parameterized dev-server invocation captured at persist time from
|
|
54
|
+
* the resolution the live preview actually booted with. The literal command
|
|
55
|
+
* can't be stored verbatim — the live resolution bakes the allocated port
|
|
56
|
+
* into args/env, which would be dead at replay — so `${PORT}` placeholders
|
|
57
|
+
* mark where replay substitutes its own allocated port. */
|
|
58
|
+
export interface DevServerRecipe {
|
|
59
|
+
/** Relative to the snapshot root ('.' for the root itself). */
|
|
60
|
+
cwd: string;
|
|
61
|
+
cmd: string;
|
|
62
|
+
argsTemplate: string[];
|
|
63
|
+
envTemplate?: Record<string, string>;
|
|
64
|
+
}
|
|
65
|
+
export type VariantServeSpec = {
|
|
66
|
+
kind: 'static';
|
|
67
|
+
entryPath: string;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'dev-server';
|
|
70
|
+
recipe: DevServerRecipe;
|
|
71
|
+
};
|
|
72
|
+
export type VariantHistoryArtifact = {
|
|
73
|
+
kind: 'diff';
|
|
74
|
+
diffPath: 'diff.patch';
|
|
75
|
+
filesPath?: 'files';
|
|
76
|
+
} | {
|
|
77
|
+
kind: 'project';
|
|
78
|
+
filesPath: 'files';
|
|
79
|
+
runnablePath?: string;
|
|
80
|
+
};
|
|
81
|
+
/** Where the persisted DESIGN.md came from. Slug entries point at a curated
|
|
82
|
+
* catalog inspiration; markdown entries carry user-supplied / Agent Browser
|
|
83
|
+
* extracted content. `label` is always human-readable for the history UI. */
|
|
84
|
+
export interface VariantDesignSource {
|
|
85
|
+
kind: 'slug' | 'markdown';
|
|
86
|
+
label: string;
|
|
87
|
+
/** Catalog slug — present only when `kind === 'slug'`. */
|
|
88
|
+
slug?: string;
|
|
89
|
+
}
|
|
90
|
+
/** A public deployment of this variant to the Prototype Preview Host. Recorded
|
|
91
|
+
* so the UI can re-show ("Copy link") an existing share URL instead of
|
|
92
|
+
* re-building, and so repeated deploys accrue rather than clobber. */
|
|
93
|
+
export interface VariantDeployment {
|
|
94
|
+
deployId: string;
|
|
95
|
+
shareUrl: string;
|
|
96
|
+
deployedAt: string;
|
|
97
|
+
}
|
|
98
|
+
export interface VariantCanvasDeployment {
|
|
99
|
+
deployId: string;
|
|
100
|
+
shareUrl: string;
|
|
101
|
+
deployedAt: string;
|
|
102
|
+
variants: Array<{
|
|
103
|
+
variantId: string;
|
|
104
|
+
deployId: string;
|
|
105
|
+
shareUrl: string;
|
|
106
|
+
}>;
|
|
107
|
+
}
|
|
108
|
+
export interface VariantHistoryManifest {
|
|
109
|
+
schemaVersion: number;
|
|
110
|
+
variantId: string;
|
|
111
|
+
sessionId: string;
|
|
112
|
+
requestId?: string;
|
|
113
|
+
label: string;
|
|
114
|
+
brief: string;
|
|
115
|
+
sessionPrompt: string;
|
|
116
|
+
/** 1–2 word label for the run's intent (agent-supplied or heuristic). */
|
|
117
|
+
runLabel?: string;
|
|
118
|
+
projectKind: 'existing' | 'fresh';
|
|
119
|
+
status: VariantHistoryStatus;
|
|
120
|
+
createdAt: string;
|
|
121
|
+
statusChangedAt: string;
|
|
122
|
+
baseSha?: string;
|
|
123
|
+
destinationPath?: string;
|
|
124
|
+
changedFilesCount: number;
|
|
125
|
+
artifact: VariantHistoryArtifact;
|
|
126
|
+
preview: VariantHistoryPreview;
|
|
127
|
+
/** Tree-store pointers + serve contract. Optional additions on the current
|
|
128
|
+
* schemaVersion (readManifest hard-rejects version mismatches, so these
|
|
129
|
+
* MUST stay additive); absent on legacy entries. */
|
|
130
|
+
tree?: VariantTreePointer;
|
|
131
|
+
base?: VariantBasePointer;
|
|
132
|
+
/** Forked (Vary) variants: the parent variant's commit — for comparison
|
|
133
|
+
* diffs ("what did this vary change?"), never for apply. */
|
|
134
|
+
parent?: {
|
|
135
|
+
ref: string;
|
|
136
|
+
commitSha: string;
|
|
137
|
+
};
|
|
138
|
+
/** Source direction for forked (Vary) variants. Used by the UI to collapse
|
|
139
|
+
* superseded parent runs without losing the derived rows. */
|
|
140
|
+
parentVariant?: {
|
|
141
|
+
sessionId: string;
|
|
142
|
+
variantId: string;
|
|
143
|
+
};
|
|
144
|
+
serve?: VariantServeSpec;
|
|
145
|
+
designSource?: VariantDesignSource;
|
|
146
|
+
/** Public deploys, newest last. Absent until the variant is first deployed. */
|
|
147
|
+
deployments?: VariantDeployment[];
|
|
148
|
+
/** The runtime that executed this variant's worker (vendor/model/effort).
|
|
149
|
+
* Additive on the current schemaVersion; absent on legacy entries and on
|
|
150
|
+
* host-agent-executed variants. */
|
|
151
|
+
runtime?: import('../agent-variants/contracts').WorkerRuntimeInfo;
|
|
152
|
+
}
|
|
153
|
+
export interface VariantHistorySessionFile {
|
|
154
|
+
schemaVersion: number;
|
|
155
|
+
sessionId: string;
|
|
156
|
+
createdAt: string;
|
|
157
|
+
sessionPrompt: string;
|
|
158
|
+
projectKind: 'existing' | 'fresh';
|
|
159
|
+
/** Public canvas deploys, newest last. Each canvas points at its included variants. */
|
|
160
|
+
canvasDeployments?: VariantCanvasDeployment[];
|
|
161
|
+
}
|
|
162
|
+
/** A variant row as stored in (or destined for) the projection. `manifest`
|
|
163
|
+
* reproduces the on-disk manifest exactly; `hasStaticPreview` is the listing
|
|
164
|
+
* affordance captured when the row was projected. */
|
|
165
|
+
export interface VariantIndexEntry {
|
|
166
|
+
manifest: VariantHistoryManifest;
|
|
167
|
+
hasStaticPreview: boolean;
|
|
168
|
+
}
|
|
169
|
+
export interface VariantIndexEntryInput extends VariantIndexEntry {
|
|
170
|
+
/** The manifest file's mtime when projected — freshness-audit metadata. */
|
|
171
|
+
manifestMtimeMs: number;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=variant-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-history.d.ts","sourceRoot":"","sources":["../../src/types/variant-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variant-history.js","sourceRoot":"","sources":["../../src/types/variant-history.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface HeadElement {
|
|
2
|
+
tagName: 'script' | 'base';
|
|
3
|
+
id?: string;
|
|
4
|
+
markup: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Inserts a head element without rewriting authored HTML. Only actual document
|
|
8
|
+
* elements participate in duplicate detection; srcdoc, raw text, comments and
|
|
9
|
+
* inert template content cannot claim the containing document's head or IDs.
|
|
10
|
+
*/
|
|
11
|
+
export declare const insertHtmlHeadElement: (source: string, element: HeadElement) => string;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=htmlDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlDocument.d.ts","sourceRoot":"","sources":["../../src/utils/htmlDocument.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,MAAM,EACd,SAAS,WAAW,KACnB,MAsCF,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.insertHtmlHeadElement = void 0;
|
|
4
|
+
const parse5_1 = require("parse5");
|
|
5
|
+
/**
|
|
6
|
+
* Inserts a head element without rewriting authored HTML. Only actual document
|
|
7
|
+
* elements participate in duplicate detection; srcdoc, raw text, comments and
|
|
8
|
+
* inert template content cannot claim the containing document's head or IDs.
|
|
9
|
+
*/
|
|
10
|
+
const insertHtmlHeadElement = (source, element) => {
|
|
11
|
+
const document = (0, parse5_1.parse)(source, { sourceCodeLocationInfo: true });
|
|
12
|
+
const pending = [document];
|
|
13
|
+
while (pending.length > 0) {
|
|
14
|
+
const node = pending.pop();
|
|
15
|
+
if (parse5_1.defaultTreeAdapter.isElementNode(node) &&
|
|
16
|
+
node.namespaceURI === parse5_1.html.NS.HTML &&
|
|
17
|
+
node.tagName === element.tagName &&
|
|
18
|
+
(element.id === undefined ||
|
|
19
|
+
node.attrs.some((attr) => attr.name === 'id' && attr.value === element.id))) {
|
|
20
|
+
return source;
|
|
21
|
+
}
|
|
22
|
+
if ('childNodes' in node) {
|
|
23
|
+
pending.push(...node.childNodes);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const root = document.childNodes
|
|
27
|
+
.filter(parse5_1.defaultTreeAdapter.isElementNode)
|
|
28
|
+
.find((node) => node.tagName === 'html');
|
|
29
|
+
const head = root?.childNodes
|
|
30
|
+
.filter(parse5_1.defaultTreeAdapter.isElementNode)
|
|
31
|
+
.find((node) => node.tagName === 'head');
|
|
32
|
+
const doctype = document.childNodes.find(parse5_1.defaultTreeAdapter.isDocumentTypeNode);
|
|
33
|
+
// Omitted head/html tags have no source location. Insert after the enclosing
|
|
34
|
+
// html tag or doctype so fragment documents keep their original layout mode.
|
|
35
|
+
const insertAt = head?.sourceCodeLocation?.startTag?.endOffset ??
|
|
36
|
+
root?.sourceCodeLocation?.startTag?.endOffset ??
|
|
37
|
+
doctype?.sourceCodeLocation?.endOffset ??
|
|
38
|
+
0;
|
|
39
|
+
return source.slice(0, insertAt) + element.markup + source.slice(insertAt);
|
|
40
|
+
};
|
|
41
|
+
exports.insertHtmlHeadElement = insertHtmlHeadElement;
|
|
42
|
+
//# sourceMappingURL=htmlDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlDocument.js","sourceRoot":"","sources":["../../src/utils/htmlDocument.ts"],"names":[],"mappings":";;;AAAA,mCAKgB;AAQhB;;;;GAIG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAc,EACd,OAAoB,EACZ,EAAE;IACV,MAAM,QAAQ,GAAG,IAAA,cAAK,EAAC,MAAM,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAoC,CAAC,QAAQ,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAG,CAAC;QAC5B,IACE,2BAAkB,CAAC,aAAa,CAAC,IAAI,CAAC;YACtC,IAAI,CAAC,YAAY,KAAK,aAAI,CAAC,EAAE,CAAC,IAAI;YAClC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;YAChC,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS;gBACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,CAC1D,CAAC,EACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU;SAC7B,MAAM,CAAC,2BAAkB,CAAC,aAAa,CAAC;SACxC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,EAAE,UAAU;SAC1B,MAAM,CAAC,2BAAkB,CAAC,aAAa,CAAC;SACxC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CACtC,2BAAkB,CAAC,kBAAkB,CACtC,CAAC;IACF,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,QAAQ,GACZ,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS;QAC7C,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS;QAC7C,OAAO,EAAE,kBAAkB,EAAE,SAAS;QACtC,CAAC,CAAC;IACJ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC,CAAC;AAzCW,QAAA,qBAAqB,yBAyChC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface Point {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
interface Size {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
interface WindowPlacement {
|
|
10
|
+
anchor: Point;
|
|
11
|
+
bounds: Point & Size;
|
|
12
|
+
size: Size;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Places a window near a point in upward-increasing screen coordinates, keeping its title bar visible.
|
|
16
|
+
* The native dialog process executes this function's source, so it has no external dependencies.
|
|
17
|
+
*/
|
|
18
|
+
export declare const getWindowTopLeft: ({ anchor, bounds, size, }: WindowPlacement) => Point;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=windowPlacement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowPlacement.d.ts","sourceRoot":"","sources":["../../src/utils/windowPlacement.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AACD,UAAU,IAAI;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,2BAI9B,eAAe,KAAG,KAapB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWindowTopLeft = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Places a window near a point in upward-increasing screen coordinates, keeping its title bar visible.
|
|
6
|
+
* The native dialog process executes this function's source, so it has no external dependencies.
|
|
7
|
+
*/
|
|
8
|
+
const getWindowTopLeft = ({ anchor, bounds, size, }) => {
|
|
9
|
+
const SCREEN_MARGIN = 12;
|
|
10
|
+
const minX = bounds.x + SCREEN_MARGIN;
|
|
11
|
+
const maxX = Math.max(minX, bounds.x + bounds.width - size.width - SCREEN_MARGIN);
|
|
12
|
+
const maxY = bounds.y + bounds.height - SCREEN_MARGIN;
|
|
13
|
+
const minY = Math.min(maxY, bounds.y + size.height + SCREEN_MARGIN);
|
|
14
|
+
return {
|
|
15
|
+
x: Math.min(maxX, Math.max(minX, anchor.x - size.width / 2)),
|
|
16
|
+
y: Math.min(maxY, Math.max(minY, anchor.y - SCREEN_MARGIN)),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
exports.getWindowTopLeft = getWindowTopLeft;
|
|
20
|
+
//# sourceMappingURL=windowPlacement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowPlacement.js","sourceRoot":"","sources":["../../src/utils/windowPlacement.ts"],"names":[],"mappings":";;;AAcA;;;GAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAC/B,MAAM,EACN,MAAM,EACN,IAAI,GACY,EAAS,EAAE;IAC3B,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,IAAI,EACJ,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,aAAa,CACrD,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACpE,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,gBAAgB,oBAiB3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rivet-design",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Local visual web development tool with AI-powered code modification",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"workspaces": [
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"docs:sync": "node scripts/sync-external-docs.js",
|
|
40
40
|
"deploy:supabase:functions": "bash scripts/deploy-supabase-functions.sh",
|
|
41
41
|
"ratchet": "tsx scripts/ratchet.ts",
|
|
42
|
+
"test:ratchet": "node --import tsx --test scripts/ratchet/*.test.ts",
|
|
42
43
|
"bench": "node --import tsx benchmarks/bench.ts",
|
|
43
44
|
"bench:run": "node --import tsx benchmarks/runner.ts",
|
|
44
45
|
"bench:compare": "node --import tsx benchmarks/compare.ts",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"bench:test": "node --import tsx --test benchmarks/*.test.ts benchmarks/agents/*.test.ts benchmarks/agents/prompts/*.test.ts benchmarks/review/*.test.ts",
|
|
49
50
|
"bench:typecheck": "tsc -p benchmarks/tsconfig.json",
|
|
50
51
|
"smoke:cli": "node scripts/smoke-cli.mjs",
|
|
52
|
+
"smoke:embedded-prototypes": "node --import tsx scripts/smoke-embedded-prototypes.mjs",
|
|
51
53
|
"perf:cli": "node scripts/bench-cli.mjs",
|
|
52
54
|
"check:pre-commit": "npx lint-staged && yarn build && cd src/ui && yarn typecheck && cd ../.. && cd src/proxy && yarn build && cd ../..",
|
|
53
55
|
"check:pre-push": "yarn test",
|
|
@@ -60,11 +62,14 @@
|
|
|
60
62
|
"@sentry/node": "10.44.0",
|
|
61
63
|
"cors": "^2.8.5",
|
|
62
64
|
"dotenv": "^17.4.2",
|
|
65
|
+
"drizzle-orm": "1.0.0-rc.4",
|
|
63
66
|
"express": "^5.2.1",
|
|
64
67
|
"glob": "^11.0.3",
|
|
65
68
|
"http-proxy-middleware": "^3.0.5",
|
|
66
69
|
"loglevel": "^1.9.2",
|
|
67
70
|
"open": "^8.4.0",
|
|
71
|
+
"parse5": "^7.3.0",
|
|
72
|
+
"playwright-core": "^1.58.2",
|
|
68
73
|
"posthog-node": "^5.28.1",
|
|
69
74
|
"simple-git": "^3.19.1",
|
|
70
75
|
"typescript": "^5.1.6",
|
|
@@ -103,7 +108,6 @@
|
|
|
103
108
|
"knip": "^6.16.1",
|
|
104
109
|
"lint-staged": "^16.1.6",
|
|
105
110
|
"playwright": "^1.58.2",
|
|
106
|
-
"playwright-core": "^1.58.2",
|
|
107
111
|
"postcss": "^8.4.32",
|
|
108
112
|
"prettier": "^3.6.2",
|
|
109
113
|
"prettier-plugin-tailwindcss": "^0.7.2",
|
|
@@ -179,5 +183,8 @@
|
|
|
179
183
|
"prettier --write"
|
|
180
184
|
]
|
|
181
185
|
},
|
|
182
|
-
"packageManager": "yarn@4.12.0"
|
|
186
|
+
"packageManager": "yarn@4.12.0",
|
|
187
|
+
"resolutions": {
|
|
188
|
+
"nwsapi": "2.2.24"
|
|
189
|
+
}
|
|
183
190
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const MINIMUM_NODE_VERSION = [22,
|
|
4
|
-
const
|
|
3
|
+
const MINIMUM_NODE_VERSION = [22, 16, 0];
|
|
4
|
+
const MINIMUM_CURRENT_NODE_MAJOR = 24;
|
|
5
|
+
const MINIMUM_NODE_VERSION_LABEL = '22.16+ (22.x) or 24+';
|
|
5
6
|
|
|
6
7
|
/** Returns comparable major, minor, and patch numbers for a Node version. */
|
|
7
8
|
const parseNodeVersion = (version) => {
|
|
@@ -20,13 +21,15 @@ const assertSupportedNodeVersion = (version) => {
|
|
|
20
21
|
const isValid = parsedVersion.every(Number.isInteger);
|
|
21
22
|
const isSupported =
|
|
22
23
|
isValid &&
|
|
23
|
-
(
|
|
24
|
-
parsedVersion[
|
|
25
|
-
|
|
24
|
+
(parsedVersion[0] >= MINIMUM_CURRENT_NODE_MAJOR ||
|
|
25
|
+
(parsedVersion[0] === MINIMUM_NODE_VERSION[0] &&
|
|
26
|
+
(firstDifferenceIndex === -1 ||
|
|
27
|
+
parsedVersion[firstDifferenceIndex] >
|
|
28
|
+
MINIMUM_NODE_VERSION[firstDifferenceIndex])));
|
|
26
29
|
|
|
27
30
|
if (!isSupported) {
|
|
28
31
|
throw new Error(
|
|
29
|
-
`Rivet requires Node.js ${MINIMUM_NODE_VERSION_LABEL}
|
|
32
|
+
`Rivet requires Node.js ${MINIMUM_NODE_VERSION_LABEL}. ` +
|
|
30
33
|
`Current version: ${version}. Upgrade Node.js, then install ` +
|
|
31
34
|
'`rivet-design@latest` again.',
|
|
32
35
|
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var ke=a=>{throw TypeError(a)};var ae=(a,t,e)=>t.has(a)||ke("Cannot "+e);var n=(a,t,e)=>(ae(a,t,"read from private field"),e?e.call(a):t.get(a)),R=(a,t,e)=>t.has(a)?ke("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(a):t.set(a,e),v=(a,t,e,r)=>(ae(a,t,"write to private field"),r?r.call(a,e):t.set(a,e),e),O=(a,t,e)=>(ae(a,t,"access private method"),e);import{S as qe,s as Me,h as Se,g as ze,n as V,r as Be,Q as Te,u as he,a as Ke,b as De,c as k,e as We,d as Ve,f as Ye,i as Qe,j as Oe,k as Je,l as Ge,m as Xe,o as pe,p as s,q as Ze,B as Ne,t as et,v as tt,w as Re,x as ee,y as L,z as st,A as rt,P as it,T as at,C as nt}from"./main-BId3Sa7r.js";var M,$,C,T,q,W,ne,Ie,ot=(Ie=class extends qe{constructor(t,e){super();R(this,q);R(this,M);R(this,$);R(this,C);R(this,T);v(this,M,t),this.setOptions(e),this.bindMethods(),O(this,q,W).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){var r;const e=this.options;this.options=n(this,M).defaultMutationOptions(t),Me(this.options,e)||n(this,M).getMutationCache().notify({type:"observerOptionsUpdated",mutation:n(this,C),observer:this}),e!=null&&e.mutationKey&&this.options.mutationKey&&Se(e.mutationKey)!==Se(this.options.mutationKey)?this.reset():((r=n(this,C))==null?void 0:r.state.status)==="pending"&&n(this,C).setOptions(this.options)}onSubscribe(){this.listeners.size===1&&n(this,C)&&(n(this,C).addObserver(this),O(this,q,W).call(this))}onUnsubscribe(){var t;this.hasListeners()||(t=n(this,C))==null||t.removeObserver(this)}onMutationUpdate(t){O(this,q,W).call(this),O(this,q,ne).call(this,t)}getCurrentResult(){return n(this,$)}reset(){var t;(t=n(this,C))==null||t.removeObserver(this),v(this,C,void 0),O(this,q,W).call(this),O(this,q,ne).call(this)}mutate(t,e){var r;return v(this,T,e),(r=n(this,C))==null||r.removeObserver(this),v(this,C,n(this,M).getMutationCache().build(n(this,M),this.options)),n(this,C).addObserver(this),n(this,C).execute(t)}},M=new WeakMap,$=new WeakMap,C=new WeakMap,T=new WeakMap,q=new WeakSet,W=function(){var e;const t=((e=n(this,C))==null?void 0:e.state)??ze();v(this,$,{...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset})},ne=function(t){V.batch(()=>{var e,r,o,c,d,h,x,N;if(n(this,T)&&this.hasListeners()){const b=n(this,$).variables,m=n(this,$).context,f={client:n(this,M),meta:this.options.meta,mutationKey:this.options.mutationKey};if((t==null?void 0:t.type)==="success"){try{(r=(e=n(this,T)).onSuccess)==null||r.call(e,t.data,b,m,f)}catch(g){Promise.reject(g)}try{(c=(o=n(this,T)).onSettled)==null||c.call(o,t.data,null,b,m,f)}catch(g){Promise.reject(g)}}else if((t==null?void 0:t.type)==="error"){try{(h=(d=n(this,T)).onError)==null||h.call(d,t.error,b,m,f)}catch(g){Promise.reject(g)}try{(N=(x=n(this,T)).onSettled)==null||N.call(x,void 0,t.error,b,m,f)}catch(g){Promise.reject(g)}}}this.listeners.forEach(b=>{b(n(this,$))})})},Ie);function Ce(a,t){const e=new Set(t);return a.filter(r=>!e.has(r))}var K,P,D,H,_,U,Y,J,G,X,S,oe,le,Ae,ce,de,ue,Le,lt=(Le=class extends qe{constructor(t,e,r){super();R(this,S);R(this,K);R(this,P);R(this,D);R(this,H);R(this,_);R(this,U);R(this,Y);R(this,J);R(this,G);R(this,X,[]);v(this,K,t),v(this,H,r),v(this,D,[]),v(this,_,[]),v(this,P,[]),this.setQueries(e)}onSubscribe(){this.listeners.size===1&&n(this,_).forEach(t=>{t.subscribe(e=>{O(this,S,de).call(this,t,e)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,n(this,_).forEach(t=>{t.destroy()})}setQueries(t,e){v(this,D,t),v(this,H,e),V.batch(()=>{const r=n(this,_),o=O(this,S,ce).call(this,n(this,D));o.forEach(m=>m.observer.setOptions(m.defaultedQueryOptions));const c=o.map(m=>m.observer),d=c.map(m=>m.getCurrentResult()),h=r.length!==c.length,x=c.some((m,f)=>m!==r[f]),N=h||x,b=N?!0:d.some((m,f)=>{const g=n(this,P)[f];return!g||!Me(m,g)});!N&&!b||(N&&(v(this,X,o),v(this,_,c)),v(this,P,d),this.hasListeners()&&(N&&(Ce(r,c).forEach(m=>{m.destroy()}),Ce(c,r).forEach(m=>{m.subscribe(f=>{O(this,S,de).call(this,m,f)})})),O(this,S,ue).call(this)))})}getCurrentResult(){return n(this,P)}getQueries(){return n(this,_).map(t=>t.getCurrentQuery())}getObservers(){return n(this,_)}getOptimisticResult(t,e){const r=O(this,S,ce).call(this,t),o=r.map(d=>d.observer.getOptimisticResult(d.defaultedQueryOptions)),c=r.map(d=>d.defaultedQueryOptions.queryHash);return[o,d=>O(this,S,le).call(this,d??o,e,c),()=>O(this,S,oe).call(this,o,r)]}},K=new WeakMap,P=new WeakMap,D=new WeakMap,H=new WeakMap,_=new WeakMap,U=new WeakMap,Y=new WeakMap,J=new WeakMap,G=new WeakMap,X=new WeakMap,S=new WeakSet,oe=function(t,e){const r=new Set;return e.map((o,c)=>{const d=t[c];return o.defaultedQueryOptions.notifyOnChangeProps?d:o.observer.trackResult(d,h=>{r.has(h)||(r.add(h),e.forEach(x=>{x.observer.trackProp(h)}))})})},le=function(t,e,r){if(e){const o=n(this,G),c=r!==void 0&&o!==void 0&&(o.length!==r.length||r.some((d,h)=>d!==o[h]));return(n(this,P)!==n(this,J)||c||e!==n(this,Y))&&(v(this,Y,e),v(this,J,n(this,P)),r!==void 0&&v(this,G,r),v(this,U,Be(n(this,U),e(t)))),n(this,U)}return t},Ae=function(){var t;return!((t=n(this,H))!=null&&t.combine)||n(this,_).some((e,r)=>{var o;return e.options.suspense&&((o=n(this,P)[r])==null?void 0:o.data)===void 0})},ce=function(t){const e=new Map;n(this,_).forEach(o=>{const c=o.options.queryHash;if(!c)return;const d=e.get(c);d?d.push(o):e.set(c,[o])});const r=[];return t.forEach(o=>{var h;const c=n(this,K).defaultQueryOptions(o),d=((h=e.get(c.queryHash))==null?void 0:h.shift())??new Te(n(this,K),c);r.push({defaultedQueryOptions:c,observer:d})}),r},de=function(t,e){const r=n(this,_).indexOf(t);r!==-1&&(v(this,P,n(this,P).slice()),n(this,P)[r]=e,O(this,S,ue).call(this))},ue=function(){var t;if(this.hasListeners()){const e=O(this,S,Ae).call(this),r=n(this,U),o=e?r:O(this,S,le).call(this,O(this,S,oe).call(this,n(this,P),n(this,X)),(t=n(this,H))==null?void 0:t.combine);(e||r!==o)&&V.batch(()=>{this.listeners.forEach(c=>{c(n(this,P))})})}},Le);function ct({queries:a,...t},e){const r=he(),o=Ke(),c=De(),d=t.subscribed!==!1,h=k.useMemo(()=>a.map(l=>{const u=r.defaultQueryOptions(l);return u._optimisticResults=o?"isRestoring":d?"optimistic":void 0,u}),[a,r,o,d]);h.forEach(l=>{We(l);const u=r.getQueryCache().get(l.queryHash);Ve(l,c,u)}),Ye(c);const[x]=k.useState(()=>new lt(r,h,t)),[N,b,m]=x.getOptimisticResult(h,t.combine),f=!o&&d;k.useSyncExternalStore(k.useCallback(l=>f?x.subscribe(V.batchCalls(l)):Qe,[x,f]),()=>x.getCurrentResult(),()=>x.getCurrentResult()),k.useEffect(()=>{x.setQueries(h,t)},[h,t,x]);const g=N.some((l,u)=>Oe(h[u],l))?N.flatMap((l,u)=>{const w=h[u];if(w&&Oe(w,l)){const E=new Te(r,w);return Je(w,E,c)}return[]}):[];if(g.length>0)throw Promise.all(g);const I=N.find((l,u)=>{const w=h[u];return w&&Ge({result:l,errorResetBoundary:c,throwOnError:w.throwOnError,query:r.getQueryCache().get(w.queryHash),suspense:w.suspense})});if(I)throw I.error;return b(m())}function Pe(a,t){const e=he(),[r]=k.useState(()=>new ot(e,a));k.useEffect(()=>{r.setOptions(a)},[r,a]);const o=k.useSyncExternalStore(k.useCallback(d=>r.subscribe(V.batchCalls(d)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),c=k.useCallback((...d)=>{r.mutate(d[0],d[1]).catch(Qe)},[r]);if(o.error&&Xe(r.options.throwOnError,[o.error]))throw o.error;return{...o,mutate:c,mutateAsync:o.mutate}}/**
|
|
2
|
+
* @license lucide-react v1.46.0 - ISC
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the ISC license.
|
|
5
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/const Fe={name:"arrow-up-right",size:24,node:[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]};Fe.node;const dt=pe(Fe);/**
|
|
7
|
+
* @license lucide-react v1.46.0 - ISC
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under the ISC license.
|
|
10
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
+
*/const $e={name:"folder-open",size:24,node:[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]};$e.node;const Ee=pe($e);/**
|
|
12
|
+
* @license lucide-react v1.46.0 - ISC
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the ISC license.
|
|
15
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
+
*/const He={name:"loader-circle",size:24,node:[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],aliases:["loader-2"]};He.node;const ut=pe(He),ht=({projects:a,variants:t,historyError:e,onRetryHistory:r,projectPreviews:o={},selectedProjectId:c,onSelectProject:d,onBrowseLibrary:h,onOpenProject:x,isOpeningProject:N=!1,projectOpenError:b,onSearchCompleted:m,accountMenu:f,children:g})=>{const[I,l]=k.useState(""),u=a.find(y=>y.id===c),w=a.filter(y=>y.name.toLowerCase().includes(I.toLowerCase())),E=new Map;for(const{projectId:y}of t??[])E.set(y,(E.get(y)??0)+1);return s.jsx("div",{className:"ph-no-capture bg-background text-foreground flex h-screen min-h-0","data-rivet-private":!0,children:s.jsxs("main",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[b?s.jsx("p",{role:"alert",className:"px-10 pt-5 text-xs text-red-200",children:b}):null,g!==void 0?g:s.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto px-10 py-10 max-sm:px-5",children:[s.jsxs("div",{className:"mb-10 flex items-center justify-between",children:[s.jsx("button",{onClick:h,"aria-label":"Projects",className:"flex items-center",children:s.jsx("img",{src:Ze,alt:"","aria-hidden":!0,draggable:!1,className:"h-8 w-8"})}),s.jsx(Ne,{onClick:()=>x(),variant:"secondary",disabled:N,leadingIcon:Ee,children:"Open project…"})]}),s.jsxs("header",{className:"mb-9 flex flex-wrap items-end justify-between gap-5",children:[s.jsx("div",{children:s.jsx("h1",{className:"text-[26px] font-medium tracking-[-0.035em]",children:"Projects"})}),s.jsxs("label",{className:"flex w-64 items-center gap-2 rounded-lg border border-white/[0.08] bg-white/[0.02] px-3 py-2.5 text-white/35",children:[s.jsx(et,{size:14,"aria-hidden":!0}),s.jsx("input",{onBlur:()=>m==null?void 0:m(I.length),type:"search","aria-label":"Search projects",placeholder:"Search projects…",value:I,onChange:y=>l(y.target.value),className:"min-w-0 flex-1 bg-transparent text-xs text-white outline-none placeholder:text-white/30 [&::-webkit-search-cancel-button]:hidden"})]})]}),e?s.jsxs("div",{role:"alert",className:"mb-6 flex items-center gap-3 text-xs text-white/60",children:[s.jsx("span",{children:e}),s.jsx("button",{onClick:r,className:"shrink-0 underline underline-offset-4",children:"Retry history"})]}):null,u!=null&&u.issue?s.jsx("p",{role:"alert",className:"mb-6 rounded-lg border border-amber-200/10 bg-amber-200/[0.03] p-4 text-xs leading-6 text-white/70",children:u.issue}):null,u&&!u.isAvailable?s.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4 rounded-lg border border-amber-200/10 bg-amber-200/[0.03] p-4 text-xs text-white/60",children:[s.jsxs("span",{children:["Locate ",u.name,"’s working folder to open its workspace."]}),s.jsx("button",{disabled:N,onClick:()=>x(u.id),className:"shrink-0 text-white underline decoration-white/30 underline-offset-4",children:"Locate folder"})]}):null,s.jsxs("div",{className:"grid items-start gap-x-6 gap-y-8 sm:grid-cols-2",children:[w.map(y=>{const Q=E.get(y.id)??0;let A="Loading variants…";t?A=`${Q.toLocaleString()} ${Q===1?"variant":"variants"}`:e&&(A="Variants unavailable");const F=o[y.id];return s.jsxs("button",{onClick:()=>{l(""),d(y.id)},className:"group -m-2 min-w-0 rounded-2xl p-2 text-left hover:bg-white/[0.06] focus-visible:bg-white/[0.06] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white/60",children:[s.jsx("span",{className:"relative block aspect-video overflow-hidden rounded-xl border border-white/[0.08] bg-white/[0.02] group-hover:border-white/50 group-hover:ring-2 group-hover:ring-white/30",children:F?s.jsx("img",{src:F.dataUrl,alt:`${y.name} — ${F.label}`,draggable:!1,className:"h-full w-full object-cover object-top"}):null}),s.jsxs("span",{className:"mt-3 block",children:[s.jsx("span",{className:"block truncate text-sm font-medium",children:y.name}),s.jsxs("span",{className:"mt-2 flex min-w-0 items-center justify-between gap-3 text-xs text-white/40 group-hover:text-white/65 group-focus-visible:text-white/65",children:[s.jsx("span",{className:"shrink-0",children:A}),F?s.jsx("span",{className:"truncate",title:F.label,children:F.label}):null]}),y.isAvailable?null:s.jsx("span",{className:"mt-2 block text-xs text-amber-200/65",children:"Folder unavailable"})]})]},y.id)}),w.length===0?s.jsxs("div",{className:"col-span-full flex min-h-80 flex-col items-center justify-center rounded-xl border border-dashed border-white/10 px-8 text-center",children:[s.jsx(Ee,{size:26,className:"mb-5 text-white/25"}),s.jsx("h2",{className:"text-sm font-medium",children:I?"No matching projects":"Your projects start here"}),s.jsx("p",{className:"mt-2 max-w-sm text-xs leading-6 text-white/40",children:I?"Try another project name.":"Open an existing project once to bring its saved explorations here. Projects you open or create with Rivet appear automatically after that."}),I?null:s.jsx(Ne,{onClick:()=>x(),variant:"secondary",disabled:N,className:"mt-5",children:"Open project"})]}):null]})]}),(c===null||g===void 0)&&f?s.jsx("footer",{className:"border-main-border bg-main-light shrink-0 border-t px-2.5 py-1.5",children:f}):null]})})},_e=2500,pt=500,mt=6e4,bt=[],xt=[],te=({error:a,retry:t})=>s.jsxs("div",{className:"m-auto max-w-md px-8 text-center",children:[s.jsx("p",{className:"text-sm text-white/70",children:a.message}),s.jsx("button",{onClick:t,className:"mt-5 rounded-lg border border-white/15 px-4 py-2 text-xs text-white/70",children:"Try again"})]}),vt=()=>{var fe,we,ve,ye,ge,je;const a=tt(),t=he(),[e,r]=k.useState(()=>Re(new URL(window.location.href))),[o]=k.useState(()=>crypto.randomUUID()),c=k.useRef(0),d=k.useRef(null),h=ee({queryKey:["project-library","projects"],queryFn:({signal:i})=>L("/projects",{signal:i}),refetchInterval:_e,retry:!1}),x=((fe=h.data)==null?void 0:fe.projects)??bt,N=x.map(({id:i,projectPath:p})=>({id:i,projectPath:p})).sort((i,p)=>i.id.localeCompare(p.id)),b=ee({queryKey:["project-library","history",N],queryFn:({signal:i})=>L("",{signal:i}),enabled:x.length>0,refetchInterval:_e,retry:!1}),m=new Map((we=b.data)==null?void 0:we.projects.map(i=>[i.id,i.issue])),f=x.map(i=>({...i,issue:i.issue??m.get(i.id)})),g=((ve=b.data)==null?void 0:ve.variants)??xt,I=ct({queries:f.map(i=>({queryKey:["library-project-preview",i.id,i.projectPath],queryFn:({signal:p})=>L(`/projects/${i.id}/thumbnail`,{signal:p}),enabled:e.kind==="library",refetchInterval:mt,retry:!1}))}),l=f.find(i=>i.id===e.projectId),u=g.find(i=>i.projectId===e.projectId&&i.sessionId===e.sessionId&&i.variantId===e.variantId),w=k.useCallback(i=>{window.history.pushState(null,"",st(i)),r(i)},[]);k.useEffect(()=>{const i=()=>r(Re(new URL(window.location.href)));return window.addEventListener("popstate",i),()=>window.removeEventListener("popstate",i)},[]),k.useEffect(()=>{const i=new AbortController;let p;const j=async()=>{try{const z=await L(`/views/${o}`,{method:"PUT",body:{isFocused:document.visibilityState==="visible"&&document.hasFocus()},signal:i.signal});for(const B of z.navigations){if(i.signal.aborted)return;if(B.sequence>c.current){let ie="library";B.projectId&&(ie="workspace"),B.variantId&&(ie="preview"),w({...B,kind:ie}),c.current=B.sequence}await L(`/views/${o}/acknowledgements`,{method:"POST",body:{sequence:B.sequence},signal:i.signal})}}catch{}i.signal.aborted||(p=setTimeout(()=>{j()},pt))};return j(),()=>{i.abort(),clearTimeout(p)}},[o,w]);const E=ee({queryKey:["library-workspace",e.projectId],queryFn:()=>L(`/projects/${e.projectId}/runtime`,{method:"POST"}),enabled:e.kind==="workspace"&&!!e.projectId&&(l==null?void 0:l.isAvailable)===!0,retry:!1,refetchOnWindowFocus:!1}),y=E.data?new URL(E.data.editorUrl).origin:null;k.useEffect(()=>{if(e.kind!=="workspace"||!y)return;const i=p=>{!d.current||p.source!==d.current.contentWindow||p.origin!==y||p.data!==nt||(a==null||a.capture("library_view_changed",{view:"projects"}),w({kind:"library"}))};return window.addEventListener("message",i),()=>window.removeEventListener("message",i)},[e.kind,y,w,a]);const Q=ee({queryKey:["library-preview",e.projectId,e.sessionId,e.variantId],queryFn:()=>L(`/projects/${e.projectId}/variants/${e.sessionId}/${e.variantId}/preview`,{method:"POST"}),enabled:e.kind==="preview"&&!!(u!=null&&u.hasStaticPreview),retry:!1,refetchOnWindowFocus:!1}),A=Pe({mutationFn:i=>L(`/projects/${e.projectId}/variants/${e.sessionId}/${e.variantId}`,{method:"PATCH",body:{label:i}}),onSuccess:()=>t.invalidateQueries({queryKey:["project-library"]})}),F=i=>{const p=f.find(j=>j.id===i);a==null||a.capture("library_project_selected",{project_id:i,workspace_available:(p==null?void 0:p.isAvailable)??!1}),w({kind:"workspace",projectId:i})},Z=Pe({mutationFn:async i=>{const{projectPath:p}=await L("/folder-selections",{method:"POST"});return p===null?null:L(i?`/projects/${i}/workspace`:"/projects",{method:i?"PATCH":"POST",body:{projectPath:p}})},onSuccess:i=>{i&&(t.invalidateQueries({queryKey:["project-library"]}),a==null||a.capture("library_project_selected",{project_id:i.project.id,workspace_available:i.project.isAvailable}),w({kind:"workspace",projectId:i.project.id}))},onSettled:(i,p,j)=>{a==null||a.capture("library_open_project_closed",{is_relink:!!j})}}),Ue=i=>{Z.isPending||(a==null||a.capture("library_open_project_opened",{is_relink:!!i}),Z.mutate(i))},se=()=>{a==null||a.capture("library_view_changed",{view:"projects"}),w({kind:"library"})},me=()=>{a==null||a.capture("library_view_changed",{view:"workspace"}),w({...e,kind:"workspace"})},be=()=>{a==null||a.capture("library_history_retry"),b.refetch()};let xe;if(e.kind!=="library"&&(l==null?void 0:l.isAvailable)!==!1||e.kind==="preview"){let i=!1,p=s.jsxs("div",{className:"m-auto flex items-center gap-2 text-xs text-white/40",children:[s.jsx(ut,{size:14,className:"animate-spin"}),"Opening ",(l==null?void 0:l.name)??"project","…"]});if(h.data&&!l||b.data&&e.variantId&&!u)p=s.jsx("div",{className:"m-auto text-sm text-white/60",children:"This project or direction is no longer in your library."});else if(e.kind==="preview"&&b.error&&!b.data)p=s.jsx(te,{error:b.error,retry:be});else if(e.kind==="workspace"&&E.error)p=s.jsx(te,{error:E.error,retry:()=>{E.refetch()}});else if(e.kind==="workspace"&&E.data){i=!0;const j=new URL(E.data.editorUrl);j.searchParams.set("library","1"),j.searchParams.set("libraryOrigin",window.location.origin),e.sessionId&&e.variantId&&(j.searchParams.set("historySession",e.sessionId),j.searchParams.set("historyVariant",e.variantId)),p=s.jsx("iframe",{ref:d,title:`${(l==null?void 0:l.name)??"Project"} workspace`,src:j.toString(),className:"min-h-0 w-full flex-1 border-0",allow:"clipboard-write"},j.toString())}else e.kind==="preview"&&Q.error?p=s.jsx(te,{error:Q.error,retry:()=>{Q.refetch()}}):e.kind==="preview"&&Q.data?p=s.jsx("iframe",{title:`${(u==null?void 0:u.label)??"Saved direction"} preview`,src:Q.data.url,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups",className:"min-h-0 w-full flex-1 border-0 bg-white"}):e.kind==="preview"&&u&&!u.hasStaticPreview&&(p=s.jsxs("div",{className:"m-auto max-w-sm text-center",children:[s.jsx("p",{className:"text-sm",children:u.hasInteractivePreview?"Open this direction in its workspace":"This direction contains saved code changes"}),s.jsx("p",{className:"mt-2 text-xs leading-6 text-white/40",children:u.hasInteractivePreview?"Rivet will start the preview with this project’s dependencies and configuration.":"Open the project to continue working with its saved history."}),s.jsx("button",{onClick:me,disabled:(l==null?void 0:l.isAvailable)===!1,className:"mt-5 rounded-lg bg-white px-4 py-2.5 text-xs font-medium text-black disabled:opacity-30",children:"Open workspace"})]}));xe=s.jsxs(s.Fragment,{children:[e.kind==="preview"?s.jsxs("header",{className:"flex h-14 shrink-0 items-center gap-3 border-b border-white/[0.07] px-5",children:[s.jsx("button",{"aria-label":"Back to projects",onClick:se,className:"rounded p-1.5 text-white/45 hover:bg-white/5",children:s.jsx(rt,{size:15})}),s.jsx("span",{className:"text-xs text-white/40",children:l==null?void 0:l.name}),u?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"text-white/20",children:"/"}),s.jsxs("form",{onSubmit:j=>{j.preventDefault();const z=new FormData(j.currentTarget);A.mutate(String(z.get("label")))},className:"flex min-w-0 flex-1 gap-2",children:[s.jsx("input",{name:"label","aria-label":"Direction name",defaultValue:u.label,className:"max-w-xs min-w-0 flex-1 bg-transparent text-xs text-white/80 outline-none"}),s.jsx("button",{disabled:A.isPending,className:"text-[10px] text-white/30 hover:text-white",children:"Rename"})]},`${u.projectId}:${u.variantId}`)]}):s.jsx("span",{className:"flex-1"}),e.kind==="preview"?s.jsxs("button",{onClick:me,disabled:(l==null?void 0:l.isAvailable)===!1,className:"flex items-center gap-1.5 rounded-md border border-white/10 px-3 py-1.5 text-[11px] text-white/70 disabled:opacity-30",children:["Edit in project",s.jsx(dt,{size:12})]}):null]}):null,e.kind==="workspace"&&!i?s.jsx("button",{onClick:se,className:"absolute top-5 left-5 rounded px-2 py-1 text-xs text-white/50 hover:bg-white/5 hover:text-white",children:"Projects"}):null,A.error?s.jsx("p",{role:"alert",className:"px-5 py-2 text-xs text-red-200",children:A.error.message}):null,p]})}let re=xe;return h.error&&!h.data?re=s.jsx(te,{error:h.error,retry:()=>{h.refetch()}}):h.isPending&&(re=s.jsx("div",{role:"status",className:"m-auto text-xs text-white/40",children:"Loading projects…"})),s.jsxs(s.Fragment,{children:[s.jsx(ht,{projects:f,variants:(ye=b.data)==null?void 0:ye.variants,historyError:(ge=b.error)==null?void 0:ge.message,onRetryHistory:be,projectPreviews:Object.fromEntries(f.map((i,p)=>{var j,z;return[i.id,(z=(j=I[p])==null?void 0:j.data)==null?void 0:z.preview]})),selectedProjectId:e.projectId??null,onSelectProject:F,onBrowseLibrary:se,onOpenProject:Ue,accountMenu:s.jsx(it,{side:"top",align:"start"}),isOpeningProject:Z.isPending,projectOpenError:(je=Z.error)==null?void 0:je.message,onSearchCompleted:i=>a==null?void 0:a.capture("library_search_completed",{query_length:i}),children:re}),s.jsx(at,{position:"bottom-right",theme:"dark"})]})};export{vt as default};
|