@react-typed-forms/schemas 14.1.2 → 14.2.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/controlDefinition.d.ts +11 -3
- package/lib/controlRender.d.ts +3 -2
- package/lib/index.cjs +1 -1
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/util.d.ts +6 -0
- package/package.json +1 -1
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/schemaField.ts","../src/controlDefinition.ts","../src/schemaValidator.ts","../src/entityExpression.ts","../src/schemaBuilder.ts","../src/util.ts","../src/controlBuilder.ts","../src/dynamicHooks.ts","../src/hooks.tsx","../src/validators.ts","../src/defaultSchemaInterface.ts","../src/controlRender.tsx","../src/createFormRenderer.tsx","../src/renderers.tsx"],"sourcesContent":["import { SchemaValidator } from \"./schemaValidator\";\nimport { Control, ControlSetup, newControl } from \"@react-typed-forms/core\";\nimport { EntityExpression } from \"./entityExpression\";\n\nexport type EqualityFunc = (a: any, b: any) => boolean;\n\n/**\n * Represents a schema field with various properties.\n */\nexport interface SchemaField {\n /** The type of the field. */\n type: string;\n /** The name of the field. */\n field: string;\n /** The display name of the field, optional. */\n displayName?: string | null;\n /** Tags associated with the field, optional. */\n tags?: string[] | null;\n /** Indicates if the field is a system field, optional. */\n system?: boolean | null;\n /** Indicates if the field is a collection, optional. */\n collection?: boolean | null;\n /** Specifies the types for which the field is applicable, optional. */\n onlyForTypes?: string[] | null;\n /** Indicates if the field is required, optional. */\n required?: boolean | null;\n /** Indicates if the field is not nullable, optional. */\n notNullable?: boolean | null;\n /** The default value of the field, optional. */\n defaultValue?: any;\n /** Indicates if the field is a type field, optional. */\n isTypeField?: boolean | null;\n /** Indicates if the field is searchable, optional. */\n searchable?: boolean | null;\n /** Options for the field, optional. */\n options?: FieldOption[] | null;\n /** Validators for the field, optional. */\n validators?: SchemaValidator[] | null;\n}\n\n/**\n * Represents a map of schema fields.\n * The key is a string representing the schema name.\n * The value is an array of SchemaField objects.\n */\nexport type SchemaMap = Record<string, SchemaField[]>;\n\n/**\n * Enum representing the various field types.\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\n/**\n * Represents a field that references an entity.\n */\nexport interface EntityRefField extends SchemaField {\n /** The type of the field, which is EntityRef. */\n type: FieldType.EntityRef;\n /** The type of the referenced entity. */\n entityRefType: string;\n /** The parent field of the entity reference. */\n parentField: string;\n}\n\n/**\n * Represents an option for a field.\n */\nexport interface FieldOption {\n /** The name of the option. */\n name: string;\n /** The value of the option. */\n value: any;\n /** The description of the option, optional. */\n description?: string | null;\n /** The group of the option, optional. */\n group?: string | null;\n /** Indicates if the option is disabled, optional. */\n disabled?: boolean | null;\n}\n\n/**\n * Represents a compound field that contains child fields.\n */\nexport interface CompoundField extends SchemaField {\n /** The type of the field, which is Compound. */\n type: FieldType.Compound;\n /** The child fields of the compound field. */\n children: SchemaField[];\n /** Indicates if the children are tree-structured, optional. */\n treeChildren?: boolean;\n /** The schema reference for the compound field, optional. */\n schemaRef?: string;\n}\n\n/**\n * Enum representing the various validation message types.\n */\nexport enum ValidationMessageType {\n NotEmpty = \"NotEmpty\",\n MinLength = \"MinLength\",\n MaxLength = \"MaxLength\",\n NotAfterDate = \"NotAfterDate\",\n NotBeforeDate = \"NotBeforeDate\",\n}\n\n/**\n * Interface for schema-related operations.\n */\nexport interface SchemaInterface {\n /**\n * Checks if the value of a field is empty.\n * @param field The schema field.\n * @param value The value to check.\n * @returns True if the value is empty, false otherwise.\n */\n isEmptyValue(field: SchemaField, value: any): boolean;\n\n /**\n * Gets the text representation of a field's value.\n * @param field The schema field.\n * @param value The value to convert.\n * @param element Indicates if the value is an element, optional.\n * @returns The text representation of the value.\n */\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean,\n ): string | undefined;\n\n /**\n * Gets the length of a control's value.\n * @param field The schema field.\n * @param control The control to check.\n * @returns The length of the control's value.\n */\n controlLength(field: SchemaField, control: Control<any>): number;\n\n /**\n * Gets the length of a field's value.\n * @param field The schema field.\n * @param value The value to check.\n * @returns The length of the value.\n */\n valueLength(field: SchemaField, value: any): number;\n\n /**\n * Gets the data options for a schema data node.\n * @param node The schema data node.\n * @returns The data options.\n */\n getDataOptions(node: SchemaDataNode): FieldOption[] | null | undefined;\n\n /**\n * Gets the node options for a schema node.\n * @param node The schema node.\n * @returns The node options.\n */\n getNodeOptions(node: SchemaNode): FieldOption[] | null | undefined;\n\n /**\n * Gets the options for a schema field.\n * @param field The schema field.\n * @returns The field options.\n */\n getOptions(field: SchemaField): FieldOption[] | undefined | null;\n\n /**\n * Gets the filter options for a schema data node and field.\n * @param array The schema data node.\n * @param field The schema node.\n * @returns The filter options.\n */\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null;\n\n /**\n * Parses a string value to milliseconds.\n * @param field The schema field.\n * @param v The string value to parse.\n * @returns The parsed value in milliseconds.\n */\n parseToMillis(field: SchemaField, v: string): number;\n\n /**\n * Gets the validation message text for a field.\n * @param field The schema field.\n * @param messageType The type of validation message.\n * @param actual The actual value.\n * @param expected The expected value.\n * @returns The validation message text.\n */\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string;\n\n /**\n * Compares two values of a field.\n * @param field The schema field.\n * @param v1 The first value.\n * @param v2 The second value.\n * @returns The comparison result.\n */\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number;\n\n /**\n * Gets the search text for a field's value.\n * @param field The schema field.\n * @param value The value to search.\n * @returns The search text.\n */\n searchText(field: SchemaField, value: any): string;\n\n makeEqualityFunc(field: SchemaNode, element?: boolean): EqualityFunc;\n\n makeControlSetup(field: SchemaNode, element?: boolean): ControlSetup<any>;\n}\n\nexport interface SchemaTreeLookup {\n getSchema(schemaId: string): SchemaNode | undefined;\n}\n\nexport interface SchemaNode extends SchemaTreeLookup {\n id: string;\n field: SchemaField;\n getChildNode(field: string): SchemaNode | undefined;\n getChildNodes(noRecurse?: boolean, withParent?: SchemaNode): SchemaNode[];\n parent?: SchemaNode;\n}\n\nexport interface SchemaDataNode {\n id: string;\n schema: SchemaNode;\n elementIndex?: number;\n control: Control<any>;\n parent?: SchemaDataNode;\n getChild(schemaNode: SchemaNode): SchemaDataNode;\n getChildElement(index: number): SchemaDataNode;\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\nfunction missingField(field: string): SchemaField {\n return { field: \"__missing\", type: FieldType.Any, displayName: field };\n}\n\nfunction nodeForSchema(\n field: SchemaField,\n lookup: SchemaTreeLookup,\n parent: SchemaNode | undefined,\n): SchemaNode {\n const node = {\n id: parent ? parent.id + \"/\" + field.field : field.field,\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 && !field.treeChildren) {\n const childField = field.children.find((x) => x.field === fieldName);\n return childField ? nodeForSchema(childField, lookup, node) : undefined;\n }\n return getChildNodes(false, node).find((x) => x.field.field === fieldName);\n }\n\n function getChildNodes(\n noRecurse?: boolean,\n withParent?: SchemaNode,\n ): SchemaNode[] {\n if (isCompoundField(field)) {\n if (field.treeChildren) {\n return noRecurse\n ? []\n : parent!.getChildNodes(false, withParent ?? node);\n }\n const otherRef = field.schemaRef && lookup.getSchema(field.schemaRef);\n if (otherRef) return otherRef.getChildNodes(false, withParent ?? node);\n return field.children.map((x) =>\n nodeForSchema(x, lookup, withParent ?? node),\n );\n }\n return [];\n }\n}\n\nexport function createSchemaLookup<A extends Record<string, SchemaField[]>>(\n schemaMap: A,\n): {\n getSchema(schemaId: keyof A): SchemaNode;\n} {\n const lookup = {\n getSchema,\n };\n return lookup;\n\n function getSchema(schemaId: keyof A): SchemaNode {\n const fields = schemaMap[schemaId];\n if (fields) {\n return rootSchemaNode(fields, lookup);\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 indexId = typeof elementIndex === \"number\" ? \"/\" + elementIndex : \"\";\n const dataNode = {\n id:\n (parent ? parent.id + \"/\" + schema.field.field : schema.field.field) +\n indexId,\n schema,\n control,\n parent,\n elementIndex,\n getChild,\n getChildElement,\n };\n return dataNode;\n\n function getChild(childNode: 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 childNode,\n objControl?.fields[childNode.field.field],\n dataNode,\n );\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 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 =\n nextField === \"..\" ? schema.parent : schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(missingField(nextField), 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 dataNode: SchemaDataNode,\n): SchemaDataNode {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let nextNode =\n nextField === \"..\" ? dataNode.parent : lookupField(nextField);\n nextNode ??= makeSchemaDataNode(\n nodeForSchema(missingField(nextField), dataNode.schema, dataNode.schema),\n newControl(undefined),\n );\n dataNode = nextNode;\n i++;\n }\n return dataNode;\n\n function lookupField(field: string): SchemaDataNode | undefined {\n const childNode = dataNode.schema.getChildNode(field);\n if (childNode) {\n return dataNode.getChild(childNode);\n }\n return undefined;\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 =\n nextField === \"..\" ? schema.parent : schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(missingField(nextField), schema, schema);\n }\n schema = childNode;\n i++;\n }\n return schema;\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 getSchemaNodePath(node: SchemaNode) {\n const paths: string[] = [];\n let curNode: SchemaNode | undefined = node;\n while (curNode) {\n paths.push(curNode.field.field);\n curNode = curNode.parent;\n }\n return paths.reverse();\n}\n\nexport function isCompoundNode(node: SchemaNode) {\n return isCompoundField(node.field);\n}\n\n/**\n * Returns the relative path from a parent node to a child node.\n * @param parent\n * @param child\n */\nexport function relativePath(parent: SchemaNode, child: SchemaNode): string {\n // return the path from child to parent\n if (parent.id === child.id) return \"\";\n\n const parentPath = getSchemaNodePath(parent);\n const childPath = getSchemaNodePath(child);\n\n let i = 0;\n while (\n i < parentPath.length &&\n i < childPath.length &&\n parentPath[i] === childPath[i]\n ) {\n i++;\n }\n\n const upLevels = parentPath.length - i;\n const downPath = childPath.slice(i).join(\"/\");\n\n return \"../\".repeat(upLevels) + downPath;\n}\n\nexport enum SchemaTags {\n NoControl = \"_NoControl\",\n HtmlEditor = \"_HtmlEditor\",\n ControlGroup = \"_ControlGroup:\",\n ControlRef = \"_ControlRef:\",\n IdField = \"_IdField:\",\n}\n\nexport function getTagParam(\n field: SchemaField,\n tag: string,\n): string | undefined {\n return field.tags?.find((x) => x.startsWith(tag))?.substring(tag.length);\n}\n\nexport function makeParamTag(tag: string, value: string): string {\n return `${tag}${value}`;\n}\n","import { SchemaValidator } from \"./schemaValidator\";\nimport {\n FieldOption,\n isCompoundField,\n schemaDataForFieldPath,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n SchemaNode,\n} from \"./schemaField\";\nimport { Control } from \"@react-typed-forms/core\";\nimport { EntityExpression } from \"./entityExpression\";\n\n/**\n * Interface representing the form context data.\n */\nexport interface FormContextData {\n option?: FieldOption;\n optionSelected?: boolean;\n}\n\n/**\n * Interface representing the control data context.\n */\nexport interface ControlDataContext {\n schemaInterface: SchemaInterface;\n dataNode: SchemaDataNode | undefined;\n parentNode: SchemaDataNode;\n formData: FormContextData;\n}\n\n/**\n * Represents any control definition.\n */\nexport type AnyControlDefinition =\n | DataControlDefinition\n | GroupedControlsDefinition\n | ActionControlDefinition\n | DisplayControlDefinition;\n\n/**\n * Represents a control definition.\n */\nexport interface ControlDefinition {\n type: string;\n id?: string | null;\n childRefId?: string | null;\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 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 Optional = \"Optional\",\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 OptionalAdornment extends ControlAdornment {\n type: ControlAdornmentType.Optional;\n placement?: AdornmentPlacement | null;\n allowNull?: boolean;\n editSelectable?: boolean;\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 Autocomplete = \"Autocomplete\",\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 AutocompleteRenderOptions\n extends RenderOptions,\n AutocompleteClasses {\n type: DataRenderType.Autocomplete;\n}\n\nexport interface AutocompleteClasses {\n listContainerClass?: string | null;\n listEntryClass?: string | null;\n chipContainerClass?: string | null;\n chipCloseButtonClass?: string | null;\n placeholder?: string | 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 Tabs = \"Tabs\",\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 TabsGroupRenderer extends GroupRenderOptions {\n type: GroupRenderType.Tabs;\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}\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 isTabsRenderer(\n options: GroupRenderOptions,\n): options is TabsGroupRenderer {\n return options.type === GroupRenderType.Tabs;\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 isAutocompleteRenderer(\n options: RenderOptions,\n): options is AutocompleteRenderOptions {\n return options.type === DataRenderType.Autocomplete;\n}\n\nexport function isAutoCompleteClasses(\n options?: RenderOptions | null,\n): options is AutocompleteClasses & RenderOptions {\n switch (options?.type) {\n case DataRenderType.Autocomplete:\n return true;\n default:\n return false;\n }\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 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 function isActionControl(\n c: ControlDefinition,\n): c is ActionControlDefinition {\n return c.type === ControlDefinitionType.Action;\n}\n\nexport function isDisplayControl(\n c: ControlDefinition,\n): c is DisplayControlDefinition {\n return c.type === ControlDefinitionType.Display;\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\nexport type ControlMap = { [k: string]: ControlDefinition };\n\nexport class FormNode {\n constructor(\n public id: string,\n public definition: ControlDefinition,\n public tree: FormTree,\n public parent?: FormNode,\n public overrideChildren?: FormNode[],\n ) {\n this.id = id;\n this.definition = definition;\n }\n\n getChildNodes(): FormNode[] {\n if (this.overrideChildren) return this.overrideChildren;\n let children = this.definition.children;\n if (this.definition.childRefId) {\n const ref = this.tree.controlMap[this.definition.childRefId];\n children = ref?.children;\n }\n return (\n children?.map(\n (x, i) => new FormNode(this.id + \"/\" + i, x, this.tree, this),\n ) ?? []\n );\n }\n\n withOverrideChildren(children: ControlDefinition[]) {\n return new FormNode(\n this.id,\n this.definition,\n this.tree,\n this.parent,\n children.map((x) => nodeForControl(x, this.tree)),\n );\n }\n}\n\nexport interface FormTreeLookup<A = string> {\n getForm(formId: A): FormTree | undefined;\n}\nexport interface FormTree extends FormTreeLookup {\n rootNode: FormNode;\n controlMap: ControlMap;\n}\n\nexport function nodeForControl(\n definition: ControlDefinition,\n tree: FormTree,\n index?: number,\n parent?: FormNode,\n): FormNode {\n return new FormNode(\n parent ? parent.id + \"/\" + index : \"\",\n definition,\n tree,\n parent,\n );\n}\n\nexport function legacyFormNode(definition: ControlDefinition) {\n return createFormLookup({ $legacy: [definition] })\n .getForm(\"$legacy\")!\n .rootNode.getChildNodes()[0];\n}\n\nfunction getControlIds(\n definition: ControlDefinition,\n): [string, ControlDefinition][] {\n const childEntries = definition.children?.flatMap(getControlIds) ?? [];\n return !definition.id\n ? childEntries\n : [[definition.id, definition], ...childEntries];\n}\n\nfunction makeFormTree(\n controls: ControlDefinition[],\n getForm: FormTreeLookup,\n): FormTree {\n const tree = {\n getForm,\n controlMap: Object.fromEntries(controls.flatMap(getControlIds)),\n } as unknown as FormTree;\n tree.rootNode = nodeForControl(\n {\n children: controls,\n type: ControlDefinitionType.Group,\n },\n tree,\n );\n return tree;\n}\n\nexport function createFormLookup<A extends Record<string, ControlDefinition[]>>(\n formMap: A,\n): FormTreeLookup<keyof A> {\n const lookup = {\n getForm,\n };\n const forms = Object.fromEntries(\n Object.entries(formMap).map(([k, v]) => [k, makeFormTree(v, lookup)]),\n );\n return lookup;\n\n function getForm(formId: keyof A): FormTree | undefined {\n return forms[formId as string];\n }\n}\n\nexport function fieldPathForDefinition(\n c: ControlDefinition,\n): string[] | undefined {\n const fieldName = isGroupControl(c)\n ? c.compoundField\n : isDataControl(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 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 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 = isDataControl(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","export enum ValidatorType {\n Jsonata = \"Jsonata\",\n Date = \"Date\",\n Length = \"Length\",\n}\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","export 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","import {\n CompoundField,\n FieldOption,\n FieldType,\n isCompoundField,\n SchemaField,\n SchemaMap,\n} from \"./schemaField\";\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 ControlActionHandler,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayOnlyRenderOptions,\n fieldPathForDefinition,\n GroupRenderOptions,\n isAutoCompleteClasses,\n isCheckEntryClasses,\n isDataControl,\n isDataGroupRenderer,\n isDisplayOnlyRenderer,\n isGroupControl,\n} from \"./controlDefinition\";\nimport { MutableRefObject, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport {\n CompoundField,\n FieldOption,\n findField,\n getTagParam,\n isCompoundField,\n isCompoundNode,\n isScalarField,\n relativePath,\n rootSchemaNode,\n SchemaDataNode,\n SchemaField,\n schemaForFieldPath,\n SchemaNode,\n SchemaTags,\n} from \"./schemaField\";\nimport {\n Control,\n ControlChange,\n ensureMetaValue,\n getElementIndex,\n newControl,\n} from \"@react-typed-forms/core\";\n\n/**\n * Interface representing the classes for a control.\n */\nexport interface ControlClasses {\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\n/**\n * Type representing a JSON path, which can be a string or a number.\n */\nexport type JsonPath = string | number;\n\n/**\n * Applies default values to the given record based on the provided schema fields.\n * @param v - The record to apply default values to.\n * @param fields - The schema fields to use for applying default values.\n * @param doneSet - A set to keep track of processed records.\n * @returns The record with default values applied.\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\n/**\n * Applies default values to a specific field based on the provided schema field.\n * @param v - The value to apply default values to.\n * @param field - The schema field to use for applying default values.\n * @param parent - The parent schema fields.\n * @param notElement - Flag indicating if the field is not an element.\n * @param doneSet - A set to keep track of processed records.\n * @returns The value with default values applied.\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\n/**\n * Returns the default values for the provided schema fields.\n * @param fields - The schema fields to get default values for.\n * @returns The default values for the schema fields.\n */\nexport function defaultValueForFields(fields: SchemaField[]): any {\n return Object.fromEntries(\n fields.map((x) => [x.field, defaultValueForField(x)]),\n );\n}\n\n/**\n * Returns the default value for a specific schema field.\n * @param sf - The schema field to get the default value for.\n * @param required - Flag indicating if the field is required.\n * @returns The default value for the schema field.\n */\nexport function defaultValueForField(\n sf: SchemaField,\n required?: boolean | null,\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 ? (sf.collection ? [] : {}) : undefined;\n }\n if (sf.collection && sf.notNullable) {\n return [];\n }\n return undefined;\n}\n\n/**\n * Returns the element value for a specific schema field.\n * @param sf - The schema field to get the element value for.\n * @returns The element value for the schema field.\n */\nexport function elementValueForField(sf: SchemaField): any {\n if (isCompoundField(sf)) {\n return defaultValueForFields(sf.children);\n }\n return sf.defaultValue;\n}\n\n/**\n * Finds a scalar field in the provided schema fields.\n * @param fields - The schema fields to search in.\n * @param field - The field name to search for.\n * @returns The found scalar field, or undefined if not found.\n */\nexport function findScalarField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return findField(fields, field);\n}\n\n/**\n * Finds a compound field in the provided schema fields.\n * @param fields - The schema fields to search in.\n * @param field - The field name to search for.\n * @returns The found compound field, or undefined if not found.\n */\nexport function findCompoundField(\n fields: SchemaField[],\n field: string,\n): CompoundField | undefined {\n return findField(fields, field) as CompoundField | undefined;\n}\n\n/**\n * Checks if a field has a specific tag.\n * @param field - The field to check.\n * @param tag - The tag to check for.\n * @returns True if the field has the tag, false otherwise.\n */\nexport function fieldHasTag(field: SchemaField, tag: string) {\n return Boolean(field.tags?.includes(tag));\n}\n\n/**\n * Returns the display name for a specific field.\n * @param field - The field to get the display name for.\n * @returns The display name for the field.\n */\nexport function fieldDisplayName(field: SchemaField) {\n return field.displayName ?? field.field;\n}\n\n/**\n * Checks if an object has options.\n * @param o - The object to check.\n * @returns True if the object has options, false otherwise.\n */\nexport function hasOptions(o: { options: FieldOption[] | undefined | null }) {\n return (o.options?.length ?? 0) > 0;\n}\n\n/**\n * Returns the default control definition for a specific schema field.\n * @param sf - The schema field to get the default control definition for.\n * @param noChildren - Flag indicating if children should not be included.\n * @returns The default control definition for the schema field.\n */\nexport function defaultControlForField(\n sf: SchemaField,\n noChildren?: boolean,\n): DataControlDefinition {\n if (isCompoundField(sf)) {\n const ref = getTagParam(sf, SchemaTags.ControlRef);\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n childRefId: ref,\n children:\n !noChildren && !ref\n ? sf.children\n .filter((x) => !fieldHasTag(x, SchemaTags.NoControl))\n .map((x) => defaultControlForField(x))\n : undefined,\n };\n } else if (isScalarField(sf)) {\n const htmlEditor = fieldHasTag(sf, SchemaTags.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}\n\n/**\n * Finds a referenced control in the provided control definition.\n * @param field - The field name to search for.\n * @param control - The control definition to search in.\n * @returns The found control definition, or undefined if not found.\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\n/**\n * Finds a referenced control in an array of control definitions.\n * @param field - The field name to search for.\n * @param controls - The array of control definitions to search in.\n * @returns The found control definition, or undefined if not found.\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: SchemaNode,\n definition: ControlDefinition,\n): ControlDefinition[] {\n if (isDataControl(definition) && compound.field.field === definition.field) {\n return [definition];\n }\n if (isGroupControl(definition)) {\n if (definition.compoundField === compound.field.field) return [definition];\n return (\n definition.children?.flatMap((d) =>\n findControlsForCompound(compound, d),\n ) ?? []\n );\n }\n return [];\n}\n\n/**\n * Finds non-data groups in the provided control definitions.\n * @param controls - The control definitions to search in.\n * @returns An array of found non-data groups.\n */\nexport function findNonDataGroups(\n controls: ControlDefinition[],\n): ControlDefinition[] {\n return controls.flatMap((control) =>\n isGroupControl(control) && !control.compoundField\n ? [control, ...findNonDataGroups(control.children ?? [])]\n : [],\n );\n}\n\n/**\n * Adds missing controls to the provided control definitions based on the schema fields.\n * @param fields - The schema fields to use for adding missing controls.\n * @param controls - The control definitions to add missing controls to.\n * @returns The control definitions with missing controls added.\n */\nexport function addMissingControls(\n fields: SchemaField[],\n controls: ControlDefinition[],\n) {\n return addMissingControlsForSchema(rootSchemaNode(fields), controls);\n}\n\ninterface ControlAndSchema {\n control: ControlDefinition;\n children: ControlAndSchema[];\n schema?: SchemaNode;\n parent?: ControlAndSchema;\n}\n/**\n * Adds missing controls to the provided control definitions based on the schema fields.\n * @param schema - The root schema node to use for adding missing controls.\n * @param controls - The control definitions to add missing controls to.\n * @returns The control definitions with missing controls added.\n */\nexport function addMissingControlsForSchema(\n schema: SchemaNode,\n controls: ControlDefinition[],\n) {\n const controlMap: { [k: string]: ControlAndSchema } = {};\n const schemaControlMap: { [k: string]: ControlAndSchema[] } = {};\n const rootControls = controls.map((c) => toControlAndSchema(c, schema));\n const rootSchema = { schema, children: rootControls } as ControlAndSchema;\n addSchemaMapEntry(\"\", rootSchema);\n rootControls.forEach(addReferences);\n const fields = schema.getChildNodes();\n fields.forEach(addMissing);\n return rootControls.map(toDefinition);\n\n function toDefinition(c: ControlAndSchema): ControlDefinition {\n const children = c.children.length ? c.children.map(toDefinition) : null;\n return { ...c.control, children };\n }\n\n function addMissing(schemaNode: SchemaNode) {\n if (fieldHasTag(schemaNode.field, SchemaTags.NoControl)) return;\n const existingControls = schemaControlMap[schemaNode.id];\n if (!existingControls) {\n const eligibleParents = getEligibleParents(schemaNode);\n const desiredGroup = getTagParam(\n schemaNode.field,\n SchemaTags.ControlGroup,\n );\n let parentGroup = desiredGroup ? controlMap[desiredGroup] : undefined;\n if (!parentGroup && desiredGroup)\n console.warn(\"No group '\" + desiredGroup + \"' for \" + schemaNode.id);\n if (parentGroup && eligibleParents.indexOf(parentGroup.schema!.id) < 0) {\n console.warn(\n `Target group '${desiredGroup}' is not an eligible parent for '${schemaNode.id}'`,\n );\n parentGroup = undefined;\n }\n if (!parentGroup && eligibleParents.length) {\n parentGroup = schemaControlMap[eligibleParents[0]]?.[0];\n }\n if (parentGroup) {\n const newControl = defaultControlForField(schemaNode.field, true);\n newControl.field = relativePath(parentGroup.schema!, schemaNode);\n parentGroup.children.push(\n toControlAndSchema(newControl, parentGroup.schema!, parentGroup),\n );\n } else\n console.warn(\"Could not find a parent group for: \" + schemaNode.id);\n }\n schemaNode.getChildNodes(true).forEach(addMissing);\n }\n\n function getEligibleParents(schemaNode: SchemaNode) {\n const eligibleParents: string[] = [];\n let parent = schemaNode.parent;\n while (parent) {\n eligibleParents.push(parent.id);\n if (parent.field.collection) break;\n if (!parent.parent) parent.getChildNodes(true).forEach(addCompound);\n parent = parent.parent;\n }\n return eligibleParents;\n\n function addCompound(node: SchemaNode) {\n if (isCompoundNode(node) && !node.field.collection) {\n eligibleParents.push(node.id);\n node.getChildNodes(true).forEach(addCompound);\n }\n }\n }\n\n function addReferences(c: ControlAndSchema) {\n c.children.forEach(addReferences);\n if (c.control.childRefId) {\n const ref = controlMap[c.control.childRefId];\n if (ref) {\n ref.children.forEach((x) =>\n toControlAndSchema(x.control, c.schema!, c, true),\n );\n return;\n }\n console.warn(\"Missing reference\", c.control.childRefId);\n }\n }\n\n function addSchemaMapEntry(schemaId: string, entry: ControlAndSchema) {\n if (!schemaControlMap[schemaId]) schemaControlMap[schemaId] = [];\n schemaControlMap[schemaId].push(entry);\n }\n function toControlAndSchema(\n c: ControlDefinition,\n parentSchema: SchemaNode,\n parentNode?: ControlAndSchema,\n dontRegister?: boolean,\n ): ControlAndSchema {\n const controlPath = fieldPathForDefinition(c);\n let dataSchema = controlPath\n ? schemaForFieldPath(controlPath, parentSchema)\n : undefined;\n if (isGroupControl(c) && dataSchema == null) dataSchema = parentSchema;\n const entry: ControlAndSchema = {\n schema: dataSchema,\n control: c,\n children: [],\n parent: parentNode,\n };\n entry.children =\n c.children?.map((x) =>\n toControlAndSchema(x, dataSchema ?? parentSchema, entry, dontRegister),\n ) ?? [];\n if (!dontRegister && c.id) controlMap[c.id] = entry;\n if (dataSchema) {\n addSchemaMapEntry(dataSchema.id, entry);\n }\n return entry;\n }\n}\n\n/**\n * Custom hook to use an updated reference.\n * @param a - The value to create a reference for.\n * @returns A mutable reference object.\n */\nexport function useUpdatedRef<A>(a: A): MutableRefObject<A> {\n const r = useRef(a);\n r.current = a;\n return r;\n}\n\n/**\n * Checks if a control definition is readonly.\n * @param c - The control definition to check.\n * @returns True if the control definition is readonly, false otherwise.\n */\nexport function isControlReadonly(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.readonly;\n}\n\n/**\n * Checks if a control definition is disabled.\n * @param c - The control definition to check.\n * @returns True if the control definition is disabled, false otherwise.\n */\nexport function isControlDisabled(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.disabled;\n}\n\n/**\n * Returns the display-only render options for a control definition.\n * @param d - The control definition to get the display-only render options for.\n * @returns The display-only render options, or undefined if not applicable.\n */\nexport function getDisplayOnlyOptions(\n d: ControlDefinition,\n): DisplayOnlyRenderOptions | undefined {\n return isDataControl(d) &&\n d.renderOptions &&\n isDisplayOnlyRenderer(d.renderOptions)\n ? d.renderOptions\n : undefined;\n}\n\n/**\n * Cleans data for a schema based on the provided schema fields.\n * @param v - The data to clean.\n * @param fields - The schema fields to use for cleaning the data.\n * @param removeIfDefault - Flag indicating if default values should be removed.\n * @returns The cleaned data.\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\n/**\n * Returns all referenced classes for a control definition.\n * @param c - The control definition to get the referenced classes for.\n * @param collectExtra - Optional function to collect extra classes.\n * @returns An array of referenced classes.\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\n const { entryWrapperClass, selectedClass, notSelectedClass } =\n isDataControl(c) && isCheckEntryClasses(c.renderOptions)\n ? c.renderOptions\n : {};\n\n const {\n listContainerClass,\n listEntryClass,\n chipContainerClass,\n chipCloseButtonClass,\n } =\n isDataControl(c) && isAutoCompleteClasses(c.renderOptions)\n ? c.renderOptions\n : {};\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 listContainerClass,\n listEntryClass,\n chipContainerClass,\n chipCloseButtonClass,\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\n/**\n * Converts a JSON path array to a string.\n * @param jsonPath - The JSON path array to convert.\n * @param customIndex - Optional function to customize the index format.\n * @returns The JSON path string.\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\n/**\n * Finds a child control definition within a parent control definition.\n * @param parent - The parent control definition.\n * @param childPath - The path to the child control definition, either as a single index or an array of indices.\n * @returns The found child control definition.\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\n/**\n * Returns the override class name if the class name starts with \"@ \".\n * Otherwise, returns the original class name.\n * @param className - The class name to check and potentially modify.\n * @returns The override class name or the original class name.\n */\nexport function getOverrideClass(className?: string | null) {\n if (className && className.startsWith(\"@ \")) {\n return className.substring(2);\n }\n return className;\n}\n\n/**\n * Returns the appropriate class name for a renderer.\n * If the global class name starts with \"@ \", it overrides the control class name.\n * Otherwise, it combines the control class name and the global class name.\n *\n * @param controlClass - The class name for the control.\n * @param globalClass - The global class name.\n * @returns The appropriate class name for the renderer.\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\n/**\n * Applies length restrictions to a value.\n * @template Min - The type of the minimum value.\n * @template Max - The type of the maximum value.\n * @param {number} length - The length to check.\n * @param {number | null | undefined} min - The minimum length.\n * @param {number | null | undefined} max - The maximum length.\n * @param {Min} minValue - The value to return if the length is greater than the minimum.\n * @param {Max} maxValue - The value to return if the length is less than the maximum.\n * @returns {[Min | undefined, Max | undefined]} - An array containing the minimum and maximum values if the length restrictions are met.\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\n/**\n * Finds the path to a field in the schema fields.\n * @param {SchemaField[]} fields - The schema fields to search in.\n * @param {string | undefined} fieldPath - The path to the field.\n * @returns {SchemaField[] | undefined} - An array of schema fields representing the path, or undefined if not found.\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\n/**\n * Merges two objects.\n * @template A - The type of the objects to merge.\n * @param {A} o1 - The first object.\n * @param {A} o2 - The second object.\n * @param {(k: keyof NonNullable<A>, v1: unknown, v2: unknown) => unknown} [doMerge] - Optional function to merge values.\n * @returns {A} - The merged object.\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\n/**\n * Coerces a value to a string.\n * @param {unknown} v - The value to coerce.\n * @returns {string} - The coerced string.\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\n/**\n * Returns the group renderer options for a control definition.\n * @param {ControlDefinition} def - The control definition to get the group renderer options for.\n * @returns {GroupRenderOptions | undefined} - The group renderer options, or undefined if not applicable.\n */\nexport function getGroupRendererOptions(\n def: ControlDefinition,\n): GroupRenderOptions | undefined {\n return isGroupControl(def)\n ? def.groupOptions\n : isDataControl(def) && isDataGroupRenderer(def.renderOptions)\n ? def.renderOptions.groupOptions\n : undefined;\n}\n\n/**\n * Returns the group class overrides for a control definition.\n * @param {ControlDefinition} def - The control definition to get the group class overrides for.\n * @returns {ControlClasses} - The group class overrides.\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\n/**\n * Checks if a control definition is display-only.\n * @param {ControlDefinition} def - The control definition to check.\n * @returns {boolean} - True if the control definition is display-only, false otherwise.\n */\nexport function isControlDisplayOnly(def: ControlDefinition): boolean {\n return Boolean(getGroupRendererOptions(def)?.displayOnly);\n}\n\n/**\n * Combines multiple action handlers into a single handler.\n * @param {...(ControlActionHandler | undefined)[]} handlers - The action handlers to combine.\n * @returns {ControlActionHandler} - The combined action handler.\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\nexport function getDiffObject(dataNode: SchemaDataNode, force?: boolean): any {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (!c.dirty && !force) return undefined;\n if (c.isNull) return null;\n if (sf.collection && dataNode.elementIndex == null) {\n const idField = getTagParam(sf, SchemaTags.IdField);\n return c.as<any[]>().elements.map((x, i) => {\n const change = getDiffObject(\n dataNode.getChildElement(i),\n idField !== undefined,\n );\n return idField != null\n ? change\n : { old: getElementIndex(x)?.initialIndex, edit: change };\n });\n } else if (isCompoundField(sf)) {\n const children = dataNode.schema.getChildNodes();\n const idField = getTagParam(sf, SchemaTags.IdField);\n return Object.fromEntries(\n children.flatMap((c) => {\n const diff = getDiffObject(\n dataNode.getChild(c),\n idField === c.field.field,\n );\n return diff !== undefined ? [[c.field.field, diff]] : [];\n }),\n );\n }\n return c.value;\n}\n\nexport function getNullToggler(c: Control<any>): Control<boolean> {\n return ensureMetaValue(c, \"$nullToggler\", () => {\n const lastDefined = getLastDefinedValue(c);\n const isEditing = getIsEditing(c);\n const currentNotNull = c.current.value != null;\n c.disabled = !currentNotNull;\n const notNull = newControl(currentNotNull);\n if (!currentNotNull) c.value = null;\n disableIfNotEditing();\n isEditing.subscribe(disableIfNotEditing, ControlChange.Value);\n notNull.subscribe(() => {\n const currentNotNull = notNull.current.value;\n c.value = currentNotNull ? lastDefined.current.value : null;\n c.disabled = !currentNotNull;\n }, ControlChange.Value);\n return notNull;\n function disableIfNotEditing() {\n notNull.disabled = isEditing.current.value === false;\n }\n });\n}\n\nexport function getLastDefinedValue<V>(control: Control<V>): Control<V> {\n return ensureMetaValue(control, \"$lastDefined\", () => {\n const lastDefined = newControl(control.current.value);\n control.subscribe(() => {\n const nv = control.current.value;\n if (nv != null) lastDefined.value = nv;\n }, ControlChange.Value);\n return lastDefined;\n });\n}\n\nexport function getIsEditing(\n control: Control<any>,\n): Control<boolean | undefined> {\n const lastDefined = getLastDefinedValue(control);\n return ensureMetaValue(control, \"$willEdit\", () => {\n const c = newControl(undefined);\n c.subscribe(() => {\n const currentEdit = c.current.value;\n if (currentEdit !== undefined) {\n control.value = currentEdit\n ? lastDefined.current.value\n : control.initialValue;\n }\n }, ControlChange.Value);\n return c;\n });\n}\n\nexport function getAllValues(control: Control<any>): Control<unknown[]> {\n return ensureMetaValue(control, \"$allValues\", () =>\n newControl([control.value]),\n );\n}\n\nexport function applyValues(dataNode: SchemaDataNode, value: unknown): void {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (c.isEqual(c.initialValue, value)) return;\n if (sf.collection) {\n return;\n } else if (isCompoundField(sf)) {\n if (value == null) return;\n dataNode.schema.getChildNodes().forEach((c) => {\n applyValues(\n dataNode.getChild(c),\n (value as Record<string, unknown>)[c.field.field],\n );\n });\n } else {\n const allValues = getAllValues(c);\n allValues.setValue((changes) =>\n changes.every((x) => !c.isEqual(x, value))\n ? [...changes, value]\n : changes,\n );\n }\n}\n\nexport function collectDifferences(\n dataNode: SchemaDataNode,\n values: unknown[],\n): () => { editable: number; editing: number } {\n values.forEach((v, i) => {\n if (i == 0) dataNode.control.setInitialValue(v);\n else applyValues(dataNode, v);\n });\n const allEdits: Control<boolean | undefined>[] = [];\n resetMultiValues(dataNode);\n return () => {\n let editable = 0;\n let editing = 0;\n allEdits.forEach((x) => {\n const b = x.value;\n if (b === undefined) return;\n editable++;\n if (b) editing++;\n });\n return { editing, editable };\n };\n\n function resetMultiValues(dataNode: SchemaDataNode): void {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (sf.collection) {\n return;\n } else if (isCompoundField(sf)) {\n if (c.value == null) return;\n dataNode.schema.getChildNodes().forEach((c) => {\n resetMultiValues(dataNode.getChild(c));\n });\n } else {\n allEdits.push(getIsEditing(c));\n const allValues = getAllValues(c);\n if (allValues.value.length > 1) {\n c.setInitialValue(undefined);\n getLastDefinedValue(c).value = null;\n }\n }\n }\n}\n","import {\n AccordionAdornment,\n ActionControlDefinition,\n AutocompleteRenderOptions,\n CheckListRenderOptions,\n ControlAdornmentType,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayControlDefinition,\n DisplayDataType,\n DisplayOnlyRenderOptions,\n DynamicProperty,\n DynamicPropertyType,\n GroupedControlsDefinition,\n GroupRenderType,\n HtmlDisplay,\n JsonataRenderOptions,\n RadioButtonRenderOptions,\n RenderOptions,\n TextDisplay,\n TextfieldRenderOptions,\n} from \"./controlDefinition\";\nimport { ActionRendererProps } from \"./controlRender\";\nimport { useMemo } from \"react\";\nimport { addMissingControls } from \"./util\";\nimport { mergeFields, resolveSchemas } from \"./schemaBuilder\";\nimport {\n DateValidator,\n JsonataValidator,\n LengthValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport { SchemaField, SchemaMap, SchemaNode } from \"./schemaField\";\nimport {\n DataExpression,\n DataMatchExpression,\n EntityExpression,\n ExpressionType,\n JsonataExpression,\n} from \"./entityExpression\";\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 autocompleteOptions = renderOptionsFor<AutocompleteRenderOptions>(\n DataRenderType.Autocomplete,\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 applies?: (sf: SchemaNode) => boolean;\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 { useCallback, useRef } from \"react\";\n\n/**\n * Type representing a hook dependency, which can be a string, number, undefined, or null.\n */\nexport type HookDep = string | number | undefined | null;\n\n/**\n * Interface representing a dynamic hook generator.\n * @template A - The type of the hook result.\n * @template P - The type of the hook context.\n */\nexport interface DynamicHookGenerator<A, P> {\n deps: HookDep;\n state: any;\n\n runHook(ctx: P, state: any): A;\n}\n\n/**\n * Creates a dynamic hook generator.\n * @template A - The type of the hook result.\n * @template P - The type of the hook context.\n * @template S - The type of the hook state.\n * @param runHook - The function to run the hook.\n * @param state - The initial state of the hook.\n * @param deps - The dependencies of the hook.\n * @returns The dynamic hook generator.\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\n/**\n * Type representing the value of a dynamic hook.\n * @template A - The type of the dynamic hook generator.\n */\nexport type DynamicHookValue<A> =\n A extends DynamicHookGenerator<infer V, any> ? V : never;\n\n/**\n * Converts an array of dependencies to a dependency string.\n * @template A - The type of the dependencies.\n * @param deps - The array of dependencies.\n * @param asHookDep - The function to convert a dependency to a hook dependency.\n * @returns The dependency string.\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}\n\n/**\n * Custom hook to use dynamic hooks.\n * @template P - The type of the hook context.\n * @template Hooks - The type of the hooks.\n * @param hooks - The hooks to use.\n * @returns A function that takes the hook context and returns the hook values.\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\n/**\n * Converts a value to a dependency string.\n * @param x - The value to convert.\n * @returns The dependency string.\n */\nexport function toDepString(x: any): string {\n if (x === undefined) return \"_\";\n if (x === null) return \"~\";\n return x.toString();\n}\n","import {\n ControlDefinition,\n DynamicPropertyType,\n ControlDataContext,\n getRootDataNode,\n getJsonPath,\n isDataControl,\n} from \"./controlDefinition\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n addAfterChangesCallback,\n collectChanges,\n Control,\n SubscriptionTracker,\n trackedValue,\n useCalculatedControl,\n useComputed,\n useControl,\n useRefState,\n} from \"@react-typed-forms/core\";\n\nimport {\n defaultValueForField,\n elementValueForField,\n getDisplayOnlyOptions,\n isControlDisabled,\n isControlReadonly,\n JsonPath,\n jsonPathString,\n} from \"./util\";\nimport jsonata from \"jsonata\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { DynamicHookGenerator, HookDep, toDepString } from \"./dynamicHooks\";\nimport {\n schemaDataForFieldRef,\n SchemaDataNode,\n SchemaInterface,\n} from \"./schemaField\";\nimport {\n DataExpression,\n DataMatchExpression,\n EntityExpression,\n ExpressionType,\n JsonataExpression,\n NotEmptyExpression,\n} from \"./entityExpression\";\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<string | undefined>(\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] = isDataControl(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)\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<V>(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n coerce: (v: any) => any = (x) => x,\n): DynamicHookGenerator<Control<V> | undefined, ControlDataContext> {\n const expression = definition.dynamic?.find((x) => x.type === type);\n return useEvalExpressionHook(\n expression?.expr,\n coerce,\n ) as DynamicHookGenerator<Control<V> | undefined, ControlDataContext>;\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 () =>\n new SubscriptionTracker(() => {\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 tracker = ref.current;\n try {\n updateRef.current++;\n control.value = coerce(\n await compiledExpr.evaluate(\n trackedValue(data, tracker.collectUsage),\n collectChanges(tracker.collectUsage, () => bindings?.value),\n ),\n );\n } finally {\n if (!--updateRef.current) tracker.update();\n }\n }\n }, [compiledExpr]);\n useEffect(() => {\n return () => {\n listenerRef.current = undefined;\n ref.current.cleanup();\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])?.as() ?? makeDefault(ctx, s[1]);\n },\n state: [dynamicValue.state, state],\n };\n}\n","import {\n ControlDefinition,\n DataControlDefinition,\n isDataControl,\n ControlDataContext,\n getRootDataNode,\n getJsonPath,\n} from \"./controlDefinition\";\nimport {\n Control,\n useValidator,\n useValueChangeEffect,\n} from \"@react-typed-forms/core\";\nimport { useCallback } from \"react\";\nimport { useUpdatedRef } from \"./util\";\nimport { useJsonataExpression } from \"./hooks\";\nimport { makeHookDepString } from \"./dynamicHooks\";\nimport {\n DateComparison,\n DateValidator,\n JsonataValidator,\n LengthValidator,\n SchemaValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport { FieldType, SchemaField, ValidationMessageType } from \"./schemaField\";\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 = isDataControl(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 );\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 { Control, ControlSetup } from \"@react-typed-forms/core\";\nimport {\n EqualityFunc,\n FieldOption,\n FieldType,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n SchemaNode,\n ValidationMessageType,\n} from \"./schemaField\";\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\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\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\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 compoundFieldSetup(f: SchemaNode): [string, ControlSetup<any>][] {\n return f.getChildNodes().map((x) => {\n const { field } = x.field;\n return [field, this.makeControlSetup(x)];\n });\n }\n\n compoundFieldEquality(f: SchemaNode): [string, EqualityFunc][] {\n return f.getChildNodes().map((x) => {\n const { field } = x.field;\n return [field, (a, b) => this.makeEqualityFunc(x)(a[field], b[field])];\n });\n }\n\n makeEqualityFunc(field: SchemaNode, element?: boolean): EqualityFunc {\n if (field.field.collection && !element) {\n const elemEqual = this.makeEqualityFunc(field, true);\n return (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!elemEqual(a[i], b[i])) return false;\n }\n return true;\n };\n }\n switch (field.field.type) {\n case FieldType.Compound:\n const allChecks = this.compoundFieldEquality(field);\n return (a, b) =>\n a === b ||\n (a != null && b != null && allChecks.every((x) => x[1](a, b)));\n default:\n return (a, b) => a === b;\n }\n }\n makeControlSetup(field: SchemaNode, element?: boolean): ControlSetup<any> {\n let setup: ControlSetup<any> = {\n equals: this.makeEqualityFunc(field, element),\n };\n if (field.field.collection && !element) {\n setup.elems = this.makeControlSetup(field, true);\n return setup;\n }\n switch (field.field.type) {\n case FieldType.Compound:\n setup.fields = Object.fromEntries(this.compoundFieldSetup(field));\n }\n return setup;\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 useComponentTracking,\n useComputed,\n useControl,\n useControlEffect,\n} from \"@react-typed-forms/core\";\nimport {\n AdornmentPlacement,\n ArrayActionOptions,\n ControlActionHandler,\n ControlAdornment,\n ControlAdornmentType,\n ControlDataContext,\n ControlDefinition,\n CustomDisplay,\n DataControlDefinition,\n DataRenderType,\n DisplayData,\n DisplayDataType,\n DynamicPropertyType,\n FormContextData,\n FormNode,\n GroupRenderOptions,\n isActionControl,\n isDataControl,\n isDisplayControl,\n isGroupControl,\n legacyFormNode,\n lookupDataNode,\n RenderOptions,\n} from \"./controlDefinition\";\nimport {\n applyLengthRestrictions,\n ControlClasses,\n elementValueForField,\n fieldDisplayName,\n getGroupClassOverrides,\n isControlDisplayOnly,\n JsonPath,\n rendererClass,\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 { useDynamicHooks } from \"./dynamicHooks\";\nimport { defaultSchemaInterface } from \"./defaultSchemaInterface\";\nimport {\n LengthValidator,\n SchemaValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport {\n createSchemaLookup,\n FieldOption,\n makeSchemaDataNode,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n} from \"./schemaField\";\n\n/**\n * Interface for rendering different types of form controls.\n */\nexport interface FormRenderer {\n /**\n * Renders data control.\n * @param props - Properties for data renderer.\n * @returns A function that takes layout properties and returns layout properties.\n */\n renderData: (\n props: DataRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n\n /**\n * Renders group control.\n * @param props - Properties for group renderer.\n * @returns A function that takes layout properties and returns layout properties.\n */\n renderGroup: (\n props: GroupRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n\n /**\n * Renders display control.\n * @param props - Properties for display renderer.\n * @returns A React node.\n */\n renderDisplay: (props: DisplayRendererProps) => ReactNode;\n\n /**\n * Renders action control.\n * @param props - Properties for action renderer.\n * @returns A React node.\n */\n renderAction: (props: ActionRendererProps) => ReactNode;\n\n /**\n * Renders array control.\n * @param props - Properties for array renderer.\n * @returns A React node.\n */\n renderArray: (props: ArrayRendererProps) => ReactNode;\n\n /**\n * Renders adornment.\n * @param props - Properties for adornment renderer.\n * @returns An adornment renderer.\n */\n renderAdornment: (props: AdornmentProps) => AdornmentRenderer;\n\n /**\n * Renders label.\n * @param props - Properties for label renderer.\n * @param labelStart - React node to render at the start of the label.\n * @param labelEnd - React node to render at the end of the label.\n * @returns A React node.\n */\n renderLabel: (\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) => ReactNode;\n\n /**\n * Renders layout.\n * @param props - Properties for control layout.\n * @returns A rendered control.\n */\n renderLayout: (props: ControlLayoutProps) => RenderedControl;\n\n /**\n * Renders visibility control.\n * @param props - Properties for visibility renderer.\n * @returns A React node.\n */\n renderVisibility: (props: VisibilityRendererProps) => ReactNode;\n\n /**\n * Renders label text.\n * @param props - React node for label text.\n * @returns A React node.\n */\n renderLabelText: (props: ReactNode) => ReactNode;\n}\n\nexport interface AdornmentProps {\n adornment: ControlAdornment;\n dataContext: ControlDataContext;\n useExpr?: UseEvalExpressionHook;\n designMode?: boolean;\n formOptions: FormContextOptions;\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\n/**\n * Enum representing the types of labels that can be rendered.\n */\nexport enum LabelType {\n /**\n * Label for a control.\n */\n Control,\n\n /**\n * Label for a group.\n */\n Group,\n\n /**\n * Label for text.\n */\n Text,\n}\n\n/**\n * Properties for label renderers.\n */\nexport interface LabelRendererProps {\n /**\n * The type of the label.\n */\n type: LabelType;\n\n /**\n * Whether to hide the label.\n */\n hide?: boolean | null;\n\n /**\n * The content of the label.\n */\n label: ReactNode;\n\n /**\n * Whether to show the label as being required.\n * E.g. show an asterisk next to the label.\n */\n required?: boolean | null;\n\n /**\n * The ID of the element the label is for.\n */\n forId?: string;\n\n /**\n * The CSS class name for the label.\n */\n className?: string;\n}\n\n/**\n * Properties for display renderers.\n */\nexport interface DisplayRendererProps {\n /**\n * The data to be displayed.\n */\n data: DisplayData;\n\n /**\n * A control with dynamic value for display.\n */\n display?: Control<string | undefined>;\n\n /**\n * The context for the control data.\n */\n dataContext: ControlDataContext;\n\n /**\n * The CSS class name for the display renderer.\n */\n className?: string;\n\n /**\n * The CSS styles for the display renderer.\n */\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 formNode: FormNode;\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 formNode: FormNode;\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 adjustLayout?: (\n context: ControlDataContext,\n layout: ControlLayoutProps,\n ) => ControlLayoutProps;\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 controlOrFormNode: ControlDefinition | FormNode,\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n parentDataNode: SchemaDataNode,\n): FC<{}> {\n const [definition, formNode] =\n controlOrFormNode instanceof FormNode\n ? [controlOrFormNode.definition, controlOrFormNode]\n : [controlOrFormNode, legacyFormNode(controlOrFormNode)];\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 // console.log(parentDataNode.id, dataNode?.control, formNode.id);\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 formNode,\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 formNode,\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 isDataControl(definition) && definition.dontClearHidden,\n definition.adornments?.some(\n (x) => x.type === ControlAdornmentType.Optional,\n ) ||\n (isDataControl(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 = useComputed<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 formOptions: myOptions,\n }),\n ) ?? [];\n const labelAndChildren = renderControlLayout({\n formNode,\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 layoutProps: ControlLayoutProps = {\n ...labelAndChildren,\n adornments,\n className: rendererClass(options.layoutClass, c.layoutClass),\n style: layoutStyle.value,\n };\n const renderedControl = renderer.renderLayout(\n options.adjustLayout?.(dataContext, layoutProps) ?? layoutProps,\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 | FormNode;\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.getDataOptions(dataNode);\n const _allowed = allowedOptions?.value ?? [];\n const allowed = Array.isArray(_allowed) ? _allowed : [_allowed];\n return {\n dataNode,\n definition,\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: FormNode,\n options?: ChildRendererOptions,\n) => ReactNode;\n\nexport interface RenderControlProps {\n definition: ControlDefinition;\n formNode: FormNode;\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 formNode,\n } = props;\n\n if (isDataControl(c)) {\n return renderData(c);\n }\n if (isGroupControl(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 formNode,\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 (isActionControl(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 (isDisplayControl(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): ControlLayoutProps {\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\"\n | \"style\"\n | \"className\"\n | \"wrapLayout\"\n | \"readonly\"\n | \"disabled\"\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.formNode.getChildNodes()}>\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 \"./controlDefinition\";\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 { 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, OptionalAdornment,\n SetFieldAdornment,\n} from \"./controlDefinition\";\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 isOptionalAdornment(\n a: ControlAdornment,\n): a is OptionalAdornment {\n return a.type === ControlAdornmentType.Optional;\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","SchemaTags","ControlDefinitionType","DynamicPropertyType","AdornmentPlacement","ControlAdornmentType","DataRenderType","SyncTextType","GroupRenderType","DisplayDataType","findField","fields","field","find","x","isScalarField","sf","isCompoundField","type","Compound","missingField","Any","displayName","nodeForSchema","lookup","parent","node","id","getSchema","getChildNode","fieldName","schemaRef","treeChildren","childField","children","undefined","getChildNodes","noRecurse","withParent","otherRef","map","createSchemaLookup","schemaMap","schemaId","rootSchemaNode","makeSchemaDataNode","schema","control","elementIndex","dataNode","getChild","childNode","objControl","current","isNull","value","getChildElement","_control$elements","elements","schemaDataForFieldRef","fieldRef","_fieldRef$split","schemaDataForFieldPath","split","traverseSchemaPath","fieldPath","acc","next","i","length","nextField","_nextNode","nextNode","lookupField","newControl","schemaForFieldPath","getSchemaNodePath","paths","curNode","push","reverse","isCompoundNode","relativePath","child","parentPath","childPath","upLevels","downPath","slice","join","repeat","getTagParam","tag","_field$tags","tags","startsWith","substring","visitControlDefinition","visitor","defaultValue","Action","action","Data","data","Display","display","Group","group","isDisplayOnlyRenderer","options","DisplayOnly","isAutoCompleteClasses","Autocomplete","isDataGroupRenderer","isDataControl","c","isGroupControl","isActionControl","isDisplayControl","isCheckEntryClasses","Radio","CheckList","ValidatorType","DateComparison","ExpressionType","FormNode","definition","tree","overrideChildren","this","_proto","prototype","_children$map","_children","_this","childRefId","ref","controlMap","withOverrideChildren","_this2","nodeForControl","index","legacyFormNode","createFormLookup","$legacy","getForm","rootNode","getControlIds","_definition$children$","_definition$children","childEntries","flatMap","concat","formMap","formId","forms","Object","fromEntries","entries","_ref","controls","fieldPathForDefinition","compoundField","lookupDataNode","parentNode","fieldNamePath","traverseParents","get","until","outArray","getRootDataNode","getJsonPath","d","visitControlDataArray","context","cb","_iterator","_step","_createForOfIteratorHelperLoose","done","r","visitControlData","ctx","def","processData","dataControl","result","fieldNode","compound","collection","cIndex","_iterator2","elemChild","elemResult","cfResult","makeScalarField","n","_extends","defaultScalarField","String","defaultCompoundField","mergeField","mergeInto","existing","onlyForTypes","mergeTypes","f","s","extras","filter","includes","mergeFields","name","newFields","withType","isTypeField","addFieldOption","reduce","af","typeField","_typeField$options","some","resolveSchemas","out","keys","forEach","resolveSchemaType","resolvedFields","applyDefaultValues","v","doneSet","defaultValueForFields","has","_doneSet","Set","add","applyValue","applyDefaultForField","defaultValueForField","notElement","required","isRequired","childValue","notNullable","elementValueForField","fieldHasTag","Boolean","fieldDisplayName","_field$displayName","hasOptions","o","_o$options$length","_o$options","defaultControlForField","noChildren","ControlRef","title","NoControl","htmlEditor","HtmlEditor","renderOptions","Standard","addMissingControls","addMissingControlsForSchema","schemaControlMap","rootControls","toControlAndSchema","addSchemaMapEntry","addReferences","console","warn","addMissing","schemaNode","_schemaControlMap$eli","eligibleParents","addCompound","getEligibleParents","desiredGroup","ControlGroup","parentGroup","indexOf","toDefinition","entry","parentSchema","dontRegister","_c$children$map","_c$children","controlPath","dataSchema","_dataSchema","useUpdatedRef","a","useRef","isControlReadonly","readonly","isControlDisabled","disabled","getDisplayOnlyOptions","jsonPathString","jsonPath","customIndex","_customIndex","getOverrideClass","className","rendererClass","controlClass","globalClass","oc","clsx","applyLengthRestrictions","min","max","minValue","maxValue","getGroupRendererOptions","groupOptions","getGroupClassOverrides","go","childLayoutClass","childStyleClass","childLabelClass","layoutClass","styleClass","labelClass","isControlDisplayOnly","_getGroupRendererOpti","displayOnly","getLastDefinedValue","ensureMetaValue","lastDefined","subscribe","nv","ControlChange","Value","getIsEditing","currentEdit","initialValue","getAllValues","applyValues","isEqual","setValue","changes","every","validatorOptions","adornmentOptions","renderOptionsFor","autocompleteOptions","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","makeHookDepString","deps","asHookDep","toDepString","useDynamicHooks","hooks","hookEntries","state","useCallback","p","runHook","toString","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","_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","jExpr","path","pathString","fullExpr","compiledExpr","useMemo","jsonata","e","error","listenerRef","updateRef","useRefState","SubscriptionTracker","l","addAfterChangesCallback","useEffect","apply","tracker","_temp","_coerce","Promise","resolve","evaluate","trackedValue","collectUsage","collectChanges","then","_compiledExpr$evaluat","_finallyRethrows","_wasThrown","_result","update","reject","cleanup","useEvalActionHook","useExpr","ActionData","useEvalLabelText","Label","dynamicValue","makeDefault","_dynamicValue$runHook","_dynamicValue$runHook2","as","useMakeValidationHook","useValidatorFor","_dd$validators","useDefaultValidator","dd","refData","depString","validators","_ctx$dataContext$data","_ctx$dataContext$data2","_dd$validators2","dataContext","hiddenControl","useValueChangeEffect","setError","useValidator","validationMessageText","validator","useLengthValidator","useJsonataValidator","useDateValidator","sdn","errorMsg","JSON","stringify","lv","len","controlLength","MinLength","from","MaxLength","dv","comparisonDate","fixedDate","parseToMillis","nowDate","UTC","getFullYear","getMonth","getDate","daysFromCurrent","selDate","notAfter","comparison","NotAfter","NotAfterDate","NotBeforeDate","LabelType","DefaultSchemaInterface","boolStrings","parseDateTime","parse","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","compoundFieldSetup","makeControlSetup","compoundFieldEquality","b","makeEqualityFunc","elemEqual","allChecks","setup","equals","elems","defaultSchemaInterface","useControlRendererComponent","controlOrFormNode","renderer","parentDataNode","_options$useDataHook","_options$schemaInterf","_options$useEvalExpre","formNode","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$adornment2","_definition$adornment3","_options$adjustLayout","_r$current","_dynamicHooks","visible","visibility","showing","useControlEffect","ex","parentControl","_definition$adornment","_definition$renderOpt","dontClearHidden","adornments","Optional","NullToggle","hidden","vc","dontClear","dontDefault","parentNull","ro","clearHidden","myOptionsControl","_visibility$fields","myOptions","childOptions","React","renderAdornment","adornment","formOptions","labelAndChildren","renderControlLayout","renderChild","k","_ref5","overrideClasses","_objectWithoutPropertiesLoose","_excluded","dContext","NewControlRenderer","key","createDataProps","style","customDisplay","actionDataControl","actionOnClick","useEvalExpression","useChildVisibility","childDef","dontOverride","_ref6","layoutProps","renderedControl","renderLayout","adjustLayout","renderVisibility","ControlRenderer","_ref7","Render","createElement","_ref8","_ref9","_allowedOptions$value","_definition$renderOpt2","_ref9$schemaInterface","props","_excluded2","fieldOptions","_allowed","allowed","uniqueId","_fieldOptions$find","y","_c$groupOptions2","_labelText$value","_c$groupOptions3","_c$groupOptions","designMode","renderData","processLayout","renderGroup","label","hide","_props$actionDataCont","_props$actionDataCont2","_ref10","_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","Fragment","wrapMarkup","wrap","layoutKeyForPlacement","pos","ControlEnd","ControlStart","LabelStart","LabelEnd","isOneOf","isAdornmentRegistration","isDataRegistration","isGroupRegistration","isLabelRegistration","isLayoutRegistration","isVisibilityRegistration","isActionRegistration","isDisplayRegistration","isArrayRegistration","handlers","call","arguments","_handlers$i","_handlers","res","_ref13","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","values","setInitialValue","allEdits","resetMultiValues","editable","editing","other","render","actionType","noun","_ref12","removeText","removeActionId","noAdd","addActionId","addText","addElement","noRemove","removeElement","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","base","findControlsForCompound","fieldNames","foundFields","currentFields","findNonDataGroups","_control$children2","getAllReferencedClasses","collectExtra","_c$children2","_collectExtra","childClasses","entryWrapperClass","selectedClass","notSelectedClass","listContainerClass","listEntryClass","chipContainerClass","chipCloseButtonClass","tc","getDiffObject","force","dirty","idField","IdField","_getElementIndex","change","old","getElementIndex","initialIndex","edit","diff","_definition$validator","lengthVal","isEditing","currentNotNull","notNull","disableIfNotEditing","html","Html","Flex","Grid","Icon","SelectChild","SetField","Tabs","o1","o2","doMerge","_","hasOwnProperty","_props$processLayout","_ref11","wrapLayout","sort","priority","_fieldRef$split2","text","root","rl","orig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/schemaField.ts","../src/controlDefinition.ts","../src/schemaValidator.ts","../src/entityExpression.ts","../src/schemaBuilder.ts","../src/util.ts","../src/controlBuilder.ts","../src/dynamicHooks.ts","../src/hooks.tsx","../src/validators.ts","../src/defaultSchemaInterface.ts","../src/controlRender.tsx","../src/createFormRenderer.tsx","../src/renderers.tsx"],"sourcesContent":["import { SchemaValidator } from \"./schemaValidator\";\nimport { Control, ControlSetup, newControl } from \"@react-typed-forms/core\";\nimport { EntityExpression } from \"./entityExpression\";\n\nexport type EqualityFunc = (a: any, b: any) => boolean;\n\n/**\n * Represents a schema field with various properties.\n */\nexport interface SchemaField {\n /** The type of the field. */\n type: string;\n /** The name of the field. */\n field: string;\n /** The display name of the field, optional. */\n displayName?: string | null;\n /** Tags associated with the field, optional. */\n tags?: string[] | null;\n /** Indicates if the field is a system field, optional. */\n system?: boolean | null;\n /** Indicates if the field is a collection, optional. */\n collection?: boolean | null;\n /** Specifies the types for which the field is applicable, optional. */\n onlyForTypes?: string[] | null;\n /** Indicates if the field is required, optional. */\n required?: boolean | null;\n /** Indicates if the field is not nullable, optional. */\n notNullable?: boolean | null;\n /** The default value of the field, optional. */\n defaultValue?: any;\n /** Indicates if the field is a type field, optional. */\n isTypeField?: boolean | null;\n /** Indicates if the field is searchable, optional. */\n searchable?: boolean | null;\n /** Options for the field, optional. */\n options?: FieldOption[] | null;\n /** Validators for the field, optional. */\n validators?: SchemaValidator[] | null;\n}\n\n/**\n * Represents a map of schema fields.\n * The key is a string representing the schema name.\n * The value is an array of SchemaField objects.\n */\nexport type SchemaMap = Record<string, SchemaField[]>;\n\n/**\n * Enum representing the various field types.\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\n/**\n * Represents a field that references an entity.\n */\nexport interface EntityRefField extends SchemaField {\n /** The type of the field, which is EntityRef. */\n type: FieldType.EntityRef;\n /** The type of the referenced entity. */\n entityRefType: string;\n /** The parent field of the entity reference. */\n parentField: string;\n}\n\n/**\n * Represents an option for a field.\n */\nexport interface FieldOption {\n /** The name of the option. */\n name: string;\n /** The value of the option. */\n value: any;\n /** The description of the option, optional. */\n description?: string | null;\n /** The group of the option, optional. */\n group?: string | null;\n /** Indicates if the option is disabled, optional. */\n disabled?: boolean | null;\n}\n\n/**\n * Represents a compound field that contains child fields.\n */\nexport interface CompoundField extends SchemaField {\n /** The type of the field, which is Compound. */\n type: FieldType.Compound;\n /** The child fields of the compound field. */\n children: SchemaField[];\n /** Indicates if the children are tree-structured, optional. */\n treeChildren?: boolean;\n /** The schema reference for the compound field, optional. */\n schemaRef?: string;\n}\n\n/**\n * Enum representing the various validation message types.\n */\nexport enum ValidationMessageType {\n NotEmpty = \"NotEmpty\",\n MinLength = \"MinLength\",\n MaxLength = \"MaxLength\",\n NotAfterDate = \"NotAfterDate\",\n NotBeforeDate = \"NotBeforeDate\",\n}\n\n/**\n * Interface for schema-related operations.\n */\nexport interface SchemaInterface {\n /**\n * Checks if the value of a field is empty.\n * @param field The schema field.\n * @param value The value to check.\n * @returns True if the value is empty, false otherwise.\n */\n isEmptyValue(field: SchemaField, value: any): boolean;\n\n /**\n * Gets the text representation of a field's value.\n * @param field The schema field.\n * @param value The value to convert.\n * @param element Indicates if the value is an element, optional.\n * @returns The text representation of the value.\n */\n textValue(\n field: SchemaField,\n value: any,\n element?: boolean,\n ): string | undefined;\n\n /**\n * Gets the length of a control's value.\n * @param field The schema field.\n * @param control The control to check.\n * @returns The length of the control's value.\n */\n controlLength(field: SchemaField, control: Control<any>): number;\n\n /**\n * Gets the length of a field's value.\n * @param field The schema field.\n * @param value The value to check.\n * @returns The length of the value.\n */\n valueLength(field: SchemaField, value: any): number;\n\n /**\n * Gets the data options for a schema data node.\n * @param node The schema data node.\n * @returns The data options.\n */\n getDataOptions(node: SchemaDataNode): FieldOption[] | null | undefined;\n\n /**\n * Gets the node options for a schema node.\n * @param node The schema node.\n * @returns The node options.\n */\n getNodeOptions(node: SchemaNode): FieldOption[] | null | undefined;\n\n /**\n * Gets the options for a schema field.\n * @param field The schema field.\n * @returns The field options.\n */\n getOptions(field: SchemaField): FieldOption[] | undefined | null;\n\n /**\n * Gets the filter options for a schema data node and field.\n * @param array The schema data node.\n * @param field The schema node.\n * @returns The filter options.\n */\n getFilterOptions(\n array: SchemaDataNode,\n field: SchemaNode,\n ): FieldOption[] | undefined | null;\n\n /**\n * Parses a string value to milliseconds.\n * @param field The schema field.\n * @param v The string value to parse.\n * @returns The parsed value in milliseconds.\n */\n parseToMillis(field: SchemaField, v: string): number;\n\n /**\n * Gets the validation message text for a field.\n * @param field The schema field.\n * @param messageType The type of validation message.\n * @param actual The actual value.\n * @param expected The expected value.\n * @returns The validation message text.\n */\n validationMessageText(\n field: SchemaField,\n messageType: ValidationMessageType,\n actual: any,\n expected: any,\n ): string;\n\n /**\n * Compares two values of a field.\n * @param field The schema field.\n * @param v1 The first value.\n * @param v2 The second value.\n * @returns The comparison result.\n */\n compareValue(field: SchemaField, v1: unknown, v2: unknown): number;\n\n /**\n * Gets the search text for a field's value.\n * @param field The schema field.\n * @param value The value to search.\n * @returns The search text.\n */\n searchText(field: SchemaField, value: any): string;\n\n makeEqualityFunc(field: SchemaNode, element?: boolean): EqualityFunc;\n\n makeControlSetup(field: SchemaNode, element?: boolean): ControlSetup<any>;\n}\n\nexport interface SchemaTreeLookup {\n getSchema(schemaId: string): SchemaNode | undefined;\n}\n\nexport interface SchemaNode extends SchemaTreeLookup {\n id: string;\n field: SchemaField;\n getChildNode(field: string): SchemaNode | undefined;\n getChildNodes(noRecurse?: boolean, withParent?: SchemaNode): SchemaNode[];\n parent?: SchemaNode;\n}\n\nexport interface SchemaDataNode {\n id: string;\n schema: SchemaNode;\n elementIndex?: number;\n control: Control<any>;\n parent?: SchemaDataNode;\n getChild(schemaNode: SchemaNode): SchemaDataNode;\n getChildElement(index: number): SchemaDataNode;\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\nfunction missingField(field: string): SchemaField {\n return { field: \"__missing\", type: FieldType.Any, displayName: field };\n}\n\nfunction nodeForSchema(\n field: SchemaField,\n lookup: SchemaTreeLookup,\n parent: SchemaNode | undefined,\n): SchemaNode {\n const node = {\n id: parent ? parent.id + \"/\" + field.field : field.field,\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 && !field.treeChildren) {\n const childField = field.children.find((x) => x.field === fieldName);\n return childField ? nodeForSchema(childField, lookup, node) : undefined;\n }\n return getChildNodes(false, node).find((x) => x.field.field === fieldName);\n }\n\n function getChildNodes(\n noRecurse?: boolean,\n withParent?: SchemaNode,\n ): SchemaNode[] {\n if (isCompoundField(field)) {\n if (field.treeChildren) {\n return noRecurse\n ? []\n : parent!.getChildNodes(false, withParent ?? node);\n }\n const otherRef = field.schemaRef && lookup.getSchema(field.schemaRef);\n if (otherRef) return otherRef.getChildNodes(false, withParent ?? node);\n return field.children.map((x) =>\n nodeForSchema(x, lookup, withParent ?? node),\n );\n }\n return [];\n }\n}\n\nexport function createSchemaLookup<A extends Record<string, SchemaField[]>>(\n schemaMap: A,\n): {\n getSchema(schemaId: keyof A): SchemaNode;\n} {\n const lookup = {\n getSchema,\n };\n return lookup;\n\n function getSchema(schemaId: keyof A): SchemaNode {\n const fields = schemaMap[schemaId];\n if (fields) {\n return rootSchemaNode(fields, lookup);\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 indexId = typeof elementIndex === \"number\" ? \"/\" + elementIndex : \"\";\n const dataNode = {\n id:\n (parent ? parent.id + \"/\" + schema.field.field : schema.field.field) +\n indexId,\n schema,\n control,\n parent,\n elementIndex,\n getChild,\n getChildElement,\n };\n return dataNode;\n\n function getChild(childNode: 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 childNode,\n objControl?.fields[childNode.field.field],\n dataNode,\n );\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 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 =\n nextField === \"..\" ? schema.parent : schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(missingField(nextField), 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 dataNode: SchemaDataNode,\n): SchemaDataNode {\n let i = 0;\n while (i < fieldPath.length) {\n const nextField = fieldPath[i];\n let nextNode =\n nextField === \"..\" ? dataNode.parent : lookupField(nextField);\n nextNode ??= makeSchemaDataNode(\n nodeForSchema(missingField(nextField), dataNode.schema, dataNode.schema),\n newControl(undefined),\n );\n dataNode = nextNode;\n i++;\n }\n return dataNode;\n\n function lookupField(field: string): SchemaDataNode | undefined {\n const childNode = dataNode.schema.getChildNode(field);\n if (childNode) {\n return dataNode.getChild(childNode);\n }\n return undefined;\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 =\n nextField === \"..\" ? schema.parent : schema.getChildNode(nextField);\n if (!childNode) {\n childNode = nodeForSchema(missingField(nextField), schema, schema);\n }\n schema = childNode;\n i++;\n }\n return schema;\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 getSchemaNodePath(node: SchemaNode) {\n const paths: string[] = [];\n let curNode: SchemaNode | undefined = node;\n while (curNode) {\n paths.push(curNode.field.field);\n curNode = curNode.parent;\n }\n return paths.reverse();\n}\n\nexport function isCompoundNode(node: SchemaNode) {\n return isCompoundField(node.field);\n}\n\n/**\n * Returns the relative path from a parent node to a child node.\n * @param parent\n * @param child\n */\nexport function relativePath(parent: SchemaNode, child: SchemaNode): string {\n // return the path from child to parent\n if (parent.id === child.id) return \"\";\n\n const parentPath = getSchemaNodePath(parent);\n const childPath = getSchemaNodePath(child);\n\n let i = 0;\n while (\n i < parentPath.length &&\n i < childPath.length &&\n parentPath[i] === childPath[i]\n ) {\n i++;\n }\n\n const upLevels = parentPath.length - i;\n const downPath = childPath.slice(i).join(\"/\");\n\n return \"../\".repeat(upLevels) + downPath;\n}\n\nexport enum SchemaTags {\n NoControl = \"_NoControl\",\n HtmlEditor = \"_HtmlEditor\",\n ControlGroup = \"_ControlGroup:\",\n ControlRef = \"_ControlRef:\",\n IdField = \"_IdField:\",\n}\n\nexport function getTagParam(\n field: SchemaField,\n tag: string,\n): string | undefined {\n return field.tags?.find((x) => x.startsWith(tag))?.substring(tag.length);\n}\n\nexport function makeParamTag(tag: string, value: string): string {\n return `${tag}${value}`;\n}\n","import { SchemaValidator } from \"./schemaValidator\";\nimport {\n FieldOption,\n isCompoundField,\n schemaDataForFieldPath,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n SchemaNode,\n} from \"./schemaField\";\nimport { Control } from \"@react-typed-forms/core\";\nimport { EntityExpression } from \"./entityExpression\";\n\n/**\n * Interface representing the form context data.\n */\nexport interface FormContextData {\n option?: FieldOption;\n optionSelected?: boolean;\n}\n\n/**\n * Interface representing the control data context.\n */\nexport interface ControlDataContext {\n schemaInterface: SchemaInterface;\n dataNode: SchemaDataNode | undefined;\n parentNode: SchemaDataNode;\n formData: FormContextData;\n}\n\n/**\n * Represents any control definition.\n */\nexport type AnyControlDefinition =\n | DataControlDefinition\n | GroupedControlsDefinition\n | ActionControlDefinition\n | DisplayControlDefinition;\n\n/**\n * Represents a control definition.\n */\nexport interface ControlDefinition {\n type: string;\n id?: string | null;\n childRefId?: string | null;\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 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 Optional = \"Optional\",\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 OptionalAdornment extends ControlAdornment {\n type: ControlAdornmentType.Optional;\n placement?: AdornmentPlacement | null;\n allowNull?: boolean;\n editSelectable?: boolean;\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 Autocomplete = \"Autocomplete\",\n Jsonata = \"Jsonata\",\n Array = \"Array\",\n ArrayElement = \"ArrayElement\",\n}\n\nexport interface TextfieldRenderOptions extends RenderOptions {\n type: DataRenderType.Textfield;\n placeholder?: string | null;\n multiline?: boolean | null;\n}\n\nexport interface AutocompleteRenderOptions\n extends RenderOptions,\n AutocompleteClasses {\n type: DataRenderType.Autocomplete;\n}\n\nexport interface AutocompleteClasses {\n listContainerClass?: string | null;\n listEntryClass?: string | null;\n chipContainerClass?: string | null;\n chipCloseButtonClass?: string | null;\n placeholder?: string | 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 editText?: string | null;\n editActionId?: string | null;\n noAdd?: boolean | null;\n noRemove?: boolean | null;\n noReorder?: boolean | null;\n childOptions?: RenderOptions | null;\n editExternal?: boolean | null;\n}\n\nexport interface ArrayElementRenderOptions extends RenderOptions {\n type: DataRenderType.ArrayElement;\n showInline?: boolean | null;\n}\n\nexport type ArrayActionOptions = Pick<\n ArrayRenderOptions,\n | \"addText\"\n | \"addActionId\"\n | \"removeText\"\n | \"removeActionId\"\n | \"noAdd\"\n | \"noRemove\"\n | \"noReorder\"\n | \"editExternal\"\n | \"editActionId\"\n | \"editText\"\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 Tabs = \"Tabs\",\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 TabsGroupRenderer extends GroupRenderOptions {\n type: GroupRenderType.Tabs;\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}\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 isTabsRenderer(\n options: GroupRenderOptions,\n): options is TabsGroupRenderer {\n return options.type === GroupRenderType.Tabs;\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 isAutocompleteRenderer(\n options: RenderOptions,\n): options is AutocompleteRenderOptions {\n return options.type === DataRenderType.Autocomplete;\n}\n\nexport function isAutoCompleteClasses(\n options?: RenderOptions | null,\n): options is AutocompleteClasses & RenderOptions {\n switch (options?.type) {\n case DataRenderType.Autocomplete:\n return true;\n default:\n return false;\n }\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 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 function isActionControl(\n c: ControlDefinition,\n): c is ActionControlDefinition {\n return c.type === ControlDefinitionType.Action;\n}\n\nexport function isDisplayControl(\n c: ControlDefinition,\n): c is DisplayControlDefinition {\n return c.type === ControlDefinitionType.Display;\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\nexport type ControlMap = { [k: string]: ControlDefinition };\n\nexport class FormNode {\n constructor(\n public id: string,\n public definition: ControlDefinition,\n public tree: FormTree,\n public parent?: FormNode,\n public overrideChildren?: FormNode[],\n ) {\n this.id = id;\n this.definition = definition;\n }\n\n getChildNodes(): FormNode[] {\n if (this.overrideChildren) return this.overrideChildren;\n let children = this.definition.children;\n if (this.definition.childRefId) {\n const ref = this.tree.controlMap[this.definition.childRefId];\n children = ref?.children;\n }\n return (\n children?.map(\n (x, i) => new FormNode(this.id + \"/\" + i, x, this.tree, this),\n ) ?? []\n );\n }\n\n withOverrideChildren(children: ControlDefinition[]) {\n return new FormNode(\n this.id,\n this.definition,\n this.tree,\n this.parent,\n children.map((x) => nodeForControl(x, this.tree)),\n );\n }\n}\n\nexport interface FormTreeLookup<A = string> {\n getForm(formId: A): FormTree | undefined;\n}\nexport interface FormTree extends FormTreeLookup {\n rootNode: FormNode;\n controlMap: ControlMap;\n}\n\nexport function nodeForControl(\n definition: ControlDefinition,\n tree: FormTree,\n indexOrId?: number | string,\n parent?: FormNode,\n): FormNode {\n return new FormNode(\n parent ? parent.id + \"/\" + indexOrId : \"\",\n definition,\n tree,\n parent,\n );\n}\n\nexport function legacyFormNode(definition: ControlDefinition) {\n return createFormLookup({ $legacy: [definition] })\n .getForm(\"$legacy\")!\n .rootNode.getChildNodes()[0];\n}\n\nfunction getControlIds(\n definition: ControlDefinition,\n): [string, ControlDefinition][] {\n const childEntries = definition.children?.flatMap(getControlIds) ?? [];\n return !definition.id\n ? childEntries\n : [[definition.id, definition], ...childEntries];\n}\n\nfunction makeFormTree(\n controls: ControlDefinition[],\n getForm: FormTreeLookup,\n): FormTree {\n const tree = {\n getForm,\n controlMap: Object.fromEntries(controls.flatMap(getControlIds)),\n } as unknown as FormTree;\n tree.rootNode = nodeForControl(\n {\n children: controls,\n type: ControlDefinitionType.Group,\n },\n tree,\n );\n return tree;\n}\n\nexport function createFormLookup<A extends Record<string, ControlDefinition[]>>(\n formMap: A,\n): FormTreeLookup<keyof A> {\n const lookup = {\n getForm,\n };\n const forms = Object.fromEntries(\n Object.entries(formMap).map(([k, v]) => [k, makeFormTree(v, lookup)]),\n );\n return lookup;\n\n function getForm(formId: keyof A): FormTree | undefined {\n return forms[formId as string];\n }\n}\n\nexport function fieldPathForDefinition(\n c: ControlDefinition,\n): string[] | undefined {\n const fieldName = isGroupControl(c)\n ? c.compoundField\n : isDataControl(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 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 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 = isDataControl(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","export enum ValidatorType {\n Jsonata = \"Jsonata\",\n Date = \"Date\",\n Length = \"Length\",\n}\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","export 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","import {\n CompoundField,\n FieldOption,\n FieldType,\n isCompoundField,\n SchemaField,\n SchemaMap,\n} from \"./schemaField\";\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 ControlActionHandler,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayOnlyRenderOptions,\n fieldPathForDefinition,\n GroupRenderOptions,\n isAutoCompleteClasses,\n isCheckEntryClasses,\n isDataControl,\n isDataGroupRenderer,\n isDisplayOnlyRenderer,\n isGroupControl,\n} from \"./controlDefinition\";\nimport { MutableRefObject, useRef } from \"react\";\nimport clsx from \"clsx\";\nimport {\n CompoundField,\n FieldOption,\n findField,\n getTagParam,\n isCompoundField,\n isCompoundNode,\n isScalarField,\n relativePath,\n rootSchemaNode,\n SchemaDataNode,\n SchemaField,\n schemaForFieldPath,\n SchemaNode,\n SchemaTags,\n} from \"./schemaField\";\nimport {\n Control,\n ControlChange,\n ensureMetaValue,\n getElementIndex,\n newControl,\n} from \"@react-typed-forms/core\";\nimport { ActionRendererProps } from \"./controlRender\";\n\n/**\n * Interface representing the classes for a control.\n */\nexport interface ControlClasses {\n styleClass?: string;\n layoutClass?: string;\n labelClass?: string;\n}\n\n/**\n * Type representing a JSON path, which can be a string or a number.\n */\nexport type JsonPath = string | number;\n\n/**\n * Applies default values to the given record based on the provided schema fields.\n * @param v - The record to apply default values to.\n * @param fields - The schema fields to use for applying default values.\n * @param doneSet - A set to keep track of processed records.\n * @returns The record with default values applied.\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\n/**\n * Applies default values to a specific field based on the provided schema field.\n * @param v - The value to apply default values to.\n * @param field - The schema field to use for applying default values.\n * @param parent - The parent schema fields.\n * @param notElement - Flag indicating if the field is not an element.\n * @param doneSet - A set to keep track of processed records.\n * @returns The value with default values applied.\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\n/**\n * Returns the default values for the provided schema fields.\n * @param fields - The schema fields to get default values for.\n * @returns The default values for the schema fields.\n */\nexport function defaultValueForFields(fields: SchemaField[]): any {\n return Object.fromEntries(\n fields.map((x) => [x.field, defaultValueForField(x)]),\n );\n}\n\n/**\n * Returns the default value for a specific schema field.\n * @param sf - The schema field to get the default value for.\n * @param required - Flag indicating if the field is required.\n * @returns The default value for the schema field.\n */\nexport function defaultValueForField(\n sf: SchemaField,\n required?: boolean | null,\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 ? (sf.collection ? [] : {}) : undefined;\n }\n if (sf.collection && sf.notNullable) {\n return [];\n }\n return undefined;\n}\n\n/**\n * Returns the element value for a specific schema field.\n * @param sf - The schema field to get the element value for.\n * @returns The element value for the schema field.\n */\nexport function elementValueForField(sf: SchemaField): any {\n if (isCompoundField(sf)) {\n return defaultValueForFields(sf.children);\n }\n return sf.defaultValue;\n}\n\n/**\n * Finds a scalar field in the provided schema fields.\n * @param fields - The schema fields to search in.\n * @param field - The field name to search for.\n * @returns The found scalar field, or undefined if not found.\n */\nexport function findScalarField(\n fields: SchemaField[],\n field: string,\n): SchemaField | undefined {\n return findField(fields, field);\n}\n\n/**\n * Finds a compound field in the provided schema fields.\n * @param fields - The schema fields to search in.\n * @param field - The field name to search for.\n * @returns The found compound field, or undefined if not found.\n */\nexport function findCompoundField(\n fields: SchemaField[],\n field: string,\n): CompoundField | undefined {\n return findField(fields, field) as CompoundField | undefined;\n}\n\n/**\n * Checks if a field has a specific tag.\n * @param field - The field to check.\n * @param tag - The tag to check for.\n * @returns True if the field has the tag, false otherwise.\n */\nexport function fieldHasTag(field: SchemaField, tag: string) {\n return Boolean(field.tags?.includes(tag));\n}\n\n/**\n * Returns the display name for a specific field.\n * @param field - The field to get the display name for.\n * @returns The display name for the field.\n */\nexport function fieldDisplayName(field: SchemaField) {\n return field.displayName ?? field.field;\n}\n\n/**\n * Checks if an object has options.\n * @param o - The object to check.\n * @returns True if the object has options, false otherwise.\n */\nexport function hasOptions(o: { options: FieldOption[] | undefined | null }) {\n return (o.options?.length ?? 0) > 0;\n}\n\n/**\n * Returns the default control definition for a specific schema field.\n * @param sf - The schema field to get the default control definition for.\n * @param noChildren - Flag indicating if children should not be included.\n * @returns The default control definition for the schema field.\n */\nexport function defaultControlForField(\n sf: SchemaField,\n noChildren?: boolean,\n): DataControlDefinition {\n if (isCompoundField(sf)) {\n const ref = getTagParam(sf, SchemaTags.ControlRef);\n return {\n type: ControlDefinitionType.Data,\n title: sf.displayName,\n field: sf.field,\n required: sf.required,\n childRefId: ref,\n children:\n !noChildren && !ref\n ? sf.children\n .filter((x) => !fieldHasTag(x, SchemaTags.NoControl))\n .map((x) => defaultControlForField(x))\n : undefined,\n };\n } else if (isScalarField(sf)) {\n const htmlEditor = fieldHasTag(sf, SchemaTags.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}\n\n/**\n * Finds a referenced control in the provided control definition.\n * @param field - The field name to search for.\n * @param control - The control definition to search in.\n * @returns The found control definition, or undefined if not found.\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\n/**\n * Finds a referenced control in an array of control definitions.\n * @param field - The field name to search for.\n * @param controls - The array of control definitions to search in.\n * @returns The found control definition, or undefined if not found.\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: SchemaNode,\n definition: ControlDefinition,\n): ControlDefinition[] {\n if (isDataControl(definition) && compound.field.field === definition.field) {\n return [definition];\n }\n if (isGroupControl(definition)) {\n if (definition.compoundField === compound.field.field) return [definition];\n return (\n definition.children?.flatMap((d) =>\n findControlsForCompound(compound, d),\n ) ?? []\n );\n }\n return [];\n}\n\n/**\n * Finds non-data groups in the provided control definitions.\n * @param controls - The control definitions to search in.\n * @returns An array of found non-data groups.\n */\nexport function findNonDataGroups(\n controls: ControlDefinition[],\n): ControlDefinition[] {\n return controls.flatMap((control) =>\n isGroupControl(control) && !control.compoundField\n ? [control, ...findNonDataGroups(control.children ?? [])]\n : [],\n );\n}\n\n/**\n * Adds missing controls to the provided control definitions based on the schema fields.\n * @param fields - The schema fields to use for adding missing controls.\n * @param controls - The control definitions to add missing controls to.\n * @returns The control definitions with missing controls added.\n */\nexport function addMissingControls(\n fields: SchemaField[],\n controls: ControlDefinition[],\n) {\n return addMissingControlsForSchema(rootSchemaNode(fields), controls);\n}\n\ninterface ControlAndSchema {\n control: ControlDefinition;\n children: ControlAndSchema[];\n schema?: SchemaNode;\n parent?: ControlAndSchema;\n}\n/**\n * Adds missing controls to the provided control definitions based on the schema fields.\n * @param schema - The root schema node to use for adding missing controls.\n * @param controls - The control definitions to add missing controls to.\n * @returns The control definitions with missing controls added.\n */\nexport function addMissingControlsForSchema(\n schema: SchemaNode,\n controls: ControlDefinition[],\n) {\n const controlMap: { [k: string]: ControlAndSchema } = {};\n const schemaControlMap: { [k: string]: ControlAndSchema[] } = {};\n const rootControls = controls.map((c) => toControlAndSchema(c, schema));\n const rootSchema = { schema, children: rootControls } as ControlAndSchema;\n addSchemaMapEntry(\"\", rootSchema);\n rootControls.forEach(addReferences);\n const fields = schema.getChildNodes();\n fields.forEach(addMissing);\n return rootControls.map(toDefinition);\n\n function toDefinition(c: ControlAndSchema): ControlDefinition {\n const children = c.children.length ? c.children.map(toDefinition) : null;\n return { ...c.control, children };\n }\n\n function addMissing(schemaNode: SchemaNode) {\n if (fieldHasTag(schemaNode.field, SchemaTags.NoControl)) return;\n const existingControls = schemaControlMap[schemaNode.id];\n if (!existingControls) {\n const eligibleParents = getEligibleParents(schemaNode);\n const desiredGroup = getTagParam(\n schemaNode.field,\n SchemaTags.ControlGroup,\n );\n let parentGroup = desiredGroup ? controlMap[desiredGroup] : undefined;\n if (!parentGroup && desiredGroup)\n console.warn(\"No group '\" + desiredGroup + \"' for \" + schemaNode.id);\n if (parentGroup && eligibleParents.indexOf(parentGroup.schema!.id) < 0) {\n console.warn(\n `Target group '${desiredGroup}' is not an eligible parent for '${schemaNode.id}'`,\n );\n parentGroup = undefined;\n }\n if (!parentGroup && eligibleParents.length) {\n parentGroup = schemaControlMap[eligibleParents[0]]?.[0];\n }\n if (parentGroup) {\n const newControl = defaultControlForField(schemaNode.field, true);\n newControl.field = relativePath(parentGroup.schema!, schemaNode);\n parentGroup.children.push(\n toControlAndSchema(newControl, parentGroup.schema!, parentGroup),\n );\n } else\n console.warn(\"Could not find a parent group for: \" + schemaNode.id);\n }\n schemaNode.getChildNodes(true).forEach(addMissing);\n }\n\n function getEligibleParents(schemaNode: SchemaNode) {\n const eligibleParents: string[] = [];\n let parent = schemaNode.parent;\n while (parent) {\n eligibleParents.push(parent.id);\n if (parent.field.collection) break;\n if (!parent.parent) parent.getChildNodes(true).forEach(addCompound);\n parent = parent.parent;\n }\n return eligibleParents;\n\n function addCompound(node: SchemaNode) {\n if (isCompoundNode(node) && !node.field.collection) {\n eligibleParents.push(node.id);\n node.getChildNodes(true).forEach(addCompound);\n }\n }\n }\n\n function addReferences(c: ControlAndSchema) {\n c.children.forEach(addReferences);\n if (c.control.childRefId) {\n const ref = controlMap[c.control.childRefId];\n if (ref) {\n ref.children.forEach((x) =>\n toControlAndSchema(x.control, c.schema!, c, true),\n );\n return;\n }\n console.warn(\"Missing reference\", c.control.childRefId);\n }\n }\n\n function addSchemaMapEntry(schemaId: string, entry: ControlAndSchema) {\n if (!schemaControlMap[schemaId]) schemaControlMap[schemaId] = [];\n schemaControlMap[schemaId].push(entry);\n }\n function toControlAndSchema(\n c: ControlDefinition,\n parentSchema: SchemaNode,\n parentNode?: ControlAndSchema,\n dontRegister?: boolean,\n ): ControlAndSchema {\n const controlPath = fieldPathForDefinition(c);\n let dataSchema = controlPath\n ? schemaForFieldPath(controlPath, parentSchema)\n : undefined;\n if (isGroupControl(c) && dataSchema == null) dataSchema = parentSchema;\n const entry: ControlAndSchema = {\n schema: dataSchema,\n control: c,\n children: [],\n parent: parentNode,\n };\n entry.children =\n c.children?.map((x) =>\n toControlAndSchema(x, dataSchema ?? parentSchema, entry, dontRegister),\n ) ?? [];\n if (!dontRegister && c.id) controlMap[c.id] = entry;\n if (dataSchema) {\n addSchemaMapEntry(dataSchema.id, entry);\n }\n return entry;\n }\n}\n\n/**\n * Custom hook to use an updated reference.\n * @param a - The value to create a reference for.\n * @returns A mutable reference object.\n */\nexport function useUpdatedRef<A>(a: A): MutableRefObject<A> {\n const r = useRef(a);\n r.current = a;\n return r;\n}\n\n/**\n * Checks if a control definition is readonly.\n * @param c - The control definition to check.\n * @returns True if the control definition is readonly, false otherwise.\n */\nexport function isControlReadonly(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.readonly;\n}\n\n/**\n * Checks if a control definition is disabled.\n * @param c - The control definition to check.\n * @returns True if the control definition is disabled, false otherwise.\n */\nexport function isControlDisabled(c: ControlDefinition): boolean {\n return isDataControl(c) && !!c.disabled;\n}\n\n/**\n * Returns the display-only render options for a control definition.\n * @param d - The control definition to get the display-only render options for.\n * @returns The display-only render options, or undefined if not applicable.\n */\nexport function getDisplayOnlyOptions(\n d: ControlDefinition,\n): DisplayOnlyRenderOptions | undefined {\n return isDataControl(d) &&\n d.renderOptions &&\n isDisplayOnlyRenderer(d.renderOptions)\n ? d.renderOptions\n : undefined;\n}\n\n/**\n * Cleans data for a schema based on the provided schema fields.\n * @param v - The data to clean.\n * @param fields - The schema fields to use for cleaning the data.\n * @param removeIfDefault - Flag indicating if default values should be removed.\n * @returns The cleaned data.\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\n/**\n * Returns all referenced classes for a control definition.\n * @param c - The control definition to get the referenced classes for.\n * @param collectExtra - Optional function to collect extra classes.\n * @returns An array of referenced classes.\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\n const { entryWrapperClass, selectedClass, notSelectedClass } =\n isDataControl(c) && isCheckEntryClasses(c.renderOptions)\n ? c.renderOptions\n : {};\n\n const {\n listContainerClass,\n listEntryClass,\n chipContainerClass,\n chipCloseButtonClass,\n } =\n isDataControl(c) && isAutoCompleteClasses(c.renderOptions)\n ? c.renderOptions\n : {};\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 listContainerClass,\n listEntryClass,\n chipContainerClass,\n chipCloseButtonClass,\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\n/**\n * Converts a JSON path array to a string.\n * @param jsonPath - The JSON path array to convert.\n * @param customIndex - Optional function to customize the index format.\n * @returns The JSON path string.\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\n/**\n * Finds a child control definition within a parent control definition.\n * @param parent - The parent control definition.\n * @param childPath - The path to the child control definition, either as a single index or an array of indices.\n * @returns The found child control definition.\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\n/**\n * Returns the override class name if the class name starts with \"@ \".\n * Otherwise, returns the original class name.\n * @param className - The class name to check and potentially modify.\n * @returns The override class name or the original class name.\n */\nexport function getOverrideClass(className?: string | null) {\n if (className && className.startsWith(\"@ \")) {\n return className.substring(2);\n }\n return className;\n}\n\n/**\n * Returns the appropriate class name for a renderer.\n * If the global class name starts with \"@ \", it overrides the control class name.\n * Otherwise, it combines the control class name and the global class name.\n *\n * @param controlClass - The class name for the control.\n * @param globalClass - The global class name.\n * @returns The appropriate class name for the renderer.\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\n/**\n * Applies length restrictions to a value.\n * @template Min - The type of the minimum value.\n * @template Max - The type of the maximum value.\n * @param {number} length - The length to check.\n * @param {number | null | undefined} min - The minimum length.\n * @param {number | null | undefined} max - The maximum length.\n * @param {Min} minValue - The value to return if the length is greater than the minimum.\n * @param {Max} maxValue - The value to return if the length is less than the maximum.\n * @returns {[Min | undefined, Max | undefined]} - An array containing the minimum and maximum values if the length restrictions are met.\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\n/**\n * Finds the path to a field in the schema fields.\n * @param {SchemaField[]} fields - The schema fields to search in.\n * @param {string | undefined} fieldPath - The path to the field.\n * @returns {SchemaField[] | undefined} - An array of schema fields representing the path, or undefined if not found.\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\n/**\n * Merges two objects.\n * @template A - The type of the objects to merge.\n * @param {A} o1 - The first object.\n * @param {A} o2 - The second object.\n * @param {(k: keyof NonNullable<A>, v1: unknown, v2: unknown) => unknown} [doMerge] - Optional function to merge values.\n * @returns {A} - The merged object.\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\n/**\n * Coerces a value to a string.\n * @param {unknown} v - The value to coerce.\n * @returns {string} - The coerced string.\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\n/**\n * Returns the group renderer options for a control definition.\n * @param {ControlDefinition} def - The control definition to get the group renderer options for.\n * @returns {GroupRenderOptions | undefined} - The group renderer options, or undefined if not applicable.\n */\nexport function getGroupRendererOptions(\n def: ControlDefinition,\n): GroupRenderOptions | undefined {\n return isGroupControl(def)\n ? def.groupOptions\n : isDataControl(def) && isDataGroupRenderer(def.renderOptions)\n ? def.renderOptions.groupOptions\n : undefined;\n}\n\n/**\n * Returns the group class overrides for a control definition.\n * @param {ControlDefinition} def - The control definition to get the group class overrides for.\n * @returns {ControlClasses} - The group class overrides.\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\n/**\n * Checks if a control definition is display-only.\n * @param {ControlDefinition} def - The control definition to check.\n * @returns {boolean} - True if the control definition is display-only, false otherwise.\n */\nexport function isControlDisplayOnly(def: ControlDefinition): boolean {\n return Boolean(getGroupRendererOptions(def)?.displayOnly);\n}\n\n/**\n * Combines multiple action handlers into a single handler.\n * @param {...(ControlActionHandler | undefined)[]} handlers - The action handlers to combine.\n * @returns {ControlActionHandler} - The combined action handler.\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\nexport function getDiffObject(dataNode: SchemaDataNode, force?: boolean): any {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (!c.dirty && !force) return undefined;\n if (c.isNull) return null;\n if (sf.collection && dataNode.elementIndex == null) {\n const idField = getTagParam(sf, SchemaTags.IdField);\n return c.as<any[]>().elements.map((x, i) => {\n const change = getDiffObject(\n dataNode.getChildElement(i),\n idField !== undefined,\n );\n return idField != null\n ? change\n : { old: getElementIndex(x)?.initialIndex, edit: change };\n });\n } else if (isCompoundField(sf)) {\n const children = dataNode.schema.getChildNodes();\n const idField = getTagParam(sf, SchemaTags.IdField);\n return Object.fromEntries(\n children.flatMap((c) => {\n const diff = getDiffObject(\n dataNode.getChild(c),\n idField === c.field.field,\n );\n return diff !== undefined ? [[c.field.field, diff]] : [];\n }),\n );\n }\n return c.value;\n}\n\nexport function getNullToggler(c: Control<any>): Control<boolean> {\n return ensureMetaValue(c, \"$nullToggler\", () => {\n const lastDefined = getLastDefinedValue(c);\n const isEditing = getIsEditing(c);\n const currentNotNull = c.current.value != null;\n c.disabled = !currentNotNull;\n const notNull = newControl(currentNotNull);\n if (!currentNotNull) c.value = null;\n disableIfNotEditing();\n isEditing.subscribe(disableIfNotEditing, ControlChange.Value);\n notNull.subscribe(() => {\n const currentNotNull = notNull.current.value;\n c.value = currentNotNull ? lastDefined.current.value : null;\n c.disabled = !currentNotNull;\n }, ControlChange.Value);\n return notNull;\n function disableIfNotEditing() {\n notNull.disabled = isEditing.current.value === false;\n }\n });\n}\n\nexport interface ExternalEditData {\n data: unknown;\n actions: ActionRendererProps[];\n}\n\nexport function getExternalEditData(\n c: Control<any>,\n): Control<ExternalEditData | undefined> {\n return ensureMetaValue(c, \"$externalEditIndex\", () => newControl(undefined));\n}\n\nexport function getLastDefinedValue<V>(control: Control<V>): Control<V> {\n return ensureMetaValue(control, \"$lastDefined\", () => {\n const lastDefined = newControl(control.current.value);\n control.subscribe(() => {\n const nv = control.current.value;\n if (nv != null) lastDefined.value = nv;\n }, ControlChange.Value);\n return lastDefined;\n });\n}\n\nexport function getIsEditing(\n control: Control<any>,\n): Control<boolean | undefined> {\n const lastDefined = getLastDefinedValue(control);\n return ensureMetaValue(control, \"$willEdit\", () => {\n const c = newControl(undefined);\n c.subscribe(() => {\n const currentEdit = c.current.value;\n if (currentEdit !== undefined) {\n control.value = currentEdit\n ? lastDefined.current.value\n : control.initialValue;\n }\n }, ControlChange.Value);\n return c;\n });\n}\n\nexport function getAllValues(control: Control<any>): Control<unknown[]> {\n return ensureMetaValue(control, \"$allValues\", () =>\n newControl([control.value]),\n );\n}\n\nexport function applyValues(dataNode: SchemaDataNode, value: unknown): void {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (c.isEqual(c.initialValue, value)) return;\n if (sf.collection) {\n return;\n } else if (isCompoundField(sf)) {\n if (value == null) return;\n dataNode.schema.getChildNodes().forEach((c) => {\n applyValues(\n dataNode.getChild(c),\n (value as Record<string, unknown>)[c.field.field],\n );\n });\n } else {\n const allValues = getAllValues(c);\n allValues.setValue((changes) =>\n changes.every((x) => !c.isEqual(x, value))\n ? [...changes, value]\n : changes,\n );\n }\n}\n\nexport function collectDifferences(\n dataNode: SchemaDataNode,\n values: unknown[],\n): () => { editable: number; editing: number } {\n values.forEach((v, i) => {\n if (i == 0) dataNode.control.setInitialValue(v);\n else applyValues(dataNode, v);\n });\n const allEdits: Control<boolean | undefined>[] = [];\n resetMultiValues(dataNode);\n return () => {\n let editable = 0;\n let editing = 0;\n allEdits.forEach((x) => {\n const b = x.value;\n if (b === undefined) return;\n editable++;\n if (b) editing++;\n });\n return { editing, editable };\n };\n\n function resetMultiValues(dataNode: SchemaDataNode): void {\n const c = dataNode.control;\n const sf = dataNode.schema.field;\n if (sf.collection) {\n return;\n } else if (isCompoundField(sf)) {\n if (c.value == null) return;\n dataNode.schema.getChildNodes().forEach((c) => {\n resetMultiValues(dataNode.getChild(c));\n });\n } else {\n allEdits.push(getIsEditing(c));\n const allValues = getAllValues(c);\n if (allValues.value.length > 1) {\n c.setInitialValue(undefined);\n getLastDefinedValue(c).value = null;\n }\n }\n }\n}\n","import {\n AccordionAdornment,\n ActionControlDefinition,\n AutocompleteRenderOptions,\n CheckListRenderOptions,\n ControlAdornmentType,\n ControlDefinition,\n ControlDefinitionType,\n DataControlDefinition,\n DataRenderType,\n DisplayControlDefinition,\n DisplayDataType,\n DisplayOnlyRenderOptions,\n DynamicProperty,\n DynamicPropertyType,\n GroupedControlsDefinition,\n GroupRenderType,\n HtmlDisplay,\n JsonataRenderOptions,\n RadioButtonRenderOptions,\n RenderOptions,\n TextDisplay,\n TextfieldRenderOptions,\n} from \"./controlDefinition\";\nimport { ActionRendererProps } from \"./controlRender\";\nimport { useMemo } from \"react\";\nimport { addMissingControls } from \"./util\";\nimport { mergeFields, resolveSchemas } from \"./schemaBuilder\";\nimport {\n DateValidator,\n JsonataValidator,\n LengthValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport { SchemaField, SchemaMap, SchemaNode } from \"./schemaField\";\nimport {\n DataExpression,\n DataMatchExpression,\n EntityExpression,\n ExpressionType,\n JsonataExpression,\n} from \"./entityExpression\";\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 autocompleteOptions = renderOptionsFor<AutocompleteRenderOptions>(\n DataRenderType.Autocomplete,\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 applies?: (sf: SchemaNode) => boolean;\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 { useCallback, useRef } from \"react\";\n\n/**\n * Type representing a hook dependency, which can be a string, number, undefined, or null.\n */\nexport type HookDep = string | number | undefined | null;\n\n/**\n * Interface representing a dynamic hook generator.\n * @template A - The type of the hook result.\n * @template P - The type of the hook context.\n */\nexport interface DynamicHookGenerator<A, P> {\n deps: HookDep;\n state: any;\n\n runHook(ctx: P, state: any): A;\n}\n\n/**\n * Creates a dynamic hook generator.\n * @template A - The type of the hook result.\n * @template P - The type of the hook context.\n * @template S - The type of the hook state.\n * @param runHook - The function to run the hook.\n * @param state - The initial state of the hook.\n * @param deps - The dependencies of the hook.\n * @returns The dynamic hook generator.\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\n/**\n * Type representing the value of a dynamic hook.\n * @template A - The type of the dynamic hook generator.\n */\nexport type DynamicHookValue<A> =\n A extends DynamicHookGenerator<infer V, any> ? V : never;\n\n/**\n * Converts an array of dependencies to a dependency string.\n * @template A - The type of the dependencies.\n * @param deps - The array of dependencies.\n * @param asHookDep - The function to convert a dependency to a hook dependency.\n * @returns The dependency string.\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}\n\n/**\n * Custom hook to use dynamic hooks.\n * @template P - The type of the hook context.\n * @template Hooks - The type of the hooks.\n * @param hooks - The hooks to use.\n * @returns A function that takes the hook context and returns the hook values.\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\n/**\n * Converts a value to a dependency string.\n * @param x - The value to convert.\n * @returns The dependency string.\n */\nexport function toDepString(x: any): string {\n if (x === undefined) return \"_\";\n if (x === null) return \"~\";\n return x.toString();\n}\n","import {\n ControlDefinition,\n DynamicPropertyType,\n ControlDataContext,\n getRootDataNode,\n getJsonPath,\n isDataControl,\n} from \"./controlDefinition\";\nimport React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n addAfterChangesCallback,\n collectChanges,\n Control,\n SubscriptionTracker,\n trackedValue,\n useCalculatedControl,\n useComputed,\n useControl,\n useRefState,\n} from \"@react-typed-forms/core\";\n\nimport {\n defaultValueForField,\n elementValueForField,\n getDisplayOnlyOptions,\n isControlDisabled,\n isControlReadonly,\n JsonPath,\n jsonPathString,\n} from \"./util\";\nimport jsonata from \"jsonata\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { DynamicHookGenerator, HookDep, toDepString } from \"./dynamicHooks\";\nimport {\n schemaDataForFieldRef,\n SchemaDataNode,\n SchemaInterface,\n} from \"./schemaField\";\nimport {\n DataExpression,\n DataMatchExpression,\n EntityExpression,\n ExpressionType,\n JsonataExpression,\n NotEmptyExpression,\n} from \"./entityExpression\";\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<string | undefined>(\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] = isDataControl(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)\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<V>(\n definition: ControlDefinition,\n type: DynamicPropertyType,\n useEvalExpressionHook: UseEvalExpressionHook,\n coerce: (v: any) => any = (x) => x,\n): DynamicHookGenerator<Control<V> | undefined, ControlDataContext> {\n const expression = definition.dynamic?.find((x) => x.type === type);\n return useEvalExpressionHook(\n expression?.expr,\n coerce,\n ) as DynamicHookGenerator<Control<V> | undefined, ControlDataContext>;\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 () =>\n new SubscriptionTracker(() => {\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 tracker = ref.current;\n try {\n updateRef.current++;\n control.value = coerce(\n await compiledExpr.evaluate(\n trackedValue(data, tracker.collectUsage),\n collectChanges(tracker.collectUsage, () => bindings?.value),\n ),\n );\n } finally {\n if (!--updateRef.current) tracker.update();\n }\n }\n }, [compiledExpr]);\n useEffect(() => {\n return () => {\n listenerRef.current = undefined;\n ref.current.cleanup();\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])?.as() ?? makeDefault(ctx, s[1]);\n },\n state: [dynamicValue.state, state],\n };\n}\n","import {\n ControlDefinition,\n DataControlDefinition,\n isDataControl,\n ControlDataContext,\n getRootDataNode,\n getJsonPath,\n} from \"./controlDefinition\";\nimport {\n Control,\n useValidator,\n useValueChangeEffect,\n} from \"@react-typed-forms/core\";\nimport { useCallback } from \"react\";\nimport { useUpdatedRef } from \"./util\";\nimport { useJsonataExpression } from \"./hooks\";\nimport { makeHookDepString } from \"./dynamicHooks\";\nimport {\n DateComparison,\n DateValidator,\n JsonataValidator,\n LengthValidator,\n SchemaValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport { FieldType, SchemaField, ValidationMessageType } from \"./schemaField\";\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 = isDataControl(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 );\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 { Control, ControlSetup } from \"@react-typed-forms/core\";\nimport {\n EqualityFunc,\n FieldOption,\n FieldType,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n SchemaNode,\n ValidationMessageType,\n} from \"./schemaField\";\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\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\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\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 compoundFieldSetup(f: SchemaNode): [string, ControlSetup<any>][] {\n return f.getChildNodes().map((x) => {\n const { field } = x.field;\n return [field, this.makeControlSetup(x)];\n });\n }\n\n compoundFieldEquality(f: SchemaNode): [string, EqualityFunc][] {\n return f.getChildNodes().map((x) => {\n const { field } = x.field;\n return [field, (a, b) => this.makeEqualityFunc(x)(a[field], b[field])];\n });\n }\n\n makeEqualityFunc(field: SchemaNode, element?: boolean): EqualityFunc {\n if (field.field.collection && !element) {\n const elemEqual = this.makeEqualityFunc(field, true);\n return (a, b) => {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!elemEqual(a[i], b[i])) return false;\n }\n return true;\n };\n }\n switch (field.field.type) {\n case FieldType.Compound:\n const allChecks = this.compoundFieldEquality(field);\n return (a, b) =>\n a === b ||\n (a != null && b != null && allChecks.every((x) => x[1](a, b)));\n default:\n return (a, b) => a === b;\n }\n }\n makeControlSetup(field: SchemaNode, element?: boolean): ControlSetup<any> {\n let setup: ControlSetup<any> = {\n equals: this.makeEqualityFunc(field, element),\n };\n if (field.field.collection && !element) {\n setup.elems = this.makeControlSetup(field, true);\n return setup;\n }\n switch (field.field.type) {\n case FieldType.Compound:\n setup.fields = Object.fromEntries(this.compoundFieldSetup(field));\n }\n return setup;\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 useComponentTracking,\n useComputed,\n useControl,\n useControlEffect,\n} from \"@react-typed-forms/core\";\nimport {\n AdornmentPlacement,\n ArrayActionOptions,\n ControlActionHandler,\n ControlAdornment,\n ControlAdornmentType,\n ControlDataContext,\n ControlDefinition,\n CustomDisplay,\n DataControlDefinition,\n DataRenderType,\n DisplayData,\n DisplayDataType,\n DynamicPropertyType,\n FormContextData,\n FormNode,\n GroupRenderOptions,\n isActionControl,\n isDataControl,\n isDisplayControl,\n isGroupControl,\n legacyFormNode,\n lookupDataNode,\n RenderOptions,\n} from \"./controlDefinition\";\nimport {\n applyLengthRestrictions,\n ControlClasses,\n elementValueForField,\n fieldDisplayName,\n getExternalEditData,\n getGroupClassOverrides,\n isControlDisplayOnly,\n JsonPath,\n rendererClass,\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 { useDynamicHooks } from \"./dynamicHooks\";\nimport { defaultSchemaInterface } from \"./defaultSchemaInterface\";\nimport {\n LengthValidator,\n SchemaValidator,\n ValidatorType,\n} from \"./schemaValidator\";\nimport {\n createSchemaLookup,\n FieldOption,\n makeSchemaDataNode,\n SchemaDataNode,\n SchemaField,\n SchemaInterface,\n} from \"./schemaField\";\n\n/**\n * Interface for rendering different types of form controls.\n */\nexport interface FormRenderer {\n /**\n * Renders data control.\n * @param props - Properties for data renderer.\n * @returns A function that takes layout properties and returns layout properties.\n */\n renderData: (\n props: DataRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n\n /**\n * Renders group control.\n * @param props - Properties for group renderer.\n * @returns A function that takes layout properties and returns layout properties.\n */\n renderGroup: (\n props: GroupRendererProps,\n ) => (layout: ControlLayoutProps) => ControlLayoutProps;\n\n /**\n * Renders display control.\n * @param props - Properties for display renderer.\n * @returns A React node.\n */\n renderDisplay: (props: DisplayRendererProps) => ReactNode;\n\n /**\n * Renders action control.\n * @param props - Properties for action renderer.\n * @returns A React node.\n */\n renderAction: (props: ActionRendererProps) => ReactNode;\n\n /**\n * Renders array control.\n * @param props - Properties for array renderer.\n * @returns A React node.\n */\n renderArray: (props: ArrayRendererProps) => ReactNode;\n\n /**\n * Renders adornment.\n * @param props - Properties for adornment renderer.\n * @returns An adornment renderer.\n */\n renderAdornment: (props: AdornmentProps) => AdornmentRenderer;\n\n /**\n * Renders label.\n * @param props - Properties for label renderer.\n * @param labelStart - React node to render at the start of the label.\n * @param labelEnd - React node to render at the end of the label.\n * @returns A React node.\n */\n renderLabel: (\n props: LabelRendererProps,\n labelStart: ReactNode,\n labelEnd: ReactNode,\n ) => ReactNode;\n\n /**\n * Renders layout.\n * @param props - Properties for control layout.\n * @returns A rendered control.\n */\n renderLayout: (props: ControlLayoutProps) => RenderedControl;\n\n /**\n * Renders visibility control.\n * @param props - Properties for visibility renderer.\n * @returns A React node.\n */\n renderVisibility: (props: VisibilityRendererProps) => ReactNode;\n\n /**\n * Renders label text.\n * @param props - React node for label text.\n * @returns A React node.\n */\n renderLabelText: (props: ReactNode) => ReactNode;\n}\n\nexport interface AdornmentProps {\n adornment: ControlAdornment;\n dataContext: ControlDataContext;\n useExpr?: UseEvalExpressionHook;\n designMode?: boolean;\n formOptions: FormContextOptions;\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 editAction?: (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\n/**\n * Enum representing the types of labels that can be rendered.\n */\nexport enum LabelType {\n /**\n * Label for a control.\n */\n Control,\n\n /**\n * Label for a group.\n */\n Group,\n\n /**\n * Label for text.\n */\n Text,\n}\n\n/**\n * Properties for label renderers.\n */\nexport interface LabelRendererProps {\n /**\n * The type of the label.\n */\n type: LabelType;\n\n /**\n * Whether to hide the label.\n */\n hide?: boolean | null;\n\n /**\n * The content of the label.\n */\n label: ReactNode;\n\n /**\n * Whether to show the label as being required.\n * E.g. show an asterisk next to the label.\n */\n required?: boolean | null;\n\n /**\n * The ID of the element the label is for.\n */\n forId?: string;\n\n /**\n * The CSS class name for the label.\n */\n className?: string;\n}\n\n/**\n * Properties for display renderers.\n */\nexport interface DisplayRendererProps {\n /**\n * The data to be displayed.\n */\n data: DisplayData;\n\n /**\n * A control with dynamic value for display.\n */\n display?: Control<string | undefined>;\n\n /**\n * The context for the control data.\n */\n dataContext: ControlDataContext;\n\n /**\n * The CSS class name for the display renderer.\n */\n className?: string;\n\n /**\n * The CSS styles for the display renderer.\n */\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 formNode: FormNode;\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 formNode: FormNode;\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 adjustLayout?: (\n context: ControlDataContext,\n layout: ControlLayoutProps,\n ) => ControlLayoutProps;\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 controlOrFormNode: ControlDefinition | FormNode,\n renderer: FormRenderer,\n options: ControlRenderOptions = {},\n parentDataNode: SchemaDataNode,\n): FC<{}> {\n const [definition, formNode] =\n controlOrFormNode instanceof FormNode\n ? [controlOrFormNode.definition, controlOrFormNode]\n : [controlOrFormNode, legacyFormNode(controlOrFormNode)];\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 formNode,\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 formNode,\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 isDataControl(definition) && definition.dontClearHidden,\n definition.adornments?.some(\n (x) => x.type === ControlAdornmentType.Optional,\n ) ||\n (isDataControl(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 = useComputed<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 formOptions: myOptions,\n }),\n ) ?? [];\n const labelAndChildren = renderControlLayout({\n formNode,\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 layoutProps: ControlLayoutProps = {\n ...labelAndChildren,\n adornments,\n className: rendererClass(options.layoutClass, c.layoutClass),\n style: layoutStyle.value,\n };\n const renderedControl = renderer.renderLayout(\n options.adjustLayout?.(dataContext, layoutProps) ?? layoutProps,\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 | FormNode;\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.getDataOptions(dataNode);\n const _allowed = allowedOptions?.value ?? [];\n const allowed = Array.isArray(_allowed) ? _allowed : [_allowed];\n return {\n dataNode,\n definition,\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: FormNode,\n options?: ChildRendererOptions,\n) => ReactNode;\n\nexport interface RenderControlProps {\n definition: ControlDefinition;\n formNode: FormNode;\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 formNode,\n } = props;\n\n if (isDataControl(c)) {\n return renderData(c);\n }\n if (isGroupControl(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 formNode,\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 (isActionControl(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 (isDisplayControl(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): ControlLayoutProps {\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\"\n | \"style\"\n | \"className\"\n | \"wrapLayout\"\n | \"readonly\"\n | \"disabled\"\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<\n ArrayRendererProps,\n \"addAction\" | \"removeAction\" | \"editAction\" | \"arrayControl\"\n> {\n const noun = field.displayName ?? field.field;\n const {\n addText,\n noAdd,\n removeText,\n noRemove,\n removeActionId,\n addActionId,\n editActionId,\n editText,\n disabled,\n readonly,\n designMode,\n editExternal,\n } = options ?? {};\n return {\n arrayControl: control,\n addAction:\n !readonly && !noAdd\n ? makeAdd(() => {\n if (!designMode) {\n const newValue = elementValueForField(field);\n\n if (editExternal) {\n const editData = getExternalEditData(control);\n editData.value = {\n data: [elementValueForField(field)],\n actions: [\n makeCancel(),\n makeAdd(() => {\n const newValue = (editData.fields.data.value as any[])[0];\n addElement(control, newValue);\n editData.value = undefined;\n }),\n ],\n };\n } else {\n addElement(control, newValue);\n }\n }\n })\n : undefined,\n editAction: editExternal\n ? (i: number) => ({\n actionId: editActionId ? editActionId : \"edit\",\n actionText: editText ? editText : \"Edit\",\n onClick: () => {\n if (!designMode) {\n const editData = getExternalEditData(control);\n const elementToEdit = control.as<any[]>().elements[i];\n editData.value = {\n data: [elementToEdit.current.value],\n actions: [\n makeCancel(),\n {\n actionId: \"apply\",\n actionText: \"Apply\",\n onClick: () => {\n elementToEdit.value = (\n editData.fields.data.value as any[]\n )[0];\n editData.value = undefined;\n },\n },\n ],\n };\n }\n },\n })\n : undefined,\n removeAction:\n !readonly && !noRemove\n ? (i: number) => ({\n actionId: removeActionId ? removeActionId : \"remove\",\n actionText: removeText ? removeText : \"Remove\",\n onClick: () => {\n if (!designMode) {\n removeElement(control, i);\n }\n },\n disabled,\n })\n : undefined,\n };\n\n function makeAdd(onClick: () => void): ActionRendererProps {\n return {\n actionId: addActionId ? addActionId : \"add\",\n actionText: addText ? addText : \"Add \" + noun,\n onClick,\n disabled,\n };\n }\n\n function makeCancel(): ActionRendererProps {\n return {\n actionId: \"cancel\",\n actionText: \"Cancel\",\n onClick: () => {\n getExternalEditData(control).value = undefined;\n },\n disabled,\n };\n }\n}\n\nexport function applyArrayLengthRestrictions(\n {\n arrayControl,\n min,\n max,\n editAction,\n addAction: aa,\n removeAction: ra,\n required,\n }: Pick<\n ArrayRendererProps,\n | \"addAction\"\n | \"removeAction\"\n | \"editAction\"\n | \"arrayControl\"\n | \"min\"\n | \"max\"\n | \"required\"\n >,\n disable?: boolean,\n): Pick<ArrayRendererProps, \"addAction\" | \"removeAction\" | \"editAction\"> & {\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 editAction,\n };\n}\n\nexport function fieldOptionAdornment(p: DataRendererProps) {\n return (o: FieldOption, i: number, selected: boolean) => (\n <RenderArrayElements array={p.formNode.getChildNodes()}>\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 \"./controlDefinition\";\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 { 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, OptionalAdornment,\n SetFieldAdornment,\n} from \"./controlDefinition\";\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 isOptionalAdornment(\n a: ControlAdornment,\n): a is OptionalAdornment {\n return a.type === ControlAdornmentType.Optional;\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","SchemaTags","ControlDefinitionType","DynamicPropertyType","AdornmentPlacement","ControlAdornmentType","DataRenderType","SyncTextType","GroupRenderType","DisplayDataType","findField","fields","field","find","x","isScalarField","sf","isCompoundField","type","Compound","missingField","Any","displayName","nodeForSchema","lookup","parent","node","id","getSchema","getChildNode","fieldName","schemaRef","treeChildren","childField","children","undefined","getChildNodes","noRecurse","withParent","otherRef","map","createSchemaLookup","schemaMap","schemaId","rootSchemaNode","makeSchemaDataNode","schema","control","elementIndex","dataNode","getChild","childNode","objControl","current","isNull","value","getChildElement","_control$elements","elements","schemaDataForFieldRef","fieldRef","_fieldRef$split","schemaDataForFieldPath","split","traverseSchemaPath","fieldPath","acc","next","i","length","nextField","_nextNode","nextNode","lookupField","newControl","schemaForFieldPath","getSchemaNodePath","paths","curNode","push","reverse","isCompoundNode","relativePath","child","parentPath","childPath","upLevels","downPath","slice","join","repeat","getTagParam","tag","_field$tags","tags","startsWith","substring","visitControlDefinition","visitor","defaultValue","Action","action","Data","data","Display","display","Group","group","isDisplayOnlyRenderer","options","DisplayOnly","isAutoCompleteClasses","Autocomplete","isDataGroupRenderer","isDataControl","c","isGroupControl","isActionControl","isDisplayControl","isCheckEntryClasses","Radio","CheckList","ValidatorType","DateComparison","ExpressionType","FormNode","definition","tree","overrideChildren","this","_proto","prototype","_children$map","_children","_this","childRefId","ref","controlMap","withOverrideChildren","_this2","nodeForControl","indexOrId","legacyFormNode","createFormLookup","$legacy","getForm","rootNode","getControlIds","_definition$children$","_definition$children","childEntries","flatMap","concat","formMap","formId","forms","Object","fromEntries","entries","_ref","v","controls","fieldPathForDefinition","compoundField","lookupDataNode","parentNode","fieldNamePath","traverseParents","get","until","outArray","getRootDataNode","getJsonPath","d","visitControlDataArray","context","cb","_step","_iterator","_createForOfIteratorHelperLoose","done","r","visitControlData","ctx","def","processData","dataControl","result","fieldNode","compound","collection","cIndex","_iterator2","elemChild","elemResult","cfResult","makeScalarField","n","_extends","defaultScalarField","String","defaultCompoundField","mergeField","mergeInto","existing","onlyForTypes","mergeTypes","f","s","extras","filter","includes","mergeFields","name","newFields","withType","isTypeField","addFieldOption","reduce","af","typeField","_typeField$options","some","resolveSchemas","out","keys","forEach","resolveSchemaType","resolvedFields","applyDefaultValues","doneSet","defaultValueForFields","has","_doneSet","Set","add","applyValue","applyDefaultForField","defaultValueForField","notElement","required","isRequired","childValue","notNullable","elementValueForField","fieldHasTag","Boolean","fieldDisplayName","_field$displayName","hasOptions","o","_o$options$length","_o$options","defaultControlForField","noChildren","ControlRef","title","NoControl","htmlEditor","HtmlEditor","renderOptions","Standard","addMissingControls","addMissingControlsForSchema","schemaControlMap","rootControls","toControlAndSchema","addSchemaMapEntry","addReferences","console","warn","addMissing","schemaNode","_schemaControlMap$eli","eligibleParents","addCompound","getEligibleParents","desiredGroup","ControlGroup","parentGroup","indexOf","toDefinition","entry","parentSchema","dontRegister","_c$children$map","_c$children","controlPath","dataSchema","_dataSchema","useUpdatedRef","a","useRef","isControlReadonly","readonly","isControlDisabled","disabled","getDisplayOnlyOptions","jsonPathString","jsonPath","customIndex","_customIndex","getOverrideClass","className","rendererClass","controlClass","globalClass","oc","clsx","applyLengthRestrictions","min","max","minValue","maxValue","getGroupRendererOptions","groupOptions","getGroupClassOverrides","go","childLayoutClass","childStyleClass","childLabelClass","layoutClass","styleClass","labelClass","isControlDisplayOnly","_getGroupRendererOpti","displayOnly","getExternalEditData","ensureMetaValue","getLastDefinedValue","lastDefined","subscribe","nv","ControlChange","Value","getIsEditing","currentEdit","initialValue","getAllValues","applyValues","isEqual","setValue","changes","every","validatorOptions","adornmentOptions","renderOptionsFor","autocompleteOptions","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","makeHookDepString","deps","asHookDep","toDepString","useDynamicHooks","hooks","hookEntries","state","useCallback","p","runHook","toString","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","_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","jExpr","path","pathString","fullExpr","compiledExpr","useMemo","jsonata","e","error","listenerRef","updateRef","useRefState","SubscriptionTracker","l","addAfterChangesCallback","useEffect","apply","tracker","_temp","_coerce","Promise","resolve","evaluate","trackedValue","collectUsage","collectChanges","then","_compiledExpr$evaluat","_finallyRethrows","_wasThrown","_result","update","reject","cleanup","useEvalActionHook","useExpr","ActionData","useEvalLabelText","Label","dynamicValue","makeDefault","_dynamicValue$runHook","_dynamicValue$runHook2","as","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","from","MaxLength","dv","comparisonDate","fixedDate","parseToMillis","nowDate","UTC","getFullYear","getMonth","getDate","daysFromCurrent","selDate","notAfter","comparison","NotAfter","NotAfterDate","NotBeforeDate","LabelType","DefaultSchemaInterface","boolStrings","parseDateTime","parse","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","compoundFieldSetup","makeControlSetup","compoundFieldEquality","b","makeEqualityFunc","elemEqual","allChecks","setup","equals","elems","defaultSchemaInterface","useControlRendererComponent","controlOrFormNode","renderer","parentDataNode","_options$useDataHook","_options$schemaInterf","_options$useEvalExpre","formNode","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$adornment2","_definition$adornment3","_options$adjustLayout","_r$current","_dynamicHooks","visible","visibility","showing","useControlEffect","ex","parentControl","_definition$adornment","_definition$renderOpt","dontClearHidden","adornments","Optional","NullToggle","hidden","vc","_","dontClear","dontDefault","parentNull","ro","clearHidden","myOptionsControl","_visibility$fields","myOptions","childOptions","React","renderAdornment","adornment","formOptions","labelAndChildren","renderControlLayout","renderChild","k","_ref5","overrideClasses","_objectWithoutPropertiesLoose","_excluded","dContext","NewControlRenderer","key","createDataProps","style","customDisplay","actionDataControl","actionOnClick","useEvalExpression","useChildVisibility","childDef","dontOverride","_ref6","layoutProps","renderedControl","renderLayout","adjustLayout","renderVisibility","ControlRenderer","_ref7","Render","createElement","_ref8","_ref9","_allowedOptions$value","_definition$renderOpt2","_ref9$schemaInterface","props","_excluded2","fieldOptions","_allowed","allowed","uniqueId","_fieldOptions$find","y","_c$groupOptions2","_labelText$value","_c$groupOptions3","_c$groupOptions","designMode","renderData","processLayout","renderGroup","label","hide","_props$actionDataCont","_props$actionDataCont2","_ref10","_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","Fragment","wrapMarkup","wrap","layoutKeyForPlacement","pos","ControlEnd","ControlStart","LabelStart","LabelEnd","isOneOf","isAdornmentRegistration","isDataRegistration","isGroupRegistration","isLabelRegistration","isLayoutRegistration","isVisibilityRegistration","isActionRegistration","isDisplayRegistration","isArrayRegistration","handlers","call","arguments","_handlers$i","_handlers","res","_ref13","disable","_arrayControl$element","_arrayControl$element2","editAction","aa","addAction","ra","removeAction","_applyLengthRestricti","arrayControl","removeAllowed","addAllowed","removeDisabled","addDisabled","extensions","cleanDataForSchema","removeIfDefault","typeValue","cleanableFields","_x$onlyForTypes$lengt","_x$onlyForTypes","_x$onlyForTypes2","childFields","cv","values","setInitialValue","allEdits","resetMultiValues","editable","editing","other","render","actionType","noun","_ref12","addText","removeText","noRemove","removeActionId","addActionId","editActionId","editText","editExternal","noAdd","makeAdd","newValue","editData","actions","makeCancel","addElement","elementToEdit","removeElement","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","base","findControlsForCompound","fieldNames","foundFields","currentFields","findNonDataGroups","_control$children2","getAllReferencedClasses","collectExtra","_c$children2","_collectExtra","childClasses","entryWrapperClass","selectedClass","notSelectedClass","listContainerClass","listEntryClass","chipContainerClass","chipCloseButtonClass","tc","getDiffObject","force","dirty","idField","IdField","_getElementIndex","change","old","getElementIndex","initialIndex","edit","diff","_definition$validator","lengthVal","isEditing","currentNotNull","notNull","disableIfNotEditing","html","Html","Flex","Grid","Icon","SelectChild","SetField","Tabs","o1","o2","doMerge","hasOwnProperty","_props$processLayout","_ref11","wrapLayout","sort","priority","_fieldRef$split2","text","root","rl","orig"],"mappings":"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"}
|