@react-typed-forms/schemas 9.1.1 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { Control } from "@react-typed-forms/core";
3
+ export declare function ControlInput({ control, convert, ...props }: React.InputHTMLAttributes<HTMLInputElement> & {
4
+ control: Control<any>;
5
+ convert: InputConversion;
6
+ }): React.JSX.Element;
7
+ type InputConversion = [string, (s: any) => any, (a: any) => string | number];
8
+ export declare function createInputConversion(ft: string): InputConversion;
9
+ export {};
@@ -0,0 +1,16 @@
1
+ import { ArrayRendererRegistration } from "../renderers";
2
+ import { ActionRendererProps, ArrayRendererProps } from "../controlRender";
3
+ import React, { ReactNode } from "react";
4
+ export interface DefaultArrayRendererOptions {
5
+ className?: string;
6
+ removableClass?: string;
7
+ childClass?: string;
8
+ removableChildClass?: string;
9
+ removeActionClass?: string;
10
+ addActionClass?: string;
11
+ }
12
+ export declare function createDefaultArrayRenderer(options?: DefaultArrayRendererOptions): ArrayRendererRegistration;
13
+ export interface DefaultArrayRendererProps extends DefaultArrayRendererOptions, ArrayRendererProps {
14
+ renderAction: (props: ActionRendererProps) => ReactNode;
15
+ }
16
+ export declare function DefaultArrayRenderer(props: DefaultArrayRendererProps): React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { DisplayRendererProps } from "../controlRender";
3
+ import { DisplayRendererRegistration } from "../renderers";
4
+ export interface DefaultDisplayRendererOptions {
5
+ textClassName?: string;
6
+ htmlClassName?: string;
7
+ }
8
+ export declare function createDefaultDisplayRenderer(options?: DefaultDisplayRendererOptions): DisplayRendererRegistration;
9
+ export declare function DefaultDisplay({ data, display, className, style, ...options }: DefaultDisplayRendererOptions & DisplayRendererProps): React.JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { Control } from "@react-typed-forms/core";
2
+ import { SchemaField, SchemaInterface } from "../types";
3
+ import React from "react";
4
+ export declare function DefaultDisplayOnly({ control, className, emptyText, schemaInterface, field, style, }: {
5
+ control: Control<any>;
6
+ field: SchemaField;
7
+ schemaInterface: SchemaInterface;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ emptyText?: string | null;
11
+ }): React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { RenderedLayout } from "../controlRender";
2
+ import React from "react";
3
+ export interface DefaultLayoutRendererOptions {
4
+ className?: string;
5
+ errorClass?: string;
6
+ }
7
+ export declare function DefaultLayout({ errorClass, layout: { controlEnd, controlStart, label, children, errorControl }, }: DefaultLayoutRendererOptions & {
8
+ layout: RenderedLayout;
9
+ }): React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import { VisibilityRendererProps } from "../controlRender";
2
+ import React from "react";
3
+ export declare function createDefaultVisibilityRenderer(): import("../renderers").VisibilityRendererRegistration;
4
+ export declare function DefaultVisibility({ visibility, children, className, style, divRef, }: VisibilityRendererProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { Control } from "@react-typed-forms/core";
2
+ import React from "react";
3
+ import { FieldOption } from "../types";
4
+ export interface RadioRendererOptions {
5
+ className?: string;
6
+ entryClass?: string;
7
+ radioClass?: string;
8
+ labelClass?: string;
9
+ }
10
+ export declare function createRadioRenderer(options?: RadioRendererOptions): import("../renderers").DataRendererRegistration;
11
+ export declare function RadioButtons({ control, options, labelClass, radioClass, readonly, entryClass, className, id, }: {
12
+ id?: string;
13
+ className?: string;
14
+ options?: FieldOption[] | null;
15
+ control: Control<any>;
16
+ entryClass?: string;
17
+ radioClass?: string;
18
+ labelClass?: string;
19
+ readonly?: boolean;
20
+ }): React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { Control } from "@react-typed-forms/core";
2
+ import React from "react";
3
+ import { FieldOption } from "../types";
4
+ export interface SelectRendererOptions {
5
+ className?: string;
6
+ emptyText?: string;
7
+ requiredText?: string;
8
+ }
9
+ export declare function createSelectRenderer(options?: SelectRendererOptions): import("../renderers").DataRendererRegistration;
10
+ type SelectConversion = (a: any) => string | number;
11
+ export interface SelectDataRendererProps {
12
+ id?: string;
13
+ className?: string;
14
+ options: FieldOption[];
15
+ emptyText?: string;
16
+ requiredText?: string;
17
+ readonly: boolean;
18
+ required: boolean;
19
+ state: Control<any>;
20
+ convert: SelectConversion;
21
+ }
22
+ export declare function SelectDataRenderer({ state, options, className, convert, required, emptyText, requiredText, readonly, ...props }: SelectDataRendererProps): React.JSX.Element;
23
+ export declare function createSelectConversion(ft: string): SelectConversion;
24
+ export {};
@@ -1,7 +1,7 @@
1
1
  import React, { CSSProperties, FC, Key, ReactNode } from "react";
2
2
  import { Control } from "@react-typed-forms/core";
3
3
  import { AdornmentPlacement, ControlAdornment, ControlDefinition, DataControlDefinition, DisplayData, FieldOption, GroupRenderOptions, RenderOptions, SchemaField, SchemaInterface } from "./types";
4
- import { ControlDataContext } from "./util";
4
+ import { ControlDataContext, JsonPath } from "./util";
5
5
  import { EvalExpressionHook, UseEvalExpressionHook } from "./hooks";
6
6
  export interface FormRenderer {
7
7
  renderData: (props: DataRendererProps) => (layout: ControlLayoutProps) => ControlLayoutProps;
@@ -28,12 +28,12 @@ export interface ArrayRendererProps {
28
28
  addAction?: ActionRendererProps;
29
29
  required: boolean;
30
30
  removeAction?: (elemIndex: number) => ActionRendererProps;
31
- elementCount: number;
32
31
  renderElement: (elemIndex: number) => ReactNode;
33
- elementKey: (elemIndex: number) => Key;
34
32
  arrayControl: Control<any[] | undefined | null>;
35
33
  className?: string;
36
34
  style?: React.CSSProperties;
35
+ min?: number | null;
36
+ max?: number | null;
37
37
  }
38
38
  export interface Visibility {
39
39
  visible: boolean;
@@ -87,20 +87,25 @@ export interface DisplayRendererProps {
87
87
  className?: string;
88
88
  style?: React.CSSProperties;
89
89
  }
90
+ export type ChildVisibilityFunc = (child: ControlDefinition, context?: ControlDataContext) => EvalExpressionHook<boolean>;
90
91
  export interface ParentRendererProps {
91
92
  childDefinitions: ControlDefinition[];
92
93
  renderChild: ChildRenderer;
93
94
  className?: string;
94
95
  style?: React.CSSProperties;
95
96
  dataContext: ControlDataContext;
96
- useChildVisibility: (child: number | number[]) => EvalExpressionHook<boolean>;
97
+ parentContext: ControlDataContext;
98
+ useChildVisibility: ChildVisibilityFunc;
97
99
  }
98
100
  export interface GroupRendererProps extends ParentRendererProps {
101
+ definition: ControlDefinition;
99
102
  renderOptions: GroupRenderOptions;
100
103
  }
101
104
  export interface DataRendererProps extends ParentRendererProps {
102
105
  renderOptions: RenderOptions;
106
+ definition: DataControlDefinition;
103
107
  field: SchemaField;
108
+ elementIndex?: number;
104
109
  id: string;
105
110
  control: Control<any>;
106
111
  readonly: boolean;
@@ -129,29 +134,26 @@ export interface DataControlProps {
129
134
  definition: DataControlDefinition;
130
135
  field: SchemaField;
131
136
  dataContext: ControlDataContext;
137
+ parentContext: ControlDataContext;
132
138
  control: Control<any>;
133
- options: FormContextOptions;
134
- style: React.CSSProperties | undefined;
139
+ formOptions: FormContextOptions;
140
+ style?: React.CSSProperties | undefined;
135
141
  renderChild: ChildRenderer;
142
+ elementIndex?: number;
136
143
  allowedOptions?: Control<any[] | undefined>;
137
- elementRenderer?: (elemIndex: number) => ReactNode;
138
- useChildVisibility: (child: number | number[]) => EvalExpressionHook<boolean>;
144
+ useChildVisibility: ChildVisibilityFunc;
139
145
  }
140
146
  export type CreateDataProps = (controlProps: DataControlProps) => DataRendererProps;
141
- export type JsonPath = string | number;
142
- export interface DataContext {
143
- data: Control<any>;
144
- path: JsonPath[];
145
- }
146
147
  export interface ControlRenderOptions extends FormContextOptions {
147
148
  useDataHook?: (c: ControlDefinition) => CreateDataProps;
148
149
  useEvalExpressionHook?: UseEvalExpressionHook;
149
150
  clearHidden?: boolean;
150
151
  schemaInterface?: SchemaInterface;
152
+ elementIndex?: number;
151
153
  }
152
154
  export declare function useControlRenderer(definition: ControlDefinition, fields: SchemaField[], renderer: FormRenderer, options?: ControlRenderOptions): FC<ControlRenderProps>;
153
155
  export declare function lookupSchemaField(c: ControlDefinition, fields: SchemaField[]): SchemaField | undefined;
154
- export declare function getControlData(schemaField: SchemaField | undefined, parentContext: ControlDataContext): [Control<any> | undefined, Control<any> | undefined, ControlDataContext];
156
+ export declare function getControlData(schemaField: SchemaField | undefined, parentContext: ControlDataContext, elementIndex: number | undefined): [Control<any> | undefined, Control<any> | undefined, ControlDataContext];
155
157
  export declare function ControlRenderer({ definition, fields, renderer, options, control, parentPath, }: {
156
158
  definition: ControlDefinition;
157
159
  fields: SchemaField[];
@@ -160,9 +162,13 @@ export declare function ControlRenderer({ definition, fields, renderer, options,
160
162
  control: Control<any>;
161
163
  parentPath?: JsonPath[];
162
164
  }): React.JSX.Element;
163
- export declare function defaultDataProps({ definition, field, control, options, elementRenderer, style, allowedOptions, ...props }: DataControlProps): DataRendererProps;
164
- export declare function defaultArrayProps(arrayControl: Control<any[] | undefined | null>, field: SchemaField, required: boolean, style: CSSProperties | undefined, className: string | undefined, renderElement: (elemIndex: number) => ReactNode): ArrayRendererProps;
165
- export type ChildRenderer = (k: Key, child: number | number[], parentPath?: JsonPath[]) => ReactNode;
165
+ export declare function defaultDataProps({ definition, field, control, formOptions, style, allowedOptions, ...props }: DataControlProps): DataRendererProps;
166
+ export declare function defaultArrayProps(arrayControl: Control<any[] | undefined | null>, field: SchemaField, required: boolean, style: CSSProperties | undefined, className: string | undefined, renderElement: (elemIndex: number) => ReactNode, min: number | undefined | null, max: number | undefined | null): ArrayRendererProps;
167
+ export interface ChildRendererOptions {
168
+ elementIndex?: number;
169
+ dataContext?: ControlDataContext;
170
+ }
171
+ export type ChildRenderer = (k: Key, child: ControlDefinition, options?: ChildRendererOptions) => ReactNode;
166
172
  export interface RenderControlProps {
167
173
  definition: ControlDefinition;
168
174
  renderer: FormRenderer;
@@ -170,15 +176,17 @@ export interface RenderControlProps {
170
176
  createDataProps: CreateDataProps;
171
177
  formOptions: FormContextOptions;
172
178
  dataContext: ControlDataContext;
179
+ parentContext: ControlDataContext;
173
180
  control?: Control<any>;
174
181
  labelText?: Control<string | null | undefined>;
175
- schemaField?: SchemaField;
182
+ field?: SchemaField;
183
+ elementIndex?: number;
176
184
  displayControl?: Control<string | undefined>;
177
185
  style?: React.CSSProperties;
178
186
  allowedOptions?: Control<any[] | undefined>;
179
- useChildVisibility: (child: number | number[]) => EvalExpressionHook<boolean>;
187
+ useChildVisibility: ChildVisibilityFunc;
180
188
  }
181
- export declare function renderControlLayout({ definition: c, renderer, renderChild: childRenderer, control: childControl, schemaField, dataContext, formOptions: dataOptions, createDataProps: dataProps, displayControl, style, labelText, allowedOptions, useChildVisibility, }: RenderControlProps): ControlLayoutProps;
189
+ export declare function renderControlLayout(props: RenderControlProps): ControlLayoutProps;
182
190
  export declare function appendMarkup(k: keyof Omit<RenderedLayout, "errorControl" | "style" | "className">, markup: ReactNode): (layout: RenderedLayout) => void;
183
191
  export declare function wrapMarkup(k: keyof Omit<RenderedLayout, "errorControl" | "style" | "className">, wrap: (ex: ReactNode) => ReactNode): (layout: RenderedLayout) => void;
184
192
  export declare function layoutKeyForPlacement(pos: AdornmentPlacement): keyof Omit<RenderedLayout, "errorControl" | "style" | "className">;
@@ -186,3 +194,7 @@ export declare function appendMarkupAt(pos: AdornmentPlacement, markup: ReactNod
186
194
  export declare function wrapMarkupAt(pos: AdornmentPlacement, wrap: (ex: ReactNode) => ReactNode): (layout: RenderedLayout) => void;
187
195
  export declare function renderLayoutParts(props: ControlLayoutProps, renderer: FormRenderer): RenderedLayout;
188
196
  export declare function controlTitle(title: string | undefined | null, field: SchemaField): string;
197
+ export declare function applyArrayLengthRestrictions({ arrayControl, min, max, addAction: aa, removeAction: ra, required, }: Pick<ArrayRendererProps, "addAction" | "removeAction" | "arrayControl" | "min" | "max" | "required">, disable?: boolean): Pick<ArrayRendererProps, "addAction" | "removeAction"> & {
198
+ addDisabled: boolean;
199
+ removeDisabled: boolean;
200
+ };
@@ -0,0 +1,59 @@
1
+ import { DefaultDisplayRendererOptions } from "./components/DefaultDisplay";
2
+ import { DefaultLayoutRendererOptions } from "./components/DefaultLayout";
3
+ import { ActionRendererRegistration, AdornmentRendererRegistration, DataRendererRegistration, DefaultRenderers, GroupRendererRegistration, LabelRendererRegistration } from "./renderers";
4
+ import { CSSProperties, ReactElement, ReactNode } from "react";
5
+ import { FieldOption, GridRenderer } from "./types";
6
+ import { SelectRendererOptions } from "./components/SelectDataRenderer";
7
+ import { RadioRendererOptions } from "./components/RadioRenderer";
8
+ import { DefaultArrayRendererOptions } from "./components/DefaultArrayRenderer";
9
+ export interface DefaultRendererOptions {
10
+ data?: DefaultDataRendererOptions;
11
+ display?: DefaultDisplayRendererOptions;
12
+ action?: DefaultActionRendererOptions;
13
+ array?: DefaultArrayRendererOptions;
14
+ group?: DefaultGroupRendererOptions;
15
+ label?: DefaultLabelRendererOptions;
16
+ adornment?: DefaultAdornmentRendererOptions;
17
+ layout?: DefaultLayoutRendererOptions;
18
+ }
19
+ interface StyleProps {
20
+ className?: string;
21
+ style?: CSSProperties;
22
+ }
23
+ interface DefaultActionRendererOptions {
24
+ className?: string;
25
+ }
26
+ export declare function createDefaultActionRenderer(options?: DefaultActionRendererOptions): ActionRendererRegistration;
27
+ interface DefaultGroupRendererOptions {
28
+ className?: string;
29
+ standardClassName?: string;
30
+ gridStyles?: (columns: GridRenderer) => StyleProps;
31
+ gridClassName?: string;
32
+ defaultGridColumns?: number;
33
+ flexClassName?: string;
34
+ defaultFlexGap?: string;
35
+ }
36
+ export declare function createDefaultGroupRenderer(options?: DefaultGroupRendererOptions): GroupRendererRegistration;
37
+ export declare const DefaultBoolOptions: FieldOption[];
38
+ interface DefaultDataRendererOptions {
39
+ inputClass?: string;
40
+ displayOnlyClass?: string;
41
+ selectOptions?: SelectRendererOptions;
42
+ radioOptions?: RadioRendererOptions;
43
+ booleanOptions?: FieldOption[];
44
+ optionRenderer?: DataRendererRegistration;
45
+ }
46
+ export declare function createDefaultDataRenderer(options?: DefaultDataRendererOptions): DataRendererRegistration;
47
+ export interface DefaultAdornmentRendererOptions {
48
+ }
49
+ export declare function createDefaultAdornmentRenderer(options?: DefaultAdornmentRendererOptions): AdornmentRendererRegistration;
50
+ interface DefaultLabelRendererOptions {
51
+ className?: string;
52
+ groupLabelClass?: string;
53
+ controlLabelClass?: string;
54
+ requiredElement?: ReactNode;
55
+ labelContainer?: (children: ReactElement) => ReactElement;
56
+ }
57
+ export declare function createDefaultLabelRenderer(options?: DefaultLabelRendererOptions): LabelRendererRegistration;
58
+ export declare function createDefaultRenderers(options?: DefaultRendererOptions): DefaultRenderers;
59
+ export {};
@@ -0,0 +1,3 @@
1
+ import { FormRenderer } from "./controlRender";
2
+ import { DefaultRenderers, RendererRegistration } from "./renderers";
3
+ export declare function createFormRenderer(customRenderers?: RendererRegistration[], defaultRenderers?: DefaultRenderers): FormRenderer;
package/lib/hooks.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { ControlDefinition, DynamicPropertyType, EntityExpression, SchemaField, SchemaInterface } from "./types";
2
2
  import React from "react";
3
3
  import { Control } from "@react-typed-forms/core";
4
- import { ControlDataContext, DynamicHookGenerator } from "./util";
5
- import { DataContext } from "./controlRender";
4
+ import { ControlDataContext, DataContext, DynamicHookGenerator } from "./util";
6
5
  export type EvalExpressionHook<A = any> = DynamicHookGenerator<Control<A | undefined>, ControlDataContext>;
7
6
  export type UseEvalExpressionHook = (expr: EntityExpression | undefined) => DynamicHookGenerator<Control<any> | undefined, ControlDataContext>;
8
7
  export declare function useEvalVisibilityHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition, schemaField?: SchemaField): EvalExpressionHook<boolean>;
@@ -11,7 +10,7 @@ export declare function useEvalStyleHook(useEvalExpressionHook: UseEvalExpressio
11
10
  export declare function useEvalAllowedOptionsHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition): EvalExpressionHook<any[]>;
12
11
  export declare function useEvalDisabledHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition): EvalExpressionHook<boolean>;
13
12
  export declare function useEvalDisplayHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition): DynamicHookGenerator<Control<string | undefined> | undefined, ControlDataContext>;
14
- export declare function useEvalDefaultValueHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition, schemaField?: SchemaField): EvalExpressionHook;
13
+ export declare function useEvalDefaultValueHook(useEvalExpressionHook: UseEvalExpressionHook, definition: ControlDefinition, schemaField: SchemaField | undefined, element: boolean): EvalExpressionHook;
15
14
  export declare function defaultEvalHooks(expr: EntityExpression, context: ControlDataContext): Control<any>;
16
15
  export declare const defaultUseEvalExpressionHook: UseEvalExpressionHook;
17
16
  export declare function makeEvalExpressionHook(f: (expr: EntityExpression, context: ControlDataContext) => Control<any>): UseEvalExpressionHook;
package/lib/index.d.ts CHANGED
@@ -8,3 +8,12 @@ export * from "./tailwind";
8
8
  export * from "./validators";
9
9
  export * from "./hooks";
10
10
  export * from "./schemaInterface";
11
+ export * from "./createDefaultRenderers";
12
+ export * from "./createFormRenderer";
13
+ export * from "./components/DefaultDisplay";
14
+ export * from "./components/ControlInput";
15
+ export * from "./components/SelectDataRenderer";
16
+ export * from "./components/RadioRenderer";
17
+ export * from "./components/DefaultLayout";
18
+ export * from "./components/DefaultDisplayOnly";
19
+ export * from "./components/DefaultVisibility";