@schukai/monster 3.54.0 → 3.55.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/package.json +1 -1
  3. package/source/components/datatable/datasource/rest.mjs +93 -57
  4. package/source/components/datatable/datatable/header.mjs +8 -0
  5. package/source/components/datatable/datatable.mjs +88 -44
  6. package/source/components/datatable/embedded-pagination.mjs +24 -43
  7. package/source/components/datatable/filter/util.mjs +138 -0
  8. package/source/components/datatable/filter.mjs +418 -174
  9. package/source/components/datatable/pagination.mjs +26 -2
  10. package/source/components/datatable/status.mjs +226 -0
  11. package/source/components/datatable/style/datatable.pcss +1 -0
  12. package/source/components/datatable/style/embedded-pagination.pcss +59 -2
  13. package/source/components/datatable/style/filter.pcss +4 -0
  14. package/source/components/datatable/style/pagination.pcss +28 -4
  15. package/source/components/datatable/style/status.pcss +42 -0
  16. package/source/components/datatable/stylesheet/column-bar.mjs +15 -9
  17. package/source/components/datatable/stylesheet/dataset.mjs +14 -8
  18. package/source/components/datatable/stylesheet/datasource.mjs +14 -8
  19. package/source/components/datatable/stylesheet/datatable.mjs +15 -9
  20. package/source/components/datatable/stylesheet/embedded-pagination.mjs +14 -8
  21. package/source/components/datatable/stylesheet/filter-button.mjs +15 -9
  22. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +14 -8
  23. package/source/components/datatable/stylesheet/filter-date-range.mjs +14 -8
  24. package/source/components/datatable/stylesheet/filter-range.mjs +14 -8
  25. package/source/components/datatable/stylesheet/filter.mjs +15 -9
  26. package/source/components/datatable/stylesheet/pagination.mjs +15 -9
  27. package/source/components/datatable/stylesheet/select-filter.mjs +14 -8
  28. package/source/components/datatable/stylesheet/status.mjs +33 -0
  29. package/source/components/form/action-button.mjs +3 -1
  30. package/source/components/form/api-button.mjs +1 -1
  31. package/source/components/form/button-bar.mjs +1 -1
  32. package/source/components/form/button.mjs +1 -1
  33. package/source/components/form/confirm-button.mjs +3 -1
  34. package/source/components/form/context-error.mjs +272 -0
  35. package/source/components/form/context-help.mjs +7 -5
  36. package/source/components/form/form.mjs +4 -2
  37. package/source/components/form/message-state-button.mjs +4 -2
  38. package/source/components/form/popper-button.mjs +9 -4
  39. package/source/components/form/popper.mjs +11 -3
  40. package/source/components/form/reload.mjs +1 -1
  41. package/source/components/form/select.mjs +3 -3
  42. package/source/components/form/shadow-reload.mjs +1 -1
  43. package/source/components/form/state-button.mjs +4 -1
  44. package/source/components/form/style/context-error.pcss +32 -0
  45. package/source/components/form/style/context-help.pcss +22 -5
  46. package/source/components/form/stylesheet/action-button.mjs +14 -8
  47. package/source/components/form/stylesheet/api-button.mjs +14 -8
  48. package/source/components/form/stylesheet/button-bar.mjs +14 -8
  49. package/source/components/form/stylesheet/button.mjs +14 -8
  50. package/source/components/form/stylesheet/confirm-button.mjs +14 -8
  51. package/source/components/form/stylesheet/context-error.mjs +33 -0
  52. package/source/components/form/stylesheet/context-help.mjs +15 -9
  53. package/source/components/form/stylesheet/form.mjs +14 -8
  54. package/source/components/form/stylesheet/message-state-button.mjs +14 -8
  55. package/source/components/form/stylesheet/popper-button.mjs +14 -8
  56. package/source/components/form/stylesheet/popper.mjs +14 -8
  57. package/source/components/form/stylesheet/select.mjs +15 -9
  58. package/source/components/form/stylesheet/state-button.mjs +14 -8
  59. package/source/components/form/stylesheet/tabs.mjs +15 -9
  60. package/source/components/form/stylesheet/tree-select.mjs +14 -8
  61. package/source/components/form/tabs.mjs +53 -7
  62. package/source/components/form/template.mjs +1 -1
  63. package/source/components/form/tree-select.mjs +1 -1
  64. package/source/components/host/collapse.mjs +20 -5
  65. package/source/components/host/config-manager.mjs +41 -2
  66. package/source/components/host/host.mjs +14 -0
  67. package/source/components/host/stylesheet/call-button.mjs +15 -9
  68. package/source/components/host/stylesheet/collapse.mjs +14 -8
  69. package/source/components/host/stylesheet/config-manager.mjs +14 -8
  70. package/source/components/host/stylesheet/details.mjs +14 -8
  71. package/source/components/host/stylesheet/host.mjs +14 -8
  72. package/source/components/host/stylesheet/overlay.mjs +15 -9
  73. package/source/components/host/stylesheet/toggle-button.mjs +15 -9
  74. package/source/components/host/stylesheet/viewer.mjs +14 -8
  75. package/source/components/host/util.mjs +6 -1
  76. package/source/components/notify/stylesheet/message.mjs +15 -9
  77. package/source/components/notify/stylesheet/notify.mjs +14 -8
  78. package/source/components/state/stylesheet/log.mjs +14 -8
  79. package/source/components/state/stylesheet/state.mjs +14 -8
  80. package/source/components/stylesheet/badge.mjs +14 -8
  81. package/source/components/stylesheet/border.mjs +14 -8
  82. package/source/components/stylesheet/button.mjs +14 -8
  83. package/source/components/stylesheet/card.mjs +14 -8
  84. package/source/components/stylesheet/color.mjs +14 -8
  85. package/source/components/stylesheet/common.mjs +14 -8
  86. package/source/components/stylesheet/control.mjs +14 -8
  87. package/source/components/stylesheet/data-grid.mjs +14 -8
  88. package/source/components/stylesheet/display.mjs +14 -8
  89. package/source/components/stylesheet/floating-ui.mjs +14 -8
  90. package/source/components/stylesheet/form.mjs +14 -8
  91. package/source/components/stylesheet/host.mjs +14 -8
  92. package/source/components/stylesheet/icons.mjs +15 -9
  93. package/source/components/stylesheet/link.mjs +14 -8
  94. package/source/components/stylesheet/normalize.mjs +14 -8
  95. package/source/components/stylesheet/popper.mjs +14 -8
  96. package/source/components/stylesheet/property.mjs +14 -8
  97. package/source/components/stylesheet/ripple.mjs +14 -8
  98. package/source/components/stylesheet/skeleton.mjs +14 -8
  99. package/source/components/stylesheet/space.mjs +14 -8
  100. package/source/components/stylesheet/spinner.mjs +14 -8
  101. package/source/components/stylesheet/table.mjs +14 -8
  102. package/source/components/stylesheet/theme.mjs +14 -8
  103. package/source/components/stylesheet/typography.mjs +14 -8
  104. package/source/components/tree-menu/stylesheet/tree-menu.mjs +14 -8
  105. package/source/data/transformer.mjs +38 -43
  106. package/source/dom/attributes.mjs +5 -5
  107. package/source/dom/customelement.mjs +1 -1
  108. package/source/dom/updater.mjs +14 -5
  109. package/source/dom/util.mjs +42 -0
  110. package/source/i18n/providers/embed.mjs +3 -3
  111. package/source/monster.mjs +5 -0
  112. package/source/text/formatter.mjs +2 -2
  113. package/source/types/noderecursiveiterator.mjs +9 -7
  114. package/source/types/observer.mjs +1 -1
  115. package/source/types/version.mjs +1 -1
  116. package/source/util/sleep.mjs +17 -0
  117. package/test/cases/components/form/button.mjs +2 -1
  118. package/test/cases/components/form/select.mjs +1 -1
  119. package/test/cases/components/form/tree-select.mjs +1 -1
  120. package/test/cases/data/transformer.mjs +2 -2
  121. package/test/cases/dom/updater.mjs +67 -46
  122. package/test/cases/monster.mjs +1 -1
  123. package/test/web/test.html +2 -2
  124. package/test/web/tests.js +18 -13
