@mieweb/ui 0.9.0 → 0.10.0-dev.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.
Files changed (121) hide show
  1. package/MIGRATION.md +112 -0
  2. package/dist/{Animated-Cs-naa2g.d.cts → Animated-XmH6k8pZ.d.cts} +16 -3
  3. package/dist/{Animated-Cs-naa2g.d.ts → Animated-XmH6k8pZ.d.ts} +16 -3
  4. package/dist/{chunk-XUVEF2RQ.js → chunk-24SEAAOH.js} +2 -2
  5. package/dist/{chunk-XUVEF2RQ.js.map → chunk-24SEAAOH.js.map} +1 -1
  6. package/dist/{chunk-FUFBRKOG.cjs → chunk-2WBPNXO2.cjs} +21 -21
  7. package/dist/{chunk-FUFBRKOG.cjs.map → chunk-2WBPNXO2.cjs.map} +1 -1
  8. package/dist/{chunk-IUDY6S7I.cjs → chunk-37UZHCLM.cjs} +35 -14
  9. package/dist/chunk-37UZHCLM.cjs.map +1 -0
  10. package/dist/{chunk-L52N6BEN.cjs → chunk-AUOTJQGO.cjs} +7 -7
  11. package/dist/{chunk-L52N6BEN.cjs.map → chunk-AUOTJQGO.cjs.map} +1 -1
  12. package/dist/{chunk-6XDPJWSC.cjs → chunk-E7G22IQM.cjs} +32 -28
  13. package/dist/chunk-E7G22IQM.cjs.map +1 -0
  14. package/dist/chunk-IIFQ6BSJ.js +1888 -0
  15. package/dist/chunk-IIFQ6BSJ.js.map +1 -0
  16. package/dist/{chunk-ONNY7UO4.js → chunk-JDJQTKTX.js} +3 -3
  17. package/dist/{chunk-ONNY7UO4.js.map → chunk-JDJQTKTX.js.map} +1 -1
  18. package/dist/{chunk-BJKAVWED.js → chunk-MBWF36DJ.js} +35 -14
  19. package/dist/chunk-MBWF36DJ.js.map +1 -0
  20. package/dist/chunk-NV2CWBI2.cjs +290 -0
  21. package/dist/chunk-NV2CWBI2.cjs.map +1 -0
  22. package/dist/{chunk-FQBTGS3E.cjs → chunk-OFUKTVBN.cjs} +363 -285
  23. package/dist/chunk-OFUKTVBN.cjs.map +1 -0
  24. package/dist/{chunk-7KN6J7XV.cjs → chunk-OMAACCFW.cjs} +7 -7
  25. package/dist/{chunk-7KN6J7XV.cjs.map → chunk-OMAACCFW.cjs.map} +1 -1
  26. package/dist/chunk-OYQ7GYAA.cjs +1921 -0
  27. package/dist/chunk-OYQ7GYAA.cjs.map +1 -0
  28. package/dist/{chunk-YJP6DUFO.cjs → chunk-PKD3JLS2.cjs} +6 -6
  29. package/dist/{chunk-YJP6DUFO.cjs.map → chunk-PKD3JLS2.cjs.map} +1 -1
  30. package/dist/{chunk-CXDMZT45.cjs → chunk-PY7XAG4D.cjs} +27 -4
  31. package/dist/chunk-PY7XAG4D.cjs.map +1 -0
  32. package/dist/{chunk-5H7SAEQO.js → chunk-QKFJDQEK.js} +3 -3
  33. package/dist/{chunk-5H7SAEQO.js.map → chunk-QKFJDQEK.js.map} +1 -1
  34. package/dist/{chunk-XJTFZLWH.cjs → chunk-QO6PRHDX.cjs} +2 -2
  35. package/dist/{chunk-XJTFZLWH.cjs.map → chunk-QO6PRHDX.cjs.map} +1 -1
  36. package/dist/{chunk-OHDIJOGG.js → chunk-RD3JDFYJ.js} +3 -3
  37. package/dist/{chunk-OHDIJOGG.js.map → chunk-RD3JDFYJ.js.map} +1 -1
  38. package/dist/{chunk-4SM3I7WE.cjs → chunk-RXPEZXAB.cjs} +67 -38
  39. package/dist/chunk-RXPEZXAB.cjs.map +1 -0
  40. package/dist/{chunk-VTR2KGLY.cjs → chunk-S3BCHPXT.cjs} +9 -9
  41. package/dist/{chunk-VTR2KGLY.cjs.map → chunk-S3BCHPXT.cjs.map} +1 -1
  42. package/dist/{chunk-KU3XRHWA.js → chunk-TZX76ZNZ.js} +67 -38
  43. package/dist/chunk-TZX76ZNZ.js.map +1 -0
  44. package/dist/{chunk-MXQ7J4BB.js → chunk-VSVGMMNO.js} +361 -284
  45. package/dist/chunk-VSVGMMNO.js.map +1 -0
  46. package/dist/{chunk-Q7G56ZIO.js → chunk-WUBMDOTG.js} +3 -3
  47. package/dist/{chunk-Q7G56ZIO.js.map → chunk-WUBMDOTG.js.map} +1 -1
  48. package/dist/{chunk-DGRXAIWK.js → chunk-X5YM3KXY.js} +27 -4
  49. package/dist/chunk-X5YM3KXY.js.map +1 -0
  50. package/dist/chunk-XCP454Q6.js +263 -0
  51. package/dist/chunk-XCP454Q6.js.map +1 -0
  52. package/dist/{chunk-I3DQXUSC.js → chunk-Y6DFMDMH.js} +3 -3
  53. package/dist/{chunk-I3DQXUSC.js.map → chunk-Y6DFMDMH.js.map} +1 -1
  54. package/dist/{chunk-ODYQYLO2.js → chunk-YSEMAI4I.js} +8 -4
  55. package/dist/chunk-YSEMAI4I.js.map +1 -0
  56. package/dist/components/AlertDialog/index.cjs +4 -4
  57. package/dist/components/AlertDialog/index.js +3 -3
  58. package/dist/components/Collapsible/index.cjs +6 -4
  59. package/dist/components/Collapsible/index.js +3 -1
  60. package/dist/components/Dropdown/index.cjs +9 -8
  61. package/dist/components/Dropdown/index.js +2 -1
  62. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  63. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  64. package/dist/components/MediaEditor/index.cjs +8 -8
  65. package/dist/components/MediaEditor/index.js +3 -3
  66. package/dist/components/Modal/index.cjs +10 -10
  67. package/dist/components/Modal/index.js +2 -2
  68. package/dist/components/RichTextEditor/index.cjs +6 -5
  69. package/dist/components/RichTextEditor/index.js +3 -2
  70. package/dist/components/SuperChat/index.cjs +40 -17
  71. package/dist/components/SuperChat/index.cjs.map +1 -1
  72. package/dist/components/SuperChat/index.d.cts +20 -7
  73. package/dist/components/SuperChat/index.d.ts +20 -7
  74. package/dist/components/SuperChat/index.js +35 -12
  75. package/dist/components/SuperChat/index.js.map +1 -1
  76. package/dist/components/SuperChat/plugins/index.cjs +10 -3
  77. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  78. package/dist/components/SuperChat/plugins/index.d.cts +3 -3
  79. package/dist/components/SuperChat/plugins/index.d.ts +3 -3
  80. package/dist/components/SuperChat/plugins/index.js +9 -2
  81. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  82. package/dist/esheet.cjs +6 -6
  83. package/dist/esheet.js +3 -3
  84. package/dist/hooks/index.cjs +13 -13
  85. package/dist/hooks/index.js +1 -1
  86. package/dist/index.cjs +720 -1671
  87. package/dist/index.cjs.map +1 -1
  88. package/dist/index.d.cts +347 -347
  89. package/dist/index.d.ts +347 -347
  90. package/dist/index.js +459 -1405
  91. package/dist/index.js.map +1 -1
  92. package/dist/motion.cjs +7 -7
  93. package/dist/motion.d.cts +1 -1
  94. package/dist/motion.d.ts +1 -1
  95. package/dist/motion.js +2 -2
  96. package/dist/styles.css +1 -1
  97. package/dist/tailwind-preset.cjs +4 -4
  98. package/dist/tailwind-preset.js +1 -1
  99. package/dist/{types-DZDroUW8.d.cts → types-B97JNRNQ.d.cts} +1 -1
  100. package/dist/{types-B2RLmdVd.d.ts → types-CnPEwzlp.d.cts} +6 -2
  101. package/dist/{types-B2RLmdVd.d.cts → types-CnPEwzlp.d.ts} +6 -2
  102. package/dist/{types-9vK_YdEb.d.ts → types-gZXrfLj6.d.ts} +1 -1
  103. package/package.json +2 -1
  104. package/dist/chunk-4SM3I7WE.cjs.map +0 -1
  105. package/dist/chunk-5BVFVXHN.cjs +0 -1244
  106. package/dist/chunk-5BVFVXHN.cjs.map +0 -1
  107. package/dist/chunk-6XDPJWSC.cjs.map +0 -1
  108. package/dist/chunk-BJKAVWED.js.map +0 -1
  109. package/dist/chunk-BN75TLUN.cjs +0 -163
  110. package/dist/chunk-BN75TLUN.cjs.map +0 -1
  111. package/dist/chunk-CXDMZT45.cjs.map +0 -1
  112. package/dist/chunk-DGRXAIWK.js.map +0 -1
  113. package/dist/chunk-FQBTGS3E.cjs.map +0 -1
  114. package/dist/chunk-IUDY6S7I.cjs.map +0 -1
  115. package/dist/chunk-KU3XRHWA.js.map +0 -1
  116. package/dist/chunk-MXQ7J4BB.js.map +0 -1
  117. package/dist/chunk-O6GJ4IYS.js +0 -1210
  118. package/dist/chunk-O6GJ4IYS.js.map +0 -1
  119. package/dist/chunk-ODYQYLO2.js.map +0 -1
  120. package/dist/chunk-WYMO3IIK.js +0 -136
  121. package/dist/chunk-WYMO3IIK.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkL52N6BEN_cjs = require('../../chunk-L52N6BEN.cjs');
