schema-components 1.18.0 → 1.19.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/core/adapter.d.mts +1 -1
- package/dist/core/adapter.mjs +77 -14
- package/dist/core/constraints.d.mts +1 -1
- package/dist/core/diagnostics.d.mts +1 -1
- package/dist/core/errors.d.mts +1 -1
- package/dist/core/errors.mjs +7 -1
- package/dist/core/fieldOrder.d.mts +10 -0
- package/dist/core/fieldOrder.mjs +12 -0
- package/dist/core/formats.mjs +9 -1
- package/dist/core/merge.d.mts +1 -1
- package/dist/core/merge.mjs +30 -2
- package/dist/core/normalise.d.mts +38 -5
- package/dist/core/normalise.mjs +2 -2
- package/dist/core/openapi30.d.mts +33 -4
- package/dist/core/openapi30.mjs +2 -2
- package/dist/core/ref.d.mts +1 -1
- package/dist/core/renderer.d.mts +1 -1
- package/dist/core/renderer.mjs +7 -21
- package/dist/core/swagger2.d.mts +1 -1
- package/dist/core/swagger2.mjs +1 -1
- package/dist/core/version.d.mts +2 -2
- package/dist/core/version.mjs +19 -9
- package/dist/core/walkBuilders.d.mts +2 -2
- package/dist/{diagnostics-BYk63jsC.d.mts → diagnostics-VgEKI_Ct.d.mts} +1 -1
- package/dist/{errors-C5zRC2PU.d.mts → errors-CnGjT1cg.d.mts} +7 -2
- package/dist/html/a11y.d.mts +1 -1
- package/dist/html/renderToHtml.d.mts +1 -1
- package/dist/html/renderToHtml.mjs +13 -30
- package/dist/html/renderToHtmlStream.d.mts +1 -1
- package/dist/html/renderers.d.mts +1 -1
- package/dist/html/renderers.mjs +56 -23
- package/dist/html/streamRenderers.d.mts +1 -1
- package/dist/html/streamRenderers.mjs +10 -21
- package/dist/{normalise-tL9FckAk.mjs → normalise-C0ofw3W6.mjs} +418 -97
- package/dist/openapi/ApiSecurity.mjs +1 -1
- package/dist/openapi/bundle.mjs +1 -0
- package/dist/openapi/components.mjs +6 -2
- package/dist/openapi/parser.d.mts +2 -2
- package/dist/openapi/parser.mjs +8 -5
- package/dist/openapi/resolve.d.mts +6 -5
- package/dist/openapi/resolve.mjs +7 -6
- package/dist/react/SchemaComponent.d.mts +4 -4
- package/dist/react/SchemaComponent.mjs +4 -14
- package/dist/react/SchemaView.d.mts +2 -2
- package/dist/react/SchemaView.mjs +2 -1
- package/dist/react/headless.d.mts +7 -1
- package/dist/react/headless.mjs +13 -1
- package/dist/react/headlessRenderers.d.mts +53 -2
- package/dist/react/headlessRenderers.mjs +175 -33
- package/dist/{ref-Ckt5liZs.d.mts → ref-Bb43ZURY.d.mts} +1 -1
- package/dist/{renderer-DXo-rXHJ.d.mts → renderer-BQqiXUYP.d.mts} +15 -32
- package/dist/themes/mantine.d.mts +1 -1
- package/dist/themes/mantine.mjs +2 -1
- package/dist/themes/mui.d.mts +1 -1
- package/dist/themes/mui.mjs +3 -2
- package/dist/themes/radix.d.mts +1 -1
- package/dist/themes/radix.mjs +2 -1
- package/dist/themes/shadcn.d.mts +1 -1
- package/dist/themes/shadcn.mjs +2 -1
- package/dist/{version-B5NV-35j.d.mts → version-XNH7PRGP.d.mts} +8 -1
- package/package.json +1 -1
|
@@ -13,7 +13,7 @@ function ApiSecurity({ requirements, schemes }) {
|
|
|
13
13
|
"data-security-name": true,
|
|
14
14
|
children: req.name
|
|
15
15
|
}),
|
|
16
|
-
scheme !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
16
|
+
scheme !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [scheme.type !== void 0 && /* @__PURE__ */ jsx("span", {
|
|
17
17
|
"data-security-type": true,
|
|
18
18
|
children: scheme.type
|
|
19
19
|
}), scheme.description && /* @__PURE__ */ jsx("span", {
|
package/dist/openapi/bundle.mjs
CHANGED
|
@@ -88,6 +88,7 @@ async function walkAndInline(node, schemasNode, uriCache, inlineCache, resolver)
|
|
|
88
88
|
}
|
|
89
89
|
if (inlinedName !== void 0) node.$ref = `#/components/schemas/${inlinedName}`;
|
|
90
90
|
}
|
|
91
|
+
return;
|
|
91
92
|
}
|
|
92
93
|
for (const value of Object.values(node)) if (isObject(value)) await walkAndInline(value, schemasNode, uriCache, inlineCache, resolver);
|
|
93
94
|
else if (Array.isArray(value)) for (const item of value) await walkAndInline(item, schemasNode, uriCache, inlineCache, resolver);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { isObject, toRecordOrUndefined } from "../core/guards.mjs";
|
|
2
2
|
import { walk } from "../core/walker.mjs";
|
|
3
|
-
import { joinPath, renderField, sanitisePrefix } from "../react/SchemaComponent.mjs";
|
|
4
3
|
import { ApiCallbacks } from "./ApiCallbacks.mjs";
|
|
5
4
|
import { ApiLinks } from "./ApiLinks.mjs";
|
|
6
5
|
import { ApiResponseHeaders } from "./ApiResponseHeaders.mjs";
|
|
7
6
|
import { ApiSecurity } from "./ApiSecurity.mjs";
|
|
8
7
|
import { getLinks, getSecurityRequirements, getSecuritySchemes, listCallbacks } from "./parser.mjs";
|
|
8
|
+
import { joinPath, renderField, sanitisePrefix } from "../react/SchemaComponent.mjs";
|
|
9
9
|
import { getParsed, resolveOperation, resolveParameters, resolveRequestBody, resolveResponse, toDoc } from "./resolve.mjs";
|
|
10
|
-
import { useId } from "react";
|
|
11
10
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { useId } from "react";
|
|
12
12
|
//#region src/openapi/components.tsx
|
|
13
13
|
/**
|
|
14
14
|
* OpenAPI React components with type-safe generics.
|
|
@@ -184,6 +184,10 @@ function OperationHeader({ operation }) {
|
|
|
184
184
|
operation.path
|
|
185
185
|
] }),
|
|
186
186
|
operation.summary && /* @__PURE__ */ jsx("p", { children: operation.summary }),
|
|
187
|
+
operation.description && /* @__PURE__ */ jsx("p", {
|
|
188
|
+
"data-description": true,
|
|
189
|
+
children: operation.description
|
|
190
|
+
}),
|
|
187
191
|
operation.deprecated && /* @__PURE__ */ jsx("span", {
|
|
188
192
|
"data-deprecated": true,
|
|
189
193
|
children: "Deprecated"
|
|
@@ -41,7 +41,7 @@ interface SecurityRequirement {
|
|
|
41
41
|
scopes: string[];
|
|
42
42
|
}
|
|
43
43
|
interface SecurityScheme {
|
|
44
|
-
type: string;
|
|
44
|
+
type: string | undefined;
|
|
45
45
|
description: string | undefined;
|
|
46
46
|
name: string | undefined;
|
|
47
47
|
location: string | undefined;
|
|
@@ -92,7 +92,7 @@ declare function getRequestBody(parsed: OpenApiDocument, path: string, method: s
|
|
|
92
92
|
declare function getResponses(parsed: OpenApiDocument, path: string, method: string): ResponseInfo[];
|
|
93
93
|
declare function getSecurityRequirements(parsed: OpenApiDocument, path: string, method: string): SecurityRequirement[];
|
|
94
94
|
declare function getSecuritySchemes(parsed: OpenApiDocument): Map<string, SecurityScheme>;
|
|
95
|
-
declare function getResponseHeaders(response: JsonObject): Map<string, HeaderInfo>;
|
|
95
|
+
declare function getResponseHeaders(response: JsonObject, doc?: JsonObject): Map<string, HeaderInfo>;
|
|
96
96
|
declare function listWebhooks(parsed: OpenApiDocument): WebhookInfo[];
|
|
97
97
|
declare function getExternalDocs(obj: JsonObject): ExternalDocs | undefined;
|
|
98
98
|
declare function getXmlInfo(schema: JsonObject): XmlInfo | undefined;
|
package/dist/openapi/parser.mjs
CHANGED
|
@@ -33,7 +33,10 @@ const METHODS = [
|
|
|
33
33
|
"post",
|
|
34
34
|
"put",
|
|
35
35
|
"patch",
|
|
36
|
-
"delete"
|
|
36
|
+
"delete",
|
|
37
|
+
"head",
|
|
38
|
+
"options",
|
|
39
|
+
"trace"
|
|
37
40
|
];
|
|
38
41
|
/**
|
|
39
42
|
* Resolve a path item, following a `$ref` to `components/pathItems/<Name>`
|
|
@@ -143,7 +146,7 @@ function getResponses(parsed, path, method) {
|
|
|
143
146
|
const content = getProperty(response, "content");
|
|
144
147
|
const contentTypes = isObject(content) ? Object.keys(content) : [];
|
|
145
148
|
const schema = isObject(content) ? extractSchemaFromContent(content) : void 0;
|
|
146
|
-
const headers = getResponseHeaders(response);
|
|
149
|
+
const headers = getResponseHeaders(response, parsed.doc);
|
|
147
150
|
result.push({
|
|
148
151
|
statusCode,
|
|
149
152
|
description: getString(response, "description"),
|
|
@@ -196,7 +199,7 @@ function getSecuritySchemes(parsed) {
|
|
|
196
199
|
if (!isObject(scheme)) continue;
|
|
197
200
|
const flowsProp = getProperty(scheme, "flows");
|
|
198
201
|
result.set(name, {
|
|
199
|
-
type: getString(scheme, "type")
|
|
202
|
+
type: getString(scheme, "type"),
|
|
200
203
|
description: getString(scheme, "description"),
|
|
201
204
|
name: getString(scheme, "name"),
|
|
202
205
|
location: getString(scheme, "in"),
|
|
@@ -208,14 +211,14 @@ function getSecuritySchemes(parsed) {
|
|
|
208
211
|
}
|
|
209
212
|
return result;
|
|
210
213
|
}
|
|
211
|
-
function getResponseHeaders(response) {
|
|
214
|
+
function getResponseHeaders(response, doc) {
|
|
212
215
|
const result = /* @__PURE__ */ new Map();
|
|
213
216
|
const headers = getProperty(response, "headers");
|
|
214
217
|
if (!isObject(headers)) return result;
|
|
215
218
|
for (const [name, headerObj] of Object.entries(headers)) {
|
|
216
219
|
if (!isObject(headerObj)) continue;
|
|
217
220
|
const ref = getString(headerObj, "$ref");
|
|
218
|
-
const header = (ref !== void 0 ? resolveRefInDoc(
|
|
221
|
+
const header = (ref !== void 0 && doc !== void 0 ? resolveRefInDoc(doc, ref) : void 0) ?? headerObj;
|
|
219
222
|
const schemaProp = getProperty(header, "schema");
|
|
220
223
|
result.set(name, {
|
|
221
224
|
name,
|
|
@@ -7,11 +7,12 @@ import { OpenApiDocument, OperationInfo, ParameterInfo, ResponseInfo, getRequest
|
|
|
7
7
|
*
|
|
8
8
|
* Before parsing, the document is run through the version-aware
|
|
9
9
|
* normalisation pipeline (`normaliseOpenApiSchemas`) so OpenAPI 3.0.x
|
|
10
|
-
* keywords (`nullable`, `discriminator`, `example`)
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* keywords (`nullable`, `discriminator`, `example`), OpenAPI 3.1.x
|
|
11
|
+
* `discriminator`, and Swagger 2.0 documents are all converted to
|
|
12
|
+
* canonical Draft 2020-12 form. The parser and downstream extractors
|
|
13
|
+
* (`getRequestBody`, `getResponses`, etc.) then observe schemas in the
|
|
14
|
+
* same form `<SchemaComponent>` does, keeping the OpenAPI components on
|
|
15
|
+
* the same pipeline as the top-level adapter.
|
|
15
16
|
*
|
|
16
17
|
* The cache is keyed by the caller-supplied document so subsequent calls
|
|
17
18
|
* with the same input bypass both normalisation and parsing.
|
package/dist/openapi/resolve.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isObject } from "../core/guards.mjs";
|
|
2
2
|
import { detectOpenApiVersion } from "../core/version.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { a as normaliseOpenApiSchemas } from "../normalise-C0ofw3W6.mjs";
|
|
4
4
|
import { getParameters, getRequestBody, getResponses, listOperations, parseOpenApiDocument } from "./parser.mjs";
|
|
5
5
|
//#region src/openapi/resolve.ts
|
|
6
6
|
/**
|
|
@@ -17,11 +17,12 @@ const docCache = /* @__PURE__ */ new WeakMap();
|
|
|
17
17
|
*
|
|
18
18
|
* Before parsing, the document is run through the version-aware
|
|
19
19
|
* normalisation pipeline (`normaliseOpenApiSchemas`) so OpenAPI 3.0.x
|
|
20
|
-
* keywords (`nullable`, `discriminator`, `example`)
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* keywords (`nullable`, `discriminator`, `example`), OpenAPI 3.1.x
|
|
21
|
+
* `discriminator`, and Swagger 2.0 documents are all converted to
|
|
22
|
+
* canonical Draft 2020-12 form. The parser and downstream extractors
|
|
23
|
+
* (`getRequestBody`, `getResponses`, etc.) then observe schemas in the
|
|
24
|
+
* same form `<SchemaComponent>` does, keeping the OpenAPI components on
|
|
25
|
+
* the same pipeline as the top-level adapter.
|
|
25
26
|
*
|
|
26
27
|
* The cache is keyed by the caller-supplied document so subsequent calls
|
|
27
28
|
* with the same input bypass both normalisation and parsing.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { M as WalkedField, T as SchemaMeta, d as FieldOverrides, u as FieldOverride } from "../types-D_5ST7SS.mjs";
|
|
2
|
-
import { t as Diagnostic } from "../diagnostics-
|
|
3
|
-
import { t as SchemaError } from "../errors-
|
|
4
|
-
import { l as RenderProps, r as ComponentResolver } from "../renderer-
|
|
2
|
+
import { t as Diagnostic } from "../diagnostics-VgEKI_Ct.mjs";
|
|
3
|
+
import { t as SchemaError } from "../errors-CnGjT1cg.mjs";
|
|
4
|
+
import { l as RenderProps, r as ComponentResolver } from "../renderer-BQqiXUYP.mjs";
|
|
5
5
|
import { c as PathOfType, l as ResolveOpenAPIRef, n as FromJSONSchema } from "../typeInference-5JiqIZ8t.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { ReactNode } from "react";
|
|
8
7
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
8
|
+
import { ReactNode } from "react";
|
|
9
9
|
|
|
10
10
|
//#region src/react/SchemaComponent.d.ts
|
|
11
11
|
/**
|
|
@@ -7,8 +7,8 @@ import { walk } from "../core/walker.mjs";
|
|
|
7
7
|
import { headlessResolver } from "./headless.mjs";
|
|
8
8
|
import { resolvePath, resolveValue, setNestedValue } from "./fieldPath.mjs";
|
|
9
9
|
import { z } from "zod";
|
|
10
|
-
import { createContext, isValidElement, useCallback, useContext, useId, useMemo } from "react";
|
|
11
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { createContext, isValidElement, useCallback, useContext, useId, useMemo } from "react";
|
|
12
12
|
//#region src/react/SchemaComponent.tsx
|
|
13
13
|
/**
|
|
14
14
|
* <SchemaComponent> — renders UI from Zod, JSON Schema, or OpenAPI schemas.
|
|
@@ -78,7 +78,7 @@ function SchemaComponent({ schema: schemaInput, ref: refInput, value, onChange,
|
|
|
78
78
|
rootMeta = normalised.rootMeta;
|
|
79
79
|
rootDocument = normalised.rootDocument;
|
|
80
80
|
} catch (err) {
|
|
81
|
-
const error = new SchemaNormalisationError(err instanceof Error ? err.message : "Failed to normalise schema", schemaInput,
|
|
81
|
+
const error = err instanceof SchemaNormalisationError ? err : new SchemaNormalisationError(err instanceof Error ? err.message : "Failed to normalise schema", schemaInput, "unknown");
|
|
82
82
|
if (onError !== void 0) {
|
|
83
83
|
onError(error);
|
|
84
84
|
return null;
|
|
@@ -218,7 +218,8 @@ function SchemaField({ path, schema: schemaInput, ref: refInput, value, onChange
|
|
|
218
218
|
rootMeta = normalised.rootMeta;
|
|
219
219
|
rootDocument = normalised.rootDocument;
|
|
220
220
|
} catch (err) {
|
|
221
|
-
|
|
221
|
+
if (err instanceof SchemaNormalisationError) throw err;
|
|
222
|
+
throw new SchemaNormalisationError(err instanceof Error ? err.message : "Failed to normalise schema", schemaInput, "unknown");
|
|
222
223
|
}
|
|
223
224
|
const fieldTree = resolvePath(walk(jsonSchema, {
|
|
224
225
|
componentMeta: fieldMeta,
|
|
@@ -284,16 +285,5 @@ function isFieldErrorCallback(value) {
|
|
|
284
285
|
function isCallable(value) {
|
|
285
286
|
return typeof value === "function";
|
|
286
287
|
}
|
|
287
|
-
function detectNormalisationKind(err) {
|
|
288
|
-
if (err instanceof Error) {
|
|
289
|
-
const msg = err.message;
|
|
290
|
-
if (msg.includes("Zod 3")) return "zod3-unsupported";
|
|
291
|
-
if (msg.includes("Invalid Zod 4")) return "invalid-zod";
|
|
292
|
-
if (msg.includes("OpenAPI ref not found")) return "openapi-missing-ref";
|
|
293
|
-
if (msg.includes("OpenAPI")) return "openapi-invalid";
|
|
294
|
-
if (msg.includes("JSON Schema")) return "invalid-json-schema";
|
|
295
|
-
}
|
|
296
|
-
return "unknown";
|
|
297
|
-
}
|
|
298
288
|
//#endregion
|
|
299
289
|
export { ROOT_PATH, SchemaComponent, SchemaField, SchemaProvider, joinPath, registerWidget, renderField, sanitisePrefix };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { T as SchemaMeta } from "../types-D_5ST7SS.mjs";
|
|
2
|
-
import { t as Diagnostic } from "../diagnostics-
|
|
3
|
-
import { r as ComponentResolver } from "../renderer-
|
|
2
|
+
import { t as Diagnostic } from "../diagnostics-VgEKI_Ct.mjs";
|
|
3
|
+
import { r as ComponentResolver } from "../renderer-BQqiXUYP.mjs";
|
|
4
4
|
import { WidgetMap } from "./SchemaComponent.mjs";
|
|
5
5
|
import { ReactNode } from "react";
|
|
6
6
|
|
|
@@ -4,8 +4,8 @@ import { buildRenderProps, getRenderFunction, mergeResolvers } from "../core/ren
|
|
|
4
4
|
import { walk } from "../core/walker.mjs";
|
|
5
5
|
import { headlessResolver } from "./headless.mjs";
|
|
6
6
|
import { joinPath, sanitisePrefix } from "./SchemaComponent.mjs";
|
|
7
|
-
import { createElement, isValidElement, useId } from "react";
|
|
8
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
import { createElement, isValidElement, useId } from "react";
|
|
9
9
|
//#region src/react/SchemaView.tsx
|
|
10
10
|
/**
|
|
11
11
|
* React Server Component for read-only schema rendering.
|
|
@@ -62,6 +62,7 @@ function SchemaView({ schema: schemaInput, ref: refInput, value, fields, meta: c
|
|
|
62
62
|
rootMeta = normalised.rootMeta;
|
|
63
63
|
rootDocument = normalised.rootDocument;
|
|
64
64
|
} catch (err) {
|
|
65
|
+
if (err instanceof SchemaNormalisationError) throw err;
|
|
65
66
|
throw new SchemaNormalisationError(err instanceof Error ? err.message : "Failed to normalise schema", schemaInput, "unknown");
|
|
66
67
|
}
|
|
67
68
|
const walkOptions = {
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { r as ComponentResolver } from "../renderer-
|
|
1
|
+
import { r as ComponentResolver } from "../renderer-BQqiXUYP.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/react/headless.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* The headless resolver uses props.renderChild for recursive rendering.
|
|
6
6
|
* No factory function needed — the renderChild is always available
|
|
7
7
|
* on RenderProps.
|
|
8
|
+
*
|
|
9
|
+
* Every WalkedField variant the walker can emit has a registered renderer.
|
|
10
|
+
* Missing a registration causes `getRenderFunction` to return `undefined`
|
|
11
|
+
* and the field to render as nothing — silent invisibility. The
|
|
12
|
+
* `ComponentResolver` interface keeps each key optional for theme
|
|
13
|
+
* adapters, so the registration here is the single source of completeness.
|
|
8
14
|
*/
|
|
9
15
|
declare const headlessResolver: ComponentResolver;
|
|
10
16
|
//#endregion
|
package/dist/react/headless.mjs
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
import { renderArray, renderBoolean, renderDiscriminatedUnion, renderEnum, renderFile, renderNumber, renderObject, renderRecord, renderRecursive, renderString, renderUnion, renderUnknown } from "./headlessRenderers.mjs";
|
|
1
|
+
import { renderArray, renderBoolean, renderConditional, renderDiscriminatedUnion, renderEnum, renderFile, renderLiteral, renderNegation, renderNever, renderNull, renderNumber, renderObject, renderRecord, renderRecursive, renderString, renderTuple, renderUnion, renderUnknown } from "./headlessRenderers.mjs";
|
|
2
2
|
//#region src/react/headless.tsx
|
|
3
3
|
/**
|
|
4
4
|
* The headless resolver uses props.renderChild for recursive rendering.
|
|
5
5
|
* No factory function needed — the renderChild is always available
|
|
6
6
|
* on RenderProps.
|
|
7
|
+
*
|
|
8
|
+
* Every WalkedField variant the walker can emit has a registered renderer.
|
|
9
|
+
* Missing a registration causes `getRenderFunction` to return `undefined`
|
|
10
|
+
* and the field to render as nothing — silent invisibility. The
|
|
11
|
+
* `ComponentResolver` interface keeps each key optional for theme
|
|
12
|
+
* adapters, so the registration here is the single source of completeness.
|
|
7
13
|
*/
|
|
8
14
|
const headlessResolver = {
|
|
9
15
|
string: renderString,
|
|
10
16
|
number: renderNumber,
|
|
11
17
|
boolean: renderBoolean,
|
|
18
|
+
null: renderNull,
|
|
12
19
|
enum: renderEnum,
|
|
13
20
|
object: renderObject,
|
|
14
21
|
record: renderRecord,
|
|
15
22
|
array: renderArray,
|
|
23
|
+
tuple: renderTuple,
|
|
16
24
|
union: renderUnion,
|
|
17
25
|
discriminatedUnion: renderDiscriminatedUnion,
|
|
26
|
+
conditional: renderConditional,
|
|
27
|
+
negation: renderNegation,
|
|
28
|
+
literal: renderLiteral,
|
|
18
29
|
file: renderFile,
|
|
19
30
|
recursive: renderRecursive,
|
|
31
|
+
never: renderNever,
|
|
20
32
|
unknown: renderUnknown
|
|
21
33
|
};
|
|
22
34
|
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { M as WalkedField } from "../types-D_5ST7SS.mjs";
|
|
2
|
-
import { l as RenderProps } from "../renderer-
|
|
2
|
+
import { l as RenderProps } from "../renderer-BQqiXUYP.mjs";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
|
|
5
5
|
//#region src/react/headlessRenderers.d.ts
|
|
@@ -57,6 +57,57 @@ declare function renderDiscriminatedUnion(props: RenderProps): ReactNode;
|
|
|
57
57
|
declare function discriminatedUnionValueForTab(optionLabels: readonly string[], discKey: string, newIndex: number): Record<string, string> | undefined;
|
|
58
58
|
declare function renderFile(props: RenderProps): ReactNode;
|
|
59
59
|
declare function renderRecursive(props: RenderProps): ReactNode;
|
|
60
|
+
/**
|
|
61
|
+
* Render a literal field — `z.literal("a")` or `{ const: 5 }`.
|
|
62
|
+
*
|
|
63
|
+
* Literals are non-editable by nature (the value is fixed at the schema
|
|
64
|
+
* level), so both read-only and editable modes display the literal value(s).
|
|
65
|
+
* Multiple literals (`z.literal(["a", "b"])`) render comma-separated.
|
|
66
|
+
*/
|
|
67
|
+
declare function renderLiteral(props: RenderProps): ReactNode;
|
|
68
|
+
/**
|
|
69
|
+
* Render a null field — `z.null()` or `{ type: "null" }`.
|
|
70
|
+
*
|
|
71
|
+
* The only valid value is `null`, so render an em-dash placeholder
|
|
72
|
+
* regardless of mode. There is nothing the user can usefully change.
|
|
73
|
+
*/
|
|
74
|
+
declare function renderNull(props: RenderProps): ReactNode;
|
|
75
|
+
/**
|
|
76
|
+
* Render a never field — `z.never()` or `{ not: {} }` / `false` schema.
|
|
77
|
+
*
|
|
78
|
+
* `never` indicates a position that cannot hold any value. We render a
|
|
79
|
+
* visible placeholder rather than throwing because some valid schemas
|
|
80
|
+
* intentionally contain `never` branches (e.g. exhaustive discriminated
|
|
81
|
+
* unions), and a runtime crash on render would be worse than a visible
|
|
82
|
+
* indicator.
|
|
83
|
+
*/
|
|
84
|
+
declare function renderNever(props: RenderProps): ReactNode;
|
|
85
|
+
/**
|
|
86
|
+
* Render a tuple field — `z.tuple([z.string(), z.number()])` or
|
|
87
|
+
* `{ prefixItems: [...] }`.
|
|
88
|
+
*
|
|
89
|
+
* Positional rendering: each `prefixItems` entry is rendered at its index.
|
|
90
|
+
* The structural index (e.g. `[0]`) is passed as the path suffix so
|
|
91
|
+
* children get unique ids and labels.
|
|
92
|
+
*/
|
|
93
|
+
declare function renderTuple(props: RenderProps): ReactNode;
|
|
94
|
+
/**
|
|
95
|
+
* Render a conditional field — JSON Schema `if`/`then`/`else`.
|
|
96
|
+
*
|
|
97
|
+
* Conditional schemas describe constraints rather than a single value
|
|
98
|
+
* shape, so the renderer surfaces each clause as a labelled fieldset.
|
|
99
|
+
* This mirrors the HTML renderer's annotation approach and gives a
|
|
100
|
+
* predictable structure for theme adapters that want to override it.
|
|
101
|
+
*/
|
|
102
|
+
declare function renderConditional(props: RenderProps): ReactNode;
|
|
103
|
+
/**
|
|
104
|
+
* Render a negation field — JSON Schema `{ not: { ... } }`.
|
|
105
|
+
*
|
|
106
|
+
* Negation describes a constraint ("value must NOT match this schema")
|
|
107
|
+
* rather than a value shape. The renderer surfaces the negated schema
|
|
108
|
+
* beneath an explanatory preamble.
|
|
109
|
+
*/
|
|
110
|
+
declare function renderNegation(props: RenderProps): ReactNode;
|
|
60
111
|
declare function renderUnknown(props: RenderProps): ReactNode;
|
|
61
112
|
//#endregion
|
|
62
|
-
export { defaultRecordValue, discriminatedUnionValueForTab, inputId, nextRecordKey, renameRecordKey, renderArray, renderBoolean, renderDiscriminatedUnion, renderEnum, renderFile, renderNumber, renderObject, renderRecord, renderRecursive, renderString, renderUnion, renderUnknown, toReactNode };
|
|
113
|
+
export { defaultRecordValue, discriminatedUnionValueForTab, inputId, nextRecordKey, renameRecordKey, renderArray, renderBoolean, renderConditional, renderDiscriminatedUnion, renderEnum, renderFile, renderLiteral, renderNegation, renderNever, renderNull, renderNumber, renderObject, renderRecord, renderRecursive, renderString, renderTuple, renderUnion, renderUnknown, toReactNode };
|