@syncfusion/ej2-react-form-builder 0.1.0-beta

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 (145) hide show
  1. package/Common/CheckboxGroup.d.ts +13 -0
  2. package/Common/CheckboxGroup.js +50 -0
  3. package/Common/ConditionalRuleEngine.d.ts +296 -0
  4. package/Common/ConditionalRuleEngine.js +566 -0
  5. package/Common/CustomTabComponent.d.ts +17 -0
  6. package/Common/CustomTabComponent.js +30 -0
  7. package/Common/CustomValidationEngine.d.ts +58 -0
  8. package/Common/CustomValidationEngine.js +146 -0
  9. package/Common/DataGridComponent.d.ts +20 -0
  10. package/Common/DataGridComponent.js +273 -0
  11. package/Common/FormValidator.d.ts +485 -0
  12. package/Common/FormValidator.js +575 -0
  13. package/Common/MinMaxRuleEngine.d.ts +105 -0
  14. package/Common/MinMaxRuleEngine.js +365 -0
  15. package/Common/StaticHtmlRenderer.d.ts +14 -0
  16. package/Common/StaticHtmlRenderer.js +24 -0
  17. package/Common/expressions/DependencyTracker.d.ts +30 -0
  18. package/Common/expressions/DependencyTracker.js +128 -0
  19. package/Common/expressions/ExpressionEngine.d.ts +95 -0
  20. package/Common/expressions/ExpressionEngine.js +506 -0
  21. package/Common/expressions/ExpressionParser.d.ts +41 -0
  22. package/Common/expressions/ExpressionParser.js +269 -0
  23. package/Common/expressions/useGridExpressions.d.ts +12 -0
  24. package/Common/expressions/useGridExpressions.js +71 -0
  25. package/Common/globalFormId.d.ts +26 -0
  26. package/Common/globalFormId.js +45 -0
  27. package/Common/json-converter.d.ts +444 -0
  28. package/Common/json-converter.js +1184 -0
  29. package/Common/parser.d.ts +98 -0
  30. package/Common/parser.js +753 -0
  31. package/Common/utils.d.ts +130 -0
  32. package/Common/utils.js +574 -0
  33. package/README.md +53 -0
  34. package/index.d.ts +6 -0
  35. package/index.js +6 -0
  36. package/license +13 -0
  37. package/package.json +54 -0
  38. package/src/FormBuilder.d.ts +211 -0
  39. package/src/FormBuilder.js +1299 -0
  40. package/src/components/Database/ConnectionForm.d.ts +8 -0
  41. package/src/components/Database/ConnectionForm.js +28 -0
  42. package/src/components/TopBar.d.ts +10 -0
  43. package/src/components/TopBar.js +7 -0
  44. package/src/components/icons/ComponentIcons.d.ts +44 -0
  45. package/src/components/icons/ComponentIcons.js +40 -0
  46. package/src/components/layout/FormFieldWrapper.d.ts +41 -0
  47. package/src/components/layout/FormFieldWrapper.js +112 -0
  48. package/src/components/layout/LeftPane.d.ts +23 -0
  49. package/src/components/layout/LeftPane.js +310 -0
  50. package/src/components/layout/ListBoxPane.d.ts +24 -0
  51. package/src/components/layout/ListBoxPane.js +94 -0
  52. package/src/components/layout/MainSection.d.ts +39 -0
  53. package/src/components/layout/MainSection.js +1766 -0
  54. package/src/components/layout/Preview.d.ts +12 -0
  55. package/src/components/layout/Preview.js +337 -0
  56. package/src/components/layout/RightPane.d.ts +22 -0
  57. package/src/components/layout/RightPane.js +370 -0
  58. package/src/components/theme/ThemeSwitcher.d.ts +14 -0
  59. package/src/components/theme/ThemeSwitcher.js +24 -0
  60. package/src/components/theme/theme-constant.d.ts +37 -0
  61. package/src/components/theme/theme-constant.js +23 -0
  62. package/src/config/component-properties.json +4929 -0
  63. package/src/config/form-setting.json +56 -0
  64. package/src/config/locale.d.ts +449 -0
  65. package/src/config/locale.js +449 -0
  66. package/src/context/FormSchemaContext.d.ts +32 -0
  67. package/src/context/FormSchemaContext.js +155 -0
  68. package/src/context/LocalizationContext.d.ts +27 -0
  69. package/src/context/LocalizationContext.js +43 -0
  70. package/src/context/ThemeContext.d.ts +23 -0
  71. package/src/context/ThemeContext.js +161 -0
  72. package/src/context/contexts.d.ts +6 -0
  73. package/src/context/contexts.js +6 -0
  74. package/src/context/defaultFormSchema.d.ts +6 -0
  75. package/src/context/defaultFormSchema.js +20 -0
  76. package/src/defaultPalette.d.ts +9 -0
  77. package/src/defaultPalette.js +45 -0
  78. package/src/defaultTemplate.d.ts +3 -0
  79. package/src/defaultTemplate.js +185 -0
  80. package/src/import/schemaImportUtils.d.ts +24 -0
  81. package/src/import/schemaImportUtils.js +121 -0
  82. package/src/index.d.ts +16 -0
  83. package/src/index.js +6 -0
  84. package/src/types/ActionButtons.d.ts +44 -0
  85. package/src/types/ActionButtons.js +27 -0
  86. package/src/types/ComponentProperties.d.ts +33 -0
  87. package/src/types/ComponentProperties.js +2 -0
  88. package/src/types/FormSchema.d.ts +585 -0
  89. package/src/types/FormSchema.js +147 -0
  90. package/src/types/connection.d.ts +19 -0
  91. package/src/types/connection.js +9 -0
  92. package/src/utils/AttributesEditor.d.ts +13 -0
  93. package/src/utils/AttributesEditor.js +117 -0
  94. package/src/utils/ButtonGroupEditor.d.ts +15 -0
  95. package/src/utils/ButtonGroupEditor.js +141 -0
  96. package/src/utils/ChoiceBasedFieldEditor.d.ts +16 -0
  97. package/src/utils/ChoiceBasedFieldEditor.js +87 -0
  98. package/src/utils/ClipboardHelper.d.ts +26 -0
  99. package/src/utils/ClipboardHelper.js +83 -0
  100. package/src/utils/ColumnBuilder.d.ts +11 -0
  101. package/src/utils/ColumnBuilder.js +153 -0
  102. package/src/utils/ColumnSpanEditor.d.ts +8 -0
  103. package/src/utils/ColumnSpanEditor.js +98 -0
  104. package/src/utils/ConditionDataEditor.d.ts +29 -0
  105. package/src/utils/ConditionDataEditor.js +177 -0
  106. package/src/utils/ConditionalEditorUtils.d.ts +27 -0
  107. package/src/utils/ConditionalEditorUtils.js +310 -0
  108. package/src/utils/ConditionsEditor.d.ts +20 -0
  109. package/src/utils/ConditionsEditor.js +571 -0
  110. package/src/utils/CustomAccordion.d.ts +13 -0
  111. package/src/utils/CustomAccordion.js +38 -0
  112. package/src/utils/CustomValidationEditor.d.ts +11 -0
  113. package/src/utils/CustomValidationEditor.js +208 -0
  114. package/src/utils/DataSourceCollector.d.ts +3 -0
  115. package/src/utils/DataSourceCollector.js +252 -0
  116. package/src/utils/ExpressionEditor.d.ts +13 -0
  117. package/src/utils/ExpressionEditor.js +99 -0
  118. package/src/utils/FormSettingsPanel.d.ts +9 -0
  119. package/src/utils/FormSettingsPanel.js +60 -0
  120. package/src/utils/LookupConfig.d.ts +11 -0
  121. package/src/utils/LookupConfig.js +159 -0
  122. package/src/utils/MinMaxValueEditor.d.ts +25 -0
  123. package/src/utils/MinMaxValueEditor.js +188 -0
  124. package/src/utils/OptionsEditor.d.ts +8 -0
  125. package/src/utils/OptionsEditor.js +79 -0
  126. package/src/utils/PropertyRenderer.d.ts +22 -0
  127. package/src/utils/PropertyRenderer.js +210 -0
  128. package/src/utils/ValueRenderer.d.ts +2 -0
  129. package/src/utils/ValueRenderer.js +91 -0
  130. package/src/utils/ej2DbAdaptor.d.ts +6 -0
  131. package/src/utils/ej2DbAdaptor.js +38 -0
  132. package/src/utils/mappingHeuristics.d.ts +10 -0
  133. package/src/utils/mappingHeuristics.js +33 -0
  134. package/src/utils/renderComponent.d.ts +18 -0
  135. package/src/utils/renderComponent.js +300 -0
  136. package/styles/tailwind3.css +67 -0
  137. package/styles/themes/action-buttons.css +110 -0
  138. package/styles/themes/datagrid.css +380 -0
  139. package/styles/themes/drag-reorder.css +248 -0
  140. package/styles/themes/import-dialog.css +292 -0
  141. package/styles/themes/index.css +658 -0
  142. package/styles/themes/left-pane.css +253 -0
  143. package/styles/themes/options-editor.css +63 -0
  144. package/styles/themes/preview.css +702 -0
  145. package/styles/themes/property-dialog.css +371 -0
