@formio/js 5.0.0-dev.5954.7e72629 → 5.0.0-dev.5956.0e71b6d
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 +28 -1
- package/dist/formio.form.js +1 -1
- package/dist/formio.full.js +1 -1
- package/lib/cjs/Webform.d.ts +1 -1
- package/lib/cjs/components/_classes/field/Field.d.ts +2 -2
- package/lib/cjs/components/_classes/field/Field.js +1 -1
- package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +1 -1
- package/lib/cjs/components/address/Address.d.ts +1 -2
- package/lib/cjs/components/button/Button.d.ts +1 -1
- package/lib/cjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/cjs/components/columns/Columns.d.ts +1 -1
- package/lib/cjs/components/datagrid/DataGrid.d.ts +1 -1
- package/lib/cjs/components/day/Day.d.ts +1 -1
- package/lib/cjs/components/file/File.d.ts +1 -1
- package/lib/cjs/components/radio/Radio.d.ts +1 -1
- package/lib/cjs/components/select/Select.d.ts +1 -1
- package/lib/cjs/components/survey/Survey.d.ts +1 -1
- package/lib/cjs/components/table/Table.d.ts +1 -1
- package/lib/cjs/components/tabs/Tabs.d.ts +1 -1
- package/lib/mjs/Webform.d.ts +1 -1
- package/lib/mjs/components/_classes/field/Field.d.ts +2 -2
- package/lib/mjs/components/_classes/field/Field.js +1 -1
- package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +1 -1
- package/lib/mjs/components/address/Address.d.ts +1 -2
- package/lib/mjs/components/button/Button.d.ts +1 -1
- package/lib/mjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/mjs/components/columns/Columns.d.ts +1 -1
- package/lib/mjs/components/datagrid/DataGrid.d.ts +1 -1
- package/lib/mjs/components/day/Day.d.ts +1 -1
- package/lib/mjs/components/file/File.d.ts +1 -1
- package/lib/mjs/components/radio/Radio.d.ts +1 -1
- package/lib/mjs/components/select/Select.d.ts +1 -1
- package/lib/mjs/components/survey/Survey.d.ts +1 -1
- package/lib/mjs/components/table/Table.d.ts +1 -1
- package/lib/mjs/components/tabs/Tabs.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -6,7 +6,34 @@ This library is a plain JavaScript form renderer and SDK for Form.io. This allow
|
|
6
6
|
- Complete Form Builder which creates the JSON schema used to render the forms.
|
7
7
|
- Nested components, layouts, Date/Time, Select, Input Masks, and many more included features
|
8
8
|
- Full JavaScript API SDK library on top of Form.io
|
9
|
-
|
9
|
+
|
10
|
+
## Important Updates
|
11
|
+
|
12
|
+
### Namespace Change
|
13
|
+
|
14
|
+
Starting with version 5.x, this library has moved to a new namespace. Please update your npm install command as follows:
|
15
|
+
|
16
|
+
`npm install --save @formio/js`
|
17
|
+
|
18
|
+
If you are upgrading from version 4.x, please ensure you update your imports and dependencies to use the new namespace @formio/js.
|
19
|
+
|
20
|
+
### CDN update
|
21
|
+
|
22
|
+
Our cdn endpoints also reflect the changes to the new namespace when retrieving versions >4.x:
|
23
|
+
|
24
|
+
Example:
|
25
|
+
- https://cdn.form.io/js/formio.full.min.js
|
26
|
+
- https://cdn.form.io/js/5.0.0/formio.full.min.js
|
27
|
+
|
28
|
+
### Maintenance Mode for Version 4.x
|
29
|
+
|
30
|
+
Version 4.x of this library is now in maintenance mode. This means:
|
31
|
+
|
32
|
+
- No new features will be added to version 4.x.
|
33
|
+
- Only bug fixes and security updates will be provided.
|
34
|
+
|
35
|
+
For the latest features and improvements, we strongly recommend upgrading to version 5.x.
|
36
|
+
|
10
37
|
## Examples and Demonstration
|
11
38
|
To find out more about this library as well as see a demonstration of what you can do with this library, go to the Examples and Demo site @ [https://formio.github.io/formio.js](https://formio.github.io/formio.js)
|
12
39
|
|
package/dist/formio.form.js
CHANGED
@@ -4963,7 +4963,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4963
4963
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
4964
4964
|
|
4965
4965
|
"use strict";
|
4966
|
-
eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Component_1 = __importDefault(__webpack_require__(/*! ../component/Component */ \"./lib/cjs/components/_classes/component/Component.js\"));\n/*\n * Field class is a base class for all fields.\n * @extends Component\n */\nclass Field extends Component_1.default {\n /**\n * @param {object} element - The component to create.\n * @returns {
|
4966
|
+
eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Component_1 = __importDefault(__webpack_require__(/*! ../component/Component */ \"./lib/cjs/components/_classes/component/Component.js\"));\n/*\n * Field class is a base class for all fields.\n * @extends Component\n */\nclass Field extends Component_1.default {\n /**\n * @param {object} element - The component to create.\n * @returns {string} - The rendered HTML string of a component\n */\n render(element) {\n if (this.noField) {\n return super.render(element);\n }\n else if (this.isAdvancedLabel || this.options.condensedMode) {\n return super.render(this.renderTemplate('field', Object.assign(Object.assign({}, this.getLabelInfo(this.options.condensedMode)), { labelMarkup: this.renderTemplate('label'), element: element }), 'align'));\n }\n else {\n return super.render(this.renderTemplate('field', {\n labelMarkup: this.renderTemplate('label'),\n element: element,\n }));\n }\n }\n /**\n /* Saves current caret position to restore it after the component is redrawn\n * @param {HTMLElement} element - The element to save the caret position for.\n * @param {number} index - The index of the element.\n */\n saveCaretPosition(element, index) {\n var _a, _b;\n if (((_b = (_a = this.root) === null || _a === void 0 ? void 0 : _a.focusedComponent) === null || _b === void 0 ? void 0 : _b.path) === this.path) {\n try {\n this.root.currentSelection = { selection: [element.selectionStart, element.selectionEnd], index };\n }\n catch (e) {\n if (!(e instanceof DOMException)) {\n console.debug(e);\n }\n }\n }\n }\n}\nexports[\"default\"] = Field;\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/_classes/field/Field.js?");
|
4967
4967
|
|
4968
4968
|
/***/ }),
|
4969
4969
|
|
package/dist/formio.full.js
CHANGED
@@ -5633,7 +5633,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5633
5633
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
5634
5634
|
|
5635
5635
|
"use strict";
|
5636
|
-
eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Component_1 = __importDefault(__webpack_require__(/*! ../component/Component */ \"./lib/cjs/components/_classes/component/Component.js\"));\n/*\n * Field class is a base class for all fields.\n * @extends Component\n */\nclass Field extends Component_1.default {\n /**\n * @param {object} element - The component to create.\n * @returns {
|
5636
|
+
eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst Component_1 = __importDefault(__webpack_require__(/*! ../component/Component */ \"./lib/cjs/components/_classes/component/Component.js\"));\n/*\n * Field class is a base class for all fields.\n * @extends Component\n */\nclass Field extends Component_1.default {\n /**\n * @param {object} element - The component to create.\n * @returns {string} - The rendered HTML string of a component\n */\n render(element) {\n if (this.noField) {\n return super.render(element);\n }\n else if (this.isAdvancedLabel || this.options.condensedMode) {\n return super.render(this.renderTemplate('field', Object.assign(Object.assign({}, this.getLabelInfo(this.options.condensedMode)), { labelMarkup: this.renderTemplate('label'), element: element }), 'align'));\n }\n else {\n return super.render(this.renderTemplate('field', {\n labelMarkup: this.renderTemplate('label'),\n element: element,\n }));\n }\n }\n /**\n /* Saves current caret position to restore it after the component is redrawn\n * @param {HTMLElement} element - The element to save the caret position for.\n * @param {number} index - The index of the element.\n */\n saveCaretPosition(element, index) {\n var _a, _b;\n if (((_b = (_a = this.root) === null || _a === void 0 ? void 0 : _a.focusedComponent) === null || _b === void 0 ? void 0 : _b.path) === this.path) {\n try {\n this.root.currentSelection = { selection: [element.selectionStart, element.selectionEnd], index };\n }\n catch (e) {\n if (!(e instanceof DOMException)) {\n console.debug(e);\n }\n }\n }\n }\n}\nexports[\"default\"] = Field;\n\n\n//# sourceURL=webpack://Formio/./lib/cjs/components/_classes/field/Field.js?");
|
5637
5637
|
|
5638
5638
|
/***/ }),
|
5639
5639
|
|
package/lib/cjs/Webform.d.ts
CHANGED
@@ -363,7 +363,7 @@ declare class Webform extends NestedDataComponent {
|
|
363
363
|
executeFormController(): false | undefined;
|
364
364
|
build(element: any): Promise<any>;
|
365
365
|
getClassName(): string;
|
366
|
-
render():
|
366
|
+
render(): string;
|
367
367
|
redraw(): Promise<void> | Promise<boolean>;
|
368
368
|
attach(element: any): Promise<boolean>;
|
369
369
|
hasRequiredFields(): boolean;
|
@@ -1,9 +1,9 @@
|
|
1
1
|
export default class Field extends Component {
|
2
2
|
/**
|
3
3
|
* @param {object} element - The component to create.
|
4
|
-
* @returns {
|
4
|
+
* @returns {string} - The rendered HTML string of a component
|
5
5
|
*/
|
6
|
-
render(element: object):
|
6
|
+
render(element: object): string;
|
7
7
|
/**
|
8
8
|
/* Saves current caret position to restore it after the component is redrawn
|
9
9
|
* @param {HTMLElement} element - The element to save the caret position for.
|
@@ -11,7 +11,7 @@ const Component_1 = __importDefault(require("../component/Component"));
|
|
11
11
|
class Field extends Component_1.default {
|
12
12
|
/**
|
13
13
|
* @param {object} element - The component to create.
|
14
|
-
* @returns {
|
14
|
+
* @returns {string} - The rendered HTML string of a component
|
15
15
|
*/
|
16
16
|
render(element) {
|
17
17
|
if (this.noField) {
|
@@ -146,7 +146,7 @@ export default class NestedComponent extends Field {
|
|
146
146
|
*/
|
147
147
|
addComponent(component: import('@formio/core').Component, data?: object, before?: HTMLElement, noAdd?: boolean | undefined): any;
|
148
148
|
beforeFocus(): void;
|
149
|
-
render(children: any):
|
149
|
+
render(children: any): string;
|
150
150
|
renderComponents(components: any): any;
|
151
151
|
attach(element: any): Promise<[void, void]>;
|
152
152
|
/**
|
@@ -60,7 +60,7 @@ export default class AddressComponent extends ContainerComponent {
|
|
60
60
|
renderElement(value: any): any;
|
61
61
|
renderRow(value: any, index: any): any;
|
62
62
|
renderGrid(): any;
|
63
|
-
render():
|
63
|
+
render(): string;
|
64
64
|
onSelectAddress(address: any, element: any, index: any): void;
|
65
65
|
addRow(): void;
|
66
66
|
attach(element: any): Promise<void>;
|
@@ -71,4 +71,3 @@ export default class AddressComponent extends ContainerComponent {
|
|
71
71
|
getValueAsString(value: any, options: any): any;
|
72
72
|
}
|
73
73
|
import ContainerComponent from '../container/Container';
|
74
|
-
import Field from '../_classes/field/Field';
|
@@ -21,7 +21,7 @@ export default class ButtonComponent extends Field {
|
|
21
21
|
get clicked(): any;
|
22
22
|
get defaultValue(): boolean;
|
23
23
|
get oauthConfig(): any;
|
24
|
-
render():
|
24
|
+
render(): string;
|
25
25
|
attachButton(): void;
|
26
26
|
hasError: boolean | undefined;
|
27
27
|
isDisabledOnInvalid: any;
|
@@ -14,7 +14,7 @@ export default class ColumnsComponent extends NestedComponent {
|
|
14
14
|
get columnKey(): string;
|
15
15
|
columns: any[] | undefined;
|
16
16
|
labelIsHidden(): boolean;
|
17
|
-
render():
|
17
|
+
render(): string;
|
18
18
|
justifyColumn(items: any, index: any): boolean;
|
19
19
|
justify(): any;
|
20
20
|
get gridSize(): number;
|
@@ -55,7 +55,7 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
55
55
|
hasTopSubmit(): any;
|
56
56
|
hasBottomSubmit(): any;
|
57
57
|
get canAddColumn(): boolean;
|
58
|
-
render():
|
58
|
+
render(): string;
|
59
59
|
getRows(): {}[];
|
60
60
|
getColumns(): any[];
|
61
61
|
hasHeader(): any;
|
@@ -85,7 +85,7 @@ export default class DayComponent extends Field {
|
|
85
85
|
}[] | undefined;
|
86
86
|
setErrorClasses(elements: any, dirty: any, hasError: any): void;
|
87
87
|
dayFirst: any;
|
88
|
-
render():
|
88
|
+
render(): string;
|
89
89
|
renderField(name: any): any;
|
90
90
|
attach(element: any): Promise<void>;
|
91
91
|
set disabled(disabled: any);
|
@@ -45,7 +45,7 @@ export default class FileComponent extends Field {
|
|
45
45
|
type: number;
|
46
46
|
actions: number;
|
47
47
|
};
|
48
|
-
render():
|
48
|
+
render(): string;
|
49
49
|
getVideoStream(constraints: any): any;
|
50
50
|
stopVideoStream(videoStream: any): void;
|
51
51
|
getFrame(videoPlayer: any): Promise<any>;
|
@@ -28,7 +28,7 @@ export default class RadioComponent extends ListComponent {
|
|
28
28
|
optionsLoaded: boolean | undefined;
|
29
29
|
loadedOptions: any[] | undefined;
|
30
30
|
beforeSubmit(): Promise<any>;
|
31
|
-
render():
|
31
|
+
render(): string;
|
32
32
|
attach(element: any): Promise<void>;
|
33
33
|
detach(element: any): void;
|
34
34
|
validateValueProperty(): boolean;
|
@@ -112,7 +112,7 @@ export default class SelectComponent extends ListComponent {
|
|
112
112
|
activate(): void;
|
113
113
|
setLoadingItem(addToCurrentList?: boolean): void;
|
114
114
|
get active(): boolean | undefined;
|
115
|
-
render():
|
115
|
+
render(): string;
|
116
116
|
wrapElement(element: any): any;
|
117
117
|
choicesOptions(): any;
|
118
118
|
attach(element: any): Promise<void> | undefined;
|
@@ -14,7 +14,7 @@ export default class SurveyComponent extends Field {
|
|
14
14
|
operators: string[];
|
15
15
|
};
|
16
16
|
static savedValueTypes(schema: any): string[];
|
17
|
-
render():
|
17
|
+
render(): string;
|
18
18
|
attach(element: any): Promise<void>;
|
19
19
|
setValue(value: any, flags?: {}): boolean;
|
20
20
|
get emptyValue(): {};
|
@@ -19,6 +19,6 @@ export default class TableComponent extends NestedComponent {
|
|
19
19
|
get colWidth(): string;
|
20
20
|
noField: boolean;
|
21
21
|
table: any[] | undefined;
|
22
|
-
render():
|
22
|
+
render(): string;
|
23
23
|
}
|
24
24
|
import NestedComponent from '../_classes/nested/NestedComponent';
|
@@ -16,7 +16,7 @@ export default class TabsComponent extends NestedComponent {
|
|
16
16
|
currentTab: number;
|
17
17
|
noField: boolean;
|
18
18
|
tabs: any[] | undefined;
|
19
|
-
render():
|
19
|
+
render(): string;
|
20
20
|
detach(all: any): void;
|
21
21
|
/**
|
22
22
|
* Set the current tab.
|
package/lib/mjs/Webform.d.ts
CHANGED
@@ -363,7 +363,7 @@ declare class Webform extends NestedDataComponent {
|
|
363
363
|
executeFormController(): false | undefined;
|
364
364
|
build(element: any): Promise<any>;
|
365
365
|
getClassName(): string;
|
366
|
-
render():
|
366
|
+
render(): string;
|
367
367
|
redraw(): Promise<void> | Promise<boolean>;
|
368
368
|
attach(element: any): Promise<boolean>;
|
369
369
|
hasRequiredFields(): boolean;
|
@@ -1,9 +1,9 @@
|
|
1
1
|
export default class Field extends Component {
|
2
2
|
/**
|
3
3
|
* @param {object} element - The component to create.
|
4
|
-
* @returns {
|
4
|
+
* @returns {string} - The rendered HTML string of a component
|
5
5
|
*/
|
6
|
-
render(element: object):
|
6
|
+
render(element: object): string;
|
7
7
|
/**
|
8
8
|
/* Saves current caret position to restore it after the component is redrawn
|
9
9
|
* @param {HTMLElement} element - The element to save the caret position for.
|
@@ -6,7 +6,7 @@ import Component from '../component/Component';
|
|
6
6
|
export default class Field extends Component {
|
7
7
|
/**
|
8
8
|
* @param {object} element - The component to create.
|
9
|
-
* @returns {
|
9
|
+
* @returns {string} - The rendered HTML string of a component
|
10
10
|
*/
|
11
11
|
render(element) {
|
12
12
|
if (this.noField) {
|
@@ -146,7 +146,7 @@ export default class NestedComponent extends Field {
|
|
146
146
|
*/
|
147
147
|
addComponent(component: import('@formio/core').Component, data?: object, before?: HTMLElement, noAdd?: boolean | undefined): any;
|
148
148
|
beforeFocus(): void;
|
149
|
-
render(children: any):
|
149
|
+
render(children: any): string;
|
150
150
|
renderComponents(components: any): any;
|
151
151
|
attach(element: any): Promise<[void, void]>;
|
152
152
|
/**
|
@@ -60,7 +60,7 @@ export default class AddressComponent extends ContainerComponent {
|
|
60
60
|
renderElement(value: any): any;
|
61
61
|
renderRow(value: any, index: any): any;
|
62
62
|
renderGrid(): any;
|
63
|
-
render():
|
63
|
+
render(): string;
|
64
64
|
onSelectAddress(address: any, element: any, index: any): void;
|
65
65
|
addRow(): void;
|
66
66
|
attach(element: any): Promise<void>;
|
@@ -71,4 +71,3 @@ export default class AddressComponent extends ContainerComponent {
|
|
71
71
|
getValueAsString(value: any, options: any): any;
|
72
72
|
}
|
73
73
|
import ContainerComponent from '../container/Container';
|
74
|
-
import Field from '../_classes/field/Field';
|
@@ -21,7 +21,7 @@ export default class ButtonComponent extends Field {
|
|
21
21
|
get clicked(): any;
|
22
22
|
get defaultValue(): boolean;
|
23
23
|
get oauthConfig(): any;
|
24
|
-
render():
|
24
|
+
render(): string;
|
25
25
|
attachButton(): void;
|
26
26
|
hasError: boolean | undefined;
|
27
27
|
isDisabledOnInvalid: any;
|
@@ -14,7 +14,7 @@ export default class ColumnsComponent extends NestedComponent {
|
|
14
14
|
get columnKey(): string;
|
15
15
|
columns: any[] | undefined;
|
16
16
|
labelIsHidden(): boolean;
|
17
|
-
render():
|
17
|
+
render(): string;
|
18
18
|
justifyColumn(items: any, index: any): boolean;
|
19
19
|
justify(): any;
|
20
20
|
get gridSize(): number;
|
@@ -55,7 +55,7 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
55
55
|
hasTopSubmit(): any;
|
56
56
|
hasBottomSubmit(): any;
|
57
57
|
get canAddColumn(): boolean;
|
58
|
-
render():
|
58
|
+
render(): string;
|
59
59
|
getRows(): {}[];
|
60
60
|
getColumns(): any[];
|
61
61
|
hasHeader(): any;
|
@@ -85,7 +85,7 @@ export default class DayComponent extends Field {
|
|
85
85
|
}[] | undefined;
|
86
86
|
setErrorClasses(elements: any, dirty: any, hasError: any): void;
|
87
87
|
dayFirst: any;
|
88
|
-
render():
|
88
|
+
render(): string;
|
89
89
|
renderField(name: any): any;
|
90
90
|
attach(element: any): Promise<void>;
|
91
91
|
set disabled(disabled: any);
|
@@ -45,7 +45,7 @@ export default class FileComponent extends Field {
|
|
45
45
|
type: number;
|
46
46
|
actions: number;
|
47
47
|
};
|
48
|
-
render():
|
48
|
+
render(): string;
|
49
49
|
getVideoStream(constraints: any): any;
|
50
50
|
stopVideoStream(videoStream: any): void;
|
51
51
|
getFrame(videoPlayer: any): Promise<any>;
|
@@ -28,7 +28,7 @@ export default class RadioComponent extends ListComponent {
|
|
28
28
|
optionsLoaded: boolean | undefined;
|
29
29
|
loadedOptions: any[] | undefined;
|
30
30
|
beforeSubmit(): Promise<any>;
|
31
|
-
render():
|
31
|
+
render(): string;
|
32
32
|
attach(element: any): Promise<void>;
|
33
33
|
detach(element: any): void;
|
34
34
|
validateValueProperty(): boolean;
|
@@ -112,7 +112,7 @@ export default class SelectComponent extends ListComponent {
|
|
112
112
|
activate(): void;
|
113
113
|
setLoadingItem(addToCurrentList?: boolean): void;
|
114
114
|
get active(): boolean | undefined;
|
115
|
-
render():
|
115
|
+
render(): string;
|
116
116
|
wrapElement(element: any): any;
|
117
117
|
choicesOptions(): any;
|
118
118
|
attach(element: any): Promise<void> | undefined;
|
@@ -14,7 +14,7 @@ export default class SurveyComponent extends Field {
|
|
14
14
|
operators: string[];
|
15
15
|
};
|
16
16
|
static savedValueTypes(schema: any): string[];
|
17
|
-
render():
|
17
|
+
render(): string;
|
18
18
|
attach(element: any): Promise<void>;
|
19
19
|
setValue(value: any, flags?: {}): boolean;
|
20
20
|
get emptyValue(): {};
|
@@ -19,6 +19,6 @@ export default class TableComponent extends NestedComponent {
|
|
19
19
|
get colWidth(): string;
|
20
20
|
noField: boolean;
|
21
21
|
table: any[] | undefined;
|
22
|
-
render():
|
22
|
+
render(): string;
|
23
23
|
}
|
24
24
|
import NestedComponent from '../_classes/nested/NestedComponent';
|
@@ -16,7 +16,7 @@ export default class TabsComponent extends NestedComponent {
|
|
16
16
|
currentTab: number;
|
17
17
|
noField: boolean;
|
18
18
|
tabs: any[] | undefined;
|
19
|
-
render():
|
19
|
+
render(): string;
|
20
20
|
detach(all: any): void;
|
21
21
|
/**
|
22
22
|
* Set the current tab.
|