@react-typed-forms/schemas 15.2.0 → 16.0.1

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,39 @@
1
+ import { ControlRenderOptions, ControlRenderProps, FormRenderer } from "./controlRender";
2
+ import React, { FC } from "react";
3
+ import { ControlDefinition, FormNode, JsonPath, SchemaDataNode, SchemaField } from "@astroapps/forms-core";
4
+ import { Control } from "@react-typed-forms/core";
5
+ export interface RenderFormProps {
6
+ data: SchemaDataNode;
7
+ form: FormNode;
8
+ renderer: FormRenderer;
9
+ options?: ControlRenderOptions;
10
+ }
11
+ export declare function RenderForm({ data, form, renderer, options, }: RenderFormProps): React.ReactNode;
12
+ /**
13
+ * @deprecated Use RenderForm instead.
14
+ */
15
+ export declare function useControlRendererComponent(controlOrFormNode: ControlDefinition | FormNode, renderer: FormRenderer, options: ControlRenderOptions | undefined, parentDataNode: SchemaDataNode): FC<{}>;
16
+ /**
17
+ * @deprecated Use RenderForm instead.
18
+ */
19
+ export declare function ControlRenderer({ definition, fields, renderer, options, control, parentPath, }: {
20
+ definition: ControlDefinition;
21
+ fields: SchemaField[];
22
+ renderer: FormRenderer;
23
+ options?: ControlRenderOptions;
24
+ control: Control<any>;
25
+ parentPath?: JsonPath[];
26
+ }): JSX.Element;
27
+ /**
28
+ * @deprecated Use RenderForm instead.
29
+ */
30
+ export declare function NewControlRenderer({ definition, renderer, options, parentDataNode, }: {
31
+ definition: ControlDefinition | FormNode;
32
+ renderer: FormRenderer;
33
+ options?: ControlRenderOptions;
34
+ parentDataNode: SchemaDataNode;
35
+ }): JSX.Element;
36
+ /**
37
+ * @deprecated Use RenderForm instead.
38
+ */
39
+ export declare function useControlRenderer(definition: ControlDefinition, fields: SchemaField[], renderer: FormRenderer, options?: ControlRenderOptions): FC<ControlRenderProps>;
@@ -1,8 +1,5 @@
1
- import { AccordionAdornment, ActionControlDefinition, AutocompleteRenderOptions, CheckListRenderOptions, ControlAdornmentType, ControlDefinition, DataControlDefinition, DataRenderType, DisplayControlDefinition, DisplayOnlyRenderOptions, DynamicProperty, GroupedControlsDefinition, JsonataRenderOptions, RadioButtonRenderOptions, RenderOptions, TextfieldRenderOptions } from "./controlDefinition";
2
- import { ActionRendererProps } from "./controlRender";
3
- import { DateValidator, JsonataValidator, LengthValidator, ValidatorType } from "./schemaValidator";
4
- import { SchemaField, SchemaMap, SchemaNode } from "./schemaField";
5
- import { DataExpression, DataMatchExpression, EntityExpression, JsonataExpression } from "./entityExpression";
1
+ import { AccordionAdornment, ActionControlDefinition, AutocompleteRenderOptions, CheckListRenderOptions, ControlAdornmentType, ControlDefinition, DataControlDefinition, DataExpression, DataMatchExpression, DataRenderType, DateValidator, DisplayControlDefinition, DisplayOnlyRenderOptions, DynamicProperty, EntityExpression, GroupedControlsDefinition, JsonataExpression, JsonataRenderOptions, JsonataValidator, LengthValidator, RadioButtonRenderOptions, RenderOptions, SchemaField, SchemaMap, SchemaNode, TextfieldRenderOptions, ValidatorType } from "@astroapps/forms-core";
2
+ import { ActionRendererProps } from "./types";
6
3
  export declare function dataControl(field: string, title?: string | null, options?: Partial<DataControlDefinition>): DataControlDefinition;
