@shipfox/client-secrets 21.0.0 → 22.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 +15 -0
- package/dist/components/store-section-shell.d.ts +0 -5
- package/dist/components/store-section-shell.d.ts.map +1 -1
- package/dist/components/store-section-shell.js +28 -31
- package/dist/components/store-section-shell.js.map +1 -1
- package/dist/components/workspace-secrets-section.d.ts.map +1 -1
- package/dist/components/workspace-secrets-section.js +6 -6
- package/dist/components/workspace-secrets-section.js.map +1 -1
- package/dist/components/workspace-variables-section.d.ts.map +1 -1
- package/dist/components/workspace-variables-section.js +6 -6
- package/dist/components/workspace-variables-section.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/components/store-section-shell.tsx +20 -25
- package/src/components/workspace-secrets-section.tsx +7 -6
- package/src/components/workspace-variables-section.tsx +7 -6
- package/tsconfig.build.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shipfox/client-secrets",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "22.0.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/ShipfoxHQ/shipfox.git",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@swc/helpers": "^0.5.17",
|
|
29
29
|
"@tanstack/react-form": "^1.32.0",
|
|
30
|
+
"@shipfox/api-secrets-dto": "12.0.0",
|
|
30
31
|
"@shipfox/client-api": "6.0.1",
|
|
31
|
-
"@shipfox/client-shell": "
|
|
32
|
-
"@shipfox/client-ui": "
|
|
33
|
-
"@shipfox/react-ui": "2.
|
|
34
|
-
"@shipfox/api-secrets-dto": "12.0.0"
|
|
32
|
+
"@shipfox/client-shell": "22.0.0",
|
|
33
|
+
"@shipfox/client-ui": "22.0.0",
|
|
34
|
+
"@shipfox/react-ui": "2.1.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@tanstack/react-query": "^5.101.0",
|
|
@@ -1,32 +1,27 @@
|
|
|
1
|
+
import {Panel, PanelBody, PanelRow} from '@shipfox/react-ui/panel';
|
|
1
2
|
import {Skeleton} from '@shipfox/react-ui/skeleton';
|
|
2
|
-
import {cn} from '@shipfox/react-ui/utils';
|
|
3
|
-
|
|
4
|
-
export const STORE_SURFACE_CLASS =
|
|
5
|
-
'overflow-hidden rounded-8 border border-border-neutral-base bg-background-neutral-base';
|
|
6
3
|
|
|
7
4
|
/** Placeholder rows shown while the store list loads. */
|
|
8
5
|
export function StoreRowsSkeleton({label}: {label: string}) {
|
|
9
6
|
return (
|
|
10
|
-
<
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
<Panel>
|
|
8
|
+
<PanelBody asChild>
|
|
9
|
+
<ul role="status" aria-label={label}>
|
|
10
|
+
{[0, 1, 2].map((row) => (
|
|
11
|
+
<PanelRow
|
|
12
|
+
asChild
|
|
13
|
+
className="justify-start gap-cluster hover:bg-background-neutral-base"
|
|
14
|
+
key={row}
|
|
15
|
+
>
|
|
16
|
+
<li>
|
|
17
|
+
<Skeleton className="h-16 w-140" />
|
|
18
|
+
<Skeleton className="h-16 w-96" />
|
|
19
|
+
<Skeleton className="ml-auto h-14 w-80 shrink-0" />
|
|
20
|
+
</li>
|
|
21
|
+
</PanelRow>
|
|
22
|
+
))}
|
|
23
|
+
</ul>
|
|
24
|
+
</PanelBody>
|
|
25
|
+
</Panel>
|
|
21
26
|
);
|
|
22
27
|
}
|
|
23
|
-
|
|
24
|
-
export function StoreSurface({
|
|
25
|
-
className,
|
|
26
|
-
children,
|
|
27
|
-
}: {
|
|
28
|
-
className?: string;
|
|
29
|
-
children: React.ReactNode;
|
|
30
|
-
}) {
|
|
31
|
-
return <div className={cn(STORE_SURFACE_CLASS, className)}>{children}</div>;
|
|
32
|
-
}
|
|
@@ -27,7 +27,7 @@ import {copyKeyName} from './copy-key.js';
|
|
|
27
27
|
import {DeleteEntryDialog} from './delete-entry-dialog.js';
|
|
28
28
|
import {secretsErrorToFormError} from './form-errors.js';
|
|
29
29
|
import {SecretForm} from './secret-form.js';
|
|
30
|
-
import {StoreRowsSkeleton
|
|
30
|
+
import {StoreRowsSkeleton} from './store-section-shell.js';
|
|
31
31
|
|
|
32
32
|
const SECRETS_DESCRIPTION =
|
|
33
33
|
'Encrypted, write-only values for sensitive data like API keys, tokens, and passwords.';
|
|
@@ -71,24 +71,25 @@ export function WorkspaceSecretsSection({workspaceId}: {workspaceId: string}) {
|
|
|
71
71
|
{secretsQuery.isPending ? <StoreRowsSkeleton label="Loading secrets" /> : null}
|
|
72
72
|
|
|
73
73
|
{secretsQuery.isError && secretsQuery.data === undefined ? (
|
|
74
|
-
<
|
|
75
|
-
<QueryLoadError query={secretsQuery} subject="secrets" />
|
|
76
|
-
</
|
|
74
|
+
<Panel>
|
|
75
|
+
<QueryLoadError query={secretsQuery} subject="secrets" variant="panel" />
|
|
76
|
+
</Panel>
|
|
77
77
|
) : null}
|
|
78
78
|
|
|
79
79
|
{secretsQuery.data !== undefined && secrets.length === 0 ? (
|
|
80
|
-
<
|
|
80
|
+
<Panel>
|
|
81
81
|
<EmptyState
|
|
82
82
|
icon="keyLine"
|
|
83
83
|
title="No secrets yet"
|
|
84
84
|
description={EMPTY_SECRETS_DESCRIPTION}
|
|
85
|
+
variant="panel"
|
|
85
86
|
action={
|
|
86
87
|
<Button size="sm" onClick={() => setFormState({mode: 'create'})}>
|
|
87
88
|
Create secret
|
|
88
89
|
</Button>
|
|
89
90
|
}
|
|
90
91
|
/>
|
|
91
|
-
</
|
|
92
|
+
</Panel>
|
|
92
93
|
) : null}
|
|
93
94
|
|
|
94
95
|
{secrets.length > 0 ? (
|
|
@@ -26,7 +26,7 @@ import {useDeleteVariableMutation, useVariablesQuery} from '#hooks/api/variables
|
|
|
26
26
|
import {copyKeyName} from './copy-key.js';
|
|
27
27
|
import {DeleteEntryDialog} from './delete-entry-dialog.js';
|
|
28
28
|
import {secretsErrorToFormError} from './form-errors.js';
|
|
29
|
-
import {StoreRowsSkeleton
|
|
29
|
+
import {StoreRowsSkeleton} from './store-section-shell.js';
|
|
30
30
|
import {VariableForm} from './variable-form.js';
|
|
31
31
|
|
|
32
32
|
const VARIABLES_DESCRIPTION =
|
|
@@ -71,24 +71,25 @@ export function WorkspaceVariablesSection({workspaceId}: {workspaceId: string})
|
|
|
71
71
|
{variablesQuery.isPending ? <StoreRowsSkeleton label="Loading variables" /> : null}
|
|
72
72
|
|
|
73
73
|
{variablesQuery.isError && variablesQuery.data === undefined ? (
|
|
74
|
-
<
|
|
75
|
-
<QueryLoadError query={variablesQuery} subject="variables" />
|
|
76
|
-
</
|
|
74
|
+
<Panel>
|
|
75
|
+
<QueryLoadError query={variablesQuery} subject="variables" variant="panel" />
|
|
76
|
+
</Panel>
|
|
77
77
|
) : null}
|
|
78
78
|
|
|
79
79
|
{variablesQuery.data !== undefined && variables.length === 0 ? (
|
|
80
|
-
<
|
|
80
|
+
<Panel>
|
|
81
81
|
<EmptyState
|
|
82
82
|
icon="bracesLine"
|
|
83
83
|
title="No variables yet"
|
|
84
84
|
description={EMPTY_VARIABLES_DESCRIPTION}
|
|
85
|
+
variant="panel"
|
|
85
86
|
action={
|
|
86
87
|
<Button size="sm" onClick={() => setFormState({mode: 'create'})}>
|
|
87
88
|
Create variable
|
|
88
89
|
</Button>
|
|
89
90
|
}
|
|
90
91
|
/>
|
|
91
|
-
</
|
|
92
|
+
</Panel>
|
|
92
93
|
) : null}
|
|
93
94
|
|
|
94
95
|
{variables.length > 0 ? (
|