@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.
Files changed (39) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +32 -0
  3. package/dist/components/model-provider-reminder-banner.js +1 -1
  4. package/dist/components/model-provider-reminder-banner.js.map +1 -1
  5. package/dist/components/project-crumb.js +4 -4
  6. package/dist/components/project-crumb.js.map +1 -1
  7. package/dist/components/project-switcher.js +2 -2
  8. package/dist/components/project-switcher.js.map +1 -1
  9. package/dist/components/source-strip.js +3 -3
  10. package/dist/components/source-strip.js.map +1 -1
  11. package/dist/feature.d.ts +18 -18
  12. package/dist/feature.d.ts.map +1 -1
  13. package/dist/hooks/api/definitions.d.ts +1 -1
  14. package/dist/hooks/api/definitions.d.ts.map +1 -1
  15. package/dist/hooks/api/projects.d.ts +1 -1
  16. package/dist/hooks/api/projects.d.ts.map +1 -1
  17. package/dist/pages/create-project-page.js +13 -13
  18. package/dist/pages/create-project-page.js.map +1 -1
  19. package/dist/pages/create-project-page.stories.d.ts.map +1 -1
  20. package/dist/pages/project-settings-page.js +3 -3
  21. package/dist/pages/project-settings-page.js.map +1 -1
  22. package/dist/pages/project-settings-page.stories.d.ts.map +1 -1
  23. package/dist/pages/projects-hub-page.js +13 -13
  24. package/dist/pages/projects-hub-page.js.map +1 -1
  25. package/dist/routes/create-project.d.ts.map +1 -1
  26. package/dist/routes/home.d.ts.map +1 -1
  27. package/dist/routes/project-index.d.ts.map +1 -1
  28. package/dist/routes/project-settings-index.d.ts.map +1 -1
  29. package/dist/routes/project-settings.d.ts.map +1 -1
  30. package/dist/tsconfig.test.tsbuildinfo +1 -1
  31. package/package.json +7 -7
  32. package/src/components/model-provider-reminder-banner.tsx +1 -1
  33. package/src/components/project-crumb.tsx +4 -4
  34. package/src/components/project-switcher.tsx +2 -2
  35. package/src/components/source-strip.tsx +3 -3
  36. package/src/pages/create-project-page.tsx +13 -13
  37. package/src/pages/project-settings-page.tsx +3 -3
  38. package/src/pages/projects-hub-page.tsx +14 -14
  39. 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": "14.0.0",
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": "14.0.0",
34
+ "@shipfox/client-agent": "15.0.0",
35
35
  "@shipfox/client-api": "6.0.1",
36
- "@shipfox/client-auth": "14.0.0",
37
- "@shipfox/client-integrations": "14.0.0",
38
- "@shipfox/client-shell": "14.0.0",
39
- "@shipfox/client-ui": "14.0.0",
40
- "@shipfox/react-ui": "0.5.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-28">
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 px-6 py-4 rounded-6 hover:bg-background-components-hover transition-colors max-w-[240px] truncate"
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="ml-2 grid place-items-center size-24 rounded-4 text-foreground-neutral-muted hover:bg-background-components-hover hover:text-foreground-neutral-base transition-colors"
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-2 text-md font-medium text-foreground-neutral-base px-6 py-4 rounded-6 hover:bg-background-components-hover transition-colors"
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 mr-8 ${activeProjectId ? 'opacity-0' : 'opacity-100'}`}
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 mr-8 ${
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-8 rounded-8 border border-border-neutral-base bg-background-neutral-base px-14 py-10 sm:flex-row sm:items-center sm:justify-between"
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-10">
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-2 sm:flex-row sm:items-center sm:gap-10">
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-24">
202
- <header className="flex flex-col gap-6">
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-12">
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-32 lg:grid-cols-[minmax(0,1fr)_340px]"
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-32">
243
- <section className="flex flex-col gap-16" aria-label="Source integration">
244
- <div className="flex items-start justify-between gap-16">
245
- <div className="flex flex-col gap-4">
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-16" aria-label="Repository">
275
- <div className="flex flex-col gap-4">
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-18 rounded-8 border border-border-neutral-base bg-background-neutral-base p-20">
300
- <div className="flex flex-col gap-4">
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-10">
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-24">
127
- <header className="flex flex-col gap-6">
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-16"
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-24">
44
- <header className="flex flex-col gap-16">
45
- <div className="flex items-start justify-between gap-24 max-[640px]:flex-col">
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-12 max-[640px]:flex-col max-[640px]:items-stretch">
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-12 max-[760px]:grid-cols-1">
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" className="mt-16">
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="mt-16 flex justify-center">
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-12 max-[760px]:grid-cols-1"
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-16">
144
- <div className="flex items-center gap-12">
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-16 transition-colors hover:bg-background-components-hover">
213
- <div className="flex min-w-0 items-center gap-12">
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-8">
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>