4
- require('../../chunk-BN75TLUN.cjs');
3
+ var chunkAUOTJQGO_cjs = require('../../chunk-AUOTJQGO.cjs');
4
+ require('../../chunk-NV2CWBI2.cjs');
5
5
  require('../../chunk-S5RVSXDV.cjs');
6
6
  require('../../chunk-NNEFAUHV.cjs');
7
7
  require('../../chunk-FHY3K6PL.cjs');
@@ -11,35 +11,35 @@ require('../../chunk-SCV7C55E.cjs');
11
11
 
12
12
  Object.defineProperty(exports, "Modal", {
13
13
  enumerable: true,
14
- get: function () { return chunkL52N6BEN_cjs.Modal; }
14
+ get: function () { return chunkAUOTJQGO_cjs.Modal; }
15
15
  });
16
16
  Object.defineProperty(exports, "ModalBody", {
17
17
  enumerable: true,
18
- get: function () { return chunkL52N6BEN_cjs.ModalBody; }
18
+ get: function () { return chunkAUOTJQGO_cjs.ModalBody; }
19
19
  });
20
20
  Object.defineProperty(exports, "ModalClose", {
21
21
  enumerable: true,
22
- get: function () { return chunkL52N6BEN_cjs.ModalClose; }
22
+ get: function () { return chunkAUOTJQGO_cjs.ModalClose; }
23
23
  });
