@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.
- package/README.md +6 -3
- package/dist/ej2-form-renderer.umd.min.js +2 -2
- package/dist/ej2-form-renderer.umd.min.js.map +1 -1
- package/dist/es6/ej2-form-renderer.es2015.js +3261 -1523
- package/dist/es6/ej2-form-renderer.es2015.js.map +1 -1
- package/dist/es6/ej2-form-renderer.es5.js +3316 -1540
- package/dist/es6/ej2-form-renderer.es5.js.map +1 -1
- package/dist/global/ej2-form-renderer.min.js +2 -2
- package/dist/global/ej2-form-renderer.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/{common → form-renderer/common}/checkbox-group.js +1 -1
- package/src/{common → form-renderer/common}/conditional-rule-engine.d.ts +1 -6
- package/src/{common → form-renderer/common}/custom-validation-engine.d.ts +1 -1
- package/src/{common → form-renderer/common}/expressions/expression-engine.d.ts +1 -4
- package/src/{common → form-renderer/common}/expressions/expression-parser.d.ts +1 -9
- package/src/{common → form-renderer/common}/index.d.ts +2 -0
- package/src/{common → form-renderer/common}/index.js +2 -0
- package/src/{common → form-renderer/common}/json-converter.d.ts +6 -1
- package/src/{common → form-renderer/common}/json-converter.js +49 -8
- package/src/form-renderer/common/props-forwarder.d.ts +38 -0
- package/src/form-renderer/common/props-forwarder.js +123 -0
- package/src/{common → form-renderer/common}/utils.d.ts +6 -0
- package/src/form-renderer/form-renderer/custom-widget-resolver.d.ts +17 -0
- package/src/form-renderer/form-renderer/custom-widget-resolver.js +39 -0
- package/src/form-renderer/form-renderer/form-renderer-model.d.ts +125 -0
- package/src/form-renderer/form-renderer/form-renderer.d.ts +373 -0
- package/src/form-renderer/{form-renderer.js → form-renderer/form-renderer.js} +419 -298
- package/src/form-renderer/form-renderer/index.d.ts +7 -0
- package/src/form-renderer/form-renderer/index.js +6 -0
- package/src/form-renderer/{render-form-field.js → form-renderer/render-form-field.js} +154 -25
- package/src/form-renderer/index.d.ts +3 -4
- package/src/form-renderer/index.js +3 -3
- package/src/index.d.ts +1 -4
- package/src/index.js +1 -4
- package/common.d.ts +0 -4
- package/common.js +0 -4
- package/src/form-renderer/form-renderer-model.d.ts +0 -65
- package/src/form-renderer/form-renderer.d.ts +0 -425
- package/styles/bds-lite.css +0 -599
- package/styles/bds-lite.scss +0 -2
- package/styles/bds.css +0 -599
- package/styles/bds.scss +0 -2
- package/styles/bootstrap-dark-lite.css +0 -608
- package/styles/bootstrap-dark-lite.scss +0 -2
- package/styles/bootstrap-dark.css +0 -608
- package/styles/bootstrap-dark.scss +0 -2
- package/styles/bootstrap-lite.css +0 -595
- package/styles/bootstrap-lite.scss +0 -2
- package/styles/bootstrap.css +0 -595
- package/styles/bootstrap.scss +0 -2
- package/styles/bootstrap4-lite.css +0 -595
- package/styles/bootstrap4-lite.scss +0 -2
- package/styles/bootstrap4.css +0 -595
- package/styles/bootstrap4.scss +0 -2
- package/styles/bootstrap5-dark-lite.css +0 -595
- package/styles/bootstrap5-dark-lite.scss +0 -2
- package/styles/bootstrap5-dark.css +0 -595
- package/styles/bootstrap5-dark.scss +0 -2
- package/styles/bootstrap5-lite.css +0 -595
- package/styles/bootstrap5-lite.scss +0 -2
- package/styles/bootstrap5.3-lite.css +0 -679
- package/styles/bootstrap5.3-lite.scss +0 -2
- package/styles/bootstrap5.3.css +0 -679
- package/styles/bootstrap5.3.scss +0 -2
- package/styles/bootstrap5.css +0 -595
- package/styles/bootstrap5.scss +0 -2
- package/styles/fabric-dark-lite.css +0 -608
- package/styles/fabric-dark-lite.scss +0 -2
- package/styles/fabric-dark.css +0 -608
- package/styles/fabric-dark.scss +0 -2
- package/styles/fabric-lite.css +0 -595
- package/styles/fabric-lite.scss +0 -2
- package/styles/fabric.css +0 -595
- package/styles/fabric.scss +0 -2
- package/styles/fluent-dark-lite.css +0 -595
- package/styles/fluent-dark-lite.scss +0 -2
- package/styles/fluent-dark.css +0 -595
- package/styles/fluent-dark.scss +0 -2
- package/styles/fluent-lite.css +0 -595
- package/styles/fluent-lite.scss +0 -2
- package/styles/fluent.css +0 -595
- package/styles/fluent.scss +0 -2
- package/styles/fluent2-lite.css +0 -681
- package/styles/fluent2-lite.scss +0 -2
- package/styles/fluent2.css +0 -681
- package/styles/fluent2.scss +0 -2
- package/styles/form-renderer/_all.scss +0 -2
- package/styles/form-renderer/_bds-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap-dark-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap4-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5-dark-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5-definition.scss +0 -8
- package/styles/form-renderer/_bootstrap5.3-definition.scss +0 -8
- package/styles/form-renderer/_fabric-dark-definition.scss +0 -8
- package/styles/form-renderer/_fabric-definition.scss +0 -8
- package/styles/form-renderer/_fluent-dark-definition.scss +0 -8
- package/styles/form-renderer/_fluent-definition.scss +0 -8
- package/styles/form-renderer/_fluent2-definition.scss +0 -8
- package/styles/form-renderer/_highcontrast-definition.scss +0 -8
- package/styles/form-renderer/_highcontrast-light-definition.scss +0 -8
- package/styles/form-renderer/_layout.scss +0 -480
- package/styles/form-renderer/_material-dark-definition.scss +0 -8
- package/styles/form-renderer/_material-definition.scss +0 -8
- package/styles/form-renderer/_material3-dark-definition.scss +0 -8
- package/styles/form-renderer/_material3-definition.scss +0 -8
- package/styles/form-renderer/_mixin.scss +0 -26
- package/styles/form-renderer/_tailwind-dark-definition.scss +0 -8
- package/styles/form-renderer/_tailwind-definition.scss +0 -8
- package/styles/form-renderer/_tailwind3-definition.scss +0 -8
- package/styles/form-renderer/_theme.scss +0 -69
- package/styles/form-renderer/_variables.scss +0 -2
- package/styles/form-renderer/bds.css +0 -599
- package/styles/form-renderer/bds.scss +0 -2
- package/styles/form-renderer/bootstrap-dark.css +0 -608
- package/styles/form-renderer/bootstrap-dark.scss +0 -2
- package/styles/form-renderer/bootstrap.css +0 -595
- package/styles/form-renderer/bootstrap.scss +0 -2
- package/styles/form-renderer/bootstrap4.css +0 -595
- package/styles/form-renderer/bootstrap4.scss +0 -2
- package/styles/form-renderer/bootstrap5-dark.css +0 -595
- package/styles/form-renderer/bootstrap5-dark.scss +0 -2
- package/styles/form-renderer/bootstrap5.3.css +0 -679
- package/styles/form-renderer/bootstrap5.3.scss +0 -2
- package/styles/form-renderer/bootstrap5.css +0 -595
- package/styles/form-renderer/bootstrap5.scss +0 -2
- package/styles/form-renderer/fabric-dark.css +0 -608
- package/styles/form-renderer/fabric-dark.scss +0 -2
- package/styles/form-renderer/fabric.css +0 -595
- package/styles/form-renderer/fabric.scss +0 -2
- package/styles/form-renderer/fluent-dark.css +0 -595
- package/styles/form-renderer/fluent-dark.scss +0 -2
- package/styles/form-renderer/fluent.css +0 -595
- package/styles/form-renderer/fluent.scss +0 -2
- package/styles/form-renderer/fluent2.css +0 -681
- package/styles/form-renderer/fluent2.scss +0 -2
- package/styles/form-renderer/highcontrast-light.css +0 -595
- package/styles/form-renderer/highcontrast-light.scss +0 -2
- package/styles/form-renderer/highcontrast.css +0 -608
- package/styles/form-renderer/highcontrast.scss +0 -2
- package/styles/form-renderer/material-dark.css +0 -608
- package/styles/form-renderer/material-dark.scss +0 -2
- package/styles/form-renderer/material.css +0 -595
- package/styles/form-renderer/material.scss +0 -2
- package/styles/form-renderer/material3-dark.css +0 -677
- package/styles/form-renderer/material3-dark.scss +0 -2
- package/styles/form-renderer/material3.css +0 -679
- package/styles/form-renderer/material3.scss +0 -2
- package/styles/form-renderer/tailwind-dark.css +0 -595
- package/styles/form-renderer/tailwind-dark.scss +0 -2
- package/styles/form-renderer/tailwind.css +0 -595
- package/styles/form-renderer/tailwind.scss +0 -2
- package/styles/form-renderer/tailwind3.css +0 -669
- package/styles/form-renderer/tailwind3.scss +0 -2
- package/styles/highcontrast-light-lite.css +0 -595
- package/styles/highcontrast-light-lite.scss +0 -2
- package/styles/highcontrast-light.css +0 -595
- package/styles/highcontrast-light.scss +0 -2
- package/styles/highcontrast-lite.css +0 -608
- package/styles/highcontrast-lite.scss +0 -2
- package/styles/highcontrast.css +0 -608
- package/styles/highcontrast.scss +0 -2
- package/styles/material-dark-lite.css +0 -608
- package/styles/material-dark-lite.scss +0 -2
- package/styles/material-dark.css +0 -608
- package/styles/material-dark.scss +0 -2
- package/styles/material-lite.css +0 -595
- package/styles/material-lite.scss +0 -2
- package/styles/material.css +0 -595
- package/styles/material.scss +0 -2
- package/styles/material3-dark-lite.css +0 -677
- package/styles/material3-dark-lite.scss +0 -2
- package/styles/material3-dark.css +0 -677
- package/styles/material3-dark.scss +0 -2
- package/styles/material3-lite.css +0 -679
- package/styles/material3-lite.scss +0 -2
- package/styles/material3.css +0 -679
- package/styles/material3.scss +0 -2
- package/styles/tailwind-dark-lite.css +0 -595
- package/styles/tailwind-dark-lite.scss +0 -2
- package/styles/tailwind-dark.css +0 -595
- package/styles/tailwind-dark.scss +0 -2
- package/styles/tailwind-lite.css +0 -595
- package/styles/tailwind-lite.scss +0 -2
- package/styles/tailwind.css +0 -595
- package/styles/tailwind.scss +0 -2
- package/styles/tailwind3-lite.css +0 -669
- package/styles/tailwind3-lite.scss +0 -2
- package/styles/tailwind3.css +0 -669
- package/styles/tailwind3.scss +0 -2
- /package/src/{common → form-renderer/common}/checkbox-group.d.ts +0 -0
- /package/src/{common → form-renderer/common}/conditional-rule-engine.js +0 -0
- /package/src/{common → form-renderer/common}/custom-validation-engine.js +0 -0
- /package/src/{common → form-renderer/common}/datagrid-component.d.ts +0 -0
- /package/src/{common → form-renderer/common}/datagrid-component.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/dependency-tracker.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/dependency-tracker.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/expression-engine.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/expression-parser.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/grid-expressions.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/grid-expressions.js +0 -0
- /package/src/{common → form-renderer/common}/expressions/index.d.ts +0 -0
- /package/src/{common → form-renderer/common}/expressions/index.js +0 -0
- /package/src/{common → form-renderer/common}/minmax-rule-engine.d.ts +0 -0
- /package/src/{common → form-renderer/common}/minmax-rule-engine.js +0 -0
- /package/src/{common → form-renderer/common}/option-fetcher.d.ts +0 -0
- /package/src/{common → form-renderer/common}/option-fetcher.js +0 -0
- /package/src/{common → form-renderer/common}/parser.d.ts +0 -0
- /package/src/{common → form-renderer/common}/parser.js +0 -0
- /package/src/{common → form-renderer/common}/static-html-renderer.d.ts +0 -0
- /package/src/{common → form-renderer/common}/static-html-renderer.js +0 -0
- /package/src/{common → form-renderer/common}/utils.js +0 -0
- /package/src/form-renderer/{render-form-field.d.ts → form-renderer/render-form-field.d.ts} +0 -0
- /package/src/form-renderer/{types → form-renderer/types}/form-schema.d.ts +0 -0
- /package/src/form-renderer/{types → form-renderer/types}/form-schema.js +0 -0
package/dist/global/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* filename: index.d.ts
|
|
3
|
-
* version :
|
|
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": "
|
|
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": "~
|
|
12
|
-
"@syncfusion/ej2-calendars": "~
|
|
13
|
-
"@syncfusion/ej2-dropdowns": "~
|
|
14
|
-
"@syncfusion/ej2-grids": "~
|
|
15
|
-
"@syncfusion/ej2-image-editor": "~
|
|
16
|
-
"@syncfusion/ej2-inputs": "~
|
|
17
|
-
"@syncfusion/ej2-navigations": "~
|
|
18
|
-
"@syncfusion/ej2-notifications": "~
|
|
19
|
-
"@syncfusion/ej2-richtexteditor": "~
|
|
20
|
-
"@syncfusion/ej2-splitbuttons": "~
|
|
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 : [
|
|
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,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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
+
}
|