@syncfusion/ej2-react-form-renderer 0.1.1-beta → 34.2.2

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.
Files changed (173) hide show
  1. package/README.md +86 -110
  2. package/diConfig.json +85 -0
  3. package/dist/ej2-react-form-renderer.min.js +10 -0
  4. package/dist/ej2-react-form-renderer.umd.min.js +11 -0
  5. package/dist/ej2-react-form-renderer.umd.min.js.map +1 -0
  6. package/dist/es6/ej2-react-form-renderer.es2015.js +37 -0
  7. package/dist/es6/ej2-react-form-renderer.es2015.js.map +1 -0
  8. package/form-renderer.d.ts +4 -0
  9. package/form-renderer.js +4 -0
  10. package/index.d.ts +2 -4
  11. package/index.js +2 -4
  12. package/license +6 -13
  13. package/package.json +19 -38
  14. package/src/form-renderer/formrenderer.component.d.ts +34 -0
  15. package/src/form-renderer/formrenderer.component.js +49 -0
  16. package/src/form-renderer/index.d.ts +1 -0
  17. package/src/form-renderer/index.js +1 -0
  18. package/src/global.js +1 -0
  19. package/src/index.d.ts +2 -6
  20. package/src/index.js +2 -6
  21. package/styles/bds-lite.css +1 -0
  22. package/styles/bds-lite.scss +1 -0
  23. package/styles/bds.css +1 -0
  24. package/styles/bds.scss +1 -0
  25. package/styles/bootstrap-dark-lite.css +1 -0
  26. package/styles/bootstrap-dark-lite.scss +1 -0
  27. package/styles/bootstrap-dark.css +1 -26
  28. package/styles/bootstrap-dark.scss +1 -0
  29. package/styles/bootstrap-lite.css +1 -0
  30. package/styles/bootstrap-lite.scss +1 -0
  31. package/styles/bootstrap.css +1 -26
  32. package/styles/bootstrap.scss +1 -0
  33. package/styles/bootstrap4-lite.css +1 -0
  34. package/styles/bootstrap4-lite.scss +1 -0
  35. package/styles/bootstrap4.css +1 -26
  36. package/styles/bootstrap4.scss +1 -0
  37. package/styles/bootstrap5-dark-lite.css +1 -0
  38. package/styles/bootstrap5-dark-lite.scss +1 -0
  39. package/styles/bootstrap5-dark.css +1 -26
  40. package/styles/bootstrap5-dark.scss +1 -0
  41. package/styles/bootstrap5-lite.css +1 -0
  42. package/styles/bootstrap5-lite.scss +1 -0
  43. package/styles/bootstrap5.3-lite.css +1 -0
  44. package/styles/bootstrap5.3-lite.scss +1 -0
  45. package/styles/bootstrap5.3.css +1 -26
  46. package/styles/bootstrap5.3.scss +1 -0
  47. package/styles/bootstrap5.css +1 -26
  48. package/styles/bootstrap5.scss +1 -0
  49. package/styles/fabric-dark-lite.css +1 -0
  50. package/styles/fabric-dark-lite.scss +1 -0
  51. package/styles/fabric-dark.css +1 -0
  52. package/styles/fabric-dark.scss +1 -0
  53. package/styles/fabric-lite.css +1 -0
  54. package/styles/fabric-lite.scss +1 -0
  55. package/styles/fabric.css +1 -0
  56. package/styles/fabric.scss +1 -0
  57. package/styles/fluent-dark-lite.css +1 -0
  58. package/styles/fluent-dark-lite.scss +1 -0
  59. package/styles/fluent-dark.css +1 -26
  60. package/styles/fluent-dark.scss +1 -0
  61. package/styles/fluent-lite.css +1 -0
  62. package/styles/fluent-lite.scss +1 -0
  63. package/styles/fluent.css +1 -26
  64. package/styles/fluent.scss +1 -0
  65. package/styles/fluent2-lite.css +1 -0
  66. package/styles/fluent2-lite.scss +1 -0
  67. package/styles/fluent2.css +1 -26
  68. package/styles/fluent2.scss +1 -0
  69. package/styles/form-renderer/bds.css +1 -0
  70. package/styles/form-renderer/bds.scss +1 -0
  71. package/styles/form-renderer/bootstrap-dark.css +1 -0
  72. package/styles/form-renderer/bootstrap-dark.scss +1 -0
  73. package/styles/form-renderer/bootstrap.css +1 -0
  74. package/styles/form-renderer/bootstrap.scss +1 -0
  75. package/styles/form-renderer/bootstrap4.css +1 -0
  76. package/styles/form-renderer/bootstrap4.scss +1 -0
  77. package/styles/form-renderer/bootstrap5-dark.css +1 -0
  78. package/styles/form-renderer/bootstrap5-dark.scss +1 -0
  79. package/styles/form-renderer/bootstrap5.3.css +1 -0
  80. package/styles/form-renderer/bootstrap5.3.scss +1 -0
  81. package/styles/form-renderer/bootstrap5.css +1 -0
  82. package/styles/form-renderer/bootstrap5.scss +1 -0
  83. package/styles/form-renderer/fabric-dark.css +1 -0
  84. package/styles/form-renderer/fabric-dark.scss +1 -0
  85. package/styles/form-renderer/fabric.css +1 -0
  86. package/styles/form-renderer/fabric.scss +1 -0
  87. package/styles/form-renderer/fluent-dark.css +1 -0
  88. package/styles/form-renderer/fluent-dark.scss +1 -0
  89. package/styles/form-renderer/fluent.css +1 -0
  90. package/styles/form-renderer/fluent.scss +1 -0
  91. package/styles/form-renderer/fluent2.css +1 -0
  92. package/styles/form-renderer/fluent2.scss +1 -0
  93. package/styles/form-renderer/highcontrast-light.css +1 -0
  94. package/styles/form-renderer/highcontrast-light.scss +1 -0
  95. package/styles/form-renderer/highcontrast.css +1 -0
  96. package/styles/form-renderer/highcontrast.scss +1 -0
  97. package/styles/form-renderer/material-dark.css +1 -0
  98. package/styles/form-renderer/material-dark.scss +1 -0
  99. package/styles/form-renderer/material.css +1 -0
  100. package/styles/form-renderer/material.scss +1 -0
  101. package/styles/form-renderer/material3-dark.css +1 -0
  102. package/styles/form-renderer/material3-dark.scss +1 -0
  103. package/styles/form-renderer/material3.css +1 -0
  104. package/styles/form-renderer/material3.scss +1 -0
  105. package/styles/form-renderer/tailwind-dark.css +1 -0
  106. package/styles/form-renderer/tailwind-dark.scss +1 -0
  107. package/styles/form-renderer/tailwind.css +1 -0
  108. package/styles/form-renderer/tailwind.scss +1 -0
  109. package/styles/form-renderer/tailwind3.css +1 -0
  110. package/styles/form-renderer/tailwind3.scss +1 -0
  111. package/styles/highcontrast-light-lite.css +1 -0
  112. package/styles/highcontrast-light-lite.scss +1 -0
  113. package/styles/highcontrast-light.css +1 -0
  114. package/styles/highcontrast-light.scss +1 -0
  115. package/styles/highcontrast-lite.css +1 -0
  116. package/styles/highcontrast-lite.scss +1 -0
  117. package/styles/highcontrast.css +1 -0
  118. package/styles/highcontrast.scss +1 -0
  119. package/styles/material-dark-lite.css +1 -0
  120. package/styles/material-dark-lite.scss +1 -0
  121. package/styles/material-dark.css +1 -26
  122. package/styles/material-dark.scss +1 -0
  123. package/styles/material-lite.css +1 -0
  124. package/styles/material-lite.scss +1 -0
  125. package/styles/material.css +1 -26
  126. package/styles/material.scss +1 -0
  127. package/styles/material3-dark-lite.css +1 -0
  128. package/styles/material3-dark-lite.scss +1 -0
  129. package/styles/material3-dark.css +1 -26
  130. package/styles/material3-dark.scss +1 -0
  131. package/styles/material3-lite.css +1 -0
  132. package/styles/material3-lite.scss +1 -0
  133. package/styles/material3.css +1 -26
  134. package/styles/material3.scss +1 -0
  135. package/styles/tailwind-dark-lite.css +1 -0
  136. package/styles/tailwind-dark-lite.scss +1 -0
  137. package/styles/tailwind-dark.css +1 -26
  138. package/styles/tailwind-dark.scss +1 -0
  139. package/styles/tailwind-lite.css +1 -0
  140. package/styles/tailwind-lite.scss +1 -0
  141. package/styles/tailwind.css +1 -26
  142. package/styles/tailwind.scss +1 -0
  143. package/styles/tailwind3-lite.css +1 -0
  144. package/styles/tailwind3-lite.scss +1 -0
  145. package/styles/tailwind3.css +1 -26
  146. package/styles/tailwind3.scss +1 -0
  147. package/src/CheckboxGroup.d.ts +0 -12
  148. package/src/CheckboxGroup.js +0 -48
  149. package/src/ConditionalRuleEngine.d.ts +0 -253
  150. package/src/ConditionalRuleEngine.js +0 -489
  151. package/src/CustomTabComponent.d.ts +0 -13
  152. package/src/CustomTabComponent.js +0 -35
  153. package/src/DataGridComponent.d.ts +0 -28
  154. package/src/DataGridComponent.js +0 -144
  155. package/src/FormRenderer.d.ts +0 -90
  156. package/src/FormRenderer.js +0 -649
  157. package/src/FormValidator.d.ts +0 -479
  158. package/src/FormValidator.js +0 -579
  159. package/src/StaticHtmlRenderer.d.ts +0 -8
  160. package/src/StaticHtmlRenderer.js +0 -21
  161. package/src/json-converter.d.ts +0 -180
  162. package/src/json-converter.js +0 -1329
  163. package/src/parser.d.ts +0 -99
  164. package/src/parser.js +0 -750
  165. package/src/renderFormField.d.ts +0 -20
  166. package/src/renderFormField.js +0 -203
  167. package/src/types/FormSchema.d.ts +0 -205
  168. package/src/types/FormSchema.js +0 -1
  169. package/src/utils.js +0 -146
  170. package/styles/bootstrap5.3-dark.css +0 -26
  171. package/styles/fluent2-dark.css +0 -26
  172. package/styles/form-renderer.base.css +0 -489
  173. package/styles/tailwind3-dark.css +0 -10