24
24
  Object.defineProperty(exports, "ModalFooter", {
25
25
  enumerable: true,
26
- get: function () { return chunkL52N6BEN_cjs.ModalFooter; }
26
+ get: function () { return chunkAUOTJQGO_cjs.ModalFooter; }
27
27
  });
28
28
  Object.defineProperty(exports, "ModalHeader", {
29
29
  enumerable: true,
30
- get: function () { return chunkL52N6BEN_cjs.ModalHeader; }
30
+ get: function () { return chunkAUOTJQGO_cjs.ModalHeader; }
31
31
  });
32
32
  Object.defineProperty(exports, "ModalTitle", {
33
33
  enumerable: true,
34
- get: function () { return chunkL52N6BEN_cjs.ModalTitle; }
34
+ get: function () { return chunkAUOTJQGO_cjs.ModalTitle; }
35
35
  });
36
36
  Object.defineProperty(exports, "modalContentVariants", {
37
37
  enumerable: true,
38
- get: function () { return chunkL52N6BEN_cjs.modalContentVariants; }
38
+ get: function () { return chunkAUOTJQGO_cjs.modalContentVariants; }
39
39
  });
40
40
  Object.defineProperty(exports, "modalOverlayVariants", {
41
41
  enumerable: true,
42
- get: function () { return chunkL52N6BEN_cjs.modalOverlayVariants; }
42
+ get: function () { return chunkAUOTJQGO_cjs.modalOverlayVariants; }
43
43
  });
