@syncfusion/ej2-form-renderer 34.2.6 → 35.1.37

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 (216) hide show
  1. package/README.md +6 -3
  2. package/dist/ej2-form-renderer.umd.min.js +2 -2
  3. package/dist/ej2-form-renderer.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-form-renderer.es2015.js +3261 -1523
  5. package/dist/es6/ej2-form-renderer.es2015.js.map +1 -1
  6. package/dist/es6/ej2-form-renderer.es5.js +3316 -1540
  7. package/dist/es6/ej2-form-renderer.es5.js.map +1 -1
  8. package/dist/global/ej2-form-renderer.min.js +2 -2
  9. package/dist/global/ej2-form-renderer.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +11 -11
  12. package/src/{common → form-renderer/common}/checkbox-group.js +1 -1
  13. package/src/{common → form-renderer/common}/conditional-rule-engine.d.ts +1 -6
  14. package/src/{common → form-renderer/common}/custom-validation-engine.d.ts +1 -1
  15. package/src/{common → form-renderer/common}/expressions/expression-engine.d.ts +1 -4
  16. package/src/{common → form-renderer/common}/expressions/expression-parser.d.ts +1 -9
  17. package/src/{common → form-renderer/common}/index.d.ts +2 -0
  18. package/src/{common → form-renderer/common}/index.js +2 -0
  19. package/src/{common → form-renderer/common}/json-converter.d.ts +6 -1
  20. package/src/{common → form-renderer/common}/json-converter.js +49 -8
  21. package/src/form-renderer/common/props-forwarder.d.ts +38 -0
  22. package/src/form-renderer/common/props-forwarder.js +123 -0
  23. package/src/{common → form-renderer/common}/utils.d.ts +6 -0
  24. package/src/form-renderer/form-renderer/custom-widget-resolver.d.ts +17 -0
  25. package/src/form-renderer/form-renderer/custom-widget-resolver.js +39 -0
  26. package/src/form-renderer/form-renderer/form-renderer-model.d.ts +125 -0
  27. package/src/form-renderer/form-renderer/form-renderer.d.ts +373 -0
  28. package/src/form-renderer/{form-renderer.js → form-renderer/form-renderer.js} +419 -298
  29. package/src/form-renderer/form-renderer/index.d.ts +7 -0
  30. package/src/form-renderer/form-renderer/index.js +6 -0
  31. package/src/form-renderer/{render-form-field.js → form-renderer/render-form-field.js} +154 -25
  32. package/src/form-renderer/index.d.ts +3 -4
  33. package/src/form-renderer/index.js +3 -3
  34. package/src/index.d.ts +1 -4
  35. package/src/index.js +1 -4
  36. package/common.d.ts +0 -4
  37. package/common.js +0 -4
  38. package/src/form-renderer/form-renderer-model.d.ts +0 -65
  39. package/src/form-renderer/form-renderer.d.ts +0 -425
  40. package/styles/bds-lite.css +0 -599
  41. package/styles/bds-lite.scss +0 -2
  42. package/styles/bds.css +0 -599
  43. package/styles/bds.scss +0 -2
  44. package/styles/bootstrap-dark-lite.css +0 -608
  45. package/styles/bootstrap-dark-lite.scss +0 -2
  46. package/styles/bootstrap-dark.css +0 -608
  47. package/styles/bootstrap-dark.scss +0 -2
  48. package/styles/bootstrap-lite.css +0 -595
  49. package/styles/bootstrap-lite.scss +0 -2
  50. package/styles/bootstrap.css +0 -595
  51. package/styles/bootstrap.scss +0 -2
  52. package/styles/bootstrap4-lite.css +0 -595
  53. package/styles/bootstrap4-lite.scss +0 -2
  54. package/styles/bootstrap4.css +0 -595
  55. package/styles/bootstrap4.scss +0 -2
  56. package/styles/bootstrap5-dark-lite.css +0 -595
  57. package/styles/bootstrap5-dark-lite.scss +0 -2
  58. package/styles/bootstrap5-dark.css +0 -595
  59. package/styles/bootstrap5-dark.scss +0 -2
  60. package/styles/bootstrap5-lite.css +0 -595
  61. package/styles/bootstrap5-lite.scss +0 -2
  62. package/styles/bootstrap5.3-lite.css +0 -679
  63. package/styles/bootstrap5.3-lite.scss +0 -2
  64. package/styles/bootstrap5.3.css +0 -679
  65. package/styles/bootstrap5.3.scss +0 -2
  66. package/styles/bootstrap5.css +0 -595
  67. package/styles/bootstrap5.scss +0 -2
  68. package/styles/fabric-dark-lite.css +0 -608
  69. package/styles/fabric-dark-lite.scss +0 -2
  70. package/styles/fabric-dark.css +0 -608
  71. package/styles/fabric-dark.scss +0 -2
  72. package/styles/fabric-lite.css +0 -595
  73. package/styles/fabric-lite.scss +0 -2
  74. package/styles/fabric.css +0 -595
  75. package/styles/fabric.scss +0 -2
  76. package/styles/fluent-dark-lite.css +0 -595
  77. package/styles/fluent-dark-lite.scss +0 -2
  78. package/styles/fluent-dark.css +0 -595
  79. package/styles/fluent-dark.scss +0 -2
  80. package/styles/fluent-lite.css +0 -595
  81. package/styles/fluent-lite.scss +0 -2
  82. package/styles/fluent.css +0 -595
  83. package/styles/fluent.scss +0 -2
  84. package/styles/fluent2-lite.css +0 -681
  85. package/styles/fluent2-lite.scss +0 -2
  86. package/styles/fluent2.css +0 -681
  87. package/styles/fluent2.scss +0 -2
  88. package/styles/form-renderer/_all.scss +0 -2
  89. package/styles/form-renderer/_bds-definition.scss +0 -8
  90. package/styles/form-renderer/_bootstrap-dark-definition.scss +0 -8
  91. package/styles/form-renderer/_bootstrap-definition.scss +0 -8
  92. package/styles/form-renderer/_bootstrap4-definition.scss +0 -8
  93. package/styles/form-renderer/_bootstrap5-dark-definition.scss +0 -8
  94. package/styles/form-renderer/_bootstrap5-definition.scss +0 -8
  95. package/styles/form-renderer/_bootstrap5.3-definition.scss +0 -8
  96. package/styles/form-renderer/_fabric-dark-definition.scss +0 -8
  97. package/styles/form-renderer/_fabric-definition.scss +0 -8
  98. package/styles/form-renderer/_fluent-dark-definition.scss +0 -8
  99. package/styles/form-renderer/_fluent-definition.scss +0 -8
  100. package/styles/form-renderer/_fluent2-definition.scss +0 -8
  101. package/styles/form-renderer/_highcontrast-definition.scss +0 -8
  102. package/styles/form-renderer/_highcontrast-light-definition.scss +0 -8
  103. package/styles/form-renderer/_layout.scss +0 -480
  104. package/styles/form-renderer/_material-dark-definition.scss +0 -8
  105. package/styles/form-renderer/_material-definition.scss +0 -8
  106. package/styles/form-renderer/_material3-dark-definition.scss +0 -8
  107. package/styles/form-renderer/_material3-definition.scss +0 -8
  108. package/styles/form-renderer/_mixin.scss +0 -26
  109. package/styles/form-renderer/_tailwind-dark-definition.scss +0 -8
  110. package/styles/form-renderer/_tailwind-definition.scss +0 -8
  111. package/styles/form-renderer/_tailwind3-definition.scss +0 -8
  112. package/styles/form-renderer/_theme.scss +0 -69
  113. package/styles/form-renderer/_variables.scss +0 -2
  114. package/styles/form-renderer/bds.css +0 -599
  115. package/styles/form-renderer/bds.scss +0 -2
  116. package/styles/form-renderer/bootstrap-dark.css +0 -608
  117. package/styles/form-renderer/bootstrap-dark.scss +0 -2
  118. package/styles/form-renderer/bootstrap.css +0 -595
  119. package/styles/form-renderer/bootstrap.scss +0 -2
  120. package/styles/form-renderer/bootstrap4.css +0 -595
  121. package/styles/form-renderer/bootstrap4.scss +0 -2
  122. package/styles/form-renderer/bootstrap5-dark.css +0 -595
  123. package/styles/form-renderer/bootstrap5-dark.scss +0 -2
  124. package/styles/form-renderer/bootstrap5.3.css +0 -679
  125. package/styles/form-renderer/bootstrap5.3.scss +0 -2
  126. package/styles/form-renderer/bootstrap5.css +0 -595
  127. package/styles/form-renderer/bootstrap5.scss +0 -2
  128. package/styles/form-renderer/fabric-dark.css +0 -608
  129. package/styles/form-renderer/fabric-dark.scss +0 -2
  130. package/styles/form-renderer/fabric.css +0 -595
  131. package/styles/form-renderer/fabric.scss +0 -2
  132. package/styles/form-renderer/fluent-dark.css +0 -595
  133. package/styles/form-renderer/fluent-dark.scss +0 -2
  134. package/styles/form-renderer/fluent.css +0 -595
  135. package/styles/form-renderer/fluent.scss +0 -2
  136. package/styles/form-renderer/fluent2.css +0 -681
  137. package/styles/form-renderer/fluent2.scss +0 -2
  138. package/styles/form-renderer/highcontrast-light.css +0 -595
  139. package/styles/form-renderer/highcontrast-light.scss +0 -2
  140. package/styles/form-renderer/highcontrast.css +0 -608
  141. package/styles/form-renderer/highcontrast.scss +0 -2
  142. package/styles/form-renderer/material-dark.css +0 -608
  143. package/styles/form-renderer/material-dark.scss +0 -2
  144. package/styles/form-renderer/material.css +0 -595
  145. package/styles/form-renderer/material.scss +0 -2
  146. package/styles/form-renderer/material3-dark.css +0 -677
  147. package/styles/form-renderer/material3-dark.scss +0 -2
  148. package/styles/form-renderer/material3.css +0 -679
  149. package/styles/form-renderer/material3.scss +0 -2
  150. package/styles/form-renderer/tailwind-dark.css +0 -595
  151. package/styles/form-renderer/tailwind-dark.scss +0 -2
  152. package/styles/form-renderer/tailwind.css +0 -595
  153. package/styles/form-renderer/tailwind.scss +0 -2
  154. package/styles/form-renderer/tailwind3.css +0 -669
  155. package/styles/form-renderer/tailwind3.scss +0 -2
  156. package/styles/highcontrast-light-lite.css +0 -595
  157. package/styles/highcontrast-light-lite.scss +0 -2
  158. package/styles/highcontrast-light.css +0 -595
  159. package/styles/highcontrast-light.scss +0 -2
  160. package/styles/highcontrast-lite.css +0 -608
  161. package/styles/highcontrast-lite.scss +0 -2
  162. package/styles/highcontrast.css +0 -608
  163. package/styles/highcontrast.scss +0 -2
  164. package/styles/material-dark-lite.css +0 -608
  165. package/styles/material-dark-lite.scss +0 -2
  166. package/styles/material-dark.css +0 -608
  167. package/styles/material-dark.scss +0 -2
  168. package/styles/material-lite.css +0 -595
  169. package/styles/material-lite.scss +0 -2
  170. package/styles/material.css +0 -595
  171. package/styles/material.scss +0 -2
  172. package/styles/material3-dark-lite.css +0 -677
  173. package/styles/material3-dark-lite.scss +0 -2
  174. package/styles/material3-dark.css +0 -677
  175. package/styles/material3-dark.scss +0 -2
  176. package/styles/material3-lite.css +0 -679
  177. package/styles/material3-lite.scss +0 -2
  178. package/styles/material3.css +0 -679
  179. package/styles/material3.scss +0 -2
  180. package/styles/tailwind-dark-lite.css +0 -595
  181. package/styles/tailwind-dark-lite.scss +0 -2
  182. package/styles/tailwind-dark.css +0 -595
  183. package/styles/tailwind-dark.scss +0 -2
  184. package/styles/tailwind-lite.css +0 -595
  185. package/styles/tailwind-lite.scss +0 -2
  186. package/styles/tailwind.css +0 -595
  187. package/styles/tailwind.scss +0 -2
  188. package/styles/tailwind3-lite.css +0 -669
  189. package/styles/tailwind3-lite.scss +0 -2
  190. package/styles/tailwind3.css +0 -669
  191. package/styles/tailwind3.scss +0 -2
  192. /package/src/{common → form-renderer/common}/checkbox-group.d.ts +0 -0
  193. /package/src/{common → form-renderer/common}/conditional-rule-engine.js +0 -0
  194. /package/src/{common → form-renderer/common}/custom-validation-engine.js +0 -0
  195. /package/src/{common → form-renderer/common}/datagrid-component.d.ts +0 -0
  196. /package/src/{common → form-renderer/common}/datagrid-component.js +0 -0
  197. /package/src/{common → form-renderer/common}/expressions/dependency-tracker.d.ts +0 -0
  198. /package/src/{common → form-renderer/common}/expressions/dependency-tracker.js +0 -0
  199. /package/src/{common → form-renderer/common}/expressions/expression-engine.js +0 -0
  200. /package/src/{common → form-renderer/common}/expressions/expression-parser.js +0 -0
  201. /package/src/{common → form-renderer/common}/expressions/grid-expressions.d.ts +0 -0
  202. /package/src/{common → form-renderer/common}/expressions/grid-expressions.js +0 -0
  203. /package/src/{common → form-renderer/common}/expressions/index.d.ts +0 -0
  204. /package/src/{common → form-renderer/common}/expressions/index.js +0 -0
  205. /package/src/{common → form-renderer/common}/minmax-rule-engine.d.ts +0 -0
  206. /package/src/{common → form-renderer/common}/minmax-rule-engine.js +0 -0
  207. /package/src/{common → form-renderer/common}/option-fetcher.d.ts +0 -0
  208. /package/src/{common → form-renderer/common}/option-fetcher.js +0 -0
  209. /package/src/{common → form-renderer/common}/parser.d.ts +0 -0
  210. /package/src/{common → form-renderer/common}/parser.js +0 -0
  211. /package/src/{common → form-renderer/common}/static-html-renderer.d.ts +0 -0
  212. /package/src/{common → form-renderer/common}/static-html-renderer.js +0 -0
  213. /package/src/{common → form-renderer/common}/utils.js +0 -0
  214. /package/src/form-renderer/{render-form-field.d.ts → form-renderer/render-form-field.d.ts} +0 -0
  215. /package/src/form-renderer/{types → form-renderer/types}/form-schema.d.ts +0 -0
  216. /package/src/form-renderer/{types → form-renderer/types}/form-schema.js +0 -0
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 34.2.6
3
+ * version : 35.1.37
4
4
  * Copyright Syncfusion Inc. 2001 - 2025. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncfusion/ej2-form-renderer",
