@merkur/svelte 0.38.0 → 0.39.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  <p align="center">
2
2
  <a href="https://merkur.js.org/docs/getting-started" title="Getting started">
3
- <img src="https://raw.githubusercontent.com/mjancarik/merkur/master/images/merkur-illustration.png" width="100px" height="100px" alt="Merkur illustration"/>
3
+ <img src="https://raw.githubusercontent.com/mjancarik/merkur/master/images/merkur-logo.png" width="100px" height="100px" alt="Merkur illustration"/>
4
4
  </a>
5
5
  </p>
6
6
 
@@ -7,71 +7,88 @@ var helpers = require('@merkur/plugin-component/helpers');
7
7
  *
8
8
  * Client Factory for creating merkur widgets with svelte renderer.
9
9
  */
10
- function createSvelteWidget({ name, version, viewFactory, ...restProps }) {
11
- const widgetFactory = async (widgetParams) => core.createMerkurWidget({
12
- ...restProps,
13
- ...widgetParams,
14
- shouldHydrate(widget, { container }) {
15
- return !!container?.children?.length;
16
- },
17
- async mount(widget) {
18
- widget.$external.app = {};
19
- await helpers.mapViews(widget, viewFactory, ({ View, ErrorView, container, containerSelector, ...rest }) => {
20
- if (!container) {
21
- return;
22
- }
23
- const hydrate = widget.shouldHydrate({
24
- View,
25
- ErrorView,
26
- container,
27
- containerSelector,
28
- ...rest,
29
- });
30
- const renderView = (RenderedView) => {
31
- widget.$external.app[containerSelector] = new RenderedView({
32
- target: container,
33
- props: {
34
- widget,
35
- state: widget.state,
36
- props: widget.props,
37
- },
38
- hydrate,
39
- });
40
- };
41
- // @ts-expect-error the @merkur/plugin-error is optional
42
- if (widget?.error?.status && ErrorView) {
43
- return renderView(ErrorView);
44
- }
45
- return renderView(View);
46
- });
47
- },
48
- async update(widget) {
49
- await helpers.mapViews(widget, viewFactory, ({ containerSelector }) => {
50
- if (!widget.$external.app[containerSelector]) {
51
- return;
52
- }
53
- widget.$external.app[containerSelector].$set({
54
- state: widget.state,
55
- props: widget.props,
56
- });
57
- });
58
- },
59
- async unmount(widget) {
60
- await helpers.mapViews(widget, viewFactory, ({ containerSelector }) => {
61
- if (!widget.$external.app[containerSelector]) {
62
- return;
63
- }
64
- widget.$external.app[containerSelector].$destroy();
65
- });
66
- },
67
- });
68
- // Register widget factory on client
69
- core.createMerkur().register({
70
- name,
71
- version,
72
- createWidget: widgetFactory,
73
- });
74
- return widgetFactory;
10
+ function createSvelteWidget({
11
+ name,
12
+ version,
13
+ viewFactory,
14
+ ...restProps
15
+ }) {
16
+ const widgetFactory = async widgetParams => core.createMerkurWidget({
17
+ ...restProps,
18
+ ...widgetParams,
19
+ shouldHydrate(widget, {
20
+ container
21
+ }) {
22
+ return !!container?.children?.length;
23
+ },
24
+ async mount(widget) {
25
+ widget.$external.app = {};
26
+ await helpers.mapViews(widget, viewFactory, ({
27
+ View,
28
+ ErrorView,
29
+ container,
30
+ containerSelector,
31
+ ...rest
32
+ }) => {
33
+ if (!container) {
34
+ return;
35
+ }
36
+ const hydrate = widget.shouldHydrate({
37
+ View,
38
+ ErrorView,
39
+ container,
40
+ containerSelector,
41
+ ...rest
42
+ });
43
+ const renderView = RenderedView => {
44
+ widget.$external.app[containerSelector] = new RenderedView({
45
+ target: container,
46
+ props: {
47
+ widget,
48
+ state: widget.state,
49
+ props: widget.props
50
+ },
51
+ hydrate
52
+ });
53
+ };
54
+ // @ts-expect-error the @merkur/plugin-error is optional
55
+ if (widget?.error?.status && ErrorView) {
56
+ return renderView(ErrorView);
57
+ }
58
+ return renderView(View);
59
+ });
60
+ },
61
+ async update(widget) {
62
+ await helpers.mapViews(widget, viewFactory, ({
63
+ containerSelector
64
+ }) => {
65
+ if (!widget.$external.app[containerSelector]) {
66
+ return;
67
+ }
68
+ widget.$external.app[containerSelector].$set({
69
+ state: widget.state,
70
+ props: widget.props
71
+ });
72
+ });
73
+ },
74
+ async unmount(widget) {
75
+ await helpers.mapViews(widget, viewFactory, ({
76
+ containerSelector
77
+ }) => {
78
+ if (!widget.$external.app[containerSelector]) {
79
+ return;
80
+ }
81
+ widget.$external.app[containerSelector].$destroy();
82
+ });
83
+ }
84
+ });
85
+ // Register widget factory on client
86
+ core.createMerkur().register({
87
+ name,
88
+ version,
89
+ createWidget: widgetFactory
90
+ });
91
+ return widgetFactory;
75
92
  }
76
93
 
77
94
  exports.createSvelteWidget = createSvelteWidget;
@@ -7,71 +7,88 @@ var helpers = require('@merkur/plugin-component/helpers');
7
7
  *
8
8
  * Client Factory for creating merkur widgets with svelte renderer.
9
9
  */
10
- function createSvelteWidget({ name, version, viewFactory, ...restProps }) {
11
- const widgetFactory = async (widgetParams) => core.createMerkurWidget({
12
- ...restProps,
13
- ...widgetParams,
14
- shouldHydrate(widget, { container }) {
15
- return !!container?.children?.length;
16
- },
17
- async mount(widget) {
18
- widget.$external.app = {};
19
- await helpers.mapViews(widget, viewFactory, ({ View, ErrorView, container, containerSelector, ...rest }) => {
20
- if (!container) {
21
- return;
22
- }
23
- const hydrate = widget.shouldHydrate({
24
- View,
25
- ErrorView,
26
- container,
27
- containerSelector,
28
- ...rest,
29
- });
30
- const renderView = (RenderedView) => {
31
- widget.$external.app[containerSelector] = new RenderedView({
32
- target: container,
33
- props: {
34
- widget,
35
- state: widget.state,
36
- props: widget.props,
37
- },
38
- hydrate,
39
- });
40
- };
41
- // @ts-expect-error the @merkur/plugin-error is optional
42
- if (widget?.error?.status && ErrorView) {
43
- return renderView(ErrorView);
44
- }
45
- return renderView(View);
46
- });
47
- },
48
- async update(widget) {
49
- await helpers.mapViews(widget, viewFactory, ({ containerSelector }) => {
50
- if (!widget.$external.app[containerSelector]) {
51
- return;
52
- }
53
- widget.$external.app[containerSelector].$set({
54
- state: widget.state,
55
- props: widget.props,
56
- });
57
- });
58
- },
59
- async unmount(widget) {
60
- await helpers.mapViews(widget, viewFactory, ({ containerSelector }) => {
61
- if (!widget.$external.app[containerSelector]) {
62
- return;
63
- }
64
- widget.$external.app[containerSelector].$destroy();
65
- });
66
- },
67
- });
68
- // Register widget factory on client
69
- core.createMerkur().register({
70
- name,
71
- version,
72
- createWidget: widgetFactory,
73
- });
74
- return widgetFactory;
10
+ function createSvelteWidget({
11
+ name,
12
+ version,
13
+ viewFactory,
14
+ ...restProps
15
+ }) {
16
+ const widgetFactory = async widgetParams => core.createMerkurWidget({
17
+ ...restProps,
18
+ ...widgetParams,
19
+ shouldHydrate(widget, {
20
+ container
21
+ }) {
22
+ return !!container?.children?.length;
23
+ },
24
+ async mount(widget) {
25
+ widget.$external.app = {};
26
+ await helpers.mapViews(widget, viewFactory, ({
27
+ View,
28
+ ErrorView,
29
+ container,
30
+ containerSelector,
31
+ ...rest
32
+ }) => {
33
+ if (!container) {
34
+ return;
35
+ }
36
+ const hydrate = widget.shouldHydrate({
37
+ View,
38
+ ErrorView,
39
+ container,
40
+ containerSelector,
41
+ ...rest
42
+ });
43
+ const renderView = RenderedView => {
44
+ widget.$external.app[containerSelector] = new RenderedView({
45
+ target: container,
46
+ props: {
47
+ widget,
48
+ state: widget.state,
49
+ props: widget.props
50
+ },
51
+ hydrate
52
+ });
53
+ };
54
+ // @ts-expect-error the @merkur/plugin-error is optional
55
+ if (widget?.error?.status && ErrorView) {
56
+ return renderView(ErrorView);
57
+ }
58
+ return renderView(View);
59
+ });
60
+ },
61
+ async update(widget) {
62
+ await helpers.mapViews(widget, viewFactory, ({
63
+ containerSelector
64
+ }) => {
65
+ if (!widget.$external.app[containerSelector]) {
66
+ return;
67
+ }
68
+ widget.$external.app[containerSelector].$set({
69
+ state: widget.state,
70
+ props: widget.props
71
+ });
72
+ });
73
+ },
74
+ async unmount(widget) {
75
+ await helpers.mapViews(widget, viewFactory, ({
76
+ containerSelector
77
+ }) => {
78
+ if (!widget.$external.app[containerSelector]) {
79
+ return;
80
+ }
81
+ widget.$external.app[containerSelector].$destroy();
82
+ });
83
+ }
84
+ });
85
+ // Register widget factory on client
86
+ core.createMerkur().register({
87
+ name,
88
+ version,
89
+ createWidget: widgetFactory
90
+ });
91
+ return widgetFactory;
75
92
  }
76
93
 
77
94
  exports.createSvelteWidget = createSvelteWidget;
@@ -5,71 +5,88 @@ import { mapViews } from '@merkur/plugin-component/helpers';
5
5
  *
6
6
  * Client Factory for creating merkur widgets with svelte renderer.
7
7
  */
8
- function createSvelteWidget({ name, version, viewFactory, ...restProps }) {
9
- const widgetFactory = async (widgetParams) => createMerkurWidget({
10
- ...restProps,
11
- ...widgetParams,
12
- shouldHydrate(widget, { container }) {
13
- return !!container?.children?.length;
14
- },
15
- async mount(widget) {
16
- widget.$external.app = {};
17
- await mapViews(widget, viewFactory, ({ View, ErrorView, container, containerSelector, ...rest }) => {
18
- if (!container) {
19
- return;
20
- }
21
- const hydrate = widget.shouldHydrate({
22
- View,
23
- ErrorView,
24
- container,
25
- containerSelector,
26
- ...rest,
27
- });
28
- const renderView = (RenderedView) => {
29
- widget.$external.app[containerSelector] = new RenderedView({
30
- target: container,
31
- props: {
32
- widget,
33
- state: widget.state,
34
- props: widget.props,
35
- },
36
- hydrate,
37
- });
38
- };
39
- // @ts-expect-error the @merkur/plugin-error is optional
40
- if (widget?.error?.status && ErrorView) {
41
- return renderView(ErrorView);
42
- }
43
- return renderView(View);
44
- });
45
- },
46
- async update(widget) {
47
- await mapViews(widget, viewFactory, ({ containerSelector }) => {
48
- if (!widget.$external.app[containerSelector]) {
49
- return;
50
- }
51
- widget.$external.app[containerSelector].$set({
52
- state: widget.state,
53
- props: widget.props,
54
- });
55
- });
56
- },
57
- async unmount(widget) {
58
- await mapViews(widget, viewFactory, ({ containerSelector }) => {
59
- if (!widget.$external.app[containerSelector]) {
60
- return;
61
- }
62
- widget.$external.app[containerSelector].$destroy();
63
- });
64
- },
65
- });
66
- // Register widget factory on client
67
- createMerkur().register({
68
- name,
69
- version,
70
- createWidget: widgetFactory,
71
- });
72
- return widgetFactory;
8
+ function createSvelteWidget({
9
+ name,
10
+ version,
11
+ viewFactory,
12
+ ...restProps
13
+ }) {
14
+ const widgetFactory = async widgetParams => createMerkurWidget({
15
+ ...restProps,
16
+ ...widgetParams,
17
+ shouldHydrate(widget, {
18
+ container
19
+ }) {
20
+ return !!container?.children?.length;
21
+ },
22
+ async mount(widget) {
23
+ widget.$external.app = {};
24
+ await mapViews(widget, viewFactory, ({
25
+ View,
26
+ ErrorView,
27
+ container,
28
+ containerSelector,
29
+ ...rest
30
+ }) => {
31
+ if (!container) {
32
+ return;
33
+ }
34
+ const hydrate = widget.shouldHydrate({
35
+ View,
36
+ ErrorView,
37
+ container,
38
+ containerSelector,
39
+ ...rest
40
+ });
41
+ const renderView = RenderedView => {
42
+ widget.$external.app[containerSelector] = new RenderedView({
43
+ target: container,
44
+ props: {
45
+ widget,
46
+ state: widget.state,
47
+ props: widget.props
48
+ },
49
+ hydrate
50
+ });
51
+ };
52
+ // @ts-expect-error the @merkur/plugin-error is optional
53
+ if (widget?.error?.status && ErrorView) {
54
+ return renderView(ErrorView);
55
+ }
56
+ return renderView(View);
57
+ });
58
+ },
59
+ async update(widget) {
60
+ await mapViews(widget, viewFactory, ({
61
+ containerSelector
62
+ }) => {
63
+ if (!widget.$external.app[containerSelector]) {
64
+ return;
65
+ }
66
+ widget.$external.app[containerSelector].$set({
67
+ state: widget.state,
68
+ props: widget.props
69
+ });
70
+ });
71
+ },
72
+ async unmount(widget) {
73
+ await mapViews(widget, viewFactory, ({
74
+ containerSelector
75
+ }) => {
76
+ if (!widget.$external.app[containerSelector]) {
77
+ return;
78
+ }
79
+ widget.$external.app[containerSelector].$destroy();
80
+ });
81
+ }
82
+ });
83
+ // Register widget factory on client
84
+ createMerkur().register({
85
+ name,
86
+ version,
87
+ createWidget: widgetFactory
88
+ });
89
+ return widgetFactory;
73
90
  }
74
91
 
75
92
  export { createSvelteWidget };
@@ -5,45 +5,52 @@ var core = require('@merkur/core');
5
5
  /**
6
6
  * Server Factory for creating merkur widgets with svelte renderer.
7
7
  */
8
- function createSvelteWidget({ viewFactory, ...restProps }) {
9
- return (widgetParams) => core.createMerkurWidget({
10
- ...restProps,
11
- ...widgetParams,
12
- async mount(widget) {
13
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
14
- const renderParams = {
15
- widget,
16
- state: widget.state,
17
- props: widget.props,
18
- };
19
- /**
20
- * Wrapper around $dependencies.render function which
21
- * handles connection to ErrorView and error plugin when defined.
22
- */
23
- const renderView = (View) => {
24
- // @ts-expect-error the @merkur/plugin-error is optional
25
- if (widget?.error?.status && ErrorView) {
26
- return ErrorView.render(renderParams)?.html ?? '';
27
- }
28
- // @ts-expect-error the @merkur/plugin-error is optional
29
- if (widget?.error?.status) {
30
- return '';
31
- }
32
- return View.render(renderParams)?.html ?? '';
33
- };
34
- return {
35
- html: renderView(MainView),
36
- slot: Object.keys(slot).reduce((acc, cur) => {
37
- acc[cur] = {
38
- name: slot[cur].name,
39
- containerSelector: slot[cur].containerSelector,
40
- html: renderView(slot[cur].View),
41
- };
42
- return acc;
43
- }, {}),
44
- };
45
- },
46
- });
8
+ function createSvelteWidget({
9
+ viewFactory,
10
+ ...restProps
11
+ }) {
12
+ return widgetParams => core.createMerkurWidget({
13
+ ...restProps,
14
+ ...widgetParams,
15
+ async mount(widget) {
16
+ const {
17
+ View: MainView,
18
+ ErrorView,
19
+ slot = {}
20
+ } = await viewFactory(widget);
21
+ const renderParams = {
22
+ widget,
23
+ state: widget.state,
24
+ props: widget.props
25
+ };
26
+ /**
27
+ * Wrapper around $dependencies.render function which
28
+ * handles connection to ErrorView and error plugin when defined.
29
+ */
30
+ const renderView = View => {
31
+ // @ts-expect-error the @merkur/plugin-error is optional
32
+ if (widget?.error?.status && ErrorView) {
33
+ return ErrorView.render(renderParams)?.html ?? '';
34
+ }
35
+ // @ts-expect-error the @merkur/plugin-error is optional
36
+ if (widget?.error?.status) {
37
+ return '';
38
+ }
39
+ return View.render(renderParams)?.html ?? '';
40
+ };
41
+ return {
42
+ html: renderView(MainView),
43
+ slot: Object.keys(slot).reduce((acc, cur) => {
44
+ acc[cur] = {
45
+ name: slot[cur].name,
46
+ containerSelector: slot[cur].containerSelector,
47
+ html: renderView(slot[cur].View)
48
+ };
49
+ return acc;
50
+ }, {})
51
+ };
52
+ }
53
+ });
47
54
  }
48
55
 
49
56
  exports.createSvelteWidget = createSvelteWidget;
@@ -5,45 +5,52 @@ var core = require('@merkur/core');
5
5
  /**
6
6
  * Server Factory for creating merkur widgets with svelte renderer.
7
7
  */
8
- function createSvelteWidget({ viewFactory, ...restProps }) {
9
- return (widgetParams) => core.createMerkurWidget({
10
- ...restProps,
11
- ...widgetParams,
12
- async mount(widget) {
13
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
14
- const renderParams = {
15
- widget,
16
- state: widget.state,
17
- props: widget.props,
18
- };
19
- /**
20
- * Wrapper around $dependencies.render function which
21
- * handles connection to ErrorView and error plugin when defined.
22
- */
23
- const renderView = (View) => {
24
- // @ts-expect-error the @merkur/plugin-error is optional
25
- if (widget?.error?.status && ErrorView) {
26
- return ErrorView.render(renderParams)?.html ?? '';
27
- }
28
- // @ts-expect-error the @merkur/plugin-error is optional
29
- if (widget?.error?.status) {
30
- return '';
31
- }
32
- return View.render(renderParams)?.html ?? '';
33
- };
34
- return {
35
- html: renderView(MainView),
36
- slot: Object.keys(slot).reduce((acc, cur) => {
37
- acc[cur] = {
38
- name: slot[cur].name,
39
- containerSelector: slot[cur].containerSelector,
40
- html: renderView(slot[cur].View),
41
- };
42
- return acc;
43
- }, {}),
44
- };
45
- },
46
- });
8
+ function createSvelteWidget({
9
+ viewFactory,
10
+ ...restProps
11
+ }) {
12
+ return widgetParams => core.createMerkurWidget({
13
+ ...restProps,
14
+ ...widgetParams,
15
+ async mount(widget) {
16
+ const {
17
+ View: MainView,
18
+ ErrorView,
19
+ slot = {}
20
+ } = await viewFactory(widget);
21
+ const renderParams = {
22
+ widget,
23
+ state: widget.state,
24
+ props: widget.props
25
+ };
26
+ /**
27
+ * Wrapper around $dependencies.render function which
28
+ * handles connection to ErrorView and error plugin when defined.
29
+ */
30
+ const renderView = View => {
31
+ // @ts-expect-error the @merkur/plugin-error is optional
32
+ if (widget?.error?.status && ErrorView) {
33
+ return ErrorView.render(renderParams)?.html ?? '';
34
+ }
35
+ // @ts-expect-error the @merkur/plugin-error is optional
36
+ if (widget?.error?.status) {
37
+ return '';
38
+ }
39
+ return View.render(renderParams)?.html ?? '';
40
+ };
41
+ return {
42
+ html: renderView(MainView),
43
+ slot: Object.keys(slot).reduce((acc, cur) => {
44
+ acc[cur] = {
45
+ name: slot[cur].name,
46
+ containerSelector: slot[cur].containerSelector,
47
+ html: renderView(slot[cur].View)
48
+ };
49
+ return acc;
50
+ }, {})
51
+ };
52
+ }
53
+ });
47
54
  }
48
55
 
49
56
  exports.createSvelteWidget = createSvelteWidget;
@@ -3,45 +3,52 @@ import { createMerkurWidget } from '@merkur/core';
3
3
  /**
4
4
  * Server Factory for creating merkur widgets with svelte renderer.
5
5
  */
6
- function createSvelteWidget({ viewFactory, ...restProps }) {
7
- return (widgetParams) => createMerkurWidget({
8
- ...restProps,
9
- ...widgetParams,
10
- async mount(widget) {
11
- const { View: MainView, ErrorView, slot = {}, } = await viewFactory(widget);
12
- const renderParams = {
13
- widget,
14
- state: widget.state,
15
- props: widget.props,
16
- };
17
- /**
18
- * Wrapper around $dependencies.render function which
19
- * handles connection to ErrorView and error plugin when defined.
20
- */
21
- const renderView = (View) => {
22
- // @ts-expect-error the @merkur/plugin-error is optional
23
- if (widget?.error?.status && ErrorView) {
24
- return ErrorView.render(renderParams)?.html ?? '';
25
- }
26
- // @ts-expect-error the @merkur/plugin-error is optional
27
- if (widget?.error?.status) {
28
- return '';
29
- }
30
- return View.render(renderParams)?.html ?? '';
31
- };
32
- return {
33
- html: renderView(MainView),
34
- slot: Object.keys(slot).reduce((acc, cur) => {
35
- acc[cur] = {
36
- name: slot[cur].name,
37
- containerSelector: slot[cur].containerSelector,
38
- html: renderView(slot[cur].View),
39
- };
40
- return acc;
41
- }, {}),
42
- };
43
- },
44
- });
6
+ function createSvelteWidget({
7
+ viewFactory,
8
+ ...restProps
9
+ }) {
10
+ return widgetParams => createMerkurWidget({
11
+ ...restProps,
12
+ ...widgetParams,
13
+ async mount(widget) {
14
+ const {
15
+ View: MainView,
16
+ ErrorView,
17
+ slot = {}
18
+ } = await viewFactory(widget);
19
+ const renderParams = {
20
+ widget,
21
+ state: widget.state,
22
+ props: widget.props
23
+ };
24
+ /**
25
+ * Wrapper around $dependencies.render function which
26
+ * handles connection to ErrorView and error plugin when defined.
27
+ */
28
+ const renderView = View => {
29
+ // @ts-expect-error the @merkur/plugin-error is optional
30
+ if (widget?.error?.status && ErrorView) {
31
+ return ErrorView.render(renderParams)?.html ?? '';
32
+ }
33
+ // @ts-expect-error the @merkur/plugin-error is optional
34
+ if (widget?.error?.status) {
35
+ return '';
36
+ }
37
+ return View.render(renderParams)?.html ?? '';
38
+ };
39
+ return {
40
+ html: renderView(MainView),
41
+ slot: Object.keys(slot).reduce((acc, cur) => {
42
+ acc[cur] = {
43
+ name: slot[cur].name,
44
+ containerSelector: slot[cur].containerSelector,
45
+ html: renderView(slot[cur].View)
46
+ };
47
+ return acc;
48
+ }, {})
49
+ };
50
+ }
51
+ });
45
52
  }
46
53
 
47
54
  export { createSvelteWidget };
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@merkur/svelte",
3
- "version": "0.38.0",
3
+ "version": "0.39.0",
4
4
  "description": "Collection of helpers to aid with Svelte integration to @merkur",
5
5
  "scripts": {
6
6
  "test": "echo 'Tests pass.'",
7
7
  "test:es:version": "echo 'Tests pass.'",
8
8
  "build": "rollup -c rollup.config.mjs",
9
- "prepare": "npm run build",
10
9
  "dev": "rollup -c rollup.config.mjs -w"
11
10
  },
12
11
  "exports": {
@@ -54,5 +53,5 @@
54
53
  "svelte": "^3.59.2",
55
54
  "svelte-loader": "^3.2.0"
56
55
  },
57
- "gitHead": "a6e379c0cb887898e34465dc3db9231feb68e6a5"
56
+ "gitHead": "8ad2c8b26246850ce6289502a8b05e882f80ce31"
58
57
  }