44
44
  //# sourceMappingURL=index.cjs.map
45
45
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from '../../chunk-Q7G56ZIO.js';
2
- import '../../chunk-WYMO3IIK.js';
1
+ export { Modal, ModalBody, ModalClose, ModalFooter, ModalHeader, ModalTitle, modalContentVariants, modalOverlayVariants } from '../../chunk-WUBMDOTG.js';
2
+ import '../../chunk-XCP454Q6.js';
3
3
  import '../../chunk-TQONQSJO.js';
4
4
  import '../../chunk-4SMSH4OY.js';
5
5
  import '../../chunk-T4ME7QCT.js';
@@ -1,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunk7KN6J7XV_cjs = require('../../chunk-7KN6J7XV.cjs');
3
+ var chunkOMAACCFW_cjs = require('../../chunk-OMAACCFW.cjs');
4
4
  require('../../chunk-YP5T6NZD.cjs');
5
- require('../../chunk-4SM3I7WE.cjs');
5
+ require('../../chunk-RXPEZXAB.cjs');
6
6
  var chunkC7RVKV25_cjs = require('../../chunk-C7RVKV25.cjs');
7
7
  require('../../chunk-I44YNYI6.cjs');
8
8
  require('../../chunk-Z5S5JEJD.cjs');
9
9
  require('../../chunk-IINZWUGK.cjs');
10
+ require('../../chunk-NV2CWBI2.cjs');
10
11
  require('../../chunk-S5RVSXDV.cjs');
11
12
  require('../../chunk-FHY3K6PL.cjs');
12
13
  require('../../chunk-FSGEDDF2.cjs');
@@ -16,15 +17,15 @@ require('../../chunk-AOHJILLU.cjs');
16
17
 
17
18
  Object.defineProperty(exports, "RichTextEditor", {
18
19
  enumerable: true,
19
- get: function () { return chunk7KN6J7XV_cjs.RichTextEditor; }
20
+ get: function () { return chunkOMAACCFW_cjs.RichTextEditor; }
20
21
  });
21
22
  Object.defineProperty(exports, "convertAngleBracketsToMustache", {
22
23
  enumerable: true,
23
- get: function () { return chunk7KN6J7XV_cjs.convertAngleBracketsToMustache; }
24
+ get: function () { return chunkOMAACCFW_cjs.convertAngleBracketsToMustache; }
24
25
  });
25
26
  Object.defineProperty(exports, "processDictation", {
26
27
  enumerable: true,
27
- get: function () { return chunk7KN6J7XV_cjs.processDictation; }
28
+ get: function () { return chunkOMAACCFW_cjs.processDictation; }
28
29
  });