3
- "version": "34.2.6",
3
+ "version": "35.1.37",
4
4
  "description": "A package of Essential JS 2 Form Renderer which can render feature-rich Syncfusion components as a form.",
5
5
  "author": "Syncfusion Inc.",
6
6
  "license": "SEE LICENSE IN license",
@@ -8,16 +8,16 @@
8
8
  "module": "./index.js",
9
9
  "es2015": "./dist/es6/ej2-form-renderer.es5.js",
10
10
  "dependencies": {
11
- "@syncfusion/ej2-buttons": "~34.2.6",
12
- "@syncfusion/ej2-calendars": "~34.2.6",
13
- "@syncfusion/ej2-dropdowns": "~34.2.6",
14
- "@syncfusion/ej2-grids": "~34.2.6",
15
- "@syncfusion/ej2-image-editor": "~34.2.6",
16
- "@syncfusion/ej2-inputs": "~34.2.6",
17
- "@syncfusion/ej2-navigations": "~34.2.6",
18
- "@syncfusion/ej2-notifications": "~34.2.6",
19
- "@syncfusion/ej2-richtexteditor": "~34.2.6",
20
- "@syncfusion/ej2-splitbuttons": "~34.2.6"
11
+ "@syncfusion/ej2-buttons": "~35.1.37",
12
+ "@syncfusion/ej2-calendars": "~35.1.37",
13
+ "@syncfusion/ej2-dropdowns": "~35.1.37",
14
+ "@syncfusion/ej2-grids": "~35.1.37",
15
+ "@syncfusion/ej2-image-editor": "~35.1.37",
16
+ "@syncfusion/ej2-inputs": "~35.1.37",
17
+ "@syncfusion/ej2-navigations": "~35.1.37",
18
+ "@syncfusion/ej2-notifications": "~35.1.37",
19
+ "@syncfusion/ej2-richtexteditor": "~35.1.37",
20
+ "@syncfusion/ej2-splitbuttons": "~35.1.37"
21
21
  },