7
4
  export declare function validatorOptions<A extends {
8
5
  type: string;
@@ -47,7 +44,7 @@ export declare function jsonataExpr(expression: string): JsonataExpression;
47
44
  export declare function groupedControl(children: ControlDefinition[], title?: string, options?: Partial<GroupedControlsDefinition>): GroupedControlsDefinition;
48
45
  export declare function compoundControl(field: string, title: string | undefined, children: ControlDefinition[], options?: Partial<DataControlDefinition>): DataControlDefinition;
49
46
  export declare function actionControl(actionText: string, actionId: string, options?: Partial<ActionControlDefinition>): ActionControlDefinition;
50
- export declare function createAction(actionId: string, onClick: () => void, actionText?: string, options?: Partial<ActionRendererProps>): ActionRendererProps;
47
+ export declare function createAction(actionId: string, onClick: () => void, actionText?: string | null, options?: Partial<ActionRendererProps>): ActionRendererProps;
51
48
  export declare const emptyGroupDefinition: GroupedControlsDefinition;
52
49
  export declare function useControlDefinitionForSchema(sf: SchemaField[], definition?: GroupedControlsDefinition): GroupedControlsDefinition;
53
50
  export interface EditorGroup {
@@ -1,20 +1,70 @@
1
- import React, { ButtonHTMLAttributes, ElementType, FC, HTMLAttributes, InputHTMLAttributes, Key, LabelHTMLAttributes, ReactElement, ReactNode } from "react";
1
+ import React, { ComponentType, ElementType, HTMLAttributes, Key, ReactElement, ReactNode } from "react";
2
2
  import { Control } from "@react-typed-forms/core";
3
- import { AdornmentPlacement, ArrayActionOptions, ControlActionHandler, ControlAdornment, ControlDataContext, ControlDefinition, DataControlDefinition, DisplayData, FormContextData, FormNode, GroupRenderOptions, RenderOptions } from "./controlDefinition";
4
- import { ControlClasses, JsonPath } from "./util";
5
- import { EvalExpressionHook, UseEvalExpressionHook } from "./hooks";
6
- import { ValidationContext } from "./validators";
7
- import { SchemaValidator } from "./schemaValidator";
8
- import { FieldOption, SchemaDataNode, SchemaField, SchemaInterface } from "./schemaField";
3
+ import { AdornmentPlacement, ArrayActionOptions, ControlAdornment, ControlDefinition, ControlState, DataControlDefinition, DisplayData, FieldOption, FormContextOptions, FormNode, FormState, GroupRenderOptions, JsonPath, RenderOptions, SchemaDataNode, SchemaField, SchemaInterface } from "@astroapps/forms-core";
4
+ import { ControlClasses } from "./util";
5
+ import { ActionRendererProps, ControlActionHandler, ControlDataContext, RunExpression } from "./types";
6
+ export interface HtmlIconProperties {
7
+ className?: string;
8
+ style?: React.CSSProperties;
9
+ iconLibrary?: string;
10
+ iconName?: string;
11
+ }
12
+ export interface HtmlLabelProperties {
13
+ htmlFor?: string;
14
+ className?: string;
15
+ textClass?: string;
16
+ children?: ReactNode;
17
+ }
18
+ export interface HtmlDivProperties {
19
+ id?: string;
20
+ className?: string;
21
+ textClass?: string;
22
+ style?: React.CSSProperties;
23
+ children?: ReactNode;
24
+ text?: string;
25
+ html?: string;
26
+ nativeRef?: (e: HTMLElement | null) => void;
27
+ inline?: boolean;
28
+ }
29
+ export interface HtmlInputProperties {
30
+ id?: string;
31
+ className?: string;
32
+ textClass?: string;
33
+ name?: string;
34
+ type?: string;
35
+ checked?: boolean;
36
+ style?: React.CSSProperties;
37
+ readOnly?: boolean;
38
+ placeholder?: string;
39
+ value?: string | number;
40
+ onBlur?: () => void;
41
+ disabled?: boolean;
42
+ inputRef?: (e: HTMLElement | null) => void;
43
+ onChangeValue?: (value: string) => void;
44
+ onChangeChecked?: (checked: boolean) => void;
45
+ }
46
+ export interface HtmlButtonProperties {
47
+ className?: string;
48
+ textClass?: string;
49
+ disabled?: boolean;
50
+ style?: React.CSSProperties;
51
+ onClick?: () => void;
52
+ inline?: boolean;
53
+ children?: ReactNode;
54
+ title?: string;
55
+ notWrapInText?: boolean;
56
+ androidRippleColor?: string;
57
+ nonTextContent?: boolean;
58
+ }
9
59
  export interface HtmlComponents {
10
- Div: ElementType<HTMLAttributes<HTMLDivElement>, "div">;
60
+ Div: ComponentType<HtmlDivProperties>;
11
61
  Span: ElementType<HTMLAttributes<HTMLSpanElement>>;
12
- Button: ElementType<ButtonHTMLAttributes<HTMLButtonElement>>;
13
- I: ElementType<HTMLAttributes<HTMLElement>>;
14
- Label: ElementType<LabelHTMLAttributes<HTMLLabelElement>>;
62
+ Button: ComponentType<HtmlButtonProperties>;
63
+ I: ComponentType<HtmlIconProperties>;
64
+ Label: ComponentType<HtmlLabelProperties>;
15
65
  B: ElementType<HTMLAttributes<HTMLElement>>;
16
66
  H1: ElementType<HTMLAttributes<HTMLElement>>;
17
- Input: ElementType<InputHTMLAttributes<HTMLInputElement>, "input">;
67
+ Input: ComponentType<HtmlInputProperties>;
18
68
  }
19
69
  /**
20
70
  * Interface for rendering different types of form controls.
@@ -82,13 +132,12 @@ export interface FormRenderer {
82
132
  * @returns A React node.
83
133
  */
84
134
  renderLabelText: (props: ReactNode) => ReactNode;
85
- renderText: (props: ReactNode, className?: string) => ReactNode;
86
135
  html: HtmlComponents;
87
136
  }
88
137
  export interface AdornmentProps {
89
138
  adornment: ControlAdornment;
90
139
  dataContext: ControlDataContext;
91
- useExpr?: UseEvalExpressionHook;
140
+ runExpression?: RunExpression;
92
141
  designMode?: boolean;
93
142
  formOptions: FormContextOptions;
94
143
  }
@@ -127,12 +176,14 @@ export interface RenderedLayout {
127
176
  className?: string;
128
177
  style?: React.CSSProperties;
129
178
  wrapLayout: (layout: ReactElement) => ReactElement;
179
+ inline?: boolean;
130
180
  }
131
181
  export interface RenderedControl {
132
182
  children: ReactNode;
133
183
  className?: string;
134
184
  style?: React.CSSProperties;
135
185
  divRef?: (cb: HTMLElement | null) => void;
186
+ inline?: boolean;
136
187
  }
137
188
  export interface VisibilityRendererProps extends RenderedControl {
138
189
  visibility: Control<Visibility | undefined>;
@@ -145,6 +196,7 @@ export interface ControlLayoutProps {
145
196
  processLayout?: (props: ControlLayoutProps) => ControlLayoutProps;
146
197
  className?: string | null;
147
198
  style?: React.CSSProperties;
199
+ inline?: boolean;
148
200
  }
149
201
  /**
150
202
  * Enum representing the types of labels that can be rendered.
@@ -192,6 +244,10 @@ export interface LabelRendererProps {
192
244
  * The CSS class name for the label.
193
245
  */
194
246
  className?: string;
247
+ /**
248
+ * The CSS class name for the label text.
249
+ */
250
+ textClass?: string;
195
251
  }
196
252
  /**
197
253
  * Properties for display renderers.
@@ -213,21 +269,25 @@ export interface DisplayRendererProps {
213
269
  * The CSS class name for the display renderer.
214
270
  */
215
271
  className?: string;
272
+ textClass?: string;
216
273
  /**
217
274
  * The CSS styles for the display renderer.
218
275
  */
219
276
  style?: React.CSSProperties;
277
+ inline?: boolean;
220
278
  }
