@epam/ai-dial-chat-hooks 1.3.0-dev.118 → 1.3.0-dev.126

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 (66) hide show
  1. package/api-error/api-error.js +2 -2
  2. package/api-transport/create-unauthorized-middleware.js +4 -1
  3. package/attachment/useAttachmentAction/useAttachmentAction.js +5 -8
  4. package/catalog/map-entity-details-to-catalog.js +1 -1
  5. package/catalog/map-skill-to-catalog-item.js +1 -5
  6. package/catalog/useFavoriteEntitiesState/useFavoriteEntitiesState.js +1 -1
  7. package/catalog/usePublishFolders/usePublishFolders.js +1 -1
  8. package/catalog/useSkillItemDetails.js +3 -3
  9. package/conversation/conversation-draft/conversation-draft-store.js +40 -40
  10. package/conversation/conversation-transfer/import-conversation.js +7 -8
  11. package/conversation/conversation-transfer/progress.js +1 -1
  12. package/conversation/conversation-transfer/zip-export.js +1 -7
  13. package/conversation/conversation-transfer/zip-import.js +1 -1
  14. package/conversation/create-chat-stream-api.js +1 -5
  15. package/conversation/useAttachmentUpload/useAttachmentUpload.js +4 -1
  16. package/conversation/useConversationComposerDraft/useConversationComposerDraft.js +1 -5
  17. package/conversation/useConversationExport/useConversationExport.js +11 -12
  18. package/conversation/useConversationHandlers/message-utils.js +2 -2
  19. package/conversation/useConversationHandlers/useConversationHandlers.js +2 -2
  20. package/conversation/useConversationImport/useConversationImport.js +24 -24
  21. package/conversation/useConversationScroll/useConversationScroll.js +2 -6
  22. package/conversation/useConversationStream/conversation-path.js +2 -2
  23. package/conversation/useConversationStream/frame-scheduler.js +17 -17
  24. package/conversation/useConversationStream/generation-resume.js +11 -21
  25. package/conversation/useConversationStream/useConversationStream.js +39 -60
  26. package/conversation/useMessageSelectionReply/useMessageSelectionReply.js +4 -10
  27. package/conversation-overlay.js +1 -2
  28. package/conversation-sources.js +1 -2
  29. package/file-manager-canvas.js +1 -2
  30. package/files/attachment-types.js +1 -1
  31. package/files/create-upload-file-with-progress.js +5 -12
  32. package/files/dial-file-manager-mapping.util.js +7 -7
  33. package/files/dial-file-to-attachment.js +3 -3
  34. package/files/source-content.js +1 -1
  35. package/files/useDialFileListing/useDialFileListing.js +46 -61
  36. package/files/useDialFileManagerSections/useDialFileManagerSections.js +70 -86
  37. package/files/useDialFileManagerTabConfig/useDialFileManagerTabConfig.js +1 -1
  38. package/files/useDialFileMetadata/useDialFileMetadata.js +3 -3
  39. package/files/useDialFileUploadBatch/useDialFileUploadBatch.js +1 -1
  40. package/files/useFileAttachmentPicker/useFileAttachmentPicker.js +2 -2
  41. package/mcp-apps/useMcpAppTools/useMcpAppTools.js +3 -6
  42. package/oauth/authorize-url.js +1 -1
  43. package/oauth/handshake.js +3 -10
  44. package/oauth/useOAuthCallbackCompletion/useOAuthCallbackCompletion.js +2 -5
  45. package/oauth/useToolsetLogin/useToolsetLogin.js +2 -1
  46. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.js +1 -1
  47. package/offline-credentials/useOfflineCredentialsLogin/useOfflineCredentialsLogin.js +13 -13
  48. package/package.json +16 -16
  49. package/scheduled-task/scheduled-task-description.js +1 -1
  50. package/scheduled-task/scheduled-task-trigger.js +1 -1
  51. package/scheduled-task/use-scheduled-task-runs.js +6 -18
  52. package/scheduled-task/use-scheduled-tasks.js +1 -1
  53. package/scroll-anchoring.js +1 -2
  54. package/shared/application-schema.js +3 -3
  55. package/shared/cron-day-of-month.js +10 -10
  56. package/shared/locale.js +2 -2
  57. package/skill/skill-file-batch-validation.js +18 -17
  58. package/skill/skill-types.js +1 -1
  59. package/skill/skill.js +12 -15
  60. package/skill/useSkillArchiveImport/useSkillArchiveImport.js +1 -7
  61. package/skill/useSkillEditorSubmit.js +1 -5
  62. package/skills-state.js +1 -2
  63. package/source-content.js +1 -2
  64. package/usage/useUsageLimitBanner/useUsageLimitBanner.js +1 -1
  65. package/usage/useUsageLimitBannerDismissal/useUsageLimitBannerDismissal.js +1 -1
  66. package/usePageFileDrag/usePageFileDrag.js +3 -3
@@ -2,161 +2,145 @@ import { FileManagerNotificationReason as e } from "../dial-file-manager.types.j
2
2
  import { DIAL_FILE_MANAGER_SECTION_TABS as t } from "../dial-file-manager.model.js";
3
3
  import { hasSamePaths as n, resolveSectionByPath as r, unionPathSets as i, withRoutableRootLabels as ee } from "../dial-file-manager-path.util.js";
4
4
  import { useDialFileManager as a } from "../useDialFileManager/useDialFileManager.js";
