@shipfox/client-projects 14.0.0 → 15.0.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +32 -0
- package/dist/components/model-provider-reminder-banner.js +1 -1
- package/dist/components/model-provider-reminder-banner.js.map +1 -1
- package/dist/components/project-crumb.js +4 -4
- package/dist/components/project-crumb.js.map +1 -1
- package/dist/components/project-switcher.js +2 -2
- package/dist/components/project-switcher.js.map +1 -1
- package/dist/components/source-strip.js +3 -3
- package/dist/components/source-strip.js.map +1 -1
- package/dist/feature.d.ts +18 -18
- package/dist/feature.d.ts.map +1 -1
- package/dist/hooks/api/definitions.d.ts +1 -1
- package/dist/hooks/api/definitions.d.ts.map +1 -1
- package/dist/hooks/api/projects.d.ts +1 -1
- package/dist/hooks/api/projects.d.ts.map +1 -1
- package/dist/pages/create-project-page.js +13 -13
- package/dist/pages/create-project-page.js.map +1 -1
- package/dist/pages/create-project-page.stories.d.ts.map +1 -1
- package/dist/pages/project-settings-page.js +3 -3
- package/dist/pages/project-settings-page.js.map +1 -1
- package/dist/pages/project-settings-page.stories.d.ts.map +1 -1
- package/dist/pages/projects-hub-page.js +13 -13
- package/dist/pages/projects-hub-page.js.map +1 -1
- package/dist/routes/create-project.d.ts.map +1 -1
- package/dist/routes/home.d.ts.map +1 -1
- package/dist/routes/project-index.d.ts.map +1 -1
- package/dist/routes/project-settings-index.d.ts.map +1 -1
- package/dist/routes/project-settings.d.ts.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/components/model-provider-reminder-banner.tsx +1 -1
- package/src/components/project-crumb.tsx +4 -4
- package/src/components/project-switcher.tsx +2 -2
- package/src/components/source-strip.tsx +3 -3
- package/src/pages/create-project-page.tsx +13 -13
- package/src/pages/project-settings-page.tsx +3 -3
- package/src/pages/projects-hub-page.tsx +14 -14
- package/tsconfig.build.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shipfox/client-projects",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "15.0.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/ShipfoxHQ/shipfox.git",
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"@shipfox/api-definitions-dto": "12.0.0",
|
|
32
32
|
"@shipfox/api-integration-core-dto": "12.0.0",
|
|
33
33
|
"@shipfox/api-projects-dto": "12.0.0",
|
|
34
|
-
"@shipfox/client-agent": "
|
|
34
|
+
"@shipfox/client-agent": "15.0.0",
|
|
35
35
|
"@shipfox/client-api": "6.0.1",
|
|
36
|
-
"@shipfox/client-auth": "14.0.
|
|
37
|
-
"@shipfox/client-integrations": "14.0.
|
|
38
|
-
"@shipfox/client-shell": "14.0.
|
|
39
|
-
"@shipfox/client-ui": "14.0.
|
|
40
|
-
"@shipfox/react-ui": "0.
|
|
36
|
+
"@shipfox/client-auth": "14.0.1",
|
|
37
|
+
"@shipfox/client-integrations": "14.0.1",
|
|
38
|
+
"@shipfox/client-shell": "14.0.1",
|
|
39
|
+
"@shipfox/client-ui": "14.0.1",
|
|
40
|
+
"@shipfox/react-ui": "1.0.0"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"@tanstack/react-query": "^5.101.0",
|
|
@@ -34,7 +34,7 @@ export function ModelProviderReminderBanner({workspaceId}: {workspaceId: string}
|
|
|
34
34
|
}
|
|
35
35
|
}}
|
|
36
36
|
>
|
|
37
|
-
<AlertContent className="pr-
|
|
37
|
+
<AlertContent className="pr-[28px]">
|
|
38
38
|
<AlertTitle>Finish setting up a model provider</AlertTitle>
|
|
39
39
|
<AlertDescription>
|
|
40
40
|
Add workspace credentials, or keep using the instance default.
|
|
@@ -23,12 +23,12 @@ export function ProjectCrumb({
|
|
|
23
23
|
|
|
24
24
|
if (projectSlug && projectName) {
|
|
25
25
|
return (
|
|
26
|
-
<div className="flex items-center">
|
|
26
|
+
<div className="flex items-center gap-tight">
|
|
27
27
|
<Link
|
|
28
28
|
to="/w/$workspaceSlug/p/$projectSlug"
|
|
29
29
|
params={{workspaceSlug, projectSlug}}
|
|
30
30
|
aria-current="page"
|
|
31
|
-
className="text-md font-medium text-foreground-neutral-base
|
|
31
|
+
className="text-md font-medium text-foreground-neutral-base p-tight rounded-6 hover:bg-background-components-hover transition-colors max-w-[240px] truncate"
|
|
32
32
|
>
|
|
33
33
|
{projectName}
|
|
34
34
|
</Link>
|
|
@@ -39,7 +39,7 @@ export function ProjectCrumb({
|
|
|
39
39
|
aria-label="Switch project"
|
|
40
40
|
aria-haspopup="listbox"
|
|
41
41
|
aria-expanded={open}
|
|
42
|
-
className="
|
|
42
|
+
className="grid place-items-center size-24 rounded-4 text-foreground-neutral-muted hover:bg-background-components-hover hover:text-foreground-neutral-base transition-colors"
|
|
43
43
|
>
|
|
44
44
|
<Icon name="arrowDownSLine" className="size-16" />
|
|
45
45
|
</button>
|
|
@@ -65,7 +65,7 @@ export function ProjectCrumb({
|
|
|
65
65
|
aria-label="Switch project"
|
|
66
66
|
aria-haspopup="listbox"
|
|
67
67
|
aria-expanded={open}
|
|
68
|
-
className="flex items-center gap-
|
|
68
|
+
className="flex items-center gap-tight text-md font-medium text-foreground-neutral-base p-tight rounded-6 hover:bg-background-components-hover transition-colors"
|
|
69
69
|
>
|
|
70
70
|
<span className="max-w-[240px] truncate">All projects</span>
|
|
71
71
|
<Icon name="arrowDownSLine" className="size-16 text-foreground-neutral-muted" />
|
|
@@ -100,7 +100,7 @@ export function ProjectSwitcher({
|
|
|
100
100
|
<CommandItem value="__all" keywords={['all projects']} onSelect={handleSelectAll}>
|
|
101
101
|
<Icon
|
|
102
102
|
name="check"
|
|
103
|
-
className={`size-16
|
|
103
|
+
className={`size-16 ${activeProjectId ? 'opacity-0' : 'opacity-100'}`}
|
|
104
104
|
/>
|
|
105
105
|
All projects
|
|
106
106
|
</CommandItem>
|
|
@@ -116,7 +116,7 @@ export function ProjectSwitcher({
|
|
|
116
116
|
>
|
|
117
117
|
<Icon
|
|
118
118
|
name="check"
|
|
119
|
-
className={`size-16
|
|
119
|
+
className={`size-16 ${
|
|
120
120
|
activeProjectId === project.id ? 'opacity-100' : 'opacity-0'
|
|
121
121
|
}`}
|
|
122
122
|
/>
|
|
@@ -30,12 +30,12 @@ export function SourceStrip({
|
|
|
30
30
|
|
|
31
31
|
return (
|
|
32
32
|
<section
|
|
33
|
-
className="flex flex-col gap-
|
|
33
|
+
className="flex flex-col gap-inline rounded-8 border border-border-neutral-base bg-background-neutral-base px-row py-row sm:flex-row sm:items-center sm:justify-between"
|
|
34
34
|
aria-label="Project source"
|
|
35
35
|
>
|
|
36
|
-
<div className="flex min-w-0 items-center gap-
|
|
36
|
+
<div className="flex min-w-0 items-center gap-inline">
|
|
37
37
|
<Icon name={providerIconName(connection?.provider)} className="size-20 shrink-0" />
|
|
38
|
-
<div className="flex min-w-0 flex-col gap-
|
|
38
|
+
<div className="flex min-w-0 flex-col gap-tight sm:flex-row sm:items-center sm:gap-inline">
|
|
39
39
|
{connectionsQuery.isPending ? (
|
|
40
40
|
<Skeleton className="h-16 w-160" />
|
|
41
41
|
) : (
|
|
@@ -198,8 +198,8 @@ export function CreateProjectPage() {
|
|
|
198
198
|
: 'No repositories visible to this connection.';
|
|
199
199
|
|
|
200
200
|
return (
|
|
201
|
-
<div className="flex w-full flex-col gap-
|
|
202
|
-
<header className="flex flex-col gap-
|
|
201
|
+
<div className="flex w-full flex-col gap-section">
|
|
202
|
+
<header className="flex flex-col gap-inline">
|
|
203
203
|
<Header id="create-project-title" variant="h1">
|
|
204
204
|
Create project
|
|
205
205
|
</Header>
|
|
@@ -213,7 +213,7 @@ export function CreateProjectPage() {
|
|
|
213
213
|
|
|
214
214
|
{connectionsQuery.isError ? (
|
|
215
215
|
<Callout role="alert" type="error">
|
|
216
|
-
<div className="flex w-full flex-wrap items-center justify-between gap-
|
|
216
|
+
<div className="flex w-full flex-wrap items-center justify-between gap-cluster">
|
|
217
217
|
<Text size="sm" className="min-w-[240px] flex-1">
|
|
218
218
|
Could not load source integrations. Refresh the integrations list to continue.
|
|
219
219
|
</Text>
|
|
@@ -237,12 +237,12 @@ export function CreateProjectPage() {
|
|
|
237
237
|
}}
|
|
238
238
|
noValidate
|
|
239
239
|
aria-labelledby="create-project-title"
|
|
240
|
-
className="grid items-start gap-
|
|
240
|
+
className="grid items-start gap-region lg:grid-cols-[minmax(0,1fr)_340px]"
|
|
241
241
|
>
|
|
242
|
-
<div className="flex min-w-0 flex-col gap-
|
|
243
|
-
<section className="flex flex-col gap-
|
|
244
|
-
<div className="flex items-start justify-between gap-
|
|
245
|
-
<div className="flex flex-col gap-
|
|
242
|
+
<div className="flex min-w-0 flex-col gap-region">
|
|
243
|
+
<section className="flex flex-col gap-group" aria-label="Source integration">
|
|
244
|
+
<div className="flex items-start justify-between gap-group">
|
|
245
|
+
<div className="flex flex-col gap-tight">
|
|
246
246
|
<Header variant="h3">Source integration</Header>
|
|
247
247
|
<Text size="sm" className="text-foreground-neutral-muted">
|
|
248
248
|
Choose the integration that can access the repository.
|
|
@@ -271,8 +271,8 @@ export function CreateProjectPage() {
|
|
|
271
271
|
</section>
|
|
272
272
|
|
|
273
273
|
{showRepoPicker ? (
|
|
274
|
-
<section className="flex flex-col gap-
|
|
275
|
-
<div className="flex flex-col gap-
|
|
274
|
+
<section className="flex flex-col gap-group" aria-label="Repository">
|
|
275
|
+
<div className="flex flex-col gap-tight">
|
|
276
276
|
<Header variant="h3">Repository</Header>
|
|
277
277
|
<Text size="sm" className="text-foreground-neutral-muted">
|
|
278
278
|
Select the repository this project tracks.
|
|
@@ -296,8 +296,8 @@ export function CreateProjectPage() {
|
|
|
296
296
|
</div>
|
|
297
297
|
|
|
298
298
|
<aside className="lg:sticky lg:top-32">
|
|
299
|
-
<div className="flex flex-col gap-
|
|
300
|
-
<div className="flex flex-col gap-
|
|
299
|
+
<div className="flex flex-col gap-group rounded-8 border border-border-neutral-base bg-background-neutral-base p-panel">
|
|
300
|
+
<div className="flex flex-col gap-tight">
|
|
301
301
|
<Header variant="h3">Project details</Header>
|
|
302
302
|
<Text size="sm" className="text-foreground-neutral-muted">
|
|
303
303
|
Confirm the source and create the project.
|
|
@@ -409,7 +409,7 @@ function ProjectSummary({
|
|
|
409
409
|
repositoryName: string | undefined;
|
|
410
410
|
}) {
|
|
411
411
|
return (
|
|
412
|
-
<div className="flex min-w-0 items-center gap-
|
|
412
|
+
<div className="flex min-w-0 items-center gap-inline">
|
|
413
413
|
{repositoryName ? (
|
|
414
414
|
<IntegrationIcon
|
|
415
415
|
source={connection?.provider}
|
|
@@ -123,8 +123,8 @@ function ProjectSettingsForm({project}: {project: Project}) {
|
|
|
123
123
|
|
|
124
124
|
return (
|
|
125
125
|
<>
|
|
126
|
-
<div className="flex min-w-0 flex-col gap-
|
|
127
|
-
<header className="flex flex-col gap-
|
|
126
|
+
<div className="flex min-w-0 flex-col gap-section">
|
|
127
|
+
<header className="flex flex-col gap-inline">
|
|
128
128
|
<Header variant="h1">General</Header>
|
|
129
129
|
<Text size="sm" className="text-foreground-neutral-muted">
|
|
130
130
|
Update the project name and the slug used in its URLs.
|
|
@@ -138,7 +138,7 @@ function ProjectSettingsForm({project}: {project: Project}) {
|
|
|
138
138
|
) : null}
|
|
139
139
|
|
|
140
140
|
<form
|
|
141
|
-
className="flex max-w-[560px] flex-col gap-
|
|
141
|
+
className="flex max-w-[560px] flex-col gap-group"
|
|
142
142
|
noValidate
|
|
143
143
|
onSubmit={(event) => {
|
|
144
144
|
event.preventDefault();
|
|
@@ -40,12 +40,12 @@ export function ProjectsHubPage({search = ''}: {search?: string}) {
|
|
|
40
40
|
const hasNoData = !query.data;
|
|
41
41
|
|
|
42
42
|
return (
|
|
43
|
-
<div className="flex w-full flex-col gap-
|
|
44
|
-
<header className="flex flex-col gap-
|
|
45
|
-
<div className="flex items-start justify-between gap-
|
|
43
|
+
<div className="flex w-full flex-col gap-section">
|
|
44
|
+
<header className="flex flex-col gap-group">
|
|
45
|
+
<div className="flex items-start justify-between gap-section max-[640px]:flex-col">
|
|
46
46
|
<Header variant="h2">Projects</Header>
|
|
47
47
|
</div>
|
|
48
|
-
<div className="flex items-center gap-
|
|
48
|
+
<div className="flex items-center gap-cluster max-[640px]:flex-col max-[640px]:items-stretch">
|
|
49
49
|
<Input
|
|
50
50
|
type="search"
|
|
51
51
|
value={search}
|
|
@@ -94,8 +94,8 @@ export function ProjectsHubPage({search = ''}: {search?: string}) {
|
|
|
94
94
|
) : null}
|
|
95
95
|
|
|
96
96
|
{projects.length > 0 ? (
|
|
97
|
-
<section aria-label="Projects list">
|
|
98
|
-
<ul className="grid grid-cols-2 gap-
|
|
97
|
+
<section className="flex flex-col gap-group" aria-label="Projects list">
|
|
98
|
+
<ul className="grid grid-cols-2 gap-cluster max-[760px]:grid-cols-1">
|
|
99
99
|
{projects.map((project) => (
|
|
100
100
|
<ProjectCard
|
|
101
101
|
project={project}
|
|
@@ -108,14 +108,14 @@ export function ProjectsHubPage({search = ''}: {search?: string}) {
|
|
|
108
108
|
))}
|
|
109
109
|
</ul>
|
|
110
110
|
{query.error && query.data ? (
|
|
111
|
-
<Callout role="alert" type="error"
|
|
111
|
+
<Callout role="alert" type="error">
|
|
112
112
|
<Text size="sm">
|
|
113
113
|
Could not load the next page. Existing projects are still shown.
|
|
114
114
|
</Text>
|
|
115
115
|
</Callout>
|
|
116
116
|
) : null}
|
|
117
117
|
{query.hasNextPage ? (
|
|
118
|
-
<div className="
|
|
118
|
+
<div className="flex justify-center">
|
|
119
119
|
<Button
|
|
120
120
|
variant="secondary"
|
|
121
121
|
isLoading={query.isFetchingNextPage}
|
|
@@ -136,12 +136,12 @@ function ProjectsSkeleton() {
|
|
|
136
136
|
<ul
|
|
137
137
|
role="status"
|
|
138
138
|
aria-label="Loading projects"
|
|
139
|
-
className="grid grid-cols-2 gap-
|
|
139
|
+
className="grid grid-cols-2 gap-cluster max-[760px]:grid-cols-1"
|
|
140
140
|
>
|
|
141
141
|
{[0, 1, 2, 3, 4, 5].map((row) => (
|
|
142
142
|
<li key={row}>
|
|
143
|
-
<Card className="h-full p-
|
|
144
|
-
<div className="flex items-center gap-
|
|
143
|
+
<Card className="h-full p-panel-compact">
|
|
144
|
+
<div className="flex items-center gap-cluster">
|
|
145
145
|
<Skeleton className="size-24 shrink-0" />
|
|
146
146
|
<Skeleton className="h-16 w-1/2" />
|
|
147
147
|
</div>
|
|
@@ -209,8 +209,8 @@ function ProjectCard({
|
|
|
209
209
|
params={{workspaceSlug, projectSlug: project.slug}}
|
|
210
210
|
className="block h-full rounded-8 focus-visible:shadow-button-neutral-focus focus-visible:outline-none"
|
|
211
211
|
>
|
|
212
|
-
<Card className="h-full p-
|
|
213
|
-
<div className="flex min-w-0 items-center gap-
|
|
212
|
+
<Card className="h-full p-panel-compact transition-colors hover:bg-background-components-hover">
|
|
213
|
+
<div className="flex min-w-0 items-center gap-cluster">
|
|
214
214
|
{/* Settle on success or error: a failed fetch falls back to the
|
|
215
215
|
neutral provider icon rather than spinning forever. */}
|
|
216
216
|
{connectionsSettled ? (
|
|
@@ -222,7 +222,7 @@ function ProjectCard({
|
|
|
222
222
|
) : (
|
|
223
223
|
<Skeleton className="size-24 shrink-0" />
|
|
224
224
|
)}
|
|
225
|
-
<div className="flex min-w-0 flex-1 items-center gap-
|
|
225
|
+
<div className="flex min-w-0 flex-1 items-center gap-inline">
|
|
226
226
|
<Text size="md" bold className="truncate">
|
|
227
227
|
{project.name}
|
|
228
228
|
</Text>
|