@@ -1,144 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useImperativeHandle, useRef, useState, useCallback, useMemo, useEffect } from 'react';
3
- import { GridComponent, ColumnsDirective, ColumnDirective, Inject, Toolbar, Edit, Page, Resize, Sort, } from '@syncfusion/ej2-react-grids';
4
- (() => {
5
- try {
6
- const filterPrefix = '[EJ2Grid.Warning]';
7
- const _origWarn = console.warn;
8
- const _origLog = console.log;
9
- const _origError = console.error;
10
- const makeFiltered = (orig) => (...args) => {
11
- try {
12
- const first = args[0];
13
- if (typeof first === 'string' && first.includes(filterPrefix))
14
- return;
15
- }
16
- catch { }
17
- orig.apply(console, args);
18
- };
19
- // Apply only once
20
- if (!console.__ej2WarnsFiltered) {
21
- console.warn = makeFiltered(_origWarn);
22
- console.log = makeFiltered(_origLog);
23
- console.error = makeFiltered(_origError);
24
- console.__ej2WarnsFiltered = true;
25
- }
26
- }
27
- catch { }
28
- })();
29
- /**
30
- * DataGridComponent: Wrapper around Syncfusion GridComponent
31
- *
32
- * Responsibilities:
33
- * - Manages internal _currentData state (initialized from dataSource)
34
- * - Exposes getGridData() via useImperativeHandle for form submission
35
- * - Handles actionComplete events (add/edit/delete operations)
36
- * - Maps GridColumn.validationRules to ColumnDirective.validationRules
37
- * - Renders Syncfusion toolbar with CRUD actions based on allowAdding/Editing/Deleting
38
- */
39
- export const DataGridComponent = React.forwardRef(({ id, columns, dataSource = [], height = '200px', width = '100%', locale, cssClass, pageSize = 6, allowPaging = true, allowAdding = true, allowEditing = true, allowDeleting = true, onDataChange }, ref) => {
40
- // Internal state: maintain current grid data
41
- const [_currentData, setCurrentData] = useState(Array.isArray(dataSource) ? dataSource : []);
42
- const gridRef = useRef(null);
43
- /**
44
- * Detect column definition changes and refresh grid
45
- * This ensures that changes to headerText, type, width, etc. are immediately reflected
46
- * Only enabled in preview mode to avoid issues in the main form builder view
47
- */
48
- useEffect(() => {
49
- if (gridRef.current) {
50
- if (columns && !(columns.length > 0)) {
51
- gridRef.current.columns = [];
52
- }
53
- else if (gridRef.current.columns.length === 0 && columns && columns.length == 1) {
54
- gridRef.current.columns = columns;
55
- }
56
- setTimeout(() => {
57
- if (gridRef.current?.refresh) {
58
- gridRef.current.refresh();
59
- }
60
- }, 10);
61
- }
62
- }, [columns, allowAdding, allowDeleting, allowEditing, allowPaging, pageSize]);
63
- useEffect(() => {
64
- const normalized = Array.isArray(dataSource) ? dataSource : [];
65
- setCurrentData(normalized);
66
- }, [dataSource]);
67
- /**
68
- * Expose getGridData() via ref - returns current grid data for form submission
69
- */
70
- useImperativeHandle(ref, () => ({
71
- getGridData: () => _currentData,
72
- gridRef
73
- }), [_currentData]);
74
- /**
75
- * Handle Syncfusion grid action events (add/edit/delete)
76
- * Update _currentData state when rows are modified
77
- */
78
- const handleActionComplete = useCallback((args) => {
79
- if (!gridRef.current)
80
- return;
81
- const eventType = args.requestType;
82
- // Handle different action types
83
- switch (eventType) {
84
- case 'save':
85
- case 'delete':
86
- case 'add':
87
- // After any data modification, sync grid data to state
88
- // Use dataSource directly as it's the current working data in Syncfusion
89
- if (gridRef.current.dataSource) {
90
- const updatedData = Array.isArray(gridRef.current.dataSource)
91
- ? gridRef.current.dataSource
92
- : [];
93
- setCurrentData(updatedData);
94
- onDataChange?.(updatedData);
95
- }
96
- break;
97
- default:
98
- break;
99
- }
100
- }, [onDataChange]);
101
- /**
102
- * Build toolbar array dynamically based on allowAdding/Editing/Deleting
103
- * Default toolbar includes: Add, Edit, Delete, Update, Cancel, ExcelExport, Search
104
- */
105
- const buildToolbar = useCallback(() => {
106
- const toolbarItems = [];
107
- if (allowAdding) {
108
- toolbarItems.push('Add');
109
- }
110
- if (allowEditing) {
111
- toolbarItems.push('Edit');
112
- }
113
- if (allowDeleting) {
114
- toolbarItems.push('Delete');
115
- }
116
- // Always include Update and Cancel for inline editing flow
117
- toolbarItems.push('Update', 'Cancel');
118
- return toolbarItems;
119
- }, [allowAdding, allowEditing, allowDeleting]);
120
- /**
121
- * Map validation rules from GridColumn.validationRules to Syncfusion format
122
- * Syncfusion ValidationRules type supports:
123
- * - required: boolean
124
- * - min/max: number (for numeric types)
125
- * - minLength/maxLength: number (for string types)
126
- */
127
- const mapValidationRules = useCallback((col) => {
128
- if (!col.validationRules) {
129
- return undefined;
130
- }
131
- return col.validationRules;
132
- }, []);
133
- /**
134
- * Memoize toolbar to prevent unnecessary re-renders
135
- */
136
- const toolbarConfig = useMemo(() => buildToolbar(), [buildToolbar]);
137
- return (_jsx("div", { className: "datagrid-wrapper", style: { width, height: 'auto' }, children: _jsx("div", { className: "datagrid-grid", children: _jsxs(GridComponent, { ref: gridRef, id: id, dataSource: _currentData, allowPaging: allowPaging, pageSettings: { pageSize }, editSettings: {
138
- allowEditing,
139
- allowAdding,
140
- allowDeleting,
141
- mode: 'Normal',
142
- }, locale: locale || 'en-US', cssClass: cssClass, toolbar: toolbarConfig, actionComplete: handleActionComplete, height: typeof height === 'string' ? height : `${height}px`, width: typeof width === 'string' ? width : `${width}px`, allowSorting: true, allowFiltering: false, allowSelection: true, children: [_jsx(ColumnsDirective, { children: columns && columns.length > 0 && columns.map((col) => (_jsx(ColumnDirective, { field: col.field, headerText: col.headerText, type: col.type || 'string', isPrimaryKey: col.isPrimaryKey || false, width: col.width, format: col.type === 'date' ? (col.format || 'MM/dd/yyyy') : col.format, editType: col.editType, validationRules: mapValidationRules(col) }, col.field))) }), _jsx(Inject, { services: [Edit, Toolbar, Page, Resize, Sort] })] }) }) }));
143
- });
144
- DataGridComponent.displayName = 'DataGridComponent';
@@ -1,90 +0,0 @@
1
- /**
2
- * Form Renderer Component
3
- * Renders JSON-driven forms with React FormValidator
4
- */
5
- import React from 'react';
6
- import { type FormSchema, type ButtonClickEventArgs } from './types/FormSchema';
7
- import { type LayoutNode, type UIField, type DataField } from './json-converter';
8
- export interface DataSchema {
9
- version: string;
10
- properties: Record<string, DataField>;
11
- }
12
- export interface UISchema {
13
- properties: Record<string, UIField>;
14
- layout: LayoutNode[];
15
- }
16
- export interface ChangeEventArgs {
17
- field: string;
18
- value: any;
19
- }
20
- export interface SubmitEventArgs {
21
- data: Record<string, any>;
22
- isValid: boolean;
23
- }
24
- /**
25
- * Form layout options (only applies when UI schema is NOT provided)
26
- */
27
- export declare const FormLayout: {
28
- readonly SingleColumn: "single";
29
- readonly TwoColumn: "twocolumn";
30
- readonly ThreeColumn: "threecolumn";
31
- readonly FourColumn: "fourcolumn";
32
- };
33
- export type FormLayout = typeof FormLayout[keyof typeof FormLayout];
34
- export interface FormRendererProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSubmit' | 'onClick'> {
35
- /**
36
- * Data Schema - can be provided as:
37
- * - JSON string (parsed with UniversalJsonParser)
38
- * - FormSchema object (components converted to DataSchema)
39
- * - DataSchema object (used directly)
40
- */
41
- dataSchema?: DataSchema | string | FormSchema | any;
42
- /**
43
- * UI Schema - can be provided as:
44
- * - JSON string (validated and parsed)
45
- * - UISchema object (used directly)
46
- */
47
- uiSchema?: UISchema | string;
48
- /**
49
- * Specifies the locale/language for the form component.
50
- * Supports locale-specific formatting and translations.
51
- * @default 'en-US'
52
- */
53
- locale?: string;
54
- /**
55
- * Callback invoked when the form is submitted.
56
- * Receives form data and validation status.
57
- * @param args - Object containing form data and isValid flag
58
- */
59
- onSubmit?: (args: SubmitEventArgs) => void;
60
- /**
61
- * Callback invoked when any form field value changes.
62
- * Fired on user input for tracked fields.
63
- * @param args - Object containing changed field name and new value
64
- */
65
- onChange?: (args: ChangeEventArgs) => void;
66
- /**
67
- * Callback invoked when a button in the form is clicked.
68
- * Applies to all button types (button, submit, splitButton).
69
- * @param args - Object containing button click event details
70
- */
71
- onButtonClick?: (args: ButtonClickEventArgs) => void;
72
- /**
73
- * CSS class names to apply to the root form container element.
74
- * Supports space-separated multiple classes.
75
- */
76
- className?: string;
77
- /**
78
- * Form layout configuration (only applies when UI schema is NOT provided).
79
- * Determines how form fields are arranged in columns.
80
- * @default FormLayout.SingleColumn
81
- */
82
- layout?: FormLayout;
83
- /**
84
- * Called when all form elements are rendered and ready for interaction.
85
- * Useful for performing post-render initialization or setup.
86
- */
87
- created?: () => void;
88
- }
89
- export declare const FormRenderer: React.ForwardRefExoticComponent<FormRendererProps & React.RefAttributes<any>>;
90
- export default FormRenderer;