@@ -177,15 +177,19 @@ describe('DOM', function () {
177
177
  }
178
178
  );
179
179
 
180
+ let promise = u.run();
180
181
 
181
- u.run().then(() => {
182
- done(new Error("should never called!"));
183
- }).catch((e) => {
184
- expect(e).is.instanceOf(Error);
185
- expect(e + "").to.be.equal('Error: the value is not iterable');
186
- done();
187
- })
188
-
182
+ setTimeout(() => {
183
+ promise.then(() => {
184
+ setTimeout(() => {
185
+ done(new Error("should never called!"));
186
+ }, 100);
187
+ }).catch((e) => {
188
+ expect(e).is.instanceOf(Error);
189
+ expect(e + "").to.be.equal('Error: the value is not iterable');
190
+ done();
191
+ })
192
+ }, 100);
189
193
 
190
194
  });
191
195
 
@@ -232,13 +236,15 @@ describe('DOM', function () {
232
236
  );
233
237
 
234
238
  d.run().then(() => {
239
+ setTimeout(() => {
240
+ expect(typeof d).is.equal('object');
241
+ for (let i = 0; i < 6; i++) {
242
+ expect(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
243
+ }
235
244
 
236
- expect(typeof d).is.equal('object');
237
- for (let i = 0; i < 6; i++) {
238
- expect(element).contain.html('<li data-monster-replace="path:a.b.' + i + ' | tojson" data-monster-insert-reference="current-' + i + '">{"i":"' + i + '"}</li>');
239
- }
245
+ done();
246
+ }, 100);
240
247
 
241
- done();
242
248
  }).catch(
243
249
  e => {
244
250
  done(new Error(e))
@@ -490,6 +496,7 @@ describe('DOM', function () {
490
496
  it('should add lower hello and HELLOyes!', function (done) {
491
497
  let element = document.getElementById('test1')
492
498
 
499
+
493
500
  let d = new Updater(
494
501
  element,
495
502
  {
@@ -497,24 +504,28 @@ describe('DOM', function () {
497
504
  }
498
505
  );
499
506
 
507
+
500
508
  d.setCallback('myformatter', function (a) {
501
509
  return a + 'yes!'
502
510
  })
503
511
 
504
- setTimeout(() => {
505
- d.run().then(() => {
506
512
 
513
+ d.run().then(() => {
514
+ setTimeout(() => {
507
515
  expect(typeof d).is.equal('object');
508
516
  expect(element).contain.html('<div data-monster-replace="path:text | tolower">hallo</div>');
509
517
  expect(element).contain.html('<div data-monster-replace="path:text | call:myformatter">HALLOyes!</div>');
510
518
  expect(element).contain.html('<div data-monster-replace="static:hello\\ ">hello </div>');
511
519
 
512
520
  return done();
513
- }).catch(
514
- e => {
515
- done(new Error(e))
516
- })
517
- }, 100)
521
+
522
+ }, 100);
523
+
524
+ }).catch(
525
+ e => {
526
+ done(new Error(e))
527
+ })
528
+
518
529
 
519
530
  });
520
531
  });
@@ -546,13 +557,16 @@ describe('DOM', function () {
546
557
 
547
558
 
548
559
  d.run().then(() => {
560
+ setTimeout(() => {
561
+ expect(typeof d).is.equal('object');
562
+ expect(element).contain.html('<div data-monster-insert="myid path:a.b">');
563
+ expect(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
564
+ expect(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
565
+
566
+ done();
549
567
 
550
- expect(typeof d).is.equal('object');
551
- expect(element).contain.html('<div data-monster-insert="myid path:a.b">');
552
- expect(element).contain.html('<p data-monster-insert="myinnerid path:a.b" data-monster-insert-reference="myid-0">');
553
- expect(element).contain.html('<span data-monster-replace="path:a.b.0 | tojson" data-monster-insert-reference="myinnerid-0">{"i":"0"}</span>');
568
+ }, 100);
554
569
 
555
- done();
556
570
  }).catch(
557
571
  e => {
558
572
  done(new Error(e))
@@ -608,27 +622,30 @@ describe('DOM', function () {
608
622
 
609
623
  d.run().then(() => {
610
624
 
625
+ setTimeout(() => {
626
+ expect(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
627
+ expect(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
628
+ expect(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
629
+ expect(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
611
630
 
612
- expect(element).contain.html('<div data-monster-attributes="class path:a.b" class="div-class">');
613
- expect(element).contain.html('<input data-monster-attributes="value path:a.c" id="input1" value="hello">');
614
- expect(element).contain.html('<textarea name="textarea" id="textarea" data-monster-attributes="value path:a.textarea" value="test">');
615
- expect(element).contain.html('<input data-monster-attributes="checked path:a.radio" type="radio" name="radio" value="r1" id="radio" checked="true">');
631
+ expect(text.value, 'text control').to.be.equal(d.getSubject()['a']['c']);
632
+ expect(radio.checked, 'radio control').to.be.equal(true);
633
+ expect(textarea.value, 'textarea control').to.be.equal(d.getSubject()['a']['textarea']);
634
+ expect(select.selectedIndex, 'select control').to.be.equal(1); // [0=>other-value, 1=>value2]
616
635
 
617
- expect(text.value, 'text control').to.be.equal(d.getSubject()['a']['c']);
618
- expect(radio.checked, 'radio control').to.be.equal(true);
619
- expect(textarea.value, 'textarea control').to.be.equal(d.getSubject()['a']['textarea']);
620
- expect(select.selectedIndex, 'select control').to.be.equal(1); // [0=>other-value, 1=>value2]
636
+ let multiselectSelectedOptions = [];
637
+ for (const [index, obj] of Object.entries(multiselect.selectedOptions)) {
638
+ multiselectSelectedOptions.push(obj.value);
639
+ }
621
640
 
622
- let multiselectSelectedOptions = [];
623
- for (const [index, obj] of Object.entries(multiselect.selectedOptions)) {
624
- multiselectSelectedOptions.push(obj.value);
625
- }
626
641
 
642
+ expect(JSON.stringify(multiselectSelectedOptions), 'multiselect control').to.be.equal(JSON.stringify(d.getSubject()['a']['multiselect']));
643
+ expect(checkbox.checked, 'checkbox control').to.be.true;
644
+
645
+ done();
627
646
 
628
- expect(JSON.stringify(multiselectSelectedOptions), 'multiselect control').to.be.equal(JSON.stringify(d.getSubject()['a']['multiselect']));
629
- expect(checkbox.checked, 'checkbox control').to.be.true;
647
+ }, 100);
630
648
 
631
- done();
632
649
  }).catch(
633
650
  e => {
634
651
  done(new Error(e))
@@ -726,14 +743,18 @@ describe('DOM', function () {
726
743
  );
727
744
  setTimeout(() => {
728
745
  d.run().then(() => {
729
- try {
730
- expect(containerElement).contain.html('<div>yeah! <b>Test</b>!</div>');
731
- } catch (e) {
732
- return done(e);
733
- }
746
+
747
+ setTimeout(() => {
748
+
749
+ try {
750
+ expect(containerElement).contain.html('<div>yeah! <b>Test</b>!</div>');
751
+ } catch (e) {
752
+ return done(e);
753
+ }
734
754
 
735
755
 
736
- done()
756
+ done()
757
+ }, 100)
737
758
  })
738
759
  }, 100)
739
760
 
@@ -7,7 +7,7 @@ describe('Monster', function () {
7
7
  let monsterVersion
8
8
 
9
9
  /** don´t touch, replaced by make with package.json version */
10
- monsterVersion = new Version("3.54.0")
10
+ monsterVersion = new Version("3.55.1")
11
11
 
12
12
  let m = getMonsterVersion();
13
13
 
@@ -15,8 +15,8 @@
15
15
  </head>
16
16
  <body>
17
17
  <div id="headline" style="display: flex;align-items: center;justify-content: center;flex-direction: column;">
18
- <h1 style='margin-bottom: 0.1em;'>Monster 4.0.0</h1>
19
- <div id="lastupdate" style='font-size:0.7em'>last update Fr 3. Nov 18:43:13 CET 2023</div>
18
+ <h1 style='margin-bottom: 0.1em;'>Monster 3.54.0</h1>
19
+ <div id="lastupdate" style='font-size:0.7em'>last update Mi 29. Nov 15:34:53 CET 2023</div>
20
20
  </div>
21
21
  <div id="mocha-errors"
22
22
  style="color: red;font-weight: bold;display: flex;align-items: center;justify-content: center;flex-direction: column;margin:20px;"></div>
package/test/web/tests.js CHANGED
@@ -4,6 +4,7 @@ try {
4
4
  try {
5
5
  try {
6
6
  try {
7
+ try {
7
8
  (() => {
8
9
  var __create = Object.create;
9
10
  var __defProp = Object.defineProperty;
@@ -10418,7 +10419,7 @@ try {
10418
10419
  * @since 2.1.0
10419
10420
  */
10420
10421
  static get [instanceSymbol]() {
10421
- return Symbol.for("@schukai/component-form/reload");
10422
+ return Symbol.for("@schukai/monster/components/form/reload");
10422
10423
  }
10423
10424
  /**
10424
10425
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -21606,7 +21607,7 @@ ${key.data.toString("base64")}
21606
21607
  * @since 2.1.0
21607
21608
  */
21608
21609
  static get [instanceSymbol]() {
21609
- return Symbol.for("@schukai/component-form/tabs");
21610
+ return Symbol.for("@schukai/monster/components/form/tabs");
21610
21611
  }
21611
21612
  /**
21612
21613
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -22162,7 +22163,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
22162
22163
  * @since 2.1.0
22163
22164
  */
22164
22165
  static get [instanceSymbol]() {
22165
- return Symbol.for("@schukai/component-form/button@@instance");
22166
+ return Symbol.for("@schukai/monster/components/form/button@@instance");
22166
22167
  }
22167
22168
  /**
22168
22169
  *
@@ -22449,7 +22450,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
22449
22450
  * @since 2.1.0
22450
22451
  */
22451
22452
  static get [instanceSymbol]() {
22452
- return Symbol.for("@schukai/component-form/state-button@@instance");
22453
+ return Symbol.for("@schukai/monster/components/form/state-button@@instance");
22453
22454
  }
22454
22455
  /**
22455
22456
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -25508,7 +25509,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
25508
25509
  * @since 2.1.0
25509
25510
  */
25510
25511
  static get [instanceSymbol]() {
25511
- return Symbol.for("@schukai/component-form/select@@instance");
25512
+ return Symbol.for("@schukai/monster/components/form/select@@instance");
25512
25513
  }
25513
25514
  /**
25514
25515
  * The current selection of the Select
@@ -26122,7 +26123,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
26122
26123
  * @returns {symbol}
26123
26124
  */
26124
26125
  static get [instanceSymbol]() {
26125
- return Symbol.for("@schukai/component-form/popper@@instance");
26126
+ return Symbol.for("@schukai/monster/components/form/popper@@instance");
26126
26127
  }
26127
26128
  /**
26128
26129
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -26373,7 +26374,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
26373
26374
  * @since 2.1.0
26374
26375
  */
26375
26376
  static get [instanceSymbol]() {
26376
- return Symbol.for("@schukai/component-form/popper-button@@instance");
26377
+ return Symbol.for("@schukai/monster/components/form/popper-button@@instance");
26377
26378
  }
26378
26379
  /**
26379
26380
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -26663,7 +26664,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
26663
26664
  * @since 2.1.0
26664
26665
  */
26665
26666
  static get [instanceSymbol]() {
26666
- return Symbol.for("@schukai/component-form/message-state-button@@instance");
26667
+ return Symbol.for("@schukai/monster/components/form/message-state-button@@instance");
26667
26668
  }
26668
26669
  /**
26669
26670
  *
@@ -26994,7 +26995,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
26994
26995
  * @since 2.1.0
26995
26996
  */
26996
26997
  static get [instanceSymbol]() {
26997
- return Symbol.for("@schukai/component-form/confirm-button@@instance");
26998
+ return Symbol.for("@schukai/monster/components/form/confirm-button@@instance");
26998
26999
  }
26999
27000
  /**
27000
27001
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -28552,7 +28553,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
28552
28553
  init_customelement();
28553
28554
  init_form();
28554
28555
  ATTRIBUTE_FORM_DATASOURCE_ACTION = `${ATTRIBUTE_PREFIX}datasource-action`;
28555
- formDataSymbol = Symbol.for("@schukai/component-form/form@@formdata");
28556
+ formDataSymbol = Symbol.for("@schukai/monster/components/form/form@@formdata");
28556
28557
  formDataUpdaterSymbol = Symbol.for(
28557
28558
  "@schukai/component-form/form@@formdata-updater-link"
28558
28559
  );
@@ -28578,7 +28579,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
28578
28579
  * @since 2.1.0
28579
28580
  */
28580
28581
  static get [instanceSymbol]() {
28581
- return Symbol.for("@schukai/component-form/form");
28582
+ return Symbol.for("@schukai/monster/components/form/form");
28582
28583
  }
28583
28584
  /**
28584
28585
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -29388,7 +29389,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
29388
29389
  * @since 2.1.0
29389
29390
  */
29390
29391
  static get [instanceSymbol]() {
29391
- return Symbol.for("@schukai/component-form/tree-select@@instance");
29392
+ return Symbol.for("@schukai/monster/components/form/tree-select@@instance");
29392
29393
  }
29393
29394
  /**
29394
29395
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -29614,7 +29615,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
29614
29615
  * @since 2.1.0
29615
29616
  */
29616
29617
  static get [instanceSymbol]() {
29617
- return Symbol.for("@schukai/component-form/template");
29618
+ return Symbol.for("@schukai/monster/components/form/template");
29618
29619
  }
29619
29620
  /**
29620
29621
  * To set the options via the html tag the attribute `data-monster-options` must be used.
@@ -48098,3 +48099,7 @@ document.getElementById('mocha-stats').style.backgroundColor = 'red';
48098
48099
  document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
48099
48100
  document.getElementById('mocha-stats').style.backgroundColor = 'red';
48100
48101
  }
48102
+ } catch (e) {
48103
+ document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
48104
+ document.getElementById('mocha-stats').style.backgroundColor = 'red';
48105
+ }