@tai42/studio-sdk 6.2.0 → 7.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 (69) hide show
  1. package/dist/components/field.d.ts +14 -1
  2. package/dist/components/field.d.ts.map +1 -1
  3. package/dist/components/field.js +5 -2
  4. package/dist/components/field.js.map +1 -1
  5. package/dist/expression/ExpressionField.d.ts +140 -0
  6. package/dist/expression/ExpressionField.d.ts.map +1 -0
  7. package/dist/expression/ExpressionField.js +88 -0
  8. package/dist/expression/ExpressionField.js.map +1 -0
  9. package/dist/expression/context.d.ts +50 -0
  10. package/dist/expression/context.d.ts.map +1 -0
  11. package/dist/expression/context.js +53 -0
  12. package/dist/expression/context.js.map +1 -0
  13. package/dist/expression/types.d.ts +157 -0
  14. package/dist/expression/types.d.ts.map +1 -0
  15. package/dist/expression/types.js +11 -0
  16. package/dist/expression/types.js.map +1 -0
  17. package/dist/hooks/useApi.d.ts +8 -0
  18. package/dist/hooks/useApi.d.ts.map +1 -1
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/plugin/registry.d.ts.map +1 -1
  24. package/dist/plugin/registry.js +39 -1
  25. package/dist/plugin/registry.js.map +1 -1
  26. package/dist/plugin/types.d.ts +31 -0
  27. package/dist/plugin/types.d.ts.map +1 -1
  28. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  29. package/dist/schema-editor/SchemaEditor.js +8 -4
  30. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  31. package/dist/schema-form/classify.d.ts +5 -3
  32. package/dist/schema-form/classify.d.ts.map +1 -1
  33. package/dist/schema-form/classify.js +42 -16
  34. package/dist/schema-form/classify.js.map +1 -1
  35. package/dist/schema-form/default-value.d.ts.map +1 -1
  36. package/dist/schema-form/default-value.js +4 -1
  37. package/dist/schema-form/default-value.js.map +1 -1
  38. package/dist/schema-form/field-node.d.ts.map +1 -1
  39. package/dist/schema-form/field-node.js +3 -3
  40. package/dist/schema-form/field-node.js.map +1 -1
  41. package/dist/schema-form/json-field.d.ts +14 -0
  42. package/dist/schema-form/json-field.d.ts.map +1 -0
  43. package/dist/schema-form/json-field.js +104 -0
  44. package/dist/schema-form/json-field.js.map +1 -0
  45. package/dist/schema-form/types.d.ts +2 -2
  46. package/dist/schema-form/types.js +2 -2
  47. package/dist/schema-form/validate.d.ts.map +1 -1
  48. package/dist/schema-form/validate.js +11 -4
  49. package/dist/schema-form/validate.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/components/field.tsx +20 -2
  52. package/src/expression/ExpressionField.tsx +330 -0
  53. package/src/expression/context.tsx +83 -0
  54. package/src/expression/types.ts +164 -0
  55. package/src/index.ts +22 -0
  56. package/src/plugin/registry.ts +50 -1
  57. package/src/plugin/types.ts +32 -0
  58. package/src/schema-editor/SchemaEditor.tsx +8 -4
  59. package/src/schema-form/classify.ts +103 -18
  60. package/src/schema-form/default-value.ts +4 -1
  61. package/src/schema-form/field-node.tsx +7 -4
  62. package/src/schema-form/json-field.tsx +143 -0
  63. package/src/schema-form/types.ts +2 -2
  64. package/src/schema-form/validate.ts +10 -4
  65. package/dist/schema-form/unsupported-notice.d.ts +0 -18
  66. package/dist/schema-form/unsupported-notice.d.ts.map +0 -1
  67. package/dist/schema-form/unsupported-notice.js +0 -8
  68. package/dist/schema-form/unsupported-notice.js.map +0 -1
  69. package/src/schema-form/unsupported-notice.tsx +0 -39
@@ -6,12 +6,12 @@ import { ArrayField } from './array-field';
6
6
  import { classifySchema } from './classify';
7
7
  import { EnumField } from './enum-field';
8
8
  import { FieldGroup } from './field-group';
9
+ import { JsonField } from './json-field';
9
10
  import { ObjectFields } from './object-fields';
10
11
  import { RecordField } from './record-field';
11
12
  import { scalarLabel } from './resolve';
12
13
  import { StringField } from './string-field';
13
14
  import { UnionField } from './union-field';
14
- import { UnsupportedNotice } from './unsupported-notice';
15
15
  function labelText(explicit, label) {
16
16
  return explicit ?? label ?? 'Value';
17
17
  }
