@epam/ai-dial-chat-hooks 1.2.0-dev.99 → 1.3.0-dev.5
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.
- package/api-error/api-error.js +7 -4
- package/catalog/catalog-derivations.js +1 -1
- package/catalog/deployment-id.js +8 -2
- package/catalog/map-deployment-limits-to-catalog.js +16 -24
- package/catalog/map-deployment-limits-to-input.js +81 -9
- package/catalog/map-deployment-to-catalog-item.js +34 -34
- package/catalog/map-entity-details-to-catalog.js +237 -192
- package/catalog/map-skill-to-catalog-item.js +61 -54
- package/catalog/publish.js +4 -4
- package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.js +122 -101
- package/catalog/useCatalogItemDetails.js +9 -8
- package/catalog/usePublishFolders/usePublishFolders.js +1 -1
- package/catalog.d.ts +171 -34
- package/catalog.js +23 -23
- package/conversation/conversation-transfer/export-conversation.js +24 -16
- package/conversation/conversation-transfer/import-conversation.js +80 -31
- package/conversation/create-chat-stream-api.js +89 -49
- package/conversation/get-model-id-from-conversation-id.js +15 -9
- package/conversation/message-utils.js +44 -2
- package/conversation/stage.js +6 -2
- package/conversation/useActiveConversationSync/useActiveConversationSync.js +7 -8
- package/conversation/useConversationExport/useConversationExport.js +9 -9
- package/conversation/useConversationHandlers/message-utils.js +8 -5
- package/conversation/useConversationHandlers/useConversationHandlers.js +181 -167
- package/conversation/useConversationImport/useConversationImport.js +123 -121
- package/conversation/useConversationPanelItems/useConversationPanelItems.js +49 -31
- package/conversation/useConversationStream/frame-scheduler.js +39 -0
- package/conversation/useConversationStream/generation-resume.js +122 -64
- package/conversation/useConversationStream/useConversationStream.js +298 -118
- package/conversation/useMessageSelectionReply/useMessageSelectionReply.js +189 -0
- package/conversation-sources/useConversationSources/useConversationSources.js +31 -24
- package/conversation-sources.d.ts +1 -1
- package/conversation-transfer.d.ts +2 -1
- package/conversation.d.ts +218 -22
- package/conversation.js +32 -31
- package/file-manager-canvas.d.ts +27 -7
- package/file-manager.d.ts +87 -32
- package/file-manager.js +25 -24
- package/files/attachment-canvas.js +67 -44
- package/files/dial-file-manager-copy-move.util.js +9 -8
- package/files/dial-file-manager-mapping.util.js +2 -1
- package/files/dial-file-manager-path.util.js +24 -2
- package/files/dial-file-manager.model.js +23 -19
- package/files/dial-file-manager.types.js +3 -3
- package/files/file-manager-variant.js +1 -1
- package/files/resolve-dial-file-api-path.js +11 -12
- package/files/useDialFileListing/useDialFileListing.js +140 -127
- package/files/useDialFileManager/useDialFileManager.js +139 -135
- package/files/useDialFileManagerSections/useDialFileManagerSections.js +155 -0
- package/files/useDialFileManagerTabConfig/useDialFileManagerTabConfig.js +20 -15
- package/files/useDialFileMutations/useDialFileMutations.js +65 -60
- package/files/useDialFileUploadBatch/useDialFileUploadBatch.js +117 -110
- package/files/useFileAttachmentPicker/useFileAttachmentPicker.js +28 -23
- package/index.d.ts +643 -128
- package/index.js +136 -134
- package/mcp-apps/useMcpAppTools/useMcpAppTools.js +1 -1
- package/oauth/authorize-url.js +3 -3
- package/oauth/toolset-id.js +5 -3
- package/oauth/useToolsetLogin/useToolsetLogin.js +8 -8
- package/oauth.d.ts +34 -2
- package/oauth.js +9 -9
- package/package.json +19 -23
- package/scheduled-task/scheduled-task-description.js +43 -39
- package/scheduled-task/scheduled-task-trigger.js +74 -71
- package/scheduled-task/use-scheduled-task-runs.js +162 -50
- package/scheduled-task/use-scheduled-tasks.js +52 -48
- package/scheduled-tasks.d.ts +27 -6
- package/scheduled-tasks.js +2 -2
- package/shared/application-schema.js +5 -2
- package/shared/cron-day-of-month.js +13 -0
- package/skill/skill-archive.js +19 -0
- package/skill/skill-types.js +8 -7
- package/skill/skill.js +52 -29
- package/skill/useSkillArchiveImport/useSkillArchiveImport.js +38 -34
- package/skill/useSkillEditorLoad.js +65 -59
- package/skill/useSkillEditorSubmit.js +105 -93
- package/skill/useSkillFileActions.js +70 -58
- package/skill-editor.d.ts +62 -13
- package/skill-editor.js +9 -9
- package/usage/map-user-usage-to-model-limits.js +137 -95
- package/usage.d.ts +8 -3
- package/usePageFileDrag/usePageFileDrag.js +3 -3
- package/utils.d.ts +26 -6
- package/utils.js +10 -10
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { formatDateYM as e } from "../conversation-transfer/date.js";
|
|
2
2
|
import { ConversationTransferWarningCode as t } from "../conversation-transfer/types.js";
|
|
3
|
-
import { UnsupportedImportFormatError as n,
|
|
4
|
-
import { createUploadPathAllocator as
|
|
5
|
-
import { runWithConcurrency as
|
|
6
|
-
import { ConversationTransferKind as
|
|
7
|
-
import { useConversationTransferQueue as
|
|
8
|
-
import { parseDialArchive as
|
|
9
|
-
import { ConversationTransferErrorCode as
|
|
10
|
-
import { useCallback as
|
|
3
|
+
import { UnsupportedImportFormatError as n, dropForeignAttachmentRefs as r, getFolderBreadcrumb as i, parseImportEnvelope as a, planAttachmentUploads as o, rebaseConversationId as s, rewriteAttachmentUrls as c } from "../conversation-transfer/import-conversation.js";
|
|
4
|
+
import { createUploadPathAllocator as l } from "../conversation-transfer/build-upload-path.js";
|
|
5
|
+
import { runWithConcurrency as u } from "../conversation-transfer/async.js";
|
|
6
|
+
import { ConversationTransferKind as d, ConversationTransferPhase as f, buildTransferProgress as p } from "../conversation-transfer/progress.js";
|
|
7
|
+
import { useConversationTransferQueue as m } from "../conversation-transfer/queue.js";
|
|
8
|
+
import { parseDialArchive as h } from "../conversation-transfer/zip-import.js";
|
|
9
|
+
import { ConversationTransferErrorCode as g, ConversationTransferSubjectKind as _, ConversationTransferUnitKind as v, generateUUID as y } from "@epam/ai-dial-chat-shared";
|
|
10
|
+
import { useCallback as b } from "react";
|
|
11
11
|
//#region src/conversation/useConversationImport/useConversationImport.ts
|
|
12
|
-
var
|
|
12
|
+
var x = 5, S = 5, C = (e) => /\.(dial|zip)$/i.test(e.name), w = (e) => new Promise((t, n) => {
|
|
13
13
|
let r = new FileReader();
|
|
14
14
|
r.onload = () => t(r.result), r.onerror = () => n(r.error), r.readAsText(e);
|
|
15
|
-
}),
|
|
16
|
-
if (
|
|
17
|
-
let { envelope: t, attachments: n } = await
|
|
15
|
+
}), T = async (e) => {
|
|
16
|
+
if (C(e)) {
|
|
17
|
+
let { envelope: t, attachments: n } = await h(e);
|
|
18
18
|
return {
|
|
19
19
|
history: t.history,
|
|
20
20
|
attachments: n,
|
|
@@ -22,15 +22,15 @@ var b = 5, x = 5, S = (e) => /\.(dial|zip)$/i.test(e.name), C = (e) => new Promi
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
return {
|
|
25
|
-
history:
|
|
25
|
+
history: a(await w(e)).history,
|
|
26
26
|
attachments: /* @__PURE__ */ new Map(),
|
|
27
27
|
isArchive: !1
|
|
28
28
|
};
|
|
29
|
-
},
|
|
30
|
-
let { plan:
|
|
29
|
+
}, E = async (e, t, n, r, i, a, s, c) => {
|
|
30
|
+
let { plan: l, skippedNames: d } = o(e, t, r), f = !1, p = await u(l, x, async (e) => {
|
|
31
31
|
if (c.aborted || f) return;
|
|
32
32
|
let t = e.allocated;
|
|
33
|
-
for (let
|
|
33
|
+
for (let o = 0; o <= S; o += 1) try {
|
|
34
34
|
let r = new File([new Uint8Array(e.bytes)], t.fileName), a = await i.uploadFile({
|
|
35
35
|
bucket: n,
|
|
36
36
|
path: t.path,
|
|
@@ -45,11 +45,11 @@ var b = 5, x = 5, S = (e) => /\.(dial|zip)$/i.test(e.name), C = (e) => new Promi
|
|
|
45
45
|
};
|
|
46
46
|
} catch (n) {
|
|
47
47
|
if (c.aborted) return;
|
|
48
|
-
if (
|
|
48
|
+
if (a(n)) {
|
|
49
49
|
f = !0;
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
|
-
if (!(typeof n == "object" && n && "response" in n && n.response?.status === 409) ||
|
|
52
|
+
if (!(typeof n == "object" && n && "response" in n && n.response?.status === 409) || o === S) return s(), {
|
|
53
53
|
kind: "skipped",
|
|
54
54
|
name: e.originalFileName
|
|
55
55
|
};
|
|
@@ -69,171 +69,173 @@ var b = 5, x = 5, S = (e) => /\.(dial|zip)$/i.test(e.name), C = (e) => new Promi
|
|
|
69
69
|
skippedNames: c.aborted || f ? [] : h,
|
|
70
70
|
isUnauthorized: !c.aborted && f
|
|
71
71
|
};
|
|
72
|
-
},
|
|
73
|
-
let
|
|
74
|
-
if (!
|
|
75
|
-
|
|
72
|
+
}, D = ({ conversationsApi: a, filesApi: o, bucket: u, onImported: h, classifyTransferError: x = () => ({}), resolveErrorTraceId: S = async () => void 0, onSuccess: C, onWarning: w, onError: D }) => {
|
|
73
|
+
let O = m(), k = b(async (n, i, m) => {
|
|
74
|
+
if (!u) {
|
|
75
|
+
D?.({
|
|
76
76
|
jobId: n,
|
|
77
|
-
code:
|
|
78
|
-
}),
|
|
77
|
+
code: g.MissingBucket
|
|
78
|
+
}), O.failJob(n, g.MissingBucket);
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
kind:
|
|
84
|
-
phase:
|
|
85
|
-
completed:
|
|
86
|
-
total:
|
|
81
|
+
let _ = d.Import, y = i.attachments.size, b = 0, T = () => {
|
|
82
|
+
b += 1, O.setJobProgress(n, p({
|
|
83
|
+
kind: _,
|
|
84
|
+
phase: f.Transfer,
|
|
85
|
+
completed: b,
|
|
86
|
+
total: y
|
|
87
87
|
}, {
|
|
88
|
-
completed: Math.min(
|
|
89
|
-
total:
|
|
90
|
-
kind:
|
|
88
|
+
completed: Math.min(b, y),
|
|
89
|
+
total: y,
|
|
90
|
+
kind: v.Attachment
|
|
91
91
|
}));
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
kind:
|
|
95
|
-
phase:
|
|
92
|
+
}, k = (e) => {
|
|
93
|
+
O.setJobProgress(n, p({
|
|
94
|
+
kind: _,
|
|
95
|
+
phase: f.Finalize,
|
|
96
96
|
completed: e,
|
|
97
|
-
total:
|
|
97
|
+
total: i.history.length
|
|
98
98
|
}, {
|
|
99
99
|
completed: e,
|
|
100
|
-
total:
|
|
101
|
-
kind:
|
|
100
|
+
total: i.history.length,
|
|
101
|
+
kind: v.Conversation
|
|
102
102
|
}));
|
|
103
|
-
},
|
|
104
|
-
if (
|
|
105
|
-
let t = `uploads/${e(
|
|
103
|
+
}, A = [], j = [], M = /* @__PURE__ */ new Set(), N = !1, P, F = /* @__PURE__ */ new Date(), I = (e) => !!x(e).isUnauthorized, L;
|
|
104
|
+
if (i.isArchive) {
|
|
105
|
+
let t = `uploads/${e(F)}`, r = [];
|
|
106
106
|
try {
|
|
107
|
-
r = (await
|
|
108
|
-
bucket:
|
|
107
|
+
r = (await o.listFiles({
|
|
108
|
+
bucket: u,
|
|
109
109
|
path: t
|
|
110
|
-
}, { signal:
|
|
110
|
+
}, { signal: m })).items.map((e) => e.name);
|
|
111
111
|
} catch (e) {
|
|
112
|
-
if (
|
|
113
|
-
if (
|
|
114
|
-
|
|
112
|
+
if (m.aborted) return;
|
|
113
|
+
if (I(e)) {
|
|
114
|
+
D?.({
|
|
115
115
|
jobId: n,
|
|
116
|
-
code:
|
|
117
|
-
}),
|
|
116
|
+
code: g.Unauthorized
|
|
117
|
+
}), O.failJob(n, g.Unauthorized);
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
120
|
console.error("Failed to list the upload folder for attachment name disambiguation", e);
|
|
121
121
|
}
|
|
122
|
-
|
|
123
|
-
date:
|
|
122
|
+
L = l({
|
|
123
|
+
date: F,
|
|
124
124
|
existingNames: r
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
|
-
|
|
128
|
-
kind:
|
|
129
|
-
phase:
|
|
130
|
-
})),
|
|
131
|
-
kind:
|
|
132
|
-
phase:
|
|
127
|
+
O.setJobProgress(n, p({
|
|
128
|
+
kind: _,
|
|
129
|
+
phase: f.Prepare
|
|
130
|
+
})), y === 0 && O.setJobProgress(n, p({
|
|
131
|
+
kind: _,
|
|
132
|
+
phase: f.Transfer
|
|
133
133
|
}));
|
|
134
|
-
for (let e of
|
|
135
|
-
if (
|
|
136
|
-
if (
|
|
134
|
+
for (let e of i.history) {
|
|
135
|
+
if (m.aborted) return;
|
|
136
|
+
if (N) break;
|
|
137
137
|
try {
|
|
138
138
|
let t = /* @__PURE__ */ new Map();
|
|
139
|
-
if (
|
|
140
|
-
let n = await
|
|
141
|
-
if (
|
|
139
|
+
if (i.isArchive && L) {
|
|
140
|
+
let n = await E(e, i.attachments, u, L, o, I, T, m);
|
|
141
|
+
if (m.aborted) return;
|
|
142
142
|
if (n.isUnauthorized) {
|
|
143
|
-
|
|
143
|
+
N = !0;
|
|
144
144
|
break;
|
|
145
145
|
}
|
|
146
|
-
for (let e of n.skippedNames)
|
|
146
|
+
for (let e of n.skippedNames) M.add(e);
|
|
147
147
|
t = n.targetMap;
|
|
148
148
|
}
|
|
149
|
-
let { conversation: n,
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
let { conversation: n, droppedNames: l } = r(c(e, t), u);
|
|
150
|
+
for (let e of l) M.add(e);
|
|
151
|
+
let { conversation: d, subPath: f } = s(n, u);
|
|
152
|
+
if (await a.saveConversation({
|
|
153
|
+
path: f,
|
|
152
154
|
saveConversationBodyDto: { conversation: {
|
|
153
|
-
...
|
|
155
|
+
...d,
|
|
154
156
|
llmNamingDone: !0
|
|
155
157
|
} }
|
|
156
|
-
}, { signal:
|
|
157
|
-
|
|
158
|
+
}, { signal: m }), m.aborted) return;
|
|
159
|
+
A.push(d.name);
|
|
158
160
|
} catch (t) {
|
|
159
|
-
if (
|
|
160
|
-
if (
|
|
161
|
-
|
|
161
|
+
if (m.aborted) return;
|
|
162
|
+
if (I(t)) {
|
|
163
|
+
N = !0;
|
|
162
164
|
break;
|
|
163
165
|
}
|
|
164
|
-
|
|
166
|
+
j.push(e.name), P === void 0 && (P = await S(t)), console.error("Failed to import a conversation", t);
|
|
165
167
|
}
|
|
166
|
-
|
|
168
|
+
k(A.length + j.length);
|
|
167
169
|
}
|
|
168
|
-
if (!
|
|
169
|
-
if (
|
|
170
|
-
|
|
170
|
+
if (!m.aborted) {
|
|
171
|
+
if (N) {
|
|
172
|
+
D?.({
|
|
171
173
|
jobId: n,
|
|
172
|
-
code:
|
|
173
|
-
}),
|
|
174
|
+
code: g.Unauthorized
|
|
175
|
+
}), O.failJob(n, g.Unauthorized);
|
|
174
176
|
return;
|
|
175
177
|
}
|
|
176
|
-
if (
|
|
178
|
+
if (A.length > 0) {
|
|
177
179
|
try {
|
|
178
|
-
await
|
|
180
|
+
await h?.();
|
|
179
181
|
} catch {}
|
|
180
|
-
|
|
182
|
+
C?.({
|
|
181
183
|
jobId: n,
|
|
182
|
-
titles:
|
|
184
|
+
titles: A
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
|
-
|
|
187
|
+
j.length > 0 && D?.({
|
|
186
188
|
jobId: n,
|
|
187
|
-
code:
|
|
188
|
-
titles:
|
|
189
|
-
traceId:
|
|
190
|
-
}),
|
|
189
|
+
code: g.Unknown,
|
|
190
|
+
titles: j,
|
|
191
|
+
traceId: P
|
|
192
|
+
}), M.size > 0 && w?.({
|
|
191
193
|
jobId: n,
|
|
192
194
|
code: t.AttachmentSkipped,
|
|
193
|
-
names: [...
|
|
194
|
-
}),
|
|
195
|
+
names: [...M]
|
|
196
|
+
}), j.length > 0 ? O.failJob(n, g.Unknown) : M.size > 0 ? O.warnJob(n, t.AttachmentSkipped, [...M]) : O.succeedJob(n);
|
|
195
197
|
}
|
|
196
198
|
}, [
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
i,
|
|
199
|
+
u,
|
|
200
|
+
x,
|
|
200
201
|
a,
|
|
201
|
-
|
|
202
|
-
m,
|
|
203
|
-
S,
|
|
204
|
-
C,
|
|
202
|
+
o,
|
|
205
203
|
D,
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
h,
|
|
205
|
+
C,
|
|
206
|
+
w,
|
|
207
|
+
O,
|
|
208
|
+
S
|
|
209
|
+
]), A = b(async (e) => {
|
|
208
210
|
let t;
|
|
209
211
|
try {
|
|
210
|
-
t = await
|
|
212
|
+
t = await T(e);
|
|
211
213
|
} catch (e) {
|
|
212
|
-
|
|
213
|
-
jobId:
|
|
214
|
-
code:
|
|
214
|
+
D?.({
|
|
215
|
+
jobId: y(),
|
|
216
|
+
code: g.UnsupportedFormat
|
|
215
217
|
}), e instanceof n || console.error("Failed to parse import file", e);
|
|
216
218
|
return;
|
|
217
219
|
}
|
|
218
|
-
let
|
|
219
|
-
kind:
|
|
220
|
+
let r = t.history.length > 1, a = t.history[0], o = r ? { kind: _.All } : {
|
|
221
|
+
kind: _.Single,
|
|
220
222
|
title: a?.name ?? e.name,
|
|
221
|
-
sourceBreadcrumb: a ?
|
|
222
|
-
}, s =
|
|
223
|
-
return
|
|
223
|
+
sourceBreadcrumb: a ? i(a) : void 0
|
|
224
|
+
}, s = O.addJob(o, e.name);
|
|
225
|
+
return O.startJob(s, (e) => k(s, t, e));
|
|
224
226
|
}, [
|
|
225
|
-
E,
|
|
226
227
|
D,
|
|
227
|
-
O
|
|
228
|
+
O,
|
|
229
|
+
k
|
|
228
230
|
]);
|
|
229
231
|
return {
|
|
230
|
-
jobs:
|
|
231
|
-
importConversations:
|
|
232
|
-
cancelJob:
|
|
233
|
-
dismissJob:
|
|
234
|
-
retryJob:
|
|
235
|
-
dismissAll:
|
|
232
|
+
jobs: O.jobs,
|
|
233
|
+
importConversations: A,
|
|
234
|
+
cancelJob: O.cancelJob,
|
|
235
|
+
dismissJob: O.dismissJob,
|
|
236
|
+
retryJob: O.retryJob,
|
|
237
|
+
dismissAll: O.dismissAll
|
|
236
238
|
};
|
|
237
239
|
};
|
|
238
240
|
//#endregion
|
|
239
|
-
export {
|
|
241
|
+
export { D as useConversationImport };
|
|
@@ -1,35 +1,53 @@
|
|
|
1
1
|
import { safeDecodeURIComponent as e } from "../../shared/string-utils.js";
|
|
2
|
-
import {
|
|
3
|
-
import { getModelIdFromConversationId as n } from "../get-model-id-from-conversation-id.js";
|
|
2
|
+
import { getModelIdCandidatesFromConversationId as t, getModelIdFromConversationId as n } from "../get-model-id-from-conversation-id.js";
|
|
4
3
|
import { FilterTab as r } from "@epam/ai-dial-chat-shared";
|
|
5
|
-
import {
|
|
4
|
+
import { useEffect as i, useMemo as a, useRef as o } from "react";
|
|
6
5
|
//#region src/conversation/useConversationPanelItems/useConversationPanelItems.ts
|
|
7
|
-
var
|
|
8
|
-
let
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
6
|
+
var s = (e) => e.sharedWithMe ? r.Shared : e.publishedWithMe ? r.Organization : r.MyChats, c = (e) => {
|
|
7
|
+
let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
|
|
8
|
+
for (let r of e) t.has(r.id) || t.set(r.id, r), r.reference && !n.has(r.reference) && n.set(r.reference, r);
|
|
9
|
+
return (e) => t.get(e) ?? n.get(e);
|
|
10
|
+
}, l = ({ items: r, deployments: l, isDeploymentsLoading: u, toPanelConversationId: d, resolveIconUrl: f, resolveIconTooltip: p, resolveHref: m, resolveTaskPresentation: h }) => {
|
|
11
|
+
let g = a(() => c(l), [l]), _ = a(() => (r) => {
|
|
12
|
+
let i = d(r.id), a = n(r.id), o = t(r.id).map(g).find(Boolean), c = a ? e(a.split("/").pop() ?? a) : "", l = h?.(r);
|
|
13
|
+
return {
|
|
14
|
+
id: i,
|
|
15
|
+
title: r.title,
|
|
16
|
+
isPinned: r.isPinned ?? !1,
|
|
17
|
+
iconUrl: f(o),
|
|
18
|
+
iconTooltip: p(o, c),
|
|
19
|
+
isIconLoading: u,
|
|
20
|
+
source: s(r),
|
|
21
|
+
href: m(i),
|
|
22
|
+
...l == null ? {} : {
|
|
23
|
+
leadingIcon: l.leadingIcon,
|
|
24
|
+
isUnread: l.isUnread
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}, [
|
|
28
|
+
g,
|
|
29
|
+
u,
|
|
30
|
+
d,
|
|
31
|
+
f,
|
|
32
|
+
p,
|
|
33
|
+
m,
|
|
34
|
+
h
|
|
35
|
+
]), v = o(null), y = a(() => {
|
|
36
|
+
let e = v.current, t = e?.mapItem === _ ? e.byDto : void 0, n = /* @__PURE__ */ new Map();
|
|
37
|
+
return {
|
|
38
|
+
mapped: r.map((e) => {
|
|
39
|
+
let r = t?.get(e) ?? _(e);
|
|
40
|
+
return n.set(e, r), r;
|
|
41
|
+
}),
|
|
42
|
+
cache: {
|
|
43
|
+
mapItem: _,
|
|
44
|
+
byDto: n
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}, [r, _]);
|
|
48
|
+
return i(() => {
|
|
49
|
+
v.current = y.cache;
|
|
50
|
+
}, [y]), y.mapped;
|
|
51
|
+
};
|
|
34
52
|
//#endregion
|
|
35
|
-
export {
|
|
53
|
+
export { s as getConversationSource, l as useConversationPanelItems };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/conversation/useConversationStream/frame-scheduler.ts
|
|
2
|
+
var e = 16, t = (t) => {
|
|
3
|
+
if (typeof requestAnimationFrame == "function") {
|
|
4
|
+
let e = requestAnimationFrame(t);
|
|
5
|
+
return () => cancelAnimationFrame(e);
|
|
6
|
+
}
|
|
7
|
+
let n = setTimeout(t, e);
|
|
8
|
+
return () => clearTimeout(n);
|
|
9
|
+
}, n = () => {
|
|
10
|
+
let e = /* @__PURE__ */ new Map(), n = (t) => {
|
|
11
|
+
let n = e.get(t);
|
|
12
|
+
n && (e.delete(t), n.task());
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
schedule: (r, i) => {
|
|
16
|
+
let a = e.get(r);
|
|
17
|
+
if (a) {
|
|
18
|
+
a.task = i;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
let o = {
|
|
22
|
+
task: i,
|
|
23
|
+
cancelFrame: () => void 0
|
|
24
|
+
};
|
|
25
|
+
e.set(r, o), o.cancelFrame = t(() => n(r));
|
|
26
|
+
},
|
|
27
|
+
flush: (t) => {
|
|
28
|
+
e.get(t)?.cancelFrame(), n(t);
|
|
29
|
+
},
|
|
30
|
+
cancel: (t) => {
|
|
31
|
+
e.get(t)?.cancelFrame(), e.delete(t);
|
|
32
|
+
},
|
|
33
|
+
cancelAll: () => {
|
|
34
|
+
e.forEach((e) => e.cancelFrame()), e.clear();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { n as createFrameScheduler };
|