@formio/js 5.0.0-dev.5760.bdc64e2 → 5.0.0-dev.5767.890ab86
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/Changelog.md +1 -0
- package/dist/formio.form.js +3 -3
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.full.js +4 -4
- package/dist/formio.full.min.js +1 -1
- package/lib/cjs/components/day/Day.js +7 -20
- package/lib/cjs/components/radio/Radio.d.ts +2 -18
- package/lib/cjs/components/radio/Radio.js +12 -21
- package/lib/cjs/components/selectboxes/SelectBoxes.d.ts +0 -22
- package/lib/cjs/components/selectboxes/SelectBoxes.js +12 -9
- package/lib/cjs/components/signature/editForm/Signature.edit.display.d.ts +0 -6
- package/lib/cjs/components/signature/editForm/Signature.edit.display.js +0 -1
- package/lib/mjs/components/day/Day.js +7 -20
- package/lib/mjs/components/radio/Radio.d.ts +2 -18
- package/lib/mjs/components/radio/Radio.js +15 -24
- package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +0 -22
- package/lib/mjs/components/selectboxes/SelectBoxes.js +16 -9
- package/lib/mjs/components/signature/editForm/Signature.edit.display.d.ts +0 -6
- package/lib/mjs/components/signature/editForm/Signature.edit.display.js +0 -1
- package/package.json +1 -1
|
@@ -30,8 +30,7 @@ class DayComponent extends Field_1.default {
|
|
|
30
30
|
required: false
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
|
-
dayFirst: false
|
|
34
|
-
defaultValue: ''
|
|
33
|
+
dayFirst: false
|
|
35
34
|
}, ...extend);
|
|
36
35
|
}
|
|
37
36
|
static get builderInfo() {
|
|
@@ -344,21 +343,15 @@ class DayComponent extends Field_1.default {
|
|
|
344
343
|
const valueParts = value.split('/');
|
|
345
344
|
const [DAY, MONTH, YEAR] = this.component.dayFirst ? [0, 1, 2] : [1, 0, 2];
|
|
346
345
|
const defaultValue = this.component.defaultValue ? this.component.defaultValue.split('/') : '';
|
|
347
|
-
const getNextPart = (shouldTake, defaultValue) =>
|
|
348
|
-
// Only push the part if it's not an empty string
|
|
349
|
-
const part = shouldTake ? valueParts.shift() : defaultValue;
|
|
350
|
-
if (part !== '') {
|
|
351
|
-
dateParts.push(part);
|
|
352
|
-
}
|
|
353
|
-
};
|
|
346
|
+
const getNextPart = (shouldTake, defaultValue) => dateParts.push(shouldTake ? valueParts.shift() : defaultValue);
|
|
354
347
|
if (this.dayFirst) {
|
|
355
|
-
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '');
|
|
348
|
+
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '00');
|
|
356
349
|
}
|
|
357
|
-
getNextPart(this.showMonth, defaultValue ? defaultValue[MONTH] : '');
|
|
350
|
+
getNextPart(this.showMonth, defaultValue ? defaultValue[MONTH] : '00');
|
|
358
351
|
if (!this.dayFirst) {
|
|
359
|
-
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '');
|
|
352
|
+
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '00');
|
|
360
353
|
}
|
|
361
|
-
getNextPart(this.showYear, defaultValue ? defaultValue[YEAR] : '');
|
|
354
|
+
getNextPart(this.showYear, defaultValue ? defaultValue[YEAR] : '0000');
|
|
362
355
|
return dateParts.join('/');
|
|
363
356
|
}
|
|
364
357
|
/**
|
|
@@ -565,13 +558,7 @@ class DayComponent extends Field_1.default {
|
|
|
565
558
|
}
|
|
566
559
|
const [DAY, MONTH, YEAR] = this.component.dayFirst ? [0, 1, 2] : [1, 0, 2];
|
|
567
560
|
const values = value.split('/');
|
|
568
|
-
|
|
569
|
-
return (values[DAY] === '00' ||
|
|
570
|
-
values[MONTH] === '00' ||
|
|
571
|
-
values[YEAR] === '0000' ||
|
|
572
|
-
values[DAY] === '' ||
|
|
573
|
-
values[MONTH] === '' ||
|
|
574
|
-
values[YEAR] === '');
|
|
561
|
+
return (values[DAY] === '00' || values[MONTH] === '00' || values[YEAR] === '0000');
|
|
575
562
|
}
|
|
576
563
|
getValidationFormat() {
|
|
577
564
|
return this.dayFirst ? 'DD-MM-YYYY' : 'MM-DD-YYYY';
|
|
@@ -8,26 +8,10 @@ export default class RadioComponent extends ListComponent {
|
|
|
8
8
|
schema: any;
|
|
9
9
|
};
|
|
10
10
|
static get conditionOperatorsSettings(): {
|
|
11
|
-
valueComponent(classComp: any):
|
|
12
|
-
type: string;
|
|
13
|
-
dataSrc: string;
|
|
14
|
-
valueProperty: string;
|
|
15
|
-
dataType: any;
|
|
16
|
-
data: {
|
|
17
|
-
custom(): any;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
11
|
+
valueComponent(classComp: any): any;
|
|
20
12
|
};
|
|
21
13
|
static get serverConditionSettings(): {
|
|
22
|
-
valueComponent(classComp: any):
|
|
23
|
-
type: string;
|
|
24
|
-
dataSrc: string;
|
|
25
|
-
valueProperty: string;
|
|
26
|
-
dataType: any;
|
|
27
|
-
data: {
|
|
28
|
-
custom: string;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
14
|
+
valueComponent(classComp: any): any;
|
|
31
15
|
};
|
|
32
16
|
static savedValueTypes(schema: any): any[];
|
|
33
17
|
constructor(component: any, options: any, data: any);
|
|
@@ -33,31 +33,22 @@ class RadioComponent extends ListComponent_1.default {
|
|
|
33
33
|
}
|
|
34
34
|
static get conditionOperatorsSettings() {
|
|
35
35
|
return Object.assign(Object.assign({}, super.conditionOperatorsSettings), { valueComponent(classComp) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
const isValuesSrc = !classComp.dataSrc || classComp.dataSrc === 'values';
|
|
37
|
+
return isValuesSrc
|
|
38
|
+
? {
|
|
39
|
+
type: 'select',
|
|
40
|
+
dataSrc: 'custom',
|
|
41
|
+
valueProperty: 'value',
|
|
42
|
+
dataType: classComp.dataType || '',
|
|
43
|
+
data: {
|
|
44
|
+
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`,
|
|
44
45
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
46
|
+
}
|
|
47
|
+
: Object.assign(Object.assign({}, classComp), { type: 'select' });
|
|
47
48
|
} });
|
|
48
49
|
}
|
|
49
50
|
static get serverConditionSettings() {
|
|
50
|
-
return
|
|
51
|
-
return {
|
|
52
|
-
type: 'select',
|
|
53
|
-
dataSrc: 'custom',
|
|
54
|
-
valueProperty: 'value',
|
|
55
|
-
dataType: classComp.dataType || '',
|
|
56
|
-
data: {
|
|
57
|
-
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
} });
|
|
51
|
+
return RadioComponent.conditionOperatorsSettings;
|
|
61
52
|
}
|
|
62
53
|
static savedValueTypes(schema) {
|
|
63
54
|
const { boolean, string, number, object, array } = utils_1.componentValueTypes;
|
|
@@ -1,26 +1,4 @@
|
|
|
1
1
|
export default class SelectBoxesComponent extends RadioComponent {
|
|
2
|
-
static get serverConditionSettings(): {
|
|
3
|
-
valueComponent(classComp: any): {
|
|
4
|
-
type: string;
|
|
5
|
-
dataSrc: string;
|
|
6
|
-
valueProperty: string;
|
|
7
|
-
dataType: string;
|
|
8
|
-
data: {
|
|
9
|
-
custom: string;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
static get conditionOperatorsSettings(): {
|
|
14
|
-
valueComponent(classComp: any): {
|
|
15
|
-
type: string;
|
|
16
|
-
dataSrc: string;
|
|
17
|
-
valueProperty: string;
|
|
18
|
-
dataType: string;
|
|
19
|
-
data: {
|
|
20
|
-
custom: string;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
2
|
static savedValueTypes(schema: any): string[];
|
|
25
3
|
constructor(...args: any[]);
|
|
26
4
|
get emptyValue(): any;
|
|
@@ -30,15 +30,18 @@ class SelectBoxesComponent extends Radio_1.default {
|
|
|
30
30
|
}
|
|
31
31
|
static get conditionOperatorsSettings() {
|
|
32
32
|
return Object.assign(Object.assign({}, super.conditionOperatorsSettings), { valueComponent(classComp) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
const isValuesSrc = !classComp.dataSrc || classComp.dataSrc === 'values';
|
|
34
|
+
return isValuesSrc
|
|
35
|
+
? {
|
|
36
|
+
type: 'select',
|
|
37
|
+
dataSrc: 'custom',
|
|
38
|
+
valueProperty: 'value',
|
|
39
|
+
dataType: 'string',
|
|
40
|
+
data: {
|
|
41
|
+
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
: Object.assign(Object.assign({}, classComp), { dataType: 'string', type: 'select' });
|
|
42
45
|
} });
|
|
43
46
|
}
|
|
44
47
|
static savedValueTypes(schema) {
|
|
@@ -7,7 +7,6 @@ declare const _default: ({
|
|
|
7
7
|
placeholder: string;
|
|
8
8
|
weight: number;
|
|
9
9
|
conditional?: undefined;
|
|
10
|
-
customConditional?: undefined;
|
|
11
10
|
ignore?: undefined;
|
|
12
11
|
} | {
|
|
13
12
|
type: string;
|
|
@@ -24,7 +23,6 @@ declare const _default: ({
|
|
|
24
23
|
};
|
|
25
24
|
};
|
|
26
25
|
weight: number;
|
|
27
|
-
customConditional?: undefined;
|
|
28
26
|
ignore?: undefined;
|
|
29
27
|
} | {
|
|
30
28
|
weight: number;
|
|
@@ -32,9 +30,6 @@ declare const _default: ({
|
|
|
32
30
|
label: string;
|
|
33
31
|
tooltip: string;
|
|
34
32
|
key: string;
|
|
35
|
-
customConditional: ({ options }: {
|
|
36
|
-
options: any;
|
|
37
|
-
}) => boolean;
|
|
38
33
|
input: boolean;
|
|
39
34
|
placeholder?: undefined;
|
|
40
35
|
conditional?: undefined;
|
|
@@ -49,6 +44,5 @@ declare const _default: ({
|
|
|
49
44
|
placeholder?: undefined;
|
|
50
45
|
weight?: undefined;
|
|
51
46
|
conditional?: undefined;
|
|
52
|
-
customConditional?: undefined;
|
|
53
47
|
})[];
|
|
54
48
|
export default _default;
|
|
@@ -39,7 +39,6 @@ exports.default = [
|
|
|
39
39
|
label: 'Keep Overlay Aspect Ratio',
|
|
40
40
|
tooltip: 'If checked, the field will have the same aspect ratio as its preview.',
|
|
41
41
|
key: 'keepOverlayRatio',
|
|
42
|
-
customConditional: ({ options }) => { var _a; return (((_a = options === null || options === void 0 ? void 0 : options.editForm) === null || _a === void 0 ? void 0 : _a.display) === 'pdf'); },
|
|
43
42
|
input: true
|
|
44
43
|
},
|
|
45
44
|
{
|
|
@@ -25,8 +25,7 @@ export default class DayComponent extends Field {
|
|
|
25
25
|
required: false
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
|
-
dayFirst: false
|
|
29
|
-
defaultValue: ''
|
|
28
|
+
dayFirst: false
|
|
30
29
|
}, ...extend);
|
|
31
30
|
}
|
|
32
31
|
static get builderInfo() {
|
|
@@ -342,21 +341,15 @@ export default class DayComponent extends Field {
|
|
|
342
341
|
const valueParts = value.split('/');
|
|
343
342
|
const [DAY, MONTH, YEAR] = this.component.dayFirst ? [0, 1, 2] : [1, 0, 2];
|
|
344
343
|
const defaultValue = this.component.defaultValue ? this.component.defaultValue.split('/') : '';
|
|
345
|
-
const getNextPart = (shouldTake, defaultValue) =>
|
|
346
|
-
// Only push the part if it's not an empty string
|
|
347
|
-
const part = shouldTake ? valueParts.shift() : defaultValue;
|
|
348
|
-
if (part !== '') {
|
|
349
|
-
dateParts.push(part);
|
|
350
|
-
}
|
|
351
|
-
};
|
|
344
|
+
const getNextPart = (shouldTake, defaultValue) => dateParts.push(shouldTake ? valueParts.shift() : defaultValue);
|
|
352
345
|
if (this.dayFirst) {
|
|
353
|
-
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '');
|
|
346
|
+
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '00');
|
|
354
347
|
}
|
|
355
|
-
getNextPart(this.showMonth, defaultValue ? defaultValue[MONTH] : '');
|
|
348
|
+
getNextPart(this.showMonth, defaultValue ? defaultValue[MONTH] : '00');
|
|
356
349
|
if (!this.dayFirst) {
|
|
357
|
-
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '');
|
|
350
|
+
getNextPart(this.showDay, defaultValue ? defaultValue[DAY] : '00');
|
|
358
351
|
}
|
|
359
|
-
getNextPart(this.showYear, defaultValue ? defaultValue[YEAR] : '');
|
|
352
|
+
getNextPart(this.showYear, defaultValue ? defaultValue[YEAR] : '0000');
|
|
360
353
|
return dateParts.join('/');
|
|
361
354
|
}
|
|
362
355
|
/**
|
|
@@ -561,13 +554,7 @@ export default class DayComponent extends Field {
|
|
|
561
554
|
}
|
|
562
555
|
const [DAY, MONTH, YEAR] = this.component.dayFirst ? [0, 1, 2] : [1, 0, 2];
|
|
563
556
|
const values = value.split('/');
|
|
564
|
-
|
|
565
|
-
return (values[DAY] === '00' ||
|
|
566
|
-
values[MONTH] === '00' ||
|
|
567
|
-
values[YEAR] === '0000' ||
|
|
568
|
-
values[DAY] === '' ||
|
|
569
|
-
values[MONTH] === '' ||
|
|
570
|
-
values[YEAR] === '');
|
|
557
|
+
return (values[DAY] === '00' || values[MONTH] === '00' || values[YEAR] === '0000');
|
|
571
558
|
}
|
|
572
559
|
getValidationFormat() {
|
|
573
560
|
return this.dayFirst ? 'DD-MM-YYYY' : 'MM-DD-YYYY';
|
|
@@ -8,26 +8,10 @@ export default class RadioComponent extends ListComponent {
|
|
|
8
8
|
schema: any;
|
|
9
9
|
};
|
|
10
10
|
static get conditionOperatorsSettings(): {
|
|
11
|
-
valueComponent(classComp: any):
|
|
12
|
-
type: string;
|
|
13
|
-
dataSrc: string;
|
|
14
|
-
valueProperty: string;
|
|
15
|
-
dataType: any;
|
|
16
|
-
data: {
|
|
17
|
-
custom(): any;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
11
|
+
valueComponent(classComp: any): any;
|
|
20
12
|
};
|
|
21
13
|
static get serverConditionSettings(): {
|
|
22
|
-
valueComponent(classComp: any):
|
|
23
|
-
type: string;
|
|
24
|
-
dataSrc: string;
|
|
25
|
-
valueProperty: string;
|
|
26
|
-
dataType: any;
|
|
27
|
-
data: {
|
|
28
|
-
custom: string;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
14
|
+
valueComponent(classComp: any): any;
|
|
31
15
|
};
|
|
32
16
|
static savedValueTypes(schema: any): any[];
|
|
33
17
|
constructor(component: any, options: any, data: any);
|
|
@@ -30,35 +30,26 @@ export default class RadioComponent extends ListComponent {
|
|
|
30
30
|
return {
|
|
31
31
|
...super.conditionOperatorsSettings,
|
|
32
32
|
valueComponent(classComp) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
const isValuesSrc = !classComp.dataSrc || classComp.dataSrc === 'values';
|
|
34
|
+
return isValuesSrc
|
|
35
|
+
? {
|
|
36
|
+
type: 'select',
|
|
37
|
+
dataSrc: 'custom',
|
|
38
|
+
valueProperty: 'value',
|
|
39
|
+
dataType: classComp.dataType || '',
|
|
40
|
+
data: {
|
|
41
|
+
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`,
|
|
41
42
|
}
|
|
42
|
-
}
|
|
43
|
-
|
|
43
|
+
}
|
|
44
|
+
: {
|
|
45
|
+
...classComp,
|
|
46
|
+
type: 'select',
|
|
47
|
+
};
|
|
44
48
|
}
|
|
45
49
|
};
|
|
46
50
|
}
|
|
47
51
|
static get serverConditionSettings() {
|
|
48
|
-
return
|
|
49
|
-
...super.serverConditionSettings,
|
|
50
|
-
valueComponent(classComp) {
|
|
51
|
-
return {
|
|
52
|
-
type: 'select',
|
|
53
|
-
dataSrc: 'custom',
|
|
54
|
-
valueProperty: 'value',
|
|
55
|
-
dataType: classComp.dataType || '',
|
|
56
|
-
data: {
|
|
57
|
-
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
},
|
|
61
|
-
};
|
|
52
|
+
return RadioComponent.conditionOperatorsSettings;
|
|
62
53
|
}
|
|
63
54
|
static savedValueTypes(schema) {
|
|
64
55
|
const { boolean, string, number, object, array } = componentValueTypes;
|
|
@@ -1,26 +1,4 @@
|
|
|
1
1
|
export default class SelectBoxesComponent extends RadioComponent {
|
|
2
|
-
static get serverConditionSettings(): {
|
|
3
|
-
valueComponent(classComp: any): {
|
|
4
|
-
type: string;
|
|
5
|
-
dataSrc: string;
|
|
6
|
-
valueProperty: string;
|
|
7
|
-
dataType: string;
|
|
8
|
-
data: {
|
|
9
|
-
custom: string;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
static get conditionOperatorsSettings(): {
|
|
14
|
-
valueComponent(classComp: any): {
|
|
15
|
-
type: string;
|
|
16
|
-
dataSrc: string;
|
|
17
|
-
valueProperty: string;
|
|
18
|
-
dataType: string;
|
|
19
|
-
data: {
|
|
20
|
-
custom: string;
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
2
|
static savedValueTypes(schema: any): string[];
|
|
25
3
|
constructor(...args: any[]);
|
|
26
4
|
get emptyValue(): any;
|
|
@@ -27,15 +27,22 @@ export default class SelectBoxesComponent extends RadioComponent {
|
|
|
27
27
|
return {
|
|
28
28
|
...super.conditionOperatorsSettings,
|
|
29
29
|
valueComponent(classComp) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
const isValuesSrc = !classComp.dataSrc || classComp.dataSrc === 'values';
|
|
31
|
+
return isValuesSrc
|
|
32
|
+
? {
|
|
33
|
+
type: 'select',
|
|
34
|
+
dataSrc: 'custom',
|
|
35
|
+
valueProperty: 'value',
|
|
36
|
+
dataType: 'string',
|
|
37
|
+
data: {
|
|
38
|
+
custom: `values = ${classComp && classComp.values ? JSON.stringify(classComp.values) : []}`
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
: {
|
|
42
|
+
...classComp,
|
|
43
|
+
dataType: 'string',
|
|
44
|
+
type: 'select',
|
|
45
|
+
};
|
|
39
46
|
}
|
|
40
47
|
};
|
|
41
48
|
}
|
|
@@ -7,7 +7,6 @@ declare const _default: ({
|
|
|
7
7
|
placeholder: string;
|
|
8
8
|
weight: number;
|
|
9
9
|
conditional?: undefined;
|
|
10
|
-
customConditional?: undefined;
|
|
11
10
|
ignore?: undefined;
|
|
12
11
|
} | {
|
|
13
12
|
type: string;
|
|
@@ -24,7 +23,6 @@ declare const _default: ({
|
|
|
24
23
|
};
|
|
25
24
|
};
|
|
26
25
|
weight: number;
|
|
27
|
-
customConditional?: undefined;
|
|
28
26
|
ignore?: undefined;
|
|
29
27
|
} | {
|
|
30
28
|
weight: number;
|
|
@@ -32,9 +30,6 @@ declare const _default: ({
|
|
|
32
30
|
label: string;
|
|
33
31
|
tooltip: string;
|
|
34
32
|
key: string;
|
|
35
|
-
customConditional: ({ options }: {
|
|
36
|
-
options: any;
|
|
37
|
-
}) => boolean;
|
|
38
33
|
input: boolean;
|
|
39
34
|
placeholder?: undefined;
|
|
40
35
|
conditional?: undefined;
|
|
@@ -49,6 +44,5 @@ declare const _default: ({
|
|
|
49
44
|
placeholder?: undefined;
|
|
50
45
|
weight?: undefined;
|
|
51
46
|
conditional?: undefined;
|
|
52
|
-
customConditional?: undefined;
|
|
53
47
|
})[];
|
|
54
48
|
export default _default;
|
|
@@ -37,7 +37,6 @@ export default [
|
|
|
37
37
|
label: 'Keep Overlay Aspect Ratio',
|
|
38
38
|
tooltip: 'If checked, the field will have the same aspect ratio as its preview.',
|
|
39
39
|
key: 'keepOverlayRatio',
|
|
40
|
-
customConditional: ({ options }) => (options?.editForm?.display === 'pdf'),
|
|
41
40
|
input: true
|
|
42
41
|
},
|
|
43
42
|
{
|