@acorex/components 20.8.33 → 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 (116) hide show
  1. package/{conversation2 → conversation}/README.md +23 -23
  2. package/{conversation2 → conversation}/index.d.ts +991 -1792
  3. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +13711 -0
  4. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +1 -0
  5. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +119 -0
  6. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +1 -0
  7. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +59 -0
  8. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +1 -0
  9. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +432 -0
  10. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +177 -0
  12. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +54 -0
  14. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +1 -0
  15. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
  16. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +100 -0
  18. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +121 -0
  20. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +1 -0
  21. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +84 -0
  22. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +1 -0
  23. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +238 -0
  24. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +1 -0
  25. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +1080 -0
  26. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +1 -0
  27. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +102 -0
  28. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +1 -0
  29. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +90 -0
  30. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +1 -0
  31. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
  32. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
  33. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +44 -0
  34. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +1 -0
  35. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +64 -0
  36. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +1 -0
  37. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +468 -0
  38. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +1 -0
  39. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +125 -0
  40. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +1 -0
  41. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +50 -0
  42. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +1 -0
  43. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
  44. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
  45. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +77 -0
  46. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +1 -0
  47. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +407 -0
  48. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +1 -0
  49. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +83 -0
  50. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +1 -0
  51. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
  52. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
  53. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +266 -0
  54. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +1 -0
  55. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +149 -0
  56. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +1 -0
  57. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +118 -0
  58. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +1 -0
  59. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
  60. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
  61. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +140 -0
  62. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +1 -0
  63. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +33 -0
  64. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +1 -0
  65. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +172 -0
  66. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +1 -0
  67. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs +224 -0
  68. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map +1 -0
  69. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +81 -0
  70. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +1 -0
  71. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
  72. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
  73. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +537 -0
  74. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +1 -0
  75. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
  76. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
  77. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +68 -0
  78. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +1 -0
  79. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +95 -0
  80. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +1 -0
  81. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +187 -0
  82. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +1 -0
  83. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +170 -0
  84. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +1 -0
  85. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +750 -0
  86. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +1 -0
  87. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +103 -0
  88. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +1 -0
  89. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +55 -0
  90. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +1 -0
  91. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +109 -0
  92. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +1 -0
  93. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +105 -0
  94. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +1 -0
  95. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +62 -0
  96. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +1 -0
  97. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +446 -0
  98. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +1 -0
  99. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +181 -0
  100. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +1 -0
  101. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +54 -0
  102. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +1 -0
  103. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
  104. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
  105. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +328 -0
  106. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +1 -0
  107. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +270 -0
  108. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +1 -0
  109. package/fesm2022/acorex-components-conversation.mjs +2 -0
  110. package/fesm2022/acorex-components-conversation.mjs.map +1 -0
  111. package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
  112. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  113. package/package.json +37 -37
  114. package/scheduler-picker/index.d.ts +2 -0
  115. package/fesm2022/acorex-components-conversation2.mjs +0 -22331
  116. package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
