@bpmn-io/form-js-viewer 1.0.0-alpha.4 → 1.0.0-alpha.6
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/LICENSE +22 -22
- package/README.md +164 -164
- package/dist/assets/flatpickr/light.css +809 -0
- package/dist/assets/form-js-base.css +880 -880
- package/dist/index.cjs +279 -279
- package/dist/index.cjs.map +1 -1
- package/dist/index.es.js +279 -279
- package/dist/index.es.js.map +1 -1
- package/dist/types/Form.d.ts +22 -0
- package/dist/types/types.d.ts +35 -35
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -44,26 +44,26 @@ const getFlavouredFeelVariableNames = (feelString, feelFlavour, options = {}) =>
|
|
|
44
44
|
}(simpleExpressionTree);
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* Get the variable name at the specified index in a given path expression.
|
|
49
|
-
*
|
|
50
|
-
* @param {Object} root - The root node of the path expression tree.
|
|
51
|
-
* @param {number} index - The index of the variable name to retrieve.
|
|
52
|
-
* @returns {string|null} The variable name at the specified index or null if index is out of bounds.
|
|
47
|
+
/**
|
|
48
|
+
* Get the variable name at the specified index in a given path expression.
|
|
49
|
+
*
|
|
50
|
+
* @param {Object} root - The root node of the path expression tree.
|
|
51
|
+
* @param {number} index - The index of the variable name to retrieve.
|
|
52
|
+
* @returns {string|null} The variable name at the specified index or null if index is out of bounds.
|
|
53
53
|
*/
|
|
54
54
|
const _getVariableNameAtPathIndex = (root, index) => {
|
|
55
55
|
const accessors = _deconstructPathExpression(root);
|
|
56
56
|
return accessors[index] || null;
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
* Extracts the variables which are required of the external context for a given path expression.
|
|
61
|
-
* This is done by traversing the path expression tree and keeping track of the current depth relative to the external context.
|
|
62
|
-
*
|
|
63
|
-
* @param {Object} node - The root node of the path expression tree.
|
|
64
|
-
* @param {number} initialDepth - The depth at which the root node is located in the outer context.
|
|
65
|
-
* @param {Object} specialDepthAccessors - Definitions of special keywords which represent more complex accesses of the outer context.
|
|
66
|
-
* @returns {Set} - A set containing the extracted variable names.
|
|
59
|
+
/**
|
|
60
|
+
* Extracts the variables which are required of the external context for a given path expression.
|
|
61
|
+
* This is done by traversing the path expression tree and keeping track of the current depth relative to the external context.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object} node - The root node of the path expression tree.
|
|
64
|
+
* @param {number} initialDepth - The depth at which the root node is located in the outer context.
|
|
65
|
+
* @param {Object} specialDepthAccessors - Definitions of special keywords which represent more complex accesses of the outer context.
|
|
66
|
+
* @returns {Set} - A set containing the extracted variable names.
|
|
67
67
|
*/
|
|
68
68
|
const _smartExtractVariableNames = (node, initialDepth, specialDepthAccessors) => {
|
|
69
69
|
// depth info represents the previous (initialised as null) and current depth of the current accessor in the path expression
|
|
@@ -109,11 +109,11 @@ const _smartExtractVariableNames = (node, initialDepth, specialDepthAccessors) =
|
|
|
109
109
|
return new Set(extractedVariables);
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
-
/**
|
|
113
|
-
* Deconstructs a path expression tree into an array of components.
|
|
114
|
-
*
|
|
115
|
-
* @param {Object} root - The root node of the path expression tree.
|
|
116
|
-
* @returns {Array<string>} An array of components in the path expression, in the correct order.
|
|
112
|
+
/**
|
|
113
|
+
* Deconstructs a path expression tree into an array of components.
|
|
114
|
+
*
|
|
115
|
+
* @param {Object} root - The root node of the path expression tree.
|
|
116
|
+
* @returns {Array<string>} An array of components in the path expression, in the correct order.
|
|
117
117
|
*/
|
|
118
118
|
const _deconstructPathExpression = root => {
|
|
119
119
|
let node = root;
|
|
@@ -132,13 +132,13 @@ const _deconstructPathExpression = root => {
|
|
|
132
132
|
return parts.reverse();
|
|
133
133
|
};
|
|
134
134
|
|
|
135
|
-
/**
|
|
136
|
-
* Builds a simplified feel structure tree from the given parse tree and feel string.
|
|
137
|
-
* The nodes follow this structure: `{ name: string, children: Array, variableName?: string }`
|
|
138
|
-
*
|
|
139
|
-
* @param {Object} parseTree - The parse tree generated by a parser.
|
|
140
|
-
* @param {string} feelString - The feel string used for parsing.
|
|
141
|
-
* @returns {Object} The simplified feel structure tree.
|
|
135
|
+
/**
|
|
136
|
+
* Builds a simplified feel structure tree from the given parse tree and feel string.
|
|
137
|
+
* The nodes follow this structure: `{ name: string, children: Array, variableName?: string }`
|
|
138
|
+
*
|
|
139
|
+
* @param {Object} parseTree - The parse tree generated by a parser.
|
|
140
|
+
* @param {string} feelString - The feel string used for parsing.
|
|
141
|
+
* @returns {Object} The simplified feel structure tree.
|
|
142
142
|
*/
|
|
143
143
|
const _buildSimpleFeelStructureTree = (parseTree, feelString) => {
|
|
144
144
|
const stack = [{
|
|
@@ -169,25 +169,25 @@ class FeelExpressionLanguage {
|
|
|
169
169
|
this._eventBus = eventBus;
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
/**
|
|
173
|
-
* Determines if the given value is a FEEL expression.
|
|
174
|
-
*
|
|
175
|
-
* @param {any} value
|
|
176
|
-
* @returns {boolean}
|
|
177
|
-
*
|
|
172
|
+
/**
|
|
173
|
+
* Determines if the given value is a FEEL expression.
|
|
174
|
+
*
|
|
175
|
+
* @param {any} value
|
|
176
|
+
* @returns {boolean}
|
|
177
|
+
*
|
|
178
178
|
*/
|
|
179
179
|
isExpression(value) {
|
|
180
180
|
return minDash.isString(value) && value.startsWith('=');
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
/**
|
|
184
|
-
* Retrieve variable names from a given FEEL expression.
|
|
185
|
-
*
|
|
186
|
-
* @param {string} expression
|
|
187
|
-
* @param {object} [options]
|
|
188
|
-
* @param {string} [options.type]
|
|
189
|
-
*
|
|
190
|
-
* @returns {string[]}
|
|
183
|
+
/**
|
|
184
|
+
* Retrieve variable names from a given FEEL expression.
|
|
185
|
+
*
|
|
186
|
+
* @param {string} expression
|
|
187
|
+
* @param {object} [options]
|
|
188
|
+
* @param {string} [options.type]
|
|
189
|
+
*
|
|
190
|
+
* @returns {string[]}
|
|
191
191
|
*/
|
|
192
192
|
getVariableNames(expression, options = {}) {
|
|
193
193
|
const {
|
|
@@ -202,13 +202,13 @@ class FeelExpressionLanguage {
|
|
|
202
202
|
return getFlavouredFeelVariableNames(expression, type);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
/**
|
|
206
|
-
* Evaluate an expression.
|
|
207
|
-
*
|
|
208
|
-
* @param {string} expression
|
|
209
|
-
* @param {import('../../types').Data} [data]
|
|
210
|
-
*
|
|
211
|
-
* @returns {any}
|
|
205
|
+
/**
|
|
206
|
+
* Evaluate an expression.
|
|
207
|
+
*
|
|
208
|
+
* @param {string} expression
|
|
209
|
+
* @param {import('../../types').Data} [data]
|
|
210
|
+
*
|
|
211
|
+
* @returns {any}
|
|
212
212
|
*/
|
|
213
213
|
evaluate(expression, data = {}) {
|
|
214
214
|
if (!expression) {
|
|
@@ -233,23 +233,23 @@ FeelExpressionLanguage.$inject = ['eventBus'];
|
|
|
233
233
|
class FeelersTemplating {
|
|
234
234
|
constructor() {}
|
|
235
235
|
|
|
236
|
-
/**
|
|
237
|
-
* Determines if the given value is a feelers template.
|
|
238
|
-
*
|
|
239
|
-
* @param {any} value
|
|
240
|
-
* @returns {boolean}
|
|
241
|
-
*
|
|
236
|
+
/**
|
|
237
|
+
* Determines if the given value is a feelers template.
|
|
238
|
+
*
|
|
239
|
+
* @param {any} value
|
|
240
|
+
* @returns {boolean}
|
|
241
|
+
*
|
|
242
242
|
*/
|
|
243
243
|
isTemplate(value) {
|
|
244
244
|
return minDash.isString(value) && (value.startsWith('=') || /{{.*?}}/.test(value));
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
-
/**
|
|
248
|
-
* Retrieve variable names from a given feelers template.
|
|
249
|
-
*
|
|
250
|
-
* @param {string} template
|
|
251
|
-
*
|
|
252
|
-
* @returns {string[]}
|
|
247
|
+
/**
|
|
248
|
+
* Retrieve variable names from a given feelers template.
|
|
249
|
+
*
|
|
250
|
+
* @param {string} template
|
|
251
|
+
*
|
|
252
|
+
* @returns {string[]}
|
|
253
253
|
*/
|
|
254
254
|
getVariableNames(template) {
|
|
255
255
|
if (!this.isTemplate(template)) {
|
|
@@ -275,17 +275,17 @@ class FeelersTemplating {
|
|
|
275
275
|
}, []);
|
|
276
276
|
}
|
|
277
277
|
|
|
278
|
-
/**
|
|
279
|
-
* Evaluate a template.
|
|
280
|
-
*
|
|
281
|
-
* @param {string} template
|
|
282
|
-
* @param {Object<string, any>} context
|
|
283
|
-
* @param {Object} options
|
|
284
|
-
* @param {boolean} [options.debug = false]
|
|
285
|
-
* @param {boolean} [options.strict = false]
|
|
286
|
-
* @param {Function} [options.buildDebugString]
|
|
287
|
-
*
|
|
288
|
-
* @returns
|
|
278
|
+
/**
|
|
279
|
+
* Evaluate a template.
|
|
280
|
+
*
|
|
281
|
+
* @param {string} template
|
|
282
|
+
* @param {Object<string, any>} context
|
|
283
|
+
* @param {Object} options
|
|
284
|
+
* @param {boolean} [options.debug = false]
|
|
285
|
+
* @param {boolean} [options.strict = false]
|
|
286
|
+
* @param {Function} [options.buildDebugString]
|
|
287
|
+
*
|
|
288
|
+
* @returns
|
|
289
289
|
*/
|
|
290
290
|
evaluate(template, context = {}, options = {}) {
|
|
291
291
|
const {
|
|
@@ -300,22 +300,22 @@ class FeelersTemplating {
|
|
|
300
300
|
});
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
/**
|
|
304
|
-
* @typedef {Object} ExpressionWithDepth
|
|
305
|
-
* @property {number} depth - The depth of the expression in the syntax tree.
|
|
306
|
-
* @property {string} expression - The extracted expression
|
|
303
|
+
/**
|
|
304
|
+
* @typedef {Object} ExpressionWithDepth
|
|
305
|
+
* @property {number} depth - The depth of the expression in the syntax tree.
|
|
306
|
+
* @property {string} expression - The extracted expression
|
|
307
307
|
*/
|
|
308
308
|
|
|
309
|
-
/**
|
|
310
|
-
* Extracts all feel expressions in the template along with their depth in the syntax tree.
|
|
311
|
-
* The depth is incremented for child expressions of loops to account for context drilling.
|
|
312
|
-
|
|
313
|
-
* @param {string} template - A feelers template string.
|
|
314
|
-
* @returns {Array<ExpressionWithDepth>} An array of objects, each containing the depth and the extracted expression.
|
|
315
|
-
*
|
|
316
|
-
* @example
|
|
317
|
-
* const template = "Hello {{user}}, you have:{{#loop items}}\n- {{amount}} {{name}}{{/loop}}.";
|
|
318
|
-
* const extractedExpressions = _extractExpressionsWithDepth(template);
|
|
309
|
+
/**
|
|
310
|
+
* Extracts all feel expressions in the template along with their depth in the syntax tree.
|
|
311
|
+
* The depth is incremented for child expressions of loops to account for context drilling.
|
|
312
|
+
* @name extractExpressionsWithDepth
|
|
313
|
+
* @param {string} template - A feelers template string.
|
|
314
|
+
* @returns {Array<ExpressionWithDepth>} An array of objects, each containing the depth and the extracted expression.
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* const template = "Hello {{user}}, you have:{{#loop items}}\n- {{amount}} {{name}}{{/loop}}.";
|
|
318
|
+
* const extractedExpressions = _extractExpressionsWithDepth(template);
|
|
319
319
|
*/
|
|
320
320
|
_extractExpressionsWithDepth(template) {
|
|
321
321
|
// build simplified feelers syntax tree
|
|
@@ -346,9 +346,9 @@ class FeelersTemplating {
|
|
|
346
346
|
}
|
|
347
347
|
FeelersTemplating.$inject = [];
|
|
348
348
|
|
|
349
|
-
/**
|
|
350
|
-
* @typedef {object} Condition
|
|
351
|
-
* @property {string} [hide]
|
|
349
|
+
/**
|
|
350
|
+
* @typedef {object} Condition
|
|
351
|
+
* @property {string} [hide]
|
|
352
352
|
*/
|
|
353
353
|
|
|
354
354
|
class ConditionChecker {
|
|
@@ -357,11 +357,11 @@ class ConditionChecker {
|
|
|
357
357
|
this._eventBus = eventBus;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
/**
|
|
361
|
-
* For given data, remove properties based on condition.
|
|
362
|
-
*
|
|
363
|
-
* @param {Object<string, any>} properties
|
|
364
|
-
* @param {Object<string, any>} data
|
|
360
|
+
/**
|
|
361
|
+
* For given data, remove properties based on condition.
|
|
362
|
+
*
|
|
363
|
+
* @param {Object<string, any>} properties
|
|
364
|
+
* @param {Object<string, any>} data
|
|
365
365
|
*/
|
|
366
366
|
applyConditions(properties, data = {}) {
|
|
367
367
|
const conditions = this._getConditions();
|
|
@@ -380,13 +380,13 @@ class ConditionChecker {
|
|
|
380
380
|
return newProperties;
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
/**
|
|
384
|
-
* Check if given condition is met. Returns null for invalid/missing conditions.
|
|
385
|
-
*
|
|
386
|
-
* @param {string} condition
|
|
387
|
-
* @param {import('../../types').Data} [data]
|
|
388
|
-
*
|
|
389
|
-
* @returns {boolean|null}
|
|
383
|
+
/**
|
|
384
|
+
* Check if given condition is met. Returns null for invalid/missing conditions.
|
|
385
|
+
*
|
|
386
|
+
* @param {string} condition
|
|
387
|
+
* @param {import('../../types').Data} [data]
|
|
388
|
+
*
|
|
389
|
+
* @returns {boolean|null}
|
|
390
390
|
*/
|
|
391
391
|
check(condition, data = {}) {
|
|
392
392
|
if (!condition) {
|
|
@@ -407,12 +407,12 @@ class ConditionChecker {
|
|
|
407
407
|
}
|
|
408
408
|
}
|
|
409
409
|
|
|
410
|
-
/**
|
|
411
|
-
* Check if hide condition is met.
|
|
412
|
-
*
|
|
413
|
-
* @param {Condition} condition
|
|
414
|
-
* @param {Object<string, any>} data
|
|
415
|
-
* @returns {boolean}
|
|
410
|
+
/**
|
|
411
|
+
* Check if hide condition is met.
|
|
412
|
+
*
|
|
413
|
+
* @param {Condition} condition
|
|
414
|
+
* @param {Object<string, any>} data
|
|
415
|
+
* @returns {boolean}
|
|
416
416
|
*/
|
|
417
417
|
_checkHideCondition(condition, data) {
|
|
418
418
|
if (!condition.hide) {
|
|
@@ -454,12 +454,12 @@ class MarkdownRenderer {
|
|
|
454
454
|
this._converter = new showdown.Converter();
|
|
455
455
|
}
|
|
456
456
|
|
|
457
|
-
/**
|
|
458
|
-
* Render markdown to HTML.
|
|
459
|
-
*
|
|
460
|
-
* @param {string} markdown - The markdown to render
|
|
461
|
-
*
|
|
462
|
-
* @returns {string} HTML
|
|
457
|
+
/**
|
|
458
|
+
* Render markdown to HTML.
|
|
459
|
+
*
|
|
460
|
+
* @param {string} markdown - The markdown to render
|
|
461
|
+
*
|
|
462
|
+
* @returns {string} HTML
|
|
463
463
|
*/
|
|
464
464
|
render(markdown) {
|
|
465
465
|
return this._converter.makeHtml(markdown);
|
|
@@ -1115,23 +1115,23 @@ class FormFieldRegistry {
|
|
|
1115
1115
|
}
|
|
1116
1116
|
FormFieldRegistry.$inject = ['eventBus'];
|
|
1117
1117
|
|
|
1118
|
-
/**
|
|
1119
|
-
* @typedef { { id: String, components: Array<String> } } FormRow
|
|
1120
|
-
* @typedef { { formFieldId: String, rows: Array<FormRow> } } FormRows
|
|
1118
|
+
/**
|
|
1119
|
+
* @typedef { { id: String, components: Array<String> } } FormRow
|
|
1120
|
+
* @typedef { { formFieldId: String, rows: Array<FormRow> } } FormRows
|
|
1121
1121
|
*/
|
|
1122
1122
|
|
|
1123
|
-
/**
|
|
1124
|
-
* Maintains the Form layout in a given structure, for example
|
|
1125
|
-
*
|
|
1126
|
-
* [
|
|
1127
|
-
* {
|
|
1128
|
-
* formFieldId: 'FormField_1',
|
|
1129
|
-
* rows: [
|
|
1130
|
-
* { id: 'Row_1', components: [ 'Text_1', 'Textdield_1', ... ] }
|
|
1131
|
-
* ]
|
|
1132
|
-
* }
|
|
1133
|
-
* ]
|
|
1134
|
-
*
|
|
1123
|
+
/**
|
|
1124
|
+
* Maintains the Form layout in a given structure, for example
|
|
1125
|
+
*
|
|
1126
|
+
* [
|
|
1127
|
+
* {
|
|
1128
|
+
* formFieldId: 'FormField_1',
|
|
1129
|
+
* rows: [
|
|
1130
|
+
* { id: 'Row_1', components: [ 'Text_1', 'Textdield_1', ... ] }
|
|
1131
|
+
* ]
|
|
1132
|
+
* }
|
|
1133
|
+
* ]
|
|
1134
|
+
*
|
|
1135
1135
|
*/
|
|
1136
1136
|
class FormLayouter {
|
|
1137
1137
|
constructor(eventBus) {
|
|
@@ -1141,8 +1141,8 @@ class FormLayouter {
|
|
|
1141
1141
|
this._eventBus = eventBus;
|
|
1142
1142
|
}
|
|
1143
1143
|
|
|
1144
|
-
/**
|
|
1145
|
-
* @param {FormRow} row
|
|
1144
|
+
/**
|
|
1145
|
+
* @param {FormRow} row
|
|
1146
1146
|
*/
|
|
1147
1147
|
addRow(formFieldId, row) {
|
|
1148
1148
|
let rowsPerComponent = this._rows.find(r => r.formFieldId === formFieldId);
|
|
@@ -1156,18 +1156,18 @@ class FormLayouter {
|
|
|
1156
1156
|
rowsPerComponent.rows.push(row);
|
|
1157
1157
|
}
|
|
1158
1158
|
|
|
1159
|
-
/**
|
|
1160
|
-
* @param {String} id
|
|
1161
|
-
* @returns {FormRow}
|
|
1159
|
+
/**
|
|
1160
|
+
* @param {String} id
|
|
1161
|
+
* @returns {FormRow}
|
|
1162
1162
|
*/
|
|
1163
1163
|
getRow(id) {
|
|
1164
1164
|
const rows = allRows(this._rows);
|
|
1165
1165
|
return rows.find(r => r.id === id);
|
|
1166
1166
|
}
|
|
1167
1167
|
|
|
1168
|
-
/**
|
|
1169
|
-
* @param {any} formField
|
|
1170
|
-
* @returns {FormRow}
|
|
1168
|
+
/**
|
|
1169
|
+
* @param {any} formField
|
|
1170
|
+
* @returns {FormRow}
|
|
1171
1171
|
*/
|
|
1172
1172
|
getRowForField(formField) {
|
|
1173
1173
|
return allRows(this._rows).find(r => {
|
|
@@ -1178,9 +1178,9 @@ class FormLayouter {
|
|
|
1178
1178
|
});
|
|
1179
1179
|
}
|
|
1180
1180
|
|
|
1181
|
-
/**
|
|
1182
|
-
* @param {String} formFieldId
|
|
1183
|
-
* @returns { Array<FormRow> }
|
|
1181
|
+
/**
|
|
1182
|
+
* @param {String} formFieldId
|
|
1183
|
+
* @returns { Array<FormRow> }
|
|
1184
1184
|
*/
|
|
1185
1185
|
getRows(formFieldId) {
|
|
1186
1186
|
const rowsForField = this._rows.find(r => formFieldId === r.formFieldId);
|
|
@@ -1190,15 +1190,15 @@ class FormLayouter {
|
|
|
1190
1190
|
return rowsForField.rows;
|
|
1191
1191
|
}
|
|
1192
1192
|
|
|
1193
|
-
/**
|
|
1194
|
-
* @returns {string}
|
|
1193
|
+
/**
|
|
1194
|
+
* @returns {string}
|
|
1195
1195
|
*/
|
|
1196
1196
|
nextRowId() {
|
|
1197
1197
|
return this._ids.nextPrefixed('Row_');
|
|
1198
1198
|
}
|
|
1199
1199
|
|
|
1200
|
-
/**
|
|
1201
|
-
* @param {any} formField
|
|
1200
|
+
/**
|
|
1201
|
+
* @param {any} formField
|
|
1202
1202
|
*/
|
|
1203
1203
|
calculateLayout(formField) {
|
|
1204
1204
|
const {
|
|
@@ -1252,9 +1252,9 @@ function groupByRow(components, ids) {
|
|
|
1252
1252
|
});
|
|
1253
1253
|
}
|
|
1254
1254
|
|
|
1255
|
-
/**
|
|
1256
|
-
* @param {Array<FormRows>} formRows
|
|
1257
|
-
* @returns {Array<FormRow>}
|
|
1255
|
+
/**
|
|
1256
|
+
* @param {Array<FormRows>} formRows
|
|
1257
|
+
* @returns {Array<FormRow>}
|
|
1258
1258
|
*/
|
|
1259
1259
|
function allRows(formRows) {
|
|
1260
1260
|
return minDash.flatten(formRows.map(c => c.rows));
|
|
@@ -1331,10 +1331,10 @@ function createInjector(bootstrapModules) {
|
|
|
1331
1331
|
return injector;
|
|
1332
1332
|
}
|
|
1333
1333
|
|
|
1334
|
-
/**
|
|
1335
|
-
* @param {string?} prefix
|
|
1336
|
-
*
|
|
1337
|
-
* @returns Element
|
|
1334
|
+
/**
|
|
1335
|
+
* @param {string?} prefix
|
|
1336
|
+
*
|
|
1337
|
+
* @returns Element
|
|
1338
1338
|
*/
|
|
1339
1339
|
function createFormContainer(prefix = 'fjs') {
|
|
1340
1340
|
const container = document.createElement('div');
|
|
@@ -1380,22 +1380,22 @@ function generateIdForType(type) {
|
|
|
1380
1380
|
return `${type}${generateIndexForType(type)}`;
|
|
1381
1381
|
}
|
|
1382
1382
|
|
|
1383
|
-
/**
|
|
1384
|
-
* @template T
|
|
1385
|
-
* @param {T} data
|
|
1386
|
-
* @param {(this: any, key: string, value: any) => any} [replacer]
|
|
1387
|
-
* @return {T}
|
|
1383
|
+
/**
|
|
1384
|
+
* @template T
|
|
1385
|
+
* @param {T} data
|
|
1386
|
+
* @param {(this: any, key: string, value: any) => any} [replacer]
|
|
1387
|
+
* @return {T}
|
|
1388
1388
|
*/
|
|
1389
1389
|
function clone(data, replacer) {
|
|
1390
1390
|
return JSON.parse(JSON.stringify(data, replacer));
|
|
1391
1391
|
}
|
|
1392
1392
|
|
|
1393
|
-
/**
|
|
1394
|
-
* Parse the schema for input variables a form might make use of
|
|
1395
|
-
*
|
|
1396
|
-
* @param {any} schema
|
|
1397
|
-
*
|
|
1398
|
-
* @return {string[]}
|
|
1393
|
+
/**
|
|
1394
|
+
* Parse the schema for input variables a form might make use of
|
|
1395
|
+
*
|
|
1396
|
+
* @param {any} schema
|
|
1397
|
+
*
|
|
1398
|
+
* @return {string[]}
|
|
1399
1399
|
*/
|
|
1400
1400
|
function getSchemaVariables(schema, expressionLanguage = new FeelExpressionLanguage(null), templating = new FeelersTemplating()) {
|
|
1401
1401
|
if (!schema.components) {
|
|
@@ -1447,11 +1447,11 @@ function getSchemaVariables(schema, expressionLanguage = new FeelExpressionLangu
|
|
|
1447
1447
|
}
|
|
1448
1448
|
|
|
1449
1449
|
class Importer {
|
|
1450
|
-
/**
|
|
1451
|
-
* @constructor
|
|
1452
|
-
* @param { import('../core').FormFieldRegistry } formFieldRegistry
|
|
1453
|
-
* @param { import('../render/FormFields').default } formFields
|
|
1454
|
-
* @param { import('../core').FormLayouter } formLayouter
|
|
1450
|
+
/**
|
|
1451
|
+
* @constructor
|
|
1452
|
+
* @param { import('../core').FormFieldRegistry } formFieldRegistry
|
|
1453
|
+
* @param { import('../render/FormFields').default } formFields
|
|
1454
|
+
* @param { import('../core').FormLayouter } formLayouter
|
|
1455
1455
|
*/
|
|
1456
1456
|
constructor(formFieldRegistry, formFields, formLayouter) {
|
|
1457
1457
|
this._formFieldRegistry = formFieldRegistry;
|
|
@@ -1459,15 +1459,15 @@ class Importer {
|
|
|
1459
1459
|
this._formLayouter = formLayouter;
|
|
1460
1460
|
}
|
|
1461
1461
|
|
|
1462
|
-
/**
|
|
1463
|
-
* Import schema adding `id`, `_parent` and `_path`
|
|
1464
|
-
* information to each field and adding it to the
|
|
1465
|
-
* form field registry.
|
|
1466
|
-
*
|
|
1467
|
-
* @param {any} schema
|
|
1468
|
-
* @param {any} [data]
|
|
1469
|
-
*
|
|
1470
|
-
* @return { { warnings: Array<any>, schema: any, data: any } }
|
|
1462
|
+
/**
|
|
1463
|
+
* Import schema adding `id`, `_parent` and `_path`
|
|
1464
|
+
* information to each field and adding it to the
|
|
1465
|
+
* form field registry.
|
|
1466
|
+
*
|
|
1467
|
+
* @param {any} schema
|
|
1468
|
+
* @param {any} [data]
|
|
1469
|
+
*
|
|
1470
|
+
* @return { { warnings: Array<any>, schema: any, data: any } }
|
|
1471
1471
|
*/
|
|
1472
1472
|
importSchema(schema, data = {}) {
|
|
1473
1473
|
// TODO: Add warnings - https://github.com/bpmn-io/form-js/issues/289
|
|
@@ -1488,11 +1488,11 @@ class Importer {
|
|
|
1488
1488
|
}
|
|
1489
1489
|
}
|
|
1490
1490
|
|
|
1491
|
-
/**
|
|
1492
|
-
* @param {any} formField
|
|
1493
|
-
* @param {string} [parentId]
|
|
1494
|
-
*
|
|
1495
|
-
* @return {any} importedField
|
|
1491
|
+
/**
|
|
1492
|
+
* @param {any} formField
|
|
1493
|
+
* @param {string} [parentId]
|
|
1494
|
+
*
|
|
1495
|
+
* @return {any} importedField
|
|
1496
1496
|
*/
|
|
1497
1497
|
importFormField(formField, parentId) {
|
|
1498
1498
|
const {
|
|
@@ -1543,10 +1543,10 @@ class Importer {
|
|
|
1543
1543
|
});
|
|
1544
1544
|
}
|
|
1545
1545
|
|
|
1546
|
-
/**
|
|
1547
|
-
* @param {Object} data
|
|
1548
|
-
*
|
|
1549
|
-
* @return {Object} initializedData
|
|
1546
|
+
/**
|
|
1547
|
+
* @param {Object} data
|
|
1548
|
+
*
|
|
1549
|
+
* @return {Object} initializedData
|
|
1550
1550
|
*/
|
|
1551
1551
|
initializeFieldValues(data) {
|
|
1552
1552
|
return this._formFieldRegistry.getAll().reduce((initializedData, formField) => {
|
|
@@ -1684,11 +1684,11 @@ const FormRenderContext = preact.createContext({
|
|
|
1684
1684
|
});
|
|
1685
1685
|
var FormRenderContext$1 = FormRenderContext;
|
|
1686
1686
|
|
|
1687
|
-
/**
|
|
1688
|
-
* @param {string} type
|
|
1689
|
-
* @param {boolean} [strict]
|
|
1690
|
-
*
|
|
1691
|
-
* @returns {any}
|
|
1687
|
+
/**
|
|
1688
|
+
* @param {string} type
|
|
1689
|
+
* @param {boolean} [strict]
|
|
1690
|
+
*
|
|
1691
|
+
* @returns {any}
|
|
1692
1692
|
*/
|
|
1693
1693
|
function getService(type, strict) {}
|
|
1694
1694
|
const FormContext = preact.createContext({
|
|
@@ -1704,10 +1704,10 @@ function useService(type, strict) {
|
|
|
1704
1704
|
return getService(type, strict);
|
|
1705
1705
|
}
|
|
1706
1706
|
|
|
1707
|
-
/**
|
|
1708
|
-
* Returns the conditionally filtered data of a form reactively.
|
|
1709
|
-
* Memoised to minimize re-renders
|
|
1710
|
-
*
|
|
1707
|
+
/**
|
|
1708
|
+
* Returns the conditionally filtered data of a form reactively.
|
|
1709
|
+
* Memoised to minimize re-renders
|
|
1710
|
+
*
|
|
1711
1711
|
*/
|
|
1712
1712
|
function useFilteredFormData() {
|
|
1713
1713
|
const {
|
|
@@ -1724,12 +1724,12 @@ function useFilteredFormData() {
|
|
|
1724
1724
|
}, [conditionChecker, data, initialData]);
|
|
1725
1725
|
}
|
|
1726
1726
|
|
|
1727
|
-
/**
|
|
1728
|
-
* Evaluate if condition is met reactively based on the conditionChecker and form data.
|
|
1729
|
-
*
|
|
1730
|
-
* @param {string | undefined} condition
|
|
1731
|
-
*
|
|
1732
|
-
* @returns {boolean} true if condition is met or no condition or condition checker exists
|
|
1727
|
+
/**
|
|
1728
|
+
* Evaluate if condition is met reactively based on the conditionChecker and form data.
|
|
1729
|
+
*
|
|
1730
|
+
* @param {string | undefined} condition
|
|
1731
|
+
*
|
|
1732
|
+
* @returns {boolean} true if condition is met or no condition or condition checker exists
|
|
1733
1733
|
*/
|
|
1734
1734
|
function useCondition(condition) {
|
|
1735
1735
|
const conditionChecker = useService('conditionChecker', false);
|
|
@@ -1739,13 +1739,13 @@ function useCondition(condition) {
|
|
|
1739
1739
|
}, [conditionChecker, condition, filteredData]);
|
|
1740
1740
|
}
|
|
1741
1741
|
|
|
1742
|
-
/**
|
|
1743
|
-
* Evaluate a string reactively based on the expressionLanguage and form data.
|
|
1744
|
-
* If the string is not an expression, it is returned as is.
|
|
1745
|
-
* Memoised to minimize re-renders.
|
|
1746
|
-
*
|
|
1747
|
-
* @param {string} value
|
|
1748
|
-
*
|
|
1742
|
+
/**
|
|
1743
|
+
* Evaluate a string reactively based on the expressionLanguage and form data.
|
|
1744
|
+
* If the string is not an expression, it is returned as is.
|
|
1745
|
+
* Memoised to minimize re-renders.
|
|
1746
|
+
*
|
|
1747
|
+
* @param {string} value
|
|
1748
|
+
*
|
|
1749
1749
|
*/
|
|
1750
1750
|
function useExpressionEvaluation(value) {
|
|
1751
1751
|
const formData = useFilteredFormData();
|
|
@@ -1774,16 +1774,16 @@ function useKeyDownAction(targetKey, action, listenerElement = window) {
|
|
|
1774
1774
|
});
|
|
1775
1775
|
}
|
|
1776
1776
|
|
|
1777
|
-
/**
|
|
1778
|
-
* Retrieve readonly value of a form field, given it can be an
|
|
1779
|
-
* expression optionally or configured globally.
|
|
1780
|
-
*
|
|
1781
|
-
* @typedef { import('../../types').FormProperties } FormProperties
|
|
1782
|
-
*
|
|
1783
|
-
* @param {any} formField
|
|
1784
|
-
* @param {FormProperties} properties
|
|
1785
|
-
*
|
|
1786
|
-
* @returns {boolean}
|
|
1777
|
+
/**
|
|
1778
|
+
* Retrieve readonly value of a form field, given it can be an
|
|
1779
|
+
* expression optionally or configured globally.
|
|
1780
|
+
*
|
|
1781
|
+
* @typedef { import('../../types').FormProperties } FormProperties
|
|
1782
|
+
*
|
|
1783
|
+
* @param {any} formField
|
|
1784
|
+
* @param {FormProperties} properties
|
|
1785
|
+
*
|
|
1786
|
+
* @returns {boolean}
|
|
1787
1787
|
*/
|
|
1788
1788
|
function useReadonly(formField, properties = {}) {
|
|
1789
1789
|
const expressionLanguage = useService('expressionLanguage');
|
|
@@ -1801,16 +1801,16 @@ function useReadonly(formField, properties = {}) {
|
|
|
1801
1801
|
return readonly || false;
|
|
1802
1802
|
}
|
|
1803
1803
|
|
|
1804
|
-
/**
|
|
1805
|
-
* Template a string reactively based on form data. If the string is not a template, it is returned as is.
|
|
1806
|
-
* Memoised to minimize re-renders
|
|
1807
|
-
*
|
|
1808
|
-
* @param {string} value
|
|
1809
|
-
* @param {Object} options
|
|
1810
|
-
* @param {boolean} [options.debug = false]
|
|
1811
|
-
* @param {boolean} [options.strict = false]
|
|
1812
|
-
* @param {Function} [options.buildDebugString]
|
|
1813
|
-
*
|
|
1804
|
+
/**
|
|
1805
|
+
* Template a string reactively based on form data. If the string is not a template, it is returned as is.
|
|
1806
|
+
* Memoised to minimize re-renders
|
|
1807
|
+
*
|
|
1808
|
+
* @param {string} value
|
|
1809
|
+
* @param {Object} options
|
|
1810
|
+
* @param {boolean} [options.debug = false]
|
|
1811
|
+
* @param {boolean} [options.strict = false]
|
|
1812
|
+
* @param {Function} [options.buildDebugString]
|
|
1813
|
+
*
|
|
1814
1814
|
*/
|
|
1815
1815
|
function useTemplateEvaluation(value, options) {
|
|
1816
1816
|
const filteredData = useFilteredFormData();
|
|
@@ -1823,17 +1823,17 @@ function useTemplateEvaluation(value, options) {
|
|
|
1823
1823
|
}, [filteredData, templating, value, options]);
|
|
1824
1824
|
}
|
|
1825
1825
|
|
|
1826
|
-
/**
|
|
1827
|
-
* Template a string reactively based on form data. If the string is not a template, it is returned as is.
|
|
1828
|
-
* If the string contains multiple lines, only the first line is returned.
|
|
1829
|
-
* Memoised to minimize re-renders
|
|
1830
|
-
*
|
|
1831
|
-
* @param {string} value
|
|
1832
|
-
* @param {Object} [options]
|
|
1833
|
-
* @param {boolean} [options.debug = false]
|
|
1834
|
-
* @param {boolean} [options.strict = false]
|
|
1835
|
-
* @param {Function} [options.buildDebugString]
|
|
1836
|
-
*
|
|
1826
|
+
/**
|
|
1827
|
+
* Template a string reactively based on form data. If the string is not a template, it is returned as is.
|
|
1828
|
+
* If the string contains multiple lines, only the first line is returned.
|
|
1829
|
+
* Memoised to minimize re-renders
|
|
1830
|
+
*
|
|
1831
|
+
* @param {string} value
|
|
1832
|
+
* @param {Object} [options]
|
|
1833
|
+
* @param {boolean} [options.debug = false]
|
|
1834
|
+
* @param {boolean} [options.strict = false]
|
|
1835
|
+
* @param {Function} [options.buildDebugString]
|
|
1836
|
+
*
|
|
1837
1837
|
*/
|
|
1838
1838
|
function useSingleLineTemplateEvaluation(value, options = {}) {
|
|
1839
1839
|
const evaluatedTemplate = useTemplateEvaluation(value, options);
|
|
@@ -2020,8 +2020,8 @@ function _isValueSomething(value) {
|
|
|
2020
2020
|
return value || value === 0 || value === false;
|
|
2021
2021
|
}
|
|
2022
2022
|
|
|
2023
|
-
/**
|
|
2024
|
-
* @enum { String }
|
|
2023
|
+
/**
|
|
2024
|
+
* @enum { String }
|
|
2025
2025
|
*/
|
|
2026
2026
|
const LOAD_STATES = {
|
|
2027
2027
|
LOADING: 'loading',
|
|
@@ -2029,17 +2029,17 @@ const LOAD_STATES = {
|
|
|
2029
2029
|
ERROR: 'error'
|
|
2030
2030
|
};
|
|
2031
2031
|
|
|
2032
|
-
/**
|
|
2033
|
-
* @typedef {Object} ValuesGetter
|
|
2034
|
-
* @property {Object[]} values - The values data
|
|
2035
|
-
* @property {(LOAD_STATES)} state - The values data's loading state, to use for conditional rendering
|
|
2032
|
+
/**
|
|
2033
|
+
* @typedef {Object} ValuesGetter
|
|
2034
|
+
* @property {Object[]} values - The values data
|
|
2035
|
+
* @property {(LOAD_STATES)} state - The values data's loading state, to use for conditional rendering
|
|
2036
2036
|
*/
|
|
2037
2037
|
|
|
2038
|
-
/**
|
|
2039
|
-
* A hook to load values for single and multiselect components.
|
|
2040
|
-
*
|
|
2041
|
-
* @param {Object} field - The form field to handle values for
|
|
2042
|
-
* @return {ValuesGetter} valuesGetter - A values getter object providing loading state and values
|
|
2038
|
+
/**
|
|
2039
|
+
* A hook to load values for single and multiselect components.
|
|
2040
|
+
*
|
|
2041
|
+
* @param {Object} field - The form field to handle values for
|
|
2042
|
+
* @return {ValuesGetter} valuesGetter - A values getter object providing loading state and values
|
|
2043
2043
|
*/
|
|
2044
2044
|
function useValuesAsync (field) {
|
|
2045
2045
|
const {
|
|
@@ -3154,10 +3154,10 @@ Datetime.config = {
|
|
|
3154
3154
|
}
|
|
3155
3155
|
};
|
|
3156
3156
|
|
|
3157
|
-
/**
|
|
3158
|
-
* This file must not be changed or exchanged.
|
|
3159
|
-
*
|
|
3160
|
-
* @see http://bpmn.io/license for more information.
|
|
3157
|
+
/**
|
|
3158
|
+
* This file must not be changed or exchanged.
|
|
3159
|
+
*
|
|
3160
|
+
* @see http://bpmn.io/license for more information.
|
|
3161
3161
|
*/
|
|
3162
3162
|
function Logo() {
|
|
3163
3163
|
return jsxRuntime.jsxs("svg", {
|
|
@@ -3289,11 +3289,11 @@ const ATTR_WHITESPACE_PATTERN = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u
|
|
|
3289
3289
|
|
|
3290
3290
|
const FORM_ELEMENT = document.createElement('form');
|
|
3291
3291
|
|
|
3292
|
-
/**
|
|
3293
|
-
* Sanitize a HTML string and return the cleaned, safe version.
|
|
3294
|
-
*
|
|
3295
|
-
* @param {string} html
|
|
3296
|
-
* @return {string}
|
|
3292
|
+
/**
|
|
3293
|
+
* Sanitize a HTML string and return the cleaned, safe version.
|
|
3294
|
+
*
|
|
3295
|
+
* @param {string} html
|
|
3296
|
+
* @return {string}
|
|
3297
3297
|
*/
|
|
3298
3298
|
|
|
3299
3299
|
// see https://github.com/developit/snarkdown/issues/70
|
|
@@ -3311,29 +3311,29 @@ function sanitizeHTML(html) {
|
|
|
3311
3311
|
}
|
|
3312
3312
|
}
|
|
3313
3313
|
|
|
3314
|
-
/**
|
|
3315
|
-
* Sanitizes an image source to ensure we only allow for data URI and links
|
|
3316
|
-
* that start with http(s).
|
|
3317
|
-
*
|
|
3318
|
-
* Note: Most browsers anyway do not support script execution in <img> elements.
|
|
3319
|
-
*
|
|
3320
|
-
* @param {string} src
|
|
3321
|
-
* @returns {string}
|
|
3314
|
+
/**
|
|
3315
|
+
* Sanitizes an image source to ensure we only allow for data URI and links
|
|
3316
|
+
* that start with http(s).
|
|
3317
|
+
*
|
|
3318
|
+
* Note: Most browsers anyway do not support script execution in <img> elements.
|
|
3319
|
+
*
|
|
3320
|
+
* @param {string} src
|
|
3321
|
+
* @returns {string}
|
|
3322
3322
|
*/
|
|
3323
3323
|
function sanitizeImageSource(src) {
|
|
3324
3324
|
const valid = ALLOWED_IMAGE_SRC_PATTERN.test(src);
|
|
3325
3325
|
return valid ? src : '';
|
|
3326
3326
|
}
|
|
3327
3327
|
|
|
3328
|
-
/**
|
|
3329
|
-
* Recursively sanitize a HTML node, potentially
|
|
3330
|
-
* removing it, its children or attributes.
|
|
3331
|
-
*
|
|
3332
|
-
* Inspired by https://github.com/developit/snarkdown/issues/70
|
|
3333
|
-
* and https://github.com/cure53/DOMPurify. Simplified
|
|
3334
|
-
* for our use-case.
|
|
3335
|
-
*
|
|
3336
|
-
* @param {Element} node
|
|
3328
|
+
/**
|
|
3329
|
+
* Recursively sanitize a HTML node, potentially
|
|
3330
|
+
* removing it, its children or attributes.
|
|
3331
|
+
*
|
|
3332
|
+
* Inspired by https://github.com/developit/snarkdown/issues/70
|
|
3333
|
+
* and https://github.com/cure53/DOMPurify. Simplified
|
|
3334
|
+
* for our use-case.
|
|
3335
|
+
*
|
|
3336
|
+
* @param {Element} node
|
|
3337
3337
|
*/
|
|
3338
3338
|
function sanitizeNode(node) {
|
|
3339
3339
|
// allow text nodes
|
|
@@ -3377,13 +3377,13 @@ function sanitizeNode(node) {
|
|
|
3377
3377
|
}
|
|
3378
3378
|
}
|
|
3379
3379
|
|
|
3380
|
-
/**
|
|
3381
|
-
* Validates attributes for validity.
|
|
3382
|
-
*
|
|
3383
|
-
* @param {string} lcTag
|
|
3384
|
-
* @param {string} lcName
|
|
3385
|
-
* @param {string} value
|
|
3386
|
-
* @return {boolean}
|
|
3380
|
+
/**
|
|
3381
|
+
* Validates attributes for validity.
|
|
3382
|
+
*
|
|
3383
|
+
* @param {string} lcTag
|
|
3384
|
+
* @param {string} lcName
|
|
3385
|
+
* @param {string} value
|
|
3386
|
+
* @return {boolean}
|
|
3387
3387
|
*/
|
|
3388
3388
|
function isValidAttribute(lcTag, lcName, value) {
|
|
3389
3389
|
// disallow most attributes based on whitelist
|