@react-typed-forms/schemas 13.2.0 → 13.3.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/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/schemaBuilder.ts","../src/util.ts","../src/controlBuilder.ts","../src/treeNodes.ts","../src/hooks.tsx","../src/validators.ts","../src/schemaInterface.ts","../src/controlRender.tsx","../src/createFormRenderer.tsx","../src/renderers.tsx"],"sourcesContent":["import { Control } from \"@react-typed-forms/core\";\nimport { SchemaDataNode, SchemaNode } from \"./treeNodes\";\nimport { ControlDataContext } from \"./util\";\n\nexport interface SchemaField {\n type: string;\n field: string;\n displayName?: string | null;\n tags?: string[] | null;\n system?: boolean | null;\n collection?: boolean | null;\n onlyForTypes?: string[] | null;\n required?: boolean | null;\n notNullable?: boolean | null;\n defaultValue?: any;\n isTypeField?: boolean | null;\n searchable?: boolean | null;\n options?: FieldOption[] | null;\n validators?: SchemaValidator[] | null;\n}\n\nexport type SchemaMap = Record<string, SchemaField[]>;\n\nexport enum FieldType {\n String = \"String\",\n Bool = \"Bool\",\n Int = \"Int\",\n Date = \"Date\",\n DateTime = \"DateTime\",\n Time = \"Time\",\n Double = \"Double\",\n EntityRef = \"EntityRef\",\n Compound = \"Compound\",\n AutoId = \"AutoId\",\n Image = \"Image\",\n Any = \"Any\",\n}\n\nexport interface EntityRefField extends SchemaField {\n type: FieldType.EntityRef;\n entityRefType: string;\n parentField: string;\n}\n\nexport interface FieldOption {\n name: string;\n value: any;\n description?: string | null;\n group?: string | null;\n disabled?: boolean | null;\n}\n\nexport interface CompoundField extends SchemaField {\n type: FieldType.Compound;\n children: SchemaField[];\n treeChildren?: boolean;\n schemaRef?: string;\n}\n\nexport type AnyControlDefinition =\n | DataControlDefinition\n | GroupedControlsDefinition\n | ActionControlDefinition\n | DisplayControlDefinition;\n\nexport enum ValidationMessageType {\n NotEmpty = \"NotEmpty\",\n MinLength = \"MinLength\",\n MaxLength = \"MaxLength\",\n NotAfterDate = \"NotAfterDate\",\n NotBeforeDate = \"NotBeforeDate\",\n}\nexport interface SchemaInterface {\n isEmptyValue(field: SchemaField, value: any): boolean;\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean,\n ): string | undefined;\n controlLength(field: SchemaField, control: Control<any>): number;\n valueLength(field: SchemaField, value: any): number;\n getOptions(field: SchemaField): FieldOption[] | undefined | null;\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null;\n parseToMillis(field: SchemaField, v: string): number;\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string;\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number;\n searchText(field: SchemaField, value: any): string;\n}\nexport interface ControlDefinition {\n type: string;\n title?: string | null;\n styleClass?: string | null;\n layoutClass?: string | null;\n labelClass?: string | null;\n dynamic?: DynamicProperty[] | null;\n adornments?: ControlAdornment[] | null;\n children?: ControlDefinition[] | null;\n}\n\nexport enum ControlDefinitionType {\n Data = \"Data\",\n Group = \"Group\",\n Display = \"Display\",\n Action = \"Action\",\n}\n\nexport interface DynamicProperty {\n type: string;\n expr: EntityExpression;\n}\n\nexport enum DynamicPropertyType {\n Visible = \"Visible\",\n DefaultValue = \"DefaultValue\",\n Readonly = \"Readonly\",\n Disabled = \"Disabled\",\n Display = \"Display\",\n Style = \"Style\",\n LayoutStyle = \"LayoutStyle\",\n AllowedOptions = \"AllowedOptions\",\n Label = \"Label\",\n ActionData = \"ActionData\",\n}\n\nexport interface EntityExpression {\n type: string;\n}\n\nexport enum ExpressionType {\n Jsonata = \"Jsonata\",\n Data = \"Data\",\n DataMatch = \"FieldValue\",\n UserMatch = \"UserMatch\",\n NotEmpty = \"NotEmpty\",\n UUID = \"UUID\",\n}\n\nexport interface JsonataExpression extends EntityExpression {\n type: ExpressionType.Jsonata;\n expression: string;\n}\n\nexport interface DataExpression extends EntityExpression {\n type: ExpressionType.Data;\n field: string;\n}\n\nexport interface DataMatchExpression extends EntityExpression {\n type: ExpressionType.DataMatch;\n field: string;\n value: any;\n}\n\nexport interface NotEmptyExpression extends EntityExpression {\n type: ExpressionType.DataMatch;\n field: string;\n}\n\nexport interface UserMatchExpression extends EntityExpression {\n type: ExpressionType.UserMatch;\n userMatch: string;\n}\n\nexport interface ControlAdornment {\n type: string;\n}\n\nexport enum AdornmentPlacement {\n ControlStart = \"ControlStart\",\n ControlEnd = \"ControlEnd\",\n LabelStart = \"LabelStart\",\n LabelEnd = \"LabelEnd\",\n}\n\nexport enum ControlAdornmentType {\n Tooltip = \"Tooltip\",\n Accordion = \"Accordion\",\n HelpText = \"HelpText\",\n Icon = \"Icon\",\n SetField = \"SetField\",\n}\n\nexport interface IconAdornment extends ControlAdornment {\n type: ControlAdornmentType.Icon;\n iconClass: string;\n placement?: AdornmentPlacement | null;\n}\n\nexport interface TooltipAdornment extends ControlAdornment {\n type: ControlAdornmentType.Tooltip;\n tooltip: string;\n}\n\nexport interface AccordionAdornment extends ControlAdornment {\n type: ControlAdornmentType.Accordion;\n title: string;\n defaultExpanded?: boolean | null;\n}\n\nexport interface HelpTextAdornment extends ControlAdornment {\n type: ControlAdornmentType.HelpText;\n helpText: string;\n placement?: AdornmentPlacement | null;\n}\n\nexport interface SetFieldAdornment extends ControlAdornment {\n type: ControlAdornmentType.SetField;\n field: string;\n defaultOnly?: boolean | null;\n expression?: EntityExpression;\n}\n\nexport interface DataControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Data;\n field: string;\n required?: boolean | null;\n renderOptions?: RenderOptions | null;\n defaultValue?: any;\n readonly?: boolean | null;\n disabled?: boolean | null;\n validators?: SchemaValidator[] | null;\n hideTitle?: boolean | null;\n dontClearHidden?: boolean | null;\n}\n\nexport interface RenderOptions {\n type: string;\n}\n\nexport enum DataRenderType {\n Standard = \"Standard\",\n Textfield = \"Textfield\",\n Radio = \"Radio\",\n HtmlEditor = \"HtmlEditor\",\n IconList = \"IconList\",\n CheckList = \"CheckList\",\n UserSelection = \"UserSelection\",\n Synchronised = \"Synchronised\",\n IconSelector = \"IconSelector\",\n DateTime = \"DateTime\",\n Checkbox = \"Checkbox\",\n Dropdown = \"Dropdown\",\n DisplayOnly = \"DisplayOnly\",\n Group = \"Group\",\n NullToggle = \"NullToggle\",\n Jsonata = \"Jsonata\",\n Array = \"Array\",\n}\n\nexport interface TextfieldRenderOptions extends RenderOptions {\n type: DataRenderType.Textfield;\n placeholder?: string | null;\n multiline?: boolean | null;\n}\n\nexport interface RadioButtonRenderOptions extends RenderOptions {\n type: DataRenderType.Radio;\n}\n\nexport interface StandardRenderer extends RenderOptions {\n type: DataRenderType.Standard;\n}\n\nexport interface DataGroupRenderOptions extends RenderOptions {\n type: DataRenderType.Group;\n groupOptions?: GroupRenderOptions;\n}\n\nexport interface HtmlEditorRenderOptions extends RenderOptions {\n type: DataRenderType.HtmlEditor;\n allowImages: boolean;\n}\n\nexport interface DateTimeRenderOptions extends RenderOptions {\n type: DataRenderType.DateTime;\n format?: string | null;\n forceMidnight?: boolean;\n}\n\nexport interface IconListRenderOptions extends RenderOptions {\n type: DataRenderType.IconList;\n iconMappings: IconMapping[];\n}\n\nexport interface DisplayOnlyRenderOptions extends RenderOptions {\n type: DataRenderType.DisplayOnly;\n emptyText?: string | null;\n sampleText?: string | null;\n}\nexport interface IconMapping {\n value: string;\n materialIcon?: string | null;\n}\n\nexport interface JsonataRenderOptions extends RenderOptions {\n type: DataRenderType.Jsonata;\n expression: string;\n}\n\nexport interface JsonataRenderOptions extends RenderOptions {\n type: DataRenderType.Jsonata;\n expression: string;\n}\n\nexport interface ArrayRenderOptions extends RenderOptions {\n type: DataRenderType.Array;\n addText?: string | null;\n addActionId?: string | null;\n removeText?: string | null;\n removeActionId?: string | null;\n noAdd?: boolean | null;\n noRemove?: boolean | null;\n noReorder?: boolean | null;\n childOptions?: RenderOptions | null;\n}\n\nexport type ArrayActionOptions = Pick<\n ArrayRenderOptions,\n | \"addText\"\n | \"addActionId\"\n | \"removeText\"\n | \"removeActionId\"\n | \"noAdd\"\n | \"noRemove\"\n | \"noReorder\"\n> & { readonly?: boolean; disabled?: boolean; designMode?: boolean };\n\nexport interface CheckListRenderOptions extends RenderOptions {\n type: DataRenderType.CheckList;\n}\n\nexport interface SynchronisedRenderOptions extends RenderOptions {\n type: DataRenderType.Synchronised;\n fieldToSync: string;\n syncType: SyncTextType;\n}\n\nexport enum SyncTextType {\n Camel = \"Camel\",\n Snake = \"Snake\",\n Pascal = \"Pascal\",\n}\n\nexport interface UserSelectionRenderOptions extends RenderOptions {\n type: DataRenderType.UserSelection;\n noGroups: boolean;\n noUsers: boolean;\n}\n\nexport interface IconSelectionRenderOptions extends RenderOptions {\n type: DataRenderType.IconSelector;\n}\n\nexport interface GroupedControlsDefinition extends ControlDefinition {\n type: ControlDefinitionType.Group;\n compoundField?: string | null;\n groupOptions?: GroupRenderOptions;\n}\n\nexport interface GroupRenderOptions {\n type: string;\n hideTitle?: boolean | null;\n childStyleClass?: string | null;\n childLayoutClass?: string | null;\n childLabelClass?: string | null;\n displayOnly?: boolean | null;\n}\n\nexport enum GroupRenderType {\n Standard = \"Standard\",\n Grid = \"Grid\",\n Flex = \"Flex\",\n GroupElement = \"GroupElement\",\n SelectChild = \"SelectChild\",\n}\n\nexport interface StandardGroupRenderer extends GroupRenderOptions {\n type: GroupRenderType.Standard;\n}\n\nexport interface FlexRenderer extends GroupRenderOptions {\n type: GroupRenderType.Flex;\n direction?: string | null;\n gap?: string | null;\n}\n\nexport interface GroupElementRenderer extends GroupRenderOptions {\n type: GroupRenderType.GroupElement;\n value: any;\n}\n\nexport interface GridRenderer extends GroupRenderOptions {\n type: GroupRenderType.Grid;\n columns?: number | null;\n}\n\nexport interface SelectChildRenderer extends GroupRenderOptions {\n type: GroupRenderType.SelectChild;\n childIndexExpression?: EntityExpression | null;\n}\n\nexport interface DisplayControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Display;\n displayData: DisplayData;\n}\n\nexport interface DisplayData {\n type: string;\n}\n\nexport enum DisplayDataType {\n Text = \"Text\",\n Html = \"Html\",\n Icon = \"Icon\",\n Custom = \"Custom\",\n}\nexport interface TextDisplay extends DisplayData {\n type: DisplayDataType.Text;\n text: string;\n}\n\nexport interface IconDisplay extends DisplayData {\n type: DisplayDataType.Icon;\n iconClass: string;\n}\n\nexport interface HtmlDisplay extends DisplayData {\n type: DisplayDataType.Html;\n html: string;\n}\n\nexport interface CustomDisplay extends DisplayData {\n type: DisplayDataType.Custom;\n customId: string;\n}\n\nexport interface ActionControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Action;\n actionId: string;\n actionData?: string | null;\n}\n\nexport enum ValidatorType {\n Jsonata = \"Jsonata\",\n Date = \"Date\",\n Length = \"Length\",\n}\nexport interface SchemaValidator {\n type: string;\n}\n\nexport interface JsonataValidator extends SchemaValidator {\n type: ValidatorType.Jsonata;\n expression: string;\n}\n\nexport interface LengthValidator extends SchemaValidator {\n type: ValidatorType.Length;\n min?: number | null;\n max?: number | null;\n}\n\nexport enum DateComparison {\n NotBefore = \"NotBefore\",\n NotAfter = \"NotAfter\",\n}\n\nexport interface DateValidator extends SchemaValidator {\n type: ValidatorType.Date;\n comparison: DateComparison;\n fixedDate?: string | null;\n daysFromCurrent?: number | null;\n}\n\nexport function isDataControlDefinition(\n x: ControlDefinition,\n): x is DataControlDefinition {\n return x.type === ControlDefinitionType.Data;\n}\n\nexport function isGroupControlsDefinition(\n x: ControlDefinition,\n): x is GroupedControlsDefinition {\n return x.type === ControlDefinitionType.Group;\n}\n\nexport function isDisplayControlsDefinition(\n x: ControlDefinition,\n): x is DisplayControlDefinition {\n return x.type === ControlDefinitionType.Display;\n}\n\nexport function isActionControlsDefinition(\n x: ControlDefinition,\n): x is ActionControlDefinition {\n return x.type === ControlDefinitionType.Action;\n}\n\nexport interface ControlVisitor<A> {\n data(d: DataControlDefinition): A;\n group(d: GroupedControlsDefinition): A;\n display(d: DisplayControlDefinition): A;\n action(d: ActionControlDefinition): A;\n}\n\nexport function visitControlDefinition<A>(\n x: ControlDefinition,\n visitor: ControlVisitor<A>,\n defaultValue: (c: ControlDefinition) => A,\n): A {\n switch (x.type) {\n case ControlDefinitionType.Action:\n return visitor.action(x as ActionControlDefinition);\n case ControlDefinitionType.Data:\n return visitor.data(x as DataControlDefinition);\n case ControlDefinitionType.Display:\n return visitor.display(x as DisplayControlDefinition);\n case ControlDefinitionType.Group:\n return visitor.group(x as GroupedControlsDefinition);\n default:\n return defaultValue(x);\n }\n}\nexport function isGridRenderer(\n options: GroupRenderOptions,\n): options is GridRenderer {\n return options.type === GroupRenderType.Grid;\n}\n\nexport function isSelectChildRenderer(\n options: GroupRenderOptions,\n): options is SelectChildRenderer {\n return options.type === GroupRenderType.SelectChild;\n}\n\nexport function isFlexRenderer(\n options: GroupRenderOptions,\n): options is FlexRenderer {\n return options.type === GroupRenderType.Flex;\n}\n\nexport function isDisplayOnlyRenderer(\n options: RenderOptions,\n): options is DisplayOnlyRenderOptions {\n return options.type === DataRenderType.DisplayOnly;\n}\n\nexport function isTextfieldRenderer(\n options: RenderOptions,\n): options is TextfieldRenderOptions {\n return options.type === DataRenderType.Textfield;\n}\n\nexport function isDataGroupRenderer(\n options?: RenderOptions | null,\n): options is DataGroupRenderOptions {\n return options?.type === DataRenderType.Group;\n}\n\nexport function isArrayRenderer(\n options: RenderOptions,\n): options is ArrayRenderOptions {\n return options.type === DataRenderType.Array;\n}\n\nexport function findField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return fields.find((x) => x.field === field);\n}\n\nexport function isScalarField(sf: SchemaField): sf is SchemaField {\n return !isCompoundField(sf);\n}\n\nexport function isCompoundField(sf: SchemaField): sf is CompoundField {\n return sf.type === FieldType.Compound;\n}\n\nexport function isDataControl(\n c: ControlDefinition,\n): c is DataControlDefinition {\n return c.type === ControlDefinitionType.Data;\n}\n\nexport function isGroupControl(\n c: ControlDefinition,\n): c is GroupedControlsDefinition {\n return c.type === ControlDefinitionType.Group;\n}\n\nexport type ControlActionHandler = (\n actionId: string,\n actionData: any,\n ctx: ControlDataContext,\n) => (() => void) | undefined;\n","import {\n CompoundField,\n FieldOption,\n FieldType,\n SchemaField,\n SchemaMap,\n isCompoundField,\n} from \"./types\";\n\nexport type AllowedSchema<T> = T extends string\n ? SchemaField & {\n type:\n | FieldType.String\n | FieldType.Date\n | FieldType.DateTime\n | FieldType.Time;\n }\n : T extends number\n ? SchemaField & {\n type: FieldType.Int | FieldType.Double;\n }\n : T extends boolean\n ? SchemaField & {\n type: FieldType.Bool;\n }\n : T extends Array<infer E>\n ? AllowedSchema<E> & {\n collection: true;\n }\n : T extends { [key: string]: any }\n ? CompoundField & {\n type: FieldType.Compound;\n }\n : SchemaField & { type: FieldType.Any };\n\ntype AllowedField<T, K> = (\n name: string,\n) => (SchemaField & { type: K }) | AllowedSchema<T>;\n\nexport function buildSchema<T, Custom = \"\">(def: {\n [K in keyof T]-?: AllowedField<T[K], Custom>;\n}): SchemaField[] {\n return Object.entries(def).map((x) =>\n (x[1] as (n: string) => SchemaField)(x[0]),\n );\n}\n\nexport type FieldBuilder<T extends FieldType, K> = (\n name: string,\n) => Omit<SchemaField, \"type\"> & { type: T } & K;\n\nexport function stringField(\n displayName: string,\n): FieldBuilder<FieldType.String, {}>;\n\nexport function stringField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.String, S>;\n\nexport function stringField(displayName: string, options?: any) {\n return makeScalarField({\n type: FieldType.String,\n displayName,\n ...options,\n });\n}\n\nexport function stringOptionsField(\n displayName: string,\n ...options: FieldOption[]\n) {\n return makeScalarField({\n type: FieldType.String as const,\n displayName,\n options,\n });\n}\n\nexport function withScalarOptions<\n S extends SchemaField,\n S2 extends Partial<SchemaField>,\n>(options: S2, v: (name: string) => S): (name: string) => S & S2 {\n return (n) => ({ ...v(n), ...options });\n}\n\nexport function makeScalarField<S extends Partial<SchemaField>>(\n options: S,\n): (name: string) => SchemaField & S {\n return (n) => ({ ...defaultScalarField(n, n), ...options });\n}\n\nexport function makeCompoundField<S extends Partial<CompoundField>>(\n options: S,\n): (name: string) => CompoundField & {\n type: FieldType.Compound;\n} & S {\n return (n) => ({ ...defaultCompoundField(n, n, false), ...options });\n}\n\nexport function intField(displayName: string): FieldBuilder<FieldType.Int, {}>;\n\nexport function intField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Int, S>;\n\nexport function intField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Int as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function doubleField(\n displayName: string,\n): FieldBuilder<FieldType.Double, {}>;\n\nexport function doubleField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Double, S>;\n\nexport function doubleField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Double as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function dateField(\n displayName: string,\n): FieldBuilder<FieldType.Date, {}>;\n\nexport function dateField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Date, S>;\n\nexport function dateField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Date as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function timeField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Time as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function dateTimeField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.DateTime as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function boolField(\n displayName: string,\n): FieldBuilder<FieldType.Bool, {}>;\n\nexport function boolField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Bool, S>;\n\nexport function boolField(displayName: string, options?: any) {\n return makeScalarField({\n type: FieldType.Bool as const,\n displayName,\n ...options,\n });\n}\n\nexport function compoundField<\n Other extends Partial<Omit<CompoundField, \"type\" | \"schemaType\">>,\n>(\n displayName: string,\n fields: SchemaField[],\n other?: Other,\n): (name: string) => CompoundField & {\n collection: Other[\"collection\"];\n} {\n return (field) =>\n ({\n ...defaultCompoundField(field, displayName, false),\n ...other,\n children: fields,\n }) as any;\n}\n\nexport function defaultScalarField(\n field: string,\n displayName: string,\n): Omit<SchemaField, \"type\"> & {\n type: FieldType.String;\n} {\n return {\n field,\n displayName,\n type: FieldType.String,\n };\n}\n\nexport function defaultCompoundField(\n field: string,\n displayName: string,\n collection: boolean,\n): CompoundField & {\n type: FieldType.Compound;\n} {\n return {\n field,\n displayName,\n type: FieldType.Compound,\n collection,\n children: [],\n };\n}\n\nexport function mergeField(\n field: SchemaField,\n mergeInto: SchemaField[],\n): SchemaField[] {\n const existing = mergeInto.find((x) => x.field === field.field);\n if (existing) {\n return mergeInto.map((x) =>\n x !== existing\n ? x\n : {\n ...x,\n onlyForTypes: mergeTypes(x.onlyForTypes, field.onlyForTypes),\n },\n );\n }\n return [...mergeInto, field];\n\n function mergeTypes(f?: string[] | null, s?: string[] | null) {\n if (!f) return s;\n if (!s) return f;\n const extras = s.filter((x) => !f.includes(x));\n return extras.length ? [...f, ...extras] : f;\n }\n}\n\nexport function mergeFields(\n fields: SchemaField[],\n name: string,\n value: any,\n newFields: SchemaField[],\n): SchemaField[] {\n const withType = fields.map((x) =>\n x.isTypeField ? addFieldOption(x, name, value) : x,\n );\n return newFields\n .map((x) => ({ ...x, onlyForTypes: [value] }))\n .reduce((af, x) => mergeField(x, af), withType);\n}\n\nexport function addFieldOption(\n typeField: SchemaField,\n name: string,\n value: any,\n): SchemaField {\n const options = typeField.options ?? [];\n if (options.some((x) => x.value === value)) return typeField;\n return {\n ...typeField,\n options: [...options, { name, value }],\n };\n}\n\nexport function resolveSchemas<A extends SchemaMap>(schemaMap: A): A {\n const out: SchemaMap = {};\n function resolveSchemaType(type: string) {\n if (type in out) {\n return out[type];\n }\n const resolvedFields: SchemaField[] = [];\n out[type] = resolvedFields;\n schemaMap[type].forEach((x) => {\n if (isCompoundField(x) && x.schemaRef) {\n resolvedFields.push({\n ...x,\n children: resolveSchemaType(x.schemaRef),\n } as CompoundField);\n } else {\n resolvedFields.push(x);\n }\n });\n return resolvedFields;\n }\n Object.keys(schemaMap).forEach(resolveSchemaType);\n return out as A;\n}\n","import {\n CompoundField,\n ControlActionHandler,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayOnlyRenderOptions,\n FieldOption,\n findField,\n GroupRenderOptions,\n isCompoundField,\n isDataControl,\n isDataControlDefinition,\n isDataGroupRenderer,\n isDisplayOnlyRenderer,\n isGroupControl,\n isGroupControlsDefinition,\n isScalarField,\n SchemaField,\n SchemaInterface,\n} from \"./types\";\nimport { MutableRefObject, useCallback, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { SchemaDataNode } from \"./treeNodes\";\n\nexport interface ControlClasses {\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\nexport type JsonPath = string | number;\n\nexport interface FormContextData {\n option?: FieldOption;\n optionSelected?: boolean;\n}\n\nexport interface ControlDataContext {\n schemaInterface: SchemaInterface;\n dataNode: SchemaDataNode | undefined;\n parentNode: SchemaDataNode;\n formData: FormContextData;\n}\n\nexport function applyDefaultValues(\n v: Record<string, any> | undefined,\n fields: SchemaField[],\n doneSet?: Set<Record<string, any>>,\n): any {\n if (!v) return defaultValueForFields(fields);\n if (doneSet && doneSet.has(v)) return v;\n doneSet ??= new Set();\n doneSet.add(v);\n const applyValue = fields.filter(\n (x) => isCompoundField(x) || !(x.field in v),\n );\n if (!applyValue.length) return v;\n const out = { ...v };\n applyValue.forEach((x) => {\n out[x.field] =\n x.field in v\n ? applyDefaultForField(v[x.field], x, fields, false, doneSet)\n : defaultValueForField(x);\n });\n return out;\n}\n\nexport function applyDefaultForField(\n v: any,\n field: SchemaField,\n parent: SchemaField[],\n notElement?: boolean,\n doneSet?: Set<Record<string, any>>,\n): any {\n if (field.collection && !notElement) {\n return ((v as any[]) ?? []).map((x) =>\n applyDefaultForField(x, field, parent, true, doneSet),\n );\n }\n if (isCompoundField(field)) {\n if (!v && !field.required) return v;\n return applyDefaultValues(\n v,\n field.treeChildren ? parent : field.children,\n doneSet,\n );\n }\n return defaultValueForField(field);\n}\n\nexport function defaultValueForFields(fields: SchemaField[]): any {\n return Object.fromEntries(\n fields.map((x) => [x.field, defaultValueForField(x)]),\n );\n}\n\nexport function defaultValueForField(\n sf: SchemaField,\n required?: boolean | null,\n forceNotNull?: boolean,\n): any {\n if (sf.defaultValue !== undefined) return sf.defaultValue;\n const isRequired = !!(required || sf.required);\n if (isCompoundField(sf)) {\n if (isRequired) {\n const childValue = defaultValueForFields(sf.children);\n return sf.collection ? [childValue] : childValue;\n }\n return sf.notNullable || forceNotNull\n ? sf.collection\n ? []\n : {}\n : undefined;\n }\n if (sf.collection && sf.notNullable) {\n return [];\n }\n return undefined;\n}\n\nexport function elementValueForField(sf: SchemaField): any {\n if (isCompoundField(sf)) {\n return defaultValueForFields(sf.children);\n }\n return sf.defaultValue;\n}\n\nexport function findScalarField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return findField(fields, field);\n}\n\nexport function findCompoundField(\n fields: SchemaField[],\n field: string,\n): CompoundField | undefined {\n return findField(fields, field) as CompoundField | undefined;\n}\n\nexport function fieldHasTag(field: SchemaField, tag: string) {\n return Boolean(field.tags?.includes(tag));\n}\n\nexport function fieldDisplayName(field: SchemaField) {\n return field.displayName ?? field.field;\n}\n\nexport function hasOptions(o: { options: FieldOption[] | undefined | null }) {\n return (o.options?.length ?? 0) > 0;\n}\n\nexport function defaultControlForField(sf: SchemaField): DataControlDefinition {\n if (isCompoundField(sf)) {\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n children: sf.children.map(defaultControlForField),\n };\n } else if (isScalarField(sf)) {\n const htmlEditor = sf.tags?.includes(\"_HtmlEditor\");\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n renderOptions: {\n type: htmlEditor ? DataRenderType.HtmlEditor : DataRenderType.Standard,\n },\n };\n }\n throw \"Unknown schema field\";\n}\nfunction findReferencedControl(\n field: string,\n control: ControlDefinition,\n): ControlDefinition | undefined {\n if (isDataControl(control) && field === control.field) return control;\n if (isGroupControl(control)) {\n if (control.compoundField)\n return field === control.compoundField ? control : undefined;\n return findReferencedControlInArray(field, control.children ?? []);\n }\n return undefined;\n}\n\nfunction findReferencedControlInArray(\n field: string,\n controls: ControlDefinition[],\n): ControlDefinition | undefined {\n for (const c of controls) {\n const ref = findReferencedControl(field, c);\n if (ref) return ref;\n }\n return undefined;\n}\n\nexport function findControlsForCompound(\n compound: CompoundField,\n definition: ControlDefinition,\n): ControlDefinition[] {\n if (\n isDataControlDefinition(definition) &&\n compound.field === definition.field\n ) {\n return [definition];\n }\n if (isGroupControlsDefinition(definition)) {\n if (definition.compoundField === compound.field) return [definition];\n return (\n definition.children?.flatMap((d) =>\n findControlsForCompound(compound, d),\n ) ?? []\n );\n }\n return [];\n}\n\nexport interface ControlGroupLookup {\n groups: ControlDefinition[];\n children: Record<string, ControlGroupLookup>;\n}\nexport function findCompoundGroups(\n fields: SchemaField[],\n controls: ControlDefinition[],\n): Record<string, ControlGroupLookup> {\n return Object.fromEntries(\n fields.filter(isCompoundField).map((cf) => {\n const groups = controls.flatMap((x) => findControlsForCompound(cf, x));\n return [\n cf.field,\n {\n groups: groups.concat(\n findNonDataGroups(groups.flatMap((x) => x.children ?? [])),\n ),\n children: findCompoundGroups(\n cf.children,\n groups.flatMap((x) => x.children ?? []),\n ),\n },\n ];\n }),\n );\n}\n\nexport function existsInGroups(\n field: SchemaField,\n lookup: ControlGroupLookup,\n): [SchemaField, ControlGroupLookup][] {\n const itself = lookup.groups.find((c) =>\n c.children?.find(\n (x) =>\n (isDataControlDefinition(x) && x.field === field.field) ||\n (isGroupControlsDefinition(x) && x.compoundField === field.field),\n ),\n );\n if (!itself) return [[field, lookup]];\n if (isCompoundField(field)) {\n const childLookup = lookup.children[field.field];\n if (!childLookup) return [[field, lookup]];\n return field.children.flatMap((c) => existsInGroups(c, childLookup));\n }\n return [];\n}\n\nexport function findNonDataGroups(\n controls: ControlDefinition[],\n): ControlDefinition[] {\n return controls.flatMap((control) =>\n isGroupControlsDefinition(control) && !control.compoundField\n ? [control, ...findNonDataGroups(control.children ?? [])]\n : [],\n );\n}\n\nfunction cloneChildren(c: ControlDefinition): ControlDefinition {\n return { ...c, children: c.children?.map(cloneChildren) };\n}\n\nexport function addMissingControls(\n fields: SchemaField[],\n controls: ControlDefinition[],\n) {\n controls = controls.map(cloneChildren);\n const rootMapping = findCompoundGroups(fields, controls);\n const rootGroups = findNonDataGroups([\n {\n type: ControlDefinitionType.Group,\n children: controls,\n },\n ]);\n const rootLookup = { children: rootMapping, groups: rootGroups };\n const missingFields = fields\n .filter((x) => !fieldHasTag(x, \"_NoControl\"))\n .flatMap((x) => existsInGroups(x, rootLookup));\n missingFields.forEach(([f, lookup]) => {\n const groupToAdd = f.tags?.find((x) => x.startsWith(\"_ControlGroup:\"));\n let insertGroup: ControlDefinition | undefined = undefined;\n if (groupToAdd) {\n const groupName = groupToAdd.substring(14);\n insertGroup = lookup.groups.find((x) => x.title === groupName);\n }\n if (!insertGroup) insertGroup = lookup.groups[0];\n if (insertGroup) {\n const newControl = defaultControlForField(f);\n if (insertGroup.children) insertGroup.children.push(newControl);\n else insertGroup.children = [newControl];\n }\n });\n return controls;\n}\nexport function useUpdatedRef<A>(a: A): MutableRefObject<A> {\n const r = useRef(a);\n r.current = a;\n return r;\n}\n\nexport function isControlReadonly(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.readonly;\n}\n\nexport function isControlDisabled(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.disabled;\n}\n\nexport function getDisplayOnlyOptions(\n d: ControlDefinition,\n): DisplayOnlyRenderOptions | undefined {\n return isDataControlDefinition(d) &&\n d.renderOptions &&\n isDisplayOnlyRenderer(d.renderOptions)\n ? d.renderOptions\n : undefined;\n}\n\nexport function cleanDataForSchema(\n v: { [k: string]: any } | undefined,\n fields: SchemaField[],\n removeIfDefault?: boolean,\n): any {\n if (!v) return v;\n const typeField = fields.find((x) => x.isTypeField);\n const typeValue = typeField ? v[typeField.field] : undefined;\n const cleanableFields = !removeIfDefault\n ? fields.filter(\n (x) => isCompoundField(x) || (x.onlyForTypes?.length ?? 0) > 0,\n )\n : fields;\n if (!cleanableFields.length) return v;\n const out = { ...v };\n cleanableFields.forEach((x) => {\n const childValue = v[x.field];\n if (\n x.onlyForTypes?.includes(typeValue) === false ||\n (!x.notNullable && canBeNull())\n ) {\n delete out[x.field];\n return;\n }\n if (isCompoundField(x)) {\n const childFields = x.treeChildren ? fields : x.children;\n if (x.collection) {\n if (Array.isArray(childValue)) {\n out[x.field] = childValue.map((cv) =>\n cleanDataForSchema(cv, childFields, removeIfDefault),\n );\n }\n } else {\n out[x.field] = cleanDataForSchema(\n childValue,\n childFields,\n removeIfDefault,\n );\n }\n }\n function canBeNull() {\n return (\n (removeIfDefault && x.defaultValue === childValue) ||\n (x.collection && Array.isArray(childValue) && !childValue.length)\n //|| (x.type === FieldType.Bool && childValue === false)\n );\n }\n });\n return out;\n}\n\nexport function getAllReferencedClasses(\n c: ControlDefinition,\n collectExtra?: (c: ControlDefinition) => (string | undefined | null)[],\n): string[] {\n const childClasses = c.children?.flatMap((x) =>\n getAllReferencedClasses(x, collectExtra),\n );\n const go = getGroupClassOverrides(c);\n const tc = clsx(\n [\n c.styleClass,\n c.layoutClass,\n c.labelClass,\n ...Object.values(go),\n ...(collectExtra?.(c) ?? []),\n ].map(getOverrideClass),\n );\n if (childClasses && !tc) return childClasses;\n if (!tc) return [];\n if (childClasses) return [tc, ...childClasses];\n return [tc];\n}\n\nexport function jsonPathString(\n jsonPath: JsonPath[],\n customIndex?: (n: number) => string,\n) {\n let out = \"\";\n jsonPath.forEach((v, i) => {\n if (typeof v === \"number\") {\n out += customIndex?.(v) ?? \"[\" + v + \"]\";\n } else {\n if (i > 0) out += \".\";\n out += v;\n }\n });\n return out;\n}\n\nexport function findChildDefinition(\n parent: ControlDefinition,\n childPath: number | number[],\n): ControlDefinition {\n if (Array.isArray(childPath)) {\n let base = parent;\n childPath.forEach((x) => (base = base.children![x]));\n return base;\n }\n return parent.children![childPath];\n}\n\nexport function getOverrideClass(className?: string | null) {\n if (className && className.startsWith(\"@ \")) {\n return className.substring(2);\n }\n return className;\n}\n\nexport function rendererClass(\n controlClass?: string | null,\n globalClass?: string | null,\n) {\n const gc = getOverrideClass(globalClass);\n if (gc !== globalClass) return globalClass ? globalClass : undefined;\n const oc = getOverrideClass(controlClass);\n if (oc === controlClass) return clsx(controlClass, globalClass);\n return oc ? oc : undefined;\n}\n\nexport type HookDep = string | number | undefined | null;\n\nexport interface DynamicHookGenerator<A, P> {\n deps: HookDep;\n state: any;\n runHook(ctx: P, state: any): A;\n}\n\nexport function makeHook<A, P, S = undefined>(\n runHook: (ctx: P, state: S) => A,\n state: S,\n deps?: HookDep,\n): DynamicHookGenerator<A, P> {\n return { deps, state, runHook };\n}\n\nexport type DynamicHookValue<A> =\n A extends DynamicHookGenerator<infer V, any> ? V : never;\n\nexport function makeHookDepString<A>(\n deps: A[],\n asHookDep: (a: A) => HookDep,\n): string {\n return deps.map((x) => toDepString(asHookDep(x))).join(\",\");\n}\nexport function useDynamicHooks<\n P,\n Hooks extends Record<string, DynamicHookGenerator<any, P>>,\n>(\n hooks: Hooks,\n): (p: P) => {\n [K in keyof Hooks]: DynamicHookValue<Hooks[K]>;\n} {\n const hookEntries = Object.entries(hooks);\n const deps = makeHookDepString(hookEntries, (x) => x[1].deps);\n const ref = useRef<Record<string, any>>({});\n const s = ref.current;\n hookEntries.forEach((x) => (s[x[0]] = x[1].state));\n return useCallback(\n (p: P) => {\n return Object.fromEntries(\n hookEntries.map(([f, hg]) => [f, hg.runHook(p, ref.current[f])]),\n ) as any;\n },\n [deps],\n );\n}\n\nexport function toDepString(x: any): string {\n if (x === undefined) return \"_\";\n if (x === null) return \"~\";\n return x.toString();\n}\n\nexport function applyLengthRestrictions<Min, Max>(\n length: number,\n min: number | null | undefined,\n max: number | null | undefined,\n minValue: Min,\n maxValue: Max,\n): [Min | undefined, Max | undefined] {\n return [\n min == null || length > min ? minValue : undefined,\n max == null || length < max ? maxValue : undefined,\n ];\n}\n\nexport function findFieldPath(\n fields: SchemaField[],\n fieldPath: string | undefined,\n): SchemaField[] | undefined {\n if (!fieldPath) return undefined;\n const fieldNames = fieldPath.split(\"/\");\n const foundFields: SchemaField[] = [];\n let i = 0;\n let currentFields: SchemaField[] | undefined = fields;\n while (i < fieldNames.length && currentFields) {\n const cf = fieldNames[i];\n const nextField = findField(currentFields, cf);\n if (!nextField) return undefined;\n foundFields.push(nextField);\n currentFields =\n isCompoundField(nextField) && !nextField.collection\n ? nextField.children\n : undefined;\n i++;\n }\n return foundFields.length === fieldNames.length ? foundFields : undefined;\n}\n\nexport function mergeObjects<A extends Record<string, any> | undefined>(\n o1: A,\n o2: A,\n doMerge: (k: keyof NonNullable<A>, v1: unknown, v2: unknown) => unknown = (\n _,\n v1,\n v2,\n ) => v1 ?? v2,\n): A {\n if (!o1) return o2;\n if (!o2) return o1;\n const result = { ...o1 };\n for (const key in o2) {\n if (o2.hasOwnProperty(key)) {\n const value1 = o1[key];\n const value2 = o2[key];\n result[key] = doMerge(key, value1, value2) as any;\n }\n }\n return result;\n}\n\nexport function coerceToString(v: unknown) {\n return v == null\n ? \"\"\n : typeof v === \"object\"\n ? \"error: \" + JSON.stringify(v)\n : v.toString();\n}\n\nexport function getGroupRendererOptions(\n def: ControlDefinition,\n): GroupRenderOptions | undefined {\n return isGroupControlsDefinition(def)\n ? def.groupOptions\n : isDataControlDefinition(def) && isDataGroupRenderer(def.renderOptions)\n ? def.renderOptions.groupOptions\n : undefined;\n}\nexport function getGroupClassOverrides(def: ControlDefinition): ControlClasses {\n let go = getGroupRendererOptions(def);\n\n if (!go) return {};\n const { childLayoutClass, childStyleClass, childLabelClass } = go;\n const out: ControlClasses = {};\n if (childLayoutClass) out.layoutClass = childLayoutClass;\n if (childStyleClass) out.styleClass = childStyleClass;\n if (childLabelClass) out.labelClass = childLabelClass;\n return out;\n}\n\nexport function isControlDisplayOnly(def: ControlDefinition): boolean {\n return Boolean(getGroupRendererOptions(def)?.displayOnly);\n}\n\nexport function actionHandlers(\n ...handlers: (ControlActionHandler | undefined)[]\n): ControlActionHandler {\n return (actionId, actionData, ctx) => {\n for (let i = 0; i < handlers.length; i++) {\n const res = handlers[i]?.(actionId, actionData, ctx);\n if (res) return res;\n }\n return undefined;\n };\n}\n","import {\n AccordionAdornment,\n CheckListRenderOptions,\n ControlAdornmentType,\n ControlDefinition,\n DataControlDefinition,\n DataExpression,\n DataMatchExpression,\n DataRenderType,\n DateValidator,\n DisplayControlDefinition,\n DisplayDataType,\n DisplayOnlyRenderOptions,\n DynamicProperty,\n DynamicPropertyType,\n EntityExpression,\n ExpressionType,\n GroupedControlsDefinition,\n GroupRenderType,\n HtmlDisplay,\n JsonataExpression,\n JsonataRenderOptions,\n JsonataValidator,\n LengthValidator,\n RadioButtonRenderOptions,\n RenderOptions,\n SchemaField,\n SchemaMap,\n TextDisplay,\n TextfieldRenderOptions,\n ValidatorType,\n} from \"./types\";\nimport { ActionRendererProps } from \"./controlRender\";\nimport { useMemo } from \"react\";\nimport { addMissingControls } from \"./util\";\nimport { mergeFields, resolveSchemas } from \"./schemaBuilder\";\nimport { ActionControlDefinition, ControlDefinitionType } from \"./types\";\n\nexport function dataControl(\n field: string,\n title?: string | null,\n options?: Partial<DataControlDefinition>,\n): DataControlDefinition {\n return { type: ControlDefinitionType.Data, field, title, ...options };\n}\n\nexport function validatorOptions<A extends { type: string }>(\n type: ValidatorType,\n): (options: Omit<A, \"type\">) => A {\n return (o) => ({ type, ...o }) as A;\n}\n\nexport function adornmentOptions<A extends { type: string }>(\n type: ControlAdornmentType,\n): (options: Omit<A, \"type\">) => A {\n return (o) => ({ type, ...o }) as A;\n}\n\nexport function renderOptionsFor<A extends RenderOptions>(\n type: DataRenderType,\n): (options: Omit<A, \"type\">) => { renderOptions: A } {\n return (o) => ({ renderOptions: { type, ...o } as A });\n}\n\nexport const checkListOptions = renderOptionsFor<CheckListRenderOptions>(\n DataRenderType.CheckList,\n);\n\nexport const radioButtonOptions = renderOptionsFor<RadioButtonRenderOptions>(\n DataRenderType.Radio,\n);\n\nexport const lengthValidatorOptions = validatorOptions<LengthValidator>(\n ValidatorType.Length,\n);\n\nexport const jsonataValidatorOptions = validatorOptions<JsonataValidator>(\n ValidatorType.Jsonata,\n);\n\nexport const dateValidatorOptions = validatorOptions<DateValidator>(\n ValidatorType.Date,\n);\n\nexport const accordionOptions = adornmentOptions<AccordionAdornment>(\n ControlAdornmentType.Accordion,\n);\n\nexport const textfieldOptions = renderOptionsFor<TextfieldRenderOptions>(\n DataRenderType.Textfield,\n);\n\nexport const displayOnlyOptions = renderOptionsFor<DisplayOnlyRenderOptions>(\n DataRenderType.DisplayOnly,\n);\n\nexport const jsonataOptions = renderOptionsFor<JsonataRenderOptions>(\n DataRenderType.Jsonata,\n);\n\nexport function textDisplayControl(\n text: string,\n options?: Partial<DisplayControlDefinition>,\n): DisplayControlDefinition {\n return {\n type: ControlDefinitionType.Display,\n displayData: { type: DisplayDataType.Text, text } as TextDisplay,\n ...options,\n };\n}\n\nexport function htmlDisplayControl(\n html: string,\n options?: Partial<DisplayControlDefinition>,\n): DisplayControlDefinition {\n return {\n type: ControlDefinitionType.Display,\n displayData: { type: DisplayDataType.Html, html } as HtmlDisplay,\n ...options,\n };\n}\n\nexport function dynamicDefaultValue(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.DefaultValue, expr };\n}\n\nexport function dynamicReadonly(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Readonly, expr };\n}\n\nexport function dynamicVisibility(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Visible, expr };\n}\n\nexport function dynamicDisabled(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Disabled, expr };\n}\n\nexport function fieldExpr(field: string): DataExpression {\n return { type: ExpressionType.Data, field };\n}\n\nexport function fieldEqExpr(field: string, value: any): DataMatchExpression {\n return { type: ExpressionType.DataMatch, field, value };\n}\nexport function jsonataExpr(expression: string): JsonataExpression {\n return { type: ExpressionType.Jsonata, expression };\n}\n\nexport function groupedControl(\n children: ControlDefinition[],\n title?: string,\n options?: Partial<GroupedControlsDefinition>,\n): GroupedControlsDefinition {\n return {\n type: ControlDefinitionType.Group,\n children,\n title,\n groupOptions: { type: \"Standard\", hideTitle: !title },\n ...options,\n };\n}\nexport function compoundControl(\n field: string,\n title: string | undefined,\n children: ControlDefinition[],\n options?: Partial<DataControlDefinition>,\n): DataControlDefinition {\n return {\n type: ControlDefinitionType.Data,\n field,\n children,\n title,\n renderOptions: { type: \"Standard\" },\n ...options,\n };\n}\n\nexport function actionControl(\n actionText: string,\n actionId: string,\n options?: Partial<ActionControlDefinition>,\n): ActionControlDefinition {\n return {\n type: ControlDefinitionType.Action,\n title: actionText,\n actionId,\n ...options,\n };\n}\nexport function createAction(\n actionId: string,\n onClick: () => void,\n actionText?: string,\n options?: Partial<ActionRendererProps>,\n): ActionRendererProps {\n return { actionId, onClick, actionText: actionText ?? actionId, ...options };\n}\n\nexport const emptyGroupDefinition: GroupedControlsDefinition = {\n type: ControlDefinitionType.Group,\n children: [],\n groupOptions: { type: GroupRenderType.Standard, hideTitle: true },\n};\n\nexport function useControlDefinitionForSchema(\n sf: SchemaField[],\n definition: GroupedControlsDefinition = emptyGroupDefinition,\n): GroupedControlsDefinition {\n return useMemo<GroupedControlsDefinition>(\n () => ({\n ...definition,\n children: addMissingControls(sf, definition.children ?? []),\n }),\n [sf, definition],\n );\n}\n\nexport interface EditorGroup {\n parent: string;\n group: GroupedControlsDefinition;\n}\n\nexport interface CustomRenderOptions {\n value: string;\n name: string;\n fields?: SchemaField[];\n groups?: EditorGroup[];\n}\n\nexport type ControlDefinitionExtension = {\n RenderOptions?: CustomRenderOptions | CustomRenderOptions[];\n GroupRenderOptions?: CustomRenderOptions | CustomRenderOptions[];\n ControlAdornment?: CustomRenderOptions | CustomRenderOptions[];\n SchemaValidator?: CustomRenderOptions | CustomRenderOptions[];\n DisplayData?: CustomRenderOptions | CustomRenderOptions[];\n};\n\nexport function applyExtensionToSchema<A extends SchemaMap>(\n schemaMap: A,\n extension: ControlDefinitionExtension,\n): A {\n const outMap = { ...schemaMap };\n Object.entries(extension).forEach(([field, cro]) => {\n outMap[field as keyof A] = (Array.isArray(cro) ? cro : [cro]).reduce(\n (a, cr) => mergeFields(a, cr.name, cr.value, cr.fields ?? []),\n outMap[field],\n ) as A[string];\n });\n return outMap;\n}\n\nexport function applyExtensionsToSchema<A extends SchemaMap>(\n schemaMap: A,\n extensions: ControlDefinitionExtension[],\n) {\n return resolveSchemas(extensions.reduce(applyExtensionToSchema, schemaMap));\n}\n","import { Control } from \"@react-typed-forms/core\";\nimport {\n CompoundField,\n ControlDefinition,\n ControlDefinitionType,\n FieldType,\n isDataControlDefinition,\n isGroupControlsDefinition,\n SchemaField,\n isCompoundField,\n DataControlDefinition,\n visitControlDefinition,\n GroupedControlsDefinition,\n} from \"./types\";\n\nconst MissingField: SchemaField = { field: \"__missing\", type: FieldType.Any };\n\nexport interface FormNode {\n definition: ControlDefinition;\n getChildNodes(): FormNode[];\n parent?: FormNode;\n}\n\nexport interface FormTreeLookup<A = string> {\n getForm(formId: A): FormTreeNode | undefined;\n}\nexport interface FormTreeNode extends FormTreeLookup {\n rootNode: FormNode;\n}\n\nexport interface SchemaTreeLookup<A = string> {\n getSchema(schemaId: A): SchemaNode | undefined;\n}\n\nexport interface SchemaNode extends SchemaTreeLookup {\n field: SchemaField;\n getChildNode(field: string): SchemaNode | undefined;\n getChildNodes(): SchemaNode[];\n parent?: SchemaNode;\n}\n\nexport interface SchemaDataNode {\n schema: SchemaNode;\n elementIndex?: number;\n control?: Control<unknown>;\n parent?: SchemaDataNode;\n getChild(node: SchemaNode): SchemaDataNode;\n getChildElement(index: number): SchemaDataNode;\n}\n\nfunction nodeForSchema(\n field: SchemaField,\n lookup: SchemaTreeLookup,\n parent: SchemaNode | undefined,\n): SchemaNode {\n const node = {\n field,\n getSchema: lookup.getSchema,\n parent,\n getChildNode,\n getChildNodes,\n };\n return node;\n\n function getChildNode(fieldName: string) {\n if (isCompoundField(field) && !field.schemaRef) {\n const childField = field.children.find((x) => x.field === fieldName);\n return childField ? nodeForSchema(childField, lookup, node) : undefined;\n }\n return getChildNodes().find((x) => x.field.field === fieldName);\n }\n function getChildNodes(): SchemaNode[] {\n if (isCompoundField(field)) {\n const otherRef = field.schemaRef && lookup.getSchema(field.schemaRef);\n if (otherRef) return otherRef.getChildNodes();\n return field.children.map((x) => nodeForSchema(x, lookup, node));\n }\n return [];\n }\n}\n\nexport function createSchemaLookup<A extends Record<string, SchemaField[]>>(\n schemaMap: A,\n): SchemaTreeLookup<keyof A> {\n const lookup = {\n getSchema,\n };\n return lookup;\n\n function getSchema(schemaId: keyof A): SchemaNode | undefined {\n const fields = schemaMap[schemaId];\n if (fields) {\n return rootSchemaNode(fields, lookup);\n }\n return undefined;\n }\n}\n\nfunction nodeForControl(\n definition: ControlDefinition,\n parent?: FormNode,\n): FormNode {\n const node = { definition, parent, getChildNodes };\n return node;\n function getChildNodes(): FormNode[] {\n return definition.children?.map((x) => nodeForControl(x, node)) ?? [];\n }\n}\nexport function createFormLookup<A extends Record<string, ControlDefinition[]>>(\n formMap: A,\n): FormTreeLookup<keyof A> {\n const lookup = {\n getForm,\n };\n return lookup;\n\n function getForm(formId: keyof A): FormTreeNode | undefined {\n const controls = formMap[formId];\n if (controls) {\n return {\n rootNode: nodeForControl({\n children: controls,\n type: ControlDefinitionType.Group,\n }),\n getForm,\n };\n }\n return undefined;\n }\n}\n\nexport function makeSchemaDataNode(\n schema: SchemaNode,\n control?: Control<unknown>,\n parent?: SchemaDataNode,\n elementIndex?: number,\n): SchemaDataNode {\n const dataNode = {\n schema,\n control,\n parent,\n elementIndex,\n getChild,\n getChildElement,\n };\n return dataNode;\n\n function getChild(schemaNode: SchemaNode): SchemaDataNode {\n const objControl = control as Control<Record<string, unknown>>;\n if (objControl && objControl.current.isNull) {\n objControl.value = {};\n }\n return makeSchemaDataNode(\n schemaNode,\n objControl?.fields?.[schemaNode.field.field],\n dataNode,\n );\n }\n function getChildElement(elementIndex: number): SchemaDataNode {\n return makeSchemaDataNode(\n schema,\n (control as Control<unknown[]>)?.elements?.[elementIndex],\n dataNode,\n elementIndex,\n );\n }\n}\n\nexport function fieldPathForDefinition(\n c: ControlDefinition,\n): string[] | undefined {\n const fieldName = isGroupControlsDefinition(c)\n ? c.compoundField\n : isDataControlDefinition(c)\n ? c.field\n : undefined;\n return fieldName?.split(\"/\");\n}\n\nexport function lookupDataNode(\n c: ControlDefinition,\n parentNode: SchemaDataNode,\n) {\n const fieldNamePath = fieldPathForDefinition(c);\n return fieldNamePath\n ? schemaDataForFieldPath(fieldNamePath, parentNode)\n : undefined;\n}\n\nexport function schemaDataForFieldRef(\n fieldRef: string | undefined,\n schema: SchemaDataNode,\n): SchemaDataNode {\n return schemaDataForFieldPath(fieldRef?.split(\"/\") ?? [], schema);\n}\n\nexport function schemaForFieldRef(\n fieldRef: string | undefined,\n schema: SchemaNode,\n): SchemaNode {\n return schemaForFieldPath(fieldRef?.split(\"/\") ?? [], schema);\n}\n\nexport function traverseSchemaPath<A>(\n fieldPath: string[],\n schema: SchemaNode,\n acc: A,\n next: (acc: A, node: SchemaNode) => A,\n): A {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let childNode = schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(MissingField, schema, schema);\n }\n acc = next(acc, childNode);\n schema = childNode;\n i++;\n }\n return acc;\n}\n\nexport function traverseData(\n fieldPath: string[],\n root: SchemaNode,\n data: { [k: string]: any },\n): unknown {\n return traverseSchemaPath(\n fieldPath,\n root,\n data,\n (acc, n) => acc?.[n.field.field] as any,\n );\n}\n\nexport function schemaDataForFieldPath(\n fieldPath: string[],\n schema: SchemaDataNode,\n): SchemaDataNode {\n return traverseSchemaPath(fieldPath, schema.schema, schema, (a, n) =>\n a.getChild(n),\n );\n}\n\nexport function schemaForFieldPath(\n fieldPath: string[],\n schema: SchemaNode,\n): SchemaNode {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let childNode = schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(MissingField, schema, schema);\n }\n schema = childNode;\n i++;\n }\n return schema;\n}\n\nexport function traverseParents<A, B extends { parent?: B | undefined }>(\n current: B | undefined,\n get: (b: B) => A,\n until?: (b: B) => boolean,\n): A[] {\n let outArray: A[] = [];\n while (current && !until?.(current)) {\n outArray.push(get(current));\n current = current.parent;\n }\n return outArray.reverse();\n}\n\nexport function getRootDataNode(dataNode: SchemaDataNode) {\n while (dataNode.parent) {\n dataNode = dataNode.parent;\n }\n return dataNode;\n}\n\nexport function getJsonPath(dataNode: SchemaDataNode) {\n return traverseParents(\n dataNode,\n (d) => (d.elementIndex == null ? d.schema.field.field : d.elementIndex),\n (x) => !x.parent,\n );\n}\n\nexport function getSchemaPath(schemaNode: SchemaNode): SchemaField[] {\n return traverseParents(\n schemaNode,\n (d) => d.field,\n (x) => !x.parent,\n );\n}\n\nexport function getSchemaFieldList(schema: SchemaNode): SchemaField[] {\n return schema.getChildNodes().map((x) => x.field);\n}\n\nexport function rootSchemaNode(\n fields: SchemaField[],\n lookup: SchemaTreeLookup = {\n getSchema(schemaId: string): SchemaNode | undefined {\n return undefined;\n },\n },\n): SchemaNode {\n return nodeForSchema(\n {\n type: FieldType.Compound,\n field: \"\",\n children: fields,\n } as CompoundField,\n lookup,\n undefined,\n );\n}\n\nexport function visitControlDataArray<A>(\n controls: ControlDefinition[] | undefined | null,\n context: SchemaDataNode,\n cb: (\n definition: DataControlDefinition,\n node: SchemaDataNode,\n ) => A | undefined,\n): A | undefined {\n if (!controls) return undefined;\n for (const c of controls) {\n const r = visitControlData(c, context, cb);\n if (r !== undefined) return r;\n }\n return undefined;\n}\n\nexport function visitControlData<A>(\n definition: ControlDefinition,\n ctx: SchemaDataNode,\n cb: (\n definition: DataControlDefinition,\n field: SchemaDataNode,\n ) => A | undefined,\n): A | undefined {\n if (!ctx.control || ctx.control.isNull) return undefined;\n return visitControlDefinition<A | undefined>(\n definition,\n {\n data(def: DataControlDefinition) {\n return processData(def);\n },\n group(d: GroupedControlsDefinition) {\n return processData(d);\n },\n action: () => undefined,\n display: () => undefined,\n },\n () => undefined,\n );\n\n function processData(def: ControlDefinition) {\n const children = def.children;\n const childNode = lookupDataNode(def, ctx);\n if (!childNode) return visitControlDataArray(children, ctx, cb);\n const dataControl = isDataControlDefinition(def) ? def : undefined;\n const result = dataControl ? cb(dataControl, childNode) : undefined;\n if (result !== undefined) return result;\n const fieldNode = childNode.schema;\n const compound = isCompoundField(fieldNode.field);\n if (fieldNode.field.collection) {\n const control = childNode.control as Control<unknown[]>;\n let cIndex = 0;\n for (const c of control!.elements ?? []) {\n const elemChild = childNode.getChildElement(cIndex);\n const elemResult = dataControl ? cb(dataControl, elemChild) : undefined;\n if (elemResult !== undefined) return elemResult;\n if (compound) {\n const cfResult = visitControlDataArray(children, elemChild, cb);\n if (cfResult !== undefined) return cfResult;\n }\n cIndex++;\n }\n } else if (compound) {\n return visitControlDataArray(children, childNode, cb);\n }\n return undefined;\n }\n}\n","import {\n ControlDefinition,\n DataExpression,\n DataMatchExpression,\n DynamicPropertyType,\n EntityExpression,\n ExpressionType,\n isDataControlDefinition,\n JsonataExpression,\n NotEmptyExpression,\n SchemaInterface,\n} from \"./types\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n addAfterChangesCallback,\n collectChanges,\n Control,\n makeChangeTracker,\n trackedValue,\n useCalculatedControl,\n useComputed,\n useControl,\n useRefState,\n} from \"@react-typed-forms/core\";\n\nimport {\n ControlDataContext,\n defaultValueForField,\n DynamicHookGenerator,\n elementValueForField,\n getDisplayOnlyOptions,\n HookDep,\n isControlDisabled,\n isControlReadonly,\n JsonPath,\n jsonPathString,\n toDepString,\n} from \"./util\";\nimport jsonata from \"jsonata\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n getJsonPath,\n getRootDataNode,\n schemaDataForFieldRef,\n SchemaDataNode,\n} from \"./treeNodes\";\n\nexport type EvalExpressionHook<A = any> = DynamicHookGenerator<\n Control<A | undefined>,\n ControlDataContext\n>;\n\nexport type UseEvalExpressionHook = (\n expr: EntityExpression | undefined | null,\n coerce: (v: any) => any,\n) => DynamicHookGenerator<Control<any> | undefined, ControlDataContext>;\n\nexport function useEvalVisibilityHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n overrideDataNode?: SchemaDataNode,\n): EvalExpressionHook<boolean> {\n const dynamicVisibility = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Visible,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicVisibility,\n (ctx, { definition, overrideDataNode }) =>\n useComputed(() => {\n const dataNode = overrideDataNode ?? ctx.dataNode;\n return (\n !dataNode ||\n (matchesType(dataNode) &&\n !hideDisplayOnly(dataNode, ctx.schemaInterface, definition))\n );\n }),\n { definition, overrideDataNode },\n );\n}\n\nexport function useEvalReadonlyHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<boolean> {\n const dynamicReadonly = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Readonly,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicReadonly,\n (ctx, { definition }) =>\n useCalculatedControl(() => isControlReadonly(definition)),\n { definition },\n );\n}\n\nexport function useEvalStyleHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n property: DynamicPropertyType,\n definition: ControlDefinition,\n): EvalExpressionHook<React.CSSProperties> {\n const dynamicStyle = useEvalDynamicHook(\n definition,\n property,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicStyle,\n () => useControl(undefined),\n undefined,\n );\n}\n\nexport function useEvalAllowedOptionsHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<any[]> {\n const dynamicAllowed = useEvalDynamicHook(\n definition,\n DynamicPropertyType.AllowedOptions,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicAllowed,\n () => useControl([]),\n undefined,\n );\n}\n\nexport function useEvalDisabledHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<boolean> {\n const dynamicDisabled = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Disabled,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicDisabled,\n (ctx) =>\n useComputed(() => {\n const dataControl = ctx.dataNode?.control;\n const setToNull = dataControl?.meta[\"nullControl\"]?.value === false;\n return setToNull || isControlDisabled(definition);\n }),\n undefined,\n );\n}\n\nexport function useEvalDisplayHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): DynamicHookGenerator<\n Control<string | undefined> | undefined,\n ControlDataContext\n> {\n return useEvalDynamicHook(\n definition,\n DynamicPropertyType.Display,\n useEvalExpressionHook,\n );\n}\nexport function useEvalDefaultValueHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.DefaultValue,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n (ctx, { definition }) => {\n return useComputed(calcDefault);\n function calcDefault() {\n const [required, dcv] = isDataControlDefinition(definition)\n ? [definition.required, definition.defaultValue]\n : [false, undefined];\n const field = ctx.dataNode?.schema.field;\n return (\n dcv ??\n (field\n ? ctx.dataNode!.elementIndex != null\n ? elementValueForField(field)\n : defaultValueForField(field, required, true)\n : undefined)\n );\n }\n },\n { definition },\n );\n}\n\nfunction useDataExpression(\n fvExpr: DataExpression,\n node: SchemaDataNode,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => coerce(otherField.control?.value));\n}\n\nfunction useDataMatchExpression(\n fvExpr: DataMatchExpression,\n node: SchemaDataNode,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => {\n const fv = otherField.control?.value;\n return coerce(\n Array.isArray(fv) ? fv.includes(fvExpr.value) : fv === fvExpr.value,\n );\n });\n}\n\nfunction useNotEmptyExpression(\n fvExpr: NotEmptyExpression,\n node: SchemaDataNode,\n schemaInterface: SchemaInterface,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => {\n const fv = otherField.control?.value;\n const field = otherField.schema.field;\n return coerce(field && !schemaInterface.isEmptyValue(field, fv));\n });\n}\n\nexport function defaultEvalHooks(\n expr: EntityExpression,\n context: ControlDataContext,\n coerce: (v: any) => any,\n) {\n switch (expr.type) {\n case ExpressionType.Jsonata:\n const bindings = useComputed(() => ({ formData: context.formData }));\n return useJsonataExpression(\n (expr as JsonataExpression).expression,\n getRootDataNode(context.parentNode).control!,\n getJsonPath(context.parentNode),\n bindings,\n coerce,\n );\n case ExpressionType.UUID:\n return useUuidExpression(coerce);\n case ExpressionType.Data:\n return useDataExpression(\n expr as DataExpression,\n context.parentNode,\n coerce,\n );\n case ExpressionType.DataMatch:\n return useDataMatchExpression(\n expr as DataMatchExpression,\n context.parentNode,\n coerce,\n );\n case ExpressionType.NotEmpty:\n return useNotEmptyExpression(\n expr as NotEmptyExpression,\n context.parentNode,\n context.schemaInterface,\n coerce,\n );\n default:\n return useControl(undefined);\n }\n}\n\nexport const defaultUseEvalExpressionHook =\n makeEvalExpressionHook(defaultEvalHooks);\n\nexport function makeEvalExpressionHook(\n f: (\n expr: EntityExpression,\n context: ControlDataContext,\n coerce: (v: any) => any,\n ) => Control<any>,\n): UseEvalExpressionHook {\n return (expr, coerce) => ({\n deps: expr?.type,\n state: expr && expr.type ? expr : undefined,\n runHook: (ctx: ControlDataContext, state: EntityExpression | undefined) => {\n return state ? f(state, ctx, coerce) : undefined;\n },\n });\n}\n\nexport function useEvalDynamicBoolHook(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n): DynamicHookGenerator<Control<any> | undefined, ControlDataContext> {\n return useEvalDynamicHook(definition, type, useEvalExpressionHook, (x) =>\n Boolean(x),\n );\n}\n\nexport function useEvalDynamicHook(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n coerce: (v: any) => any = (x) => x,\n): DynamicHookGenerator<Control<any> | undefined, ControlDataContext> {\n const expression = definition.dynamic?.find((x) => x.type === type);\n return useEvalExpressionHook(expression?.expr, coerce);\n}\n\nexport function matchesType(context: SchemaDataNode): boolean {\n const types = context.schema.field.onlyForTypes;\n if (types == null || types.length === 0) return true;\n const parent = context.parent!;\n const typeNode = parent.schema\n .getChildNodes()\n .find((x) => x.field.isTypeField);\n if (typeNode == null) return true;\n const typeField = parent.getChild(typeNode).control as Control<string>;\n return typeField && types.includes(typeField.value);\n}\n\nexport function hideDisplayOnly(\n context: SchemaDataNode,\n schemaInterface: SchemaInterface,\n definition: ControlDefinition,\n) {\n const displayOptions = getDisplayOnlyOptions(definition);\n return (\n displayOptions &&\n !displayOptions.emptyText &&\n schemaInterface.isEmptyValue(context.schema.field, context.control?.value)\n );\n}\n\nexport function useUuidExpression(coerce: (v: any) => any = (x) => x) {\n return useControl(() => coerce(uuidv4()));\n}\n\nexport function useJsonataExpression(\n jExpr: string,\n data: Control<any>,\n path: JsonPath[],\n bindings?: Control<Record<string, any>>,\n coerce: (v: any) => any = (x) => x,\n): Control<any> {\n const pathString = jsonPathString(path, (x) => `#$i[${x}]`);\n const fullExpr = pathString ? pathString + \".(\" + jExpr + \")\" : jExpr;\n const compiledExpr = useMemo(() => {\n try {\n return jsonata(jExpr ? fullExpr : \"null\");\n } catch (e) {\n console.error(e);\n return jsonata(\"null\");\n }\n }, [fullExpr]);\n const control = useControl();\n const listenerRef = useRef<() => void>();\n const updateRef = useRef(0);\n const [ref] = useRefState(() =>\n makeChangeTracker(() => {\n const l = listenerRef.current;\n if (l) {\n listenerRef.current = undefined;\n addAfterChangesCallback(() => {\n listenerRef.current = l;\n l();\n });\n }\n }),\n );\n useEffect(() => {\n listenerRef.current = apply;\n apply();\n async function apply() {\n const [collect, updateSubscriptions] = ref.current;\n try {\n updateRef.current++;\n control.value = coerce(\n await compiledExpr.evaluate(\n trackedValue(data, collect),\n collectChanges(collect, () => bindings?.value),\n ),\n );\n } finally {\n if (!--updateRef.current) updateSubscriptions();\n }\n }\n }, [compiledExpr]);\n useEffect(() => {\n return () => {\n listenerRef.current = undefined;\n ref.current[1](true);\n };\n }, []);\n return control;\n}\n\nexport function useEvalActionHook(\n useExpr: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<string | null> {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.ActionData,\n useExpr,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n () => useControl(null),\n undefined,\n );\n}\n\nexport function useEvalLabelText(\n useExpr: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<string | null> {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.Label,\n useExpr,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n () => useControl(null),\n undefined,\n );\n}\n\nfunction makeDynamicPropertyHook<A, S = undefined>(\n dynamicValue: DynamicHookGenerator<\n Control<any> | undefined,\n ControlDataContext\n >,\n makeDefault: (ctx: ControlDataContext, s: S) => Control<A | undefined>,\n state: S,\n deps?: HookDep,\n): EvalExpressionHook<A> {\n return {\n deps:\n deps === undefined\n ? dynamicValue.deps\n : [deps, dynamicValue.deps].map(toDepString).join(),\n runHook: (ctx, s) => {\n return dynamicValue.runHook(ctx, s[0]) ?? makeDefault(ctx, s[1]);\n },\n state: [dynamicValue.state, state],\n };\n}\n","import {\n ControlDefinition,\n DataControlDefinition,\n DataRenderType,\n DateComparison,\n DateValidator,\n FieldType,\n isDataControlDefinition,\n JsonataValidator,\n LengthValidator,\n SchemaField,\n SchemaValidator,\n ValidationMessageType,\n ValidatorType,\n} from \"./types\";\nimport {\n Control,\n useValidator,\n useValueChangeEffect,\n} from \"@react-typed-forms/core\";\nimport { useCallback } from \"react\";\nimport { ControlDataContext, makeHookDepString, useUpdatedRef } from \"./util\";\nimport { useJsonataExpression } from \"./hooks\";\nimport { getJsonPath, getRootDataNode } from \"./treeNodes\";\n\ninterface ValidationHookContext {\n hiddenControl: Control<boolean | null | undefined>;\n dataContext: ControlDataContext;\n control: Control<any>;\n}\n\nexport interface ValidationContext extends ValidationHookContext {\n definition: DataControlDefinition;\n field: SchemaField;\n index: number;\n}\n\nexport function useMakeValidationHook(\n definition: ControlDefinition,\n useValidatorFor: (\n validator: SchemaValidator,\n ctx: ValidationContext,\n ) => void = useDefaultValidator,\n): (ctx: ValidationHookContext) => void {\n const dd = isDataControlDefinition(definition) ? definition : undefined;\n\n const refData = useUpdatedRef({ dd, useValidatorFor });\n const depString = dd\n ? makeHookDepString(dd.validators ?? [], (x) => x.type)\n : \"~\";\n return useCallback(\n (ctx) => {\n const { dd } = refData.current;\n if (!dd) return;\n const field = ctx.dataContext.dataNode?.schema.field ?? {\n field: \"__missing\",\n type: FieldType.Any,\n };\n const {\n control,\n hiddenControl,\n dataContext: { schemaInterface },\n } = ctx;\n\n useValueChangeEffect(control, () => control.setError(\"default\", \"\"));\n if (dd.required)\n useValidator(\n control,\n (v) => {\n return !hiddenControl.value &&\n schemaInterface.isEmptyValue(field, v)\n ? schemaInterface.validationMessageText(\n field,\n ValidationMessageType.NotEmpty,\n false,\n true,\n )\n : null;\n },\n \"required\",\n undefined,\n );\n dd.validators?.forEach((v, i) =>\n useValidatorFor(v, { ...ctx, index: i, field, definition: dd }),\n );\n },\n [!!dd, dd?.required, depString, useValidatorFor],\n );\n}\n\nfunction useDefaultValidator(\n validator: SchemaValidator,\n ctx: ValidationContext,\n) {\n switch (validator.type) {\n case ValidatorType.Length:\n useLengthValidator(validator as LengthValidator, ctx);\n break;\n case ValidatorType.Jsonata:\n useJsonataValidator(validator as JsonataValidator, ctx);\n break;\n case ValidatorType.Date:\n useDateValidator(validator as DateValidator, ctx);\n break;\n }\n}\n\nexport function useJsonataValidator(\n validator: JsonataValidator,\n ctx: ValidationContext,\n) {\n const sdn = ctx.dataContext.parentNode;\n const errorMsg = useJsonataExpression(\n validator.expression,\n getRootDataNode(sdn).control!,\n getJsonPath(sdn),\n undefined,\n (v) => (v == null ? null : typeof v === \"string\" ? v : JSON.stringify(v)),\n );\n useValidator(\n ctx.control,\n () => (!ctx.hiddenControl.value ? errorMsg.value : null),\n \"jsonata\" + ctx.index,\n );\n}\n\nexport function useLengthValidator(\n lv: LengthValidator,\n ctx: ValidationContext,\n) {\n const {\n control,\n dataContext: { schemaInterface },\n hiddenControl,\n field,\n } = ctx;\n useValidator(\n control,\n (v) => {\n const len = schemaInterface.controlLength(field, control);\n const hidden = hiddenControl.value;\n if (hidden) {\n return undefined;\n }\n if (lv.min != null && len < lv.min) {\n if (field?.collection) {\n control.setValue((v) =>\n Array.isArray(v)\n ? v.concat(Array.from({ length: lv.min! - v.length }))\n : Array.from({ length: lv.min! }),\n );\n } else {\n return schemaInterface.validationMessageText(\n field,\n ValidationMessageType.MinLength,\n len,\n lv.min,\n );\n }\n } else if (lv.max != null && len > lv.max) {\n return schemaInterface.validationMessageText(\n field,\n ValidationMessageType.MaxLength,\n len,\n lv.max,\n );\n }\n return undefined;\n },\n \"length\" + ctx.index,\n );\n}\n\nexport function useDateValidator(dv: DateValidator, ctx: ValidationContext) {\n const {\n control,\n field,\n index,\n dataContext: { schemaInterface },\n } = ctx;\n let comparisonDate: number;\n if (dv.fixedDate) {\n comparisonDate = schemaInterface.parseToMillis(field, dv.fixedDate);\n } else {\n const nowDate = new Date();\n comparisonDate = Date.UTC(\n nowDate.getFullYear(),\n nowDate.getMonth(),\n nowDate.getDate(),\n );\n if (dv.daysFromCurrent) {\n comparisonDate += dv.daysFromCurrent * 86400000;\n }\n }\n useValidator(\n control,\n (v) => {\n if (v) {\n const selDate = schemaInterface.parseToMillis(field, v);\n const notAfter = dv.comparison === DateComparison.NotAfter;\n if (notAfter ? selDate > comparisonDate : selDate < comparisonDate) {\n return schemaInterface.validationMessageText(\n field,\n notAfter\n ? ValidationMessageType.NotAfterDate\n : ValidationMessageType.NotBeforeDate,\n selDate,\n comparisonDate,\n );\n }\n }\n return null;\n },\n \"date\" + index,\n );\n}\n","import {\n FieldOption,\n FieldType,\n SchemaField,\n SchemaInterface,\n ValidationMessageType,\n} from \"./types\";\nimport { Control } from \"@react-typed-forms/core\";\nimport { SchemaDataNode, SchemaNode } from \"./treeNodes\";\n\nexport class DefaultSchemaInterface implements SchemaInterface {\n constructor(\n protected boolStrings: [string, string] = [\"No\", \"Yes\"],\n protected parseDateTime: (s: string) => number = (s) => Date.parse(s),\n ) {}\n\n parseToMillis(field: SchemaField, v: string): number {\n return this.parseDateTime(v);\n }\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string {\n switch (messageType) {\n case ValidationMessageType.NotEmpty:\n return \"Please enter a value\";\n case ValidationMessageType.MinLength:\n return \"Length must be at least \" + expected;\n case ValidationMessageType.MaxLength:\n return \"Length must be less than \" + expected;\n case ValidationMessageType.NotBeforeDate:\n return `Date must not be before ${new Date(expected).toDateString()}`;\n case ValidationMessageType.NotAfterDate:\n return `Date must not be after ${new Date(expected).toDateString()}`;\n default:\n return \"Unknown error\";\n }\n }\n\n getDataOptions(node: SchemaDataNode): FieldOption[] | null | undefined {\n return this.getNodeOptions(node.schema);\n }\n\n getNodeOptions(node: SchemaNode): FieldOption[] | null | undefined {\n return this.getOptions(node.field);\n }\n\n getOptions({ options }: SchemaField): FieldOption[] | null | undefined {\n return options && options.length > 0 ? options : null;\n }\n\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null {\n return this.getNodeOptions(field);\n }\n\n isEmptyValue(f: SchemaField, value: any): boolean {\n if (f.collection)\n return Array.isArray(value) ? value.length === 0 : value == null;\n switch (f.type) {\n case FieldType.String:\n case FieldType.DateTime:\n case FieldType.Date:\n case FieldType.Time:\n return !value;\n default:\n return value == null;\n }\n }\n\n searchText(field: SchemaField, value: any): string {\n return this.textValue(field, value)?.toLowerCase() ?? \"\";\n }\n\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean | undefined,\n ): string | undefined {\n const options = this.getOptions(field);\n const option = options?.find((x) => x.value === value);\n if (option) return option.name;\n switch (field.type) {\n case FieldType.Date:\n return value ? new Date(value).toLocaleDateString() : undefined;\n case FieldType.DateTime:\n return value\n ? new Date(this.parseToMillis(field, value)).toLocaleString()\n : undefined;\n case FieldType.Time:\n return value\n ? new Date(\"1970-01-01T\" + value).toLocaleTimeString()\n : undefined;\n case FieldType.Bool:\n return this.boolStrings[value ? 1 : 0];\n default:\n return value != null ? value.toString() : undefined;\n }\n }\n controlLength(f: SchemaField, control: Control<any>): number {\n return f.collection\n ? (control.elements?.length ?? 0)\n : this.valueLength(f, control.value);\n }\n valueLength(field: SchemaField, value: any): number {\n return (value && value?.length) ?? 0;\n }\n\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number {\n if (v1 == null) return v2 == null ? 0 : 1;\n if (v2 == null) return -1;\n switch (field.type) {\n case FieldType.Date:\n case FieldType.DateTime:\n case FieldType.Time:\n case FieldType.String:\n return (v1 as string).localeCompare(v2 as string);\n case FieldType.Bool:\n return (v1 as boolean) ? ((v2 as boolean) ? 0 : 1) : -1;\n case FieldType.Int:\n case FieldType.Double:\n return (v1 as number) - (v2 as number);\n default:\n return 0;\n }\n }\n}\n\nexport const defaultSchemaInterface: SchemaInterface =\n new DefaultSchemaInterface();\n","import React, {\n FC,\n Fragment,\n Key,\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n} from \"react\";\nimport {\n addElement,\n Control,\n newControl,\n removeElement,\n RenderArrayElements,\n trackedValue,\n useCalculatedControl,\n useComponentTracking,\n useControl,\n useControlEffect,\n} from \"@react-typed-forms/core\";\nimport {\n AdornmentPlacement,\n ArrayActionOptions,\n ControlActionHandler,\n ControlAdornment,\n ControlDefinition,\n CustomDisplay,\n DataControlDefinition,\n DataRenderType,\n DisplayData,\n DisplayDataType,\n DynamicPropertyType,\n FieldOption,\n GroupRenderOptions,\n isActionControlsDefinition,\n isDataControlDefinition,\n isDisplayControlsDefinition,\n isGroupControlsDefinition,\n LengthValidator,\n RenderOptions,\n SchemaField,\n SchemaInterface,\n SchemaValidator,\n ValidatorType,\n} from \"./types\";\nimport {\n applyLengthRestrictions,\n ControlClasses,\n ControlDataContext,\n elementValueForField,\n fieldDisplayName,\n FormContextData,\n getGroupClassOverrides,\n isControlDisplayOnly,\n JsonPath,\n rendererClass,\n useDynamicHooks,\n useUpdatedRef,\n} from \"./util\";\nimport { dataControl } from \"./controlBuilder\";\nimport {\n defaultUseEvalExpressionHook,\n EvalExpressionHook,\n useEvalActionHook,\n useEvalAllowedOptionsHook,\n useEvalDefaultValueHook,\n useEvalDisabledHook,\n useEvalDisplayHook,\n UseEvalExpressionHook,\n useEvalLabelText,\n useEvalReadonlyHook,\n useEvalStyleHook,\n useEvalVisibilityHook,\n} from \"./hooks\";\nimport { useMakeValidationHook, ValidationContext } from \"./validators\";\nimport { defaultSchemaInterface } from \"./schemaInterface\";\nimport {\n createSchemaLookup,\n lookupDataNode,\n makeSchemaDataNode,\n SchemaDataNode,\n} from \"./treeNodes\";\n\nexport interface FormRenderer {\n renderData: (\n props: DataRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n renderGroup: (\n props: GroupRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n renderDisplay: (props: DisplayRendererProps) => ReactNode;\n renderAction: (props: ActionRendererProps) => ReactNode;\n renderArray: (props: ArrayRendererProps) => ReactNode;\n renderAdornment: (props: AdornmentProps) => AdornmentRenderer;\n renderLabel: (\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) => ReactNode;\n renderLayout: (props: ControlLayoutProps) => RenderedControl;\n renderVisibility: (props: VisibilityRendererProps) => ReactNode;\n renderLabelText: (props: ReactNode) => ReactNode;\n}\n\nexport interface AdornmentProps {\n adornment: ControlAdornment;\n dataContext: ControlDataContext;\n useExpr?: UseEvalExpressionHook;\n designMode?: boolean;\n}\n\nexport const AppendAdornmentPriority = 0;\nexport const WrapAdornmentPriority = 1000;\n\nexport interface AdornmentRenderer {\n apply(children: RenderedLayout): void;\n adornment?: ControlAdornment;\n priority: number;\n}\n\nexport interface ArrayRendererProps {\n addAction?: ActionRendererProps;\n required: boolean;\n removeAction?: (elemIndex: number) => ActionRendererProps;\n renderElement: (\n elemIndex: number,\n wrapEntry: (children: ReactNode) => ReactNode,\n ) => ReactNode;\n arrayControl: Control<any[] | undefined | null>;\n className?: string;\n style?: React.CSSProperties;\n min?: number | null;\n max?: number | null;\n disabled?: boolean;\n}\nexport interface Visibility {\n visible: boolean;\n showing: boolean;\n}\n\nexport interface RenderedLayout {\n labelStart?: ReactNode;\n labelEnd?: ReactNode;\n controlStart?: ReactNode;\n controlEnd?: ReactNode;\n label?: ReactNode;\n children?: ReactNode;\n errorControl?: Control<any>;\n className?: string;\n style?: React.CSSProperties;\n wrapLayout: (layout: ReactElement) => ReactElement;\n}\n\nexport interface RenderedControl {\n children: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n divRef?: (cb: HTMLElement | null) => void;\n}\n\nexport interface VisibilityRendererProps extends RenderedControl {\n visibility: Control<Visibility | undefined>;\n}\n\nexport interface ControlLayoutProps {\n label?: LabelRendererProps;\n errorControl?: Control<any>;\n adornments?: AdornmentRenderer[];\n children?: ReactNode;\n processLayout?: (props: ControlLayoutProps) => ControlLayoutProps;\n className?: string | null;\n style?: React.CSSProperties;\n}\n\nexport enum LabelType {\n Control,\n Group,\n Text,\n}\nexport interface LabelRendererProps {\n type: LabelType;\n hide?: boolean | null;\n label: ReactNode;\n required?: boolean | null;\n forId?: string;\n className?: string;\n}\nexport interface DisplayRendererProps {\n data: DisplayData;\n display?: Control<string | undefined>;\n dataContext: ControlDataContext;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport type ChildVisibilityFunc = (\n child: ControlDefinition,\n parentNode?: SchemaDataNode,\n dontOverride?: boolean,\n) => EvalExpressionHook<boolean>;\nexport interface ParentRendererProps {\n childDefinitions: ControlDefinition[];\n renderChild: ChildRenderer;\n className?: string;\n style?: React.CSSProperties;\n dataContext: ControlDataContext;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n designMode?: boolean;\n}\n\nexport interface GroupRendererProps extends ParentRendererProps {\n definition: ControlDefinition;\n renderOptions: GroupRenderOptions;\n}\n\nexport interface DataRendererProps extends ParentRendererProps {\n renderOptions: RenderOptions;\n definition: DataControlDefinition;\n field: SchemaField;\n elementIndex?: number;\n id: string;\n control: Control<any>;\n readonly: boolean;\n required: boolean;\n options: FieldOption[] | undefined | null;\n hidden: boolean;\n dataNode: SchemaDataNode;\n displayOnly: boolean;\n}\n\nexport interface ActionRendererProps {\n actionId: string;\n actionText: string;\n actionData?: any;\n onClick: () => void;\n className?: string | null;\n style?: React.CSSProperties;\n disabled?: boolean;\n}\n\nexport interface ControlRenderProps {\n control: Control<any>;\n parentPath?: JsonPath[];\n}\n\nexport interface FormContextOptions {\n readonly?: boolean | null;\n hidden?: boolean | null;\n disabled?: boolean | null;\n displayOnly?: boolean;\n}\n\nexport interface DataControlProps {\n definition: DataControlDefinition;\n dataContext: ControlDataContext;\n control: Control<any>;\n formOptions: FormContextOptions;\n style?: React.CSSProperties | undefined;\n renderChild: ChildRenderer;\n elementIndex?: number;\n allowedOptions?: Control<any[] | undefined>;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n schemaInterface?: SchemaInterface;\n designMode?: boolean;\n styleClass?: string;\n layoutClass?: string;\n}\n\nexport type CreateDataProps = (\n controlProps: DataControlProps,\n) => DataRendererProps;\n\nexport interface ControlRenderOptions\n extends FormContextOptions,\n ControlClasses {\n useDataHook?: (c: ControlDefinition) => CreateDataProps;\n actionOnClick?: ControlActionHandler;\n customDisplay?: (\n customId: string,\n displayProps: DisplayRendererProps,\n ) => ReactNode;\n useValidationHook?: (\n validator: SchemaValidator,\n ctx: ValidationContext,\n ) => void;\n useEvalExpressionHook?: UseEvalExpressionHook;\n clearHidden?: boolean;\n schemaInterface?: SchemaInterface;\n elementIndex?: number;\n formData?: FormContextData;\n}\n\nexport function useControlRenderer(\n definition: ControlDefinition,\n fields: SchemaField[],\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n): FC<ControlRenderProps> {\n const r = useUpdatedRef({ definition, fields, renderer, options });\n return useCallback(\n ({ control, parentPath }) => {\n return (\n <ControlRenderer\n {...r.current}\n control={control}\n parentPath={parentPath}\n />\n );\n },\n [r],\n );\n}\nexport function useControlRendererComponent(\n definition: ControlDefinition,\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n parentDataNode: SchemaDataNode,\n): FC<{}> {\n const dataProps = options.useDataHook?.(definition) ?? defaultDataProps;\n const elementIndex = options.elementIndex;\n const schemaInterface = options.schemaInterface ?? defaultSchemaInterface;\n const useExpr = options.useEvalExpressionHook ?? defaultUseEvalExpressionHook;\n\n let dataNode: SchemaDataNode | undefined;\n if (elementIndex != null) {\n dataNode = parentDataNode.getChildElement(elementIndex);\n } else {\n dataNode = lookupDataNode(definition, parentDataNode);\n }\n const useValidation = useMakeValidationHook(\n definition,\n options.useValidationHook,\n );\n const dynamicHooks = useDynamicHooks({\n defaultValueControl: useEvalDefaultValueHook(useExpr, definition),\n visibleControl: useEvalVisibilityHook(useExpr, definition),\n readonlyControl: useEvalReadonlyHook(useExpr, definition),\n disabledControl: useEvalDisabledHook(useExpr, definition),\n allowedOptions: useEvalAllowedOptionsHook(useExpr, definition),\n labelText: useEvalLabelText(useExpr, definition),\n actionData: useEvalActionHook(useExpr, definition),\n customStyle: useEvalStyleHook(\n useExpr,\n DynamicPropertyType.Style,\n definition,\n ),\n layoutStyle: useEvalStyleHook(\n useExpr,\n DynamicPropertyType.LayoutStyle,\n definition,\n ),\n displayControl: useEvalDisplayHook(useExpr, definition),\n });\n\n const r = useUpdatedRef({\n options,\n definition,\n elementIndex,\n parentDataNode,\n dataNode,\n });\n\n const Component = useCallback(() => {\n const stopTracking = useComponentTracking();\n\n try {\n const {\n definition: c,\n options,\n elementIndex,\n parentDataNode: pdn,\n dataNode: dn,\n } = r.current;\n const formData = options.formData ?? {};\n const dataContext: ControlDataContext = {\n schemaInterface,\n dataNode: dn,\n parentNode: pdn,\n formData,\n };\n const {\n readonlyControl,\n disabledControl,\n visibleControl,\n displayControl,\n layoutStyle,\n labelText,\n customStyle,\n allowedOptions,\n defaultValueControl,\n actionData,\n } = dynamicHooks(dataContext);\n\n const visible = visibleControl.current.value;\n const visibility = useControl<Visibility | undefined>(() =>\n visible != null\n ? {\n visible,\n showing: visible,\n }\n : undefined,\n );\n useControlEffect(\n () => visibleControl.value,\n (visible) => {\n if (visible != null)\n visibility.setValue((ex) => ({\n visible,\n showing: ex ? ex.showing : visible,\n }));\n },\n );\n\n const parentControl = parentDataNode.control!;\n const control = dataNode?.control;\n useControlEffect(\n () => [\n visibility.value,\n defaultValueControl.value,\n control?.isNull,\n isDataControlDefinition(definition) && definition.dontClearHidden,\n isDataControlDefinition(definition) &&\n definition.renderOptions?.type == DataRenderType.NullToggle,\n parentControl.isNull,\n options.hidden,\n readonlyControl.value,\n ],\n ([vc, dv, _, dontClear, dontDefault, parentNull, hidden, ro]) => {\n if (!ro) {\n if (control) {\n if (vc && vc.visible === vc.showing) {\n if (hidden || !vc.visible) {\n control.setValue((x) =>\n options.clearHidden && !dontClear\n ? undefined\n : x == null && dontClear && !dontDefault\n ? dv\n : x,\n );\n } else if (!dontDefault)\n control.setValue((x) => (x != null ? x : dv));\n }\n } else if (parentNull) {\n parentControl.setValue((x) => x ?? {});\n }\n }\n },\n true,\n );\n const myOptionsControl = useCalculatedControl<FormContextOptions>(() => ({\n hidden: options.hidden || !visibility.fields?.showing.value,\n readonly: options.readonly || readonlyControl.value,\n disabled: options.disabled || disabledControl.value,\n displayOnly: options.displayOnly || isControlDisplayOnly(c),\n }));\n const myOptions = trackedValue(myOptionsControl);\n useValidation({\n control: control ?? newControl(null),\n hiddenControl: myOptionsControl.fields.hidden,\n dataContext,\n });\n const childOptions: ControlRenderOptions = {\n ...options,\n ...myOptions,\n elementIndex: undefined,\n formData,\n };\n\n useEffect(() => {\n if (\n control &&\n typeof myOptions.disabled === \"boolean\" &&\n control.disabled != myOptions.disabled\n )\n control.disabled = myOptions.disabled;\n }, [control, myOptions.disabled]);\n if (parentControl.isNull) return <></>;\n\n const adornments =\n definition.adornments?.map((x) =>\n renderer.renderAdornment({\n adornment: x,\n dataContext,\n useExpr,\n }),\n ) ?? [];\n const labelAndChildren = renderControlLayout({\n definition: c,\n renderer,\n renderChild: (k, child, options) => {\n const overrideClasses = getGroupClassOverrides(c);\n const { parentDataNode, ...renderOptions } = options ?? {};\n const dContext =\n parentDataNode ?? dataContext.dataNode ?? dataContext.parentNode;\n\n return (\n <NewControlRenderer\n key={k}\n definition={child}\n renderer={renderer}\n parentDataNode={dContext}\n options={{\n ...childOptions,\n ...overrideClasses,\n ...renderOptions,\n }}\n />\n );\n },\n createDataProps: dataProps,\n formOptions: myOptions,\n dataContext,\n control: displayControl ?? control,\n elementIndex,\n schemaInterface,\n labelText,\n displayControl,\n style: customStyle.value,\n allowedOptions,\n customDisplay: options.customDisplay,\n actionDataControl: actionData,\n actionOnClick: options.actionOnClick,\n styleClass: options.styleClass,\n labelClass: options.labelClass,\n useEvalExpression: useExpr,\n useChildVisibility: (childDef, parentNode, dontOverride) => {\n return useEvalVisibilityHook(\n useExpr,\n childDef,\n !dontOverride\n ? lookupDataNode(\n childDef,\n parentNode ?? dataNode ?? parentDataNode,\n )\n : undefined,\n );\n },\n });\n const renderedControl = renderer.renderLayout({\n ...labelAndChildren,\n adornments,\n className: rendererClass(options.layoutClass, c.layoutClass),\n style: layoutStyle.value,\n });\n return renderer.renderVisibility({ visibility, ...renderedControl });\n } finally {\n stopTracking();\n }\n }, [r, dataProps, useValidation, renderer, schemaInterface, dynamicHooks]);\n (Component as any).displayName = \"RenderControl\";\n return Component;\n}\n\nexport function ControlRenderer({\n definition,\n fields,\n renderer,\n options,\n control,\n parentPath,\n}: {\n definition: ControlDefinition;\n fields: SchemaField[];\n renderer: FormRenderer;\n options?: ControlRenderOptions;\n control: Control<any>;\n parentPath?: JsonPath[];\n}) {\n const schemaDataNode = makeSchemaDataNode(\n createSchemaLookup({ \"\": fields }).getSchema(\"\")!,\n control,\n );\n const Render = useControlRendererComponent(\n definition,\n renderer,\n options,\n schemaDataNode,\n );\n return <Render />;\n}\n\nexport function NewControlRenderer({\n definition,\n renderer,\n options,\n parentDataNode,\n}: {\n definition: ControlDefinition;\n renderer: FormRenderer;\n options?: ControlRenderOptions;\n parentDataNode: SchemaDataNode;\n}) {\n const Render = useControlRendererComponent(\n definition,\n renderer,\n options,\n parentDataNode,\n );\n return <Render />;\n}\n\nexport function defaultDataProps({\n definition,\n control,\n formOptions,\n style,\n allowedOptions,\n schemaInterface = defaultSchemaInterface,\n styleClass,\n ...props\n}: DataControlProps): DataRendererProps {\n const dataNode = props.dataContext.dataNode!;\n const field = dataNode.schema.field;\n const className = rendererClass(styleClass, definition.styleClass);\n const displayOnly = !!formOptions.displayOnly;\n const required = !!definition.required && !displayOnly;\n const fieldOptions = schemaInterface.getOptions(field);\n const _allowed = allowedOptions?.value ?? [];\n const allowed = Array.isArray(_allowed) ? _allowed : [_allowed];\n return {\n dataNode,\n definition,\n childDefinitions: definition.children ?? [],\n control,\n field,\n id: \"c\" + control.uniqueId,\n options:\n allowed.length > 0\n ? allowed\n .map((x) =>\n typeof x === \"object\"\n ? x\n : fieldOptions?.find((y) => y.value == x) ?? {\n name: x.toString(),\n value: x,\n },\n )\n .filter((x) => x != null)\n : fieldOptions,\n readonly: !!formOptions.readonly,\n displayOnly,\n renderOptions: definition.renderOptions ?? { type: \"Standard\" },\n required,\n hidden: !!formOptions.hidden,\n className,\n style,\n ...props,\n };\n}\n\nexport interface ChildRendererOptions {\n elementIndex?: number;\n parentDataNode?: SchemaDataNode;\n formData?: FormContextData;\n displayOnly?: boolean;\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\nexport type ChildRenderer = (\n k: Key,\n child: ControlDefinition,\n options?: ChildRendererOptions,\n) => ReactNode;\n\nexport interface RenderControlProps {\n definition: ControlDefinition;\n renderer: FormRenderer;\n renderChild: ChildRenderer;\n createDataProps: CreateDataProps;\n formOptions: FormContextOptions;\n dataContext: ControlDataContext;\n control?: Control<any>;\n labelText?: Control<string | null | undefined>;\n elementIndex?: number;\n displayControl?: Control<string | undefined>;\n style?: React.CSSProperties;\n allowedOptions?: Control<any[] | undefined>;\n actionDataControl?: Control<any | undefined | null>;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n actionOnClick?: ControlActionHandler;\n schemaInterface?: SchemaInterface;\n designMode?: boolean;\n customDisplay?: (\n customId: string,\n displayProps: DisplayRendererProps,\n ) => ReactNode;\n labelClass?: string;\n styleClass?: string;\n}\nexport function renderControlLayout(\n props: RenderControlProps,\n): ControlLayoutProps {\n const {\n definition: c,\n renderer,\n renderChild,\n control,\n dataContext,\n createDataProps: dataProps,\n displayControl,\n style,\n labelText,\n useChildVisibility,\n designMode,\n customDisplay,\n useEvalExpression,\n labelClass,\n styleClass,\n } = props;\n\n if (isDataControlDefinition(c)) {\n return renderData(c);\n }\n if (isGroupControlsDefinition(c)) {\n if (c.compoundField) {\n return renderData(\n dataControl(c.compoundField, c.title, {\n children: c.children,\n hideTitle: c.groupOptions?.hideTitle,\n }),\n );\n }\n\n return {\n processLayout: renderer.renderGroup({\n childDefinitions: c.children ?? [],\n definition: c,\n renderChild,\n useEvalExpression,\n dataContext,\n renderOptions: c.groupOptions ?? { type: \"Standard\" },\n className: rendererClass(styleClass, c.styleClass),\n useChildVisibility,\n style,\n designMode,\n }),\n label: {\n label: labelText?.value ?? c.title,\n className: rendererClass(labelClass, c.labelClass),\n type: LabelType.Group,\n hide: c.groupOptions?.hideTitle,\n },\n };\n }\n if (isActionControlsDefinition(c)) {\n const actionData = props.actionDataControl?.value ?? c.actionData;\n return {\n children: renderer.renderAction({\n actionText: labelText?.value ?? c.title ?? c.actionId,\n actionId: c.actionId,\n actionData,\n onClick:\n props.actionOnClick?.(c.actionId, actionData, dataContext) ??\n (() => {}),\n className: rendererClass(styleClass, c.styleClass),\n style,\n }),\n };\n }\n if (isDisplayControlsDefinition(c)) {\n const data = c.displayData ?? {};\n const displayProps = {\n data,\n className: rendererClass(styleClass, c.styleClass),\n style,\n display: displayControl,\n dataContext,\n };\n if (data.type === DisplayDataType.Custom && customDisplay) {\n return {\n children: customDisplay((data as CustomDisplay).customId, displayProps),\n };\n }\n return {\n children: renderer.renderDisplay(displayProps),\n };\n }\n return {};\n\n function renderData(c: DataControlDefinition) {\n if (!control) return { children: \"No control for: \" + c.field };\n const rendererProps = dataProps(\n props as RenderControlProps & {\n definition: DataControlDefinition;\n control: Control<any>;\n },\n );\n\n const label = !c.hideTitle\n ? controlTitle(\n labelText?.value ?? c.title,\n props.dataContext.dataNode!.schema.field,\n )\n : undefined;\n return {\n processLayout: renderer.renderData(rendererProps),\n label: {\n type:\n (c.children?.length ?? 0) > 0 ? LabelType.Group : LabelType.Control,\n label,\n forId: rendererProps.id,\n required: c.required && !props.formOptions.displayOnly,\n hide: c.hideTitle,\n className: rendererClass(labelClass, c.labelClass),\n },\n errorControl: control,\n };\n }\n}\n\ntype MarkupKeys = keyof Omit<\n RenderedLayout,\n \"errorControl\" | \"style\" | \"className\" | \"wrapLayout\"\n>;\nexport function appendMarkup(\n k: MarkupKeys,\n markup: ReactNode,\n): (layout: RenderedLayout) => void {\n return (layout) =>\n (layout[k] = (\n <>\n {layout[k]}\n {markup}\n </>\n ));\n}\n\nexport function wrapMarkup(\n k: MarkupKeys,\n wrap: (ex: ReactNode) => ReactNode,\n): (layout: RenderedLayout) => void {\n return (layout) => (layout[k] = wrap(layout[k]));\n}\n\nexport function layoutKeyForPlacement(pos: AdornmentPlacement): MarkupKeys {\n switch (pos) {\n case AdornmentPlacement.ControlEnd:\n return \"controlEnd\";\n case AdornmentPlacement.ControlStart:\n return \"controlStart\";\n case AdornmentPlacement.LabelStart:\n return \"labelStart\";\n case AdornmentPlacement.LabelEnd:\n return \"labelEnd\";\n }\n}\n\nexport function wrapLayout(\n wrap: (layout: ReactElement) => ReactElement,\n): (renderedLayout: RenderedLayout) => void {\n return (rl) => {\n const orig = rl.wrapLayout;\n rl.wrapLayout = (x) => wrap(orig(x));\n };\n}\n\nexport function appendMarkupAt(\n pos: AdornmentPlacement,\n markup: ReactNode,\n): (layout: RenderedLayout) => void {\n return appendMarkup(layoutKeyForPlacement(pos), markup);\n}\n\nexport function wrapMarkupAt(\n pos: AdornmentPlacement,\n wrap: (ex: ReactNode) => ReactNode,\n): (layout: RenderedLayout) => void {\n return wrapMarkup(layoutKeyForPlacement(pos), wrap);\n}\n\nexport function renderLayoutParts(\n props: ControlLayoutProps,\n renderer: FormRenderer,\n): RenderedLayout {\n const { className, children, style, errorControl, label, adornments } =\n props.processLayout?.(props) ?? props;\n const layout: RenderedLayout = {\n children,\n errorControl,\n style,\n className: className!,\n wrapLayout: (x) => x,\n };\n (adornments ?? [])\n .sort((a, b) => a.priority - b.priority)\n .forEach((x) => x.apply(layout));\n layout.label =\n label && !label.hide\n ? renderer.renderLabel(label, layout.labelStart, layout.labelEnd)\n : undefined;\n return layout;\n}\n\nexport function controlTitle(\n title: string | undefined | null,\n field: SchemaField,\n) {\n return title ? title : fieldDisplayName(field);\n}\n\nexport function getLengthRestrictions(definition: DataControlDefinition) {\n const lengthVal = definition.validators?.find(\n (x) => x.type === ValidatorType.Length,\n ) as LengthValidator | undefined;\n\n return { min: lengthVal?.min, max: lengthVal?.max };\n}\n\nexport function createArrayActions(\n control: Control<any[]>,\n field: SchemaField,\n options?: ArrayActionOptions,\n): Pick<ArrayRendererProps, \"addAction\" | \"removeAction\" | \"arrayControl\"> {\n const noun = field.displayName ?? field.field;\n const {\n addText,\n noAdd,\n removeText,\n noRemove,\n removeActionId,\n addActionId,\n disabled,\n readonly,\n designMode,\n } = options ?? {};\n return {\n arrayControl: control,\n addAction:\n !readonly && !noAdd\n ? {\n actionId: addActionId ? addActionId : \"add\",\n actionText: addText ? addText : \"Add \" + noun,\n onClick: () =>\n !designMode && addElement(control, elementValueForField(field)),\n disabled,\n }\n : undefined,\n removeAction:\n !readonly && !noRemove\n ? (i: number) => ({\n actionId: removeActionId ? removeActionId : \"remove\",\n actionText: removeText ? removeText : \"Remove\",\n onClick: () => !designMode && removeElement(control, i),\n disabled,\n })\n : undefined,\n };\n}\n\nexport function applyArrayLengthRestrictions(\n {\n arrayControl,\n min,\n max,\n addAction: aa,\n removeAction: ra,\n required,\n }: Pick<\n ArrayRendererProps,\n \"addAction\" | \"removeAction\" | \"arrayControl\" | \"min\" | \"max\" | \"required\"\n >,\n disable?: boolean,\n): Pick<ArrayRendererProps, \"addAction\" | \"removeAction\"> & {\n addDisabled: boolean;\n removeDisabled: boolean;\n} {\n const [removeAllowed, addAllowed] = applyLengthRestrictions(\n arrayControl.elements?.length ?? 0,\n min == null && required ? 1 : min,\n max,\n true,\n true,\n );\n return {\n addAction: disable || addAllowed ? aa : undefined,\n removeAction: disable || removeAllowed ? ra : undefined,\n removeDisabled: !removeAllowed,\n addDisabled: !addAllowed,\n };\n}\n\nexport function fieldOptionAdornment(p: DataRendererProps) {\n return (o: FieldOption, i: number, selected: boolean) => (\n <RenderArrayElements array={p.childDefinitions}>\n {(cd, i) =>\n p.renderChild(i, cd, {\n parentDataNode: p.dataContext.parentNode,\n formData: { option: o, optionSelected: selected },\n })\n }\n </RenderArrayElements>\n );\n}\n","import { ReactNode } from \"react\";\nimport {\n ActionRendererProps,\n AdornmentProps,\n AdornmentRenderer,\n ArrayRendererProps,\n ControlLayoutProps,\n DataRendererProps,\n DisplayRendererProps,\n FormRenderer,\n GroupRendererProps,\n LabelRendererProps,\n LabelType,\n} from \"./controlRender\";\nimport { hasOptions } from \"./util\";\nimport {\n ActionRendererRegistration,\n AdornmentRendererRegistration,\n ArrayRendererRegistration,\n DataRendererRegistration,\n DefaultRenderers,\n DisplayRendererRegistration,\n GroupRendererRegistration,\n LabelRendererRegistration,\n LayoutRendererRegistration,\n RendererRegistration,\n VisibilityRendererRegistration,\n} from \"./renderers\";\nimport { DataRenderType } from \"./types\";\n\nexport function createFormRenderer(\n customRenderers: RendererRegistration[] = [],\n defaultRenderers: DefaultRenderers,\n): FormRenderer {\n const dataRegistrations = customRenderers.filter(isDataRegistration);\n const groupRegistrations = customRenderers.filter(isGroupRegistration);\n const adornmentRegistrations = customRenderers.filter(\n isAdornmentRegistration,\n );\n const displayRegistrations = customRenderers.filter(isDisplayRegistration);\n const labelRenderers = customRenderers.filter(isLabelRegistration);\n const arrayRenderers = customRenderers.filter(isArrayRegistration);\n const actionRenderers = customRenderers.filter(isActionRegistration);\n const layoutRenderers = customRenderers.filter(isLayoutRegistration);\n const visibilityRenderer =\n customRenderers.find(isVisibilityRegistration) ??\n defaultRenderers.visibility;\n\n const formRenderers: FormRenderer = {\n renderAction,\n renderData,\n renderGroup,\n renderDisplay,\n renderLabel,\n renderArray,\n renderAdornment,\n renderLayout,\n renderVisibility: visibilityRenderer.render,\n renderLabelText,\n };\n\n function renderLabelText(label: ReactNode) {\n return renderLabel({ label, type: LabelType.Text }, undefined, undefined);\n }\n\n function renderLayout(props: ControlLayoutProps) {\n const renderer =\n layoutRenderers.find((x) => !x.match || x.match(props)) ??\n defaultRenderers.renderLayout;\n return renderer.render(props, formRenderers);\n }\n\n function renderAdornment(props: AdornmentProps): AdornmentRenderer {\n const renderer =\n adornmentRegistrations.find((x) =>\n isOneOf(x.adornmentType, props.adornment.type),\n ) ?? defaultRenderers.adornment;\n return renderer.render(props, formRenderers);\n }\n\n function renderArray(props: ArrayRendererProps) {\n return (arrayRenderers[0] ?? defaultRenderers.array).render(\n props,\n formRenderers,\n );\n }\n\n function renderLabel(\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) {\n const renderer =\n labelRenderers.find((x) => isOneOf(x.labelType, props.type)) ??\n defaultRenderers.label;\n return renderer.render(props, labelStart, labelEnd, formRenderers);\n }\n\n function renderData(\n props: DataRendererProps,\n ): (layout: ControlLayoutProps) => ControlLayoutProps {\n const {\n renderOptions: { type: renderType },\n field,\n } = props;\n\n const options = hasOptions(props);\n const renderer =\n dataRegistrations.find(\n (x) =>\n (x.collection ?? false) ===\n (props.elementIndex == null && (field.collection ?? false)) &&\n (x.options ?? false) === options &&\n ((x.schemaType &&\n renderType == DataRenderType.Standard &&\n isOneOf(x.schemaType, field.type)) ||\n (x.renderType && isOneOf(x.renderType, renderType)) ||\n (x.match && x.match(props))),\n ) ?? defaultRenderers.data;\n\n const result = renderer.render(props, formRenderers);\n if (typeof result === \"function\") return result;\n return (l) => ({ ...l, children: result });\n }\n\n function renderGroup(\n props: GroupRendererProps,\n ): (layout: ControlLayoutProps) => ControlLayoutProps {\n const renderType = props.renderOptions.type;\n const renderer =\n groupRegistrations.find((x) => isOneOf(x.renderType, renderType)) ??\n defaultRenderers.group;\n const result = renderer.render(props, formRenderers);\n if (typeof result === \"function\") return result;\n return (l) => ({ ...l, children: result });\n }\n\n function renderAction(props: ActionRendererProps) {\n const renderer =\n actionRenderers.find((x) => isOneOf(x.actionType, props.actionId)) ??\n defaultRenderers.action;\n return renderer.render(props, formRenderers);\n }\n\n function renderDisplay(props: DisplayRendererProps) {\n const renderType = props.data.type;\n const renderer =\n displayRegistrations.find((x) => isOneOf(x.renderType, renderType)) ??\n defaultRenderers.display;\n return renderer.render(props, formRenderers);\n }\n\n return formRenderers;\n}\n\nfunction isOneOf<A>(x: A | A[] | undefined, v: A) {\n return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;\n}\n\nfunction isAdornmentRegistration(\n x: RendererRegistration,\n): x is AdornmentRendererRegistration {\n return x.type === \"adornment\";\n}\n\nfunction isDataRegistration(\n x: RendererRegistration,\n): x is DataRendererRegistration {\n return x.type === \"data\";\n}\n\nfunction isGroupRegistration(\n x: RendererRegistration,\n): x is GroupRendererRegistration {\n return x.type === \"group\";\n}\n\nfunction isLabelRegistration(\n x: RendererRegistration,\n): x is LabelRendererRegistration {\n return x.type === \"label\";\n}\n\nfunction isLayoutRegistration(\n x: RendererRegistration,\n): x is LayoutRendererRegistration {\n return x.type === \"layout\";\n}\n\nfunction isVisibilityRegistration(\n x: RendererRegistration,\n): x is VisibilityRendererRegistration {\n return x.type === \"visibility\";\n}\n\nfunction isActionRegistration(\n x: RendererRegistration,\n): x is ActionRendererRegistration {\n return x.type === \"action\";\n}\n\nfunction isDisplayRegistration(\n x: RendererRegistration,\n): x is DisplayRendererRegistration {\n return x.type === \"display\";\n}\n\nfunction isArrayRegistration(\n x: RendererRegistration,\n): x is ArrayRendererRegistration {\n return x.type === \"array\";\n}\n","import { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n ActionRendererProps,\n AdornmentProps,\n AdornmentRenderer,\n ArrayRendererProps,\n ControlLayoutProps,\n DataRendererProps,\n DisplayRendererProps,\n FormRenderer,\n GroupRendererProps,\n LabelRendererProps,\n LabelType,\n RenderedControl,\n VisibilityRendererProps,\n} from \"./controlRender\";\nimport {\n AccordionAdornment,\n ControlAdornment,\n ControlAdornmentType,\n IconAdornment,\n SetFieldAdornment,\n} from \"./types\";\n\nexport interface DefaultRenderers {\n data: DataRendererRegistration;\n label: LabelRendererRegistration;\n action: ActionRendererRegistration;\n array: ArrayRendererRegistration;\n group: GroupRendererRegistration;\n display: DisplayRendererRegistration;\n adornment: AdornmentRendererRegistration;\n renderLayout: LayoutRendererRegistration;\n visibility: VisibilityRendererRegistration;\n}\n\nexport interface LayoutRendererRegistration {\n type: \"layout\";\n match?: (props: ControlLayoutProps) => boolean;\n render: (\n props: ControlLayoutProps,\n renderers: FormRenderer,\n ) => RenderedControl;\n}\nexport interface DataRendererRegistration {\n type: \"data\";\n schemaType?: string | string[];\n renderType?: string | string[];\n options?: boolean;\n collection?: boolean;\n match?: (props: DataRendererProps) => boolean;\n render: (\n props: DataRendererProps,\n renderers: FormRenderer,\n ) => ReactNode | ((layout: ControlLayoutProps) => ControlLayoutProps);\n}\n\nexport interface LabelRendererRegistration {\n type: \"label\";\n labelType?: LabelType | LabelType[];\n render: (\n labelProps: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n renderers: FormRenderer,\n ) => ReactNode;\n}\n\nexport interface ActionRendererRegistration {\n type: \"action\";\n actionType?: string | string[];\n render: (props: ActionRendererProps, renderers: FormRenderer) => ReactElement;\n}\n\nexport interface ArrayRendererRegistration {\n type: \"array\";\n render: (props: ArrayRendererProps, renderers: FormRenderer) => ReactElement;\n}\n\nexport interface GroupRendererRegistration {\n type: \"group\";\n renderType?: string | string[];\n render: (\n props: GroupRendererProps,\n renderers: FormRenderer,\n ) => ReactElement | ((layout: ControlLayoutProps) => ControlLayoutProps);\n}\n\nexport interface DisplayRendererRegistration {\n type: \"display\";\n renderType?: string | string[];\n render: (\n props: DisplayRendererProps,\n renderers: FormRenderer,\n ) => ReactElement;\n}\n\nexport interface AdornmentRendererRegistration {\n type: \"adornment\";\n adornmentType?: string | string[];\n render: (props: AdornmentProps, renderers: FormRenderer) => AdornmentRenderer;\n}\n\nexport interface VisibilityRendererRegistration {\n type: \"visibility\";\n render: (props: VisibilityRendererProps) => ReactNode;\n}\n\nexport type RendererRegistration =\n | DataRendererRegistration\n | GroupRendererRegistration\n | DisplayRendererRegistration\n | ActionRendererRegistration\n | LabelRendererRegistration\n | ArrayRendererRegistration\n | AdornmentRendererRegistration\n | LayoutRendererRegistration\n | VisibilityRendererRegistration;\n\nexport function isIconAdornment(a: ControlAdornment): a is IconAdornment {\n return a.type === ControlAdornmentType.Icon;\n}\n\nexport function isAccordionAdornment(\n a: ControlAdornment,\n): a is AccordionAdornment {\n return a.type === ControlAdornmentType.Accordion;\n}\n\nexport function isSetFieldAdornment(\n a: ControlAdornment,\n): a is SetFieldAdornment {\n return a.type === ControlAdornmentType.SetField;\n}\n\nexport function createLayoutRenderer(\n render: LayoutRendererRegistration[\"render\"],\n options?: Partial<LayoutRendererRegistration>,\n): LayoutRendererRegistration {\n return { type: \"layout\", render, ...options };\n}\n\nexport function createActionRenderer(\n actionId: string | string[] | undefined,\n render: ActionRendererRegistration[\"render\"],\n options?: Partial<ActionRendererRegistration>,\n): ActionRendererRegistration {\n return { type: \"action\", actionType: actionId, render, ...options };\n}\n\nexport function createArrayRenderer(\n render: ArrayRendererRegistration[\"render\"],\n options?: Partial<ArrayRendererRegistration>,\n): ArrayRendererRegistration {\n return { type: \"array\", render, ...options };\n}\n\nexport function createDataRenderer(\n render: DataRendererRegistration[\"render\"],\n options?: Partial<DataRendererRegistration>,\n): DataRendererRegistration {\n return { type: \"data\", render, ...options };\n}\n\nexport function createGroupRenderer(\n render: GroupRendererRegistration[\"render\"],\n options?: Partial<GroupRendererRegistration>,\n): GroupRendererRegistration {\n return { type: \"group\", render, ...options };\n}\n\nexport function createDisplayRenderer(\n render: DisplayRendererRegistration[\"render\"],\n options?: Partial<DisplayRendererRegistration>,\n): DisplayRendererRegistration {\n return { type: \"display\", render, ...options };\n}\n\nexport function createLabelRenderer(\n render: LabelRendererRegistration[\"render\"],\n options?: Partial<LabelRendererRegistration>,\n): LabelRendererRegistration {\n return { type: \"label\", render, ...options };\n}\n\nexport function createVisibilityRenderer(\n render: VisibilityRendererRegistration[\"render\"],\n options?: Partial<VisibilityRendererRegistration>,\n): VisibilityRendererRegistration {\n return { type: \"visibility\", render, ...options };\n}\n\nexport function createAdornmentRenderer(\n render: AdornmentRendererRegistration[\"render\"],\n options?: Partial<AdornmentRendererRegistration>,\n): AdornmentRendererRegistration {\n return { type: \"adornment\", ...options, render };\n}\n"],"names":["FieldType","ValidationMessageType","ControlDefinitionType","DynamicPropertyType","ExpressionType","AdornmentPlacement","ControlAdornmentType","DataRenderType","SyncTextType","GroupRenderType","DisplayDataType","ValidatorType","DateComparison","isDataControlDefinition","x","type","Data","isGroupControlsDefinition","Group","isDisplayControlsDefinition","Display","isActionControlsDefinition","Action","visitControlDefinition","visitor","defaultValue","action","data","display","group","isDisplayOnlyRenderer","options","DisplayOnly","isDataGroupRenderer","findField","fields","field","find","isScalarField","sf","isCompoundField","Compound","isDataControl","c","makeScalarField","n","_extends","defaultScalarField","displayName","String","defaultCompoundField","collection","children","mergeField","mergeInto","existing","map","onlyForTypes","mergeTypes","concat","f","s","extras","filter","includes","length","mergeFields","name","value","newFields","withType","isTypeField","addFieldOption","reduce","af","typeField","_typeField$options","some","resolveSchemas","schemaMap","out","Object","keys","forEach","resolveSchemaType","resolvedFields","schemaRef","push","applyDefaultValues","v","doneSet","defaultValueForFields","has","Set","add","applyValue","applyDefaultForField","defaultValueForField","parent","notElement","required","treeChildren","fromEntries","forceNotNull","undefined","isRequired","childValue","notNullable","elementValueForField","fieldHasTag","tag","_field$tags","Boolean","tags","fieldDisplayName","_field$displayName","hasOptions","o","_o$options$length","_o$options","defaultControlForField","title","_sf$tags","htmlEditor","renderOptions","HtmlEditor","Standard","findControlsForCompound","compound","definition","compoundField","_definition$children$","_definition$children","flatMap","d","findCompoundGroups","controls","cf","groups","findNonDataGroups","_x$children","_x$children2","existsInGroups","lookup","_c$children","childLookup","control","_control$children2","cloneChildren","_c$children2","addMissingControls","rootLookup","_ref","_f$tags","groupToAdd","startsWith","insertGroup","groupName","substring","newControl","useUpdatedRef","a","r","useRef","current","isControlReadonly","readonly","isControlDisabled","disabled","getDisplayOnlyOptions","jsonPathString","jsonPath","customIndex","i","_customIndex","getOverrideClass","className","rendererClass","controlClass","globalClass","oc","clsx","makeHookDepString","deps","asHookDep","toDepString","join","useDynamicHooks","hooks","hookEntries","entries","ref","state","useCallback","p","_ref2","runHook","toString","applyLengthRestrictions","min","max","minValue","maxValue","getGroupRendererOptions","def","groupOptions","getGroupClassOverrides","go","childLayoutClass","childStyleClass","childLabelClass","layoutClass","styleClass","labelClass","isControlDisplayOnly","_getGroupRendererOpti","displayOnly","dataControl","validatorOptions","adornmentOptions","renderOptionsFor","checkListOptions","CheckList","radioButtonOptions","Radio","lengthValidatorOptions","Length","jsonataValidatorOptions","Jsonata","dateValidatorOptions","Date","accordionOptions","Accordion","textfieldOptions","Textfield","displayOnlyOptions","jsonataOptions","emptyGroupDefinition","hideTitle","applyExtensionToSchema","extension","outMap","cro","Array","isArray","cr","_cr$fields","MissingField","Any","nodeForSchema","node","getSchema","getChildNode","fieldName","childField","getChildNodes","otherRef","createSchemaLookup","schemaId","rootSchemaNode","nodeForControl","makeSchemaDataNode","schema","elementIndex","dataNode","getChild","schemaNode","_objControl$fields","objControl","isNull","getChildElement","_control$elements","elements","fieldPathForDefinition","split","lookupDataNode","parentNode","fieldNamePath","schemaDataForFieldPath","schemaDataForFieldRef","fieldRef","_fieldRef$split","traverseSchemaPath","fieldPath","acc","next","childNode","schemaForFieldPath","traverseParents","get","until","outArray","reverse","getRootDataNode","getJsonPath","visitControlDataArray","context","cb","_step","_iterator","_createForOfIteratorHelperLoose","done","visitControlData","ctx","processData","result","fieldNode","cIndex","_iterator2","_control$elements2","elemChild","elemResult","cfResult","useEvalVisibilityHook","useEvalExpressionHook","overrideDataNode","makeDynamicPropertyHook","useEvalDynamicBoolHook","Visible","useComputed","matchesType","hideDisplayOnly","schemaInterface","useEvalReadonlyHook","Readonly","useCalculatedControl","useEvalStyleHook","property","useEvalDynamicHook","useControl","useEvalAllowedOptionsHook","AllowedOptions","useEvalDisabledHook","Disabled","_ctx$dataNode","_dataControl$meta$nul","meta","useEvalDisplayHook","useEvalDefaultValueHook","DefaultValue","_ref3","_ctx$dataNode2","_ref4","dcv","defaultEvalHooks","expr","coerce","bindings","formData","useJsonataExpression","expression","UUID","useUuidExpression","fvExpr","otherField","_otherField$control","useDataExpression","DataMatch","_otherField$control2","fv","useDataMatchExpression","NotEmpty","_otherField$control3","isEmptyValue","useNotEmptyExpression","defaultUseEvalExpressionHook","makeEvalExpressionHook","_definition$dynamic","dynamic","types","typeNode","_context$control","displayOptions","emptyText","uuidv4","v4","jExpr","path","pathString","fullExpr","compiledExpr","useMemo","jsonata","e","console","error","listenerRef","updateRef","useRefState","makeChangeTracker","l","addAfterChangesCallback","useEffect","apply","_ref$current","collect","updateSubscriptions","_temp","_coerce","Promise","resolve","evaluate","trackedValue","collectChanges","then","_compiledExpr$evaluat","_finallyRethrows","_wasThrown","_result","reject","useEvalActionHook","useExpr","ActionData","useEvalLabelText","Label","dynamicValue","makeDefault","_dynamicValue$runHook","useMakeValidationHook","useValidatorFor","_dd$validators","useDefaultValidator","dd","refData","depString","validators","_ctx$dataContext$data","_ctx$dataContext$data2","_dd$validators2","dataContext","hiddenControl","useValueChangeEffect","setError","useValidator","validationMessageText","index","validator","useLengthValidator","useJsonataValidator","useDateValidator","sdn","errorMsg","JSON","stringify","lv","len","controlLength","MinLength","setValue","from","MaxLength","dv","comparisonDate","fixedDate","parseToMillis","nowDate","UTC","getFullYear","getMonth","getDate","daysFromCurrent","selDate","notAfter","comparison","NotAfter","NotAfterDate","NotBeforeDate","LabelType","DefaultSchemaInterface","boolStrings","parseDateTime","parse","this","_proto","prototype","messageType","actual","expected","toDateString","getDataOptions","getNodeOptions","getOptions","getFilterOptions","array","DateTime","Time","searchText","_this$textValue$toLow","_this$textValue","textValue","toLowerCase","element","option","toLocaleDateString","toLocaleString","toLocaleTimeString","Bool","_control$elements$len","valueLength","compareValue","v1","v2","localeCompare","Int","Double","defaultSchemaInterface","useControlRendererComponent","renderer","parentDataNode","_options$useDataHook","_options$schemaInterf","_options$useEvalExpre","dataProps","useDataHook","defaultDataProps","useValidation","useValidationHook","dynamicHooks","defaultValueControl","visibleControl","readonlyControl","disabledControl","allowedOptions","labelText","actionData","customStyle","Style","layoutStyle","LayoutStyle","displayControl","Component","stopTracking","useComponentTracking","_options$formData","_dataNode","_definition$adornment","_definition$adornment2","_r$current","_dynamicHooks","visible","visibility","showing","useControlEffect","ex","parentControl","_definition$renderOpt","dontClearHidden","NullToggle","hidden","vc","_","dontClear","dontDefault","parentNull","ro","clearHidden","myOptionsControl","_visibility$fields","myOptions","childOptions","React","createElement","Fragment","adornments","renderAdornment","adornment","labelAndChildren","renderControlLayout","renderChild","k","child","overrideClasses","_objectWithoutPropertiesLoose","_excluded","dContext","NewControlRenderer","key","createDataProps","formOptions","style","customDisplay","actionDataControl","actionOnClick","useEvalExpression","useChildVisibility","childDef","dontOverride","_ref5","renderedControl","renderLayout","renderVisibility","ControlRenderer","_ref6","_effect","_useComponentTracking","Render","_ref7","_effect2","_ref8","_allowedOptions$value","_definition$renderOpt2","_ref8$schemaInterface","props","_excluded2","fieldOptions","_allowed","allowed","childDefinitions","id","uniqueId","_fieldOptions$find","y","_c$groupOptions2","_labelText$value","_c$groupOptions3","_c$groupOptions","designMode","renderData","processLayout","renderGroup","label","hide","_props$actionDataCont","_props$actionDataCont2","_ref9","_labelText$value2","_props$actionOnClick","renderAction","actionText","actionId","onClick","_c$displayData","displayData","displayProps","Custom","customId","renderDisplay","_labelText$value3","_c$children$length","rendererProps","controlTitle","Control","forId","errorControl","appendMarkup","markup","layout","wrapMarkup","wrap","layoutKeyForPlacement","pos","ControlEnd","ControlStart","LabelStart","LabelEnd","isOneOf","isAdornmentRegistration","isDataRegistration","isGroupRegistration","isLabelRegistration","isLayoutRegistration","isVisibilityRegistration","isActionRegistration","isDisplayRegistration","isArrayRegistration","handlers","slice","call","arguments","_handlers$i","_handlers","res","_ref12","disable","_arrayControl$element","_arrayControl$element2","aa","addAction","ra","removeAction","_applyLengthRestricti","arrayControl","removeAllowed","addAllowed","removeDisabled","addDisabled","extensions","cleanDataForSchema","removeIfDefault","typeValue","cleanableFields","_x$onlyForTypes$lengt","_x$onlyForTypes","_x$onlyForTypes2","childFields","cv","other","render","actionType","noun","_ref11","removeText","removeActionId","noAdd","addActionId","addText","addElement","noRemove","removeElement","formMap","getForm","formId","rootNode","customRenderers","defaultRenderers","_customRenderers$find","dataRegistrations","groupRegistrations","adornmentRegistrations","displayRegistrations","labelRenderers","arrayRenderers","actionRenderers","layoutRenderers","formRenderers","_actionRenderers$find","_dataRegistrations$fi","renderType","_x$collection","_field$collection","_x$options","schemaType","match","_groupRegistrations$f","_displayRegistrations","renderLabel","renderArray","_arrayRenderers$","_adornmentRegistratio","adornmentType","_layoutRenderers$find","renderLabelText","Text","labelStart","labelEnd","_labelRenderers$find","labelType","selected","RenderArrayElements","cd","optionSelected","childPath","base","fieldNames","foundFields","currentFields","nextField","getAllReferencedClasses","collectExtra","_c$children3","_collectExtra","childClasses","tc","values","_definition$validator","lengthVal","html","Html","Flex","Grid","Icon","SelectChild","SetField","o1","o2","doMerge","hasOwnProperty","_props$processLayout","_ref10","wrapLayout","sort","b","priority","_fieldRef$split2","text","root","parentPath","rl","orig"],"mappings":"iMAuBYA,EA0CAC,EA0CAC,EAYAC,EAiBAC,EAuCAC,EAOAC,EAuDAC,EA4GAC,EA+BAC,EA0CAC,EAgCAC,EAoBAC,8DAYN,SAAUC,EACdC,GAEA,OAAOA,EAAEC,OAASb,QAAqBA,sBAACc,IAC1C,CAEgB,SAAAC,EACdH,GAEA,OAAOA,EAAEC,OAASb,QAAqBA,sBAACgB,KAC1C,CAEM,SAAUC,EACdL,GAEA,OAAOA,EAAEC,OAASb,QAAqBA,sBAACkB,OAC1C,CAEgB,SAAAC,EACdP,GAEA,OAAOA,EAAEC,OAASb,QAAAA,sBAAsBoB,MAC1C,UASgBC,EACdT,EACAU,EACAC,GAEA,OAAQX,EAAEC,MACR,KAAKb,QAAAA,sBAAsBoB,OACzB,OAAOE,EAAQE,OAAOZ,GACxB,KAAKZ,QAAqBA,sBAACc,KACzB,OAAOQ,EAAQG,KAAKb,GACtB,KAAKZ,QAAqBA,sBAACkB,QACzB,OAAOI,EAAQI,QAAQd,GACzB,KAAKZ,QAAqBA,sBAACgB,MACzB,OAAOM,EAAQK,MAAMf,GACvB,QACE,OAAOW,EAAaX,GAE1B,CAmBM,SAAUgB,EACdC,GAEA,OAAOA,EAAQhB,OAASR,QAAcA,eAACyB,WACzC,CAQgB,SAAAC,EACdF,GAEA,OAAc,MAAPA,OAAO,EAAPA,EAAShB,QAASR,QAAAA,eAAeW,KAC1C,CAQgB,SAAAgB,EACdC,EACAC,GAEA,OAAOD,EAAOE,KAAK,SAACvB,GAAM,OAAAA,EAAEsB,QAAUA,CAAK,EAC7C,CAEM,SAAUE,EAAcC,GAC5B,OAAQC,EAAgBD,EAC1B,CAEgB,SAAAC,EAAgBD,GAC9B,OAAOA,EAAGxB,OAASf,QAASA,UAACyC,QAC/B,CAEM,SAAUC,EACdC,GAEA,OAAOA,EAAE5B,OAASb,QAAqBA,sBAACc,IAC1C,soCC1fM,SAAU4B,EACdb,GAEA,OAAO,SAACc,GAACC,OAAAA,EAAWC,CAAAA,EAAAA,EAAmBF,EAAGA,GAAOd,EACnD,CAAA,CA4HgB,SAAAgB,EACdX,EACAY,GAIA,MAAO,CACLZ,MAAAA,EACAY,YAAAA,EACAjC,KAAMf,kBAAUiD,OAEpB,UAEgBC,EACdd,EACAY,EACAG,GAIA,MAAO,CACLf,MAAAA,EACAY,YAAAA,EACAjC,KAAMf,QAAAA,UAAUyC,SAChBU,WAAAA,EACAC,SAAU,GAEd,CAEgB,SAAAC,EACdjB,EACAkB,GAEA,IAAMC,EAAWD,EAAUjB,KAAK,SAACvB,GAAC,OAAKA,EAAEsB,QAAUA,EAAMA,KAAK,GAC9D,OAAImB,EACKD,EAAUE,IAAI,SAAC1C,UACpBA,IAAMyC,EACFzC,EAACgC,EAAA,CAAA,EAEIhC,EAAC,CACJ2C,aAAcC,EAAW5C,EAAE2C,aAAcrB,EAAMqB,eAChD,MAGTE,OAAWL,EAAS,CAAElB,IAEtB,SAASsB,EAAWE,EAAqBC,GACvC,IAAKD,EAAG,OAAOC,EACf,IAAKA,EAAG,OAAOD,EACf,IAAME,EAASD,EAAEE,OAAO,SAACjD,GAAM,OAAC8C,EAAEI,SAASlD,EAAE,GAC7C,OAAOgD,EAAOG,OAAMN,GAAAA,OAAOC,EAAME,GAAUF,CAC7C,CACF,UAEgBM,EACd/B,EACAgC,EACAC,EACAC,GAEA,IAAMC,EAAWnC,EAAOqB,IAAI,SAAC1C,GAC3B,OAAAA,EAAEyD,YAAcC,EAAe1D,EAAGqD,EAAMC,GAAStD,CAAC,GAEpD,OAAOuD,EACJb,IAAI,SAAC1C,GAACgC,OAAAA,EAAWhC,CAAAA,EAAAA,EAAG2C,CAAAA,aAAc,CAACW,IAAS,GAC5CK,OAAO,SAACC,EAAI5D,UAAMuC,EAAWvC,EAAG4D,EAAG,EAAEJ,EAC1C,UAEgBE,EACdG,EACAR,EACAC,GAAUQ,IAAAA,EAEJ7C,EAA2B6C,OAApBA,EAAGD,EAAU5C,SAAO6C,EAAI,GACrC,OAAI7C,EAAQ8C,KAAK,SAAC/D,UAAMA,EAAEsD,QAAUA,CAAK,GAAUO,EACnD7B,EACK6B,CAAAA,EAAAA,EACH5C,CAAAA,QAAO4B,GAAAA,OAAM5B,EAAO,CAAE,CAAEoC,KAAAA,EAAMC,MAAAA,MAElC,CAEM,SAAUU,EAAoCC,GAClD,IAAMC,EAAiB,CAAE,EAoBzB,OADAC,OAAOC,KAAKH,GAAWI,QAlBvB,SAASC,EAAkBrE,GACzB,GAAIA,KAAQiE,EACV,OAAOA,EAAIjE,GAEb,IAAMsE,EAAgC,GAYtC,OAXAL,EAAIjE,GAAQsE,EACZN,EAAUhE,GAAMoE,QAAQ,SAACrE,GACnB0B,EAAgB1B,IAAMA,EAAEwE,UAC1BD,EAAeE,KAAIzC,EACdhC,CAAAA,EAAAA,EACHsC,CAAAA,SAAUgC,EAAkBtE,EAAEwE,cAGhCD,EAAeE,KAAKzE,EAExB,GACOuE,CACT,GAEOL,CACT,UC/QgBQ,EACdC,EACAtD,EACAuD,GAEA,IAAKD,EAAG,OAAOE,EAAsBxD,GACrC,GAAIuD,GAAWA,EAAQE,IAAIH,GAAI,OAAOA,EAC/B,MAAPC,IAAAA,EAAY,IAAIG,KAChBH,EAAQI,IAAIL,GACZ,IAAMM,EAAa5D,EAAO4B,OACxB,SAACjD,GAAC,OAAK0B,EAAgB1B,MAAQA,EAAEsB,SAASqD,EAAE,GAE9C,IAAKM,EAAW9B,OAAQ,OAAOwB,EAC/B,IAAMT,EAAGlC,EAAQ2C,CAAAA,EAAAA,GAOjB,OANAM,EAAWZ,QAAQ,SAACrE,GAClBkE,EAAIlE,EAAEsB,OACJtB,EAAEsB,SAASqD,EACPO,EAAqBP,EAAE3E,EAAEsB,OAAQtB,EAAGqB,GAAQ,EAAOuD,GACnDO,EAAqBnF,EAC7B,GACOkE,CACT,CAEgB,SAAAgB,EACdP,EACArD,EACA8D,EACAC,EACAT,GAEA,OAAItD,EAAMe,aAAegD,GACdV,MAAAA,EAAAA,EAAe,IAAIjC,IAAI,SAAC1C,GAC/B,OAAAkF,EAAqBlF,EAAGsB,EAAO8D,GAAQ,EAAMR,EAAQ,GAGrDlD,EAAgBJ,GACbqD,GAAMrD,EAAMgE,SACVZ,EACLC,EACArD,EAAMiE,aAAeH,EAAS9D,EAAMgB,SACpCsC,GAJgCD,EAO7BQ,EAAqB7D,EAC9B,CAEM,SAAUuD,EAAsBxD,GACpC,OAAO8C,OAAOqB,YACZnE,EAAOqB,IAAI,SAAC1C,SAAM,CAACA,EAAEsB,MAAO6D,EAAqBnF,GAAG,GAExD,UAEgBmF,EACd1D,EACA6D,EACAG,GAEA,QAAwBC,IAApBjE,EAAGd,aAA4B,OAAOc,EAAGd,aAC7C,IAAMgF,KAAgBL,IAAY7D,EAAG6D,UACrC,GAAI5D,EAAgBD,GAAK,CACvB,GAAIkE,EAAY,CACd,IAAMC,EAAaf,EAAsBpD,EAAGa,UAC5C,OAAOb,EAAGY,WAAa,CAACuD,GAAcA,CACxC,CACA,OAAOnE,EAAGoE,aAAeJ,EACrBhE,EAAGY,WACD,GACA,CAAA,OACFqD,CACN,CACA,OAAIjE,EAAGY,YAAcZ,EAAGoE,YACf,QADT,CAIF,CAEgB,SAAAC,EAAqBrE,GACnC,OAAIC,EAAgBD,GACXoD,EAAsBpD,EAAGa,UAE3Bb,EAAGd,YACZ,CAgBgB,SAAAoF,EAAYzE,EAAoB0E,OAAWC,EACzD,OAAOC,eAAOD,EAAC3E,EAAM6E,aAANF,EAAY/C,SAAS8C,GACtC,CAEgB,SAAAI,EAAiB9E,GAAkB+E,IAAAA,EACjD,OAAwBA,OAAxBA,EAAO/E,EAAMY,aAAWmE,EAAI/E,EAAMA,KACpC,UAEgBgF,EAAWC,OAAgDC,EAAAC,EACzE,OAAyBD,OAAlBA,SAAAC,EAACF,EAAEtF,gBAAFwF,EAAWtD,QAAMqD,EAAI,GAAK,CACpC,UAEgBE,EAAuBjF,GACrC,GAAIC,EAAgBD,GAClB,MAAO,CACLxB,KAAMb,QAAqBA,sBAACc,KAC5ByG,MAAOlF,EAAGS,YACVZ,MAAOG,EAAGH,MACVgE,SAAU7D,EAAG6D,SACbhD,SAAUb,EAAGa,SAASI,IAAIgE,IAEvB,GAAIlF,EAAcC,GAAK,CAAA,IAAAmF,EACtBC,EAAoB,OAAVD,EAAGnF,EAAG0E,WAAI,EAAPS,EAAS1D,SAAS,eACrC,MAAO,CACLjD,KAAMb,8BAAsBc,KAC5ByG,MAAOlF,EAAGS,YACVZ,MAAOG,EAAGH,MACVgE,SAAU7D,EAAG6D,SACbwB,cAAe,CACb7G,KAAM4G,EAAapH,QAAAA,eAAesH,WAAatH,uBAAeuH,UAGpE,CACA,KAAM,sBACR,CAyBgB,SAAAC,EACdC,EACAC,GAEA,OACEpH,EAAwBoH,IACxBD,EAAS5F,QAAU6F,EAAW7F,MAEvB,CAAC6F,GAENhH,EAA0BgH,GACxBA,EAAWC,gBAAkBF,EAAS5F,MAAc,CAAC6F,UACzDE,EACqB,OADrBC,EACEH,EAAW7E,eAAQ,EAAnBgF,EAAqBC,QAAQ,SAACC,UAC5BP,EAAwBC,EAAUM,EAAE,IACrCH,EAAI,GAGF,GARoC,IAAAA,EAAAC,CAS7C,UAMgBG,GACdpG,EACAqG,GAEA,OAAOvD,OAAOqB,YACZnE,EAAO4B,OAAOvB,GAAiBgB,IAAI,SAACiF,GAClC,IAAMC,EAASF,EAASH,QAAQ,SAACvH,UAAMiH,EAAwBU,EAAI3H,EAAE,GACrE,MAAO,CACL2H,EAAGrG,MACH,CACEsG,OAAQA,EAAO/E,OACbgF,GAAkBD,EAAOL,QAAQ,SAACvH,GAAC8H,IAAAA,gBAAAA,EAAK9H,EAAEsC,UAAQwF,EAAI,EAAE,KAE1DxF,SAAUmF,GACRE,EAAGrF,SACHsF,EAAOL,QAAQ,SAACvH,GAAC+H,IAAAA,gBAAAA,EAAK/H,EAAEsC,UAAQyF,EAAI,EAAE,KAI9C,GAEJ,CAEgB,SAAAC,GACd1G,EACA2G,GASA,IAPeA,EAAOL,OAAOrG,KAAK,SAACM,GAAC,IAAAqG,EAAAA,OAClCA,OADkCA,EAClCrG,EAAES,eAAF4F,EAAAA,EAAY3G,KACV,SAACvB,GAAC,OACCD,EAAwBC,IAAMA,EAAEsB,QAAUA,EAAMA,OAChDnB,EAA0BH,IAAMA,EAAEoH,gBAAkB9F,EAAMA,KAAM,EACpE,GAEU,MAAO,CAAC,CAACA,EAAO2G,IAC7B,GAAIvG,EAAgBJ,GAAQ,CAC1B,IAAM6G,EAAcF,EAAO3F,SAAShB,EAAMA,OAC1C,OAAK6G,EACE7G,EAAMgB,SAASiF,QAAQ,SAAC1F,GAAC,OAAKmG,GAAenG,EAAGsG,EAAY,GAD1C,CAAC,CAAC7G,EAAO2G,GAEpC,CACA,MAAO,EACT,CAEgB,SAAAJ,GACdH,GAEA,OAAOA,EAASH,QAAQ,SAACa,GAAOC,IAAAA,SAC9BlI,EAA0BiI,KAAaA,EAAQhB,cAAa,CACvDgB,GAAOvF,OAAKgF,GAAkC,OAAjBQ,EAACD,EAAQ9F,UAAQ+F,EAAI,KACnD,EAAE,EAEV,CAEA,SAASC,GAAczG,OAAoB0G,EACzC,OAAAvG,EAAA,GAAYH,EAAGS,CAAAA,gBAAQiG,EAAE1G,EAAES,iBAAFiG,EAAY7F,IAAI4F,KAC3C,CAEgB,SAAAE,GACdnH,EACAqG,GAGA,IAOMe,EAAa,CAAEnG,SAPDmF,GAAmBpG,EADvCqG,EAAWA,EAAShF,IAAI4F,KAQoBV,OANzBC,GAAkB,CACnC,CACE5H,KAAMb,QAAqBA,sBAACgB,MAC5BkC,SAAUoF,MAqBd,OAjBsBrG,EACnB4B,OAAO,SAACjD,GAAM,OAAC+F,EAAY/F,EAAG,aAAa,GAC3CuH,QAAQ,SAACvH,UAAMgI,GAAehI,EAAGyI,EAAW,GACjCpE,QAAQ,SAAAqE,GAAgB,IAAAC,EAAd7F,EAAC4F,KAAET,EAAMS,EAC/B,GAAME,EAAmB,OAATD,EAAG7F,EAAEqD,WAAI,EAANwC,EAAQpH,KAAK,SAACvB,UAAMA,EAAE6I,WAAW,iBAAiB,GACjEC,OAA6CpD,EACjD,GAAIkD,EAAY,CACd,IAAMG,EAAYH,EAAWI,UAAU,IACvCF,EAAcb,EAAOL,OAAOrG,KAAK,SAACvB,GAAC,OAAKA,EAAE2G,QAAUoC,CAAS,EAC/D,CAEA,GADKD,IAAaA,EAAcb,EAAOL,OAAO,IAC1CkB,EAAa,CACf,IAAMG,EAAavC,EAAuB5D,GACtCgG,EAAYxG,SAAUwG,EAAYxG,SAASmC,KAAKwE,GAC/CH,EAAYxG,SAAW,CAAC2G,EAC/B,CACF,GACOvB,CACT,UACgBwB,GAAiBC,GAC/B,IAAMC,EAAIC,EAAMA,OAACF,GAEjB,OADAC,EAAEE,QAAUH,EACLC,CACT,CAEgB,SAAAG,GAAkB1H,GAChC,OAAOD,EAAcC,MAAQA,EAAE2H,QACjC,CAEgB,SAAAC,GAAkB5H,GAChC,OAAOD,EAAcC,MAAQA,EAAE6H,QACjC,CAEgB,SAAAC,GACdnC,GAEA,OAAOzH,EAAwByH,IAC7BA,EAAEV,eACF9F,EAAsBwG,EAAEV,eACtBU,EAAEV,mBACFpB,CACN,UA4EgBkE,GACdC,EACAC,GAEA,IAAI5F,EAAM,GASV,OARA2F,EAASxF,QAAQ,SAACM,EAAGoF,GACQ,IAAAC,EAAV,iBAANrF,EACTT,UAAG8F,EAAIF,MAAAA,OAAAA,EAAAA,EAAcnF,IAAEqF,EAAI,IAAMrF,EAAI,KAEjCoF,EAAI,IAAG7F,GAAO,KAClBA,GAAOS,EAEX,GACOT,CACT,UAcgB+F,GAAiBC,GAC/B,OAAIA,GAAaA,EAAUrB,WAAW,MAC7BqB,EAAUlB,UAAU,GAEtBkB,CACT,CAEgB,SAAAC,GACdC,EACAC,GAGA,GADWJ,GAAiBI,KACjBA,EAAa,OAAOA,QAA4B3E,EAC3D,IAAM4E,EAAKL,GAAiBG,GAC5B,OAAIE,IAAOF,EAAqBG,EAAAA,QAAKH,EAAcC,GAC5CC,QAAU5E,CACnB,UAqBgB8E,GACdC,EACAC,GAEA,OAAOD,EAAK/H,IAAI,SAAC1C,GAAC,OAAK2K,GAAYD,EAAU1K,GAAG,GAAE4K,KAAK,IACzD,CACgB,SAAAC,GAIdC,GAIA,IAAMC,EAAc5G,OAAO6G,QAAQF,GAC7BL,EAAOD,GAAkBO,EAAa,SAAC/K,GAAC,OAAKA,EAAE,GAAGyK,IAAI,GACtDQ,EAAM5B,EAAMA,OAAsB,IAClCtG,EAAIkI,EAAI3B,QAEd,OADAyB,EAAY1G,QAAQ,SAACrE,GAAO,OAAA+C,EAAE/C,EAAE,IAAMA,EAAE,GAAGkL,KAAK,GACzCC,cACL,SAACC,GACC,OAAOjH,OAAOqB,YACZuF,EAAYrI,IAAI,SAAA2I,GAAE,IAAAvI,EAACuI,KAAU,MAAA,CAACvI,EAAPuI,EAAM,GAAOC,QAAQF,EAAGH,EAAI3B,QAAQxG,IAAI,GAEnE,EACA,CAAC2H,GAEL,CAEM,SAAUE,GAAY3K,GAC1B,YAAU0F,IAAN1F,EAAwB,IAClB,OAANA,EAAmB,IAChBA,EAAEuL,UACX,CAEM,SAAUC,GACdrI,EACAsI,EACAC,EACAC,EACAC,GAEA,MAAO,CACE,MAAPH,GAAetI,EAASsI,EAAME,OAAWjG,EAClC,MAAPgG,GAAevI,EAASuI,EAAME,OAAWlG,EAE7C,CAuDgB,SAAAmG,GACdC,GAEA,OAAO3L,EAA0B2L,GAC7BA,EAAIC,aACJhM,EAAwB+L,IAAQ3K,EAAoB2K,EAAIhF,eACtDgF,EAAIhF,cAAciF,kBAClBrG,CACR,CACgB,SAAAsG,GAAuBF,GACrC,IAAIG,EAAKJ,GAAwBC,GAEjC,IAAKG,EAAI,MAAO,GAChB,IAAQC,EAAuDD,EAAvDC,iBAAkBC,EAAqCF,EAArCE,gBAAiBC,EAAoBH,EAApBG,gBACrClI,EAAsB,CAAA,EAI5B,OAHIgI,IAAkBhI,EAAImI,YAAcH,GACpCC,IAAiBjI,EAAIoI,WAAaH,GAClCC,IAAiBlI,EAAIqI,WAAaH,GAC/BlI,CACT,CAEgB,SAAAsI,GAAqBV,GAAsBW,IAAAA,EACzD,OAAOvG,QAAoC,OAA7BuG,EAACZ,GAAwBC,SAAI,EAA5BW,EAA8BC,YAC/C,UCrjBgBC,GACdrL,EACAqF,EACA1F,GAEA,OAAAe,EAAA,CAAS/B,KAAMb,QAAAA,sBAAsBc,KAAMoB,MAAAA,EAAOqF,MAAAA,GAAU1F,EAC9D,CAEM,SAAU2L,GACd3M,GAEA,gBAAQsG,GAAC,OAAAvE,EAAQ/B,CAAAA,KAAAA,GAASsG,GAC5B,CAEgB,SAAAsG,GACd5M,GAEA,OAAO,SAACsG,GAAC,OAAAvE,EAAQ/B,CAAAA,KAAAA,GAASsG,EAC5B,CAAA,CAEM,SAAUuG,GACd7M,GAEA,OAAO,SAACsG,GAAO,MAAA,CAAEO,cAAa9E,EAAA,CAAI/B,KAAAA,GAASsG,GAAU,CACvD,CHvCYrH,QAAAA,eAAAA,GAAAA,EAAAA,QAAAA,YAAAA,QAAAA,UAaX,CAAA,IAZC,OAAA,SACAA,EAAA,KAAA,OACAA,EAAA,IAAA,MACAA,EAAA,KAAA,OACAA,EAAA,SAAA,WACAA,EAAA,KAAA,OACAA,EAAA,OAAA,SACAA,EAAA,UAAA,YACAA,EAAA,SAAA,WACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,IAAA,MA8BUC,QAAZA,2BAAA,GAAYA,EAAAA,QAAqBA,wBAArBA,QAAqBA,sBAMhC,CAAA,IALC,SAAA,WACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,aAAA,eACAA,EAAA,cAAA,gBAqCUC,sCAAAA,EAAAA,QAAqBA,wBAArBA,QAAqBA,sBAKhC,CAAA,IAJC,KAAA,OACAA,EAAA,MAAA,QACAA,EAAA,QAAA,UACAA,EAAA,OAAA,SAQUC,QAAZA,yBAAA,GAAYA,EAAAA,QAAmBA,sBAAnBA,QAAmBA,oBAW9B,CAAA,IAVC,QAAA,UACAA,EAAA,aAAA,eACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,QAAA,UACAA,EAAA,MAAA,QACAA,EAAA,YAAA,cACAA,EAAA,eAAA,iBACAA,EAAA,MAAA,QACAA,EAAA,WAAA,aAOUC,QAAZA,oBAAA,GAAYA,EAAAA,QAAcA,iBAAdA,QAAcA,eAOzB,CAAA,IANC,QAAA,UACAA,EAAA,KAAA,OACAA,EAAA,UAAA,aACAA,EAAA,UAAA,YACAA,EAAA,SAAA,WACAA,EAAA,KAAA,OAiCUC,QAAZA,wBAAA,GAAYA,EAAAA,QAAAA,qBAAAA,QAAkBA,mBAK7B,CAAA,IAJC,aAAA,eACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,SAAA,WAGUC,QAAZA,0BAAA,GAAYA,EAAAA,QAAoBA,uBAApBA,6BAMX,CAAA,IALC,QAAA,UACAA,EAAA,UAAA,YACAA,EAAA,SAAA,WACAA,EAAA,KAAA,OACAA,EAAA,SAAA,WAkDUC,QAAAA,oBAAAA,GAAAA,EAAAA,QAAcA,iBAAdA,QAAcA,eAkBzB,KAjBC,SAAA,WACAA,EAAA,UAAA,YACAA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,SAAA,WACAA,EAAA,UAAA,YACAA,EAAA,cAAA,gBACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,YAAA,cACAA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,QAAA,UACAA,EAAA,MAAA,QA2FUC,QAAAA,kBAAAA,GAAAA,EAAAA,QAAYA,eAAZA,qBAIX,CAAA,IAHC,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,OAAA,SA4BUC,QAAAA,qBAAAA,GAAAA,EAAAA,QAAAA,kBAAAA,QAAAA,gBAMX,CAAA,IALC,SAAA,WACAA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cAqCUC,QAAZA,qBAAA,GAAYA,EAAAA,QAAAA,kBAAAA,QAAAA,gBAKX,CAAA,IAJC,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,KAAA,OACAA,EAAA,OAAA,SA4BUC,QAAAA,mBAAAA,GAAAA,EAAAA,QAAAA,gBAAAA,QAAAA,cAIX,CAAA,IAHC,QAAA,UACAA,EAAA,KAAA,OACAA,EAAA,OAAA,SAiBUC,QAAAA,oBAAAA,GAAAA,EAAAA,QAAcA,iBAAdA,QAAcA,eAGzB,CAAA,IAFC,UAAA,YACAA,EAAA,SAAA,WGxZW,IAAAiN,GAAmBD,GAC9BrN,QAAcA,eAACuN,WAGJC,GAAqBH,GAChCrN,QAAcA,eAACyN,OAGJC,GAAyBP,GACpC/M,QAAaA,cAACuN,QAGHC,GAA0BT,GACrC/M,QAAaA,cAACyN,SAGHC,GAAuBX,GAClC/M,sBAAc2N,MAGHC,GAAmBZ,GAC9BrN,6BAAqBkO,WAGVC,GAAmBb,GAC9BrN,QAAcA,eAACmO,WAGJC,GAAqBf,GAChCrN,QAAAA,eAAeyB,aAGJ4M,GAAiBhB,GAC5BrN,QAAAA,eAAe6N,SAsGJS,GAAkD,CAC7D9N,KAAMb,8BAAsBgB,MAC5BkC,SAAU,GACVyJ,aAAc,CAAE9L,KAAMN,QAAeA,gBAACqH,SAAUgH,WAAW,IAoC7C,SAAAC,GACdhK,EACAiK,GAEA,IAAMC,EAAMnM,EAAA,CAAA,EAAQiC,GAOpB,OANAE,OAAO6G,QAAQkD,GAAW7J,QAAQ,SAAAqE,GAAiB,IAAfpH,EAAKoH,KAAE0F,EAAG1F,EAC5CyF,GAAAA,EAAO7M,IAAqB+M,MAAMC,QAAQF,GAAOA,EAAM,CAACA,IAAMzK,OAC5D,SAACwF,EAAGoF,GAAE,IAAAC,EAAA,OAAKpL,EAAY+F,EAAGoF,EAAGlL,KAAMkL,EAAGjL,MAAgBkL,OAAXA,EAAED,EAAGlN,QAAMmN,EAAI,GAAG,EAC7DL,EAAO7M,GAEX,GACO6M,CACT,CC3OA,IAAMM,GAA4B,CAAEnN,MAAO,YAAarB,KAAMf,kBAAUwP,KAmCxE,SAASC,GACPrN,EACA2G,EACA7C,GAEA,IAAMwJ,EAAO,CACXtN,MAAAA,EACAuN,UAAW5G,EAAO4G,UAClBzJ,OAAAA,EACA0J,aAKF,SAAsBC,GACpB,GAAIrN,EAAgBJ,KAAWA,EAAMkD,UAAW,CAC9C,IAAMwK,EAAa1N,EAAMgB,SAASf,KAAK,SAACvB,UAAMA,EAAEsB,QAAUyN,CAAS,GACnE,OAAOC,EAAaL,GAAcK,EAAY/G,EAAQ2G,QAAQlJ,CAChE,CACA,OAAOuJ,IAAgB1N,KAAK,SAACvB,GAAM,OAAAA,EAAEsB,MAAMA,QAAUyN,CAAS,EAChE,EAVEE,cAAAA,GAEF,OAAOL,EASP,SAASK,IACP,GAAIvN,EAAgBJ,GAAQ,CAC1B,IAAM4N,EAAW5N,EAAMkD,WAAayD,EAAO4G,UAAUvN,EAAMkD,WAC3D,OAAI0K,EAAiBA,EAASD,gBACvB3N,EAAMgB,SAASI,IAAI,SAAC1C,GAAM,OAAA2O,GAAc3O,EAAGiI,EAAQ2G,EAAK,EACjE,CACA,MAAO,EACT,CACF,UAEgBO,GACdlL,GAEA,IAAMgE,EAAS,CACb4G,UAIF,SAAmBO,GACjB,IAAM/N,EAAS4C,EAAUmL,GACzB,GAAI/N,EACF,OAAOgO,GAAehO,EAAQ4G,EAGlC,GARA,OAAOA,CAST,CAEA,SAASqH,GACPnI,EACA/B,GAEA,IAAMwJ,EAAO,CAAEzH,WAAAA,EAAY/B,OAAAA,EAAQ6J,cAEnC,WAAsB,IAAA5H,EAAAC,EACpB,OAA+D,OAA/DD,SAAAC,EAAOH,EAAW7E,iBAAXgF,EAAqB5E,IAAI,SAAC1C,GAAM,OAAAsP,GAAetP,EAAG4O,EAAK,IAACvH,EAAI,EACrE,GAHA,OAAOuH,CAIT,CAwBM,SAAUW,GACdC,EACApH,EACAhD,EACAqK,GAEA,IAAMC,EAAW,CACfF,OAAAA,EACApH,QAAAA,EACAhD,OAAAA,EACAqK,aAAAA,EACAE,SAKF,SAAkBC,OAAsBC,EAChCC,EAAa1H,EAInB,OAHI0H,GAAcA,EAAWxG,QAAQyG,SACnCD,EAAWxM,MAAQ,IAEdiM,GACLK,EACU,MAAVE,GAAkB,OAARD,EAAVC,EAAYzO,aAAM,EAAlBwO,EAAqBD,EAAWtO,MAAMA,OACtCoO,EAEJ,EAdEM,gBAeF,SAAyBP,OAAoBQ,EAC3C,OAAOV,GACLC,QACCpH,UAA8B6H,EAA9B7H,EAAgC8H,iBAAhCD,EAA2CR,GAC5CC,EACAD,EAEJ,GApBA,OAAOC,CAqBT,CAEgB,SAAAS,GACdtO,GAEA,IAAMkN,EAAY5O,EAA0B0B,GACxCA,EAAEuF,cACFrH,EAAwB8B,GACtBA,EAAEP,WACFoE,EACN,OAAOqJ,MAAAA,OAAAA,EAAAA,EAAWqB,MAAM,IAC1B,CAEgB,SAAAC,GACdxO,EACAyO,GAEA,IAAMC,EAAgBJ,GAAuBtO,GAC7C,OAAO0O,EACHC,GAAuBD,EAAeD,QACtC5K,CACN,CAEgB,SAAA+K,GACdC,EACAlB,GAAsBmB,IAAAA,EAEtB,OAAOH,UAAsBG,EAAS,MAARD,OAAQ,EAARA,EAAUN,MAAM,MAAIO,EAAI,GAAInB,EAC5D,UASgBoB,GACdC,EACArB,EACAsB,EACAC,GAGA,IADA,IAAIhH,EAAI,EACDA,EAAI8G,EAAU1N,QAAQ,CAC3B,IACI6N,EAAYxB,EAAOV,aADL+B,EAAU9G,IAEvBiH,IACHA,EAAYrC,GAAcF,GAAce,EAAQA,IAElDsB,EAAMC,EAAKD,EAAKE,GAChBxB,EAASwB,EACTjH,GACF,CACA,OAAO+G,CACT,CAegB,SAAAN,GACdK,EACArB,GAEA,OAAOoB,GAAmBC,EAAWrB,EAAOA,OAAQA,EAAQ,SAACrG,EAAGpH,GAAC,OAC/DoH,EAAEwG,SAAS5N,EAAE,EAEjB,CAEgB,SAAAkP,GACdJ,EACArB,GAGA,IADA,IAAIzF,EAAI,EACDA,EAAI8G,EAAU1N,QAAQ,CAC3B,IACI6N,EAAYxB,EAAOV,aADL+B,EAAU9G,IAEvBiH,IACHA,EAAYrC,GAAcF,GAAce,EAAQA,IAElDA,EAASwB,EACTjH,GACF,CACA,OAAOyF,CACT,CAEgB,SAAA0B,GACd5H,EACA6H,EACAC,GAGA,IADA,IAAIC,EAAgB,GACb/H,IAAiB,MAAL8H,IAAAA,EAAQ9H,KACzB+H,EAAS5M,KAAK0M,EAAI7H,IAClBA,EAAUA,EAAQlE,OAEpB,OAAOiM,EAASC,SAClB,UAEgBC,GAAgB7B,GAC9B,KAAOA,EAAStK,QACdsK,EAAWA,EAAStK,OAEtB,OAAOsK,CACT,UAEgB8B,GAAY9B,GAC1B,OAAOwB,GACLxB,EACA,SAAClI,GAAO,OAAkB,MAAlBA,EAAEiI,aAAuBjI,EAAEgI,OAAOlO,MAAMA,MAAQkG,EAAEiI,YAAY,EACtE,SAACzP,GAAM,OAACA,EAAEoF,MAAM,EAEpB,UAcgBiK,GACdhO,EACA4G,GAMA,YAN2B,IAA3BA,IAAAA,EAA2B,CACzB4G,UAAS,SAACO,GAEV,IAGKT,GACL,CACE1O,KAAMf,QAASA,UAACyC,SAChBL,MAAO,GACPgB,SAAUjB,GAEZ4G,OACAvC,EAEJ,UAEgB+L,GACd/J,EACAgK,EACAC,GAKA,GAAKjK,EACL,IAAA,IAAwBkK,EAAxBC,EAAAC,EAAgBpK,KAAQkK,EAAAC,KAAAE,MAAE,CAAA,IAClB3I,EAAI4I,GADAJ,EAAAtO,MACoBoO,EAASC,GACvC,QAAUjM,IAAN0D,EAAiB,OAAOA,CAC9B,CAEF,UAEgB4I,GACd7K,EACA8K,EACAN,GAKA,GAAKM,EAAI7J,UAAW6J,EAAI7J,QAAQ2H,OAChC,OAAOtP,EACL0G,EACA,CACEtG,KAAA,SAAKiL,GACH,OAAOoG,EAAYpG,EACrB,EACA/K,MAAK,SAACyG,GACJ,OAAO0K,EAAY1K,EACrB,EACA5G,OAAQ,WAAe,EACvBE,QAAS,WAAe,GAE1B,WAAe,GAGjB,SAASoR,EAAYpG,GACnB,IAAMxJ,EAAWwJ,EAAIxJ,SACf0O,EAAYX,GAAevE,EAAKmG,GACtC,IAAKjB,EAAW,OAAOS,GAAsBnP,EAAU2P,EAAKN,GAC5D,IAAMhF,EAAc5M,EAAwB+L,GAAOA,OAAMpG,EACnDyM,EAASxF,EAAcgF,EAAGhF,EAAaqE,QAAatL,EAC1D,QAAeA,IAAXyM,EAAsB,OAAOA,EACjC,IAAMC,EAAYpB,EAAUxB,OACtBtI,EAAWxF,EAAgB0Q,EAAU9Q,OAC3C,GAAI8Q,EAAU9Q,MAAMe,WAGlB,IAFA,IACIgQ,EAAS,EACbC,EAAAR,EAAiC,OAAjCS,EAFgBvB,EAAU5I,QAED8H,UAAQqC,EAAI,KAAED,IAAAP,MAAE,CAAA,IAAAQ,EACjCC,EAAYxB,EAAUhB,gBAAgBqC,GACtCI,EAAa9F,EAAcgF,EAAGhF,EAAa6F,QAAa9M,EAC9D,QAAmBA,IAAf+M,EAA0B,OAAOA,EACrC,GAAIvL,EAAU,CACZ,IAAMwL,EAAWjB,GAAsBnP,EAAUkQ,EAAWb,GAC5D,QAAiBjM,IAAbgN,EAAwB,OAAOA,CACrC,CACAL,GACF,MACK,GAAInL,EACT,OAAOuK,GAAsBnP,EAAU0O,EAAWW,EAGtD,CACF,UC3UgBgB,GACdC,EACAzL,EACA0L,GAOA,OAAOC,GALmBC,GACxB5L,EACA9H,QAAmBA,oBAAC2T,QACpBJ,GAIA,SAACX,EAAGvJ,GAAI,IAAAvB,EAAUuB,EAAVvB,WAAY0L,EAAgBnK,EAAhBmK,iBAClB,OAAAI,EAAAA,YAAY,WACV,IAAMvD,EAA2B,MAAhBmD,EAAAA,EAAoBZ,EAAIvC,SACzC,OACGA,GACAwD,GAAYxD,KACVyD,GAAgBzD,EAAUuC,EAAImB,gBAAiBjM,EAEtD,EAAE,EACJ,CAAEA,WAAAA,EAAY0L,iBAAAA,GAElB,CAEgB,SAAAQ,GACdT,EACAzL,GAOA,OAAO2L,GALiBC,GACtB5L,EACA9H,QAAmBA,oBAACiU,SACpBV,GAIA,SAACX,EAAG5G,GAAA,IAAIlE,EAAUkE,EAAVlE,WACN,OAAAoM,EAAAA,qBAAqB,WAAM,OAAAhK,GAAkBpC,EAAW,EAAC,EAC3D,CAAEA,WAAAA,GAEN,UAEgBqM,GACdZ,EACAa,EACAtM,GAOA,OAAO2L,GALcY,GACnBvM,EACAsM,EACAb,GAIA,WAAA,OAAMe,EAAUA,gBAACjO,EAAU,OAC3BA,EAEJ,CAEgB,SAAAkO,GACdhB,EACAzL,GAOA,OAAO2L,GALgBY,GACrBvM,EACA9H,QAAAA,oBAAoBwU,eACpBjB,GAIA,WAAM,OAAAe,EAAAA,WAAW,GAAG,OACpBjO,EAEJ,CAEgB,SAAAoO,GACdlB,EACAzL,GAOA,OAAO2L,GALiBC,GACtB5L,EACA9H,QAAAA,oBAAoB0U,SACpBnB,GAIA,SAACX,GAAG,OACFgB,EAAAA,YAAY,WAAKe,IAAAA,EAAAC,EACTtH,EAA0B,OAAfqH,EAAG/B,EAAIvC,eAAQ,EAAZsE,EAAc5L,QAElC,OAD8D,KAAjC,MAAXuE,GAAAsH,OAAWA,EAAXtH,EAAauH,KAAkB,kBAA/BD,EAAAA,EAAkC3Q,QAChCmG,GAAkBtC,EACxC,EAAE,OACJzB,EAEJ,CAEgB,SAAAyO,GACdvB,EACAzL,GAKA,OAAOuM,GACLvM,EACA9H,4BAAoBiB,QACpBsS,EAEJ,CACgB,SAAAwB,GACdxB,EACAzL,GAOA,OAAO2L,GALcY,GACnBvM,EACA9H,QAAmBA,oBAACgV,aACpBzB,GAIA,SAACX,EAAGqC,GAAoB,IAAhBnN,EAAUmN,EAAVnN,WACN,OAAO8L,EAAAA,YACP,WAAoB,IAAAsB,EAClBC,EAAwBzU,EAAwBoH,GAC5C,CAACA,EAAW7B,SAAU6B,EAAWxG,cACjC,EAAC,OAAO+E,GAFLJ,EAAQkP,EAAEC,GAAAA,EAAGD,EAGpB,GAAMlT,EAAoB,OAAfiT,EAAGtC,EAAIvC,eAAQ,EAAZ6E,EAAc/E,OAAOlO,MACnC,OACK,MAAHmT,EAAAA,EACCnT,EACiC,MAA9B2Q,EAAIvC,SAAUD,aACZ3J,EAAqBxE,GACrB6D,EAAqB7D,EAAOgE,GAAU,QACxCI,CAER,EACF,EACA,CAAEyB,WAAAA,GAEN,UAuCgBuN,GACdC,EACAjD,EACAkD,GAEA,OAAQD,EAAK1U,MACX,KAAKX,QAAcA,eAACgO,QAClB,IAAMuH,EAAW5B,EAAAA,YAAY,WAAO,MAAA,CAAE6B,SAAUpD,EAAQoD,SAAU,GAClE,OAAOC,GACJJ,EAA2BK,WAC5BzD,GAAgBG,EAAQpB,YAAYlI,QACpCoJ,GAAYE,EAAQpB,YACpBuE,EACAD,GAEJ,KAAKtV,QAAAA,eAAe2V,KAClB,OAAOC,GAAkBN,GAC3B,KAAKtV,QAAAA,eAAeY,KAClB,OAvDN,SACEiV,EACAvG,EACAgG,QAAAA,IAAAA,IAAAA,EAA0B,SAAC5U,GAAM,OAAAA,CAAC,GAElC,IAAMoV,EAAa3E,GAAsB0E,EAAO7T,MAAOsN,GACvD,OAAO2E,EAAAA,qBAAqB,eAAA8B,EAAA,OAAMT,EAAOS,OAADA,EAACD,EAAWhN,cAAXiN,EAAAA,EAAoB/R,MAAM,EACrE,CAgDagS,CACLX,EACAjD,EAAQpB,WACRsE,GAEJ,KAAKtV,QAAAA,eAAeiW,UAClB,OApDN,SACEJ,EACAvG,EACAgG,QAA0B,IAA1BA,IAAAA,EAA0B,SAAC5U,GAAM,OAAAA,CAAC,GAElC,IAAMoV,EAAa3E,GAAsB0E,EAAO7T,MAAOsN,GACvD,OAAO2E,EAAoBA,qBAAC,WAAK,IAAAiC,EACzBC,EAAKD,OAAHA,EAAGJ,EAAWhN,cAAXoN,EAAAA,EAAoBlS,MAC/B,OAAOsR,EACLvG,MAAMC,QAAQmH,GAAMA,EAAGvS,SAASiS,EAAO7R,OAASmS,IAAON,EAAO7R,MAElE,EACF,CAwCaoS,CACLf,EACAjD,EAAQpB,WACRsE,GAEJ,KAAKtV,QAAcA,eAACqW,SAClB,OA5CN,SACER,EACAvG,EACAwE,EACAwB,QAAAA,IAAAA,IAAAA,EAA0B,SAAC5U,GAAC,OAAKA,CAAC,GAElC,IAAMoV,EAAa3E,GAAsB0E,EAAO7T,MAAOsN,GACvD,OAAO2E,EAAAA,qBAAqB,WAAK,IAAAqC,EACzBH,EAAKG,OAAHA,EAAGR,EAAWhN,cAAXwN,EAAAA,EAAoBtS,MACzBhC,EAAQ8T,EAAW5F,OAAOlO,MAChC,OAAOsT,EAAOtT,IAAU8R,EAAgByC,aAAavU,EAAOmU,GAC9D,EACF,CAgCaK,CACLnB,EACAjD,EAAQpB,WACRoB,EAAQ0B,gBACRwB,GAEJ,QACE,OAAOjB,EAAAA,gBAAWjO,GAExB,CAEa,IAAAqQ,GACXC,GAAuBtB,IAEnB,SAAUsB,GACdlT,GAMA,OAAQ6R,SAAAA,EAAMC,GAAY,MAAA,CACxBnK,KAAU,MAAJkK,OAAI,EAAJA,EAAM1U,KACZiL,MAAOyJ,GAAQA,EAAK1U,KAAO0U,OAAOjP,EAClC4F,QAAS,SAAC2G,EAAyB/G,GACjC,OAAOA,EAAQpI,EAAEoI,EAAO+G,EAAK2C,QAAUlP,CACzC,EACD,CACH,CAEgB,SAAAqN,GACd5L,EACAlH,EACA2S,GAEA,OAAOc,GAAmBvM,EAAYlH,EAAM2S,EAAuB,SAAC5S,GAClE,OAAAkG,QAAQlG,EAAE,EAEd,CAEgB,SAAA0T,GACdvM,EACAlH,EACA2S,EACAgC,GAAkCqB,IAAAA,OAAlCrB,IAAAA,IAAAA,EAA0B,SAAC5U,GAAC,OAAKA,CAAC,GAElC,IAAMgV,EAA+B,OAArBiB,EAAG9O,EAAW+O,cAAO,EAAlBD,EAAoB1U,KAAK,SAACvB,GAAM,OAAAA,EAAEC,OAASA,CAAI,GAClE,OAAO2S,EAAsBoC,MAAAA,OAAAA,EAAAA,EAAYL,KAAMC,EACjD,CAEgB,SAAA1B,GAAYxB,GAC1B,IAAMyE,EAAQzE,EAAQlC,OAAOlO,MAAMqB,aACnC,GAAa,MAATwT,GAAkC,IAAjBA,EAAMhT,OAAc,OAAO,EAChD,IAAMiC,EAASsM,EAAQtM,OACjBgR,EAAWhR,EAAOoK,OACrBP,gBACA1N,KAAK,SAACvB,GAAC,OAAKA,EAAEsB,MAAMmC,WAAW,GAClC,GAAgB,MAAZ2S,EAAkB,OAAO,EAC7B,IAAMvS,EAAYuB,EAAOuK,SAASyG,GAAUhO,QAC5C,OAAOvE,GAAasS,EAAMjT,SAASW,EAAUP,MAC/C,CAEgB,SAAA6P,GACdzB,EACA0B,EACAjM,GAA6BkP,IAAAA,EAEvBC,EAAiB3M,GAAsBxC,GAC7C,OACEmP,IACCA,EAAeC,WAChBnD,EAAgByC,aAAanE,EAAQlC,OAAOlO,MAAO+U,OAAFA,EAAE3E,EAAQtJ,cAARiO,EAAAA,EAAiB/S,MAExE,CAEgB,SAAA4R,GAAkBN,GAChC,YADgCA,IAAAA,IAAAA,EAA0B,SAAC5U,GAAM,OAAAA,CAAC,GAC3D2T,EAAAA,WAAW,WAAM,OAAAiB,EAAO4B,EAAMC,KAAG,EAC1C,CAEgB,SAAA1B,GACd2B,EACA7V,EACA8V,EACA9B,EACAD,QAA0B,IAA1BA,IAAAA,EAA0B,SAAC5U,GAAM,OAAAA,CAAC,GAElC,IAAM4W,EAAahN,GAAe+M,EAAM,SAAC3W,GAAaA,MAAAA,OAAAA,EAAI,GAAA,GACpD6W,EAAWD,EAAaA,EAAa,KAAOF,EAAQ,IAAMA,EAC1DI,EAAeC,EAAAA,QAAQ,WAC3B,IACE,OAAOC,EAAO,QAACN,EAAQG,EAAW,OACpC,CAAE,MAAOI,GAEP,OADAC,QAAQC,MAAMF,GACPD,EAAO,QAAC,OACjB,CACF,EAAG,CAACH,IACEzO,EAAUuL,EAAUA,aACpByD,EAAc/N,WACdgO,EAAYhO,EAAAA,OAAO,GAClB4B,EAAOqM,EAAAA,YAAY,WACxB,OAAAC,EAAAA,kBAAkB,WAChB,IAAMC,EAAIJ,EAAY9N,QAClBkO,IACFJ,EAAY9N,aAAU5D,EACtB+R,EAAAA,wBAAwB,WACtBL,EAAY9N,QAAUkO,EACtBA,GACF,GAEJ,EAAE,GAVM,GAoCV,OAxBAE,EAASA,UAAC,WAAK,IAGEC,aAAK,IAClB,IAAAC,EAAuC3M,EAAI3B,QAApCuO,EAAOD,EAAEE,GAAAA,EAAmBF,EAAgB,GAAAG,0BAAA,WAEjDV,EAAU/N,UAAU,IAAA0O,EACJpD,EAAMqD,OAAAA,QAAAC,QACdpB,EAAaqB,SACjBC,EAAAA,aAAavX,EAAMgX,GACnBQ,EAAcA,eAACR,EAAS,WAAA,OAAMhD,MAAAA,OAAAA,EAAAA,EAAUvR,KAAK,KAC9CgV,KAAA,SAAAC,GAJHnQ,EAAQ9E,MAAQ0U,EAAAO,EAKd,EACJ,6FATmDC,CAAA,EASlD,SAAAC,EAAAC,GACiD,KAAzCrB,EAAU/N,SAASwO,IAAsBW,EAAA,MAAAC,EAAA,OAAAA,CAAA,GAAA,OAAAT,QAAAC,QAAAH,GAAAA,EAAAO,KAAAP,EAAAO,KAEpD,WAAA,QAAA,EAAA,CAAC,MAAArB,GAAAgB,OAAAA,QAAAU,OAAA1B,EAAA,CAAA,EAfDG,EAAY9N,QAAUqO,EACtBA,GAeF,EAAG,CAACb,IACJY,EAAAA,UAAU,WACR,OAAY,WACVN,EAAY9N,aAAU5D,EACtBuF,EAAI3B,QAAQ,IAAG,EACjB,CACF,EAAG,IACIlB,CACT,CAEgB,SAAAwQ,GACdC,EACA1R,GAOA,OAAO2L,GALcY,GACnBvM,EACA9H,QAAAA,oBAAoByZ,WACpBD,GAIA,WAAA,OAAMlF,EAAAA,WAAW,KAAK,OACtBjO,EAEJ,CAEgB,SAAAqT,GACdF,EACA1R,GAOA,OAAO2L,GALcY,GACnBvM,EACA9H,QAAmBA,oBAAC2Z,MACpBH,GAIA,WAAM,OAAAlF,EAAUA,WAAC,KAAK,OACtBjO,EAEJ,CAEA,SAASoN,GACPmG,EAIAC,EACAhO,EACAT,GAEA,MAAO,CACLA,UACW/E,IAAT+E,EACIwO,EAAaxO,KACb,CAACA,EAAMwO,EAAaxO,MAAM/H,IAAIiI,IAAaC,OACjDU,QAAS,SAAC2G,EAAKlP,GAAK,IAAAoW,EAClB,OAAsC,OAAtCA,EAAOF,EAAa3N,QAAQ2G,EAAKlP,EAAE,KAAGoW,EAAID,EAAYjH,EAAKlP,EAAE,GAC/D,EACAmI,MAAO,CAAC+N,EAAa/N,MAAOA,GAEhC,UCjagBkO,GACdjS,EACAkS,GAG+BC,IAAAA,WAH/BD,IAAAA,EAGYE,IAEZ,IAAMC,EAAKzZ,EAAwBoH,GAAcA,OAAazB,EAExD+T,EAAUvQ,GAAc,CAAEsQ,GAAAA,EAAIH,gBAAAA,IAC9BK,EAAYF,EACdhP,GAA+B8O,OAAdA,EAACE,EAAGG,YAAUL,EAAI,GAAI,SAACtZ,GAAM,OAAAA,EAAEC,IAAI,GACpD,IACJ,OAAOkL,EAAAA,YACL,SAAC8G,GAAO2H,IAAAA,EAAAC,EAAAC,EACEN,EAAOC,EAAQnQ,QAAfkQ,GACR,GAAKA,EAAL,CACA,IAAMlY,EAA8C,OAAzCsY,EAAGC,OAAHA,EAAG5H,EAAI8H,YAAYrK,eAAhBmK,EAAAA,EAA0BrK,OAAOlO,OAAKsY,EAAI,CACtDtY,MAAO,YACPrB,KAAMf,QAASA,UAACwP,KAGhBtG,EAGE6J,EAHF7J,QACA4R,EAEE/H,EAFF+H,cACe5G,EACbnB,EADF8H,YAAe3G,gBAGjB6G,EAAAA,qBAAqB7R,EAAS,WAAM,OAAAA,EAAQ8R,SAAS,UAAW,GAAG,GAC/DV,EAAGlU,UACL6U,EAAYA,aACV/R,EACA,SAACzD,GACC,OAAQqV,EAAc1W,OACpB8P,EAAgByC,aAAavU,EAAOqD,GAClCyO,EAAgBgH,sBACd9Y,EACAnC,8BAAsBwW,UACtB,GACA,GAEF,IACN,EACA,gBACAjQ,UAEJoU,EAAAN,EAAGG,aAAHG,EAAezV,QAAQ,SAACM,EAAGoF,GAAC,OAC1BsP,EAAgB1U,EAAC3C,EAAA,GAAOiQ,EAAG,CAAEoI,MAAOtQ,EAAGzI,MAAAA,EAAO6F,WAAYqS,IAAK,EA7BjE,CA+BF,EACA,GAAGA,EAAM,MAAFA,OAAE,EAAFA,EAAIlU,SAAUoU,EAAWL,GAEpC,CAEA,SAASE,GACPe,EACArI,GAEA,OAAQqI,EAAUra,MAChB,KAAKJ,QAAAA,cAAcuN,OACjBmN,GAAmBD,EAA8BrI,GACjD,MACF,KAAKpS,QAAaA,cAACyN,QACjBkN,GAAoBF,EAA+BrI,GACnD,MACF,KAAKpS,QAAaA,cAAC2N,KACjBiN,GAAiBH,EAA4BrI,GAGnD,CAEgB,SAAAuI,GACdF,EACArI,GAEA,IAAMyI,EAAMzI,EAAI8H,YAAYzJ,WACtBqK,EAAW5F,GACfuF,EAAUtF,WACVzD,GAAgBmJ,GAAKtS,QACrBoJ,GAAYkJ,QACZhV,EACA,SAACf,GAAC,OAAW,MAALA,EAAY,KAAoB,iBAANA,EAAiBA,EAAIiW,KAAKC,UAAUlW,EAAE,GAE1EwV,EAAYA,aACVlI,EAAI7J,QACJ,WAAA,OAAQ6J,EAAI+H,cAAc1W,MAAyB,KAAjBqX,EAASrX,KAAY,EACvD,UAAY2O,EAAIoI,MAEpB,CAEgB,SAAAE,GACdO,EACA7I,GAEA,IACE7J,EAIE6J,EAJF7J,QACegL,EAGbnB,EAHF8H,YAAe3G,gBACf4G,EAEE/H,EAFF+H,cACA1Y,EACE2Q,EADF3Q,MAEF6Y,EAAAA,aACE/R,EACA,SAACzD,GACC,IAAMoW,EAAM3H,EAAgB4H,cAAc1Z,EAAO8G,GAEjD,IADe4R,EAAc1W,MAI7B,GAAc,MAAVwX,EAAGrP,KAAesP,EAAMD,EAAGrP,IAAK,CAClC,GAAInK,MAAAA,IAAAA,EAAOe,WAOT,OAAO+Q,EAAgBgH,sBACrB9Y,EACAnC,QAAAA,sBAAsB8b,UACtBF,EACAD,EAAGrP,KAVLrD,EAAQ8S,SAAS,SAACvW,GAChB,OAAA0J,MAAMC,QAAQ3J,GACVA,EAAE9B,OAAOwL,MAAM8M,KAAK,CAAEhY,OAAQ2X,EAAGrP,IAAO9G,EAAExB,UAC1CkL,MAAM8M,KAAK,CAAEhY,OAAQ2X,EAAGrP,KAAO,EAUzC,MAAWqP,GAAU,MAAVA,EAAGpP,KAAeqP,EAAMD,EAAGpP,IACpC,OAAO0H,EAAgBgH,sBACrB9Y,EACAnC,QAAAA,sBAAsBic,UACtBL,EACAD,EAAGpP,IAIT,EACA,SAAWuG,EAAIoI,MAEnB,CAEgB,SAAAI,GAAiBY,EAAmBpJ,GAClD,IAMIqJ,EALFlT,EAIE6J,EAJF7J,QACA9G,EAGE2Q,EAHF3Q,MACA+Y,EAEEpI,EAFFoI,MACejH,EACbnB,EADF8H,YAAe3G,gBAGjB,GAAIiI,EAAGE,UACLD,EAAiBlI,EAAgBoI,cAAcla,EAAO+Z,EAAGE,eACpD,CACL,IAAME,EAAU,IAAIjO,KACpB8N,EAAiB9N,KAAKkO,IACpBD,EAAQE,cACRF,EAAQG,WACRH,EAAQI,WAENR,EAAGS,kBACLR,GAAuC,MAArBD,EAAGS,gBAEzB,CACA3B,EAAAA,aACE/R,EACA,SAACzD,GACC,GAAIA,EAAG,CACL,IAAMoX,EAAU3I,EAAgBoI,cAAcla,EAAOqD,GAC/CqX,EAAWX,EAAGY,aAAenc,uBAAeoc,SAClD,GAAIF,EAAWD,EAAUT,EAAiBS,EAAUT,EAClD,OAAOlI,EAAgBgH,sBACrB9Y,EACA0a,EACI7c,QAAqBA,sBAACgd,aACtBhd,QAAAA,sBAAsBid,cAC1BL,EACAT,EAGN,CACA,OACF,IAAA,EACA,OAASjB,EAEb,CC7Ma,ICqKDgC,GDrKCC,gBAAsB,WACjC,SAAAA,EACYC,EACAC,YADAD,IAAAA,EAAgC,CAAC,KAAM,iBACvCC,IAAAA,EAAuC,SAACzZ,GAAC,OAAKyK,KAAKiP,MAAM1Z,EAAE,GAD3DwZ,KAAAA,wBACAC,mBAAA,EADAE,KAAWH,YAAXA,EACAG,KAAaF,cAAbA,CACT,CAAC,IAAAG,EAAAL,EAAAM,UAmHHN,OAnHGK,EAEJnB,cAAA,SAAcla,EAAoBqD,GAChC,OAAO+X,KAAKF,cAAc7X,EAC5B,EAACgY,EACDvC,sBAAA,SACE9Y,EACAub,EACAC,EACAC,GAEA,OAAQF,GACN,KAAK1d,QAAAA,sBAAsBwW,SACzB,MAAO,uBACT,KAAKxW,QAAqBA,sBAAC8b,UACzB,MAAO,2BAA6B8B,EACtC,KAAK5d,QAAqBA,sBAACic,UACzB,MAAO,4BAA8B2B,EACvC,KAAK5d,QAAAA,sBAAsBid,cACzB,MAAkC,2BAAA,IAAI5O,KAAKuP,GAAUC,eACvD,KAAK7d,8BAAsBgd,aACzB,MAAiC,0BAAA,IAAI3O,KAAKuP,GAAUC,eACtD,QACE,MAAO,gBAEb,EAACL,EAEDM,eAAA,SAAerO,GACb,OAAO8N,KAAKQ,eAAetO,EAAKY,OAClC,EAACmN,EAEDO,eAAA,SAAetO,GACb,OAAO8N,KAAKS,WAAWvO,EAAKtN,MAC9B,EAACqb,EAEDQ,WAAA,SAAUzU,OAAGzH,EAAOyH,EAAPzH,QACX,OAAOA,GAAWA,EAAQkC,OAAS,EAAIlC,EAAU,IACnD,EAAC0b,EAEDS,iBAAA,SACEC,EACA/b,GAEA,YAAY4b,eAAe5b,EAC7B,EAACqb,EAED9G,aAAA,SAAa/S,EAAgBQ,GAC3B,GAAIR,EAAET,WACJ,OAAOgM,MAAMC,QAAQhL,GAA0B,IAAjBA,EAAMH,OAAwB,MAATG,EACrD,OAAQR,EAAE7C,MACR,KAAKf,QAASA,UAACiD,OACf,KAAKjD,kBAAUoe,SACf,KAAKpe,QAAAA,UAAUsO,KACf,KAAKtO,kBAAUqe,KACb,OAAQja,EACV,QACE,OAAgB,MAATA,EAEb,EAACqZ,EAEDa,WAAA,SAAWlc,EAAoBgC,GAAU,IAAAma,EAAAC,EACvC,OAAkDD,OAAlDA,EAAmC,OAAnCC,EAAOhB,KAAKiB,UAAUrc,EAAOgC,SAAM,EAA5Boa,EAA8BE,eAAaH,EAAI,EACxD,EAACd,EAEDgB,UAAA,SACErc,EACAgC,EACAua,GAEA,IAAM5c,EAAUyb,KAAKS,WAAW7b,GAC1Bwc,EAAS7c,MAAAA,OAAAA,EAAAA,EAASM,KAAK,SAACvB,GAAC,OAAKA,EAAEsD,QAAUA,CAAK,GACrD,GAAIwa,EAAQ,OAAOA,EAAOza,KAC1B,OAAQ/B,EAAMrB,MACZ,KAAKf,QAAAA,UAAUsO,KACb,OAAOlK,EAAQ,IAAIkK,KAAKlK,GAAOya,0BAAuBrY,EACxD,KAAKxG,QAAAA,UAAUoe,SACb,OAAOha,EACH,IAAIkK,KAAKkP,KAAKlB,cAAcla,EAAOgC,IAAQ0a,sBAC3CtY,EACN,KAAKxG,QAASA,UAACqe,KACb,OAAOja,EACH,IAAIkK,KAAK,cAAgBlK,GAAO2a,0BAChCvY,EACN,KAAKxG,kBAAUgf,KACb,YAAY3B,YAAYjZ,EAAQ,EAAI,GACtC,QACE,OAAgB,MAATA,EAAgBA,EAAMiI,gBAAa7F,EAEhD,EAACiX,EACD3B,cAAA,SAAclY,EAAgBsF,GAAqB+V,IAAAA,EAAAlO,EACjD,OAAOnN,EAAET,kBAAU8b,EACE,OADFlO,EACd7H,EAAQ8H,eAAQ,EAAhBD,EAAkB9M,QAAMgb,EAAI,EAC7BzB,KAAK0B,YAAYtb,EAAGsF,EAAQ9E,MAClC,EAACqZ,EACDyB,YAAA,SAAY9c,EAAoBgC,GAAU+H,IAAAA,EACxC,OAA8B,OAA9BA,EAAQ/H,IAASA,MAAAA,OAAAA,EAAAA,EAAOH,SAAMkI,EAAK,CACrC,EAACsR,EAED0B,aAAA,SAAa/c,EAAoBgd,EAAaC,GAC5C,GAAU,MAAND,EAAY,OAAa,MAANC,EAAa,EAAI,EACxC,GAAU,MAANA,EAAY,OAAQ,EACxB,OAAQjd,EAAMrB,MACZ,KAAKf,QAASA,UAACsO,KACf,KAAKtO,kBAAUoe,SACf,KAAKpe,QAAAA,UAAUqe,KACf,KAAKre,QAASA,UAACiD,OACb,OAAQmc,EAAcE,cAAcD,GACtC,KAAKrf,QAASA,UAACgf,KACb,OAAQI,EAAmBC,EAAiB,EAAI,GAAM,EACxD,KAAKrf,QAASA,UAACuf,IACf,KAAKvf,QAASA,UAACwf,OACb,OAAQJ,EAAiBC,EAC3B,QACE,OACJ,EACF,EAACjC,CAAA,CAvHgC,GA0HtBqC,GACX,IAAIrC,2HCsLU,SAAAsC,GACdzX,EACA0X,EACA5d,EACA6d,GAA8B,IAAAC,EAAAC,EAAAC,WAD9Bhe,IAAAA,EAAgC,CAAE,GAGlC,IAKIyO,EALEwP,EAA6C,OAApCH,EAAG9d,MAAAA,EAAQke,iBAARle,EAAAA,EAAQke,YAAchY,IAAW4X,EAAIK,GACjD3P,EAAexO,EAAQwO,aACvB2D,EAAyC4L,OAA1BA,EAAG/d,EAAQmS,iBAAe4L,EAAIL,GAC7C9F,EAAuCoG,OAAhCA,EAAGhe,EAAQ2R,uBAAqBqM,EAAIlJ,GAI/CrG,EADkB,MAAhBD,EACSqP,EAAe9O,gBAAgBP,GAE/BY,GAAelJ,EAAY2X,GAExC,IAAMO,EAAgBjG,GACpBjS,EACAlG,EAAQqe,mBAEJC,EAAe1U,GAAgB,CACnC2U,oBAAqBpL,GAAwByE,EAAS1R,GACtDsY,eAAgB9M,GAAsBkG,EAAS1R,GAC/CuY,gBAAiBrM,GAAoBwF,EAAS1R,GAC9CwY,gBAAiB7L,GAAoB+E,EAAS1R,GAC9CyY,eAAgBhM,GAA0BiF,EAAS1R,GACnD0Y,UAAW9G,GAAiBF,EAAS1R,GACrC2Y,WAAYlH,GAAkBC,EAAS1R,GACvC4Y,YAAavM,GACXqF,EACAxZ,QAAAA,oBAAoB2gB,MACpB7Y,GAEF8Y,YAAazM,GACXqF,EACAxZ,QAAAA,oBAAoB6gB,YACpB/Y,GAEFgZ,eAAgBhM,GAAmB0E,EAAS1R,KAGxCiC,EAAIF,GAAc,CACtBjI,QAAAA,EACAkG,WAAAA,EACAsI,aAAAA,EACAqP,eAAAA,EACApP,SAAAA,IAGI0Q,EAAYjV,EAAWA,YAAC,WAC5B,IAAMkV,EAAeC,EAAAA,uBAErB,IAAI,IAAAC,EAAAC,EAAAC,EAAAC,EACFC,EAMIvX,EAAEE,QALQzH,EAAC8e,EAAbxZ,WACAlG,EAAO0f,EAAP1f,QACAwO,EAAYkR,EAAZlR,aAIIqF,EAA2ByL,OAAnBA,EAAGtf,EAAQ6T,UAAQyL,EAAI,CAAA,EAC/BxG,EAAkC,CACtC3G,gBAAAA,EACA1D,SALYiR,EAAZjR,SAMAY,WAPmBqQ,EAAnB7B,eAQAhK,SAAAA,GAEF8L,EAWIrB,EAAaxF,GAVf2F,EAAekB,EAAflB,gBACAC,EAAeiB,EAAfjB,gBACAF,EAAcmB,EAAdnB,eACAU,EAAcS,EAAdT,eACAF,EAAWW,EAAXX,YACAJ,EAASe,EAATf,UACAE,EAAWa,EAAXb,YACAH,EAAcgB,EAAdhB,eACAJ,EAAmBoB,EAAnBpB,oBACAM,EAAUc,EAAVd,WAGIe,EAAUpB,EAAenW,QAAQhG,MACjCwd,EAAanN,EAAUA,WAAyB,WAAA,OACzC,MAAXkN,EACI,CACEA,QAAAA,EACAE,QAASF,QAEXnb,CAAS,GAEfsb,EAAgBA,iBACd,WAAA,OAAMvB,EAAenc,KAAK,EAC1B,SAACud,GACgB,MAAXA,GACFC,EAAW5F,SAAS,SAAC+F,GAAE,MAAM,CAC3BJ,QAAAA,EACAE,QAASE,EAAKA,EAAGF,QAAUF,EAC5B,EACL,GAGF,IAAMK,EAAgBpC,EAAe1W,QAC/BA,EAAkB,OAAXoY,EAAG9Q,QAAQ,EAAR8Q,EAAUpY,QAC1B4Y,EAAAA,iBACE,WAAA,IAAAG,EAAA,MAAM,CACJL,EAAWxd,MACXkc,EAAoBlc,MACpB8E,MAAAA,OAAAA,EAAAA,EAAS2H,OACThQ,EAAwBoH,IAAeA,EAAWia,gBAClDrhB,EAAwBoH,KACE,OAAxBga,EAAAha,EAAWL,oBAAa,EAAxBqa,EAA0BlhB,OAAQR,uBAAe4hB,WACnDH,EAAcnR,OACd9O,EAAQqgB,OACR5B,EAAgBpc,MACjB,EACD,SAAA+H,GAAE,IAAAkW,EAAElW,EAAA,GAAEgQ,EAAEhQ,EAAEmW,GAAGC,EAASpW,EAAEqW,GAAAA,EAAWrW,KAAEsW,EAAUtW,EAAA,GAAYA,EACzD,KACMjD,EACEmZ,GAAMA,EAAGV,UAAYU,EAAGR,UAHqB1V,EAAEuW,KAIlCL,EAAGV,QAChBzY,EAAQ8S,SAAS,SAAClb,UAChBiB,EAAQ4gB,cAAgBJ,OACpB/b,EACK,MAAL1F,GAAayhB,IAAcC,EACzBrG,EACArb,CAAC,GAEC0hB,GACVtZ,EAAQ8S,SAAS,SAAClb,GAAO,OAAK,MAALA,EAAYA,EAAIqb,CAAE,IAEtCsG,GACTT,EAAchG,SAAS,SAAClb,GAAM,OAAC,MAADA,EAAAA,EAAK,CAAE,CAAA,GAG3C,GACA,GAEF,IAAM8hB,EAAmBvO,EAAoBA,qBAAqB,WAAA,IAAAwO,EAAA,MAAO,CACvET,OAAQrgB,EAAQqgB,UAA4B,OAAlBS,EAACjB,EAAWzf,SAAX0gB,EAAmBhB,QAAQzd,OACtDkG,SAAUvI,EAAQuI,UAAYkW,EAAgBpc,MAC9CoG,SAAUzI,EAAQyI,UAAYiW,EAAgBrc,MAC9CoJ,YAAazL,EAAQyL,aAAeF,GAAqB3K,GAC1D,GACKmgB,EAAY5J,EAAAA,aAAa0J,GAC/BzC,EAAc,CACZjX,QAAgB,MAAPA,EAAAA,EAAWa,EAAAA,WAAW,MAC/B+Q,cAAe8H,EAAiBzgB,OAAOigB,OACvCvH,YAAAA,IAEF,IAAMkI,EAAYjgB,EAAA,CAAA,EACbf,EACA+gB,EACHvS,CAAAA,kBAAc/J,EACdoP,SAAAA,IAWF,GARA4C,EAASA,UAAC,WAENtP,GAC8B,kBAAvB4Z,EAAUtY,UACjBtB,EAAQsB,UAAYsY,EAAUtY,WAE9BtB,EAAQsB,SAAWsY,EAAUtY,SACjC,EAAG,CAACtB,EAAS4Z,EAAUtY,WACnBwX,EAAcnR,oBAAQ,OAAOmS,EAAA,QAAAC,cAAAD,EAAA,QAAAE,SAAA,MAEjC,IAAMC,EAOH5B,OAPaA,EACO,OADPC,EACdvZ,EAAWkb,iBAAU,EAArB3B,EAAuBhe,IAAI,SAAC1C,GAAC,OAC3B6e,EAASyD,gBAAgB,CACvBC,UAAWviB,EACX+Z,YAAAA,EACAlB,QAAAA,GACA,IACH4H,EAAI,GACD+B,EAAmBC,GAAoB,CAC3Ctb,WAAYtF,EACZgd,SAAAA,EACA6D,YAAa,SAACC,EAAGC,EAAO3hB,GAAWuT,IAAAA,EAC3BqO,EAAkB7W,GAAuBnK,GAC/CyS,EAA6CrT,MAAAA,EAAAA,EAAW,CAAA,EAAhD6d,EAAcxK,EAAdwK,eAAmBhY,EAAagc,EAAAxO,EAAAyO,IAClCC,EACkC,OAD1BxO,EACZsK,MAAAA,EAAAA,EAAkB/E,EAAYrK,UAAQ8E,EAAIuF,EAAYzJ,wBAExD,OACE4R,EAAAA,QAAAC,cAACc,GACCC,CAAAA,IAAKP,EACLxb,WAAYyb,EACZ/D,SAAUA,EACVC,eAAgBkE,EAChB/hB,QAAOe,EACFigB,CAAAA,EAAAA,EACAY,EACA/b,IAIX,EACAqc,gBAAiBjE,EACjBkE,YAAapB,EACbjI,YAAAA,EACA3R,QAAuB,MAAd+X,EAAAA,EAAkB/X,EAC3BqH,aAAAA,EACA2D,gBAAAA,EACAyM,UAAAA,EACAM,eAAAA,EACAkD,MAAOtD,EAAYzc,MACnBsc,eAAAA,EACA0D,cAAeriB,EAAQqiB,cACvBC,kBAAmBzD,EACnB0D,cAAeviB,EAAQuiB,cACvBlX,WAAYrL,EAAQqL,WACpBC,WAAYtL,EAAQsL,WACpBkX,kBAAmB5K,EACnB6K,mBAAoB,SAACC,EAAUrT,EAAYsT,GAAgB,IAAAC,EACzD,OAAOlR,GACLkG,EACA8K,EACCC,OAKGle,EAJA2K,GACEsT,SAAQE,EACRvT,MAAAA,EAAAA,EAAcZ,GAAQmU,EAAI/E,GAIpC,IAEIgF,EAAkBjF,EAASkF,aAAY/hB,KACxCwgB,EAAgB,CACnBH,WAAAA,EACAnY,UAAWC,GAAclJ,EAAQoL,YAAaxK,EAAEwK,aAChDgX,MAAOpD,EAAY3c,SAErB,OAAOub,EAASmF,iBAAgBhiB,GAAG8e,WAAAA,GAAegD,GACpD,CAAC,QACCzD,GACF,CACF,EAAG,CAACjX,EAAG8V,EAAWG,EAAeR,EAAUzL,EAAiBmM,IAE5D,OADCa,EAAkBle,YAAc,gBAC1Bke,CACT,UAEgB6D,GAAeC,GAAAC,IAAAA,EAAAC,EAAAA,uBAAA,IAAA,IAK7Bhc,EAAO8b,EAAP9b,QAcMic,EAASzF,GAlBLsF,EAAV/c,WAEQ+c,EAARrF,SACOqF,EAAPjjB,QAWuBsO,GACrBJ,GAAmB,CAAE,GAdjB+U,EAAN7iB,SAcqCwN,UAAU,IAC7CzG,iBAQF,OAAO8Z,EAAAA,QAAAC,cAACkC,OAAU,CAAA,QAAAF,GAAA,CAAA,CAGd,SAAUlB,GAAkBqB,GAAA,IAAAC,EAAAH,EAAA9D,uBAAA,IAAA,IAW1B+D,EAASzF,GAVL0F,EAAVnd,WACQmd,EAARzF,SACOyF,EAAPrjB,QACcqjB,EAAdxF,6BAaA,OAAOoD,EAAAA,QAAAC,cAACkC,OAAU,SAAAE,GAAA,CAAA,CAGd,SAAUnF,GAAgBoF,GASb,IAAAC,EAAAnd,EAAAod,EARjBvd,EAAUqd,EAAVrd,WACAiB,EAAOoc,EAAPpc,QACAgb,EAAWoB,EAAXpB,YACAC,EAAKmB,EAALnB,MACAzD,EAAc4E,EAAd5E,eAAc+E,EAAAH,EACdpR,gBAAAA,WAAeuR,EAAGhG,GAAsBgG,EACxCrY,EAAUkY,EAAVlY,WACGsY,EAAK9B,EAAA0B,EAAAK,IAEFnV,EAAWkV,EAAM7K,YAAYrK,SAC7BpO,EAAQoO,EAASF,OAAOlO,MACxB4I,EAAYC,GAAcmC,EAAYnF,EAAWmF,YACjDI,IAAgB0W,EAAY1W,YAC5BpH,IAAa6B,EAAW7B,WAAaoH,EACrCoY,EAAe1R,EAAgB+J,WAAW7b,GAC1CyjB,EAAgCN,OAAxBA,EAAG7E,MAAAA,OAAAA,EAAAA,EAAgBtc,OAAKmhB,EAAI,GACpCO,EAAU3W,MAAMC,QAAQyW,GAAYA,EAAW,CAACA,GACtD,OAAA/iB,EAAA,CACE0N,SAAAA,EACAvI,WAAAA,EACA8d,iBAAqC,OAArB3d,EAAEH,EAAW7E,UAAQgF,EAAI,GACzCc,QAAAA,EACA9G,MAAAA,EACA4jB,GAAI,IAAM9c,EAAQ+c,SAClBlkB,QACE+jB,EAAQ7hB,OAAS,EACb6hB,EACGtiB,IAAI,SAAC1C,GAAC,IAAAolB,EAAA,MACQ,iBAANplB,EACHA,EACuColB,OADtCA,EACW,MAAZN,OAAY,EAAZA,EAAcvjB,KAAK,SAAC8jB,GAAC,OAAKA,EAAE/hB,OAAStD,CAAC,IAAColB,EAAI,CACzC/hB,KAAMrD,EAAEuL,WACRjI,MAAOtD,EACR,GAENiD,OAAO,SAACjD,GAAC,OAAU,MAALA,CAAS,GAC1B8kB,EACNtb,WAAY4Z,EAAY5Z,SACxBkD,YAAAA,EACA5F,cAAuC4d,OAA1BA,EAAEvd,EAAWL,eAAa4d,EAAI,CAAEzkB,KAAM,YACnDqF,SAAAA,EACAgc,SAAU8B,EAAY9B,OACtBpX,UAAAA,EACAmZ,MAAAA,GACGuB,EAEP,CA4CgB,SAAAnC,GACdmC,GAEA,IAqBkC1c,EAAAod,EAAAC,EAAAC,EACXC,EArBT5jB,EAeV+iB,EAfFzd,WACA0X,EAcE+F,EAdF/F,SACA6D,EAaEkC,EAbFlC,YACAta,EAYEwc,EAZFxc,QACA2R,EAWE6K,EAXF7K,YACiBmF,EAUf0F,EAVFzB,gBACAhD,EASEyE,EATFzE,eACAkD,EAQEuB,EARFvB,MACAxD,EAOE+E,EAPF/E,UACA6D,EAMEkB,EANFlB,mBACAgC,EAKEd,EALFc,WACApC,EAIEsB,EAJFtB,cACAG,EAGEmB,EAHFnB,kBACAlX,EAEEqY,EAFFrY,WACAD,EACEsY,EADFtY,WAGF,GAAIvM,EAAwB8B,GAC1B,OAAO8jB,EAAW9jB,GAEpB,GAAI1B,EAA0B0B,GAC5B,OAAIA,EAAEuF,cACGue,EACLhZ,GAAY9K,EAAEuF,cAAevF,EAAE8E,MAAO,CACpCrE,SAAUT,EAAES,SACZ0L,UAAyB,OAAhByX,EAAE5jB,EAAEkK,mBAAY,EAAd0Z,EAAgBzX,aAK1B,CACL4X,cAAe/G,EAASgH,YAAY,CAClCZ,iBAA4B,OAAZ/c,EAAErG,EAAES,UAAQ4F,EAAI,GAChCf,WAAYtF,EACZ6gB,YAAAA,EACAe,kBAAAA,EACA1J,YAAAA,EACAjT,cAA6B,OAAhBwe,EAAEzjB,EAAEkK,cAAYuZ,EAAI,CAAErlB,KAAM,YACzCiK,UAAWC,GAAcmC,EAAYzK,EAAEyK,YACvCoX,mBAAAA,EACAL,MAAAA,EACAqC,WAAAA,IAEFI,MAAO,CACLA,MAAuBP,OAAlBA,EAAW,MAAT1F,OAAS,EAATA,EAAWvc,OAAKiiB,EAAI1jB,EAAE8E,MAC7BuD,UAAWC,GAAcoC,EAAY1K,EAAE0K,YACvCtM,KAAMoc,kBAAUjc,MAChB2lB,KAAMP,OAAFA,EAAE3jB,EAAEkK,mBAAFyZ,EAAAA,EAAgBxX,YAI5B,GAAIzN,EAA2BsB,GAAI,CAAA,IAAAmkB,EAAAC,EAAAC,EAAAC,EAAAC,EAC3BtG,SAAUkG,EAAGC,OAAHA,EAAGrB,EAAMrB,wBAAN0C,EAAAA,EAAyB3iB,OAAK0iB,EAAInkB,EAAEie,WACvD,MAAO,CACLxd,SAAUuc,EAASwH,aAAa,CAC9BC,WAAuCJ,OAA7BA,EAAkB,OAAlBC,EAAW,MAATtG,OAAS,EAATA,EAAWvc,OAAK6iB,EAAItkB,EAAE8E,OAAKuf,EAAIrkB,EAAE0kB,SAC7CA,SAAU1kB,EAAE0kB,SACZzG,WAAAA,EACA0G,QAC4DJ,OADrDA,EACLxB,MAAAA,EAAMpB,mBAANoB,EAAAA,EAAMpB,cAAgB3hB,EAAE0kB,SAAUzG,EAAY/F,IAAYqM,EACzD,WAAO,EACVlc,UAAWC,GAAcmC,EAAYzK,EAAEyK,YACvC+W,MAAAA,IAGN,CACA,GAAIhjB,EAA4BwB,GAAI,CAAA,IAAA4kB,EAC5B5lB,SAAI4lB,EAAG5kB,EAAE6kB,aAAWD,EAAI,CAAA,EACxBE,EAAe,CACnB9lB,KAAAA,EACAqJ,UAAWC,GAAcmC,EAAYzK,EAAEyK,YACvC+W,MAAAA,EACAviB,QAASqf,EACTpG,YAAAA,GAEF,OAAIlZ,EAAKZ,OAASL,wBAAgBgnB,QAAUtD,EACnC,CACLhhB,SAAUghB,EAAeziB,EAAuBgmB,SAAUF,IAGvD,CACLrkB,SAAUuc,EAASiI,cAAcH,GAErC,CACA,MAAO,CAAA,EAEP,SAAShB,EAAW9jB,GAAwB,IAAAklB,EAAAC,EAAAze,EAC1C,IAAKH,EAAS,MAAO,CAAE9F,SAAU,mBAAqBT,EAAEP,OACxD,IAAM2lB,EAAgB/H,EACpB0F,GAMIkB,EAASjkB,EAAEmM,eAKbtI,EAJAwhB,GACkBH,OADNA,EACD,MAATlH,OAAS,EAATA,EAAWvc,OAAKyjB,EAAIllB,EAAE8E,MACtBie,EAAM7K,YAAYrK,SAAUF,OAAOlO,OAGzC,MAAO,CACLskB,cAAe/G,EAAS8G,WAAWsB,GACnCnB,MAAO,CACL7lB,MACqB+mB,OAAnBA,EAACze,OAADA,EAAC1G,EAAES,eAAFiG,EAAAA,EAAYpF,QAAM6jB,EAAI,GAAK,EAAI3K,QAASA,UAACjc,MAAQic,QAAAA,UAAU8K,QAC9DrB,MAAAA,EACAsB,MAAOH,EAAc/B,GACrB5f,SAAUzD,EAAEyD,WAAasf,EAAMxB,YAAY1W,YAC3CqZ,KAAMlkB,EAAEmM,UACR9D,UAAWC,GAAcoC,EAAY1K,EAAE0K,aAEzC8a,aAAcjf,EAElB,CACF,CAMgB,SAAAkf,GACd3E,EACA4E,GAEA,OAAO,SAACC,GAAM,OACXA,EAAO7E,gBACNT,UAAAC,cAAAD,EAAAA,QAAAE,SAAA,KACGoF,EAAO7E,GACP4E,EAEJ,CACL,CAEgB,SAAAE,GACd9E,EACA+E,GAEA,OAAO,SAACF,GAAM,OAAMA,EAAO7E,GAAK+E,EAAKF,EAAO7E,GAAG,CACjD,CAEgB,SAAAgF,GAAsBC,GACpC,OAAQA,GACN,KAAKroB,QAAkBA,mBAACsoB,WACtB,MAAO,aACT,KAAKtoB,QAAAA,mBAAmBuoB,aACtB,MAAO,eACT,KAAKvoB,QAAAA,mBAAmBwoB,WACtB,MAAO,aACT,KAAKxoB,2BAAmByoB,SACtB,MAAO,WAEb,UAgDgBd,GACdvgB,EACArF,GAEA,OAAOqF,GAAgBP,EAAiB9E,EAC1C,CC7uBA,SAAS2mB,GAAWjoB,EAAwB2E,GAC1C,OAAY,MAAL3E,IAAmBqO,MAAMC,QAAQtO,GAAKA,EAAEkD,SAASyB,GAAKA,IAAM3E,EACrE,CAEA,SAASkoB,GACPloB,GAEA,MAAkB,cAAXA,EAAEC,IACX,CAEA,SAASkoB,GACPnoB,GAEA,MAAkB,SAAXA,EAAEC,IACX,CAEA,SAASmoB,GACPpoB,GAEA,MAAkB,UAAXA,EAAEC,IACX,CAEA,SAASooB,GACProB,GAEA,MAAkB,UAAXA,EAAEC,IACX,CAEA,SAASqoB,GACPtoB,GAEA,MAAkB,WAAXA,EAAEC,IACX,CAEA,SAASsoB,GACPvoB,GAEA,MAAkB,eAAXA,EAAEC,IACX,CAEA,SAASuoB,GACPxoB,GAEA,MAAkB,WAAXA,EAAEC,IACX,CAEA,SAASwoB,GACPzoB,GAEA,MAAkB,YAAXA,EAAEC,IACX,CAEA,SAASyoB,GACP1oB,GAEA,MAAkB,UAAXA,EAAEC,IACX,CDpCYoc,QAAZA,eAAA,GAAYA,GAAAA,QAASA,YAATA,QAASA,UAIpB,CAAA,IAHCA,GAAA,QAAA,GAAA,UACAA,GAAAA,GAAA,MAAA,GAAA,QACAA,GAAAA,GAAA,KAAA,GAAA,uCAlEqC,2HACF,+DLkEnCiK,EACAC,EACAtlB,GAEA,OAAAe,EACE/B,CAAAA,KAAMb,QAAAA,sBAAsBoB,OAC5BmG,MAAO2f,EACPC,SAAAA,GACGtlB,EAEP,oCDiamD,IAA9C0nB,EAA8C,GAAAC,MAAAC,KAAAC,WAEjD,OAAQvC,SAAAA,EAAUzG,EAAY7N,GAC5B,IAAK,IAAIlI,EAAI,EAAGA,EAAI4e,EAASxlB,OAAQ4G,IAAK,CAAAgf,IAAAA,EAAAC,EAClCC,EAAMF,OAAHA,GAAGC,EAAAL,GAAS5e,SAATgf,EAAAA,EAAAF,KAAAG,EAAczC,EAAUzG,EAAY7N,GAChD,GAAIgX,EAAK,OAAOA,CAClB,CAEF,CACF,oIMuPgB,SACdrB,EACAL,GAEA,OAAOD,GAAaK,GAAsBC,GAAML,EAClD,uCAwFM,SAAsC2B,EAY1CC,GAAiBC,IAAAA,EAAAC,EATf5d,EAAGyd,EAAHzd,IAEW6d,EAAEJ,EAAbK,UACcC,EAAEN,EAAhBO,aAWFC,EAAoCle,GACL4d,OAD4BA,EACzDC,OADyDA,EAf7CH,EAAZS,aAgBazZ,eAAbmZ,EAAAA,EAAuBlmB,QAAMimB,EAAI,EAC1B,MAAP3d,GAZQyd,EAAR5jB,SAY0B,EAAImG,EAf3Byd,EAAHxd,KAiBA,GACA,GALKke,EAAaF,EAAEG,GAAAA,EAAUH,EAOhC,GAAA,MAAO,CACLH,UAAWJ,GAAWU,EAAaP,OAAK5jB,EACxC+jB,aAAcN,GAAWS,EAAgBJ,OAAK9jB,EAC9CokB,gBAAiBF,EACjBG,aAAcF,EAElB,gIL7tBgB,SACd5lB,EACA+lB,GAEA,OAAOhmB,EAAegmB,EAAWrmB,OAAOsK,GAAwBhK,GAClE,gEFpE0B/B,EAAqBjB,GAC7C,OAAOa,EAAeE,GACpB/B,KAAMf,QAASA,UAACgf,KAChBhc,YAAAA,GACGjB,GAEP,sBA5JgB,SAA4B6K,GAG1C,OAAO3H,OAAO6G,QAAQc,GAAKpJ,IAAI,SAAC1C,GAAC,OAC9BA,EAAE,GAAkCA,EAAE,GAAG,EAE9C,kECuSgBiqB,EACdtlB,EACAtD,EACA6oB,GAEA,IAAKvlB,EAAG,OAAOA,EACf,IAAMd,EAAYxC,EAAOE,KAAK,SAACvB,UAAMA,EAAEyD,WAAW,GAC5C0mB,EAAYtmB,EAAYc,EAAEd,EAAUvC,YAASoE,EAC7C0kB,EAAmBF,EAIrB7oB,EAHAA,EAAO4B,OACL,SAACjD,GAAC,IAAAqqB,EAAAC,SAAK5oB,EAAgB1B,KAA6BqqB,OAAvBA,SAAAC,EAACtqB,EAAE2C,qBAAF2nB,EAAgBnnB,QAAMknB,EAAI,GAAK,CAAC,GAGpE,IAAKD,EAAgBjnB,OAAQ,OAAOwB,EACpC,IAAMT,EAAGlC,KAAQ2C,GAkCjB,OAjCAylB,EAAgB/lB,QAAQ,SAACrE,GAAK,IAAAuqB,EACtB3kB,EAAajB,EAAE3E,EAAEsB,OACvB,IAC0C,KAA1B,OAAdipB,EAAAvqB,EAAE2C,mBAAY,EAAd4nB,EAAgBrnB,SAASinB,MACvBnqB,EAAE6F,cAuBDqkB,GAAmBlqB,EAAEW,eAAiBiF,GACtC5F,EAAEqC,YAAcgM,MAAMC,QAAQ1I,KAAgBA,EAAWzC,eAtBrDe,EAAIlE,EAAEsB,YAGf,GAAII,EAAgB1B,GAAI,CACtB,IAAMwqB,EAAcxqB,EAAEuF,aAAelE,EAASrB,EAAEsC,SAC5CtC,EAAEqC,WACAgM,MAAMC,QAAQ1I,KAChB1B,EAAIlE,EAAEsB,OAASsE,EAAWlD,IAAI,SAAC+nB,GAAE,OAC/BR,EAAmBQ,EAAID,EAAaN,EAAgB,IAIxDhmB,EAAIlE,EAAEsB,OAAS2oB,EACbrkB,EACA4kB,EACAN,EAGN,CAQF,GACOhmB,CACT,kCAuL+BS,GAC7B,OAAY,MAALA,EACH,GACa,iBAANA,EACL,UAAYiW,KAAKC,UAAUlW,GAC3BA,EAAE4G,UACV,0BChaM,SACJjK,EACAqF,EACArE,EACArB,GAEA,OAAAe,EACE/B,CAAAA,KAAMb,QAAAA,sBAAsBc,KAC5BoB,MAAAA,EACAgB,SAAAA,EACAqE,MAAAA,EACAG,cAAe,CAAE7G,KAAM,aACpBgB,EAEP,wBFqBgB,SAGdiB,EACAb,EACAqpB,GAIA,OAAQppB,SAAAA,GAAKU,OAAAA,EAENI,CAAAA,EAAAA,EAAqBd,EAAOY,GAAa,GACzCwoB,EACHpoB,CAAAA,SAAUjB,IAEhB,+CEtBgB,SACdklB,EACAC,EACAF,EACArlB,GAEA,OAAAe,GAASukB,SAAAA,EAAUC,QAAAA,EAASF,WAAYA,MAAAA,EAAAA,EAAcC,GAAatlB,EACrE,+BOvDgB,SACdslB,EACAoE,EACA1pB,GAEA,OAAAe,EAAS/B,CAAAA,KAAM,SAAU2qB,WAAYrE,EAAUoE,OAAAA,GAAW1pB,EAC5D,kCA4CgB,SACd0pB,EACA1pB,GAEA,OAAAe,GAAS/B,KAAM,aAAgBgB,EAAO,CAAE0pB,OAAAA,GAC1C,sCF8sBEviB,EACA9G,EACAL,GAA4B,IAAAoF,EAEtBwkB,SAAIxkB,EAAG/E,EAAMY,aAAWmE,EAAI/E,EAAMA,MACxCwpB,EAUW,MAAP7pB,EAAAA,EAAW,CAAA,EAPb8pB,EAAUD,EAAVC,WAEAC,EAAcF,EAAdE,eAEAthB,EAAQohB,EAARphB,SACAF,EAAQshB,EAARthB,SACAkc,EAAUoF,EAAVpF,WAEF,MAAO,CACLiE,aAAcvhB,EACdmhB,UACG/f,GAZEshB,EAALG,WAoBMvlB,EAPA,CACE6gB,SAVGuE,EAAXI,aAU8C,MACtC5E,WAhBDwE,EAAPK,SAgBwC,OAASN,EACzCrE,QAAS,WAAF,OACJd,GAAc0F,EAAAA,WAAWhjB,EAAStC,EAAqBxE,GAAO,EACjEoI,SAAAA,GAGR+f,aACGjgB,GApBKshB,EAARO,cA2BM3lB,EANA,SAACqE,SAAe,CACdwc,SAAUyE,GAAkC,SAC5C1E,WAAYyE,GAA0B,SACtCvE,QAAS,WAAF,OAASd,GAAc4F,EAAaA,cAACljB,EAAS2B,EAAE,EACvDL,SAAAA,EACD,EAGX,8BEnyBgB,SACdihB,EACA1pB,GAEA,OAAAe,EAAA,CAAS/B,KAAM,QAAS0qB,OAAAA,GAAW1pB,EACrC,6BAEgB,SACd0pB,EACA1pB,GAEA,OAAAe,EAAA,CAAS/B,KAAM,OAAQ0qB,OAAAA,GAAW1pB,EACpC,gCASgB,SACd0pB,EACA1pB,GAEA,OAAAe,EAAA,CAAS/B,KAAM,UAAW0qB,OAAAA,GAAW1pB,EACvC,2BNpEgB,SACdsqB,GAKA,MAHe,CACbC,QAIF,SAASA,EAAQC,GACf,IAAM/jB,EAAW6jB,EAAQE,GACzB,GAAI/jB,EACF,MAAO,CACLgkB,SAAUpc,GAAe,CACvBhN,SAAUoF,EACVzH,KAAMb,QAAAA,sBAAsBgB,QAE9BorB,QAAAA,EAIN,EACF,sCKlGEG,EACAC,GAAkC,IAAAC,OADQ,IAA1CF,IAAAA,EAA0C,IAG1C,IAAMG,EAAoBH,EAAgB1oB,OAAOklB,IAC3C4D,EAAqBJ,EAAgB1oB,OAAOmlB,IAC5C4D,EAAyBL,EAAgB1oB,OAC7CilB,IAEI+D,EAAuBN,EAAgB1oB,OAAOwlB,IAC9CyD,EAAiBP,EAAgB1oB,OAAOolB,IACxC8D,EAAiBR,EAAgB1oB,OAAOylB,IACxC0D,EAAkBT,EAAgB1oB,OAAOulB,IACzC6D,EAAkBV,EAAgB1oB,OAAOqlB,IAKzCgE,EAA8B,CAClCjG,aAwFF,SAAsBzB,GAA0B2H,IAAAA,EAI9C,OAFoE,OADtDA,EACZH,EAAgB7qB,KAAK,SAACvB,GAAM,OAAAioB,GAAQjoB,EAAE4qB,WAAYhG,EAAM2B,SAAS,IAACgG,EAClEX,EAAiBhrB,QACH+pB,OAAO/F,EAAO0H,EAChC,EA5FE3G,WAgDF,SACEf,GAAwB4H,IAAAA,EAGCC,EAErB7H,EAFF9d,cAAiB7G,KACjBqB,EACEsjB,EADFtjB,MAGIL,EAAUqF,EAAWse,GAcrBzS,GAFH,OAXWqa,EACZV,EAAkBvqB,KAChB,SAACvB,GAAC,IAAA0sB,EAAAC,EAAAC,EAAA,OACaF,OAAbA,EAAC1sB,EAAEqC,aAAUqqB,MACY,MAAtB9H,EAAMnV,cAAyC,OAArBkd,EAAKrrB,EAAMe,aAAUsqB,KACxC,OAAVC,EAAC5sB,EAAEiB,UAAO2rB,KAAe3rB,IACvBjB,EAAE6sB,YACFJ,GAAchtB,QAAAA,eAAeuH,UAC7BihB,GAAQjoB,EAAE6sB,WAAYvrB,EAAMrB,OAC3BD,EAAEysB,YAAcxE,GAAQjoB,EAAEysB,WAAYA,IACtCzsB,EAAE8sB,OAAS9sB,EAAE8sB,MAAMlI,GAAQ,IACjC4H,EAAIZ,EAAiB/qB,MAEA8pB,OAAO/F,EAAO0H,GACtC,MAAsB,mBAAXna,EAA8BA,EAClC,SAACqF,GAAC,OAAAxV,EAAA,CAAA,EAAWwV,EAAC,CAAElV,SAAU6P,GAAM,CACzC,EAxEE0T,YA0EF,SACEjB,GAAyB,IAAAmI,EAEnBN,EAAa7H,EAAM9d,cAAc7G,KAIjCkS,GAF6D4a,OADrDA,EACZhB,EAAmBxqB,KAAK,SAACvB,GAAM,OAAAioB,GAAQjoB,EAAEysB,WAAYA,EAAW,IAACM,EACjEnB,EAAiB7qB,OACK4pB,OAAO/F,EAAO0H,GACtC,MAAsB,mBAAXna,EAA8BA,EAClC,SAACqF,GAAC,OAAAxV,EAAA,CAAA,EAAWwV,EAAC,CAAElV,SAAU6P,GACnC,CAAA,EAnFE2U,cA4FF,SAAuBlC,OAA2BoI,EAC1CP,EAAa7H,EAAM/jB,KAAKZ,KAI9B,OAFqE,OADvD+sB,EACZf,EAAqB1qB,KAAK,SAACvB,GAAC,OAAKioB,GAAQjoB,EAAEysB,WAAYA,EAAW,IAACO,EACnEpB,EAAiB9qB,SACH6pB,OAAO/F,EAAO0H,EAChC,EAjGEW,YAAAA,EACAC,YA0BF,SAAqBtI,GAAyB,IAAAuI,EAC5C,OAAyB,OAAlBA,EAAChB,EAAe,IAAEgB,EAAIvB,EAAiBvO,OAAOsN,OACnD/F,EACA0H,EAEJ,EA9BEhK,gBAiBF,SAAyBsC,GAAqBwI,IAAAA,EAK5C,OADGA,OAHWA,EACZpB,EAAuBzqB,KAAK,SAACvB,GAC3B,OAAAioB,GAAQjoB,EAAEqtB,cAAezI,EAAMrC,UAAUtiB,KAAK,IAC/CmtB,EAAIxB,EAAiBrJ,WACRoI,OAAO/F,EAAO0H,EAChC,EAtBEvI,aASF,SAAsBa,GAAyB,IAAA0I,EAI7C,OAFyDA,OAD3CA,EACZjB,EAAgB9qB,KAAK,SAACvB,GAAM,OAACA,EAAE8sB,OAAS9sB,EAAE8sB,MAAMlI,EAAM,IAAC0I,EACvD1B,EAAiB7H,cACH4G,OAAO/F,EAAO0H,EAChC,EAbEtI,kBAZ8C6H,OADxBA,EACtBF,EAAgBpqB,KAAKgnB,KAAyBsD,EAC9CD,EAAiB9K,YAWoB6J,OACrC4C,gBAGF,SAAyBzH,GACvB,OAAOmH,EAAY,CAAEnH,MAAAA,EAAO7lB,KAAMoc,QAASA,UAACmR,WAAQ9nB,OAAWA,EACjE,GAwBA,SAASunB,EACPrI,EACA6I,EACAC,GAAmBC,IAAAA,EAKnB,OAF8D,OADhDA,EACZzB,EAAe3qB,KAAK,SAACvB,GAAM,OAAAioB,GAAQjoB,EAAE4tB,UAAWhJ,EAAM3kB,KAAK,IAAC0tB,EAC5D/B,EAAiB9F,OACH6E,OAAO/F,EAAO6I,EAAYC,EAAUpB,EACtD,CAwDA,OAAOA,CACT,8BCWgB,SACd3B,EACA1pB,GAEA,OAAAe,EAAS/B,CAAAA,KAAM,QAAS0qB,OAAAA,GAAW1pB,EACrC,8BASgB,SACd0pB,EACA1pB,GAEA,OAAAe,EAAA,CAAS/B,KAAM,QAAS0qB,OAAAA,GAAW1pB,EACrC,+BAhDgB,SACd0pB,EACA1pB,GAEA,OAAAe,EAAS/B,CAAAA,KAAM,SAAU0qB,OAAAA,GAAW1pB,EACtC,iEA6CgB,SACd0pB,EACA1pB,GAEA,OAAAe,EAAS/B,CAAAA,KAAM,aAAc0qB,OAAAA,GAAW1pB,EAC1C,2CT3CgB,SACdiB,EACAjB,GAEA,OAAOa,EAAeE,EAAA,CACpB/B,KAAMf,QAASA,UAACsO,KAChBtL,YAAAA,GACIjB,GAER,wBAagB,SACdiB,EACAjB,GAEA,OAAOa,EAAeE,EAAA,CACpB/B,KAAMf,QAASA,UAACoe,SAChBpb,YAAAA,GACIjB,GAER,kXAnDgB,SACdiB,EACAjB,GAEA,OAAOa,EAAeE,EACpB/B,CAAAA,KAAMf,kBAAUwf,OAChBxc,YAAAA,GACIjB,GAER,8BEdM,SAA8B0T,GAClC,MAAO,CAAE1U,KAAMZ,QAAmBA,oBAACgV,aAAcM,KAAAA,EACnD,0BAUM,SAA0BA,GAC9B,MAAO,CAAE1U,KAAMZ,4BAAoB0U,SAAUY,KAAAA,EAC/C,mCAVgCA,GAC9B,MAAO,CAAE1U,KAAMZ,QAAAA,oBAAoBiU,SAAUqB,KAAAA,EAC/C,4BAEgB,SAAkBA,GAChC,MAAO,CAAE1U,KAAMZ,QAAAA,oBAAoB2T,QAAS2B,KAAAA,EAC9C,0IAUgB,SAAYrT,EAAegC,GACzC,MAAO,CAAErD,KAAMX,QAAAA,eAAeiW,UAAWjU,MAAAA,EAAOgC,MAAAA,EAClD,oBANM,SAAoBhC,GACxB,MAAO,CAAErB,KAAMX,uBAAeY,KAAMoB,MAAAA,EACtC,qDK+0BgB,SAAqB8J,GACnC,OAAQ7E,SAAAA,EAAgBwD,EAAW8jB,gBAAiB,OAClD3L,EAAAA,QAAAC,cAAC2L,EAAmBA,oBAACzQ,CAAAA,MAAOjS,EAAE6Z,kBAC3B,SAAC8I,EAAIhkB,UACJqB,EAAEsX,YAAY3Y,EAAGgkB,EAAI,CACnBjP,eAAgB1T,EAAE2O,YAAYzJ,WAC9BwE,SAAU,CAAEgJ,OAAQvX,EAAGynB,eAAgBH,IAE3C,EACoB,CAE1B,yENvjBEzoB,EACA6oB,GAEA,GAAI5f,MAAMC,QAAQ2f,GAAY,CAC5B,IAAIC,EAAO9oB,EAEX,OADA6oB,EAAU5pB,QAAQ,SAACrE,UAAOkuB,EAAOA,EAAK5rB,SAAUtC,EAAE,GAC3CkuB,CACT,CACA,OAAO9oB,EAAO9C,SAAU2rB,EAC1B,qCA/SE5sB,EACAC,GAEA,OAAOF,EAAUC,EAAQC,EAC3B,qHAmYED,EACAwP,GAEA,GAAKA,EAAL,CAKA,IAJA,IAAMsd,EAAatd,EAAUT,MAAM,KAC7Bge,EAA6B,GAC/BrkB,EAAI,EACJskB,EAA2ChtB,EACxC0I,EAAIokB,EAAWhrB,QAAUkrB,GAAe,CAC7C,IACMC,EAAYltB,EAAUitB,EADjBF,EAAWpkB,IAEtB,IAAKukB,EAAW,OAChBF,EAAY3pB,KAAK6pB,GACjBD,EACE3sB,EAAgB4sB,KAAeA,EAAUjsB,WACrCisB,EAAUhsB,cACVoD,EACNqE,GACF,CACA,OAAOqkB,EAAYjrB,SAAWgrB,EAAWhrB,OAASirB,OAAc1oB,CAhBhC,CAiBlC,uDAnagB,SACdrE,EACAC,GAEA,OAAOF,EAAUC,EAAQC,EAC3B,2CAiQgBitB,EACd1sB,EACA2sB,GAAsE,IAAAC,EAAAC,EAEhEC,EAAeF,OAAHA,EAAG5sB,EAAES,eAAFmsB,EAAAA,EAAYlnB,QAAQ,SAACvH,GAAC,OACzCuuB,EAAwBvuB,EAAGwuB,EAAa,GAEpCviB,EAAKD,GAAuBnK,GAC5B+sB,EAAKrkB,UACT,CACE1I,EAAEyK,WACFzK,EAAEwK,YACFxK,EAAE0K,YAAU1J,OACTsB,OAAO0qB,OAAO5iB,UAAGyiB,EAChBF,MAAAA,OAAAA,EAAAA,EAAe3sB,IAAE6sB,EAAI,IACzBhsB,IAAIuH,KAER,OAAI0kB,IAAiBC,EAAWD,EAC3BC,EACDD,EAAc,CAAQC,GAAE/rB,OAAK8rB,GAC1B,CAACC,GAFQ,EAGlB,6JM8egB,SAAsBznB,GAAiC2nB,IAAAA,EAC/DC,EAAYD,OAAHA,EAAG3nB,EAAWwS,iBAAXmV,EAAAA,EAAuBvtB,KACvC,SAACvB,GAAM,OAAAA,EAAEC,OAASJ,QAAaA,cAACuN,MAAM,GAGxC,MAAO,CAAE3B,IAAKsjB,MAAAA,OAAAA,EAAAA,EAAWtjB,IAAKC,IAAc,MAATqjB,OAAS,EAATA,EAAWrjB,IAChD,6FJtmBmC8D,GACjC,OAAOA,EAAOP,gBAAgBvM,IAAI,SAAC1C,GAAM,OAAAA,EAAEsB,KAAK,EAClD,iCAV8BsO,GAC5B,OAAOsB,GACLtB,EACA,SAACpI,UAAMA,EAAElG,KAAK,EACd,SAACtB,GAAM,OAACA,EAAEoF,MAAM,EAEpB,kCDlJE9C,EACAqE,EACA1F,GAEA,OAAAe,GACE/B,KAAMb,QAAqBA,sBAACgB,MAC5BkC,SAAAA,EACAqE,MAAAA,EACAoF,aAAc,CAAE9L,KAAM,WAAY+N,WAAYrH,IAC3C1F,EAEP,6EAlDgB,SACd+tB,EACA/tB,GAEA,OAAAe,EACE/B,CAAAA,KAAMb,QAAqBA,sBAACkB,QAC5BomB,YAAa,CAAEzmB,KAAML,wBAAgBqvB,KAAMD,KAAAA,IACxC/tB,EAEP,4BFZEiB,EACAjB,GAEA,OAAOa,EAAeE,GACpB/B,KAAMf,QAASA,UAACuf,IAChBvc,YAAAA,GACIjB,GAER,+BSOM,SACJkI,GAEA,OAAOA,EAAElJ,OAAST,QAAAA,qBAAqBkO,SACzC,+DVwbM,SACJzM,GAEA,OAAOA,EAAQhB,OAASR,uBAAe4O,KACzC,2SA5BgB,SACdpN,GAEA,OAAOA,EAAQhB,OAASN,wBAAgBuvB,IAC1C,yBAhBM,SACJjuB,GAEA,OAAOA,EAAQhB,OAASN,QAAAA,gBAAgBwvB,IAC1C,yBA2DgB,SACdttB,GAEA,OAAOA,EAAE5B,OAASb,QAAAA,sBAAsBgB,KAC1C,8DU/dM,SAA0B+I,GAC9B,OAAOA,EAAElJ,OAAST,QAAoBA,qBAAC4vB,IACzC,wDVgaM,SACJnuB,GAEA,OAAOA,EAAQhB,OAASN,QAAAA,gBAAgB0vB,WAC1C,8BU5ZgB,SACdlmB,GAEA,OAAOA,EAAElJ,OAAST,QAAAA,qBAAqB8vB,QACzC,8BVsagB,SACdruB,GAEA,OAAOA,EAAQhB,OAASR,QAAcA,eAACmO,SACzC,gDG9ZM,SAAsBoH,GAC1B,MAAO,CAAE/U,KAAMX,QAAAA,eAAegO,QAAS0H,WAAAA,EACzC,sLFvDgB,SACd/T,GAIA,OAAO,SAACc,GAACC,OAAAA,KAAWI,EAAqBL,EAAGA,GAAG,GAAWd,EAAO,CACnE,8DCmXEqK,EACAJ,EACAT,GAEA,MAAO,CAAEA,KAAAA,EAAMS,MAAAA,EAAOI,QAAAA,EACxB,uLA6EEikB,EACAC,EACAC,GAMA,YANAA,IAAAA,EAA0E,SACxEjO,EACAlD,EACAC,gBACGD,EAAAA,EAAMC,CAAE,IAERgR,EAAI,OAAOC,EAChB,IAAKA,EAAI,OAAOD,EAChB,IAAMpd,EAAMnQ,EAAA,CAAA,EAAQutB,GACpB,IAAK,IAAMrM,KAAOsM,EACZA,EAAGE,eAAexM,KAGpB/Q,EAAO+Q,GAAOuM,EAAQvM,EAFPqM,EAAGrM,GACHsM,EAAGtM,KAItB,OAAO/Q,CACT,yFMkTgB,SACdyS,EACA/F,GAAsB,IAAA8Q,EAEtBC,EAC8BD,OAD9BA,EACE/K,MAAAA,EAAMgB,mBAANhB,EAAAA,EAAMgB,cAAgBhB,IAAM+K,EAAI/K,EADgBkB,EAAK8J,EAAL9J,MAAOzD,EAAUuN,EAAVvN,WAEnDmF,EAAyB,CAC7BllB,SAHyBstB,EAARttB,SAIjB+kB,aAJ8CuI,EAAZvI,aAKlChE,MALgCuM,EAALvM,MAM3BnZ,UANe0lB,EAAT1lB,UAON2lB,WAAY,SAAC7vB,GAAM,OAAAA,CAAC,GAStB,OAPW,MAAVqiB,EAAAA,EAAc,IACZyN,KAAK,SAAC3mB,EAAG4mB,GAAC,OAAK5mB,EAAE6mB,SAAWD,EAAEC,QAAQ,GACtC3rB,QAAQ,SAACrE,UAAMA,EAAE2X,MAAM6P,EAAO,GACjCA,EAAO1B,MACLA,IAAUA,EAAMC,KACZlH,EAASoO,YAAYnH,EAAO0B,EAAOiG,WAAYjG,EAAOkG,eACtDhoB,EACC8hB,CACT,8OJ5rBE9W,EACAlB,GAAkB,IAAAygB,EAElB,OAAOhf,UAAkBgf,EAAS,MAARvf,OAAQ,EAARA,EAAUN,MAAM,MAAI6f,EAAI,GAAIzgB,EACxD,sBH7IgB,SAAYtN,EAAqBjB,GAC/C,OAAOa,EAAeE,EACpB/B,CAAAA,KAAMf,QAASA,UAACiD,OAChBD,YAAAA,GACGjB,GAEP,sCAGEiB,GAGA,OAAOJ,EAAgB,CACrB7B,KAAMf,QAASA,UAACiD,OAChBD,YAAAA,EACAjB,QAAO2nB,GAAAA,MAAAC,KAAAC,UAAA,IAEX,6BEuBgB,SACdoH,EACAjvB,GAEA,OAAAe,EAAA,CACE/B,KAAMb,QAAqBA,sBAACkB,QAC5BomB,YAAa,CAAEzmB,KAAML,QAAeA,gBAAC4tB,KAAM0C,KAAAA,IACxCjvB,EAEP,gDFiDgB,SACdiB,EACAjB,GAEA,OAAOa,EAAeE,EAAA,CACpB/B,KAAMf,QAAAA,UAAUqe,KAChBrb,YAAAA,GACIjB,GAER,8CGwDgB,SACd4P,EACAsf,EACAtvB,GAEA,OAAO+P,GACLC,EACAsf,EACAtvB,EACA,SAACiQ,EAAK/O,GAAC,OAAQ,MAAH+O,OAAG,EAAHA,EAAM/O,EAAET,MAAMA,MAAa,EAE3C,0GD5BEG,EACA0F,GAEA,gBAFAA,IAAAA,EAAwC4G,IAEjCgJ,EAAAA,QACL,WAAAzP,IAAAA,SAAAtF,EAAA,GACKmF,EACH7E,CAAAA,SAAUkG,GAAmB/G,SAAE6F,EAAEH,EAAW7E,UAAQgF,EAAI,KAAG,EAE7D,CAAC7F,EAAI0F,GAET,6BK+EM,SACJA,EACA9F,EACAwd,EACA5d,QAAA,IAAAA,IAAAA,EAAgC,CAAA,GAEhC,IAAMmI,EAAIF,GAAc,CAAE/B,WAAAA,EAAY9F,OAAAA,EAAQwd,SAAAA,EAAU5d,QAAAA,IACxD,OAAOkK,EAAAA,YACL,SAAAzC,gBACE,OACEwZ,UAAAC,cAAC8B,GAAejiB,KACVoH,EAAEE,QAAO,CACblB,QAJIM,EAAPN,QAKGgoB,WALgB1nB,EAAV0nB,aAQZ,EACA,CAAChnB,GAEL,2wBPxOEnI,EAAa0D,GACb,OAAO,SAAC5C,GAAC,OAAAC,EAAW2C,CAAAA,EAAAA,EAAE5C,GAAOd,EAC/B,CAAA,8BOkwBEymB,GAEA,OAAQ2I,SAAAA,GACN,IAAMC,EAAOD,EAAGR,WAChBQ,EAAGR,WAAa,SAAC7vB,GAAM,OAAA0nB,EAAK4I,EAAKtwB,GAAG,CACtC,CACF,6CASgB,SACd4nB,EACAF,GAEA,OAAOD,GAAWE,GAAsBC,GAAMF,EAChD"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/schemaBuilder.ts","../src/util.ts","../src/controlBuilder.ts","../src/treeNodes.ts","../src/hooks.tsx","../src/validators.ts","../src/schemaInterface.ts","../src/controlRender.tsx","../src/createFormRenderer.tsx","../src/renderers.tsx"],"sourcesContent":["import { Control } from \"@react-typed-forms/core\";\nimport { SchemaDataNode, SchemaNode } from \"./treeNodes\";\nimport { ControlDataContext } from \"./util\";\n\nexport interface SchemaField {\n type: string;\n field: string;\n displayName?: string | null;\n tags?: string[] | null;\n system?: boolean | null;\n collection?: boolean | null;\n onlyForTypes?: string[] | null;\n required?: boolean | null;\n notNullable?: boolean | null;\n defaultValue?: any;\n isTypeField?: boolean | null;\n searchable?: boolean | null;\n options?: FieldOption[] | null;\n validators?: SchemaValidator[] | null;\n}\n\nexport type SchemaMap = Record<string, SchemaField[]>;\n\nexport enum FieldType {\n String = \"String\",\n Bool = \"Bool\",\n Int = \"Int\",\n Date = \"Date\",\n DateTime = \"DateTime\",\n Time = \"Time\",\n Double = \"Double\",\n EntityRef = \"EntityRef\",\n Compound = \"Compound\",\n AutoId = \"AutoId\",\n Image = \"Image\",\n Any = \"Any\",\n}\n\nexport interface EntityRefField extends SchemaField {\n type: FieldType.EntityRef;\n entityRefType: string;\n parentField: string;\n}\n\nexport interface FieldOption {\n name: string;\n value: any;\n description?: string | null;\n group?: string | null;\n disabled?: boolean | null;\n}\n\nexport interface CompoundField extends SchemaField {\n type: FieldType.Compound;\n children: SchemaField[];\n treeChildren?: boolean;\n schemaRef?: string;\n}\n\nexport type AnyControlDefinition =\n | DataControlDefinition\n | GroupedControlsDefinition\n | ActionControlDefinition\n | DisplayControlDefinition;\n\nexport enum ValidationMessageType {\n NotEmpty = \"NotEmpty\",\n MinLength = \"MinLength\",\n MaxLength = \"MaxLength\",\n NotAfterDate = \"NotAfterDate\",\n NotBeforeDate = \"NotBeforeDate\",\n}\nexport interface SchemaInterface {\n isEmptyValue(field: SchemaField, value: any): boolean;\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean,\n ): string | undefined;\n controlLength(field: SchemaField, control: Control<any>): number;\n valueLength(field: SchemaField, value: any): number;\n getOptions(field: SchemaField): FieldOption[] | undefined | null;\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null;\n parseToMillis(field: SchemaField, v: string): number;\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string;\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number;\n searchText(field: SchemaField, value: any): string;\n}\nexport interface ControlDefinition {\n type: string;\n title?: string | null;\n styleClass?: string | null;\n layoutClass?: string | null;\n labelClass?: string | null;\n dynamic?: DynamicProperty[] | null;\n adornments?: ControlAdornment[] | null;\n children?: ControlDefinition[] | null;\n}\n\nexport enum ControlDefinitionType {\n Data = \"Data\",\n Group = \"Group\",\n Display = \"Display\",\n Action = \"Action\",\n}\n\nexport interface DynamicProperty {\n type: string;\n expr: EntityExpression;\n}\n\nexport enum DynamicPropertyType {\n Visible = \"Visible\",\n DefaultValue = \"DefaultValue\",\n Readonly = \"Readonly\",\n Disabled = \"Disabled\",\n Display = \"Display\",\n Style = \"Style\",\n LayoutStyle = \"LayoutStyle\",\n AllowedOptions = \"AllowedOptions\",\n Label = \"Label\",\n ActionData = \"ActionData\",\n}\n\nexport interface EntityExpression {\n type: string;\n}\n\nexport enum ExpressionType {\n Jsonata = \"Jsonata\",\n Data = \"Data\",\n DataMatch = \"FieldValue\",\n UserMatch = \"UserMatch\",\n NotEmpty = \"NotEmpty\",\n UUID = \"UUID\",\n}\n\nexport interface JsonataExpression extends EntityExpression {\n type: ExpressionType.Jsonata;\n expression: string;\n}\n\nexport interface DataExpression extends EntityExpression {\n type: ExpressionType.Data;\n field: string;\n}\n\nexport interface DataMatchExpression extends EntityExpression {\n type: ExpressionType.DataMatch;\n field: string;\n value: any;\n}\n\nexport interface NotEmptyExpression extends EntityExpression {\n type: ExpressionType.DataMatch;\n field: string;\n}\n\nexport interface UserMatchExpression extends EntityExpression {\n type: ExpressionType.UserMatch;\n userMatch: string;\n}\n\nexport interface ControlAdornment {\n type: string;\n}\n\nexport enum AdornmentPlacement {\n ControlStart = \"ControlStart\",\n ControlEnd = \"ControlEnd\",\n LabelStart = \"LabelStart\",\n LabelEnd = \"LabelEnd\",\n}\n\nexport enum ControlAdornmentType {\n Tooltip = \"Tooltip\",\n Accordion = \"Accordion\",\n HelpText = \"HelpText\",\n Icon = \"Icon\",\n SetField = \"SetField\",\n}\n\nexport interface IconAdornment extends ControlAdornment {\n type: ControlAdornmentType.Icon;\n iconClass: string;\n placement?: AdornmentPlacement | null;\n}\n\nexport interface TooltipAdornment extends ControlAdornment {\n type: ControlAdornmentType.Tooltip;\n tooltip: string;\n}\n\nexport interface AccordionAdornment extends ControlAdornment {\n type: ControlAdornmentType.Accordion;\n title: string;\n defaultExpanded?: boolean | null;\n}\n\nexport interface HelpTextAdornment extends ControlAdornment {\n type: ControlAdornmentType.HelpText;\n helpText: string;\n placement?: AdornmentPlacement | null;\n}\n\nexport interface SetFieldAdornment extends ControlAdornment {\n type: ControlAdornmentType.SetField;\n field: string;\n defaultOnly?: boolean | null;\n expression?: EntityExpression;\n}\n\nexport interface DataControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Data;\n field: string;\n required?: boolean | null;\n renderOptions?: RenderOptions | null;\n defaultValue?: any;\n readonly?: boolean | null;\n disabled?: boolean | null;\n validators?: SchemaValidator[] | null;\n hideTitle?: boolean | null;\n dontClearHidden?: boolean | null;\n}\n\nexport interface RenderOptions {\n type: string;\n}\n\nexport enum DataRenderType {\n Standard = \"Standard\",\n Textfield = \"Textfield\",\n Radio = \"Radio\",\n HtmlEditor = \"HtmlEditor\",\n IconList = \"IconList\",\n CheckList = \"CheckList\",\n UserSelection = \"UserSelection\",\n Synchronised = \"Synchronised\",\n IconSelector = \"IconSelector\",\n DateTime = \"DateTime\",\n Checkbox = \"Checkbox\",\n Dropdown = \"Dropdown\",\n DisplayOnly = \"DisplayOnly\",\n Group = \"Group\",\n NullToggle = \"NullToggle\",\n Jsonata = \"Jsonata\",\n Array = \"Array\",\n}\n\nexport interface TextfieldRenderOptions extends RenderOptions {\n type: DataRenderType.Textfield;\n placeholder?: string | null;\n multiline?: boolean | null;\n}\n\nexport interface CheckEntryClasses {\n entryWrapperClass?: string | null;\n selectedClass?: string | null;\n notSelectedClass?: string | null;\n}\nexport interface RadioButtonRenderOptions\n extends RenderOptions,\n CheckEntryClasses {\n type: DataRenderType.Radio;\n}\n\nexport interface StandardRenderer extends RenderOptions {\n type: DataRenderType.Standard;\n}\n\nexport interface DataGroupRenderOptions extends RenderOptions {\n type: DataRenderType.Group;\n groupOptions?: GroupRenderOptions;\n}\n\nexport interface HtmlEditorRenderOptions extends RenderOptions {\n type: DataRenderType.HtmlEditor;\n allowImages: boolean;\n}\n\nexport interface DateTimeRenderOptions extends RenderOptions {\n type: DataRenderType.DateTime;\n format?: string | null;\n forceMidnight?: boolean;\n}\n\nexport interface IconListRenderOptions extends RenderOptions {\n type: DataRenderType.IconList;\n iconMappings: IconMapping[];\n}\n\nexport interface DisplayOnlyRenderOptions extends RenderOptions {\n type: DataRenderType.DisplayOnly;\n emptyText?: string | null;\n sampleText?: string | null;\n}\nexport interface IconMapping {\n value: string;\n materialIcon?: string | null;\n}\n\nexport interface JsonataRenderOptions extends RenderOptions {\n type: DataRenderType.Jsonata;\n expression: string;\n}\n\nexport interface JsonataRenderOptions extends RenderOptions {\n type: DataRenderType.Jsonata;\n expression: string;\n}\n\nexport interface ArrayRenderOptions extends RenderOptions {\n type: DataRenderType.Array;\n addText?: string | null;\n addActionId?: string | null;\n removeText?: string | null;\n removeActionId?: string | null;\n noAdd?: boolean | null;\n noRemove?: boolean | null;\n noReorder?: boolean | null;\n childOptions?: RenderOptions | null;\n}\n\nexport type ArrayActionOptions = Pick<\n ArrayRenderOptions,\n | \"addText\"\n | \"addActionId\"\n | \"removeText\"\n | \"removeActionId\"\n | \"noAdd\"\n | \"noRemove\"\n | \"noReorder\"\n> & { readonly?: boolean; disabled?: boolean; designMode?: boolean };\n\nexport interface CheckListRenderOptions\n extends RenderOptions,\n CheckEntryClasses {\n type: DataRenderType.CheckList;\n}\n\nexport interface SynchronisedRenderOptions extends RenderOptions {\n type: DataRenderType.Synchronised;\n fieldToSync: string;\n syncType: SyncTextType;\n}\n\nexport enum SyncTextType {\n Camel = \"Camel\",\n Snake = \"Snake\",\n Pascal = \"Pascal\",\n}\n\nexport interface UserSelectionRenderOptions extends RenderOptions {\n type: DataRenderType.UserSelection;\n noGroups: boolean;\n noUsers: boolean;\n}\n\nexport interface IconSelectionRenderOptions extends RenderOptions {\n type: DataRenderType.IconSelector;\n}\n\nexport interface GroupedControlsDefinition extends ControlDefinition {\n type: ControlDefinitionType.Group;\n compoundField?: string | null;\n groupOptions?: GroupRenderOptions;\n}\n\nexport interface GroupRenderOptions {\n type: string;\n hideTitle?: boolean | null;\n childStyleClass?: string | null;\n childLayoutClass?: string | null;\n childLabelClass?: string | null;\n displayOnly?: boolean | null;\n}\n\nexport enum GroupRenderType {\n Standard = \"Standard\",\n Grid = \"Grid\",\n Flex = \"Flex\",\n GroupElement = \"GroupElement\",\n SelectChild = \"SelectChild\",\n}\n\nexport interface StandardGroupRenderer extends GroupRenderOptions {\n type: GroupRenderType.Standard;\n}\n\nexport interface FlexRenderer extends GroupRenderOptions {\n type: GroupRenderType.Flex;\n direction?: string | null;\n gap?: string | null;\n}\n\nexport interface GroupElementRenderer extends GroupRenderOptions {\n type: GroupRenderType.GroupElement;\n value: any;\n}\n\nexport interface GridRenderer extends GroupRenderOptions {\n type: GroupRenderType.Grid;\n columns?: number | null;\n}\n\nexport interface SelectChildRenderer extends GroupRenderOptions {\n type: GroupRenderType.SelectChild;\n childIndexExpression?: EntityExpression | null;\n}\n\nexport interface DisplayControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Display;\n displayData: DisplayData;\n}\n\nexport interface DisplayData {\n type: string;\n}\n\nexport enum DisplayDataType {\n Text = \"Text\",\n Html = \"Html\",\n Icon = \"Icon\",\n Custom = \"Custom\",\n}\nexport interface TextDisplay extends DisplayData {\n type: DisplayDataType.Text;\n text: string;\n}\n\nexport interface IconDisplay extends DisplayData {\n type: DisplayDataType.Icon;\n iconClass: string;\n}\n\nexport interface HtmlDisplay extends DisplayData {\n type: DisplayDataType.Html;\n html: string;\n}\n\nexport interface CustomDisplay extends DisplayData {\n type: DisplayDataType.Custom;\n customId: string;\n}\n\nexport interface ActionControlDefinition extends ControlDefinition {\n type: ControlDefinitionType.Action;\n actionId: string;\n actionData?: string | null;\n}\n\nexport enum ValidatorType {\n Jsonata = \"Jsonata\",\n Date = \"Date\",\n Length = \"Length\",\n}\nexport interface SchemaValidator {\n type: string;\n}\n\nexport interface JsonataValidator extends SchemaValidator {\n type: ValidatorType.Jsonata;\n expression: string;\n}\n\nexport interface LengthValidator extends SchemaValidator {\n type: ValidatorType.Length;\n min?: number | null;\n max?: number | null;\n}\n\nexport enum DateComparison {\n NotBefore = \"NotBefore\",\n NotAfter = \"NotAfter\",\n}\n\nexport interface DateValidator extends SchemaValidator {\n type: ValidatorType.Date;\n comparison: DateComparison;\n fixedDate?: string | null;\n daysFromCurrent?: number | null;\n}\n\nexport function isDataControlDefinition(\n x: ControlDefinition,\n): x is DataControlDefinition {\n return x.type === ControlDefinitionType.Data;\n}\n\nexport function isGroupControlsDefinition(\n x: ControlDefinition,\n): x is GroupedControlsDefinition {\n return x.type === ControlDefinitionType.Group;\n}\n\nexport function isDisplayControlsDefinition(\n x: ControlDefinition,\n): x is DisplayControlDefinition {\n return x.type === ControlDefinitionType.Display;\n}\n\nexport function isActionControlsDefinition(\n x: ControlDefinition,\n): x is ActionControlDefinition {\n return x.type === ControlDefinitionType.Action;\n}\n\nexport interface ControlVisitor<A> {\n data(d: DataControlDefinition): A;\n group(d: GroupedControlsDefinition): A;\n display(d: DisplayControlDefinition): A;\n action(d: ActionControlDefinition): A;\n}\n\nexport function visitControlDefinition<A>(\n x: ControlDefinition,\n visitor: ControlVisitor<A>,\n defaultValue: (c: ControlDefinition) => A,\n): A {\n switch (x.type) {\n case ControlDefinitionType.Action:\n return visitor.action(x as ActionControlDefinition);\n case ControlDefinitionType.Data:\n return visitor.data(x as DataControlDefinition);\n case ControlDefinitionType.Display:\n return visitor.display(x as DisplayControlDefinition);\n case ControlDefinitionType.Group:\n return visitor.group(x as GroupedControlsDefinition);\n default:\n return defaultValue(x);\n }\n}\nexport function isGridRenderer(\n options: GroupRenderOptions,\n): options is GridRenderer {\n return options.type === GroupRenderType.Grid;\n}\n\nexport function isSelectChildRenderer(\n options: GroupRenderOptions,\n): options is SelectChildRenderer {\n return options.type === GroupRenderType.SelectChild;\n}\n\nexport function isFlexRenderer(\n options: GroupRenderOptions,\n): options is FlexRenderer {\n return options.type === GroupRenderType.Flex;\n}\n\nexport function isDisplayOnlyRenderer(\n options: RenderOptions,\n): options is DisplayOnlyRenderOptions {\n return options.type === DataRenderType.DisplayOnly;\n}\n\nexport function isTextfieldRenderer(\n options: RenderOptions,\n): options is TextfieldRenderOptions {\n return options.type === DataRenderType.Textfield;\n}\n\nexport function isDataGroupRenderer(\n options?: RenderOptions | null,\n): options is DataGroupRenderOptions {\n return options?.type === DataRenderType.Group;\n}\n\nexport function isArrayRenderer(\n options: RenderOptions,\n): options is ArrayRenderOptions {\n return options.type === DataRenderType.Array;\n}\n\nexport function findField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return fields.find((x) => x.field === field);\n}\n\nexport function isScalarField(sf: SchemaField): sf is SchemaField {\n return !isCompoundField(sf);\n}\n\nexport function isCompoundField(sf: SchemaField): sf is CompoundField {\n return sf.type === FieldType.Compound;\n}\n\nexport function isDataControl(\n c: ControlDefinition,\n): c is DataControlDefinition {\n return c.type === ControlDefinitionType.Data;\n}\n\nexport function isGroupControl(\n c: ControlDefinition,\n): c is GroupedControlsDefinition {\n return c.type === ControlDefinitionType.Group;\n}\n\nexport type ControlActionHandler = (\n actionId: string,\n actionData: any,\n ctx: ControlDataContext,\n) => (() => void) | undefined;\n\nexport function isCheckEntryClasses(\n options?: RenderOptions | null,\n): options is CheckEntryClasses & RenderOptions {\n switch (options?.type) {\n case DataRenderType.Radio:\n case DataRenderType.CheckList:\n return true;\n default:\n return false;\n }\n}\n","import {\n CompoundField,\n FieldOption,\n FieldType,\n SchemaField,\n SchemaMap,\n isCompoundField,\n} from \"./types\";\n\nexport type AllowedSchema<T> = T extends string\n ? SchemaField & {\n type:\n | FieldType.String\n | FieldType.Date\n | FieldType.DateTime\n | FieldType.Time;\n }\n : T extends number\n ? SchemaField & {\n type: FieldType.Int | FieldType.Double;\n }\n : T extends boolean\n ? SchemaField & {\n type: FieldType.Bool;\n }\n : T extends Array<infer E>\n ? AllowedSchema<E> & {\n collection: true;\n }\n : T extends { [key: string]: any }\n ? CompoundField & {\n type: FieldType.Compound;\n }\n : SchemaField & { type: FieldType.Any };\n\ntype AllowedField<T, K> = (\n name: string,\n) => (SchemaField & { type: K }) | AllowedSchema<T>;\n\nexport function buildSchema<T, Custom = \"\">(def: {\n [K in keyof T]-?: AllowedField<T[K], Custom>;\n}): SchemaField[] {\n return Object.entries(def).map((x) =>\n (x[1] as (n: string) => SchemaField)(x[0]),\n );\n}\n\nexport type FieldBuilder<T extends FieldType, K> = (\n name: string,\n) => Omit<SchemaField, \"type\"> & { type: T } & K;\n\nexport function stringField(\n displayName: string,\n): FieldBuilder<FieldType.String, {}>;\n\nexport function stringField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.String, S>;\n\nexport function stringField(displayName: string, options?: any) {\n return makeScalarField({\n type: FieldType.String,\n displayName,\n ...options,\n });\n}\n\nexport function stringOptionsField(\n displayName: string,\n ...options: FieldOption[]\n) {\n return makeScalarField({\n type: FieldType.String as const,\n displayName,\n options,\n });\n}\n\nexport function withScalarOptions<\n S extends SchemaField,\n S2 extends Partial<SchemaField>,\n>(options: S2, v: (name: string) => S): (name: string) => S & S2 {\n return (n) => ({ ...v(n), ...options });\n}\n\nexport function makeScalarField<S extends Partial<SchemaField>>(\n options: S,\n): (name: string) => SchemaField & S {\n return (n) => ({ ...defaultScalarField(n, n), ...options });\n}\n\nexport function makeCompoundField<S extends Partial<CompoundField>>(\n options: S,\n): (name: string) => CompoundField & {\n type: FieldType.Compound;\n} & S {\n return (n) => ({ ...defaultCompoundField(n, n, false), ...options });\n}\n\nexport function intField(displayName: string): FieldBuilder<FieldType.Int, {}>;\n\nexport function intField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Int, S>;\n\nexport function intField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Int as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function doubleField(\n displayName: string,\n): FieldBuilder<FieldType.Double, {}>;\n\nexport function doubleField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Double, S>;\n\nexport function doubleField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Double as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function dateField(\n displayName: string,\n): FieldBuilder<FieldType.Date, {}>;\n\nexport function dateField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Date, S>;\n\nexport function dateField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Date as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function timeField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.Time as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function dateTimeField<S extends Partial<SchemaField>>(\n displayName: string,\n options?: S,\n) {\n return makeScalarField({\n type: FieldType.DateTime as const,\n displayName,\n ...(options as S),\n });\n}\n\nexport function boolField(\n displayName: string,\n): FieldBuilder<FieldType.Bool, {}>;\n\nexport function boolField<S extends Partial<SchemaField>>(\n displayName: string,\n options: S,\n): FieldBuilder<FieldType.Bool, S>;\n\nexport function boolField(displayName: string, options?: any) {\n return makeScalarField({\n type: FieldType.Bool as const,\n displayName,\n ...options,\n });\n}\n\nexport function compoundField<\n Other extends Partial<Omit<CompoundField, \"type\" | \"schemaType\">>,\n>(\n displayName: string,\n fields: SchemaField[],\n other?: Other,\n): (name: string) => CompoundField & {\n collection: Other[\"collection\"];\n} {\n return (field) =>\n ({\n ...defaultCompoundField(field, displayName, false),\n ...other,\n children: fields,\n }) as any;\n}\n\nexport function defaultScalarField(\n field: string,\n displayName: string,\n): Omit<SchemaField, \"type\"> & {\n type: FieldType.String;\n} {\n return {\n field,\n displayName,\n type: FieldType.String,\n };\n}\n\nexport function defaultCompoundField(\n field: string,\n displayName: string,\n collection: boolean,\n): CompoundField & {\n type: FieldType.Compound;\n} {\n return {\n field,\n displayName,\n type: FieldType.Compound,\n collection,\n children: [],\n };\n}\n\nexport function mergeField(\n field: SchemaField,\n mergeInto: SchemaField[],\n): SchemaField[] {\n const existing = mergeInto.find((x) => x.field === field.field);\n if (existing) {\n return mergeInto.map((x) =>\n x !== existing\n ? x\n : {\n ...x,\n onlyForTypes: mergeTypes(x.onlyForTypes, field.onlyForTypes),\n },\n );\n }\n return [...mergeInto, field];\n\n function mergeTypes(f?: string[] | null, s?: string[] | null) {\n if (!f) return s;\n if (!s) return f;\n const extras = s.filter((x) => !f.includes(x));\n return extras.length ? [...f, ...extras] : f;\n }\n}\n\nexport function mergeFields(\n fields: SchemaField[],\n name: string,\n value: any,\n newFields: SchemaField[],\n): SchemaField[] {\n const withType = fields.map((x) =>\n x.isTypeField ? addFieldOption(x, name, value) : x,\n );\n return newFields\n .map((x) => ({ ...x, onlyForTypes: [value] }))\n .reduce((af, x) => mergeField(x, af), withType);\n}\n\nexport function addFieldOption(\n typeField: SchemaField,\n name: string,\n value: any,\n): SchemaField {\n const options = typeField.options ?? [];\n if (options.some((x) => x.value === value)) return typeField;\n return {\n ...typeField,\n options: [...options, { name, value }],\n };\n}\n\nexport function resolveSchemas<A extends SchemaMap>(schemaMap: A): A {\n const out: SchemaMap = {};\n function resolveSchemaType(type: string) {\n if (type in out) {\n return out[type];\n }\n const resolvedFields: SchemaField[] = [];\n out[type] = resolvedFields;\n schemaMap[type].forEach((x) => {\n if (isCompoundField(x) && x.schemaRef) {\n resolvedFields.push({\n ...x,\n children: resolveSchemaType(x.schemaRef),\n } as CompoundField);\n } else {\n resolvedFields.push(x);\n }\n });\n return resolvedFields;\n }\n Object.keys(schemaMap).forEach(resolveSchemaType);\n return out as A;\n}\n","import {\n CompoundField,\n ControlActionHandler,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayOnlyRenderOptions,\n FieldOption,\n findField,\n GroupRenderOptions,\n isCheckEntryClasses,\n isCompoundField,\n isDataControl,\n isDataControlDefinition,\n isDataGroupRenderer,\n isDisplayOnlyRenderer,\n isGroupControl,\n isGroupControlsDefinition,\n isScalarField,\n RadioButtonRenderOptions,\n SchemaField,\n SchemaInterface,\n} from \"./types\";\nimport { MutableRefObject, useCallback, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport { SchemaDataNode } from \"./treeNodes\";\n\nexport interface ControlClasses {\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\nexport type JsonPath = string | number;\n\nexport interface FormContextData {\n option?: FieldOption;\n optionSelected?: boolean;\n}\n\nexport interface ControlDataContext {\n schemaInterface: SchemaInterface;\n dataNode: SchemaDataNode | undefined;\n parentNode: SchemaDataNode;\n formData: FormContextData;\n}\n\nexport function applyDefaultValues(\n v: Record<string, any> | undefined,\n fields: SchemaField[],\n doneSet?: Set<Record<string, any>>,\n): any {\n if (!v) return defaultValueForFields(fields);\n if (doneSet && doneSet.has(v)) return v;\n doneSet ??= new Set();\n doneSet.add(v);\n const applyValue = fields.filter(\n (x) => isCompoundField(x) || !(x.field in v),\n );\n if (!applyValue.length) return v;\n const out = { ...v };\n applyValue.forEach((x) => {\n out[x.field] =\n x.field in v\n ? applyDefaultForField(v[x.field], x, fields, false, doneSet)\n : defaultValueForField(x);\n });\n return out;\n}\n\nexport function applyDefaultForField(\n v: any,\n field: SchemaField,\n parent: SchemaField[],\n notElement?: boolean,\n doneSet?: Set<Record<string, any>>,\n): any {\n if (field.collection && !notElement) {\n return ((v as any[]) ?? []).map((x) =>\n applyDefaultForField(x, field, parent, true, doneSet),\n );\n }\n if (isCompoundField(field)) {\n if (!v && !field.required) return v;\n return applyDefaultValues(\n v,\n field.treeChildren ? parent : field.children,\n doneSet,\n );\n }\n return defaultValueForField(field);\n}\n\nexport function defaultValueForFields(fields: SchemaField[]): any {\n return Object.fromEntries(\n fields.map((x) => [x.field, defaultValueForField(x)]),\n );\n}\n\nexport function defaultValueForField(\n sf: SchemaField,\n required?: boolean | null,\n forceNotNull?: boolean,\n): any {\n if (sf.defaultValue !== undefined) return sf.defaultValue;\n const isRequired = !!(required || sf.required);\n if (isCompoundField(sf)) {\n if (isRequired) {\n const childValue = defaultValueForFields(sf.children);\n return sf.collection ? [childValue] : childValue;\n }\n return sf.notNullable || forceNotNull\n ? sf.collection\n ? []\n : {}\n : undefined;\n }\n if (sf.collection && sf.notNullable) {\n return [];\n }\n return undefined;\n}\n\nexport function elementValueForField(sf: SchemaField): any {\n if (isCompoundField(sf)) {\n return defaultValueForFields(sf.children);\n }\n return sf.defaultValue;\n}\n\nexport function findScalarField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return findField(fields, field);\n}\n\nexport function findCompoundField(\n fields: SchemaField[],\n field: string,\n): CompoundField | undefined {\n return findField(fields, field) as CompoundField | undefined;\n}\n\nexport function fieldHasTag(field: SchemaField, tag: string) {\n return Boolean(field.tags?.includes(tag));\n}\n\nexport function fieldDisplayName(field: SchemaField) {\n return field.displayName ?? field.field;\n}\n\nexport function hasOptions(o: { options: FieldOption[] | undefined | null }) {\n return (o.options?.length ?? 0) > 0;\n}\n\nexport function defaultControlForField(sf: SchemaField): DataControlDefinition {\n if (isCompoundField(sf)) {\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n children: sf.children.map(defaultControlForField),\n };\n } else if (isScalarField(sf)) {\n const htmlEditor = sf.tags?.includes(\"_HtmlEditor\");\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n renderOptions: {\n type: htmlEditor ? DataRenderType.HtmlEditor : DataRenderType.Standard,\n },\n };\n }\n throw \"Unknown schema field\";\n}\nfunction findReferencedControl(\n field: string,\n control: ControlDefinition,\n): ControlDefinition | undefined {\n if (isDataControl(control) && field === control.field) return control;\n if (isGroupControl(control)) {\n if (control.compoundField)\n return field === control.compoundField ? control : undefined;\n return findReferencedControlInArray(field, control.children ?? []);\n }\n return undefined;\n}\n\nfunction findReferencedControlInArray(\n field: string,\n controls: ControlDefinition[],\n): ControlDefinition | undefined {\n for (const c of controls) {\n const ref = findReferencedControl(field, c);\n if (ref) return ref;\n }\n return undefined;\n}\n\nexport function findControlsForCompound(\n compound: CompoundField,\n definition: ControlDefinition,\n): ControlDefinition[] {\n if (\n isDataControlDefinition(definition) &&\n compound.field === definition.field\n ) {\n return [definition];\n }\n if (isGroupControlsDefinition(definition)) {\n if (definition.compoundField === compound.field) return [definition];\n return (\n definition.children?.flatMap((d) =>\n findControlsForCompound(compound, d),\n ) ?? []\n );\n }\n return [];\n}\n\nexport interface ControlGroupLookup {\n groups: ControlDefinition[];\n children: Record<string, ControlGroupLookup>;\n}\nexport function findCompoundGroups(\n fields: SchemaField[],\n controls: ControlDefinition[],\n): Record<string, ControlGroupLookup> {\n return Object.fromEntries(\n fields.filter(isCompoundField).map((cf) => {\n const groups = controls.flatMap((x) => findControlsForCompound(cf, x));\n return [\n cf.field,\n {\n groups: groups.concat(\n findNonDataGroups(groups.flatMap((x) => x.children ?? [])),\n ),\n children: findCompoundGroups(\n cf.children,\n groups.flatMap((x) => x.children ?? []),\n ),\n },\n ];\n }),\n );\n}\n\nexport function existsInGroups(\n field: SchemaField,\n lookup: ControlGroupLookup,\n): [SchemaField, ControlGroupLookup][] {\n const itself = lookup.groups.find((c) =>\n c.children?.find(\n (x) =>\n (isDataControlDefinition(x) && x.field === field.field) ||\n (isGroupControlsDefinition(x) && x.compoundField === field.field),\n ),\n );\n if (!itself) return [[field, lookup]];\n if (isCompoundField(field)) {\n const childLookup = lookup.children[field.field];\n if (!childLookup) return [[field, lookup]];\n return field.children.flatMap((c) => existsInGroups(c, childLookup));\n }\n return [];\n}\n\nexport function findNonDataGroups(\n controls: ControlDefinition[],\n): ControlDefinition[] {\n return controls.flatMap((control) =>\n isGroupControlsDefinition(control) && !control.compoundField\n ? [control, ...findNonDataGroups(control.children ?? [])]\n : [],\n );\n}\n\nfunction cloneChildren(c: ControlDefinition): ControlDefinition {\n return { ...c, children: c.children?.map(cloneChildren) };\n}\n\nexport function addMissingControls(\n fields: SchemaField[],\n controls: ControlDefinition[],\n) {\n controls = controls.map(cloneChildren);\n const rootMapping = findCompoundGroups(fields, controls);\n const rootGroups = findNonDataGroups([\n {\n type: ControlDefinitionType.Group,\n children: controls,\n },\n ]);\n const rootLookup = { children: rootMapping, groups: rootGroups };\n const missingFields = fields\n .filter((x) => !fieldHasTag(x, \"_NoControl\"))\n .flatMap((x) => existsInGroups(x, rootLookup));\n missingFields.forEach(([f, lookup]) => {\n const groupToAdd = f.tags?.find((x) => x.startsWith(\"_ControlGroup:\"));\n let insertGroup: ControlDefinition | undefined = undefined;\n if (groupToAdd) {\n const groupName = groupToAdd.substring(14);\n insertGroup = lookup.groups.find((x) => x.title === groupName);\n }\n if (!insertGroup) insertGroup = lookup.groups[0];\n if (insertGroup) {\n const newControl = defaultControlForField(f);\n if (insertGroup.children) insertGroup.children.push(newControl);\n else insertGroup.children = [newControl];\n }\n });\n return controls;\n}\nexport function useUpdatedRef<A>(a: A): MutableRefObject<A> {\n const r = useRef(a);\n r.current = a;\n return r;\n}\n\nexport function isControlReadonly(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.readonly;\n}\n\nexport function isControlDisabled(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.disabled;\n}\n\nexport function getDisplayOnlyOptions(\n d: ControlDefinition,\n): DisplayOnlyRenderOptions | undefined {\n return isDataControlDefinition(d) &&\n d.renderOptions &&\n isDisplayOnlyRenderer(d.renderOptions)\n ? d.renderOptions\n : undefined;\n}\n\nexport function cleanDataForSchema(\n v: { [k: string]: any } | undefined,\n fields: SchemaField[],\n removeIfDefault?: boolean,\n): any {\n if (!v) return v;\n const typeField = fields.find((x) => x.isTypeField);\n const typeValue = typeField ? v[typeField.field] : undefined;\n const cleanableFields = !removeIfDefault\n ? fields.filter(\n (x) => isCompoundField(x) || (x.onlyForTypes?.length ?? 0) > 0,\n )\n : fields;\n if (!cleanableFields.length) return v;\n const out = { ...v };\n cleanableFields.forEach((x) => {\n const childValue = v[x.field];\n if (\n x.onlyForTypes?.includes(typeValue) === false ||\n (!x.notNullable && canBeNull())\n ) {\n delete out[x.field];\n return;\n }\n if (isCompoundField(x)) {\n const childFields = x.treeChildren ? fields : x.children;\n if (x.collection) {\n if (Array.isArray(childValue)) {\n out[x.field] = childValue.map((cv) =>\n cleanDataForSchema(cv, childFields, removeIfDefault),\n );\n }\n } else {\n out[x.field] = cleanDataForSchema(\n childValue,\n childFields,\n removeIfDefault,\n );\n }\n }\n function canBeNull() {\n return (\n (removeIfDefault && x.defaultValue === childValue) ||\n (x.collection && Array.isArray(childValue) && !childValue.length)\n //|| (x.type === FieldType.Bool && childValue === false)\n );\n }\n });\n return out;\n}\n\nexport function getAllReferencedClasses(\n c: ControlDefinition,\n collectExtra?: (c: ControlDefinition) => (string | undefined | null)[],\n): string[] {\n const childClasses = c.children?.flatMap((x) =>\n getAllReferencedClasses(x, collectExtra),\n );\n const go = getGroupClassOverrides(c);\n const { entryWrapperClass, selectedClass, notSelectedClass } =\n isDataControlDefinition(c) && isCheckEntryClasses(c.renderOptions)\n ? c.renderOptions\n : {};\n const tc = clsx(\n [\n c.styleClass,\n c.layoutClass,\n c.labelClass,\n ...Object.values(go),\n ...(collectExtra?.(c) ?? []),\n entryWrapperClass,\n selectedClass,\n notSelectedClass,\n ].map(getOverrideClass),\n );\n if (childClasses && !tc) return childClasses;\n if (!tc) return [];\n if (childClasses) return [tc, ...childClasses];\n return [tc];\n}\n\nexport function jsonPathString(\n jsonPath: JsonPath[],\n customIndex?: (n: number) => string,\n) {\n let out = \"\";\n jsonPath.forEach((v, i) => {\n if (typeof v === \"number\") {\n out += customIndex?.(v) ?? \"[\" + v + \"]\";\n } else {\n if (i > 0) out += \".\";\n out += v;\n }\n });\n return out;\n}\n\nexport function findChildDefinition(\n parent: ControlDefinition,\n childPath: number | number[],\n): ControlDefinition {\n if (Array.isArray(childPath)) {\n let base = parent;\n childPath.forEach((x) => (base = base.children![x]));\n return base;\n }\n return parent.children![childPath];\n}\n\nexport function getOverrideClass(className?: string | null) {\n if (className && className.startsWith(\"@ \")) {\n return className.substring(2);\n }\n return className;\n}\n\nexport function rendererClass(\n controlClass?: string | null,\n globalClass?: string | null,\n) {\n const gc = getOverrideClass(globalClass);\n if (gc !== globalClass) return globalClass ? globalClass : undefined;\n const oc = getOverrideClass(controlClass);\n if (oc === controlClass) return clsx(controlClass, globalClass);\n return oc ? oc : undefined;\n}\n\nexport type HookDep = string | number | undefined | null;\n\nexport interface DynamicHookGenerator<A, P> {\n deps: HookDep;\n state: any;\n runHook(ctx: P, state: any): A;\n}\n\nexport function makeHook<A, P, S = undefined>(\n runHook: (ctx: P, state: S) => A,\n state: S,\n deps?: HookDep,\n): DynamicHookGenerator<A, P> {\n return { deps, state, runHook };\n}\n\nexport type DynamicHookValue<A> =\n A extends DynamicHookGenerator<infer V, any> ? V : never;\n\nexport function makeHookDepString<A>(\n deps: A[],\n asHookDep: (a: A) => HookDep,\n): string {\n return deps.map((x) => toDepString(asHookDep(x))).join(\",\");\n}\nexport function useDynamicHooks<\n P,\n Hooks extends Record<string, DynamicHookGenerator<any, P>>,\n>(\n hooks: Hooks,\n): (p: P) => {\n [K in keyof Hooks]: DynamicHookValue<Hooks[K]>;\n} {\n const hookEntries = Object.entries(hooks);\n const deps = makeHookDepString(hookEntries, (x) => x[1].deps);\n const ref = useRef<Record<string, any>>({});\n const s = ref.current;\n hookEntries.forEach((x) => (s[x[0]] = x[1].state));\n return useCallback(\n (p: P) => {\n return Object.fromEntries(\n hookEntries.map(([f, hg]) => [f, hg.runHook(p, ref.current[f])]),\n ) as any;\n },\n [deps],\n );\n}\n\nexport function toDepString(x: any): string {\n if (x === undefined) return \"_\";\n if (x === null) return \"~\";\n return x.toString();\n}\n\nexport function applyLengthRestrictions<Min, Max>(\n length: number,\n min: number | null | undefined,\n max: number | null | undefined,\n minValue: Min,\n maxValue: Max,\n): [Min | undefined, Max | undefined] {\n return [\n min == null || length > min ? minValue : undefined,\n max == null || length < max ? maxValue : undefined,\n ];\n}\n\nexport function findFieldPath(\n fields: SchemaField[],\n fieldPath: string | undefined,\n): SchemaField[] | undefined {\n if (!fieldPath) return undefined;\n const fieldNames = fieldPath.split(\"/\");\n const foundFields: SchemaField[] = [];\n let i = 0;\n let currentFields: SchemaField[] | undefined = fields;\n while (i < fieldNames.length && currentFields) {\n const cf = fieldNames[i];\n const nextField = findField(currentFields, cf);\n if (!nextField) return undefined;\n foundFields.push(nextField);\n currentFields =\n isCompoundField(nextField) && !nextField.collection\n ? nextField.children\n : undefined;\n i++;\n }\n return foundFields.length === fieldNames.length ? foundFields : undefined;\n}\n\nexport function mergeObjects<A extends Record<string, any> | undefined>(\n o1: A,\n o2: A,\n doMerge: (k: keyof NonNullable<A>, v1: unknown, v2: unknown) => unknown = (\n _,\n v1,\n v2,\n ) => v1 ?? v2,\n): A {\n if (!o1) return o2;\n if (!o2) return o1;\n const result = { ...o1 };\n for (const key in o2) {\n if (o2.hasOwnProperty(key)) {\n const value1 = o1[key];\n const value2 = o2[key];\n result[key] = doMerge(key, value1, value2) as any;\n }\n }\n return result;\n}\n\nexport function coerceToString(v: unknown) {\n return v == null\n ? \"\"\n : typeof v === \"object\"\n ? \"error: \" + JSON.stringify(v)\n : v.toString();\n}\n\nexport function getGroupRendererOptions(\n def: ControlDefinition,\n): GroupRenderOptions | undefined {\n return isGroupControlsDefinition(def)\n ? def.groupOptions\n : isDataControlDefinition(def) && isDataGroupRenderer(def.renderOptions)\n ? def.renderOptions.groupOptions\n : undefined;\n}\nexport function getGroupClassOverrides(def: ControlDefinition): ControlClasses {\n let go = getGroupRendererOptions(def);\n\n if (!go) return {};\n const { childLayoutClass, childStyleClass, childLabelClass } = go;\n const out: ControlClasses = {};\n if (childLayoutClass) out.layoutClass = childLayoutClass;\n if (childStyleClass) out.styleClass = childStyleClass;\n if (childLabelClass) out.labelClass = childLabelClass;\n return out;\n}\n\nexport function isControlDisplayOnly(def: ControlDefinition): boolean {\n return Boolean(getGroupRendererOptions(def)?.displayOnly);\n}\n\nexport function actionHandlers(\n ...handlers: (ControlActionHandler | undefined)[]\n): ControlActionHandler {\n return (actionId, actionData, ctx) => {\n for (let i = 0; i < handlers.length; i++) {\n const res = handlers[i]?.(actionId, actionData, ctx);\n if (res) return res;\n }\n return undefined;\n };\n}\n","import {\n AccordionAdornment,\n CheckListRenderOptions,\n ControlAdornmentType,\n ControlDefinition,\n DataControlDefinition,\n DataExpression,\n DataMatchExpression,\n DataRenderType,\n DateValidator,\n DisplayControlDefinition,\n DisplayDataType,\n DisplayOnlyRenderOptions,\n DynamicProperty,\n DynamicPropertyType,\n EntityExpression,\n ExpressionType,\n GroupedControlsDefinition,\n GroupRenderType,\n HtmlDisplay,\n JsonataExpression,\n JsonataRenderOptions,\n JsonataValidator,\n LengthValidator,\n RadioButtonRenderOptions,\n RenderOptions,\n SchemaField,\n SchemaMap,\n TextDisplay,\n TextfieldRenderOptions,\n ValidatorType,\n} from \"./types\";\nimport { ActionRendererProps } from \"./controlRender\";\nimport { useMemo } from \"react\";\nimport { addMissingControls } from \"./util\";\nimport { mergeFields, resolveSchemas } from \"./schemaBuilder\";\nimport { ActionControlDefinition, ControlDefinitionType } from \"./types\";\n\nexport function dataControl(\n field: string,\n title?: string | null,\n options?: Partial<DataControlDefinition>,\n): DataControlDefinition {\n return { type: ControlDefinitionType.Data, field, title, ...options };\n}\n\nexport function validatorOptions<A extends { type: string }>(\n type: ValidatorType,\n): (options: Omit<A, \"type\">) => A {\n return (o) => ({ type, ...o }) as A;\n}\n\nexport function adornmentOptions<A extends { type: string }>(\n type: ControlAdornmentType,\n): (options: Omit<A, \"type\">) => A {\n return (o) => ({ type, ...o }) as A;\n}\n\nexport function renderOptionsFor<A extends RenderOptions>(\n type: DataRenderType,\n): (options: Omit<A, \"type\">) => { renderOptions: A } {\n return (o) => ({ renderOptions: { type, ...o } as A });\n}\n\nexport const checkListOptions = renderOptionsFor<CheckListRenderOptions>(\n DataRenderType.CheckList,\n);\n\nexport const radioButtonOptions = renderOptionsFor<RadioButtonRenderOptions>(\n DataRenderType.Radio,\n);\n\nexport const lengthValidatorOptions = validatorOptions<LengthValidator>(\n ValidatorType.Length,\n);\n\nexport const jsonataValidatorOptions = validatorOptions<JsonataValidator>(\n ValidatorType.Jsonata,\n);\n\nexport const dateValidatorOptions = validatorOptions<DateValidator>(\n ValidatorType.Date,\n);\n\nexport const accordionOptions = adornmentOptions<AccordionAdornment>(\n ControlAdornmentType.Accordion,\n);\n\nexport const textfieldOptions = renderOptionsFor<TextfieldRenderOptions>(\n DataRenderType.Textfield,\n);\n\nexport const displayOnlyOptions = renderOptionsFor<DisplayOnlyRenderOptions>(\n DataRenderType.DisplayOnly,\n);\n\nexport const jsonataOptions = renderOptionsFor<JsonataRenderOptions>(\n DataRenderType.Jsonata,\n);\n\nexport function textDisplayControl(\n text: string,\n options?: Partial<DisplayControlDefinition>,\n): DisplayControlDefinition {\n return {\n type: ControlDefinitionType.Display,\n displayData: { type: DisplayDataType.Text, text } as TextDisplay,\n ...options,\n };\n}\n\nexport function htmlDisplayControl(\n html: string,\n options?: Partial<DisplayControlDefinition>,\n): DisplayControlDefinition {\n return {\n type: ControlDefinitionType.Display,\n displayData: { type: DisplayDataType.Html, html } as HtmlDisplay,\n ...options,\n };\n}\n\nexport function dynamicDefaultValue(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.DefaultValue, expr };\n}\n\nexport function dynamicReadonly(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Readonly, expr };\n}\n\nexport function dynamicVisibility(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Visible, expr };\n}\n\nexport function dynamicDisabled(expr: EntityExpression): DynamicProperty {\n return { type: DynamicPropertyType.Disabled, expr };\n}\n\nexport function fieldExpr(field: string): DataExpression {\n return { type: ExpressionType.Data, field };\n}\n\nexport function fieldEqExpr(field: string, value: any): DataMatchExpression {\n return { type: ExpressionType.DataMatch, field, value };\n}\nexport function jsonataExpr(expression: string): JsonataExpression {\n return { type: ExpressionType.Jsonata, expression };\n}\n\nexport function groupedControl(\n children: ControlDefinition[],\n title?: string,\n options?: Partial<GroupedControlsDefinition>,\n): GroupedControlsDefinition {\n return {\n type: ControlDefinitionType.Group,\n children,\n title,\n groupOptions: { type: \"Standard\", hideTitle: !title },\n ...options,\n };\n}\nexport function compoundControl(\n field: string,\n title: string | undefined,\n children: ControlDefinition[],\n options?: Partial<DataControlDefinition>,\n): DataControlDefinition {\n return {\n type: ControlDefinitionType.Data,\n field,\n children,\n title,\n renderOptions: { type: \"Standard\" },\n ...options,\n };\n}\n\nexport function actionControl(\n actionText: string,\n actionId: string,\n options?: Partial<ActionControlDefinition>,\n): ActionControlDefinition {\n return {\n type: ControlDefinitionType.Action,\n title: actionText,\n actionId,\n ...options,\n };\n}\nexport function createAction(\n actionId: string,\n onClick: () => void,\n actionText?: string,\n options?: Partial<ActionRendererProps>,\n): ActionRendererProps {\n return { actionId, onClick, actionText: actionText ?? actionId, ...options };\n}\n\nexport const emptyGroupDefinition: GroupedControlsDefinition = {\n type: ControlDefinitionType.Group,\n children: [],\n groupOptions: { type: GroupRenderType.Standard, hideTitle: true },\n};\n\nexport function useControlDefinitionForSchema(\n sf: SchemaField[],\n definition: GroupedControlsDefinition = emptyGroupDefinition,\n): GroupedControlsDefinition {\n return useMemo<GroupedControlsDefinition>(\n () => ({\n ...definition,\n children: addMissingControls(sf, definition.children ?? []),\n }),\n [sf, definition],\n );\n}\n\nexport interface EditorGroup {\n parent: string;\n group: GroupedControlsDefinition;\n}\n\nexport interface CustomRenderOptions {\n value: string;\n name: string;\n fields?: SchemaField[];\n groups?: EditorGroup[];\n}\n\nexport type ControlDefinitionExtension = {\n RenderOptions?: CustomRenderOptions | CustomRenderOptions[];\n GroupRenderOptions?: CustomRenderOptions | CustomRenderOptions[];\n ControlAdornment?: CustomRenderOptions | CustomRenderOptions[];\n SchemaValidator?: CustomRenderOptions | CustomRenderOptions[];\n DisplayData?: CustomRenderOptions | CustomRenderOptions[];\n};\n\nexport function applyExtensionToSchema<A extends SchemaMap>(\n schemaMap: A,\n extension: ControlDefinitionExtension,\n): A {\n const outMap = { ...schemaMap };\n Object.entries(extension).forEach(([field, cro]) => {\n outMap[field as keyof A] = (Array.isArray(cro) ? cro : [cro]).reduce(\n (a, cr) => mergeFields(a, cr.name, cr.value, cr.fields ?? []),\n outMap[field],\n ) as A[string];\n });\n return outMap;\n}\n\nexport function applyExtensionsToSchema<A extends SchemaMap>(\n schemaMap: A,\n extensions: ControlDefinitionExtension[],\n) {\n return resolveSchemas(extensions.reduce(applyExtensionToSchema, schemaMap));\n}\n","import { Control } from \"@react-typed-forms/core\";\nimport {\n CompoundField,\n ControlDefinition,\n ControlDefinitionType,\n FieldType,\n isDataControlDefinition,\n isGroupControlsDefinition,\n SchemaField,\n isCompoundField,\n DataControlDefinition,\n visitControlDefinition,\n GroupedControlsDefinition,\n} from \"./types\";\n\nconst MissingField: SchemaField = { field: \"__missing\", type: FieldType.Any };\n\nexport interface FormNode {\n definition: ControlDefinition;\n getChildNodes(): FormNode[];\n parent?: FormNode;\n}\n\nexport interface FormTreeLookup<A = string> {\n getForm(formId: A): FormTreeNode | undefined;\n}\nexport interface FormTreeNode extends FormTreeLookup {\n rootNode: FormNode;\n}\n\nexport interface SchemaTreeLookup<A = string> {\n getSchema(schemaId: A): SchemaNode | undefined;\n}\n\nexport interface SchemaNode extends SchemaTreeLookup {\n field: SchemaField;\n getChildNode(field: string): SchemaNode | undefined;\n getChildNodes(): SchemaNode[];\n parent?: SchemaNode;\n}\n\nexport interface SchemaDataNode {\n schema: SchemaNode;\n elementIndex?: number;\n control?: Control<unknown>;\n parent?: SchemaDataNode;\n getChild(node: SchemaNode): SchemaDataNode;\n getChildElement(index: number): SchemaDataNode;\n}\n\nfunction nodeForSchema(\n field: SchemaField,\n lookup: SchemaTreeLookup,\n parent: SchemaNode | undefined,\n): SchemaNode {\n const node = {\n field,\n getSchema: lookup.getSchema,\n parent,\n getChildNode,\n getChildNodes,\n };\n return node;\n\n function getChildNode(fieldName: string) {\n if (isCompoundField(field) && !field.schemaRef) {\n const childField = field.children.find((x) => x.field === fieldName);\n return childField ? nodeForSchema(childField, lookup, node) : undefined;\n }\n return getChildNodes().find((x) => x.field.field === fieldName);\n }\n function getChildNodes(): SchemaNode[] {\n if (isCompoundField(field)) {\n const otherRef = field.schemaRef && lookup.getSchema(field.schemaRef);\n if (otherRef) return otherRef.getChildNodes();\n return field.children.map((x) => nodeForSchema(x, lookup, node));\n }\n return [];\n }\n}\n\nexport function createSchemaLookup<A extends Record<string, SchemaField[]>>(\n schemaMap: A,\n): SchemaTreeLookup<keyof A> {\n const lookup = {\n getSchema,\n };\n return lookup;\n\n function getSchema(schemaId: keyof A): SchemaNode | undefined {\n const fields = schemaMap[schemaId];\n if (fields) {\n return rootSchemaNode(fields, lookup);\n }\n return undefined;\n }\n}\n\nfunction nodeForControl(\n definition: ControlDefinition,\n parent?: FormNode,\n): FormNode {\n const node = { definition, parent, getChildNodes };\n return node;\n function getChildNodes(): FormNode[] {\n return definition.children?.map((x) => nodeForControl(x, node)) ?? [];\n }\n}\nexport function createFormLookup<A extends Record<string, ControlDefinition[]>>(\n formMap: A,\n): FormTreeLookup<keyof A> {\n const lookup = {\n getForm,\n };\n return lookup;\n\n function getForm(formId: keyof A): FormTreeNode | undefined {\n const controls = formMap[formId];\n if (controls) {\n return {\n rootNode: nodeForControl({\n children: controls,\n type: ControlDefinitionType.Group,\n }),\n getForm,\n };\n }\n return undefined;\n }\n}\n\nexport function makeSchemaDataNode(\n schema: SchemaNode,\n control?: Control<unknown>,\n parent?: SchemaDataNode,\n elementIndex?: number,\n): SchemaDataNode {\n const dataNode = {\n schema,\n control,\n parent,\n elementIndex,\n getChild,\n getChildElement,\n };\n return dataNode;\n\n function getChild(schemaNode: SchemaNode): SchemaDataNode {\n const objControl = control as Control<Record<string, unknown>>;\n if (objControl && objControl.current.isNull) {\n objControl.value = {};\n }\n return makeSchemaDataNode(\n schemaNode,\n objControl?.fields?.[schemaNode.field.field],\n dataNode,\n );\n }\n function getChildElement(elementIndex: number): SchemaDataNode {\n return makeSchemaDataNode(\n schema,\n (control as Control<unknown[]>)?.elements?.[elementIndex],\n dataNode,\n elementIndex,\n );\n }\n}\n\nexport function fieldPathForDefinition(\n c: ControlDefinition,\n): string[] | undefined {\n const fieldName = isGroupControlsDefinition(c)\n ? c.compoundField\n : isDataControlDefinition(c)\n ? c.field\n : undefined;\n return fieldName?.split(\"/\");\n}\n\nexport function lookupDataNode(\n c: ControlDefinition,\n parentNode: SchemaDataNode,\n) {\n const fieldNamePath = fieldPathForDefinition(c);\n return fieldNamePath\n ? schemaDataForFieldPath(fieldNamePath, parentNode)\n : undefined;\n}\n\nexport function schemaDataForFieldRef(\n fieldRef: string | undefined,\n schema: SchemaDataNode,\n): SchemaDataNode {\n return schemaDataForFieldPath(fieldRef?.split(\"/\") ?? [], schema);\n}\n\nexport function schemaForFieldRef(\n fieldRef: string | undefined,\n schema: SchemaNode,\n): SchemaNode {\n return schemaForFieldPath(fieldRef?.split(\"/\") ?? [], schema);\n}\n\nexport function traverseSchemaPath<A>(\n fieldPath: string[],\n schema: SchemaNode,\n acc: A,\n next: (acc: A, node: SchemaNode) => A,\n): A {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let childNode = schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(MissingField, schema, schema);\n }\n acc = next(acc, childNode);\n schema = childNode;\n i++;\n }\n return acc;\n}\n\nexport function traverseData(\n fieldPath: string[],\n root: SchemaNode,\n data: { [k: string]: any },\n): unknown {\n return traverseSchemaPath(\n fieldPath,\n root,\n data,\n (acc, n) => acc?.[n.field.field] as any,\n );\n}\n\nexport function schemaDataForFieldPath(\n fieldPath: string[],\n schema: SchemaDataNode,\n): SchemaDataNode {\n return traverseSchemaPath(fieldPath, schema.schema, schema, (a, n) =>\n a.getChild(n),\n );\n}\n\nexport function schemaForFieldPath(\n fieldPath: string[],\n schema: SchemaNode,\n): SchemaNode {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let childNode = schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(MissingField, schema, schema);\n }\n schema = childNode;\n i++;\n }\n return schema;\n}\n\nexport function traverseParents<A, B extends { parent?: B | undefined }>(\n current: B | undefined,\n get: (b: B) => A,\n until?: (b: B) => boolean,\n): A[] {\n let outArray: A[] = [];\n while (current && !until?.(current)) {\n outArray.push(get(current));\n current = current.parent;\n }\n return outArray.reverse();\n}\n\nexport function getRootDataNode(dataNode: SchemaDataNode) {\n while (dataNode.parent) {\n dataNode = dataNode.parent;\n }\n return dataNode;\n}\n\nexport function getJsonPath(dataNode: SchemaDataNode) {\n return traverseParents(\n dataNode,\n (d) => (d.elementIndex == null ? d.schema.field.field : d.elementIndex),\n (x) => !x.parent,\n );\n}\n\nexport function getSchemaPath(schemaNode: SchemaNode): SchemaField[] {\n return traverseParents(\n schemaNode,\n (d) => d.field,\n (x) => !x.parent,\n );\n}\n\nexport function getSchemaFieldList(schema: SchemaNode): SchemaField[] {\n return schema.getChildNodes().map((x) => x.field);\n}\n\nexport function rootSchemaNode(\n fields: SchemaField[],\n lookup: SchemaTreeLookup = {\n getSchema(schemaId: string): SchemaNode | undefined {\n return undefined;\n },\n },\n): SchemaNode {\n return nodeForSchema(\n {\n type: FieldType.Compound,\n field: \"\",\n children: fields,\n } as CompoundField,\n lookup,\n undefined,\n );\n}\n\nexport function visitControlDataArray<A>(\n controls: ControlDefinition[] | undefined | null,\n context: SchemaDataNode,\n cb: (\n definition: DataControlDefinition,\n node: SchemaDataNode,\n ) => A | undefined,\n): A | undefined {\n if (!controls) return undefined;\n for (const c of controls) {\n const r = visitControlData(c, context, cb);\n if (r !== undefined) return r;\n }\n return undefined;\n}\n\nexport function visitControlData<A>(\n definition: ControlDefinition,\n ctx: SchemaDataNode,\n cb: (\n definition: DataControlDefinition,\n field: SchemaDataNode,\n ) => A | undefined,\n): A | undefined {\n if (!ctx.control || ctx.control.isNull) return undefined;\n return visitControlDefinition<A | undefined>(\n definition,\n {\n data(def: DataControlDefinition) {\n return processData(def);\n },\n group(d: GroupedControlsDefinition) {\n return processData(d);\n },\n action: () => undefined,\n display: () => undefined,\n },\n () => undefined,\n );\n\n function processData(def: ControlDefinition) {\n const children = def.children;\n const childNode = lookupDataNode(def, ctx);\n if (!childNode) return visitControlDataArray(children, ctx, cb);\n const dataControl = isDataControlDefinition(def) ? def : undefined;\n const result = dataControl ? cb(dataControl, childNode) : undefined;\n if (result !== undefined) return result;\n const fieldNode = childNode.schema;\n const compound = isCompoundField(fieldNode.field);\n if (fieldNode.field.collection) {\n const control = childNode.control as Control<unknown[]>;\n let cIndex = 0;\n for (const c of control!.elements ?? []) {\n const elemChild = childNode.getChildElement(cIndex);\n const elemResult = dataControl ? cb(dataControl, elemChild) : undefined;\n if (elemResult !== undefined) return elemResult;\n if (compound) {\n const cfResult = visitControlDataArray(children, elemChild, cb);\n if (cfResult !== undefined) return cfResult;\n }\n cIndex++;\n }\n } else if (compound) {\n return visitControlDataArray(children, childNode, cb);\n }\n return undefined;\n }\n}\n","import {\n ControlDefinition,\n DataExpression,\n DataMatchExpression,\n DynamicPropertyType,\n EntityExpression,\n ExpressionType,\n isDataControlDefinition,\n JsonataExpression,\n NotEmptyExpression,\n SchemaInterface,\n} from \"./types\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n addAfterChangesCallback,\n collectChanges,\n Control,\n makeChangeTracker,\n trackedValue,\n useCalculatedControl,\n useComputed,\n useControl,\n useRefState,\n} from \"@react-typed-forms/core\";\n\nimport {\n ControlDataContext,\n defaultValueForField,\n DynamicHookGenerator,\n elementValueForField,\n getDisplayOnlyOptions,\n HookDep,\n isControlDisabled,\n isControlReadonly,\n JsonPath,\n jsonPathString,\n toDepString,\n} from \"./util\";\nimport jsonata from \"jsonata\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n getJsonPath,\n getRootDataNode,\n schemaDataForFieldRef,\n SchemaDataNode,\n} from \"./treeNodes\";\n\nexport type EvalExpressionHook<A = any> = DynamicHookGenerator<\n Control<A | undefined>,\n ControlDataContext\n>;\n\nexport type UseEvalExpressionHook = (\n expr: EntityExpression | undefined | null,\n coerce: (v: any) => any,\n) => DynamicHookGenerator<Control<any> | undefined, ControlDataContext>;\n\nexport function useEvalVisibilityHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n overrideDataNode?: SchemaDataNode,\n): EvalExpressionHook<boolean> {\n const dynamicVisibility = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Visible,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicVisibility,\n (ctx, { definition, overrideDataNode }) =>\n useComputed(() => {\n const dataNode = overrideDataNode ?? ctx.dataNode;\n return (\n !dataNode ||\n (matchesType(dataNode) &&\n !hideDisplayOnly(dataNode, ctx.schemaInterface, definition))\n );\n }),\n { definition, overrideDataNode },\n );\n}\n\nexport function useEvalReadonlyHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<boolean> {\n const dynamicReadonly = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Readonly,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicReadonly,\n (ctx, { definition }) =>\n useCalculatedControl(() => isControlReadonly(definition)),\n { definition },\n );\n}\n\nexport function useEvalStyleHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n property: DynamicPropertyType,\n definition: ControlDefinition,\n): EvalExpressionHook<React.CSSProperties> {\n const dynamicStyle = useEvalDynamicHook(\n definition,\n property,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicStyle,\n () => useControl(undefined),\n undefined,\n );\n}\n\nexport function useEvalAllowedOptionsHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<any[]> {\n const dynamicAllowed = useEvalDynamicHook(\n definition,\n DynamicPropertyType.AllowedOptions,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicAllowed,\n () => useControl([]),\n undefined,\n );\n}\n\nexport function useEvalDisabledHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<boolean> {\n const dynamicDisabled = useEvalDynamicBoolHook(\n definition,\n DynamicPropertyType.Disabled,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicDisabled,\n (ctx) =>\n useComputed(() => {\n const dataControl = ctx.dataNode?.control;\n const setToNull = dataControl?.meta[\"nullControl\"]?.value === false;\n return setToNull || isControlDisabled(definition);\n }),\n undefined,\n );\n}\n\nexport function useEvalDisplayHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): DynamicHookGenerator<\n Control<string | undefined> | undefined,\n ControlDataContext\n> {\n return useEvalDynamicHook(\n definition,\n DynamicPropertyType.Display,\n useEvalExpressionHook,\n );\n}\nexport function useEvalDefaultValueHook(\n useEvalExpressionHook: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.DefaultValue,\n useEvalExpressionHook,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n (ctx, { definition }) => {\n return useComputed(calcDefault);\n function calcDefault() {\n const [required, dcv] = isDataControlDefinition(definition)\n ? [definition.required, definition.defaultValue]\n : [false, undefined];\n const field = ctx.dataNode?.schema.field;\n return (\n dcv ??\n (field\n ? ctx.dataNode!.elementIndex != null\n ? elementValueForField(field)\n : defaultValueForField(field, required, true)\n : undefined)\n );\n }\n },\n { definition },\n );\n}\n\nfunction useDataExpression(\n fvExpr: DataExpression,\n node: SchemaDataNode,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => coerce(otherField.control?.value));\n}\n\nfunction useDataMatchExpression(\n fvExpr: DataMatchExpression,\n node: SchemaDataNode,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => {\n const fv = otherField.control?.value;\n return coerce(\n Array.isArray(fv) ? fv.includes(fvExpr.value) : fv === fvExpr.value,\n );\n });\n}\n\nfunction useNotEmptyExpression(\n fvExpr: NotEmptyExpression,\n node: SchemaDataNode,\n schemaInterface: SchemaInterface,\n coerce: (v: any) => any = (x) => x,\n) {\n const otherField = schemaDataForFieldRef(fvExpr.field, node);\n return useCalculatedControl(() => {\n const fv = otherField.control?.value;\n const field = otherField.schema.field;\n return coerce(field && !schemaInterface.isEmptyValue(field, fv));\n });\n}\n\nexport function defaultEvalHooks(\n expr: EntityExpression,\n context: ControlDataContext,\n coerce: (v: any) => any,\n) {\n switch (expr.type) {\n case ExpressionType.Jsonata:\n const bindings = useComputed(() => ({ formData: context.formData }));\n return useJsonataExpression(\n (expr as JsonataExpression).expression,\n getRootDataNode(context.parentNode).control!,\n getJsonPath(context.parentNode),\n bindings,\n coerce,\n );\n case ExpressionType.UUID:\n return useUuidExpression(coerce);\n case ExpressionType.Data:\n return useDataExpression(\n expr as DataExpression,\n context.parentNode,\n coerce,\n );\n case ExpressionType.DataMatch:\n return useDataMatchExpression(\n expr as DataMatchExpression,\n context.parentNode,\n coerce,\n );\n case ExpressionType.NotEmpty:\n return useNotEmptyExpression(\n expr as NotEmptyExpression,\n context.parentNode,\n context.schemaInterface,\n coerce,\n );\n default:\n return useControl(undefined);\n }\n}\n\nexport const defaultUseEvalExpressionHook =\n makeEvalExpressionHook(defaultEvalHooks);\n\nexport function makeEvalExpressionHook(\n f: (\n expr: EntityExpression,\n context: ControlDataContext,\n coerce: (v: any) => any,\n ) => Control<any>,\n): UseEvalExpressionHook {\n return (expr, coerce) => ({\n deps: expr?.type,\n state: expr && expr.type ? expr : undefined,\n runHook: (ctx: ControlDataContext, state: EntityExpression | undefined) => {\n return state ? f(state, ctx, coerce) : undefined;\n },\n });\n}\n\nexport function useEvalDynamicBoolHook(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n): DynamicHookGenerator<Control<any> | undefined, ControlDataContext> {\n return useEvalDynamicHook(definition, type, useEvalExpressionHook, (x) =>\n Boolean(x),\n );\n}\n\nexport function useEvalDynamicHook(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n coerce: (v: any) => any = (x) => x,\n): DynamicHookGenerator<Control<any> | undefined, ControlDataContext> {\n const expression = definition.dynamic?.find((x) => x.type === type);\n return useEvalExpressionHook(expression?.expr, coerce);\n}\n\nexport function matchesType(context: SchemaDataNode): boolean {\n const types = context.schema.field.onlyForTypes;\n if (types == null || types.length === 0) return true;\n const parent = context.parent!;\n const typeNode = parent.schema\n .getChildNodes()\n .find((x) => x.field.isTypeField);\n if (typeNode == null) return true;\n const typeField = parent.getChild(typeNode).control as Control<string>;\n return typeField && types.includes(typeField.value);\n}\n\nexport function hideDisplayOnly(\n context: SchemaDataNode,\n schemaInterface: SchemaInterface,\n definition: ControlDefinition,\n) {\n const displayOptions = getDisplayOnlyOptions(definition);\n return (\n displayOptions &&\n !displayOptions.emptyText &&\n schemaInterface.isEmptyValue(context.schema.field, context.control?.value)\n );\n}\n\nexport function useUuidExpression(coerce: (v: any) => any = (x) => x) {\n return useControl(() => coerce(uuidv4()));\n}\n\nexport function useJsonataExpression(\n jExpr: string,\n data: Control<any>,\n path: JsonPath[],\n bindings?: Control<Record<string, any>>,\n coerce: (v: any) => any = (x) => x,\n): Control<any> {\n const pathString = jsonPathString(path, (x) => `#$i[${x}]`);\n const fullExpr = pathString ? pathString + \".(\" + jExpr + \")\" : jExpr;\n const compiledExpr = useMemo(() => {\n try {\n return jsonata(jExpr ? fullExpr : \"null\");\n } catch (e) {\n console.error(e);\n return jsonata(\"null\");\n }\n }, [fullExpr]);\n const control = useControl();\n const listenerRef = useRef<() => void>();\n const updateRef = useRef(0);\n const [ref] = useRefState(() =>\n makeChangeTracker(() => {\n const l = listenerRef.current;\n if (l) {\n listenerRef.current = undefined;\n addAfterChangesCallback(() => {\n listenerRef.current = l;\n l();\n });\n }\n }),\n );\n useEffect(() => {\n listenerRef.current = apply;\n apply();\n async function apply() {\n const [collect, updateSubscriptions] = ref.current;\n try {\n updateRef.current++;\n control.value = coerce(\n await compiledExpr.evaluate(\n trackedValue(data, collect),\n collectChanges(collect, () => bindings?.value),\n ),\n );\n } finally {\n if (!--updateRef.current) updateSubscriptions();\n }\n }\n }, [compiledExpr]);\n useEffect(() => {\n return () => {\n listenerRef.current = undefined;\n ref.current[1](true);\n };\n }, []);\n return control;\n}\n\nexport function useEvalActionHook(\n useExpr: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<string | null> {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.ActionData,\n useExpr,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n () => useControl(null),\n undefined,\n );\n}\n\nexport function useEvalLabelText(\n useExpr: UseEvalExpressionHook,\n definition: ControlDefinition,\n): EvalExpressionHook<string | null> {\n const dynamicValue = useEvalDynamicHook(\n definition,\n DynamicPropertyType.Label,\n useExpr,\n );\n return makeDynamicPropertyHook(\n dynamicValue,\n () => useControl(null),\n undefined,\n );\n}\n\nfunction makeDynamicPropertyHook<A, S = undefined>(\n dynamicValue: DynamicHookGenerator<\n Control<any> | undefined,\n ControlDataContext\n >,\n makeDefault: (ctx: ControlDataContext, s: S) => Control<A | undefined>,\n state: S,\n deps?: HookDep,\n): EvalExpressionHook<A> {\n return {\n deps:\n deps === undefined\n ? dynamicValue.deps\n : [deps, dynamicValue.deps].map(toDepString).join(),\n runHook: (ctx, s) => {\n return dynamicValue.runHook(ctx, s[0]) ?? makeDefault(ctx, s[1]);\n },\n state: [dynamicValue.state, state],\n };\n}\n","import {\n ControlDefinition,\n DataControlDefinition,\n DataRenderType,\n DateComparison,\n DateValidator,\n FieldType,\n isDataControlDefinition,\n JsonataValidator,\n LengthValidator,\n SchemaField,\n SchemaValidator,\n ValidationMessageType,\n ValidatorType,\n} from \"./types\";\nimport {\n Control,\n useValidator,\n useValueChangeEffect,\n} from \"@react-typed-forms/core\";\nimport { useCallback } from \"react\";\nimport { ControlDataContext, makeHookDepString, useUpdatedRef } from \"./util\";\nimport { useJsonataExpression } from \"./hooks\";\nimport { getJsonPath, getRootDataNode } from \"./treeNodes\";\n\ninterface ValidationHookContext {\n hiddenControl: Control<boolean | null | undefined>;\n dataContext: ControlDataContext;\n control: Control<any>;\n}\n\nexport interface ValidationContext extends ValidationHookContext {\n definition: DataControlDefinition;\n field: SchemaField;\n index: number;\n}\n\nexport function useMakeValidationHook(\n definition: ControlDefinition,\n useValidatorFor: (\n validator: SchemaValidator,\n ctx: ValidationContext,\n ) => void = useDefaultValidator,\n): (ctx: ValidationHookContext) => void {\n const dd = isDataControlDefinition(definition) ? definition : undefined;\n\n const refData = useUpdatedRef({ dd, useValidatorFor });\n const depString = dd\n ? makeHookDepString(dd.validators ?? [], (x) => x.type)\n : \"~\";\n return useCallback(\n (ctx) => {\n const { dd } = refData.current;\n if (!dd) return;\n const field = ctx.dataContext.dataNode?.schema.field ?? {\n field: \"__missing\",\n type: FieldType.Any,\n };\n const {\n control,\n hiddenControl,\n dataContext: { schemaInterface },\n } = ctx;\n\n useValueChangeEffect(control, () => control.setError(\"default\", \"\"));\n if (dd.required)\n useValidator(\n control,\n (v) => {\n return !hiddenControl.value &&\n schemaInterface.isEmptyValue(field, v)\n ? schemaInterface.validationMessageText(\n field,\n ValidationMessageType.NotEmpty,\n false,\n true,\n )\n : null;\n },\n \"required\",\n undefined,\n );\n dd.validators?.forEach((v, i) =>\n useValidatorFor(v, { ...ctx, index: i, field, definition: dd }),\n );\n },\n [!!dd, dd?.required, depString, useValidatorFor],\n );\n}\n\nfunction useDefaultValidator(\n validator: SchemaValidator,\n ctx: ValidationContext,\n) {\n switch (validator.type) {\n case ValidatorType.Length:\n useLengthValidator(validator as LengthValidator, ctx);\n break;\n case ValidatorType.Jsonata:\n useJsonataValidator(validator as JsonataValidator, ctx);\n break;\n case ValidatorType.Date:\n useDateValidator(validator as DateValidator, ctx);\n break;\n }\n}\n\nexport function useJsonataValidator(\n validator: JsonataValidator,\n ctx: ValidationContext,\n) {\n const sdn = ctx.dataContext.parentNode;\n const errorMsg = useJsonataExpression(\n validator.expression,\n getRootDataNode(sdn).control!,\n getJsonPath(sdn),\n undefined,\n (v) => (v == null ? null : typeof v === \"string\" ? v : JSON.stringify(v)),\n );\n useValidator(\n ctx.control,\n () => (!ctx.hiddenControl.value ? errorMsg.value : null),\n \"jsonata\" + ctx.index,\n );\n}\n\nexport function useLengthValidator(\n lv: LengthValidator,\n ctx: ValidationContext,\n) {\n const {\n control,\n dataContext: { schemaInterface },\n hiddenControl,\n field,\n } = ctx;\n useValidator(\n control,\n (v) => {\n const len = schemaInterface.controlLength(field, control);\n const hidden = hiddenControl.value;\n if (hidden) {\n return undefined;\n }\n if (lv.min != null && len < lv.min) {\n if (field?.collection) {\n control.setValue((v) =>\n Array.isArray(v)\n ? v.concat(Array.from({ length: lv.min! - v.length }))\n : Array.from({ length: lv.min! }),\n );\n } else {\n return schemaInterface.validationMessageText(\n field,\n ValidationMessageType.MinLength,\n len,\n lv.min,\n );\n }\n } else if (lv.max != null && len > lv.max) {\n return schemaInterface.validationMessageText(\n field,\n ValidationMessageType.MaxLength,\n len,\n lv.max,\n );\n }\n return undefined;\n },\n \"length\" + ctx.index,\n );\n}\n\nexport function useDateValidator(dv: DateValidator, ctx: ValidationContext) {\n const {\n control,\n field,\n index,\n dataContext: { schemaInterface },\n } = ctx;\n let comparisonDate: number;\n if (dv.fixedDate) {\n comparisonDate = schemaInterface.parseToMillis(field, dv.fixedDate);\n } else {\n const nowDate = new Date();\n comparisonDate = Date.UTC(\n nowDate.getFullYear(),\n nowDate.getMonth(),\n nowDate.getDate(),\n );\n if (dv.daysFromCurrent) {\n comparisonDate += dv.daysFromCurrent * 86400000;\n }\n }\n useValidator(\n control,\n (v) => {\n if (v) {\n const selDate = schemaInterface.parseToMillis(field, v);\n const notAfter = dv.comparison === DateComparison.NotAfter;\n if (notAfter ? selDate > comparisonDate : selDate < comparisonDate) {\n return schemaInterface.validationMessageText(\n field,\n notAfter\n ? ValidationMessageType.NotAfterDate\n : ValidationMessageType.NotBeforeDate,\n selDate,\n comparisonDate,\n );\n }\n }\n return null;\n },\n \"date\" + index,\n );\n}\n","import {\n FieldOption,\n FieldType,\n SchemaField,\n SchemaInterface,\n ValidationMessageType,\n} from \"./types\";\nimport { Control } from \"@react-typed-forms/core\";\nimport { SchemaDataNode, SchemaNode } from \"./treeNodes\";\n\nexport class DefaultSchemaInterface implements SchemaInterface {\n constructor(\n protected boolStrings: [string, string] = [\"No\", \"Yes\"],\n protected parseDateTime: (s: string) => number = (s) => Date.parse(s),\n ) {}\n\n parseToMillis(field: SchemaField, v: string): number {\n return this.parseDateTime(v);\n }\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string {\n switch (messageType) {\n case ValidationMessageType.NotEmpty:\n return \"Please enter a value\";\n case ValidationMessageType.MinLength:\n return \"Length must be at least \" + expected;\n case ValidationMessageType.MaxLength:\n return \"Length must be less than \" + expected;\n case ValidationMessageType.NotBeforeDate:\n return `Date must not be before ${new Date(expected).toDateString()}`;\n case ValidationMessageType.NotAfterDate:\n return `Date must not be after ${new Date(expected).toDateString()}`;\n default:\n return \"Unknown error\";\n }\n }\n\n getDataOptions(node: SchemaDataNode): FieldOption[] | null | undefined {\n return this.getNodeOptions(node.schema);\n }\n\n getNodeOptions(node: SchemaNode): FieldOption[] | null | undefined {\n return this.getOptions(node.field);\n }\n\n getOptions({ options }: SchemaField): FieldOption[] | null | undefined {\n return options && options.length > 0 ? options : null;\n }\n\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null {\n return this.getNodeOptions(field);\n }\n\n isEmptyValue(f: SchemaField, value: any): boolean {\n if (f.collection)\n return Array.isArray(value) ? value.length === 0 : value == null;\n switch (f.type) {\n case FieldType.String:\n case FieldType.DateTime:\n case FieldType.Date:\n case FieldType.Time:\n return !value;\n default:\n return value == null;\n }\n }\n\n searchText(field: SchemaField, value: any): string {\n return this.textValue(field, value)?.toLowerCase() ?? \"\";\n }\n\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean | undefined,\n ): string | undefined {\n const options = this.getOptions(field);\n const option = options?.find((x) => x.value === value);\n if (option) return option.name;\n switch (field.type) {\n case FieldType.Date:\n return value ? new Date(value).toLocaleDateString() : undefined;\n case FieldType.DateTime:\n return value\n ? new Date(this.parseToMillis(field, value)).toLocaleString()\n : undefined;\n case FieldType.Time:\n return value\n ? new Date(\"1970-01-01T\" + value).toLocaleTimeString()\n : undefined;\n case FieldType.Bool:\n return this.boolStrings[value ? 1 : 0];\n default:\n return value != null ? value.toString() : undefined;\n }\n }\n controlLength(f: SchemaField, control: Control<any>): number {\n return f.collection\n ? (control.elements?.length ?? 0)\n : this.valueLength(f, control.value);\n }\n valueLength(field: SchemaField, value: any): number {\n return (value && value?.length) ?? 0;\n }\n\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number {\n if (v1 == null) return v2 == null ? 0 : 1;\n if (v2 == null) return -1;\n switch (field.type) {\n case FieldType.Date:\n case FieldType.DateTime:\n case FieldType.Time:\n case FieldType.String:\n return (v1 as string).localeCompare(v2 as string);\n case FieldType.Bool:\n return (v1 as boolean) ? ((v2 as boolean) ? 0 : 1) : -1;\n case FieldType.Int:\n case FieldType.Double:\n return (v1 as number) - (v2 as number);\n default:\n return 0;\n }\n }\n}\n\nexport const defaultSchemaInterface: SchemaInterface =\n new DefaultSchemaInterface();\n","import React, {\n FC,\n Fragment,\n Key,\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n} from \"react\";\nimport {\n addElement,\n Control,\n newControl,\n removeElement,\n RenderArrayElements,\n trackedValue,\n useCalculatedControl,\n useComponentTracking,\n useControl,\n useControlEffect,\n} from \"@react-typed-forms/core\";\nimport {\n AdornmentPlacement,\n ArrayActionOptions,\n ControlActionHandler,\n ControlAdornment,\n ControlDefinition,\n CustomDisplay,\n DataControlDefinition,\n DataRenderType,\n DisplayData,\n DisplayDataType,\n DynamicPropertyType,\n FieldOption,\n GroupRenderOptions,\n isActionControlsDefinition,\n isDataControlDefinition,\n isDisplayControlsDefinition,\n isGroupControlsDefinition,\n LengthValidator,\n RenderOptions,\n SchemaField,\n SchemaInterface,\n SchemaValidator,\n ValidatorType,\n} from \"./types\";\nimport {\n applyLengthRestrictions,\n ControlClasses,\n ControlDataContext,\n elementValueForField,\n fieldDisplayName,\n FormContextData,\n getGroupClassOverrides,\n isControlDisplayOnly,\n JsonPath,\n rendererClass,\n useDynamicHooks,\n useUpdatedRef,\n} from \"./util\";\nimport { dataControl } from \"./controlBuilder\";\nimport {\n defaultUseEvalExpressionHook,\n EvalExpressionHook,\n useEvalActionHook,\n useEvalAllowedOptionsHook,\n useEvalDefaultValueHook,\n useEvalDisabledHook,\n useEvalDisplayHook,\n UseEvalExpressionHook,\n useEvalLabelText,\n useEvalReadonlyHook,\n useEvalStyleHook,\n useEvalVisibilityHook,\n} from \"./hooks\";\nimport { useMakeValidationHook, ValidationContext } from \"./validators\";\nimport { defaultSchemaInterface } from \"./schemaInterface\";\nimport {\n createSchemaLookup,\n lookupDataNode,\n makeSchemaDataNode,\n SchemaDataNode,\n} from \"./treeNodes\";\n\nexport interface FormRenderer {\n renderData: (\n props: DataRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n renderGroup: (\n props: GroupRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n renderDisplay: (props: DisplayRendererProps) => ReactNode;\n renderAction: (props: ActionRendererProps) => ReactNode;\n renderArray: (props: ArrayRendererProps) => ReactNode;\n renderAdornment: (props: AdornmentProps) => AdornmentRenderer;\n renderLabel: (\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) => ReactNode;\n renderLayout: (props: ControlLayoutProps) => RenderedControl;\n renderVisibility: (props: VisibilityRendererProps) => ReactNode;\n renderLabelText: (props: ReactNode) => ReactNode;\n}\n\nexport interface AdornmentProps {\n adornment: ControlAdornment;\n dataContext: ControlDataContext;\n useExpr?: UseEvalExpressionHook;\n designMode?: boolean;\n}\n\nexport const AppendAdornmentPriority = 0;\nexport const WrapAdornmentPriority = 1000;\n\nexport interface AdornmentRenderer {\n apply(children: RenderedLayout): void;\n adornment?: ControlAdornment;\n priority: number;\n}\n\nexport interface ArrayRendererProps {\n addAction?: ActionRendererProps;\n required: boolean;\n removeAction?: (elemIndex: number) => ActionRendererProps;\n renderElement: (\n elemIndex: number,\n wrapEntry: (children: ReactNode) => ReactNode,\n ) => ReactNode;\n arrayControl: Control<any[] | undefined | null>;\n className?: string;\n style?: React.CSSProperties;\n min?: number | null;\n max?: number | null;\n disabled?: boolean;\n}\nexport interface Visibility {\n visible: boolean;\n showing: boolean;\n}\n\nexport interface RenderedLayout {\n labelStart?: ReactNode;\n labelEnd?: ReactNode;\n controlStart?: ReactNode;\n controlEnd?: ReactNode;\n label?: ReactNode;\n children?: ReactNode;\n errorControl?: Control<any>;\n className?: string;\n style?: React.CSSProperties;\n wrapLayout: (layout: ReactElement) => ReactElement;\n}\n\nexport interface RenderedControl {\n children: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n divRef?: (cb: HTMLElement | null) => void;\n}\n\nexport interface VisibilityRendererProps extends RenderedControl {\n visibility: Control<Visibility | undefined>;\n}\n\nexport interface ControlLayoutProps {\n label?: LabelRendererProps;\n errorControl?: Control<any>;\n adornments?: AdornmentRenderer[];\n children?: ReactNode;\n processLayout?: (props: ControlLayoutProps) => ControlLayoutProps;\n className?: string | null;\n style?: React.CSSProperties;\n}\n\nexport enum LabelType {\n Control,\n Group,\n Text,\n}\nexport interface LabelRendererProps {\n type: LabelType;\n hide?: boolean | null;\n label: ReactNode;\n required?: boolean | null;\n forId?: string;\n className?: string;\n}\nexport interface DisplayRendererProps {\n data: DisplayData;\n display?: Control<string | undefined>;\n dataContext: ControlDataContext;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport type ChildVisibilityFunc = (\n child: ControlDefinition,\n parentNode?: SchemaDataNode,\n dontOverride?: boolean,\n) => EvalExpressionHook<boolean>;\nexport interface ParentRendererProps {\n childDefinitions: ControlDefinition[];\n renderChild: ChildRenderer;\n className?: string;\n style?: React.CSSProperties;\n dataContext: ControlDataContext;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n designMode?: boolean;\n}\n\nexport interface GroupRendererProps extends ParentRendererProps {\n definition: ControlDefinition;\n renderOptions: GroupRenderOptions;\n}\n\nexport interface DataRendererProps extends ParentRendererProps {\n renderOptions: RenderOptions;\n definition: DataControlDefinition;\n field: SchemaField;\n elementIndex?: number;\n id: string;\n control: Control<any>;\n readonly: boolean;\n required: boolean;\n options: FieldOption[] | undefined | null;\n hidden: boolean;\n dataNode: SchemaDataNode;\n displayOnly: boolean;\n}\n\nexport interface ActionRendererProps {\n actionId: string;\n actionText: string;\n actionData?: any;\n onClick: () => void;\n className?: string | null;\n style?: React.CSSProperties;\n disabled?: boolean;\n}\n\nexport interface ControlRenderProps {\n control: Control<any>;\n parentPath?: JsonPath[];\n}\n\nexport interface FormContextOptions {\n readonly?: boolean | null;\n hidden?: boolean | null;\n disabled?: boolean | null;\n displayOnly?: boolean;\n}\n\nexport interface DataControlProps {\n definition: DataControlDefinition;\n dataContext: ControlDataContext;\n control: Control<any>;\n formOptions: FormContextOptions;\n style?: React.CSSProperties | undefined;\n renderChild: ChildRenderer;\n elementIndex?: number;\n allowedOptions?: Control<any[] | undefined>;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n schemaInterface?: SchemaInterface;\n designMode?: boolean;\n styleClass?: string;\n layoutClass?: string;\n}\n\nexport type CreateDataProps = (\n controlProps: DataControlProps,\n) => DataRendererProps;\n\nexport interface ControlRenderOptions\n extends FormContextOptions,\n ControlClasses {\n useDataHook?: (c: ControlDefinition) => CreateDataProps;\n actionOnClick?: ControlActionHandler;\n customDisplay?: (\n customId: string,\n displayProps: DisplayRendererProps,\n ) => ReactNode;\n useValidationHook?: (\n validator: SchemaValidator,\n ctx: ValidationContext,\n ) => void;\n useEvalExpressionHook?: UseEvalExpressionHook;\n clearHidden?: boolean;\n schemaInterface?: SchemaInterface;\n elementIndex?: number;\n formData?: FormContextData;\n}\n\nexport function useControlRenderer(\n definition: ControlDefinition,\n fields: SchemaField[],\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n): FC<ControlRenderProps> {\n const r = useUpdatedRef({ definition, fields, renderer, options });\n return useCallback(\n ({ control, parentPath }) => {\n return (\n <ControlRenderer\n {...r.current}\n control={control}\n parentPath={parentPath}\n />\n );\n },\n [r],\n );\n}\nexport function useControlRendererComponent(\n definition: ControlDefinition,\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n parentDataNode: SchemaDataNode,\n): FC<{}> {\n const dataProps = options.useDataHook?.(definition) ?? defaultDataProps;\n const elementIndex = options.elementIndex;\n const schemaInterface = options.schemaInterface ?? defaultSchemaInterface;\n const useExpr = options.useEvalExpressionHook ?? defaultUseEvalExpressionHook;\n\n let dataNode: SchemaDataNode | undefined;\n if (elementIndex != null) {\n dataNode = parentDataNode.getChildElement(elementIndex);\n } else {\n dataNode = lookupDataNode(definition, parentDataNode);\n }\n const useValidation = useMakeValidationHook(\n definition,\n options.useValidationHook,\n );\n const dynamicHooks = useDynamicHooks({\n defaultValueControl: useEvalDefaultValueHook(useExpr, definition),\n visibleControl: useEvalVisibilityHook(useExpr, definition),\n readonlyControl: useEvalReadonlyHook(useExpr, definition),\n disabledControl: useEvalDisabledHook(useExpr, definition),\n allowedOptions: useEvalAllowedOptionsHook(useExpr, definition),\n labelText: useEvalLabelText(useExpr, definition),\n actionData: useEvalActionHook(useExpr, definition),\n customStyle: useEvalStyleHook(\n useExpr,\n DynamicPropertyType.Style,\n definition,\n ),\n layoutStyle: useEvalStyleHook(\n useExpr,\n DynamicPropertyType.LayoutStyle,\n definition,\n ),\n displayControl: useEvalDisplayHook(useExpr, definition),\n });\n\n const r = useUpdatedRef({\n options,\n definition,\n elementIndex,\n parentDataNode,\n dataNode,\n });\n\n const Component = useCallback(() => {\n const stopTracking = useComponentTracking();\n\n try {\n const {\n definition: c,\n options,\n elementIndex,\n parentDataNode: pdn,\n dataNode: dn,\n } = r.current;\n const formData = options.formData ?? {};\n const dataContext: ControlDataContext = {\n schemaInterface,\n dataNode: dn,\n parentNode: pdn,\n formData,\n };\n const {\n readonlyControl,\n disabledControl,\n visibleControl,\n displayControl,\n layoutStyle,\n labelText,\n customStyle,\n allowedOptions,\n defaultValueControl,\n actionData,\n } = dynamicHooks(dataContext);\n\n const visible = visibleControl.current.value;\n const visibility = useControl<Visibility | undefined>(() =>\n visible != null\n ? {\n visible,\n showing: visible,\n }\n : undefined,\n );\n useControlEffect(\n () => visibleControl.value,\n (visible) => {\n if (visible != null)\n visibility.setValue((ex) => ({\n visible,\n showing: ex ? ex.showing : visible,\n }));\n },\n );\n\n const parentControl = parentDataNode.control!;\n const control = dataNode?.control;\n useControlEffect(\n () => [\n visibility.value,\n defaultValueControl.value,\n control?.isNull,\n isDataControlDefinition(definition) && definition.dontClearHidden,\n isDataControlDefinition(definition) &&\n definition.renderOptions?.type == DataRenderType.NullToggle,\n parentControl.isNull,\n options.hidden,\n readonlyControl.value,\n ],\n ([vc, dv, _, dontClear, dontDefault, parentNull, hidden, ro]) => {\n if (!ro) {\n if (control) {\n if (vc && vc.visible === vc.showing) {\n if (hidden || !vc.visible) {\n control.setValue((x) =>\n options.clearHidden && !dontClear\n ? undefined\n : x == null && dontClear && !dontDefault\n ? dv\n : x,\n );\n } else if (!dontDefault)\n control.setValue((x) => (x != null ? x : dv));\n }\n } else if (parentNull) {\n parentControl.setValue((x) => x ?? {});\n }\n }\n },\n true,\n );\n const myOptionsControl = useCalculatedControl<FormContextOptions>(() => ({\n hidden: options.hidden || !visibility.fields?.showing.value,\n readonly: options.readonly || readonlyControl.value,\n disabled: options.disabled || disabledControl.value,\n displayOnly: options.displayOnly || isControlDisplayOnly(c),\n }));\n const myOptions = trackedValue(myOptionsControl);\n useValidation({\n control: control ?? newControl(null),\n hiddenControl: myOptionsControl.fields.hidden,\n dataContext,\n });\n const childOptions: ControlRenderOptions = {\n ...options,\n ...myOptions,\n elementIndex: undefined,\n formData,\n };\n\n useEffect(() => {\n if (\n control &&\n typeof myOptions.disabled === \"boolean\" &&\n control.disabled != myOptions.disabled\n )\n control.disabled = myOptions.disabled;\n }, [control, myOptions.disabled]);\n if (parentControl.isNull) return <></>;\n\n const adornments =\n definition.adornments?.map((x) =>\n renderer.renderAdornment({\n adornment: x,\n dataContext,\n useExpr,\n }),\n ) ?? [];\n const labelAndChildren = renderControlLayout({\n definition: c,\n renderer,\n renderChild: (k, child, options) => {\n const overrideClasses = getGroupClassOverrides(c);\n const { parentDataNode, ...renderOptions } = options ?? {};\n const dContext =\n parentDataNode ?? dataContext.dataNode ?? dataContext.parentNode;\n\n return (\n <NewControlRenderer\n key={k}\n definition={child}\n renderer={renderer}\n parentDataNode={dContext}\n options={{\n ...childOptions,\n ...overrideClasses,\n ...renderOptions,\n }}\n />\n );\n },\n createDataProps: dataProps,\n formOptions: myOptions,\n dataContext,\n control: displayControl ?? control,\n elementIndex,\n schemaInterface,\n labelText,\n displayControl,\n style: customStyle.value,\n allowedOptions,\n customDisplay: options.customDisplay,\n actionDataControl: actionData,\n actionOnClick: options.actionOnClick,\n styleClass: options.styleClass,\n labelClass: options.labelClass,\n useEvalExpression: useExpr,\n useChildVisibility: (childDef, parentNode, dontOverride) => {\n return useEvalVisibilityHook(\n useExpr,\n childDef,\n !dontOverride\n ? lookupDataNode(\n childDef,\n parentNode ?? dataNode ?? parentDataNode,\n )\n : undefined,\n );\n },\n });\n const renderedControl = renderer.renderLayout({\n ...labelAndChildren,\n adornments,\n className: rendererClass(options.layoutClass, c.layoutClass),\n style: layoutStyle.value,\n });\n return renderer.renderVisibility({ visibility, ...renderedControl });\n } finally {\n stopTracking();\n }\n }, [r, dataProps, useValidation, renderer, schemaInterface, dynamicHooks]);\n (Component as any).displayName = \"RenderControl\";\n return Component;\n}\n\nexport function ControlRenderer({\n definition,\n fields,\n renderer,\n options,\n control,\n parentPath,\n}: {\n definition: ControlDefinition;\n fields: SchemaField[];\n renderer: FormRenderer;\n options?: ControlRenderOptions;\n control: Control<any>;\n parentPath?: JsonPath[];\n}) {\n const schemaDataNode = makeSchemaDataNode(\n createSchemaLookup({ \"\": fields }).getSchema(\"\")!,\n control,\n );\n const Render = useControlRendererComponent(\n definition,\n renderer,\n options,\n schemaDataNode,\n );\n return <Render />;\n}\n\nexport function NewControlRenderer({\n definition,\n renderer,\n options,\n parentDataNode,\n}: {\n definition: ControlDefinition;\n renderer: FormRenderer;\n options?: ControlRenderOptions;\n parentDataNode: SchemaDataNode;\n}) {\n const Render = useControlRendererComponent(\n definition,\n renderer,\n options,\n parentDataNode,\n );\n return <Render />;\n}\n\nexport function defaultDataProps({\n definition,\n control,\n formOptions,\n style,\n allowedOptions,\n schemaInterface = defaultSchemaInterface,\n styleClass,\n ...props\n}: DataControlProps): DataRendererProps {\n const dataNode = props.dataContext.dataNode!;\n const field = dataNode.schema.field;\n const className = rendererClass(styleClass, definition.styleClass);\n const displayOnly = !!formOptions.displayOnly;\n const required = !!definition.required && !displayOnly;\n const fieldOptions = schemaInterface.getOptions(field);\n const _allowed = allowedOptions?.value ?? [];\n const allowed = Array.isArray(_allowed) ? _allowed : [_allowed];\n return {\n dataNode,\n definition,\n childDefinitions: definition.children ?? [],\n control,\n field,\n id: \"c\" + control.uniqueId,\n options:\n allowed.length > 0\n ? allowed\n .map((x) =>\n typeof x === \"object\"\n ? x\n : fieldOptions?.find((y) => y.value == x) ?? {\n name: x.toString(),\n value: x,\n },\n )\n .filter((x) => x != null)\n : fieldOptions,\n readonly: !!formOptions.readonly,\n displayOnly,\n renderOptions: definition.renderOptions ?? { type: \"Standard\" },\n required,\n hidden: !!formOptions.hidden,\n className,\n style,\n ...props,\n };\n}\n\nexport interface ChildRendererOptions {\n elementIndex?: number;\n parentDataNode?: SchemaDataNode;\n formData?: FormContextData;\n displayOnly?: boolean;\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\nexport type ChildRenderer = (\n k: Key,\n child: ControlDefinition,\n options?: ChildRendererOptions,\n) => ReactNode;\n\nexport interface RenderControlProps {\n definition: ControlDefinition;\n renderer: FormRenderer;\n renderChild: ChildRenderer;\n createDataProps: CreateDataProps;\n formOptions: FormContextOptions;\n dataContext: ControlDataContext;\n control?: Control<any>;\n labelText?: Control<string | null | undefined>;\n elementIndex?: number;\n displayControl?: Control<string | undefined>;\n style?: React.CSSProperties;\n allowedOptions?: Control<any[] | undefined>;\n actionDataControl?: Control<any | undefined | null>;\n useChildVisibility: ChildVisibilityFunc;\n useEvalExpression: UseEvalExpressionHook;\n actionOnClick?: ControlActionHandler;\n schemaInterface?: SchemaInterface;\n designMode?: boolean;\n customDisplay?: (\n customId: string,\n displayProps: DisplayRendererProps,\n ) => ReactNode;\n labelClass?: string;\n styleClass?: string;\n}\nexport function renderControlLayout(\n props: RenderControlProps,\n): ControlLayoutProps {\n const {\n definition: c,\n renderer,\n renderChild,\n control,\n dataContext,\n createDataProps: dataProps,\n displayControl,\n style,\n labelText,\n useChildVisibility,\n designMode,\n customDisplay,\n useEvalExpression,\n labelClass,\n styleClass,\n } = props;\n\n if (isDataControlDefinition(c)) {\n return renderData(c);\n }\n if (isGroupControlsDefinition(c)) {\n if (c.compoundField) {\n return renderData(\n dataControl(c.compoundField, c.title, {\n children: c.children,\n hideTitle: c.groupOptions?.hideTitle,\n }),\n );\n }\n\n return {\n processLayout: renderer.renderGroup({\n childDefinitions: c.children ?? [],\n definition: c,\n renderChild,\n useEvalExpression,\n dataContext,\n renderOptions: c.groupOptions ?? { type: \"Standard\" },\n className: rendererClass(styleClass, c.styleClass),\n useChildVisibility,\n style,\n designMode,\n }),\n label: {\n label: labelText?.value ?? c.title,\n className: rendererClass(labelClass, c.labelClass),\n type: LabelType.Group,\n hide: c.groupOptions?.hideTitle,\n },\n };\n }\n if (isActionControlsDefinition(c)) {\n const actionData = props.actionDataControl?.value ?? c.actionData;\n return {\n children: renderer.renderAction({\n actionText: labelText?.value ?? c.title ?? c.actionId,\n actionId: c.actionId,\n actionData,\n onClick:\n props.actionOnClick?.(c.actionId, actionData, dataContext) ??\n (() => {}),\n className: rendererClass(styleClass, c.styleClass),\n style,\n }),\n };\n }\n if (isDisplayControlsDefinition(c)) {\n const data = c.displayData ?? {};\n const displayProps = {\n data,\n className: rendererClass(styleClass, c.styleClass),\n style,\n display: displayControl,\n dataContext,\n };\n if (data.type === DisplayDataType.Custom && customDisplay) {\n return {\n children: customDisplay((data as CustomDisplay).customId, displayProps),\n };\n }\n return {\n children: renderer.renderDisplay(displayProps),\n };\n }\n return {};\n\n function renderData(c: DataControlDefinition) {\n if (!control) return { children: \"No control for: \" + c.field };\n const rendererProps = dataProps(\n props as RenderControlProps & {\n definition: DataControlDefinition;\n control: Control<any>;\n },\n );\n\n const label = !c.hideTitle\n ? controlTitle(\n labelText?.value ?? c.title,\n props.dataContext.dataNode!.schema.field,\n )\n : undefined;\n return {\n processLayout: renderer.renderData(rendererProps),\n label: {\n type:\n (c.children?.length ?? 0) > 0 ? LabelType.Group : LabelType.Control,\n label,\n forId: rendererProps.id,\n required: c.required && !props.formOptions.displayOnly,\n hide: c.hideTitle,\n className: rendererClass(labelClass, c.labelClass),\n },\n errorControl: control,\n };\n }\n}\n\ntype MarkupKeys = keyof Omit<\n RenderedLayout,\n \"errorControl\" | \"style\" | \"className\" | \"wrapLayout\"\n>;\nexport function appendMarkup(\n k: MarkupKeys,\n markup: ReactNode,\n): (layout: RenderedLayout) => void {\n return (layout) =>\n (layout[k] = (\n <>\n {layout[k]}\n {markup}\n </>\n ));\n}\n\nexport function wrapMarkup(\n k: MarkupKeys,\n wrap: (ex: ReactNode) => ReactNode,\n): (layout: RenderedLayout) => void {\n return (layout) => (layout[k] = wrap(layout[k]));\n}\n\nexport function layoutKeyForPlacement(pos: AdornmentPlacement): MarkupKeys {\n switch (pos) {\n case AdornmentPlacement.ControlEnd:\n return \"controlEnd\";\n case AdornmentPlacement.ControlStart:\n return \"controlStart\";\n case AdornmentPlacement.LabelStart:\n return \"labelStart\";\n case AdornmentPlacement.LabelEnd:\n return \"labelEnd\";\n }\n}\n\nexport function wrapLayout(\n wrap: (layout: ReactElement) => ReactElement,\n): (renderedLayout: RenderedLayout) => void {\n return (rl) => {\n const orig = rl.wrapLayout;\n rl.wrapLayout = (x) => wrap(orig(x));\n };\n}\n\nexport function appendMarkupAt(\n pos: AdornmentPlacement,\n markup: ReactNode,\n): (layout: RenderedLayout) => void {\n return appendMarkup(layoutKeyForPlacement(pos), markup);\n}\n\nexport function wrapMarkupAt(\n pos: AdornmentPlacement,\n wrap: (ex: ReactNode) => ReactNode,\n): (layout: RenderedLayout) => void {\n return wrapMarkup(layoutKeyForPlacement(pos), wrap);\n}\n\nexport function renderLayoutParts(\n props: ControlLayoutProps,\n renderer: FormRenderer,\n): RenderedLayout {\n const { className, children, style, errorControl, label, adornments } =\n props.processLayout?.(props) ?? props;\n const layout: RenderedLayout = {\n children,\n errorControl,\n style,\n className: className!,\n wrapLayout: (x) => x,\n };\n (adornments ?? [])\n .sort((a, b) => a.priority - b.priority)\n .forEach((x) => x.apply(layout));\n layout.label =\n label && !label.hide\n ? renderer.renderLabel(label, layout.labelStart, layout.labelEnd)\n : undefined;\n return layout;\n}\n\nexport function controlTitle(\n title: string | undefined | null,\n field: SchemaField,\n) {\n return title ? title : fieldDisplayName(field);\n}\n\nexport function getLengthRestrictions(definition: DataControlDefinition) {\n const lengthVal = definition.validators?.find(\n (x) => x.type === ValidatorType.Length,\n ) as LengthValidator | undefined;\n\n return { min: lengthVal?.min, max: lengthVal?.max };\n}\n\nexport function createArrayActions(\n control: Control<any[]>,\n field: SchemaField,\n options?: ArrayActionOptions,\n): Pick<ArrayRendererProps, \"addAction\" | \"removeAction\" | \"arrayControl\"> {\n const noun = field.displayName ?? field.field;\n const {\n addText,\n noAdd,\n removeText,\n noRemove,\n removeActionId,\n addActionId,\n disabled,\n readonly,\n designMode,\n } = options ?? {};\n return {\n arrayControl: control,\n addAction:\n !readonly && !noAdd\n ? {\n actionId: addActionId ? addActionId : \"add\",\n actionText: addText ? addText : \"Add \" + noun,\n onClick: () =>\n !designMode && addElement(control, elementValueForField(field)),\n disabled,\n }\n : undefined,\n removeAction:\n !readonly && !noRemove\n ? (i: number) => ({\n actionId: removeActionId ? removeActionId : \"remove\",\n actionText: removeText ? removeText : \"Remove\",\n onClick: () => !designMode && removeElement(control, i),\n disabled,\n })\n : undefined,\n };\n}\n\nexport function applyArrayLengthRestrictions(\n {\n arrayControl,\n min,\n max,\n addAction: aa,\n removeAction: ra,\n required,\n }: Pick<\n ArrayRendererProps,\n \"addAction\" | \"removeAction\" | \"arrayControl\" | \"min\" | \"max\" | \"required\"\n >,\n disable?: boolean,\n): Pick<ArrayRendererProps, \"addAction\" | \"removeAction\"> & {\n addDisabled: boolean;\n removeDisabled: boolean;\n} {\n const [removeAllowed, addAllowed] = applyLengthRestrictions(\n arrayControl.elements?.length ?? 0,\n min == null && required ? 1 : min,\n max,\n true,\n true,\n );\n return {\n addAction: disable || addAllowed ? aa : undefined,\n removeAction: disable || removeAllowed ? ra : undefined,\n removeDisabled: !removeAllowed,\n addDisabled: !addAllowed,\n };\n}\n\nexport function fieldOptionAdornment(p: DataRendererProps) {\n return (o: FieldOption, i: number, selected: boolean) => (\n <RenderArrayElements array={p.childDefinitions}>\n {(cd, i) =>\n p.renderChild(i, cd, {\n parentDataNode: p.dataContext.parentNode,\n formData: { option: o, optionSelected: selected },\n })\n }\n </RenderArrayElements>\n );\n}\n","import { ReactNode } from \"react\";\nimport {\n ActionRendererProps,\n AdornmentProps,\n AdornmentRenderer,\n ArrayRendererProps,\n ControlLayoutProps,\n DataRendererProps,\n DisplayRendererProps,\n FormRenderer,\n GroupRendererProps,\n LabelRendererProps,\n LabelType,\n} from \"./controlRender\";\nimport { hasOptions } from \"./util\";\nimport {\n ActionRendererRegistration,\n AdornmentRendererRegistration,\n ArrayRendererRegistration,\n DataRendererRegistration,\n DefaultRenderers,\n DisplayRendererRegistration,\n GroupRendererRegistration,\n LabelRendererRegistration,\n LayoutRendererRegistration,\n RendererRegistration,\n VisibilityRendererRegistration,\n} from \"./renderers\";\nimport { DataRenderType } from \"./types\";\n\nexport function createFormRenderer(\n customRenderers: RendererRegistration[] = [],\n defaultRenderers: DefaultRenderers,\n): FormRenderer {\n const dataRegistrations = customRenderers.filter(isDataRegistration);\n const groupRegistrations = customRenderers.filter(isGroupRegistration);\n const adornmentRegistrations = customRenderers.filter(\n isAdornmentRegistration,\n );\n const displayRegistrations = customRenderers.filter(isDisplayRegistration);\n const labelRenderers = customRenderers.filter(isLabelRegistration);\n const arrayRenderers = customRenderers.filter(isArrayRegistration);\n const actionRenderers = customRenderers.filter(isActionRegistration);\n const layoutRenderers = customRenderers.filter(isLayoutRegistration);\n const visibilityRenderer =\n customRenderers.find(isVisibilityRegistration) ??\n defaultRenderers.visibility;\n\n const formRenderers: FormRenderer = {\n renderAction,\n renderData,\n renderGroup,\n renderDisplay,\n renderLabel,\n renderArray,\n renderAdornment,\n renderLayout,\n renderVisibility: visibilityRenderer.render,\n renderLabelText,\n };\n\n function renderLabelText(label: ReactNode) {\n return renderLabel({ label, type: LabelType.Text }, undefined, undefined);\n }\n\n function renderLayout(props: ControlLayoutProps) {\n const renderer =\n layoutRenderers.find((x) => !x.match || x.match(props)) ??\n defaultRenderers.renderLayout;\n return renderer.render(props, formRenderers);\n }\n\n function renderAdornment(props: AdornmentProps): AdornmentRenderer {\n const renderer =\n adornmentRegistrations.find((x) =>\n isOneOf(x.adornmentType, props.adornment.type),\n ) ?? defaultRenderers.adornment;\n return renderer.render(props, formRenderers);\n }\n\n function renderArray(props: ArrayRendererProps) {\n return (arrayRenderers[0] ?? defaultRenderers.array).render(\n props,\n formRenderers,\n );\n }\n\n function renderLabel(\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) {\n const renderer =\n labelRenderers.find((x) => isOneOf(x.labelType, props.type)) ??\n defaultRenderers.label;\n return renderer.render(props, labelStart, labelEnd, formRenderers);\n }\n\n function renderData(\n props: DataRendererProps,\n ): (layout: ControlLayoutProps) => ControlLayoutProps {\n const {\n renderOptions: { type: renderType },\n field,\n } = props;\n\n const options = hasOptions(props);\n const renderer =\n dataRegistrations.find(\n (x) =>\n (x.collection ?? false) ===\n (props.elementIndex == null && (field.collection ?? false)) &&\n (x.options ?? false) === options &&\n ((x.schemaType &&\n renderType == DataRenderType.Standard &&\n isOneOf(x.schemaType, field.type)) ||\n (x.renderType && isOneOf(x.renderType, renderType)) ||\n (x.match && x.match(props))),\n ) ?? defaultRenderers.data;\n\n const result = renderer.render(props, formRenderers);\n if (typeof result === \"function\") return result;\n return (l) => ({ ...l, children: result });\n }\n\n function renderGroup(\n props: GroupRendererProps,\n ): (layout: ControlLayoutProps) => ControlLayoutProps {\n const renderType = props.renderOptions.type;\n const renderer =\n groupRegistrations.find((x) => isOneOf(x.renderType, renderType)) ??\n defaultRenderers.group;\n const result = renderer.render(props, formRenderers);\n if (typeof result === \"function\") return result;\n return (l) => ({ ...l, children: result });\n }\n\n function renderAction(props: ActionRendererProps) {\n const renderer =\n actionRenderers.find((x) => isOneOf(x.actionType, props.actionId)) ??\n defaultRenderers.action;\n return renderer.render(props, formRenderers);\n }\n\n function renderDisplay(props: DisplayRendererProps) {\n const renderType = props.data.type;\n const renderer =\n displayRegistrations.find((x) => isOneOf(x.renderType, renderType)) ??\n defaultRenderers.display;\n return renderer.render(props, formRenderers);\n }\n\n return formRenderers;\n}\n\nfunction isOneOf<A>(x: A | A[] | undefined, v: A) {\n return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;\n}\n\nfunction isAdornmentRegistration(\n x: RendererRegistration,\n): x is AdornmentRendererRegistration {\n return x.type === \"adornment\";\n}\n\nfunction isDataRegistration(\n x: RendererRegistration,\n): x is DataRendererRegistration {\n return x.type === \"data\";\n}\n\nfunction isGroupRegistration(\n x: RendererRegistration,\n): x is GroupRendererRegistration {\n return x.type === \"group\";\n}\n\nfunction isLabelRegistration(\n x: RendererRegistration,\n): x is LabelRendererRegistration {\n return x.type === \"label\";\n}\n\nfunction isLayoutRegistration(\n x: RendererRegistration,\n): x is LayoutRendererRegistration {\n return x.type === \"layout\";\n}\n\nfunction isVisibilityRegistration(\n x: RendererRegistration,\n): x is VisibilityRendererRegistration {\n return x.type === \"visibility\";\n}\n\nfunction isActionRegistration(\n x: RendererRegistration,\n): x is ActionRendererRegistration {\n return x.type === \"action\";\n}\n\nfunction isDisplayRegistration(\n x: RendererRegistration,\n): x is DisplayRendererRegistration {\n return x.type === \"display\";\n}\n\nfunction isArrayRegistration(\n x: RendererRegistration,\n): x is ArrayRendererRegistration {\n return x.type === \"array\";\n}\n","import { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n ActionRendererProps,\n AdornmentProps,\n AdornmentRenderer,\n ArrayRendererProps,\n ControlLayoutProps,\n DataRendererProps,\n DisplayRendererProps,\n FormRenderer,\n GroupRendererProps,\n LabelRendererProps,\n LabelType,\n RenderedControl,\n VisibilityRendererProps,\n} from \"./controlRender\";\nimport {\n AccordionAdornment,\n ControlAdornment,\n ControlAdornmentType,\n IconAdornment,\n SetFieldAdornment,\n} from \"./types\";\n\nexport interface DefaultRenderers {\n data: DataRendererRegistration;\n label: LabelRendererRegistration;\n action: ActionRendererRegistration;\n array: ArrayRendererRegistration;\n group: GroupRendererRegistration;\n display: DisplayRendererRegistration;\n adornment: AdornmentRendererRegistration;\n renderLayout: LayoutRendererRegistration;\n visibility: VisibilityRendererRegistration;\n}\n\nexport interface LayoutRendererRegistration {\n type: \"layout\";\n match?: (props: ControlLayoutProps) => boolean;\n render: (\n props: ControlLayoutProps,\n renderers: FormRenderer,\n ) => RenderedControl;\n}\nexport interface DataRendererRegistration {\n type: \"data\";\n schemaType?: string | string[];\n renderType?: string | string[];\n options?: boolean;\n collection?: boolean;\n match?: (props: DataRendererProps) => boolean;\n render: (\n props: DataRendererProps,\n renderers: FormRenderer,\n ) => ReactNode | ((layout: ControlLayoutProps) => ControlLayoutProps);\n}\n\nexport interface LabelRendererRegistration {\n type: \"label\";\n labelType?: LabelType | LabelType[];\n render: (\n labelProps: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n renderers: FormRenderer,\n ) => ReactNode;\n}\n\nexport interface ActionRendererRegistration {\n type: \"action\";\n actionType?: string | string[];\n render: (props: ActionRendererProps, renderers: FormRenderer) => ReactElement;\n}\n\nexport interface ArrayRendererRegistration {\n type: \"array\";\n render: (props: ArrayRendererProps, renderers: FormRenderer) => ReactElement;\n}\n\nexport interface GroupRendererRegistration {\n type: \"group\";\n renderType?: string | string[];\n render: (\n props: GroupRendererProps,\n renderers: FormRenderer,\n ) => ReactElement | ((layout: ControlLayoutProps) => ControlLayoutProps);\n}\n\nexport interface DisplayRendererRegistration {\n type: \"display\";\n renderType?: string | string[];\n render: (\n props: DisplayRendererProps,\n renderers: FormRenderer,\n ) => ReactElement;\n}\n\nexport interface AdornmentRendererRegistration {\n type: \"adornment\";\n adornmentType?: string | string[];\n render: (props: AdornmentProps, renderers: FormRenderer) => AdornmentRenderer;\n}\n\nexport interface VisibilityRendererRegistration {\n type: \"visibility\";\n render: (props: VisibilityRendererProps) => ReactNode;\n}\n\nexport type RendererRegistration =\n | DataRendererRegistration\n | GroupRendererRegistration\n | DisplayRendererRegistration\n | ActionRendererRegistration\n | LabelRendererRegistration\n | ArrayRendererRegistration\n | AdornmentRendererRegistration\n | LayoutRendererRegistration\n | VisibilityRendererRegistration;\n\nexport function isIconAdornment(a: ControlAdornment): a is IconAdornment {\n return a.type === ControlAdornmentType.Icon;\n}\n\nexport function isAccordionAdornment(\n a: ControlAdornment,\n): a is AccordionAdornment {\n return a.type === ControlAdornmentType.Accordion;\n}\n\nexport function isSetFieldAdornment(\n a: ControlAdornment,\n): a is SetFieldAdornment {\n return a.type === ControlAdornmentType.SetField;\n}\n\nexport function createLayoutRenderer(\n render: LayoutRendererRegistration[\"render\"],\n options?: Partial<LayoutRendererRegistration>,\n): LayoutRendererRegistration {\n return { type: \"layout\", render, ...options };\n}\n\nexport function createActionRenderer(\n actionId: string | string[] | undefined,\n render: ActionRendererRegistration[\"render\"],\n options?: Partial<ActionRendererRegistration>,\n): ActionRendererRegistration {\n return { type: \"action\", actionType: actionId, render, ...options };\n}\n\nexport function createArrayRenderer(\n render: ArrayRendererRegistration[\"render\"],\n options?: Partial<ArrayRendererRegistration>,\n): ArrayRendererRegistration {\n return { type: \"array\", render, ...options };\n}\n\nexport function createDataRenderer(\n render: DataRendererRegistration[\"render\"],\n options?: Partial<DataRendererRegistration>,\n): DataRendererRegistration {\n return { type: \"data\", render, ...options };\n}\n\nexport function createGroupRenderer(\n render: GroupRendererRegistration[\"render\"],\n options?: Partial<GroupRendererRegistration>,\n): GroupRendererRegistration {\n return { type: \"group\", render, ...options };\n}\n\nexport function createDisplayRenderer(\n render: DisplayRendererRegistration[\"render\"],\n options?: Partial<DisplayRendererRegistration>,\n): DisplayRendererRegistration {\n return { type: \"display\", render, ...options };\n}\n\nexport function createLabelRenderer(\n render: LabelRendererRegistration[\"render\"],\n options?: Partial<LabelRendererRegistration>,\n): LabelRendererRegistration {\n return { type: \"label\", render, ...options };\n}\n\nexport function createVisibilityRenderer(\n render: VisibilityRendererRegistration[\"render\"],\n options?: Partial<VisibilityRendererRegistration>,\n): VisibilityRendererRegistration {\n return { type: \"visibility\", render, ...options };\n}\n\nexport function createAdornmentRenderer(\n render: AdornmentRendererRegistration[\"render\"],\n options?: Partial<AdornmentRendererRegistration>,\n): AdornmentRendererRegistration {\n return { type: \"adornment\", ...options, render };\n}\n"],"names":["FieldType","ValidationMessageType","ControlDefinitionType","DynamicPropertyType","ExpressionType","AdornmentPlacement","ControlAdornmentType","DataRenderType","SyncTextType","GroupRenderType","DisplayDataType","ValidatorType","DateComparison","isDataControlDefinition","x","type","Data","isGroupControlsDefinition","Group","isDisplayControlsDefinition","Display","isActionControlsDefinition","Action","visitControlDefinition","visitor","defaultValue","action","data","display","group","isDisplayOnlyRenderer","options","DisplayOnly","isDataGroupRenderer","findField","fields","field","find","isScalarField","sf","isCompoundField","Compound","isDataControl","c","isCheckEntryClasses","Radio","CheckList","makeScalarField","n","_extends","defaultScalarField","displayName","String","defaultCompoundField","collection","children","mergeField","mergeInto","existing","map","onlyForTypes","mergeTypes","concat","f","s","extras","filter","includes","length","mergeFields","name","value","newFields","withType","isTypeField","addFieldOption","reduce","af","typeField","_typeField$options","some","resolveSchemas","schemaMap","out","Object","keys","forEach","resolveSchemaType","resolvedFields","schemaRef","push","applyDefaultValues","v","doneSet","defaultValueForFields","has","Set","add","applyValue","applyDefaultForField","defaultValueForField","parent","notElement","required","treeChildren","fromEntries","forceNotNull","undefined","isRequired","childValue","notNullable","elementValueForField","fieldHasTag","tag","_field$tags","Boolean","tags","fieldDisplayName","_field$displayName","hasOptions","o","_o$options$length","_o$options","defaultControlForField","title","_sf$tags","htmlEditor","renderOptions","HtmlEditor","Standard","findControlsForCompound","compound","definition","compoundField","_definition$children$","_definition$children","flatMap","d","findCompoundGroups","controls","cf","groups","findNonDataGroups","_x$children","_x$children2","existsInGroups","lookup","_c$children","childLookup","control","_control$children2","cloneChildren","_c$children2","addMissingControls","rootLookup","_ref","_f$tags","groupToAdd","startsWith","insertGroup","groupName","substring","newControl","useUpdatedRef","a","r","useRef","current","isControlReadonly","readonly","isControlDisabled","disabled","getDisplayOnlyOptions","jsonPathString","jsonPath","customIndex","i","_customIndex","getOverrideClass","className","rendererClass","controlClass","globalClass","oc","clsx","makeHookDepString","deps","asHookDep","toDepString","join","useDynamicHooks","hooks","hookEntries","entries","ref","state","useCallback","p","_ref3","hg","runHook","toString","applyLengthRestrictions","min","max","minValue","maxValue","getGroupRendererOptions","def","groupOptions","getGroupClassOverrides","go","childLayoutClass","childStyleClass","childLabelClass","layoutClass","styleClass","labelClass","isControlDisplayOnly","_getGroupRendererOpti","displayOnly","dataControl","validatorOptions","adornmentOptions","renderOptionsFor","checkListOptions","radioButtonOptions","lengthValidatorOptions","Length","jsonataValidatorOptions","Jsonata","dateValidatorOptions","Date","accordionOptions","Accordion","textfieldOptions","Textfield","displayOnlyOptions","jsonataOptions","emptyGroupDefinition","hideTitle","applyExtensionToSchema","extension","outMap","cro","Array","isArray","cr","_cr$fields","MissingField","Any","nodeForSchema","node","getSchema","getChildNode","fieldName","childField","getChildNodes","otherRef","createSchemaLookup","schemaId","rootSchemaNode","nodeForControl","makeSchemaDataNode","schema","elementIndex","dataNode","getChild","schemaNode","_objControl$fields","objControl","isNull","getChildElement","_control$elements","elements","fieldPathForDefinition","split","lookupDataNode","parentNode","fieldNamePath","schemaDataForFieldPath","schemaDataForFieldRef","fieldRef","_fieldRef$split","traverseSchemaPath","fieldPath","acc","next","childNode","schemaForFieldPath","traverseParents","get","until","outArray","reverse","getRootDataNode","getJsonPath","visitControlDataArray","context","cb","_step","_iterator","_createForOfIteratorHelperLoose","done","visitControlData","ctx","processData","result","fieldNode","cIndex","_iterator2","_control$elements2","elemChild","elemResult","cfResult","useEvalVisibilityHook","useEvalExpressionHook","overrideDataNode","makeDynamicPropertyHook","useEvalDynamicBoolHook","Visible","useComputed","matchesType","hideDisplayOnly","schemaInterface","useEvalReadonlyHook","Readonly","_ref2","useCalculatedControl","useEvalStyleHook","property","useEvalDynamicHook","useControl","useEvalAllowedOptionsHook","AllowedOptions","useEvalDisabledHook","Disabled","_ctx$dataNode","_dataControl$meta$nul","meta","useEvalDisplayHook","useEvalDefaultValueHook","DefaultValue","_ctx$dataNode2","_ref4","dcv","defaultEvalHooks","expr","coerce","bindings","formData","useJsonataExpression","expression","UUID","useUuidExpression","fvExpr","otherField","_otherField$control","useDataExpression","DataMatch","_otherField$control2","fv","useDataMatchExpression","NotEmpty","_otherField$control3","isEmptyValue","useNotEmptyExpression","defaultUseEvalExpressionHook","makeEvalExpressionHook","_definition$dynamic","dynamic","types","typeNode","_context$control","displayOptions","emptyText","uuidv4","v4","jExpr","path","pathString","fullExpr","compiledExpr","useMemo","jsonata","e","console","error","listenerRef","updateRef","useRefState","makeChangeTracker","l","addAfterChangesCallback","useEffect","apply","_ref$current","collect","updateSubscriptions","_temp","_coerce","Promise","resolve","evaluate","trackedValue","collectChanges","then","_compiledExpr$evaluat","_finallyRethrows","_wasThrown","_result","reject","useEvalActionHook","useExpr","ActionData","useEvalLabelText","Label","dynamicValue","makeDefault","_dynamicValue$runHook","useMakeValidationHook","useValidatorFor","_dd$validators","useDefaultValidator","dd","refData","depString","validators","_ctx$dataContext$data","_ctx$dataContext$data2","_dd$validators2","dataContext","hiddenControl","useValueChangeEffect","setError","useValidator","validationMessageText","index","validator","useLengthValidator","useJsonataValidator","useDateValidator","sdn","errorMsg","JSON","stringify","lv","len","controlLength","MinLength","setValue","from","MaxLength","dv","comparisonDate","fixedDate","parseToMillis","nowDate","UTC","getFullYear","getMonth","getDate","daysFromCurrent","selDate","notAfter","comparison","NotAfter","NotAfterDate","NotBeforeDate","LabelType","DefaultSchemaInterface","boolStrings","parseDateTime","parse","this","_proto","prototype","messageType","actual","expected","toDateString","getDataOptions","getNodeOptions","getOptions","getFilterOptions","array","DateTime","Time","searchText","_this$textValue$toLow","_this$textValue","textValue","toLowerCase","element","option","toLocaleDateString","toLocaleString","toLocaleTimeString","Bool","_control$elements$len","valueLength","compareValue","v1","v2","localeCompare","Int","Double","defaultSchemaInterface","useControlRendererComponent","renderer","parentDataNode","_options$useDataHook","_options$schemaInterf","_options$useEvalExpre","dataProps","useDataHook","defaultDataProps","useValidation","useValidationHook","dynamicHooks","defaultValueControl","visibleControl","readonlyControl","disabledControl","allowedOptions","labelText","actionData","customStyle","Style","layoutStyle","LayoutStyle","displayControl","Component","stopTracking","useComponentTracking","_options$formData","_dataNode","_definition$adornment","_definition$adornment2","_r$current","_dynamicHooks","visible","visibility","showing","useControlEffect","ex","parentControl","_definition$renderOpt","dontClearHidden","NullToggle","hidden","vc","_","dontClear","dontDefault","parentNull","ro","clearHidden","myOptionsControl","_visibility$fields","myOptions","childOptions","React","createElement","Fragment","adornments","renderAdornment","adornment","labelAndChildren","renderControlLayout","renderChild","k","child","overrideClasses","_objectWithoutPropertiesLoose","_excluded","dContext","NewControlRenderer","key","createDataProps","formOptions","style","customDisplay","actionDataControl","actionOnClick","useEvalExpression","useChildVisibility","childDef","dontOverride","_ref5","renderedControl","renderLayout","renderVisibility","ControlRenderer","_ref6","_effect","_useComponentTracking","Render","_ref7","_effect2","_ref8","_allowedOptions$value","_definition$renderOpt2","_ref8$schemaInterface","props","_excluded2","fieldOptions","_allowed","allowed","childDefinitions","id","uniqueId","_fieldOptions$find","y","_c$groupOptions2","_labelText$value","_c$groupOptions3","_c$groupOptions","designMode","renderData","processLayout","renderGroup","label","hide","_props$actionDataCont","_props$actionDataCont2","_ref9","_labelText$value2","_props$actionOnClick","renderAction","actionText","actionId","onClick","_c$displayData","displayData","displayProps","Custom","customId","renderDisplay","_labelText$value3","_c$children$length","rendererProps","controlTitle","Control","forId","errorControl","appendMarkup","markup","layout","wrapMarkup","wrap","layoutKeyForPlacement","pos","ControlEnd","ControlStart","LabelStart","LabelEnd","isOneOf","isAdornmentRegistration","isDataRegistration","isGroupRegistration","isLabelRegistration","isLayoutRegistration","isVisibilityRegistration","isActionRegistration","isDisplayRegistration","isArrayRegistration","handlers","slice","call","arguments","_handlers$i","_handlers","res","_ref12","disable","_arrayControl$element","_arrayControl$element2","aa","addAction","ra","removeAction","_applyLengthRestricti","arrayControl","removeAllowed","addAllowed","removeDisabled","addDisabled","extensions","cleanDataForSchema","removeIfDefault","typeValue","cleanableFields","_x$onlyForTypes$lengt","_x$onlyForTypes","_x$onlyForTypes2","childFields","cv","other","render","actionType","noun","_ref11","removeText","removeActionId","noAdd","addActionId","addText","addElement","noRemove","removeElement","formMap","getForm","formId","rootNode","customRenderers","defaultRenderers","_customRenderers$find","dataRegistrations","groupRegistrations","adornmentRegistrations","displayRegistrations","labelRenderers","arrayRenderers","actionRenderers","layoutRenderers","formRenderers","_actionRenderers$find","_dataRegistrations$fi","renderType","_x$collection","_field$collection","_x$options","schemaType","match","_groupRegistrations$f","_displayRegistrations","renderLabel","renderArray","_arrayRenderers$","_adornmentRegistratio","adornmentType","_layoutRenderers$find","renderLabelText","Text","labelStart","labelEnd","_labelRenderers$find","labelType","selected","RenderArrayElements","cd","optionSelected","childPath","base","fieldNames","foundFields","currentFields","nextField","getAllReferencedClasses","collectExtra","_c$children3","_collectExtra","childClasses","entryWrapperClass","selectedClass","notSelectedClass","tc","values","_definition$validator","lengthVal","html","Html","Flex","Grid","Icon","SelectChild","SetField","o1","o2","doMerge","hasOwnProperty","_props$processLayout","_ref10","wrapLayout","sort","b","priority","_fieldRef$split2","text","root","parentPath","rl","orig"],"mappings":"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"}