@wildo-ai/zod-decorators 1.1.4 → 1.1.6
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/esm/currencies.shared.schemas.d.ts.map +1 -1
- package/dist/esm/currencies.shared.schemas.js.map +1 -1
- package/dist/esm/files/agent-file-formats.d.ts +51 -37
- package/dist/esm/files/agent-file-formats.d.ts.map +1 -1
- package/dist/esm/files/agent-file-formats.js +54 -47
- package/dist/esm/files/agent-file-formats.js.map +1 -1
- package/dist/esm/files/extension-nature-map.d.ts.map +1 -1
- package/dist/esm/files/mime-registry.d.ts.map +1 -1
- package/dist/esm/files/unified-registry.d.ts +2 -2
- package/dist/esm/files/unified-registry.d.ts.map +1 -1
- package/dist/esm/files/unified-registry.js +1 -1
- package/dist/esm/files/unified-registry.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/testing/decorated-test-schemas.d.ts.map +1 -1
- package/dist/esm/testing.d.ts +11 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +11 -0
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/zod-address.d.ts +146 -0
- package/dist/esm/zod-address.d.ts.map +1 -0
- package/dist/esm/zod-address.js +176 -0
- package/dist/esm/zod-address.js.map +1 -0
- package/dist/esm/zod-bigdecimal.d.ts.map +1 -1
- package/dist/esm/zod-code.d.ts +2 -0
- package/dist/esm/zod-code.d.ts.map +1 -1
- package/dist/esm/zod-code.js +4 -4
- package/dist/esm/zod-code.js.map +1 -1
- package/dist/esm/zod-color.d.ts.map +1 -1
- package/dist/esm/zod-decorators.types.d.ts +311 -29
- package/dist/esm/zod-decorators.types.d.ts.map +1 -1
- package/dist/esm/zod-decorators.types.js +177 -8
- package/dist/esm/zod-decorators.types.js.map +1 -1
- package/dist/esm/zod-duration.d.ts +2 -0
- package/dist/esm/zod-duration.d.ts.map +1 -1
- package/dist/esm/zod-duration.js +4 -4
- package/dist/esm/zod-duration.js.map +1 -1
- package/dist/esm/zod-file.d.ts +70 -4
- package/dist/esm/zod-file.d.ts.map +1 -1
- package/dist/esm/zod-file.js +92 -75
- package/dist/esm/zod-file.js.map +1 -1
- package/dist/esm/zod-money.d.ts +2 -0
- package/dist/esm/zod-money.d.ts.map +1 -1
- package/dist/esm/zod-money.js +6 -6
- package/dist/esm/zod-money.js.map +1 -1
- package/dist/esm/zod-phone.d.ts +8 -0
- package/dist/esm/zod-phone.d.ts.map +1 -1
- package/dist/esm/zod-phone.js +6 -1
- package/dist/esm/zod-phone.js.map +1 -1
- package/dist/esm/zod-range.d.ts.map +1 -1
- package/dist/esm/zod-utils.shared.d.ts +343 -12
- package/dist/esm/zod-utils.shared.d.ts.map +1 -1
- package/dist/esm/zod-utils.shared.js +1004 -90
- package/dist/esm/zod-utils.shared.js.map +1 -1
- package/dist/esm/zod-versioned.d.ts.map +1 -1
- package/dist/esm/zod-versioned.js.map +1 -1
- package/dist/esm/zod.module-override.d.ts +29 -1
- package/dist/esm/zod.module-override.d.ts.map +1 -1
- package/dist/esm/zod.module-override.js +67 -8
- package/dist/esm/zod.module-override.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -7
- package/dist/esm/companion-exports.d.ts +0 -8
- package/dist/esm/companion-exports.d.ts.map +0 -1
- package/dist/esm/companion-exports.js +0 -8
- package/dist/esm/companion-exports.js.map +0 -1
|
@@ -44,6 +44,7 @@ export declare enum FieldSchemaType {
|
|
|
44
44
|
FILE = "file",// File schemas created by z_file() - detected by SCHEMA_METADATA.fileConfig
|
|
45
45
|
DURATION = "duration",// Duration schemas created by z_duration() - detected by SCHEMA_METADATA.durationConfig
|
|
46
46
|
PHONE = "phone",// Phone schemas created by z_phone() - detected by SCHEMA_METADATA.phoneConfig
|
|
47
|
+
ADDRESS = "address",// Address schemas created by z_address() - detected by SCHEMA_METADATA.addressConfig
|
|
47
48
|
VERSIONED_FOREIGN_KEY = "versioned_foreign_key",// Versioned foreign key schemas created by z_foreignKeyVersioned() - detected by SCHEMA_METADATA.versionedForeignKeyConfig
|
|
48
49
|
VERSIONED_OBJECT = "versioned_object",// Versioned object schemas created by versioned() - detected by SCHEMA_METADATA.versionedConfig
|
|
49
50
|
UNKNOWN = "unknown"
|
|
@@ -67,7 +68,8 @@ export declare enum FormFieldComponent {
|
|
|
67
68
|
BIGDECIMAL_RANGE = "bigdecimal-range",// BigDecimal range input (from/to bigdecimal)
|
|
68
69
|
MONEY_RANGE = "money-range",// Money range input (from/to money)
|
|
69
70
|
DURATION = "duration",// Duration input (value + unit selector)
|
|
70
|
-
PHONE = "phone"
|
|
71
|
+
PHONE = "phone",// Phone input (country + number, E.164 output)
|
|
72
|
+
ADDRESS = "address"
|
|
71
73
|
}
|
|
72
74
|
/**
|
|
73
75
|
* Official HTML autocomplete field identifiers.
|
|
@@ -197,11 +199,11 @@ export type ResponsiveChromeMode = EditChromeMode | Partial<Record<ViewportBreak
|
|
|
197
199
|
*/
|
|
198
200
|
export type ResponsiveAware<T> = T | Partial<Record<ViewportBreakpoint, T>>;
|
|
199
201
|
export type FormFieldSchemaTypeComponents = {
|
|
200
|
-
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? FormFieldComponent.INPUT | FormFieldComponent.TEXTAREA | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP | FormFieldComponent.DATE | FormFieldComponent.TIME | FormFieldComponent.DATETIME : K extends FieldSchemaType.NUMBER ? FormFieldComponent.INPUT | FormFieldComponent.SLIDER | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.BIGINT ? FormFieldComponent.INPUT : K extends FieldSchemaType.BOOLEAN ? FormFieldComponent.SWITCH | FormFieldComponent.CHECKBOX | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.ENUM ? FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.DATE ? FormFieldComponent.DATE | FormFieldComponent.DATETIME | FormFieldComponent.INPUT : K extends FieldSchemaType.TIME ? FormFieldComponent.TIME | FormFieldComponent.INPUT : K extends FieldSchemaType.DATETIME ? FormFieldComponent.DATETIME | FormFieldComponent.INPUT : K extends FieldSchemaType.RANGE_NUMBER ? FormFieldComponent.RANGE_SLIDER : K extends FieldSchemaType.RANGE_DATE ? FormFieldComponent.DATE_RANGE : K extends FieldSchemaType.RANGE_DATETIME ? FormFieldComponent.DATETIME_RANGE : K extends FieldSchemaType.RANGE_TIME ? FormFieldComponent.TIME_RANGE : K extends FieldSchemaType.RANGE_BIGDECIMAL ? FormFieldComponent.BIGDECIMAL_RANGE : K extends FieldSchemaType.RANGE_MONEY ? FormFieldComponent.MONEY_RANGE : K extends FieldSchemaType.MONEY ? FormFieldComponent.INPUT : K extends FieldSchemaType.DURATION ? FormFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? FormFieldComponent.PHONE : K extends FieldSchemaType.BIGDECIMAL ? FormFieldComponent.INPUT : K extends FieldSchemaType.CODE ? FormFieldComponent.TEXTAREA : K extends FieldSchemaType.FILE ? FormFieldComponent.INPUT : K extends FieldSchemaType.ARRAY ? FormFieldComponent.CHECKBOX_GROUP | FormFieldComponent.SELECT : K extends FieldSchemaType.SET ? FormFieldComponent.INPUT | FormFieldComponent.CHECKBOX_GROUP | FormFieldComponent.SELECT : K extends FieldSchemaType.TUPLE ? FormFieldComponent.INPUT : K extends FieldSchemaType.UNKNOWN ? FormFieldComponent.INPUT : never;
|
|
202
|
+
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? FormFieldComponent.INPUT | FormFieldComponent.TEXTAREA | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP | FormFieldComponent.DATE | FormFieldComponent.TIME | FormFieldComponent.DATETIME : K extends FieldSchemaType.NUMBER ? FormFieldComponent.INPUT | FormFieldComponent.SLIDER | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.BIGINT ? FormFieldComponent.INPUT : K extends FieldSchemaType.BOOLEAN ? FormFieldComponent.SWITCH | FormFieldComponent.CHECKBOX | FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.ENUM ? FormFieldComponent.SELECT | FormFieldComponent.RADIO_GROUP : K extends FieldSchemaType.DATE ? FormFieldComponent.DATE | FormFieldComponent.DATETIME | FormFieldComponent.INPUT : K extends FieldSchemaType.TIME ? FormFieldComponent.TIME | FormFieldComponent.INPUT : K extends FieldSchemaType.DATETIME ? FormFieldComponent.DATETIME | FormFieldComponent.INPUT : K extends FieldSchemaType.RANGE_NUMBER ? FormFieldComponent.RANGE_SLIDER : K extends FieldSchemaType.RANGE_DATE ? FormFieldComponent.DATE_RANGE : K extends FieldSchemaType.RANGE_DATETIME ? FormFieldComponent.DATETIME_RANGE : K extends FieldSchemaType.RANGE_TIME ? FormFieldComponent.TIME_RANGE : K extends FieldSchemaType.RANGE_BIGDECIMAL ? FormFieldComponent.BIGDECIMAL_RANGE : K extends FieldSchemaType.RANGE_MONEY ? FormFieldComponent.MONEY_RANGE : K extends FieldSchemaType.MONEY ? FormFieldComponent.INPUT : K extends FieldSchemaType.DURATION ? FormFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? FormFieldComponent.PHONE : K extends FieldSchemaType.ADDRESS ? FormFieldComponent.ADDRESS : K extends FieldSchemaType.BIGDECIMAL ? FormFieldComponent.INPUT : K extends FieldSchemaType.CODE ? FormFieldComponent.TEXTAREA : K extends FieldSchemaType.FILE ? FormFieldComponent.INPUT : K extends FieldSchemaType.ARRAY ? FormFieldComponent.CHECKBOX_GROUP | FormFieldComponent.SELECT : K extends FieldSchemaType.SET ? FormFieldComponent.INPUT | FormFieldComponent.CHECKBOX_GROUP | FormFieldComponent.SELECT : K extends FieldSchemaType.TUPLE ? FormFieldComponent.INPUT : K extends FieldSchemaType.UNKNOWN ? FormFieldComponent.INPUT : never;
|
|
201
203
|
};
|
|
202
204
|
export type FormComponentForSchemaType<T extends FieldSchemaType> = FormFieldSchemaTypeComponents[T];
|
|
203
205
|
export type FormFieldSchemaTypeDefaultComponent = {
|
|
204
|
-
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? FormFieldComponent.INPUT : K extends FieldSchemaType.NUMBER ? FormFieldComponent.INPUT : K extends FieldSchemaType.BIGINT ? FormFieldComponent.INPUT : K extends FieldSchemaType.BOOLEAN ? FormFieldComponent.SWITCH : K extends FieldSchemaType.ENUM ? FormFieldComponent.SELECT : K extends FieldSchemaType.DATE ? FormFieldComponent.DATE : K extends FieldSchemaType.TIME ? FormFieldComponent.TIME : K extends FieldSchemaType.DATETIME ? FormFieldComponent.DATETIME : K extends FieldSchemaType.RANGE_NUMBER ? FormFieldComponent.RANGE_SLIDER : K extends FieldSchemaType.RANGE_DATE ? FormFieldComponent.DATE_RANGE : K extends FieldSchemaType.RANGE_DATETIME ? FormFieldComponent.DATETIME_RANGE : K extends FieldSchemaType.RANGE_TIME ? FormFieldComponent.TIME_RANGE : K extends FieldSchemaType.RANGE_BIGDECIMAL ? FormFieldComponent.BIGDECIMAL_RANGE : K extends FieldSchemaType.RANGE_MONEY ? FormFieldComponent.MONEY_RANGE : K extends FieldSchemaType.MONEY ? FormFieldComponent.INPUT : K extends FieldSchemaType.DURATION ? FormFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? FormFieldComponent.PHONE : K extends FieldSchemaType.BIGDECIMAL ? FormFieldComponent.INPUT : K extends FieldSchemaType.CODE ? FormFieldComponent.TEXTAREA : K extends FieldSchemaType.FILE ? FormFieldComponent.INPUT : FormFieldComponent.INPUT;
|
|
206
|
+
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? FormFieldComponent.INPUT : K extends FieldSchemaType.NUMBER ? FormFieldComponent.INPUT : K extends FieldSchemaType.BIGINT ? FormFieldComponent.INPUT : K extends FieldSchemaType.BOOLEAN ? FormFieldComponent.SWITCH : K extends FieldSchemaType.ENUM ? FormFieldComponent.SELECT : K extends FieldSchemaType.DATE ? FormFieldComponent.DATE : K extends FieldSchemaType.TIME ? FormFieldComponent.TIME : K extends FieldSchemaType.DATETIME ? FormFieldComponent.DATETIME : K extends FieldSchemaType.RANGE_NUMBER ? FormFieldComponent.RANGE_SLIDER : K extends FieldSchemaType.RANGE_DATE ? FormFieldComponent.DATE_RANGE : K extends FieldSchemaType.RANGE_DATETIME ? FormFieldComponent.DATETIME_RANGE : K extends FieldSchemaType.RANGE_TIME ? FormFieldComponent.TIME_RANGE : K extends FieldSchemaType.RANGE_BIGDECIMAL ? FormFieldComponent.BIGDECIMAL_RANGE : K extends FieldSchemaType.RANGE_MONEY ? FormFieldComponent.MONEY_RANGE : K extends FieldSchemaType.MONEY ? FormFieldComponent.INPUT : K extends FieldSchemaType.DURATION ? FormFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? FormFieldComponent.PHONE : K extends FieldSchemaType.ADDRESS ? FormFieldComponent.ADDRESS : K extends FieldSchemaType.BIGDECIMAL ? FormFieldComponent.INPUT : K extends FieldSchemaType.CODE ? FormFieldComponent.TEXTAREA : K extends FieldSchemaType.FILE ? FormFieldComponent.INPUT : FormFieldComponent.INPUT;
|
|
205
207
|
};
|
|
206
208
|
export type DefaultFormComponentForSchemaType<T extends FieldSchemaType> = FormFieldSchemaTypeDefaultComponent[T];
|
|
207
209
|
export type DecoratorConfig<T extends ZodDecorator> = {
|
|
@@ -224,6 +226,7 @@ export declare enum DisplayFieldComponent {
|
|
|
224
226
|
BIGDECIMAL = "bigdecimal",
|
|
225
227
|
DURATION = "duration",
|
|
226
228
|
PHONE = "phone",
|
|
229
|
+
ADDRESS = "address",
|
|
227
230
|
RANGE_NUMBER = "range-number",
|
|
228
231
|
RANGE_DATE = "range-date",
|
|
229
232
|
RANGE_TIME = "range-time",
|
|
@@ -232,11 +235,11 @@ export declare enum DisplayFieldComponent {
|
|
|
232
235
|
RANGE_MONEY = "range-money"
|
|
233
236
|
}
|
|
234
237
|
export type DisplayFieldSchemaTypeComponents = {
|
|
235
|
-
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? DisplayFieldComponent.STRING | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.NUMBER ? DisplayFieldComponent.NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BIGINT ? DisplayFieldComponent.NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BOOLEAN ? DisplayFieldComponent.BOOLEAN | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ENUM ? DisplayFieldComponent.ENUM | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DATE ? DisplayFieldComponent.DATE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TIME ? DisplayFieldComponent.TIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DATETIME ? DisplayFieldComponent.DATETIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ARRAY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RECORD ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MAP ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_NUMBER ? DisplayFieldComponent.RANGE_NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_DATE ? DisplayFieldComponent.RANGE_DATE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_TIME ? DisplayFieldComponent.RANGE_TIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_DATETIME ? DisplayFieldComponent.RANGE_DATETIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_BIGDECIMAL ? DisplayFieldComponent.RANGE_BIGDECIMAL | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_MONEY ? DisplayFieldComponent.RANGE_MONEY | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MONEY ? DisplayFieldComponent.MONEY | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DURATION ? DisplayFieldComponent.DURATION | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.PHONE ? DisplayFieldComponent.PHONE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BIGDECIMAL ? DisplayFieldComponent.BIGDECIMAL | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.CODE ? DisplayFieldComponent.CODE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.FILE ? DisplayFieldComponent.FILE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.SET ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TUPLE ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_FOREIGN_KEY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.UNKNOWN ? DisplayFieldComponent.SIMPLE_TEXT : never;
|
|
238
|
+
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? DisplayFieldComponent.STRING | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.NUMBER ? DisplayFieldComponent.NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BIGINT ? DisplayFieldComponent.NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BOOLEAN ? DisplayFieldComponent.BOOLEAN | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ENUM ? DisplayFieldComponent.ENUM | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DATE ? DisplayFieldComponent.DATE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TIME ? DisplayFieldComponent.TIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DATETIME ? DisplayFieldComponent.DATETIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ARRAY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RECORD ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MAP ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_NUMBER ? DisplayFieldComponent.RANGE_NUMBER | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_DATE ? DisplayFieldComponent.RANGE_DATE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_TIME ? DisplayFieldComponent.RANGE_TIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_DATETIME ? DisplayFieldComponent.RANGE_DATETIME | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_BIGDECIMAL ? DisplayFieldComponent.RANGE_BIGDECIMAL | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_MONEY ? DisplayFieldComponent.RANGE_MONEY | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MONEY ? DisplayFieldComponent.MONEY | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.DURATION ? DisplayFieldComponent.DURATION | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.PHONE ? DisplayFieldComponent.PHONE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ADDRESS ? DisplayFieldComponent.ADDRESS | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.BIGDECIMAL ? DisplayFieldComponent.BIGDECIMAL | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.CODE ? DisplayFieldComponent.CODE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.FILE ? DisplayFieldComponent.FILE | DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.SET ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TUPLE ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_FOREIGN_KEY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.UNKNOWN ? DisplayFieldComponent.SIMPLE_TEXT : never;
|
|
236
239
|
};
|
|
237
240
|
export type DisplayComponentForSchemaType<T extends FieldSchemaType> = DisplayFieldSchemaTypeComponents[T];
|
|
238
241
|
export type DisplayFieldSchemaTypeDefaultComponent = {
|
|
239
|
-
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? DisplayFieldComponent.STRING : K extends FieldSchemaType.NUMBER ? DisplayFieldComponent.NUMBER : K extends FieldSchemaType.BIGINT ? DisplayFieldComponent.NUMBER : K extends FieldSchemaType.BOOLEAN ? DisplayFieldComponent.BOOLEAN : K extends FieldSchemaType.ENUM ? DisplayFieldComponent.ENUM : K extends FieldSchemaType.DATE ? DisplayFieldComponent.DATE : K extends FieldSchemaType.TIME ? DisplayFieldComponent.TIME : K extends FieldSchemaType.DATETIME ? DisplayFieldComponent.DATETIME : K extends FieldSchemaType.OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ARRAY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RECORD ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MAP ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_NUMBER ? DisplayFieldComponent.RANGE_NUMBER : K extends FieldSchemaType.RANGE_DATE ? DisplayFieldComponent.RANGE_DATE : K extends FieldSchemaType.RANGE_TIME ? DisplayFieldComponent.RANGE_TIME : K extends FieldSchemaType.RANGE_DATETIME ? DisplayFieldComponent.RANGE_DATETIME : K extends FieldSchemaType.RANGE_BIGDECIMAL ? DisplayFieldComponent.RANGE_BIGDECIMAL : K extends FieldSchemaType.RANGE_MONEY ? DisplayFieldComponent.RANGE_MONEY : K extends FieldSchemaType.MONEY ? DisplayFieldComponent.MONEY : K extends FieldSchemaType.DURATION ? DisplayFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? DisplayFieldComponent.PHONE : K extends FieldSchemaType.BIGDECIMAL ? DisplayFieldComponent.BIGDECIMAL : K extends FieldSchemaType.CODE ? DisplayFieldComponent.CODE : K extends FieldSchemaType.FILE ? DisplayFieldComponent.FILE : K extends FieldSchemaType.SET ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TUPLE ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_FOREIGN_KEY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : DisplayFieldComponent.SIMPLE_TEXT;
|
|
242
|
+
[K in FieldSchemaType]: K extends FieldSchemaType.STRING ? DisplayFieldComponent.STRING : K extends FieldSchemaType.NUMBER ? DisplayFieldComponent.NUMBER : K extends FieldSchemaType.BIGINT ? DisplayFieldComponent.NUMBER : K extends FieldSchemaType.BOOLEAN ? DisplayFieldComponent.BOOLEAN : K extends FieldSchemaType.ENUM ? DisplayFieldComponent.ENUM : K extends FieldSchemaType.DATE ? DisplayFieldComponent.DATE : K extends FieldSchemaType.TIME ? DisplayFieldComponent.TIME : K extends FieldSchemaType.DATETIME ? DisplayFieldComponent.DATETIME : K extends FieldSchemaType.OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.ARRAY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RECORD ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.MAP ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.RANGE_NUMBER ? DisplayFieldComponent.RANGE_NUMBER : K extends FieldSchemaType.RANGE_DATE ? DisplayFieldComponent.RANGE_DATE : K extends FieldSchemaType.RANGE_TIME ? DisplayFieldComponent.RANGE_TIME : K extends FieldSchemaType.RANGE_DATETIME ? DisplayFieldComponent.RANGE_DATETIME : K extends FieldSchemaType.RANGE_BIGDECIMAL ? DisplayFieldComponent.RANGE_BIGDECIMAL : K extends FieldSchemaType.RANGE_MONEY ? DisplayFieldComponent.RANGE_MONEY : K extends FieldSchemaType.MONEY ? DisplayFieldComponent.MONEY : K extends FieldSchemaType.DURATION ? DisplayFieldComponent.DURATION : K extends FieldSchemaType.PHONE ? DisplayFieldComponent.PHONE : K extends FieldSchemaType.ADDRESS ? DisplayFieldComponent.ADDRESS : K extends FieldSchemaType.BIGDECIMAL ? DisplayFieldComponent.BIGDECIMAL : K extends FieldSchemaType.CODE ? DisplayFieldComponent.CODE : K extends FieldSchemaType.FILE ? DisplayFieldComponent.FILE : K extends FieldSchemaType.SET ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.TUPLE ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_FOREIGN_KEY ? DisplayFieldComponent.SIMPLE_TEXT : K extends FieldSchemaType.VERSIONED_OBJECT ? DisplayFieldComponent.SIMPLE_TEXT : DisplayFieldComponent.SIMPLE_TEXT;
|
|
240
243
|
};
|
|
241
244
|
export type DefaultDisplayComponentForSchemaType<T extends FieldSchemaType> = DisplayFieldSchemaTypeDefaultComponent[T];
|
|
242
245
|
/**
|
|
@@ -366,6 +369,50 @@ export declare const BooleanLabellingValue: {
|
|
|
366
369
|
readonly ACTIVE_INACTIVE: "active/inactive";
|
|
367
370
|
};
|
|
368
371
|
export type BooleanLabellingValue = typeof BooleanLabellingValue[keyof typeof BooleanLabellingValue];
|
|
372
|
+
/**
|
|
373
|
+
* WHY a field has nothing to show — the semantic half of an empty rendering.
|
|
374
|
+
*
|
|
375
|
+
* ## The problem this names
|
|
376
|
+
*
|
|
377
|
+
* Every empty value rendered as one em dash, and an em dash says four different things at once.
|
|
378
|
+
* Administration → Entitlements showed five rows of "—" for a ledger whose emptiness is the CORRECT
|
|
379
|
+
* and reassuring state ("nothing is overridden"); an SSO pane showed "—" for `verifiedDomains`,
|
|
380
|
+
* which an operator can fill, beside "—" for `domainVerificationStatus`, which is computed and which
|
|
381
|
+
* they cannot. A reader cannot tell a working empty ledger from a failed read, nor a field awaiting
|
|
382
|
+
* their input from one awaiting the system's.
|
|
383
|
+
*
|
|
384
|
+
* ## Derived, never authored
|
|
385
|
+
*
|
|
386
|
+
* No new decoration: the reason is computed from what the field already declares and from the shape
|
|
387
|
+
* of the emptiness at the render site. A field added tomorrow is classified without anybody
|
|
388
|
+
* remembering to mark it — a derivation that is TOTAL over the vocabulary, which a hand-kept list of
|
|
389
|
+
* marked fields can never be.
|
|
390
|
+
*
|
|
391
|
+
* This is the REASON. How it renders — an em dash, the word, nothing at all, a skeleton — stays
|
|
392
|
+
* `AutoEmptyValue`, a surface policy. Keeping them apart is what lets one surface show "No domains
|
|
393
|
+
* yet" while a dense table keeps its dash, without either deciding what the emptiness MEANS.
|
|
394
|
+
*/
|
|
395
|
+
export declare const DisplayEmptyReason: {
|
|
396
|
+
/**
|
|
397
|
+
* Writable and unset. The operator can fill it, and the word should invite that.
|
|
398
|
+
* `verifiedDomains` before a domain is claimed.
|
|
399
|
+
*/
|
|
400
|
+
readonly NOT_SET: "not-set";
|
|
401
|
+
/**
|
|
402
|
+
* A COLLECTION with no members — an empty array, object or record. Distinct from `NOT_SET`
|
|
403
|
+
* because "none yet" is a statement about a list that exists, not about a field nobody has
|
|
404
|
+
* touched, and because an empty ledger is frequently the correct state rather than a gap.
|
|
405
|
+
*/
|
|
406
|
+
readonly NONE: "none";
|
|
407
|
+
/**
|
|
408
|
+
* Nothing has produced a value, and the operator cannot produce one either — the field is
|
|
409
|
+
* `.excludeFromUpdate()`, so it is computed, derived or system-owned. `domainVerificationStatus`
|
|
410
|
+
* with no domain to verify. Rendering this identically to `NOT_SET` is what sends an operator
|
|
411
|
+
* hunting for a control that does not exist.
|
|
412
|
+
*/
|
|
413
|
+
readonly NOT_PROVIDED: "not-provided";
|
|
414
|
+
};
|
|
415
|
+
export type DisplayEmptyReason = typeof DisplayEmptyReason[keyof typeof DisplayEmptyReason];
|
|
369
416
|
/**
|
|
370
417
|
* Display mode for boolean fields
|
|
371
418
|
*/
|
|
@@ -408,12 +455,24 @@ export declare const StringDisplayMode: {
|
|
|
408
455
|
* it identifies. Use for values a reader needs to copy or trace, never to read as content.
|
|
409
456
|
*/
|
|
410
457
|
readonly IDENTIFIER: "identifier";
|
|
458
|
+
/**
|
|
459
|
+
* HTML written by someone OUTSIDE the application — the HTML part of a received email. Rendered in a sandboxed
|
|
460
|
+
* frame that runs nothing and fetches nothing (no remote image, stylesheet or font: a remote image is a read
|
|
461
|
+
* receipt), with the message's own styles confined to the frame. Never use it for HTML the application authored.
|
|
462
|
+
*/
|
|
463
|
+
readonly UNTRUSTED_HTML: "untrusted_html";
|
|
411
464
|
readonly COLOR: "color";
|
|
412
465
|
readonly LINK: "link";
|
|
413
466
|
readonly EMAIL: "email";
|
|
414
467
|
readonly BADGE: "badge";
|
|
415
468
|
readonly COPY: "copy";
|
|
416
469
|
readonly SECRET: "secret";
|
|
470
|
+
/**
|
|
471
|
+
* The value is a KEY of the organization role table (#1921) — render the role's WORD from the application's
|
|
472
|
+
* `roles` labels, never the key. A role with no authored word shows its key, visibly unlabelled. Pair with
|
|
473
|
+
* `edit.editMode: StringEditMode.ORGANIZATION_ROLE` so the field is picked the way it is read.
|
|
474
|
+
*/
|
|
475
|
+
readonly ORGANIZATION_ROLE: "organization_role";
|
|
417
476
|
};
|
|
418
477
|
export type StringDisplayMode = typeof StringDisplayMode[keyof typeof StringDisplayMode];
|
|
419
478
|
/**
|
|
@@ -433,6 +492,15 @@ export declare const StringEditMode: {
|
|
|
433
492
|
* separate future edit mode/component.
|
|
434
493
|
*/
|
|
435
494
|
readonly MARKDOWN: "markdown";
|
|
495
|
+
/**
|
|
496
|
+
* A SINGLE-ROLE picker (#1921): the field's value is one key of the organization role table — the core
|
|
497
|
+
* organization roles plus the application's custom organization roles, as the backend publishes them on
|
|
498
|
+
* `/application-config` (`organizationRoles`). Each option reads as the role's word from the `roles` labels. Use it
|
|
499
|
+
* for any string field that names ONE role a setting admits (a reader role, a routing role), so an administrator
|
|
500
|
+
* picks a role that exists instead of typing a key exactly. Falls back to a text input when the backend publishes no
|
|
501
|
+
* table. The server remains the control: it decides what holding the role grants.
|
|
502
|
+
*/
|
|
503
|
+
readonly ORGANIZATION_ROLE: "organization_role";
|
|
436
504
|
};
|
|
437
505
|
export type StringEditMode = typeof StringEditMode[keyof typeof StringEditMode];
|
|
438
506
|
/**
|
|
@@ -511,6 +579,40 @@ export declare const EnumEditMode: {
|
|
|
511
579
|
readonly COMBOBOX: "combobox";
|
|
512
580
|
};
|
|
513
581
|
export type EnumEditMode = typeof EnumEditMode[keyof typeof EnumEditMode];
|
|
582
|
+
/**
|
|
583
|
+
* How an ARRAY OF ENUM VALUES is chosen — the MULTIPLE-selection sibling of {@link EnumEditMode},
|
|
584
|
+
* and a category of its own rather than a flag on that one.
|
|
585
|
+
*
|
|
586
|
+
* Picking several of a closed set is a different act from picking one, and the controls are
|
|
587
|
+
* different controls: a checkbox group, a multi-select trigger showing chips, a segmented group
|
|
588
|
+
* where any number of segments can be on. Before this vocabulary existed an array of enums
|
|
589
|
+
* declared its shape with the SINGLE-select one — `z.array(z.enum(X).enumUI({ edit: { editMode:
|
|
590
|
+
* EnumEditMode.COMBOBOX } }))` — so one member meant two different controls depending on whether
|
|
591
|
+
* the field happened to be an array, and the other seven meant nothing at all there. Two meanings
|
|
592
|
+
* on one enum member is exactly the merge a framework must not make.
|
|
593
|
+
*
|
|
594
|
+
* **There is no RADIO twin, and that absence is the point.** A radio group is single-choice by
|
|
595
|
+
* definition; its multiple form IS the checkbox group, which is why `CHECKBOX` sits where `RADIO`
|
|
596
|
+
* and `RADIO_ICON_ONLY` sit in the single vocabulary. Every other member is the same control
|
|
597
|
+
* admitting more than one answer.
|
|
598
|
+
*/
|
|
599
|
+
export declare const EnumMultipleEditMode: {
|
|
600
|
+
/** A checkbox per option. The default: it shows the whole vocabulary and says "any number" without being told. */
|
|
601
|
+
readonly CHECKBOX: "checkbox";
|
|
602
|
+
/** A dropdown whose trigger carries the chosen values as chips. For a vocabulary too long to list inline. */
|
|
603
|
+
readonly SELECT: "select";
|
|
604
|
+
/** A segmented group where any number of segments can be on at once. */
|
|
605
|
+
readonly TOGGLE: "toggle";
|
|
606
|
+
/** The same group, each segment reduced to its value's glyph. */
|
|
607
|
+
readonly TOGGLE_ICON_ONLY: "toggle_icon_only";
|
|
608
|
+
/** One card per option, each independently on or off. */
|
|
609
|
+
readonly CARD: "card";
|
|
610
|
+
/** The same grid, each card reduced to its value's glyph. */
|
|
611
|
+
readonly CARD_ICON_ONLY: "card_icon_only";
|
|
612
|
+
/** A searchable popover with chips. For a long vocabulary someone types their way through. */
|
|
613
|
+
readonly COMBOBOX: "combobox";
|
|
614
|
+
};
|
|
615
|
+
export type EnumMultipleEditMode = typeof EnumMultipleEditMode[keyof typeof EnumMultipleEditMode];
|
|
514
616
|
/**
|
|
515
617
|
* Layout direction for form layouts
|
|
516
618
|
*/
|
|
@@ -947,6 +1049,34 @@ export interface PhoneSchemaOptions {
|
|
|
947
1049
|
/** Default country when parsing numbers without country code */
|
|
948
1050
|
defaultCountry?: PhoneCountryCode;
|
|
949
1051
|
}
|
|
1052
|
+
/**
|
|
1053
|
+
* Metadata stored on address schemas for detection and configuration (#561).
|
|
1054
|
+
*
|
|
1055
|
+
* Country codes are ISO 3166-1 alpha-2 STRINGS rather than the `AvailableCountry` enum on purpose:
|
|
1056
|
+
* that enum lives in `@wildo-ai/presets-components-models`, which depends on this package, so importing
|
|
1057
|
+
* it here would be a cycle — the same reason `PhoneUIParams.displayCountry` is a string.
|
|
1058
|
+
*/
|
|
1059
|
+
export interface AddressSchemaMetadata {
|
|
1060
|
+
/** Marker for detecting address schemas */
|
|
1061
|
+
isAddress: true;
|
|
1062
|
+
/** Whether the form offers the optional `coordinates` pair for editing. The value may carry one either way. */
|
|
1063
|
+
withCoordinates: boolean;
|
|
1064
|
+
/** Countries a value may name (uppercase ISO 3166-1 alpha-2). Absent means any country. */
|
|
1065
|
+
countriesAllowed?: readonly string[];
|
|
1066
|
+
/** Country pre-selected for a new value (uppercase ISO 3166-1 alpha-2). */
|
|
1067
|
+
defaultCountry?: string;
|
|
1068
|
+
}
|
|
1069
|
+
/**
|
|
1070
|
+
* Options for creating an address schema via z_address().
|
|
1071
|
+
*/
|
|
1072
|
+
export interface AddressSchemaOptions {
|
|
1073
|
+
/** Offer the optional `{ latitude, longitude }` pair in the form. Default `false`. */
|
|
1074
|
+
withCoordinates?: boolean;
|
|
1075
|
+
/** Restrict the countries a value may name (ISO 3166-1 alpha-2, any case). */
|
|
1076
|
+
countriesAllowed?: readonly string[];
|
|
1077
|
+
/** Country pre-selected for a new value (ISO 3166-1 alpha-2, any case). Must be allowed when `countriesAllowed` is set. */
|
|
1078
|
+
defaultCountry?: string;
|
|
1079
|
+
}
|
|
950
1080
|
/**
|
|
951
1081
|
* Supported code/programming languages for code schemas.
|
|
952
1082
|
*/
|
|
@@ -1158,10 +1288,13 @@ export interface FileMediaPreviewOptions {
|
|
|
1158
1288
|
* EXPRESSES PREFERENCE: list several and the first CONFIGURED one is used. Omit the option entirely
|
|
1159
1289
|
* and the field resolves to managed storage.
|
|
1160
1290
|
*
|
|
1161
|
-
* ⚠️
|
|
1162
|
-
*
|
|
1163
|
-
*
|
|
1164
|
-
*
|
|
1291
|
+
* ⚠️ **The engine serves `WILDO_MANAGED`, `LOCAL_DIRECTORY` and `GOOGLE_DRIVE` itself.** Any other
|
|
1292
|
+
* member is served only when a loaded provider CONTRIBUTES a storage adapter for it:
|
|
1293
|
+
* `ONEDRIVE` is served by the engine's `microsoft-onedrive` provider (a person's own OneDrive,
|
|
1294
|
+
* commercial cloud only) once the application scopes that provider; nothing serves
|
|
1295
|
+
* `DROPBOX`. A field naming only storages nothing serves has no configured provider, and startup
|
|
1296
|
+
* configuration validation refuses the application rather than letting it serve a field that could
|
|
1297
|
+
* never accept an upload.
|
|
1165
1298
|
*
|
|
1166
1299
|
* `GOOGLE_DRIVE` is a VENDOR storage: the bytes live in a person's Drive and are reached through the
|
|
1167
1300
|
* delegated grant of whoever linked (via the Drive picker) or uploaded them, never through an
|
|
@@ -1369,11 +1502,16 @@ export type AudioFormat = typeof AudioFormat[keyof typeof AudioFormat];
|
|
|
1369
1502
|
* field's `nature`. `imageConstraints`, `videoConstraints`, `audioConstraints` and
|
|
1370
1503
|
* `documentConstraints` on the `z_file()` options each take the matching interface below.
|
|
1371
1504
|
*
|
|
1372
|
-
*
|
|
1373
|
-
*
|
|
1374
|
-
*
|
|
1375
|
-
*
|
|
1376
|
-
*
|
|
1505
|
+
* Image geometry declared with `nature: FileNature.IMAGE` is enforced on multipart uploads by the
|
|
1506
|
+
* default backend image analyzer. Bounds are inclusive positive integer pixels; aspect ratio
|
|
1507
|
+
* permits a 1% relative difference. Measurements use EXIF-oriented, per-frame dimensions from
|
|
1508
|
+
* image headers. Invalid declarations or unavailable/failed analysis refuse the upload.
|
|
1509
|
+
* Metadata-only remote links cannot establish geometry and are refused for these fields; upload
|
|
1510
|
+
* the image bytes instead. Browser cropping prepares an image but cannot authorize its admission.
|
|
1511
|
+
*
|
|
1512
|
+
* Type/extension checks still use the upload's declared MIME type and filename. Header geometry
|
|
1513
|
+
* does not prove complete pixel integrity, content-type authenticity or malware safety. Other
|
|
1514
|
+
* media analyzers retain their optional policies; serving headers and scanning remain separate.
|
|
1377
1515
|
*
|
|
1378
1516
|
* ⚠️ **`generateThumbnails` (image, PLURAL) and `generateThumbnail` (video, SINGULAR) are different
|
|
1379
1517
|
* options on different bags.** The names differ by one letter and do not behave alike; read each
|
|
@@ -1533,11 +1671,33 @@ export interface FileGenerationConfig {
|
|
|
1533
1671
|
templateId: string;
|
|
1534
1672
|
}
|
|
1535
1673
|
/** @wildo_source:part:end zod.decorators.file-generation */
|
|
1674
|
+
/**
|
|
1675
|
+
* @wildo_source:part:start zod.decorators.file-readiness-metadata
|
|
1676
|
+
*
|
|
1677
|
+
* Import FileReadiness and FileMetadata from @wildo-ai/zod-decorators.
|
|
1678
|
+
* Standard file fields wait for READY before publishing new references to forms/autosave.
|
|
1679
|
+
* Custom upload clients must inspect the returned metadata, refresh PROCESSING through
|
|
1680
|
+
* the authorized metadata endpoint, and refuse unknown or UNAVAILABLE results.
|
|
1681
|
+
* An HTTP upload success is not evidence that asynchronous scanning finished.
|
|
1682
|
+
*
|
|
1683
|
+
* Attachment readiness, distinct from storage lifecycle and download authorization.
|
|
1684
|
+
* READY may be attached; ATTACHED may be retained by its current parent, not reused elsewhere.
|
|
1685
|
+
* PROCESSING must be refreshed; UNAVAILABLE cannot be newly attached. A downloadable orphan
|
|
1686
|
+
* can still be UNAVAILABLE here. Server authorization remains authoritative for every operation.
|
|
1687
|
+
*/
|
|
1688
|
+
export declare enum FileReadiness {
|
|
1689
|
+
READY = "ready",
|
|
1690
|
+
PROCESSING = "processing",
|
|
1691
|
+
ATTACHED = "attached",
|
|
1692
|
+
UNAVAILABLE = "unavailable"
|
|
1693
|
+
}
|
|
1536
1694
|
/**
|
|
1537
1695
|
* File metadata returned by the getMetadata endpoint.
|
|
1538
1696
|
* This describes the uploaded file's properties.
|
|
1539
1697
|
*/
|
|
1540
1698
|
export type FileMetadata = {
|
|
1699
|
+
/** Server-derived attachment readiness; never infer this from an upload HTTP success. */
|
|
1700
|
+
readiness: FileReadiness;
|
|
1541
1701
|
/** Unique file identifier */
|
|
1542
1702
|
fileId: string;
|
|
1543
1703
|
/** Original filename */
|
|
@@ -1567,6 +1727,7 @@ export type FileMetadata = {
|
|
|
1567
1727
|
/** Upload timestamp */
|
|
1568
1728
|
uploadedAt: Date;
|
|
1569
1729
|
} & FileUploaderOwnership;
|
|
1730
|
+
/** @wildo_source:part:end zod.decorators.file-readiness-metadata */
|
|
1570
1731
|
/**
|
|
1571
1732
|
* @wildo_source:part:start zod.decorators.file-vocabularies
|
|
1572
1733
|
*
|
|
@@ -2109,12 +2270,6 @@ export interface UniqueFieldParams {
|
|
|
2109
2270
|
* @default true
|
|
2110
2271
|
*/
|
|
2111
2272
|
sparse?: boolean;
|
|
2112
|
-
/**
|
|
2113
|
-
* Custom error message to show when uniqueness is violated.
|
|
2114
|
-
* Supports placeholder {fieldName} which is replaced with the actual field name.
|
|
2115
|
-
* @example "This {fieldName} is already taken"
|
|
2116
|
-
*/
|
|
2117
|
-
errorMessage?: string;
|
|
2118
2273
|
/**
|
|
2119
2274
|
* The custom message reference the API returns when THIS field's unique index is violated.
|
|
2120
2275
|
*
|
|
@@ -2204,7 +2359,11 @@ export interface BusinessKeySetParams {
|
|
|
2204
2359
|
* stays above its target until the rate changes; it reports when it stops early;
|
|
2205
2360
|
* - a resource CANNOT declare both a lifetime and retrieval-source fields (`.ragSource()`). That
|
|
2206
2361
|
* pair is refused at startup, because rows expiring under a native index leave with no
|
|
2207
|
-
* application code running, so the derived search chunks could never be removed with them
|
|
2362
|
+
* application code running, so the derived search chunks could never be removed with them;
|
|
2363
|
+
* - a resource scoped to an ORGANIZATION cannot declare a lifetime at all. For the same reason
|
|
2364
|
+
* no legal hold could suspend the deletion, and a hold on an organization covers every row of
|
|
2365
|
+
* it. A lifetime is for application-level plumbing; tenant data binds a retention class
|
|
2366
|
+
* (`retentionBinding`), whose sweep deletes through the service layer and skips held rows.
|
|
2208
2367
|
*
|
|
2209
2368
|
* This is unrelated to `retentionPolicy`, which decides what an ERASURE does to a row that must
|
|
2210
2369
|
* SURVIVE. This one decides whether the row lives at all.
|
|
@@ -2476,9 +2635,11 @@ export interface BooleanLabellingCustomParams {
|
|
|
2476
2635
|
* How a display field's LABEL is styled, independent of chrome mode (which decides layout).
|
|
2477
2636
|
*
|
|
2478
2637
|
* - `DEFAULT` — the chrome's ordinary label treatment.
|
|
2479
|
-
* - `TITLE` — the label reads as a SMALL TITLE above its content (small,
|
|
2480
|
-
* for a field that acts as a mini-section inside a prose flow —
|
|
2481
|
-
* answer
|
|
2638
|
+
* - `TITLE` — the label reads as a SMALL TITLE above its content, in the theme's EYEBROW voice (small,
|
|
2639
|
+
* tracked, uppercase): for a field or a collection that acts as a mini-section inside a prose flow —
|
|
2640
|
+
* "Who suffers it" above its answer, "Rejected categories" above the entries it holds — where the
|
|
2641
|
+
* ordinary muted label would not carry the structure. It is NOT for the rows that qualify an entry's
|
|
2642
|
+
* headline: those keep the ordinary label, or an entry reads as a stack of sections.
|
|
2482
2643
|
*/
|
|
2483
2644
|
export declare const DisplayLabelStyle: {
|
|
2484
2645
|
readonly DEFAULT: "default";
|
|
@@ -2623,9 +2784,18 @@ export interface BooleanUIParams {
|
|
|
2623
2784
|
edit?: BooleanUIEditParams;
|
|
2624
2785
|
}
|
|
2625
2786
|
export interface StringUIDisplayParams extends PrimitiveUIBaseDisplayParams {
|
|
2626
|
-
/** Display renderer. TEXT | TRUNCATE | MULTILINE | MARKDOWN | COLOR | LINK | EMAIL | BADGE | COPY | SECRET. */
|
|
2787
|
+
/** Display renderer. TEXT | TRUNCATE | MULTILINE | MARKDOWN | IDENTIFIER | UNTRUSTED_HTML | COLOR | LINK | EMAIL | BADGE | COPY | SECRET | ORGANIZATION_ROLE. */
|
|
2627
2788
|
displayMode?: StringDisplayMode;
|
|
2628
|
-
/**
|
|
2789
|
+
/**
|
|
2790
|
+
* Max characters of the value to show (TRUNCATE displayMode only). Beyond it the value is cut
|
|
2791
|
+
* and an ellipsis marks that more exists; the full value stays reachable as the element's
|
|
2792
|
+
* `title`.
|
|
2793
|
+
*
|
|
2794
|
+
* This is a CHARACTER cap and it composes with — rather than replaces — the width cap TRUNCATE
|
|
2795
|
+
* already applies through CSS. A value is clipped by whichever of the two is shorter, so the
|
|
2796
|
+
* cap holds on a wide screen where the container would have had room, which is the point of
|
|
2797
|
+
* declaring it. Leave it unset to keep width as the only axis.
|
|
2798
|
+
*/
|
|
2629
2799
|
truncateLength?: number;
|
|
2630
2800
|
/**
|
|
2631
2801
|
* SECRET displayMode only: render the value revealed (not masked) on first
|
|
@@ -2637,7 +2807,7 @@ export interface StringUIDisplayParams extends PrimitiveUIBaseDisplayParams {
|
|
|
2637
2807
|
initiallyRevealed?: boolean;
|
|
2638
2808
|
}
|
|
2639
2809
|
export interface StringUIEditParams extends PrimitiveUIBaseEditParams {
|
|
2640
|
-
/** Edit control. INPUT | TEXTAREA | COLOR | PASSWORD | OTP. */
|
|
2810
|
+
/** Edit control. INPUT | TEXTAREA | COLOR | PASSWORD | OTP | MARKDOWN | ORGANIZATION_ROLE. */
|
|
2641
2811
|
editMode?: StringEditMode;
|
|
2642
2812
|
/** Number of rows for TEXTAREA editMode. */
|
|
2643
2813
|
textareaRows?: number;
|
|
@@ -2666,6 +2836,12 @@ export interface NumberUIParams {
|
|
|
2666
2836
|
suffix?: string;
|
|
2667
2837
|
/** How to interpret percentage values: NORMALIZED (0–1) or PERCENT (0–100). */
|
|
2668
2838
|
percentageScale?: PercentageScale;
|
|
2839
|
+
/**
|
|
2840
|
+
* The value that means NO LIMIT rather than a quantity (#1851) — a feature limit stores `FEATURES_UNLIMITED` (`-1`).
|
|
2841
|
+
* Displayed as the word for unlimited instead of the number, which read as "minus one projects". Leave it unset for
|
|
2842
|
+
* any number whose every value is a real quantity.
|
|
2843
|
+
*/
|
|
2844
|
+
unlimitedAt?: number;
|
|
2669
2845
|
display?: NumberUIDisplayParams;
|
|
2670
2846
|
summaryOverride?: NumberUIDisplayParams;
|
|
2671
2847
|
edit?: NumberUIEditParams;
|
|
@@ -2677,6 +2853,17 @@ export interface EnumUIDisplayParams extends PrimitiveUIBaseDisplayParams {
|
|
|
2677
2853
|
export interface EnumUIEditParams extends PrimitiveUIBaseEditParams {
|
|
2678
2854
|
/** Edit control. SELECT | RADIO | RADIO_ICON_ONLY | TOGGLE | TOGGLE_ICON_ONLY | CARD | CARD_ICON_ONLY | COMBOBOX. */
|
|
2679
2855
|
editMode?: EnumEditMode;
|
|
2856
|
+
/**
|
|
2857
|
+
* How this enum is chosen when the FIELD IS AN ARRAY of it (`z.array(z.enum(X))`).
|
|
2858
|
+
*
|
|
2859
|
+
* A separate key from `editMode`, not a reinterpretation of it: the two vocabularies answer
|
|
2860
|
+
* different questions and share no member meaning. Declared on the ELEMENT rather than on the
|
|
2861
|
+
* array because every other per-value presentation decision — `values`, `defaultIcon`,
|
|
2862
|
+
* `defaultColor` — is declared here too, and splitting them would put half an enum's appearance
|
|
2863
|
+
* in `arrayUI()`, which is otherwise about arrayness (sorting, add mode, item framing) and is
|
|
2864
|
+
* shared with arrays of things that are not enums at all.
|
|
2865
|
+
*/
|
|
2866
|
+
multipleEditMode?: EnumMultipleEditMode;
|
|
2680
2867
|
/** Direction of radio/toggle/checkbox group. Renamed from `layout`. */
|
|
2681
2868
|
editDirection?: LayoutDirection;
|
|
2682
2869
|
/** Number of grid columns for radio/toggle/card groups. Renamed from `columns`. */
|
|
@@ -2693,20 +2880,62 @@ export interface EnumUIParams {
|
|
|
2693
2880
|
summaryOverride?: EnumUIDisplayParams;
|
|
2694
2881
|
edit?: EnumUIEditParams;
|
|
2695
2882
|
}
|
|
2696
|
-
|
|
2883
|
+
/**
|
|
2884
|
+
* How a date or datetime value is PHRASED. The sibling of `StringDisplayMode` and
|
|
2885
|
+
* `NumberDisplayMode` for the temporal primitives.
|
|
2886
|
+
*
|
|
2887
|
+
* Without it every date in every Wildo application reads identically: a `createdAt` on an audit
|
|
2888
|
+
* row and a `dueDate` on a work item are the same pixels, because the only available rendering
|
|
2889
|
+
* was the regional absolute format. The distinction is not cosmetic — a deadline is understood
|
|
2890
|
+
* against NOW, and a record of when something happened is understood against the calendar.
|
|
2891
|
+
*
|
|
2892
|
+
* `AUTO` is the one to reach for on a field that is both at different times: a due date is a
|
|
2893
|
+
* deadline this week and a historical fact next quarter.
|
|
2894
|
+
*/
|
|
2895
|
+
export declare const DateDisplayMode: {
|
|
2896
|
+
/** The regional absolute format — what every date rendered as before this vocabulary existed. */
|
|
2897
|
+
readonly ABSOLUTE: "absolute";
|
|
2898
|
+
/** Phrased against now: "tomorrow", "in 3 days", "2 months ago". Always relative, at any distance. */
|
|
2899
|
+
readonly RELATIVE: "relative";
|
|
2900
|
+
/** Relative while the value is near now, absolute once it is not. The near window is a week. */
|
|
2901
|
+
readonly AUTO: "auto";
|
|
2902
|
+
};
|
|
2903
|
+
export type DateDisplayMode = typeof DateDisplayMode[keyof typeof DateDisplayMode];
|
|
2904
|
+
export interface DateUIDisplayParams extends PrimitiveUIBaseDisplayParams {
|
|
2905
|
+
/** How the value is phrased. ABSOLUTE (default) | RELATIVE | AUTO. */
|
|
2906
|
+
displayMode?: DateDisplayMode;
|
|
2907
|
+
}
|
|
2697
2908
|
export type DateUIEditParams = PrimitiveUIBaseEditParams;
|
|
2698
2909
|
export interface DateUIParams {
|
|
2699
2910
|
display?: DateUIDisplayParams;
|
|
2700
2911
|
summaryOverride?: DateUIDisplayParams;
|
|
2701
2912
|
edit?: DateUIEditParams;
|
|
2702
2913
|
}
|
|
2703
|
-
export
|
|
2914
|
+
export interface DateTimeUIDisplayParams extends PrimitiveUIBaseDisplayParams {
|
|
2915
|
+
/**
|
|
2916
|
+
* How the value is phrased. ABSOLUTE (default) | RELATIVE | AUTO.
|
|
2917
|
+
*
|
|
2918
|
+
* A datetime's relative phrasing resolves finer than a date's — "in 20 minutes", "3 hours ago"
|
|
2919
|
+
* — because the value carries a time of day to be precise about. Beyond a day it falls back to
|
|
2920
|
+
* the same calendar units a date uses.
|
|
2921
|
+
*/
|
|
2922
|
+
displayMode?: DateDisplayMode;
|
|
2923
|
+
}
|
|
2704
2924
|
export type DateTimeUIEditParams = PrimitiveUIBaseEditParams;
|
|
2705
2925
|
export interface DateTimeUIParams {
|
|
2706
2926
|
display?: DateTimeUIDisplayParams;
|
|
2707
2927
|
summaryOverride?: DateTimeUIDisplayParams;
|
|
2708
2928
|
edit?: DateTimeUIEditParams;
|
|
2709
2929
|
}
|
|
2930
|
+
/**
|
|
2931
|
+
* DELIBERATELY has no `displayMode`, and this is a statement rather than an omission.
|
|
2932
|
+
*
|
|
2933
|
+
* A time-of-day carries no date, so "relative to now" has no answer: is `09:30` this morning,
|
|
2934
|
+
* tomorrow morning, or the opening hour of a shop that never happens on any particular day? Any
|
|
2935
|
+
* relative phrasing would have to ASSUME a date the value does not hold, and would be confidently
|
|
2936
|
+
* wrong on exactly the fields — opening hours, schedules, recurring slots — that `z.time()` exists
|
|
2937
|
+
* for. A field that wants a relative phrasing is carrying a datetime and should say so.
|
|
2938
|
+
*/
|
|
2710
2939
|
export type TimeUIDisplayParams = PrimitiveUIBaseDisplayParams;
|
|
2711
2940
|
export type TimeUIEditParams = PrimitiveUIBaseEditParams;
|
|
2712
2941
|
export interface TimeUIParams {
|
|
@@ -2824,6 +3053,36 @@ export interface ForeignKeyUIDisplayParams extends PrimitiveUIBaseDisplayParams
|
|
|
2824
3053
|
linkable?: boolean;
|
|
2825
3054
|
/** Override the preset used to display the referenced resource summary. */
|
|
2826
3055
|
displayPresetOverride?: string;
|
|
3056
|
+
/**
|
|
3057
|
+
* A SIBLING field on the SAME record holding a readable copy of the referenced row's label —
|
|
3058
|
+
* used when the reference itself cannot be resolved, INSTEAD of printing the raw id.
|
|
3059
|
+
*
|
|
3060
|
+
* ## Why a raw id is not an acceptable fallback
|
|
3061
|
+
*
|
|
3062
|
+
* `ForeignKeyDisplayMode.LABEL` is the default and resolves the referenced row's label. When that
|
|
3063
|
+
* resolution yields nothing the renderer had one option left: print the foreign key. Measured
|
|
3064
|
+
* 2026-09-19 on the Settings hub's member directory — three of four rows showed
|
|
3065
|
+
* `6aaba6b3a2d3b6b0ad61f33e` in the USER column, because those people are invited and have no
|
|
3066
|
+
* `USER_PROFILE` for a label to come from. The fourth, a real user, resolved.
|
|
3067
|
+
*
|
|
3068
|
+
* The readable value was on the row the whole time. `organizationMembers.userEmail` is a
|
|
3069
|
+
* denormalized immutable copy of the linked user's email whose own docstring says it exists so "a
|
|
3070
|
+
* membership row can be read without resolving the user" — exactly this case — and it is
|
|
3071
|
+
* `.isHidden({ display: true })` precisely BECAUSE "the user-facing email is surfaced by resolving
|
|
3072
|
+
* the `userId` reference". When that resolution fails, the design's own premise fails with it and
|
|
3073
|
+
* nothing picks the copy up.
|
|
3074
|
+
*
|
|
3075
|
+
* ## Why this is declared rather than derived
|
|
3076
|
+
*
|
|
3077
|
+
* Nothing in the schema says "this field is a readable copy of that reference". A convention
|
|
3078
|
+
* guessed from the name (`userId` → `userEmail`) would be wrong the first time a resource spells
|
|
3079
|
+
* it differently, and silently. So the relationship is NAMED by the one author who knows it, and
|
|
3080
|
+
* omitting it keeps today's behaviour exactly.
|
|
3081
|
+
*
|
|
3082
|
+
* Read from the record being displayed; a missing or empty sibling falls through to the id as
|
|
3083
|
+
* before, so this can never render less than it does now.
|
|
3084
|
+
*/
|
|
3085
|
+
labelFallbackField?: string;
|
|
2827
3086
|
}
|
|
2828
3087
|
export interface ForeignKeyUIEditParams extends PrimitiveUIBaseEditParams {
|
|
2829
3088
|
/**
|
|
@@ -3126,6 +3385,7 @@ export declare enum CodePrimitiveKind {
|
|
|
3126
3385
|
FILE = "file",
|
|
3127
3386
|
DURATION = "duration",
|
|
3128
3387
|
PHONE = "phone",
|
|
3388
|
+
ADDRESS = "address",
|
|
3129
3389
|
BIGDECIMAL = "bigdecimal",
|
|
3130
3390
|
UNKNOWN = "unknown"
|
|
3131
3391
|
}
|
|
@@ -3684,15 +3944,37 @@ export interface CustomFieldMetadata {
|
|
|
3684
3944
|
durationConfig?: DurationSchemaMetadata;
|
|
3685
3945
|
/** Phone schema configuration (only present for phone schemas) */
|
|
3686
3946
|
phoneConfig?: PhoneSchemaMetadata;
|
|
3947
|
+
/** Address schema configuration (only present for address schemas) */
|
|
3948
|
+
addressConfig?: AddressSchemaMetadata;
|
|
3687
3949
|
/** Code schema configuration (only present for code schemas) */
|
|
3688
3950
|
codeConfig?: CodeSchemaMetadata;
|
|
3689
3951
|
/** File schema configuration (only present for file schemas) */
|
|
3690
3952
|
fileConfig?: FileSchemaMetadata;
|
|
3953
|
+
/**
|
|
3954
|
+
* Set on an UPDATE request DTO object whose keys follow the PATCH write rule — see
|
|
3955
|
+
* `RequestDtoWriteSemantics` and `markPatchRequestDtoObject`. Absent on every other object.
|
|
3956
|
+
*/
|
|
3957
|
+
requestDtoWriteSemantics?: RequestDtoWriteSemantics;
|
|
3691
3958
|
/** Versioned schema configuration (only present for versioned schemas) */
|
|
3692
3959
|
versionedConfig?: VersionedSchemaMetadata;
|
|
3693
3960
|
/** Versioned foreign key configuration (only present for versioned foreign key schemas) */
|
|
3694
3961
|
versionedForeignKeyConfig?: VersionedForeignKeySchemaMetadata;
|
|
3695
3962
|
}
|
|
3963
|
+
/**
|
|
3964
|
+
* How the keys of a request DTO OBJECT are written — the fact a form needs to decide how a field inside it
|
|
3965
|
+
* is cleared (#989).
|
|
3966
|
+
*
|
|
3967
|
+
* Only one member exists because only one rule needs naming. A request DTO's UPDATE root is written PATCH
|
|
3968
|
+
* style: an ABSENT key leaves the stored value untouched, so clearing needs an explicit `null`, and
|
|
3969
|
+
* `toPatchOptionalField` admits that null. An object VALUE nested inside a field (`reminder`, an address)
|
|
3970
|
+
* is written WHOLE instead: the persistence layer clears only top-level fields, a stored nested `null`
|
|
3971
|
+
* would fail the main schema's `.optional()` on the next read, and absence is therefore the only clear.
|
|
3972
|
+
* An object carrying no member is written whole.
|
|
3973
|
+
*/
|
|
3974
|
+
export declare enum RequestDtoWriteSemantics {
|
|
3975
|
+
/** Absent key = untouched, `null` = clear. The UPDATE request DTO root, and a nested child's update branch. */
|
|
3976
|
+
PATCH = "patch"
|
|
3977
|
+
}
|
|
3696
3978
|
/** @wildo_source:part:end zod.decorators.schema-metadata */
|
|
3697
3979
|
type ZodenumInstance = ReturnType<typeof z.enum>;
|
|
3698
3980
|
export type PrimitiveZodType = z.ZodString | z.ZodNumber | z.ZodBoolean | z.ZodDate | z.ZodEnum<any> | ZodenumInstance | ZodBrandedColorInstance | DecoratedPrimitiveZodType<z.ZodString> | DecoratedPrimitiveZodType<z.ZodNumber> | DecoratedPrimitiveZodType<z.ZodBoolean> | DecoratedPrimitiveZodType<z.ZodDate> | DecoratedPrimitiveZodType<z.ZodEnum<any>> | DecoratedPrimitiveZodType<ZodenumInstance>;
|