22
22
  "devDependencies": {},
23
23
  "keywords": [
@@ -103,7 +103,7 @@ var CheckboxGroup = /** @class */ (function () {
103
103
  var itemsStyle = "display:flex;flex-direction:" + (component.layoutDirection === 'row' ? 'row' : 'column') + ";" +
104
104
  ("flex-wrap:wrap;gap:" + (component.gap || '2px') + ";width:100%;");
105
105
  itemsContainer.setAttribute('style', itemsStyle);
106
- var options = Array.isArray(component.options) ? component.options : ['Option 1'];
106
+ var options = Array.isArray(component.options) ? component.options : [];
107
107
  var selectedItems = this.getSelectedItems();
108
108
  options.forEach(function (option, idx) {
109
109
  var optionValue = typeof option === 'string'
@@ -1,10 +1,5 @@
1
1
  import { ConditionType, ConditionRule, ConditionalDataRule, ChoiceBasedFieldRule } from '../form-renderer/types/form-schema';
2
- /**
3
- * Form field value type (aligned with FormValidator)
4
- *
5
- * @private
6
- */
7
- export declare type FormValueType = string | number | boolean | Date | bigint | symbol | File | FileList | string[] | number[] | any | null | undefined;
2
+ import { FormValueType } from './utils';
8
3
  /**
9
4
  * ConditionalRuleEngine class
10
5
  * @private
@@ -1,4 +1,4 @@
1
- import { FormValueType } from './expressions/expression-engine';
1
+ import { FormValueType } from './utils';
2
2
  /**
3
3
  * Custom Validation Engine
4
4
  *
@@ -1,7 +1,4 @@
1
- /**
2
- * @private
3
- */
4
- export declare type FormValueType = string | number | boolean | Date | null | undefined | any[];
1
+ import { FormValueType } from '../utils';
5
2
  /**
6
3
  * @private
7
4
  */
@@ -1,12 +1,4 @@
1
- /**
2
- * Field type information for validation
3
- * @private
4
- */
5
- export interface AvailableField {
6
- name: string;
7
- type: string;
8
- format?: string;
9
- }
1
+ import { AvailableField } from "../utils";
10
2
  /**
11
3
  * ExpressionParser - Parse and compile expressions
12
4
  *
@@ -1,3 +1,4 @@
1
+ export * from './expressions/index';
1
2
  export * from './checkbox-group';
2
3
  export * from './conditional-rule-engine';
3
4
  export * from './custom-validation-engine';
@@ -6,5 +7,6 @@ export * from './json-converter';
6
7
  export * from './minmax-rule-engine';
7
8
  export * from './option-fetcher';
8
9
  export * from './parser';
10
+ export * from './props-forwarder';
9
11
  export * from './static-html-renderer';
10
12
  export * from './utils';
@@ -1,3 +1,4 @@
1
+ export * from './expressions/index';
1
2
  export * from './checkbox-group';
2
3
  export * from './conditional-rule-engine';
3
4
  export * from './custom-validation-engine';
@@ -6,5 +7,6 @@ export * from './json-converter';
6
7
  export * from './minmax-rule-engine';
7
8
  export * from './option-fetcher';
8
9
  export * from './parser';
10
+ export * from './props-forwarder';
9
11
  export * from './static-html-renderer';
10
12
  export * from './utils';
@@ -623,6 +623,10 @@ export interface FieldProperties {
623
623
  * Applicable to all input form field components.
624
624
  */
625
625
  customValidation?: CustomValidationRule[] | FieldDataType;
626
+ /**
627
+ * Specifies the id name of the template which can be added using the `customWidgetSettings`.
628
+ */
629
+ templateId?: string;
626
630
  /**
627
631
  * Additional UI properties supported by the rendered component.
628
632
  */
@@ -912,11 +916,12 @@ export declare function splitSchema(heartSchema: FormSchema): UnifiedSchema;
912
916
  /**
913
917
  * @private
914
918
  */
915
- export declare function mergeSchema(unified: UnifiedSchema): FormSchema;
919
+ export declare function mergeSchema(unified: UnifiedSchema, dataModel?: Record<string, FieldDataType>): FormSchema;
916
920
  /**
917
921
  * @private
918
922
  */
919
923
  export declare function inferWidgetFromType(type: string, format?: string, hasOptions?: boolean): string;
924
+ export declare function inferTypeFromWidget(widget: string): string;
920
925
  /**
921
926
  * @private
922
927
  */
@@ -293,7 +293,7 @@ export function splitSchema(heartSchema) {
293
293
  var semanticType = UI_TYPE_TO_SEMANTIC_TYPE[component.type];
294
294
  // Handle layout containers
295
295
  if (component.type === 'table') {
296
- var safeId = sanitizeId(component.id, generateId(semanticType.type));
296
+ var safeId = sanitizeId(component.id, generateId('table'));
297
297
  var tableNode_1 = __assign({ type: 'table', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, rows: (component.tableCells && component.tableCells.length) || 0, cols: (component.tableCells && component.tableCells[0] && component.tableCells[0].length) || 0, cells: [], columnWidths: component.columnWidths }, (component.conditions ? { conditions: component.conditions } : {}));
298
298
  // Process table cells
299
299
  if (component.tableCells) {
@@ -314,7 +314,7 @@ export function splitSchema(heartSchema) {
314
314
  return "continue";
315
315
  }
316
316
  if (component.type === 'panel') {
317
- var safeId = sanitizeId(component.id, generateId(semanticType.type));
317
+ var safeId = sanitizeId(component.id, generateId('panel'));
318
318
  var panelNode_1 = __assign({ type: 'panel', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideBorders: component.hideBorders, hideLabel: component.hideLabel, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));
319
319
  // Process panel children
320
320
  // Reverse children and use unshift() to maintain order with depth-first processing
@@ -325,7 +325,7 @@ export function splitSchema(heartSchema) {
325
325
  return "continue";
326
326
  }
327
327
  if (component.type === 'tabs') {
328
- var safeId = sanitizeId(component.id, generateId(semanticType.type));
328
+ var safeId = sanitizeId(component.id, generateId('tabs'));
329
329
  var tabsNode_1 = __assign({ type: 'tabs', name: component.name, id: safeId, label: component.label, cssClass: component.cssClass, tabOptions: component.tabOptions, tabs: [] }, (component.conditions ? { conditions: component.conditions } : {}));
330
330
  // Process tabs
331
331
  if (component.tabItems) {
@@ -342,7 +342,7 @@ export function splitSchema(heartSchema) {
342
342
  return "continue";
343
343
  }
344
344
  if (component.type === 'card') {
345
- var safeId = sanitizeId(component.id, generateId(semanticType.type));
345
+ var safeId = sanitizeId(component.id, generateId('card'));
346
346
  var cardNode_1 = __assign({ type: 'card', id: safeId, name: component.name, label: component.label, cssClass: component.cssClass, hideLabel: component.hideLabel, cardTitle: component.cardTitle, cardSubtitle: component.cardSubtitle, children: [] }, (component.conditions ? { conditions: component.conditions } : {}));
347
347
  // Process card children
348
348
  // Reverse children and use unshift() to maintain order with depth-first processing
@@ -494,7 +494,7 @@ function extractUIField(component) {
494
494
  /**
495
495
  * @private
496
496
  */
497
- export function mergeSchema(unified) {
497
+ export function mergeSchema(unified, dataModel) {
498
498
  // Create lookup map for O(1) access to unified properties
499
499
  var propertyMap = new Map();
500
500
  var unifiedPropKeys = Object.keys(unified.properties);
@@ -529,7 +529,7 @@ export function mergeSchema(unified) {
529
529
  components.push(fallbackComponent);
530
530
  }
531
531
  else {
532
- components.push(mergeUnifiedField(unifiedField));
532
+ components.push(mergeUnifiedField(unifiedField, dataModel));
533
533
  }
534
534
  }
535
535
  else if (node.type === 'table') {
@@ -586,7 +586,7 @@ export function mergeSchema(unified) {
586
586
  // If layout is undefined or empty, generate a flat layout from properties
587
587
  var flatPropKeys = Object.keys(unified.properties);
588
588
  components = flatPropKeys.map(function (key) {
589
- return mergeUnifiedField(unified.properties[key]);
589
+ return mergeUnifiedField(unified.properties[key], dataModel);
590
590
  });
591
591
  }
592
592
  else {
@@ -597,7 +597,7 @@ export function mergeSchema(unified) {
597
597
  /**
598
598
  * @private
599
599
  */
600
- function mergeUnifiedField(unifiedField) {
600
+ function mergeUnifiedField(unifiedField, dataModel) {
601
601
  var hasOptions = unifiedField.options !== undefined && unifiedField.options.length > 0;
602
602
  var component = {
603
603
  id: unifiedField.id || generateId(unifiedField.widget || inferWidgetFromType(unifiedField.type, unifiedField.format, hasOptions)),
@@ -649,6 +649,17 @@ function mergeUnifiedField(unifiedField) {
649
649
  component.maxTime = unifiedField.maxTime;
650
650
  if (unifiedField.pattern !== undefined)
651
651
  component.regex = unifiedField.pattern;
652
+ if (unifiedField.name && dataModel && Object.prototype.hasOwnProperty.call(dataModel, unifiedField.name)) {
653
+ if (component.type === 'checkbox' || component.type === 'switch') {
654
+ component.checked = dataModel[unifiedField.name];
655
+ }
656
+ if (component.type === 'dataGrid') {
657
+ component.dataSource = dataModel[unifiedField.name];
658
+ }
659
+ else {
660
+ component.defaultValue = dataModel[unifiedField.name];
661
+ }
662
+ }
652
663
  return component;
653
664
  }
654
665
  /**
@@ -697,6 +708,36 @@ export function inferWidgetFromType(type, format, hasOptions) {
697
708
  return 'textbox';
698
709
  return 'textbox';
699
710
  }
711
+ export function inferTypeFromWidget(widget) {
712
+ switch (widget) {
713
+ case 'number':
714
+ case 'rangeSlider':
715
+ case 'rating':
716
+ return 'number';
717
+ case 'checkbox':
718
+ case 'switch':
719
+ return 'boolean';
720
+ case 'multiselect':
721
+ case 'checkboxGroup':
722
+ return 'array';
723
+ case 'button':
724
+ return 'button';
725
+ case 'message':
726
+ return 'message';
727
+ case 'signature':
728
+ return 'sign';
729
+ case 'imageEditor':
730
+ return 'image';
731
+ case 'fileUpload':
732
+ return 'file';
733
+ case 'colorPicker':
734
+ return 'color';
735
+ case 'dataGrid':
736
+ return 'grid';
737
+ default:
738
+ return 'string';
739
+ }
740
+ }
700
741
  /**
701
742
  * @private
702
743
  */
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @private
3
+ */
4
+ /**
5
+ * @private
6
+ */
7
+ export declare const RESERVED_RENDERER_KEYS: ReadonlyArray<string>;
8
+ /**
9
+ * EJ2 lifecycle / framework methods whose names MUST NOT be invoked
10
+ * by the pass-through (would be assigned-as-data, ignored by the
11
+ * framework, but also poison if mapped to a setter eager on init).
12
+ *
13
+ * @private
14
+ */
15
+ export declare const EJ2_LIFECYCLE_KEYS: ReadonlyArray<string>;
16
+ /**
17
+ * @private
18
+ */
19
+ export declare function pickUnmappedSchemaProps(component: {
20
+ [key: string]: unknown;
21
+ } | undefined | null, explicitKeys: ReadonlyArray<string>): {
22
+ [key: string]: unknown;
23
+ };
24
+ /**
25
+ * @private
26
+ */
27
+ export declare function applyExtraProps(control: any, extra: {
28
+ [key: string]: unknown;
29
+ }): number;
30
+ /**
31
+ * @private
32
+ */
33
+ export declare function forwardExtras(control: any, component: {
34
+ [key: string]: unknown;
35
+ } | undefined | null, explicitKeys: ReadonlyArray<string>, extras?: ReadonlyArray<{
36
+ key: string;
37
+ value: unknown;
38
+ }>): number;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @private
3
+ */
4
+ /**
5
+ * @private
6
+ */
7
+ export var RESERVED_RENDERER_KEYS = [
8
+ 'id',
9
+ 'type',
10
+ 'name',
11
+ 'label',
12
+ 'conditions',
13
+ 'customValidation',
14
+ 'customvalidation',
15
+ '_configured',
16
+ 'widget',
17
+ 'templateId',
18
+ 'kind',
19
+ 'as',
20
+ 'visibility',
21
+ 'options',
22
+ 'tableCells',
23
+ 'tabItems',
24
+ 'children',
25
+ 'templateData',
26
+ 'ref'
27
+ ];
28
+ /**
29
+ * EJ2 lifecycle / framework methods whose names MUST NOT be invoked
30
+ * by the pass-through (would be assigned-as-data, ignored by the
31
+ * framework, but also poison if mapped to a setter eager on init).
32
+ *
33
+ * @private
34
+ */
35
+ export var EJ2_LIFECYCLE_KEYS = [
36
+ 'created',
37
+ 'destroyed',
38
+ 'appendTo',
39
+ 'appendToElement',
40
+ 'append',
41
+ 'render',
42
+ 'addEventListener',
43
+ 'removeEventListener',
44
+ 'getModuleName',
45
+ 'inject',
46
+ 'dataBind',
47
+ 'refresh',
48
+ 'onPropertyChanged'
49
+ ];
50
+ /**
51
+ * @private
52
+ */
53
+ export function pickUnmappedSchemaProps(component, explicitKeys) {
54
+ var comp = component || {};
55
+ var explicit = {};
56
+ for (var exIdx = 0; exIdx < explicitKeys.length; exIdx++) {
57
+ explicit[explicitKeys[exIdx]] = true;
58
+ }
59
+ for (var rIdx = 0; rIdx < RESERVED_RENDERER_KEYS.length; rIdx++) {
60
+ explicit[RESERVED_RENDERER_KEYS[rIdx]] = true;
61
+ }
62
+ for (var lIdx = 0; lIdx < EJ2_LIFECYCLE_KEYS.length; lIdx++) {
63
+ explicit[EJ2_LIFECYCLE_KEYS[lIdx]] = true;
64
+ }
65
+ var keys = [];
66
+ for (var k in comp) {
67
+ if (Object.prototype.hasOwnProperty.call(comp, k) &&
68
+ !explicit[k] &&
69
+ k !== '__proto__' &&
70
+ k !== 'constructor') {
71
+ keys.push(k);
72
+ }
73
+ }
74
+ keys.sort();
75
+ var out = {};
76
+ for (var outIdx = 0; outIdx < keys.length; outIdx++) {
77
+ var key = keys[outIdx];
78
+ out[key] = comp[key];
79
+ }
80
+ return out;
81
+ }
82
+ /**
83
+ * @private
84
+ */
85
+ export function applyExtraProps(control, extra) {
86
+ if (!control || !extra) {
87
+ return 0;
88
+ }
89
+ var keys = Object.keys(extra);
90
+ var applied = 0;
91
+ for (var kIdx = 0; kIdx < keys.length; kIdx++) {
92
+ var k = keys[kIdx];
93
+ try {
94
+ control[k] = extra[k];
95
+ applied++;
96
+ }
97
+ catch (e) {
98
+ var ctor = (control && control.constructor && control.constructor.name) || '<unknown>';
99
+ // eslint-disable-next-line no-console
100
+ console.warn("[form-renderer] cannot forward schema property \"" + k + "\" to control of type " + ctor + ":", e);
101
+ }
102
+ }
103
+ return applied;
104
+ }
105
+ /**
106
+ * @private
107
+ */
108
+ export function forwardExtras(control, component, explicitKeys, extras) {
109
+ var picked = pickUnmappedSchemaProps(component, explicitKeys);
110
+ if (extras && extras.length) {
111
+ for (var exIdx = 0; exIdx < extras.length; exIdx++) {
112
+ var item = extras[exIdx];
113
+ picked[item.key] = item.value;
114
+ }
115
+ // Re-sort with the injected extras deterministically.
116
+ var sorted_1 = {};
117
+ Object.keys(picked).sort().forEach(function (k) {
118
+ sorted_1[k] = picked[k];
119
+ });
120
+ return applyExtraProps(control, sorted_1);
121
+ }
122
+ return applyExtraProps(control, picked);
123
+ }
@@ -6,6 +6,12 @@ import { DataManager, Query } from '@syncfusion/ej2-data';
6
6
  export declare const VALIDATION_REGEX: {
7
7
  [key: string]: RegExp;
8
8
  };
9
+ /**
10
+ * Form field value type (aligned with FormValidator)
11
+ *
12
+ * @private
13
+ */
14
+ export declare type FormValueType = string | number | boolean | Date | bigint | symbol | File | FileList | string[] | number[] | any | null | undefined;
9
15
  /**
10
16
  * @private
11
17
  */
@@ -0,0 +1,17 @@
1
+ import { FormNode } from './types/form-schema';
2
+ import { CustomWidgetSettingModel } from './form-renderer-model';
3
+ /**
4
+ * @private
5
+ */
6
+ export declare type CustomWidgetMatchKind = 'fieldName' | 'templateId' | 'type';
7
+ /**
8
+ * @private
9
+ */
10
+ export interface ResolvedCustomWidget {
11
+ entry: CustomWidgetSettingModel;
12
+ matchKind: CustomWidgetMatchKind;
13
+ }
14
+ /**
15
+ * @private
16
+ */
17
+ export declare function resolveCustomWidget(component: FormNode, settings: CustomWidgetSettingModel[] | undefined): ResolvedCustomWidget | null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @private
3
+ */
4
+ export function resolveCustomWidget(component, settings) {
5
+ if (!settings || settings.length === 0) {
6
+ return null;
7
+ }
8
+ var compName = component.name;
9
+ if (typeof compName === 'string' && compName.length > 0) {
10
+ for (var _i = 0, settings_1 = settings; _i < settings_1.length; _i++) {
11
+ var entry = settings_1[_i];
12
+ var fn = entry.fieldName;
13
+ if (typeof fn === 'string' && fn.length > 0 && fn === compName) {
14
+ return { entry: entry, matchKind: 'fieldName' };
15
+ }
16
+ }
17
+ }
18
+ var compTemplateId = component.templateId;
19
+ if (typeof compTemplateId === 'string' && compTemplateId.length > 0) {
20
+ for (var _a = 0, settings_2 = settings; _a < settings_2.length; _a++) {
21
+ var entry = settings_2[_a];
22
+ var eid = entry.templateId;
23
+ if (typeof eid === 'string' && eid.length > 0 && eid === compTemplateId) {
24
+ return { entry: entry, matchKind: 'templateId' };
25
+ }
26
+ }
27
+ }
28
+ var compType = component.type;
29
+ if (typeof compType === 'string' && compType.length > 0) {
30
+ for (var _b = 0, settings_3 = settings; _b < settings_3.length; _b++) {
31
+ var entry = settings_3[_b];
32
+ var et = entry.type;
33
+ if (typeof et === 'string' && et.length > 0 && et === compType) {
34
+ return { entry: entry, matchKind: 'type' };
35
+ }
36
+ }
37
+ }
38
+ return null;
39
+ }
@@ -0,0 +1,125 @@
1
+ import { Component, Collection, Property, Event, EmitType, NotifyPropertyChanges, enableRipple, createElement, ChildProperty, isNullOrUndefined, L10n, getComponent, addClass, compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';import { Tab, Toolbar } from '@syncfusion/ej2-navigations';import { Tooltip } from '@syncfusion/ej2-popups';import { FormValidator, Signature } from '@syncfusion/ej2-inputs';import { FormLayout, FormNode, Schema } from './types/form-schema';import { renderFormField } from './render-form-field';import { resolveCustomWidget, ResolvedCustomWidget } from './custom-widget-resolver';import { mergeSchema, UnifiedSchema, inferTypeFromWidget } from '../common/json-converter';import { UniversalJsonParser } from '../common/parser';import { VALIDATION_REGEX, formatDateValues, splitWidths } from '../common/utils';import StaticHtmlRenderer from '../common/static-html-renderer';import { ConditionalRuleEngine, FormValueType } from '../common/index';import { ExpressionEngine, DependencyGraph } from '../common/expressions/expression-engine';import { MinMaxRuleEngine } from '../common/minmax-rule-engine';import { CustomValidationEngine } from '../common/custom-validation-engine';import { RichTextEditor } from '@syncfusion/ej2-richtexteditor';import { ImageEditor } from '@syncfusion/ej2-image-editor';
2
+ import {FieldDataType,SubmitEventArgs,ChangeEventArgs,ButtonClickEventArgs,FailureEventArgs} from "./form-renderer";
3
+ import {ComponentModel} from '@syncfusion/ej2-base';
4
+
5
+ /**
6
+ * Interface for a class CustomWidgetSetting
7
+ */
8
+ export interface CustomWidgetSettingModel {
9
+
10
+ /**
11
+ * Specifies the template content to be used.
12
+ *
13
+ * @default null
14
+ * @angularType string | object
15
+ * @reactType string | function | JSX.Element
16
+ * @vueType string | function
17
+ * @aspType string
18
+ */
19
+ template?: string | HTMLElement | Function;
20
+
21
+ /**
22
+ * Specifies the type of the widget to which the template must be bound. The values will be FormComponentType.
23
+ *
24
+ * @default ''
25
+ */
26
+ type?: string;
27
+
28
+ /**
29
+ * Specifies an optional template identifier. When set, the template is rendered to the JSON object whose templateId matches this value, irrespective of the type.
30
+ *
31
+ * @default ''
32
+ */
33
+ templateId?: string;
34
+
35
+ /**
36
+ * Specifies the name of the field to which the template must be bound. When set, the template is rendered to the control with the matching name, irrespective of the type property value.
37
+ *
38
+ * @default ''
39
+ */
40
+ fieldName?: string;
41
+
42
+ }
43
+
44
+ /**
45
+ * Interface for a class FormRenderer
46
+ */
47
+ export interface FormRendererModel extends ComponentModel{
48
+
49
+ /**
50
+ * Specifies the data schema of the form that needs to be rendered in the Form Renderer.
51
+ */
52
+ schema?: Schema | string | Record<string, unknown> | null;
53
+
54
+ /**
55
+ * Specifies initial values for form fields by field name.
56
+ *
57
+ * @default null
58
+ */
59
+ dataModel?: Record<string, FieldDataType> | null;
60
+
61
+ /**
62
+ * Specifies the form layout configuration (only applies when layout details are NOT available in the schema). Determines how form fields are arranged in columns.
63
+ *
64
+ * @default 'SingleColumn'
65
+ */
66
+ layout?: FormLayout | string;
67
+
68
+ /**
69
+ * Specifies the CSS class name to apply to the root form container element. This property supports space-separated multiple classes.
70
+ *
71
+ * @default ""
72
+ */
73
+ className?: string;
74
+
75
+ /**
76
+ * Specifies the custom widget settings to bind and render custom templates for form fields.
77
+ *
78
+ * @default null
79
+ */
80
+ customWidgetSettings?: CustomWidgetSettingModel[];
81
+
82
+ /**
83
+ * Specifies whether to enable the sanitization of untrusted HTML in custom widget string/script templates (`customWidgetSettings[].template`).
84
+ *
85
+ * @default false
86
+ */
87
+ enableHtmlSanitizer?: boolean;
88
+
89
+ /**
90
+ * Event triggered when the form is submitted.
91
+ * This event provides form data and validation status in the event argument.
92
+ *
93
+ * @event
94
+ */
95
+ submit?: EmitType<SubmitEventArgs>;
96
+
97
+ /**
98
+ * Event triggered when any form field value changes. Fired on user input for tracked fields.
99
+ *
100
+ * @event
101
+ */
102
+ change?: EmitType<ChangeEventArgs>;
103
+
104
+ /**
105
+ * Event triggered when a button in the form is clicked. Applies to all button types (button, submit, splitButton).
106
+ *
107
+ * @event
108
+ */
109
+ buttonClick?: EmitType<ButtonClickEventArgs>;
110
+
111
+ /**
112
+ * Event triggered when an error is thrown in the form rendering or schema parsing.
113
+ *
114
+ * @event
115
+ */
116
+ failure?: EmitType<FailureEventArgs>;
117
+
118
+ /**
119
+ * Event triggered when all form elements are rendered and ready for interaction. Useful for performing post-render initialization or setup.
120
+ *
121
+ * @event
122
+ */
123
+ created?: EmitType<Object>;
124
+
125
+ }