@acorex/components 21.0.3-next.26 → 21.0.3-next.28
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/conversation/README.md +462 -2
- package/conversation/index.d.ts +5386 -471
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs +13711 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs +119 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs +59 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs +432 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs +177 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs +54 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs.map +1 -0
- 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-conversation-audio.file-type-Bb5KhRuV.mjs +100 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-Bb5KhRuV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs +121 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs +84 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs +238 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs +1080 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs +102 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.mjs +90 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.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-fallback-renderer.component-BXGAL-OM.mjs +44 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-BXGAL-OM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs +64 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs +468 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs +125 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs +50 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs +77 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs +407 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs +83 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs +266 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs +149 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs +118 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs +140 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs +33 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs +172 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs +224 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs +81 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs +537 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs +68 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs +95 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs +187 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs +170 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs +750 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs +103 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs +55 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs +109 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs +105 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs +62 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs +446 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs +181 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs +54 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs +328 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs +270 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +1 -1402
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/package.json +7 -11
- package/conversation2/README.md +0 -463
- package/conversation2/index.d.ts +0 -6410
- package/fesm2022/acorex-components-conversation2.mjs +0 -22331
- package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { AXButtonComponent } from '@acorex/components/button';
|
|
2
|
+
import * as i3 from '@acorex/core/translation';
|
|
3
|
+
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
|
4
|
+
import * as i2 from '@angular/common';
|
|
5
|
+
import { CommonModule } from '@angular/common';
|
|
6
|
+
import * as i0 from '@angular/core';
|
|
7
|
+
import { inject, input, output, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
8
|
+
import { A as AXConversationService, e as AXConversationMessageUtilsService } from './acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs';
|
|
9
|
+
|
|
10
|
+
function isMessageDeliveryPending(status) {
|
|
11
|
+
return status === 'sending';
|
|
12
|
+
}
|
|
13
|
+
function canShowRendererContentError(status, contentState) {
|
|
14
|
+
return contentState === 'error' && !isMessageDeliveryPending(status);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Shared UI for message bubble bodies: failed delivery (with retry) and content load errors.
|
|
19
|
+
* Sending state is shown in the message-list footer only — not here (avoids layout glitch in media bubbles).
|
|
20
|
+
*/
|
|
21
|
+
class AXConversationMessageRendererStateComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.conversation = inject(AXConversationService, { optional: true });
|
|
24
|
+
this.translation = inject(AXTranslationService);
|
|
25
|
+
this.rendererState = input.required(...(ngDevMode ? [{ debugName: "rendererState" }] : []));
|
|
26
|
+
this.message = input.required(...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
27
|
+
this.contentErrorLabel = input(undefined, ...(ngDevMode ? [{ debugName: "contentErrorLabel" }] : []));
|
|
28
|
+
this.deliveryFailedLabel = input(undefined, ...(ngDevMode ? [{ debugName: "deliveryFailedLabel" }] : []));
|
|
29
|
+
this.showContentErrorChrome = input(true, ...(ngDevMode ? [{ debugName: "showContentErrorChrome" }] : []));
|
|
30
|
+
this.contentErrorStyle = input('banner', ...(ngDevMode ? [{ debugName: "contentErrorStyle" }] : []));
|
|
31
|
+
this.contentErrorIconClass = input(undefined, ...(ngDevMode ? [{ debugName: "contentErrorIconClass" }] : []));
|
|
32
|
+
this.placement = input('above', ...(ngDevMode ? [{ debugName: "placement" }] : []));
|
|
33
|
+
this.contentRetryEnabled = input(false, ...(ngDevMode ? [{ debugName: "contentRetryEnabled" }] : []));
|
|
34
|
+
this.contentRetry = output();
|
|
35
|
+
this.retryBusy = signal(false, ...(ngDevMode ? [{ debugName: "retryBusy" }] : []));
|
|
36
|
+
this.currentUser = computed(() => this.conversation?.currentUser(), ...(ngDevMode ? [{ debugName: "currentUser" }] : []));
|
|
37
|
+
this.isOwn = computed(() => {
|
|
38
|
+
const msg = this.message();
|
|
39
|
+
const user = this.currentUser();
|
|
40
|
+
if (!user) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return AXConversationMessageUtilsService.isOwnMessage(msg, user.id);
|
|
44
|
+
}, ...(ngDevMode ? [{ debugName: "isOwn" }] : []));
|
|
45
|
+
this.showFailed = computed(() => this.rendererState().deliveryStatus === 'failed' && this.isOwn(), ...(ngDevMode ? [{ debugName: "showFailed" }] : []));
|
|
46
|
+
this.showContentError = computed(() => {
|
|
47
|
+
const { contentState } = this.rendererState();
|
|
48
|
+
return (this.showContentErrorChrome() &&
|
|
49
|
+
canShowRendererContentError(this.message().status, contentState));
|
|
50
|
+
}, ...(ngDevMode ? [{ debugName: "showContentError" }] : []));
|
|
51
|
+
this.hasVisibleChrome = computed(() => this.showFailed() || this.showContentError(), ...(ngDevMode ? [{ debugName: "hasVisibleChrome" }] : []));
|
|
52
|
+
this.contentErrorText = computed(() => this.contentErrorLabel() ?? this.translation.translateSync('@acorex:chat.renderer-state.could-not-load-content'), ...(ngDevMode ? [{ debugName: "contentErrorText" }] : []));
|
|
53
|
+
this.deliveryFailedText = computed(() => this.deliveryFailedLabel() ??
|
|
54
|
+
this.translation.translateSync('@acorex:chat.renderer-state.could-not-send-message'), ...(ngDevMode ? [{ debugName: "deliveryFailedText" }] : []));
|
|
55
|
+
}
|
|
56
|
+
async onRetry() {
|
|
57
|
+
const msg = this.message();
|
|
58
|
+
if (!this.conversation) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.retryBusy.set(true);
|
|
62
|
+
try {
|
|
63
|
+
await this.conversation.retryFailedMessage(msg.id);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
this.retryBusy.set(false);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationMessageRendererStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXConversationMessageRendererStateComponent, isStandalone: true, selector: "ax-conversation-message-renderer-state", inputs: { rendererState: { classPropertyName: "rendererState", publicName: "rendererState", isSignal: true, isRequired: true, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, contentErrorLabel: { classPropertyName: "contentErrorLabel", publicName: "contentErrorLabel", isSignal: true, isRequired: false, transformFunction: null }, deliveryFailedLabel: { classPropertyName: "deliveryFailedLabel", publicName: "deliveryFailedLabel", isSignal: true, isRequired: false, transformFunction: null }, showContentErrorChrome: { classPropertyName: "showContentErrorChrome", publicName: "showContentErrorChrome", isSignal: true, isRequired: false, transformFunction: null }, contentErrorStyle: { classPropertyName: "contentErrorStyle", publicName: "contentErrorStyle", isSignal: true, isRequired: false, transformFunction: null }, contentErrorIconClass: { classPropertyName: "contentErrorIconClass", publicName: "contentErrorIconClass", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, contentRetryEnabled: { classPropertyName: "contentRetryEnabled", publicName: "contentRetryEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentRetry: "contentRetry" }, ngImport: i0, template: `
|
|
71
|
+
@if (hasVisibleChrome()) {
|
|
72
|
+
<div
|
|
73
|
+
class="ax-conversation-renderer-state"
|
|
74
|
+
[class.ax-conversation-renderer-state--below]="placement() === 'below'"
|
|
75
|
+
role="region"
|
|
76
|
+
[attr.aria-label]="'@acorex:chat.renderer-state.message-status' | translate | async"
|
|
77
|
+
>
|
|
78
|
+
@if (showFailed()) {
|
|
79
|
+
<div class="ax-conversation-renderer-state__row ax-conversation-renderer-state__row--danger" role="alert">
|
|
80
|
+
<i class="fa-light fa-triangle-exclamation ax-conversation-renderer-state__ico" aria-hidden="true"></i>
|
|
81
|
+
<span class="ax-conversation-renderer-state__msg">{{ deliveryFailedText() }}</span>
|
|
82
|
+
<ax-button
|
|
83
|
+
class="ax-conversation-renderer-state__retry"
|
|
84
|
+
[text]="translation.translateSync('@acorex:chat.renderer-state.retry')"
|
|
85
|
+
[look]="'outline'"
|
|
86
|
+
[size]="'sm'"
|
|
87
|
+
[disabled]="retryBusy()"
|
|
88
|
+
(onClick)="onRetry()"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
}
|
|
92
|
+
@if (showContentError()) {
|
|
93
|
+
<div
|
|
94
|
+
class="ax-conversation-renderer-state__content-err"
|
|
95
|
+
[class.ax-conversation-renderer-state__content-err--inline]="contentErrorStyle() === 'inline'"
|
|
96
|
+
[class.ax-conversation-renderer-state__row]="contentErrorStyle() === 'banner'"
|
|
97
|
+
[class.ax-conversation-renderer-state__row--warn]="contentErrorStyle() === 'banner'"
|
|
98
|
+
role="alert"
|
|
99
|
+
>
|
|
100
|
+
@if (contentErrorIconClass(); as iconClass) {
|
|
101
|
+
<i [class]="iconClass + ' ax-conversation-renderer-state__ico'" aria-hidden="true"></i>
|
|
102
|
+
}
|
|
103
|
+
<span class="ax-conversation-renderer-state__msg">{{ contentErrorText() }}</span>
|
|
104
|
+
@if (contentRetryEnabled()) {
|
|
105
|
+
<ax-button
|
|
106
|
+
class="ax-conversation-renderer-state__retry"
|
|
107
|
+
[text]="translation.translateSync('@acorex:chat.renderer-state.try-again')"
|
|
108
|
+
[look]="'outline'"
|
|
109
|
+
[size]="'sm'"
|
|
110
|
+
(onClick)="contentRetry.emit()"
|
|
111
|
+
/>
|
|
112
|
+
}
|
|
113
|
+
</div>
|
|
114
|
+
}
|
|
115
|
+
</div>
|
|
116
|
+
}
|
|
117
|
+
`, isInline: true, styles: [":host{display:block}.ax-conversation-renderer-state{display:flex;flex-direction:column;gap:.375rem;margin-block:.25rem 0}.ax-conversation-renderer-state--below{margin-top:.375rem;margin-bottom:0}.ax-conversation-renderer-state__content-err--inline{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:rgb(var(--ax-sys-color-danger-600));padding:.125rem .25rem}.ax-conversation-renderer-state__row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:var(--ax-sys-border-radius);font-size:.8125rem;line-height:1.35}.ax-conversation-renderer-state__row--danger{background:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-danger-700))}.ax-conversation-renderer-state__row--warn{background:rgb(var(--ax-sys-color-warning-lightest-surface));color:rgb(var(--ax-sys-color-warning-800))}.ax-conversation-renderer-state__ico{flex-shrink:0;font-size:.875rem;opacity:.9}.ax-conversation-renderer-state__msg{flex:1;min-width:0}.ax-conversation-renderer-state__retry{flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
118
|
+
}
|
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationMessageRendererStateComponent, decorators: [{
|
|
120
|
+
type: Component,
|
|
121
|
+
args: [{ selector: 'ax-conversation-message-renderer-state', imports: [CommonModule, AXButtonComponent, AXTranslationModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
122
|
+
@if (hasVisibleChrome()) {
|
|
123
|
+
<div
|
|
124
|
+
class="ax-conversation-renderer-state"
|
|
125
|
+
[class.ax-conversation-renderer-state--below]="placement() === 'below'"
|
|
126
|
+
role="region"
|
|
127
|
+
[attr.aria-label]="'@acorex:chat.renderer-state.message-status' | translate | async"
|
|
128
|
+
>
|
|
129
|
+
@if (showFailed()) {
|
|
130
|
+
<div class="ax-conversation-renderer-state__row ax-conversation-renderer-state__row--danger" role="alert">
|
|
131
|
+
<i class="fa-light fa-triangle-exclamation ax-conversation-renderer-state__ico" aria-hidden="true"></i>
|
|
132
|
+
<span class="ax-conversation-renderer-state__msg">{{ deliveryFailedText() }}</span>
|
|
133
|
+
<ax-button
|
|
134
|
+
class="ax-conversation-renderer-state__retry"
|
|
135
|
+
[text]="translation.translateSync('@acorex:chat.renderer-state.retry')"
|
|
136
|
+
[look]="'outline'"
|
|
137
|
+
[size]="'sm'"
|
|
138
|
+
[disabled]="retryBusy()"
|
|
139
|
+
(onClick)="onRetry()"
|
|
140
|
+
/>
|
|
141
|
+
</div>
|
|
142
|
+
}
|
|
143
|
+
@if (showContentError()) {
|
|
144
|
+
<div
|
|
145
|
+
class="ax-conversation-renderer-state__content-err"
|
|
146
|
+
[class.ax-conversation-renderer-state__content-err--inline]="contentErrorStyle() === 'inline'"
|
|
147
|
+
[class.ax-conversation-renderer-state__row]="contentErrorStyle() === 'banner'"
|
|
148
|
+
[class.ax-conversation-renderer-state__row--warn]="contentErrorStyle() === 'banner'"
|
|
149
|
+
role="alert"
|
|
150
|
+
>
|
|
151
|
+
@if (contentErrorIconClass(); as iconClass) {
|
|
152
|
+
<i [class]="iconClass + ' ax-conversation-renderer-state__ico'" aria-hidden="true"></i>
|
|
153
|
+
}
|
|
154
|
+
<span class="ax-conversation-renderer-state__msg">{{ contentErrorText() }}</span>
|
|
155
|
+
@if (contentRetryEnabled()) {
|
|
156
|
+
<ax-button
|
|
157
|
+
class="ax-conversation-renderer-state__retry"
|
|
158
|
+
[text]="translation.translateSync('@acorex:chat.renderer-state.try-again')"
|
|
159
|
+
[look]="'outline'"
|
|
160
|
+
[size]="'sm'"
|
|
161
|
+
(onClick)="contentRetry.emit()"
|
|
162
|
+
/>
|
|
163
|
+
}
|
|
164
|
+
</div>
|
|
165
|
+
}
|
|
166
|
+
</div>
|
|
167
|
+
}
|
|
168
|
+
`, styles: [":host{display:block}.ax-conversation-renderer-state{display:flex;flex-direction:column;gap:.375rem;margin-block:.25rem 0}.ax-conversation-renderer-state--below{margin-top:.375rem;margin-bottom:0}.ax-conversation-renderer-state__content-err--inline{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:rgb(var(--ax-sys-color-danger-600));padding:.125rem .25rem}.ax-conversation-renderer-state__row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:var(--ax-sys-border-radius);font-size:.8125rem;line-height:1.35}.ax-conversation-renderer-state__row--danger{background:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-danger-700))}.ax-conversation-renderer-state__row--warn{background:rgb(var(--ax-sys-color-warning-lightest-surface));color:rgb(var(--ax-sys-color-warning-800))}.ax-conversation-renderer-state__ico{flex-shrink:0;font-size:.875rem;opacity:.9}.ax-conversation-renderer-state__msg{flex:1;min-width:0}.ax-conversation-renderer-state__retry{flex-shrink:0}\n"] }]
|
|
169
|
+
}] });
|
|
170
|
+
|
|
171
|
+
export { AXConversationMessageRendererStateComponent as A, isMessageDeliveryPending as i };
|
|
172
|
+
//# sourceMappingURL=acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs.map
|
package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/message-list/components/shared/message-renderer-state.helpers.js","../tmp-esm2022/conversation/lib/plugins/message-list/components/shared/message-renderer-state.component.js"],"sourcesContent":["export function isMessageDeliveryPending(status) {\n return status === 'sending';\n}\nexport function canShowRendererContentError(status, contentState) {\n return contentState === 'error' && !isMessageDeliveryPending(status);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9wbHVnaW5zL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL3NoYXJlZC9tZXNzYWdlLXJlbmRlcmVyLXN0YXRlLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXVCO0lBQzlELE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxNQUF1QixFQUN2QixZQUF1RDtJQUV2RCxPQUFPLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWE1lc3NhZ2VTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3JlZ2lzdHJpZXMvbWVzc2FnZS1yZW5kZXJlci5yZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2VEZWxpdmVyeVBlbmRpbmcoc3RhdHVzOiBBWE1lc3NhZ2VTdGF0dXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gJ3NlbmRpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuU2hvd1JlbmRlcmVyQ29udGVudEVycm9yKFxuICBzdGF0dXM6IEFYTWVzc2FnZVN0YXR1cyxcbiAgY29udGVudFN0YXRlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZSxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29udGVudFN0YXRlID09PSAnZXJyb3InICYmICFpc01lc3NhZ2VEZWxpdmVyeVBlbmRpbmcoc3RhdHVzKTtcbn1cbiJdfQ==","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, output, signal } from '@angular/core';\nimport { AXConversationService } from '../../../../services';\nimport { AXConversationMessageUtilsService } from '../../../../utils/message-utils.service';\nimport { canShowRendererContentError } from './message-renderer-state.helpers';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/core/translation\";\n/**\n * Shared UI for message bubble bodies: failed delivery (with retry) and content load errors.\n * Sending state is shown in the message-list footer only — not here (avoids layout glitch in media bubbles).\n */\nexport class AXConversationMessageRendererStateComponent {\n constructor() {\n this.conversation = inject(AXConversationService, { optional: true });\n this.translation = inject(AXTranslationService);\n this.rendererState = input.required(...(ngDevMode ? [{ debugName: \"rendererState\" }] : []));\n this.message = input.required(...(ngDevMode ? [{ debugName: \"message\" }] : []));\n this.contentErrorLabel = input(undefined, ...(ngDevMode ? [{ debugName: \"contentErrorLabel\" }] : []));\n this.deliveryFailedLabel = input(undefined, ...(ngDevMode ? [{ debugName: \"deliveryFailedLabel\" }] : []));\n this.showContentErrorChrome = input(true, ...(ngDevMode ? [{ debugName: \"showContentErrorChrome\" }] : []));\n this.contentErrorStyle = input('banner', ...(ngDevMode ? [{ debugName: \"contentErrorStyle\" }] : []));\n this.contentErrorIconClass = input(undefined, ...(ngDevMode ? [{ debugName: \"contentErrorIconClass\" }] : []));\n this.placement = input('above', ...(ngDevMode ? [{ debugName: \"placement\" }] : []));\n this.contentRetryEnabled = input(false, ...(ngDevMode ? [{ debugName: \"contentRetryEnabled\" }] : []));\n this.contentRetry = output();\n this.retryBusy = signal(false, ...(ngDevMode ? [{ debugName: \"retryBusy\" }] : []));\n this.currentUser = computed(() => this.conversation?.currentUser(), ...(ngDevMode ? [{ debugName: \"currentUser\" }] : []));\n this.isOwn = computed(() => {\n const msg = this.message();\n const user = this.currentUser();\n if (!user) {\n return false;\n }\n return AXConversationMessageUtilsService.isOwnMessage(msg, user.id);\n }, ...(ngDevMode ? [{ debugName: \"isOwn\" }] : []));\n this.showFailed = computed(() => this.rendererState().deliveryStatus === 'failed' && this.isOwn(), ...(ngDevMode ? [{ debugName: \"showFailed\" }] : []));\n this.showContentError = computed(() => {\n const { contentState } = this.rendererState();\n return (this.showContentErrorChrome() &&\n canShowRendererContentError(this.message().status, contentState));\n }, ...(ngDevMode ? [{ debugName: \"showContentError\" }] : []));\n this.hasVisibleChrome = computed(() => this.showFailed() || this.showContentError(), ...(ngDevMode ? [{ debugName: \"hasVisibleChrome\" }] : []));\n this.contentErrorText = computed(() => this.contentErrorLabel() ?? this.translation.translateSync('@acorex:chat.renderer-state.could-not-load-content'), ...(ngDevMode ? [{ debugName: \"contentErrorText\" }] : []));\n this.deliveryFailedText = computed(() => this.deliveryFailedLabel() ??\n this.translation.translateSync('@acorex:chat.renderer-state.could-not-send-message'), ...(ngDevMode ? [{ debugName: \"deliveryFailedText\" }] : []));\n }\n async onRetry() {\n const msg = this.message();\n if (!this.conversation) {\n return;\n }\n this.retryBusy.set(true);\n try {\n await this.conversation.retryFailedMessage(msg.id);\n }\n finally {\n this.retryBusy.set(false);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationMessageRendererStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXConversationMessageRendererStateComponent, isStandalone: true, selector: \"ax-conversation-message-renderer-state\", inputs: { rendererState: { classPropertyName: \"rendererState\", publicName: \"rendererState\", isSignal: true, isRequired: true, transformFunction: null }, message: { classPropertyName: \"message\", publicName: \"message\", isSignal: true, isRequired: true, transformFunction: null }, contentErrorLabel: { classPropertyName: \"contentErrorLabel\", publicName: \"contentErrorLabel\", isSignal: true, isRequired: false, transformFunction: null }, deliveryFailedLabel: { classPropertyName: \"deliveryFailedLabel\", publicName: \"deliveryFailedLabel\", isSignal: true, isRequired: false, transformFunction: null }, showContentErrorChrome: { classPropertyName: \"showContentErrorChrome\", publicName: \"showContentErrorChrome\", isSignal: true, isRequired: false, transformFunction: null }, contentErrorStyle: { classPropertyName: \"contentErrorStyle\", publicName: \"contentErrorStyle\", isSignal: true, isRequired: false, transformFunction: null }, contentErrorIconClass: { classPropertyName: \"contentErrorIconClass\", publicName: \"contentErrorIconClass\", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: \"placement\", publicName: \"placement\", isSignal: true, isRequired: false, transformFunction: null }, contentRetryEnabled: { classPropertyName: \"contentRetryEnabled\", publicName: \"contentRetryEnabled\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentRetry: \"contentRetry\" }, ngImport: i0, template: `\n @if (hasVisibleChrome()) {\n <div\n class=\"ax-conversation-renderer-state\"\n [class.ax-conversation-renderer-state--below]=\"placement() === 'below'\"\n role=\"region\"\n [attr.aria-label]=\"'@acorex:chat.renderer-state.message-status' | translate | async\"\n >\n @if (showFailed()) {\n <div class=\"ax-conversation-renderer-state__row ax-conversation-renderer-state__row--danger\" role=\"alert\">\n <i class=\"fa-light fa-triangle-exclamation ax-conversation-renderer-state__ico\" aria-hidden=\"true\"></i>\n <span class=\"ax-conversation-renderer-state__msg\">{{ deliveryFailedText() }}</span>\n <ax-button\n class=\"ax-conversation-renderer-state__retry\"\n [text]=\"translation.translateSync('@acorex:chat.renderer-state.retry')\"\n [look]=\"'outline'\"\n [size]=\"'sm'\"\n [disabled]=\"retryBusy()\"\n (onClick)=\"onRetry()\"\n />\n </div>\n }\n @if (showContentError()) {\n <div\n class=\"ax-conversation-renderer-state__content-err\"\n [class.ax-conversation-renderer-state__content-err--inline]=\"contentErrorStyle() === 'inline'\"\n [class.ax-conversation-renderer-state__row]=\"contentErrorStyle() === 'banner'\"\n [class.ax-conversation-renderer-state__row--warn]=\"contentErrorStyle() === 'banner'\"\n role=\"alert\"\n >\n @if (contentErrorIconClass(); as iconClass) {\n <i [class]=\"iconClass + ' ax-conversation-renderer-state__ico'\" aria-hidden=\"true\"></i>\n }\n <span class=\"ax-conversation-renderer-state__msg\">{{ contentErrorText() }}</span>\n @if (contentRetryEnabled()) {\n <ax-button\n class=\"ax-conversation-renderer-state__retry\"\n [text]=\"translation.translateSync('@acorex:chat.renderer-state.try-again')\"\n [look]=\"'outline'\"\n [size]=\"'sm'\"\n (onClick)=\"contentRetry.emit()\"\n />\n }\n </div>\n }\n </div>\n }\n `, isInline: true, styles: [\":host{display:block}.ax-conversation-renderer-state{display:flex;flex-direction:column;gap:.375rem;margin-block:.25rem 0}.ax-conversation-renderer-state--below{margin-top:.375rem;margin-bottom:0}.ax-conversation-renderer-state__content-err--inline{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:rgb(var(--ax-sys-color-danger-600));padding:.125rem .25rem}.ax-conversation-renderer-state__row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:var(--ax-sys-border-radius);font-size:.8125rem;line-height:1.35}.ax-conversation-renderer-state__row--danger{background:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-danger-700))}.ax-conversation-renderer-state__row--warn{background:rgb(var(--ax-sys-color-warning-lightest-surface));color:rgb(var(--ax-sys-color-warning-800))}.ax-conversation-renderer-state__ico{flex-shrink:0;font-size:.875rem;opacity:.9}.ax-conversation-renderer-state__msg{flex:1;min-width:0}.ax-conversation-renderer-state__retry{flex-shrink:0}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i2.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationMessageRendererStateComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-conversation-message-renderer-state', imports: [CommonModule, AXButtonComponent, AXTranslationModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `\n @if (hasVisibleChrome()) {\n <div\n class=\"ax-conversation-renderer-state\"\n [class.ax-conversation-renderer-state--below]=\"placement() === 'below'\"\n role=\"region\"\n [attr.aria-label]=\"'@acorex:chat.renderer-state.message-status' | translate | async\"\n >\n @if (showFailed()) {\n <div class=\"ax-conversation-renderer-state__row ax-conversation-renderer-state__row--danger\" role=\"alert\">\n <i class=\"fa-light fa-triangle-exclamation ax-conversation-renderer-state__ico\" aria-hidden=\"true\"></i>\n <span class=\"ax-conversation-renderer-state__msg\">{{ deliveryFailedText() }}</span>\n <ax-button\n class=\"ax-conversation-renderer-state__retry\"\n [text]=\"translation.translateSync('@acorex:chat.renderer-state.retry')\"\n [look]=\"'outline'\"\n [size]=\"'sm'\"\n [disabled]=\"retryBusy()\"\n (onClick)=\"onRetry()\"\n />\n </div>\n }\n @if (showContentError()) {\n <div\n class=\"ax-conversation-renderer-state__content-err\"\n [class.ax-conversation-renderer-state__content-err--inline]=\"contentErrorStyle() === 'inline'\"\n [class.ax-conversation-renderer-state__row]=\"contentErrorStyle() === 'banner'\"\n [class.ax-conversation-renderer-state__row--warn]=\"contentErrorStyle() === 'banner'\"\n role=\"alert\"\n >\n @if (contentErrorIconClass(); as iconClass) {\n <i [class]=\"iconClass + ' ax-conversation-renderer-state__ico'\" aria-hidden=\"true\"></i>\n }\n <span class=\"ax-conversation-renderer-state__msg\">{{ contentErrorText() }}</span>\n @if (contentRetryEnabled()) {\n <ax-button\n class=\"ax-conversation-renderer-state__retry\"\n [text]=\"translation.translateSync('@acorex:chat.renderer-state.try-again')\"\n [look]=\"'outline'\"\n [size]=\"'sm'\"\n (onClick)=\"contentRetry.emit()\"\n />\n }\n </div>\n }\n </div>\n }\n `, styles: [\":host{display:block}.ax-conversation-renderer-state{display:flex;flex-direction:column;gap:.375rem;margin-block:.25rem 0}.ax-conversation-renderer-state--below{margin-top:.375rem;margin-bottom:0}.ax-conversation-renderer-state__content-err--inline{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:rgb(var(--ax-sys-color-danger-600));padding:.125rem .25rem}.ax-conversation-renderer-state__row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:var(--ax-sys-border-radius);font-size:.8125rem;line-height:1.35}.ax-conversation-renderer-state__row--danger{background:rgb(var(--ax-sys-color-danger-lightest-surface));color:rgb(var(--ax-sys-color-danger-700))}.ax-conversation-renderer-state__row--warn{background:rgb(var(--ax-sys-color-warning-lightest-surface));color:rgb(var(--ax-sys-color-warning-800))}.ax-conversation-renderer-state__ico{flex-shrink:0;font-size:.875rem;opacity:.9}.ax-conversation-renderer-state__msg{flex:1;min-width:0}.ax-conversation-renderer-state__retry{flex-shrink:0}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL3BsdWdpbnMvbWVzc2FnZS1saXN0L2NvbXBvbmVudHMvc2hhcmVkL21lc3NhZ2UtcmVuZGVyZXItc3RhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFFL0U7OztHQUdHO0FBc0hILE1BQU0sT0FBTywyQ0FBMkM7SUFySHhEO1FBc0htQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSx3REFBc0MsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsa0RBQWEsQ0FBQztRQUV0QyxzQkFB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QTJDO2tHQUEzQywyQ0FBMkMsdy9DQWpINUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NULHNtQ0FqRFMsWUFBWSwrQkFBRSxpQkFBaUIsMFVBQUUsbUJBQW1COzsyRkFtSG5ELDJDQUEyQztrQkFySHZELFNBQVM7K0JBQ0Usd0NBQXdDLFdBQ3pDLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLG1CQUM5Qyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlLCBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEFYTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9yZWdpc3RyaWVzL21lc3NhZ2UtcmVuZGVyZXIucmVnaXN0cnknO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25NZXNzYWdlVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvbWVzc2FnZS11dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7IGNhblNob3dSZW5kZXJlckNvbnRlbnRFcnJvciB9IGZyb20gJy4vbWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5oZWxwZXJzJztcblxuLyoqXG4gKiBTaGFyZWQgVUkgZm9yIG1lc3NhZ2UgYnViYmxlIGJvZGllczogZmFpbGVkIGRlbGl2ZXJ5ICh3aXRoIHJldHJ5KSBhbmQgY29udGVudCBsb2FkIGVycm9ycy5cbiAqIFNlbmRpbmcgc3RhdGUgaXMgc2hvd24gaW4gdGhlIG1lc3NhZ2UtbGlzdCBmb290ZXIgb25seSDigJQgbm90IGhlcmUgKGF2b2lkcyBsYXlvdXQgZ2xpdGNoIGluIG1lZGlhIGJ1YmJsZXMpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1jb252ZXJzYXRpb24tbWVzc2FnZS1yZW5kZXJlci1zdGF0ZScsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYQnV0dG9uQ29tcG9uZW50LCBBWFRyYW5zbGF0aW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChoYXNWaXNpYmxlQ2hyb21lKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVcIlxuICAgICAgICBbY2xhc3MuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlLS1iZWxvd109XCJwbGFjZW1lbnQoKSA9PT0gJ2JlbG93J1wiXG4gICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUubWVzc2FnZS1zdGF0dXMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICBAaWYgKHNob3dGYWlsZWQoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3JvdyBheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3Jvdy0tZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uIGF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9faWNvXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX21zZ1wiPnt7IGRlbGl2ZXJ5RmFpbGVkVGV4dCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcmV0cnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUucmV0cnknKVwiXG4gICAgICAgICAgICAgIFtsb29rXT1cIidvdXRsaW5lJ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cIidzbSdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmV0cnlCdXN5KClcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJvblJldHJ5KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNob3dDb250ZW50RXJyb3IoKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19jb250ZW50LWVyclwiXG4gICAgICAgICAgICBbY2xhc3MuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19jb250ZW50LWVyci0taW5saW5lXT1cImNvbnRlbnRFcnJvclN0eWxlKCkgPT09ICdpbmxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3Jvd109XCJjb250ZW50RXJyb3JTdHlsZSgpID09PSAnYmFubmVyJ1wiXG4gICAgICAgICAgICBbY2xhc3MuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19yb3ctLXdhcm5dPVwiY29udGVudEVycm9yU3R5bGUoKSA9PT0gJ2Jhbm5lcidcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNvbnRlbnRFcnJvckljb25DbGFzcygpOyBhcyBpY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzcyArICcgYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19pY28nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX21zZ1wiPnt7IGNvbnRlbnRFcnJvclRleHQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoY29udGVudFJldHJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcmV0cnlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5yZW5kZXJlci1zdGF0ZS50cnktYWdhaW4nKVwiXG4gICAgICAgICAgICAgICAgW2xvb2tdPVwiJ291dGxpbmUnXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCInc20nXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJjb250ZW50UmV0cnkuZW1pdCgpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjM3NXJlbTtcbiAgICAgICAgbWFyZ2luLWJsb2NrOiAwLjI1cmVtIDA7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGUtLWJlbG93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4zNzVyZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX2NvbnRlbnQtZXJyLS1pbmxpbmUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMzc1cmVtO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWRhbmdlci02MDApKTtcbiAgICAgICAgcGFkZGluZzogMC4xMjVyZW0gMC4yNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4zNzVyZW0gMC41cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1heC1zeXMtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcm93LS1kYW5nZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWRhbmdlci1saWdodGVzdC1zdXJmYWNlKSk7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWRhbmdlci03MDApKTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcm93LS13YXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci13YXJuaW5nLWxpZ2h0ZXN0LXN1cmZhY2UpKTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itd2FybmluZy04MDApKTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9faWNvIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fbXNnIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19yZXRyeSB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyU3RhdGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnNhdGlvbiA9IGluamVjdChBWENvbnZlcnNhdGlvblNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9uID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICByZWFkb25seSByZW5kZXJlclN0YXRlID0gaW5wdXQucmVxdWlyZWQ8QVhDb252ZXJzYXRpb25NZXNzYWdlUmVuZGVyZXJTdGF0ZT4oKTtcbiAgcmVhZG9ubHkgbWVzc2FnZSA9IGlucHV0LnJlcXVpcmVkPEFYTWVzc2FnZT4oKTtcblxuICByZWFkb25seSBjb250ZW50RXJyb3JMYWJlbCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZGVsaXZlcnlGYWlsZWRMYWJlbCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgc2hvd0NvbnRlbnRFcnJvckNocm9tZSA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSBjb250ZW50RXJyb3JTdHlsZSA9IGlucHV0PCdiYW5uZXInIHwgJ2lubGluZSc+KCdiYW5uZXInKTtcbiAgcmVhZG9ubHkgY29udGVudEVycm9ySWNvbkNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBwbGFjZW1lbnQgPSBpbnB1dDwnYWJvdmUnIHwgJ2JlbG93Jz4oJ2Fib3ZlJyk7XG5cbiAgcmVhZG9ubHkgY29udGVudFJldHJ5RW5hYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgY29udGVudFJldHJ5ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgcmV0cnlCdXN5ID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRVc2VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb252ZXJzYXRpb24/LmN1cnJlbnRVc2VyKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNPd24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbXNnID0gdGhpcy5tZXNzYWdlKCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuY3VycmVudFVzZXIoKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEFYQ29udmVyc2F0aW9uTWVzc2FnZVV0aWxzU2VydmljZS5pc093bk1lc3NhZ2UobXNnLCB1c2VyLmlkKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd0ZhaWxlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVuZGVyZXJTdGF0ZSgpLmRlbGl2ZXJ5U3RhdHVzID09PSAnZmFpbGVkJyAmJiB0aGlzLmlzT3duKCksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2hvd0NvbnRlbnRFcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRlbnRTdGF0ZSB9ID0gdGhpcy5yZW5kZXJlclN0YXRlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd0NvbnRlbnRFcnJvckNocm9tZSgpICYmXG4gICAgICBjYW5TaG93UmVuZGVyZXJDb250ZW50RXJyb3IodGhpcy5tZXNzYWdlKCkuc3RhdHVzLCBjb250ZW50U3RhdGUpXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzVmlzaWJsZUNocm9tZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2hvd0ZhaWxlZCgpIHx8IHRoaXMuc2hvd0NvbnRlbnRFcnJvcigpKTtcblxuICByZWFkb25seSBjb250ZW50RXJyb3JUZXh0ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuY29udGVudEVycm9yTGFiZWwoKSA/PyB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5yZW5kZXJlci1zdGF0ZS5jb3VsZC1ub3QtbG9hZC1jb250ZW50JyksXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVsaXZlcnlGYWlsZWRUZXh0ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuZGVsaXZlcnlGYWlsZWRMYWJlbCgpID8/XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5yZW5kZXJlci1zdGF0ZS5jb3VsZC1ub3Qtc2VuZC1tZXNzYWdlJyksXG4gICk7XG5cbiAgYXN5bmMgb25SZXRyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtc2cgPSB0aGlzLm1lc3NhZ2UoKTtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmV0cnlCdXN5LnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb24ucmV0cnlGYWlsZWRNZXNzYWdlKG1zZy5pZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmV0cnlCdXN5LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXX0="],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { n as notifyPickerValidationErrors } from './acorex-components-conversation-picker-upload-C-PlKPaU.mjs';
|
|
2
|
+
import { r as resolveComposerMaxFiles } from './acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs';
|
|
3
|
+
|
|
4
|
+
async function openComposerPickerPopup(popupService, composerService, registry, action, conversation, files, config) {
|
|
5
|
+
const component = action.component ?? (action.componentLoader ? await action.componentLoader() : undefined);
|
|
6
|
+
if (!component || files.length === 0) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
await popupService.open(component, {
|
|
10
|
+
title: registry.getActionLabel(action),
|
|
11
|
+
size: 'md',
|
|
12
|
+
closeButton: true,
|
|
13
|
+
header: false,
|
|
14
|
+
panelClass: ['ax-conversation-composer-picker-popup'],
|
|
15
|
+
inputs: {
|
|
16
|
+
conversation,
|
|
17
|
+
maxFiles: resolveComposerMaxFiles(action, config),
|
|
18
|
+
initialFiles: files,
|
|
19
|
+
service: composerService,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Catalogs registered on picker actions (conversation-image, conversation-file, …). */
|
|
25
|
+
function pickerCatalogNames(registry) {
|
|
26
|
+
const names = new Set();
|
|
27
|
+
for (const action of registry.actions()) {
|
|
28
|
+
if ((action.component || action.componentLoader) && action.fileType) {
|
|
29
|
+
names.add(action.fileType);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return [...names];
|
|
33
|
+
}
|
|
34
|
+
/** Files that are not accepted by any registered picker catalog. */
|
|
35
|
+
async function collectUnsupportedInboundFiles(deps, files, catalogs) {
|
|
36
|
+
const unsupported = [];
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
let acceptedByAny = false;
|
|
39
|
+
let lastErrors = [];
|
|
40
|
+
for (const catalog of catalogs) {
|
|
41
|
+
const errors = await deps.fileService.validate(file, catalog);
|
|
42
|
+
if (errors.length === 0) {
|
|
43
|
+
acceptedByAny = true;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
lastErrors = errors;
|
|
47
|
+
}
|
|
48
|
+
if (!acceptedByAny) {
|
|
49
|
+
unsupported.push({ file, errors: lastErrors });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return unsupported;
|
|
53
|
+
}
|
|
54
|
+
async function analyzeInboundFiles(deps, files) {
|
|
55
|
+
if (!files.length) {
|
|
56
|
+
return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles: [] };
|
|
57
|
+
}
|
|
58
|
+
const catalogs = pickerCatalogNames(deps.composerActionRegistry);
|
|
59
|
+
const unsupportedFiles = await collectUnsupportedInboundFiles(deps, files, catalogs);
|
|
60
|
+
const unsupportedSet = new Set(unsupportedFiles.map((entry) => entry.file));
|
|
61
|
+
const supportedFiles = files.filter((file) => !unsupportedSet.has(file));
|
|
62
|
+
if (supportedFiles.length === 0) {
|
|
63
|
+
return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles };
|
|
64
|
+
}
|
|
65
|
+
const context = deps.composerService.actionContext();
|
|
66
|
+
const matchingCatalogs = [];
|
|
67
|
+
for (const catalog of catalogs) {
|
|
68
|
+
const { rejected } = await deps.fileService.validateMany(supportedFiles, catalog);
|
|
69
|
+
if (rejected.length === 0) {
|
|
70
|
+
matchingCatalogs.push(catalog);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const actions = [];
|
|
75
|
+
for (const catalog of matchingCatalogs) {
|
|
76
|
+
for (const action of deps.composerActionRegistry.findPickerActionsForFileType(catalog, context)) {
|
|
77
|
+
if (!seen.has(action.id)) {
|
|
78
|
+
seen.add(action.id);
|
|
79
|
+
actions.push(action);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
matchingCatalogs,
|
|
85
|
+
actions: actions.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)),
|
|
86
|
+
supportedFiles,
|
|
87
|
+
unsupportedFiles,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function notifyInboundFilesValidationFailures(deps, analysis) {
|
|
91
|
+
if (analysis.supportedFiles.length === 0) {
|
|
92
|
+
if (analysis.unsupportedFiles.length === 0) {
|
|
93
|
+
deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (analysis.actions.length === 0) {
|
|
98
|
+
const key = analysis.matchingCatalogs.length === 0
|
|
99
|
+
? '@acorex:chat.errors.inbound-files-none-supported'
|
|
100
|
+
: '@acorex:chat.errors.inbound-files-no-send-option';
|
|
101
|
+
deps.toast.warning(deps.translation.translateSync(key));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* File catalogs that accept every supported file in the batch, then matching visible picker actions.
|
|
106
|
+
*/
|
|
107
|
+
async function resolvePickerActionsForAllFiles(deps, files) {
|
|
108
|
+
const analysis = await analyzeInboundFiles(deps, files);
|
|
109
|
+
return analysis.actions;
|
|
110
|
+
}
|
|
111
|
+
async function promptComposerActionChoice(deps, actions, fileCount) {
|
|
112
|
+
const { AXConversationComposerActionChoiceDialogComponent } = await import('./acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs');
|
|
113
|
+
const result = await deps.popupService.open(AXConversationComposerActionChoiceDialogComponent, {
|
|
114
|
+
title: deps.translation.translateSync('@acorex:chat.dialog.choose-send-option.title'),
|
|
115
|
+
size: 'sm',
|
|
116
|
+
closeButton: true,
|
|
117
|
+
header: true,
|
|
118
|
+
inputs: {
|
|
119
|
+
actions,
|
|
120
|
+
fileCount,
|
|
121
|
+
composerActionRegistry: deps.composerActionRegistry,
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
const action = result?.data;
|
|
125
|
+
if (!action?.component && !action?.componentLoader) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
return action;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Match dropped/pasted files to composer picker action(s) and open the popup.
|
|
132
|
+
* Unsupported files are skipped after a warning toast; supported files continue.
|
|
133
|
+
* @returns true when a picker popup was opened
|
|
134
|
+
*/
|
|
135
|
+
async function openComposerPickerForFiles(deps, files) {
|
|
136
|
+
if (!files.length) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
const conversation = deps.conversation;
|
|
140
|
+
if (!conversation) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
const analysis = await analyzeInboundFiles(deps, files);
|
|
144
|
+
if (analysis.unsupportedFiles.length > 0) {
|
|
145
|
+
notifyPickerValidationErrors(deps.toast, deps.translation, analysis.unsupportedFiles);
|
|
146
|
+
}
|
|
147
|
+
if (!analysis.supportedFiles.length || !analysis.actions.length) {
|
|
148
|
+
notifyInboundFilesValidationFailures(deps, analysis);
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
let action = analysis.actions[0];
|
|
152
|
+
if (analysis.actions.length > 1) {
|
|
153
|
+
const chosen = await promptComposerActionChoice(deps, analysis.actions, analysis.supportedFiles.length);
|
|
154
|
+
if (!chosen) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
action = chosen;
|
|
158
|
+
}
|
|
159
|
+
const catalog = action.fileType;
|
|
160
|
+
if (!catalog) {
|
|
161
|
+
deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
const { accepted, rejected } = await deps.fileService.validateMany(analysis.supportedFiles, catalog);
|
|
165
|
+
if (rejected.length > 0) {
|
|
166
|
+
notifyPickerValidationErrors(deps.toast, deps.translation, rejected);
|
|
167
|
+
}
|
|
168
|
+
if (accepted.length === 0) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
await openComposerPickerPopup(deps.popupService, deps.composerService, deps.composerActionRegistry, action, conversation, accepted, deps.config);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
/** Extract OS-copied files from a paste event (e.g. Ctrl+V after copying a file in Explorer). */
|
|
175
|
+
function filesFromClipboardEvent(event) {
|
|
176
|
+
const items = event.clipboardData?.items;
|
|
177
|
+
if (!items?.length) {
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
const files = [];
|
|
181
|
+
for (let i = 0; i < items.length; i++) {
|
|
182
|
+
const item = items[i];
|
|
183
|
+
if (item.kind === 'file') {
|
|
184
|
+
const file = item.getAsFile();
|
|
185
|
+
if (file) {
|
|
186
|
+
files.push(file);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return files;
|
|
191
|
+
}
|
|
192
|
+
/** Whether a paste event target lies in the chat panel (not sidebar). */
|
|
193
|
+
function isPasteTargetInChatPanel(host, target) {
|
|
194
|
+
if (!(target instanceof Node) || !host.contains(target)) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
const excluded = host.querySelector('.conversation-sidebar-container, .sidebar-container');
|
|
198
|
+
if (excluded?.contains(target)) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
const chatMain = host.querySelector('.conversation-main-container, .main-area, .conversation-view');
|
|
202
|
+
if (chatMain) {
|
|
203
|
+
return chatMain.contains(target);
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
/** Handle Ctrl+V / paste when the clipboard holds files copied from the OS. */
|
|
208
|
+
async function handleConversationFilePaste(event, host, deps) {
|
|
209
|
+
if (!isPasteTargetInChatPanel(host, event.target)) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const files = filesFromClipboardEvent(event);
|
|
213
|
+
if (!files.length) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const handled = await openComposerPickerForFiles(deps, files);
|
|
217
|
+
if (handled) {
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
event.stopImmediatePropagation();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export { filesFromClipboardEvent, handleConversationFilePaste, isPasteTargetInChatPanel, openComposerPickerForFiles, resolvePickerActionsForAllFiles };
|
|
224
|
+
//# sourceMappingURL=acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs.map
|
package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1jb21wb3Nlci1waWNrZXItZm9yLWZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL21lc3NhZ2UtbGlzdC9vcGVuLWNvbXBvc2VyLXBpY2tlci1mb3ItZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhdkUsd0ZBQXdGO0FBQ3hGLFNBQVMsa0JBQWtCLENBQUMsUUFBOEM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBU0Qsb0VBQW9FO0FBQ3BFLEtBQUssVUFBVSw4QkFBOEIsQ0FDM0MsSUFBb0YsRUFDcEYsS0FBYSxFQUNiLFFBQWtCO0lBRWxCLE1BQU0sV0FBVyxHQUF1RCxFQUFFLENBQUM7SUFFM0UsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEs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OUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHR5cGUgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgdHlwZSB7IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9zZXIvY29tcG9zZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbiwgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vcmVnaXN0cmllcy9jb21wb3Nlci1hY3Rpb24ucmVnaXN0cnknO1xuaW1wb3J0IHsgbm90aWZ5UGlja2VyVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29tcG9zZXIvY29tcG9uZW50cy9zaGFyZWQvcGlja2VyLXVwbG9hZCc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdG9rZW5zL2NvbnZlcnNhdGlvbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IG9wZW5Db21wb3NlclBpY2tlclBvcHVwIH0gZnJvbSAnLi9vcGVuLWNvbXBvc2VyLXBpY2tlci1wb3B1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkNvbXBvc2VyUGlja2VyRm9yRmlsZXNEZXBzIHtcbiAgZmlsZVNlcnZpY2U6IEFYRmlsZVNlcnZpY2U7XG4gIGNvbXBvc2VyU2VydmljZTogQVhDb252ZXJzYXRpb25Db21wb3NlclNlcnZpY2U7XG4gIGNvbXBvc2VyQWN0aW9uUmVnaXN0cnk6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeTtcbiAgcG9wdXBTZXJ2aWNlOiBBWFBvcHVwU2VydmljZTtcbiAgdG9hc3Q6IEFYVG9hc3RTZXJ2aWNlO1xuICB0cmFuc2xhdGlvbjogQVhUcmFuc2xhdGlvblNlcnZpY2U7XG4gIGNvbnZlcnNhdGlvbjogQVhDb252ZXJzYXRpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjb25maWc6IFBpY2s8UmVxdWlyZWQ8QVhDb252ZXJzYXRpb25Db25maWc+LCAnbWF4RmlsZXNQZXJNZXNzYWdlJz47XG59XG5cbi8qKiBDYXRhbG9ncyByZWdpc3RlcmVkIG9uIHBpY2tlciBhY3Rpb25zIChjb252ZXJzYXRpb24taW1hZ2UsIGNvbnZlcnNhdGlvbi1maWxlLCDigKYpLiAqL1xuZnVuY3Rpb24gcGlja2VyQ2F0YWxvZ05hbWVzKHJlZ2lzdHJ5OiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uUmVnaXN0cnkpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgYWN0aW9uIG9mIHJlZ2lzdHJ5LmFjdGlvbnMoKSkge1xuICAgIGlmICgoYWN0aW9uLmNvbXBvbmVudCB8fCBhY3Rpb24uY29tcG9uZW50TG9hZGVyKSAmJiBhY3Rpb24uZmlsZVR5cGUpIHtcbiAgICAgIG5hbWVzLmFkZChhY3Rpb24uZmlsZVR5cGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLm5hbWVzXTtcbn1cblxuaW50ZXJmYWNlIEluYm91bmRGaWxlc0FuYWx5c2lzIHtcbiAgbWF0Y2hpbmdDYXRhbG9nczogc3RyaW5nW107XG4gIGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXTtcbiAgc3VwcG9ydGVkRmlsZXM6IEZpbGVbXTtcbiAgdW5zdXBwb3J0ZWRGaWxlczogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W107XG59XG5cbi8qKiBGaWxlcyB0aGF0IGFyZSBub3QgYWNjZXB0ZWQgYnkgYW55IHJlZ2lzdGVyZWQgcGlja2VyIGNhdGFsb2cuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0VW5zdXBwb3J0ZWRJbmJvdW5kRmlsZXMoXG4gIGRlcHM6IFBpY2s8T3BlbkNvbXBvc2VyUGlja2VyRm9yRmlsZXNEZXBzLCAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknPixcbiAgZmlsZXM6IEZpbGVbXSxcbiAgY2F0YWxvZ3M6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXT4ge1xuICBjb25zdCB1bnN1cHBvcnRlZDogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgYWNjZXB0ZWRCeUFueSA9IGZhbHNlO1xuICAgIGxldCBsYXN0RXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2F0YWxvZyBvZiBjYXRhbG9ncykge1xuICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgZGVwcy5maWxlU2VydmljZS52YWxpZGF0ZShmaWxlLCBjYXRhbG9nKTtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjY2VwdGVkQnlBbnkgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxhc3RFcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFhY2NlcHRlZEJ5QW55KSB7XG4gICAgICB1bnN1cHBvcnRlZC5wdXNoKHsgZmlsZSwgZXJyb3JzOiBsYXN0RXJyb3JzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYW5hbHl6ZUluYm91bmRGaWxlcyhcbiAgZGVwczogUGljazxcbiAgICBPcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4gICAgJ2ZpbGVTZXJ2aWNlJyB8ICdjb21wb3NlclNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknXG4gID4sXG4gIGZpbGVzOiBGaWxlW10sXG4pOiBQcm9taXNlPEluYm91bmRGaWxlc0FuYWx5c2lzPiB7XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgbWF0Y2hpbmdDYXRhbG9nczogW10sIGFjdGlvbnM6IFtdLCBzdXBwb3J0ZWRGaWxlczogW10sIHVuc3VwcG9ydGVkRmlsZXM6IFtdIH07XG4gIH1cblxuICBjb25zdCBjYXRhbG9ncyA9IHBpY2tlckNhdGFsb2dOYW1lcyhkZXBzLmNvbXBvc2VyQWN0aW9uUmVnaXN0cnkpO1xuICBjb25zdCB1bnN1cHBvcnRlZEZpbGVzID0gYXdhaXQgY29sbGVjdFVuc3VwcG9ydGVkSW5ib3VuZEZpbGVzKGRlcHMsIGZpbGVzLCBjYXRhbG9ncyk7XG4gIGNvbnN0IHVuc3VwcG9ydGVkU2V0ID0gbmV3IFNldCh1bnN1cHBvcnRlZEZpbGVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmZpbGUpKTtcbiAgY29uc3Qgc3VwcG9ydGVkRmlsZXMgPSBmaWxlcy5maWx0ZXIoKGZpbGUpID0+ICF1bnN1cHBvcnRlZFNldC5oYXMoZmlsZSkpO1xuXG4gIGlmIChzdXBwb3J0ZWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBtYXRjaGluZ0NhdGFsb2dzOiBbXSwgYWN0aW9uczogW10sIHN1cHBvcnRlZEZpbGVzOiBbXSwgdW5zdXBwb3J0ZWRGaWxlcyB9O1xuICB9XG5cbiAgY29uc3QgY29udGV4dCA9IGRlcHMuY29tcG9zZXJTZXJ2aWNlLmFjdGlvbkNvbnRleHQoKTtcbiAgY29uc3QgbWF0Y2hpbmdDYXRhbG9nczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGNhdGFsb2cgb2YgY2F0YWxvZ3MpIHtcbiAgICBjb25zdCB7IHJlamVjdGVkIH0gPSBhd2FpdCBkZXBzLmZpbGVTZXJ2aWNlLnZhbGlkYXRlTWFueShzdXBwb3J0ZWRGaWxlcywgY2F0YWxvZyk7XG4gICAgaWYgKHJlamVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbWF0Y2hpbmdDYXRhbG9ncy5wdXNoKGNhdGFsb2cpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYWN0aW9uczogQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbltdID0gW107XG5cbiAgZm9yIChjb25zdCBjYXRhbG9nIG9mIG1hdGNoaW5nQ2F0YWxvZ3MpIHtcbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBkZXBzLmNvbXBvc2VyQWN0aW9uUmVnaXN0cnkuZmluZFBpY2tlckFjdGlvbnNGb3JGaWxlVHlwZShjYXRhbG9nLCBjb250ZXh0KSkge1xuICAgICAgaWYgKCFzZWVuLmhhcyhhY3Rpb24uaWQpKSB7XG4gICAgICAgIHNlZW4uYWRkKGFjdGlvbi5pZCk7XG4gICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2hpbmdDYXRhbG9ncyxcbiAgICBhY3Rpb25zOiBhY3Rpb25zLnNvcnQoKGEsIGIpID0+IChiLnByaW9yaXR5ID8/IDApIC0gKGEucHJpb3JpdHkgPz8gMCkpLFxuICAgIHN1cHBvcnRlZEZpbGVzLFxuICAgIHVuc3VwcG9ydGVkRmlsZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUluYm91bmRGaWxlc1ZhbGlkYXRpb25GYWlsdXJlcyhcbiAgZGVwczogUGljazxPcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsICd0b2FzdCcgfCAndHJhbnNsYXRpb24nPixcbiAgYW5hbHlzaXM6IEluYm91bmRGaWxlc0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGlmIChhbmFseXNpcy5zdXBwb3J0ZWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoYW5hbHlzaXMudW5zdXBwb3J0ZWRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlcHMudG9hc3Qud2FybmluZyhkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5lcnJvcnMuaW5ib3VuZC1maWxlcy1ub25lLXN1cHBvcnRlZCcpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFuYWx5c2lzLmFjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3Qga2V5ID1cbiAgICAgIGFuYWx5c2lzLm1hdGNoaW5nQ2F0YWxvZ3MubGVuZ3RoID09PSAwXG4gICAgICAgID8gJ0BhY29yZXg6Y2hhdC5lcnJvcnMuaW5ib3VuZC1maWxlcy1ub25lLXN1cHBvcnRlZCdcbiAgICAgICAgOiAnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vLXNlbmQtb3B0aW9uJztcbiAgICBkZXBzLnRvYXN0Lndhcm5pbmcoZGVwcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKGtleSkpO1xuICB9XG59XG5cbi8qKlxuICogRmlsZSBjYXRhbG9ncyB0aGF0IGFjY2VwdCBldmVyeSBzdXBwb3J0ZWQgZmlsZSBpbiB0aGUgYmF0Y2gsIHRoZW4gbWF0Y2hpbmcgdmlzaWJsZSBwaWNrZXIgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQaWNrZXJBY3Rpb25zRm9yQWxsRmlsZXMoXG4gIGRlcHM6IFBpY2s8T3BlbkNvbXBvc2VyUGlja2VyRm9yRmlsZXNEZXBzLCAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyU2VydmljZScgfCAnY29tcG9zZXJBY3Rpb25SZWdpc3RyeSc+LFxuICBmaWxlczogRmlsZVtdLFxuKTogUHJvbWlzZTxBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uW10+IHtcbiAgY29uc3QgYW5hbHlzaXMgPSBhd2FpdCBhbmFseXplSW5ib3VuZEZpbGVzKGRlcHMsIGZpbGVzKTtcbiAgcmV0dXJuIGFuYWx5c2lzLmFjdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdENvbXBvc2VyQWN0aW9uQ2hvaWNlKFxuICBkZXBzOiBPcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4gIGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXSxcbiAgZmlsZUNvdW50OiBudW1iZXIsXG4pOiBQcm9taXNlPEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uQ2hvaWNlRGlhbG9nQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vY29tcG9zZXItYWN0aW9uLWNob2ljZS1kaWFsb2cuY29tcG9uZW50Jyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcHMucG9wdXBTZXJ2aWNlLm9wZW4oQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbkNob2ljZURpYWxvZ0NvbXBvbmVudCwge1xuICAgIHRpdGxlOiBkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5kaWFsb2cuY2hvb3NlLXNlbmQtb3B0aW9uLnRpdGxlJyksXG4gICAgc2l6ZTogJ3NtJyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBoZWFkZXI6IHRydWUsXG4gICAgaW5wdXRzOiB7XG4gICAgICBhY3Rpb25zLFxuICAgICAgZmlsZUNvdW50LFxuICAgICAgY29tcG9zZXJBY3Rpb25SZWdpc3RyeTogZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGFjdGlvbiA9IHJlc3VsdD8uZGF0YSBhcyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uIHwgdW5kZWZpbmVkO1xuICBpZiAoIWFjdGlvbj8uY29tcG9uZW50ICYmICFhY3Rpb24/LmNvbXBvbmVudExvYWRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFjdGlvbjtcbn1cblxuLyoqXG4gKiBNYXRjaCBkcm9wcGVkL3Bhc3RlZCBmaWxlcyB0byBjb21wb3NlciBwaWNrZXIgYWN0aW9uKHMpIGFuZCBvcGVuIHRoZSBwb3B1cC5cbiAqIFVuc3VwcG9ydGVkIGZpbGVzIGFyZSBza2lwcGVkIGFmdGVyIGEgd2FybmluZyB0b2FzdDsgc3VwcG9ydGVkIGZpbGVzIGNvbnRpbnVlLlxuICogQHJldHVybnMgdHJ1ZSB3aGVuIGEgcGlja2VyIHBvcHVwIHdhcyBvcGVuZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzKFxuICBkZXBzOiBPcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4gIGZpbGVzOiBGaWxlW10sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBkZXBzLmNvbnZlcnNhdGlvbjtcbiAgaWYgKCFjb252ZXJzYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhbmFseXNpcyA9IGF3YWl0IGFuYWx5emVJbmJvdW5kRmlsZXMoZGVwcywgZmlsZXMpO1xuXG4gIGlmIChhbmFseXNpcy51bnN1cHBvcnRlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICBub3RpZnlQaWNrZXJWYWxpZGF0aW9uRXJyb3JzKGRlcHMudG9hc3QsIGRlcHMudHJhbnNsYXRpb24sIGFuYWx5c2lzLnVuc3VwcG9ydGVkRmlsZXMpO1xuICB9XG5cbiAgaWYgKCFhbmFseXNpcy5zdXBwb3J0ZWRGaWxlcy5sZW5ndGggfHwgIWFuYWx5c2lzLmFjdGlvbnMubGVuZ3RoKSB7XG4gICAgbm90aWZ5SW5ib3VuZEZpbGVzVmFsaWRhdGlvbkZhaWx1cmVzKGRlcHMsIGFuYWx5c2lzKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgYWN0aW9uID0gYW5hbHlzaXMuYWN0aW9uc1swXTtcbiAgaWYgKGFuYWx5c2lzLmFjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGNob3NlbiA9IGF3YWl0IHByb21wdENvbXBvc2VyQWN0aW9uQ2hvaWNlKGRlcHMsIGFuYWx5c2lzLmFjdGlvbnMsIGFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLmxlbmd0aCk7XG4gICAgaWYgKCFjaG9zZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYWN0aW9uID0gY2hvc2VuO1xuICB9XG5cbiAgY29uc3QgY2F0YWxvZyA9IGFjdGlvbi5maWxlVHlwZTtcbiAgaWYgKCFjYXRhbG9nKSB7XG4gICAgZGVwcy50b2FzdC53YXJuaW5nKGRlcHMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vbmUtc3VwcG9ydGVkJykpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgYWNjZXB0ZWQsIHJlamVjdGVkIH0gPSBhd2FpdCBkZXBzLmZpbGVTZXJ2aWNlLnZhbGlkYXRlTWFueShhbmFseXNpcy5zdXBwb3J0ZWRGaWxlcywgY2F0YWxvZyk7XG4gIGlmIChyZWplY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgbm90aWZ5UGlja2VyVmFsaWRhdGlvbkVycm9ycyhkZXBzLnRvYXN0LCBkZXBzLnRyYW5zbGF0aW9uLCByZWplY3RlZCk7XG4gIH1cbiAgaWYgKGFjY2VwdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IG9wZW5Db21wb3NlclBpY2tlclBvcHVwKFxuICAgIGRlcHMucG9wdXBTZXJ2aWNlLFxuICAgIGRlcHMuY29tcG9zZXJTZXJ2aWNlLFxuICAgIGRlcHMuY29tcG9zZXJBY3Rpb25SZWdpc3RyeSxcbiAgICBhY3Rpb24sXG4gICAgY29udmVyc2F0aW9uLFxuICAgIGFjY2VwdGVkLFxuICAgIGRlcHMuY29uZmlnLFxuICApO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIEV4dHJhY3QgT1MtY29waWVkIGZpbGVzIGZyb20gYSBwYXN0ZSBldmVudCAoZS5nLiBDdHJsK1YgYWZ0ZXIgY29weWluZyBhIGZpbGUgaW4gRXhwbG9yZXIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGVzRnJvbUNsaXBib2FyZEV2ZW50KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IEZpbGVbXSB7XG4gIGNvbnN0IGl0ZW1zID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uaXRlbXM7XG4gIGlmICghaXRlbXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICBpZiAoaXRlbS5raW5kID09PSAnZmlsZScpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVzO1xufVxuXG4vKiogV2hldGhlciBhIHBhc3RlIGV2ZW50IHRhcmdldCBsaWVzIGluIHRoZSBjaGF0IHBhbmVsIChub3Qgc2lkZWJhcikuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXN0ZVRhcmdldEluQ2hhdFBhbmVsKGhvc3Q6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBOb2RlKSB8fCAhaG9zdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhjbHVkZWQgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJy5jb252ZXJzYXRpb24tc2lkZWJhci1jb250YWluZXIsIC5zaWRlYmFyLWNvbnRhaW5lcicpO1xuICBpZiAoZXhjbHVkZWQ/LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjaGF0TWFpbiA9IGhvc3QucXVlcnlTZWxlY3RvcignLmNvbnZlcnNhdGlvbi1tYWluLWNvbnRhaW5lciwgLm1haW4tYXJlYSwgLmNvbnZlcnNhdGlvbi12aWV3Jyk7XG4gIGlmIChjaGF0TWFpbikge1xuICAgIHJldHVybiBjaGF0TWFpbi5jb250YWlucyh0YXJnZXQpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBIYW5kbGUgQ3RybCtWIC8gcGFzdGUgd2hlbiB0aGUgY2xpcGJvYXJkIGhvbGRzIGZpbGVzIGNvcGllZCBmcm9tIHRoZSBPUy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVDb252ZXJzYXRpb25GaWxlUGFzdGUoXG4gIGV2ZW50OiBDbGlwYm9hcmRFdmVudCxcbiAgaG9zdDogSFRNTEVsZW1lbnQsXG4gIGRlcHM6IE9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWlzUGFzdGVUYXJnZXRJbkNoYXRQYW5lbChob3N0LCBldmVudC50YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmlsZXMgPSBmaWxlc0Zyb21DbGlwYm9hcmRFdmVudChldmVudCk7XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IG9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzKGRlcHMsIGZpbGVzKTtcbiAgaWYgKGhhbmRsZWQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iXX0="],"names":[],"mappings":";;;AACO,eAAe,uBAAuB,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;AAC5H,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,eAAe,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC;AAC/G,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;AACvC,QAAQ,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;AAC9C,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,WAAW,EAAE,IAAI;AACzB,QAAQ,MAAM,EAAE,KAAK;AACrB,QAAQ,UAAU,EAAE,CAAC,uCAAuC,CAAC;AAC7D,QAAQ,MAAM,EAAE;AAChB,YAAY,YAAY;AACxB,YAAY,QAAQ,EAAE,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7D,YAAY,YAAY,EAAE,KAAK;AAC/B,YAAY,OAAO,EAAE,eAAe;AACpC,SAAS;AACT,KAAK,CAAC;AACN;;ACjBA;AACA,SAAS,kBAAkB,CAAC,QAAQ,EAAE;AACtC,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;AAC3B,IAAI,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;AAC7C,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,QAAQ,EAAE;AAC7E,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC;AACrB;AACA;AACA,eAAe,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACrE,IAAI,MAAM,WAAW,GAAG,EAAE;AAC1B,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,aAAa,GAAG,KAAK;AACjC,QAAQ,IAAI,UAAU,GAAG,EAAE;AAC3B,QAAQ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACxC,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;AACzE,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,gBAAgB,aAAa,GAAG,IAAI;AACpC,gBAAgB;AAChB,YAAY;AACZ,YAAY,UAAU,GAAG,MAAM;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC1D,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,WAAW;AACtB;AACA,eAAe,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,QAAQ,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;AAC9F,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACpE,IAAI,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;AACxF,IAAI,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/E,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5E,IAAI,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,QAAQ,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE;AAC1F,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACxD,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAC/B,IAAI,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACpC,QAAQ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC;AACzF,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAY,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1C,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,EAAE;AACtB,IAAI,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE;AAC5C,QAAQ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AACzG,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACtC,gBAAgB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AACnC,gBAAgB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO;AACX,QAAQ,gBAAgB;AACxB,QAAQ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AAC9E,QAAQ,cAAc;AACtB,QAAQ,gBAAgB;AACxB,KAAK;AACL;AACA,SAAS,oCAAoC,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC9D,IAAI,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AACpD,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,kDAAkD,CAAC,CAAC;AAClH,QAAQ;AACR,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,QAAQ,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,KAAK;AACzD,cAAc;AACd,cAAc,kDAAkD;AAChE,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC/D,IAAI;AACJ;AACA;AACA;AACA;AACO,eAAe,+BAA+B,CAAC,IAAI,EAAE,KAAK,EAAE;AACnE,IAAI,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3D,IAAI,OAAO,QAAQ,CAAC,OAAO;AAC3B;AACA,eAAe,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;AACpE,IAAI,MAAM,EAAE,iDAAiD,EAAE,GAAG,MAAM,OAAO,uFAA2C,CAAC;AAC3H,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iDAAiD,EAAE;AACnG,QAAQ,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,8CAA8C,CAAC;AAC7F,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,WAAW,EAAE,IAAI;AACzB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,MAAM,EAAE;AAChB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB,YAAY,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;AAC/D,SAAS;AACT,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG,MAAM,EAAE,IAAI;AAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE;AACxD,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE;AAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AAC1C,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3D,IAAI,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,QAAQ,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC;AAC7F,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;AACrE,QAAQ,oCAAoC,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC5D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,QAAQ,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;AAC/G,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,MAAM,GAAG,MAAM;AACvB,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ;AACnC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,kDAAkD,CAAC,CAAC;AAC9G,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;AACxG,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,QAAQ,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC5E,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;AACpJ,IAAI,OAAO,IAAI;AACf;AACA;AACO,SAAS,uBAAuB,CAAC,KAAK,EAAE;AAC/C,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,KAAK;AAC5C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACxB,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,EAAE;AACpB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7B,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAClC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AACzC,YAAY,IAAI,IAAI,EAAE;AACtB,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA;AACO,SAAS,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE;AACvD,IAAI,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,qDAAqD,CAAC;AAC9F,IAAI,IAAI,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpC,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,8DAA8D,CAAC;AACvG,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxC,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA;AACO,eAAe,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACrE,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;AACvD,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC;AACjE,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,KAAK,CAAC,cAAc,EAAE;AAC9B,QAAQ,KAAK,CAAC,wBAAwB,EAAE;AACxC,IAAI;AACJ;;;;"}
|