@tai42/studio-sdk 19.2.1 → 20.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/dist/components/icons/index.d.ts +1 -1
- package/dist/components/icons/index.d.ts.map +1 -1
- package/dist/components/icons/index.js +1 -1
- package/dist/components/icons/index.js.map +1 -1
- package/dist/components/icons/nav-map.d.ts.map +1 -1
- package/dist/components/icons/nav-map.js +2 -1
- package/dist/components/icons/nav-map.js.map +1 -1
- package/dist/components/icons/nav-marks.d.ts +2 -0
- package/dist/components/icons/nav-marks.d.ts.map +1 -1
- package/dist/components/icons/nav-marks.js +2 -0
- package/dist/components/icons/nav-marks.js.map +1 -1
- package/dist/hooks/useApi.d.ts +51 -12
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/navigation/types.d.ts +1 -0
- package/dist/navigation/types.d.ts.map +1 -1
- package/dist/schema-form/classify.d.ts.map +1 -1
- package/dist/schema-form/classify.js +49 -4
- package/dist/schema-form/classify.js.map +1 -1
- package/dist/schema-form/default-value.js +1 -0
- package/dist/schema-form/default-value.js.map +1 -1
- package/dist/schema-form/enum-field.d.ts.map +1 -1
- package/dist/schema-form/enum-field.js +3 -1
- package/dist/schema-form/enum-field.js.map +1 -1
- package/dist/schema-form/field-model.d.ts +23 -0
- package/dist/schema-form/field-model.d.ts.map +1 -1
- package/dist/schema-form/field-node.d.ts.map +1 -1
- package/dist/schema-form/field-node.js +31 -3
- package/dist/schema-form/field-node.js.map +1 -1
- package/dist/schema-form/index.d.ts +1 -0
- package/dist/schema-form/index.d.ts.map +1 -1
- package/dist/schema-form/index.js +1 -0
- package/dist/schema-form/index.js.map +1 -1
- package/dist/schema-form/multiselect-field.d.ts +20 -0
- package/dist/schema-form/multiselect-field.d.ts.map +1 -0
- package/dist/schema-form/multiselect-field.js +24 -0
- package/dist/schema-form/multiselect-field.js.map +1 -0
- package/dist/schema-form/object-fields.d.ts.map +1 -1
- package/dist/schema-form/object-fields.js +5 -0
- package/dist/schema-form/object-fields.js.map +1 -1
- package/dist/schema-form/string-field.d.ts +3 -2
- package/dist/schema-form/string-field.d.ts.map +1 -1
- package/dist/schema-form/string-field.js +6 -2
- package/dist/schema-form/string-field.js.map +1 -1
- package/dist/schema-form/types.d.ts +38 -0
- package/dist/schema-form/types.d.ts.map +1 -1
- package/dist/schema-form/validate.d.ts.map +1 -1
- package/dist/schema-form/validate.js +156 -2
- package/dist/schema-form/validate.js.map +1 -1
- package/dist/schema-form/visibility.d.ts +21 -0
- package/dist/schema-form/visibility.d.ts.map +1 -0
- package/dist/schema-form/visibility.js +37 -0
- package/dist/schema-form/visibility.js.map +1 -0
- package/package.json +2 -2
- package/src/components/icons/index.ts +1 -0
- package/src/components/icons/nav-map.ts +2 -0
- package/src/components/icons/nav-marks.tsx +10 -0
- package/src/index.ts +2 -0
- package/src/navigation/types.ts +3 -0
- package/src/schema-form/classify.ts +52 -3
- package/src/schema-form/default-value.ts +1 -0
- package/src/schema-form/enum-field.tsx +3 -1
- package/src/schema-form/field-model.ts +29 -0
- package/src/schema-form/field-node.tsx +61 -2
- package/src/schema-form/index.ts +1 -0
- package/src/schema-form/multiselect-field.tsx +58 -0
- package/src/schema-form/object-fields.tsx +4 -0
- package/src/schema-form/string-field.tsx +8 -1
- package/src/schema-form/types.ts +39 -0
- package/src/schema-form/validate.ts +176 -3
- package/src/schema-form/visibility.ts +47 -0
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
import { isRecord } from '../guards';
|
|
9
9
|
import { classifySchema } from './classify';
|
|
10
10
|
import { decodedByteSize, effectiveMaxBytes, overCapMessage } from './media';
|
|
11
|
-
import { scalarLabel } from './resolve';
|
|
11
|
+
import { resolveRef, scalarLabel } from './resolve';
|
|
12
12
|
import { activeVariantIndex } from './union';
|
|
13
|
+
import { isFieldVisible } from './visibility';
|
|
13
14
|
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
14
15
|
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
15
16
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -79,10 +80,34 @@ function validateString(model, value, path, ctx) {
|
|
|
79
80
|
}
|
|
80
81
|
if (value.length > 0 && model.format !== undefined) {
|
|
81
82
|
const message = formatError(model.format, value);
|
|
83
|
+
if (message !== undefined) {
|
|
84
|
+
ctx.errors[path] = message;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Date bounds and unavailable days (scope C). Range span/ordering needs the sibling
|
|
89
|
+
// start field, so it is enforced at the object level (see validateDateRanges).
|
|
90
|
+
if (model.date !== undefined && value.length > 0) {
|
|
91
|
+
const message = dateConstraintError(model.date, value);
|
|
82
92
|
if (message !== undefined)
|
|
83
93
|
ctx.errors[path] = message;
|
|
84
94
|
}
|
|
85
95
|
}
|
|
96
|
+
/** The inclusive bound/unavailable-day violation on a date value, or `undefined`. */
|
|
97
|
+
function dateConstraintError(date, value) {
|
|
98
|
+
// `YYYY-MM-DD` strings compare lexicographically in chronological order, so the bounds
|
|
99
|
+
// are plain string comparisons. A value that is not a well-formed date is left to the
|
|
100
|
+
// `format` check above; this runs only for a syntactically valid date.
|
|
101
|
+
if (!DATE_RE.test(value))
|
|
102
|
+
return undefined;
|
|
103
|
+
if (date.min !== undefined && value < date.min)
|
|
104
|
+
return `must be on or after ${date.min}`;
|
|
105
|
+
if (date.max !== undefined && value > date.max)
|
|
106
|
+
return `must be on or before ${date.max}`;
|
|
107
|
+
if (date.unavailable.includes(value))
|
|
108
|
+
return 'is not an available date';
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
86
111
|
function validateNumber(model, value, path, ctx) {
|
|
87
112
|
if (typeof value !== 'number' || Number.isNaN(value)) {
|
|
88
113
|
ctx.errors[path] = model.integer ? 'must be an integer' : 'must be a number';
|
|
@@ -111,6 +136,12 @@ function validateObject(model, value, path, ctx) {
|
|
|
111
136
|
}
|
|
112
137
|
const propMap = new Map(model.properties);
|
|
113
138
|
for (const [name, propSchema] of model.properties) {
|
|
139
|
+
// A field hidden by its `visibleWhen` predicate (scope B) is not part of the answer:
|
|
140
|
+
// it is not required and not validated, and a value left on it is dropped by the
|
|
141
|
+
// server, not an error here. Evaluated on the current values, so a field that was
|
|
142
|
+
// hidden by the predicate is skipped even if it still carries a stale value.
|
|
143
|
+
if (!isFieldVisible(propSchema, value))
|
|
144
|
+
continue;
|
|
114
145
|
const childPath = joinPath(path, name);
|
|
115
146
|
const childValue = value[name];
|
|
116
147
|
if (childValue === undefined) {
|
|
@@ -126,6 +157,120 @@ function validateObject(model, value, path, ctx) {
|
|
|
126
157
|
ctx.errors[joinPath(path, name)] = `"${name}" is required`;
|
|
127
158
|
}
|
|
128
159
|
}
|
|
160
|
+
validateDateRanges(model, value, path, ctx);
|
|
161
|
+
}
|
|
162
|
+
/** Days from `start` to `end` inclusive (both `YYYY-MM-DD`); 1 when they are equal. */
|
|
163
|
+
function inclusiveDayCount(start, end) {
|
|
164
|
+
return Math.round((Date.parse(end) - Date.parse(start)) / 86_400_000) + 1;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Enforce a date RANGE declared on an END field (scope C): the end is on or after its
|
|
168
|
+
* named `rangeStart` field, and the inclusive day span is within `minDays`/`maxDays`.
|
|
169
|
+
* Read from the two plain date values — nothing recombined. A missing or not-yet-valid
|
|
170
|
+
* endpoint is left to that field's own validation; a hidden end field is skipped.
|
|
171
|
+
*/
|
|
172
|
+
function validateDateRanges(model, value, path, ctx) {
|
|
173
|
+
for (const [name, propSchema] of model.properties) {
|
|
174
|
+
if (!isFieldVisible(propSchema, value))
|
|
175
|
+
continue;
|
|
176
|
+
const resolved = resolveRef(propSchema, ctx.root);
|
|
177
|
+
if (typeof resolved.rangeStart !== 'string')
|
|
178
|
+
continue;
|
|
179
|
+
const endValue = value[name];
|
|
180
|
+
const startValue = value[resolved.rangeStart];
|
|
181
|
+
if (typeof endValue !== 'string' || typeof startValue !== 'string')
|
|
182
|
+
continue;
|
|
183
|
+
if (!DATE_RE.test(endValue) || !DATE_RE.test(startValue))
|
|
184
|
+
continue;
|
|
185
|
+
const childPath = joinPath(path, name);
|
|
186
|
+
if (ctx.errors[childPath] !== undefined)
|
|
187
|
+
continue;
|
|
188
|
+
const message = dateRangeMessage(resolved, startValue, endValue);
|
|
189
|
+
if (message !== undefined)
|
|
190
|
+
ctx.errors[childPath] = message;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** The ordering/span violation on a range END field, or `undefined` when it holds. */
|
|
194
|
+
function dateRangeMessage(resolved, startValue, endValue) {
|
|
195
|
+
if (endValue < startValue)
|
|
196
|
+
return 'must be on or after the start date';
|
|
197
|
+
const days = inclusiveDayCount(startValue, endValue);
|
|
198
|
+
const minDays = typeof resolved.minDays === 'number' ? resolved.minDays : undefined;
|
|
199
|
+
const maxDays = typeof resolved.maxDays === 'number' ? resolved.maxDays : undefined;
|
|
200
|
+
if (minDays !== undefined && days < minDays)
|
|
201
|
+
return `must span at least ${String(minDays)} day(s)`;
|
|
202
|
+
if (maxDays !== undefined && days > maxDays)
|
|
203
|
+
return `must span at most ${String(maxDays)} day(s)`;
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
function validateMultiselect(model, value, path, ctx) {
|
|
207
|
+
if (!Array.isArray(value)) {
|
|
208
|
+
ctx.errors[path] = 'must be an array';
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const allowed = new Set(model.options.map((option) => option.value));
|
|
212
|
+
for (const item of value) {
|
|
213
|
+
if (!allowed.has(item)) {
|
|
214
|
+
ctx.errors[path] = 'must be one of the allowed values';
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* The JSON-Schema value/length/items bounds the client mirrors from the server (bug 4):
|
|
221
|
+
* `minLength`/`maxLength`/`pattern` on a string, `minimum`/`maximum` on a number,
|
|
222
|
+
* `minItems`/`maxItems` on an array. Applied only when the kind check found no type
|
|
223
|
+
* error. A `pattern` that cannot compile surfaces as a loud field error, never a silent
|
|
224
|
+
* skip — the server validates every send's schema, so a well-formed form never hits it.
|
|
225
|
+
*/
|
|
226
|
+
function applyBounds(schema, value, path, ctx) {
|
|
227
|
+
if (typeof value === 'string')
|
|
228
|
+
applyStringBounds(schema, value, path, ctx);
|
|
229
|
+
else if (typeof value === 'number')
|
|
230
|
+
applyNumberBounds(schema, value, path, ctx);
|
|
231
|
+
else if (Array.isArray(value))
|
|
232
|
+
applyArrayBounds(schema, value, path, ctx);
|
|
233
|
+
}
|
|
234
|
+
function applyStringBounds(schema, value, path, ctx) {
|
|
235
|
+
const length = Array.from(value).length;
|
|
236
|
+
if (typeof schema.minLength === 'number' && length < schema.minLength) {
|
|
237
|
+
ctx.errors[path] = `must be at least ${String(schema.minLength)} character(s)`;
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (typeof schema.maxLength === 'number' && length > schema.maxLength) {
|
|
241
|
+
ctx.errors[path] = `must be at most ${String(schema.maxLength)} character(s)`;
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (typeof schema.pattern !== 'string' || schema.pattern === '')
|
|
245
|
+
return;
|
|
246
|
+
let pattern;
|
|
247
|
+
try {
|
|
248
|
+
pattern = new RegExp(schema.pattern);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
ctx.errors[path] = 'has an invalid pattern constraint';
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (!pattern.test(value))
|
|
255
|
+
ctx.errors[path] = 'must match the required pattern';
|
|
256
|
+
}
|
|
257
|
+
function applyNumberBounds(schema, value, path, ctx) {
|
|
258
|
+
if (typeof schema.minimum === 'number' && value < schema.minimum) {
|
|
259
|
+
ctx.errors[path] = `must be at least ${String(schema.minimum)}`;
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (typeof schema.maximum === 'number' && value > schema.maximum) {
|
|
263
|
+
ctx.errors[path] = `must be at most ${String(schema.maximum)}`;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function applyArrayBounds(schema, value, path, ctx) {
|
|
267
|
+
if (typeof schema.minItems === 'number' && value.length < schema.minItems) {
|
|
268
|
+
ctx.errors[path] = `must have at least ${String(schema.minItems)} item(s)`;
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (typeof schema.maxItems === 'number' && value.length > schema.maxItems) {
|
|
272
|
+
ctx.errors[path] = `must have at most ${String(schema.maxItems)} item(s)`;
|
|
273
|
+
}
|
|
129
274
|
}
|
|
130
275
|
function validateRecord(model, value, path, ctx) {
|
|
131
276
|
if (!isRecord(value)) {
|
|
@@ -152,7 +297,13 @@ function walk(schema, value, path, ctx) {
|
|
|
152
297
|
ctx.errors[path] = 'must not be null';
|
|
153
298
|
return;
|
|
154
299
|
}
|
|
155
|
-
|
|
300
|
+
dispatchKind(classified.model, value, path, ctx);
|
|
301
|
+
// The value/length/items bounds (bug 4) mirror the server and apply only when the kind
|
|
302
|
+
// check found no type error for this field — a bound on a wrong-typed value is noise.
|
|
303
|
+
if (ctx.errors[path] === undefined)
|
|
304
|
+
applyBounds(classified.schema, value, path, ctx);
|
|
305
|
+
}
|
|
306
|
+
function dispatchKind(model, value, path, ctx) {
|
|
156
307
|
switch (model.kind) {
|
|
157
308
|
case 'json':
|
|
158
309
|
validateJson(model, value, path, ctx);
|
|
@@ -175,6 +326,9 @@ function walk(schema, value, path, ctx) {
|
|
|
175
326
|
case 'array':
|
|
176
327
|
validateArray(model, value, path, ctx);
|
|
177
328
|
return;
|
|
329
|
+
case 'multiselect':
|
|
330
|
+
validateMultiselect(model, value, path, ctx);
|
|
331
|
+
return;
|
|
178
332
|
case 'object':
|
|
179
333
|
validateObject(model, value, path, ctx);
|
|
180
334
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/schema-form/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/schema-form/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single evaluator for a property's `visibleWhen` predicate — a static,
|
|
3
|
+
* declarative field-visibility rule (scope B). The renderer (`ObjectFields`) and the
|
|
4
|
+
* validator both call it so a field shown by the form is exactly the field validated at
|
|
5
|
+
* submit, and a hidden field is neither rendered nor required. It reads only sibling
|
|
6
|
+
* values already in the object; it never calls a consumer handler (that is scope A).
|
|
7
|
+
*
|
|
8
|
+
* A malformed predicate degrades to VISIBLE: the send-time server validation rejects a
|
|
9
|
+
* malformed predicate loudly, so one never reaches a well-formed render, and showing a
|
|
10
|
+
* field is the safe non-hiding default (a hidden-by-accident required field would dead-
|
|
11
|
+
* end a form).
|
|
12
|
+
*/
|
|
13
|
+
import type { JsonSchema } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* Whether a property carrying `schema.visibleWhen` is visible against the current
|
|
16
|
+
* `values` of its enclosing object. Absent predicate ⇒ always visible. Exactly one of
|
|
17
|
+
* `equals`/`in`/`notEmpty` must be present; otherwise the predicate is malformed and the
|
|
18
|
+
* field stays visible.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isFieldVisible(schema: JsonSchema, values: Record<string, unknown>): boolean;
|
|
21
|
+
//# sourceMappingURL=visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../src/schema-form/visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAc1C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAc3F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
/** A value is "empty" for a `notEmpty` test: absent/null, a blank string, an empty array. */
|
|
5
|
+
function isEmptyValue(value) {
|
|
6
|
+
if (value === undefined || value === null)
|
|
7
|
+
return true;
|
|
8
|
+
if (typeof value === 'string')
|
|
9
|
+
return value.trim() === '';
|
|
10
|
+
if (Array.isArray(value))
|
|
11
|
+
return value.length === 0;
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether a property carrying `schema.visibleWhen` is visible against the current
|
|
16
|
+
* `values` of its enclosing object. Absent predicate ⇒ always visible. Exactly one of
|
|
17
|
+
* `equals`/`in`/`notEmpty` must be present; otherwise the predicate is malformed and the
|
|
18
|
+
* field stays visible.
|
|
19
|
+
*/
|
|
20
|
+
export function isFieldVisible(schema, values) {
|
|
21
|
+
const predicate = schema.visibleWhen;
|
|
22
|
+
if (!isRecord(predicate) || typeof predicate.field !== 'string')
|
|
23
|
+
return true;
|
|
24
|
+
const current = values[predicate.field];
|
|
25
|
+
const inList = predicate.in;
|
|
26
|
+
const hasEquals = 'equals' in predicate;
|
|
27
|
+
const hasIn = Array.isArray(inList);
|
|
28
|
+
const hasNotEmpty = predicate.notEmpty === true;
|
|
29
|
+
if (Number(hasEquals) + Number(hasIn) + Number(hasNotEmpty) !== 1)
|
|
30
|
+
return true;
|
|
31
|
+
if (hasEquals)
|
|
32
|
+
return current === predicate.equals;
|
|
33
|
+
if (hasIn)
|
|
34
|
+
return inList.some((candidate) => candidate === current);
|
|
35
|
+
return !isEmptyValue(current);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../src/schema-form/visibility.ts"],"names":[],"mappings":"AAcA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,6FAA6F;AAC7F,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAkB,EAAE,MAA+B;IAChF,MAAM,SAAS,GAAY,MAAM,CAAC,WAAW,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,QAAQ,IAAI,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC;IAChD,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/E,IAAI,SAAS;QAAE,OAAO,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC;IACnD,IAAI,KAAK;QAAE,OAAQ,MAA6B,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;IAC5F,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tai42/studio-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.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": "
|
|
99
|
+
"@tai42/api-client": "20.0.0"
|
|
100
100
|
},
|
|
101
101
|
"scripts": {
|
|
102
102
|
"build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
InteractionsIcon,
|
|
17
17
|
ManifestIcon,
|
|
18
18
|
MarketplaceIcon,
|
|
19
|
+
MembersIcon,
|
|
19
20
|
NotificationsIcon,
|
|
20
21
|
PresetsIcon,
|
|
21
22
|
SchedulingIcon,
|
|
@@ -50,6 +51,7 @@ export const NAV_ICONS: Readonly<Record<Exclude<RouteToken, 'login'>, IconCompon
|
|
|
50
51
|
conversations: ConversationsIcon,
|
|
51
52
|
marketplace: MarketplaceIcon,
|
|
52
53
|
manifest: ManifestIcon,
|
|
54
|
+
members: MembersIcon,
|
|
53
55
|
settings: SettingsIcon,
|
|
54
56
|
system: SystemIcon,
|
|
55
57
|
};
|
|
@@ -162,6 +162,16 @@ export const ManifestIcon: IconComponent = (props) => (
|
|
|
162
162
|
</Icon>
|
|
163
163
|
);
|
|
164
164
|
|
|
165
|
+
/** Members: two people — a front figure with a second shouldered behind it. */
|
|
166
|
+
export const MembersIcon: IconComponent = (props) => (
|
|
167
|
+
<Icon {...props}>
|
|
168
|
+
<circle cx="9" cy="8" r="3.2" />
|
|
169
|
+
<path d="M3.4 19.2a5.6 5.6 0 0 1 11.2 0" />
|
|
170
|
+
<path d="M15.2 5.1a3.2 3.2 0 0 1 0 5.8" />
|
|
171
|
+
<path d="M16.6 14.1a5.6 5.6 0 0 1 4 5.1" />
|
|
172
|
+
</Icon>
|
|
173
|
+
);
|
|
174
|
+
|
|
165
175
|
/** Settings: an eight-tooth cog around its bore. */
|
|
166
176
|
export const SettingsIcon: IconComponent = (props) => (
|
|
167
177
|
<Icon {...props}>
|
package/src/index.ts
CHANGED
|
@@ -369,6 +369,7 @@ export {
|
|
|
369
369
|
InteractionsIcon,
|
|
370
370
|
ManifestIcon,
|
|
371
371
|
MarketplaceIcon,
|
|
372
|
+
MembersIcon,
|
|
372
373
|
MenuIcon,
|
|
373
374
|
MinusIcon,
|
|
374
375
|
MonitorIcon,
|
|
@@ -421,6 +422,7 @@ export {
|
|
|
421
422
|
// as plain string inputs and stays free of the jq subgraph — the editor, its
|
|
422
423
|
// worker, and its wasm — entirely.
|
|
423
424
|
ExpressionFieldContext,
|
|
425
|
+
isFieldVisible,
|
|
424
426
|
RecordEntryRendererContext,
|
|
425
427
|
resolveRef,
|
|
426
428
|
SchemaForm,
|
package/src/navigation/types.ts
CHANGED
|
@@ -62,6 +62,9 @@ export interface RouteSearchByToken {
|
|
|
62
62
|
templates: { template?: string; q?: string };
|
|
63
63
|
storage: { q?: string };
|
|
64
64
|
manifest: Record<string, never>;
|
|
65
|
+
// The generic Members listing: people + outstanding invitations aggregated across
|
|
66
|
+
// every accounts provider. No search parameters — a flat read-only view.
|
|
67
|
+
members: Record<string, never>;
|
|
65
68
|
settings: Record<string, never>;
|
|
66
69
|
system: Record<string, never>;
|
|
67
70
|
scheduling: Record<string, never>;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* kind (a free-form JSON textarea) — a field is never silently dropped, and a
|
|
8
8
|
* shapeless one is edited as the JSON it is rather than dead-ending on a badge.
|
|
9
9
|
*/
|
|
10
|
-
import type { ClassifiedField, UnionVariant } from './field-model';
|
|
10
|
+
import type { ClassifiedField, DateConstraints, UnionVariant } from './field-model';
|
|
11
11
|
import {
|
|
12
12
|
type EnumOption,
|
|
13
13
|
isNullSchema,
|
|
@@ -185,6 +185,35 @@ function classifyAllOf(
|
|
|
185
185
|
);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
/**
|
|
189
|
+
* The platform date constraints on a `date`/`date-time` string property (scope C), or
|
|
190
|
+
* `undefined` for a plain or non-date string. Each key is read defensively (the schema is
|
|
191
|
+
* permissive); a date property with no constraint key classifies with `date: undefined`
|
|
192
|
+
* so it renders exactly as before.
|
|
193
|
+
*/
|
|
194
|
+
function dateConstraints(resolved: JsonSchema): DateConstraints | undefined {
|
|
195
|
+
if (resolved.format !== 'date' && resolved.format !== 'date-time') return undefined;
|
|
196
|
+
const min = typeof resolved.minDate === 'string' ? resolved.minDate : undefined;
|
|
197
|
+
const max = typeof resolved.maxDate === 'string' ? resolved.maxDate : undefined;
|
|
198
|
+
const unavailable = Array.isArray(resolved.unavailableDates)
|
|
199
|
+
? resolved.unavailableDates.filter((day): day is string => typeof day === 'string')
|
|
200
|
+
: [];
|
|
201
|
+
const rangeStart = typeof resolved.rangeStart === 'string' ? resolved.rangeStart : undefined;
|
|
202
|
+
const minDays = typeof resolved.minDays === 'number' ? resolved.minDays : undefined;
|
|
203
|
+
const maxDays = typeof resolved.maxDays === 'number' ? resolved.maxDays : undefined;
|
|
204
|
+
if (
|
|
205
|
+
min === undefined &&
|
|
206
|
+
max === undefined &&
|
|
207
|
+
unavailable.length === 0 &&
|
|
208
|
+
rangeStart === undefined &&
|
|
209
|
+
minDays === undefined &&
|
|
210
|
+
maxDays === undefined
|
|
211
|
+
) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
return { min, max, unavailable, rangeStart, minDays, maxDays };
|
|
215
|
+
}
|
|
216
|
+
|
|
188
217
|
function classifyString(
|
|
189
218
|
resolved: JsonSchema,
|
|
190
219
|
title: string | undefined,
|
|
@@ -197,6 +226,7 @@ function classifyString(
|
|
|
197
226
|
format: resolved.format,
|
|
198
227
|
media: mediaUpload(resolved),
|
|
199
228
|
expression: expressionAnnotation(resolved),
|
|
229
|
+
date: dateConstraints(resolved),
|
|
200
230
|
},
|
|
201
231
|
nullable,
|
|
202
232
|
schema: resolved,
|
|
@@ -207,6 +237,7 @@ function classifyString(
|
|
|
207
237
|
|
|
208
238
|
function classifyArray(
|
|
209
239
|
resolved: JsonSchema,
|
|
240
|
+
root: JsonSchema,
|
|
210
241
|
title: string | undefined,
|
|
211
242
|
description: string | undefined,
|
|
212
243
|
nullable: boolean,
|
|
@@ -223,6 +254,23 @@ function classifyArray(
|
|
|
223
254
|
nullable,
|
|
224
255
|
);
|
|
225
256
|
}
|
|
257
|
+
// An array whose items are a FIXED set of strings (an `enum` on the items, or a
|
|
258
|
+
// per-send option list that set one) is a multi-select: a checkbox group over a known
|
|
259
|
+
// option set (scope E). An array of free strings keeps the add/remove `array` field.
|
|
260
|
+
const items = resolveRef(resolved.items, root);
|
|
261
|
+
const itemTypes = typeList(items);
|
|
262
|
+
const isStringItems = itemTypes.length === 1 && itemTypes[0] === 'string';
|
|
263
|
+
const enumValues = items.enum;
|
|
264
|
+
if (isStringItems && enumValues !== undefined && enumValues.length > 0) {
|
|
265
|
+
const options = enumValues.map((value) => ({ value, label: scalarLabel(value) }));
|
|
266
|
+
return {
|
|
267
|
+
model: { kind: 'multiselect', options },
|
|
268
|
+
nullable,
|
|
269
|
+
schema: resolved,
|
|
270
|
+
title,
|
|
271
|
+
description,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
226
274
|
return {
|
|
227
275
|
model: { kind: 'array', items: resolved.items },
|
|
228
276
|
nullable,
|
|
@@ -281,6 +329,7 @@ function classifyObject(
|
|
|
281
329
|
// editor; no type, several types, or an unrecognized one lands on the JSON fallback.
|
|
282
330
|
function classifyByType(
|
|
283
331
|
resolved: JsonSchema,
|
|
332
|
+
root: JsonSchema,
|
|
284
333
|
title: string | undefined,
|
|
285
334
|
description: string | undefined,
|
|
286
335
|
): ClassifiedField {
|
|
@@ -342,7 +391,7 @@ function classifyByType(
|
|
|
342
391
|
description,
|
|
343
392
|
};
|
|
344
393
|
case 'array':
|
|
345
|
-
return classifyArray(resolved, title, description, nullableByType);
|
|
394
|
+
return classifyArray(resolved, root, title, description, nullableByType);
|
|
346
395
|
case 'object':
|
|
347
396
|
return classifyObject(resolved, title, description, nullableByType);
|
|
348
397
|
default:
|
|
@@ -372,5 +421,5 @@ export function classifySchema(raw: JsonSchema, root: JsonSchema): ClassifiedFie
|
|
|
372
421
|
const members = unionMembers(resolved);
|
|
373
422
|
if (members !== undefined) return classifyUnion(resolved, members, root, title, description);
|
|
374
423
|
if (resolved.allOf !== undefined) return classifyAllOf(resolved, root, title, description);
|
|
375
|
-
return classifyByType(resolved, title, description);
|
|
424
|
+
return classifyByType(resolved, root, title, description);
|
|
376
425
|
}
|
|
@@ -11,7 +11,9 @@ import { RadioGroup } from '../components/radio-group';
|
|
|
11
11
|
import { Select } from '../components/select';
|
|
12
12
|
import type { FieldModel } from './field-model';
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// The documented radio-vs-select threshold, shared across channels: a choice of this many
|
|
15
|
+
// options or fewer draws as a radio group, a longer one as a select.
|
|
16
|
+
const RADIO_MAX_OPTIONS = 5;
|
|
15
17
|
|
|
16
18
|
export function EnumField({
|
|
17
19
|
heading,
|
|
@@ -28,6 +28,24 @@ export interface MediaUpload {
|
|
|
28
28
|
readonly maxBytes: number | undefined;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The platform date constraints classified off a `date`/`date-time` string property
|
|
33
|
+
* (scope C). `min`/`max` are inclusive `YYYY-MM-DD` bounds (passed to the native date
|
|
34
|
+
* control and enforced by the validator); `unavailable` is the set of excluded days
|
|
35
|
+
* (the native control cannot disable arbitrary days, so this is validator-enforced).
|
|
36
|
+
* A date RANGE is two ordinary date fields: on the END field, `rangeStart` names its
|
|
37
|
+
* start field and `minDays`/`maxDays` bound the inclusive span. Absent members leave
|
|
38
|
+
* that aspect unconstrained.
|
|
39
|
+
*/
|
|
40
|
+
export interface DateConstraints {
|
|
41
|
+
readonly min: string | undefined;
|
|
42
|
+
readonly max: string | undefined;
|
|
43
|
+
readonly unavailable: readonly string[];
|
|
44
|
+
readonly rangeStart: string | undefined;
|
|
45
|
+
readonly minDays: number | undefined;
|
|
46
|
+
readonly maxDays: number | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
31
49
|
/** One top-level key of the expression's input document, with a one-line gloss. */
|
|
32
50
|
export interface ExpressionAnnotationKey {
|
|
33
51
|
readonly name: string;
|
|
@@ -106,10 +124,21 @@ export type FieldModel =
|
|
|
106
124
|
/** Present when a well-formed `x-tai42-expression` annotation opts the
|
|
107
125
|
* field into the jq expression editor (see {@link ExpressionAnnotation}). */
|
|
108
126
|
readonly expression: ExpressionAnnotation | undefined;
|
|
127
|
+
/** Present on a `date`/`date-time` string carrying any platform date
|
|
128
|
+
* constraint (bounds, unavailable days, or range pairing — scope C). */
|
|
129
|
+
readonly date: DateConstraints | undefined;
|
|
109
130
|
}
|
|
110
131
|
| { readonly kind: 'number'; readonly integer: boolean }
|
|
111
132
|
| { readonly kind: 'boolean' }
|
|
112
133
|
| { readonly kind: 'array'; readonly items: JsonSchema }
|
|
134
|
+
| {
|
|
135
|
+
// An array of a FIXED set of strings (its `items` carry an `enum`, or a per-send
|
|
136
|
+
// option list set one): a multi-select control (a checkbox group), one checkbox per
|
|
137
|
+
// option, value a `string[]`. An array of free strings stays the add/remove
|
|
138
|
+
// `array` field — a multi-select needs a known option set to draw.
|
|
139
|
+
readonly kind: 'multiselect';
|
|
140
|
+
readonly options: readonly EnumOption[];
|
|
141
|
+
}
|
|
113
142
|
| {
|
|
114
143
|
readonly kind: 'object';
|
|
115
144
|
readonly properties: readonly (readonly [string, JsonSchema])[];
|