@xpert-ai/chatkit-ui5 0.3.0 → 0.4.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.
@@ -51,7 +51,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
51
51
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
52
52
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
53
53
 
54
- var _a, _b, _setTrainingOptOut_dec, _hideHistory_dec, _showHistory_dec, _sendCustomAction_dec, _shareThread_dec, _setThreadId_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _launcherCloseButton, _launcherOpen, _framePetOptionsOverride, _shadow, _petOverlay, _resolveLoaded, _loaded, _messenger, _ChatKitElementBase_instances, emitAndThrow_fn, setOptionsDataAttributes_fn, getDisplayMode_fn, getConfiguredPetOptions_fn, getOverlayPetOptions_fn, resolvePetAssetUrl_fn, resolveOverlayPetOptions_fn, getFrameOptions_fn, setLauncherOpen_fn, handlePetActivate_fn, handlePetReply_fn, handlePetThreadSummaryActivate_fn, _handleLauncherClose, getFrameUrl_fn, setFrameUrl_fn, consumeFrameUrl_fn, _handleFrameLoad, _initialized, maybeInit_fn, _init;
54
+ var _a, _b, _setTrainingOptOut_dec, _hideHistory_dec, _showHistory_dec, _sendCustomAction_dec, _shareThread_dec, _setThreadId_dec, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _messenger, _ChatKitElementBase_instances, emitAndThrow_fn, setOptionsDataAttributes_fn, getDisplayMode_fn, getConfiguredPetOptions_fn, mergeConfiguredPetPositionDefaults_fn, getOverlayPetOptions_fn, resolvePetAssetUrl_fn, resolveOverlayPetOptions_fn, getFrameOptions_fn, setLauncherOpen_fn, setChatMinimizedToPet_fn, syncPetOverlayOptions_fn, handlePetActivate_fn, handlePetClose_fn, handlePetReply_fn, handlePetThreadSummaryActivate_fn, _handleLauncherClose, getFrameUrl_fn, setFrameUrl_fn, consumeFrameUrl_fn, _handleFrameLoad, _initialized, maybeInit_fn, _init;
55
55
  class EventEmitter {
56
56
  constructor() {
57
57
  __publicField(this, "callbacks", /* @__PURE__ */ new Map());
@@ -700,6 +700,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
700
700
  "command.setOptions",
701
701
  "command.sendUserMessage",
702
702
  "command.setComposerValue",
703
+ "command.setRuntimeCapabilities",
703
704
  "command.setThreadId",
704
705
  "command.focusComposer",
705
706
  "command.fetchUpdates",
@@ -895,8 +896,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
895
896
  const PET_SUMMARY_GAP = 12;
896
897
  const PET_SUMMARY_WIDTH = 320;
897
898
  const PET_SUMMARY_MARGIN = 12;
899
+ const PET_CONTEXT_MENU_MARGIN = 8;
900
+ const PET_SUMMARY_FONT_FAMILY = 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
898
901
  const PET_OVERLAY_COPY = {
899
902
  "en-US": {
903
+ closePetMenuItem: "Close pet",
900
904
  hideMessage: "Hide message",
901
905
  expandMessage: "Expand message",
902
906
  collapseMessage: "Collapse message",
@@ -908,6 +912,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
908
912
  sendFailed: "Failed to send"
909
913
  },
910
914
  "zh-CN": {
915
+ closePetMenuItem: "关闭宠物",
911
916
  hideMessage: "隐藏消息",
912
917
  expandMessage: "展开消息",
913
918
  collapseMessage: "收起消息",
@@ -984,6 +989,65 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
984
989
  }
985
990
  return "en-US";
986
991
  }
992
+ function getSummaryDensityMetrics(density) {
993
+ switch (density) {
994
+ case "compact":
995
+ return {
996
+ padding: "8px 10px",
997
+ gap: 6,
998
+ marginTop: 3,
999
+ toggleSize: 30,
1000
+ actionSize: 22
1001
+ };
1002
+ case "spacious":
1003
+ return {
1004
+ padding: "14px 16px",
1005
+ gap: 10,
1006
+ marginTop: 6,
1007
+ toggleSize: 38,
1008
+ actionSize: 28
1009
+ };
1010
+ case "normal":
1011
+ default:
1012
+ return {
1013
+ padding: "12px 14px",
1014
+ gap: 8,
1015
+ marginTop: 4,
1016
+ toggleSize: 34,
1017
+ actionSize: 26
1018
+ };
1019
+ }
1020
+ }
1021
+ function getSummaryRadius(radius) {
1022
+ switch (radius) {
1023
+ case "pill":
1024
+ return 24;
1025
+ case "round":
1026
+ return 16;
1027
+ case "sharp":
1028
+ return 0;
1029
+ case "soft":
1030
+ default:
1031
+ return 12;
1032
+ }
1033
+ }
1034
+ function getSummaryThemeMetrics(theme) {
1035
+ var _a2, _b2;
1036
+ const themeObject = typeof theme === "string" ? null : theme;
1037
+ const baseSize = ((_a2 = themeObject == null ? void 0 : themeObject.typography) == null ? void 0 : _a2.baseSize) ?? 16;
1038
+ const density = (themeObject == null ? void 0 : themeObject.density) ?? "normal";
1039
+ const densityOffset = density === "compact" ? -1 : density === "spacious" ? 1 : 0;
1040
+ const bodySize = clampNumber(baseSize - 2 + densityOffset, 11, 17);
1041
+ const densityMetrics = getSummaryDensityMetrics(density);
1042
+ return {
1043
+ ...densityMetrics,
1044
+ bodySize,
1045
+ titleSize: bodySize + 1,
1046
+ iconSize: clampNumber(bodySize + 2, 13, 19),
1047
+ radius: getSummaryRadius(themeObject == null ? void 0 : themeObject.radius),
1048
+ fontFamily: ((_b2 = themeObject == null ? void 0 : themeObject.typography) == null ? void 0 : _b2.fontFamily) ?? PET_SUMMARY_FONT_FAMILY
1049
+ };
1050
+ }
987
1051
  function isPetState(value) {
988
1052
  return value === "idle" || value === "running-right" || value === "running-left" || value === "waving" || value === "jumping" || value === "failed" || value === "waiting" || value === "running" || value === "review";
989
1053
  }
@@ -1019,6 +1083,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1019
1083
  summary.messageId || summary.updatedAt || summary.message
1020
1084
  ].join(":");
1021
1085
  }
