@tai42/studio-sdk 18.1.0 → 18.2.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.
|
@@ -49,9 +49,18 @@ export interface SecretRefFieldProps {
|
|
|
49
49
|
* the target pointer, or the entry has no key yet to hint the generated name.
|
|
50
50
|
*/
|
|
51
51
|
readonly pasteDisabledReason?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Which editor a value-less field opens on when key picking is available. Defaults to
|
|
54
|
+
* `'paste'` (the write-first behaviour): a host adding a brand-new secret lands on the
|
|
55
|
+
* paste input. A host that only ever REFERENCES existing keys passes `'key'` so a fresh
|
|
56
|
+
* field opens straight on the key picker rather than a paste input it would block. Has
|
|
57
|
+
* no effect once a value is committed (the chip is shown) or when key picking is off
|
|
58
|
+
* (paste-only, fail closed).
|
|
59
|
+
*/
|
|
60
|
+
readonly initialMode?: 'paste' | 'key';
|
|
52
61
|
/** Visible field label; the accessible name of the inner control. */
|
|
53
62
|
readonly label?: string;
|
|
54
63
|
readonly idPrefix?: string;
|
|
55
64
|
}
|
|
56
|
-
export declare function SecretRefField({ value, onChange, availableKeys, keyPickingAvailable, pasteDisabledReason, label, idPrefix, }: SecretRefFieldProps): ReactNode;
|
|
65
|
+
export declare function SecretRefField({ value, onChange, availableKeys, keyPickingAvailable, pasteDisabledReason, initialMode, label, idPrefix, }: SecretRefFieldProps): ReactNode;
|
|
57
66
|
//# sourceMappingURL=SecretRefField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretRefField.d.ts","sourceRoot":"","sources":["../../src/schema-form/SecretRefField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IACtC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,KAAgB,EAChB,QAAuB,GACxB,EAAE,mBAAmB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"SecretRefField.d.ts","sourceRoot":"","sources":["../../src/schema-form/SecretRefField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IACtC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvC,qEAAqE;IACrE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAKD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,KAAgB,EAChB,QAAuB,GACxB,EAAE,mBAAmB,GAAG,SAAS,CAyFjC"}
|
|
@@ -7,13 +7,22 @@ import { Button } from '../components/primitives';
|
|
|
7
7
|
import { Select } from '../components/select';
|
|
8
8
|
/** A fixed-width mask that never encodes the masked value's length. */
|
|
9
9
|
const MASK = '••••••••';
|
|
10
|
-
export function SecretRefField({ value, onChange, availableKeys, keyPickingAvailable, pasteDisabledReason, label = 'Secret', idPrefix = 'secret-ref', }) {
|
|
10
|
+
export function SecretRefField({ value, onChange, availableKeys, keyPickingAvailable, pasteDisabledReason, initialMode, label = 'Secret', idPrefix = 'secret-ref', }) {
|
|
11
11
|
const canPick = keyPickingAvailable === true;
|
|
12
12
|
const pasteBlocked = pasteDisabledReason !== undefined;
|
|
13
|
+
// A committed key reference opens on the key editor; otherwise a value-less field opens
|
|
14
|
+
// on the host's `initialMode` (default `paste`). Key picking off is always paste-only.
|
|
15
|
+
const startMode = () => {
|
|
16
|
+
if (!canPick)
|
|
17
|
+
return 'paste';
|
|
18
|
+
if (value?.source === 'key')
|
|
19
|
+
return 'key';
|
|
20
|
+
return initialMode ?? 'paste';
|
|
21
|
+
};
|
|
13
22
|
// Editing is forced while there is no value to show as a chip; otherwise the
|
|
14
23
|
// chip is shown until the user asks to replace it.
|
|
15
24
|
const [editing, setEditing] = useState(value === undefined);
|
|
16
|
-
const [mode, setMode] = useState(
|
|
25
|
+
const [mode, setMode] = useState(startMode);
|
|
17
26
|
const [draftSecret, setDraftSecret] = useState('');
|
|
18
27
|
const [pickedKey, setPickedKey] = useState('');
|
|
19
28
|
const [revealed, setRevealed] = useState(false);
|
|
@@ -45,7 +54,7 @@ export function SecretRefField({ value, onChange, availableKeys, keyPickingAvail
|
|
|
45
54
|
setDraftSecret('');
|
|
46
55
|
setPickedKey('');
|
|
47
56
|
setRevealed(false);
|
|
48
|
-
setMode(
|
|
57
|
+
setMode(startMode());
|
|
49
58
|
setEditing(true);
|
|
50
59
|
};
|
|
51
60
|
if (!editing && value !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretRefField.js","sourceRoot":"","sources":["../../src/schema-form/SecretRefField.tsx"],"names":[],"mappings":";AAiBA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"SecretRefField.js","sourceRoot":"","sources":["../../src/schema-form/SecretRefField.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tai42/studio-sdk",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.2.0",
|
|
4
4
|
"description": "The Studio plugin contract, shared UI components, and hooks that every feature builds on.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "tai42 <oss@tai42.ai>",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"@radix-ui/react-select": "^2.3.2",
|
|
97
97
|
"@radix-ui/react-tabs": "^1.1.21",
|
|
98
98
|
"@radix-ui/react-tooltip": "^1.2.16",
|
|
99
|
-
"@tai42/api-client": "18.
|
|
99
|
+
"@tai42/api-client": "18.2.0"
|
|
100
100
|
},
|
|
101
101
|
"scripts": {
|
|
102
102
|
"build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
@@ -54,6 +54,15 @@ export interface SecretRefFieldProps {
|
|
|
54
54
|
* the target pointer, or the entry has no key yet to hint the generated name.
|
|
55
55
|
*/
|
|
56
56
|
readonly pasteDisabledReason?: string;
|
|
57
|
+
/**
|
|
58
|
+
* Which editor a value-less field opens on when key picking is available. Defaults to
|
|
59
|
+
* `'paste'` (the write-first behaviour): a host adding a brand-new secret lands on the
|
|
60
|
+
* paste input. A host that only ever REFERENCES existing keys passes `'key'` so a fresh
|
|
61
|
+
* field opens straight on the key picker rather than a paste input it would block. Has
|
|
62
|
+
* no effect once a value is committed (the chip is shown) or when key picking is off
|
|
63
|
+
* (paste-only, fail closed).
|
|
64
|
+
*/
|
|
65
|
+
readonly initialMode?: 'paste' | 'key';
|
|
57
66
|
/** Visible field label; the accessible name of the inner control. */
|
|
58
67
|
readonly label?: string;
|
|
59
68
|
readonly idPrefix?: string;
|
|
@@ -68,18 +77,25 @@ export function SecretRefField({
|
|
|
68
77
|
availableKeys,
|
|
69
78
|
keyPickingAvailable,
|
|
70
79
|
pasteDisabledReason,
|
|
80
|
+
initialMode,
|
|
71
81
|
label = 'Secret',
|
|
72
82
|
idPrefix = 'secret-ref',
|
|
73
83
|
}: SecretRefFieldProps): ReactNode {
|
|
74
84
|
const canPick = keyPickingAvailable === true;
|
|
75
85
|
const pasteBlocked = pasteDisabledReason !== undefined;
|
|
76
86
|
|
|
87
|
+
// A committed key reference opens on the key editor; otherwise a value-less field opens
|
|
88
|
+
// on the host's `initialMode` (default `paste`). Key picking off is always paste-only.
|
|
89
|
+
const startMode = (): 'key' | 'paste' => {
|
|
90
|
+
if (!canPick) return 'paste';
|
|
91
|
+
if (value?.source === 'key') return 'key';
|
|
92
|
+
return initialMode ?? 'paste';
|
|
93
|
+
};
|
|
94
|
+
|
|
77
95
|
// Editing is forced while there is no value to show as a chip; otherwise the
|
|
78
96
|
// chip is shown until the user asks to replace it.
|
|
79
97
|
const [editing, setEditing] = useState(value === undefined);
|
|
80
|
-
const [mode, setMode] = useState<'key' | 'paste'>(
|
|
81
|
-
value?.source === 'key' && canPick ? 'key' : 'paste',
|
|
82
|
-
);
|
|
98
|
+
const [mode, setMode] = useState<'key' | 'paste'>(startMode);
|
|
83
99
|
const [draftSecret, setDraftSecret] = useState('');
|
|
84
100
|
const [pickedKey, setPickedKey] = useState('');
|
|
85
101
|
const [revealed, setRevealed] = useState(false);
|
|
@@ -113,7 +129,7 @@ export function SecretRefField({
|
|
|
113
129
|
setDraftSecret('');
|
|
114
130
|
setPickedKey('');
|
|
115
131
|
setRevealed(false);
|
|
116
|
-
setMode(
|
|
132
|
+
setMode(startMode());
|
|
117
133
|
setEditing(true);
|
|
118
134
|
};
|
|
119
135
|
|