@react-typed-forms/schemas 5.0.2 → 6.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.
package/lib/internal.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import { Control } from "@react-typed-forms/core";
2
2
  export declare function useCalculatedControl<V>(calculate: () => V): Control<V>;
3
+ export declare function cc(n: string | null | undefined): string | undefined;
@@ -1,7 +1,7 @@
1
1
  import React, { CSSProperties, ReactElement, ReactNode } from "react";
2
2
  import { Control } from "@react-typed-forms/core";
3
- import { ActionRendererProps, AdornmentProps, AdornmentRenderer, ArrayRendererProps, ControlLayoutProps, DataRendererProps, DisplayRendererProps, FormRenderer, GroupRendererProps, LabelRendererProps, LabelType, RenderedLayout, Visibility } from "./controlRender";
4
- import { FieldOption, GridRenderer } from "./types";
3
+ import { ActionRendererProps, AdornmentProps, AdornmentRenderer, ArrayRendererProps, ControlLayoutProps, DataRendererProps, DisplayRendererProps, FormRenderer, GroupRendererProps, LabelRendererProps, LabelType, RenderedControl, RenderedLayout, VisibilityRendererProps } from "./controlRender";
4
+ import { ControlAdornment, FieldOption, GridRenderer, IconAdornment, SchemaField, SchemaInterface } from "./types";
5
5
  export interface DefaultRenderers {
6
6
  data: DataRendererRegistration;
7
7
  label: LabelRendererRegistration;
@@ -16,7 +16,7 @@ export interface DefaultRenderers {
16
16
  export interface LayoutRendererRegistration {
17
17
  type: "layout";
18
18
  match?: (props: ControlLayoutProps) => boolean;
19
- render: (props: ControlLayoutProps, renderers: FormRenderer) => ReactNode;
19
+ render: (props: ControlLayoutProps, renderers: FormRenderer) => RenderedControl;
20
20
  }
21
21
  export interface DataRendererRegistration {
22
22
  type: "data";
@@ -44,7 +44,7 @@ export interface ArrayRendererRegistration {
44
44
  export interface GroupRendererRegistration {
45
45
  type: "group";
46
46
  renderType?: string | string[];
47
- render: (props: GroupRendererProps, renderers: FormRenderer) => ReactElement;
47
+ render: (props: GroupRendererProps, renderers: FormRenderer) => ReactElement | ((layout: ControlLayoutProps) => ControlLayoutProps);
48
48
  }
49
49
  export interface DisplayRendererRegistration {
50
50
  type: "display";
@@ -58,7 +58,7 @@ export interface AdornmentRendererRegistration {
58
58
  }
59
59
  export interface VisibilityRendererRegistration {
60
60
  type: "visibility";
61
- render: (visibility: Control<Visibility | undefined>, children: () => ReactNode) => ReactNode;
61
+ render: (props: VisibilityRendererProps) => ReactNode;
62
62
  }
63
63
  export type RendererRegistration = DataRendererRegistration | GroupRendererRegistration | DisplayRendererRegistration | ActionRendererRegistration | LabelRendererRegistration | ArrayRendererRegistration | AdornmentRendererRegistration | LayoutRendererRegistration | VisibilityRendererRegistration;
64
64
  export declare function createFormRenderer(customRenderers?: RendererRegistration[], defaultRenderers?: DefaultRenderers): FormRenderer;
@@ -91,6 +91,8 @@ interface DefaultGroupRendererOptions {
91
91
  gridStyles?: (columns: GridRenderer) => StyleProps;
92
92
  gridClassName?: string;
93
93
  defaultGridColumns?: number;
94
+ flexClassName?: string;
95
+ defaultFlexGap?: string;
94
96
  }
95
97
  export declare function createDefaultGroupRenderer(options?: DefaultGroupRendererOptions): GroupRendererRegistration;
96
98
  export interface DefaultDisplayRendererOptions {
@@ -98,14 +100,24 @@ export interface DefaultDisplayRendererOptions {
98
100
  htmlClassName?: string;
99
101
  }
100
102
  export declare function createDefaultDisplayRenderer(options?: DefaultDisplayRendererOptions): DisplayRendererRegistration;
103
+ export declare function DefaultDisplay({ data, display, className, style, ...options }: DefaultDisplayRendererOptions & DisplayRendererProps): React.JSX.Element;
101
104
  export declare const DefaultBoolOptions: FieldOption[];
102
105
  interface DefaultDataRendererOptions {
103
106
  inputClass?: string;
107
+ displayOnlyClass?: string;
104
108
  selectOptions?: SelectRendererOptions;
105
109
  booleanOptions?: FieldOption[];
106
110
  optionRenderer?: DataRendererRegistration;
107
111
  }
108
112
  export declare function createDefaultDataRenderer(options?: DefaultDataRendererOptions): DataRendererRegistration;
113
+ export declare function DefaultDisplayOnly({ control, className, emptyText, schemaInterface, field, style, }: {
114
+ control: Control<any>;
115
+ field: SchemaField;
116
+ schemaInterface: SchemaInterface;
117
+ className?: string;
118
+ style?: React.CSSProperties;
119
+ emptyText?: string | null;
120
+ }): React.JSX.Element;
109
121
  export declare function ControlInput({ control, convert, ...props }: React.InputHTMLAttributes<HTMLInputElement> & {
110
122
  control: Control<any>;
111
123
  convert: InputConversion;
@@ -128,6 +140,7 @@ export interface DefaultRendererOptions {
128
140
  layout?: DefaultLayoutRendererOptions;
129
141
  }
130
142
  export declare function createDefaultRenderers(options?: DefaultRendererOptions): DefaultRenderers;
143
+ export declare function isIconAdornment(a: ControlAdornment): a is IconAdornment;
131
144
  export declare function createLayoutRenderer(render: LayoutRendererRegistration["render"], options?: Partial<LayoutRendererRegistration>): LayoutRendererRegistration;
132
145
  export declare function createArrayRenderer(render: ArrayRendererRegistration["render"], options?: Partial<ArrayRendererRegistration>): ArrayRendererRegistration;
133
146
  export declare function createDataRenderer(render: DataRendererRegistration["render"], options?: Partial<DataRendererRegistration>): DataRendererRegistration;
@@ -160,11 +173,8 @@ export declare function createSelectConversion(ft: string): SelectConversion;
160
173
  type InputConversion = [string, (s: any) => any, (a: any) => string | number];
161
174
  export declare function createInputConversion(ft: string): InputConversion;
162
175
  export declare function createDefaultVisibilityRenderer(): VisibilityRendererRegistration;
163
- export declare function DefaultVisibility({ visibility, children, }: {
164
- visibility: Control<Visibility | undefined>;
165
- children: () => ReactNode;
166
- }): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
167
- export declare function DefaultLayout({ className, errorClass, layout: { controlEnd, controlStart, label, children, errorControl }, }: DefaultLayoutRendererOptions & {
176
+ export declare function DefaultVisibility({ visibility, children, className, style, divRef, }: VisibilityRendererProps): React.JSX.Element;
177
+ export declare function DefaultLayout({ errorClass, className, layout: { controlEnd, controlStart, label, children, errorControl }, }: DefaultLayoutRendererOptions & {
168
178
  layout: RenderedLayout;
169
179
  }): React.JSX.Element;
170
180
  export {};
@@ -0,0 +1,4 @@
1
+ import { SchemaField, SchemaInterface } from "./types";
2
+ export declare const defaultSchemaInterface: SchemaInterface;
3
+ export declare function defaultIsEmpty(f: SchemaField, value: any): boolean;
4
+ export declare function defaultTextValue(f: SchemaField, value: any): string | undefined;
package/lib/types.d.ts CHANGED
@@ -42,9 +42,15 @@ export interface CompoundField extends SchemaField {
42
42
  treeChildren?: boolean;
43
43
  }
44
44
  export type AnyControlDefinition = DataControlDefinition | GroupedControlsDefinition | ActionControlDefinition | DisplayControlDefinition;
45
+ export interface SchemaInterface {
46
+ isEmptyValue(field: SchemaField, value: any): boolean;
47
+ textValue(field: SchemaField, value: any, element?: boolean): string | undefined;
48
+ }
45
49
  export interface ControlDefinition {
46
50
  type: string;
47
51
  title?: string | null;
52
+ styleClass?: string | null;
53
+ layoutClass?: string | null;
48
54
  dynamic?: DynamicProperty[] | null;
49
55
  adornments?: ControlAdornment[] | null;
50
56
  children?: ControlDefinition[] | null;
@@ -63,22 +69,30 @@ export declare enum DynamicPropertyType {
63
69
  Visible = "Visible",
64
70
  DefaultValue = "DefaultValue",
65
71
  Readonly = "Readonly",
66
- Disabled = "Disabled"
72
+ Disabled = "Disabled",
73
+ Display = "Display",
74
+ Style = "Style",
75
+ LayoutStyle = "LayoutStyle"
67
76
  }
68
77
  export interface EntityExpression {
69
78
  type: string;
70
79
  }
71
80
  export declare enum ExpressionType {
72
81
  Jsonata = "Jsonata",
73
- FieldValue = "FieldValue",
82
+ Data = "Data",
83
+ DataMatch = "FieldValue",
74
84
  UserMatch = "UserMatch"
75
85
  }
76
86
  export interface JsonataExpression extends EntityExpression {
77
87
  type: ExpressionType.Jsonata;
78
88
  expression: string;
79
89
  }
80
- export interface FieldValueExpression extends EntityExpression {
81
- type: ExpressionType.FieldValue;
90
+ export interface DataExpression extends EntityExpression {
91
+ type: ExpressionType.Data;
92
+ field: string;
93
+ }
94
+ export interface DataMatchExpression extends EntityExpression {
95
+ type: ExpressionType.DataMatch;
82
96
  field: string;
83
97
  value: any;
84
98
  }
@@ -98,7 +112,13 @@ export declare enum AdornmentPlacement {
98
112
  export declare enum ControlAdornmentType {
99
113
  Tooltip = "Tooltip",
100
114
  Accordion = "Accordion",
101
- HelpText = "HelpText"
115
+ HelpText = "HelpText",
116
+ Icon = "Icon"
117
+ }
118
+ export interface IconAdornment extends ControlAdornment {
119
+ type: ControlAdornmentType.Icon;
120
+ iconClass: string;
121
+ placement?: AdornmentPlacement | null;
102
122
  }
103
123
  export interface TooltipAdornment extends ControlAdornment {
104
124
  type: ControlAdornmentType.Tooltip;
@@ -112,7 +132,7 @@ export interface AccordionAdornment extends ControlAdornment {
112
132
  export interface HelpTextAdornment extends ControlAdornment {
113
133
  type: ControlAdornmentType.HelpText;
114
134
  helpText: string;
115
- placement: AdornmentPlacement;
135
+ placement?: AdornmentPlacement | null;
116
136
  }
117
137
  export interface DataControlDefinition extends ControlDefinition {
118
138
  type: ControlDefinitionType.Data;
@@ -138,7 +158,8 @@ export declare enum DataRenderType {
138
158
  IconSelector = "IconSelector",
139
159
  DateTime = "DateTime",
140
160
  Checkbox = "Checkbox",
141
- Dropdown = "Dropdown"
161
+ Dropdown = "Dropdown",
162
+ DisplayOnly = "DisplayOnly"
142
163
  }
143
164
  export interface RadioButtonRenderOptions extends RenderOptions {
144
165
  type: DataRenderType.Radio;
@@ -158,6 +179,11 @@ export interface IconListRenderOptions extends RenderOptions {
158
179
  type: DataRenderType.IconList;
159
180
  iconMappings: IconMapping[];
160
181
  }
182
+ export interface DisplayOnlyRenderOptions extends RenderOptions {
183
+ type: DataRenderType.DisplayOnly;
184
+ emptyText?: string | null;
185
+ sampleText?: string | null;
186
+ }
161
187
  export interface IconMapping {
162
188
  value: string;
163
189
  materialIcon?: string | null;
@@ -195,11 +221,17 @@ export interface GroupRenderOptions {
195
221
  export declare enum GroupRenderType {
196
222
  Standard = "Standard",
197
223
  Grid = "Grid",
224
+ Flex = "Flex",
198
225
  GroupElement = "GroupElement"
199
226
  }
200
227
  export interface StandardGroupRenderer extends GroupRenderOptions {
201
228
  type: GroupRenderType.Standard;
202
229
  }
230
+ export interface FlexRenderer extends GroupRenderOptions {
231
+ type: GroupRenderType.Flex;
232
+ direction?: string | null;
233
+ gap?: string | null;
234
+ }
203
235
  export interface GroupElementRenderer extends GroupRenderOptions {
204
236
  type: GroupRenderType.GroupElement;
205
237
  value: any;
@@ -217,12 +249,17 @@ export interface DisplayData {
217
249
  }
218
250
  export declare enum DisplayDataType {
219
251
  Text = "Text",
220
- Html = "Html"
252
+ Html = "Html",
253
+ Icon = "Icon"
221
254
  }
222
255
  export interface TextDisplay extends DisplayData {
223
256
  type: DisplayDataType.Text;
224
257
  text: string;
225
258
  }
259
+ export interface IconDisplay extends DisplayData {
260
+ type: DisplayDataType.Icon;
261
+ iconClass: string;
262
+ }
226
263
  export interface HtmlDisplay extends DisplayData {
227
264
  type: DisplayDataType.Html;
228
265
  html: string;
@@ -264,3 +301,5 @@ export interface ControlVisitor<A> {
264
301
  }
265
302
  export declare function visitControlDefinition<A>(x: ControlDefinition, visitor: ControlVisitor<A>, defaultValue: (c: ControlDefinition) => A): A;
266
303
  export declare function isGridRenderer(options: GroupRenderOptions): options is GridRenderer;
304
+ export declare function isFlexRenderer(options: GroupRenderOptions): options is FlexRenderer;
305
+ export declare function isDisplayOnlyRenderer(options: RenderOptions): options is DisplayOnlyRenderOptions;
package/lib/util.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { CompoundField, ControlDefinition, DataControlDefinition, FieldOption, GroupedControlsDefinition, SchemaField } from "./types";
1
+ import { CompoundField, ControlDefinition, DataControlDefinition, DisplayOnlyRenderOptions, FieldOption, GroupedControlsDefinition, SchemaField, SchemaInterface } from "./types";
2
2
  import { MutableRefObject } from "react";
3
3
  import { Control } from "@react-typed-forms/core";
4
- export interface ControlGroupContext {
4
+ export interface ControlDataContext {
5
5
  groupControl: Control<any>;
6
6
  fields: SchemaField[];
7
+ schemaInterface: SchemaInterface;
7
8
  }
8
9
  export declare function applyDefaultValues(v: {
9
10
  [k: string]: any;
@@ -28,9 +29,10 @@ export declare function defaultControlForField(sf: SchemaField): DataControlDefi
28
29
  export declare function addMissingControls(fields: SchemaField[], controls: ControlDefinition[]): ControlDefinition[];
29
30
  export declare function useUpdatedRef<A>(a: A): MutableRefObject<A>;
30
31
  export declare function isControlReadonly(c: ControlDefinition): boolean;
31
- export declare function getTypeField(context: ControlGroupContext): Control<string> | undefined;
32
- export declare function visitControlDataArray<A>(controls: ControlDefinition[] | undefined | null, context: ControlGroupContext, cb: (definition: DataControlDefinition, field: SchemaField, control: Control<any>, element: boolean) => A | undefined): A | undefined;
33
- export declare function visitControlData<A>(definition: ControlDefinition, ctx: ControlGroupContext, cb: (definition: DataControlDefinition, field: SchemaField, control: Control<any>, element: boolean) => A | undefined): A | undefined;
32
+ export declare function getDisplayOnlyOptions(d: ControlDefinition): DisplayOnlyRenderOptions | undefined;
33
+ export declare function getTypeField(context: ControlDataContext): Control<string> | undefined;
34
+ export declare function visitControlDataArray<A>(controls: ControlDefinition[] | undefined | null, context: ControlDataContext, cb: (definition: DataControlDefinition, field: SchemaField, control: Control<any>, element: boolean) => A | undefined): A | undefined;
35
+ export declare function visitControlData<A>(definition: ControlDefinition, ctx: ControlDataContext, cb: (definition: DataControlDefinition, field: SchemaField, control: Control<any>, element: boolean) => A | undefined): A | undefined;
34
36
  export declare function cleanDataForSchema(v: {
35
37
  [k: string]: any;
36
38
  } | undefined, fields: SchemaField[]): any;
@@ -1,4 +1,4 @@
1
1
  import { ControlDefinition } from "./types";
2
2
  import { Control } from "@react-typed-forms/core";
3
- import { ControlGroupContext } from "./util";
4
- export declare function useValidationHook(definition: ControlDefinition): (control: Control<any>, hidden: boolean, groupContext: ControlGroupContext) => void;
3
+ import { ControlDataContext } from "./util";
4
+ export declare function useValidationHook(definition: ControlDefinition): (control: Control<any>, hidden: boolean, groupContext: ControlDataContext) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-typed-forms/schemas",
3
- "version": "5.0.2",
3
+ "version": "6.0.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "material-ui"
25
25
  ],
26
26
  "dependencies": {
27
- "@react-typed-forms/core": "^3.0.0-dev.117",
27
+ "@react-typed-forms/core": "^3.0.0",
28
28
  "clsx": "^1 || ^2",
29
29
  "jsonata": "^2.0.4",
30
30
  "react": "^18.2.0"
@@ -2,13 +2,13 @@ import {
2
2
  ControlDefinition,
3
3
  ControlDefinitionType,
4
4
  DataControlDefinition,
5
+ DataMatchExpression,
5
6
  DisplayControlDefinition,
6
7
  DisplayDataType,
7
8
  DynamicProperty,
8
9
  DynamicPropertyType,
9
10
  EntityExpression,
10
11
  ExpressionType,
11
- FieldValueExpression,
12
12
  GroupedControlsDefinition,
13
13
  GroupRenderType,
14
14
  HtmlDisplay,
@@ -66,8 +66,8 @@ export function dynamicDisabled(expr: EntityExpression): DynamicProperty {
66
66
  return { type: DynamicPropertyType.Disabled, expr };
67
67
  }
68
68
 
69
- export function fieldEqExpr(field: string, value: any): FieldValueExpression {
70
- return { type: ExpressionType.FieldValue, field, value };
69
+ export function fieldEqExpr(field: string, value: any): DataMatchExpression {
70
+ return { type: ExpressionType.DataMatch, field, value };
71
71
  }
72
72
  export function jsonataExpr(expression: string): JsonataExpression {
73
73
  return { type: ExpressionType.Jsonata, expression };