@@ -0,0 +1,187 @@
1
+ import { AXButtonComponent } from '@acorex/components/button';
2
+ import { AXLabelComponent } from '@acorex/components/label';
3
+ import { AXSearchBoxComponent } from '@acorex/components/search-box';
4
+ import { isPlatformBrowser, CommonModule } from '@angular/common';
5
+ import * as i0 from '@angular/core';
6
+ import { inject, PLATFORM_ID, DestroyRef, input, computed, effect, Component } from '@angular/core';
7
+ import { m as AXConversationInfoBarService, A as AXConversationService } from './acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs';
8
+
9
+ /**
10
+ * Search Component for Info Bar
11
+ * Provides search functionality within conversations
12
+ */
13
+ class AXConversationInfoBarSearchComponent {
14
+ constructor() {
15
+ this.platformId = inject(PLATFORM_ID);
16
+ this.destroyRef = inject(DestroyRef);
17
+ this.infoBarService = inject(AXConversationInfoBarService);
18
+ this.conversationService = inject(AXConversationService);
19
+ /** Conversation input */
20
+ this.conversation = input.required(...(ngDevMode ? [{ debugName: "conversation" }] : []));
21
+ /** Service input */
22
+ this.service = input(...(ngDevMode ? [undefined, { debugName: "service" }] : []));
23
+ /** Search query from service */
24
+ this.searchQuery = this.infoBarService.searchQuery;
25
+ /** Results count from service */
26
+ this.resultsCount = this.infoBarService.searchResultsCount;
27
+ /** Current index from service */
28
+ this.currentIndex = this.infoBarService.currentSearchIndex;
29
+ /** Messages from conversation */
30
+ this.messages = computed(() => {
31
+ // Get messages from active conversation
32
+ const activeConv = this.conversationService.activeConversation();
33
+ if (activeConv?.id === this.conversation().id) {
34
+ return this.conversationService.activeMessages();
35
+ }
36
+ return [];
37
+ }, ...(ngDevMode ? [{ debugName: "messages" }] : []));
38
+ effect(() => {
39
+ const query = this.searchQuery();
40
+ if (query) {
41
+ this.performSearch(query);
42
+ }
43
+ else {
44
+ this.infoBarService.setSearchResults(0, 0);
45
+ }
46
+ });
47
+ this.destroyRef.onDestroy(() => {
48
+ if (this.scrollTimer)
49
+ clearTimeout(this.scrollTimer);
50
+ });
51
+ }
52
+ /** Handle search input change */
53
+ onSearchChange(value) {
54
+ this.infoBarService.setSearchQuery(value);
55
+ }
56
+ /** Perform search in messages */
57
+ performSearch(query) {
58
+ const messages = this.messages();
59
+ const lowerQuery = query.toLowerCase();
60
+ const results = messages.filter((msg) => {
61
+ if (msg.type === 'text') {
62
+ const text = msg.payload?.text || '';
63
+ return text.toLowerCase().includes(lowerQuery);
64
+ }
65
+ return false;
66
+ });
67
+ this.infoBarService.setSearchResults(results.length, 0);
68
+ // Scroll to first result if exists
69
+ if (results.length > 0) {
70
+ this.scrollToResult(results[0].id);
71
+ }
72
+ }
73
+ /** Navigate to next result */
74
+ onNext() {
75
+ this.infoBarService.nextSearchResult();
76
+ this.scrollToCurrentResult();
77
+ }
78
+ /** Navigate to previous result */
79
+ onPrevious() {
80
+ this.infoBarService.previousSearchResult();
81
+ this.scrollToCurrentResult();
82
+ }
83
+ /** Scroll to current search result */
84
+ scrollToCurrentResult() {
85
+ const query = this.searchQuery();
86
+ const currentIdx = this.currentIndex();
87
+ const messages = this.messages();
88
+ const lowerQuery = query.toLowerCase();
89
+ // Find the nth matching message
90
+ let matchCount = 0;
91
+ for (const msg of messages) {
92
+ if (msg.type === 'text') {
93
+ const text = msg.payload?.text || '';
94
+ if (text.toLowerCase().includes(lowerQuery)) {
95
+ if (matchCount === currentIdx) {
96
+ this.scrollToResult(msg.id);
97
+ break;
98
+ }
99
+ matchCount++;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ scrollToResult(messageId) {
105
+ if (!isPlatformBrowser(this.platformId))
106
+ return;
107
+ if (this.scrollTimer)
108
+ clearTimeout(this.scrollTimer);
109
+ this.scrollTimer = setTimeout(() => {
110
+ const element = document.querySelector(`[data-message-id="${messageId}"]`);
111
+ if (element) {
112
+ element.scrollIntoView({ behavior: 'smooth', block: 'center' });
113
+ }
114
+ }, 100);
115
+ }
116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationInfoBarSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
117
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXConversationInfoBarSearchComponent, isStandalone: true, selector: "ax-conversation-info-bar-search", inputs: { conversation: { classPropertyName: "conversation", publicName: "conversation", isSignal: true, isRequired: true, transformFunction: null }, service: { classPropertyName: "service", publicName: "service", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
118
+ <div class="search-wrapper">
119
+ <ax-search-box
120
+ class="search-input"
121
+ [placeholder]="'Search in conversation'"
122
+ [value]="searchQuery()"
123
+ (onValueChanged)="onSearchChange($event.value)"
124
+ ></ax-search-box>
125
+
126
+ @if (searchQuery() && resultsCount() > 0) {
127
+ <div class="search-results">
128
+ <ax-label class="results-text"> {{ currentIndex() + 1 }} / {{ resultsCount() }} </ax-label>
129
+ <ax-button
130
+ class="nav-button"
131
+ [text]="'↑'"
132
+ [look]="'ghost'"
133
+ [size]="'sm'"
134
+ (onClick)="onPrevious()"
135
+ [disabled]="resultsCount() === 0"
136
+ ></ax-button>
137
+ <ax-button
138
+ class="nav-button"
139
+ [text]="'↓'"
140
+ [look]="'ghost'"
141
+ [size]="'sm'"
142
+ (onClick)="onNext()"
143
+ [disabled]="resultsCount() === 0"
144
+ ></ax-button>
145
+ </div>
146
+ }
147
+ </div>
148
+ `, isInline: true, styles: [":host{display:block;flex:1;min-width:0}.search-wrapper{display:flex;align-items:center;gap:.5rem;width:100%}.search-input{flex:1;min-width:0}.search-results{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.results-text{font-size:.75rem;color:var(--ax-text-secondary, #6b7280);white-space:nowrap}.nav-button{min-width:28px;height:28px;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { 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: "component", type: AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }] }); }
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationInfoBarSearchComponent, decorators: [{
151
+ type: Component,
152
+ args: [{ selector: 'ax-conversation-info-bar-search', imports: [CommonModule, AXSearchBoxComponent, AXButtonComponent, AXLabelComponent], template: `
153
+ <div class="search-wrapper">
154
+ <ax-search-box
155
+ class="search-input"
156
+ [placeholder]="'Search in conversation'"
157
+ [value]="searchQuery()"
158
+ (onValueChanged)="onSearchChange($event.value)"
159
+ ></ax-search-box>
160
+
161
+ @if (searchQuery() && resultsCount() > 0) {
162
+ <div class="search-results">
163
+ <ax-label class="results-text"> {{ currentIndex() + 1 }} / {{ resultsCount() }} </ax-label>
164
+ <ax-button
165
+ class="nav-button"
166
+ [text]="'↑'"
167
+ [look]="'ghost'"
168
+ [size]="'sm'"
169
+ (onClick)="onPrevious()"
170
+ [disabled]="resultsCount() === 0"
171
+ ></ax-button>
172
+ <ax-button
173
+ class="nav-button"
174
+ [text]="'↓'"
175
+ [look]="'ghost'"
176
+ [size]="'sm'"
177
+ (onClick)="onNext()"
178
+ [disabled]="resultsCount() === 0"
179
+ ></ax-button>
180
+ </div>
181
+ }
182
+ </div>
183
+ `, styles: [":host{display:block;flex:1;min-width:0}.search-wrapper{display:flex;align-items:center;gap:.5rem;width:100%}.search-input{flex:1;min-width:0}.search-results{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.results-text{font-size:.75rem;color:var(--ax-text-secondary, #6b7280);white-space:nowrap}.nav-button{min-width:28px;height:28px;padding:0}\n"] }]
184
+ }], ctorParameters: () => [] });
185
+
186
+ export { AXConversationInfoBarSearchComponent };
187
+ //# sourceMappingURL=acorex-components-conversation-search.component-96NI2ERG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-search.component-96NI2ERG.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/info-bar/components/search.component.js"],"sourcesContent":["/**\n * Search Component for Info Bar\n * Provides search functionality within conversations\n */\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXLabelComponent } from '@acorex/components/label';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { Component, DestroyRef, PLATFORM_ID, computed, effect, inject, input } from '@angular/core';\nimport { AXConversationInfoBarService } from '../../../components/info-bar/info-bar.service';\nimport { AXConversationService } from '../../../services/conversation.service';\nimport * as i0 from \"@angular/core\";\nexport class AXConversationInfoBarSearchComponent {\n constructor() {\n this.platformId = inject(PLATFORM_ID);\n this.destroyRef = inject(DestroyRef);\n this.infoBarService = inject(AXConversationInfoBarService);\n this.conversationService = inject(AXConversationService);\n /** Conversation input */\n this.conversation = input.required(...(ngDevMode ? [{ debugName: \"conversation\" }] : []));\n /** Service input */\n this.service = input(...(ngDevMode ? [undefined, { debugName: \"service\" }] : []));\n /** Search query from service */\n this.searchQuery = this.infoBarService.searchQuery;\n /** Results count from service */\n this.resultsCount = this.infoBarService.searchResultsCount;\n /** Current index from service */\n this.currentIndex = this.infoBarService.currentSearchIndex;\n /** Messages from conversation */\n this.messages = computed(() => {\n // Get messages from active conversation\n const activeConv = this.conversationService.activeConversation();\n if (activeConv?.id === this.conversation().id) {\n return this.conversationService.activeMessages();\n }\n return [];\n }, ...(ngDevMode ? [{ debugName: \"messages\" }] : []));\n effect(() => {\n const query = this.searchQuery();\n if (query) {\n this.performSearch(query);\n }\n else {\n this.infoBarService.setSearchResults(0, 0);\n }\n });\n this.destroyRef.onDestroy(() => {\n if (this.scrollTimer)\n clearTimeout(this.scrollTimer);\n });\n }\n /** Handle search input change */\n onSearchChange(value) {\n this.infoBarService.setSearchQuery(value);\n }\n /** Perform search in messages */\n performSearch(query) {\n const messages = this.messages();\n const lowerQuery = query.toLowerCase();\n const results = messages.filter((msg) => {\n if (msg.type === 'text') {\n const text = msg.payload?.text || '';\n return text.toLowerCase().includes(lowerQuery);\n }\n return false;\n });\n this.infoBarService.setSearchResults(results.length, 0);\n // Scroll to first result if exists\n if (results.length > 0) {\n this.scrollToResult(results[0].id);\n }\n }\n /** Navigate to next result */\n onNext() {\n this.infoBarService.nextSearchResult();\n this.scrollToCurrentResult();\n }\n /** Navigate to previous result */\n onPrevious() {\n this.infoBarService.previousSearchResult();\n this.scrollToCurrentResult();\n }\n /** Scroll to current search result */\n scrollToCurrentResult() {\n const query = this.searchQuery();\n const currentIdx = this.currentIndex();\n const messages = this.messages();\n const lowerQuery = query.toLowerCase();\n // Find the nth matching message\n let matchCount = 0;\n for (const msg of messages) {\n if (msg.type === 'text') {\n const text = msg.payload?.text || '';\n if (text.toLowerCase().includes(lowerQuery)) {\n if (matchCount === currentIdx) {\n this.scrollToResult(msg.id);\n break;\n }\n matchCount++;\n }\n }\n }\n }\n scrollToResult(messageId) {\n if (!isPlatformBrowser(this.platformId))\n return;\n if (this.scrollTimer)\n clearTimeout(this.scrollTimer);\n this.scrollTimer = setTimeout(() => {\n const element = document.querySelector(`[data-message-id=\"${messageId}\"]`);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationInfoBarSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXConversationInfoBarSearchComponent, isStandalone: true, selector: \"ax-conversation-info-bar-search\", inputs: { conversation: { classPropertyName: \"conversation\", publicName: \"conversation\", isSignal: true, isRequired: true, transformFunction: null }, service: { classPropertyName: \"service\", publicName: \"service\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n <div class=\"search-wrapper\">\n <ax-search-box\n class=\"search-input\"\n [placeholder]=\"'Search in conversation'\"\n [value]=\"searchQuery()\"\n (onValueChanged)=\"onSearchChange($event.value)\"\n ></ax-search-box>\n\n @if (searchQuery() && resultsCount() > 0) {\n <div class=\"search-results\">\n <ax-label class=\"results-text\"> {{ currentIndex() + 1 }} / {{ resultsCount() }} </ax-label>\n <ax-button\n class=\"nav-button\"\n [text]=\"'↑'\"\n [look]=\"'ghost'\"\n [size]=\"'sm'\"\n (onClick)=\"onPrevious()\"\n [disabled]=\"resultsCount() === 0\"\n ></ax-button>\n <ax-button\n class=\"nav-button\"\n [text]=\"'↓'\"\n [look]=\"'ghost'\"\n [size]=\"'sm'\"\n (onClick)=\"onNext()\"\n [disabled]=\"resultsCount() === 0\"\n ></ax-button>\n </div>\n }\n </div>\n `, isInline: true, styles: [\":host{display:block;flex:1;min-width:0}.search-wrapper{display:flex;align-items:center;gap:.5rem;width:100%}.search-input{flex:1;min-width:0}.search-results{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.results-text{font-size:.75rem;color:var(--ax-text-secondary, #6b7280);white-space:nowrap}.nav-button{min-width:28px;height:28px;padding:0}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { 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: \"component\", type: AXLabelComponent, selector: \"ax-label\", inputs: [\"required\", \"for\"], outputs: [\"requiredChange\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationInfoBarSearchComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-conversation-info-bar-search', imports: [CommonModule, AXSearchBoxComponent, AXButtonComponent, AXLabelComponent], template: `\n <div class=\"search-wrapper\">\n <ax-search-box\n class=\"search-input\"\n [placeholder]=\"'Search in conversation'\"\n [value]=\"searchQuery()\"\n (onValueChanged)=\"onSearchChange($event.value)\"\n ></ax-search-box>\n\n @if (searchQuery() && resultsCount() > 0) {\n <div class=\"search-results\">\n <ax-label class=\"results-text\"> {{ currentIndex() + 1 }} / {{ resultsCount() }} </ax-label>\n <ax-button\n class=\"nav-button\"\n [text]=\"'↑'\"\n [look]=\"'ghost'\"\n [size]=\"'sm'\"\n (onClick)=\"onPrevious()\"\n [disabled]=\"resultsCount() === 0\"\n ></ax-button>\n <ax-button\n class=\"nav-button\"\n [text]=\"'↓'\"\n [look]=\"'ghost'\"\n [size]=\"'sm'\"\n (onClick)=\"onNext()\"\n [disabled]=\"resultsCount() === 0\"\n ></ax-button>\n </div>\n }\n </div>\n `, styles: [\":host{display:block;flex:1;min-width:0}.search-wrapper{display:flex;align-items:center;gap:.5rem;width:100%}.search-input{flex:1;min-width:0}.search-results{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.results-text{font-size:.75rem;color:var(--ax-text-secondary, #6b7280);white-space:nowrap}.nav-button{min-width:28px;height:28px;padding:0}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29udmVyc2F0aW9uL3NyYy9saWIvcGx1Z2lucy9pbmZvLWJhci9jb21wb25lbnRzL3NlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBOEUvRSxNQUFNLE9BQU8sb0NBQW9DO0lBaUMvQztRQWhDaUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEQsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFckUseUJBQXlCO1FBQ2hCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsdURBQWtCLENBQUM7UUFFekQsb0JBQW9CO1FBQ1gsWUFBTyxHQUFHLEtBQUssNkRBQWdDLENBQUM7UUFFekQsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFFdkQsaUNBQWlDO1FBQ3hCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUUvRCxpQ0FBaUM7UUFDeEIsaUJBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBRS9ELGlDQUFpQztRQUN4QixhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoQyx3Q0FBd0M7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDakUsSUFBSSxVQUFVLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkQsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxvREFBQyxDQUFDO1FBS0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxpQ0FBaUM7SUFDekIsYUFBYSxDQUFDLEtBQWE7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksR0FBSSxHQUFHLENBQUMsT0FBcUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwRSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEQsbUNBQW1DO1FBQ25DLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNO1FBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0NBQXNDO0lBQzlCLHFCQUFxQjtRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdkMsZ0NBQWdDO1FBQ2hDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLEdBQUksR0FBRyxDQUFDLE9BQXFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLElBQUksVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUIsTUFBTTtvQkFDUixDQUFDO29CQUNELFVBQVUsRUFBRSxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsU0FBaUI7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRWhELElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixTQUFTLElBQUksQ0FBQyxDQUFDO1lBQzNFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7OEdBdkhVLG9DQUFvQztrR0FBcEMsb0NBQW9DLGlYQXpFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQsNGFBaENTLFlBQVksK0JBQUUsb0JBQW9CLHFXQUFFLGlCQUFpQiwyVUFBRSxnQkFBZ0I7OzJGQTBFdEUsb0NBQW9DO2tCQTVFaEQsU0FBUzsrQkFDRSxpQ0FBaUMsV0FDbEMsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsWUFDeEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlYXJjaCBDb21wb25lbnQgZm9yIEluZm8gQmFyXG4gKiBQcm92aWRlcyBzZWFyY2ggZnVuY3Rpb25hbGl0eSB3aXRoaW4gY29udmVyc2F0aW9uc1xuICovXG5cbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWExhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xhYmVsJztcbmltcG9ydCB7IEFYU2VhcmNoQm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIFBMQVRGT1JNX0lELCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvbkluZm9CYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmZvLWJhci9pbmZvLWJhci5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb24sIEFYQ29udmVyc2F0aW9uVGV4dFBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29udmVyc2F0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1jb252ZXJzYXRpb24taW5mby1iYXItc2VhcmNoJyxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhTZWFyY2hCb3hDb21wb25lbnQsIEFYQnV0dG9uQ29tcG9uZW50LCBBWExhYmVsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggaW4gY29udmVyc2F0aW9uJ1wiXG4gICAgICAgIFt2YWx1ZV09XCJzZWFyY2hRdWVyeSgpXCJcbiAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgPjwvYXgtc2VhcmNoLWJveD5cblxuICAgICAgQGlmIChzZWFyY2hRdWVyeSgpICYmIHJlc3VsdHNDb3VudCgpID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXJlc3VsdHNcIj5cbiAgICAgICAgICA8YXgtbGFiZWwgY2xhc3M9XCJyZXN1bHRzLXRleHRcIj4ge3sgY3VycmVudEluZGV4KCkgKyAxIH19IC8ge3sgcmVzdWx0c0NvdW50KCkgfX0gPC9heC1sYWJlbD5cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1idXR0b25cIlxuICAgICAgICAgICAgW3RleHRdPVwiJ+KGkSdcIlxuICAgICAgICAgICAgW2xvb2tdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICBbc2l6ZV09XCInc20nXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uUHJldmlvdXMoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVzdWx0c0NvdW50KCkgPT09IDBcIlxuICAgICAgICAgID48L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1idXR0b25cIlxuICAgICAgICAgICAgW3RleHRdPVwiJ+KGkydcIlxuICAgICAgICAgICAgW2xvb2tdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICBbc2l6ZV09XCInc20nXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uTmV4dCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXN1bHRzQ291bnQoKSA9PT0gMFwiXG4gICAgICAgICAgPjwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5zZWFyY2gtaW5wdXQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5zZWFyY2gtcmVzdWx0cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5yZXN1bHRzLXRleHQge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1heC10ZXh0LXNlY29uZGFyeSwgIzZiNzI4MCk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5uYXYtYnV0dG9uIHtcbiAgICAgICAgbWluLXdpZHRoOiAyOHB4O1xuICAgICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhDb252ZXJzYXRpb25JbmZvQmFyU2VhcmNoQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZm9CYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ29udmVyc2F0aW9uSW5mb0JhclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnNhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhDb252ZXJzYXRpb25TZXJ2aWNlKTtcblxuICAvKiogQ29udmVyc2F0aW9uIGlucHV0ICovXG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbiA9IGlucHV0LnJlcXVpcmVkPEFYQ29udmVyc2F0aW9uPigpO1xuXG4gIC8qKiBTZXJ2aWNlIGlucHV0ICovXG4gIHJlYWRvbmx5IHNlcnZpY2UgPSBpbnB1dDxBWENvbnZlcnNhdGlvbkluZm9CYXJTZXJ2aWNlPigpO1xuXG4gIC8qKiBTZWFyY2ggcXVlcnkgZnJvbSBzZXJ2aWNlICovXG4gIHJlYWRvbmx5IHNlYXJjaFF1ZXJ5ID0gdGhpcy5pbmZvQmFyU2VydmljZS5zZWFyY2hRdWVyeTtcblxuICAvKiogUmVzdWx0cyBjb3VudCBmcm9tIHNlcnZpY2UgKi9cbiAgcmVhZG9ubHkgcmVzdWx0c0NvdW50ID0gdGhpcy5pbmZvQmFyU2VydmljZS5zZWFyY2hSZXN1bHRzQ291bnQ7XG5cbiAgLyoqIEN1cnJlbnQgaW5kZXggZnJvbSBzZXJ2aWNlICovXG4gIHJlYWRvbmx5IGN1cnJlbnRJbmRleCA9IHRoaXMuaW5mb0JhclNlcnZpY2UuY3VycmVudFNlYXJjaEluZGV4O1xuXG4gIC8qKiBNZXNzYWdlcyBmcm9tIGNvbnZlcnNhdGlvbiAqL1xuICByZWFkb25seSBtZXNzYWdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyBHZXQgbWVzc2FnZXMgZnJvbSBhY3RpdmUgY29udmVyc2F0aW9uXG4gICAgY29uc3QgYWN0aXZlQ29udiA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5hY3RpdmVDb252ZXJzYXRpb24oKTtcbiAgICBpZiAoYWN0aXZlQ29udj8uaWQgPT09IHRoaXMuY29udmVyc2F0aW9uKCkuaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuYWN0aXZlTWVzc2FnZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcblxuICBwcml2YXRlIHNjcm9sbFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeSgpO1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaChxdWVyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluZm9CYXJTZXJ2aWNlLnNldFNlYXJjaFJlc3VsdHMoMCwgMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSGFuZGxlIHNlYXJjaCBpbnB1dCBjaGFuZ2UgKi9cbiAgb25TZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5mb0JhclNlcnZpY2Uuc2V0U2VhcmNoUXVlcnkodmFsdWUpO1xuICB9XG5cbiAgLyoqIFBlcmZvcm0gc2VhcmNoIGluIG1lc3NhZ2VzICovXG4gIHByaXZhdGUgcGVyZm9ybVNlYXJjaChxdWVyeTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzKCk7XG4gICAgY29uc3QgbG93ZXJRdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gbWVzc2FnZXMuZmlsdGVyKChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSAobXNnLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25UZXh0UGF5bG9hZCk/LnRleHQgfHwgJyc7XG4gICAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLmluZm9CYXJTZXJ2aWNlLnNldFNlYXJjaFJlc3VsdHMocmVzdWx0cy5sZW5ndGgsIDApO1xuXG4gICAgLy8gU2Nyb2xsIHRvIGZpcnN0IHJlc3VsdCBpZiBleGlzdHNcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KHJlc3VsdHNbMF0uaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBOYXZpZ2F0ZSB0byBuZXh0IHJlc3VsdCAqL1xuICBvbk5leHQoKTogdm9pZCB7XG4gICAgdGhpcy5pbmZvQmFyU2VydmljZS5uZXh0U2VhcmNoUmVzdWx0KCk7XG4gICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRSZXN1bHQoKTtcbiAgfVxuXG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyByZXN1bHQgKi9cbiAgb25QcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLmluZm9CYXJTZXJ2aWNlLnByZXZpb3VzU2VhcmNoUmVzdWx0KCk7XG4gICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRSZXN1bHQoKTtcbiAgfVxuXG4gIC8qKiBTY3JvbGwgdG8gY3VycmVudCBzZWFyY2ggcmVzdWx0ICovXG4gIHByaXZhdGUgc2Nyb2xsVG9DdXJyZW50UmVzdWx0KCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeSgpO1xuICAgIGNvbnN0IGN1cnJlbnRJZHggPSB0aGlzLmN1cnJlbnRJbmRleCgpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcygpO1xuICAgIGNvbnN0IGxvd2VyUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmluZCB0aGUgbnRoIG1hdGNoaW5nIG1lc3NhZ2VcbiAgICBsZXQgbWF0Y2hDb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICAgIGlmIChtc2cudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSAobXNnLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25UZXh0UGF5bG9hZCk/LnRleHQgfHwgJyc7XG4gICAgICAgIGlmICh0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpIHtcbiAgICAgICAgICBpZiAobWF0Y2hDb3VudCA9PT0gY3VycmVudElkeCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChtc2cuaWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hdGNoQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9SZXN1bHQobWVzc2FnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLnNjcm9sbFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgdGhpcy5zY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLW1lc3NhZ2UtaWQ9XCIke21lc3NhZ2VJZH1cIl1gKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG59XG4iXX0="],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { resolveFileTypeExtension, runFileTypeUtility } from '@acorex/core/file';
2
+ import { isPlatformBrowser } from '@angular/common';
3
+ import { B as AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE } from './acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs';
4
+ export { C as resolveConversationMessageFileType } from './acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs';
5
+
6
+ async function mergeImageUploadResult(payload, result) {
7
+ const [{ normalizeImagePayload }, { resolvePersistableMediaUrl, resolvePersistedThumbnailUrl }] = await Promise.all([
8
+ import('./acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs').then(function (n) { return n.b_; }),
9
+ import('./acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs').then(function (n) { return n.bZ; }),
10
+ ]);
11
+ const base = normalizeImagePayload(payload);
12
+ const images = [...base.images];
13
+ const i = images.findIndex((x) => !x.mediaId && !resolvePersistableMediaUrl(x.url));
14
+ const slot = i >= 0 ? images[i] : undefined;
15
+ const url = resolvePersistableMediaUrl(result.url);
16
+ const next = {
17
+ ...(slot ?? { width: 0, height: 0 }),
18
+ mediaId: result.mediaId,
19
+ mimeType: result.mimeType,
20
+ size: result.size,
21
+ thumbnailUrl: resolvePersistedThumbnailUrl(result.thumbnailUrl ?? slot?.thumbnailUrl, url),
22
+ metadata: result.metadata,
23
+ };
24
+ if (url) {
25
+ next.url = url;
26
+ }
27
+ if (i >= 0)
28
+ images[i] = next;
29
+ else
30
+ images.push(next);
31
+ return { ...base, type: 'image', images };
32
+ }
33
+ async function applyImageLocalPreview(payload, localUrl, mimeType = 'application/octet-stream') {
34
+ const [{ normalizeImagePayload }, { resolvePersistableMediaUrl }] = await Promise.all([
35
+ import('./acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs').then(function (n) { return n.b_; }),
36
+ import('./acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs').then(function (n) { return n.bZ; }),
37
+ ]);
38
+ const base = normalizeImagePayload(payload);
39
+ const images = [...base.images];
40
+ const slot = images.findIndex((x) => !x.mediaId && !resolvePersistableMediaUrl(x.url));
41
+ const preview = { url: localUrl, width: 0, height: 0, mimeType };
42
+ if (slot >= 0) {
43
+ images[slot] = { ...images[slot], ...preview };
44
+ }
45
+ else if (images.length === 0) {
46
+ images.push(preview);
47
+ }
48
+ else {
49
+ images[0] = { ...images[0], ...preview };
50
+ }
51
+ return { ...base, type: 'image', images };
52
+ }
53
+ async function mergeUploadResult(type, payload, result) {
54
+ switch (type) {
55
+ case 'image':
56
+ return mergeImageUploadResult(payload, result);
57
+ case 'video': {
58
+ const { mergeVideoUploadResult } = await import('./acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs');
59
+ return mergeVideoUploadResult(payload, result);
60
+ }
61
+ case 'audio': {
62
+ const { mergeAudioUploadResult } = await import('./acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs');
63
+ return mergeAudioUploadResult(payload, result);
64
+ }
65
+ case 'file': {
66
+ const { mergeFileUploadResult } = await import('./acorex-components-conversation-file-composer.payload-azPSH99m.mjs');
67
+ return mergeFileUploadResult(payload, result);
68
+ }
69
+ case 'voice': {
70
+ const { mergeVoiceUploadResult } = await import('./acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs');
71
+ return mergeVoiceUploadResult(payload, result);
72
+ }
73
+ case 'sticker':
74
+ return {
75
+ ...payload,
76
+ type: 'sticker',
77
+ url: result.url,
78
+ mediaId: result.mediaId,
79
+ };
80
+ default:
81
+ return payload;
82
+ }
83
+ }
84
+ async function applyLocalPreview(type, payload, localUrl, mimeType = 'application/octet-stream') {
85
+ switch (type) {
86
+ case 'image':
87
+ return applyImageLocalPreview(payload, localUrl, mimeType);
88
+ case 'video': {
89
+ const { applyVideoLocalPreview } = await import('./acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs');
90
+ return applyVideoLocalPreview(payload, localUrl, mimeType);
91
+ }
92
+ case 'audio': {
93
+ const { applyAudioLocalPreview } = await import('./acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs');
94
+ return applyAudioLocalPreview(payload, localUrl, mimeType);
95
+ }
96
+ case 'file': {
97
+ const { applyFileLocalPreview } = await import('./acorex-components-conversation-file-composer.payload-azPSH99m.mjs');
98
+ return applyFileLocalPreview(payload, localUrl, mimeType);
99
+ }
100
+ case 'voice': {
101
+ const { applyVoiceLocalPreview } = await import('./acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs');
102
+ return applyVoiceLocalPreview(payload, localUrl);
103
+ }
104
+ case 'sticker':
105
+ return { ...payload, type: 'sticker', url: localUrl };
106
+ default:
107
+ return payload;
108
+ }
109
+ }
110
+ function toUploaderReference(payload) {
111
+ switch (payload.type) {
112
+ case 'image': {
113
+ const first = payload.images[0];
114
+ return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };
115
+ }
116
+ case 'video': {
117
+ const first = payload.videos[0];
118
+ return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };
119
+ }
120
+ case 'audio': {
121
+ const first = payload.audios[0];
122
+ return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };
123
+ }
124
+ case 'file': {
125
+ const first = payload.files[0];
126
+ return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };
127
+ }
128
+ case 'voice':
129
+ case 'sticker':
130
+ return {
131
+ url: payload.url,
132
+ mediaId: payload.mediaId,
133
+ mimeType: payload.mimeType,
134
+ size: payload.size,
135
+ };
136
+ default:
137
+ return {};
138
+ }
139
+ }
140
+ function createObjectUrl(platformId, blob) {
141
+ if (!isPlatformBrowser(platformId)) {
142
+ return '';
143
+ }
144
+ return URL.createObjectURL(blob);
145
+ }
146
+ function revokeObjectUrl(platformId, url) {
147
+ if (isPlatformBrowser(platformId) && url.startsWith('blob:')) {
148
+ URL.revokeObjectURL(url);
149
+ }
150
+ }
151
+ async function createLocalPreviewUrl(fileService, platformId, source, messageType) {
152
+ const catalog = AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE[messageType];
153
+ if (!catalog) {
154
+ return undefined;
155
+ }
156
+ const fileType = await fileService.getFileType(catalog);
157
+ if (!fileType) {
158
+ return undefined;
159
+ }
160
+ const ctx = { readAsDataUrl: (f) => fileService.blobToBase64(f), platformId };
161
+ const extension = resolveFileTypeExtension(fileType, {
162
+ file: source instanceof File ? source : undefined,
163
+ mimeType: source.type,
164
+ });
165
+ const result = await runFileTypeUtility(fileType, ctx, extension, 'createLocalPreviewUrl', source);
166
+ return typeof result === 'string' ? result : undefined;
167
+ }
168
+
169
+ export { AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, applyLocalPreview, createLocalPreviewUrl, createObjectUrl, mergeUploadResult, revokeObjectUrl, toUploaderReference };
170
+ //# sourceMappingURL=acorex-components-conversation-send-message-media--Rbrne7k.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-send-message-media--Rbrne7k.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/composer/composer-actions/send-message-media.js"],"sourcesContent":["import { resolveFileTypeExtension, runFileTypeUtility } from '@acorex/core/file';\nimport { isPlatformBrowser } from '@angular/common';\nimport { AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, resolveConversationMessageFileType } from '../../../models/message-file-type-catalog';\nexport { resolveConversationMessageFileType, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE };\nasync function mergeImageUploadResult(payload, result) {\n const [{ normalizeImagePayload }, { resolvePersistableMediaUrl, resolvePersistedThumbnailUrl }] = await Promise.all([\n import('../../message-list/components/image-renderer/image.payload'),\n import('../components/shared/persisted-media-url'),\n ]);\n const base = normalizeImagePayload(payload);\n const images = [...base.images];\n const i = images.findIndex((x) => !x.mediaId && !resolvePersistableMediaUrl(x.url));\n const slot = i >= 0 ? images[i] : undefined;\n const url = resolvePersistableMediaUrl(result.url);\n const next = {\n ...(slot ?? { width: 0, height: 0 }),\n mediaId: result.mediaId,\n mimeType: result.mimeType,\n size: result.size,\n thumbnailUrl: resolvePersistedThumbnailUrl(result.thumbnailUrl ?? slot?.thumbnailUrl, url),\n metadata: result.metadata,\n };\n if (url) {\n next.url = url;\n }\n if (i >= 0)\n images[i] = next;\n else\n images.push(next);\n return { ...base, type: 'image', images };\n}\nasync function applyImageLocalPreview(payload, localUrl, mimeType = 'application/octet-stream') {\n const [{ normalizeImagePayload }, { resolvePersistableMediaUrl }] = await Promise.all([\n import('../../message-list/components/image-renderer/image.payload'),\n import('../components/shared/persisted-media-url'),\n ]);\n const base = normalizeImagePayload(payload);\n const images = [...base.images];\n const slot = images.findIndex((x) => !x.mediaId && !resolvePersistableMediaUrl(x.url));\n const preview = { url: localUrl, width: 0, height: 0, mimeType };\n if (slot >= 0) {\n images[slot] = { ...images[slot], ...preview };\n }\n else if (images.length === 0) {\n images.push(preview);\n }\n else {\n images[0] = { ...images[0], ...preview };\n }\n return { ...base, type: 'image', images };\n}\nexport async function mergeUploadResult(type, payload, result) {\n switch (type) {\n case 'image':\n return mergeImageUploadResult(payload, result);\n case 'video': {\n const { mergeVideoUploadResult } = await import('../components/video-picker/video-composer.payload');\n return mergeVideoUploadResult(payload, result);\n }\n case 'audio': {\n const { mergeAudioUploadResult } = await import('../components/audio-picker/audio-composer.payload');\n return mergeAudioUploadResult(payload, result);\n }\n case 'file': {\n const { mergeFileUploadResult } = await import('../components/file-picker/file-composer.payload');\n return mergeFileUploadResult(payload, result);\n }\n case 'voice': {\n const { mergeVoiceUploadResult } = await import('../components/voice-recorder/voice-composer.payload');\n return mergeVoiceUploadResult(payload, result);\n }\n case 'sticker':\n return {\n ...payload,\n type: 'sticker',\n url: result.url,\n mediaId: result.mediaId,\n };\n default:\n return payload;\n }\n}\nexport async function applyLocalPreview(type, payload, localUrl, mimeType = 'application/octet-stream') {\n switch (type) {\n case 'image':\n return applyImageLocalPreview(payload, localUrl, mimeType);\n case 'video': {\n const { applyVideoLocalPreview } = await import('../components/video-picker/video-composer.payload');\n return applyVideoLocalPreview(payload, localUrl, mimeType);\n }\n case 'audio': {\n const { applyAudioLocalPreview } = await import('../components/audio-picker/audio-composer.payload');\n return applyAudioLocalPreview(payload, localUrl, mimeType);\n }\n case 'file': {\n const { applyFileLocalPreview } = await import('../components/file-picker/file-composer.payload');\n return applyFileLocalPreview(payload, localUrl, mimeType);\n }\n case 'voice': {\n const { applyVoiceLocalPreview } = await import('../components/voice-recorder/voice-composer.payload');\n return applyVoiceLocalPreview(payload, localUrl);\n }\n case 'sticker':\n return { ...payload, type: 'sticker', url: localUrl };\n default:\n return payload;\n }\n}\nexport function toUploaderReference(payload) {\n switch (payload.type) {\n case 'image': {\n const first = payload.images[0];\n return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };\n }\n case 'video': {\n const first = payload.videos[0];\n return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };\n }\n case 'audio': {\n const first = payload.audios[0];\n return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };\n }\n case 'file': {\n const first = payload.files[0];\n return { url: first?.url, mediaId: first?.mediaId, mimeType: first?.mimeType, size: first?.size };\n }\n case 'voice':\n case 'sticker':\n return {\n url: payload.url,\n mediaId: payload.mediaId,\n mimeType: payload.mimeType,\n size: payload.size,\n };\n default:\n return {};\n }\n}\nexport function createObjectUrl(platformId, blob) {\n if (!isPlatformBrowser(platformId)) {\n return '';\n }\n return URL.createObjectURL(blob);\n}\nexport function revokeObjectUrl(platformId, url) {\n if (isPlatformBrowser(platformId) && url.startsWith('blob:')) {\n URL.revokeObjectURL(url);\n }\n}\nexport async function createLocalPreviewUrl(fileService, platformId, source, messageType) {\n const catalog = AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE[messageType];\n if (!catalog) {\n return undefined;\n }\n const fileType = await fileService.getFileType(catalog);\n if (!fileType) {\n return undefined;\n }\n const ctx = { readAsDataUrl: (f) => fileService.blobToBase64(f), platformId };\n const extension = resolveFileTypeExtension(fileType, {\n file: source instanceof File ? source : undefined,\n mimeType: source.type,\n });\n const result = await runFileTypeUtility(fileType, ctx, extension, 'createLocalPreviewUrl', source);\n return typeof result === 'string' ? result : undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1tZXNzYWdlLW1lZGlhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9wbHVnaW5zL2NvbXBvc2VyL2NvbXBvc2VyLWFjdGlvbnMvc2VuZC1tZXNzYWdlLW1lZGlhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3BELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXZJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO0FBRXRGLEtBQUssVUFBVSxzQkFBc0IsQ0FDbkMsT0FBcUMsRUFDckMsTUFBc0I7SUFFdEIsTUFBTSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDbEgsTUFBTSxDQUFDLDREQUE0RCxDQUFDO1FBQ3BFLE1BQU0sQ0FBQywwQ0FBMEMsQ0FBQztLQUNuRCxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxPQUFxQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLElB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QixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQWMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMzRixNQUFNLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUU7UUFDbkQsSUFBSSxFQUFFLE1BQU0sWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNqRCxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUk7S0FDdEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQVhVcGxvYWRSZXN1bHQgfSBmcm9tICdAYWNvcmV4L2Nkay91cGxvYWRlcic7XG5pbXBvcnQgdHlwZSB7IEFYRmlsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgeyByZXNvbHZlRmlsZVR5cGVFeHRlbnNpb24sIHJ1bkZpbGVUeXBlVXRpbGl0eSB9IGZyb20gJ0BhY29yZXgvY29yZS9maWxlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25JbWFnZU1lZGlhSXRlbSwgQVhDb252ZXJzYXRpb25JbWFnZVBheWxvYWQsIEFYQ29udmVyc2F0aW9uTWVzc2FnZVBheWxvYWQsIEFYQ29udmVyc2F0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvblVwbG9hZGVyUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbnZlcnNhdGlvbi11cGxvYWQudHlwZXMnO1xuaW1wb3J0IHsgQVhfQ09OVkVSU0FUSU9OX01FU1NBR0VfVFlQRV9GSUxFX1RZUEUsIHJlc29sdmVDb252ZXJzYXRpb25NZXNzYWdlRmlsZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbWVzc2FnZS1maWxlLXR5cGUtY2F0YWxvZyc7XG5cbmV4cG9ydCB7IHJlc29sdmVDb252ZXJzYXRpb25NZXNzYWdlRmlsZVR5cGUsIEFYX0NPTlZFUlNBVElPTl9NRVNTQUdFX1RZUEVfRklMRV9UWVBFIH07XG5cbmFzeW5jIGZ1bmN0aW9uIG1lcmdlSW1hZ2VVcGxvYWRSZXN1bHQoXG4gIHBheWxvYWQ6IEFYQ29udmVyc2F0aW9uTWVzc2FnZVBheWxvYWQsXG4gIHJlc3VsdDogQVhVcGxvYWRSZXN1bHQsXG4pOiBQcm9taXNlPEFYQ29udmVyc2F0aW9uTWVzc2FnZVBheWxvYWQ+IHtcbiAgY29uc3QgW3sgbm9ybWFsaXplSW1hZ2VQYXlsb2FkIH0sIHsgcmVzb2x2ZVBlcnNpc3RhYmxlTWVkaWFVcmwsIHJlc29sdmVQZXJzaXN0ZWRUaHVtYm5haWxVcmwgfV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgaW1wb3J0KCcuLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy9pbWFnZS1yZW5kZXJlci9pbWFnZS5wYXlsb2FkJyksXG4gICAgaW1wb3J0KCcuLi9jb21wb25lbnRzL3NoYXJlZC9wZXJzaXN0ZWQtbWVkaWEtdXJsJyksXG4gIF0pO1xuICBjb25zdCBiYXNlID0gbm9ybWFsaXplSW1hZ2VQYXlsb2FkKHBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25JbWFnZVBheWxvYWQpO1xuICBjb25zdCBpbWFnZXMgPSBbLi4uYmFzZS5pbWFnZXNdO1xuICBjb25zdCBpID0gaW1hZ2VzLmZpbmRJbmRleCgoeCkgPT4gIXgubWVkaWFJZCAmJiAhcmVzb2x2ZVBlcnNpc3RhYmxlTWVkaWFVcmwoeC51cmwpKTtcbiAgY29uc3Qgc2xvdCA9IGkgPj0gMCA/IGltYWdlc1tpXSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gcmVzb2x2ZVBlcnNpc3RhYmxlTWVkaWFVcmwocmVzdWx0LnVybCk7XG4gIGNvbnN0IG5leHQ6IEFYQ29udmVyc2F0aW9uSW1hZ2VNZWRpYUl0ZW0gPSB7XG4gICAgLi4uKHNsb3QgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pLFxuICAgIG1lZGlhSWQ6IHJlc3VsdC5tZWRpYUlkLFxuICAgIG1pbWVUeXBlOiByZXN1bHQubWltZVR5cGUsXG4gICAgc2l6ZTogcmVzdWx0LnNpemUsXG4gICAgdGh1bWJuYWlsVXJsOiByZXNvbHZlUGVyc2lzdGVkVGh1bWJuYWlsVXJsKHJlc3VsdC50aHVtYm5haWxVcmwgPz8gc2xvdD8udGh1bWJuYWlsVXJsLCB1cmwpLFxuICAgIG1ldGFkYXRhOiByZXN1bHQubWV0YWRhdGEsXG4gIH07XG4gIGlmICh1cmwpIHtcbiAgICBuZXh0LnVybCA9IHVybDtcbiAgfVxuICBpZiAoaSA+PSAwKSBpbWFnZXNbaV0gPSBuZXh0O1xuICBlbHNlIGltYWdlcy5wdXNoKG5leHQpO1xuICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnaW1hZ2UnLCBpbWFnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlJbWFnZUxvY2FsUHJldmlldyhcbiAgcGF5bG9hZDogQVhDb252ZXJzYXRpb25NZXNzYWdlUGF5bG9hZCxcbiAgbG9jYWxVcmw6IHN0cmluZyxcbiAgbWltZVR5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbik6IFByb21pc2U8QVhDb252ZXJzYXRpb25NZXNzYWdlUGF5bG9hZD4ge1xuICBjb25zdCBbeyBub3JtYWxpemVJbWFnZVBheWxvYWQgfSwgeyByZXNvbHZlUGVyc2lzdGFibGVNZWRpYVVybCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBpbXBvcnQoJy4uLy4uL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL2ltYWdlLXJlbmRlcmVyL2ltYWdlLnBheWxvYWQnKSxcbiAgICBpbXBvcnQoJy4uL2NvbXBvbmVudHMvc2hhcmVkL3BlcnNpc3RlZC1tZWRpYS11cmwnKSxcbiAgXSk7XG4gIGNvbnN0IGJhc2UgPSBub3JtYWxpemVJbWFnZVBheWxvYWQocGF5bG9hZCBhcyBBWENvbnZlcnNhdGlvbkltYWdlUGF5bG9hZCk7XG4gIGNvbnN0IGltYWdlcyA9IFsuLi5iYXNlLmltYWdlc107XG4gIGNvbnN0IHNsb3QgPSBpbWFnZXMuZmluZEluZGV4KCh4KSA9PiAheC5tZWRpYUlkICYmICFyZXNvbHZlUGVyc2lzdGFibGVNZWRpYVVybCh4LnVybCkpO1xuICBjb25zdCBwcmV2aWV3ID0geyB1cmw6IGxvY2FsVXJsLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBtaW1lVHlwZSB9O1xuICBpZiAoc2xvdCA+PSAwKSB7XG4gICAgaW1hZ2VzW3Nsb3RdID0geyAuLi5pbWFnZXNbc2xvdF0sIC4uLnByZXZpZXcgfTtcbiAgfSBlbHNlIGlmIChpbWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgaW1hZ2VzLnB1c2gocHJldmlldyk7XG4gIH0gZWxzZSB7XG4gICAgaW1hZ2VzWzBdID0geyAuLi5pbWFnZXNbMF0sIC4uLnByZXZpZXcgfTtcbiAgfVxuICByZXR1cm4geyAuLi5iYXNlLCB0eXBlOiAnaW1hZ2UnLCBpbWFnZXMgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1lcmdlVXBsb2FkUmVzdWx0KFxuICB0eXBlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VUeXBlLFxuICBwYXlsb2FkOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VQYXlsb2FkLFxuICByZXN1bHQ6IEFYVXBsb2FkUmVzdWx0LFxuKTogUHJvbWlzZTxBWENvbnZlcnNhdGlvbk1lc3NhZ2VQYXlsb2FkPiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgIHJldHVybiBtZXJnZUltYWdlVXBsb2FkUmVzdWx0KHBheWxvYWQsIHJlc3VsdCk7XG4gICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICBjb25zdCB7IG1lcmdlVmlkZW9VcGxvYWRSZXN1bHQgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy92aWRlby1waWNrZXIvdmlkZW8tY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIG1lcmdlVmlkZW9VcGxvYWRSZXN1bHQocGF5bG9hZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICBjb25zdCB7IG1lcmdlQXVkaW9VcGxvYWRSZXN1bHQgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy9hdWRpby1waWNrZXIvYXVkaW8tY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIG1lcmdlQXVkaW9VcGxvYWRSZXN1bHQocGF5bG9hZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgY2FzZSAnZmlsZSc6IHtcbiAgICAgIGNvbnN0IHsgbWVyZ2VGaWxlVXBsb2FkUmVzdWx0IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1jb21wb3Nlci5wYXlsb2FkJyk7XG4gICAgICByZXR1cm4gbWVyZ2VGaWxlVXBsb2FkUmVzdWx0KHBheWxvYWQsIHJlc3VsdCk7XG4gICAgfVxuICAgIGNhc2UgJ3ZvaWNlJzoge1xuICAgICAgY29uc3QgeyBtZXJnZVZvaWNlVXBsb2FkUmVzdWx0IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2NvbXBvbmVudHMvdm9pY2UtcmVjb3JkZXIvdm9pY2UtY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIG1lcmdlVm9pY2VVcGxvYWRSZXN1bHQocGF5bG9hZCwgcmVzdWx0KTtcbiAgICB9XG4gICAgY2FzZSAnc3RpY2tlcic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4ocGF5bG9hZCBhcyBFeHRyYWN0PEFYQ29udmVyc2F0aW9uTWVzc2FnZVBheWxvYWQsIHsgdHlwZTogJ3N0aWNrZXInIH0+KSxcbiAgICAgICAgdHlwZTogJ3N0aWNrZXInLFxuICAgICAgICB1cmw6IHJlc3VsdC51cmwsXG4gICAgICAgIG1lZGlhSWQ6IHJlc3VsdC5tZWRpYUlkLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5TG9jYWxQcmV2aWV3KFxuICB0eXBlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VUeXBlLFxuICBwYXlsb2FkOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VQYXlsb2FkLFxuICBsb2NhbFVybDogc3RyaW5nLFxuICBtaW1lVHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuKTogUHJvbWlzZTxBWENvbnZlcnNhdGlvbk1lc3NhZ2VQYXlsb2FkPiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgIHJldHVybiBhcHBseUltYWdlTG9jYWxQcmV2aWV3KHBheWxvYWQsIGxvY2FsVXJsLCBtaW1lVHlwZSk7XG4gICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICBjb25zdCB7IGFwcGx5VmlkZW9Mb2NhbFByZXZpZXcgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy92aWRlby1waWNrZXIvdmlkZW8tY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIGFwcGx5VmlkZW9Mb2NhbFByZXZpZXcocGF5bG9hZCwgbG9jYWxVcmwsIG1pbWVUeXBlKTtcbiAgICB9XG4gICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICBjb25zdCB7IGFwcGx5QXVkaW9Mb2NhbFByZXZpZXcgfSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy9hdWRpby1waWNrZXIvYXVkaW8tY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIGFwcGx5QXVkaW9Mb2NhbFByZXZpZXcocGF5bG9hZCwgbG9jYWxVcmwsIG1pbWVUeXBlKTtcbiAgICB9XG4gICAgY2FzZSAnZmlsZSc6IHtcbiAgICAgIGNvbnN0IHsgYXBwbHlGaWxlTG9jYWxQcmV2aWV3IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2NvbXBvbmVudHMvZmlsZS1waWNrZXIvZmlsZS1jb21wb3Nlci5wYXlsb2FkJyk7XG4gICAgICByZXR1cm4gYXBwbHlGaWxlTG9jYWxQcmV2aWV3KHBheWxvYWQsIGxvY2FsVXJsLCBtaW1lVHlwZSk7XG4gICAgfVxuICAgIGNhc2UgJ3ZvaWNlJzoge1xuICAgICAgY29uc3QgeyBhcHBseVZvaWNlTG9jYWxQcmV2aWV3IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2NvbXBvbmVudHMvdm9pY2UtcmVjb3JkZXIvdm9pY2UtY29tcG9zZXIucGF5bG9hZCcpO1xuICAgICAgcmV0dXJuIGFwcGx5Vm9pY2VMb2NhbFByZXZpZXcocGF5bG9hZCwgbG9jYWxVcmwpO1xuICAgIH1cbiAgICBjYXNlICdzdGlja2VyJzpcbiAgICAgIHJldHVybiB7IC4uLihwYXlsb2FkIGFzIEV4dHJhY3Q8QVhDb252ZXJzYXRpb25NZXNzYWdlUGF5bG9hZCwgeyB0eXBlOiAnc3RpY2tlcicgfT4pLCB0eXBlOiAnc3RpY2tlcicsIHVybDogbG9jYWxVcmwgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVXBsb2FkZXJSZWZlcmVuY2UocGF5bG9hZDogQVhDb252ZXJzYXRpb25NZXNzYWdlUGF5bG9hZCk6IEFYQ29udmVyc2F0aW9uVXBsb2FkZXJSZWZlcmVuY2Uge1xuICBzd2l0Y2ggKHBheWxvYWQudHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlJzoge1xuICAgICAgY29uc3QgZmlyc3QgPSBwYXlsb2FkLmltYWdlc1swXTtcbiAgICAgIHJldHVybiB7IHVybDogZmlyc3Q/LnVybCwgbWVkaWFJZDogZmlyc3Q/Lm1lZGlhSWQsIG1pbWVUeXBlOiBmaXJzdD8ubWltZVR5cGUsIHNpemU6IGZpcnN0Py5zaXplIH07XG4gICAgfVxuICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgY29uc3QgZmlyc3QgPSBwYXlsb2FkLnZpZGVvc1swXTtcbiAgICAgIHJldHVybiB7IHVybDogZmlyc3Q/LnVybCwgbWVkaWFJZDogZmlyc3Q/Lm1lZGlhSWQsIG1pbWVUeXBlOiBmaXJzdD8ubWltZVR5cGUsIHNpemU6IGZpcnN0Py5zaXplIH07XG4gICAgfVxuICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgY29uc3QgZmlyc3QgPSBwYXlsb2FkLmF1ZGlvc1swXTtcbiAgICAgIHJldHVybiB7IHVybDogZmlyc3Q/LnVybCwgbWVkaWFJZDogZmlyc3Q/Lm1lZGlhSWQsIG1pbWVUeXBlOiBmaXJzdD8ubWltZVR5cGUsIHNpemU6IGZpcnN0Py5zaXplIH07XG4gICAgfVxuICAgIGNhc2UgJ2ZpbGUnOiB7XG4gICAgICBjb25zdCBmaXJzdCA9IHBheWxvYWQuZmlsZXNbMF07XG4gICAgICByZXR1cm4geyB1cmw6IGZpcnN0Py51cmwsIG1lZGlhSWQ6IGZpcnN0Py5tZWRpYUlkLCBtaW1lVHlwZTogZmlyc3Q/Lm1pbWVUeXBlLCBzaXplOiBmaXJzdD8uc2l6ZSB9O1xuICAgIH1cbiAgICBjYXNlICd2b2ljZSc6XG4gICAgY2FzZSAnc3RpY2tlcic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHBheWxvYWQudXJsLFxuICAgICAgICBtZWRpYUlkOiBwYXlsb2FkLm1lZGlhSWQsXG4gICAgICAgIG1pbWVUeXBlOiBwYXlsb2FkLm1pbWVUeXBlLFxuICAgICAgICBzaXplOiBwYXlsb2FkLnNpemUsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVybChwbGF0Zm9ybUlkOiBvYmplY3QsIGJsb2I6IEJsb2IpOiBzdHJpbmcge1xuICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlT2JqZWN0VXJsKHBsYXRmb3JtSWQ6IG9iamVjdCwgdXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpICYmIHVybC5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVMb2NhbFByZXZpZXdVcmwoXG4gIGZpbGVTZXJ2aWNlOiBBWEZpbGVTZXJ2aWNlLFxuICBwbGF0Zm9ybUlkOiBvYmplY3QsXG4gIHNvdXJjZTogRmlsZSB8IEJsb2IsXG4gIG1lc3NhZ2VUeXBlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VUeXBlLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY2F0YWxvZyA9IEFYX0NPTlZFUlNBVElPTl9NRVNTQUdFX1RZUEVfRklMRV9UWVBFW21lc3NhZ2VUeXBlXTtcbiAgaWYgKCFjYXRhbG9nKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBmaWxlVHlwZSA9IGF3YWl0IGZpbGVTZXJ2aWNlLmdldEZpbGVUeXBlKGNhdGFsb2cpO1xuICBpZiAoIWZpbGVUeXBlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBjdHggPSB7IHJlYWRBc0RhdGFVcmw6IChmOiBGaWxlIHwgQmxvYikgPT4gZmlsZVNlcnZpY2UuYmxvYlRvQmFzZTY0KGYpLCBwbGF0Zm9ybUlkIH07XG4gIGNvbnN0IGV4dGVuc2lvbiA9IHJlc29sdmVGaWxlVHlwZUV4dGVuc2lvbihmaWxlVHlwZSwge1xuICAgIGZpbGU6IHNvdXJjZSBpbnN0YW5jZW9mIEZpbGUgPyBzb3VyY2UgOiB1bmRlZmluZWQsXG4gICAgbWltZVR5cGU6IHNvdXJjZS50eXBlLFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRmlsZVR5cGVVdGlsaXR5KGZpbGVUeXBlLCBjdHgsIGV4dGVuc2lvbiwgJ2NyZWF0ZUxvY2FsUHJldmlld1VybCcsIHNvdXJjZSk7XG4gIHJldHVybiB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbn1cbiJdfQ=="],"names":[],"mappings":"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"}