@acorex/components 20.8.33 → 20.9.1
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/badge/index.d.ts +2 -4
- package/{conversation2 → conversation}/README.md +23 -23
- package/{conversation2 → conversation}/index.d.ts +1848 -1469
- package/fesm2022/acorex-components-badge.mjs +17 -12
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs +223 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs.map +1 -0
- package/fesm2022/{acorex-components-conversation2.mjs → acorex-components-conversation.mjs} +20329 -20223
- package/fesm2022/acorex-components-conversation.mjs.map +1 -0
- package/fesm2022/acorex-components-file-viewer.mjs +736 -0
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -0
- package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/file-viewer/index.d.ts +178 -0
- package/package.json +30 -25
- package/scheduler-picker/index.d.ts +2 -0
- package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-emoji-categories-C7Gm95V0.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { resolveComposerMaxFiles, notifyPickerValidationErrors } from './acorex-components-conversation.mjs';
|
|
2
|
+
|
|
3
|
+
async function openComposerPickerPopup(popupService, composerService, registry, action, conversation, files, config) {
|
|
4
|
+
const component = action.component ?? (action.componentLoader ? await action.componentLoader() : undefined);
|
|
5
|
+
if (!component || files.length === 0) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
await popupService.open(component, {
|
|
9
|
+
title: registry.getActionLabel(action),
|
|
10
|
+
size: 'md',
|
|
11
|
+
closeButton: true,
|
|
12
|
+
header: false,
|
|
13
|
+
panelClass: ['ax-conversation-composer-picker-popup'],
|
|
14
|
+
inputs: {
|
|
15
|
+
conversation,
|
|
16
|
+
maxFiles: resolveComposerMaxFiles(action, config),
|
|
17
|
+
initialFiles: files,
|
|
18
|
+
service: composerService,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Catalogs registered on picker actions (conversation-image, conversation-file, …). */
|
|
24
|
+
function pickerCatalogNames(registry) {
|
|
25
|
+
const names = new Set();
|
|
26
|
+
for (const action of registry.actions()) {
|
|
27
|
+
if ((action.component || action.componentLoader) && action.fileType) {
|
|
28
|
+
names.add(action.fileType);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return [...names];
|
|
32
|
+
}
|
|
33
|
+
/** Files that are not accepted by any registered picker catalog. */
|
|
34
|
+
async function collectUnsupportedInboundFiles(deps, files, catalogs) {
|
|
35
|
+
const unsupported = [];
|
|
36
|
+
for (const file of files) {
|
|
37
|
+
let acceptedByAny = false;
|
|
38
|
+
let lastErrors = [];
|
|
39
|
+
for (const catalog of catalogs) {
|
|
40
|
+
const errors = await deps.fileService.validate(file, catalog);
|
|
41
|
+
if (errors.length === 0) {
|
|
42
|
+
acceptedByAny = true;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
lastErrors = errors;
|
|
46
|
+
}
|
|
47
|
+
if (!acceptedByAny) {
|
|
48
|
+
unsupported.push({ file, errors: lastErrors });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return unsupported;
|
|
52
|
+
}
|
|
53
|
+
async function analyzeInboundFiles(deps, files) {
|
|
54
|
+
if (!files.length) {
|
|
55
|
+
return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles: [] };
|
|
56
|
+
}
|
|
57
|
+
const catalogs = pickerCatalogNames(deps.composerActionRegistry);
|
|
58
|
+
const unsupportedFiles = await collectUnsupportedInboundFiles(deps, files, catalogs);
|
|
59
|
+
const unsupportedSet = new Set(unsupportedFiles.map((entry) => entry.file));
|
|
60
|
+
const supportedFiles = files.filter((file) => !unsupportedSet.has(file));
|
|
61
|
+
if (supportedFiles.length === 0) {
|
|
62
|
+
return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles };
|
|
63
|
+
}
|
|
64
|
+
const context = deps.composerService.actionContext();
|
|
65
|
+
const matchingCatalogs = [];
|
|
66
|
+
for (const catalog of catalogs) {
|
|
67
|
+
const { rejected } = await deps.fileService.validateMany(supportedFiles, catalog);
|
|
68
|
+
if (rejected.length === 0) {
|
|
69
|
+
matchingCatalogs.push(catalog);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const seen = new Set();
|
|
73
|
+
const actions = [];
|
|
74
|
+
for (const catalog of matchingCatalogs) {
|
|
75
|
+
for (const action of deps.composerActionRegistry.findPickerActionsForFileType(catalog, context)) {
|
|
76
|
+
if (!seen.has(action.id)) {
|
|
77
|
+
seen.add(action.id);
|
|
78
|
+
actions.push(action);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
matchingCatalogs,
|
|
84
|
+
actions: actions.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)),
|
|
85
|
+
supportedFiles,
|
|
86
|
+
unsupportedFiles,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function notifyInboundFilesValidationFailures(deps, analysis) {
|
|
90
|
+
if (analysis.supportedFiles.length === 0) {
|
|
91
|
+
if (analysis.unsupportedFiles.length === 0) {
|
|
92
|
+
deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));
|
|
93
|
+
}
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (analysis.actions.length === 0) {
|
|
97
|
+
const key = analysis.matchingCatalogs.length === 0
|
|
98
|
+
? '@acorex:chat.errors.inbound-files-none-supported'
|
|
99
|
+
: '@acorex:chat.errors.inbound-files-no-send-option';
|
|
100
|
+
deps.toast.warning(deps.translation.translateSync(key));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* File catalogs that accept every supported file in the batch, then matching visible picker actions.
|
|
105
|
+
*/
|
|
106
|
+
async function resolvePickerActionsForAllFiles(deps, files) {
|
|
107
|
+
const analysis = await analyzeInboundFiles(deps, files);
|
|
108
|
+
return analysis.actions;
|
|
109
|
+
}
|
|
110
|
+
async function promptComposerActionChoice(deps, actions, fileCount) {
|
|
111
|
+
const { AXConversationComposerActionChoiceDialogComponent } = await import('./acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs');
|
|
112
|
+
const result = await deps.popupService.open(AXConversationComposerActionChoiceDialogComponent, {
|
|
113
|
+
title: deps.translation.translateSync('@acorex:chat.dialog.choose-send-option.title'),
|
|
114
|
+
size: 'sm',
|
|
115
|
+
closeButton: true,
|
|
116
|
+
header: true,
|
|
117
|
+
inputs: {
|
|
118
|
+
actions,
|
|
119
|
+
fileCount,
|
|
120
|
+
composerActionRegistry: deps.composerActionRegistry,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
const action = result?.data;
|
|
124
|
+
if (!action?.component && !action?.componentLoader) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return action;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Match dropped/pasted files to composer picker action(s) and open the popup.
|
|
131
|
+
* Unsupported files are skipped after a warning toast; supported files continue.
|
|
132
|
+
* @returns true when a picker popup was opened
|
|
133
|
+
*/
|
|
134
|
+
async function openComposerPickerForFiles(deps, files) {
|
|
135
|
+
if (!files.length) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
const conversation = deps.conversation;
|
|
139
|
+
if (!conversation) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
const analysis = await analyzeInboundFiles(deps, files);
|
|
143
|
+
if (analysis.unsupportedFiles.length > 0) {
|
|
144
|
+
notifyPickerValidationErrors(deps.toast, deps.translation, analysis.unsupportedFiles);
|
|
145
|
+
}
|
|
146
|
+
if (!analysis.supportedFiles.length || !analysis.actions.length) {
|
|
147
|
+
notifyInboundFilesValidationFailures(deps, analysis);
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
let action = analysis.actions[0];
|
|
151
|
+
if (analysis.actions.length > 1) {
|
|
152
|
+
const chosen = await promptComposerActionChoice(deps, analysis.actions, analysis.supportedFiles.length);
|
|
153
|
+
if (!chosen) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
action = chosen;
|
|
157
|
+
}
|
|
158
|
+
const catalog = action.fileType;
|
|
159
|
+
if (!catalog) {
|
|
160
|
+
deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
const { accepted, rejected } = await deps.fileService.validateMany(analysis.supportedFiles, catalog);
|
|
164
|
+
if (rejected.length > 0) {
|
|
165
|
+
notifyPickerValidationErrors(deps.toast, deps.translation, rejected);
|
|
166
|
+
}
|
|
167
|
+
if (accepted.length === 0) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
await openComposerPickerPopup(deps.popupService, deps.composerService, deps.composerActionRegistry, action, conversation, accepted, deps.config);
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
/** Extract OS-copied files from a paste event (e.g. Ctrl+V after copying a file in Explorer). */
|
|
174
|
+
function filesFromClipboardEvent(event) {
|
|
175
|
+
const items = event.clipboardData?.items;
|
|
176
|
+
if (!items?.length) {
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
const files = [];
|
|
180
|
+
for (let i = 0; i < items.length; i++) {
|
|
181
|
+
const item = items[i];
|
|
182
|
+
if (item.kind === 'file') {
|
|
183
|
+
const file = item.getAsFile();
|
|
184
|
+
if (file) {
|
|
185
|
+
files.push(file);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return files;
|
|
190
|
+
}
|
|
191
|
+
/** Whether a paste event target lies in the chat panel (not sidebar). */
|
|
192
|
+
function isPasteTargetInChatPanel(host, target) {
|
|
193
|
+
if (!(target instanceof Node) || !host.contains(target)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
const excluded = host.querySelector('.conversation-sidebar-container, .sidebar-container');
|
|
197
|
+
if (excluded?.contains(target)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
const chatMain = host.querySelector('.conversation-main-container, .main-area, .conversation-view');
|
|
201
|
+
if (chatMain) {
|
|
202
|
+
return chatMain.contains(target);
|
|
203
|
+
}
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
/** Handle Ctrl+V / paste when the clipboard holds files copied from the OS. */
|
|
207
|
+
async function handleConversationFilePaste(event, host, deps) {
|
|
208
|
+
if (!isPasteTargetInChatPanel(host, event.target)) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const files = filesFromClipboardEvent(event);
|
|
212
|
+
if (!files.length) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const handled = await openComposerPickerForFiles(deps, files);
|
|
216
|
+
if (handled) {
|
|
217
|
+
event.preventDefault();
|
|
218
|
+
event.stopImmediatePropagation();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export { filesFromClipboardEvent, handleConversationFilePaste, isPasteTargetInChatPanel, openComposerPickerForFiles, resolvePickerActionsForAllFiles };
|
|
223
|
+
//# sourceMappingURL=acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs.map
|
package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs","sources":["../tmp-esm2022/conversation/lib/components/message-list/open-composer-picker-popup.js","../tmp-esm2022/conversation/lib/components/message-list/open-composer-picker-for-files.js"],"sourcesContent":["import { resolveComposerMaxFiles } from '../../plugins/composer/composer-upload.config';\nexport async function openComposerPickerPopup(popupService, composerService, registry, action, conversation, files, config) {\n const component = action.component ?? (action.componentLoader ? await action.componentLoader() : undefined);\n if (!component || files.length === 0) {\n return;\n }\n await popupService.open(component, {\n title: registry.getActionLabel(action),\n size: 'md',\n closeButton: true,\n header: false,\n panelClass: ['ax-conversation-composer-picker-popup'],\n inputs: {\n conversation,\n maxFiles: resolveComposerMaxFiles(action, config),\n initialFiles: files,\n service: composerService,\n },\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1jb21wb3Nlci1waWNrZXItcG9wdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvbWVzc2FnZS1saXN0L29wZW4tY29tcG9zZXItcGlja2VyLXBvcHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBR3hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLFlBQTRCLEVBQzVCLGVBQThDLEVBQzlDLFFBQThDLEVBQzlDLE1BQW9DLEVBQ3BDLFlBQTRCLEVBQzVCLEtBQWEsRUFDYixNQUFrRTtJQUVsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVHLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksRUFBRSxJQUFJO1FBQ1YsV0FBVyxFQUFFLElBQUk7UUFDakIsTUFBTSxFQUFFLEtBQUs7UUFDYixVQUFVLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztRQUNyRCxNQUFNLEVBQUU7WUFDTixZQUFZO1lBQ1osUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDakQsWUFBWSxFQUFFLEtBQUs7WUFDbkIsT0FBTyxFQUFFLGVBQWU7U0FDekI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9zZXIvY29tcG9zZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb24sIEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3JlZ2lzdHJpZXMvY29tcG9zZXItYWN0aW9uLnJlZ2lzdHJ5JztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbXBvc2VyTWF4RmlsZXMgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvbXBvc2VyL2NvbXBvc2VyLXVwbG9hZC5jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3Rva2Vucy9jb252ZXJzYXRpb24tY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQ29tcG9zZXJQaWNrZXJQb3B1cChcbiAgcG9wdXBTZXJ2aWNlOiBBWFBvcHVwU2VydmljZSxcbiAgY29tcG9zZXJTZXJ2aWNlOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyU2VydmljZSxcbiAgcmVnaXN0cnk6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSxcbiAgYWN0aW9uOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uLFxuICBjb252ZXJzYXRpb246IEFYQ29udmVyc2F0aW9uLFxuICBmaWxlczogRmlsZVtdLFxuICBjb25maWc6IFBpY2s8UmVxdWlyZWQ8QVhDb252ZXJzYXRpb25Db25maWc+LCAnbWF4RmlsZXNQZXJNZXNzYWdlJz4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29tcG9uZW50ID0gYWN0aW9uLmNvbXBvbmVudCA/PyAoYWN0aW9uLmNvbXBvbmVudExvYWRlciA/IGF3YWl0IGFjdGlvbi5jb21wb25lbnRMb2FkZXIoKSA6IHVuZGVmaW5lZCk7XG4gIGlmICghY29tcG9uZW50IHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHBvcHVwU2VydmljZS5vcGVuKGNvbXBvbmVudCwge1xuICAgIHRpdGxlOiByZWdpc3RyeS5nZXRBY3Rpb25MYWJlbChhY3Rpb24pLFxuICAgIHNpemU6ICdtZCcsXG4gICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgaGVhZGVyOiBmYWxzZSxcbiAgICBwYW5lbENsYXNzOiBbJ2F4LWNvbnZlcnNhdGlvbi1jb21wb3Nlci1waWNrZXItcG9wdXAnXSxcbiAgICBpbnB1dHM6IHtcbiAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgIG1heEZpbGVzOiByZXNvbHZlQ29tcG9zZXJNYXhGaWxlcyhhY3Rpb24sIGNvbmZpZyksXG4gICAgICBpbml0aWFsRmlsZXM6IGZpbGVzLFxuICAgICAgc2VydmljZTogY29tcG9zZXJTZXJ2aWNlLFxuICAgIH0sXG4gIH0pO1xufVxuIl19","import { notifyPickerValidationErrors } from '../../plugins/composer/components/shared/picker-upload';\nimport { openComposerPickerPopup } from './open-composer-picker-popup';\n/** Catalogs registered on picker actions (conversation-image, conversation-file, …). */\nfunction pickerCatalogNames(registry) {\n const names = new Set();\n for (const action of registry.actions()) {\n if ((action.component || action.componentLoader) && action.fileType) {\n names.add(action.fileType);\n }\n }\n return [...names];\n}\n/** Files that are not accepted by any registered picker catalog. */\nasync function collectUnsupportedInboundFiles(deps, files, catalogs) {\n const unsupported = [];\n for (const file of files) {\n let acceptedByAny = false;\n let lastErrors = [];\n for (const catalog of catalogs) {\n const errors = await deps.fileService.validate(file, catalog);\n if (errors.length === 0) {\n acceptedByAny = true;\n break;\n }\n lastErrors = errors;\n }\n if (!acceptedByAny) {\n unsupported.push({ file, errors: lastErrors });\n }\n }\n return unsupported;\n}\nasync function analyzeInboundFiles(deps, files) {\n if (!files.length) {\n return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles: [] };\n }\n const catalogs = pickerCatalogNames(deps.composerActionRegistry);\n const unsupportedFiles = await collectUnsupportedInboundFiles(deps, files, catalogs);\n const unsupportedSet = new Set(unsupportedFiles.map((entry) => entry.file));\n const supportedFiles = files.filter((file) => !unsupportedSet.has(file));\n if (supportedFiles.length === 0) {\n return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles };\n }\n const context = deps.composerService.actionContext();\n const matchingCatalogs = [];\n for (const catalog of catalogs) {\n const { rejected } = await deps.fileService.validateMany(supportedFiles, catalog);\n if (rejected.length === 0) {\n matchingCatalogs.push(catalog);\n }\n }\n const seen = new Set();\n const actions = [];\n for (const catalog of matchingCatalogs) {\n for (const action of deps.composerActionRegistry.findPickerActionsForFileType(catalog, context)) {\n if (!seen.has(action.id)) {\n seen.add(action.id);\n actions.push(action);\n }\n }\n }\n return {\n matchingCatalogs,\n actions: actions.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)),\n supportedFiles,\n unsupportedFiles,\n };\n}\nfunction notifyInboundFilesValidationFailures(deps, analysis) {\n if (analysis.supportedFiles.length === 0) {\n if (analysis.unsupportedFiles.length === 0) {\n deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));\n }\n return;\n }\n if (analysis.actions.length === 0) {\n const key = analysis.matchingCatalogs.length === 0\n ? '@acorex:chat.errors.inbound-files-none-supported'\n : '@acorex:chat.errors.inbound-files-no-send-option';\n deps.toast.warning(deps.translation.translateSync(key));\n }\n}\n/**\n * File catalogs that accept every supported file in the batch, then matching visible picker actions.\n */\nexport async function resolvePickerActionsForAllFiles(deps, files) {\n const analysis = await analyzeInboundFiles(deps, files);\n return analysis.actions;\n}\nasync function promptComposerActionChoice(deps, actions, fileCount) {\n const { AXConversationComposerActionChoiceDialogComponent } = await import('./composer-action-choice-dialog.component');\n const result = await deps.popupService.open(AXConversationComposerActionChoiceDialogComponent, {\n title: deps.translation.translateSync('@acorex:chat.dialog.choose-send-option.title'),\n size: 'sm',\n closeButton: true,\n header: true,\n inputs: {\n actions,\n fileCount,\n composerActionRegistry: deps.composerActionRegistry,\n },\n });\n const action = result?.data;\n if (!action?.component && !action?.componentLoader) {\n return undefined;\n }\n return action;\n}\n/**\n * Match dropped/pasted files to composer picker action(s) and open the popup.\n * Unsupported files are skipped after a warning toast; supported files continue.\n * @returns true when a picker popup was opened\n */\nexport async function openComposerPickerForFiles(deps, files) {\n if (!files.length) {\n return false;\n }\n const conversation = deps.conversation;\n if (!conversation) {\n return false;\n }\n const analysis = await analyzeInboundFiles(deps, files);\n if (analysis.unsupportedFiles.length > 0) {\n notifyPickerValidationErrors(deps.toast, deps.translation, analysis.unsupportedFiles);\n }\n if (!analysis.supportedFiles.length || !analysis.actions.length) {\n notifyInboundFilesValidationFailures(deps, analysis);\n return false;\n }\n let action = analysis.actions[0];\n if (analysis.actions.length > 1) {\n const chosen = await promptComposerActionChoice(deps, analysis.actions, analysis.supportedFiles.length);\n if (!chosen) {\n return false;\n }\n action = chosen;\n }\n const catalog = action.fileType;\n if (!catalog) {\n deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));\n return false;\n }\n const { accepted, rejected } = await deps.fileService.validateMany(analysis.supportedFiles, catalog);\n if (rejected.length > 0) {\n notifyPickerValidationErrors(deps.toast, deps.translation, rejected);\n }\n if (accepted.length === 0) {\n return false;\n }\n await openComposerPickerPopup(deps.popupService, deps.composerService, deps.composerActionRegistry, action, conversation, accepted, deps.config);\n return true;\n}\n/** Extract OS-copied files from a paste event (e.g. Ctrl+V after copying a file in Explorer). */\nexport function filesFromClipboardEvent(event) {\n const items = event.clipboardData?.items;\n if (!items?.length) {\n return [];\n }\n const files = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n return files;\n}\n/** Whether a paste event target lies in the chat panel (not sidebar). */\nexport function isPasteTargetInChatPanel(host, target) {\n if (!(target instanceof Node) || !host.contains(target)) {\n return false;\n }\n const excluded = host.querySelector('.conversation-sidebar-container, .sidebar-container');\n if (excluded?.contains(target)) {\n return false;\n }\n const chatMain = host.querySelector('.conversation-main-container, .main-area, .conversation-view');\n if (chatMain) {\n return chatMain.contains(target);\n }\n return true;\n}\n/** Handle Ctrl+V / paste when the clipboard holds files copied from the OS. */\nexport async function handleConversationFilePaste(event, host, deps) {\n if (!isPasteTargetInChatPanel(host, event.target)) {\n return;\n }\n const files = filesFromClipboardEvent(event);\n if (!files.length) {\n return;\n }\n const handled = await openComposerPickerForFiles(deps, files);\n if (handled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1jb21wb3Nlci1waWNrZXItZm9yLWZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL21lc3NhZ2UtbGlzdC9vcGVuLWNvbXBvc2VyLXBpY2tlci1mb3ItZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhdkUsd0ZBQXdGO0FBQ3hGLFNBQVMsa0JBQWtCLENBQUMsUUFBOEM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBU0Qsb0VBQW9FO0FBQ3BFLEtBQUssVUFBVSw4QkFBOEIsQ0FDM0MsSUFBa0csRUFDbEcsS0FBYSxFQUNiLFFBQWtCO0lBRWxCLE1BQU0sV0FBVyxHQUF1RCxFQUFFLENBQUM7SUFFM0UsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEs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OUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHR5cGUgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgdHlwZSB7IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9zZXIvY29tcG9zZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbiwgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vcmVnaXN0cmllcy9jb21wb3Nlci1hY3Rpb24ucmVnaXN0cnknO1xuaW1wb3J0IHsgbm90aWZ5UGlja2VyVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29tcG9zZXIvY29tcG9uZW50cy9zaGFyZWQvcGlja2VyLXVwbG9hZCc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdG9rZW5zL2NvbnZlcnNhdGlvbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IG9wZW5Db21wb3NlclBpY2tlclBvcHVwIH0gZnJvbSAnLi9vcGVuLWNvbXBvc2VyLXBpY2tlci1wb3B1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMge1xuICBmaWxlU2VydmljZTogQVhGaWxlU2VydmljZTtcbiAgY29tcG9zZXJTZXJ2aWNlOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyU2VydmljZTtcbiAgY29tcG9zZXJBY3Rpb25SZWdpc3RyeTogQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvblJlZ2lzdHJ5O1xuICBwb3B1cFNlcnZpY2U6IEFYUG9wdXBTZXJ2aWNlO1xuICB0b2FzdDogQVhUb2FzdFNlcnZpY2U7XG4gIHRyYW5zbGF0aW9uOiBBWFRyYW5zbGF0aW9uU2VydmljZTtcbiAgY29udmVyc2F0aW9uOiBBWENvbnZlcnNhdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbmZpZzogUGljazxSZXF1aXJlZDxBWENvbnZlcnNhdGlvbkNvbmZpZz4sICdtYXhGaWxlc1Blck1lc3NhZ2UnPjtcbn1cblxuLyoqIENhdGFsb2dzIHJlZ2lzdGVyZWQgb24gcGlja2VyIGFjdGlvbnMgKGNvbnZlcnNhdGlvbi1pbWFnZSwgY29udmVyc2F0aW9uLWZpbGUsIOKApikuICovXG5mdW5jdGlvbiBwaWNrZXJDYXRhbG9nTmFtZXMocmVnaXN0cnk6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBhY3Rpb24gb2YgcmVnaXN0cnkuYWN0aW9ucygpKSB7XG4gICAgaWYgKChhY3Rpb24uY29tcG9uZW50IHx8IGFjdGlvbi5jb21wb25lbnRMb2FkZXIpICYmIGFjdGlvbi5maWxlVHlwZSkge1xuICAgICAgbmFtZXMuYWRkKGFjdGlvbi5maWxlVHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ubmFtZXNdO1xufVxuXG5pbnRlcmZhY2UgQVhDb252ZXJzYXRpb25JbmJvdW5kRmlsZXNBbmFseXNpcyB7XG4gIG1hdGNoaW5nQ2F0YWxvZ3M6IHN0cmluZ1tdO1xuICBhY3Rpb25zOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uW107XG4gIHN1cHBvcnRlZEZpbGVzOiBGaWxlW107XG4gIHVuc3VwcG9ydGVkRmlsZXM6IHsgZmlsZTogRmlsZTsgZXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gfVtdO1xufVxuXG4vKiogRmlsZXMgdGhhdCBhcmUgbm90IGFjY2VwdGVkIGJ5IGFueSByZWdpc3RlcmVkIHBpY2tlciBjYXRhbG9nLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFVuc3VwcG9ydGVkSW5ib3VuZEZpbGVzKFxuICBkZXBzOiBQaWNrPEFYQ29udmVyc2F0aW9uT3BlbkNvbXBvc2VyUGlja2VyRm9yRmlsZXNEZXBzLCAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknPixcbiAgZmlsZXM6IEZpbGVbXSxcbiAgY2F0YWxvZ3M6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXT4ge1xuICBjb25zdCB1bnN1cHBvcnRlZDogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgYWNjZXB0ZWRCeUFueSA9IGZhbHNlO1xuICAgIGxldCBsYXN0RXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2F0YWxvZyBvZiBjYXRhbG9ncykge1xuICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgZGVwcy5maWxlU2VydmljZS52YWxpZGF0ZShmaWxlLCBjYXRhbG9nKTtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjY2VwdGVkQnlBbnkgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxhc3RFcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFhY2NlcHRlZEJ5QW55KSB7XG4gICAgICB1bnN1cHBvcnRlZC5wdXNoKHsgZmlsZSwgZXJyb3JzOiBsYXN0RXJyb3JzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYW5hbHl6ZUluYm91bmRGaWxlcyhcbiAgZGVwczogUGljazxcbiAgICBBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcyxcbiAgICAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyU2VydmljZScgfCAnY29tcG9zZXJBY3Rpb25SZWdpc3RyeSdcbiAgPixcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8QVhDb252ZXJzYXRpb25JbmJvdW5kRmlsZXNBbmFseXNpcz4ge1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiB7IG1hdGNoaW5nQ2F0YWxvZ3M6IFtdLCBhY3Rpb25zOiBbXSwgc3VwcG9ydGVkRmlsZXM6IFtdLCB1bnN1cHBvcnRlZEZpbGVzOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgY2F0YWxvZ3MgPSBwaWNrZXJDYXRhbG9nTmFtZXMoZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5KTtcbiAgY29uc3QgdW5zdXBwb3J0ZWRGaWxlcyA9IGF3YWl0IGNvbGxlY3RVbnN1cHBvcnRlZEluYm91bmRGaWxlcyhkZXBzLCBmaWxlcywgY2F0YWxvZ3MpO1xuICBjb25zdCB1bnN1cHBvcnRlZFNldCA9IG5ldyBTZXQodW5zdXBwb3J0ZWRGaWxlcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5maWxlKSk7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVzID0gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiAhdW5zdXBwb3J0ZWRTZXQuaGFzKGZpbGUpKTtcblxuICBpZiAoc3VwcG9ydGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgbWF0Y2hpbmdDYXRhbG9nczogW10sIGFjdGlvbnM6IFtdLCBzdXBwb3J0ZWRGaWxlczogW10sIHVuc3VwcG9ydGVkRmlsZXMgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRleHQgPSBkZXBzLmNvbXBvc2VyU2VydmljZS5hY3Rpb25Db250ZXh0KCk7XG4gIGNvbnN0IG1hdGNoaW5nQ2F0YWxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBjYXRhbG9nIG9mIGNhdGFsb2dzKSB7XG4gICAgY29uc3QgeyByZWplY3RlZCB9ID0gYXdhaXQgZGVwcy5maWxlU2VydmljZS52YWxpZGF0ZU1hbnkoc3VwcG9ydGVkRmlsZXMsIGNhdGFsb2cpO1xuICAgIGlmIChyZWplY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIG1hdGNoaW5nQ2F0YWxvZ3MucHVzaChjYXRhbG9nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgY2F0YWxvZyBvZiBtYXRjaGluZ0NhdGFsb2dzKSB7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LmZpbmRQaWNrZXJBY3Rpb25zRm9yRmlsZVR5cGUoY2F0YWxvZywgY29udGV4dCkpIHtcbiAgICAgIGlmICghc2Vlbi5oYXMoYWN0aW9uLmlkKSkge1xuICAgICAgICBzZWVuLmFkZChhY3Rpb24uaWQpO1xuICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoaW5nQ2F0YWxvZ3MsXG4gICAgYWN0aW9uczogYWN0aW9ucy5zb3J0KChhLCBiKSA9PiAoYi5wcmlvcml0eSA/PyAwKSAtIChhLnByaW9yaXR5ID8/IDApKSxcbiAgICBzdXBwb3J0ZWRGaWxlcyxcbiAgICB1bnN1cHBvcnRlZEZpbGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3RpZnlJbmJvdW5kRmlsZXNWYWxpZGF0aW9uRmFpbHVyZXMoXG4gIGRlcHM6IFBpY2s8QVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsICd0b2FzdCcgfCAndHJhbnNsYXRpb24nPixcbiAgYW5hbHlzaXM6IEFYQ29udmVyc2F0aW9uSW5ib3VuZEZpbGVzQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgaWYgKGFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChhbmFseXNpcy51bnN1cHBvcnRlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVwcy50b2FzdC53YXJuaW5nKGRlcHMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vbmUtc3VwcG9ydGVkJykpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBrZXkgPVxuICAgICAgYW5hbHlzaXMubWF0Y2hpbmdDYXRhbG9ncy5sZW5ndGggPT09IDBcbiAgICAgICAgPyAnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vbmUtc3VwcG9ydGVkJ1xuICAgICAgICA6ICdAYWNvcmV4OmNoYXQuZXJyb3JzLmluYm91bmQtZmlsZXMtbm8tc2VuZC1vcHRpb24nO1xuICAgIGRlcHMudG9hc3Qud2FybmluZyhkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoa2V5KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWxlIGNhdGFsb2dzIHRoYXQgYWNjZXB0IGV2ZXJ5IHN1cHBvcnRlZCBmaWxlIGluIHRoZSBiYXRjaCwgdGhlbiBtYXRjaGluZyB2aXNpYmxlIHBpY2tlciBhY3Rpb25zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBpY2tlckFjdGlvbnNGb3JBbGxGaWxlcyhcbiAgZGVwczogUGljazxBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcywgJ2ZpbGVTZXJ2aWNlJyB8ICdjb21wb3NlclNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknPixcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8QVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbltdPiB7XG4gIGNvbnN0IGFuYWx5c2lzID0gYXdhaXQgYW5hbHl6ZUluYm91bmRGaWxlcyhkZXBzLCBmaWxlcyk7XG4gIHJldHVybiBhbmFseXNpcy5hY3Rpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRDb21wb3NlckFjdGlvbkNob2ljZShcbiAgZGVwczogQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4gIGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXSxcbiAgZmlsZUNvdW50OiBudW1iZXIsXG4pOiBQcm9taXNlPEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uQ2hvaWNlRGlhbG9nQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vY29tcG9zZXItYWN0aW9uLWNob2ljZS1kaWFsb2cuY29tcG9uZW50Jyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcHMucG9wdXBTZXJ2aWNlLm9wZW4oQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbkNob2ljZURpYWxvZ0NvbXBvbmVudCwge1xuICAgIHRpdGxlOiBkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5kaWFsb2cuY2hvb3NlLXNlbmQtb3B0aW9uLnRpdGxlJyksXG4gICAgc2l6ZTogJ3NtJyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBoZWFkZXI6IHRydWUsXG4gICAgaW5wdXRzOiB7XG4gICAgICBhY3Rpb25zLFxuICAgICAgZmlsZUNvdW50LFxuICAgICAgY29tcG9zZXJBY3Rpb25SZWdpc3RyeTogZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGFjdGlvbiA9IHJlc3VsdD8uZGF0YSBhcyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uIHwgdW5kZWZpbmVkO1xuICBpZiAoIWFjdGlvbj8uY29tcG9uZW50ICYmICFhY3Rpb24/LmNvbXBvbmVudExvYWRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFjdGlvbjtcbn1cblxuLyoqXG4gKiBNYXRjaCBkcm9wcGVkL3Bhc3RlZCBmaWxlcyB0byBjb21wb3NlciBwaWNrZXIgYWN0aW9uKHMpIGFuZCBvcGVuIHRoZSBwb3B1cC5cbiAqIFVuc3VwcG9ydGVkIGZpbGVzIGFyZSBza2lwcGVkIGFmdGVyIGEgd2FybmluZyB0b2FzdDsgc3VwcG9ydGVkIGZpbGVzIGNvbnRpbnVlLlxuICogQHJldHVybnMgdHJ1ZSB3aGVuIGEgcGlja2VyIHBvcHVwIHdhcyBvcGVuZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzKFxuICBkZXBzOiBBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcyxcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRlcHMuY29udmVyc2F0aW9uO1xuICBpZiAoIWNvbnZlcnNhdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFuYWx5c2lzID0gYXdhaXQgYW5hbHl6ZUluYm91bmRGaWxlcyhkZXBzLCBmaWxlcyk7XG5cbiAgaWYgKGFuYWx5c2lzLnVuc3VwcG9ydGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgIG5vdGlmeVBpY2tlclZhbGlkYXRpb25FcnJvcnMoZGVwcy50b2FzdCwgZGVwcy50cmFuc2xhdGlvbiwgYW5hbHlzaXMudW5zdXBwb3J0ZWRGaWxlcyk7XG4gIH1cblxuICBpZiAoIWFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLmxlbmd0aCB8fCAhYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBub3RpZnlJbmJvdW5kRmlsZXNWYWxpZGF0aW9uRmFpbHVyZXMoZGVwcywgYW5hbHlzaXMpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBhY3Rpb24gPSBhbmFseXNpcy5hY3Rpb25zWzBdO1xuICBpZiAoYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgY2hvc2VuID0gYXdhaXQgcHJvbXB0Q29tcG9zZXJBY3Rpb25DaG9pY2UoZGVwcywgYW5hbHlzaXMuYWN0aW9ucywgYW5hbHlzaXMuc3VwcG9ydGVkRmlsZXMubGVuZ3RoKTtcbiAgICBpZiAoIWNob3Nlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhY3Rpb24gPSBjaG9zZW47XG4gIH1cblxuICBjb25zdCBjYXRhbG9nID0gYWN0aW9uLmZpbGVUeXBlO1xuICBpZiAoIWNhdGFsb2cpIHtcbiAgICBkZXBzLnRvYXN0Lndhcm5pbmcoZGVwcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuZXJyb3JzLmluYm91bmQtZmlsZXMtbm9uZS1zdXBwb3J0ZWQnKSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBhY2NlcHRlZCwgcmVqZWN0ZWQgfSA9IGF3YWl0IGRlcHMuZmlsZVNlcnZpY2UudmFsaWRhdGVNYW55KGFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLCBjYXRhbG9nKTtcbiAgaWYgKHJlamVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICBub3RpZnlQaWNrZXJWYWxpZGF0aW9uRXJyb3JzKGRlcHMudG9hc3QsIGRlcHMudHJhbnNsYXRpb24sIHJlamVjdGVkKTtcbiAgfVxuICBpZiAoYWNjZXB0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXdhaXQgb3BlbkNvbXBvc2VyUGlja2VyUG9wdXAoXG4gICAgZGVwcy5wb3B1cFNlcnZpY2UsXG4gICAgZGVwcy5jb21wb3NlclNlcnZpY2UsXG4gICAgZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LFxuICAgIGFjdGlvbixcbiAgICBjb252ZXJzYXRpb24sXG4gICAgYWNjZXB0ZWQsXG4gICAgZGVwcy5jb25maWcsXG4gICk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogRXh0cmFjdCBPUy1jb3BpZWQgZmlsZXMgZnJvbSBhIHBhc3RlIGV2ZW50IChlLmcuIEN0cmwrViBhZnRlciBjb3B5aW5nIGEgZmlsZSBpbiBFeHBsb3JlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsZXNGcm9tQ2xpcGJvYXJkRXZlbnQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogRmlsZVtdIHtcbiAgY29uc3QgaXRlbXMgPSBldmVudC5jbGlwYm9hcmREYXRhPy5pdGVtcztcbiAgaWYgKCFpdGVtcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICdmaWxlJykge1xuICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKiBXaGV0aGVyIGEgcGFzdGUgZXZlbnQgdGFyZ2V0IGxpZXMgaW4gdGhlIGNoYXQgcGFuZWwgKG5vdCBzaWRlYmFyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Bhc3RlVGFyZ2V0SW5DaGF0UGFuZWwoaG9zdDogSFRNTEVsZW1lbnQsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8ICFob3N0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBleGNsdWRlZCA9IGhvc3QucXVlcnlTZWxlY3RvcignLmNvbnZlcnNhdGlvbi1zaWRlYmFyLWNvbnRhaW5lciwgLnNpZGViYXItY29udGFpbmVyJyk7XG4gIGlmIChleGNsdWRlZD8uY29udGFpbnModGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNoYXRNYWluID0gaG9zdC5xdWVyeVNlbGVjdG9yKCcuY29udmVyc2F0aW9uLW1haW4tY29udGFpbmVyLCAubWFpbi1hcmVhLCAuY29udmVyc2F0aW9uLXZpZXcnKTtcbiAgaWYgKGNoYXRNYWluKSB7XG4gICAgcmV0dXJuIGNoYXRNYWluLmNvbnRhaW5zKHRhcmdldCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIEhhbmRsZSBDdHJsK1YgLyBwYXN0ZSB3aGVuIHRoZSBjbGlwYm9hcmQgaG9sZHMgZmlsZXMgY29waWVkIGZyb20gdGhlIE9TLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbnZlcnNhdGlvbkZpbGVQYXN0ZShcbiAgZXZlbnQ6IENsaXBib2FyZEV2ZW50LFxuICBob3N0OiBIVE1MRWxlbWVudCxcbiAgZGVwczogQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFpc1Bhc3RlVGFyZ2V0SW5DaGF0UGFuZWwoaG9zdCwgZXZlbnQudGFyZ2V0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tQ2xpcGJvYXJkRXZlbnQoZXZlbnQpO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBvcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlcyhkZXBzLCBmaWxlcyk7XG4gIGlmIChoYW5kbGVkKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuIl19"],"names":[],"mappings":"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"}
|