stream-chat-angular 6.2.0 → 6.3.0-beta.2

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 (106) hide show
  1. package/assets/i18n/en.d.ts +42 -0
  2. package/assets/version.d.ts +1 -1
  3. package/esm2020/assets/i18n/en.mjs +43 -1
  4. package/esm2020/assets/version.mjs +2 -2
  5. package/esm2020/lib/channel-list/channel-list.component.mjs +3 -3
  6. package/esm2020/lib/channel-preview/channel-preview.component.mjs +4 -1
  7. package/esm2020/lib/channel.service.mjs +6 -3
  8. package/esm2020/lib/custom-templates.service.mjs +9 -1
  9. package/esm2020/lib/icon/icon.component.mjs +1 -1
  10. package/esm2020/lib/message/message.component.mjs +21 -6
  11. package/esm2020/lib/message-actions.service.mjs +5 -1
  12. package/esm2020/lib/message-input/message-input.component.mjs +30 -5
  13. package/esm2020/lib/message-preview.mjs +3 -2
  14. package/esm2020/lib/modal/modal.component.mjs +3 -3
  15. package/esm2020/lib/modal/stream-modal.module.mjs +19 -0
  16. package/esm2020/lib/notification-list/stream-notification.module.mjs +20 -0
  17. package/esm2020/lib/paginated-list/stream-paginated-list.module.mjs +20 -0
  18. package/esm2020/lib/polls/base-poll.component.mjs +87 -0
  19. package/esm2020/lib/polls/poll/poll.component.mjs +34 -0
  20. package/esm2020/lib/polls/poll-actions/add-option/add-option.component.mjs +67 -0
  21. package/esm2020/lib/polls/poll-actions/poll-actions.component.mjs +137 -0
  22. package/esm2020/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.mjs +82 -0
  23. package/esm2020/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.mjs +63 -0
  24. package/esm2020/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.mjs +33 -0
  25. package/esm2020/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.mjs +82 -0
  26. package/esm2020/lib/polls/poll-actions/upsert-answer/upsert-answer.component.mjs +60 -0
  27. package/esm2020/lib/polls/poll-composer/poll-composer.component.mjs +134 -0
  28. package/esm2020/lib/polls/poll-composer/validators.mjs +18 -0
  29. package/esm2020/lib/polls/poll-header/poll-header.component.mjs +80 -0
  30. package/esm2020/lib/polls/poll-option-selector/poll-option-selector.component.mjs +137 -0
  31. package/esm2020/lib/polls/poll-options-list/poll-options-list.component.mjs +39 -0
  32. package/esm2020/lib/polls/poll-preview/poll-preview.component.mjs +31 -0
  33. package/esm2020/lib/polls/stream-polls.module.mjs +108 -0
  34. package/esm2020/lib/polls/unique.validator.mjs +13 -0
  35. package/esm2020/lib/stream-chat.module.mjs +26 -19
  36. package/esm2020/lib/types.mjs +1 -1
  37. package/esm2020/public-api.mjs +18 -1
  38. package/fesm2015/stream-chat-angular.mjs +1333 -61
  39. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  40. package/fesm2020/stream-chat-angular.mjs +1291 -59
  41. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  42. package/lib/channel.service.d.ts +2 -1
  43. package/lib/custom-templates.service.d.ts +14 -0
  44. package/lib/icon/icon.component.d.ts +1 -1
  45. package/lib/message/message.component.d.ts +1 -1
  46. package/lib/message-actions.service.d.ts +4 -0
  47. package/lib/message-input/message-input.component.d.ts +11 -1
  48. package/lib/message-preview.d.ts +1 -1
  49. package/lib/modal/stream-modal.module.d.ts +9 -0
  50. package/lib/notification-list/stream-notification.module.d.ts +10 -0
  51. package/lib/paginated-list/stream-paginated-list.module.d.ts +10 -0
  52. package/lib/polls/base-poll.component.d.ts +43 -0
  53. package/lib/polls/poll/poll.component.d.ts +12 -0
  54. package/lib/polls/poll-actions/add-option/add-option.component.d.ts +22 -0
  55. package/lib/polls/poll-actions/poll-actions.component.d.ts +50 -0
  56. package/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.d.ts +25 -0
  57. package/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.d.ts +22 -0
  58. package/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.d.ts +20 -0
  59. package/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.d.ts +24 -0
  60. package/lib/polls/poll-actions/upsert-answer/upsert-answer.component.d.ts +27 -0
  61. package/lib/polls/poll-composer/poll-composer.component.d.ts +43 -0
  62. package/lib/polls/poll-composer/validators.d.ts +3 -0
  63. package/lib/polls/poll-header/poll-header.component.d.ts +19 -0
  64. package/lib/polls/poll-option-selector/poll-option-selector.component.d.ts +27 -0
  65. package/lib/polls/poll-options-list/poll-options-list.component.d.ts +17 -0
  66. package/lib/polls/poll-preview/poll-preview.component.d.ts +13 -0
  67. package/lib/polls/stream-polls.module.d.ts +26 -0
  68. package/lib/polls/unique.validator.d.ts +2 -0
  69. package/lib/stream-chat.module.d.ts +20 -19
  70. package/lib/types.d.ts +2 -1
  71. package/package.json +6 -2
  72. package/public-api.d.ts +17 -0
  73. package/src/assets/i18n/en.ts +46 -0
  74. package/src/assets/styles/css/index.css +1 -1
  75. package/src/assets/styles/css/index.layout.css +1 -1
  76. package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +50 -0
  77. package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +56 -0
  78. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +4 -1
  79. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +11 -0
  80. package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +14 -0
  81. package/src/assets/styles/scss/Autocomplete/Autocomplete-theme.scss +11 -0
  82. package/src/assets/styles/scss/Dialog/Dialog-layout.scss +13 -5
  83. package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-layout.scss +14 -0
  84. package/src/assets/styles/scss/DropzoneContainer/DropzoneContainer-theme.scss +17 -0
  85. package/src/assets/styles/scss/Form/Form-layout.scss +40 -0
  86. package/src/assets/styles/scss/Form/Form-theme.scss +75 -10
  87. package/src/assets/styles/scss/Icon/Icon-layout.scss +6 -0
  88. package/src/assets/styles/scss/Icon/Icon-theme.scss +4 -0
  89. package/src/assets/styles/scss/LinkPreview/LinkPreview-layout.scss +18 -0
  90. package/src/assets/styles/scss/LinkPreview/LinkPreview-theme.scss +15 -0
  91. package/src/assets/styles/scss/Location/Location-layout.scss +52 -0
  92. package/src/assets/styles/scss/Location/Location-theme.scss +32 -0
  93. package/src/assets/styles/scss/Message/Message-layout.scss +37 -2
  94. package/src/assets/styles/scss/Message/Message-theme.scss +40 -1
  95. package/src/assets/styles/scss/MessageActionsBox/MessageActionsBox-theme.scss +8 -0
  96. package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +32 -13
  97. package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +28 -20
  98. package/src/assets/styles/scss/Modal/Modal-layout.scss +2 -0
  99. package/src/assets/styles/scss/Modal/Modal-theme.scss +21 -6
  100. package/src/assets/styles/scss/Poll/Poll-layout.scss +45 -44
  101. package/src/assets/styles/scss/Poll/Poll-theme.scss +8 -36
  102. package/src/assets/styles/scss/_icons.scss +1 -0
  103. package/src/assets/styles/scss/index.layout.scss +3 -1
  104. package/src/assets/styles/scss/index.scss +2 -0
  105. package/src/assets/version.ts +1 -1
  106. /package/src/assets/styles/scss/DragAndDropContainer/{DragAmdDropContainer-layout.scss → DragAndDropContainer-layout.scss} +0 -0