1086
+ function getThreadSummaryInteractionKey(summary) {
1087
+ if (!summary) {
1088
+ return null;
1089
+ }
1090
+ return [summary.threadId, summary.messageId ?? ""].join(":");
1091
+ }
1022
1092
  function parseThreadSummaryPayload(value) {
1023
1093
  if (value === null) {
1024
1094
  return { summary: null };
@@ -1055,10 +1125,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1055
1125
  constructor(root, options) {
1056
1126
  this.overlayElement = null;
1057
1127
  this.petElement = null;
1128
+ this.contextMenuElement = null;
1058
1129
  this.summaryElement = null;
1059
1130
  this.summaryToggleElement = null;
1060
1131
  this.mediaElement = null;
1061
1132
  this.options = null;
1133
+ this.theme = null;
1062
1134
  this.resolved = null;
1063
1135
  this.summary = null;
1064
1136
  this.summaryRenderKey = null;
@@ -1095,6 +1167,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1095
1167
  this.mediaQuery = null;
1096
1168
  this.connected = false;
1097
1169
  this.handleViewportChange = () => {
1170
+ this.closeContextMenu();
1098
1171
  this.render();
1099
1172
  };
1100
1173
  this.handleReducedMotionChange = () => {
@@ -1115,6 +1188,36 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1115
1188
  this.enterRestingAfterDelay();
1116
1189
  }
1117
1190
  };
1191
+ this.handleContextMenu = (event) => {
1192
+ event.preventDefault();
1193
+ event.stopPropagation();
1194
+ this.openContextMenu({ x: event.clientX, y: event.clientY });
1195
+ };
1196
+ this.handleContextMenuEvent = (event) => {
1197
+ event.preventDefault();
1198
+ event.stopPropagation();
1199
+ };
1200
+ this.handleContextMenuOutsidePointerDown = (event) => {
1201
+ const menu = this.contextMenuElement;
1202
+ if (menu && event.composedPath().includes(menu)) {
1203
+ return;
1204
+ }
1205
+ this.closeContextMenu();
1206
+ };
1207
+ this.handleContextMenuKeyDown = (event) => {
1208
+ if (event.key !== "Escape") {
1209
+ return;
1210
+ }
1211
+ event.preventDefault();
1212
+ this.closeContextMenu();
1213
+ };
1214
+ this.handleClosePetMenuItemClick = (event) => {
1215
+ var _a2;
1216
+ event.preventDefault();
1217
+ event.stopPropagation();
1218
+ this.closeContextMenu();
1219
+ (_a2 = this.onClose) == null ? void 0 : _a2.call(this);
1220
+ };
1118
1221
  this.handleSummaryPointerEnter = () => {
1119
1222
  this.isSummaryHovering = true;
1120
1223
  this.render();
@@ -1182,7 +1285,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1182
1285
  };
1183
1286
  this.handlePointerDown = (event) => {
1184
1287
  var _a2, _b2;
1185
- if (!((_a2 = this.options) == null ? void 0 : _a2.position.draggable) || event.button !== 0) {
1288
+ if (event.button !== 0 || event.ctrlKey) {
1289
+ return;
1290
+ }
1291
+ this.closeContextMenu();
1292
+ if (!((_a2 = this.options) == null ? void 0 : _a2.position.draggable)) {
1186
1293
  return;
1187
1294
  }
1188
1295
  event.preventDefault();
@@ -1258,6 +1365,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1258
1365
  };
1259
1366
  this.root = root;
1260
1367
  this.onActivate = options == null ? void 0 : options.onActivate;
1368
+ this.onClose = options == null ? void 0 : options.onClose;
1261
1369
  this.onReply = options == null ? void 0 : options.onReply;
1262
1370
  this.onThreadSummaryActivate = options == null ? void 0 : options.onThreadSummaryActivate;
1263
1371
  this.connect();
@@ -1271,9 +1379,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1271
1379
  this.installReducedMotionListener();
1272
1380
  this.render();
1273
1381
  }
1274
- setOptions(pet) {
1382
+ setOptions(pet, theme) {
1383
+ this.closeContextMenu();
1275
1384
  const nextOptions = chatkitTypes.normalizePetOptions(pet);
1276
1385
  this.options = nextOptions;
1386
+ this.theme = theme ?? null;
1277
1387
  if (!nextOptions) {
1278
1388
  this.isDragging = false;
1279
1389
  this.isHovering = false;
@@ -1319,11 +1429,12 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1319
1429
  this.copyLocale = nextLocale;
1320
1430
  this.copy = PET_OVERLAY_COPY[nextLocale];
1321
1431
  this.summaryRenderKey = null;
1432
+ this.closeContextMenu();
1322
1433
  this.render();
1323
1434
  }
1324
1435
  setThreadSummary(summary) {
1325
- const previousKey = getThreadSummaryKey(this.summary);
1326
- const nextKey = getThreadSummaryKey(summary);
1436
+ const previousKey = getThreadSummaryInteractionKey(this.summary);
1437
+ const nextKey = getThreadSummaryInteractionKey(summary);
1327
1438
  this.summary = summary;
1328
1439
  if (!summary) {
1329
1440
  this.isSummaryCollapsed = false;
@@ -1384,8 +1495,14 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1384
1495
  installViewportListeners() {
1385
1496
  var _a2, _b2;
1386
1497
  window.addEventListener("resize", this.handleViewportChange);
1387
- (_a2 = window.visualViewport) == null ? void 0 : _a2.addEventListener("resize", this.handleViewportChange);
1388
- (_b2 = window.visualViewport) == null ? void 0 : _b2.addEventListener("scroll", this.handleViewportChange);
1498
+ (_a2 = window.visualViewport) == null ? void 0 : _a2.addEventListener(
1499
+ "resize",
1500
+ this.handleViewportChange
1501
+ );
1502
+ (_b2 = window.visualViewport) == null ? void 0 : _b2.addEventListener(
1503
+ "scroll",
1504
+ this.handleViewportChange
1505
+ );
1389
1506
  }
1390
1507
  installReducedMotionListener() {
1391
1508
  var _a2, _b2;
@@ -1436,6 +1553,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1436
1553
  pet.addEventListener("pointerenter", this.handlePointerEnter);
1437
1554
  pet.addEventListener("pointerleave", this.handlePointerLeave);
1438
1555
  pet.addEventListener("pointerdown", this.handlePointerDown);
1556
+ pet.addEventListener("contextmenu", this.handleContextMenu);
1439
1557
  pet.addEventListener("click", this.handleClick);
1440
1558
  overlay.append(style, pet);
1441
1559
  this.root.append(overlay);
@@ -1446,6 +1564,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1446
1564
  var _a2;
1447
1565
  this.clearRestingDelayTimer();
1448
1566
  this.clearTimers();
1567
+ this.closeContextMenu();
1449
1568
  if (this.petElement) {
1450
1569
  this.petElement.removeEventListener(
1451
1570
  "pointerenter",
@@ -1455,7 +1574,14 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1455
1574
  "pointerleave",
1456
1575
  this.handlePointerLeave
1457
1576
  );
1458
- this.petElement.removeEventListener("pointerdown", this.handlePointerDown);
1577
+ this.petElement.removeEventListener(
1578
+ "pointerdown",
1579
+ this.handlePointerDown
1580
+ );
1581
+ this.petElement.removeEventListener(
1582
+ "contextmenu",
1583
+ this.handleContextMenu
1584
+ );
1459
1585
  this.petElement.removeEventListener("click", this.handleClick);
1460
1586
  }
1461
1587
  this.isHovering = false;
@@ -1603,10 +1729,6 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1603
1729
  return;
1604
1730
  }
1605
1731
  const nextRenderKey = [
1606
- summaryKey,
1607
- summary.title,
1608
- summary.message,
1609
- summary.status,
1610
1732
  this.copyLocale,
1611
1733
  this.isSummaryExpanded ? "expanded" : "compact",
1612
1734
  this.isSummaryHovering ? "hover" : "rest",
@@ -1619,7 +1741,10 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1619
1741
  (_b2 = this.summaryToggleElement) == null ? void 0 : _b2.remove();
1620
1742
  this.summaryElement = this.createSummaryBubble(summary);
1621
1743
  this.summaryToggleElement = this.createSummaryToggleButton("v");
1622
- (_c2 = this.overlayElement) == null ? void 0 : _c2.append(this.summaryElement, this.summaryToggleElement);
1744
+ (_c2 = this.overlayElement) == null ? void 0 : _c2.append(
1745
+ this.summaryElement,
1746
+ this.summaryToggleElement
1747
+ );
1623
1748
  this.summaryRenderKey = nextRenderKey;
1624
1749
  if (this.isReplyOpen && !this.isReplySubmitting) {
1625
1750
  window.setTimeout(() => {
@@ -1628,6 +1753,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1628
1753
  }, 0);
1629
1754
  }
1630
1755
  }
1756
+ this.updateSummaryBubbleContent(summary);
1631
1757
  this.positionSummaryBubble(position, size);
1632
1758
  }
1633
1759
  renderCollapsedSummary(position, size) {
@@ -1648,7 +1774,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1648
1774
  return;
1649
1775
  }
1650
1776
  const viewport = getViewportSize();
1651
- const badgeSize = 34;
1777
+ const badgeSize = getSummaryThemeMetrics(this.theme).toggleSize;
1652
1778
  const x = clampNumber(
1653
1779
  position.x + size.width - badgeSize * 0.35,
1654
1780
  PET_SUMMARY_MARGIN,
@@ -1671,7 +1797,10 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1671
1797
  return;
1672
1798
  }
1673
1799
  const viewport = getViewportSize();
1674
- const width = Math.min(PET_SUMMARY_WIDTH, viewport.width - PET_SUMMARY_MARGIN * 2);
1800
+ const width = Math.min(
1801
+ PET_SUMMARY_WIDTH,
1802
+ viewport.width - PET_SUMMARY_MARGIN * 2
1803
+ );
1675
1804
  bubble.style.width = `${width}px`;
1676
1805
  const bubbleHeight = bubble.offsetHeight || 96;
1677
1806
  const aboveY = position.y - bubbleHeight - PET_SUMMARY_GAP;
@@ -1691,6 +1820,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1691
1820
  }
1692
1821
  createSummaryBubble(summary) {
1693
1822
  const shouldShowReplyButton = this.isSummaryHovering && !this.isReplyOpen;
1823
+ const metrics = getSummaryThemeMetrics(this.theme);
1694
1824
  const bubble = document.createElement("div");
1695
1825
  bubble.setAttribute("data-chatkit-pet-summary", "");
1696
1826
  bubble.addEventListener("pointerenter", this.handleSummaryPointerEnter);
@@ -1701,19 +1831,18 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1701
1831
  bubble.style.left = "0";
1702
1832
  bubble.style.boxSizing = "border-box";
1703
1833
  bubble.style.pointerEvents = "auto";
1704
- bubble.style.padding = "12px 14px";
1705
- bubble.style.paddingBottom = "12px";
1834
+ bubble.style.padding = metrics.padding;
1706
1835
  bubble.style.border = "1px solid rgba(148, 163, 184, 0.22)";
1707
- bubble.style.borderRadius = "22px";
1836
+ bubble.style.borderRadius = `${metrics.radius}px`;
1708
1837
  bubble.style.background = "rgba(255, 255, 255, 0.94)";
1709
1838
  bubble.style.color = "#1f2937";
1710
1839
  bubble.style.boxShadow = "0 8px 24px rgba(15, 23, 42, 0.1)";
1711
- bubble.style.font = '500 14px/1.35 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
1840
+ bubble.style.font = `500 ${metrics.bodySize}px/1.35 ${metrics.fontFamily}`;
1712
1841
  bubble.style.backdropFilter = "blur(10px)";
1713
1842
  const header = document.createElement("div");
1714
1843
  header.style.display = "flex";
1715
1844
  header.style.alignItems = "center";
1716
- header.style.gap = "8px";
1845
+ header.style.gap = `${metrics.gap}px`;
1717
1846
  if (this.isSummaryHovering || this.isReplyOpen) {
1718
1847
  header.append(
1719
1848
  this.createSummaryActionButton(
@@ -1731,7 +1860,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1731
1860
  title.style.textOverflow = "ellipsis";
1732
1861
  title.style.whiteSpace = "nowrap";
1733
1862
  title.style.fontWeight = "700";
1734
- title.style.fontSize = "15px";
1863
+ title.style.fontSize = `${metrics.titleSize}px`;
1864
+ title.dataset.chatkitPetSummaryTitle = "";
1735
1865
  header.append(title);
1736
1866
  if (this.isSummaryHovering || this.isReplyOpen) {
1737
1867
  header.append(
@@ -1746,7 +1876,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1746
1876
  }
1747
1877
  const message = document.createElement("div");
1748
1878
  message.textContent = summary.message;
1749
- message.style.marginTop = "4px";
1879
+ message.style.marginTop = `${metrics.marginTop}px`;
1750
1880
  message.style.fontWeight = "400";
1751
1881
  message.style.color = "#374151";
1752
1882
  message.style.overflow = "hidden";
@@ -1758,6 +1888,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1758
1888
  message.style.setProperty("-webkit-line-clamp", "2");
1759
1889
  message.style.setProperty("-webkit-box-orient", "vertical");
1760
1890
  }
1891
+ message.dataset.chatkitPetSummaryMessage = "";
1761
1892
  bubble.append(header, message);
1762
1893
  if (shouldShowReplyButton) {
1763
1894
  const reply = this.createTextButton(
@@ -1774,7 +1905,30 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1774
1905
  }
1775
1906
  return bubble;
1776
1907
  }
1908
+ updateSummaryBubbleContent(summary) {
1909
+ var _a2, _b2, _c2;
1910
+ const title = (_a2 = this.summaryElement) == null ? void 0 : _a2.querySelector(
1911
+ "[data-chatkit-pet-summary-title]"
1912
+ );
1913
+ if (title && title.textContent !== summary.title) {
1914
+ title.textContent = summary.title;
1915
+ }
1916
+ const message = (_b2 = this.summaryElement) == null ? void 0 : _b2.querySelector(
1917
+ "[data-chatkit-pet-summary-message]"
1918
+ );
1919
+ if (message && message.textContent !== summary.message) {
1920
+ message.textContent = summary.message;
1921
+ }
1922
+ const statusIcon = (_c2 = this.summaryElement) == null ? void 0 : _c2.querySelector(
1923
+ "[data-chatkit-pet-summary-status]"
1924
+ );
1925
+ if (statusIcon && statusIcon.dataset.chatkitPetSummaryStatus !== summary.status) {
1926
+ const nextIcon = this.createStatusIcon(summary.status);
1927
+ statusIcon.replaceWith(nextIcon);
1928
+ }
1929
+ }
1777
1930
  createSummaryToggleButton(label) {
1931
+ const metrics = getSummaryThemeMetrics(this.theme);
1778
1932
  const button = document.createElement("button");
1779
1933
  button.type = "button";
1780
1934
  button.textContent = label;
@@ -1790,18 +1944,21 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1790
1944
  button.style.color = "#475569";
1791
1945
  button.style.boxShadow = "0 6px 18px rgba(15, 23, 42, 0.1)";
1792
1946
  button.style.cursor = "pointer";
1793
- button.style.font = '600 15px/1 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
1947
+ button.style.font = `600 ${metrics.titleSize}px/1 ${metrics.fontFamily}`;
1794
1948
  button.style.display = "flex";
1795
1949
  button.style.alignItems = "center";
1796
1950
  button.style.justifyContent = "center";
1797
1951
  return button;
1798
1952
  }
1799
1953
  createStatusIcon(status) {
1954
+ const metrics = getSummaryThemeMetrics(this.theme);
1955
+ const iconSize = metrics.iconSize;
1800
1956
  const icon = document.createElement("span");
1801
1957
  icon.setAttribute("aria-hidden", "true");
1958
+ icon.dataset.chatkitPetSummaryStatus = status;
1802
1959
  icon.style.display = "inline-flex";
1803
- icon.style.width = "16px";
1804
- icon.style.height = "16px";
1960
+ icon.style.width = `${iconSize}px`;
1961
+ icon.style.height = `${iconSize}px`;
1805
1962
  icon.style.alignItems = "center";
1806
1963
  icon.style.justifyContent = "center";
1807
1964
  icon.style.flex = "0 0 auto";
@@ -1813,7 +1970,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1813
1970
  return icon;
1814
1971
  }
1815
1972
  icon.style.borderRadius = "999px";
1816
- icon.style.fontSize = "12px";
1973
+ icon.style.fontSize = `${Math.max(10, iconSize - 4)}px`;
1817
1974
  icon.style.fontWeight = "700";
1818
1975
  if (status === "failed") {
1819
1976
  icon.textContent = "!";
@@ -1825,8 +1982,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1825
1982
  icon.style.border = "2px solid #22c55e";
1826
1983
  icon.style.position = "relative";
1827
1984
  const check = document.createElement("span");
1828
- check.style.width = "7px";
1829
- check.style.height = "4px";
1985
+ check.style.width = `${Math.round(iconSize * 0.44)}px`;
1986
+ check.style.height = `${Math.round(iconSize * 0.25)}px`;
1830
1987
  check.style.borderLeft = "2px solid #22c55e";
1831
1988
  check.style.borderBottom = "2px solid #22c55e";
1832
1989
  check.style.transform = "rotate(-45deg) translate(1px, -1px)";
@@ -1834,6 +1991,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1834
1991
  return icon;
1835
1992
  }
1836
1993
  createSummaryActionButton(label, title, onClick) {
1994
+ const metrics = getSummaryThemeMetrics(this.theme);
1837
1995
  const button = document.createElement("button");
1838
1996
  button.type = "button";
1839
1997
  button.textContent = label;
@@ -1843,14 +2001,14 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1843
2001
  event.stopPropagation();
1844
2002
  onClick();
1845
2003
  });
1846
- button.style.width = "26px";
1847
- button.style.height = "26px";
2004
+ button.style.width = `${metrics.actionSize}px`;
2005
+ button.style.height = `${metrics.actionSize}px`;
1848
2006
  button.style.border = "0";
1849
2007
  button.style.borderRadius = "999px";
1850
2008
  button.style.background = "rgba(241, 245, 249, 0.96)";
1851
2009
  button.style.color = "#475569";
1852
2010
  button.style.cursor = "pointer";
1853
- button.style.font = '600 15px/1 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
2011
+ button.style.font = `600 ${metrics.titleSize}px/1 ${metrics.fontFamily}`;
1854
2012
  return button;
1855
2013
  }
1856
2014
  createTextButton(label, onClick) {
@@ -1916,6 +2074,95 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
1916
2074
  }
1917
2075
  return form;
1918
2076
  }
2077
+ createContextMenu() {
2078
+ const menu = document.createElement("div");
2079
+ menu.setAttribute("data-chatkit-pet-context-menu", "");
2080
+ menu.setAttribute("role", "menu");
2081
+ menu.addEventListener("contextmenu", this.handleContextMenuEvent);
2082
+ menu.addEventListener("pointerdown", stopEventPropagation);
2083
+ menu.addEventListener("click", stopEventPropagation);
2084
+ menu.style.position = "absolute";
2085
+ menu.style.top = "0";
2086
+ menu.style.left = "0";
2087
+ menu.style.boxSizing = "border-box";
2088
+ menu.style.minWidth = "132px";
2089
+ menu.style.padding = "4px";
2090
+ menu.style.pointerEvents = "auto";
2091
+ menu.style.border = "1px solid rgba(148, 163, 184, 0.28)";
2092
+ menu.style.borderRadius = "10px";
2093
+ menu.style.background = "rgba(255, 255, 255, 0.96)";
2094
+ menu.style.color = "#1f2937";
2095
+ menu.style.boxShadow = "0 12px 28px rgba(15, 23, 42, 0.16)";
2096
+ menu.style.font = '500 13px/1.3 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif';
2097
+ menu.style.backdropFilter = "blur(10px)";
2098
+ const closeItem = document.createElement("button");
2099
+ closeItem.type = "button";
2100
+ closeItem.textContent = this.copy.closePetMenuItem;
2101
+ closeItem.setAttribute("role", "menuitem");
2102
+ closeItem.addEventListener("click", this.handleClosePetMenuItemClick);
2103
+ closeItem.style.display = "block";
2104
+ closeItem.style.width = "100%";
2105
+ closeItem.style.border = "0";
2106
+ closeItem.style.borderRadius = "7px";
2107
+ closeItem.style.background = "transparent";
2108
+ closeItem.style.color = "inherit";
2109
+ closeItem.style.cursor = "pointer";
2110
+ closeItem.style.padding = "7px 10px";
2111
+ closeItem.style.textAlign = "left";
2112
+ closeItem.style.font = "inherit";
2113
+ menu.append(closeItem);
2114
+ return menu;
2115
+ }
2116
+ openContextMenu(position) {
2117
+ var _a2;
2118
+ const overlay = this.overlayElement;
2119
+ if (!overlay) {
2120
+ return;
2121
+ }
2122
+ this.closeContextMenu();
2123
+ const menu = this.createContextMenu();
2124
+ overlay.append(menu);
2125
+ this.contextMenuElement = menu;
2126
+ this.positionContextMenu(position);
2127
+ (_a2 = menu.querySelector("button")) == null ? void 0 : _a2.focus({ preventScroll: true });
2128
+ window.addEventListener(
2129
+ "pointerdown",
2130
+ this.handleContextMenuOutsidePointerDown,
2131
+ true
2132
+ );
2133
+ window.addEventListener("keydown", this.handleContextMenuKeyDown);
2134
+ }
2135
+ closeContextMenu() {
2136
+ var _a2;
2137
+ (_a2 = this.contextMenuElement) == null ? void 0 : _a2.remove();
2138
+ this.contextMenuElement = null;
2139
+ window.removeEventListener(
2140
+ "pointerdown",
2141
+ this.handleContextMenuOutsidePointerDown,
2142
+ true
2143
+ );
2144
+ window.removeEventListener("keydown", this.handleContextMenuKeyDown);
2145
+ }
2146
+ positionContextMenu(position) {
2147
+ const menu = this.contextMenuElement;
2148
+ if (!menu) {
2149
+ return;
2150
+ }
2151
+ const viewport = getViewportSize();
2152
+ const width = menu.offsetWidth || 132;
2153
+ const height = menu.offsetHeight || 40;
2154
+ const maxX = Math.max(
2155
+ PET_CONTEXT_MENU_MARGIN,
2156
+ viewport.width - width - PET_CONTEXT_MENU_MARGIN
2157
+ );
2158
+ const maxY = Math.max(
2159
+ PET_CONTEXT_MENU_MARGIN,
2160
+ viewport.height - height - PET_CONTEXT_MENU_MARGIN
2161
+ );
2162
+ const x = clampNumber(position.x, PET_CONTEXT_MENU_MARGIN, maxX);
2163
+ const y = clampNumber(position.y, PET_CONTEXT_MENU_MARGIN, maxY);
2164
+ menu.style.transform = `translate3d(${x}px, ${y}px, 0)`;
2165
+ }
1919
2166
  renderAtlas(animationName, animationMode) {
1920
2167
  var _a2;
1921
2168
  if (!this.petElement || ((_a2 = this.resolved) == null ? void 0 : _a2.kind) !== "atlas" || !this.options) {
@@ -2016,13 +2263,16 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2016
2263
  this.rescheduleAnimation();
2017
2264
  }, PET_RESTING_DELAY_MS);
2018
2265
  }
2019
- isPointerOverPet(event) {
2266
+ isPointOverPet(clientX, clientY) {
2020
2267
  var _a2;
2021
2268
  const rect = (_a2 = this.petElement) == null ? void 0 : _a2.getBoundingClientRect();
2022
2269
  if (!rect) {
2023
2270
  return false;
2024
2271
  }
2025
- return event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;
2272
+ return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;
2273
+ }
2274
+ isPointerOverPet(event) {
2275
+ return this.isPointOverPet(event.clientX, event.clientY);
2026
2276
  }
2027
2277
  async submitReply() {
2028
2278
  var _a2;
@@ -2086,7 +2336,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2086
2336
  return value.apply(this, args);
2087
2337
  };
2088
2338
  }
2089
- class ChatKitElementBase extends (_c = HTMLElement, _focusComposer_dec = [requireCommandCapability], _fetchUpdates_dec = [requireCommandCapability], _sendUserMessage_dec = [requireCommandCapability], _setComposerValue_dec = [requireCommandCapability], _setThreadId_dec = [requireCommandCapability], _shareThread_dec = [requireCommandCapability], _sendCustomAction_dec = [requireCommandCapability], _showHistory_dec = [requireCommandCapability], _hideHistory_dec = [requireCommandCapability], _setTrainingOptOut_dec = [requireCommandCapability], _c) {
2339
+ class ChatKitElementBase extends (_c = HTMLElement, _focusComposer_dec = [requireCommandCapability], _fetchUpdates_dec = [requireCommandCapability], _sendUserMessage_dec = [requireCommandCapability], _setComposerValue_dec = [requireCommandCapability], _setRuntimeCapabilities_dec = [requireCommandCapability], _setThreadId_dec = [requireCommandCapability], _shareThread_dec = [requireCommandCapability], _sendCustomAction_dec = [requireCommandCapability], _showHistory_dec = [requireCommandCapability], _hideHistory_dec = [requireCommandCapability], _setTrainingOptOut_dec = [requireCommandCapability], _c) {
2090
2340
  constructor({ profile }) {
2091
2341
  super();
2092
2342
  __runInitializers(_init, 5, this);
@@ -2097,10 +2347,13 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2097
2347
  __privateAdd(this, _wrapper);
2098
2348
  __privateAdd(this, _launcherCloseButton);
2099
2349
  __privateAdd(this, _launcherOpen, false);
2350
+ __privateAdd(this, _chatMinimizedToPet, false);
2100
2351
  __privateAdd(this, _framePetOptionsOverride);
2352
+ __privateAdd(this, _petClosedByContextMenu, false);
2101
2353
  __privateAdd(this, _shadow, this.attachShadow({ mode: "open" }));
2102
2354
  __privateAdd(this, _petOverlay, new PetOverlay(__privateGet(this, _shadow), {
2103
2355
  onActivate: () => __privateMethod(this, _ChatKitElementBase_instances, handlePetActivate_fn).call(this),
2356
+ onClose: () => __privateMethod(this, _ChatKitElementBase_instances, handlePetClose_fn).call(this),
2104
2357
  onReply: (text) => __privateMethod(this, _ChatKitElementBase_instances, handlePetReply_fn).call(this, text),
2105
2358
  onThreadSummaryActivate: (threadId) => void __privateMethod(this, _ChatKitElementBase_instances, handlePetThreadSummaryActivate_fn).call(this, threadId)
2106
2359
  }));
@@ -2231,6 +2484,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2231
2484
  :host([data-display-mode="pet"]) {
2232
2485
  display: contents;
2233
2486
  }
2487
+ :host([data-chat-minimized-to-pet="true"]) {
2488
+ display: contents;
2489
+ }
2234
2490
  .ck-iframe {
2235
2491
  border: none;
2236
2492
  position: absolute;
@@ -2341,6 +2597,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2341
2597
  :host([data-loaded="true"]) .ck-wrapper {
2342
2598
  opacity: 1;
2343
2599
  }
2600
+ :host([data-chat-minimized-to-pet="true"]) .ck-wrapper {
2601
+ opacity: 0;
2602
+ pointer-events: none;
2603
+ visibility: hidden;
2604
+ }
2344
2605
  :host([data-display-mode="pet"]:not([data-chat-open="true"])) .ck-wrapper {
2345
2606
  opacity: 0;
2346
2607
  }
@@ -2423,8 +2684,21 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2423
2684
  __privateGet(this, _messenger).on("pet_options_change", (data) => {
2424
2685
  const payload = parsePetOptionsChangePayload(data);
2425
2686
  if (payload) {
2687
+ if (!__privateGet(this, _petClosedByContextMenu) || payload.pet === null) {
2688
+ __privateSet(this, _petClosedByContextMenu, false);
2689
+ }
2426
2690
  __privateSet(this, _framePetOptionsOverride, payload.pet);
2427
- __privateGet(this, _petOverlay).setOptions(__privateMethod(this, _ChatKitElementBase_instances, getOverlayPetOptions_fn).call(this));
2691
+ __privateMethod(this, _ChatKitElementBase_instances, syncPetOverlayOptions_fn).call(this);
2692
+ }
2693
+ });
2694
+ __privateGet(this, _messenger).on("chat_minimize_change", (data) => {
2695
+ const minimized = typeof data === "object" && data !== null && "minimized" in data && data.minimized === true;
2696
+ if (minimized && !__privateMethod(this, _ChatKitElementBase_instances, getOverlayPetOptions_fn).call(this)) {
2697
+ return;
2698
+ }
2699
+ __privateMethod(this, _ChatKitElementBase_instances, setChatMinimizedToPet_fn).call(this, minimized);
2700
+ if (minimized) {
2701
+ __privateMethod(this, _ChatKitElementBase_instances, setLauncherOpen_fn).call(this, false);
2428
2702
  }
2429
2703
  });
2430
2704
  __privateGet(this, _messenger).on("unmount", () => {
@@ -2460,8 +2734,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2460
2734
  }
2461
2735
  applySanitizedOptions(newOptions) {
2462
2736
  __privateSet(this, _opts, newOptions);
2737
+ __privateSet(this, _petClosedByContextMenu, false);
2463
2738
  __privateGet(this, _petOverlay).setLocale(newOptions.locale);
2464
- __privateGet(this, _petOverlay).setOptions(__privateMethod(this, _ChatKitElementBase_instances, getOverlayPetOptions_fn).call(this));
2739
+ __privateMethod(this, _ChatKitElementBase_instances, syncPetOverlayOptions_fn).call(this);
2465
2740
  if (__privateGet(this, _initialized)) {
2466
2741
  __privateMethod(this, _ChatKitElementBase_instances, setOptionsDataAttributes_fn).call(this, __privateGet(this, _opts));
2467
2742
  __privateGet(this, _loaded).then(() => {
@@ -2503,6 +2778,11 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2503
2778
  await __privateGet(this, _loaded);
2504
2779
  await ((_a2 = __privateGet(this, _messenger)) == null ? void 0 : _a2.commands.setComposerValue(params));
2505
2780
  }
2781
+ async setRuntimeCapabilities(selection) {
2782
+ var _a2;
2783
+ await __privateGet(this, _loaded);
2784
+ await ((_a2 = __privateGet(this, _messenger)) == null ? void 0 : _a2.commands.setRuntimeCapabilities(selection));
2785
+ }
2506
2786
  async setThreadId(threadId) {
2507
2787
  var _a2;
2508
2788
  await __privateGet(this, _loaded);
@@ -2541,7 +2821,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2541
2821
  _wrapper = new WeakMap();
2542
2822
  _launcherCloseButton = new WeakMap();
2543
2823
  _launcherOpen = new WeakMap();
2824
+ _chatMinimizedToPet = new WeakMap();
2544
2825
  _framePetOptionsOverride = new WeakMap();
2826
+ _petClosedByContextMenu = new WeakMap();
2545
2827
  _shadow = new WeakMap();
2546
2828
  _petOverlay = new WeakMap();
2547
2829
  _resolveLoaded = new WeakMap();
@@ -2572,8 +2854,42 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2572
2854
  }
2573
2855
  return options.pet ?? null;
2574
2856
  };
2857
+ mergeConfiguredPetPositionDefaults_fn = function(pet) {
2858
+ if (!pet) {
2859
+ return pet;
2860
+ }
2861
+ const configured = chatkitTypes.normalizePetOptions(
2862
+ __privateMethod(this, _ChatKitElementBase_instances, getConfiguredPetOptions_fn).call(this) ?? null
2863
+ );
2864
+ if (!configured) {
2865
+ return pet;
2866
+ }
2867
+ if (pet === true) {
2868
+ return { position: configured.position };
2869
+ }
2870
+ if (!pet.position) {
2871
+ return { ...pet, position: configured.position };
2872
+ }
2873
+ return {
2874
+ ...pet,
2875
+ position: {
2876
+ ...configured.position,
2877
+ ...pet.position,
2878
+ boundsPadding: pet.position.boundsPadding ?? configured.position.boundsPadding,
2879
+ pin: "pin" in pet.position ? pet.position.pin : configured.position.pin
2880
+ }
2881
+ };
2882
+ };
2575
2883
  getOverlayPetOptions_fn = function() {
2576
- let pet = __privateGet(this, _framePetOptionsOverride) !== void 0 ? __privateGet(this, _framePetOptionsOverride) : __privateMethod(this, _ChatKitElementBase_instances, getConfiguredPetOptions_fn).call(this);
2884
+ if (__privateGet(this, _petClosedByContextMenu)) {
2885
+ return null;
2886
+ }
2887
+ let pet;
2888
+ if (__privateGet(this, _framePetOptionsOverride) !== void 0) {
2889
+ pet = __privateMethod(this, _ChatKitElementBase_instances, mergeConfiguredPetPositionDefaults_fn).call(this, __privateGet(this, _framePetOptionsOverride));
2890
+ } else {
2891
+ pet = __privateMethod(this, _ChatKitElementBase_instances, getConfiguredPetOptions_fn).call(this);
2892
+ }
2577
2893
  if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this) === "pet" && !chatkitTypes.normalizePetOptions(pet ?? null)) {
2578
2894
  pet = true;
2579
2895
  }
@@ -2627,13 +2943,49 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2627
2943
  delete this.dataset.chatOpen;
2628
2944
  }
2629
2945
  };
2946
+ setChatMinimizedToPet_fn = function(minimized) {
2947
+ const next = minimized && Boolean(__privateMethod(this, _ChatKitElementBase_instances, getOverlayPetOptions_fn).call(this));
2948
+ __privateSet(this, _chatMinimizedToPet, next);
2949
+ if (next) {
2950
+ this.dataset.chatMinimizedToPet = "true";
2951
+ } else {
2952
+ delete this.dataset.chatMinimizedToPet;
2953
+ }
2954
+ };
2955
+ syncPetOverlayOptions_fn = function() {
2956
+ var _a2;
2957
+ const overlayPetOptions = __privateMethod(this, _ChatKitElementBase_instances, getOverlayPetOptions_fn).call(this);
2958
+ __privateGet(this, _petOverlay).setOptions(overlayPetOptions, (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.theme);
2959
+ if (!overlayPetOptions) {
2960
+ __privateMethod(this, _ChatKitElementBase_instances, setChatMinimizedToPet_fn).call(this, false);
2961
+ }
2962
+ };
2630
2963
  handlePetActivate_fn = function() {
2964
+ if (__privateGet(this, _chatMinimizedToPet)) {
2965
+ __privateMethod(this, _ChatKitElementBase_instances, setChatMinimizedToPet_fn).call(this, false);
2966
+ if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this) === "pet") {
2967
+ __privateMethod(this, _ChatKitElementBase_instances, setLauncherOpen_fn).call(this, true);
2968
+ }
2969
+ __privateGet(this, _loaded).then(() => this.focusComposer()).catch(() => void 0);
2970
+ return;
2971
+ }
2631
2972
  if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this) !== "pet") {
2632
2973
  return;
2633
2974
  }
2634
2975
  __privateMethod(this, _ChatKitElementBase_instances, setLauncherOpen_fn).call(this, true);
2635
2976
  __privateGet(this, _loaded).then(() => this.focusComposer()).catch(() => void 0);
2636
2977
  };
2978
+ handlePetClose_fn = function() {
2979
+ __privateSet(this, _petClosedByContextMenu, true);
2980
+ __privateSet(this, _framePetOptionsOverride, null);
2981
+ __privateMethod(this, _ChatKitElementBase_instances, setChatMinimizedToPet_fn).call(this, false);
2982
+ __privateMethod(this, _ChatKitElementBase_instances, setLauncherOpen_fn).call(this, false);
2983
+ __privateGet(this, _petOverlay).setOptions(null);
2984
+ if (__privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this) === "pet") {
2985
+ return;
2986
+ }
2987
+ __privateGet(this, _loaded).then(() => __privateGet(this, _messenger).commands.setPetEnabled({ enabled: false })).catch(() => void 0);
2988
+ };
2637
2989
  handlePetReply_fn = async function(text) {
2638
2990
  await this.sendUserMessage({ text });
2639
2991
  };
@@ -2698,6 +3050,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2698
3050
  __decorateElement(_init, 1, "fetchUpdates", _fetchUpdates_dec, ChatKitElementBase);
2699
3051
  __decorateElement(_init, 1, "sendUserMessage", _sendUserMessage_dec, ChatKitElementBase);
2700
3052
  __decorateElement(_init, 1, "setComposerValue", _setComposerValue_dec, ChatKitElementBase);
3053
+ __decorateElement(_init, 1, "setRuntimeCapabilities", _setRuntimeCapabilities_dec, ChatKitElementBase);
2701
3054
  __decorateElement(_init, 1, "setThreadId", _setThreadId_dec, ChatKitElementBase);
2702
3055
  __decorateElement(_init, 1, "shareThread", _shareThread_dec, ChatKitElementBase);
2703
3056
  __decorateElement(_init, 1, "sendCustomAction", _sendCustomAction_dec, ChatKitElementBase);
@@ -2922,6 +3275,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2922
3275
  setComposerValue(...args) {
2923
3276
  return this._callMethod("setComposerValue", ...args);
2924
3277
  },
3278
+ setRuntimeCapabilities(...args) {
3279
+ return this._callMethod("setRuntimeCapabilities", ...args);
3280
+ },
2925
3281
  fetchUpdates(...args) {
2926
3282
  return this._callMethod("fetchUpdates", ...args);
2927
3283
  },