5
- import { useEffect as o, useMemo as te, useRef as s, useState as c } from "react";
6
- import { NotificationVariant as l } from "@epam/ai-dial-ui-kit";
7
- import { DialFileManagerTabs as u } from "@epam/ai-dial-react-file-manager";
5
+ import { useEffect as te, useMemo as ne, useRef as re, useState as o } from "react";
6
+ import { NotificationVariant as s } from "@epam/ai-dial-ui-kit";
7
+ import { DialFileManagerTabs as c } from "@epam/ai-dial-react-file-manager";
8
8
  //#region src/files/useDialFileManagerSections/useDialFileManagerSections.ts
9
- var d = ({ activeTab: d, sections: f, ...p }) => {
10
- let m = te(() => ee(f.filter((e) => t.includes(e.tab))), [f]), h = d === u.All, g = (e) => {
11
- let t = m.find((t) => t.tab === e);
9
+ var l = ({ activeTab: l, sections: u, ...d }) => {
10
+ let f = ne(() => ee(u.filter((e) => t.includes(e.tab))), [u]), p = l === c.All, m = (e) => {
11
+ let t = f.find((t) => t.tab === e);
12
12
  return {
13
- ...p,
13
+ ...d,
14
14
  activeTab: e,
15
15
  rootLabel: t?.rootLabel ?? e,
16
- isActive: t != null && (h || d === e),
17
- sessionKey: d
16
+ isActive: t != null && (p || l === e),
17
+ sessionKey: l
18
18
  };
19
- }, _ = a(g(u.MyFiles)), ne = a(g(u.Shared)), re = a(g(u.Organization)), v = (e) => {
19
+ }, h = a(m(c.MyFiles)), g = a(m(c.Shared)), ie = a(m(c.Organization)), _ = (e) => {
20
20
  switch (e) {
21
- case u.MyFiles: return _;
22
- case u.Shared: return ne;
23
- case u.Organization: return re;
21
+ case c.MyFiles: return h;
22
+ case c.Shared: return g;
23
+ case c.Organization: return ie;
24
24
  default: throw Error(`Not a file-manager section tab: ${e}`);
25
25
  }
26
- }, [y, b] = c(null), [x, S] = c(null), [C, ie] = c(d);
27
- C !== d && (ie(d), b(null), S(null));
28
- let w = (e) => m.some((t) => t.tab === e), T = m[0]?.tab ?? u.MyFiles, E = y != null && w(y) ? y : T, ae = x != null && w(x) ? x : E, D = (e) => e == null ? void 0 : r(e, m)?.tab, O = (e) => v(D(e) ?? E), k = (e, t) => {
26
+ }, [v, y] = o(null), [b, x] = o(null), [S, C] = o(l);
27
+ S !== l && (C(l), y(null), x(null));
28
+ let w = (e) => f.some((t) => t.tab === e), T = f[0]?.tab ?? c.MyFiles, E = v != null && w(v) ? v : T, ae = b != null && w(b) ? b : E, D = (e) => e == null ? void 0 : r(e, f)?.tab, O = (e) => _(D(e) ?? E), k = (e, t) => {
29
29
  let n = /* @__PURE__ */ new Map();
30
30
  return e.forEach((e) => {
31
31
  let r = D(t(e)) ?? E;
32
32
  n.set(r, [...n.get(r) ?? [], e]);
33
33
  }), [...n];
34
- }, { onNotification: A } = p, j = s(/* @__PURE__ */ new Set());
35
- o(() => {
34
+ }, { onNotification: A } = d, j = re(/* @__PURE__ */ new Set()), M = f.map(({ tab: e }) => `${e}:${_(e).error ?? ""}`).join("|");
35
+ te(() => {
36
36
  let t = j.current;
37
- if (!h) {
38
- t.clear();
39
- return;
40
- }
41
- m.forEach(({ tab: n }) => {
42
- if (v(n).error == null) {
43
- t.delete(n);
44
- return;
45
- }
46
- t.has(n) || (t.add(n), n !== E && A?.({
47
- variant: l.Error,
37
+ p ? f.forEach(({ tab: n }) => {
38
+ _(n).error == null ? t.delete(n) : t.has(n) || (t.add(n), n !== E && A?.({
39
+ variant: s.Error,
48
40
  reason: e.FolderLoadFailed
49
41
  }));
50
- });
42
+ }) : t.clear();
51
43
  }, [
52
- m.map(({ tab: e }) => `${e}:${v(e).error ?? ""}`).join("|"),
53
- h,
44
+ M,
45
+ p,
54
46
  E,
55
47
  A
56
48
  ]);
57
- let M = () => {
49
+ let N = () => {
58
50
  A?.({
59
- variant: l.Warning,
51
+ variant: s.Warning,
60
52
  reason: e.CrossSectionTransferUnsupported
61
53
  });
62
- }, N = (e, t) => {
54
+ }, P = (e, t) => {
63
55
  let n = new Set(e.map(D));
64
56
  if (n.size !== 1) return;
65
57
  let [r] = n;
66
58
  if (r != null) return (t ? D(t) : r) === r ? r : void 0;
67
- }, P = (e) => {
59
+ }, F = (e) => {
68
60
  if (e == null) {
69
- v(E).onPathChange();
61
+ _(E).onPathChange();
70
62
  return;
71
63
  }
72
64
  let t = D(e);
73
- t != null && (b(t), v(t).onPathChange(e));
74
- }, F = (e) => {
75
- m.forEach(({ tab: t }) => {
76
- let r = v(t), i = new Set([...e].filter((e) => D(e) === t));
65
+ t != null && (y(t), _(t).onPathChange(e));
66
+ }, I = (e) => {
67
+ f.forEach(({ tab: t }) => {
68
+ let r = _(t), i = new Set([...e].filter((e) => D(e) === t));
77
69
  n(i, r.expandedPaths) || r.onExpandedPathsChange(i);
78
70
  });
79
- }, I = (e) => O(e).onFolderPopupPathChange(e), L = (e, t) => O(t).onUploadFiles(e, t), R = (e, t, n) => O(n).onUploadArchive(e, t, n), z = (e, t, n) => O(n).onValidateUpload(e, t, n), B = (e, t, n) => O(t).onCreateFolder(e, t, n), V = (e, t) => O(t.path).onCreateFolderValidate(e, t), H = (e) => k(e, (e) => e.path).forEach(([e, t]) => v(e).onDownloadFiles(t)), U = (e, t) => {
71
+ }, L = (e) => O(e).onFolderPopupPathChange(e), R = (e, t) => O(t).onUploadFiles(e, t), z = (e, t, n) => O(n).onUploadArchive(e, t, n), B = (e, t, n) => O(n).onValidateUpload(e, t, n), V = (e, t, n) => O(t).onCreateFolder(e, t, n), H = (e, t) => O(t.path).onCreateFolderValidate(e, t), U = (e) => k(e, (e) => e.path).forEach(([e, t]) => _(e).onDownloadFiles(t)), W = (e, t) => {
80
72
  let n = D(t);
81
- k(e, (e) => e.sourceUrl ?? t).forEach(([e, r]) => v(e).onDeleteFiles(r, e === n ? t : ""));
82
- }, W = (e, t) => O(t.path).onRenameValidate(e, t), G = (e) => k(e, (e) => e.path).forEach(([e, t]) => v(e).onUnshareFiles(t)), K = (e) => k(e, (e) => e.path).forEach(([e, t]) => v(e).onRemoveFilesAccess(t)), q = (e) => {
73
+ k(e, (e) => e.sourceUrl ?? t).forEach(([e, r]) => _(e).onDeleteFiles(r, e === n ? t : ""));
74
+ }, G = (e, t) => O(t.path).onRenameValidate(e, t), K = (e) => k(e, (e) => e.path).forEach(([e, t]) => _(e).onUnshareFiles(t)), q = (e) => k(e, (e) => e.path).forEach(([e, t]) => _(e).onRemoveFilesAccess(t)), oe = (e) => {
83
75
  let t = D(e.path) ?? E;
84
- S(t), v(t).onGetInfo(e);
85
- }, oe = (e, t) => {
76
+ x(t), _(t).onGetInfo(e);
77
+ }, se = (e, t) => {
86
78
  if (e.length === 0) return;
87
- let n = N(e.map((e) => e.sourceUrl), t);
88
- if (n == null) {
89
- M();
90
- return;
91
- }
92
- v(n).onCopyFiles(e, t);
93
- }, se = (e, t, n) => {
79
+ let n = P(e.map((e) => e.sourceUrl), t);
80
+ n == null ? N() : _(n).onCopyFiles(e, t);
81
+ }, ce = (e, t, n) => {
94
82
  if (e.length === 0) return;
95
- let r = N(e.map((e) => e.sourceUrl ?? t), n);
96
- if (r == null) {
97
- M();
98
- return;
99
- }
100
- v(r).onMoveToFiles(e, t, n);
101
- }, ce = () => m.forEach(({ tab: e }) => v(e).cancelCopyMove());
102
- if (!h) {
103
- let e = t.includes(d) ? d : u.MyFiles;
83
+ let r = P(e.map((e) => e.sourceUrl ?? t), n);
84
+ r == null ? N() : _(r).onMoveToFiles(e, t, n);
85
+ }, le = () => f.forEach(({ tab: e }) => _(e).cancelCopyMove());
86
+ if (!p) {
87
+ let e = t.includes(l) ? l : c.MyFiles;
104
88
  return {
105
- ...v(e),
89
+ ..._(e),
106
90
  sectionTab: e
107
91
  };
108
92
  }
109
- let J = m.map(({ tab: e }) => v(e)), Y = v(E), X = v(ae), Z = [Y, ...J].find((e) => e.uploadBatchState != null) ?? Y, le = J.flatMap((e) => e.downloadBatchState?.files ?? []), ue = J.some((e) => e.downloadBatchState?.isOpen) ? {
93
+ let J = f.map(({ tab: e }) => _(e)), Y = _(E), X = _(ae), Z = [Y, ...J].find((e) => e.uploadBatchState != null) ?? Y, ue = J.flatMap((e) => e.downloadBatchState?.files ?? []), de = J.some((e) => e.downloadBatchState?.isOpen) ? {
110
94
  isOpen: !0,
111
- files: le
112
- } : null, Q = (e) => J.some(e), $ = J.map((e) => e.sharedWithMeIds).filter((e) => e != null), de = new Set(m.filter(({ tab: e }) => e !== E && v(e).isLoading).map(({ tab: e }) => v(e).path));
95
+ files: ue
96
+ } : null, Q = (e) => J.some(e), $ = J.map((e) => e.sharedWithMeIds).filter((e) => e != null), fe = new Set(f.filter(({ tab: e }) => e !== E && _(e).isLoading).map(({ tab: e }) => _(e).path));
113
97
  return {
114
98
  ...Y,
115
99
  items: J.map((e) => e.items[0]).filter((e) => e != null),
116
- onPathChange: P,
100
+ onPathChange: F,
117
101
  expandedPaths: i(J.map((e) => e.expandedPaths)),
118
102
  loadedPaths: i(J.map((e) => e.loadedPaths)),
119
- onExpandedPathsChange: F,
120
- onFolderPopupPathChange: I,
121
- folderPopupLoadingPaths: i([...J.map((e) => e.folderPopupLoadingPaths), de]),
122
- onUploadFiles: L,
123
- onUploadArchive: R,
124
- onValidateUpload: z,
103
+ onExpandedPathsChange: I,
104
+ onFolderPopupPathChange: L,
105
+ folderPopupLoadingPaths: i([...J.map((e) => e.folderPopupLoadingPaths), fe]),
106
+ onUploadFiles: R,
107
+ onUploadArchive: z,
108
+ onValidateUpload: B,
125
109
  uploadBatchState: Z.uploadBatchState,
126
110
  cancelUpload: Z.cancelUpload,
127
111
  cancelUploadFile: Z.cancelUploadFile,
128
112
  clearUploadBatch: Z.clearUploadBatch,
129
- onCreateFolder: B,
130
- onCreateFolderValidate: V,
113
+ onCreateFolder: V,
114
+ onCreateFolderValidate: H,
131
115
  isCreatingFolder: Q((e) => e.isCreatingFolder),
132
- onDownloadFiles: H,
116
+ onDownloadFiles: U,
133
117
  isDownloading: Q((e) => e.isDownloading),
134
- downloadBatchState: ue,
118
+ downloadBatchState: de,
135
119
  cancelDownloadFile: (e) => J.forEach((t) => t.cancelDownloadFile(e)),
136
120
  cancelAllDownloads: () => J.forEach((e) => e.cancelAllDownloads()),
137
121
  clearDownloadBatch: () => J.forEach((e) => e.clearDownloadBatch()),
138
- onDeleteFiles: U,
122
+ onDeleteFiles: W,
139
123
  isDeleting: Q((e) => e.isDeleting),
140
- onRenameValidate: W,
141
- onMoveToFiles: se,
124
+ onRenameValidate: G,
125
+ onMoveToFiles: ce,
142
126
  isRenaming: Q((e) => e.isRenaming),
143
- onCopyFiles: oe,
127
+ onCopyFiles: se,
144
128
  isCopying: Q((e) => e.isCopying),
145
129
  isMoving: Q((e) => e.isMoving),
146
- cancelCopyMove: ce,
130
+ cancelCopyMove: le,
147
131
  sharedWithMeIds: $.length > 0 ? $.flat() : void 0,
148
132
  sharedByMePaths: i(J.map((e) => e.sharedByMePaths)),
149
- onUnshareFiles: G,
133
+ onUnshareFiles: K,
150
134
  isUnsharing: Q((e) => e.isUnsharing),
151
- onRemoveFilesAccess: K,
135
+ onRemoveFilesAccess: q,
152
136
  isRemovingAccess: Q((e) => e.isRemovingAccess),
153
137
  fileMetadata: X.fileMetadata,
154
138
  isFileMetadataLoading: X.isFileMetadataLoading,
155
- onGetInfo: q,
139
+ onGetInfo: oe,
156
140
  clearMetadata: X.clearMetadata,
157
141
  isAnyOperationInProgress: Q((e) => e.isAnyOperationInProgress),
158
142
  sectionTab: E
159
143
  };
160
144
  };
161
145
  //#endregion
162
- export { d as useDialFileManagerSections };
146
+ export { l as useDialFileManagerSections };
@@ -10,7 +10,7 @@ var a = [
10
10
  ], o = 2, s = (s, c, l, u) => {
11
11
  let d = t((t) => {
12
12
  let n = (e) => u == null || u.includes(e);
13
- return n(t) ? t === i.All ? e.filter((e) => n(e)).length >= o : !0 : !1;
13
+ return n(t) ? t !== i.All || e.filter((e) => n(e)).length >= o : !1;
14
14
  }, [u]), f = r(() => l?.filter((e) => d(e.value)), [l, d]);
15
15
  return n(() => {
16
16
  d(s) || c(a.find((e) => d(e)) ?? i.MyFiles);
@@ -13,11 +13,11 @@ var o = ({ filesApi: o, bucket: s, rootLabel: c, onNotification: l }) => {
13
13
  (async () => {
14
14
  p(!0);
15
15
  try {
16
- let e = r.bucket ?? s, i = t(r, e, c);
17
- d(n(await o.getFileMetadata({
16
+ let e = r.bucket ?? s, i = t(r, e, c), a = await o.getFileMetadata({
18
17
  bucket: e,
19
18
  path: i
20
- }), r));
19
+ });
20
+ d(n(a, r));
21
21
  } catch {
22
22
  l?.({
23
23
  variant: a.Error,
@@ -18,7 +18,7 @@ var p = 5, m = (e) => e.error ? `${e.path} (${e.error})` : e.path, h = (e) => {
18
18
  };
19
19
  }, g = (e, t) => `${e}${t}/`, _ = (e) => /\.zip$/i.test(e), v = (e) => {
20
20
  let [t] = e;
21
- if (!(e.length !== 1 || t == null)) return _(t.fileContent.name) && !_(t.name) ? t : void 0;
21
+ if (e.length === 1 && t != null) return _(t.fileContent.name) && !_(t.name) ? t : void 0;
22
22
  }, y = 0, b = () => (y += 1, `${Date.now()}-${y}`), x = (e, t) => ({
23
23
  files: [...e?.files ?? [], ...t],
24
24
  isOpen: !0
@@ -24,7 +24,7 @@ var f = ({ fileManagerOptions: f, bucket: p, forbiddenSymbolsRegExp: m, tabLabel
24
24
  forbiddenSymbolsRegExp: m
25
25
  }), [j, M] = c(A.sectionTab);
26
26
  j !== A.sectionTab && (M(A.sectionTab), E(/* @__PURE__ */ new Set()));
27
- let N = o((e) => v == null || v.length === 0 ? !0 : l(e, v), [v]);
27
+ let N = o((e) => v == null || v.length === 0 || l(e, v), [v]);
28
28
  return {
29
29
  controller: A,
30
30
  activeTab: x,
@@ -34,7 +34,7 @@ var f = ({ fileManagerOptions: f, bucket: p, forbiddenSymbolsRegExp: m, tabLabel
34
34
  onSelectedPathsChange: D,
35
35
  isRowSelectable: o((e) => {
36
36
  let t = e.data;
37
- return t == null || a(t.path) ? !1 : t.nodeType === u.FOLDER ? b : t.nodeType === u.ITEM ? !(t.contentType != null && !N(t.contentType) || y != null && t.contentLength != null && t.contentLength > y) : !1;
37
+ return t == null || a(t.path) ? !1 : t.nodeType === u.FOLDER ? b : t.nodeType === u.ITEM && !(t.contentType != null && !N(t.contentType) || y != null && t.contentLength != null && t.contentLength > y);
38
38
  }, [
39
39
  b,
40
40
  N,
@@ -4,18 +4,15 @@ import { collectToolCallNames as i, sanitizeToolName as a } from "@epam/ai-dial-
4
4
  var o = (o, s, c, l) => {
5
5
  let [u, d] = r([]), [f, p] = r([]), m = n(/* @__PURE__ */ new Set());
6
6
  e(() => {
7
- if (m.current = /* @__PURE__ */ new Set(), p([]), s?.features?.mcp !== !0) {
8
- d([]);
9
- return;
10
- }
11
- if (s.type !== "toolset" && s.type !== "application") {
7
+ if (m.current = /* @__PURE__ */ new Set(), p([]), s?.features?.mcp !== !0 || s.type !== "toolset" && s.type !== "application") {
12
8
  d([]);
13
9
  return;
14
10
  }
15
11
  let e = s.id, t = s.type;
16
12
  (async () => {
17
13
  try {
18
- d((await o.listAppTools(e, t)).map(({ resourceUri: n, toolName: r }) => ({
14
+ let n = await o.listAppTools(e, t);
15
+ d(n.map(({ resourceUri: n, toolName: r }) => ({
19
16
  toolsetId: e,
20
17
  resourceUri: n,
21
18
  toolName: r,
@@ -1,5 +1,5 @@
1
1
  //#region src/oauth/authorize-url.ts
2
- var e = (e) => `${window.location.origin}${e}`, t = new Set(["http:", "https:"]), n = (e, n, r) => {
2
+ var e = (e) => `${window.location.origin}${e}`, t = /* @__PURE__ */ new Set(["http:", "https:"]), n = (e, n, r) => {
3
3
  if (!e.authorizationEndpoint?.trim() || !e.clientId?.trim()) return null;
4
4
  try {
5
5
  let i = new URL(e.authorizationEndpoint.trim());
@@ -1,6 +1,6 @@
1
1
  import { ToolsetOAuthCallbackQuery as e, ToolsetOAuthChannelControlType as t, ToolsetOAuthFailureReason as n, ToolsetOAuthResultType as r } from "./types.js";
2
2
  //#region src/oauth/handshake.ts
3
- var i = "toolset-oauth-", a = (e) => `${i}${e}`, o = 300 * 1e3, s = 500, c = (e) => {
3
+ var i = "toolset-oauth-", a = (e) => `${i}${e}`, o = 3e5, s = 500, c = (e) => {
4
4
  switch (e) {
5
5
  case n.MissingCode:
6
6
  case n.MissingRedirectState:
@@ -38,11 +38,7 @@ var i = "toolset-oauth-", a = (e) => `${i}${e}`, o = 300 * 1e3, s = 500, c = (e)
38
38
  return null;
39
39
  }, b = () => {
40
40
  let e = y();
41
- if (e != null) {
42
- v(e);
43
- return;
44
- }
45
- n.closed && _({ type: r.Cancelled });
41
+ e == null ? n.closed && _({ type: r.Cancelled }) : v(e);
46
42
  };
47
43
  try {
48
44
  s = new BroadcastChannel(a(i)), s.onmessage = (e) => {
@@ -52,10 +48,7 @@ var i = "toolset-oauth-", a = (e) => `${i}${e}`, o = 300 * 1e3, s = 500, c = (e)
52
48
  window.addEventListener("focus", b);
53
49
  let x = setInterval(() => {
54
50
  let e = y();
55
- if (e != null) {
56
- v(e);
57
- return;
58
- }
51
+ e != null && v(e);
59
52
  }, m), S = setTimeout(() => {
60
53
  n.close(), _({ type: r.Cancelled });
61
54
  }, p), C = y();
@@ -21,11 +21,8 @@ var d = 500, f = (e) => typeof e == "object" && !!e && "type" in e && e.type ===
21
21
  } catch {}
22
22
  }, h = (e, t) => {
23
23
  let r = new URL(window.location.pathname, window.location.origin);
24
- if (r.searchParams.set(n.Result, t.type), t.type === a.Failure && r.searchParams.set(n.FailureReason, t.reason), m(r), !e) {
25
- window.close();
26
- return;
27
- }
28
- try {
24
+ if (r.searchParams.set(n.Result, t.type), t.type === a.Failure && r.searchParams.set(n.FailureReason, t.reason), m(r), !e) window.close();
25
+ else try {
29
26
  let n = new BroadcastChannel(o(e));
30
27
  n.postMessage(t);
31
28
  let r = setInterval(() => {
@@ -40,7 +40,8 @@ var f = /* @__PURE__ */ function(e) {
40
40
  }), { type: "success" };
41
41
  if (S.type === i.Failure) return { type: "failure" };
42
42
  try {
43
- if (a((await h(p)).authSettings, m) === t.SignedIn) return o({
43
+ let e = await h(p);
44
+ if (a(e.authSettings, m) === t.SignedIn) return o({
44
45
  toolsetId: p,
45
46
  credentialsLevel: m
46
47
  }), { type: "success" };
@@ -18,7 +18,7 @@ var a = /* @__PURE__ */ function(e) {
18
18
  connect: o
19
19
  };
20
20
  } catch {
21
- return t.signal.aborted ? null : (s("error"), l(void 0), null);
21
+ return t.signal.aborted || (s("error"), l(void 0)), null;
22
22
  }
23
23
  }, [a]);
24
24
  return n(() => (p(), () => {
@@ -3,27 +3,27 @@ import { waitForToolsetOAuthResult as o } from "../../oauth/handshake.js";
3
3
  import { navigateToolsetOAuthPopup as s, openToolsetOAuthPopup as c } from "../../oauth/popup.js";
4
4
  import { useCallback as l } from "react";
5
5
  //#region src/offline-credentials/useOfflineCredentialsLogin/useOfflineCredentialsLogin.ts
6
- var u = "offline-credentials", d = 300 * 1e3, f = 5 * 1e3, p = /* @__PURE__ */ function(e) {
6
+ var u = "offline-credentials", d = 3e5, f = /* @__PURE__ */ function(e) {
7
7
  return e.Success = "success", e.Failure = "failure", e.PopupBlocked = "popup-blocked", e.Cancelled = "cancelled", e.TimedOut = "timed-out", e;
8
- }({}), m = ({ callbackPath: p }) => ({ login: l(async (l, m, h) => {
9
- let g = {
8
+ }({}), p = ({ callbackPath: f }) => ({ login: l(async (l, p, m) => {
9
+ let h = {
10
10
  authenticationType: t.OAuth,
11
11
  withLogin: a.WithConfig,
12
12
  isLoggedIn: !1,
13
13
  clientId: l.clientId,
14
14
  authorizationEndpoint: l.authorizationEndpoint,
15
15
  scopes: l.scopes
16
- }, _ = h ?? c();
17
- if (!_) return { type: "popup-blocked" };
18
- let v = s(_, g, u, p, n.User, e.OfflineCredentials);
19
- if (v.type !== r.Started) return { type: "failure" };
20
- let y = Date.now(), b = await o(v.popup, v.flowId, {
16
+ }, g = m ?? c();
17
+ if (!g) return { type: "popup-blocked" };
18
+ let _ = s(g, h, u, f, n.User, e.OfflineCredentials);
19
+ if (_.type !== r.Started) return { type: "failure" };
20
+ let v = Date.now(), y = await o(_.popup, _.flowId, {
21
21
  toolsetId: u,
22
22
  credentialsLevel: n.User,
23
- callbackPath: p,
23
+ callbackPath: f,
24
24
  timeoutMs: d
25
- }), x = Date.now() - y;
26
- return (await m())?.connected ? { type: "success" } : b.type === i.Failure || b.type === i.Success ? { type: "failure" } : x >= d - f ? { type: "timed-out" } : { type: "cancelled" };
27
- }, [p]) });
25
+ }), b = Date.now() - v;
26
+ return (await p())?.connected ? { type: "success" } : y.type === i.Failure || y.type === i.Success ? { type: "failure" } : b >= 295e3 ? { type: "timed-out" } : { type: "cancelled" };
27
+ }, [f]) });
28
28
  //#endregion
29
- export { p as OfflineCredentialsLoginOutcomeType, m as useOfflineCredentialsLogin };
29
+ export { f as OfflineCredentialsLoginOutcomeType, p as useOfflineCredentialsLogin };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@epam/ai-dial-chat-hooks",
3
3
  "description": "Framework-level React hooks extracted from AI DIAL Chat for building custom chat interfaces",
4
- "version": "1.3.0-dev.118",
4
+ "version": "1.3.0-dev.126",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "main": "./index.js",
@@ -121,7 +121,7 @@
121
121
  }
122
122
  },
123
123
  "dependencies": {
124
- "@epam/ai-dial-chat-api-client": "1.3.0-dev.118",
124
+ "@epam/ai-dial-chat-api-client": "1.3.0-dev.126",
125
125
  "dompurify": "3.4.16",
126
126
  "fflate": "^0.8.3",
127
127
  "lru-cache": "^10.4.3",
@@ -130,22 +130,22 @@
130
130
  },
131
131
  "peerDependencies": {
132
132
  "react": "^19.2.8",
133
- "@epam/ai-dial-attachment-canvas": "1.3.0-dev.118",
134
- "@epam/ai-dial-attachment-input": "1.3.0-dev.118",
135
- "@epam/ai-dial-catalog": "1.3.0-dev.118",
136
- "@epam/ai-dial-chat-overlay": "1.3.0-dev.118",
137
- "@epam/ai-dial-chat-shared": "1.3.0-dev.118",
138
- "@epam/ai-dial-conversation-input": "1.3.0-dev.118",
139
- "@epam/ai-dial-mcp-apps": "1.3.0-dev.118",
140
- "@epam/ai-dial-publish-panel": "1.3.0-dev.118",
141
- "@epam/ai-dial-quotations": "1.3.0-dev.118",
133
+ "@epam/ai-dial-attachment-canvas": "1.3.0-dev.126",
134
+ "@epam/ai-dial-attachment-input": "1.3.0-dev.126",
135
+ "@epam/ai-dial-catalog": "1.3.0-dev.126",
136
+ "@epam/ai-dial-chat-overlay": "1.3.0-dev.126",
137
+ "@epam/ai-dial-chat-shared": "1.3.0-dev.126",
138
+ "@epam/ai-dial-conversation-input": "1.3.0-dev.126",
139
+ "@epam/ai-dial-mcp-apps": "1.3.0-dev.126",
140
+ "@epam/ai-dial-publish-panel": "1.3.0-dev.126",
141
+ "@epam/ai-dial-quotations": "1.3.0-dev.126",
142
142
  "@epam/ai-dial-react-file-manager": "^0.4.0-dev.11",
143
- "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.118",
144
- "@epam/ai-dial-share": "1.3.0-dev.118",
145
- "@epam/ai-dial-skill-editor": "1.3.0-dev.118",
146
- "@epam/ai-dial-source-panel": "1.3.0-dev.118",
143
+ "@epam/ai-dial-scheduled-tasks": "1.3.0-dev.126",
144
+ "@epam/ai-dial-share": "1.3.0-dev.126",
145
+ "@epam/ai-dial-skill-editor": "1.3.0-dev.126",
146
+ "@epam/ai-dial-source-panel": "1.3.0-dev.126",
147
147
  "@epam/ai-dial-ui-kit": "^0.16.0-dev.20",
148
- "@epam/ai-dial-usage-dashboard": "1.3.0-dev.118",
148
+ "@epam/ai-dial-usage-dashboard": "1.3.0-dev.126",
149
149
  "@modelcontextprotocol/sdk": "^1.32.1",
150
150
  "@epam/pdf-highlighter-kit": "^0.0.19",
151
151
  "@mcp-ui/client": "^7.1.1"
@@ -33,7 +33,7 @@ var t = /* @__PURE__ */ function(e) {
33
33
  "minute",
34
34
  "day",
35
35
  "day_of_week"
36
- ].includes(e) && t !== "*" && !(e === "second" && t === "0")) return o();
36
+ ].includes(e) && t !== "*" && (e !== "second" || t !== "0")) return o();
37
37
  }
38
38
  let c = a.hour, l = a.minute, u = a.day === "*" ? void 0 : a.day, d = u === e, f = a.day_of_week === "*" ? void 0 : a.day_of_week, p = f ? [
39
39
  "monday",
@@ -4,7 +4,7 @@ import { getUtcDayShift as n, toLocalDayOfMonth as r, toUtcCronDayOfMonth as i }
4
4
  import { apSchedulerDayToJsDay as a, jsDayToApSchedulerDay as o } from "../shared/cron-weekday.js";
5
5
  import { ScheduledTaskRepeat as s } from "@epam/ai-dial-scheduled-tasks";
6
6
  //#region src/scheduled-task/scheduled-task-trigger.ts
7
- var c = new Set([
7
+ var c = /* @__PURE__ */ new Set([
8
8
  "hour",
9
9
  "minute",
10
10
  "day_of_week",
@@ -72,7 +72,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
72
72
  if (j.current !== t) return;
73
73
  v((e) => {
74
74
  let t = new Set(e.map(({ id: e }) => e));
75
- return [...e, ...r.items.filter(({ id: e }) => t.has(e) ? !1 : (t.add(e), !0))];
75
+ return [...e, ...r.items.filter(({ id: e }) => !t.has(e) && (t.add(e), !0))];
76
76
  }), M.current = n + r.items.length, O(r.next != null || (r.count == null ? r.items.length === m : n + r.items.length < r.count));
77
77
  } catch (e) {
78
78
  j.current === t && E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more scheduled task runs"));
@@ -111,28 +111,16 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
111
111
  f,
112
112
  m
113
113
  ]), G = e(() => {
114
- if (document.visibilityState !== "visible") {
115
- V.current = !0;
116
- return;
117
- }
118
- W();
114
+ document.visibilityState === "visible" ? W() : V.current = !0;
119
115
  }, [W]);
120
116
  return t(() => {
121
117
  if (!p || !f || !H) return;
122
118
  z.current = 0;
123
119
  let e = setInterval(() => {
124
- if (document.visibilityState !== "visible") {
125
- V.current = !0;
126
- return;
127
- }
128
- (async () => {
120
+ document.visibilityState === "visible" ? (async () => {
129
121
  let t = await W();
130
- if (t === "changed") {
131
- z.current = 0;
132
- return;
133
- }
134
- (t === "unchanged" || t === "error") && (z.current += 1, z.current >= o && e !== null && (clearInterval(e), e = null));
135
- })();
122
+ t === "changed" ? z.current = 0 : (t === "unchanged" || t === "error") && (z.current += 1, z.current >= o && e !== null && (clearInterval(e), e = null));
123
+ })() : V.current = !0;
136
124
  }, a);
137
125
  return () => {
138
126
  e !== null && clearInterval(e);
@@ -156,7 +144,7 @@ var a = 15e3, o = 48, s = 5e3, c = 2147483647, l = (e, t) => {
156
144
  ]), t(() => {
157
145
  if (!p || !f) return;
158
146
  let e = () => {
159
- document.visibilityState !== "visible" || !V.current || (async () => {
147
+ document.visibilityState === "visible" && V.current && (async () => {
160
148
  await W() !== "skipped" && (V.current = !1);
161
149
  })();
162
150
  };
@@ -59,7 +59,7 @@ var i = (i, { enabled: a = !0, pageSize: o = 20, debounceMs: s = 300, initialSea
59
59
  if (k.current !== t) return;
60
60
  f((e) => {
61
61
  let t = new Set(e.map(({ id: e }) => e));
62
- return [...e, ...r.items.filter(({ id: e }) => t.has(e) ? !1 : (t.add(e), !0))];
62
+ return [...e, ...r.items.filter(({ id: e }) => !t.has(e) && (t.add(e), !0))];
63
63
  }), A.current = n + r.items.length, E(r.next != null);
64
64
  } catch (e) {
65
65
  k.current === t && w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more scheduled tasks"));
@@ -1,2 +1 @@
1
- import { useConversationScroll as e } from "./conversation/useConversationScroll/useConversationScroll.js";
2
- export { e as useConversationScroll };
1
+ export { useConversationScroll } from "./conversation/useConversationScroll/useConversationScroll.js";
@@ -1,7 +1,7 @@
1
1
  //#region src/shared/application-schema.ts
2
- var e = "custom_app", t = (t) => !!t && t.id === e, n = (e) => !!e && (!!e.id?.endsWith("quickapps2") || e.displayName === "Quick app 2.0"), r = (e) => {
2
+ var e = (e) => !!e && e.id === "custom_app", t = (e) => !!e && (!!e.id?.endsWith("quickapps2") || e.displayName === "Quick app 2.0"), n = (t) => {
3
3
  let n = /* @__PURE__ */ new Set();
4
- return e.filter((e) => !e.id || t(e) || n.has(e.id) ? !1 : (n.add(e.id), !0));
4
+ return t.filter((t) => !t.id || e(t) || n.has(t.id) ? !1 : (n.add(t.id), !0));
5
5
  };
6
6
  //#endregion
7
- export { r as getRunnerSchemas, t as isCustomAppSchema, n as isQuickAppSchema };
7
+ export { n as getRunnerSchemas, e as isCustomAppSchema, t as isQuickAppSchema };
@@ -1,13 +1,13 @@
1
1
  //#region src/shared/cron-day-of-month.ts
2
- var e = "last", t = 31, n = 864e5, r = (e) => Math.round((Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate()) - Date.UTC(e.getFullYear(), e.getMonth(), e.getDate())) / n), i = (n, r) => {
3
- let i = n + r;
4
- return i < 1 ? e : i > t ? "1" : String(i);
5
- }, a = (e, n) => {
6
- if (e === "last") return n === -1 ? "1" : void 0;
7
- let r = Number(e);
8
- if (!/^\d+$/.test(e) || r < 1 || r > t) return;
9
- let i = r - n;
10
- return i < 1 ? String(t) : i > t ? "1" : String(i);
2
+ var e = "last", t = (e) => Math.round((Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate()) - Date.UTC(e.getFullYear(), e.getMonth(), e.getDate())) / 864e5), n = (t, n) => {
3
+ let r = t + n;
4
+ return r < 1 ? e : r > 31 ? "1" : String(r);
5
+ }, r = (e, t) => {
6
+ if (e === "last") return t === -1 ? "1" : void 0;
7
+ let n = Number(e);
8
+ if (!/^\d+$/.test(e) || n < 1 || n > 31) return;
9
+ let r = n - t;
10
+ return r < 1 ? "31" : r > 31 ? "1" : String(r);
11
11
  };
12
12
  //#endregion
13
- export { e as CRON_LAST_DAY_OF_MONTH, r as getUtcDayShift, a as toLocalDayOfMonth, i as toUtcCronDayOfMonth };
13
+ export { e as CRON_LAST_DAY_OF_MONTH, t as getUtcDayShift, r as toLocalDayOfMonth, n as toUtcCronDayOfMonth };
package/shared/locale.js CHANGED
@@ -6,14 +6,14 @@ var e = (e) => e.split("-")[0].toLowerCase(), t = (t, n, r) => {
6
6
  return t[n] ?? t[i] ?? t[r] ?? Object.values(t).find((e) => e !== void 0) ?? "";
7
7
  }, n = (t, n) => `${t} [${e(n).toUpperCase()}]`, r = (e, t) => {
8
8
  let n = /* @__PURE__ */ new Map();
9
- for (let r of e) !r.language || r.language === t || !r.name && !r.description || n.set(r.language, {
9
+ for (let r of e) r.language && r.language !== t && (r.name || r.description) && n.set(r.language, {
10
10
  language: r.language,
11
11
  name: r.name || void 0,
12
12
  description: r.description || void 0
13
13
  });
14
14
  return n.size > 0 ? Array.from(n.values()) : void 0;
15
15
  }, i = (e, t, n) => {
16
- let r = typeof e == "object" ? e : {}, i = typeof t == "object" ? t : {}, a = new Set([...Object.keys(r), ...Object.keys(i)]);
16
+ let r = typeof e == "object" ? e : {}, i = typeof t == "object" ? t : {}, a = /* @__PURE__ */ new Set([...Object.keys(r), ...Object.keys(i)]);
17
17
  a.delete(n);
18
18
  let o = 0;
19
19
  return Array.from(a, (e) => ({