@@ -0,0 +1,134 @@
1
+ import { Component, EventEmitter, Output, ViewChild, } from '@angular/core';
2
+ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
3
+ import { VotingVisibility } from 'stream-chat';
4
+ import { atLeastOneOption, maximumNumberOfVotes } from './validators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../custom-templates.service";
7
+ import * as i2 from "../../chat-client.service";
8
+ import * as i3 from "../../notification.service";
9
+ import * as i4 from "@angular/common";
10
+ import * as i5 from "../../modal/modal.component";
11
+ import * as i6 from "../../notification-list/notification-list.component";
12
+ import * as i7 from "@angular/forms";
13
+ import * as i8 from "@ngx-translate/core";
14
+ /**
15
+ *
16
+ */
17
+ export class PollComposerComponent {
18
+ constructor(customTemplatesService, chatService, notificationService) {
19
+ this.customTemplatesService = customTemplatesService;
20
+ this.chatService = chatService;
21
+ this.notificationService = notificationService;
22
+ /**
23
+ * Emitted when a poll is created, the poll id is emitted
24
+ */
25
+ this.pollCompose = new EventEmitter();
26
+ /**
27
+ * Emitted when the poll composing is cancelled
28
+ */
29
+ this.cancel = new EventEmitter();
30
+ this.formGroup = new FormGroup({
31
+ name: new FormControl('', [Validators.required]),
32
+ options: new FormArray([new FormControl('')], [atLeastOneOption()]),
33
+ multiple_answers: new FormControl(false),
34
+ maximum_number_of_votes: new FormControl(null, [
35
+ Validators.min(2),
36
+ Validators.max(10),
37
+ ]),
38
+ is_anonymous: new FormControl(false),
39
+ allow_user_suggested_options: new FormControl(false),
40
+ allow_answers: new FormControl(false),
41
+ });
42
+ this.isModalOpen = true;
43
+ this.formGroup
44
+ .get('maximum_number_of_votes')
45
+ ?.addValidators([
46
+ maximumNumberOfVotes(this.formGroup.get('multiple_answers')),
47
+ ]);
48
+ this.formGroup.get('maximum_number_of_votes')?.disable();
49
+ this.formGroup.valueChanges.subscribe((value) => {
50
+ if (value.multiple_answers &&
51
+ this.formGroup.get('maximum_number_of_votes')?.disabled) {
52
+ this.formGroup.get('maximum_number_of_votes')?.enable();
53
+ }
54
+ else if (!value.multiple_answers &&
55
+ this.formGroup.get('maximum_number_of_votes')?.enabled) {
56
+ this.formGroup.get('maximum_number_of_votes')?.disable();
57
+ }
58
+ });
59
+ }
60
+ optionChanged(index) {
61
+ const control = this.options.at(index);
62
+ const penultimateIndex = this.options.length - 2;
63
+ if (index === this.options.length - 1 && control.value?.length === 1) {
64
+ this.addOption();
65
+ }
66
+ else if (index === penultimateIndex &&
67
+ control.value?.length === 0 &&
68
+ this.options.at(this.options.length - 1).value?.length === 0) {
69
+ this.removeLastOption();
70
+ }
71
+ }
72
+ get options() {
73
+ return this.formGroup.get('options');
74
+ }
75
+ addOption() {
76
+ const control = new FormControl('', []);
77
+ this.options.push(control);
78
+ }
79
+ removeLastOption() {
80
+ this.options.removeAt(this.options.length - 1);
81
+ }
82
+ getModalContext() {
83
+ return {
84
+ isOpen: this.isModalOpen,
85
+ isOpenChangeHandler: (isOpen) => {
86
+ if (!isOpen) {
87
+ this.cancel.emit();
88
+ }
89
+ this.isModalOpen = isOpen;
90
+ },
91
+ content: this.formContent,
92
+ };
93
+ }
94
+ async createPoll() {
95
+ try {
96
+ const maxVotesControl = this.formGroup.get('maximum_number_of_votes');
97
+ const response = await this.chatService.chatClient.polls.createPoll({
98
+ name: this.formGroup.get('name').value,
99
+ options: this.formGroup
100
+ .get('options')
101
+ .value.filter((v) => !!v)
102
+ .map((v) => ({ text: v })),
103
+ enforce_unique_vote: !this.formGroup.get('multiple_answers')?.value,
104
+ max_votes_allowed: maxVotesControl?.value
105
+ ? +maxVotesControl.value
106
+ : undefined,
107
+ voting_visibility: this.formGroup.get('is_anonymous')?.value
108
+ ? VotingVisibility.anonymous
109
+ : VotingVisibility.public,
110
+ allow_user_suggested_options: !!this.formGroup.get('allow_user_suggested_options')?.value,
111
+ allow_answers: !!this.formGroup.get('allow_answers')?.value,
112
+ });
113
+ this.pollCompose.emit(response?.id);
114
+ }
115
+ catch (error) {
116
+ this.notificationService.addTemporaryNotification('streamChat.Failed to create poll');
117
+ throw error;
118
+ }
119
+ }
120
+ }
121
+ PollComposerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChatClientService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
122
+ PollComposerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollComposerComponent, selector: "stream-poll-composer", outputs: { pollCompose: "pollCompose", cancel: "cancel" }, viewQueries: [{ propertyName: "formContent", first: true, predicate: ["formContent"], descendants: true }], ngImport: i0, template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: i6.NotificationListComponent, selector: "stream-notification-list" }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollComposerComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'stream-poll-composer', template: "<ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat-angular__create-poll-modal str-chat__create-poll-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #formContent>\n <div\n class=\"str-chat__dialog str-chat__poll-creation-dialog\"\n data-testid=\"poll-creation-dialog\"\n >\n <div class=\"str-chat__modal-header\">\n <div class=\"str-chat__modal-header__title\">\n {{ \"streamChat.Create poll\" | translate }}\n </div>\n </div>\n <div class=\"str-chat__dialog__body\">\n <form [formGroup]=\"formGroup\" autocomplete=\"off\">\n <div\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('name')?.errors && formGroup.get('name')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Question\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"name\")?.errors?.required &&\n formGroup.get(\"name\")?.touched\n ? \"streamChat.Question is required\"\n : \"\"\n ) | translate\n }}\n </div>\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n placeholder=\"{{ 'streamChat.Ask a question' | translate }}\"\n />\n </div>\n </div>\n <fieldset class=\"str-chat__form__field str-chat__form__input-fieldset\">\n <legend class=\"str-chat__form__field-label\">\n {{ \"streamChat.Options\" | translate }}\n </legend>\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"options\")?.errors?.atLeastOne &&\n formGroup.get(\"options\")?.touched\n ? \"streamChat.Provide at least one option\"\n : \"\"\n ) | translate\n }}\n </div>\n <ng-container formArrayName=\"options\">\n <div class=\"str-chat__form__input-fieldset__values\">\n <!-- eslint-disable @angular-eslint/template/use-track-by-function -->\n <ng-container\n *ngFor=\"let option of options.controls; let i = index\"\n >\n <!-- eslint-enable @angular-eslint/template/use-track-by-function -->\n <div class=\"str-chat__drag-and-drop-container__item\">\n <div class=\"str-chat__form__input-field\">\n <input\n id=\"option{{ i }}\"\n name=\"option{{ i }}\"\n type=\"text\"\n [formControl]=\"option\"\n (input)=\"optionChanged(i)\"\n placeholder=\"{{ 'streamChat.Add an option' | translate }}\"\n />\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </fieldset>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'multiple_answers',\n control: formGroup.get('multiple_answers'),\n label: 'streamChat.Multiple answers' | translate\n }\n \"\n ></ng-container>\n <div\n *ngIf=\"formGroup.get('multiple_answers')?.value\"\n class=\"str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label\"\n [class.str-chat__form__input-field--has-error]=\"\n formGroup.get('maximum_number_of_votes')?.errors &&\n formGroup.get('maximum_number_of_votes')?.touched\n \"\n >\n <label class=\"str-chat__form__field-label\" htmlFor=\"name\">\n {{ \"streamChat.Maximum number of votes\" | translate }}\n </label>\n <div class=\"str-chat__form__input-field__value\">\n <div\n class=\"str-chat__form-field-error str-chat__form__input-field__error\"\n >\n {{\n (formGroup.get(\"maximum_number_of_votes\")?.errors &&\n formGroup.get(\"maximum_number_of_votes\")?.touched\n ? \"streamChat.Provide a value between {{ min }}\n and {{ max }}\" : \"\" ) | translate: { min: 2, max: 10 } }}\n </div>\n <input\n id=\"maximum_number_of_votes\"\n type=\"text\"\n formControlName=\"maximum_number_of_votes\"\n placeholder=\"{{ 'streamChat.Provide a value between ' \n + '{{ min }} and {{ max }}' | translate: { min: 2, max: 10 } }}\"\n />\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'is_anonymous',\n control: formGroup.get('is_anonymous'),\n label: 'streamChat.Anonymous poll' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_user_suggested_options',\n control: formGroup.get('allow_user_suggested_options'),\n label: 'streamChat.Allow option suggestions' | translate\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n switch;\n context: {\n name: 'allow_answers',\n control: formGroup.get('allow_answers'),\n label: 'streamChat.Allow comments' | translate\n }\n \"\n ></ng-container>\n </form>\n </div>\n <stream-notification-list></stream-notification-list>\n <div class=\"str-chat__dialog__controls\">\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel\"\n (click)=\"cancel.emit()\"\n type=\"button\"\n >\n {{ \"streamChat.Cancel\" | translate }}\n </button>\n <button\n class=\"str-chat__dialog__controls-button str-chat__dialog__controls-button--submit\"\n (click)=\"createPoll()\"\n [disabled]=\"formGroup.invalid\"\n type=\"submit\"\n >\n {{ \"streamChat.Create\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #switch let-control=\"control\" let-label=\"label\" let-name=\"name\">\n <div class=\"str-chat__form__field str-chat__form__switch-field\">\n <label>\n <div class=\"str-chat__form__field str-chat__form__switch-field-content\">\n <div class=\"str-chat__form__field str-chat__form__switch-field__text\">\n {{ label | translate }}\n </div>\n </div>\n <input\n type=\"checkbox\"\n [checked]=\"control.value\"\n id=\"{{ name }}\"\n name=\"{{ name }}\"\n />\n <div\n class=\"str-chat__form__switch-field__switch\"\n [class.str-chat__form__switch-field__switch--on]=\"control.value\"\n (click)=\"control.setValue(!control.value, { emitEvent: true })\"\n (keyup.enter)=\"control.setValue(!control.value, { emitEvent: true })\"\n >\n <div class=\"str-chat__form__switch-field__switch-handle\"></div>\n </div>\n </label>\n </div>\n</ng-template>\n" }]
126
+ }], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.ChatClientService }, { type: i3.NotificationService }]; }, propDecorators: { pollCompose: [{
127
+ type: Output
128
+ }], cancel: [{
129
+ type: Output
130
+ }], formContent: [{
131
+ type: ViewChild,
132
+ args: ['formContent']
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1jb21wb3Nlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvcG9sbHMvcG9sbC1jb21wb3Nlci9wb2xsLWNvbXBvc2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUV0RTs7R0FFRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDLFlBQ1csc0JBQThDLEVBQy9DLFdBQThCLEVBQzlCLG1CQUF3QztRQUZ2QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBN0JsRDs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRDs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN4QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENB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QVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLO2dCQUNuRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSztvQkFDdkMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUs7b0JBQ3hCLENBQUMsQ0FBQyxTQUFTO2dCQUNiLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUs7b0JBQzFELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUM1QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDM0IsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoRCw4QkFBOEIsQ0FDL0IsRUFBRSxLQUFLO2dCQUNSLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSzthQUM1RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msa0NBQWtDLENBQ25DLENBQUM7WUFDRixNQUFNLEtBQUssQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7a0hBN0hVLHFCQUFxQjtzR0FBckIscUJBQXFCLG1PQ3ZCbEMsK2lRQTZOQTsyRkR0TWEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHNCQUFzQjsrS0FRdEIsV0FBVztzQkFBcEIsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBaUIyQixXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFZvdGluZ1Zpc2liaWxpdHkgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXRMZWFzdE9uZU9wdGlvbiwgbWF4aW11bU51bWJlck9mVm90ZXMgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG4vKipcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1wb2xsLWNvbXBvc2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvbGwtY29tcG9zZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQb2xsQ29tcG9zZXJDb21wb25lbnQge1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcG9sbCBpcyBjcmVhdGVkLCB0aGUgcG9sbCBpZCBpcyBlbWl0dGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcG9sbENvbXBvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgcG9sbCBjb21wb3NpbmcgaXMgY2FuY2VsbGVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgb3B0aW9uczogbmV3IEZvcm1BcnJheTxGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPj4oXG4gICAgICBbbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KCcnKV0sXG4gICAgICBbYXRMZWFzdE9uZU9wdGlvbigpXVxuICAgICksXG4gICAgbXVsdGlwbGVfYW5zd2VyczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBtYXhpbXVtX251bWJlcl9vZl92b3RlczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtcbiAgICAgIFZhbGlkYXRvcnMubWluKDIpLFxuICAgICAgVmFsaWRhdG9ycy5tYXgoMTApLFxuICAgIF0pLFxuICAgIGlzX2Fub255bW91czogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGFsbG93X2Fuc3dlcnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gIH0pO1xuICBpc01vZGFsT3BlbiA9IHRydWU7XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db250ZW50JykgcHJpdmF0ZSBmb3JtQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybUdyb3VwXG4gICAgICAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpXG4gICAgICA/LmFkZFZhbGlkYXRvcnMoW1xuICAgICAgICBtYXhpbXVtTnVtYmVyT2ZWb3RlcyhcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSBhcyBGb3JtQ29udHJvbDxib29sZWFuPlxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5kaXNhYmxlKCk7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUubXVsdGlwbGVfYW5zd2VycyAmJlxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICF2YWx1ZS5tdWx0aXBsZV9hbnN3ZXJzICYmXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZW5hYmxlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnbWF4aW11bV9udW1iZXJfb2Zfdm90ZXMnKT8uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3B0aW9uQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMub3B0aW9ucy5hdChpbmRleCk7XG4gICAgY29uc3QgcGVudWx0aW1hdGVJbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAyO1xuICAgIGlmIChpbmRleCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDEgJiYgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmFkZE9wdGlvbigpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpbmRleCA9PT0gcGVudWx0aW1hdGVJbmRleCAmJlxuICAgICAgY29udHJvbC52YWx1ZT8ubGVuZ3RoID09PSAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMuYXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpLnZhbHVlPy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtQXJyYXk8XG4gICAgICBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPlxuICAgID47XG4gIH1cblxuICBhZGRPcHRpb24oKSB7XG4gICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPignJywgW10pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKGNvbnRyb2wpO1xuICB9XG5cbiAgcmVtb3ZlTGFzdE9wdGlvbigpIHtcbiAgICB0aGlzLm9wdGlvbnMucmVtb3ZlQXQodGhpcy5vcHRpb25zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0TW9kYWxDb250ZXh0KCk6IE1vZGFsQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pc01vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbiA9IGlzT3BlbjtcbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLmZvcm1Db250ZW50LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVQb2xsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYXhWb3Rlc0NvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuY2hhdENsaWVudC5wb2xscy5jcmVhdGVQb2xsKHtcbiAgICAgICAgbmFtZTogdGhpcy5mb3JtR3JvdXAuZ2V0KCduYW1lJykhLnZhbHVlISxcbiAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KCdvcHRpb25zJykhXG4gICAgICAgICAgLnZhbHVlLmZpbHRlcigodikgPT4gISF2KVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7IHRleHQ6IHYhIH0pKSxcbiAgICAgICAgZW5mb3JjZV91bmlxdWVfdm90ZTogIXRoaXMuZm9ybUdyb3VwLmdldCgnbXVsdGlwbGVfYW5zd2VycycpPy52YWx1ZSxcbiAgICAgICAgbWF4X3ZvdGVzX2FsbG93ZWQ6IG1heFZvdGVzQ29udHJvbD8udmFsdWVcbiAgICAgICAgICA/ICttYXhWb3Rlc0NvbnRyb2wudmFsdWVcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgdm90aW5nX3Zpc2liaWxpdHk6IHRoaXMuZm9ybUdyb3VwLmdldCgnaXNfYW5vbnltb3VzJyk/LnZhbHVlXG4gICAgICAgICAgPyBWb3RpbmdWaXNpYmlsaXR5LmFub255bW91c1xuICAgICAgICAgIDogVm90aW5nVmlzaWJpbGl0eS5wdWJsaWMsXG4gICAgICAgIGFsbG93X3VzZXJfc3VnZ2VzdGVkX29wdGlvbnM6ICEhdGhpcy5mb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJ1xuICAgICAgICApPy52YWx1ZSxcbiAgICAgICAgYWxsb3dfYW5zd2VyczogISF0aGlzLmZvcm1Hcm91cC5nZXQoJ2FsbG93X2Fuc3dlcnMnKT8udmFsdWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9sbENvbXBvc2UuZW1pdChyZXNwb25zZT8uaWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5GYWlsZWQgdG8gY3JlYXRlIHBvbGwnXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHItY2hhdC1hbmd1bGFyX19jcmVhdGUtcG9sbC1tb2RhbCBzdHItY2hhdF9fY3JlYXRlLXBvbGwtbW9kYWxcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvcm1Db250ZW50PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nIHN0ci1jaGF0X19wb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gICAgZGF0YS10ZXN0aWQ9XCJwb2xsLWNyZWF0aW9uLWRpYWxvZ1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21vZGFsLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tb2RhbC1oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGUgcG9sbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fYm9keVwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLXdpdGgtbGFiZWxcIlxuICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQtLWhhcy1lcnJvcl09XCJcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8uZXJyb3JzICYmIGZvcm1Hcm91cC5nZXQoJ25hbWUnKT8udG91Y2hlZFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQtbGFiZWxcIiBodG1sRm9yPVwibmFtZVwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0LlF1ZXN0aW9uXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRfX3ZhbHVlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJuYW1lXCIpPy5lcnJvcnM/LnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm5hbWVcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICAgID8gXCJzdHJlYW1DaGF0LlF1ZXN0aW9uIGlzIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibmFtZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQXNrIGEgcXVlc3Rpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkc2V0XCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgXCJzdHJlYW1DaGF0Lk9wdGlvbnNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm0tZmllbGQtZXJyb3Igc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX19lcnJvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgKGZvcm1Hcm91cC5nZXQoXCJvcHRpb25zXCIpPy5lcnJvcnM/LmF0TGVhc3RPbmUgJiZcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcIm9wdGlvbnNcIik/LnRvdWNoZWRcbiAgICAgICAgICAgICAgICA/IFwic3RyZWFtQ2hhdC5Qcm92aWRlIGF0IGxlYXN0IG9uZSBvcHRpb25cIlxuICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGRzZXRfX3ZhbHVlc1wiPlxuICAgICAgICAgICAgICA8IS0tIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBlc2xpbnQtZW5hYmxlIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS91c2UtdHJhY2stYnktZnVuY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kcmFnLWFuZC1kcm9wLWNvbnRhaW5lcl9faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cIm9wdGlvbnt7IGkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJvcHRpb257eyBpIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9wdGlvbkNoYW5nZWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3N0cmVhbUNoYXQuQWRkIGFuIG9wdGlvbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc3dpdGNoO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICBuYW1lOiAnbXVsdGlwbGVfYW5zd2VycycsXG4gICAgICAgICAgICAgIGNvbnRyb2w6IGZvcm1Hcm91cC5nZXQoJ211bHRpcGxlX2Fuc3dlcnMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0Lk11bHRpcGxlIGFuc3dlcnMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KCdtdWx0aXBsZV9hbnN3ZXJzJyk/LnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9faW5wdXQtZmllbGQgc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS13aXRoLWxhYmVsXCJcbiAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkLS1oYXMtZXJyb3JdPVwiXG4gICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdtYXhpbXVtX251bWJlcl9vZl92b3RlcycpPy5lcnJvcnMgJiZcbiAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ21heGltdW1fbnVtYmVyX29mX3ZvdGVzJyk/LnRvdWNoZWRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2ZpZWxkLWxhYmVsXCIgaHRtbEZvcj1cIm5hbWVcIj5cbiAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5NYXhpbXVtIG51bWJlciBvZiB2b3Rlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2Zvcm1fX2lucHV0LWZpZWxkX192YWx1ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19mb3JtLWZpZWxkLWVycm9yIHN0ci1jaGF0X19mb3JtX19pbnB1dC1maWVsZF9fZXJyb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChmb3JtR3JvdXAuZ2V0KFwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIik/LmVycm9ycyAmJlxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiKT8udG91Y2hlZFxuICAgICAgICAgICAgICAgICAgPyBcInN0cmVhbUNoYXQuUHJvdmlkZSBhIHZhbHVlIGJldHdlZW4ge3sgbWluIH19XG4gICAgICAgICAgICAgIGFuZCB7eyBtYXggfX1cIiA6IFwiXCIgKSB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJtYXhpbXVtX251bWJlcl9vZl92b3Rlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4aW11bV9udW1iZXJfb2Zfdm90ZXNcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdzdHJlYW1DaGF0LlByb3ZpZGUgYSB2YWx1ZSBiZXR3ZWVuICcgXG4gICAgICAgICAgICAgICsgJ3t7IG1pbiB9fSBhbmQge3sgbWF4IH19JyB8IHRyYW5zbGF0ZTogeyBtaW46IDIsIG1heDogMTAgfSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpc19hbm9ueW1vdXMnLFxuICAgICAgICAgICAgICBjb250cm9sOiBmb3JtR3JvdXAuZ2V0KCdpc19hbm9ueW1vdXMnKSxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzdHJlYW1DaGF0LkFub255bW91cyBwb2xsJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd191c2VyX3N1Z2dlc3RlZF9vcHRpb25zJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfdXNlcl9zdWdnZXN0ZWRfb3B0aW9ucycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgb3B0aW9uIHN1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzd2l0Y2g7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgIG5hbWU6ICdhbGxvd19hbnN3ZXJzJyxcbiAgICAgICAgICAgICAgY29udHJvbDogZm9ybUdyb3VwLmdldCgnYWxsb3dfYW5zd2VycycpLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N0cmVhbUNoYXQuQWxsb3cgY29tbWVudHMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uIHN0ci1jaGF0X19kaWFsb2dfX2NvbnRyb2xzLWJ1dHRvbi0tY2FuY2VsXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAge3sgXCJzdHJlYW1DaGF0LkNhbmNlbFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZGlhbG9nX19jb250cm9scy1idXR0b24gc3RyLWNoYXRfX2RpYWxvZ19fY29udHJvbHMtYnV0dG9uLS1zdWJtaXRcIlxuICAgICAgICAoY2xpY2spPVwiY3JlYXRlUG9sbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5DcmVhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzd2l0Y2ggbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtbmFtZT1cIm5hbWVcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkXCI+XG4gICAgPGxhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19maWVsZCBzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX190ZXh0XCI+XG4gICAgICAgICAge3sgbGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbY2hlY2tlZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICAgICAgbmFtZT1cInt7IG5hbWUgfX1cIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZm9ybV9fc3dpdGNoLWZpZWxkX19zd2l0Y2hcIlxuICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2Zvcm1fX3N3aXRjaC1maWVsZF9fc3dpdGNoLS1vbl09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImNvbnRyb2wuc2V0VmFsdWUoIWNvbnRyb2wudmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19mb3JtX19zd2l0Y2gtZmllbGRfX3N3aXRjaC1oYW5kbGVcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ export function atLeastOneOption() {
2
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3
+ return (control) => {
4
+ const formArray = control;
5
+ const hasAtLeastOne = formArray.value.some((item) => !!item);
6
+ return hasAtLeastOne ? null : { atLeastOne: true };
7
+ };
8
+ }
9
+ export function maximumNumberOfVotes(canHaveMultipleVotes) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ return (control) => {
12
+ const formControl = control;
13
+ return canHaveMultipleVotes.value && !formControl.value
14
+ ? { maximumNumberOfVotes: true }
15
+ : null;
16
+ };
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWNvbXBvc2VyL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxVQUFVLGdCQUFnQjtJQUM5Qiw4REFBOEQ7SUFDOUQsT0FBTyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtRQUM1QyxNQUFNLFNBQVMsR0FBRyxPQUFnRCxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsb0JBQTBDO0lBRTFDLDhEQUE4RDtJQUM5RCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzVDLE1BQU0sV0FBVyxHQUFHLE9BQXFDLENBQUM7UUFDMUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztZQUNyRCxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUU7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdExlYXN0T25lT3B0aW9uKCk6IFZhbGlkYXRvckZuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbCBhcyBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4+O1xuICAgIGNvbnN0IGhhc0F0TGVhc3RPbmUgPSBmb3JtQXJyYXkudmFsdWUuc29tZSgoaXRlbSkgPT4gISFpdGVtKTtcbiAgICByZXR1cm4gaGFzQXRMZWFzdE9uZSA/IG51bGwgOiB7IGF0TGVhc3RPbmU6IHRydWUgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heGltdW1OdW1iZXJPZlZvdGVzKFxuICBjYW5IYXZlTXVsdGlwbGVWb3RlczogRm9ybUNvbnRyb2w8Ym9vbGVhbj5cbik6IFZhbGlkYXRvckZuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBjb250cm9sIGFzIEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+O1xuICAgIHJldHVybiBjYW5IYXZlTXVsdGlwbGVWb3Rlcy52YWx1ZSAmJiAhZm9ybUNvbnRyb2wudmFsdWVcbiAgICAgID8geyBtYXhpbXVtTnVtYmVyT2ZWb3RlczogdHJ1ZSB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,80 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { BasePollComponent } from '../base-poll.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ /**
6
+ *
7
+ */
8
+ export class PollHeaderComponent extends BasePollComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.name = '';
12
+ this.selectionInstructions = {
13
+ text: '',
14
+ count: undefined,
15
+ };
16
+ }
17
+ stateStoreSelector(poll, markForCheck) {
18
+ const unsubscribe = poll.state.subscribeWithSelector((state) => ({
19
+ name: state.name,
20
+ is_closed: state.is_closed,
21
+ enforce_unique_vote: state.enforce_unique_vote,
22
+ max_votes_allowed: state.max_votes_allowed,
23
+ options: state.options,
24
+ }), (state) => {
25
+ const name = state.name;
26
+ const selectionInstructions = this.getSelectionInstructions(state);
27
+ let changed = false;
28
+ if (name !== this.name) {
29
+ this.name = name;
30
+ changed = true;
31
+ }
32
+ if (selectionInstructions.text !== this.selectionInstructions.text ||
33
+ selectionInstructions.count !== this.selectionInstructions.count) {
34
+ this.selectionInstructions = selectionInstructions;
35
+ changed = true;
36
+ }
37
+ if (changed) {
38
+ markForCheck();
39
+ }
40
+ });
41
+ return unsubscribe;
42
+ }
43
+ getSelectionInstructions(state) {
44
+ if (state.is_closed)
45
+ return {
46
+ text: 'streamChat.Vote ended',
47
+ count: undefined,
48
+ };
49
+ if (state.enforce_unique_vote || state.options.length === 1) {
50
+ return {
51
+ text: 'streamChat.Select one',
52
+ count: undefined,
53
+ };
54
+ }
55
+ if (state.max_votes_allowed)
56
+ return {
57
+ text: 'streamChat.Select up to {{count}}',
58
+ count: state.max_votes_allowed > state.options.length
59
+ ? state.options.length
60
+ : state.max_votes_allowed,
61
+ };
62
+ if (state.options.length > 1) {
63
+ return {
64
+ text: 'streamChat.Select one or more',
65
+ count: undefined,
66
+ };
67
+ }
68
+ return {
69
+ text: '',
70
+ count: undefined,
71
+ };
72
+ }
73
+ }
74
+ PollHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
75
+ PollHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollHeaderComponent, selector: "stream-poll-header", usesInheritance: true, ngImport: i0, template: "<div class=\"str-chat__poll-header\">\n <div class=\"str-chat__poll-title\">{{ name }}</div>\n <div class=\"str-chat__poll-subtitle\">\n {{ selectionInstructions.text | translate : selectionInstructions }}\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollHeaderComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'stream-poll-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"str-chat__poll-header\">\n <div class=\"str-chat__poll-title\">{{ name }}</div>\n <div class=\"str-chat__poll-subtitle\">\n {{ selectionInstructions.text | translate : selectionInstructions }}\n </div>\n</div>\n" }]
79
+ }] });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtaGVhZGVyL3BvbGwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLWhlYWRlci9wb2xsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFPM0Q7O0dBRUc7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBTjFEOztRQU9FLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDViwwQkFBcUIsR0FBMEI7WUFDN0MsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDO0tBNEVIO0lBMUVXLGtCQUFrQixDQUMxQixJQUFVLEVBQ1YsWUFBd0I7UUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FDbEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7WUFDOUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxFQUNGLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3hCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5FLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtZQUNELElBQ0UscUJBQXFCLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO2dCQUM5RCxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFDaEU7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO2dCQUNuRCxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO1lBRUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0IsQ0FDdEIsS0FHQztRQUVELElBQUksS0FBSyxDQUFDLFNBQVM7WUFDakIsT0FBTztnQkFDTCxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixLQUFLLEVBQUUsU0FBUzthQUNqQixDQUFDO1FBQ0osSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCO1lBQ3pCLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLG1DQUFtQztnQkFDekMsS0FBSyxFQUNILEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCO2FBQzlCLENBQUM7UUFDSixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPO2dCQUNMLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUM7U0FDSDtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUM7SUFDSixDQUFDOztnSEFoRlUsbUJBQW1CO29HQUFuQixtQkFBbUIsaUZDbEJoQyx3T0FNQTsyRkRZYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb2xsLCBQb2xsU3RhdGUgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuXG50eXBlIFNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHtcbiAgdGV4dDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VQb2xsQ29tcG9uZW50IHtcbiAgbmFtZSA9ICcnO1xuICBzZWxlY3Rpb25JbnN0cnVjdGlvbnM6IFNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHtcbiAgICB0ZXh0OiAnJyxcbiAgICBjb3VudDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXG4gICAgcG9sbDogUG9sbCxcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgaXNfY2xvc2VkOiBzdGF0ZS5pc19jbG9zZWQsXG4gICAgICAgIGVuZm9yY2VfdW5pcXVlX3ZvdGU6IHN0YXRlLmVuZm9yY2VfdW5pcXVlX3ZvdGUsXG4gICAgICAgIG1heF92b3Rlc19hbGxvd2VkOiBzdGF0ZS5tYXhfdm90ZXNfYWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogc3RhdGUub3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzdGF0ZS5uYW1lO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25JbnN0cnVjdGlvbnMgPSB0aGlzLmdldFNlbGVjdGlvbkluc3RydWN0aW9ucyhzdGF0ZSk7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlbGVjdGlvbkluc3RydWN0aW9ucy50ZXh0ICE9PSB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucy50ZXh0IHx8XG4gICAgICAgICAgc2VsZWN0aW9uSW5zdHJ1Y3Rpb25zLmNvdW50ICE9PSB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucy5jb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkluc3RydWN0aW9ucyA9IHNlbGVjdGlvbkluc3RydWN0aW9ucztcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgbWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgZ2V0U2VsZWN0aW9uSW5zdHJ1Y3Rpb25zKFxuICAgIHN0YXRlOiBQaWNrPFxuICAgICAgUG9sbFN0YXRlLFxuICAgICAgJ2lzX2Nsb3NlZCcgfCAnZW5mb3JjZV91bmlxdWVfdm90ZScgfCAnbWF4X3ZvdGVzX2FsbG93ZWQnIHwgJ29wdGlvbnMnXG4gICAgPlxuICApOiBTZWxlY3Rpb25JbnN0cnVjdGlvbnMge1xuICAgIGlmIChzdGF0ZS5pc19jbG9zZWQpXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiAnc3RyZWFtQ2hhdC5Wb3RlIGVuZGVkJyxcbiAgICAgICAgY291bnQ6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgaWYgKHN0YXRlLmVuZm9yY2VfdW5pcXVlX3ZvdGUgfHwgc3RhdGUub3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6ICdzdHJlYW1DaGF0LlNlbGVjdCBvbmUnLFxuICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm1heF92b3Rlc19hbGxvd2VkKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogJ3N0cmVhbUNoYXQuU2VsZWN0IHVwIHRvIHt7Y291bnR9fScsXG4gICAgICAgIGNvdW50OlxuICAgICAgICAgIHN0YXRlLm1heF92b3Rlc19hbGxvd2VkID4gc3RhdGUub3B0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgID8gc3RhdGUub3B0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgIDogc3RhdGUubWF4X3ZvdGVzX2FsbG93ZWQsXG4gICAgICB9O1xuICAgIGlmIChzdGF0ZS5vcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6ICdzdHJlYW1DaGF0LlNlbGVjdCBvbmUgb3IgbW9yZScsXG4gICAgICAgIGNvdW50OiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogJycsXG4gICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19wb2xsLXRpdGxlXCI+e3sgbmFtZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtc3VidGl0bGVcIj5cbiAgICB7eyBzZWxlY3Rpb25JbnN0cnVjdGlvbnMudGV4dCB8IHRyYW5zbGF0ZSA6IHNlbGVjdGlvbkluc3RydWN0aW9ucyB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,137 @@
1
+ import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
+ import { BasePollComponent } from '../base-poll.component';
3
+ import { isVoteAnswer, } from 'stream-chat';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "../../avatar-placeholder/avatar-placeholder.component";
7
+ import * as i3 from "@ngx-translate/core";
8
+ /**
9
+ *
10
+ */
11
+ export class PollOptionSelectorComponent extends BasePollComponent {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.displayAvatarCount = 3;
15
+ this.voteCountVerbose = false;
16
+ this.isClosed = false;
17
+ this.latestVotes = [];
18
+ this.isWinner = false;
19
+ this.voteCount = 0;
20
+ this.winningOptionCount = 0;
21
+ this.maxVoteAllowedCount = 0;
22
+ this.ownVoteCount = 0;
23
+ }
24
+ ngOnChanges(changes) {
25
+ super.ngOnChanges(changes);
26
+ if (changes['option']) {
27
+ this.setupStateStoreSelector();
28
+ }
29
+ }
30
+ async toggleVote() {
31
+ if (!this.canVote || !this.option?.id || !this.messageId || this.isClosed)
32
+ return;
33
+ const haveVotedForTheOption = !!this.ownVote;
34
+ if (!haveVotedForTheOption &&
35
+ this.maxVoteAllowedCount > 0 &&
36
+ this.ownVoteCount >= this.maxVoteAllowedCount) {
37
+ this.addNotification('streamChat.You have reached the maximum number of votes allowed');
38
+ return;
39
+ }
40
+ try {
41
+ await (haveVotedForTheOption
42
+ ? this.poll?.removeVote(this.ownVote.id, this.messageId)
43
+ : this.poll?.castVote(this.option?.id, this.messageId));
44
+ }
45
+ catch (error) {
46
+ this.notificationService.addTemporaryNotification('streamChat.Failed to cast vote');
47
+ throw error;
48
+ }
49
+ }
50
+ trackByVoteId(_, vote) {
51
+ return vote.id;
52
+ }
53
+ stateStoreSelector(poll, markForCheck) {
54
+ const unsubscribe = poll.state.subscribeWithSelector((nextValue) => {
55
+ return {
56
+ is_closed: nextValue.is_closed,
57
+ latest_votes_by_option: nextValue.latest_votes_by_option,
58
+ maxVotedOptionIds: nextValue.maxVotedOptionIds,
59
+ ownVotesByOptionId: nextValue.ownVotesByOptionId,
60
+ vote_counts_by_option: nextValue.vote_counts_by_option,
61
+ voting_visibility: nextValue.voting_visibility,
62
+ max_votes_allowed: nextValue.max_votes_allowed,
63
+ };
64
+ }, (state) => {
65
+ const isClosed = state.is_closed;
66
+ const latestVotes = state.latest_votes_by_option[this.option?.id ?? '']?.filter((vote) => !!vote.user && !isVoteAnswer(vote)) ?? [];
67
+ const isWinner = state.maxVotedOptionIds.includes(this.option?.id ?? '') &&
68
+ state.maxVotedOptionIds.length === 1;
69
+ const ownVote = state.ownVotesByOptionId[this.option?.id ?? ''];
70
+ const voteCount = state.vote_counts_by_option[this.option?.id ?? ''];
71
+ const votingVisibility = state.voting_visibility;
72
+ const winningOptionCount = state.vote_counts_by_option[state.maxVotedOptionIds?.[0] ?? ''];
73
+ const maxVoteAllowedCount = state.max_votes_allowed;
74
+ const ownVoteCount = Object.keys(state.ownVotesByOptionId).length;
75
+ let changed = false;
76
+ if (isClosed !== this.isClosed) {
77
+ this.isClosed = isClosed ?? false;
78
+ changed = true;
79
+ }
80
+ if (latestVotes !== this.latestVotes) {
81
+ this.latestVotes = latestVotes ?? [];
82
+ changed = true;
83
+ }
84
+ if (isWinner !== this.isWinner) {
85
+ this.isWinner = isWinner ?? false;
86
+ changed = true;
87
+ }
88
+ if (ownVote !== this.ownVote) {
89
+ this.ownVote = ownVote ?? undefined;
90
+ changed = true;
91
+ }
92
+ if (voteCount !== this.voteCount) {
93
+ this.voteCount = voteCount ?? 0;
94
+ changed = true;
95
+ }
96
+ if (votingVisibility !== this.votingVisibility) {
97
+ this.votingVisibility = votingVisibility ?? undefined;
98
+ changed = true;
99
+ }
100
+ if (winningOptionCount !== this.winningOptionCount) {
101
+ this.winningOptionCount = winningOptionCount ?? 0;
102
+ changed = true;
103
+ }
104
+ if (maxVoteAllowedCount !== this.maxVoteAllowedCount) {
105
+ this.maxVoteAllowedCount = maxVoteAllowedCount ?? 0;
106
+ changed = true;
107
+ }
108
+ if (ownVoteCount !== this.ownVoteCount) {
109
+ this.ownVoteCount = ownVoteCount ?? 0;
110
+ changed = true;
111
+ }
112
+ if (this.dismissNotificationFn &&
113
+ this.maxVoteAllowedCount > 0 &&
114
+ this.ownVoteCount <= this.maxVoteAllowedCount) {
115
+ this.dismissNotificationFn();
116
+ changed = true;
117
+ }
118
+ if (changed) {
119
+ markForCheck();
120
+ }
121
+ });
122
+ return unsubscribe;
123
+ }
124
+ }
125
+ PollOptionSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
126
+ PollOptionSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollOptionSelectorComponent, selector: "stream-poll-option-selector", inputs: { option: "option", displayAvatarCount: "displayAvatarCount", voteCountVerbose: "voteCountVerbose" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__poll-option\"\n [class.str-chat__poll-option--votable]=\"\n !isClosed &&\n canVote &&\n maxVoteAllowedCount &&\n ownVoteCount < maxVoteAllowedCount &&\n !ownVote\n \"\n (click)=\"toggleVote()\"\n (keyup.enter)=\"toggleVote()\"\n>\n <ng-container *ngIf=\"canVote\">\n <ng-container *ngTemplateOutlet=\"checkmark\"></ng-container>\n </ng-container>\n <div class=\"str-chat__poll-option-data\">\n <p class=\"str-chat__poll-option-text\">{{ option?.text }}</p>\n <ng-container *ngIf=\"displayAvatarCount && votingVisibility === 'public'\">\n <div\n *ngFor=\"let vote of latestVotes; trackBy: trackByVoteId\"\n class=\"str-chat__poll-option-voters\"\n >\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote.user\"\n [imageUrl]=\"vote.user?.image\"\n [name]=\"vote.user?.name\"\n type=\"user\"\n ></stream-avatar-placeholder>\n </div>\n </ng-container>\n <div class=\"str-chat__poll-option-vote-count\">\n <ng-container *ngIf=\"voteCountVerbose; else count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount} }}\n </ng-container>\n <ng-template #count>\n {{ voteCount }}\n </ng-template>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"amountBar\"></ng-container>\n</div>\n\n<ng-template #checkmark>\n <div\n class=\"str-chat__checkmark\"\n [class.str-chat__checkmark--checked]=\"!!ownVote\"\n ></div>\n</ng-template>\n\n<ng-template #amountBar>\n <div\n class=\"str-chat__amount-bar str-chat__poll-option__votes-bar\"\n [class.str-chat__poll-option__votes-bar--winner]=\"isClosed && isWinner\"\n role=\"progressbar\"\n [ngStyle]=\"{\n '--str-chat__amount-bar-fulfillment':\n (winningOptionCount && voteCount / winningOptionCount) * 100 + '%'\n }\"\n ></div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionSelectorComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'stream-poll-option-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__poll-option\"\n [class.str-chat__poll-option--votable]=\"\n !isClosed &&\n canVote &&\n maxVoteAllowedCount &&\n ownVoteCount < maxVoteAllowedCount &&\n !ownVote\n \"\n (click)=\"toggleVote()\"\n (keyup.enter)=\"toggleVote()\"\n>\n <ng-container *ngIf=\"canVote\">\n <ng-container *ngTemplateOutlet=\"checkmark\"></ng-container>\n </ng-container>\n <div class=\"str-chat__poll-option-data\">\n <p class=\"str-chat__poll-option-text\">{{ option?.text }}</p>\n <ng-container *ngIf=\"displayAvatarCount && votingVisibility === 'public'\">\n <div\n *ngFor=\"let vote of latestVotes; trackBy: trackByVoteId\"\n class=\"str-chat__poll-option-voters\"\n >\n <stream-avatar-placeholder\n location=\"poll-voter\"\n [user]=\"vote.user\"\n [imageUrl]=\"vote.user?.image\"\n [name]=\"vote.user?.name\"\n type=\"user\"\n ></stream-avatar-placeholder>\n </div>\n </ng-container>\n <div class=\"str-chat__poll-option-vote-count\">\n <ng-container *ngIf=\"voteCountVerbose; else count\">\n {{ 'streamChat.{{ count }} votes' | translate:{count: voteCount} }}\n </ng-container>\n <ng-template #count>\n {{ voteCount }}\n </ng-template>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"amountBar\"></ng-container>\n</div>\n\n<ng-template #checkmark>\n <div\n class=\"str-chat__checkmark\"\n [class.str-chat__checkmark--checked]=\"!!ownVote\"\n ></div>\n</ng-template>\n\n<ng-template #amountBar>\n <div\n class=\"str-chat__amount-bar str-chat__poll-option__votes-bar\"\n [class.str-chat__poll-option__votes-bar--winner]=\"isClosed && isWinner\"\n role=\"progressbar\"\n [ngStyle]=\"{\n '--str-chat__amount-bar-fulfillment':\n (winningOptionCount && voteCount / winningOptionCount) * 100 + '%'\n }\"\n ></div>\n</ng-template>\n" }]
130
+ }], propDecorators: { option: [{
131
+ type: Input
132
+ }], displayAvatarCount: [{
133
+ type: Input
134
+ }], voteCountVerbose: [{
135
+ type: Input
136
+ }] } });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1vcHRpb24tc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtb3B0aW9uLXNlbGVjdG9yL3BvbGwtb3B0aW9uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLW9wdGlvbi1zZWxlY3Rvci9wb2xsLW9wdGlvbi1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksR0FLYixNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFFckI7O0dBRUc7QUFPSCxNQUFNLE9BQU8sMkJBQ1gsU0FBUSxpQkFBaUI7SUFQM0I7O1FBV1csdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQWUsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBRyxDQUFDLENBQUM7S0ErSGxCO0lBN0hDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lB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O3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVBvbGxDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXBvbGwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGlzVm90ZUFuc3dlcixcbiAgUG9sbCxcbiAgUG9sbE9wdGlvbixcbiAgUG9sbFZvdGUsXG4gIFZvdGluZ1Zpc2liaWxpdHksXG59IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1vcHRpb24tc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1vcHRpb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbE9wdGlvblNlbGVjdG9yQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZVBvbGxDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgb3B0aW9uOiBQb2xsT3B0aW9uIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBkaXNwbGF5QXZhdGFyQ291bnQgPSAzO1xuICBASW5wdXQoKSB2b3RlQ291bnRWZXJib3NlID0gZmFsc2U7XG4gIGlzQ2xvc2VkID0gZmFsc2U7XG4gIGxhdGVzdFZvdGVzOiBQb2xsVm90ZVtdID0gW107XG4gIGlzV2lubmVyID0gZmFsc2U7XG4gIG93blZvdGU6IFBvbGxWb3RlIHwgdW5kZWZpbmVkO1xuICB2b3RlQ291bnQgPSAwO1xuICB2b3RpbmdWaXNpYmlsaXR5OiBWb3RpbmdWaXNpYmlsaXR5IHwgdW5kZWZpbmVkO1xuICB3aW5uaW5nT3B0aW9uQ291bnQgPSAwO1xuICBtYXhWb3RlQWxsb3dlZENvdW50ID0gMDtcbiAgb3duVm90ZUNvdW50ID0gMDtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgaWYgKGNoYW5nZXNbJ29wdGlvbiddKSB7XG4gICAgICB0aGlzLnNldHVwU3RhdGVTdG9yZVNlbGVjdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdG9nZ2xlVm90ZSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuVm90ZSB8fCAhdGhpcy5vcHRpb24/LmlkIHx8ICF0aGlzLm1lc3NhZ2VJZCB8fCB0aGlzLmlzQ2xvc2VkKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGhhdmVWb3RlZEZvclRoZU9wdGlvbiA9ICEhdGhpcy5vd25Wb3RlO1xuICAgIGlmIChcbiAgICAgICFoYXZlVm90ZWRGb3JUaGVPcHRpb24gJiZcbiAgICAgIHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudCA+IDAgJiZcbiAgICAgIHRoaXMub3duVm90ZUNvdW50ID49IHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudFxuICAgICkge1xuICAgICAgdGhpcy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LllvdSBoYXZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZvdGVzIGFsbG93ZWQnXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGhhdmVWb3RlZEZvclRoZU9wdGlvblxuICAgICAgICA/IHRoaXMucG9sbD8ucmVtb3ZlVm90ZSh0aGlzLm93blZvdGUhLmlkLCB0aGlzLm1lc3NhZ2VJZClcbiAgICAgICAgOiB0aGlzLnBvbGw/LmNhc3RWb3RlKHRoaXMub3B0aW9uPy5pZCwgdGhpcy5tZXNzYWdlSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgJ3N0cmVhbUNoYXQuRmFpbGVkIHRvIGNhc3Qgdm90ZSdcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Vm90ZUlkKF86IG51bWJlciwgdm90ZTogUG9sbFZvdGUpIHtcbiAgICByZXR1cm4gdm90ZS5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0ZVN0b3JlU2VsZWN0b3IoXG4gICAgcG9sbDogUG9sbCxcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBwb2xsLnN0YXRlLnN1YnNjcmliZVdpdGhTZWxlY3RvcihcbiAgICAgIChuZXh0VmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc19jbG9zZWQ6IG5leHRWYWx1ZS5pc19jbG9zZWQsXG4gICAgICAgICAgbGF0ZXN0X3ZvdGVzX2J5X29wdGlvbjogbmV4dFZhbHVlLmxhdGVzdF92b3Rlc19ieV9vcHRpb24sXG4gICAgICAgICAgbWF4Vm90ZWRPcHRpb25JZHM6IG5leHRWYWx1ZS5tYXhWb3RlZE9wdGlvbklkcyxcbiAgICAgICAgICBvd25Wb3Rlc0J5T3B0aW9uSWQ6IG5leHRWYWx1ZS5vd25Wb3Rlc0J5T3B0aW9uSWQsXG4gICAgICAgICAgdm90ZV9jb3VudHNfYnlfb3B0aW9uOiBuZXh0VmFsdWUudm90ZV9jb3VudHNfYnlfb3B0aW9uLFxuICAgICAgICAgIHZvdGluZ192aXNpYmlsaXR5OiBuZXh0VmFsdWUudm90aW5nX3Zpc2liaWxpdHksXG4gICAgICAgICAgbWF4X3ZvdGVzX2FsbG93ZWQ6IG5leHRWYWx1ZS5tYXhfdm90ZXNfYWxsb3dlZCxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgaXNDbG9zZWQgPSBzdGF0ZS5pc19jbG9zZWQ7XG4gICAgICAgIGNvbnN0IGxhdGVzdFZvdGVzID1cbiAgICAgICAgICBzdGF0ZS5sYXRlc3Rfdm90ZXNfYnlfb3B0aW9uW3RoaXMub3B0aW9uPy5pZCA/PyAnJ10/LmZpbHRlcihcbiAgICAgICAgICAgICh2b3RlKSA9PiAhIXZvdGUudXNlciAmJiAhaXNWb3RlQW5zd2VyKHZvdGUpXG4gICAgICAgICAgKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaXNXaW5uZXIgPVxuICAgICAgICAgIHN0YXRlLm1heFZvdGVkT3B0aW9uSWRzLmluY2x1ZGVzKHRoaXMub3B0aW9uPy5pZCA/PyAnJykgJiZcbiAgICAgICAgICBzdGF0ZS5tYXhWb3RlZE9wdGlvbklkcy5sZW5ndGggPT09IDE7XG4gICAgICAgIGNvbnN0IG93blZvdGUgPSBzdGF0ZS5vd25Wb3Rlc0J5T3B0aW9uSWRbdGhpcy5vcHRpb24/LmlkID8/ICcnXTtcbiAgICAgICAgY29uc3Qgdm90ZUNvdW50ID0gc3RhdGUudm90ZV9jb3VudHNfYnlfb3B0aW9uW3RoaXMub3B0aW9uPy5pZCA/PyAnJ107XG4gICAgICAgIGNvbnN0IHZvdGluZ1Zpc2liaWxpdHkgPSBzdGF0ZS52b3RpbmdfdmlzaWJpbGl0eTtcbiAgICAgICAgY29uc3Qgd2lubmluZ09wdGlvbkNvdW50ID1cbiAgICAgICAgICBzdGF0ZS52b3RlX2NvdW50c19ieV9vcHRpb25bc3RhdGUubWF4Vm90ZWRPcHRpb25JZHM/LlswXSA/PyAnJ107XG4gICAgICAgIGNvbnN0IG1heFZvdGVBbGxvd2VkQ291bnQgPSBzdGF0ZS5tYXhfdm90ZXNfYWxsb3dlZDtcbiAgICAgICAgY29uc3Qgb3duVm90ZUNvdW50ID0gT2JqZWN0LmtleXMoc3RhdGUub3duVm90ZXNCeU9wdGlvbklkKS5sZW5ndGg7XG5cbiAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlzQ2xvc2VkICE9PSB0aGlzLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5pc0Nsb3NlZCA9IGlzQ2xvc2VkID8/IGZhbHNlO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXRlc3RWb3RlcyAhPT0gdGhpcy5sYXRlc3RWb3Rlcykge1xuICAgICAgICAgIHRoaXMubGF0ZXN0Vm90ZXMgPSBsYXRlc3RWb3RlcyA/PyBbXTtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNXaW5uZXIgIT09IHRoaXMuaXNXaW5uZXIpIHtcbiAgICAgICAgICB0aGlzLmlzV2lubmVyID0gaXNXaW5uZXIgPz8gZmFsc2U7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZvdGUgIT09IHRoaXMub3duVm90ZSkge1xuICAgICAgICAgIHRoaXMub3duVm90ZSA9IG93blZvdGUgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2b3RlQ291bnQgIT09IHRoaXMudm90ZUNvdW50KSB7XG4gICAgICAgICAgdGhpcy52b3RlQ291bnQgPSB2b3RlQ291bnQgPz8gMDtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodm90aW5nVmlzaWJpbGl0eSAhPT0gdGhpcy52b3RpbmdWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgdGhpcy52b3RpbmdWaXNpYmlsaXR5ID0gdm90aW5nVmlzaWJpbGl0eSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbm5pbmdPcHRpb25Db3VudCAhPT0gdGhpcy53aW5uaW5nT3B0aW9uQ291bnQpIHtcbiAgICAgICAgICB0aGlzLndpbm5pbmdPcHRpb25Db3VudCA9IHdpbm5pbmdPcHRpb25Db3VudCA/PyAwO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWb3RlQWxsb3dlZENvdW50ICE9PSB0aGlzLm1heFZvdGVBbGxvd2VkQ291bnQpIHtcbiAgICAgICAgICB0aGlzLm1heFZvdGVBbGxvd2VkQ291bnQgPSBtYXhWb3RlQWxsb3dlZENvdW50ID8/IDA7XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG93blZvdGVDb3VudCAhPT0gdGhpcy5vd25Wb3RlQ291bnQpIHtcbiAgICAgICAgICB0aGlzLm93blZvdGVDb3VudCA9IG93blZvdGVDb3VudCA/PyAwO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkZuICYmXG4gICAgICAgICAgdGhpcy5tYXhWb3RlQWxsb3dlZENvdW50ID4gMCAmJlxuICAgICAgICAgIHRoaXMub3duVm90ZUNvdW50IDw9IHRoaXMubWF4Vm90ZUFsbG93ZWRDb3VudFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb25GbigpO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICBtYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzdHItY2hhdF9fcG9sbC1vcHRpb25cIlxuICBbY2xhc3Muc3RyLWNoYXRfX3BvbGwtb3B0aW9uLS12b3RhYmxlXT1cIlxuICAgICFpc0Nsb3NlZCAmJlxuICAgIGNhblZvdGUgJiZcbiAgICBtYXhWb3RlQWxsb3dlZENvdW50ICYmXG4gICAgb3duVm90ZUNvdW50IDwgbWF4Vm90ZUFsbG93ZWRDb3VudCAmJlxuICAgICFvd25Wb3RlXG4gIFwiXG4gIChjbGljayk9XCJ0b2dnbGVWb3RlKClcIlxuICAoa2V5dXAuZW50ZXIpPVwidG9nZ2xlVm90ZSgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblZvdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2ttYXJrXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uLWRhdGFcIj5cbiAgICA8cCBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi10ZXh0XCI+e3sgb3B0aW9uPy50ZXh0IH19PC9wPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaXNwbGF5QXZhdGFyQ291bnQgJiYgdm90aW5nVmlzaWJpbGl0eSA9PT0gJ3B1YmxpYydcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHZvdGUgb2YgbGF0ZXN0Vm90ZXM7IHRyYWNrQnk6IHRyYWNrQnlWb3RlSWRcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi12b3RlcnNcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICAgIGxvY2F0aW9uPVwicG9sbC12b3RlclwiXG4gICAgICAgICAgW3VzZXJdPVwidm90ZS51c2VyXCJcbiAgICAgICAgICBbaW1hZ2VVcmxdPVwidm90ZS51c2VyPy5pbWFnZVwiXG4gICAgICAgICAgW25hbWVdPVwidm90ZS51c2VyPy5uYW1lXCJcbiAgICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3BvbGwtb3B0aW9uLXZvdGUtY291bnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2b3RlQ291bnRWZXJib3NlOyBlbHNlIGNvdW50XCI+XG4gICAgICAgIHt7ICdzdHJlYW1DaGF0Lnt7IGNvdW50IH19IHZvdGVzJyB8IHRyYW5zbGF0ZTp7Y291bnQ6IHZvdGVDb3VudH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb3VudD5cbiAgICAgICAge3sgdm90ZUNvdW50IH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFtb3VudEJhclwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2hlY2ttYXJrPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY2hlY2ttYXJrXCJcbiAgICBbY2xhc3Muc3RyLWNoYXRfX2NoZWNrbWFyay0tY2hlY2tlZF09XCIhIW93blZvdGVcIlxuICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Ftb3VudEJhcj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2Ftb3VudC1iYXIgc3RyLWNoYXRfX3BvbGwtb3B0aW9uX192b3Rlcy1iYXJcIlxuICAgIFtjbGFzcy5zdHItY2hhdF9fcG9sbC1vcHRpb25fX3ZvdGVzLWJhci0td2lubmVyXT1cImlzQ2xvc2VkICYmIGlzV2lubmVyXCJcbiAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICctLXN0ci1jaGF0X19hbW91bnQtYmFyLWZ1bGZpbGxtZW50JzpcbiAgICAgICAgKHdpbm5pbmdPcHRpb25Db3VudCAmJiB2b3RlQ291bnQgLyB3aW5uaW5nT3B0aW9uQ291bnQpICogMTAwICsgJyUnXG4gICAgfVwiXG4gID48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { BasePollComponent } from '../base-poll.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../poll-option-selector/poll-option-selector.component";
6
+ /**
7
+ *
8
+ */
9
+ export class PollOptionsListComponent extends BasePollComponent {
10
+ constructor() {
11
+ super(...arguments);
12
+ /**
13
+ * How many options should be displayed. If there are more options than this number, use the poll actions to display all options
14
+ */
15
+ this.maxOptionsDisplayed = 10;
16
+ this.options = [];
17
+ }
18
+ stateStoreSelector(poll, markForCheck) {
19
+ const unsubscribe = poll.state.subscribeWithSelector((state) => ({
20
+ options: state.options,
21
+ }), (state) => {
22
+ this.options = state.options;
23
+ markForCheck();
24
+ });
25
+ return unsubscribe;
26
+ }
27
+ trackByOptionId(_, option) {
28
+ return option.id;
29
+ }
30
+ }
31
+ PollOptionsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionsListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
32
+ PollOptionsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollOptionsListComponent, selector: "stream-poll-options-list", inputs: { maxOptionsDisplayed: "maxOptionsDisplayed" }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"str-chat__poll-option-list\"\n [class.str-chat__poll-option-list--full]=\"\n !maxOptionsDisplayed || maxOptionsDisplayed === options.length\n \"\n>\n <ng-container\n *ngFor=\"\n let option of options | slice : 0 : maxOptionsDisplayed;\n trackBy: trackByOptionId\n \"\n >\n <stream-poll-option-selector\n [option]=\"option\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-option-selector>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.PollOptionSelectorComponent, selector: "stream-poll-option-selector", inputs: ["option", "displayAvatarCount", "voteCountVerbose"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollOptionsListComponent, decorators: [{
34
+ type: Component,
35
+ args: [{ selector: 'stream-poll-options-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__poll-option-list\"\n [class.str-chat__poll-option-list--full]=\"\n !maxOptionsDisplayed || maxOptionsDisplayed === options.length\n \"\n>\n <ng-container\n *ngFor=\"\n let option of options | slice : 0 : maxOptionsDisplayed;\n trackBy: trackByOptionId\n \"\n >\n <stream-poll-option-selector\n [option]=\"option\"\n [messageId]=\"messageId\"\n [pollId]=\"pollId\"\n ></stream-poll-option-selector>\n </ng-container>\n</div>\n" }]
36
+ }], propDecorators: { maxOptionsDisplayed: [{
37
+ type: Input
38
+ }] } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1vcHRpb25zLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3BvbGxzL3BvbGwtb3B0aW9ucy1saXN0L3BvbGwtb3B0aW9ucy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLW9wdGlvbnMtbGlzdC9wb2xsLW9wdGlvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUczRDs7R0FFRztBQU9ILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxpQkFBaUI7SUFOL0Q7O1FBT0U7O1dBRUc7UUFDTSx3QkFBbUIsR0FBdUIsRUFBRSxDQUFDO1FBQ3RELFlBQU8sR0FBaUIsRUFBRSxDQUFDO0tBc0I1QjtJQXBCVyxrQkFBa0IsQ0FDMUIsSUFBVSxFQUNWLFlBQXdCO1FBRXhCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQ2xELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsRUFDRixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzdCLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFTLEVBQUUsTUFBa0I7UUFDM0MsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7O3FIQTFCVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwrSUNickMsa2ZBbUJBOzJGRE5hLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07OEJBTXRDLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlUG9sbENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtcG9sbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9sbCwgUG9sbE9wdGlvbiB9IGZyb20gJ3N0cmVhbS1jaGF0JztcblxuLyoqXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tcG9sbC1vcHRpb25zLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9sbC1vcHRpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbE9wdGlvbnNMaXN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZVBvbGxDb21wb25lbnQge1xuICAvKipcbiAgICogSG93IG1hbnkgb3B0aW9ucyBzaG91bGQgYmUgZGlzcGxheWVkLiBJZiB0aGVyZSBhcmUgbW9yZSBvcHRpb25zIHRoYW4gdGhpcyBudW1iZXIsIHVzZSB0aGUgcG9sbCBhY3Rpb25zIHRvIGRpc3BsYXkgYWxsIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIG1heE9wdGlvbnNEaXNwbGF5ZWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDEwO1xuICBvcHRpb25zOiBQb2xsT3B0aW9uW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgc3RhdGVTdG9yZVNlbGVjdG9yKFxuICAgIHBvbGw6IFBvbGwsXG4gICAgbWFya0ZvckNoZWNrOiAoKSA9PiB2b2lkXG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gcG9sbC5zdGF0ZS5zdWJzY3JpYmVXaXRoU2VsZWN0b3IoXG4gICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgIG9wdGlvbnM6IHN0YXRlLm9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBzdGF0ZS5vcHRpb25zO1xuICAgICAgICBtYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbklkKF86IG51bWJlciwgb3B0aW9uOiBQb2xsT3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5pZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInN0ci1jaGF0X19wb2xsLW9wdGlvbi1saXN0XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19wb2xsLW9wdGlvbi1saXN0LS1mdWxsXT1cIlxuICAgICFtYXhPcHRpb25zRGlzcGxheWVkIHx8IG1heE9wdGlvbnNEaXNwbGF5ZWQgPT09IG9wdGlvbnMubGVuZ3RoXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJcbiAgICAgIGxldCBvcHRpb24gb2Ygb3B0aW9ucyB8IHNsaWNlIDogMCA6IG1heE9wdGlvbnNEaXNwbGF5ZWQ7XG4gICAgICB0cmFja0J5OiB0cmFja0J5T3B0aW9uSWRcbiAgICBcIlxuICA+XG4gICAgPHN0cmVhbS1wb2xsLW9wdGlvbi1zZWxlY3RvclxuICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlSWRcIlxuICAgICAgW3BvbGxJZF09XCJwb2xsSWRcIlxuICAgID48L3N0cmVhbS1wb2xsLW9wdGlvbi1zZWxlY3Rvcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { BasePollComponent } from '../base-poll.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ *
6
+ */
7
+ export class PollPreviewComponent extends BasePollComponent {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.name = '';
11
+ this.isClosed = false;
12
+ }
13
+ stateStoreSelector(poll, markForCheck) {
14
+ const unsubscribe = poll.state.subscribeWithSelector((state) => ({
15
+ name: state.name,
16
+ is_closed: state.is_closed,
17
+ }), (state) => {
18
+ this.name = state.name;
19
+ this.isClosed = state.is_closed ?? false;
20
+ markForCheck();
21
+ });
22
+ return unsubscribe;
23
+ }
24
+ }
25
+ PollPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
26
+ PollPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: PollPreviewComponent, selector: "stream-poll-preview", usesInheritance: true, ngImport: i0, template: "<div\n class=\"str-chat__quoted-poll-preview\"\n [class.str-chat__quoted-poll-preview--closed]=\"isClosed\"\n>\n <div class=\"str-chat__quoted-poll-preview__icon\">\uD83D\uDCCA</div>\n <div class=\"str-chat__quoted-poll-preview__name\">{{ name }}</div>\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PollPreviewComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ selector: 'stream-poll-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"str-chat__quoted-poll-preview\"\n [class.str-chat__quoted-poll-preview--closed]=\"isClosed\"\n>\n <div class=\"str-chat__quoted-poll-preview__icon\">\uD83D\uDCCA</div>\n <div class=\"str-chat__quoted-poll-preview__name\">{{ name }}</div>\n</div>\n" }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLXByZXZpZXcvcG9sbC1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9wb2xscy9wb2xsLXByZXZpZXcvcG9sbC1wcmV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRzNEOztHQUVHO0FBT0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGlCQUFpQjtJQU4zRDs7UUFPRSxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztLQW9CbEI7SUFsQlcsa0JBQWtCLENBQzFCLElBQVUsRUFDVixZQUF3QjtRQUV4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUNsRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDM0IsQ0FBQyxFQUNGLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztZQUN6QyxZQUFZLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O2lIQXJCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixrRkNiakMsNFFBT0E7MkZETWEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVBvbGxDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXBvbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBvbGwgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5cbi8qKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLXBvbGwtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2xsLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUG9sbFByZXZpZXdDb21wb25lbnQgZXh0ZW5kcyBCYXNlUG9sbENvbXBvbmVudCB7XG4gIG5hbWUgPSAnJztcbiAgaXNDbG9zZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc3RhdGVTdG9yZVNlbGVjdG9yKFxuICAgIHBvbGw6IFBvbGwsXG4gICAgbWFya0ZvckNoZWNrOiAoKSA9PiB2b2lkXG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gcG9sbC5zdGF0ZS5zdWJzY3JpYmVXaXRoU2VsZWN0b3IoXG4gICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIGlzX2Nsb3NlZDogc3RhdGUuaXNfY2xvc2VkLFxuICAgICAgfSksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5uYW1lID0gc3RhdGUubmFtZTtcbiAgICAgICAgdGhpcy5pc0Nsb3NlZCA9IHN0YXRlLmlzX2Nsb3NlZCA/PyBmYWxzZTtcbiAgICAgICAgbWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtcG9sbC1wcmV2aWV3XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19xdW90ZWQtcG9sbC1wcmV2aWV3LS1jbG9zZWRdPVwiaXNDbG9zZWRcIlxuPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3F1b3RlZC1wb2xsLXByZXZpZXdfX2ljb25cIj7wn5OKPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLXBvbGwtcHJldmlld19fbmFtZVwiPnt7IG5hbWUgfX08L2Rpdj5cbjwvZGl2PlxuIl19