221
- export type ChildVisibilityFunc = (child: ControlDefinition, parentNode?: SchemaDataNode, dontOverride?: boolean) => EvalExpressionHook<boolean>;
222
279
  export interface ParentRendererProps {
223
280
  formNode: FormNode;
281
+ state: ControlState;
224
282
  renderChild: ChildRenderer;
225
283
  className?: string;
284
+ textClass?: string;
226
285
  style?: React.CSSProperties;
227
286
  dataContext: ControlDataContext;
228
- useChildVisibility: ChildVisibilityFunc;
229
- useEvalExpression: UseEvalExpressionHook;
287
+ getChildState(node: FormNode, parent?: SchemaDataNode): ControlState;
288
+ runExpression: RunExpression;
230
289
  designMode?: boolean;
290
+ actionOnClick?: ControlActionHandler;
231
291
  }
232
292
  export interface GroupRendererProps extends ParentRendererProps {
233
293
  definition: ControlDefinition;
@@ -237,7 +297,6 @@ export interface DataRendererProps extends ParentRendererProps {
237
297
  renderOptions: RenderOptions;
238
298
  definition: DataControlDefinition;
239
299
  field: SchemaField;
240
- elementIndex?: number;
241
300
  id: string;
242
301
  control: Control<any>;
243
302
  readonly: boolean;
@@ -246,109 +305,69 @@ export interface DataRendererProps extends ParentRendererProps {
246
305
  hidden: boolean;
247
306
  dataNode: SchemaDataNode;
248
307
  displayOnly: boolean;
249
- }
250
- export interface ActionRendererProps {
251
- actionId: string;
252
- actionText: string;
253
- actionData?: any;
254
- onClick: () => void;
255
- className?: string | null;
256
- style?: React.CSSProperties;
257
- disabled?: boolean;
308
+ inline: boolean;
258
309
  }
259
310
  export interface ControlRenderProps {
260
311
  control: Control<any>;
261
312
  parentPath?: JsonPath[];
262
313
  }
263
- export interface FormContextOptions {
264
- readonly?: boolean | null;
265
- hidden?: boolean | null;
266
- disabled?: boolean | null;
267
- displayOnly?: boolean;
268
- }
269
- export interface DataControlProps {
270
- formNode: FormNode;
271
- definition: DataControlDefinition;
272
- dataContext: ControlDataContext;
273
- control: Control<any>;
274
- formOptions: FormContextOptions;
275
- style?: React.CSSProperties | undefined;
276
- renderChild: ChildRenderer;
277
- elementIndex?: number;
278
- allowedOptions?: Control<any[] | undefined>;
279
- useChildVisibility: ChildVisibilityFunc;
280
- useEvalExpression: UseEvalExpressionHook;
281
- schemaInterface?: SchemaInterface;
282
- designMode?: boolean;
283
- styleClass?: string;
284
- layoutClass?: string;
285
- }
286
- export type CreateDataProps = (controlProps: DataControlProps) => DataRendererProps;
287
- export interface ControlRenderOptions extends FormContextOptions, ControlClasses {
314
+ export type CreateDataProps = (controlProps: RenderLayoutProps, definition: DataControlDefinition, control: Control<any>) => DataRendererProps;
315
+ export interface ControlRenderOptions extends ControlClasses {
316
+ formState?: FormState;
288
317
  useDataHook?: (c: ControlDefinition) => CreateDataProps;
289
318
  actionOnClick?: ControlActionHandler;
290
319
  customDisplay?: (customId: string, displayProps: DisplayRendererProps) => ReactNode;
291
- useValidationHook?: (validator: SchemaValidator, ctx: ValidationContext) => void;
292
- useEvalExpressionHook?: UseEvalExpressionHook;
293
320
  adjustLayout?: (context: ControlDataContext, layout: ControlLayoutProps) => ControlLayoutProps;
321
+ readonly?: boolean | null;
322
+ hidden?: boolean | null;
323
+ disabled?: boolean | null;
324
+ displayOnly?: boolean;
325
+ inline?: boolean;
294
326
  clearHidden?: boolean;
327
+ stateKey?: string;
295
328
  schemaInterface?: SchemaInterface;
296
- elementIndex?: number;
297
- formData?: FormContextData;
329
+ variables?: Record<string, any>;
298
330
  }
299
- export declare function useControlRenderer(definition: ControlDefinition, fields: SchemaField[], renderer: FormRenderer, options?: ControlRenderOptions): FC<ControlRenderProps>;
300
- export declare function useControlRendererComponent(controlOrFormNode: ControlDefinition | FormNode, renderer: FormRenderer, options: ControlRenderOptions | undefined, parentDataNode: SchemaDataNode): FC<{}>;
301
- export declare function ControlRenderer({ definition, fields, renderer, options, control, parentPath, }: {
302
- definition: ControlDefinition;
303
- fields: SchemaField[];
304
- renderer: FormRenderer;
305
- options?: ControlRenderOptions;
306
- control: Control<any>;
307
- parentPath?: JsonPath[];
308
- }): JSX.Element;
309
- export declare function NewControlRenderer({ definition, renderer, options, parentDataNode, }: {
310
- definition: ControlDefinition | FormNode;
311
- renderer: FormRenderer;
312
- options?: ControlRenderOptions;
313
- parentDataNode: SchemaDataNode;
314
- }): JSX.Element;
315
- export declare function defaultDataProps({ definition, control, formOptions, style, allowedOptions, schemaInterface, styleClass, ...props }: DataControlProps): DataRendererProps;
331
+ export declare function defaultDataProps({ formOptions, style, allowedOptions, schemaInterface, styleClass, textClass: tc, displayOnly, inline, ...props }: RenderLayoutProps, definition: DataControlDefinition, control: Control<any>): DataRendererProps;
316
332
  export interface ChildRendererOptions {
317
- elementIndex?: number;
318
333
  parentDataNode?: SchemaDataNode;
319
- formData?: FormContextData;
334
+ inline?: boolean;
320
335
  displayOnly?: boolean;
321
336
  styleClass?: string;
322
337
  layoutClass?: string;
323
338
  labelClass?: string;
339
+ labelTextClass?: string;
340
+ actionOnClick?: ControlActionHandler;
341
+ stateKey?: string;
342
+ variables?: Record<string, any>;
324
343
  }
325
344
  export type ChildRenderer = (k: Key, child: FormNode, options?: ChildRendererOptions) => ReactNode;
326
- export interface RenderControlProps {
327
- definition: ControlDefinition;
345
+ export interface RenderLayoutProps {
328
346
  formNode: FormNode;
329
347
  renderer: FormRenderer;
348
+ state: ControlState;
330
349
  renderChild: ChildRenderer;
331
350
  createDataProps: CreateDataProps;
332
351
  formOptions: FormContextOptions;
333
352
  dataContext: ControlDataContext;
334
353
  control?: Control<any>;
335
- labelText?: Control<string | null | undefined>;
336
- elementIndex?: number;
337
- displayControl?: Control<string | undefined>;
338
354
  style?: React.CSSProperties;
339
- allowedOptions?: Control<any[] | undefined>;
340
- actionDataControl?: Control<any | undefined | null>;
341
- useChildVisibility: ChildVisibilityFunc;
342
- useEvalExpression: UseEvalExpressionHook;
355
+ allowedOptions?: any[];
356
+ getChildState(node: FormNode, parent?: SchemaDataNode): ControlState;
357
+ runExpression: RunExpression;
343
358
  actionOnClick?: ControlActionHandler;
344
359
  schemaInterface?: SchemaInterface;
345
360
  designMode?: boolean;
346
361
  customDisplay?: (customId: string, displayProps: DisplayRendererProps) => ReactNode;
347
362
  labelClass?: string;
363
+ labelTextClass?: string;
348
364
  styleClass?: string;
365
+ textClass?: string;
366
+ inline?: boolean;
367
+ displayOnly?: boolean;
349
368
  }
350
- export declare function renderControlLayout(props: RenderControlProps): ControlLayoutProps;
351
- type MarkupKeys = keyof Omit<RenderedLayout, "errorControl" | "style" | "className" | "wrapLayout" | "readonly" | "disabled">;
369
+ export declare function renderControlLayout(props: RenderLayoutProps): ControlLayoutProps;
370
+ type MarkupKeys = keyof Omit<RenderedLayout, "errorControl" | "style" | "className" | "wrapLayout" | "readonly" | "disabled" | "inline">;
352
371
  export declare function appendMarkup(k: MarkupKeys, markup: ReactNode): (layout: RenderedLayout) => void;
353
372
  export declare function wrapMarkup(k: MarkupKeys, wrap: (ex: ReactNode) => ReactNode): (layout: RenderedLayout) => void;
354
373
  export declare function layoutKeyForPlacement(pos: AdornmentPlacement): MarkupKeys;
@@ -366,5 +385,6 @@ export declare function applyArrayLengthRestrictions({ arrayControl, min, max, e
366
385
  addDisabled: boolean;
367
386
  removeDisabled: boolean;
368
387
  };
369
- export declare function fieldOptionAdornment(p: DataRendererProps): (o: FieldOption, i: number, selected: boolean) => JSX.Element;
388
+ export declare function fieldOptionAdornment(p: DataRendererProps): (o: FieldOption, fieldIndex: number, selected: boolean) => JSX.Element;
389
+ export declare function lookupChildDataContext(dataContext: ControlDataContext, c: ControlDefinition): ControlDataContext;
370
390
  export {};