@xpert-ai/chatkit-web-component 0.6.0 → 0.8.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, _setRuntimeCapabilities_dec, _setComposerValue_dec, _sendUserMessage_dec, _fetchUpdates_dec, _focusComposer_dec, _c, _opts, _frameUrl, _frame, _wrapper, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _channelId, _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;
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, _windowDrag, _launcherCloseButton, _launcherOpen, _chatMinimizedToPet, _framePetOptionsOverride, _petClosedByContextMenu, _shadow, _petOverlay, _resolveLoaded, _loaded, _channelId, _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());
@@ -897,6 +897,59 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
897
897
  }
898
898
  return { commands, events, backend, threadItems, errors, widgets };
899
899
  };
900
+ function parseWindowDragRegions(value) {
901
+ if (!value || typeof value !== "object" || !("width" in value) || typeof value.width !== "number" || !Number.isFinite(value.width) || value.width <= 0 || !("height" in value) || typeof value.height !== "number" || !Number.isFinite(value.height) || value.height <= 0 || !("regions" in value) || !Array.isArray(value.regions) || value.regions.length > 128)
902
+ return null;
903
+ const regions = [];
904
+ for (const rect of value.regions) {
905
+ if (!rect || typeof rect !== "object" || typeof rect.x !== "number" || !Number.isFinite(rect.x) || rect.x < 0 || typeof rect.y !== "number" || !Number.isFinite(rect.y) || rect.y < 0 || typeof rect.width !== "number" || !Number.isFinite(rect.width) || rect.width <= 0 || typeof rect.height !== "number" || !Number.isFinite(rect.height) || rect.height <= 0 || rect.x + rect.width > value.width + 1 || rect.y + rect.height > Math.min(value.height, 96) + 1)
906
+ return null;
907
+ regions.push({
908
+ x: rect.x,
909
+ y: rect.y,
910
+ width: rect.width,
911
+ height: rect.height
912
+ });
913
+ }
914
+ return { width: value.width, height: value.height, regions };
915
+ }
916
+ class WindowDragOverlay {
917
+ constructor(wrapper, enabled) {
918
+ this.wrapper = wrapper;
919
+ this.enabled = enabled;
920
+ this.size = { width: 0, height: 0 };
921
+ this.layer = document.createElement("div");
922
+ this.layer.setAttribute("aria-hidden", "true");
923
+ this.layer.dataset.slot = "chatkit-window-drag";
924
+ this.layer.style.cssText = "position:absolute;inset:0;pointer-events:none;overflow:hidden;";
925
+ wrapper.append(this.layer);
926
+ this.observer = new ResizeObserver(() => {
927
+ if (this.wrapper.clientWidth !== this.size.width || this.wrapper.clientHeight !== this.size.height)
928
+ this.clear();
929
+ });
930
+ this.observer.observe(wrapper);
931
+ }
932
+ update(input) {
933
+ this.clear();
934
+ if (!this.enabled()) return;
935
+ const value = parseWindowDragRegions(input);
936
+ if (!value || Math.abs(value.width - this.wrapper.clientWidth) > 1 || Math.abs(value.height - this.wrapper.clientHeight) > 1)
937
+ return;
938
+ this.size = { width: value.width, height: value.height };
939
+ for (const rect of value.regions) {
940
+ const region = document.createElement("div");
941
+ region.style.cssText = `position:absolute;left:${rect.x}px;top:${rect.y}px;width:${rect.width}px;height:${rect.height}px;pointer-events:auto;user-select:none;-webkit-app-region:drag;`;
942
+ this.layer.append(region);
943
+ }
944
+ }
945
+ clear() {
946
+ this.layer.replaceChildren();
947
+ }
948
+ destroy() {
949
+ this.observer.disconnect();
950
+ this.layer.remove();
951
+ }
952
+ }
900
953
  class ChatFrameMessenger extends BaseMessenger {
901
954
  // Messenger running in outer can always handle commands coming from inner
902
955
  canReceiveCommand(_) {
@@ -2685,6 +2738,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2685
2738
  __privateAdd(this, _frameUrl);
2686
2739
  __privateAdd(this, _frame);
2687
2740
  __privateAdd(this, _wrapper);
2741
+ __privateAdd(this, _windowDrag);
2688
2742
  __privateAdd(this, _launcherCloseButton);
2689
2743
  __privateAdd(this, _launcherOpen, false);
2690
2744
  __privateAdd(this, _chatMinimizedToPet, false);
@@ -2735,6 +2789,24 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2735
2789
  input.click();
2736
2790
  });
2737
2791
  },