@@ -24,8 +24,8 @@ export function FieldNode(props) {
24
24
  const error = errors?.[path];
25
25
  const model = classified.model;
26
26
  switch (model.kind) {
27
- case 'unsupported':
28
- return (_jsx(UnsupportedNotice, { heading: heading, reason: model.reason, description: description, error: error }));
27
+ case 'json':
28
+ return (_jsx(JsonField, { heading: heading, description: description, error: error, jsonType: model.jsonType, nullable: classified.nullable, value: value, onChange: onChange }));
29
29
  case 'const':
30
30
  return (_jsx(Field, { label: heading, description: description, error: error, children: _jsx(TextInput, { value: scalarLabel(model.value), readOnly: true, disabled: true }) }));
31
31
  case 'enum':
@@ -1 +1 @@
1
- {"version":3,"file":"field-node.js","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-node.js","sourceRoot":"","sources":["../../src/schema-form/field-node.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgB3C,SAAS,SAAS,CAAC,QAA4B,EAAE,KAAyB;IACxE,OAAO,QAAQ,IAAI,KAAK,IAAI,OAAO,CAAC;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACzF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAE/B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,CACL,KAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAC3D,KAAC,SAAS,IAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,QAAC,QAAQ,SAAG,GAC1D,CACT,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,CACL,KAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,IAAI,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAC3D,KAAC,WAAW,IACV,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EACjC,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC/B,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjD,CAAC,GACD,GACI,CACT,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,YAC3D,KAAC,QAAQ,IACP,OAAO,EAAE,KAAK,KAAK,IAAI,EACvB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;wBAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACpB,CAAC,GACD,GACI,CACT,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,YACvF,KAAC,YAAY,IACX,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,YAAY,EAAE,KAAK,CAAC,QAAQ,EAC5B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,SAAS,GACf,GACS,CACd,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,WAAW,IACV,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,CACL,KAAC,UAAU,IACT,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ /** The JSON container a `json` field commits to (see `classify`). */
3
+ type JsonType = 'object' | 'array' | 'any';
4
+ export declare function JsonField({ heading, description, error, jsonType, nullable, value, onChange, }: {
5
+ heading: string;
6
+ description: string | undefined;
7
+ error: string | undefined;
8
+ jsonType: JsonType;
9
+ nullable: boolean;
10
+ value: unknown;
11
+ onChange: (value: unknown) => void;
12
+ }): ReactNode;
13
+ export {};
14
+ //# sourceMappingURL=json-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-field.d.ts","sourceRoot":"","sources":["../../src/schema-form/json-field.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,qEAAqE;AACrE,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAmC3C,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,WAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,GAAG,SAAS,CAgEZ"}
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The free-form JSON field: the honest editor for a schema node the form has no
4
+ * STRUCTURED control for — a property-less object, a bare `additionalProperties`-
5
+ * open object, an items-less array, an empty/multi-type/`allOf` shape. Rather than
6
+ * dead-end on an "Unsupported" badge (a value the user can see but not set), it
7
+ * offers a mono textarea seeded with the current value pretty-printed and commits
8
+ * the PARSED value through the same `onChange` a structured field uses.
9
+ *
10
+ * Validation is LOUD and local: the buffer must parse as JSON, and — when the
11
+ * schema commits to a container (`jsonType` `'object'`/`'array'`) — the parsed
12
+ * value must be that container. An invalid buffer shows an inline error and does
13
+ * NOT commit, so a half-typed edit never writes a broken value through; the last
14
+ * committed value stands until the buffer is valid again.
15
+ *
16
+ * The buffer is LOCAL state (an invalid buffer has no committed value to derive
17
+ * from), resynced only when a DIFFERENT value arrives from the parent — the same
18
+ * `lastEmitted` guard `record-field` uses, so a parent echoing our own commit back
19
+ * does not clobber what is being typed.
20
+ */
21
+ import { useRef, useState } from 'react';
22
+ import { Field } from '../components/field';
23
+ import { Textarea } from '../components/inputs';
24
+ import { errorMessage } from '../errors';
25
+ function isPlainObject(value) {
26
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
27
+ }
28
+ /** The current value as textarea text: pretty-printed JSON, or empty for absent. */
29
+ function serialize(value) {
30
+ return value === undefined ? '' : JSON.stringify(value, null, 2);
31
+ }
32
+ /**
33
+ * The container constraint on a PARSED buffer, or `null` when it satisfies the
34
+ * schema. `null` (the JSON literal) is rejected only when the schema is not
35
+ * nullable — matching `validateAgainstSchema`, so the inline check and the
36
+ * pre-submit check agree.
37
+ */
38
+ function containerError(value, jsonType, nullable) {
39
+ if (value === null)
40
+ return nullable ? null : 'Must not be null.';
41
+ if (jsonType === 'object' && !isPlainObject(value)) {
42
+ return 'Must be a JSON object (e.g. {"key": "value"}).';
43
+ }
44
+ if (jsonType === 'array' && !Array.isArray(value)) {
45
+ return 'Must be a JSON array (e.g. [1, 2, 3]).';
46
+ }
47
+ return null;
48
+ }
49
+ /** The muted hint's leading noun, so the user knows what a valid buffer must be. */
50
+ function hintNoun(jsonType) {
51
+ if (jsonType === 'object')
52
+ return 'JSON object';
53
+ if (jsonType === 'array')
54
+ return 'JSON array';
55
+ return 'JSON';
56
+ }
57
+ export function JsonField({ heading, description, error, jsonType, nullable, value, onChange, }) {
58
+ // The last value THIS field emitted. A parent echoing our own commit back
59
+ // passes it identity-equal, so the buffer (which may hold an invalid, un-
60
+ // committed edit) survives; a parent that swaps in a different value resyncs it.
61
+ const lastEmitted = useRef(value);
62
+ const [buffer, setBuffer] = useState(() => serialize(value));
63
+ const [parseError, setParseError] = useState(null);
64
+ if (value !== lastEmitted.current) {
65
+ lastEmitted.current = value;
66
+ setBuffer(serialize(value));
67
+ setParseError(null);
68
+ }
69
+ const commit = (next) => {
70
+ lastEmitted.current = next;
71
+ onChange(next);
72
+ };
73
+ const handleChange = (text) => {
74
+ setBuffer(text);
75
+ // An empty buffer drops the value (emits `undefined`) — the same "absent
76
+ // optional" affordance a cleared text field gives; a required field's
77
+ // absence is then flagged by the pre-submit validator, not invented here.
78
+ if (text.trim() === '') {
79
+ setParseError(null);
80
+ commit(undefined);
81
+ return;
82
+ }
83
+ let parsed;
84
+ try {
85
+ parsed = JSON.parse(text);
86
+ }
87
+ catch (thrown) {
88
+ // Invalid JSON: surface it, and DO NOT commit — the last valid value stands.
89
+ setParseError(`Invalid JSON: ${errorMessage(thrown)}`);
90
+ return;
91
+ }
92
+ const container = containerError(parsed, jsonType, nullable);
93
+ if (container !== null) {
94
+ setParseError(container);
95
+ return;
96
+ }
97
+ setParseError(null);
98
+ commit(parsed);
99
+ };
100
+ return (_jsxs(Field, { label: heading, description: description, error: parseError ?? error, children: [_jsx(Textarea, { value: buffer, onChange: (event) => {
101
+ handleChange(event.target.value);
102
+ }, rows: 6, "aria-label": `${heading} JSON`, className: "tai-textarea-mono", spellCheck: false }), _jsx("p", { className: "tai-field-hint", style: { margin: 0 }, children: `free-form ${hintNoun(jsonType)} — this field has no structured schema` })] }));
103
+ }
104
+ //# sourceMappingURL=json-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-field.js","sourceRoot":"","sources":["../../src/schema-form/json-field.tsx"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  * is deliberately PERMISSIVE — every field is optional and an open index
4
4
  * signature admits unknown keywords — because the schemas come from Pydantic v2
5
5
  * and may carry constructs the renderer does not consume. Unknown keys never
6
- * break typing; the renderer classifies a node and surfaces anything it cannot
7
- * render as a LOUD "unsupported field" notice rather than dropping it.
6
+ * break typing; the renderer classifies a node and, for a shape it has no
7
+ * structured control for, offers a free-form JSON editor rather than dropping it.
8
8
  */
9
9
  /** The JSON-Schema `type` keyword values Pydantic emits. */
10
10
  export type JsonSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array' | 'null';
@@ -3,8 +3,8 @@
3
3
  * is deliberately PERMISSIVE — every field is optional and an open index
4
4
  * signature admits unknown keywords — because the schemas come from Pydantic v2
5
5
  * and may carry constructs the renderer does not consume. Unknown keys never
6
- * break typing; the renderer classifies a node and surfaces anything it cannot
7
- * render as a LOUD "unsupported field" notice rather than dropping it.
6
+ * break typing; the renderer classifies a node and, for a shape it has no
7
+ * structured control for, offers a free-form JSON editor rather than dropping it.
8
8
  */
9
9
  export {};
10
10
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/schema-form/validate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AA6JD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,eAAe,GACxB,gBAAgB,CAIlB"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/schema-form/validate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE5D,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAmKD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,eAAe,GACxB,gBAAgB,CAIlB"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * `validateAgainstSchema` — a loud, structured pre-submit check. It walks the
3
3
  * schema against a value and returns a path-keyed `SchemaFormErrors` bag:
4
- * required-presence, type/format mismatches, enum/const violations, and any
5
- * `unsupported` construct (surfaced, never hidden). It never throws on a
4
+ * required-presence, type/format mismatches, enum/const violations, and the
5
+ * container constraint on a free-form `json` field. It never throws on a
6
6
  * malformed value — a malformed value IS the error it reports.
7
7
  */
8
8
  import { classifySchema } from './classify';
@@ -52,8 +52,15 @@ function walk(schema, value, path, root, errors, maxUploadBytes) {
52
52
  }
53
53
  const { model } = classified;
54
54
  switch (model.kind) {
55
- case 'unsupported':
56
- errors[path] = `unsupported schema (${model.reason})`;
55
+ case 'json':
56
+ // A free-form JSON field: any JSON is accepted, subject only to the
57
+ // container the schema commits to (mirrors the renderer's inline check).
58
+ if (model.jsonType === 'object' && !isPlainObject(value)) {
59
+ errors[path] = 'must be a JSON object';
60
+ }
61
+ else if (model.jsonType === 'array' && !Array.isArray(value)) {
62
+ errors[path] = 'must be a JSON array';
63
+ }
57
64
  return;
58
65
  case 'const':
59
66
  if (value !== model.value)
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tai42/studio-sdk",
3
- "version": "6.2.0",
3
+ "version": "7.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>",
@@ -90,7 +90,7 @@
90
90
  "@radix-ui/react-select": "^2.3.2",
91
91
  "@radix-ui/react-tabs": "^1.1.16",
92
92
  "@radix-ui/react-tooltip": "^1.2.11",
93
- "@tai42/api-client": "6.2.0"
93
+ "@tai42/api-client": "7.0.0"
94
94
  },
95
95
  "scripts": {
96
96
  "build": "tsc -b tsconfig.build.json && node scripts/copy-assets.mjs",
@@ -91,6 +91,19 @@ export interface FieldProps {
91
91
  * `group`.
92
92
  */
93
93
  readonly group?: boolean;
94
+ /**
95
+ * Render the label for ASSISTIVE TECH ONLY — visually hidden, but still the
96
+ * control's accessible name through the very same `<label for>` (or, in a group,
97
+ * the same `aria-labelledby`). The label element stays in the DOM behind
98
+ * `tai-visually-hidden`, so nothing about the accessible name changes; only its
99
+ * paint is dropped. It is the standard idiom for a dense grid of otherwise
100
+ * identical fields, where each row needs a UNIQUE, addressable name (a
101
+ * voice-control user can only say a name that exists) but there is no room for a
102
+ * visible label on every row — the same trade `RadioGroup`'s `visuallyHiddenLabel`
103
+ * and `ViewToggle` make. The label text still governs WCAG 2.5.3 (Label in Name),
104
+ * so a caller passes the real per-row name as `label`, not a decoration.
105
+ */
106
+ readonly hideLabel?: boolean;
94
107
  }
95
108
 
96
109
  export function Field({
@@ -101,6 +114,7 @@ export function Field({
101
114
  style,
102
115
  className,
103
116
  group = false,
117
+ hideLabel = false,
104
118
  }: FieldProps) {
105
119
  const controlId = useId();
106
120
  const labelId = `${controlId}-label`;
@@ -122,6 +136,10 @@ export function Field({
122
136
  ? { controlId: undefined, describedBy: undefined, invalid: error !== undefined }
123
137
  : { controlId, describedBy, invalid: error !== undefined };
124
138
 
139
+ // The label keeps its `htmlFor`/`id` wiring either way — `hideLabel` only drops
140
+ // its PAINT, so the accessible name it gives the control is unchanged.
141
+ const labelClassName = hideLabel ? 'tai-field-label tai-visually-hidden' : 'tai-field-label';
142
+
125
143
  return (
126
144
  <FieldContext.Provider value={value}>
127
145
  <div
@@ -129,11 +147,11 @@ export function Field({
129
147
  style={style}
130
148
  >
131
149
  {group ? (
132
- <span id={labelId} className="tai-field-label">
150
+ <span id={labelId} className={labelClassName}>
133
151
  {label}
134
152
  </span>
135
153
  ) : (
136
- <label id={labelId} htmlFor={controlId} className="tai-field-label">
154
+ <label id={labelId} htmlFor={controlId} className={labelClassName}>
137
155
  {label}
138
156
  </label>
139
157
  )}