@tscircuit/fake-snippets 0.0.102 → 0.0.103

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.
@@ -24,33 +24,28 @@ import {
24
24
  import { useLocation } from "wouter"
25
25
  import { ConnectedRepoOverview } from "./ConnectedRepoOverview"
26
26
  import { BuildsList } from "./BuildsList"
27
- import { ConnectedRepoSettings } from "./ConnectedRepoSettings"
28
27
  import Header from "../Header"
29
28
  import { formatTimeAgo } from "@/lib/utils/formatTimeAgo"
30
- import { getBuildStatus, PackageBuild, MOCK_DEPLOYMENTS } from "."
31
-
32
- interface ConnectedRepoDashboardProps {
33
- projectName?: string
34
- builds?: PackageBuild[]
35
- selectedBuild?: PackageBuild
36
- }
29
+ import {
30
+ getBuildStatus,
31
+ PackageBuild,
32
+ MOCK_DEPLOYMENTS,
33
+ getPackageFromBuild,
34
+ } from "."
35
+ import { PrefetchPageLink } from "../PrefetchPageLink"
37
36
 
38
37
  export const ConnectedRepoDashboard = ({
39
- projectName = "tscircuit-project",
40
- builds = MOCK_DEPLOYMENTS,
41
- selectedBuild,
42
- }: ConnectedRepoDashboardProps) => {
38
+ latestBuild,
39
+ }: {
40
+ latestBuild: PackageBuild
41
+ }) => {
43
42
  const [activeTab, setActiveTab] = useState("overview")
44
- const [currentBuild, setCurrentBuild] = useState<PackageBuild | undefined>(
45
- selectedBuild || builds[0],
46
- )
47
43
  const [, setLocation] = useLocation()
48
-
44
+ const pkg = getPackageFromBuild(latestBuild)
49
45
  const handleSelectBuild = (build: PackageBuild) => {
50
46
  setLocation(`/build/${build.package_build_id}`)
47
+ setActiveTab("overview")
51
48
  }
52
-
53
- const latestBuild = builds[0]
54
49
  const { status, label } = getBuildStatus(latestBuild)
55
50
 
56
51
  return (
@@ -71,9 +66,12 @@ export const ConnectedRepoDashboard = ({
71
66
  </div>
72
67
  <div className="min-w-0 flex-1">
73
68
  <div className="flex flex-col sm:flex-row sm:items-center gap-3">
74
- <h1 className="text-2xl font-bold text-gray-900 truncate">
75
- {projectName}
76
- </h1>
69
+ <PrefetchPageLink
70
+ href={"/" + pkg.name}
71
+ className="text-2xl font-bold text-gray-900 truncate"
72
+ >
73
+ {pkg.unscoped_name}
74
+ </PrefetchPageLink>
77
75
  <Badge
78
76
  variant={
79
77
  status === "success"
@@ -99,7 +97,15 @@ export const ConnectedRepoDashboard = ({
99
97
  </Badge>
100
98
  </div>
101
99
  <div className="flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-4 mt-2 text-sm text-gray-600">
102
- <div className="flex items-center gap-1">
100
+ <div
101
+ className="flex cursor-pointer items-center gap-1"
102
+ onClick={() =>
103
+ window?.open(
104
+ `https://github.com/${pkg.github_repo_full_name}/tree/${latestBuild.branch_name || "main"}`,
105
+ "_blank",
106
+ )
107
+ }
108
+ >
103
109
  <GitBranch className="w-4 h-4 flex-shrink-0" />
104
110
  <span className="truncate">
105
111
  {latestBuild.branch_name || "main"}
@@ -108,19 +114,9 @@ export const ConnectedRepoDashboard = ({
108
114
  <div className="flex items-center gap-1">
109
115
  <Clock className="w-4 h-4 flex-shrink-0" />
110
116
  <span>
111
- Last deployed {formatTimeAgo(latestBuild.created_at)}
112
- </span>
113
- </div>
114
- <div className="flex items-center gap-1">
115
- <User className="w-4 h-4 flex-shrink-0" />
116
- <span className="truncate">
117
- {latestBuild.commit_author || "Unknown"}
118
- </span>
119
- </div>
120
- <div className="flex items-center gap-1">
121
- <Hash className="w-4 h-4 flex-shrink-0" />
122
- <span className="font-mono text-xs truncate">
123
- {latestBuild.package_build_id?.slice(-8) || "N/A"}
117
+ <time dateTime={latestBuild.created_at}>
118
+ Last deployed {formatTimeAgo(latestBuild.created_at)}
119
+ </time>
124
120
  </span>
125
121
  </div>
126
122
  </div>
@@ -134,7 +130,7 @@ export const ConnectedRepoDashboard = ({
134
130
  className="flex items-center gap-2 justify-center min-w-[120px] h-9"
135
131
  onClick={() =>
136
132
  window.open(
137
- `https://github.com/${latestBuild.commit_author}/${projectName}`,
133
+ `https://github.com/${pkg.github_repo_full_name}`,
138
134
  "_blank",
139
135
  )
140
136
  }
@@ -181,7 +177,7 @@ export const ConnectedRepoDashboard = ({
181
177
  <DropdownMenuContent align="end">
182
178
  <DropdownMenuItem asChild>
183
179
  <a
184
- href={`https://github.com/${latestBuild.commit_author}`}
180
+ href={`https://github.com/${pkg.github_repo_full_name}`}
185
181
  target="_blank"
186
182
  rel="noopener noreferrer"
187
183
  >
@@ -197,7 +193,7 @@ export const ConnectedRepoDashboard = ({
197
193
  onClick={() => {
198
194
  if (navigator.share) {
199
195
  navigator.share({
200
- title: projectName,
196
+ title: pkg.unscoped_name,
201
197
  url: window.location.href,
202
198
  })
203
199
  } else {
@@ -221,7 +217,7 @@ export const ConnectedRepoDashboard = ({
221
217
  onValueChange={setActiveTab}
222
218
  className="space-y-6"
223
219
  >
224
- <TabsList className="grid w-full grid-cols-3 lg:w-auto lg:grid-cols-3">
220
+ <TabsList className="grid w-full grid-cols-2 lg:w-auto lg:grid-cols-2">
225
221
  <TabsTrigger value="overview" className="flex items-center gap-2">
226
222
  <Activity className="w-4 h-4" />
227
223
  Overview
@@ -230,25 +226,14 @@ export const ConnectedRepoDashboard = ({
230
226
  <List className="w-4 h-4" />
231
227
  Builds
232
228
  </TabsTrigger>
233
- <TabsTrigger value="settings" className="flex items-center gap-2">
234
- <Settings className="w-4 h-4" />
235
- Settings
236
- </TabsTrigger>
237
229
  </TabsList>
238
230
 
239
231
  <TabsContent value="overview" className="space-y-6">
240
- {currentBuild && <ConnectedRepoOverview build={currentBuild} />}
232
+ {latestBuild && <ConnectedRepoOverview build={latestBuild} />}
241
233
  </TabsContent>
242
234
 
243
235
  <TabsContent value="builds" className="space-y-6">
244
- <BuildsList builds={builds} onSelectBuild={handleSelectBuild} />
245
- </TabsContent>
246
-
247
- <TabsContent value="settings" className="space-y-6">
248
- <ConnectedRepoSettings
249
- projectName={projectName}
250
- onSave={(settings) => console.log("Settings saved:", settings)}
251
- />
236
+ <BuildsList pkg={pkg} onSelectBuild={handleSelectBuild} />
252
237
  </TabsContent>
253
238
  </Tabs>
254
239
  </div>
@@ -198,7 +198,7 @@ export const ConnectedRepoOverview = ({
198
198
  </div>
199
199
 
200
200
  <div className="space-y-3">
201
- <h2 className="text-lg font-semibold text-gray-900">Build Steps</h2>
201
+ <h2 className="text-lg font-semibold text-gray-900">Logs</h2>
202
202
 
203
203
  <Collapsible
204
204
  open={openSections.transpilation}
@@ -387,7 +387,7 @@ export const ConnectedRepoOverview = ({
387
387
  ) : (
388
388
  <Clock className="w-5 h-5 text-gray-400" />
389
389
  )}
390
- <span className="font-medium">Final Build</span>
390
+ <span className="font-medium">Build</span>
391
391
  </div>
392
392
  <div className="flex items-center gap-2">
393
393
  {getStepDuration(
@@ -1,6 +1,5 @@
1
1
  export { ConnectedRepoOverview } from "./ConnectedRepoOverview"
2
2
  export { BuildsList } from "./BuildsList"
3
- export { ConnectedRepoSettings } from "./ConnectedRepoSettings"
4
3
  export { ConnectedRepoDashboard } from "./ConnectedRepoDashboard"
5
4
 
6
5
  export const getBuildStatus = (build: PackageBuild) => {
@@ -192,6 +191,7 @@ export const MOCK_DEPLOYMENTS: PackageBuild[] = [
192
191
  },
193
192
  ]
194
193
 
194
+ import { Package, PackageRelease } from "fake-snippets-api/lib/db/schema"
195
195
  import { Clock, CheckCircle, AlertCircle, Loader2 } from "lucide-react"
196
196
  export const StatusIcon = ({ status }: { status: string }) => {
197
197
  switch (status) {
@@ -205,3 +205,44 @@ export const StatusIcon = ({ status }: { status: string }) => {
205
205
  return <Clock className="w-4 h-4 text-gray-500" />
206
206
  }
207
207
  }
208
+
209
+ export const getLatestBuildForPackage = (pkg: Package): PackageBuild => {
210
+ return MOCK_DEPLOYMENTS[0]
211
+ }
212
+ export const getLatestBuildFromPackageRelease = (
213
+ pkg: PackageRelease,
214
+ ): PackageBuild => {
215
+ return MOCK_DEPLOYMENTS[0]
216
+ }
217
+ export const getPackageFromBuild = (build: PackageBuild): Package => {
218
+ return {
219
+ ai_description: "placeholder ai description",
220
+ ai_usage_instructions: "placeholder ai usage instructions",
221
+ created_at: "2025-08-06T14:37:05.802Z",
222
+ creator_account_id: "account-1234",
223
+ default_view: "files",
224
+ description: "placeholder ai description",
225
+ github_repo_full_name: "testuser/pcb-designs",
226
+ is_board: false,
227
+ is_footprint: false,
228
+ is_model: false,
229
+ is_package: false,
230
+ is_private: false,
231
+ is_public: true,
232
+ is_snippet: false,
233
+ is_source_from_github: false,
234
+ is_unlisted: false,
235
+ latest_package_release_fs_sha: "md5-425b47ef26be8f0863eca9e63e516dfa",
236
+ latest_package_release_id: "package_release_1754491026466",
237
+ latest_version: "0.0.1",
238
+ license: null,
239
+ name: "testuser/untitled-package-0",
240
+ owner_github_username: "testuser",
241
+ owner_org_id: "org-1234",
242
+ package_id: "package_1754491025802",
243
+ star_count: 0,
244
+ unscoped_name: "untitled-package-0",
245
+ updated_at: "2025-08-06T14:37:25.083Z",
246
+ website: "",
247
+ }
248
+ }
@@ -25,7 +25,7 @@ import {
25
25
  } from "@/components/ui/select"
26
26
  import { Box, Star } from "lucide-react"
27
27
  import { PackageCardSkeleton } from "@/components/PackageCardSkeleton"
28
- import { ConnectedReposCards } from "@/components/preview/ConnectedReposCards"
28
+ import { ConnectedPackagesList } from "@/components/preview/ConnectedPackagesList"
29
29
 
30
30
  export const UserProfilePage = () => {
31
31
  const { username } = useParams()
@@ -101,7 +101,6 @@ export const UserProfilePage = () => {
101
101
  if (accountError) {
102
102
  return <NotFoundPage heading="User Not Found" />
103
103
  }
104
-
105
104
  const packagesToShow =
106
105
  activeTab === "starred" ? starredPackages : userPackages
107
106
  const isLoading =
@@ -179,9 +178,13 @@ export const UserProfilePage = () => {
179
178
  <TabsList>
180
179
  <TabsTrigger value="all">Packages</TabsTrigger>
181
180
  <TabsTrigger value="starred">Starred Packages</TabsTrigger>
182
- {isCurrentUserProfile && (
183
- <TabsTrigger value="repos">Connected Repositories</TabsTrigger>
184
- )}
181
+ {isCurrentUserProfile &&
182
+ (
183
+ userPackages?.filter((x) => Boolean(x.github_repo_full_name)) ??
184
+ []
185
+ ).length > 0 && (
186
+ <TabsTrigger value="repos">Connected Repositories</TabsTrigger>
187
+ )}
185
188
  </TabsList>
186
189
  </Tabs>
187
190
  {activeTab !== "repos" && (
@@ -208,7 +211,12 @@ export const UserProfilePage = () => {
208
211
  </div>
209
212
  )}
210
213
  {activeTab === "repos" ? (
211
- <ConnectedReposCards user={String(githubUsername)} />
214
+ <ConnectedPackagesList
215
+ packages={
216
+ userPackages?.filter((x) => Boolean(x.github_repo_full_name)) ??
217
+ []
218
+ }
219
+ />
212
220
  ) : isLoading ? (
213
221
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
214
222
  {[...Array(6)].map((_, i) => (
@@ -14,11 +14,5 @@ export default function ViewConnectedRepoOverview() {
14
14
  return <NotFoundPage heading="Build Not Found" />
15
15
  }
16
16
 
17
- return (
18
- <ConnectedRepoDashboard
19
- projectName="tscircuit-project"
20
- builds={MOCK_DEPLOYMENTS}
21
- selectedBuild={selectedBuild}
22
- />
23
- )
17
+ return <ConnectedRepoDashboard latestBuild={selectedBuild} />
24
18
  }
@@ -1,343 +0,0 @@
1
- import { useEffect, useState } from "react"
2
- import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
3
- import { Button } from "@/components/ui/button"
4
- import { Input } from "@/components/ui/input"
5
- import { Label } from "@/components/ui/label"
6
- import { Switch } from "@/components/ui/switch"
7
- import { Textarea } from "@/components/ui/textarea"
8
- import {
9
- AlertDialog,
10
- AlertDialogAction,
11
- AlertDialogCancel,
12
- AlertDialogContent,
13
- AlertDialogDescription,
14
- AlertDialogFooter,
15
- AlertDialogHeader,
16
- AlertDialogTitle,
17
- AlertDialogTrigger,
18
- } from "@/components/ui/alert-dialog"
19
- import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
20
- import { Settings, Github, Shield, Trash2, Save } from "lucide-react"
21
-
22
- interface ConnectedRepoSettingsProps {
23
- projectName?: string
24
- onSave?: (settings: any) => void
25
- }
26
-
27
- export const ConnectedRepoSettings = ({
28
- projectName = "tscircuit-project",
29
- onSave,
30
- }: ConnectedRepoSettingsProps) => {
31
- // MOCK
32
- const initialSettings = {
33
- general: {
34
- projectName: projectName,
35
- description: "A TypeScript circuit design project",
36
- },
37
- git: {
38
- repository: "github.com/user/tscircuit-project",
39
- productionBranch: "main",
40
- autoBuildEnabled: true,
41
- prComment: true,
42
- buildPrs: true,
43
- },
44
- security: {
45
- privateBuilds: false,
46
- requireApprovalForPrs: true,
47
- },
48
- }
49
-
50
- const [settings, setSettings] = useState(initialSettings)
51
- const [hasChanges, setHasChanges] = useState(false)
52
-
53
- // Track changes
54
- useEffect(() => {
55
- const isChanged =
56
- JSON.stringify(settings) !== JSON.stringify(initialSettings)
57
- setHasChanges(isChanged)
58
- }, [settings])
59
-
60
- const handleSave = () => {
61
- onSave?.(settings)
62
- setHasChanges(false)
63
- }
64
-
65
- return (
66
- <div className="space-y-4 sm:space-y-6 p-4 sm:p-6">
67
- <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
68
- <div>
69
- <h2 className="text-xl sm:text-2xl font-bold text-gray-900">
70
- Settings
71
- </h2>
72
- <p className="text-sm sm:text-base text-gray-600">
73
- Configure your build settings
74
- </p>
75
- </div>
76
- <div className="flex justify-end">
77
- <Button
78
- onClick={handleSave}
79
- disabled={!hasChanges}
80
- className="flex items-center gap-2 w-full sm:w-auto"
81
- >
82
- <Save className="w-4 h-4" />
83
- Save Changes
84
- </Button>
85
- </div>
86
- </div>
87
-
88
- <Tabs defaultValue="general" className="space-y-4 sm:space-y-6">
89
- <TabsList className="grid w-full grid-cols-3">
90
- <TabsTrigger
91
- value="general"
92
- className="flex items-center gap-1 sm:gap-2 text-xs sm:text-sm"
93
- >
94
- <Settings className="w-3 h-3 sm:w-4 sm:h-4" />
95
- <span className="hidden sm:inline">General</span>
96
- <span className="sm:hidden">Gen</span>
97
- </TabsTrigger>
98
- <TabsTrigger
99
- value="git"
100
- className="flex items-center gap-1 sm:gap-2 text-xs sm:text-sm"
101
- >
102
- <Github className="w-3 h-3 sm:w-4 sm:h-4" />
103
- Git
104
- </TabsTrigger>
105
- <TabsTrigger
106
- value="security"
107
- className="flex items-center gap-1 sm:gap-2 text-xs sm:text-sm"
108
- >
109
- <Shield className="w-3 h-3 sm:w-4 sm:h-4" />
110
- <span className="hidden sm:inline">Security</span>
111
- <span className="sm:hidden">Sec</span>
112
- </TabsTrigger>
113
- </TabsList>
114
-
115
- <TabsContent value="general" className="space-y-4 sm:space-y-6">
116
- <Card>
117
- <CardHeader>
118
- <CardTitle className="text-lg sm:text-xl">
119
- General Settings
120
- </CardTitle>
121
- </CardHeader>
122
- <CardContent className="space-y-4 p-4 sm:p-6">
123
- <div className="space-y-2">
124
- <Label htmlFor="projectName">Project Name</Label>
125
- <Input
126
- id="projectName"
127
- value={settings.general.projectName}
128
- onChange={(e) =>
129
- setSettings((prev) => ({
130
- ...prev,
131
- general: { ...prev.general, projectName: e.target.value },
132
- }))
133
- }
134
- />
135
- </div>
136
-
137
- <div className="space-y-2">
138
- <Label htmlFor="description">Description</Label>
139
- <Textarea
140
- id="description"
141
- value={settings.general.description}
142
- onChange={(e) =>
143
- setSettings((prev) => ({
144
- ...prev,
145
- general: { ...prev.general, description: e.target.value },
146
- }))
147
- }
148
- rows={3}
149
- />
150
- </div>
151
- </CardContent>
152
- </Card>
153
- </TabsContent>
154
-
155
- <TabsContent value="git" className="space-y-4 sm:space-y-6">
156
- <Card>
157
- <CardHeader>
158
- <CardTitle className="text-lg sm:text-xl">
159
- Git Integration
160
- </CardTitle>
161
- </CardHeader>
162
- <CardContent className="space-y-4 p-4 sm:p-6">
163
- <div className="space-y-2">
164
- <Label htmlFor="repository">Repository</Label>
165
- <Input
166
- id="repository"
167
- value={settings.git.repository}
168
- onChange={(e) =>
169
- setSettings((prev) => ({
170
- ...prev,
171
- git: { ...prev.git, repository: e.target.value },
172
- }))
173
- }
174
- placeholder="github.com/user/repo"
175
- />
176
- </div>
177
-
178
- <div className="space-y-2">
179
- <Label htmlFor="productionBranch">Production Branch</Label>
180
- <Input
181
- id="productionBranch"
182
- value={settings.git.productionBranch}
183
- onChange={(e) =>
184
- setSettings((prev) => ({
185
- ...prev,
186
- git: { ...prev.git, productionBranch: e.target.value },
187
- }))
188
- }
189
- />
190
- </div>
191
-
192
- <div className="space-y-3">
193
- <div className="flex items-center space-x-2">
194
- <Switch
195
- id="autoBuildEnabled"
196
- checked={settings.git.autoBuildEnabled}
197
- onCheckedChange={(checked) =>
198
- setSettings((prev) => ({
199
- ...prev,
200
- git: { ...prev.git, autoBuildEnabled: checked },
201
- }))
202
- }
203
- />
204
- <Label htmlFor="autoBuildEnabled">
205
- Enable automatic builds
206
- </Label>
207
- </div>
208
-
209
- <div className="flex items-center space-x-2">
210
- <Switch
211
- id="prComment"
212
- checked={settings.git.prComment}
213
- onCheckedChange={(checked) =>
214
- setSettings((prev) => ({
215
- ...prev,
216
- git: { ...prev.git, prComment: checked },
217
- }))
218
- }
219
- />
220
- <Label htmlFor="prComment">
221
- Comment on pull requests with build preview
222
- </Label>
223
- </div>
224
-
225
- <div className="flex items-center space-x-2">
226
- <Switch
227
- id="buildPrs"
228
- checked={settings.git.buildPrs}
229
- onCheckedChange={(checked) =>
230
- setSettings((prev) => ({
231
- ...prev,
232
- git: { ...prev.git, buildPrs: checked },
233
- }))
234
- }
235
- />
236
- <Label htmlFor="buildPrs">
237
- Build pull requests automatically
238
- </Label>
239
- </div>
240
- </div>
241
- </CardContent>
242
- </Card>
243
- </TabsContent>
244
-
245
- <TabsContent value="security" className="space-y-4 sm:space-y-6">
246
- <Card>
247
- <CardHeader>
248
- <CardTitle className="text-lg sm:text-xl">
249
- Security Settings
250
- </CardTitle>
251
- </CardHeader>
252
- <CardContent className="space-y-4 p-4 sm:p-6">
253
- <div className="space-y-3">
254
- <div className="flex items-center space-x-2">
255
- <Switch
256
- id="privateBuilds"
257
- checked={settings.security.privateBuilds}
258
- onCheckedChange={(checked) =>
259
- setSettings((prev) => ({
260
- ...prev,
261
- security: {
262
- ...prev.security,
263
- privateBuilds: checked,
264
- },
265
- }))
266
- }
267
- />
268
- <Label htmlFor="privateBuilds">Make builds private</Label>
269
- </div>
270
-
271
- <div className="flex items-center space-x-2">
272
- <Switch
273
- id="requireApprovalForPrs"
274
- checked={settings.security.requireApprovalForPrs}
275
- onCheckedChange={(checked) =>
276
- setSettings((prev) => ({
277
- ...prev,
278
- security: {
279
- ...prev.security,
280
- requireApprovalForPrs: checked,
281
- },
282
- }))
283
- }
284
- />
285
- <Label htmlFor="requireApprovalForPrs">
286
- Require approval for PR builds
287
- </Label>
288
- </div>
289
- </div>
290
- </CardContent>
291
- </Card>
292
-
293
- <Card className="border-red-200">
294
- <CardHeader>
295
- <CardTitle className="text-red-600 text-lg sm:text-xl">
296
- Danger Zone
297
- </CardTitle>
298
- </CardHeader>
299
- <CardContent className="p-4 sm:p-6">
300
- <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4 p-4 border border-red-200 rounded-lg">
301
- <div>
302
- <h4 className="font-medium text-red-600">Delete Project</h4>
303
- <p className="text-sm text-gray-600">
304
- Permanently delete this project and all its builds
305
- </p>
306
- </div>
307
- <AlertDialog>
308
- <AlertDialogTrigger asChild>
309
- <Button
310
- variant="destructive"
311
- className="flex items-center gap-2 w-full sm:w-auto"
312
- >
313
- <Trash2 className="w-4 h-4" />
314
- Delete Project
315
- </Button>
316
- </AlertDialogTrigger>
317
- <AlertDialogContent>
318
- <AlertDialogHeader>
319
- <AlertDialogTitle>
320
- Are you absolutely sure?
321
- </AlertDialogTitle>
322
- <AlertDialogDescription>
323
- This action cannot be undone. This will permanently
324
- delete the project and remove all build data from our
325
- servers.
326
- </AlertDialogDescription>
327
- </AlertDialogHeader>
328
- <AlertDialogFooter>
329
- <AlertDialogCancel>Cancel</AlertDialogCancel>
330
- <AlertDialogAction className="bg-red-600 hover:bg-red-700">
331
- Delete Project
332
- </AlertDialogAction>
333
- </AlertDialogFooter>
334
- </AlertDialogContent>
335
- </AlertDialog>
336
- </div>
337
- </CardContent>
338
- </Card>
339
- </TabsContent>
340
- </Tabs>
341
- </div>
342
- )
343
- }