2792
+ onApprovalDecision: async (input) => {
2793
+ var _a2, _b2;
2794
+ const handler = (_b2 = (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.approvals) == null ? void 0 : _b2.onDecision;
2795
+ if (!handler)
2796
+ throw new IntegrationError(
2797
+ "Add approvals.onDecision to handle host approvals."
2798
+ );
2799
+ return handler(input);
2800
+ },
2801
+ onApprovalAction: async (input) => {
2802
+ var _a2, _b2;
2803
+ const handler = (_b2 = (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.approvals) == null ? void 0 : _b2.onAction;
2804
+ if (!handler)
2805
+ throw new IntegrationError(
2806
+ "Add approvals.onAction to handle approval actions."
2807
+ );
2808
+ return handler(input);
2809
+ },
2738
2810
  onClientToolCall: async ({
2739
2811
  name,
2740
2812
  params,
@@ -2780,9 +2852,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
2780
2852
  var _a2, _b2;
2781
2853
  const onClientCommand = (_b2 = (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.workbench) == null ? void 0 : _b2.onClientCommand;
2782
2854
  if (!onClientCommand) {
2783
- __privateMethod(this, _ChatKitElementBase_instances, emitAndThrow_fn).call(this, new IntegrationError(
2784
- `No handler for workbench client command "${commandKey}". Add workbench.onClientCommand to your ChatKit options.`
2785
- ));
2855
+ return { success: false, code: "unsupported", commandKey };
2786
2856
  }
2787
2857
  return onClientCommand({
2788
2858
  commandKey,
@@ -3024,6 +3094,20 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3024
3094
  closeButton.addEventListener("click", __privateGet(this, _handleLauncherClose));
3025
3095
  wrapper.appendChild(closeButton);
3026
3096
  __privateSet(this, _launcherCloseButton, closeButton);
3097
+ __privateSet(this, _windowDrag, new WindowDragOverlay(
3098
+ wrapper,
3099
+ () => {
3100
+ var _a2, _b2;
3101
+ return ((_b2 = (_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.header) == null ? void 0 : _b2.windowDrag) === true;
3102
+ }
3103
+ ));
3104
+ __privateGet(this, _messenger).on(
3105
+ "window_drag_regions",
3106
+ (data) => {
3107
+ var _a2;
3108
+ return (_a2 = __privateGet(this, _windowDrag)) == null ? void 0 : _a2.update(data);
3109
+ }
3110
+ );
3027
3111
  __privateGet(this, _shadow).append(style);
3028
3112
  __privateGet(this, _messenger).on("left_header_icon_click", () => {
3029
3113
  var _a2, _b2, _c2;
@@ -3086,6 +3170,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3086
3170
  }
3087
3171
  });
3088
3172
  __privateGet(this, _messenger).on("unmount", () => {
3173
+ var _a2;
3174
+ (_a2 = __privateGet(this, _windowDrag)) == null ? void 0 : _a2.destroy();
3089
3175
  if (__privateGet(this, _wrapper) && __privateGet(this, _shadow).contains(__privateGet(this, _wrapper))) {
3090
3176
  __privateGet(this, _shadow).removeChild(__privateGet(this, _wrapper));
3091
3177
  __privateSet(this, _wrapper, void 0);
@@ -3107,9 +3193,10 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3107
3193
  }
3108
3194
  }
3109
3195
  disconnectedCallback() {
3110
- var _a2, _b2;
3111
- (_a2 = __privateGet(this, _frame)) == null ? void 0 : _a2.removeEventListener("load", __privateGet(this, _handleFrameLoad));
3112
- (_b2 = __privateGet(this, _launcherCloseButton)) == null ? void 0 : _b2.removeEventListener(
3196
+ var _a2, _b2, _c2;
3197
+ (_a2 = __privateGet(this, _windowDrag)) == null ? void 0 : _a2.destroy();
3198
+ (_b2 = __privateGet(this, _frame)) == null ? void 0 : _b2.removeEventListener("load", __privateGet(this, _handleFrameLoad));
3199
+ (_c2 = __privateGet(this, _launcherCloseButton)) == null ? void 0 : _c2.removeEventListener(
3113
3200
  "click",
3114
3201
  __privateGet(this, _handleLauncherClose)
3115
3202
  );
@@ -3117,7 +3204,9 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3117
3204
  __privateGet(this, _petOverlay).destroy();
3118
3205
  }
3119
3206
  applySanitizedOptions(newOptions) {
3207
+ var _a2, _b2;
3120
3208
  __privateSet(this, _opts, newOptions);
3209
+ if (!((_a2 = newOptions.header) == null ? void 0 : _a2.windowDrag)) (_b2 = __privateGet(this, _windowDrag)) == null ? void 0 : _b2.clear();
3121
3210
  __privateSet(this, _petClosedByContextMenu, false);
3122
3211
  __privateGet(this, _petOverlay).setLocale(newOptions.locale);
3123
3212
  __privateMethod(this, _ChatKitElementBase_instances, syncPetOverlayOptions_fn).call(this);
@@ -3203,6 +3292,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3203
3292
  _frameUrl = new WeakMap();
3204
3293
  _frame = new WeakMap();
3205
3294
  _wrapper = new WeakMap();
3295
+ _windowDrag = new WeakMap();
3206
3296
  _launcherCloseButton = new WeakMap();
3207
3297
  _launcherOpen = new WeakMap();
3208
3298
  _chatMinimizedToPet = new WeakMap();
@@ -3266,7 +3356,8 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
3266
3356
  };
3267
3357
  };
3268
3358
  getOverlayPetOptions_fn = function() {
3269
- if (__privateGet(this, _petClosedByContextMenu)) {
3359
+ var _a2;
3360
+ if (__privateGet(this, _petClosedByContextMenu) || ((_a2 = __privateGet(this, _opts)) == null ? void 0 : _a2.pet) === false && __privateMethod(this, _ChatKitElementBase_instances, getDisplayMode_fn).call(this) !== "pet") {
3270
3361
  return null;
3271
3362
  }
3272
3363
  let pet;