package/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # Syncfusion® EJ2 React Form Builder
2
+
3
+ A powerful visual drag-and-drop form builder component for creating JSON form schemas.
4
+
5
+ ## Key features
6
+
7
+ - **Visual drag-and-drop designer** — Create forms through an intuitive drag-and-drop interface that allows users to add, arrange, resize, and organize form elements visually without writing code.
8
+
9
+ - **20+ field types** — Supports a rich collection of form controls including TextBox, TextArea, Number, DatePicker, TimePicker, DateTimePicker, CheckBox, RadioButton, DropDown, MultiSelect, Grid, File Upload, Rich Text Editor, Signature, Rating, and more.
10
+
11
+ - **Nested layouts** — Supports advanced form composition with panels, tabs, tables, cards, and multi-column layouts, enabling the creation of structured and complex form designs.
12
+
13
+ - **Property editor** — Provides a dedicated configuration panel for customizing field properties such as labels, placeholders, default values, validation rules, visibility settings, styling, and data sources.
14
+
15
+ - **Import/export JSON schemas** — Allows form definitions to be imported from and exported to JSON schemas, enabling form portability, versioning, persistence, and integration with external applications.
16
+
17
+ - **Theme support** — Supports light and dark themes with customizable styling options, allowing forms to align with application branding and user preferences.
18
+
19
+ - **Validation rules** — Supports field-level and form-level validation, including required fields, length constraints, numeric ranges, pattern matching, custom validation rules, and cross-field validations.
20
+
21
+ - **Conditional logic** — Supports dynamic visibility, required state, read-only state, default values, and data filtering based on conditions evaluated from other form fields, enabling adaptive form experiences.
22
+  
23
+ - **Expression engine** — Enables calculated fields and business logic using expressions that support arithmetic operations, string manipulation, date calculations, conditional formulas, and automatic value updates.
24
+  
25
+ - **Preview form & JSON export** — Provides real-time form preview for validating layouts, rules, and interactions before publishing, along with JSON export for deployment, storage, or runtime rendering.
26
+
27
+
28
+ ## Installation
29
+
30
+ ```bash
31
+ npm install @syncfusion/ej2-react-form-builder
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ```tsx
37
+ import { FormBuilder } from '@syncfusion/ej2-react-form-builder';
38
+ import '@syncfusion/ej2-react-form-builder/styles/tailwind3.css';
39
+
40
+ function App() {
41
+ return <FormBuilder />;
42
+ }
43
+ ```
44
+
45
+ ## License and copyright
46
+
47
+ > This is a commercial product and requires a paid license for possession or use. Syncfusion<sup>®</sup> licensed software, including this component, is subject to the terms and conditions of Syncfusion<sup>®</sup> [EULA](https://www.syncfusion.com/eula/es/). To acquire a license for 140+ Syncfusion UI components, you can [purchase](https://www.syncfusion.com/sales/products) or [start a free 30-day trial](https://www.syncfusion.com/account/manage-trials/start-trials).
48
+
49
+ > A free community [license](https://www.syncfusion.com/products/communitylicense) is also available for companies and individuals whose organizations have less than $1 million USD in annual gross revenue and five or fewer developers.
50
+
51
+ See [LICENSE FILE](license) for more info.
52
+
53
+ &copy; Copyright 2026 Syncfusion<sup>®</sup> Inc. All Rights Reserved. The Syncfusion<sup>®</sup> Essential Studio<sup>®</sup> license and copyright applies to this distribution.
package/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @syncfusion/ej2-react-form-builder
3
+ * Form Builder Component - Visual drag-and-drop form editor
4
+ */
5
+
6
+ export * from './src/index.js';
package/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @syncfusion/ej2-react-form-builder
3
+ * Form Builder Component - Visual drag-and-drop form editor
4
+ */
5
+
6
+ export * from './src/index.js';
package/license ADDED
@@ -0,0 +1,13 @@
1
+ Syncfusion® License
2
+
3
+ Copyright (c) Syncfusion®, Inc. All rights reserved.
4
+
5
+ Essential® JS 2 Form Builder library is available through the Syncfusion® Essential Studio® program and can be licensed under either the Syncfusion® Community License Program or the Syncfusion® Commercial License.
6
+
7
+ To qualify for the Syncfusion® Community License Program, your organization must have annual gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year and fewer than five (5) developers. Additionally, you must agree to Syncfusion®'s terms and conditions.
8
+
9
+ If you do not meet the requirements for the community license, please reach out to sales@syncfusion.com for commercial licensing options.
10
+
11
+ You are required to obtain either a Community License or a Commercial License before using this product and must agree to comply with Syncfusion®'s terms and conditions.
12
+
13
+ The full Syncfusion® license, including terms and conditions, can be found at: https://www.syncfusion.com/content/downloads/syncfusion_license.pdf
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@syncfusion/ej2-react-form-builder",
3
+ "version": "0.1.0-beta",
4
+ "description": "Syncfusion Form Builder component is a visual drag-and-drop interface for creating JSON form schemas.",
5
+ "author": "Syncfusion Inc.",
6
+ "license": "SEE LICENSE IN license",
7
+ "keywords": [
8
+ "syncfusion",
9
+ "ej2",
10
+ "react",
11
+ "form",
12
+ "form-builder",
13
+ "form-renderer",
14
+ "dynamic-forms",
15
+ "json-forms",
16
+ "schema-forms",
17
+ "ui-components",
18
+ "react-components",
19
+ "drag-and-drop"
20
+ ],
21
+ "main": "./index.js",
22
+ "module": "./index.js",
23
+ "types": "./index.d.ts",
24
+ "typings": "./index.d.ts",
25
+ "readme": "README.md",
26
+ "exports": {
27
+ ".": {
28
+ "import": "./index.js",
29
+ "types": "./index.d.ts"
30
+ },
31
+ "./styles/*": "./styles/*"
32
+ },
33
+ "sideEffects": false,
34
+ "dependencies": {
35
+ "@syncfusion/ej2-react-buttons": "*",
36
+ "@syncfusion/ej2-react-calendars": "*",
37
+ "@syncfusion/ej2-react-dropdowns": "*",
38
+ "@syncfusion/ej2-react-grids": "*",
39
+ "@syncfusion/ej2-react-image-editor": "*",
40
+ "@syncfusion/ej2-react-inplace-editor": "*",
41
+ "@syncfusion/ej2-react-inputs": "*",
42
+ "@syncfusion/ej2-react-layouts": "*",
43
+ "@syncfusion/ej2-react-lists": "*",
44
+ "@syncfusion/ej2-react-navigations": "*",
45
+ "@syncfusion/ej2-react-notifications": "*",
46
+ "@syncfusion/ej2-react-popups": "*",
47
+ "@syncfusion/ej2-react-querybuilder": "*",
48
+ "@syncfusion/ej2-react-richtexteditor": "*",
49
+ "@syncfusion/ej2-react-splitbuttons": "*",
50
+ "@syncfusion/ej2-react-form-renderer": "*",
51
+ "@syncfusion/react-base": "*"
52
+ },
53
+ "devDependencies": {}
54
+ }
@@ -0,0 +1,211 @@
1
+ import React, { type HTMLAttributes } from 'react';
2
+ import type { FormComponent, PaletteConfig, Schema } from './types/FormSchema';
3
+ import type { DefaultTemplates } from './types/FormSchema';
4
+ /**
5
+ * @private
6
+ */
7
+ export declare let formBuilderMode: string;
8
+ /**
9
+ * @private
10
+ */
11
+ export declare const extractTemplateComponents: (template: DefaultTemplates) => FormComponent[];
12
+ /**
13
+ * The IFormBuilder interface defines the configuration options of the FormBuilder component, which is used to design form schemas.
14
+ */
15
+ export interface IFormBuilder {
16
+ /**
17
+ * This is the FormBuilder component element.
18
+ *
19
+ * @private
20
+ * @default null
21
+ */
22
+ element?: HTMLElement | null;
23
+ /**
24
+ * Specifies the locale of the Form Builder Component.
25
+ *
26
+ * @property
27
+ * @default 'en-US'
28
+ */
29
+ locale?: string;
30
+ /**
31
+ * Specifies whether the form schema created with the Form Builder can be exported.
32
+ *
33
+ * @property
34
+ * @default true
35
+ */
36
+ allowExport?: boolean;
37
+ /**
38
+ * Enables or disables the form preview mode option in the Form Builder.
39
+ *
40
+ * @property
41
+ * @default true
42
+ */
43
+ enablePreview?: boolean;
44
+ /**
45
+ * Specifies the mode of the Form Builder. There are two modes available:
46
+ * - Simple - This mode limits the supported components and options in the Form Builder to provide ease for non-technical users.
47
+ * - Developer - This mode enables the complete features in the Form Builder. This is the default mode.
48
+ *
49
+ * @property
50
+ * @default true
51
+ */
52
+ mode?: 'Simple' | 'Developer';
53
+ /**
54
+ * Specifies whether the form schema state should be persisted in the Form Builder. The local storage is used to maintain the persistence behavior.
55
+ *
56
+ * @property
57
+ * @default false
58
+ */
59
+ enablePersistence?: boolean;
60
+ /**
61
+ * Specifies whether the form elements to be displayed in Right to Left.
62
+ *
63
+ * @property
64
+ * @default false
65
+ */
66
+ enableRtl?: boolean;
67
+ /**
68
+ * This property is used to provide a set of custom components in addition to the existing form field components.
69
+ *
70
+ * @property
71
+ * @default undefined (uses defaultTemplates)
72
+ */
73
+ formTemplates?: DefaultTemplates[];
74
+ /**
75
+ * This property is used to modify the components for the form fields in basic, advanced, and layout categories in the left panel of the Form Builder.
76
+ *
77
+ * @example
78
+ * paletteConfig={{
79
+ * [ComponentCategory.BASIC]: [
80
+ * { type: FormComponentType.TEXTBOX, category: 'basic' },
81
+ * { type: FormComponentType.CHECKBOX, category: 'basic' }
82
+ * ],
83
+ * [ComponentCategory.ADVANCED]: [
84
+ * { type: FormComponentType.MULTISELECT, category: 'advanced' }
85
+ * ]
86
+ * }}
87
+ *
88
+ * @property
89
+ * @private
90
+ * @default undefined (uses defaultPalette)
91
+ */
92
+ paletteConfig?: PaletteConfig;
93
+ /**
94
+ * Event triggered when a component property is changed in the property panel.
95
+ * Fires on every property value change with details of the changed field.
96
+ *
97
+ * @event
98
+ *
99
+ * @param args - Event data containing label, property key, value, and component id
100
+ */
101
+ onPropertyChanged?: (args: PropertyChangedEventArgs) => void;
102
+ /**
103
+ * Event triggered when a field drag operation starts.
104
+ * Fires for both root-level and nested container drags.
105
+ *
106
+ * @event
107
+ *
108
+ * @param args - Event data containing component and source container info
109
+ */
110
+ onFieldDragStarted?: (args: FieldDragStartedEventArgs) => void;
111
+ /**
112
+ * Event triggered when a dragged field is over a valid drop zone.
113
+ * Fires repeatedly while hovering over drop targets.
114
+ *
115
+ * @event
116
+ *
117
+ * @param args - Event data containing target container info
118
+ */
119
+ onFieldDraggingOver?: (args: FieldDraggingOverEventArgs) => void;
120
+ /**
121
+ * Event triggered when a field drop operation completes.
122
+ * Fires for successful drops in both root and nested containers.
123
+ *
124
+ * @event
125
+ *
126
+ * @param args - Event data containing source, target, and drop details
127
+ */
128
+ onFieldDropped?: (args: FieldDroppedEventArgs) => void;
129
+ /**
130
+ * This property facilitates an optional initial form schema to load in the Form Builder.
131
+ *
132
+ * @property
133
+ * @default null
134
+ */
135
+ schema?: Schema | any;
136
+ /**
137
+ * Gets the current form settings as a JSON string in the required export format.
138
+ *
139
+ * @returns Form settings JSON string
140
+ * @private
141
+ */
142
+ getFormSettings(): any;
143
+ }
144
+ /**
145
+ * FormBuilder component props (used for JSX props, excludes imperative methods)
146
+ */
147
+ type IFormBuilderProps = Omit<IFormBuilder, 'element' | 'getFormSettings'> & HTMLAttributes<HTMLDivElement>;
148
+ /**
149
+ * The FormBuilder component provides a visual, drag-and-drop interface for authoring form schemas. It supports palette customization, template insertion, dual modes (Simple/Developer), and emits structural form schemas (FormSchema) that can be consumed by FormRenderer.
150
+ *
151
+ * ```typescript
152
+ * import { FormBuilder } from '@syncfusion/ej2-react-form-builder';
153
+ *
154
+ * <FormBuilder />
155
+ * ```
156
+ */
157
+ export declare const FormBuilder: React.ForwardRefExoticComponent<IFormBuilderProps & React.RefAttributes<IFormBuilder>>;
158
+ declare const _default: React.NamedExoticComponent<Omit<IFormBuilder, "element" | "getFormSettings"> & React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<IFormBuilder>>;
159
+ export default _default;
160
+ /**
161
+ * This event argument provides details when a form field's drag action starts.
162
+ */
163
+ export interface FieldDragStartedEventArgs {
164
+ /** Specifies the name of the component being dragged. */
165
+ componentName: string | null;
166
+ /** Specifies the type of the component (e.g., 'textbox', 'dropdown', 'panel'). */
167
+ componentType: string;
168
+ /** Specifies the container ID where the drag originated ('root', panel ID, table ID, etc.). */
169
+ sourceContainerId: string;
170
+ /** Specifies whether this is a nested container drag. */
171
+ isNested: boolean;
172
+ }
173
+ /**
174
+ * This event argument provides details when a form field's drag action is in progress over a drop zone.
175
+ */
176
+ export interface FieldDraggingOverEventArgs {
177
+ /** Specifies whether hovering over a nested container. */
178
+ isNested: boolean;
179
+ }
180
+ /**
181
+ * This event argument provides details when a form field's drag action is completed by dropping on a drop zone.
182
+ */
183
+ export interface FieldDroppedEventArgs {
184
+ /** Specifies the name of the dropped component */
185
+ componentName: string;
186
+ /** Specifies whether the component was reordered. */
187
+ isReordered: boolean;
188
+ /** Specifies the type of the component. */
189
+ componentType: string;
190
+ /** Specifies the source container ID ('root', panel ID, 'palette' for new components) which acts as a drop zone. */
191
+ sourceContainerId: string;
192
+ /** Specifies the target container ID where the component was dropped. */
193
+ targetContainerId: string;
194
+ }
195
+ /**
196
+ * This event argument provides details when a property value changes in the property panel.
197
+ */
198
+ export interface PropertyChangedEventArgs {
199
+ /**
200
+ * Specifies the display label of the changed property.
201
+ *
202
+ * @private
203
+ */
204
+ field: string;
205
+ /** Specifies the property name of the field. */
206
+ property: string;
207
+ /** Specifies the new value of the property. */
208
+ value: any;
209
+ /** Specifies the name of the component being edited. */
210
+ name: string;
211
+ }