@acorex/components 20.8.32 → 20.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/conversation/README.md +462 -2
  2. package/conversation/index.d.ts +5400 -485
  3. package/fesm2022/acorex-components-calendar.mjs +3 -2
  4. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  5. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +13711 -0
  6. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +1 -0
  7. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +119 -0
  8. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +1 -0
  9. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +59 -0
  10. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +432 -0
  12. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +177 -0
  14. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +1 -0
  15. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +54 -0
  16. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
  18. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +100 -0
  20. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +1 -0
  21. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +121 -0
  22. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +1 -0
  23. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +84 -0
  24. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +1 -0
  25. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +238 -0
  26. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +1 -0
  27. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +1080 -0
  28. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +1 -0
  29. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +102 -0
  30. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +1 -0
  31. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +90 -0
  32. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +1 -0
  33. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
  34. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
  35. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +44 -0
  36. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +1 -0
  37. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +64 -0
  38. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +1 -0
  39. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +468 -0
  40. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +1 -0
  41. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +125 -0
  42. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +1 -0
  43. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +50 -0
  44. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +1 -0
  45. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
  46. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
  47. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +77 -0
  48. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +1 -0
  49. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +407 -0
  50. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +1 -0
  51. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +83 -0
  52. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +1 -0
  53. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
  54. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
  55. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +266 -0
  56. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +1 -0
  57. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +149 -0
  58. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +1 -0
  59. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +118 -0
  60. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +1 -0
  61. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
  62. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
  63. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +140 -0
  64. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +1 -0
  65. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +33 -0
  66. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +1 -0
  67. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +172 -0
  68. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +1 -0
  69. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs +224 -0
  70. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map +1 -0
  71. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +81 -0
  72. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +1 -0
  73. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
  74. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
  75. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +537 -0
  76. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +1 -0
  77. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
  78. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
  79. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +68 -0
  80. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +1 -0
  81. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +95 -0
  82. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +1 -0
  83. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +187 -0
  84. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +1 -0
  85. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +170 -0
  86. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +1 -0
  87. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +750 -0
  88. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +1 -0
  89. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +103 -0
  90. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +1 -0
  91. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +55 -0
  92. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +1 -0
  93. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +109 -0
  94. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +1 -0
  95. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +105 -0
  96. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +1 -0
  97. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +62 -0
  98. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +1 -0
  99. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +446 -0
  100. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +1 -0
  101. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +181 -0
  102. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +1 -0
  103. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +54 -0
  104. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +1 -0
  105. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
  106. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
  107. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +328 -0
  108. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +1 -0
  109. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +270 -0
  110. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +1 -0
  111. package/fesm2022/acorex-components-conversation.mjs +1 -1402
  112. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  113. package/fesm2022/acorex-components-data-table.mjs +2 -2
  114. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  115. package/fesm2022/acorex-components-rest-api-generator.mjs +2 -2
  116. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  117. package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
  118. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  119. package/fesm2022/acorex-components-step-wizard.mjs +2 -2
  120. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  121. package/fesm2022/acorex-components-tree-view-legacy.mjs +2 -2
  122. package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -1
  123. package/package.json +35 -39
  124. package/scheduler-picker/index.d.ts +2 -0
  125. package/conversation2/README.md +0 -463
  126. package/conversation2/index.d.ts +0 -6410
  127. package/fesm2022/acorex-components-conversation2.mjs +0 -22331
  128. 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-CjVDCoJw.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-DSnNoz1N.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-message-renderer-state.component-DSnNoz1N.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9wbHVnaW5zL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL3NoYXJlZC9tZXNzYWdlLXJlbmRlcmVyLXN0YXRlLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQW1DO0lBQzFFLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxNQUFtQyxFQUNuQyxZQUF1RDtJQUV2RCxPQUFPLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3JlZ2lzdHJpZXMvbWVzc2FnZS1yZW5kZXJlci5yZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2VEZWxpdmVyeVBlbmRpbmcoc3RhdHVzOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VTdGF0dXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gJ3NlbmRpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuU2hvd1JlbmRlcmVyQ29udGVudEVycm9yKFxuICBzdGF0dXM6IEFYQ29udmVyc2F0aW9uTWVzc2FnZVN0YXR1cyxcbiAgY29udGVudFN0YXRlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZSxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29udGVudFN0YXRlID09PSAnZXJyb3InICYmICFpc01lc3NhZ2VEZWxpdmVyeVBlbmRpbmcoc3RhdHVzKTtcbn1cbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL3BsdWdpbnMvbWVzc2FnZS1saXN0L2NvbXBvbmVudHMvc2hhcmVkL21lc3NhZ2UtcmVuZGVyZXItc3RhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFFL0U7OztHQUdHO0FBc0hILE1BQU0sT0FBTywyQ0FBMkM7SUFySHhEO1FBc0htQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSx3REFBc0MsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsa0RBQXlCLENBQUM7UUFFbEQsc0JB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QUEyQztrR0FBM0MsMkNBQTJDLHcvQ0FqSDVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVCxzbUNBakRTLFlBQVksK0JBQUUsaUJBQWlCLDBVQUFFLG1CQUFtQjs7MkZBbUhuRCwyQ0FBMkM7a0JBckh2RCxTQUFTOytCQUNFLHdDQUF3QyxXQUN6QyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxtQkFDOUMsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcmVnaXN0cmllcy9tZXNzYWdlLXJlbmRlcmVyLnJlZ2lzdHJ5JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZVV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL21lc3NhZ2UtdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBjYW5TaG93UmVuZGVyZXJDb250ZW50RXJyb3IgfSBmcm9tICcuL21lc3NhZ2UtcmVuZGVyZXItc3RhdGUuaGVscGVycyc7XG5cbi8qKlxuICogU2hhcmVkIFVJIGZvciBtZXNzYWdlIGJ1YmJsZSBib2RpZXM6IGZhaWxlZCBkZWxpdmVyeSAod2l0aCByZXRyeSkgYW5kIGNvbnRlbnQgbG9hZCBlcnJvcnMuXG4gKiBTZW5kaW5nIHN0YXRlIGlzIHNob3duIGluIHRoZSBtZXNzYWdlLWxpc3QgZm9vdGVyIG9ubHkg4oCUIG5vdCBoZXJlIChhdm9pZHMgbGF5b3V0IGdsaXRjaCBpbiBtZWRpYSBidWJibGVzKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtY29udmVyc2F0aW9uLW1lc3NhZ2UtcmVuZGVyZXItc3RhdGUnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWEJ1dHRvbkNvbXBvbmVudCwgQVhUcmFuc2xhdGlvbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoaGFzVmlzaWJsZUNocm9tZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlXCJcbiAgICAgICAgW2NsYXNzLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZS0tYmVsb3ddPVwicGxhY2VtZW50KCkgPT09ICdiZWxvdydcIlxuICAgICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQGFjb3JleDpjaGF0LnJlbmRlcmVyLXN0YXRlLm1lc3NhZ2Utc3RhdHVzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChzaG93RmFpbGVkKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19yb3cgYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19yb3ctLWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10cmlhbmdsZS1leGNsYW1hdGlvbiBheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX2ljb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19tc2dcIj57eyBkZWxpdmVyeUZhaWxlZFRleHQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3JldHJ5XCJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LnJlbmRlcmVyLXN0YXRlLnJldHJ5JylcIlxuICAgICAgICAgICAgICBbbG9va109XCInb3V0bGluZSdcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCInc20nXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJldHJ5QnVzeSgpXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZXRyeSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzaG93Q29udGVudEVycm9yKCkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fY29udGVudC1lcnJcIlxuICAgICAgICAgICAgW2NsYXNzLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fY29udGVudC1lcnItLWlubGluZV09XCJjb250ZW50RXJyb3JTdHlsZSgpID09PSAnaW5saW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3MuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19yb3ddPVwiY29udGVudEVycm9yU3R5bGUoKSA9PT0gJ2Jhbm5lcidcIlxuICAgICAgICAgICAgW2NsYXNzLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcm93LS13YXJuXT1cImNvbnRlbnRFcnJvclN0eWxlKCkgPT09ICdiYW5uZXInXCJcbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChjb250ZW50RXJyb3JJY29uQ2xhc3MoKTsgYXMgaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpY29uQ2xhc3MgKyAnIGF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9faWNvJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19tc2dcIj57eyBjb250ZW50RXJyb3JUZXh0KCkgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGNvbnRlbnRSZXRyeUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3JldHJ5XCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUudHJ5LWFnYWluJylcIlxuICAgICAgICAgICAgICAgIFtsb29rXT1cIidvdXRsaW5lJ1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtJ1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29udGVudFJldHJ5LmVtaXQoKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMC4zNzVyZW07XG4gICAgICAgIG1hcmdpbi1ibG9jazogMC4yNXJlbSAwO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlLS1iZWxvdyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMzc1cmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXJlbmRlcmVyLXN0YXRlX19jb250ZW50LWVyci0taW5saW5lIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM3NXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItNjAwKSk7XG4gICAgICAgIHBhZGRpbmc6IDAuMTI1cmVtIDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMzc1cmVtIDAuNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXgtc3lzLWJvcmRlci1yYWRpdXMpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3Jvdy0tZGFuZ2VyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItbGlnaHRlc3Qtc3VyZmFjZSkpO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItNzAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX3Jvdy0td2FybiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itd2FybmluZy1saWdodGVzdC1zdXJmYWNlKSk7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXdhcm5pbmctODAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX2ljbyB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tcmVuZGVyZXItc3RhdGVfX21zZyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi1yZW5kZXJlci1zdGF0ZV9fcmV0cnkge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlclN0YXRlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJzYXRpb24gPSBpbmplY3QoQVhDb252ZXJzYXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICByZWFkb25seSB0cmFuc2xhdGlvbiA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgcmVuZGVyZXJTdGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyU3RhdGU+KCk7XG4gIHJlYWRvbmx5IG1lc3NhZ2UgPSBpbnB1dC5yZXF1aXJlZDxBWENvbnZlcnNhdGlvbk1lc3NhZ2U+KCk7XG5cbiAgcmVhZG9ubHkgY29udGVudEVycm9yTGFiZWwgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGRlbGl2ZXJ5RmFpbGVkTGFiZWwgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHNob3dDb250ZW50RXJyb3JDaHJvbWUgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgY29udGVudEVycm9yU3R5bGUgPSBpbnB1dDwnYmFubmVyJyB8ICdpbmxpbmUnPignYmFubmVyJyk7XG4gIHJlYWRvbmx5IGNvbnRlbnRFcnJvckljb25DbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgcGxhY2VtZW50ID0gaW5wdXQ8J2Fib3ZlJyB8ICdiZWxvdyc+KCdhYm92ZScpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnRSZXRyeUVuYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGNvbnRlbnRSZXRyeSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnVzeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50VXNlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29udmVyc2F0aW9uPy5jdXJyZW50VXNlcigpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzT3duID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1zZyA9IHRoaXMubWVzc2FnZSgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyKCk7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VVdGlsc1NlcnZpY2UuaXNPd25NZXNzYWdlKG1zZywgdXNlci5pZCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNob3dGYWlsZWQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlbmRlcmVyU3RhdGUoKS5kZWxpdmVyeVN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgdGhpcy5pc093bigpLFxuICApO1xuXG4gIHJlYWRvbmx5IHNob3dDb250ZW50RXJyb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyBjb250ZW50U3RhdGUgfSA9IHRoaXMucmVuZGVyZXJTdGF0ZSgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNob3dDb250ZW50RXJyb3JDaHJvbWUoKSAmJlxuICAgICAgY2FuU2hvd1JlbmRlcmVyQ29udGVudEVycm9yKHRoaXMubWVzc2FnZSgpLnN0YXR1cywgY29udGVudFN0YXRlKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhc1Zpc2libGVDaHJvbWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNob3dGYWlsZWQoKSB8fCB0aGlzLnNob3dDb250ZW50RXJyb3IoKSk7XG5cbiAgcmVhZG9ubHkgY29udGVudEVycm9yVGV4dCA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICB0aGlzLmNvbnRlbnRFcnJvckxhYmVsKCkgPz8gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUuY291bGQtbm90LWxvYWQtY29udGVudCcpLFxuICApO1xuXG4gIHJlYWRvbmx5IGRlbGl2ZXJ5RmFpbGVkVGV4dCA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICB0aGlzLmRlbGl2ZXJ5RmFpbGVkTGFiZWwoKSA/P1xuICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUuY291bGQtbm90LXNlbmQtbWVzc2FnZScpLFxuICApO1xuXG4gIGFzeW5jIG9uUmV0cnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbXNnID0gdGhpcy5tZXNzYWdlKCk7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJldHJ5QnVzeS5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29udmVyc2F0aW9uLnJldHJ5RmFpbGVkTWVzc2FnZShtc2cuaWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJldHJ5QnVzeS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19"],"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-CjVDCoJw.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-CbNyy2Ws.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs","sources":["../tmp-esm2022/conversation/lib/components/message-list/open-composer-picker-popup.js","../tmp-esm2022/conversation/lib/components/message-list/open-composer-picker-for-files.js"],"sourcesContent":["import { resolveComposerMaxFiles } from '../../plugins/composer/composer-upload.config';\nexport async function openComposerPickerPopup(popupService, composerService, registry, action, conversation, files, config) {\n const component = action.component ?? (action.componentLoader ? await action.componentLoader() : undefined);\n if (!component || files.length === 0) {\n return;\n }\n await popupService.open(component, {\n title: registry.getActionLabel(action),\n size: 'md',\n closeButton: true,\n header: false,\n panelClass: ['ax-conversation-composer-picker-popup'],\n inputs: {\n conversation,\n maxFiles: resolveComposerMaxFiles(action, config),\n initialFiles: files,\n service: composerService,\n },\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1jb21wb3Nlci1waWNrZXItcG9wdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2NvbXBvbmVudHMvbWVzc2FnZS1saXN0L29wZW4tY29tcG9zZXItcGlja2VyLXBvcHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBR3hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLFlBQTRCLEVBQzVCLGVBQThDLEVBQzlDLFFBQThDLEVBQzlDLE1BQW9DLEVBQ3BDLFlBQTRCLEVBQzVCLEtBQWEsRUFDYixNQUFrRTtJQUVsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVHLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDakMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksRUFBRSxJQUFJO1FBQ1YsV0FBVyxFQUFFLElBQUk7UUFDakIsTUFBTSxFQUFFLEtBQUs7UUFDYixVQUFVLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztRQUNyRCxNQUFNLEVBQUU7WUFDTixZQUFZO1lBQ1osUUFBUSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDakQsWUFBWSxFQUFFLEtBQUs7WUFDbkIsT0FBTyxFQUFFLGVBQWU7U0FDekI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9zZXIvY29tcG9zZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb24sIEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3JlZ2lzdHJpZXMvY29tcG9zZXItYWN0aW9uLnJlZ2lzdHJ5JztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbXBvc2VyTWF4RmlsZXMgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvbXBvc2VyL2NvbXBvc2VyLXVwbG9hZC5jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3Rva2Vucy9jb252ZXJzYXRpb24tY29uZmlnLmludGVyZmFjZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQ29tcG9zZXJQaWNrZXJQb3B1cChcbiAgcG9wdXBTZXJ2aWNlOiBBWFBvcHVwU2VydmljZSxcbiAgY29tcG9zZXJTZXJ2aWNlOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyU2VydmljZSxcbiAgcmVnaXN0cnk6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSxcbiAgYWN0aW9uOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uLFxuICBjb252ZXJzYXRpb246IEFYQ29udmVyc2F0aW9uLFxuICBmaWxlczogRmlsZVtdLFxuICBjb25maWc6IFBpY2s8UmVxdWlyZWQ8QVhDb252ZXJzYXRpb25Db25maWc+LCAnbWF4RmlsZXNQZXJNZXNzYWdlJz4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29tcG9uZW50ID0gYWN0aW9uLmNvbXBvbmVudCA/PyAoYWN0aW9uLmNvbXBvbmVudExvYWRlciA/IGF3YWl0IGFjdGlvbi5jb21wb25lbnRMb2FkZXIoKSA6IHVuZGVmaW5lZCk7XG4gIGlmICghY29tcG9uZW50IHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHBvcHVwU2VydmljZS5vcGVuKGNvbXBvbmVudCwge1xuICAgIHRpdGxlOiByZWdpc3RyeS5nZXRBY3Rpb25MYWJlbChhY3Rpb24pLFxuICAgIHNpemU6ICdtZCcsXG4gICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgaGVhZGVyOiBmYWxzZSxcbiAgICBwYW5lbENsYXNzOiBbJ2F4LWNvbnZlcnNhdGlvbi1jb21wb3Nlci1waWNrZXItcG9wdXAnXSxcbiAgICBpbnB1dHM6IHtcbiAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgIG1heEZpbGVzOiByZXNvbHZlQ29tcG9zZXJNYXhGaWxlcyhhY3Rpb24sIGNvbmZpZyksXG4gICAgICBpbml0aWFsRmlsZXM6IGZpbGVzLFxuICAgICAgc2VydmljZTogY29tcG9zZXJTZXJ2aWNlLFxuICAgIH0sXG4gIH0pO1xufVxuIl19","import { notifyPickerValidationErrors } from '../../plugins/composer/components/shared/picker-upload';\nimport { openComposerPickerPopup } from './open-composer-picker-popup';\n/** Catalogs registered on picker actions (conversation-image, conversation-file, …). */\nfunction pickerCatalogNames(registry) {\n const names = new Set();\n for (const action of registry.actions()) {\n if ((action.component || action.componentLoader) && action.fileType) {\n names.add(action.fileType);\n }\n }\n return [...names];\n}\n/** Files that are not accepted by any registered picker catalog. */\nasync function collectUnsupportedInboundFiles(deps, files, catalogs) {\n const unsupported = [];\n for (const file of files) {\n let acceptedByAny = false;\n let lastErrors = [];\n for (const catalog of catalogs) {\n const errors = await deps.fileService.validate(file, catalog);\n if (errors.length === 0) {\n acceptedByAny = true;\n break;\n }\n lastErrors = errors;\n }\n if (!acceptedByAny) {\n unsupported.push({ file, errors: lastErrors });\n }\n }\n return unsupported;\n}\nasync function analyzeInboundFiles(deps, files) {\n if (!files.length) {\n return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles: [] };\n }\n const catalogs = pickerCatalogNames(deps.composerActionRegistry);\n const unsupportedFiles = await collectUnsupportedInboundFiles(deps, files, catalogs);\n const unsupportedSet = new Set(unsupportedFiles.map((entry) => entry.file));\n const supportedFiles = files.filter((file) => !unsupportedSet.has(file));\n if (supportedFiles.length === 0) {\n return { matchingCatalogs: [], actions: [], supportedFiles: [], unsupportedFiles };\n }\n const context = deps.composerService.actionContext();\n const matchingCatalogs = [];\n for (const catalog of catalogs) {\n const { rejected } = await deps.fileService.validateMany(supportedFiles, catalog);\n if (rejected.length === 0) {\n matchingCatalogs.push(catalog);\n }\n }\n const seen = new Set();\n const actions = [];\n for (const catalog of matchingCatalogs) {\n for (const action of deps.composerActionRegistry.findPickerActionsForFileType(catalog, context)) {\n if (!seen.has(action.id)) {\n seen.add(action.id);\n actions.push(action);\n }\n }\n }\n return {\n matchingCatalogs,\n actions: actions.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)),\n supportedFiles,\n unsupportedFiles,\n };\n}\nfunction notifyInboundFilesValidationFailures(deps, analysis) {\n if (analysis.supportedFiles.length === 0) {\n if (analysis.unsupportedFiles.length === 0) {\n deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));\n }\n return;\n }\n if (analysis.actions.length === 0) {\n const key = analysis.matchingCatalogs.length === 0\n ? '@acorex:chat.errors.inbound-files-none-supported'\n : '@acorex:chat.errors.inbound-files-no-send-option';\n deps.toast.warning(deps.translation.translateSync(key));\n }\n}\n/**\n * File catalogs that accept every supported file in the batch, then matching visible picker actions.\n */\nexport async function resolvePickerActionsForAllFiles(deps, files) {\n const analysis = await analyzeInboundFiles(deps, files);\n return analysis.actions;\n}\nasync function promptComposerActionChoice(deps, actions, fileCount) {\n const { AXConversationComposerActionChoiceDialogComponent } = await import('./composer-action-choice-dialog.component');\n const result = await deps.popupService.open(AXConversationComposerActionChoiceDialogComponent, {\n title: deps.translation.translateSync('@acorex:chat.dialog.choose-send-option.title'),\n size: 'sm',\n closeButton: true,\n header: true,\n inputs: {\n actions,\n fileCount,\n composerActionRegistry: deps.composerActionRegistry,\n },\n });\n const action = result?.data;\n if (!action?.component && !action?.componentLoader) {\n return undefined;\n }\n return action;\n}\n/**\n * Match dropped/pasted files to composer picker action(s) and open the popup.\n * Unsupported files are skipped after a warning toast; supported files continue.\n * @returns true when a picker popup was opened\n */\nexport async function openComposerPickerForFiles(deps, files) {\n if (!files.length) {\n return false;\n }\n const conversation = deps.conversation;\n if (!conversation) {\n return false;\n }\n const analysis = await analyzeInboundFiles(deps, files);\n if (analysis.unsupportedFiles.length > 0) {\n notifyPickerValidationErrors(deps.toast, deps.translation, analysis.unsupportedFiles);\n }\n if (!analysis.supportedFiles.length || !analysis.actions.length) {\n notifyInboundFilesValidationFailures(deps, analysis);\n return false;\n }\n let action = analysis.actions[0];\n if (analysis.actions.length > 1) {\n const chosen = await promptComposerActionChoice(deps, analysis.actions, analysis.supportedFiles.length);\n if (!chosen) {\n return false;\n }\n action = chosen;\n }\n const catalog = action.fileType;\n if (!catalog) {\n deps.toast.warning(deps.translation.translateSync('@acorex:chat.errors.inbound-files-none-supported'));\n return false;\n }\n const { accepted, rejected } = await deps.fileService.validateMany(analysis.supportedFiles, catalog);\n if (rejected.length > 0) {\n notifyPickerValidationErrors(deps.toast, deps.translation, rejected);\n }\n if (accepted.length === 0) {\n return false;\n }\n await openComposerPickerPopup(deps.popupService, deps.composerService, deps.composerActionRegistry, action, conversation, accepted, deps.config);\n return true;\n}\n/** Extract OS-copied files from a paste event (e.g. Ctrl+V after copying a file in Explorer). */\nexport function filesFromClipboardEvent(event) {\n const items = event.clipboardData?.items;\n if (!items?.length) {\n return [];\n }\n const files = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n return files;\n}\n/** Whether a paste event target lies in the chat panel (not sidebar). */\nexport function isPasteTargetInChatPanel(host, target) {\n if (!(target instanceof Node) || !host.contains(target)) {\n return false;\n }\n const excluded = host.querySelector('.conversation-sidebar-container, .sidebar-container');\n if (excluded?.contains(target)) {\n return false;\n }\n const chatMain = host.querySelector('.conversation-main-container, .main-area, .conversation-view');\n if (chatMain) {\n return chatMain.contains(target);\n }\n return true;\n}\n/** Handle Ctrl+V / paste when the clipboard holds files copied from the OS. */\nexport async function handleConversationFilePaste(event, host, deps) {\n if (!isPasteTargetInChatPanel(host, event.target)) {\n return;\n }\n const files = filesFromClipboardEvent(event);\n if (!files.length) {\n return;\n }\n const handled = await openComposerPickerForFiles(deps, files);\n if (handled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi1jb21wb3Nlci1waWNrZXItZm9yLWZpbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL21lc3NhZ2UtbGlzdC9vcGVuLWNvbXBvc2VyLXBpY2tlci1mb3ItZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFdEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFhdkUsd0ZBQXdGO0FBQ3hGLFNBQVMsa0JBQWtCLENBQUMsUUFBOEM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNoQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBU0Qsb0VBQW9FO0FBQ3BFLEtBQUssVUFBVSw4QkFBOEIsQ0FDM0MsSUFBa0csRUFDbEcsS0FBYSxFQUNiLFFBQWtCO0lBRWxCLE1BQU0sV0FBVyxHQUF1RCxFQUFFLENBQUM7SUFFM0UsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEs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OUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHR5cGUgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgdHlwZSB7IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9zZXIvY29tcG9zZXIuc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbiwgQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vcmVnaXN0cmllcy9jb21wb3Nlci1hY3Rpb24ucmVnaXN0cnknO1xuaW1wb3J0IHsgbm90aWZ5UGlja2VyVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJy4uLy4uL3BsdWdpbnMvY29tcG9zZXIvY29tcG9uZW50cy9zaGFyZWQvcGlja2VyLXVwbG9hZCc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vdG9rZW5zL2NvbnZlcnNhdGlvbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IG9wZW5Db21wb3NlclBpY2tlclBvcHVwIH0gZnJvbSAnLi9vcGVuLWNvbXBvc2VyLXBpY2tlci1wb3B1cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMge1xuICBmaWxlU2VydmljZTogQVhGaWxlU2VydmljZTtcbiAgY29tcG9zZXJTZXJ2aWNlOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyU2VydmljZTtcbiAgY29tcG9zZXJBY3Rpb25SZWdpc3RyeTogQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvblJlZ2lzdHJ5O1xuICBwb3B1cFNlcnZpY2U6IEFYUG9wdXBTZXJ2aWNlO1xuICB0b2FzdDogQVhUb2FzdFNlcnZpY2U7XG4gIHRyYW5zbGF0aW9uOiBBWFRyYW5zbGF0aW9uU2VydmljZTtcbiAgY29udmVyc2F0aW9uOiBBWENvbnZlcnNhdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbmZpZzogUGljazxSZXF1aXJlZDxBWENvbnZlcnNhdGlvbkNvbmZpZz4sICdtYXhGaWxlc1Blck1lc3NhZ2UnPjtcbn1cblxuLyoqIENhdGFsb2dzIHJlZ2lzdGVyZWQgb24gcGlja2VyIGFjdGlvbnMgKGNvbnZlcnNhdGlvbi1pbWFnZSwgY29udmVyc2F0aW9uLWZpbGUsIOKApikuICovXG5mdW5jdGlvbiBwaWNrZXJDYXRhbG9nTmFtZXMocmVnaXN0cnk6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25SZWdpc3RyeSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBhY3Rpb24gb2YgcmVnaXN0cnkuYWN0aW9ucygpKSB7XG4gICAgaWYgKChhY3Rpb24uY29tcG9uZW50IHx8IGFjdGlvbi5jb21wb25lbnRMb2FkZXIpICYmIGFjdGlvbi5maWxlVHlwZSkge1xuICAgICAgbmFtZXMuYWRkKGFjdGlvbi5maWxlVHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ubmFtZXNdO1xufVxuXG5pbnRlcmZhY2UgQVhDb252ZXJzYXRpb25JbmJvdW5kRmlsZXNBbmFseXNpcyB7XG4gIG1hdGNoaW5nQ2F0YWxvZ3M6IHN0cmluZ1tdO1xuICBhY3Rpb25zOiBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uW107XG4gIHN1cHBvcnRlZEZpbGVzOiBGaWxlW107XG4gIHVuc3VwcG9ydGVkRmlsZXM6IHsgZmlsZTogRmlsZTsgZXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gfVtdO1xufVxuXG4vKiogRmlsZXMgdGhhdCBhcmUgbm90IGFjY2VwdGVkIGJ5IGFueSByZWdpc3RlcmVkIHBpY2tlciBjYXRhbG9nLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFVuc3VwcG9ydGVkSW5ib3VuZEZpbGVzKFxuICBkZXBzOiBQaWNrPEFYQ29udmVyc2F0aW9uT3BlbkNvbXBvc2VyUGlja2VyRm9yRmlsZXNEZXBzLCAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknPixcbiAgZmlsZXM6IEZpbGVbXSxcbiAgY2F0YWxvZ3M6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx7IGZpbGU6IEZpbGU7IGVycm9yczogQVhWYWxpZGF0aW9uUnVsZVJlc3VsdFtdIH1bXT4ge1xuICBjb25zdCB1bnN1cHBvcnRlZDogeyBmaWxlOiBGaWxlOyBlcnJvcnM6IEFYVmFsaWRhdGlvblJ1bGVSZXN1bHRbXSB9W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBsZXQgYWNjZXB0ZWRCeUFueSA9IGZhbHNlO1xuICAgIGxldCBsYXN0RXJyb3JzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2F0YWxvZyBvZiBjYXRhbG9ncykge1xuICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgZGVwcy5maWxlU2VydmljZS52YWxpZGF0ZShmaWxlLCBjYXRhbG9nKTtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjY2VwdGVkQnlBbnkgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxhc3RFcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFhY2NlcHRlZEJ5QW55KSB7XG4gICAgICB1bnN1cHBvcnRlZC5wdXNoKHsgZmlsZSwgZXJyb3JzOiBsYXN0RXJyb3JzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYW5hbHl6ZUluYm91bmRGaWxlcyhcbiAgZGVwczogUGljazxcbiAgICBBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcyxcbiAgICAnZmlsZVNlcnZpY2UnIHwgJ2NvbXBvc2VyU2VydmljZScgfCAnY29tcG9zZXJBY3Rpb25SZWdpc3RyeSdcbiAgPixcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8QVhDb252ZXJzYXRpb25JbmJvdW5kRmlsZXNBbmFseXNpcz4ge1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiB7IG1hdGNoaW5nQ2F0YWxvZ3M6IFtdLCBhY3Rpb25zOiBbXSwgc3VwcG9ydGVkRmlsZXM6IFtdLCB1bnN1cHBvcnRlZEZpbGVzOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgY2F0YWxvZ3MgPSBwaWNrZXJDYXRhbG9nTmFtZXMoZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5KTtcbiAgY29uc3QgdW5zdXBwb3J0ZWRGaWxlcyA9IGF3YWl0IGNvbGxlY3RVbnN1cHBvcnRlZEluYm91bmRGaWxlcyhkZXBzLCBmaWxlcywgY2F0YWxvZ3MpO1xuICBjb25zdCB1bnN1cHBvcnRlZFNldCA9IG5ldyBTZXQodW5zdXBwb3J0ZWRGaWxlcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5maWxlKSk7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVzID0gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiAhdW5zdXBwb3J0ZWRTZXQuaGFzKGZpbGUpKTtcblxuICBpZiAoc3VwcG9ydGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgbWF0Y2hpbmdDYXRhbG9nczogW10sIGFjdGlvbnM6IFtdLCBzdXBwb3J0ZWRGaWxlczogW10sIHVuc3VwcG9ydGVkRmlsZXMgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRleHQgPSBkZXBzLmNvbXBvc2VyU2VydmljZS5hY3Rpb25Db250ZXh0KCk7XG4gIGNvbnN0IG1hdGNoaW5nQ2F0YWxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBjYXRhbG9nIG9mIGNhdGFsb2dzKSB7XG4gICAgY29uc3QgeyByZWplY3RlZCB9ID0gYXdhaXQgZGVwcy5maWxlU2VydmljZS52YWxpZGF0ZU1hbnkoc3VwcG9ydGVkRmlsZXMsIGNhdGFsb2cpO1xuICAgIGlmIChyZWplY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgIG1hdGNoaW5nQ2F0YWxvZ3MucHVzaChjYXRhbG9nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgY2F0YWxvZyBvZiBtYXRjaGluZ0NhdGFsb2dzKSB7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LmZpbmRQaWNrZXJBY3Rpb25zRm9yRmlsZVR5cGUoY2F0YWxvZywgY29udGV4dCkpIHtcbiAgICAgIGlmICghc2Vlbi5oYXMoYWN0aW9uLmlkKSkge1xuICAgICAgICBzZWVuLmFkZChhY3Rpb24uaWQpO1xuICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoaW5nQ2F0YWxvZ3MsXG4gICAgYWN0aW9uczogYWN0aW9ucy5zb3J0KChhLCBiKSA9PiAoYi5wcmlvcml0eSA/PyAwKSAtIChhLnByaW9yaXR5ID8/IDApKSxcbiAgICBzdXBwb3J0ZWRGaWxlcyxcbiAgICB1bnN1cHBvcnRlZEZpbGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3RpZnlJbmJvdW5kRmlsZXNWYWxpZGF0aW9uRmFpbHVyZXMoXG4gIGRlcHM6IFBpY2s8QVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsICd0b2FzdCcgfCAndHJhbnNsYXRpb24nPixcbiAgYW5hbHlzaXM6IEFYQ29udmVyc2F0aW9uSW5ib3VuZEZpbGVzQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgaWYgKGFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChhbmFseXNpcy51bnN1cHBvcnRlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVwcy50b2FzdC53YXJuaW5nKGRlcHMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vbmUtc3VwcG9ydGVkJykpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCBrZXkgPVxuICAgICAgYW5hbHlzaXMubWF0Y2hpbmdDYXRhbG9ncy5sZW5ndGggPT09IDBcbiAgICAgICAgPyAnQGFjb3JleDpjaGF0LmVycm9ycy5pbmJvdW5kLWZpbGVzLW5vbmUtc3VwcG9ydGVkJ1xuICAgICAgICA6ICdAYWNvcmV4OmNoYXQuZXJyb3JzLmluYm91bmQtZmlsZXMtbm8tc2VuZC1vcHRpb24nO1xuICAgIGRlcHMudG9hc3Qud2FybmluZyhkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoa2V5KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWxlIGNhdGFsb2dzIHRoYXQgYWNjZXB0IGV2ZXJ5IHN1cHBvcnRlZCBmaWxlIGluIHRoZSBiYXRjaCwgdGhlbiBtYXRjaGluZyB2aXNpYmxlIHBpY2tlciBhY3Rpb25zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBpY2tlckFjdGlvbnNGb3JBbGxGaWxlcyhcbiAgZGVwczogUGljazxBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcywgJ2ZpbGVTZXJ2aWNlJyB8ICdjb21wb3NlclNlcnZpY2UnIHwgJ2NvbXBvc2VyQWN0aW9uUmVnaXN0cnknPixcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8QVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbltdPiB7XG4gIGNvbnN0IGFuYWx5c2lzID0gYXdhaXQgYW5hbHl6ZUluYm91bmRGaWxlcyhkZXBzLCBmaWxlcyk7XG4gIHJldHVybiBhbmFseXNpcy5hY3Rpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHRDb21wb3NlckFjdGlvbkNob2ljZShcbiAgZGVwczogQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4gIGFjdGlvbnM6IEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb25bXSxcbiAgZmlsZUNvdW50OiBudW1iZXIsXG4pOiBQcm9taXNlPEFYQ29udmVyc2F0aW9uQ29tcG9zZXJBY3Rpb24gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uQ2hvaWNlRGlhbG9nQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vY29tcG9zZXItYWN0aW9uLWNob2ljZS1kaWFsb2cuY29tcG9uZW50Jyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcHMucG9wdXBTZXJ2aWNlLm9wZW4oQVhDb252ZXJzYXRpb25Db21wb3NlckFjdGlvbkNob2ljZURpYWxvZ0NvbXBvbmVudCwge1xuICAgIHRpdGxlOiBkZXBzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5kaWFsb2cuY2hvb3NlLXNlbmQtb3B0aW9uLnRpdGxlJyksXG4gICAgc2l6ZTogJ3NtJyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBoZWFkZXI6IHRydWUsXG4gICAgaW5wdXRzOiB7XG4gICAgICBhY3Rpb25zLFxuICAgICAgZmlsZUNvdW50LFxuICAgICAgY29tcG9zZXJBY3Rpb25SZWdpc3RyeTogZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGFjdGlvbiA9IHJlc3VsdD8uZGF0YSBhcyBBWENvbnZlcnNhdGlvbkNvbXBvc2VyQWN0aW9uIHwgdW5kZWZpbmVkO1xuICBpZiAoIWFjdGlvbj8uY29tcG9uZW50ICYmICFhY3Rpb24/LmNvbXBvbmVudExvYWRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFjdGlvbjtcbn1cblxuLyoqXG4gKiBNYXRjaCBkcm9wcGVkL3Bhc3RlZCBmaWxlcyB0byBjb21wb3NlciBwaWNrZXIgYWN0aW9uKHMpIGFuZCBvcGVuIHRoZSBwb3B1cC5cbiAqIFVuc3VwcG9ydGVkIGZpbGVzIGFyZSBza2lwcGVkIGFmdGVyIGEgd2FybmluZyB0b2FzdDsgc3VwcG9ydGVkIGZpbGVzIGNvbnRpbnVlLlxuICogQHJldHVybnMgdHJ1ZSB3aGVuIGEgcGlja2VyIHBvcHVwIHdhcyBvcGVuZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzKFxuICBkZXBzOiBBWENvbnZlcnNhdGlvbk9wZW5Db21wb3NlclBpY2tlckZvckZpbGVzRGVwcyxcbiAgZmlsZXM6IEZpbGVbXSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGRlcHMuY29udmVyc2F0aW9uO1xuICBpZiAoIWNvbnZlcnNhdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFuYWx5c2lzID0gYXdhaXQgYW5hbHl6ZUluYm91bmRGaWxlcyhkZXBzLCBmaWxlcyk7XG5cbiAgaWYgKGFuYWx5c2lzLnVuc3VwcG9ydGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgIG5vdGlmeVBpY2tlclZhbGlkYXRpb25FcnJvcnMoZGVwcy50b2FzdCwgZGVwcy50cmFuc2xhdGlvbiwgYW5hbHlzaXMudW5zdXBwb3J0ZWRGaWxlcyk7XG4gIH1cblxuICBpZiAoIWFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLmxlbmd0aCB8fCAhYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBub3RpZnlJbmJvdW5kRmlsZXNWYWxpZGF0aW9uRmFpbHVyZXMoZGVwcywgYW5hbHlzaXMpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBhY3Rpb24gPSBhbmFseXNpcy5hY3Rpb25zWzBdO1xuICBpZiAoYW5hbHlzaXMuYWN0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgY2hvc2VuID0gYXdhaXQgcHJvbXB0Q29tcG9zZXJBY3Rpb25DaG9pY2UoZGVwcywgYW5hbHlzaXMuYWN0aW9ucywgYW5hbHlzaXMuc3VwcG9ydGVkRmlsZXMubGVuZ3RoKTtcbiAgICBpZiAoIWNob3Nlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhY3Rpb24gPSBjaG9zZW47XG4gIH1cblxuICBjb25zdCBjYXRhbG9nID0gYWN0aW9uLmZpbGVUeXBlO1xuICBpZiAoIWNhdGFsb2cpIHtcbiAgICBkZXBzLnRvYXN0Lndhcm5pbmcoZGVwcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuZXJyb3JzLmluYm91bmQtZmlsZXMtbm9uZS1zdXBwb3J0ZWQnKSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBhY2NlcHRlZCwgcmVqZWN0ZWQgfSA9IGF3YWl0IGRlcHMuZmlsZVNlcnZpY2UudmFsaWRhdGVNYW55KGFuYWx5c2lzLnN1cHBvcnRlZEZpbGVzLCBjYXRhbG9nKTtcbiAgaWYgKHJlamVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICBub3RpZnlQaWNrZXJWYWxpZGF0aW9uRXJyb3JzKGRlcHMudG9hc3QsIGRlcHMudHJhbnNsYXRpb24sIHJlamVjdGVkKTtcbiAgfVxuICBpZiAoYWNjZXB0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXdhaXQgb3BlbkNvbXBvc2VyUGlja2VyUG9wdXAoXG4gICAgZGVwcy5wb3B1cFNlcnZpY2UsXG4gICAgZGVwcy5jb21wb3NlclNlcnZpY2UsXG4gICAgZGVwcy5jb21wb3NlckFjdGlvblJlZ2lzdHJ5LFxuICAgIGFjdGlvbixcbiAgICBjb252ZXJzYXRpb24sXG4gICAgYWNjZXB0ZWQsXG4gICAgZGVwcy5jb25maWcsXG4gICk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogRXh0cmFjdCBPUy1jb3BpZWQgZmlsZXMgZnJvbSBhIHBhc3RlIGV2ZW50IChlLmcuIEN0cmwrViBhZnRlciBjb3B5aW5nIGEgZmlsZSBpbiBFeHBsb3JlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsZXNGcm9tQ2xpcGJvYXJkRXZlbnQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogRmlsZVtdIHtcbiAgY29uc3QgaXRlbXMgPSBldmVudC5jbGlwYm9hcmREYXRhPy5pdGVtcztcbiAgaWYgKCFpdGVtcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICdmaWxlJykge1xuICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKiBXaGV0aGVyIGEgcGFzdGUgZXZlbnQgdGFyZ2V0IGxpZXMgaW4gdGhlIGNoYXQgcGFuZWwgKG5vdCBzaWRlYmFyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Bhc3RlVGFyZ2V0SW5DaGF0UGFuZWwoaG9zdDogSFRNTEVsZW1lbnQsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8ICFob3N0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBleGNsdWRlZCA9IGhvc3QucXVlcnlTZWxlY3RvcignLmNvbnZlcnNhdGlvbi1zaWRlYmFyLWNvbnRhaW5lciwgLnNpZGViYXItY29udGFpbmVyJyk7XG4gIGlmIChleGNsdWRlZD8uY29udGFpbnModGFyZ2V0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNoYXRNYWluID0gaG9zdC5xdWVyeVNlbGVjdG9yKCcuY29udmVyc2F0aW9uLW1haW4tY29udGFpbmVyLCAubWFpbi1hcmVhLCAuY29udmVyc2F0aW9uLXZpZXcnKTtcbiAgaWYgKGNoYXRNYWluKSB7XG4gICAgcmV0dXJuIGNoYXRNYWluLmNvbnRhaW5zKHRhcmdldCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIEhhbmRsZSBDdHJsK1YgLyBwYXN0ZSB3aGVuIHRoZSBjbGlwYm9hcmQgaG9sZHMgZmlsZXMgY29waWVkIGZyb20gdGhlIE9TLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbnZlcnNhdGlvbkZpbGVQYXN0ZShcbiAgZXZlbnQ6IENsaXBib2FyZEV2ZW50LFxuICBob3N0OiBIVE1MRWxlbWVudCxcbiAgZGVwczogQVhDb252ZXJzYXRpb25PcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlc0RlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFpc1Bhc3RlVGFyZ2V0SW5DaGF0UGFuZWwoaG9zdCwgZXZlbnQudGFyZ2V0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tQ2xpcGJvYXJkRXZlbnQoZXZlbnQpO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBvcGVuQ29tcG9zZXJQaWNrZXJGb3JGaWxlcyhkZXBzLCBmaWxlcyk7XG4gIGlmIChoYW5kbGVkKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuIl19"],"names":[],"mappings":"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"}