29
30
  Object.defineProperty(exports, "isHtmlEmpty", {
30
31
  enumerable: true,
@@ -1,10 +1,11 @@
1
- export { RichTextEditor, convertAngleBracketsToMustache, processDictation } from '../../chunk-5H7SAEQO.js';
1
+ export { RichTextEditor, convertAngleBracketsToMustache, processDictation } from '../../chunk-QKFJDQEK.js';
2
2
  import '../../chunk-OQWZYKJM.js';
3
- import '../../chunk-KU3XRHWA.js';
3
+ import '../../chunk-TZX76ZNZ.js';
4
4
  export { isHtmlEmpty } from '../../chunk-ERLPVXOV.js';
5
5
  import '../../chunk-6NZXWKUE.js';
6
6
  import '../../chunk-3IMM2PM4.js';
7
7
  import '../../chunk-KREUYVMZ.js';
8
+ import '../../chunk-XCP454Q6.js';
8
9
  import '../../chunk-TQONQSJO.js';
9
10
  import '../../chunk-T4ME7QCT.js';
10
11
  import '../../chunk-62ZOA6PX.js';
@@ -2,14 +2,16 @@
2
2
 
3
3
  var chunkJFLC7SHM_cjs = require('../../chunk-JFLC7SHM.cjs');
4
4
  var chunkWIAQQNFU_cjs = require('../../chunk-WIAQQNFU.cjs');
5
- var chunk5BVFVXHN_cjs = require('../../chunk-5BVFVXHN.cjs');
6
- var chunk4SM3I7WE_cjs = require('../../chunk-4SM3I7WE.cjs');
5
+ var chunkOYQ7GYAA_cjs = require('../../chunk-OYQ7GYAA.cjs');
6
+ var chunkRXPEZXAB_cjs = require('../../chunk-RXPEZXAB.cjs');
7
7
  var chunkJEIW7BSV_cjs = require('../../chunk-JEIW7BSV.cjs');
8
8
  require('../../chunk-VBWRH4UW.cjs');
9
9
  require('../../chunk-PJ6CC53R.cjs');
10
10
  require('../../chunk-I44YNYI6.cjs');
11
11
  require('../../chunk-Z5S5JEJD.cjs');
12
+ require('../../chunk-L7L5S2HO.cjs');
12
13
  var chunkYVL3XATO_cjs = require('../../chunk-YVL3XATO.cjs');
14
+ require('../../chunk-NV2CWBI2.cjs');
13
15
  var chunkS5RVSXDV_cjs = require('../../chunk-S5RVSXDV.cjs');
14
16
  require('../../chunk-FHY3K6PL.cjs');
15
17
  require('../../chunk-FSGEDDF2.cjs');
@@ -543,7 +545,7 @@ function ActionMenuItem({
543
545
  item,
544
546
  onSelect
545
547
  }) {
546
- return /* @__PURE__ */ jsxRuntime.jsx(chunk4SM3I7WE_cjs.DropdownItem, { onClick: () => onSelect(item.onSelect), children: item.description ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-start", children: [
548
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkRXPEZXAB_cjs.DropdownItem, { onClick: () => onSelect(item.onSelect), children: item.description ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-start", children: [
547
549
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label }),
548
550
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-normal text-neutral-400", children: item.description })
549
551
  ] }) : item.label });
@@ -575,7 +577,7 @@ function FooterActionButton({
575
577
  );
576
578
  if (!action.submenu) return button;
577
579
  return /* @__PURE__ */ jsxRuntime.jsx(
578
- chunk4SM3I7WE_cjs.Dropdown,
580
+ chunkRXPEZXAB_cjs.Dropdown,
579
581
  {
580
582
  open,
581
583
  onOpenChange: setOpen,
@@ -634,7 +636,7 @@ function MessageOverflowMenu({
634
636
  footerVisible && !open && "pointer-events-none invisible opacity-0"
635
637
  ),
636
638
  children: /* @__PURE__ */ jsxRuntime.jsx(
637
- chunk4SM3I7WE_cjs.Dropdown,
639
+ chunkRXPEZXAB_cjs.Dropdown,
638
640
  {
639
641
  open,
640
642
  onOpenChange: setOpen,
@@ -653,9 +655,9 @@ function MessageOverflowMenu({
653
655
  (action) => action.submenu ? (
654
656
  // Actions with variants collapse to just their submenu — a
655
657
  // top-level default item would duplicate the flyout's options.
656
- /* @__PURE__ */ jsxRuntime.jsx(chunk4SM3I7WE_cjs.DropdownSubmenu, { label: action.submenu.label, children: action.submenu.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(ActionMenuItem, { item, onSelect: select }, item.id)) }, action.id)
658
+ /* @__PURE__ */ jsxRuntime.jsx(chunkRXPEZXAB_cjs.DropdownSubmenu, { label: action.submenu.label, children: action.submenu.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(ActionMenuItem, { item, onSelect: select }, item.id)) }, action.id)
657
659
  ) : /* @__PURE__ */ jsxRuntime.jsx(
658
- chunk4SM3I7WE_cjs.DropdownItem,
660
+ chunkRXPEZXAB_cjs.DropdownItem,
659
661
  {
660
662
  onClick: () => select(action.onSelect),
661
663
  children: action.label
@@ -1134,6 +1136,9 @@ function SuperChat({
1134
1136
  onBack
1135
1137
  }) {
1136
1138
  const headingId = React2__namespace.useId();
1139
+ React2__namespace.useEffect(() => {
1140
+ chunkOYQ7GYAA_cjs.notifyComposerMigrationOnce("SuperChat");
1141
+ }, []);
1137
1142
  const renderText = React2__namespace.useMemo(
1138
1143
  () => renderTextContent ?? createMarkdownRenderer({
1139
1144
  plugins: renderPlugins,
@@ -1184,14 +1189,29 @@ function SuperChat({
1184
1189
  () => acceptTokensFor(acceptedFileTypes),
1185
1190
  [acceptedFileTypes]
1186
1191
  );
1192
+ const [draft, setDraft] = React2__namespace.useState("");
1193
+ const draftEpochRef = React2__namespace.useRef(0);
1194
+ const handleDraftChange = React2__namespace.useCallback((value) => {
1195
+ draftEpochRef.current += 1;
1196
+ setDraft(value);
1197
+ }, []);
1187
1198
  const handleComposerSend = React2__namespace.useCallback(
1188
1199
  async (message) => {
1189
- const text = message.content;
1190
- const mentions = detectMentions(text, conversation.participants);
1191
- const attachments = await filesToComposerAttachments(
1192
- message.attachments ?? []
1193
- );
1194
- onMessageSent?.(text, { conversation, mentions, attachments });
1200
+ const epoch = draftEpochRef.current;
1201
+ try {
1202
+ const text = message.content;
1203
+ const mentions = detectMentions(text, conversation.participants);
1204
+ const attachments = await filesToComposerAttachments(
1205
+ message.attachments ?? []
1206
+ );
1207
+ await Promise.resolve(
1208
+ onMessageSent?.(text, { conversation, mentions, attachments })
1209
+ );
1210
+ } catch {
1211
+ if (draftEpochRef.current === epoch) {
1212
+ setDraft(message.content);
1213
+ }
1214
+ }
1195
1215
  },
1196
1216
  [conversation, onMessageSent]
1197
1217
  );
@@ -1323,16 +1343,19 @@ function SuperChat({
1323
1343
  }
1324
1344
  ),
1325
1345
  /* @__PURE__ */ jsxRuntime.jsx(
1326
- chunk5BVFVXHN_cjs.MessageComposer,
1346
+ chunkOYQ7GYAA_cjs.ChatComposer,
1327
1347
  {
1348
+ value: draft,
1349
+ onValueChange: handleDraftChange,
1328
1350
  onSend: handleComposerSend,
1329
1351
  disabled: readOnly,
1330
1352
  placeholder: readOnly ? "Read-only conversation" : "Type a message\u2026 use @ to address an agent",
1331
1353
  mentionOptions,
1332
- showAttachmentPicker: !readOnly,
1333
- showCameraButton: false,
1354
+ allowAttachments: !readOnly,
1334
1355
  acceptedFileTypes: composerAccept,
1335
- maxLength: 1e5
1356
+ maxFileSize: 25 * 1024 * 1024,
1357
+ maxLength: 1e5,
1358
+ inputLabel: "Message"
1336
1359
  }
1337
1360
  )
1338
1361
  ]